<?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>93932</bug_id>
          
          <creation_ts>2012-08-13 22:25:58 -0700</creation_ts>
          <short_desc>Move page popup resources to separate directory</short_desc>
          <delta_ts>2012-08-14 01:48:44 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Keishi Hattori">keishi</reporter>
          <assigned_to name="Keishi Hattori">keishi</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>694511</commentid>
    <comment_count>0</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-08-13 22:25:58 -0700</bug_when>
    <thetext>The number of page popup related resources is increasing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694538</commentid>
    <comment_count>1</comment_count>
      <attachid>158225</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-08-13 23:06:51 -0700</bug_when>
    <thetext>Created attachment 158225
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694541</commentid>
    <comment_count>2</comment_count>
      <attachid>158225</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-13 23:10:17 -0700</bug_when>
    <thetext>Comment on attachment 158225
Patch

Attachment 158225 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13487589</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694585</commentid>
    <comment_count>3</comment_count>
      <attachid>158239</attachid>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-08-14 00:09:39 -0700</bug_when>
    <thetext>Created attachment 158239
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694656</commentid>
    <comment_count>4</comment_count>
      <attachid>158239</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-08-14 01:29:13 -0700</bug_when>
    <thetext>Comment on attachment 158239
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694674</commentid>
    <comment_count>5</comment_count>
      <attachid>158239</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-14 01:48:41 -0700</bug_when>
    <thetext>Comment on attachment 158239
Patch

Clearing flags on attachment: 158239

Committed r125523: &lt;http://trac.webkit.org/changeset/125523&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>694675</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-14 01:48:44 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158225</attachid>
            <date>2012-08-13 23:06:51 -0700</date>
            <delta_ts>2012-08-13 23:51:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93932-20120814150618.patch</filename>
            <type>text/plain</type>
            <size>128421</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg4YWU4YTNjNDUyYTYw
N2ZiMzBmMGNiMmUyNWVjOWJiNTA4OWI3Ny4uYzQ5OWQ3YTI0YjFlOGE1YjU0Yjc3ODYyOWVjNDZh
ODJlOWJlMmVmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA4LTE0ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgcGFnZSBwb3B1
cCByZXNvdXJjZXMgdG8gc2VwYXJhdGUgZGlyZWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzkzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEtlZXBpbmcgdGhlIHJlc291cmNlcyBvcmdhbml6ZWQu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogUmVzb3VyY2VzL3BhZ2Vwb3B1
cHMvY2FsZW5kYXJQaWNrZXIuY3NzOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL2NhbGVuZGFyUGlja2VyLmNzcy4KKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBvcHVwcy9j
YWxlbmRhclBpY2tlci5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9j
YWxlbmRhclBpY2tlci5qcy4KKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRh
clBpY2tlck1hYy5jc3M6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2Fs
ZW5kYXJQaWNrZXJNYWMuY3NzLgorICAgICAgICAqIFJlc291cmNlcy9wYWdlcG9wdXBzL2NvbG9y
U3VnZ2VzdGlvblBpY2tlci5jc3M6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9SZXNvdXJj
ZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmNzcy4KKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBv
cHVwcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9SZXNvdXJjZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzLgorCiAyMDEyLTA4LTEzICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBmYWRlIGlu
IHRyYW5zaXRpb24gZnJvbSBjYWxlbmRhciBwaWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJj
ZXMvY2FsZW5kYXJQaWNrZXIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MThh
MjVhZDE4MjMxYjQ5NzA4NGUzYWJmMTk0NjUzYWUxMDA2M2RhLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxl
bmRhclBpY2tlci5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWJvZHkgewotICAg
IC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7
Ci0gICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOwotICAgIG1hcmdpbjogMDsKLSAgICBv
dmVyZmxvdzogaGlkZGVuOwotfQotCi0ubm8tZm9jdXMtcmluZyA6Zm9jdXMgewotICAgIG91dGxp
bmU6IG5vbmU7Ci19Ci0KLSNtYWluIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAg
ICBib3JkZXI6IHNvbGlkIDFweCAjODg5OWFhOwotICAgIGJveC1zaGFkb3c6IGluc2V0IDJweCAy
cHggMnB4IHdoaXRlLAotICAgICAgICBpbnNldCAtMnB4IC0ycHggMXB4IHJnYmEoMCwwLDAsMC4x
KTsKLSAgICBwYWRkaW5nOiA2cHg7Ci0gICAgd2hpdGVzcGFjZTogbm93cmFwOwotICAgIC8qIHdp
ZHRoIGlzIHJlc2V0IGluIHRoZSBKUyBjb2RlLiAqLwotICAgIHdpZHRoOiA1MDBweDsKLX0KLQot
LnllYXItbW9udGgtYXJlYSB7Ci19Ci0KLS55ZWFyLW1vbnRoLXVwcGVyIHsKLSAgICAvKiBkaXNw
bGF5Oi13ZWJraXQtYm94OyBpcyBhZGRlZCBpbiB0aGUgSlMgY29kZS4gKi8KLX0KLQotLnllYXIt
c2VsZWN0b3IgewotICAgIHRleHQtYWxpZ246IHJpZ2h0OwotICAgIHdpZHRoOiA2ZW07Ci19Ci0K
LS5tb250aC1zZWxlY3Rvci1ib3ggewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgLXdlYmtpdC1ib3gtZmxleDogMjsKLX0KLQotLm1vbnRo
LXNlbGVjdG9yIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBjdXJzb3I6IHBv
aW50ZXI7Ci0gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotICAgIHBhZGRpbmc6IDNweCA2cHgg
M3B4IDZweDsKLX0KLS5tb250aC1zZWxlY3RvcjphZnRlciB7Ci0gICAgY29udGVudDogIiDilrwi
OwotICAgIGZvbnQtc2l6ZTogc21hbGxlcjsKLX0KLQotLm1vbnRoLXNlbGVjdG9yLXBvcHVwIHsK
LSAgICAtd2Via2l0LWJveC1zaXppbmc6IGNvbnRlbnQtYm94OwotICAgIC13ZWJraXQtYm94LXNo
YWRvdzoKLSAgICAgICAgMCAwIDAgMXB4IHJnYmEoMCwwLDAsMC4xKSwKLSAgICAgICAgMCA1cHgg
MXB4IDFweCByZ2JhKDAsMCwwLDAuMSksCi0gICAgICAgIDAgNXB4IDJweCAxcHggcmdiYSgwLDAs
MCwwLjEpLAotICAgICAgICAwIDVweCAxMnB4IDFweCByZ2JhKDAsMCwwLDAuNSk7Ci0gICAgYmFj
a2dyb3VuZDogI2ZmZjsKLSAgICBkaXNwbGF5OiBub25lOwotICAgIG1heC1oZWlnaHQ6IDEwLjhl
bTsKLSAgICBvdmVyZmxvdy14OiBoaWRkZW47Ci0gICAgb3ZlcmZsb3cteTogYXV0bzsKLSAgICBw
b3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLQotLm1vbnRo
LXNlbGVjdG9yLXBvcHVwLWNvbnRlbnRzIHsKLSAgICBkaXNwbGF5OiB0YWJsZTsKLX0KLQotLm1v
bnRoLXNlbGVjdG9yLXBvcHVwLWVudHJ5IHsKLSAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDVw
eDsKLSAgICAtd2Via2l0LXBhZGRpbmctZW5kOiA1cHg7Ci0gICAgY3Vyc29yOiBwb2ludGVyOwot
ICAgIGRpc3BsYXk7IHRhYmxlLXJvdzsKLSAgICBsaW5lLWhlaWdodDogMS4yZW07Ci19Ci0KLS5z
ZWxlY3RlZC1tb250aC15ZWFyIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoaWdobGlnaHQ7Ci0g
ICAgY29sb3I6IGhpZ2hsaWdodHRleHQ7Ci0gICAgdGV4dC1zaGFkb3c6IG5vbmU7Ci19Ci0KLUBt
ZWRpYSAocG9pbnRlcjpjb2Fyc2UpIHsKLQotICAgIC5tb250aC1zZWxlY3Rvci1wb3B1cCB7Ci0g
ICAgICAgIG1heC1oZWlnaHQ6IDE1MHB4OwotICAgIH0KLQotICAgIC5tb250aC1zZWxlY3Rvci1w
b3B1cC1lbnRyeSB7Ci0gICAgICAgIGxpbmUtaGVpZ2h0OiAzMHB4OwotICAgIH0KLX0KLQotLm1v
bnRoLXNlbGVjdG9yLXdhbGwgewotICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgaGVpZ2h0OiAxMDAl
OwotICAgIGxlZnQ6IDBweDsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwcHg7
Ci0gICAgd2lkdGg6IDEwMCU7Ci19Ci0KLS55ZWFyLW1vbnRoLWJ1dHRvbi1sZWZ0IHsKLSAgICBk
aXNwbGF5OiBpbmxpbmUtYmxvY2s7Ci19Ci0KLS55ZWFyLW1vbnRoLWJ1dHRvbi1yaWdodCB7Ci0g
ICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwotfQotCi0uZGF5cy1hcmVhLWNvbnRhaW5lciB7Ci0g
ICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggYmxhY2s7
Ci0gICAgbWFyZ2luLWJvdHRvbTogNHB4OwotICAgIG1hcmdpbi10b3A6IDRweDsKLSAgICBvdmVy
ZmxvdzogaGlkZGVuOwotfQotCi0uZGF5cy1hcmVhIHsgLyogPHRhYmxlPiAqLwotICAgIGJhY2tn
cm91bmQtY29sb3I6IHdoaXRlOwotICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7Ci0gICAg
Ym9yZGVyLXNwYWNpbmc6IDBweDsKLSAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7Ci0g
ICAgLyogdGFibGUtbGF5b3V0OmZpeGVkIGFuZCB3aWR0aDoxMDAlIGFyZSBhZGRlZCBpbiB0aGUg
SlMgY29kZS4gKi8KLX0KLQotLmRheS1sYWJlbCB7IC8qIDx0aD4gKi8KLSAgICAtd2Via2l0LWJv
eC1zaXppbmc6IGJvcmRlci1ib3g7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTlmZjsKLSAg
ICBib3JkZXItbGVmdC1jb2xvcjogI2YwZjRmZjsKLSAgICBib3JkZXItdG9wLWNvbG9yOiAjZjBm
NGZmOwotICAgIGJvcmRlcjogc29saWQgMXB4ICNkMGQ0ZjA7Ci0gICAgY29sb3I6ICMyMGM7Ci0g
ICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS5k
YXkgeyAvKiA8dGQ+ICovCi0gICAgcGFkZGluZzogMXB4OwotICAgIHRleHQtYWxpZ246IGNlbnRl
cjsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCB3
aGl0ZTsKLSAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Ci19Ci0KLUBtZWRpYSAo
cG9pbnRlcjpjb2Fyc2UpIHsKLSAgICAuZGF5IHsKLSAgICAgICAgbWluLXdpZHRoOiAyOHB4Owot
ICAgICAgICBsaW5lLWhlaWdodDogMjhweDsKLSAgICB9Ci19Ci0KLS5hdmFpbGFibGUgewotICAg
IGN1cnNvcjogZGVmYXVsdDsKLSAgICBmb250LXdlaWdodDogNzAwOwotICAgIGJhY2tncm91bmQt
Y29sb3I6IHdoaXRlOwotICAgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOwotICAgIGJvcmRlci1y
YWRpdXM6IDVweDsKLSAgICAtd2Via2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Ci19Ci0K
LS5ub3QtdGhpcy1tb250aCB7Ci0gICAgY29sb3I6IGdyYXl0ZXh0OwotICAgIGZvbnQtd2VpZ2h0
OiA0MDA7Ci0gICAgdGV4dC1zaGFkb3c6IG5vbmU7Ci19Ci0KLS5hdmFpbGFibGUuZGF5LXNlbGVj
dGVkIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoaWdobGlnaHQ7Ci0gICAgY29sb3I6IGhpZ2hs
aWdodHRleHQ7Ci0gICAgdGV4dC1zaGFkb3c6IG5vbmU7Ci19Ci0KLS51bmF2YWlsYWJsZSB7Ci0g
ICAgY3Vyc29yOiBkZWZhdWx0OwotICAgIGNvbG9yOiBncmF5dGV4dDsKLSAgICBiYWNrZ3JvdW5k
LWNvbG9yOiAjZWVlOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7Ci0gICAgLXdlYmtpdC10
cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyBlYXNlOwotfQotCi0udW5hdmFpbGFibGUuZGF5
LXNlbGVjdGVkIHsKLSAgICBib3JkZXI6IDFweCBzb2xpZCBoaWdobGlnaHQ7Ci19Ci0KLS5jYW5j
ZWwtYnV0dG9uIHsKLSAgICBmbG9hdDogcmlnaHQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJj
ZXMvY2FsZW5kYXJQaWNrZXIuanMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZWQ3
MjFkNjAyMGE4ODA2YWFmNDA4MmNjZTQ1MzA1ODMyMTZjZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVu
ZGFyUGlja2VyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMTIzOSArMCwwIEBACi0idXNlIHN0cmlj
dCI7Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotLy8gRklYTUU6Ci0vLyAgLSBUb3VjaCBldmVudAotCi0vKioKLSAqIENTUyBjbGFzcyBuYW1l
cy4KLSAqCi0gKiBAZW51bSB7c3RyaW5nfQotICovCi12YXIgQ2xhc3NOYW1lcyA9IHsKLSAgICBB
dmFpbGFibGU6ICJhdmFpbGFibGUiLAotICAgIENhbmNlbEJ1dHRvbjogImNhbmNlbC1idXR0b24i
LAotICAgIENsZWFyQnV0dG9uOiAiY2xlYXItYnV0dG9uIiwKLSAgICBEYXk6ICJkYXkiLAotICAg
IERheUxhYmVsOiAiZGF5LWxhYmVsIiwKLSAgICBEYXlMYWJlbENvbnRhaW5lcjogImRheS1sYWJl
bC1jb250YWluZXIiLAotICAgIERheXNBcmVhOiAiZGF5cy1hcmVhIiwKLSAgICBEYXlzQXJlYUNv
bnRhaW5lcjogImRheXMtYXJlYS1jb250YWluZXIiLAotICAgIE1vbnRoU2VsZWN0b3I6ICJtb250
aC1zZWxlY3RvciIsCi0gICAgTW9udGhTZWxlY3RvckJveDogIm1vbnRoLXNlbGVjdG9yLWJveCIs
Ci0gICAgTW9udGhTZWxlY3RvclBvcHVwOiAibW9udGgtc2VsZWN0b3ItcG9wdXAiLAotICAgIE1v
bnRoU2VsZWN0b3JQb3B1cENvbnRlbnRzOiAibW9udGgtc2VsZWN0b3ItcG9wdXAtY29udGVudHMi
LAotICAgIE1vbnRoU2VsZWN0b3JQb3B1cEVudHJ5OiAibW9udGgtc2VsZWN0b3ItcG9wdXAtZW50
cnkiLAotICAgIE1vbnRoU2VsZWN0b3JQb3B1cFNpemVyOiAibW9udGgtc2VsZWN0b3ItcG9wdXAt
c2l6ZXIiLAotICAgIE1vbnRoU2VsZWN0b3JXYWxsOiAibW9udGgtc2VsZWN0b3Itd2FsbCIsCi0g
ICAgTm9Gb2N1c1Jpbmc6ICJuby1mb2N1cy1yaW5nIiwKLSAgICBOb3RUaGlzTW9udGg6ICJub3Qt
dGhpcy1tb250aCIsCi0gICAgU2VsZWN0ZWQ6ICJkYXktc2VsZWN0ZWQiLAotICAgIFNlbGVjdGVk
TW9udGhZZWFyOiAic2VsZWN0ZWQtbW9udGgteWVhciIsCi0gICAgVG9kYXlCdXR0b246ICJ0b2Rh
eS1idXR0b24iLAotICAgIFRvZGF5Q2xlYXJBcmVhOiAidG9kYXktY2xlYXItYXJlYSIsCi0gICAg
VW5hdmFpbGFibGU6ICJ1bmF2YWlsYWJsZSIsCi0gICAgV2Vla0NvbnRhaW5lcjogIndlZWstY29u
dGFpbmVyIiwKLSAgICBZZWFyTW9udGhBcmVhOiAieWVhci1tb250aC1hcmVhIiwKLSAgICBZZWFy
TW9udGhCdXR0b246ICJ5ZWFyLW1vbnRoLWJ1dHRvbiIsCi0gICAgWWVhck1vbnRoQnV0dG9uTGVm
dDogInllYXItbW9udGgtYnV0dG9uLWxlZnQiLAotICAgIFllYXJNb250aEJ1dHRvblJpZ2h0OiAi
eWVhci1tb250aC1idXR0b24tcmlnaHQiLAotICAgIFllYXJNb250aFVwcGVyOiAieWVhci1tb250
aC11cHBlciIKLX07Ci0KLS8qKgotICogQHR5cGUge09iamVjdH0KLSAqLwotdmFyIGdsb2JhbCA9
IHsKLSAgICBhcmd1bWVudHNSZWNlaXZlZDogZmFsc2UsCi0gICAgaGFkS2V5RXZlbnQ6IGZhbHNl
LAotICAgIHBhcmFtczogbnVsbAotfTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVXRpbGl0eSBmdW5jdGlv
bnMKLQotLyoqCi0gKiBAcGFyYW0geyFzdHJpbmd9IGlkCi0gKi8KLWZ1bmN0aW9uICQoaWQpIHsK
LSAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwotfQotCi1mdW5jdGlvbiBi
aW5kKGZ1bmMsIGNvbnRleHQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJl
dHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7Ci0gICAgfTsKLX0KLQotLyoqCi0g
KiBAcGFyYW0geyFzdHJpbmd9IHRhZ05hbWUKLSAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X2NsYXNz
Ci0gKiBAcGFyYW0ge3N0cmluZz19IG9wdF90ZXh0Ci0gKiBAcmV0dXJuIHshRWxlbWVudH0KLSAq
LwotZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7
Ci0gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAg
IGlmIChvcHRfY2xhc3MpCi0gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG9w
dF9jbGFzcyk7Ci0gICAgaWYgKG9wdF90ZXh0KQotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7
Ci19Ci0KLS8qKgotICogQHJldHVybiB7IXN0cmluZ30gbG93ZXJjYXNlIGxvY2FsZSBuYW1lLiBl
LmcuICJlbi11cyIKLSAqLwotZnVuY3Rpb24gZ2V0TG9jYWxlKCkgewotICAgIHJldHVybiAoZ2xv
YmFsLnBhcmFtcy5sb2NhbGUgfHwgImVuLXVzIikudG9Mb3dlckNhc2UoKTsKLX0KLQotLyoqCi0g
KiBAcmV0dXJuIHshc3RyaW5nfSBsb3dlcmNhc2UgbGFuZ3VhZ2UgY29kZS4gZS5nLiAiZW4iCi0g
Ki8KLWZ1bmN0aW9uIGdldExhbmd1YWdlKCkgewotICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUo
KTsKLSAgICB2YXIgcmVzdWx0ID0gbG9jYWxlLm1hdGNoKC9eKFthLXpdKykvKTsKLSAgICBpZiAo
IXJlc3VsdCkKLSAgICAgICAgcmV0dXJuICJlbiI7Ci0gICAgcmV0dXJuIHJlc3VsdFsxXTsKLX0K
LQotLyoKLSAqIEBjb25zdAotICogQHR5cGUge251bWJlcn0KLSAqLwotdmFyIEltcGVyaWFsRXJh
TGltaXQgPSAyMDg3OwotCi0vKioKLSAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgotICogQHBhcmFt
IHshbnVtYmVyfSBtb250aAotICogQHJldHVybiB7IXN0cmluZ30KLSAqLwotZnVuY3Rpb24gZm9y
bWF0SmFwYW5lc2VJbXBlcmlhbEVyYSh5ZWFyLCBtb250aCkgewotICAgIC8vIFdlIGRvbid0IHNo
b3cgYW4gaW1wZXJpYWwgZXJhIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiA5OSBiZWNhc2Ugb2Ygc3Bh
Y2UKLSAgICAvLyBsaW1pdGF0aW9uLgotICAgIGlmICh5ZWFyID4gSW1wZXJpYWxFcmFMaW1pdCkK
LSAgICAgICAgcmV0dXJuICIiOwotICAgIGlmICh5ZWFyID4gMTk4OSkKLSAgICAgICAgcmV0dXJu
ICIo5bmz5oiQIiArICh5ZWFyIC0gMTk4OCkgKyAi5bm0KSI7Ci0gICAgaWYgKHllYXIgPT0gMTk4
OSkKLSAgICAgICAgcmV0dXJuICIo5bmz5oiQ5YWD5bm0KSI7Ci0gICAgaWYgKHllYXIgPj0gMTky
NykKLSAgICAgICAgcmV0dXJuICIo5pit5ZKMIiArICh5ZWFyIC0gMTkyNSkgKyAi5bm0KSI7Ci0g
ICAgaWYgKHllYXIgPiAxOTEyKQotICAgICAgICByZXR1cm4gIijlpKfmraMiICsgKHllYXIgLSAx
OTExKSArICLlubQpIjsKLSAgICBpZiAoeWVhciA9PSAxOTEyICYmIG1vbnRoID49IDcpCi0gICAg
ICAgIHJldHVybiAiKOWkp+ato+WFg+W5tCkiOwotICAgIGlmICh5ZWFyID4gMTg2OCkKLSAgICAg
ICAgcmV0dXJuICIo5piO5rK7IiArICh5ZWFyIC0gMTg2NykgKyAi5bm0KSI7Ci0gICAgaWYgKHll
YXIgPT0gMTg2OCkKLSAgICAgICAgcmV0dXJuICIo5piO5rK75YWD5bm0KSI7Ci0gICAgcmV0dXJu
ICIiOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgotICogQHBhcmFtIHshbnVt
YmVyfSBtb250aAotICogQHJldHVybiB7IXN0cmluZ30KLSAqLwotZnVuY3Rpb24gZm9ybWF0WWVh
ck1vbnRoKHllYXIsIG1vbnRoKSB7Ci0gICAgLy8gRklYTUU6IE5lZWQgbG9jYWxpemVkIG51bWJl
cj8KLSAgICB2YXIgeWVhclN0cmluZyA9IFN0cmluZyh5ZWFyKTsKLSAgICB2YXIgbW9udGhTdHJp
bmcgPSBnbG9iYWwucGFyYW1zLm1vbnRoTGFiZWxzW21vbnRoXTsKLSAgICBzd2l0Y2ggKGdldExh
bmd1YWdlKCkpIHsKLSAgICBjYXNlICJldSI6Ci0gICAgY2FzZSAiZmlsIjoKLSAgICBjYXNlICJs
dCI6Ci0gICAgY2FzZSAibWwiOgotICAgIGNhc2UgIm10IjoKLSAgICBjYXNlICJ0bCI6Ci0gICAg
Y2FzZSAidXIiOgotICAgICAgICByZXR1cm4geWVhclN0cmluZyArICIgIiArIG1vbnRoU3RyaW5n
OwotICAgIGNhc2UgImh1IjoKLSAgICAgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLiAiICsgbW9u
dGhTdHJpbmc7Ci0gICAgY2FzZSAiamEiOgotICAgICAgICByZXR1cm4geWVhclN0cmluZyArICLl
ubQiICsgZm9ybWF0SmFwYW5lc2VJbXBlcmlhbEVyYSh5ZWFyLCBtb250aCkgKyAiICIgKyBtb250
aFN0cmluZzsKLSAgICBjYXNlICJ6aCI6Ci0gICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuW5
tCIgKyBtb250aFN0cmluZzsKLSAgICBjYXNlICJrbyI6Ci0gICAgICAgIHJldHVybiB5ZWFyU3Ry
aW5nICsgIuuFhCAiICsgbW9udGhTdHJpbmc7Ci0gICAgY2FzZSAibHYiOgotICAgICAgICByZXR1
cm4geWVhclN0cmluZyArICIuIGcuICIgKyBtb250aFN0cmluZzsKLSAgICBjYXNlICJwdCI6Ci0g
ICAgICAgIHJldHVybiBtb250aFN0cmluZyArICIgZGUgIiArIHllYXJTdHJpbmc7Ci0gICAgY2Fz
ZSAic3IiOgotICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAiLiAiICsgeWVhclN0cmluZzsK
LSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAiICIgKyB5ZWFyU3Ry
aW5nOwotICAgIH0KLX0KLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZz19IG9wdF9jdXJyZW50Ci0g
KiBAcmV0dXJuIHshRGF0ZX0KLSAqLwotZnVuY3Rpb24gcGFyc2VEYXRlU3RyaW5nKG9wdF9jdXJy
ZW50KSB7Ci0gICAgaWYgKG9wdF9jdXJyZW50KSB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBvcHRf
Y3VycmVudC5tYXRjaCgvKFxkKyktKFxkKyktKFxkKykvKTsKLSAgICAgICAgaWYgKHJlc3VsdCkK
LSAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhOdW1iZXIocmVzdWx0WzFdKSwg
TnVtYmVyKHJlc3VsdFsyXSkgLSAxLCBOdW1iZXIocmVzdWx0WzNdKSkpOwotICAgIH0KLSAgICB2
YXIgbm93ID0gbmV3IERhdGUoKTsKLSAgICAvLyBDcmVhdGUgVVRDIGRhdGUgd2l0aCBzYW1lIG51
bWJlcnMgYXMgbG9jYWwgZGF0ZS4KLSAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobm93Lmdl
dEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKSk7Ci19Ci0KLS8qKgot
ICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCi0gKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCi0gKiBA
cGFyYW0geyFudW1iZXJ9IGRheQotICogQHJldHVybiB7IXN0cmluZ30KLSAqLwotZnVuY3Rpb24g
c2VyaWFsaXplRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB7Ci0gICAgdmFyIHllYXJTdHJpbmcgPSBT
dHJpbmcoeWVhcik7Ci0gICAgaWYgKHllYXJTdHJpbmcubGVuZ3RoIDwgNCkKLSAgICAgICAgeWVh
clN0cmluZyA9ICgiMDAwIiArIHllYXJTdHJpbmcpLnN1YnN0cigtNCwgNCk7Ci0gICAgcmV0dXJu
IHllYXJTdHJpbmcgKyAiLSIgKyAoIjAiICsgKG1vbnRoICsgMSkpLnN1YnN0cigtMiwgMikgKyAi
LSIgKyAoIjAiICsgZGF5KS5zdWJzdHIoLTIsIDIpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IW51
bWJlcn0gd2lkdGgKLSAqIEBwYXJhbSB7IW51bWJlcn0gaGVpZ2h0Ci0gKi8KLWZ1bmN0aW9uIHJl
c2l6ZVdpbmRvdyh3aWR0aCwgaGVpZ2h0KSB7Ci0gICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQp
IHsKLSAgICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4
IjsKLSAgICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAi
cHgiOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdpbmRvdy5yZXNpemVUbyh3aWR0aCwgaGVpZ2h0
KTsKLSAgICB9Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEluaXRpYWxpemF0aW9uCi0KLS8qKgotICog
QHBhcmFtIHtFdmVudH0gZXZlbnQKLSAqLwotZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkg
ewotICAgIGlmIChnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCi0gICAgICAgIHJldHVybjsKLSAg
ICBnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQgPSB0cnVlOwotICAgIGluaXRpYWxpemUoSlNPTi5w
YXJzZShldmVudC5kYXRhKSk7Ci19Ci0KLWZ1bmN0aW9uIGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQo
KSB7Ci0gICAgaWYgKGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIHZhciBhcmdzID0gewotICAgICAgICBtb250aExhYmVscyA6IFsibTEiLCAibTIiLCAibTMi
LCAibTQiLCAibTUiLCAibTYiLAotICAgICAgICAgICAgICAgICAgICAgICAibTciLCAibTgiLCAi
bTkiLCAibTEwIiwgIm0xMSIsICJtMTIiXSwKLSAgICAgICAgZGF5TGFiZWxzIDogWyJkMSIsICJk
MiIsICJkMyIsICJkNCIsICJkNSIsICJkNiIsICJkNyJdLAotICAgICAgICB0b2RheUxhYmVsIDog
IlRvZGF5IiwKLSAgICAgICAgY2xlYXJMYWJlbCA6ICJDbGVhciIsCi0gICAgICAgIGNhbmNlbExh
YmVsIDogIkNhbmNlbCIsCi0gICAgICAgIGN1cnJlbnRWYWx1ZSA6ICIiLAotICAgICAgICB3ZWVr
U3RhcnREYXkgOiAwLAotICAgICAgICBzdGVwIDogMQotICAgIH07Ci0gICAgaW5pdGlhbGl6ZShh
cmdzKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKLSAqIEByZXR1cm4gez9z
dHJpbmd9IEFuIGVycm9yIG1lc3NhZ2UsIG9yIG51bGwgaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBl
cnJvcnMuCi0gKi8KLWZ1bmN0aW9uIHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpIHsKLSAgICBpZiAo
IWFyZ3MubW9udGhMYWJlbHMpCi0gICAgICAgIHJldHVybiAiTm8gbW9udGhMYWJlbHMuIjsKLSAg
ICBpZiAoYXJncy5tb250aExhYmVscy5sZW5ndGggIT0gMTIpCi0gICAgICAgIHJldHVybiAibW9u
dGhMYWJlbHMgaXMgbm90IGFuIGFycmF5IHdpdGggMTIgZWxlbWVudHMuIjsKLSAgICBpZiAoIWFy
Z3MuZGF5TGFiZWxzKQotICAgICAgICByZXR1cm4gIk5vIGRheUxhYmVscy4iOwotICAgIGlmIChh
cmdzLmRheUxhYmVscy5sZW5ndGggIT0gNykKLSAgICAgICAgcmV0dXJuICJkYXlMYWJlbHMgaXMg
bm90IGFuIGFycmF5IHdpdGggNyBlbGVtZW50cy4iOwotICAgIGlmICghYXJncy5jbGVhckxhYmVs
KQotICAgICAgICByZXR1cm4gIk5vIGNsZWFyTGFiZWwuIjsKLSAgICBpZiAoIWFyZ3MudG9kYXlM
YWJlbCkKLSAgICAgICAgcmV0dXJuICJObyB0b2RheUxhYmVsLiI7Ci0gICAgaWYgKGFyZ3Mud2Vl
a1N0YXJ0RGF5KSB7Ci0gICAgICAgIGlmIChhcmdzLndlZWtTdGFydERheSA8IDAgfHwgYXJncy53
ZWVrU3RhcnREYXkgPiA2KQotICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIHdlZWtTdGFydERh
eTogIiArIGFyZ3Mud2Vla1N0YXJ0RGF5OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLX0KLQot
LyoqCi0gKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKLSAqLwotZnVuY3Rpb24gaW5pdGlhbGl6ZShh
cmdzKSB7Ci0gICAgdmFyIG1haW4gPSAkKCJtYWluIik7Ci0gICAgbWFpbi5jbGFzc0xpc3QuYWRk
KENsYXNzTmFtZXMuTm9Gb2N1c1JpbmcpOwotCi0gICAgdmFyIGVycm9yU3RyaW5nID0gdmFsaWRh
dGVBcmd1bWVudHMoYXJncyk7Ci0gICAgaWYgKGVycm9yU3RyaW5nKSB7Ci0gICAgICAgIG1haW4u
dGV4dENvbnRlbnQgPSAiSW50ZXJuYWwgZXJyb3I6ICIgKyBlcnJvclN0cmluZzsKLSAgICAgICAg
cmVzaXplV2luZG93KG1haW4ub2Zmc2V0V2lkdGgsIG1haW4ub2Zmc2V0SGVpZ2h0KTsKLSAgICB9
IGVsc2UgewotICAgICAgICBnbG9iYWwucGFyYW1zID0gYXJnczsKLSAgICAgICAgY2hlY2tMaW1p
dHMoKTsKLSAgICAgICAgbGF5b3V0KCk7Ci0KLSAgICAgICAgdmFyIGluaXRpYWxEYXRlID0gcGFy
c2VEYXRlU3RyaW5nKGFyZ3MuY3VycmVudFZhbHVlKTsKLSAgICAgICAgaWYgKGluaXRpYWxEYXRl
IDwgZ2xvYmFsLm1pbmltdW1EYXRlKQotICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwu
bWluaW11bURhdGU7Ci0gICAgICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gZ2xvYmFsLm1heGlt
dW1EYXRlKQotICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWF4aW11bURhdGU7Ci0g
ICAgICAgIGdsb2JhbC5kYXlzVGFibGUuc2VsZWN0RGF0ZShpbml0aWFsRGF0ZSk7Ci0KLSAgICAg
ICAgc2V0VGltZW91dChmaXhXaW5kb3dTaXplLCAwKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGZp
eFdpbmRvd1NpemUoKSB7Ci0gICAgdmFyIHllYXJNb250aFJpZ2h0RWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25SaWdodClb
MF07Ci0gICAgdmFyIGRheXNBcmVhRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFz
c05hbWUoQ2xhc3NOYW1lcy5EYXlzQXJlYSlbMF07Ci0gICAgdmFyIGhlYWRlcnMgPSBkYXlzQXJl
YUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDbGFzc05hbWVzLkRheUxhYmVsKTsKLSAg
ICB2YXIgbWF4Q2VsbFdpZHRoID0gMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlcnMu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKG1heENlbGxXaWR0aCA8IGhlYWRlcnNbaV0ub2Zm
c2V0V2lkdGgpCi0gICAgICAgICAgICBtYXhDZWxsV2lkdGggPSBoZWFkZXJzW2ldLm9mZnNldFdp
ZHRoOwotICAgIH0KLSAgICB2YXIgRGF5c0FyZWFDb250YWluZXJCb3JkZXIgPSAxOwotICAgIHZh
ciBtYWluID0gJCgibWFpbiIpOwotICAgIHZhciB5ZWFyTW9udGhFbmQ7Ci0gICAgdmFyIGRheXNB
cmVhRW5kOwotICAgIGlmIChnbG9iYWwucGFyYW1zLmlzUlRMKSB7Ci0gICAgICAgIHZhciBzdGFy
dE9mZnNldCA9IG1haW4ub2Zmc2V0TGVmdCArIG1haW4ub2Zmc2V0V2lkdGg7Ci0gICAgICAgIHll
YXJNb250aEVuZCA9IHN0YXJ0T2Zmc2V0IC0geWVhck1vbnRoUmlnaHRFbGVtZW50Lm9mZnNldExl
ZnQ7Ci0gICAgICAgIGRheXNBcmVhRW5kID0gc3RhcnRPZmZzZXQgLSAoZGF5c0FyZWFFbGVtZW50
Lm9mZnNldExlZnQgKyBkYXlzQXJlYUVsZW1lbnQub2Zmc2V0V2lkdGgpICsgbWF4Q2VsbFdpZHRo
ICogNyArIERheXNBcmVhQ29udGFpbmVyQm9yZGVyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHll
YXJNb250aEVuZCA9IHllYXJNb250aFJpZ2h0RWxlbWVudC5vZmZzZXRMZWZ0ICsgeWVhck1vbnRo
UmlnaHRFbGVtZW50Lm9mZnNldFdpZHRoOwotICAgICAgICBkYXlzQXJlYUVuZCA9IGRheXNBcmVh
RWxlbWVudC5vZmZzZXRMZWZ0ICsgbWF4Q2VsbFdpZHRoICogNyArIERheXNBcmVhQ29udGFpbmVy
Qm9yZGVyOwotICAgIH0KLQotICAgIHZhciBtYXhFbmQgPSBNYXRoLm1heCh5ZWFyTW9udGhFbmQs
IGRheXNBcmVhRW5kKTsKLSAgICB2YXIgTWFpblBhZGRpbmcgPSA2OwotICAgIHZhciBNYWluQm9y
ZGVyID0gMTsKLSAgICB2YXIgZGVzaXJlZEJvZHlXaWR0aCA9IG1heEVuZCArIE1haW5QYWRkaW5n
ICsgTWFpbkJvcmRlcjsKLQotICAgIHZhciBtYWluSGVpZ2h0ID0gbWFpbi5vZmZzZXRIZWlnaHQ7
Ci0gICAgbWFpbi5zdHlsZS53aWR0aCA9ICJhdXRvIjsKLSAgICBkYXlzQXJlYUVsZW1lbnQuc3R5
bGUud2lkdGggPSAiMTAwJSI7Ci0gICAgZGF5c0FyZWFFbGVtZW50LnN0eWxlLnRhYmxlTGF5b3V0
ID0gImZpeGVkIjsKLSAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENsYXNzTmFt
ZXMuWWVhck1vbnRoVXBwZXIpWzBdLnN0eWxlLmRpc3BsYXkgPSAiLXdlYmtpdC1ib3giOwotICAg
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5Nb250aFNlbGVjdG9y
Qm94KVswXS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICByZXNpemVXaW5kb3coZGVzaXJl
ZEJvZHlXaWR0aCwgbWFpbkhlaWdodCk7Ci19Ci0KLWZ1bmN0aW9uIGNoZWNrTGltaXRzKCkgewot
ICAgIC8vIEhhcmQgbGltaXRzIG9mIHR5cGU9ZGF0ZS4gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0
ZUNvbXBvbmVudHMuaC4KLSAgICBnbG9iYWwubWluaW11bURhdGUgPSBuZXcgRGF0ZSgtNjIxMzU1
OTY4MDAwMDAuMCk7Ci0gICAgZ2xvYmFsLm1heGltdW1EYXRlID0gbmV3IERhdGUoODY0MDAwMDAw
MDAwMDAwMC4wKTsKLSAgICAvLyBTZWUgV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwLgot
ICAgIGdsb2JhbC5zdGVwID0gODY0MDAwMDA7Ci0KLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5taW4p
IHsKLSAgICAgICAgLy8gV2UgYXNzdW1lIHBhcmFtcy5taW4gaXMgYSB2YWxpZCBkYXRlLgotICAg
ICAgICBnbG9iYWwubWluaW11bURhdGUgPSBwYXJzZURhdGVTdHJpbmcoZ2xvYmFsLnBhcmFtcy5t
aW4pOwotICAgIH0KLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5tYXgpIHsKLSAgICAgICAgLy8gV2Ug
YXNzdW1lIHBhcmFtcy5tYXggaXMgYSB2YWxpZCBkYXRlLgotICAgICAgICBnbG9iYWwubWF4aW11
bURhdGUgPSBwYXJzZURhdGVTdHJpbmcoZ2xvYmFsLnBhcmFtcy5tYXgpOwotICAgIH0KLSAgICBp
ZiAoZ2xvYmFsLnBhcmFtcy5zdGVwKQotICAgICAgICBnbG9iYWwuc3RlcCAqPSBnbG9iYWwucGFy
YW1zLnN0ZXA7Ci19Ci0KLWZ1bmN0aW9uIGxheW91dCgpIHsKLSAgICBpZiAoZ2xvYmFsLnBhcmFt
cy5pc1JUTCkKLSAgICAgICAgZG9jdW1lbnQuYm9keS5kaXIgPSAicnRsIjsKLSAgICBlbHNlCi0g
ICAgICAgIGRvY3VtZW50LmJvZHkuZGlyID0gImx0ciI7Ci0gICAgdmFyIG1haW4gPSAkKCJtYWlu
Iik7Ci0gICAgdmFyIHBhcmFtcyA9IGdsb2JhbC5wYXJhbXM7Ci0gICAgbWFpbi5yZW1vdmVDaGls
ZChtYWluLmZpcnN0Q2hpbGQpOwotICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIGhhbmRsZUdsb2JhbEtleSwgZmFsc2UpOwotCi0gICAgZ2xvYmFsLnllYXJNb250
aENvbnRyb2xsZXIgPSBuZXcgWWVhck1vbnRoQ29udHJvbGxlcigpOwotICAgIGdsb2JhbC55ZWFy
TW9udGhDb250cm9sbGVyLmF0dGFjaFRvKG1haW4pOwotICAgIGdsb2JhbC5kYXlzVGFibGUgPSBu
ZXcgRGF5c1RhYmxlKCk7Ci0gICAgZ2xvYmFsLmRheXNUYWJsZS5hdHRhY2hUbyhtYWluKTsKLSAg
ICBsYXlvdXRCdXR0b25zKG1haW4pOwotfQotCi0vKioKLSAqIEBwYXJhbSB7RWxlbWVudH0gbWFp
bgotICovCi1mdW5jdGlvbiBsYXlvdXRCdXR0b25zKG1haW4pIHsKLSAgICB2YXIgY29udGFpbmVy
ID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5Ub2RheUNsZWFyQXJlYSk7Ci0gICAg
Z2xvYmFsLnRvZGF5ID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlRvZGF5QnV0
dG9uKTsKLSAgICBnbG9iYWwudG9kYXkudHlwZSA9ICJidXR0b24iOwotICAgIGdsb2JhbC50b2Rh
eS52YWx1ZSA9IGdsb2JhbC5wYXJhbXMudG9kYXlMYWJlbDsKLSAgICBnbG9iYWwudG9kYXkuYWRk
RXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYW5kbGVUb2RheSwgZmFsc2UpOwotICAgIGNvbnRhaW5l
ci5hcHBlbmRDaGlsZChnbG9iYWwudG9kYXkpOwotICAgIGdsb2JhbC5jbGVhciA9IG51bGw7Ci0g
ICAgaWYgKCFnbG9iYWwucGFyYW1zLnJlcXVpcmVkKSB7Ci0gICAgICAgIGdsb2JhbC5jbGVhciA9
IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5DbGVhckJ1dHRvbik7Ci0gICAgICAg
IGdsb2JhbC5jbGVhci50eXBlID0gImJ1dHRvbiI7Ci0gICAgICAgIGdsb2JhbC5jbGVhci52YWx1
ZSA9IGdsb2JhbC5wYXJhbXMuY2xlYXJMYWJlbDsKLSAgICAgICAgZ2xvYmFsLmNsZWFyLmFkZEV2
ZW50TGlzdGVuZXIoImNsaWNrIiwgaGFuZGxlQ2xlYXIsIGZhbHNlKTsKLSAgICAgICAgY29udGFp
bmVyLmFwcGVuZENoaWxkKGdsb2JhbC5jbGVhcik7Ci0gICAgfQotICAgIG1haW4uYXBwZW5kQ2hp
bGQoY29udGFpbmVyKTsKLQotICAgIGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbCA9IGdsb2Jh
bC5jbGVhciB8fCBnbG9iYWwudG9kYXk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyoqCi0gKiBAY29u
c3RydWN0b3IKLSAqLwotZnVuY3Rpb24gWWVhck1vbnRoQ29udHJvbGxlcigpIHsKLSAgICAvKioK
LSAgICAgKiBAdHlwZSB7IW51bWJlcn0KLSAgICAgKi8KLSAgICB0aGlzLl9jdXJyZW50WWVhciA9
IC0xOwotICAgIC8qKgotICAgICAqIEB0eXBlIHshbnVtYmVyfQotICAgICAqLwotICAgIHRoaXMu
X2N1cnJlbnRNb250aCA9IC0xOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IUVsZW1lbnR9IG1haW4K
LSAqLwotWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbiht
YWluKSB7Ci0gICAgdmFyIG91dGVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xh
c3NOYW1lcy5ZZWFyTW9udGhBcmVhKTsKLQotICAgIHZhciBpbm5lckNvbnRhaW5lciA9IGNyZWF0
ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpOwotICAgIG91dGVyQ29u
dGFpbmVyLmFwcGVuZENoaWxkKGlubmVyQ29udGFpbmVyKTsKLQotICAgIHRoaXMuX2F0dGFjaExl
ZnRCdXR0b25zVG8oaW5uZXJDb250YWluZXIpOwotCi0gICAgdmFyIGJveCA9IGNyZWF0ZUVsZW1l
bnQoImRpdiIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3RvckJveCk7Ci0gICAgaW5uZXJDb250YWlu
ZXIuYXBwZW5kQ2hpbGQoYm94KTsKLSAgICAvLyBXZSBjYW4ndCB1c2UgPHNlbGVjdD4gcG9wdXAg
aW4gUGFnZVBvcHVwLgotICAgIHRoaXMuX21vbnRoUG9wdXAgPSBjcmVhdGVFbGVtZW50KCJkaXYi
LCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JQb3B1cCk7Ci0gICAgdGhpcy5fbW9udGhQb3B1cC5h
ZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlWWVhck1vbnRoQ2hhbmdl
LCB0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX21vbnRoUG9wdXAuYWRkRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxlTW9udGhQb3B1cEtleSwgdGhpcyksIGZhbHNlKTsK
LSAgICB0aGlzLl9tb250aFBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGJpbmQo
dGhpcy5faGFuZGxlTW91c2VNb3ZlLCB0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX3VwZGF0ZVNl
bGVjdGlvbk9uTW91c2VNb3ZlID0gdHJ1ZTsKLSAgICB0aGlzLl9tb250aFBvcHVwLnRhYkluZGV4
ID0gMDsKLSAgICB0aGlzLl9tb250aFBvcHVwQ29udGVudHMgPSBjcmVhdGVFbGVtZW50KCJkaXYi
LCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JQb3B1cENvbnRlbnRzKTsKLSAgICB0aGlzLl9tb250
aFBvcHVwLmFwcGVuZENoaWxkKHRoaXMuX21vbnRoUG9wdXBDb250ZW50cyk7Ci0gICAgLy8gU2l6
ZXIgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCBpbiB0aGUgcG9w
dXAgbWVudS4KLSAgICB2YXIgc2l6ZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVz
Lk1vbnRoU2VsZWN0b3JQb3B1cFNpemVyKTsKLSAgICB0aGlzLl9tb250aFBvcHVwLmFwcGVuZENo
aWxkKHNpemVyKTsKLSAgICBib3guYXBwZW5kQ2hpbGQodGhpcy5fbW9udGhQb3B1cCk7Ci0gICAg
dGhpcy5fbW9udGggPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0
b3IpOwotICAgIHRoaXMuX21vbnRoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlz
Ll9zaG93UG9wdXAsIHRoaXMpLCBmYWxzZSk7Ci0gICAgYm94LmFwcGVuZENoaWxkKHRoaXMuX21v
bnRoKTsKLQotICAgIHRoaXMuX2F0dGFjaFJpZ2h0QnV0dG9uc1RvKGlubmVyQ29udGFpbmVyKTsK
LSAgICBtYWluLmFwcGVuZENoaWxkKG91dGVyQ29udGFpbmVyKTsKLQotICAgIHRoaXMuX3dhbGwg
PSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JXYWxsKTsKLSAg
ICB0aGlzLl93YWxsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9jbG9zZVBv
cHVwLCB0aGlzKSwgZmFsc2UpOwotICAgIG1haW4uYXBwZW5kQ2hpbGQodGhpcy5fd2FsbCk7Ci0K
LSAgICB2YXIgbWF4aW11bVllYXIgPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFllYXIo
KTsKLSAgICB2YXIgbWF4V2lkdGggPSAwOwotICAgIGZvciAodmFyIG0gPSAwOyBtIDwgMTI7ICsr
bSkgewotICAgICAgICB0aGlzLl9tb250aC50ZXh0Q29udGVudCA9IGZvcm1hdFllYXJNb250aCht
YXhpbXVtWWVhciwgbSk7Ci0gICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRo
aXMuX21vbnRoLm9mZnNldFdpZHRoKTsKLSAgICB9Ci0gICAgaWYgKGdldExhbmd1YWdlKCkgPT0g
ImphIiAmJiBJbXBlcmlhbEVyYUxpbWl0IDwgbWF4aW11bVllYXIpIHsKLSAgICAgICAgZm9yICh2
YXIgbSA9IDA7IG0gPCAxMjsgKyttKSB7Ci0gICAgICAgICAgICB0aGlzLl9tb250aC50ZXh0Q29u
dGVudCA9IGZvcm1hdFllYXJNb250aChJbXBlcmlhbEVyYUxpbWl0LCBtKTsKLSAgICAgICAgICAg
IG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRoKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICB0aGlzLl9tb250aC5zdHlsZS5taW5XaWR0aCA9IG1heFdp
ZHRoICsgJ3B4JzsKLQotICAgIGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wgPSB0aGlzLl9s
ZWZ0MjsgLy8gRklYTUU6IFNob3VsZCBpdCBiZSB0aGlzLm1vbnRoPwotfTsKLQotWWVhck1vbnRo
Q29udHJvbGxlci5hZGRUZW5ZZWFyc0J1dHRvbnMgPSBmYWxzZTsKLQotLyoqCi0gKiBAcGFyYW0g
eyFFbGVtZW50fSBwYXJlbnQKLSAqLwotWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2F0
dGFjaExlZnRCdXR0b25zVG8gPSBmdW5jdGlvbihwYXJlbnQpIHsKLSAgICB2YXIgY29udGFpbmVy
ID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25MZWZ0KTsK
LSAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLQotICAgIGlmIChZZWFyTW9udGhD
b250cm9sbGVyLmFkZFRlblllYXJzQnV0dG9ucykgewotICAgICAgICB0aGlzLl9sZWZ0MyA9IGNy
ZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOwotICAgICAg
ICB0aGlzLl9sZWZ0My50eXBlID0gImJ1dHRvbiI7Ci0gICAgICAgIHRoaXMuX2xlZnQzLnZhbHVl
ID0gIjw8PCI7Ci0gICAgICAgIHRoaXMuX2xlZnQzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
YmluZCh0aGlzLl9oYW5kbGVCdXR0b25DbGljaywgdGhpcyksIGZhbHNlKTsKLSAgICAgICAgY29u
dGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQzKTsKLSAgICB9Ci0KLSAgICB0aGlzLl9sZWZ0
MiA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOwot
ICAgIHRoaXMuX2xlZnQyLnR5cGUgPSAiYnV0dG9uIjsKLSAgICB0aGlzLl9sZWZ0Mi52YWx1ZSA9
ICI8PCI7Ci0gICAgdGhpcy5fbGVmdDIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRo
aXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOwotICAgIGNvbnRhaW5lci5hcHBl
bmRDaGlsZCh0aGlzLl9sZWZ0Mik7Ci0KLSAgICB0aGlzLl9sZWZ0MSA9IGNyZWF0ZUVsZW1lbnQo
ImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOwotICAgIHRoaXMuX2xlZnQxLnR5
cGUgPSAiYnV0dG9uIjsKLSAgICB0aGlzLl9sZWZ0MS52YWx1ZSA9ICI8IjsKLSAgICB0aGlzLl9s
ZWZ0MS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xp
Y2ssIHRoaXMpLCBmYWxzZSk7Ci0gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQx
KTsKLX07Ci0KLS8qKgotICogQHBhcmFtIHshRWxlbWVudH0gcGFyZW50Ci0gKi8KLVllYXJNb250
aENvbnRyb2xsZXIucHJvdG90eXBlLl9hdHRhY2hSaWdodEJ1dHRvbnNUbyA9IGZ1bmN0aW9uKHBh
cmVudCkgewotICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05h
bWVzLlllYXJNb250aEJ1dHRvblJpZ2h0KTsKLSAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoY29udGFp
bmVyKTsKLSAgICB0aGlzLl9yaWdodDEgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNzTmFt
ZXMuWWVhck1vbnRoQnV0dG9uKTsKLSAgICB0aGlzLl9yaWdodDEudHlwZSA9ICJidXR0b24iOwot
ICAgIHRoaXMuX3JpZ2h0MS52YWx1ZSA9ICI+IjsKLSAgICB0aGlzLl9yaWdodDEuYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFs
c2UpOwotICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yaWdodDEpOwotCi0gICAgdGhp
cy5fcmlnaHQyID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1
dHRvbik7Ci0gICAgdGhpcy5fcmlnaHQyLnR5cGUgPSAiYnV0dG9uIjsKLSAgICB0aGlzLl9yaWdo
dDIudmFsdWUgPSAiPj4iOwotICAgIHRoaXMuX3JpZ2h0Mi5hZGRFdmVudExpc3RlbmVyKCJjbGlj
ayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7Ci0gICAgY29u
dGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JpZ2h0Mik7Ci0KLSAgICBpZiAoWWVhck1vbnRoQ29u
dHJvbGxlci5hZGRUZW5ZZWFyc0J1dHRvbnMpIHsKLSAgICAgICAgdGhpcy5fcmlnaHQzID0gY3Jl
YXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7Ci0gICAgICAg
IHRoaXMuX3JpZ2h0My50eXBlID0gImJ1dHRvbiI7Ci0gICAgICAgIHRoaXMuX3JpZ2h0My52YWx1
ZSA9ICI+Pj4iOwotICAgICAgICB0aGlzLl9yaWdodDMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOwotICAgICAgICBj
b250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmlnaHQzKTsKLSAgICB9Ci19OwotCi0vKioKLSAq
IEByZXR1cm4geyFudW1iZXJ9Ci0gKi8KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnll
YXIgPSBmdW5jdGlvbigpIHsKLSAgICByZXR1cm4gdGhpcy5fY3VycmVudFllYXI7Ci19OwotCi0v
KioKLSAqIEByZXR1cm4geyFudW1iZXJ9Ci0gKi8KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90
eXBlLm1vbnRoID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRNb250aDsK
LX07Ci0KLS8qKgotICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCi0gKiBAcGFyYW0geyFudW1iZXJ9
IG1vbnRoCi0gKi8KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnNldFllYXJNb250aCA9
IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7Ci0gICAgdGhpcy5fY3VycmVudFllYXIgPSB5ZWFyOwot
ICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IG1vbnRoOwotICAgIHRoaXMuX3JlZHJhdygpOwotfTsK
LQotWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX3JlZHJhdyA9IGZ1bmN0aW9uKCkgewot
ICAgIHZhciBtaW4gPSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsg
Z2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ01vbnRoKCk7Ci0gICAgdmFyIG1heCA9IGdsb2JhbC5t
YXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWF4aW11bURhdGUuZ2V0
VVRDTW9udGgoKTsKLSAgICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnRZZWFyICogMTIgKyB0
aGlzLl9jdXJyZW50TW9udGg7Ci0gICAgaWYgKHRoaXMuX2xlZnQzKQotICAgICAgICB0aGlzLl9s
ZWZ0My5kaXNhYmxlZCA9IGN1cnJlbnQgLSAxMyA8IG1pbjsKLSAgICB0aGlzLl9sZWZ0Mi5kaXNh
YmxlZCA9IGN1cnJlbnQgLSAyIDwgbWluOwotICAgIHRoaXMuX2xlZnQxLmRpc2FibGVkID0gY3Vy
cmVudCAtIDEgPCBtaW47Ci0gICAgdGhpcy5fcmlnaHQxLmRpc2FibGVkID0gY3VycmVudCArIDEg
PiBtYXg7Ci0gICAgdGhpcy5fcmlnaHQyLmRpc2FibGVkID0gY3VycmVudCArIDIgPiBtYXg7Ci0g
ICAgaWYgKHRoaXMuX3JpZ2h0MykKLSAgICAgICAgdGhpcy5fcmlnaHQzLmRpc2FibGVkID0gY3Vy
cmVudCArIDEzID4gbWF4OwotICAgIHRoaXMuX21vbnRoLmlubmVyVGV4dCA9IGZvcm1hdFllYXJN
b250aCh0aGlzLl9jdXJyZW50WWVhciwgdGhpcy5fY3VycmVudE1vbnRoKTsKLSAgICB3aGlsZSAo
dGhpcy5fbW9udGhQb3B1cENvbnRlbnRzLmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgdGhpcy5f
bW9udGhQb3B1cENvbnRlbnRzLnJlbW92ZUNoaWxkKHRoaXMuX21vbnRoUG9wdXBDb250ZW50cy5m
aXJzdENoaWxkKTsKLQotICAgIGZvciAodmFyIG0gPSBjdXJyZW50IC0gNjsgbSA8PSBjdXJyZW50
ICsgNjsgbSsrKSB7Ci0gICAgICAgIGlmIChtIDwgbWluIHx8IG0gPiBtYXgpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgdmFyIG9wdGlvbiA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENs
YXNzTmFtZXMuTW9udGhTZWxlY3RvclBvcHVwRW50cnksIGZvcm1hdFllYXJNb250aChNYXRoLmZs
b29yKG0gLyAxMiksIG0gJSAxMikpOwotICAgICAgICBvcHRpb24uZGF0YXNldC52YWx1ZSA9IFN0
cmluZyhNYXRoLmZsb29yKG0gLyAxMikpICsgIi0iICsgU3RyaW5nKG0gJSAxMik7Ci0gICAgICAg
IHRoaXMuX21vbnRoUG9wdXBDb250ZW50cy5hcHBlbmRDaGlsZChvcHRpb24pOwotICAgICAgICBp
ZiAobSA9PSBjdXJyZW50KQotICAgICAgICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoQ2xhc3NO
YW1lcy5TZWxlY3RlZE1vbnRoWWVhcik7Ci0gICAgfQotfTsKLQotWWVhck1vbnRoQ29udHJvbGxl
ci5wcm90b3R5cGUuX3Nob3dQb3B1cCA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuX21vbnRoUG9w
dXAuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7Ci0gICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS56
SW5kZXggPSAiMTAwMCI7IC8vIExhcmdlciB0aGFuIHRoZSBkYXlzIGFyZWEuCi0gICAgdGhpcy5f
bW9udGhQb3B1cC5zdHlsZS5sZWZ0ID0gdGhpcy5fbW9udGgub2Zmc2V0TGVmdCArICh0aGlzLl9t
b250aC5vZmZzZXRXaWR0aCAtIHRoaXMuX21vbnRoUG9wdXAub2Zmc2V0V2lkdGgpIC8gMiArICJw
eCI7Ci0gICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS50b3AgPSB0aGlzLl9tb250aC5vZmZzZXRU
b3AgKyB0aGlzLl9tb250aC5vZmZzZXRIZWlnaHQgKyAicHgiOwotCi0gICAgdGhpcy5fd2FsbC5z
dHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKLSAgICB0aGlzLl93YWxsLnN0eWxlLnpJbmRleCA9ICI5
OTkiOyAvLyBUaGlzIHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlIHotaW5kZXggb2YgbW9udGhQ
b3B1cC4KLQotICAgIHZhciBwb3B1cEhlaWdodCA9IHRoaXMuX21vbnRoUG9wdXAuY2xpZW50SGVp
Z2h0OwotICAgIHZhciBmdWxsSGVpZ2h0ID0gdGhpcy5fbW9udGhQb3B1cENvbnRlbnRzLmNsaWVu
dEhlaWdodDsKLSAgICBpZiAoZnVsbEhlaWdodCA+IHBvcHVwSGVpZ2h0KSB7Ci0gICAgICAgIHZh
ciBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0ZWQp
IHsKLSAgICAgICAgICAgdmFyIGJvdHRvbSA9IHNlbGVjdGVkLm9mZnNldFRvcCArIHNlbGVjdGVk
LmNsaWVudEhlaWdodDsKLSAgICAgICAgICAgaWYgKGJvdHRvbSA+IHBvcHVwSGVpZ2h0KQotICAg
ICAgICAgICAgICAgdGhpcy5fbW9udGhQb3B1cC5zY3JvbGxUb3AgPSBib3R0b20gLSBwb3B1cEhl
aWdodDsKLSAgICAgICAgfQotICAgICAgICB2YXIgc2l6ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVj
dG9yKCIuIiArIENsYXNzTmFtZXMuTW9udGhTZWxlY3RvclBvcHVwU2l6ZXIpOwotICAgICAgICB2
YXIgc2Nyb2xsV2lkdGggPSB0aGlzLl9tb250aFBvcHVwQ29udGVudHMuY2xpZW50V2lkdGggLSBz
aXplci5jbGllbnRXaWR0aDsKLSAgICAgICAgaWYgKHNjcm9sbFdpZHRoID4gMCkKLSAgICAgICAg
ICAgIHRoaXMuX21vbnRoUG9wdXAuc3R5bGUud2Via2l0UGFkZGluZ0VuZCA9IHNjcm9sbFdpZHRo
ICsgJ3B4JzsKLSAgICB9Ci0gICAgdGhpcy5fbW9udGhQb3B1cC5mb2N1cygpOwotfTsKLQotWWVh
ck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2Nsb3NlUG9wdXAgPSBmdW5jdGlvbigpIHsKLSAg
ICB0aGlzLl9tb250aFBvcHVwLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgdGhpcy5fd2Fs
bC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwotICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCIuIiArIENsYXNzTmFtZXMuRGF5c0FyZWFDb250YWluZXIpOwotICAgIGNv
bnRhaW5lci5mb2N1cygpOwotfTsKLQotLyoqCi0gKiBAcmV0dXJuIHtFbGVtZW50fSBTZWxlY3Rl
ZCBlbGVtZW50IGluIHRoZSBtb250aC15ZWFyIHBvcHVwLgotICovCi1ZZWFyTW9udGhDb250cm9s
bGVyLnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuIiArIENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIp
OwotfQotCi0vKioKLSAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gKi8KLVllYXJNb250aENvbnRy
b2xsZXIucHJvdG90eXBlLl9oYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbihldmVudCkKLXsKLSAg
ICBpZiAoIXRoaXMuX3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlKSB7Ci0gICAgICAgIC8vIFNl
bGVjdGlvbiB1cGRhdGUgdHVybmVkIG9mZiB3aGlsZSBuYXZpZ2F0aW5nIHdpdGgga2V5Ym9hcmQg
dG8gcHJldmVudCBhIG1vdXNlCi0gICAgICAgIC8vIG1vdmUgdHJpZ2dlZCBkdXJpbmcgYSBzY3Jv
bGwgZnJvbSByZXNldHRpbmcgdGhlIHNlbGVjdGlvbi4gQXV0b21hdGljYWxseQotICAgICAgICAv
LyByZWFybSBjb250cm9sIHRvIGVuYWJsZSBtb3VzZS1iYXNlZCBzZWxlY3Rpb24uCi0gICAgICAg
IHRoaXMuX3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlID0gdHJ1ZTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwotICAgICAgICB2YXIgc2VsZWN0aW9u
ID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9
IHNlbGVjdGlvbiAmJiB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMuTW9udGhT
ZWxlY3RvclBvcHVwRW50cnkpKSB7Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uKQotICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZXMuU2VsZWN0ZWRN
b250aFllYXIpOwotICAgICAgICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5T
ZWxlY3RlZE1vbnRoWWVhcik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZXZlbnQuc3RvcFByb3Bh
Z2F0aW9uKCk7Ci0gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX0KLQotLyoqCi0gKiBAcGFy
YW0ge0V2ZW50fSBldmVudAotICovCi1ZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFu
ZGxlTW9udGhQb3B1cEtleSA9IGZ1bmN0aW9uKGV2ZW50KQotewotICAgIHZhciBrZXkgPSBldmVu
dC5rZXlJZGVudGlmaWVyOwotICAgIGlmIChrZXkgPT0gIkRvd24iKSB7Ci0gICAgICAgIHZhciBz
ZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0ZWQpIHsK
LSAgICAgICAgICAgIHZhciBuZXh0ID0gc2VsZWN0ZWQubmV4dFNpYmxpbmc7Ci0gICAgICAgICAg
ICBpZiAobmV4dCkgewotICAgICAgICAgICAgICAgIHNlbGVjdGVkLmNsYXNzTGlzdC5yZW1vdmUo
Q2xhc3NOYW1lcy5TZWxlY3RlZE1vbnRoWWVhcik7Ci0gICAgICAgICAgICAgICAgbmV4dC5jbGFz
c0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOwotICAgICAgICAgICAgICAg
IHZhciBib3R0b20gPSBuZXh0Lm9mZnNldFRvcCArIG5leHQuY2xpZW50SGVpZ2h0OwotICAgICAg
ICAgICAgICAgIGlmIChib3R0b20gPiB0aGlzLl9tb250aFBvcHVwLnNjcm9sbFRvcCArIHRoaXMu
X21vbnRoUG9wdXAuY2xpZW50SGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Vw
ZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRo
aXMuX21vbnRoUG9wdXAuc2Nyb2xsVG9wID0gYm90dG9tIC0gdGhpcy5fbW9udGhQb3B1cC5jbGll
bnRIZWlnaHQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOwotICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVcCIpIHsKLSAgICAgICAgdmFyIHNlbGVj
dGVkID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZCkgewotICAg
ICAgICAgICAgdmFyIHByZXZpb3VzID0gc2VsZWN0ZWQucHJldmlvdXNTaWJsaW5nOwotICAgICAg
ICAgICAgaWYgKHByZXZpb3VzKSB7Ci0gICAgICAgICAgICAgICAgc2VsZWN0ZWQuY2xhc3NMaXN0
LnJlbW92ZShDbGFzc05hbWVzLlNlbGVjdGVkTW9udGhZZWFyKTsKLSAgICAgICAgICAgICAgICBw
cmV2aW91cy5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOwotICAg
ICAgICAgICAgICAgIGlmIChwcmV2aW91cy5vZmZzZXRUb3AgPCB0aGlzLl9tb250aFBvcHVwLnNj
cm9sbFRvcCkgewotICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb25Pbk1v
dXNlTW92ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb250aFBvcHVwLnNj
cm9sbFRvcCA9IHByZXZpb3VzLm9mZnNldFRvcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAg
ICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDAx
QiIpIHsKLSAgICAgICAgdGhpcy5fY2xvc2VQb3B1cCgpOwotICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9IGVsc2Ug
aWYgKGtleSA9PSAiRW50ZXIiKSB7Ci0gICAgICAgIHRoaXMuX2hhbmRsZVllYXJNb250aENoYW5n
ZSgpOwotICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKLSAgICB9Ci19Ci0KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBl
Ll9oYW5kbGVZZWFyTW9udGhDaGFuZ2UgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLl9jbG9zZVBv
cHVwKCk7Ci0gICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgIGlm
ICghc2VsZWN0aW9uKQotICAgICAgICByZXR1cm47Ci0gICAgdmFyIHZhbHVlID0gc2VsZWN0aW9u
LmRhdGFzZXQudmFsdWU7Ci0gICAgdmFyIHJlc3VsdCAgPSB2YWx1ZS5tYXRjaCgvKFxkKyktKFxk
KykvKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhciBuZXdZZWFy
ID0gTnVtYmVyKHJlc3VsdFsxXSk7Ci0gICAgdmFyIG5ld01vbnRoID0gTnVtYmVyKHJlc3VsdFsy
XSk7Ci0gICAgZ2xvYmFsLmRheXNUYWJsZS5uYXZpZ2F0ZVRvTW9udGhBbmRLZWVwU2VsZWN0aW9u
UG9zaXRpb24obmV3WWVhciwgbmV3TW9udGgpOwotfTsKLQotLyoKLSAqIEBjb25zdAotICogQHR5
cGUge251bWJlcn0KLSAqLwotWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzID0g
LTEyMDsKLS8qCi0gKiBAY29uc3QKLSAqIEB0eXBlIHtudW1iZXJ9Ci0gKi8KLVllYXJNb250aENv
bnRyb2xsZXIuUHJldmlvdXNZZWFyID0gLTEyOwotLyoKLSAqIEBjb25zdAotICogQHR5cGUge251
bWJlcn0KLSAqLwotWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c01vbnRoID0gLTE7Ci0vKgot
ICogQGNvbnN0Ci0gKiBAdHlwZSB7bnVtYmVyfQotICovCi1ZZWFyTW9udGhDb250cm9sbGVyLk5l
eHRNb250aCA9IDE7Ci0vKgotICogQGNvbnN0Ci0gKiBAdHlwZSB7bnVtYmVyfQotICovCi1ZZWFy
TW9udGhDb250cm9sbGVyLk5leHRZZWFyID0gMTI7Ci0vKgotICogQGNvbnN0Ci0gKiBAdHlwZSB7
bnVtYmVyfQotICovCi1ZZWFyTW9udGhDb250cm9sbGVyLk5leHRUZW5ZZWFycyA9IDEyMDsKLQot
LyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICovCi1ZZWFyTW9udGhDb250cm9sbGVyLnBy
b3RvdHlwZS5faGFuZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgewotICAgIGlmIChl
dmVudC50YXJnZXQgPT0gdGhpcy5fbGVmdDMpCi0gICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHko
WWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzKTsKLSAgICBlbHNlIGlmIChldmVu
dC50YXJnZXQgPT0gdGhpcy5fbGVmdDIpCi0gICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVh
ck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1llYXIpOwotICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdl
dCA9PSB0aGlzLl9sZWZ0MSkKLSAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhD
b250cm9sbGVyLlByZXZpb3VzTW9udGgpOwotICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0
aGlzLl9yaWdodDEpCi0gICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJv
bGxlci5OZXh0TW9udGgpCi0gICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMuX3JpZ2h0
MikKLSAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9sbGVyLk5leHRZ
ZWFyKTsKLSAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fcmlnaHQzKQotICAgICAg
ICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIuTmV4dFRlblllYXJzKTsK
LSAgICBlbHNlCi0gICAgICAgIHJldHVybjsKLX07Ci0KLS8qKgotICogQHBhcmFtIHshbnVtYmVy
fSBhbW91bnQKLSAqLwotWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUubW92ZVJlbGF0aXZl
bHkgPSBmdW5jdGlvbihhbW91bnQpIHsKLSAgICB2YXIgbWluID0gZ2xvYmFsLm1pbmltdW1EYXRl
LmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENNb250aCgp
OwotICAgIHZhciBtYXggPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEy
ICsgZ2xvYmFsLm1heGltdW1EYXRlLmdldFVUQ01vbnRoKCk7Ci0gICAgdmFyIGN1cnJlbnQgPSB0
aGlzLl9jdXJyZW50WWVhciAqIDEyICsgdGhpcy5fY3VycmVudE1vbnRoOwotICAgIHZhciB1cGRh
dGVkID0gY3VycmVudDsKLSAgICBpZiAoYW1vdW50IDwgMCkKLSAgICAgICAgdXBkYXRlZCA9IGN1
cnJlbnQgKyBhbW91bnQgPj0gbWluID8gY3VycmVudCArIGFtb3VudCA6IG1pbjsKLSAgICBlbHNl
Ci0gICAgICAgIHVwZGF0ZWQgPSBjdXJyZW50ICsgYW1vdW50IDw9IG1heCA/IGN1cnJlbnQgKyBh
bW91bnQgOiBtYXg7Ci0gICAgaWYgKHVwZGF0ZWQgPT0gY3VycmVudCkKLSAgICAgICAgcmV0dXJu
OwotICAgIGdsb2JhbC5kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlvblBv
c2l0aW9uKE1hdGguZmxvb3IodXBkYXRlZCAvIDEyKSwgdXBkYXRlZCAlIDEyKTsKLX07Ci0KLS8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gRGF5c1RhYmxl
KCkgewotICAgIC8qKgotICAgICAqIEB0eXBlIHshbnVtYmVyfQotICAgICAqLwotICAgIHRoaXMu
X3ggPSAtMTsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7IW51bWJlcn0KLSAgICAgKi8KLSAgICB0
aGlzLl95ID0gLTE7Ci0gICAgLyoqCi0gICAgICogQHR5cGUgeyFudW1iZXJ9Ci0gICAgICovCi0g
ICAgdGhpcy5fY3VycmVudFllYXIgPSAtMTsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7IW51bWJl
cn0KLSAgICAgKi8KLSAgICB0aGlzLl9jdXJyZW50TW9udGggPSAtMTsKLX0KLQotLyoqCi0gKiBA
cmV0dXJuIHshYm9vbGVhbn0KLSAqLwotRGF5c1RhYmxlLnByb3RvdHlwZS5faGFzU2VsZWN0aW9u
ID0gZnVuY3Rpb24oKSB7Ci0gICAgcmV0dXJuIHRoaXMuX3ggPj0gMCAmJiB0aGlzLl95ID49IDA7
Ci19Ci0KLS8qKgotICogVGhlIG51bWJlciBvZiB3ZWVrIGxpbmVzIGluIHRoZSBzY3JlZW4uCi0g
KiBAY29uc3QKLSAqIEB0eXBlIHtudW1iZXJ9Ci0gKi8KLURheXNUYWJsZS5fV2Vla3MgPSA2Owot
Ci0vKioKLSAqIEBwYXJhbSB7IUVsZW1lbnR9IG1haW4KLSAqLwotRGF5c1RhYmxlLnByb3RvdHlw
ZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKG1haW4pIHsKLSAgICB0aGlzLl9kYXlzQ29udGFpbmVyID0g
Y3JlYXRlRWxlbWVudCgidGFibGUiLCBDbGFzc05hbWVzLkRheXNBcmVhKTsKLSAgICB0aGlzLl9k
YXlzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9oYW5kbGVE
YXlDbGljaywgdGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFkZEV2ZW50
TGlzdGVuZXIoIm1vdXNlb3ZlciIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VPdmVyLCB0aGlzKSwg
ZmFsc2UpOwotICAgIHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vv
dXQiLCBiaW5kKHRoaXMuX2hhbmRsZU1vdXNlT3V0LCB0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMu
X2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0VHJhbnNpdGlvbkVuZCIsIGJp
bmQodGhpcy5fbW92ZUluRGF5cywgdGhpcyksIGZhbHNlKTsKLSAgICB2YXIgY29udGFpbmVyID0g
Y3JlYXRlRWxlbWVudCgidHIiLCBDbGFzc05hbWVzLkRheUxhYmVsQ29udGFpbmVyKTsKLSAgICB2
YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsKLSAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDc7IGkrKykKLSAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxk
KGNyZWF0ZUVsZW1lbnQoInRoIiwgQ2xhc3NOYW1lcy5EYXlMYWJlbCwgZ2xvYmFsLnBhcmFtcy5k
YXlMYWJlbHNbKHdlZWtTdGFydERheSArIGkpICUgN10pKTsKLSAgICB0aGlzLl9kYXlzQ29udGFp
bmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7Ci0gICAgdGhpcy5fZGF5cyA9IFtdOwotICAgIGZv
ciAodmFyIHcgPSAwOyB3IDwgRGF5c1RhYmxlLl9XZWVrczsgdysrKSB7Ci0gICAgICAgIGNvbnRh
aW5lciA9IGNyZWF0ZUVsZW1lbnQoInRyIiwgQ2xhc3NOYW1lcy5XZWVrQ29udGFpbmVyKTsKLSAg
ICAgICAgdmFyIHdlZWsgPSBbXTsKLSAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKysp
IHsKLSAgICAgICAgICAgIHZhciBkYXkgPSBjcmVhdGVFbGVtZW50KCJ0ZCIsIENsYXNzTmFtZXMu
RGF5LCAiICIpOwotICAgICAgICAgICAgZGF5LnNldEF0dHJpYnV0ZSgiZGF0YS1wb3NpdGlvbi14
IiwgU3RyaW5nKGQpKTsKLSAgICAgICAgICAgIGRheS5zZXRBdHRyaWJ1dGUoImRhdGEtcG9zaXRp
b24teSIsIFN0cmluZyh3KSk7Ci0gICAgICAgICAgICB3ZWVrLnB1c2goZGF5KTsKLSAgICAgICAg
ICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkYXkpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMu
X2RheXMucHVzaCh3ZWVrKTsKLSAgICAgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hcHBlbmRDaGls
ZChjb250YWluZXIpOwotICAgIH0KLSAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYi
LCBDbGFzc05hbWVzLkRheXNBcmVhQ29udGFpbmVyKTsKLSAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQodGhpcy5fZGF5c0NvbnRhaW5lcik7Ci0gICAgY29udGFpbmVyLnRhYkluZGV4ID0gMDsKLSAg
ICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxl
S2V5LCB0aGlzKSwgZmFsc2UpOwotICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLQot
ICAgIGNvbnRhaW5lci5mb2N1cygpOwotfTsKLQotLyoqCi0gKiBAcGFyYW0geyFudW1iZXJ9IHRp
bWUgZGF0ZSBpbiBtaWxsaXNlY29uZC4KLSAqIEByZXR1cm4geyFib29sZWFufQotICovCi1mdW5j
dGlvbiBzdGVwTWlzbWF0Y2godGltZSkgewotICAgIHJldHVybiAodGltZSAtIGdsb2JhbC5taW5p
bXVtRGF0ZS5nZXRUaW1lKCkpICUgZ2xvYmFsLnN0ZXAgIT0gMDsKLX0KLQotLyoqCi0gKiBAcGFy
YW0geyFudW1iZXJ9IHRpbWUgZGF0ZSBpbiBtaWxsaXNlY29uZC4KLSAqIEByZXR1cm4geyFib29s
ZWFufQotICovCi1mdW5jdGlvbiBvdXRPZlJhbmdlKHRpbWUpIHsKLSAgICByZXR1cm4gdGltZSA8
IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkgfHwgdGltZSA+IGdsb2JhbC5tYXhpbXVtRGF0
ZS5nZXRUaW1lKCk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHshbnVtYmVyfSB0aW1lIGRhdGUgaW4g
bWlsbGlzZWNvbmQuCi0gKiBAcmV0dXJuIHshYm9vbGVhbn0KLSAqLwotZnVuY3Rpb24gaXNWYWxp
ZERhdGUodGltZSkgewotICAgIHJldHVybiAhb3V0T2ZSYW5nZSh0aW1lKSAmJiAhc3RlcE1pc21h
dGNoKHRpbWUpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgotICogQHBhcmFt
IHshbnVtYmVyfSBtb250aAotICovCi1EYXlzVGFibGUucHJvdG90eXBlLl9yZW5kZXJNb250aCA9
IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7Ci0gICAgdGhpcy5fY3VycmVudFllYXIgPSB5ZWFyOwot
ICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IG1vbnRoOwotICAgIHZhciBkYXlJdGVyYXRvciA9IG5l
dyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKSk7Ci0gICAgZGF5SXRlcmF0b3Iuc2V0VVRD
RnVsbFllYXIoeWVhcik7Ci0gICAgdmFyIG1vbnRoU3RhcnREYXkgPSBkYXlJdGVyYXRvci5nZXRV
VENEYXkoKTsKLSAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnRE
YXkgfHwgMDsKLSAgICB2YXIgc3RhcnRPZmZzZXQgPSB3ZWVrU3RhcnREYXkgLSBtb250aFN0YXJ0
RGF5OwotICAgIGlmIChzdGFydE9mZnNldCA+PSAwKQotICAgICAgICBzdGFydE9mZnNldCAtPSA3
OwotICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUoc3RhcnRPZmZzZXQgKyAxKTsKLSAgICBmb3Ig
KHZhciB3ID0gMDsgdyA8IERheXNUYWJsZS5fV2Vla3M7IHcrKykgewotICAgICAgICBmb3IgKHZh
ciBkID0gMDsgZCA8IDc7IGQrKykgewotICAgICAgICAgICAgdmFyIGl0ZXJZZWFyID0gZGF5SXRl
cmF0b3IuZ2V0VVRDRnVsbFllYXIoKTsKLSAgICAgICAgICAgIHZhciBpdGVyTW9udGggPSBkYXlJ
dGVyYXRvci5nZXRVVENNb250aCgpOwotICAgICAgICAgICAgdmFyIHRpbWUgPSBkYXlJdGVyYXRv
ci5nZXRUaW1lKCk7Ci0gICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX2RheXNbd11bZF07
Ci0gICAgICAgICAgICAvLyBGSVhNRTogTmVlZCBsb2NhbGl6ZWQgbnVtYmVyPwotICAgICAgICAg
ICAgZWxlbWVudC5pbm5lclRleHQgPSBTdHJpbmcoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsK
LSAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQ2xhc3NOYW1lcy5EYXk7Ci0gICAgICAg
ICAgICBlbGVtZW50LmRhdGFzZXQuc3VibWl0VmFsdWUgPSBzZXJpYWxpemVEYXRlKGl0ZXJZZWFy
LCBpdGVyTW9udGgsIGRheUl0ZXJhdG9yLmdldFVUQ0RhdGUoKSk7Ci0gICAgICAgICAgICBpZiAo
b3V0T2ZSYW5nZSh0aW1lKSkKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQo
Q2xhc3NOYW1lcy5VbmF2YWlsYWJsZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGVwTWlzbWF0
Y2godGltZSkpCi0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFt
ZXMuVW5hdmFpbGFibGUpOwotICAgICAgICAgICAgZWxzZSBpZiAoKGl0ZXJZZWFyID09IHllYXIg
JiYgZGF5SXRlcmF0b3IuZ2V0VVRDTW9udGgoKSA8IG1vbnRoKSB8fCAobW9udGggPT0gMCAmJiBp
dGVyTW9udGggPT0gMTEpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRk
KENsYXNzTmFtZXMuQXZhaWxhYmxlKTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlz
dC5hZGQoQ2xhc3NOYW1lcy5Ob3RUaGlzTW9udGgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgo
aXRlclllYXIgPT0geWVhciAmJiBkYXlJdGVyYXRvci5nZXRVVENNb250aCgpID4gbW9udGgpIHx8
IChtb250aCA9PSAxMSAmJiBpdGVyTW9udGggPT0gMCkpIHsKLSAgICAgICAgICAgICAgICBlbGVt
ZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5BdmFpbGFibGUpOwotICAgICAgICAgICAgICAg
IGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLk5vdFRoaXNNb250aCk7Ci0gICAgICAg
ICAgICB9IGVsc2UgaWYgKGlzTmFOKHRpbWUpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5p
bm5lclRleHQgPSAiLSI7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENs
YXNzTmFtZXMuVW5hdmFpbGFibGUpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuQXZhaWxhYmxlKTsKLSAgICAgICAg
ICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpICsgMSk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBnbG9iYWwudG9kYXkuZGlzYWJsZWQgPSAhaXNWYWxp
ZERhdGUocGFyc2VEYXRlU3RyaW5nKCkuZ2V0VGltZSgpKTsKLX07Ci0KLS8qKgotICogQHBhcmFt
IHshbnVtYmVyfSB5ZWFyCi0gKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCi0gKi8KLURheXNUYWJs
ZS5wcm90b3R5cGUuX25hdmlnYXRlVG9Nb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7Ci0g
ICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuc2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKTsK
LSAgICB0aGlzLl9yZW5kZXJNb250aCh5ZWFyLCBtb250aCk7Ci19OwotCi0vKioKLSAqIEBwYXJh
bSB7IW51bWJlcn0geWVhcgotICogQHBhcmFtIHshbnVtYmVyfSBtb250aAotICovCi1EYXlzVGFi
bGUucHJvdG90eXBlLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uID0gZnVuY3Rpb24oeWVh
ciwgbW9udGgpIHsKLSAgICBpZiAodGhpcy5fY3VycmVudFllYXIgPj0gMCAmJiB0aGlzLl9jdXJy
ZW50TW9udGggPj0gMCkgewotICAgICAgICBpZiAoeWVhciA9PSB0aGlzLl9jdXJyZW50WWVhciAm
JiBtb250aCA9PSB0aGlzLl9jdXJyZW50TW9udGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIHZhciBkZWNyZWFzaW5nID0gZmFsc2U7Ci0gICAgICAgIGlmICh5ZWFyIDwgdGhpcy5fY3Vy
cmVudFllYXIpCi0gICAgICAgICAgICBkZWNyZWFzaW5nID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBp
ZiAoeWVhciA+IHRoaXMuX2N1cnJlbnRZZWFyKQotICAgICAgICAgICAgZGVjcmVhc2luZyA9IGZh
bHNlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkZWNyZWFzaW5nID0gbW9udGggPCB0aGlz
Ll9jdXJyZW50TW9udGg7Ci0gICAgICAgIHZhciBkYXlzU3R5bGUgPSB0aGlzLl9kYXlzQ29udGFp
bmVyLnN0eWxlOwotICAgICAgICBkYXlzU3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAg
ICAgICBkYXlzU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICJsZWZ0IDAuMXMgZWFzZSI7Ci0gICAg
ICAgIGRheXNTdHlsZS5sZWZ0ID0gKGRlY3JlYXNpbmcgPyAiIiA6ICItIikgKyB0aGlzLl9kYXlz
Q29udGFpbmVyLm9mZnNldFdpZHRoICsgInB4IjsKLSAgICB9Ci0gICAgdGhpcy5fbmF2aWdhdGVU
b01vbnRoKHllYXIsIG1vbnRoKTsKLX07Ci0KLURheXNUYWJsZS5wcm90b3R5cGUuX21vdmVJbkRh
eXMgPSBmdW5jdGlvbigpIHsKLSAgICB2YXIgZGF5c1N0eWxlID0gdGhpcy5fZGF5c0NvbnRhaW5l
ci5zdHlsZTsKLSAgICBpZiAoZGF5c1N0eWxlLmxlZnQgPT0gIjBweCIpCi0gICAgICAgIHJldHVy
bjsKLSAgICBkYXlzU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICIiOwotICAgIGRheXNTdHlsZS5s
ZWZ0ID0gKGRheXNTdHlsZS5sZWZ0LmNoYXJBdCgwKSA9PSAiLSIgPyAiIiA6ICItIikgKyB0aGlz
Ll9kYXlzQ29udGFpbmVyLm9mZnNldFdpZHRoICsgInB4IjsKLSAgICB0aGlzLl9kYXlzQ29udGFp
bmVyLm9mZnNldExlZnQ7IC8vIEZvcmNlIHRvIGxheW91dC4KLSAgICBkYXlzU3R5bGUud2Via2l0
VHJhbnNpdGlvbiA9ICJsZWZ0IDAuMXMgZWFzZSI7Ci0gICAgZGF5c1N0eWxlLmxlZnQgPSAiMHB4
IjsKLX07Ci0KLS8qKgotICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCi0gKiBAcGFyYW0geyFudW1i
ZXJ9IG1vbnRoCi0gKi8KLURheXNUYWJsZS5wcm90b3R5cGUubmF2aWdhdGVUb01vbnRoQW5kS2Vl
cFNlbGVjdGlvblBvc2l0aW9uID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKLSAgICBpZiAoeWVh
ciA9PSB0aGlzLl9jdXJyZW50WWVhciAmJiBtb250aCA9PSB0aGlzLl9jdXJyZW50TW9udGgpCi0g
ICAgICAgIHJldHVybjsKLSAgICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHll
YXIsIG1vbnRoKTsKLSAgICBpZiAodGhpcy5faGFzU2VsZWN0aW9uKCkpCi0gICAgICAgIHRoaXMu
X2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVk
KTsKLX07Ci0KLS8qKgotICogQHBhcmFtIHshRGF0ZX0gZGF0ZQotICovCi1EYXlzVGFibGUucHJv
dG90eXBlLnNlbGVjdERhdGUgPSBmdW5jdGlvbihkYXRlKSB7Ci0gICAgdGhpcy5fbmF2aWdhdGVU
b01vbnRoV2l0aEFuaW1hdGlvbihkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9u
dGgoKSk7Ci0gICAgdmFyIGRhdGVTdHJpbmcgPSBzZXJpYWxpemVEYXRlKGRhdGUuZ2V0VVRDRnVs
bFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7Ci0gICAgZm9y
ICh2YXIgdyA9IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3KyspIHsKLSAgICAgICAgZm9yICh2
YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9kYXlzW3ddW2Rd
LmRhdGFzZXQuc3VibWl0VmFsdWUgPT0gZGF0ZVN0cmluZykgewotICAgICAgICAgICAgICAgIHRo
aXMuX2RheXNbd11bZF0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVkKTsKLSAgICAg
ICAgICAgICAgICB0aGlzLl94ID0gZDsKLSAgICAgICAgICAgICAgICB0aGlzLl95ID0gdzsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX07
Ci0KLS8qKgotICogQHJldHVybiB7IWJvb2xlYW59Ci0gKi8KLURheXNUYWJsZS5wcm90b3R5cGUu
X21heWJlU2V0UHJldmlvdXNNb250aCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciB5ZWFyID0gZ2xv
YmFsLnllYXJNb250aENvbnRyb2xsZXIueWVhcigpOwotICAgIHZhciBtb250aCA9IGdsb2JhbC55
ZWFyTW9udGhDb250cm9sbGVyLm1vbnRoKCk7Ci0gICAgdmFyIHRoaXNNb250aFN0YXJ0VGltZSA9
IERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKTsKLSAgICBpZiAoZ2xvYmFsLm1pbmltdW1EYXRlLmdl
dFRpbWUoKSA+PSB0aGlzTW9udGhTdGFydFRpbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBpZiAobW9udGggPT0gMCkgewotICAgICAgICB5ZWFyLS07Ci0gICAgICAgIG1vbnRoID0gMTE7
Ci0gICAgfSBlbHNlCi0gICAgICAgIG1vbnRoLS07Ci0gICAgdGhpcy5fbmF2aWdhdGVUb01vbnRo
V2l0aEFuaW1hdGlvbih5ZWFyLCBtb250aCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19OwotCi0vKioK
LSAqIEByZXR1cm4geyFib29sZWFufQotICovCi1EYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNl
dE5leHRNb250aCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciB5ZWFyID0gZ2xvYmFsLnllYXJNb250
aENvbnRyb2xsZXIueWVhcigpOwotICAgIHZhciBtb250aCA9IGdsb2JhbC55ZWFyTW9udGhDb250
cm9sbGVyLm1vbnRoKCk7Ci0gICAgaWYgKG1vbnRoID09IDExKSB7Ci0gICAgICAgIHllYXIrKzsK
LSAgICAgICAgbW9udGggPSAwOwotICAgIH0gZWxzZQotICAgICAgICBtb250aCsrOwotICAgIHZh
ciBuZXh0TW9udGhTdGFydFRpbWUgPSBEYXRlLlVUQyh5ZWFyLCBtb250aCwgMSk7Ci0gICAgaWYg
KGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRUaW1lKCkgPCBuZXh0TW9udGhTdGFydFRpbWUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9u
KHllYXIsIG1vbnRoKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX07Ci0KLS8qKgotICogQHBhcmFtIHtF
dmVudH0gZXZlbnQKLSAqLwotRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlRGF5Q2xpY2sgPSBm
dW5jdGlvbihldmVudCkgewotICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5z
KENsYXNzTmFtZXMuQXZhaWxhYmxlKSkKLSAgICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0
LmRhdGFzZXQuc3VibWl0VmFsdWUpOwotfTsKLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBldmVu
dAotICovCi1EYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVNb3VzZU92ZXIgPSBmdW5jdGlvbihl
dmVudCkgewotICAgIHZhciBub2RlID0gZXZlbnQudGFyZ2V0OwotICAgIGlmICh0aGlzLl9oYXNT
ZWxlY3Rpb24oKSkKLSAgICAgICAgdGhpcy5fZGF5c1t0aGlzLl95XVt0aGlzLl94XS5jbGFzc0xp
c3QucmVtb3ZlKENsYXNzTmFtZXMuU2VsZWN0ZWQpOwotICAgIGlmICghbm9kZS5jbGFzc0xpc3Qu
Y29udGFpbnMoQ2xhc3NOYW1lcy5EYXkpKSB7Ci0gICAgICAgIHRoaXMuX3ggPSAtMTsKLSAgICAg
ICAgdGhpcy5feSA9IC0xOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG5vZGUuY2xhc3NM
aXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVkKTsKLSAgICB0aGlzLl94ID0gTnVtYmVyKG5vZGUu
ZGF0YXNldC5wb3NpdGlvblgpOwotICAgIHRoaXMuX3kgPSBOdW1iZXIobm9kZS5kYXRhc2V0LnBv
c2l0aW9uWSk7Ci19OwotCi0vKioKLSAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gKi8KLURheXNU
YWJsZS5wcm90b3R5cGUuX2hhbmRsZU1vdXNlT3V0ID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICBp
ZiAodGhpcy5faGFzU2VsZWN0aW9uKCkpCi0gICAgICAgIHRoaXMuX2RheXNbdGhpcy5feV1bdGhp
cy5feF0uY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVzLlNlbGVjdGVkKTsKLSAgICB0aGlzLl94
ID0gLTE7Ci0gICAgdGhpcy5feSA9IC0xOwotfTsKLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBl
dmVudAotICovCi1EYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkgPSBmdW5jdGlvbihldmVu
dCkgewotICAgIG1heWJlVXBkYXRlRm9jdXNTdHlsZSgpOwotICAgIHZhciB4ID0gdGhpcy5feDsK
LSAgICB2YXIgeSA9IHRoaXMuX3k7Ci0gICAgdmFyIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXI7
Ci0gICAgaWYgKCF0aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkg
PT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSkgewotICAgICAgICAv
LyBQdXQgdGhlIHNlbGVjdGlvbiBvbiBhIGNlbnRlciBjZWxsLgotICAgICAgICB0aGlzLnVwZGF0
ZVNlbGVjdGlvbihldmVudCwgMywgTWF0aC5mbG9vcihEYXlzVGFibGUuX1dlZWtzIC8gMiAtIDEp
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChrZXkgPT0gKGdsb2JhbC5wYXJh
bXMuaXNSVEwgPyAiUmlnaHQiIDogIkxlZnQiKSkgewotICAgICAgICBpZiAoeCA9PSAwKSB7Ci0g
ICAgICAgICAgICBpZiAoeSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXli
ZVNldFByZXZpb3VzTW9udGgoKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgICAgIHkgPSBEYXlzVGFibGUuX1dlZWtzIC0gMTsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIHktLTsKLSAgICAgICAgICAgIHggPSA2OwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHgtLTsKLSAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgs
IHkpOwotCi0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlVwIikgewotICAgICAgICBpZiAoeSA9PSAw
KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHkgPSBEYXlzVGFibGUuX1dlZWtzIC0g
MTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB5LS07Ci0gICAgICAgIHRoaXMudXBkYXRl
U2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKLQotICAgIH0gZWxzZSBpZiAoa2V5ID09IChnbG9iYWwu
cGFyYW1zLmlzUlRMID8gIkxlZnQiIDogIlJpZ2h0IikpIHsKLSAgICAgICAgaWYgKHggPT0gNikg
ewotICAgICAgICAgICAgaWYgKHkgPT0gRGF5c1RhYmxlLl9XZWVrcyAtIDEpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB5ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgIHkrKzsKLSAgICAgICAgICAgIHggPSAwOwotICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgIHgrKzsKLSAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgs
IHkpOwotCi0gICAgfSBlbHNlIGlmIChrZXkgPT0gIkRvd24iKSB7Ci0gICAgICAgIGlmICh5ID09
IERheXNUYWJsZS5fV2Vla3MgLSAxKSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0
TmV4dE1vbnRoKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgeSA9IDA7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgeSsrOwotICAgICAgICB0aGlzLnVwZGF0ZVNl
bGVjdGlvbihldmVudCwgeCwgeSk7Ci0KLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZVVwIikg
ewotICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aCgpKQotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7Ci0K
LSAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZURvd24iKSB7Ci0gICAgICAgIGlmICghdGhpcy5f
bWF5YmVTZXROZXh0TW9udGgoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy51
cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwotCi0gICAgfSBlbHNlIGlmICh0aGlzLl9oYXNT
ZWxlY3Rpb24oKSAmJiBrZXkgPT0gIkVudGVyIikgewotICAgICAgICB2YXIgZGF5Tm9kZSA9IHRo
aXMuX2RheXNbeV1beF07Ci0gICAgICAgIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhD
bGFzc05hbWVzLkF2YWlsYWJsZSkpIHsKLSAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRheU5vZGUu
ZGF0YXNldC5zdWJtaXRWYWx1ZSk7Ci0gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24o
KTsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA1NCIpIHsgLy8gJ3Qn
Ci0gICAgICAgIHRoaXMuX2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NMaXN0LnJlbW92ZShD
bGFzc05hbWVzLlNlbGVjdGVkKTsKLSAgICAgICAgdGhpcy5zZWxlY3REYXRlKG5ldyBEYXRlKCkp
OwotICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgZXZlbnQucHJldmVu
dERlZmF1bHQoKTsKLSAgICB9Ci19OwotCi0vKioKLSAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0g
KiBAcGFyYW0geyFudW1iZXJ9IHgKLSAqIEBwYXJhbSB7IW51bWJlcn0geQotICovCi1EYXlzVGFi
bGUucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50LCB4LCB5KSB7Ci0g
ICAgaWYgKHRoaXMuX2hhc1NlbGVjdGlvbigpKQotICAgICAgICB0aGlzLl9kYXlzW3RoaXMuX3ld
W3RoaXMuX3hdLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7Ci0gICAgaWYg
KHggPj0gMCAmJiB5ID49IDApIHsKLSAgICAgICAgdGhpcy5fZGF5c1t5XVt4XS5jbGFzc0xpc3Qu
YWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQpOwotICAgICAgICB0aGlzLl94ID0geDsKLSAgICAgICAg
dGhpcy5feSA9IHk7Ci0gICAgfQotICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWZ1bmN0aW9uIGhhbmRs
ZVRvZGF5KCkgewotICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKLSAgICBnbG9iYWwuZGF5c1Rh
YmxlLnNlbGVjdERhdGUoZGF0ZSk7Ci0gICAgc3VibWl0VmFsdWUoc2VyaWFsaXplRGF0ZShkYXRl
LmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpKTsKLX0KLQot
ZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7Ci0gICAgc3VibWl0VmFsdWUoIiIpOwotfQotCi0vKioK
LSAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQotICovCi1mdW5jdGlvbiBzdWJtaXRWYWx1ZSh2YWx1
ZSkgewotICAgIHdpbmRvdy5wYWdlUG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5kQ2xvc2VQb3B1
cCgwLCB2YWx1ZSk7Ci19Ci0KLWZ1bmN0aW9uIGhhbmRsZUNhbmNlbCgpIHsKLSAgICB3aW5kb3cu
cGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoLTEsICIiKTsKLX0KLQot
LyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICovCi1mdW5jdGlvbiBoYW5kbGVHbG9iYWxL
ZXkoZXZlbnQpIHsKLSAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKLSAgICB2YXIga2V5ID0g
ZXZlbnQua2V5SWRlbnRpZmllcjsKLSAgICBpZiAoa2V5ID09ICJVKzAwMDkiKSB7Ci0gICAgICAg
IGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwu
bGFzdEZvY3VzYWJsZUNvbnRyb2wpIHsKLSAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlv
bigpOwotICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIGds
b2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKLSAgICAgICAgfSBlbHNlIGlmIChl
dmVudC5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGdsb2JhbC5maXJzdEZv
Y3VzYWJsZUNvbnRyb2wpIHsKLSAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwot
ICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIGdsb2JhbC5s
YXN0Rm9jdXNhYmxlQ29udHJvbC5mb2N1cygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChr
ZXkgPT0gIlUrMDA0RCIpIHsgLy8gJ20nCi0gICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9s
bGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlci5Q
cmV2aW91c01vbnRoIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9udGgpOwotICAgIH0gZWxz
ZSBpZiAoa2V5ID09ICJVKzAwNTkiKSB7IC8vICd5JwotICAgICAgICBnbG9iYWwueWVhck1vbnRo
Q29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENvbnRy
b2xsZXIuUHJldmlvdXNZZWFyIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0WWVhcik7Ci0gICAg
fSBlbHNlIGlmIChrZXkgPT0gIlUrMDA0NCIpIHsgLy8gJ2QnCi0gICAgICAgIGdsb2JhbC55ZWFy
TW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRo
Q29udHJvbGxlci5QcmV2aW91c1RlblllYXJzIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0VGVu
WWVhcnMpOwotICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwMUIiKSAvLyBFU0MKLSAgICAgICAg
aGFuZGxlQ2FuY2VsKCk7Ci19Ci0KLWZ1bmN0aW9uIG1heWJlVXBkYXRlRm9jdXNTdHlsZSgpIHsK
LSAgICBpZiAoZ2xvYmFsLmhhZEtleUV2ZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZ2xvYmFs
LmhhZEtleUV2ZW50ID0gdHJ1ZTsKLSAgICAkKCJtYWluIikuY2xhc3NMaXN0LnJlbW92ZShDbGFz
c05hbWVzLk5vRm9jdXNSaW5nKTsKLX0KLQotaWYgKHdpbmRvdy5kaWFsb2dBcmd1bWVudHMpIHsK
LSAgICBpbml0aWFsaXplKGRpYWxvZ0FyZ3VtZW50cyk7Ci19IGVsc2UgewotICAgIHdpbmRvdy5h
ZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgaGFuZGxlTWVzc2FnZSwgZmFsc2UpOwotICAgIHdp
bmRvdy5zZXRUaW1lb3V0KGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQsIDEwMDApOwotfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyTWFjLmNzcyBiL1Nv
dXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlck1hYy5jc3MKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDQxNDQ2NDU2MjdhOTc1ZTdiNWE5Nzg1OTRiYWVmZjExMjA4MThi
OTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyTWFjLmNzcworKysgL2Rldi9udWxsCkBA
IC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAq
IG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0g
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0ueWVhci1tb250aC1idXR0b24gewotICAgIC13ZWJraXQtYXBwZWFyYW5j
ZTogbm9uZTsKLSAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0
b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNmZmYpLCBjb2xvci1zdG9wKDAuMywgI2ZmZiksIGNvbG9y
LXN0b3AoMC4zNSwgI2Y3ZjdmNyksIGNvbG9yLXN0b3AoMC40OSwgI2Y3ZjdmNyksIGNvbG9yLXN0
b3AoMC41LCAjZWRlZGVkKSwgdG8oI2VkZWRlZCkpOwotICAgIGJvcmRlcjogc29saWQgMXB4ICNh
NmE2YTY7Ci0gICAgYm9yZGVyLXJhZGl1czogNHB4OwotICAgIGJveC1zaGFkb3c6IGluc2V0IDFw
eCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC40KSwgaW5zZXQgLTFweCAtMXB4IDFweCByZ2Jh
KDI1NSwyNTUsMjU1LDAuNCk7Ci0gICAgcGFkZGluZy1sZWZ0OiAzcHg7Ci0gICAgcGFkZGluZy1y
aWdodDogM3B4OwotfQotCi0ueWVhci1tb250aC1idXR0b246YWN0aXZlIHsKLSAgICBiYWNrZ3Jv
dW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9t
KCNhM2JmZWYpLCBjb2xvci1zdG9wKDAuNDksICAjNmJhM2VmKSwgY29sb3Itc3RvcCgwLjUsICM0
NDkxZWYpLCB0bygjYTNkMWVmKSk7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggIzRkNGQ1MDsKLX0K
LQotLnllYXItbW9udGgtYnV0dG9uOmRpc2FibGVkIHsKLSAgICBjb2xvcjogIzg4ODsKLSAgICBi
b3JkZXI6IHNvbGlkIDFweCAjZDFkMWQxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL2NvbG9yU3VnZ2VzdGlvblBpY2tlci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9SZXNv
dXJjZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggNmY4NDdmZWJjYWVlYTc2OTU1YWI1ZmI1ODcxYzQ3MjFiOTliNGJmNC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9SZXNv
dXJjZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDY5ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi1ib2R5IHsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwot
ICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotICAgIGZvbnQ6IC13ZWJraXQtc21hbGwtY29u
dHJvbDsKLSAgICBtYXJnaW46IDA7Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotI21haW4g
ewotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotICAgIGJvcmRlcjogc29saWQgMXB4ICM4
ODk5YWE7Ci0gICAgYm94LXNoYWRvdzogaW5zZXQgMnB4IDJweCAycHggd2hpdGUsCi0gICAgICAg
IGluc2V0IC0ycHggLTJweCAxcHggcmdiYSgwLDAsMCwwLjEpOwotICAgIHBhZGRpbmc6IDZweDsK
LSAgICBmbG9hdDogbGVmdDsKLX0KLQotLmNvbG9yLXN3YXRjaCB7Ci0gICAgZmxvYXQ6IGxlZnQ7
Ci0gICAgd2lkdGg6IDIwcHg7Ci0gICAgaGVpZ2h0OiAyMHB4OwotICAgIG1hcmdpbjogMXB4Owot
ICAgIHBhZGRpbmc6IDA7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDsKLSAgICBib3gt
c2l6aW5nOiBjb250ZW50LWJveDsKLX0KLQotLmNvbG9yLXN3YXRjaDpmb2N1cyB7Ci0gICAgYm9y
ZGVyOiAxcHggc29saWQgIzAwMDAwMDsKLSAgICBvdXRsaW5lOiBub25lOwotfQotCi0uY29sb3It
c3dhdGNoLWNvbnRhaW5lciB7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgbWF4LWhlaWdodDogMTA0
cHg7Ci0gICAgb3ZlcmZsb3c6IGF1dG87Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotICAg
IC13ZWJraXQtZmxleC1mbG93OiByb3cgd3JhcDsKLSAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBj
ZW50ZXI7Ci19Ci0KLS5vdGhlci1jb2xvciB7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgbWFyZ2lu
OiA0cHggMCAwIDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY29s
b3JTdWdnZXN0aW9uUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NvbG9yU3Vn
Z2VzdGlvblBpY2tlci5qcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgyN2U5NmQx
YzFkZTdhMDMwYWVlYWE4YjhmYzE3MWI3ZGM5YTViYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY29sb3JTdWdn
ZXN0aW9uUGlja2VyLmpzCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLSJ1c2Ugc3Ry
aWN0IjsKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
Ci0gKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi12YXIgZ2xvYmFsID0gewotICAgIGFyZ3VtZW50c1JlY2VpdmVkOiBm
YWxzZSwKLSAgICBzY3JvbGxiYXJXaWR0aDogbnVsbAotfTsKLQotLyoqCi0gKiBAcGFyYW0geyFz
dHJpbmd9IGlkCi0gKi8KLWZ1bmN0aW9uICQoaWQpIHsKLSAgICByZXR1cm4gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpOwotfQotCi1mdW5jdGlvbiBiaW5kKGZ1bmMsIGNvbnRleHQpIHsKLSAg
ICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQs
IGFyZ3VtZW50cyk7Ci0gICAgfTsKLX0KLQotZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyV2lkdGgoKSB7
Ci0gICAgaWYgKGdsb2JhbC5zY3JvbGxiYXJXaWR0aCA9PT0gbnVsbCkgewotICAgICAgICB2YXIg
c2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHNjcm9s
bERpdi5zdHlsZS5vcGFjaXR5ID0gIjAiOwotICAgICAgICBzY3JvbGxEaXYuc3R5bGUub3ZlcmZs
b3cgPSAic2Nyb2xsIjsKLSAgICAgICAgc2Nyb2xsRGl2LnN0eWxlLndpZHRoID0gIjUwcHgiOwot
ICAgICAgICBzY3JvbGxEaXYuc3R5bGUuaGVpZ2h0ID0gIjUwcHgiOwotICAgICAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7Ci0gICAgICAgIGdsb2JhbC5zY3JvbGxiYXJX
aWR0aCA9IHNjcm9sbERpdi5vZmZzZXRXaWR0aCAtIHNjcm9sbERpdi5jbGllbnRXaWR0aDsKLSAg
ICAgICAgc2Nyb2xsRGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2Nyb2xsRGl2KTsKLSAgICB9
Ci0gICAgcmV0dXJuIGdsb2JhbC5zY3JvbGxiYXJXaWR0aDsKLX0KLQotLyoqCi0gKiBAcGFyYW0g
eyFzdHJpbmd9IHRhZ05hbWUKLSAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X2NsYXNzCi0gKiBAcGFy
YW0ge3N0cmluZz19IG9wdF90ZXh0Ci0gKiBAcmV0dXJuIHshRWxlbWVudH0KLSAqLwotZnVuY3Rp
b24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7Ci0gICAgdmFy
IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgIGlmIChvcHRf
Y2xhc3MpCi0gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG9wdF9jbGFzcyk7
Ci0gICAgaWYgKG9wdF90ZXh0KQotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLS8q
KgotICogQHBhcmFtIHshbnVtYmVyfSB3aWR0aAotICogQHBhcmFtIHshbnVtYmVyfSBoZWlnaHQK
LSAqLwotZnVuY3Rpb24gcmVzaXplV2luZG93KHdpZHRoLCBoZWlnaHQpIHsKLSAgICBpZiAod2lu
ZG93LmZyYW1lRWxlbWVudCkgewotICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLndp
ZHRoID0gd2lkdGggKyAicHgiOwotICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLmhl
aWdodCA9IGhlaWdodCArICJweCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2luZG93LnJlc2l6
ZVRvKHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLX0KLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBl
dmVudAotICovCi1mdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7Ci0gICAgaW5pdGlhbGl6
ZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTsKLSAgICBnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQg
PSB0cnVlOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IU9iamVjdH0gYXJncwotICovCi1mdW5jdGlv
biBpbml0aWFsaXplKGFyZ3MpIHsKLSAgICB2YXIgbWFpbiA9ICQoIm1haW4iKTsKLSAgICBtYWlu
LmlubmVySFRNTCA9ICIiOwotICAgIHZhciBlcnJvclN0cmluZyA9IHZhbGlkYXRlQXJndW1lbnRz
KGFyZ3MpOwotICAgIGlmIChlcnJvclN0cmluZykgewotICAgICAgICBtYWluLnRleHRDb250ZW50
ID0gIkludGVybmFsIGVycm9yOiAiICsgZXJyb3JTdHJpbmc7Ci0gICAgICAgIHJlc2l6ZVdpbmRv
dyhtYWluLm9mZnNldFdpZHRoLCBtYWluLm9mZnNldEhlaWdodCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIG5ldyBDb2xvclBpY2tlcihtYWluLCBhcmdzKTsKLX0KLQotLy8gVGhlIERlZmF1bHRDb2xv
clBhbGV0dGUgaXMgdXNlZCB3aGVuIHRoZSBsaXN0IG9mIHZhbHVlcyBhcmUgZW1wdHkuIAotdmFy
IERlZmF1bHRDb2xvclBhbGV0dGUgPSBbIiMwMDAwMDAiLCAiIzQwNDA0MCIsICIjODA4MDgwIiwg
IiNjMGMwYzAiLAotICAgICIjZmZmZmZmIiwgIiM5ODAwMDAiLCAiI2ZmMDAwMCIsICIjZmY5OTAw
IiwgIiNmZmZmMDAiLCAiIzAwZmYwMCIsICIjMDBmZmZmIiwKLSAgICAiIzRhODZlOCIsICIjMDAw
MGZmIiwgIiM5OTAwZmYiLCAiI2ZmMDBmZiJdOwotCi1mdW5jdGlvbiBoYW5kbGVBcmd1bWVudHNU
aW1lb3V0KCkgewotICAgIGlmIChnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCi0gICAgICAgIHJl
dHVybjsKLSAgICB2YXIgYXJncyA9IHsKLSAgICAgICAgdmFsdWVzIDogRGVmYXVsdENvbG9yUGFs
ZXR0ZSwKLSAgICAgICAgb3RoZXJDb2xvckxhYmVsOiAiT3RoZXIuLi4iCi0gICAgfTsKLSAgICBp
bml0aWFsaXplKGFyZ3MpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IU9iamVjdH0gYXJncwotICog
QHJldHVybiB7P3N0cmluZ30gQW4gZXJyb3IgbWVzc2FnZSwgb3IgbnVsbCBpZiB0aGUgYXJndW1l
bnQgaGFzIG5vIGVycm9ycy4KLSAqLwotZnVuY3Rpb24gdmFsaWRhdGVBcmd1bWVudHMoYXJncykg
ewotICAgIGlmICghYXJncy52YWx1ZXMpCi0gICAgICAgIHJldHVybiAiTm8gdmFsdWVzLiI7Ci0g
ICAgaWYgKCFhcmdzLm90aGVyQ29sb3JMYWJlbCkKLSAgICAgICAgcmV0dXJuICJObyBvdGhlckNv
bG9yTGFiZWwuIjsKLSAgICByZXR1cm4gbnVsbDsKLX0KLQotdmFyIEFjdGlvbnMgPSB7Ci0gICAg
Q2hvb3NlT3RoZXJDb2xvcjogLTIsCi0gICAgQ2FuY2VsOiAtMSwKLSAgICBTZXRWYWx1ZTogMAot
fTsKLQotLyoqCi0gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUKLSAqLwotZnVuY3Rpb24gc3VibWl0
VmFsdWUodmFsdWUpIHsKLSAgICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFu
ZENsb3NlUG9wdXAoQWN0aW9ucy5TZXRWYWx1ZSwgdmFsdWUpOwotfQotCi1mdW5jdGlvbiBoYW5k
bGVDYW5jZWwoKSB7Ci0gICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRD
bG9zZVBvcHVwKEFjdGlvbnMuQ2FuY2VsLCAiIik7Ci19Ci0KLWZ1bmN0aW9uIGNob29zZU90aGVy
Q29sb3IoKSB7Ci0gICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9z
ZVBvcHVwKEFjdGlvbnMuQ2hvb3NlT3RoZXJDb2xvciwgIiIpOwotfQotCi1mdW5jdGlvbiBDb2xv
clBpY2tlcihlbGVtZW50LCBjb25maWcpIHsKLSAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsK
LSAgICB0aGlzLl9jb25maWcgPSBjb25maWc7Ci0gICAgaWYgKHRoaXMuX2NvbmZpZy52YWx1ZXMu
bGVuZ3RoID09PSAwKQotICAgICAgICB0aGlzLl9jb25maWcudmFsdWVzID0gRGVmYXVsdENvbG9y
UGFsZXR0ZTsKLSAgICB0aGlzLl9jb250YWluZXIgPSBudWxsOwotICAgIHRoaXMuX2xheW91dCgp
OwotICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhp
cy5faGFuZGxlS2V5RG93biwgdGhpcykpOwotICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0
ZW5lcigibW91c2Vtb3ZlIiwgYmluZCh0aGlzLl9oYW5kbGVNb3VzZU1vdmUsIHRoaXMpKTsKLSAg
ICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGJpbmQodGhpcy5f
aGFuZGxlTW91c2VEb3duLCB0aGlzKSk7Ci19Ci0KLXZhciBTd2F0Y2hCb3JkZXJCb3hXaWR0aCA9
IDI0OyAvLyBrZWVwIGluIHN5bmMgd2l0aCBDU1MKLXZhciBTd2F0Y2hCb3JkZXJCb3hIZWlnaHQg
PSAyNDsgLy8ga2VlcCBpbiBzeW5jIHdpdGggQ1NTCi12YXIgU3dhdGNoZXNQZXJSb3cgPSA1Owot
dmFyIFN3YXRjaGVzTWF4Um93ID0gNDsKLQotQ29sb3JQaWNrZXIucHJvdG90eXBlLl9sYXlvdXQg
PSBmdW5jdGlvbigpIHsKLSAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2Iiwg
ImNvbG9yLXN3YXRjaC1jb250YWluZXIiKTsKLSAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZVN3YXRjaENsaWNrLCB0aGlzKSwgZmFsc2UpOwot
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY29uZmlnLnZhbHVlcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICB2YXIgc3dhdGNoID0gY3JlYXRlRWxlbWVudCgiYnV0dG9uIiwgImNvbG9yLXN3
YXRjaCIpOwotICAgICAgICBzd2F0Y2guZGF0YXNldC5pbmRleCA9IGk7Ci0gICAgICAgIHN3YXRj
aC5kYXRhc2V0LnZhbHVlID0gdGhpcy5fY29uZmlnLnZhbHVlc1tpXTsKLSAgICAgICAgc3dhdGNo
LnRpdGxlID0gdGhpcy5fY29uZmlnLnZhbHVlc1tpXTsKLSAgICAgICAgc3dhdGNoLnN0eWxlLmJh
Y2tncm91bmRDb2xvciA9IHRoaXMuX2NvbmZpZy52YWx1ZXNbaV07Ci0gICAgICAgIGNvbnRhaW5l
ci5hcHBlbmRDaGlsZChzd2F0Y2gpOwotICAgIH0KLSAgICB2YXIgY29udGFpbmVyV2lkdGggPSBT
d2F0Y2hCb3JkZXJCb3hXaWR0aCAqIFN3YXRjaGVzUGVyUm93OwotICAgIGlmICh0aGlzLl9jb25m
aWcudmFsdWVzLmxlbmd0aCA+IFN3YXRjaGVzUGVyUm93ICogU3dhdGNoZXNNYXhSb3cpCi0gICAg
ICAgIGNvbnRhaW5lcldpZHRoICs9IGdldFNjcm9sbGJhcldpZHRoKCk7Ci0gICAgY29udGFpbmVy
LnN0eWxlLndpZHRoID0gY29udGFpbmVyV2lkdGggKyAicHgiOwotICAgIGNvbnRhaW5lci5zdHls
ZS5tYXhIZWlnaHQgPSAoU3dhdGNoQm9yZGVyQm94SGVpZ2h0ICogU3dhdGNoZXNNYXhSb3cpICsg
InB4IjsKLSAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7Ci0gICAgdmFy
IG90aGVyQnV0dG9uID0gY3JlYXRlRWxlbWVudCgiYnV0dG9uIiwgIm90aGVyLWNvbG9yIiwgdGhp
cy5fY29uZmlnLm90aGVyQ29sb3JMYWJlbCk7Ci0gICAgb3RoZXJCdXR0b24uYWRkRXZlbnRMaXN0
ZW5lcigiY2xpY2siLCBjaG9vc2VPdGhlckNvbG9yLCBmYWxzZSk7Ci0gICAgdGhpcy5fZWxlbWVu
dC5hcHBlbmRDaGlsZChvdGhlckJ1dHRvbik7Ci0gICAgdGhpcy5fY29udGFpbmVyID0gY29udGFp
bmVyOwotICAgIHRoaXMuX290aGVyQnV0dG9uID0gb3RoZXJCdXR0b247Ci0gICAgdmFyIGVsZW1l
bnRXaWR0aCA9IHRoaXMuX2VsZW1lbnQub2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGVsZW1lbnRIZWln
aHQgPSB0aGlzLl9lbGVtZW50Lm9mZnNldEhlaWdodDsKLSAgICByZXNpemVXaW5kb3coZWxlbWVu
dFdpZHRoLCBlbGVtZW50SGVpZ2h0KTsKLX07Ci0KLUNvbG9yUGlja2VyLnByb3RvdHlwZS5zZWxl
Y3RDb2xvckF0SW5kZXggPSBmdW5jdGlvbihpbmRleCkgewotICAgIGluZGV4ID0gTWF0aC5tYXgo
TWF0aC5taW4odGhpcy5fY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgaW5kZXgpLCAw
KTsKLSAgICB0aGlzLl9jb250YWluZXIuY2hpbGROb2Rlc1tpbmRleF0uZm9jdXMoKTsKLX07Ci0K
LUNvbG9yUGlja2VyLnByb3RvdHlwZS5faGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24oZXZlbnQp
IHsKLSAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiY29sb3Itc3dhdGNo
IikpCi0gICAgICAgIGV2ZW50LnRhcmdldC5mb2N1cygpOwotfTsKLQotQ29sb3JQaWNrZXIucHJv
dG90eXBlLl9oYW5kbGVNb3VzZURvd24gPSBmdW5jdGlvbihldmVudCkgewotICAgIC8vIFByZXZl
bnQgYmx1ci4KLSAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiY29sb3It
c3dhdGNoIikpCi0gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Ci19OwotCi1Db2xvclBp
Y2tlci5wcm90b3R5cGUuX2hhbmRsZUtleURvd24gPSBmdW5jdGlvbihldmVudCkgewotICAgIHZh
ciBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVyOwotICAgIGlmIChrZXkgPT09ICJVKzAwMUIiKSAv
LyBFU0MKLSAgICAgICAgaGFuZGxlQ2FuY2VsKCk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJMZWZ0
IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSB7Ci0g
ICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwotICAg
ICAgICB2YXIgaW5kZXggPSAwOwotICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlz
dC5jb250YWlucygib3RoZXItY29sb3IiKSkgewotICAgICAgICAgICAgaWYgKGtleSAhPSAiUmln
aHQiICYmIGtleSAhPSAiVXAiKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IGluZGV4ID0gdGhpcy5fY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsKLSAgICAgICAg
fSBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1zd2F0
Y2giKSkgewotICAgICAgICAgICAgaW5kZXggPSBwYXJzZUludChzZWxlY3RlZEVsZW1lbnQuZGF0
YXNldC5pbmRleCwgMTApOwotICAgICAgICAgICAgc3dpdGNoIChrZXkpIHsKLSAgICAgICAgICAg
IGNhc2UgIkxlZnQiOgotICAgICAgICAgICAgICAgIGluZGV4LS07Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlICJSaWdodCI6Ci0gICAgICAgICAgICAgICAgaW5kZXgr
KzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgIlVwIjoKLSAgICAg
ICAgICAgICAgICBpbmRleCAtPSBTd2F0Y2hlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgIkRvd24iOgotICAgICAgICAgICAgICAgIGluZGV4ICs9IFN3
YXRjaGVzUGVyUm93OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgaWYgKGluZGV4ID4gdGhpcy5fY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0g
MSkgewotICAgICAgICAgICAgICAgIHRoaXMuX290aGVyQnV0dG9uLmZvY3VzKCk7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMu
c2VsZWN0Q29sb3JBdEluZGV4KGluZGV4KTsKLSAgICB9Ci0gICAgZXZlbnQucHJldmVudERlZmF1
bHQoKTsKLX07Ci0KLUNvbG9yUGlja2VyLnByb3RvdHlwZS5faGFuZGxlU3dhdGNoQ2xpY2sgPSBm
dW5jdGlvbihldmVudCkgewotICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5z
KCJjb2xvci1zd2F0Y2giKSkKLSAgICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFz
ZXQudmFsdWUpOwotfTsKLQotaWYgKHdpbmRvdy5kaWFsb2dBcmd1bWVudHMpIHsKLSAgICBpbml0
aWFsaXplKGRpYWxvZ0FyZ3VtZW50cyk7Ci19IGVsc2UgewotICAgIHdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCJtZXNzYWdlIiwgaGFuZGxlTWVzc2FnZSwgZmFsc2UpOwotICAgIHdpbmRvdy5zZXRU
aW1lb3V0KGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQsIDEwMDApOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzIGIvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjUxOGEyNWFkMTgyMzFiNDk3MDg0ZTNhYmYxOTQ2NTNhZTEwMDYzZGEKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBp
Y2tlci5jc3MKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitib2R5IHsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiBub25lOworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGZvbnQ6IC13ZWJraXQt
c21hbGwtY29udHJvbDsKKyAgICBtYXJnaW46IDA7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30K
KworLm5vLWZvY3VzLXJpbmcgOmZvY3VzIHsKKyAgICBvdXRsaW5lOiBub25lOworfQorCisjbWFp
biB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9yZGVyOiBzb2xpZCAxcHgg
Izg4OTlhYTsKKyAgICBib3gtc2hhZG93OiBpbnNldCAycHggMnB4IDJweCB3aGl0ZSwKKyAgICAg
ICAgaW5zZXQgLTJweCAtMnB4IDFweCByZ2JhKDAsMCwwLDAuMSk7CisgICAgcGFkZGluZzogNnB4
OworICAgIHdoaXRlc3BhY2U6IG5vd3JhcDsKKyAgICAvKiB3aWR0aCBpcyByZXNldCBpbiB0aGUg
SlMgY29kZS4gKi8KKyAgICB3aWR0aDogNTAwcHg7Cit9CisKKy55ZWFyLW1vbnRoLWFyZWEgewor
fQorCisueWVhci1tb250aC11cHBlciB7CisgICAgLyogZGlzcGxheTotd2Via2l0LWJveDsgaXMg
YWRkZWQgaW4gdGhlIEpTIGNvZGUuICovCit9CisKKy55ZWFyLXNlbGVjdG9yIHsKKyAgICB0ZXh0
LWFsaWduOiByaWdodDsKKyAgICB3aWR0aDogNmVtOworfQorCisubW9udGgtc2VsZWN0b3ItYm94
IHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOwor
ICAgIC13ZWJraXQtYm94LWZsZXg6IDI7Cit9CisKKy5tb250aC1zZWxlY3RvciB7CisgICAgYmFj
a2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIGRpc3BsYXk6
IGlubGluZS1ibG9jazsKKyAgICBwYWRkaW5nOiAzcHggNnB4IDNweCA2cHg7Cit9CisubW9udGgt
c2VsZWN0b3I6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICIg4pa8IjsKKyAgICBmb250LXNpemU6IHNt
YWxsZXI7Cit9CisKKy5tb250aC1zZWxlY3Rvci1wb3B1cCB7CisgICAgLXdlYmtpdC1ib3gtc2l6
aW5nOiBjb250ZW50LWJveDsKKyAgICAtd2Via2l0LWJveC1zaGFkb3c6CisgICAgICAgIDAgMCAw
IDFweCByZ2JhKDAsMCwwLDAuMSksCisgICAgICAgIDAgNXB4IDFweCAxcHggcmdiYSgwLDAsMCww
LjEpLAorICAgICAgICAwIDVweCAycHggMXB4IHJnYmEoMCwwLDAsMC4xKSwKKyAgICAgICAgMCA1
cHggMTJweCAxcHggcmdiYSgwLDAsMCwwLjUpOworICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAg
ZGlzcGxheTogbm9uZTsKKyAgICBtYXgtaGVpZ2h0OiAxMC44ZW07CisgICAgb3ZlcmZsb3cteDog
aGlkZGVuOworICAgIG92ZXJmbG93LXk6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOwor
ICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7Cit9CisKKy5tb250aC1zZWxlY3Rvci1wb3B1cC1jb250
ZW50cyB7CisgICAgZGlzcGxheTogdGFibGU7Cit9CisKKy5tb250aC1zZWxlY3Rvci1wb3B1cC1l
bnRyeSB7CisgICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiA1cHg7CisgICAgLXdlYmtpdC1wYWRk
aW5nLWVuZDogNXB4OworICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICBkaXNwbGF5OyB0YWJsZS1y
b3c7CisgICAgbGluZS1oZWlnaHQ6IDEuMmVtOworfQorCisuc2VsZWN0ZWQtbW9udGgteWVhciB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogaGlnaGxpZ2h0OworICAgIGNvbG9yOiBoaWdobGlnaHR0
ZXh0OworICAgIHRleHQtc2hhZG93OiBub25lOworfQorCitAbWVkaWEgKHBvaW50ZXI6Y29hcnNl
KSB7CisKKyAgICAubW9udGgtc2VsZWN0b3ItcG9wdXAgeworICAgICAgICBtYXgtaGVpZ2h0OiAx
NTBweDsKKyAgICB9CisKKyAgICAubW9udGgtc2VsZWN0b3ItcG9wdXAtZW50cnkgeworICAgICAg
ICBsaW5lLWhlaWdodDogMzBweDsKKyAgICB9Cit9CisKKy5tb250aC1zZWxlY3Rvci13YWxsIHsK
KyAgICBkaXNwbGF5OiBub25lOworICAgIGhlaWdodDogMTAwJTsKKyAgICBsZWZ0OiAwcHg7Cisg
ICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHRvcDogMHB4OworICAgIHdpZHRoOiAxMDAlOwor
fQorCisueWVhci1tb250aC1idXR0b24tbGVmdCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2Nr
OworfQorCisueWVhci1tb250aC1idXR0b24tcmlnaHQgeworICAgIGRpc3BsYXk6IGlubGluZS1i
bG9jazsKK30KKworLmRheXMtYXJlYS1jb250YWluZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6
IHdoaXRlOworICAgIGJvcmRlcjogc29saWQgMXB4IGJsYWNrOworICAgIG1hcmdpbi1ib3R0b206
IDRweDsKKyAgICBtYXJnaW4tdG9wOiA0cHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKwor
LmRheXMtYXJlYSB7IC8qIDx0YWJsZT4gKi8KKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK
KyAgICBib3JkZXItY29sbGFwc2U6IHNlcGFyYXRlOworICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7
CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOworICAgIC8qIHRhYmxlLWxheW91dDpm
aXhlZCBhbmQgd2lkdGg6MTAwJSBhcmUgYWRkZWQgaW4gdGhlIEpTIGNvZGUuICovCit9CisKKy5k
YXktbGFiZWwgeyAvKiA8dGg+ICovCisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94
OworICAgIGJhY2tncm91bmQtY29sb3I6ICNlM2U5ZmY7CisgICAgYm9yZGVyLWxlZnQtY29sb3I6
ICNmMGY0ZmY7CisgICAgYm9yZGVyLXRvcC1jb2xvcjogI2YwZjRmZjsKKyAgICBib3JkZXI6IHNv
bGlkIDFweCAjZDBkNGYwOworICAgIGNvbG9yOiAjMjBjOworICAgIGZvbnQtd2VpZ2h0OiBub3Jt
YWw7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworfQorCisuZGF5IHsgLyogPHRkPiAqLworICAg
IHBhZGRpbmc6IDFweDsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogd2hpdGU7CisgICAgYm9yZGVyOiAxcHggc29saWQgd2hpdGU7CisgICAgLXdlYmtpdC1i
b3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitAbWVkaWEgKHBvaW50ZXI6Y29hcnNlKSB7Cisg
ICAgLmRheSB7CisgICAgICAgIG1pbi13aWR0aDogMjhweDsKKyAgICAgICAgbGluZS1oZWlnaHQ6
IDI4cHg7CisgICAgfQorfQorCisuYXZhaWxhYmxlIHsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7Cisg
ICAgZm9udC13ZWlnaHQ6IDcwMDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgLXdl
YmtpdC10cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOworfQorCisubm90LXRoaXMtbW9udGggewor
ICAgIGNvbG9yOiBncmF5dGV4dDsKKyAgICBmb250LXdlaWdodDogNDAwOworICAgIHRleHQtc2hh
ZG93OiBub25lOworfQorCisuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCB7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogaGlnaGxpZ2h0OworICAgIGNvbG9yOiBoaWdobGlnaHR0ZXh0OworICAgIHRleHQt
c2hhZG93OiBub25lOworfQorCisudW5hdmFpbGFibGUgeworICAgIGN1cnNvcjogZGVmYXVsdDsK
KyAgICBjb2xvcjogZ3JheXRleHQ7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZCAjZWVlOworICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNv
bG9yIDAuMnMgZWFzZTsKK30KKworLnVuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCB7CisgICAgYm9y
ZGVyOiAxcHggc29saWQgaGlnaGxpZ2h0OworfQorCisuY2FuY2VsLWJ1dHRvbiB7CisgICAgZmxv
YXQ6IHJpZ2h0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vw
b3B1cHMvY2FsZW5kYXJQaWNrZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBv
cHVwcy9jYWxlbmRhclBpY2tlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45M2VkNzIxZDYwMjBhODgwNmFhZjQw
ODJjY2U0NTMwNTgzMjE2Y2VhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUmVz
b3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanMKQEAgLTAsMCArMSwxMjM5IEBACisi
dXNlIHN0cmljdCI7CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworLy8gRklYTUU6CisvLyAgLSBUb3VjaCBldmVudAorCisvKioKKyAqIENTUyBj
bGFzcyBuYW1lcy4KKyAqCisgKiBAZW51bSB7c3RyaW5nfQorICovCit2YXIgQ2xhc3NOYW1lcyA9
IHsKKyAgICBBdmFpbGFibGU6ICJhdmFpbGFibGUiLAorICAgIENhbmNlbEJ1dHRvbjogImNhbmNl
bC1idXR0b24iLAorICAgIENsZWFyQnV0dG9uOiAiY2xlYXItYnV0dG9uIiwKKyAgICBEYXk6ICJk
YXkiLAorICAgIERheUxhYmVsOiAiZGF5LWxhYmVsIiwKKyAgICBEYXlMYWJlbENvbnRhaW5lcjog
ImRheS1sYWJlbC1jb250YWluZXIiLAorICAgIERheXNBcmVhOiAiZGF5cy1hcmVhIiwKKyAgICBE
YXlzQXJlYUNvbnRhaW5lcjogImRheXMtYXJlYS1jb250YWluZXIiLAorICAgIE1vbnRoU2VsZWN0
b3I6ICJtb250aC1zZWxlY3RvciIsCisgICAgTW9udGhTZWxlY3RvckJveDogIm1vbnRoLXNlbGVj
dG9yLWJveCIsCisgICAgTW9udGhTZWxlY3RvclBvcHVwOiAibW9udGgtc2VsZWN0b3ItcG9wdXAi
LAorICAgIE1vbnRoU2VsZWN0b3JQb3B1cENvbnRlbnRzOiAibW9udGgtc2VsZWN0b3ItcG9wdXAt
Y29udGVudHMiLAorICAgIE1vbnRoU2VsZWN0b3JQb3B1cEVudHJ5OiAibW9udGgtc2VsZWN0b3It
cG9wdXAtZW50cnkiLAorICAgIE1vbnRoU2VsZWN0b3JQb3B1cFNpemVyOiAibW9udGgtc2VsZWN0
b3ItcG9wdXAtc2l6ZXIiLAorICAgIE1vbnRoU2VsZWN0b3JXYWxsOiAibW9udGgtc2VsZWN0b3It
d2FsbCIsCisgICAgTm9Gb2N1c1Jpbmc6ICJuby1mb2N1cy1yaW5nIiwKKyAgICBOb3RUaGlzTW9u
dGg6ICJub3QtdGhpcy1tb250aCIsCisgICAgU2VsZWN0ZWQ6ICJkYXktc2VsZWN0ZWQiLAorICAg
IFNlbGVjdGVkTW9udGhZZWFyOiAic2VsZWN0ZWQtbW9udGgteWVhciIsCisgICAgVG9kYXlCdXR0
b246ICJ0b2RheS1idXR0b24iLAorICAgIFRvZGF5Q2xlYXJBcmVhOiAidG9kYXktY2xlYXItYXJl
YSIsCisgICAgVW5hdmFpbGFibGU6ICJ1bmF2YWlsYWJsZSIsCisgICAgV2Vla0NvbnRhaW5lcjog
IndlZWstY29udGFpbmVyIiwKKyAgICBZZWFyTW9udGhBcmVhOiAieWVhci1tb250aC1hcmVhIiwK
KyAgICBZZWFyTW9udGhCdXR0b246ICJ5ZWFyLW1vbnRoLWJ1dHRvbiIsCisgICAgWWVhck1vbnRo
QnV0dG9uTGVmdDogInllYXItbW9udGgtYnV0dG9uLWxlZnQiLAorICAgIFllYXJNb250aEJ1dHRv
blJpZ2h0OiAieWVhci1tb250aC1idXR0b24tcmlnaHQiLAorICAgIFllYXJNb250aFVwcGVyOiAi
eWVhci1tb250aC11cHBlciIKK307CisKKy8qKgorICogQHR5cGUge09iamVjdH0KKyAqLwordmFy
IGdsb2JhbCA9IHsKKyAgICBhcmd1bWVudHNSZWNlaXZlZDogZmFsc2UsCisgICAgaGFkS2V5RXZl
bnQ6IGZhbHNlLAorICAgIHBhcmFtczogbnVsbAorfTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVXRpbGl0
eSBmdW5jdGlvbnMKKworLyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IGlkCisgKi8KK2Z1bmN0aW9u
ICQoaWQpIHsKKyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworfQorCitm
dW5jdGlvbiBiaW5kKGZ1bmMsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKK30K
KworLyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IHRhZ05hbWUKKyAqIEBwYXJhbSB7c3RyaW5nPX0g
b3B0X2NsYXNzCisgKiBAcGFyYW0ge3N0cmluZz19IG9wdF90ZXh0CisgKiBAcmV0dXJuIHshRWxl
bWVudH0KKyAqLworZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9w
dF90ZXh0KSB7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05h
bWUpOworICAgIGlmIChvcHRfY2xhc3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJj
bGFzcyIsIG9wdF9jbGFzcyk7CisgICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJu
IGVsZW1lbnQ7Cit9CisKKy8qKgorICogQHJldHVybiB7IXN0cmluZ30gbG93ZXJjYXNlIGxvY2Fs
ZSBuYW1lLiBlLmcuICJlbi11cyIKKyAqLworZnVuY3Rpb24gZ2V0TG9jYWxlKCkgeworICAgIHJl
dHVybiAoZ2xvYmFsLnBhcmFtcy5sb2NhbGUgfHwgImVuLXVzIikudG9Mb3dlckNhc2UoKTsKK30K
KworLyoqCisgKiBAcmV0dXJuIHshc3RyaW5nfSBsb3dlcmNhc2UgbGFuZ3VhZ2UgY29kZS4gZS5n
LiAiZW4iCisgKi8KK2Z1bmN0aW9uIGdldExhbmd1YWdlKCkgeworICAgIHZhciBsb2NhbGUgPSBn
ZXRMb2NhbGUoKTsKKyAgICB2YXIgcmVzdWx0ID0gbG9jYWxlLm1hdGNoKC9eKFthLXpdKykvKTsK
KyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuICJlbiI7CisgICAgcmV0dXJuIHJlc3Vs
dFsxXTsKK30KKworLyoKKyAqIEBjb25zdAorICogQHR5cGUge251bWJlcn0KKyAqLwordmFyIElt
cGVyaWFsRXJhTGltaXQgPSAyMDg3OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgor
ICogQHBhcmFtIHshbnVtYmVyfSBtb250aAorICogQHJldHVybiB7IXN0cmluZ30KKyAqLworZnVu
Y3Rpb24gZm9ybWF0SmFwYW5lc2VJbXBlcmlhbEVyYSh5ZWFyLCBtb250aCkgeworICAgIC8vIFdl
IGRvbid0IHNob3cgYW4gaW1wZXJpYWwgZXJhIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiA5OSBiZWNh
c2Ugb2Ygc3BhY2UKKyAgICAvLyBsaW1pdGF0aW9uLgorICAgIGlmICh5ZWFyID4gSW1wZXJpYWxF
cmFMaW1pdCkKKyAgICAgICAgcmV0dXJuICIiOworICAgIGlmICh5ZWFyID4gMTk4OSkKKyAgICAg
ICAgcmV0dXJuICIo5bmz5oiQIiArICh5ZWFyIC0gMTk4OCkgKyAi5bm0KSI7CisgICAgaWYgKHll
YXIgPT0gMTk4OSkKKyAgICAgICAgcmV0dXJuICIo5bmz5oiQ5YWD5bm0KSI7CisgICAgaWYgKHll
YXIgPj0gMTkyNykKKyAgICAgICAgcmV0dXJuICIo5pit5ZKMIiArICh5ZWFyIC0gMTkyNSkgKyAi
5bm0KSI7CisgICAgaWYgKHllYXIgPiAxOTEyKQorICAgICAgICByZXR1cm4gIijlpKfmraMiICsg
KHllYXIgLSAxOTExKSArICLlubQpIjsKKyAgICBpZiAoeWVhciA9PSAxOTEyICYmIG1vbnRoID49
IDcpCisgICAgICAgIHJldHVybiAiKOWkp+ato+WFg+W5tCkiOworICAgIGlmICh5ZWFyID4gMTg2
OCkKKyAgICAgICAgcmV0dXJuICIo5piO5rK7IiArICh5ZWFyIC0gMTg2NykgKyAi5bm0KSI7Cisg
ICAgaWYgKHllYXIgPT0gMTg2OCkKKyAgICAgICAgcmV0dXJuICIo5piO5rK75YWD5bm0KSI7Cisg
ICAgcmV0dXJuICIiOworfQorCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgorICogQHBh
cmFtIHshbnVtYmVyfSBtb250aAorICogQHJldHVybiB7IXN0cmluZ30KKyAqLworZnVuY3Rpb24g
Zm9ybWF0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7CisgICAgLy8gRklYTUU6IE5lZWQgbG9jYWxp
emVkIG51bWJlcj8KKyAgICB2YXIgeWVhclN0cmluZyA9IFN0cmluZyh5ZWFyKTsKKyAgICB2YXIg
bW9udGhTdHJpbmcgPSBnbG9iYWwucGFyYW1zLm1vbnRoTGFiZWxzW21vbnRoXTsKKyAgICBzd2l0
Y2ggKGdldExhbmd1YWdlKCkpIHsKKyAgICBjYXNlICJldSI6CisgICAgY2FzZSAiZmlsIjoKKyAg
ICBjYXNlICJsdCI6CisgICAgY2FzZSAibWwiOgorICAgIGNhc2UgIm10IjoKKyAgICBjYXNlICJ0
bCI6CisgICAgY2FzZSAidXIiOgorICAgICAgICByZXR1cm4geWVhclN0cmluZyArICIgIiArIG1v
bnRoU3RyaW5nOworICAgIGNhc2UgImh1IjoKKyAgICAgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAi
LiAiICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAiamEiOgorICAgICAgICByZXR1cm4geWVhclN0
cmluZyArICLlubQiICsgZm9ybWF0SmFwYW5lc2VJbXBlcmlhbEVyYSh5ZWFyLCBtb250aCkgKyAi
ICIgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICJ6aCI6CisgICAgICAgIHJldHVybiB5ZWFyU3Ry
aW5nICsgIuW5tCIgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICJrbyI6CisgICAgICAgIHJldHVy
biB5ZWFyU3RyaW5nICsgIuuFhCAiICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAibHYiOgorICAg
ICAgICByZXR1cm4geWVhclN0cmluZyArICIuIGcuICIgKyBtb250aFN0cmluZzsKKyAgICBjYXNl
ICJwdCI6CisgICAgICAgIHJldHVybiBtb250aFN0cmluZyArICIgZGUgIiArIHllYXJTdHJpbmc7
CisgICAgY2FzZSAic3IiOgorICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAiLiAiICsgeWVh
clN0cmluZzsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAiICIg
KyB5ZWFyU3RyaW5nOworICAgIH0KK30KKworLyoqCisgKiBAcGFyYW0ge3N0cmluZz19IG9wdF9j
dXJyZW50CisgKiBAcmV0dXJuIHshRGF0ZX0KKyAqLworZnVuY3Rpb24gcGFyc2VEYXRlU3RyaW5n
KG9wdF9jdXJyZW50KSB7CisgICAgaWYgKG9wdF9jdXJyZW50KSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBvcHRfY3VycmVudC5tYXRjaCgvKFxkKyktKFxkKyktKFxkKykvKTsKKyAgICAgICAgaWYg
KHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhOdW1iZXIocmVz
dWx0WzFdKSwgTnVtYmVyKHJlc3VsdFsyXSkgLSAxLCBOdW1iZXIocmVzdWx0WzNdKSkpOworICAg
IH0KKyAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKKyAgICAvLyBDcmVhdGUgVVRDIGRhdGUgd2l0
aCBzYW1lIG51bWJlcnMgYXMgbG9jYWwgZGF0ZS4KKyAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5V
VEMobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKSk7Cit9
CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0geyFudW1iZXJ9IG1v
bnRoCisgKiBAcGFyYW0geyFudW1iZXJ9IGRheQorICogQHJldHVybiB7IXN0cmluZ30KKyAqLwor
ZnVuY3Rpb24gc2VyaWFsaXplRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB7CisgICAgdmFyIHllYXJT
dHJpbmcgPSBTdHJpbmcoeWVhcik7CisgICAgaWYgKHllYXJTdHJpbmcubGVuZ3RoIDwgNCkKKyAg
ICAgICAgeWVhclN0cmluZyA9ICgiMDAwIiArIHllYXJTdHJpbmcpLnN1YnN0cigtNCwgNCk7Cisg
ICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLSIgKyAoIjAiICsgKG1vbnRoICsgMSkpLnN1YnN0cigt
MiwgMikgKyAiLSIgKyAoIjAiICsgZGF5KS5zdWJzdHIoLTIsIDIpOworfQorCisvKioKKyAqIEBw
YXJhbSB7IW51bWJlcn0gd2lkdGgKKyAqIEBwYXJhbSB7IW51bWJlcn0gaGVpZ2h0CisgKi8KK2Z1
bmN0aW9uIHJlc2l6ZVdpbmRvdyh3aWR0aCwgaGVpZ2h0KSB7CisgICAgaWYgKHdpbmRvdy5mcmFt
ZUVsZW1lbnQpIHsKKyAgICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS53aWR0aCA9IHdp
ZHRoICsgInB4IjsKKyAgICAgICAgd2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBo
ZWlnaHQgKyAicHgiOworICAgIH0gZWxzZSB7CisgICAgICAgIHdpbmRvdy5yZXNpemVUbyh3aWR0
aCwgaGVpZ2h0KTsKKyAgICB9Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEluaXRpYWxpemF0aW9uCisK
Ky8qKgorICogQHBhcmFtIHtFdmVudH0gZXZlbnQKKyAqLworZnVuY3Rpb24gaGFuZGxlTWVzc2Fn
ZShldmVudCkgeworICAgIGlmIChnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICBnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQgPSB0cnVlOworICAgIGluaXRpYWxp
emUoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUFyZ3VtZW50
c1RpbWVvdXQoKSB7CisgICAgaWYgKGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIHZhciBhcmdzID0geworICAgICAgICBtb250aExhYmVscyA6IFsibTEiLCAi
bTIiLCAibTMiLCAibTQiLCAibTUiLCAibTYiLAorICAgICAgICAgICAgICAgICAgICAgICAibTci
LCAibTgiLCAibTkiLCAibTEwIiwgIm0xMSIsICJtMTIiXSwKKyAgICAgICAgZGF5TGFiZWxzIDog
WyJkMSIsICJkMiIsICJkMyIsICJkNCIsICJkNSIsICJkNiIsICJkNyJdLAorICAgICAgICB0b2Rh
eUxhYmVsIDogIlRvZGF5IiwKKyAgICAgICAgY2xlYXJMYWJlbCA6ICJDbGVhciIsCisgICAgICAg
IGNhbmNlbExhYmVsIDogIkNhbmNlbCIsCisgICAgICAgIGN1cnJlbnRWYWx1ZSA6ICIiLAorICAg
ICAgICB3ZWVrU3RhcnREYXkgOiAwLAorICAgICAgICBzdGVwIDogMQorICAgIH07CisgICAgaW5p
dGlhbGl6ZShhcmdzKTsKK30KKworLyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqIEBy
ZXR1cm4gez9zdHJpbmd9IEFuIGVycm9yIG1lc3NhZ2UsIG9yIG51bGwgaWYgdGhlIGFyZ3VtZW50
IGhhcyBubyBlcnJvcnMuCisgKi8KK2Z1bmN0aW9uIHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpIHsK
KyAgICBpZiAoIWFyZ3MubW9udGhMYWJlbHMpCisgICAgICAgIHJldHVybiAiTm8gbW9udGhMYWJl
bHMuIjsKKyAgICBpZiAoYXJncy5tb250aExhYmVscy5sZW5ndGggIT0gMTIpCisgICAgICAgIHJl
dHVybiAibW9udGhMYWJlbHMgaXMgbm90IGFuIGFycmF5IHdpdGggMTIgZWxlbWVudHMuIjsKKyAg
ICBpZiAoIWFyZ3MuZGF5TGFiZWxzKQorICAgICAgICByZXR1cm4gIk5vIGRheUxhYmVscy4iOwor
ICAgIGlmIChhcmdzLmRheUxhYmVscy5sZW5ndGggIT0gNykKKyAgICAgICAgcmV0dXJuICJkYXlM
YWJlbHMgaXMgbm90IGFuIGFycmF5IHdpdGggNyBlbGVtZW50cy4iOworICAgIGlmICghYXJncy5j
bGVhckxhYmVsKQorICAgICAgICByZXR1cm4gIk5vIGNsZWFyTGFiZWwuIjsKKyAgICBpZiAoIWFy
Z3MudG9kYXlMYWJlbCkKKyAgICAgICAgcmV0dXJuICJObyB0b2RheUxhYmVsLiI7CisgICAgaWYg
KGFyZ3Mud2Vla1N0YXJ0RGF5KSB7CisgICAgICAgIGlmIChhcmdzLndlZWtTdGFydERheSA8IDAg
fHwgYXJncy53ZWVrU3RhcnREYXkgPiA2KQorICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIHdl
ZWtTdGFydERheTogIiArIGFyZ3Mud2Vla1N0YXJ0RGF5OworICAgIH0KKyAgICByZXR1cm4gbnVs
bDsKK30KKworLyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqLworZnVuY3Rpb24gaW5p
dGlhbGl6ZShhcmdzKSB7CisgICAgdmFyIG1haW4gPSAkKCJtYWluIik7CisgICAgbWFpbi5jbGFz
c0xpc3QuYWRkKENsYXNzTmFtZXMuTm9Gb2N1c1JpbmcpOworCisgICAgdmFyIGVycm9yU3RyaW5n
ID0gdmFsaWRhdGVBcmd1bWVudHMoYXJncyk7CisgICAgaWYgKGVycm9yU3RyaW5nKSB7CisgICAg
ICAgIG1haW4udGV4dENvbnRlbnQgPSAiSW50ZXJuYWwgZXJyb3I6ICIgKyBlcnJvclN0cmluZzsK
KyAgICAgICAgcmVzaXplV2luZG93KG1haW4ub2Zmc2V0V2lkdGgsIG1haW4ub2Zmc2V0SGVpZ2h0
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBnbG9iYWwucGFyYW1zID0gYXJnczsKKyAgICAgICAg
Y2hlY2tMaW1pdHMoKTsKKyAgICAgICAgbGF5b3V0KCk7CisKKyAgICAgICAgdmFyIGluaXRpYWxE
YXRlID0gcGFyc2VEYXRlU3RyaW5nKGFyZ3MuY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKGlu
aXRpYWxEYXRlIDwgZ2xvYmFsLm1pbmltdW1EYXRlKQorICAgICAgICAgICAgaW5pdGlhbERhdGUg
PSBnbG9iYWwubWluaW11bURhdGU7CisgICAgICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gZ2xv
YmFsLm1heGltdW1EYXRlKQorICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWF4aW11
bURhdGU7CisgICAgICAgIGdsb2JhbC5kYXlzVGFibGUuc2VsZWN0RGF0ZShpbml0aWFsRGF0ZSk7
CisKKyAgICAgICAgc2V0VGltZW91dChmaXhXaW5kb3dTaXplLCAwKTsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIGZpeFdpbmRvd1NpemUoKSB7CisgICAgdmFyIHllYXJNb250aFJpZ2h0RWxlbWVudCA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0
b25SaWdodClbMF07CisgICAgdmFyIGRheXNBcmVhRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5EYXlzQXJlYSlbMF07CisgICAgdmFyIGhlYWRlcnMg
PSBkYXlzQXJlYUVsZW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShDbGFzc05hbWVzLkRheUxh
YmVsKTsKKyAgICB2YXIgbWF4Q2VsbFdpZHRoID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGhlYWRlcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKG1heENlbGxXaWR0aCA8IGhlYWRl
cnNbaV0ub2Zmc2V0V2lkdGgpCisgICAgICAgICAgICBtYXhDZWxsV2lkdGggPSBoZWFkZXJzW2ld
Lm9mZnNldFdpZHRoOworICAgIH0KKyAgICB2YXIgRGF5c0FyZWFDb250YWluZXJCb3JkZXIgPSAx
OworICAgIHZhciBtYWluID0gJCgibWFpbiIpOworICAgIHZhciB5ZWFyTW9udGhFbmQ7CisgICAg
dmFyIGRheXNBcmVhRW5kOworICAgIGlmIChnbG9iYWwucGFyYW1zLmlzUlRMKSB7CisgICAgICAg
IHZhciBzdGFydE9mZnNldCA9IG1haW4ub2Zmc2V0TGVmdCArIG1haW4ub2Zmc2V0V2lkdGg7Cisg
ICAgICAgIHllYXJNb250aEVuZCA9IHN0YXJ0T2Zmc2V0IC0geWVhck1vbnRoUmlnaHRFbGVtZW50
Lm9mZnNldExlZnQ7CisgICAgICAgIGRheXNBcmVhRW5kID0gc3RhcnRPZmZzZXQgLSAoZGF5c0Fy
ZWFFbGVtZW50Lm9mZnNldExlZnQgKyBkYXlzQXJlYUVsZW1lbnQub2Zmc2V0V2lkdGgpICsgbWF4
Q2VsbFdpZHRoICogNyArIERheXNBcmVhQ29udGFpbmVyQm9yZGVyOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHllYXJNb250aEVuZCA9IHllYXJNb250aFJpZ2h0RWxlbWVudC5vZmZzZXRMZWZ0ICsg
eWVhck1vbnRoUmlnaHRFbGVtZW50Lm9mZnNldFdpZHRoOworICAgICAgICBkYXlzQXJlYUVuZCA9
IGRheXNBcmVhRWxlbWVudC5vZmZzZXRMZWZ0ICsgbWF4Q2VsbFdpZHRoICogNyArIERheXNBcmVh
Q29udGFpbmVyQm9yZGVyOworICAgIH0KKworICAgIHZhciBtYXhFbmQgPSBNYXRoLm1heCh5ZWFy
TW9udGhFbmQsIGRheXNBcmVhRW5kKTsKKyAgICB2YXIgTWFpblBhZGRpbmcgPSA2OworICAgIHZh
ciBNYWluQm9yZGVyID0gMTsKKyAgICB2YXIgZGVzaXJlZEJvZHlXaWR0aCA9IG1heEVuZCArIE1h
aW5QYWRkaW5nICsgTWFpbkJvcmRlcjsKKworICAgIHZhciBtYWluSGVpZ2h0ID0gbWFpbi5vZmZz
ZXRIZWlnaHQ7CisgICAgbWFpbi5zdHlsZS53aWR0aCA9ICJhdXRvIjsKKyAgICBkYXlzQXJlYUVs
ZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7CisgICAgZGF5c0FyZWFFbGVtZW50LnN0eWxlLnRh
YmxlTGF5b3V0ID0gImZpeGVkIjsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1l
KENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpWzBdLnN0eWxlLmRpc3BsYXkgPSAiLXdlYmtpdC1i
b3giOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5Nb250
aFNlbGVjdG9yQm94KVswXS5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICByZXNpemVXaW5k
b3coZGVzaXJlZEJvZHlXaWR0aCwgbWFpbkhlaWdodCk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrTGlt
aXRzKCkgeworICAgIC8vIEhhcmQgbGltaXRzIG9mIHR5cGU9ZGF0ZS4gU2VlIFdlYkNvcmUvcGxh
dGZvcm0vRGF0ZUNvbXBvbmVudHMuaC4KKyAgICBnbG9iYWwubWluaW11bURhdGUgPSBuZXcgRGF0
ZSgtNjIxMzU1OTY4MDAwMDAuMCk7CisgICAgZ2xvYmFsLm1heGltdW1EYXRlID0gbmV3IERhdGUo
ODY0MDAwMDAwMDAwMDAwMC4wKTsKKyAgICAvLyBTZWUgV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5
cGUuY3BwLgorICAgIGdsb2JhbC5zdGVwID0gODY0MDAwMDA7CisKKyAgICBpZiAoZ2xvYmFsLnBh
cmFtcy5taW4pIHsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHBhcmFtcy5taW4gaXMgYSB2YWxpZCBk
YXRlLgorICAgICAgICBnbG9iYWwubWluaW11bURhdGUgPSBwYXJzZURhdGVTdHJpbmcoZ2xvYmFs
LnBhcmFtcy5taW4pOworICAgIH0KKyAgICBpZiAoZ2xvYmFsLnBhcmFtcy5tYXgpIHsKKyAgICAg
ICAgLy8gV2UgYXNzdW1lIHBhcmFtcy5tYXggaXMgYSB2YWxpZCBkYXRlLgorICAgICAgICBnbG9i
YWwubWF4aW11bURhdGUgPSBwYXJzZURhdGVTdHJpbmcoZ2xvYmFsLnBhcmFtcy5tYXgpOworICAg
IH0KKyAgICBpZiAoZ2xvYmFsLnBhcmFtcy5zdGVwKQorICAgICAgICBnbG9iYWwuc3RlcCAqPSBn
bG9iYWwucGFyYW1zLnN0ZXA7Cit9CisKK2Z1bmN0aW9uIGxheW91dCgpIHsKKyAgICBpZiAoZ2xv
YmFsLnBhcmFtcy5pc1JUTCkKKyAgICAgICAgZG9jdW1lbnQuYm9keS5kaXIgPSAicnRsIjsKKyAg
ICBlbHNlCisgICAgICAgIGRvY3VtZW50LmJvZHkuZGlyID0gImx0ciI7CisgICAgdmFyIG1haW4g
PSAkKCJtYWluIik7CisgICAgdmFyIHBhcmFtcyA9IGdsb2JhbC5wYXJhbXM7CisgICAgbWFpbi5y
ZW1vdmVDaGlsZChtYWluLmZpcnN0Q2hpbGQpOworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRM
aXN0ZW5lcigia2V5ZG93biIsIGhhbmRsZUdsb2JhbEtleSwgZmFsc2UpOworCisgICAgZ2xvYmFs
LnllYXJNb250aENvbnRyb2xsZXIgPSBuZXcgWWVhck1vbnRoQ29udHJvbGxlcigpOworICAgIGds
b2JhbC55ZWFyTW9udGhDb250cm9sbGVyLmF0dGFjaFRvKG1haW4pOworICAgIGdsb2JhbC5kYXlz
VGFibGUgPSBuZXcgRGF5c1RhYmxlKCk7CisgICAgZ2xvYmFsLmRheXNUYWJsZS5hdHRhY2hUbyht
YWluKTsKKyAgICBsYXlvdXRCdXR0b25zKG1haW4pOworfQorCisvKioKKyAqIEBwYXJhbSB7RWxl
bWVudH0gbWFpbgorICovCitmdW5jdGlvbiBsYXlvdXRCdXR0b25zKG1haW4pIHsKKyAgICB2YXIg
Y29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5Ub2RheUNsZWFyQXJl
YSk7CisgICAgZ2xvYmFsLnRvZGF5ID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVz
LlRvZGF5QnV0dG9uKTsKKyAgICBnbG9iYWwudG9kYXkudHlwZSA9ICJidXR0b24iOworICAgIGds
b2JhbC50b2RheS52YWx1ZSA9IGdsb2JhbC5wYXJhbXMudG9kYXlMYWJlbDsKKyAgICBnbG9iYWwu
dG9kYXkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBoYW5kbGVUb2RheSwgZmFsc2UpOworICAg
IGNvbnRhaW5lci5hcHBlbmRDaGlsZChnbG9iYWwudG9kYXkpOworICAgIGdsb2JhbC5jbGVhciA9
IG51bGw7CisgICAgaWYgKCFnbG9iYWwucGFyYW1zLnJlcXVpcmVkKSB7CisgICAgICAgIGdsb2Jh
bC5jbGVhciA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5DbGVhckJ1dHRvbik7
CisgICAgICAgIGdsb2JhbC5jbGVhci50eXBlID0gImJ1dHRvbiI7CisgICAgICAgIGdsb2JhbC5j
bGVhci52YWx1ZSA9IGdsb2JhbC5wYXJhbXMuY2xlYXJMYWJlbDsKKyAgICAgICAgZ2xvYmFsLmNs
ZWFyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgaGFuZGxlQ2xlYXIsIGZhbHNlKTsKKyAgICAg
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGdsb2JhbC5jbGVhcik7CisgICAgfQorICAgIG1haW4u
YXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKworICAgIGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJv
bCA9IGdsb2JhbC5jbGVhciB8fCBnbG9iYWwudG9kYXk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoq
CisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gWWVhck1vbnRoQ29udHJvbGxlcigpIHsK
KyAgICAvKioKKyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAgKi8KKyAgICB0aGlzLl9jdXJy
ZW50WWVhciA9IC0xOworICAgIC8qKgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLwor
ICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IC0xOworfQorCisvKioKKyAqIEBwYXJhbSB7IUVsZW1l
bnR9IG1haW4KKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBm
dW5jdGlvbihtYWluKSB7CisgICAgdmFyIG91dGVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgi
ZGl2IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhBcmVhKTsKKworICAgIHZhciBpbm5lckNvbnRhaW5l
ciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpOworICAg
IG91dGVyQ29udGFpbmVyLmFwcGVuZENoaWxkKGlubmVyQ29udGFpbmVyKTsKKworICAgIHRoaXMu
X2F0dGFjaExlZnRCdXR0b25zVG8oaW5uZXJDb250YWluZXIpOworCisgICAgdmFyIGJveCA9IGNy
ZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3RvckJveCk7CisgICAgaW5u
ZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoYm94KTsKKyAgICAvLyBXZSBjYW4ndCB1c2UgPHNlbGVj
dD4gcG9wdXAgaW4gUGFnZVBvcHVwLgorICAgIHRoaXMuX21vbnRoUG9wdXAgPSBjcmVhdGVFbGVt
ZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JQb3B1cCk7CisgICAgdGhpcy5fbW9u
dGhQb3B1cC5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlWWVhck1v
bnRoQ2hhbmdlLCB0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuX21vbnRoUG9wdXAuYWRkRXZlbnRM
aXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxlTW9udGhQb3B1cEtleSwgdGhpcyks
IGZhbHNlKTsKKyAgICB0aGlzLl9tb250aFBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92
ZSIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VNb3ZlLCB0aGlzKSwgZmFsc2UpOworICAgIHRoaXMu
X3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlID0gdHJ1ZTsKKyAgICB0aGlzLl9tb250aFBvcHVw
LnRhYkluZGV4ID0gMDsKKyAgICB0aGlzLl9tb250aFBvcHVwQ29udGVudHMgPSBjcmVhdGVFbGVt
ZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JQb3B1cENvbnRlbnRzKTsKKyAgICB0
aGlzLl9tb250aFBvcHVwLmFwcGVuZENoaWxkKHRoaXMuX21vbnRoUG9wdXBDb250ZW50cyk7Cisg
ICAgLy8gU2l6ZXIgdXNlZCB0byBkZXRlcm1pbmUgdGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCBp
biB0aGUgcG9wdXAgbWVudS4KKyAgICB2YXIgc2l6ZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBD
bGFzc05hbWVzLk1vbnRoU2VsZWN0b3JQb3B1cFNpemVyKTsKKyAgICB0aGlzLl9tb250aFBvcHVw
LmFwcGVuZENoaWxkKHNpemVyKTsKKyAgICBib3guYXBwZW5kQ2hpbGQodGhpcy5fbW9udGhQb3B1
cCk7CisgICAgdGhpcy5fbW9udGggPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1v
bnRoU2VsZWN0b3IpOworICAgIHRoaXMuX21vbnRoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
YmluZCh0aGlzLl9zaG93UG9wdXAsIHRoaXMpLCBmYWxzZSk7CisgICAgYm94LmFwcGVuZENoaWxk
KHRoaXMuX21vbnRoKTsKKworICAgIHRoaXMuX2F0dGFjaFJpZ2h0QnV0dG9uc1RvKGlubmVyQ29u
dGFpbmVyKTsKKyAgICBtYWluLmFwcGVuZENoaWxkKG91dGVyQ29udGFpbmVyKTsKKworICAgIHRo
aXMuX3dhbGwgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JX
YWxsKTsKKyAgICB0aGlzLl93YWxsLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlz
Ll9jbG9zZVBvcHVwLCB0aGlzKSwgZmFsc2UpOworICAgIG1haW4uYXBwZW5kQ2hpbGQodGhpcy5f
d2FsbCk7CisKKyAgICB2YXIgbWF4aW11bVllYXIgPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRD
RnVsbFllYXIoKTsKKyAgICB2YXIgbWF4V2lkdGggPSAwOworICAgIGZvciAodmFyIG0gPSAwOyBt
IDwgMTI7ICsrbSkgeworICAgICAgICB0aGlzLl9tb250aC50ZXh0Q29udGVudCA9IGZvcm1hdFll
YXJNb250aChtYXhpbXVtWWVhciwgbSk7CisgICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4
V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRoKTsKKyAgICB9CisgICAgaWYgKGdldExhbmd1
YWdlKCkgPT0gImphIiAmJiBJbXBlcmlhbEVyYUxpbWl0IDwgbWF4aW11bVllYXIpIHsKKyAgICAg
ICAgZm9yICh2YXIgbSA9IDA7IG0gPCAxMjsgKyttKSB7CisgICAgICAgICAgICB0aGlzLl9tb250
aC50ZXh0Q29udGVudCA9IGZvcm1hdFllYXJNb250aChJbXBlcmlhbEVyYUxpbWl0LCBtKTsKKyAg
ICAgICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNl
dFdpZHRoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICB0aGlzLl9tb250aC5zdHlsZS5taW5XaWR0
aCA9IG1heFdpZHRoICsgJ3B4JzsKKworICAgIGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wg
PSB0aGlzLl9sZWZ0MjsgLy8gRklYTUU6IFNob3VsZCBpdCBiZSB0aGlzLm1vbnRoPworfTsKKwor
WWVhck1vbnRoQ29udHJvbGxlci5hZGRUZW5ZZWFyc0J1dHRvbnMgPSBmYWxzZTsKKworLyoqCisg
KiBAcGFyYW0geyFFbGVtZW50fSBwYXJlbnQKKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90
b3R5cGUuX2F0dGFjaExlZnRCdXR0b25zVG8gPSBmdW5jdGlvbihwYXJlbnQpIHsKKyAgICB2YXIg
Y29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0
b25MZWZ0KTsKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKworICAgIGlmIChZ
ZWFyTW9udGhDb250cm9sbGVyLmFkZFRlblllYXJzQnV0dG9ucykgeworICAgICAgICB0aGlzLl9s
ZWZ0MyA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24p
OworICAgICAgICB0aGlzLl9sZWZ0My50eXBlID0gImJ1dHRvbiI7CisgICAgICAgIHRoaXMuX2xl
ZnQzLnZhbHVlID0gIjw8PCI7CisgICAgICAgIHRoaXMuX2xlZnQzLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgYmluZCh0aGlzLl9oYW5kbGVCdXR0b25DbGljaywgdGhpcyksIGZhbHNlKTsKKyAg
ICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQzKTsKKyAgICB9CisKKyAgICB0
aGlzLl9sZWZ0MiA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhC
dXR0b24pOworICAgIHRoaXMuX2xlZnQyLnR5cGUgPSAiYnV0dG9uIjsKKyAgICB0aGlzLl9sZWZ0
Mi52YWx1ZSA9ICI8PCI7CisgICAgdGhpcy5fbGVmdDIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOworICAgIGNvbnRh
aW5lci5hcHBlbmRDaGlsZCh0aGlzLl9sZWZ0Mik7CisKKyAgICB0aGlzLl9sZWZ0MSA9IGNyZWF0
ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOworICAgIHRoaXMu
X2xlZnQxLnR5cGUgPSAiYnV0dG9uIjsKKyAgICB0aGlzLl9sZWZ0MS52YWx1ZSA9ICI8IjsKKyAg
ICB0aGlzLl9sZWZ0MS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxl
QnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRo
aXMuX2xlZnQxKTsKK307CisKKy8qKgorICogQHBhcmFtIHshRWxlbWVudH0gcGFyZW50CisgKi8K
K1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9hdHRhY2hSaWdodEJ1dHRvbnNUbyA9IGZ1
bmN0aW9uKHBhcmVudCkgeworICAgIHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYi
LCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvblJpZ2h0KTsKKyAgICBwYXJlbnQuYXBwZW5kQ2hp
bGQoY29udGFpbmVyKTsKKyAgICB0aGlzLl9yaWdodDEgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIs
IENsYXNzTmFtZXMuWWVhck1vbnRoQnV0dG9uKTsKKyAgICB0aGlzLl9yaWdodDEudHlwZSA9ICJi
dXR0b24iOworICAgIHRoaXMuX3JpZ2h0MS52YWx1ZSA9ICI+IjsKKyAgICB0aGlzLl9yaWdodDEu
YWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0
aGlzKSwgZmFsc2UpOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yaWdodDEpOwor
CisgICAgdGhpcy5fcmlnaHQyID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlll
YXJNb250aEJ1dHRvbik7CisgICAgdGhpcy5fcmlnaHQyLnR5cGUgPSAiYnV0dG9uIjsKKyAgICB0
aGlzLl9yaWdodDIudmFsdWUgPSAiPj4iOworICAgIHRoaXMuX3JpZ2h0Mi5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7
CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX3JpZ2h0Mik7CisKKyAgICBpZiAoWWVh
ck1vbnRoQ29udHJvbGxlci5hZGRUZW5ZZWFyc0J1dHRvbnMpIHsKKyAgICAgICAgdGhpcy5fcmln
aHQzID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7
CisgICAgICAgIHRoaXMuX3JpZ2h0My50eXBlID0gImJ1dHRvbiI7CisgICAgICAgIHRoaXMuX3Jp
Z2h0My52YWx1ZSA9ICI+Pj4iOworICAgICAgICB0aGlzLl9yaWdodDMuYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOwor
ICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcmlnaHQzKTsKKyAgICB9Cit9Owor
CisvKioKKyAqIEByZXR1cm4geyFudW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJv
dG90eXBlLnllYXIgPSBmdW5jdGlvbigpIHsKKyAgICByZXR1cm4gdGhpcy5fY3VycmVudFllYXI7
Cit9OworCisvKioKKyAqIEByZXR1cm4geyFudW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xs
ZXIucHJvdG90eXBlLm1vbnRoID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuX2N1cnJl
bnRNb250aDsKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0g
eyFudW1iZXJ9IG1vbnRoCisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnNldFll
YXJNb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CisgICAgdGhpcy5fY3VycmVudFllYXIg
PSB5ZWFyOworICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IG1vbnRoOworICAgIHRoaXMuX3JlZHJh
dygpOworfTsKKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX3JlZHJhdyA9IGZ1bmN0
aW9uKCkgeworICAgIHZhciBtaW4gPSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDRnVsbFllYXIo
KSAqIDEyICsgZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAgdmFyIG1heCA9
IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWF4aW11
bURhdGUuZ2V0VVRDTW9udGgoKTsKKyAgICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnRZZWFy
ICogMTIgKyB0aGlzLl9jdXJyZW50TW9udGg7CisgICAgaWYgKHRoaXMuX2xlZnQzKQorICAgICAg
ICB0aGlzLl9sZWZ0My5kaXNhYmxlZCA9IGN1cnJlbnQgLSAxMyA8IG1pbjsKKyAgICB0aGlzLl9s
ZWZ0Mi5kaXNhYmxlZCA9IGN1cnJlbnQgLSAyIDwgbWluOworICAgIHRoaXMuX2xlZnQxLmRpc2Fi
bGVkID0gY3VycmVudCAtIDEgPCBtaW47CisgICAgdGhpcy5fcmlnaHQxLmRpc2FibGVkID0gY3Vy
cmVudCArIDEgPiBtYXg7CisgICAgdGhpcy5fcmlnaHQyLmRpc2FibGVkID0gY3VycmVudCArIDIg
PiBtYXg7CisgICAgaWYgKHRoaXMuX3JpZ2h0MykKKyAgICAgICAgdGhpcy5fcmlnaHQzLmRpc2Fi
bGVkID0gY3VycmVudCArIDEzID4gbWF4OworICAgIHRoaXMuX21vbnRoLmlubmVyVGV4dCA9IGZv
cm1hdFllYXJNb250aCh0aGlzLl9jdXJyZW50WWVhciwgdGhpcy5fY3VycmVudE1vbnRoKTsKKyAg
ICB3aGlsZSAodGhpcy5fbW9udGhQb3B1cENvbnRlbnRzLmhhc0NoaWxkTm9kZXMoKSkKKyAgICAg
ICAgdGhpcy5fbW9udGhQb3B1cENvbnRlbnRzLnJlbW92ZUNoaWxkKHRoaXMuX21vbnRoUG9wdXBD
b250ZW50cy5maXJzdENoaWxkKTsKKworICAgIGZvciAodmFyIG0gPSBjdXJyZW50IC0gNjsgbSA8
PSBjdXJyZW50ICsgNjsgbSsrKSB7CisgICAgICAgIGlmIChtIDwgbWluIHx8IG0gPiBtYXgpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdmFyIG9wdGlvbiA9IGNyZWF0ZUVsZW1lbnQo
ImRpdiIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3RvclBvcHVwRW50cnksIGZvcm1hdFllYXJNb250
aChNYXRoLmZsb29yKG0gLyAxMiksIG0gJSAxMikpOworICAgICAgICBvcHRpb24uZGF0YXNldC52
YWx1ZSA9IFN0cmluZyhNYXRoLmZsb29yKG0gLyAxMikpICsgIi0iICsgU3RyaW5nKG0gJSAxMik7
CisgICAgICAgIHRoaXMuX21vbnRoUG9wdXBDb250ZW50cy5hcHBlbmRDaGlsZChvcHRpb24pOwor
ICAgICAgICBpZiAobSA9PSBjdXJyZW50KQorICAgICAgICAgICAgb3B0aW9uLmNsYXNzTGlzdC5h
ZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZE1vbnRoWWVhcik7CisgICAgfQorfTsKKworWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuX3Nob3dQb3B1cCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMu
X21vbnRoUG9wdXAuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CisgICAgdGhpcy5fbW9udGhQb3B1
cC5zdHlsZS56SW5kZXggPSAiMTAwMCI7IC8vIExhcmdlciB0aGFuIHRoZSBkYXlzIGFyZWEuCisg
ICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS5sZWZ0ID0gdGhpcy5fbW9udGgub2Zmc2V0TGVmdCAr
ICh0aGlzLl9tb250aC5vZmZzZXRXaWR0aCAtIHRoaXMuX21vbnRoUG9wdXAub2Zmc2V0V2lkdGgp
IC8gMiArICJweCI7CisgICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS50b3AgPSB0aGlzLl9tb250
aC5vZmZzZXRUb3AgKyB0aGlzLl9tb250aC5vZmZzZXRIZWlnaHQgKyAicHgiOworCisgICAgdGhp
cy5fd2FsbC5zdHlsZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICB0aGlzLl93YWxsLnN0eWxlLnpJ
bmRleCA9ICI5OTkiOyAvLyBUaGlzIHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlIHotaW5kZXgg
b2YgbW9udGhQb3B1cC4KKworICAgIHZhciBwb3B1cEhlaWdodCA9IHRoaXMuX21vbnRoUG9wdXAu
Y2xpZW50SGVpZ2h0OworICAgIHZhciBmdWxsSGVpZ2h0ID0gdGhpcy5fbW9udGhQb3B1cENvbnRl
bnRzLmNsaWVudEhlaWdodDsKKyAgICBpZiAoZnVsbEhlaWdodCA+IHBvcHVwSGVpZ2h0KSB7Cisg
ICAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICBpZiAo
c2VsZWN0ZWQpIHsKKyAgICAgICAgICAgdmFyIGJvdHRvbSA9IHNlbGVjdGVkLm9mZnNldFRvcCAr
IHNlbGVjdGVkLmNsaWVudEhlaWdodDsKKyAgICAgICAgICAgaWYgKGJvdHRvbSA+IHBvcHVwSGVp
Z2h0KQorICAgICAgICAgICAgICAgdGhpcy5fbW9udGhQb3B1cC5zY3JvbGxUb3AgPSBib3R0b20g
LSBwb3B1cEhlaWdodDsKKyAgICAgICAgfQorICAgICAgICB2YXIgc2l6ZXIgPSBkb2N1bWVudC5x
dWVyeVNlbGVjdG9yKCIuIiArIENsYXNzTmFtZXMuTW9udGhTZWxlY3RvclBvcHVwU2l6ZXIpOwor
ICAgICAgICB2YXIgc2Nyb2xsV2lkdGggPSB0aGlzLl9tb250aFBvcHVwQ29udGVudHMuY2xpZW50
V2lkdGggLSBzaXplci5jbGllbnRXaWR0aDsKKyAgICAgICAgaWYgKHNjcm9sbFdpZHRoID4gMCkK
KyAgICAgICAgICAgIHRoaXMuX21vbnRoUG9wdXAuc3R5bGUud2Via2l0UGFkZGluZ0VuZCA9IHNj
cm9sbFdpZHRoICsgJ3B4JzsKKyAgICB9CisgICAgdGhpcy5fbW9udGhQb3B1cC5mb2N1cygpOwor
fTsKKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2Nsb3NlUG9wdXAgPSBmdW5jdGlv
bigpIHsKKyAgICB0aGlzLl9tb250aFBvcHVwLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAg
dGhpcy5fd2FsbC5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICAgIHZhciBjb250YWluZXIgPSBk
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuIiArIENsYXNzTmFtZXMuRGF5c0FyZWFDb250YWluZXIp
OworICAgIGNvbnRhaW5lci5mb2N1cygpOworfTsKKworLyoqCisgKiBAcmV0dXJuIHtFbGVtZW50
fSBTZWxlY3RlZCBlbGVtZW50IGluIHRoZSBtb250aC15ZWFyIHBvcHVwLgorICovCitZZWFyTW9u
dGhDb250cm9sbGVyLnByb3RvdHlwZS5fZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKQoreworICAg
IHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuIiArIENsYXNzTmFtZXMuU2VsZWN0ZWRN
b250aFllYXIpOworfQorCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKi8KK1llYXJN
b250aENvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbihldmVu
dCkKK3sKKyAgICBpZiAoIXRoaXMuX3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlKSB7CisgICAg
ICAgIC8vIFNlbGVjdGlvbiB1cGRhdGUgdHVybmVkIG9mZiB3aGlsZSBuYXZpZ2F0aW5nIHdpdGgg
a2V5Ym9hcmQgdG8gcHJldmVudCBhIG1vdXNlCisgICAgICAgIC8vIG1vdmUgdHJpZ2dlZCBkdXJp
bmcgYSBzY3JvbGwgZnJvbSByZXNldHRpbmcgdGhlIHNlbGVjdGlvbi4gQXV0b21hdGljYWxseQor
ICAgICAgICAvLyByZWFybSBjb250cm9sIHRvIGVuYWJsZSBtb3VzZS1iYXNlZCBzZWxlY3Rpb24u
CisgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlID0gdHJ1ZTsKKyAgICB9
IGVsc2UgeworICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OworICAgICAgICB2YXIg
c2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGlmICh0YXJnZXQgJiYg
dGFyZ2V0ICE9IHNlbGVjdGlvbiAmJiB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFt
ZXMuTW9udGhTZWxlY3RvclBvcHVwRW50cnkpKSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9u
KQorICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZXMu
U2VsZWN0ZWRNb250aFllYXIpOworICAgICAgICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ2xh
c3NOYW1lcy5TZWxlY3RlZE1vbnRoWWVhcik7CisgICAgICAgIH0KKyAgICB9CisgICAgZXZlbnQu
c3RvcFByb3BhZ2F0aW9uKCk7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworLyoq
CisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitZZWFyTW9udGhDb250cm9sbGVyLnByb3Rv
dHlwZS5faGFuZGxlTW9udGhQb3B1cEtleSA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIHZhciBr
ZXkgPSBldmVudC5rZXlJZGVudGlmaWVyOworICAgIGlmIChrZXkgPT0gIkRvd24iKSB7CisgICAg
ICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICBpZiAoc2Vs
ZWN0ZWQpIHsKKyAgICAgICAgICAgIHZhciBuZXh0ID0gc2VsZWN0ZWQubmV4dFNpYmxpbmc7Cisg
ICAgICAgICAgICBpZiAobmV4dCkgeworICAgICAgICAgICAgICAgIHNlbGVjdGVkLmNsYXNzTGlz
dC5yZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZE1vbnRoWWVhcik7CisgICAgICAgICAgICAgICAg
bmV4dC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOworICAgICAg
ICAgICAgICAgIHZhciBib3R0b20gPSBuZXh0Lm9mZnNldFRvcCArIG5leHQuY2xpZW50SGVpZ2h0
OworICAgICAgICAgICAgICAgIGlmIChib3R0b20gPiB0aGlzLl9tb250aFBvcHVwLnNjcm9sbFRv
cCArIHRoaXMuX21vbnRoUG9wdXAuY2xpZW50SGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuX21vbnRoUG9wdXAuc2Nyb2xsVG9wID0gYm90dG9tIC0gdGhpcy5fbW9udGhQ
b3B1cC5jbGllbnRIZWlnaHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVcCIpIHsKKyAgICAgICAg
dmFyIHNlbGVjdGVkID0gdGhpcy5fZ2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGlmIChzZWxlY3Rl
ZCkgeworICAgICAgICAgICAgdmFyIHByZXZpb3VzID0gc2VsZWN0ZWQucHJldmlvdXNTaWJsaW5n
OworICAgICAgICAgICAgaWYgKHByZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWQu
Y2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVzLlNlbGVjdGVkTW9udGhZZWFyKTsKKyAgICAgICAg
ICAgICAgICBwcmV2aW91cy5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFll
YXIpOworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91cy5vZmZzZXRUb3AgPCB0aGlzLl9tb250
aFBvcHVwLnNjcm9sbFRvcCkgeworICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTZWxl
Y3Rpb25Pbk1vdXNlTW92ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb250
aFBvcHVwLnNjcm9sbFRvcCA9IHByZXZpb3VzLm9mZnNldFRvcDsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9u
KCk7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAgfSBlbHNlIGlmIChrZXkg
PT0gIlUrMDAxQiIpIHsKKyAgICAgICAgdGhpcy5fY2xvc2VQb3B1cCgpOworICAgICAgICBldmVu
dC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAg
ICB9IGVsc2UgaWYgKGtleSA9PSAiRW50ZXIiKSB7CisgICAgICAgIHRoaXMuX2hhbmRsZVllYXJN
b250aENoYW5nZSgpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIu
cHJvdG90eXBlLl9oYW5kbGVZZWFyTW9udGhDaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlz
Ll9jbG9zZVBvcHVwKCk7CisgICAgdmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigp
OworICAgIGlmICghc2VsZWN0aW9uKQorICAgICAgICByZXR1cm47CisgICAgdmFyIHZhbHVlID0g
c2VsZWN0aW9uLmRhdGFzZXQudmFsdWU7CisgICAgdmFyIHJlc3VsdCAgPSB2YWx1ZS5tYXRjaCgv
KFxkKyktKFxkKykvKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworICAgIHZh
ciBuZXdZZWFyID0gTnVtYmVyKHJlc3VsdFsxXSk7CisgICAgdmFyIG5ld01vbnRoID0gTnVtYmVy
KHJlc3VsdFsyXSk7CisgICAgZ2xvYmFsLmRheXNUYWJsZS5uYXZpZ2F0ZVRvTW9udGhBbmRLZWVw
U2VsZWN0aW9uUG9zaXRpb24obmV3WWVhciwgbmV3TW9udGgpOworfTsKKworLyoKKyAqIEBjb25z
dAorICogQHR5cGUge251bWJlcn0KKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1Rl
blllYXJzID0gLTEyMDsKKy8qCisgKiBAY29uc3QKKyAqIEB0eXBlIHtudW1iZXJ9CisgKi8KK1ll
YXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNZZWFyID0gLTEyOworLyoKKyAqIEBjb25zdAorICog
QHR5cGUge251bWJlcn0KKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c01vbnRoID0g
LTE7CisvKgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQorICovCitZZWFyTW9udGhDb250
cm9sbGVyLk5leHRNb250aCA9IDE7CisvKgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQor
ICovCitZZWFyTW9udGhDb250cm9sbGVyLk5leHRZZWFyID0gMTI7CisvKgorICogQGNvbnN0Cisg
KiBAdHlwZSB7bnVtYmVyfQorICovCitZZWFyTW9udGhDb250cm9sbGVyLk5leHRUZW5ZZWFycyA9
IDEyMDsKKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitZZWFyTW9udGhDb250
cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgewor
ICAgIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fbGVmdDMpCisgICAgICAgIHRoaXMubW92ZVJl
bGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzKTsKKyAgICBlbHNl
IGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fbGVmdDIpCisgICAgICAgIHRoaXMubW92ZVJlbGF0
aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1llYXIpOworICAgIGVsc2UgaWYgKGV2
ZW50LnRhcmdldCA9PSB0aGlzLl9sZWZ0MSkKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZ
ZWFyTW9udGhDb250cm9sbGVyLlByZXZpb3VzTW9udGgpOworICAgIGVsc2UgaWYgKGV2ZW50LnRh
cmdldCA9PSB0aGlzLl9yaWdodDEpCisgICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1v
bnRoQ29udHJvbGxlci5OZXh0TW9udGgpCisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRo
aXMuX3JpZ2h0MikKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9s
bGVyLk5leHRZZWFyKTsKKyAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fcmlnaHQz
KQorICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIuTmV4dFRl
blllYXJzKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybjsKK307CisKKy8qKgorICogQHBhcmFt
IHshbnVtYmVyfSBhbW91bnQKKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUubW92
ZVJlbGF0aXZlbHkgPSBmdW5jdGlvbihhbW91bnQpIHsKKyAgICB2YXIgbWluID0gZ2xvYmFsLm1p
bmltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAxMiArIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRV
VENNb250aCgpOworICAgIHZhciBtYXggPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFll
YXIoKSAqIDEyICsgZ2xvYmFsLm1heGltdW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAgdmFyIGN1
cnJlbnQgPSB0aGlzLl9jdXJyZW50WWVhciAqIDEyICsgdGhpcy5fY3VycmVudE1vbnRoOworICAg
IHZhciB1cGRhdGVkID0gY3VycmVudDsKKyAgICBpZiAoYW1vdW50IDwgMCkKKyAgICAgICAgdXBk
YXRlZCA9IGN1cnJlbnQgKyBhbW91bnQgPj0gbWluID8gY3VycmVudCArIGFtb3VudCA6IG1pbjsK
KyAgICBlbHNlCisgICAgICAgIHVwZGF0ZWQgPSBjdXJyZW50ICsgYW1vdW50IDw9IG1heCA/IGN1
cnJlbnQgKyBhbW91bnQgOiBtYXg7CisgICAgaWYgKHVwZGF0ZWQgPT0gY3VycmVudCkKKyAgICAg
ICAgcmV0dXJuOworICAgIGdsb2JhbC5kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNl
bGVjdGlvblBvc2l0aW9uKE1hdGguZmxvb3IodXBkYXRlZCAvIDEyKSwgdXBkYXRlZCAlIDEyKTsK
K307CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24g
RGF5c1RhYmxlKCkgeworICAgIC8qKgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLwor
ICAgIHRoaXMuX3ggPSAtMTsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAg
Ki8KKyAgICB0aGlzLl95ID0gLTE7CisgICAgLyoqCisgICAgICogQHR5cGUgeyFudW1iZXJ9Cisg
ICAgICovCisgICAgdGhpcy5fY3VycmVudFllYXIgPSAtMTsKKyAgICAvKioKKyAgICAgKiBAdHlw
ZSB7IW51bWJlcn0KKyAgICAgKi8KKyAgICB0aGlzLl9jdXJyZW50TW9udGggPSAtMTsKK30KKwor
LyoqCisgKiBAcmV0dXJuIHshYm9vbGVhbn0KKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5faGFz
U2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuX3ggPj0gMCAmJiB0aGlz
Ll95ID49IDA7Cit9CisKKy8qKgorICogVGhlIG51bWJlciBvZiB3ZWVrIGxpbmVzIGluIHRoZSBz
Y3JlZW4uCisgKiBAY29uc3QKKyAqIEB0eXBlIHtudW1iZXJ9CisgKi8KK0RheXNUYWJsZS5fV2Vl
a3MgPSA2OworCisvKioKKyAqIEBwYXJhbSB7IUVsZW1lbnR9IG1haW4KKyAqLworRGF5c1RhYmxl
LnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9uKG1haW4pIHsKKyAgICB0aGlzLl9kYXlzQ29u
dGFpbmVyID0gY3JlYXRlRWxlbWVudCgidGFibGUiLCBDbGFzc05hbWVzLkRheXNBcmVhKTsKKyAg
ICB0aGlzLl9kYXlzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlz
Ll9oYW5kbGVEYXlDbGljaywgdGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLl9kYXlzQ29udGFpbmVy
LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VPdmVy
LCB0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5l
cigibW91c2VvdXQiLCBiaW5kKHRoaXMuX2hhbmRsZU1vdXNlT3V0LCB0aGlzKSwgZmFsc2UpOwor
ICAgIHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0VHJhbnNpdGlv
bkVuZCIsIGJpbmQodGhpcy5fbW92ZUluRGF5cywgdGhpcyksIGZhbHNlKTsKKyAgICB2YXIgY29u
dGFpbmVyID0gY3JlYXRlRWxlbWVudCgidHIiLCBDbGFzc05hbWVzLkRheUxhYmVsQ29udGFpbmVy
KTsKKyAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwg
MDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDc7IGkrKykKKyAgICAgICAgY29udGFpbmVyLmFw
cGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoInRoIiwgQ2xhc3NOYW1lcy5EYXlMYWJlbCwgZ2xvYmFs
LnBhcmFtcy5kYXlMYWJlbHNbKHdlZWtTdGFydERheSArIGkpICUgN10pKTsKKyAgICB0aGlzLl9k
YXlzQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgdGhpcy5fZGF5cyA9IFtd
OworICAgIGZvciAodmFyIHcgPSAwOyB3IDwgRGF5c1RhYmxlLl9XZWVrczsgdysrKSB7CisgICAg
ICAgIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoInRyIiwgQ2xhc3NOYW1lcy5XZWVrQ29udGFp
bmVyKTsKKyAgICAgICAgdmFyIHdlZWsgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQg
PCA3OyBkKyspIHsKKyAgICAgICAgICAgIHZhciBkYXkgPSBjcmVhdGVFbGVtZW50KCJ0ZCIsIENs
YXNzTmFtZXMuRGF5LCAiICIpOworICAgICAgICAgICAgZGF5LnNldEF0dHJpYnV0ZSgiZGF0YS1w
b3NpdGlvbi14IiwgU3RyaW5nKGQpKTsKKyAgICAgICAgICAgIGRheS5zZXRBdHRyaWJ1dGUoImRh
dGEtcG9zaXRpb24teSIsIFN0cmluZyh3KSk7CisgICAgICAgICAgICB3ZWVrLnB1c2goZGF5KTsK
KyAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChkYXkpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMuX2RheXMucHVzaCh3ZWVrKTsKKyAgICAgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5h
cHBlbmRDaGlsZChjb250YWluZXIpOworICAgIH0KKyAgICBjb250YWluZXIgPSBjcmVhdGVFbGVt
ZW50KCJkaXYiLCBDbGFzc05hbWVzLkRheXNBcmVhQ29udGFpbmVyKTsKKyAgICBjb250YWluZXIu
YXBwZW5kQ2hpbGQodGhpcy5fZGF5c0NvbnRhaW5lcik7CisgICAgY29udGFpbmVyLnRhYkluZGV4
ID0gMDsKKyAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhp
cy5faGFuZGxlS2V5LCB0aGlzKSwgZmFsc2UpOworICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFp
bmVyKTsKKworICAgIGNvbnRhaW5lci5mb2N1cygpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFu
dW1iZXJ9IHRpbWUgZGF0ZSBpbiBtaWxsaXNlY29uZC4KKyAqIEByZXR1cm4geyFib29sZWFufQor
ICovCitmdW5jdGlvbiBzdGVwTWlzbWF0Y2godGltZSkgeworICAgIHJldHVybiAodGltZSAtIGds
b2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkpICUgZ2xvYmFsLnN0ZXAgIT0gMDsKK30KKworLyoq
CisgKiBAcGFyYW0geyFudW1iZXJ9IHRpbWUgZGF0ZSBpbiBtaWxsaXNlY29uZC4KKyAqIEByZXR1
cm4geyFib29sZWFufQorICovCitmdW5jdGlvbiBvdXRPZlJhbmdlKHRpbWUpIHsKKyAgICByZXR1
cm4gdGltZSA8IGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkgfHwgdGltZSA+IGdsb2JhbC5t
YXhpbXVtRGF0ZS5nZXRUaW1lKCk7Cit9CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB0aW1l
IGRhdGUgaW4gbWlsbGlzZWNvbmQuCisgKiBAcmV0dXJuIHshYm9vbGVhbn0KKyAqLworZnVuY3Rp
b24gaXNWYWxpZERhdGUodGltZSkgeworICAgIHJldHVybiAhb3V0T2ZSYW5nZSh0aW1lKSAmJiAh
c3RlcE1pc21hdGNoKHRpbWUpOworfQorCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgor
ICogQHBhcmFtIHshbnVtYmVyfSBtb250aAorICovCitEYXlzVGFibGUucHJvdG90eXBlLl9yZW5k
ZXJNb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CisgICAgdGhpcy5fY3VycmVudFllYXIg
PSB5ZWFyOworICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IG1vbnRoOworICAgIHZhciBkYXlJdGVy
YXRvciA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKSk7CisgICAgZGF5SXRlcmF0
b3Iuc2V0VVRDRnVsbFllYXIoeWVhcik7CisgICAgdmFyIG1vbnRoU3RhcnREYXkgPSBkYXlJdGVy
YXRvci5nZXRVVENEYXkoKTsKKyAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53
ZWVrU3RhcnREYXkgfHwgMDsKKyAgICB2YXIgc3RhcnRPZmZzZXQgPSB3ZWVrU3RhcnREYXkgLSBt
b250aFN0YXJ0RGF5OworICAgIGlmIChzdGFydE9mZnNldCA+PSAwKQorICAgICAgICBzdGFydE9m
ZnNldCAtPSA3OworICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUoc3RhcnRPZmZzZXQgKyAxKTsK
KyAgICBmb3IgKHZhciB3ID0gMDsgdyA8IERheXNUYWJsZS5fV2Vla3M7IHcrKykgeworICAgICAg
ICBmb3IgKHZhciBkID0gMDsgZCA8IDc7IGQrKykgeworICAgICAgICAgICAgdmFyIGl0ZXJZZWFy
ID0gZGF5SXRlcmF0b3IuZ2V0VVRDRnVsbFllYXIoKTsKKyAgICAgICAgICAgIHZhciBpdGVyTW9u
dGggPSBkYXlJdGVyYXRvci5nZXRVVENNb250aCgpOworICAgICAgICAgICAgdmFyIHRpbWUgPSBk
YXlJdGVyYXRvci5nZXRUaW1lKCk7CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX2Rh
eXNbd11bZF07CisgICAgICAgICAgICAvLyBGSVhNRTogTmVlZCBsb2NhbGl6ZWQgbnVtYmVyPwor
ICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSBTdHJpbmcoZGF5SXRlcmF0b3IuZ2V0VVRD
RGF0ZSgpKTsKKyAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gQ2xhc3NOYW1lcy5EYXk7
CisgICAgICAgICAgICBlbGVtZW50LmRhdGFzZXQuc3VibWl0VmFsdWUgPSBzZXJpYWxpemVEYXRl
KGl0ZXJZZWFyLCBpdGVyTW9udGgsIGRheUl0ZXJhdG9yLmdldFVUQ0RhdGUoKSk7CisgICAgICAg
ICAgICBpZiAob3V0T2ZSYW5nZSh0aW1lKSkKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNz
TGlzdC5hZGQoQ2xhc3NOYW1lcy5VbmF2YWlsYWJsZSk7CisgICAgICAgICAgICBlbHNlIGlmIChz
dGVwTWlzbWF0Y2godGltZSkpCisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRk
KENsYXNzTmFtZXMuVW5hdmFpbGFibGUpOworICAgICAgICAgICAgZWxzZSBpZiAoKGl0ZXJZZWFy
ID09IHllYXIgJiYgZGF5SXRlcmF0b3IuZ2V0VVRDTW9udGgoKSA8IG1vbnRoKSB8fCAobW9udGgg
PT0gMCAmJiBpdGVyTW9udGggPT0gMTEpKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFz
c0xpc3QuYWRkKENsYXNzTmFtZXMuQXZhaWxhYmxlKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50
LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5Ob3RUaGlzTW9udGgpOworICAgICAgICAgICAgfSBl
bHNlIGlmICgoaXRlclllYXIgPT0geWVhciAmJiBkYXlJdGVyYXRvci5nZXRVVENNb250aCgpID4g
bW9udGgpIHx8IChtb250aCA9PSAxMSAmJiBpdGVyTW9udGggPT0gMCkpIHsKKyAgICAgICAgICAg
ICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5BdmFpbGFibGUpOworICAgICAg
ICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLk5vdFRoaXNNb250aCk7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHRpbWUpKSB7CisgICAgICAgICAgICAgICAg
ZWxlbWVudC5pbm5lclRleHQgPSAiLSI7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xp
c3QuYWRkKENsYXNzTmFtZXMuVW5hdmFpbGFibGUpOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuQXZhaWxhYmxlKTsK
KyAgICAgICAgICAgIGRheUl0ZXJhdG9yLnNldFVUQ0RhdGUoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0
ZSgpICsgMSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBnbG9iYWwudG9kYXkuZGlzYWJsZWQg
PSAhaXNWYWxpZERhdGUocGFyc2VEYXRlU3RyaW5nKCkuZ2V0VGltZSgpKTsKK307CisKKy8qKgor
ICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCisgKi8K
K0RheXNUYWJsZS5wcm90b3R5cGUuX25hdmlnYXRlVG9Nb250aCA9IGZ1bmN0aW9uKHllYXIsIG1v
bnRoKSB7CisgICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIuc2V0WWVhck1vbnRoKHllYXIs
IG1vbnRoKTsKKyAgICB0aGlzLl9yZW5kZXJNb250aCh5ZWFyLCBtb250aCk7Cit9OworCisvKioK
KyAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgorICogQHBhcmFtIHshbnVtYmVyfSBtb250aAorICov
CitEYXlzVGFibGUucHJvdG90eXBlLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uID0gZnVu
Y3Rpb24oeWVhciwgbW9udGgpIHsKKyAgICBpZiAodGhpcy5fY3VycmVudFllYXIgPj0gMCAmJiB0
aGlzLl9jdXJyZW50TW9udGggPj0gMCkgeworICAgICAgICBpZiAoeWVhciA9PSB0aGlzLl9jdXJy
ZW50WWVhciAmJiBtb250aCA9PSB0aGlzLl9jdXJyZW50TW9udGgpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHZhciBkZWNyZWFzaW5nID0gZmFsc2U7CisgICAgICAgIGlmICh5ZWFyIDwg
dGhpcy5fY3VycmVudFllYXIpCisgICAgICAgICAgICBkZWNyZWFzaW5nID0gdHJ1ZTsKKyAgICAg
ICAgZWxzZSBpZiAoeWVhciA+IHRoaXMuX2N1cnJlbnRZZWFyKQorICAgICAgICAgICAgZGVjcmVh
c2luZyA9IGZhbHNlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWNyZWFzaW5nID0gbW9u
dGggPCB0aGlzLl9jdXJyZW50TW9udGg7CisgICAgICAgIHZhciBkYXlzU3R5bGUgPSB0aGlzLl9k
YXlzQ29udGFpbmVyLnN0eWxlOworICAgICAgICBkYXlzU3R5bGUucG9zaXRpb24gPSAicmVsYXRp
dmUiOworICAgICAgICBkYXlzU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICJsZWZ0IDAuMXMgZWFz
ZSI7CisgICAgICAgIGRheXNTdHlsZS5sZWZ0ID0gKGRlY3JlYXNpbmcgPyAiIiA6ICItIikgKyB0
aGlzLl9kYXlzQ29udGFpbmVyLm9mZnNldFdpZHRoICsgInB4IjsKKyAgICB9CisgICAgdGhpcy5f
bmF2aWdhdGVUb01vbnRoKHllYXIsIG1vbnRoKTsKK307CisKK0RheXNUYWJsZS5wcm90b3R5cGUu
X21vdmVJbkRheXMgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgZGF5c1N0eWxlID0gdGhpcy5fZGF5
c0NvbnRhaW5lci5zdHlsZTsKKyAgICBpZiAoZGF5c1N0eWxlLmxlZnQgPT0gIjBweCIpCisgICAg
ICAgIHJldHVybjsKKyAgICBkYXlzU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICIiOworICAgIGRh
eXNTdHlsZS5sZWZ0ID0gKGRheXNTdHlsZS5sZWZ0LmNoYXJBdCgwKSA9PSAiLSIgPyAiIiA6ICIt
IikgKyB0aGlzLl9kYXlzQ29udGFpbmVyLm9mZnNldFdpZHRoICsgInB4IjsKKyAgICB0aGlzLl9k
YXlzQ29udGFpbmVyLm9mZnNldExlZnQ7IC8vIEZvcmNlIHRvIGxheW91dC4KKyAgICBkYXlzU3R5
bGUud2Via2l0VHJhbnNpdGlvbiA9ICJsZWZ0IDAuMXMgZWFzZSI7CisgICAgZGF5c1N0eWxlLmxl
ZnQgPSAiMHB4IjsKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisgKiBAcGFy
YW0geyFudW1iZXJ9IG1vbnRoCisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUubmF2aWdhdGVUb01v
bnRoQW5kS2VlcFNlbGVjdGlvblBvc2l0aW9uID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKKyAg
ICBpZiAoeWVhciA9PSB0aGlzLl9jdXJyZW50WWVhciAmJiBtb250aCA9PSB0aGlzLl9jdXJyZW50
TW9udGgpCisgICAgICAgIHJldHVybjsKKyAgICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5p
bWF0aW9uKHllYXIsIG1vbnRoKTsKKyAgICBpZiAodGhpcy5faGFzU2VsZWN0aW9uKCkpCisgICAg
ICAgIHRoaXMuX2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVz
LlNlbGVjdGVkKTsKK307CisKKy8qKgorICogQHBhcmFtIHshRGF0ZX0gZGF0ZQorICovCitEYXlz
VGFibGUucHJvdG90eXBlLnNlbGVjdERhdGUgPSBmdW5jdGlvbihkYXRlKSB7CisgICAgdGhpcy5f
bmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbihkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUu
Z2V0VVRDTW9udGgoKSk7CisgICAgdmFyIGRhdGVTdHJpbmcgPSBzZXJpYWxpemVEYXRlKGRhdGUu
Z2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7
CisgICAgZm9yICh2YXIgdyA9IDA7IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3KyspIHsKKyAgICAg
ICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9k
YXlzW3ddW2RdLmRhdGFzZXQuc3VibWl0VmFsdWUgPT0gZGF0ZVN0cmluZykgeworICAgICAgICAg
ICAgICAgIHRoaXMuX2RheXNbd11bZF0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVk
KTsKKyAgICAgICAgICAgICAgICB0aGlzLl94ID0gZDsKKyAgICAgICAgICAgICAgICB0aGlzLl95
ID0gdzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KK307CisKKy8qKgorICogQHJldHVybiB7IWJvb2xlYW59CisgKi8KK0RheXNUYWJsZS5w
cm90b3R5cGUuX21heWJlU2V0UHJldmlvdXNNb250aCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB5
ZWFyID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIueWVhcigpOworICAgIHZhciBtb250aCA9
IGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vbnRoKCk7CisgICAgdmFyIHRoaXNNb250aFN0
YXJ0VGltZSA9IERhdGUuVVRDKHllYXIsIG1vbnRoLCAxKTsKKyAgICBpZiAoZ2xvYmFsLm1pbmlt
dW1EYXRlLmdldFRpbWUoKSA+PSB0aGlzTW9udGhTdGFydFRpbWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobW9udGggPT0gMCkgeworICAgICAgICB5ZWFyLS07CisgICAgICAgIG1v
bnRoID0gMTE7CisgICAgfSBlbHNlCisgICAgICAgIG1vbnRoLS07CisgICAgdGhpcy5fbmF2aWdh
dGVUb01vbnRoV2l0aEFuaW1hdGlvbih5ZWFyLCBtb250aCk7CisgICAgcmV0dXJuIHRydWU7Cit9
OworCisvKioKKyAqIEByZXR1cm4geyFib29sZWFufQorICovCitEYXlzVGFibGUucHJvdG90eXBl
Ll9tYXliZVNldE5leHRNb250aCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB5ZWFyID0gZ2xvYmFs
LnllYXJNb250aENvbnRyb2xsZXIueWVhcigpOworICAgIHZhciBtb250aCA9IGdsb2JhbC55ZWFy
TW9udGhDb250cm9sbGVyLm1vbnRoKCk7CisgICAgaWYgKG1vbnRoID09IDExKSB7CisgICAgICAg
IHllYXIrKzsKKyAgICAgICAgbW9udGggPSAwOworICAgIH0gZWxzZQorICAgICAgICBtb250aCsr
OworICAgIHZhciBuZXh0TW9udGhTdGFydFRpbWUgPSBEYXRlLlVUQyh5ZWFyLCBtb250aCwgMSk7
CisgICAgaWYgKGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRUaW1lKCkgPCBuZXh0TW9udGhTdGFydFRp
bWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGhXaXRo
QW5pbWF0aW9uKHllYXIsIG1vbnRoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK307CisKKy8qKgorICog
QHBhcmFtIHtFdmVudH0gZXZlbnQKKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlRGF5
Q2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0
LmNvbnRhaW5zKENsYXNzTmFtZXMuQXZhaWxhYmxlKSkKKyAgICAgICAgc3VibWl0VmFsdWUoZXZl
bnQudGFyZ2V0LmRhdGFzZXQuc3VibWl0VmFsdWUpOworfTsKKworLyoqCisgKiBAcGFyYW0ge0V2
ZW50fSBldmVudAorICovCitEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVNb3VzZU92ZXIgPSBm
dW5jdGlvbihldmVudCkgeworICAgIHZhciBub2RlID0gZXZlbnQudGFyZ2V0OworICAgIGlmICh0
aGlzLl9oYXNTZWxlY3Rpb24oKSkKKyAgICAgICAgdGhpcy5fZGF5c1t0aGlzLl95XVt0aGlzLl94
XS5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAgIGlmICghbm9kZS5j
bGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lcy5EYXkpKSB7CisgICAgICAgIHRoaXMuX3ggPSAt
MTsKKyAgICAgICAgdGhpcy5feSA9IC0xOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5v
ZGUuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVkKTsKKyAgICB0aGlzLl94ID0gTnVt
YmVyKG5vZGUuZGF0YXNldC5wb3NpdGlvblgpOworICAgIHRoaXMuX3kgPSBOdW1iZXIobm9kZS5k
YXRhc2V0LnBvc2l0aW9uWSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Cisg
Ki8KK0RheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRsZU1vdXNlT3V0ID0gZnVuY3Rpb24oZXZlbnQp
IHsKKyAgICBpZiAodGhpcy5faGFzU2VsZWN0aW9uKCkpCisgICAgICAgIHRoaXMuX2RheXNbdGhp
cy5feV1bdGhpcy5feF0uY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVzLlNlbGVjdGVkKTsKKyAg
ICB0aGlzLl94ID0gLTE7CisgICAgdGhpcy5feSA9IC0xOworfTsKKworLyoqCisgKiBAcGFyYW0g
e0V2ZW50fSBldmVudAorICovCitEYXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkgPSBmdW5j
dGlvbihldmVudCkgeworICAgIG1heWJlVXBkYXRlRm9jdXNTdHlsZSgpOworICAgIHZhciB4ID0g
dGhpcy5feDsKKyAgICB2YXIgeSA9IHRoaXMuX3k7CisgICAgdmFyIGtleSA9IGV2ZW50LmtleUlk
ZW50aWZpZXI7CisgICAgaWYgKCF0aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiAoa2V5ID09ICJMZWZ0
IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSkgewor
ICAgICAgICAvLyBQdXQgdGhlIHNlbGVjdGlvbiBvbiBhIGNlbnRlciBjZWxsLgorICAgICAgICB0
aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgMywgTWF0aC5mbG9vcihEYXlzVGFibGUuX1dlZWtz
IC8gMiAtIDEpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChrZXkgPT0gKGds
b2JhbC5wYXJhbXMuaXNSVEwgPyAiUmlnaHQiIDogIkxlZnQiKSkgeworICAgICAgICBpZiAoeCA9
PSAwKSB7CisgICAgICAgICAgICBpZiAoeSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0
aGlzLl9tYXliZVNldFByZXZpb3VzTW9udGgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIHkgPSBEYXlzVGFibGUuX1dlZWtzIC0gMTsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHktLTsKKyAgICAgICAgICAgIHggPSA2OworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHgtLTsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24o
ZXZlbnQsIHgsIHkpOworCisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlVwIikgeworICAgICAgICBp
ZiAoeSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250
aCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHkgPSBEYXlzVGFibGUu
X1dlZWtzIC0gMTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICB5LS07CisgICAgICAgIHRo
aXMudXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5KTsKKworICAgIH0gZWxzZSBpZiAoa2V5ID09
IChnbG9iYWwucGFyYW1zLmlzUlRMID8gIkxlZnQiIDogIlJpZ2h0IikpIHsKKyAgICAgICAgaWYg
KHggPT0gNikgeworICAgICAgICAgICAgaWYgKHkgPT0gRGF5c1RhYmxlLl9XZWVrcyAtIDEpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKCkpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgICAgIHkrKzsKKyAgICAgICAgICAgIHggPSAwOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIHgrKzsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24o
ZXZlbnQsIHgsIHkpOworCisgICAgfSBlbHNlIGlmIChrZXkgPT0gIkRvd24iKSB7CisgICAgICAg
IGlmICh5ID09IERheXNUYWJsZS5fV2Vla3MgLSAxKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMu
X21heWJlU2V0TmV4dE1vbnRoKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgeSA9IDA7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgeSsrOworICAgICAgICB0aGlz
LnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAi
UGFnZVVwIikgeworICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwg
eCwgeSk7CisKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZURvd24iKSB7CisgICAgICAgIGlm
ICghdGhpcy5fbWF5YmVTZXROZXh0TW9udGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworCisgICAgfSBlbHNlIGlmICh0
aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiBrZXkgPT0gIkVudGVyIikgeworICAgICAgICB2YXIgZGF5
Tm9kZSA9IHRoaXMuX2RheXNbeV1beF07CisgICAgICAgIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5j
b250YWlucyhDbGFzc05hbWVzLkF2YWlsYWJsZSkpIHsKKyAgICAgICAgICAgIHN1Ym1pdFZhbHVl
KGRheU5vZGUuZGF0YXNldC5zdWJtaXRWYWx1ZSk7CisgICAgICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA1NCIp
IHsgLy8gJ3QnCisgICAgICAgIHRoaXMuX2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NMaXN0
LnJlbW92ZShDbGFzc05hbWVzLlNlbGVjdGVkKTsKKyAgICAgICAgdGhpcy5zZWxlY3REYXRlKG5l
dyBEYXRlKCkpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9
IGV2ZW50CisgKiBAcGFyYW0geyFudW1iZXJ9IHgKKyAqIEBwYXJhbSB7IW51bWJlcn0geQorICov
CitEYXlzVGFibGUucHJvdG90eXBlLnVwZGF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50LCB4
LCB5KSB7CisgICAgaWYgKHRoaXMuX2hhc1NlbGVjdGlvbigpKQorICAgICAgICB0aGlzLl9kYXlz
W3RoaXMuX3ldW3RoaXMuX3hdLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7
CisgICAgaWYgKHggPj0gMCAmJiB5ID49IDApIHsKKyAgICAgICAgdGhpcy5fZGF5c1t5XVt4XS5j
bGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWQpOworICAgICAgICB0aGlzLl94ID0geDsK
KyAgICAgICAgdGhpcy5feSA9IHk7CisgICAgfQorICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
OworICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z1bmN0
aW9uIGhhbmRsZVRvZGF5KCkgeworICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICBnbG9i
YWwuZGF5c1RhYmxlLnNlbGVjdERhdGUoZGF0ZSk7CisgICAgc3VibWl0VmFsdWUoc2VyaWFsaXpl
RGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkp
KTsKK30KKworZnVuY3Rpb24gaGFuZGxlQ2xlYXIoKSB7CisgICAgc3VibWl0VmFsdWUoIiIpOwor
fQorCisvKioKKyAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZQorICovCitmdW5jdGlvbiBzdWJtaXRW
YWx1ZSh2YWx1ZSkgeworICAgIHdpbmRvdy5wYWdlUG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5k
Q2xvc2VQb3B1cCgwLCB2YWx1ZSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUNhbmNlbCgpIHsKKyAg
ICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoLTEsICIi
KTsKK30KKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitmdW5jdGlvbiBoYW5k
bGVHbG9iYWxLZXkoZXZlbnQpIHsKKyAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKKyAgICB2
YXIga2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcjsKKyAgICBpZiAoa2V5ID09ICJVKzAwMDkiKSB7
CisgICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9
PSBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQ
cm9wYWdhdGlvbigpOworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAg
ICAgICAgIGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKKyAgICAgICAgfSBl
bHNlIGlmIChldmVudC5zaGlmdEtleSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGdsb2Jh
bC5maXJzdEZvY3VzYWJsZUNvbnRyb2wpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpOworICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAg
IGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbC5mb2N1cygpOworICAgICAgICB9CisgICAgfSBl
bHNlIGlmIChrZXkgPT0gIlUrMDA0RCIpIHsgLy8gJ20nCisgICAgICAgIGdsb2JhbC55ZWFyTW9u
dGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29u
dHJvbGxlci5QcmV2aW91c01vbnRoIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9udGgpOwor
ICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTkiKSB7IC8vICd5JworICAgICAgICBnbG9iYWwu
eWVhck1vbnRoQ29udHJvbGxlci5tb3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJN
b250aENvbnRyb2xsZXIuUHJldmlvdXNZZWFyIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0WWVh
cik7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA0NCIpIHsgLy8gJ2QnCisgICAgICAgIGds
b2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8g
WWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzIDogWWVhck1vbnRoQ29udHJvbGxl
ci5OZXh0VGVuWWVhcnMpOworICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwMUIiKSAvLyBFU0MK
KyAgICAgICAgaGFuZGxlQ2FuY2VsKCk7Cit9CisKK2Z1bmN0aW9uIG1heWJlVXBkYXRlRm9jdXNT
dHlsZSgpIHsKKyAgICBpZiAoZ2xvYmFsLmhhZEtleUV2ZW50KQorICAgICAgICByZXR1cm47Cisg
ICAgZ2xvYmFsLmhhZEtleUV2ZW50ID0gdHJ1ZTsKKyAgICAkKCJtYWluIikuY2xhc3NMaXN0LnJl
bW92ZShDbGFzc05hbWVzLk5vRm9jdXNSaW5nKTsKK30KKworaWYgKHdpbmRvdy5kaWFsb2dBcmd1
bWVudHMpIHsKKyAgICBpbml0aWFsaXplKGRpYWxvZ0FyZ3VtZW50cyk7Cit9IGVsc2UgeworICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgaGFuZGxlTWVzc2FnZSwgZmFsc2Up
OworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQsIDEwMDApOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5k
YXJQaWNrZXJNYWMuY3NzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2Fs
ZW5kYXJQaWNrZXJNYWMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxNDQ2NDU2MjdhOTc1ZTdiNWE5Nzg1OTRi
YWVmZjExMjA4MThiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJj
ZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlck1hYy5jc3MKQEAgLTAsMCArMSw0OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy55ZWFy
LW1vbnRoLWJ1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGJhY2tn
cm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZy
b20oI2ZmZiksIGNvbG9yLXN0b3AoMC4zLCAjZmZmKSwgY29sb3Itc3RvcCgwLjM1LCAjZjdmN2Y3
KSwgY29sb3Itc3RvcCgwLjQ5LCAjZjdmN2Y3KSwgY29sb3Itc3RvcCgwLjUsICNlZGVkZWQpLCB0
bygjZWRlZGVkKSk7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggI2E2YTZhNjsKKyAgICBib3JkZXIt
cmFkaXVzOiA0cHg7CisgICAgYm94LXNoYWRvdzogaW5zZXQgMXB4IDFweCAxcHggcmdiYSgyNTUs
MjU1LDI1NSwwLjQpLCBpbnNldCAtMXB4IC0xcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC40KTsK
KyAgICBwYWRkaW5nLWxlZnQ6IDNweDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7Cit9CisKKy55
ZWFyLW1vbnRoLWJ1dHRvbjphY3RpdmUgeworICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGll
bnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2EzYmZlZiksIGNvbG9yLXN0
b3AoMC40OSwgICM2YmEzZWYpLCBjb2xvci1zdG9wKDAuNSwgIzQ0OTFlZiksIHRvKCNhM2QxZWYp
KTsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjNGQ0ZDUwOworfQorCisueWVhci1tb250aC1idXR0
b246ZGlzYWJsZWQgeworICAgIGNvbG9yOiAjODg4OworICAgIGJvcmRlcjogc29saWQgMXB4ICNk
MWQxZDE7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVw
cy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3Bh
Z2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Zjg0N2ZlYmNh
ZWVhNzY5NTVhYjVmYjU4NzFjNDcyMWI5OWI0YmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmNzcwpA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworYm9keSB7CisgICAgLXdlYmtpdC11c2VyLXNlbGVj
dDogbm9uZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBmb250OiAtd2Via2l0
LXNtYWxsLWNvbnRyb2w7CisgICAgbWFyZ2luOiAwOworICAgIG92ZXJmbG93OiBoaWRkZW47Cit9
CisKKyNtYWluIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IHNv
bGlkIDFweCAjODg5OWFhOworICAgIGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMnB4IHdoaXRl
LAorICAgICAgICBpbnNldCAtMnB4IC0ycHggMXB4IHJnYmEoMCwwLDAsMC4xKTsKKyAgICBwYWRk
aW5nOiA2cHg7CisgICAgZmxvYXQ6IGxlZnQ7Cit9CisKKy5jb2xvci1zd2F0Y2ggeworICAgIGZs
b2F0OiBsZWZ0OworICAgIHdpZHRoOiAyMHB4OworICAgIGhlaWdodDogMjBweDsKKyAgICBtYXJn
aW46IDFweDsKKyAgICBwYWRkaW5nOiAwOworICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7
CisgICAgYm94LXNpemluZzogY29udGVudC1ib3g7Cit9CisKKy5jb2xvci1zd2F0Y2g6Zm9jdXMg
eworICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMDAwMDA7CisgICAgb3V0bGluZTogbm9uZTsKK30K
KworLmNvbG9yLXN3YXRjaC1jb250YWluZXIgeworICAgIHdpZHRoOiAxMDAlOworICAgIG1heC1o
ZWlnaHQ6IDEwNHB4OworICAgIG92ZXJmbG93OiBhdXRvOworICAgIGRpc3BsYXk6IC13ZWJraXQt
ZmxleDsKKyAgICAtd2Via2l0LWZsZXgtZmxvdzogcm93IHdyYXA7CisgICAgLXdlYmtpdC1hbGln
bi1pdGVtczogY2VudGVyOworfQorCisub3RoZXItY29sb3IgeworICAgIHdpZHRoOiAxMDAlOwor
ICAgIG1hcmdpbjogNHB4IDAgMCAwOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVz
b3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzIGIvU291cmNlL1dlYkNv
cmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmE4MjdlOTZkMWMxZGU3YTAzMGFlZWFhOGI4ZmMxNzFiN2RjOWE1YmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jb2xvclN1Z2dlc3Rp
b25QaWNrZXIuanMKQEAgLTAsMCArMSwyNjMgQEAKKyJ1c2Ugc3RyaWN0IjsKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCit2
YXIgZ2xvYmFsID0geworICAgIGFyZ3VtZW50c1JlY2VpdmVkOiBmYWxzZSwKKyAgICBzY3JvbGxi
YXJXaWR0aDogbnVsbAorfTsKKworLyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IGlkCisgKi8KK2Z1
bmN0aW9uICQoaWQpIHsKKyAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwor
fQorCitmdW5jdGlvbiBiaW5kKGZ1bmMsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24o
KSB7CisgICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CisgICAg
fTsKK30KKworZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyV2lkdGgoKSB7CisgICAgaWYgKGdsb2JhbC5z
Y3JvbGxiYXJXaWR0aCA9PT0gbnVsbCkgeworICAgICAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgICAgICAgIHNjcm9sbERpdi5zdHlsZS5vcGFjaXR5
ID0gIjAiOworICAgICAgICBzY3JvbGxEaXYuc3R5bGUub3ZlcmZsb3cgPSAic2Nyb2xsIjsKKyAg
ICAgICAgc2Nyb2xsRGl2LnN0eWxlLndpZHRoID0gIjUwcHgiOworICAgICAgICBzY3JvbGxEaXYu
c3R5bGUuaGVpZ2h0ID0gIjUwcHgiOworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KHNjcm9sbERpdik7CisgICAgICAgIGdsb2JhbC5zY3JvbGxiYXJXaWR0aCA9IHNjcm9sbERpdi5v
ZmZzZXRXaWR0aCAtIHNjcm9sbERpdi5jbGllbnRXaWR0aDsKKyAgICAgICAgc2Nyb2xsRGl2LnBh
cmVudE5vZGUucmVtb3ZlQ2hpbGQoc2Nyb2xsRGl2KTsKKyAgICB9CisgICAgcmV0dXJuIGdsb2Jh
bC5zY3JvbGxiYXJXaWR0aDsKK30KKworLyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IHRhZ05hbWUK
KyAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X2NsYXNzCisgKiBAcGFyYW0ge3N0cmluZz19IG9wdF90
ZXh0CisgKiBAcmV0dXJuIHshRWxlbWVudH0KKyAqLworZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0
YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgIGlmIChvcHRfY2xhc3MpCisgICAgICAgIGVs
ZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG9wdF9jbGFzcyk7CisgICAgaWYgKG9wdF90ZXh0
KQorICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9w
dF90ZXh0KSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKKy8qKgorICogQHBhcmFtIHshbnVt
YmVyfSB3aWR0aAorICogQHBhcmFtIHshbnVtYmVyfSBoZWlnaHQKKyAqLworZnVuY3Rpb24gcmVz
aXplV2luZG93KHdpZHRoLCBoZWlnaHQpIHsKKyAgICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkg
eworICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgi
OworICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJw
eCI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgd2luZG93LnJlc2l6ZVRvKHdpZHRoLCBoZWlnaHQp
OworICAgIH0KK30KKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitmdW5jdGlv
biBoYW5kbGVNZXNzYWdlKGV2ZW50KSB7CisgICAgaW5pdGlhbGl6ZShKU09OLnBhcnNlKGV2ZW50
LmRhdGEpKTsKKyAgICBnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQgPSB0cnVlOworfQorCisvKioK
KyAqIEBwYXJhbSB7IU9iamVjdH0gYXJncworICovCitmdW5jdGlvbiBpbml0aWFsaXplKGFyZ3Mp
IHsKKyAgICB2YXIgbWFpbiA9ICQoIm1haW4iKTsKKyAgICBtYWluLmlubmVySFRNTCA9ICIiOwor
ICAgIHZhciBlcnJvclN0cmluZyA9IHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpOworICAgIGlmIChl
cnJvclN0cmluZykgeworICAgICAgICBtYWluLnRleHRDb250ZW50ID0gIkludGVybmFsIGVycm9y
OiAiICsgZXJyb3JTdHJpbmc7CisgICAgICAgIHJlc2l6ZVdpbmRvdyhtYWluLm9mZnNldFdpZHRo
LCBtYWluLm9mZnNldEhlaWdodCk7CisgICAgfSBlbHNlCisgICAgICAgIG5ldyBDb2xvclBpY2tl
cihtYWluLCBhcmdzKTsKK30KKworLy8gVGhlIERlZmF1bHRDb2xvclBhbGV0dGUgaXMgdXNlZCB3
aGVuIHRoZSBsaXN0IG9mIHZhbHVlcyBhcmUgZW1wdHkuIAordmFyIERlZmF1bHRDb2xvclBhbGV0
dGUgPSBbIiMwMDAwMDAiLCAiIzQwNDA0MCIsICIjODA4MDgwIiwgIiNjMGMwYzAiLAorICAgICIj
ZmZmZmZmIiwgIiM5ODAwMDAiLCAiI2ZmMDAwMCIsICIjZmY5OTAwIiwgIiNmZmZmMDAiLCAiIzAw
ZmYwMCIsICIjMDBmZmZmIiwKKyAgICAiIzRhODZlOCIsICIjMDAwMGZmIiwgIiM5OTAwZmYiLCAi
I2ZmMDBmZiJdOworCitmdW5jdGlvbiBoYW5kbGVBcmd1bWVudHNUaW1lb3V0KCkgeworICAgIGlm
IChnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgYXJn
cyA9IHsKKyAgICAgICAgdmFsdWVzIDogRGVmYXVsdENvbG9yUGFsZXR0ZSwKKyAgICAgICAgb3Ro
ZXJDb2xvckxhYmVsOiAiT3RoZXIuLi4iCisgICAgfTsKKyAgICBpbml0aWFsaXplKGFyZ3MpOwor
fQorCisvKioKKyAqIEBwYXJhbSB7IU9iamVjdH0gYXJncworICogQHJldHVybiB7P3N0cmluZ30g
QW4gZXJyb3IgbWVzc2FnZSwgb3IgbnVsbCBpZiB0aGUgYXJndW1lbnQgaGFzIG5vIGVycm9ycy4K
KyAqLworZnVuY3Rpb24gdmFsaWRhdGVBcmd1bWVudHMoYXJncykgeworICAgIGlmICghYXJncy52
YWx1ZXMpCisgICAgICAgIHJldHVybiAiTm8gdmFsdWVzLiI7CisgICAgaWYgKCFhcmdzLm90aGVy
Q29sb3JMYWJlbCkKKyAgICAgICAgcmV0dXJuICJObyBvdGhlckNvbG9yTGFiZWwuIjsKKyAgICBy
ZXR1cm4gbnVsbDsKK30KKwordmFyIEFjdGlvbnMgPSB7CisgICAgQ2hvb3NlT3RoZXJDb2xvcjog
LTIsCisgICAgQ2FuY2VsOiAtMSwKKyAgICBTZXRWYWx1ZTogMAorfTsKKworLyoqCisgKiBAcGFy
YW0ge3N0cmluZ30gdmFsdWUKKyAqLworZnVuY3Rpb24gc3VibWl0VmFsdWUodmFsdWUpIHsKKyAg
ICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoQWN0aW9u
cy5TZXRWYWx1ZSwgdmFsdWUpOworfQorCitmdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7CisgICAg
d2luZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMu
Q2FuY2VsLCAiIik7Cit9CisKK2Z1bmN0aW9uIGNob29zZU90aGVyQ29sb3IoKSB7CisgICAgd2lu
ZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2hv
b3NlT3RoZXJDb2xvciwgIiIpOworfQorCitmdW5jdGlvbiBDb2xvclBpY2tlcihlbGVtZW50LCBj
b25maWcpIHsKKyAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKKyAgICB0aGlzLl9jb25maWcg
PSBjb25maWc7CisgICAgaWYgKHRoaXMuX2NvbmZpZy52YWx1ZXMubGVuZ3RoID09PSAwKQorICAg
ICAgICB0aGlzLl9jb25maWcudmFsdWVzID0gRGVmYXVsdENvbG9yUGFsZXR0ZTsKKyAgICB0aGlz
Ll9jb250YWluZXIgPSBudWxsOworICAgIHRoaXMuX2xheW91dCgpOworICAgIGRvY3VtZW50LmJv
ZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxlS2V5RG93biwg
dGhpcykpOworICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwg
YmluZCh0aGlzLl9oYW5kbGVNb3VzZU1vdmUsIHRoaXMpKTsKKyAgICB0aGlzLl9lbGVtZW50LmFk
ZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VEb3duLCB0
aGlzKSk7Cit9CisKK3ZhciBTd2F0Y2hCb3JkZXJCb3hXaWR0aCA9IDI0OyAvLyBrZWVwIGluIHN5
bmMgd2l0aCBDU1MKK3ZhciBTd2F0Y2hCb3JkZXJCb3hIZWlnaHQgPSAyNDsgLy8ga2VlcCBpbiBz
eW5jIHdpdGggQ1NTCit2YXIgU3dhdGNoZXNQZXJSb3cgPSA1OwordmFyIFN3YXRjaGVzTWF4Um93
ID0gNDsKKworQ29sb3JQaWNrZXIucHJvdG90eXBlLl9sYXlvdXQgPSBmdW5jdGlvbigpIHsKKyAg
ICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgImNvbG9yLXN3YXRjaC1jb250
YWluZXIiKTsKKyAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRo
aXMuX2hhbmRsZVN3YXRjaENsaWNrLCB0aGlzKSwgZmFsc2UpOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdGhpcy5fY29uZmlnLnZhbHVlcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgc3dh
dGNoID0gY3JlYXRlRWxlbWVudCgiYnV0dG9uIiwgImNvbG9yLXN3YXRjaCIpOworICAgICAgICBz
d2F0Y2guZGF0YXNldC5pbmRleCA9IGk7CisgICAgICAgIHN3YXRjaC5kYXRhc2V0LnZhbHVlID0g
dGhpcy5fY29uZmlnLnZhbHVlc1tpXTsKKyAgICAgICAgc3dhdGNoLnRpdGxlID0gdGhpcy5fY29u
ZmlnLnZhbHVlc1tpXTsKKyAgICAgICAgc3dhdGNoLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRo
aXMuX2NvbmZpZy52YWx1ZXNbaV07CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzd2F0
Y2gpOworICAgIH0KKyAgICB2YXIgY29udGFpbmVyV2lkdGggPSBTd2F0Y2hCb3JkZXJCb3hXaWR0
aCAqIFN3YXRjaGVzUGVyUm93OworICAgIGlmICh0aGlzLl9jb25maWcudmFsdWVzLmxlbmd0aCA+
IFN3YXRjaGVzUGVyUm93ICogU3dhdGNoZXNNYXhSb3cpCisgICAgICAgIGNvbnRhaW5lcldpZHRo
ICs9IGdldFNjcm9sbGJhcldpZHRoKCk7CisgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gY29u
dGFpbmVyV2lkdGggKyAicHgiOworICAgIGNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSAoU3dh
dGNoQm9yZGVyQm94SGVpZ2h0ICogU3dhdGNoZXNNYXhSb3cpICsgInB4IjsKKyAgICB0aGlzLl9l
bGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CisgICAgdmFyIG90aGVyQnV0dG9uID0gY3Jl
YXRlRWxlbWVudCgiYnV0dG9uIiwgIm90aGVyLWNvbG9yIiwgdGhpcy5fY29uZmlnLm90aGVyQ29s
b3JMYWJlbCk7CisgICAgb3RoZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBjaG9v
c2VPdGhlckNvbG9yLCBmYWxzZSk7CisgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChvdGhl
ckJ1dHRvbik7CisgICAgdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyOworICAgIHRoaXMuX290
aGVyQnV0dG9uID0gb3RoZXJCdXR0b247CisgICAgdmFyIGVsZW1lbnRXaWR0aCA9IHRoaXMuX2Vs
ZW1lbnQub2Zmc2V0V2lkdGg7CisgICAgdmFyIGVsZW1lbnRIZWlnaHQgPSB0aGlzLl9lbGVtZW50
Lm9mZnNldEhlaWdodDsKKyAgICByZXNpemVXaW5kb3coZWxlbWVudFdpZHRoLCBlbGVtZW50SGVp
Z2h0KTsKK307CisKK0NvbG9yUGlja2VyLnByb3RvdHlwZS5zZWxlY3RDb2xvckF0SW5kZXggPSBm
dW5jdGlvbihpbmRleCkgeworICAgIGluZGV4ID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5fY29u
dGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgaW5kZXgpLCAwKTsKKyAgICB0aGlzLl9jb250
YWluZXIuY2hpbGROb2Rlc1tpbmRleF0uZm9jdXMoKTsKK307CisKK0NvbG9yUGlja2VyLnByb3Rv
dHlwZS5faGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQu
dGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiY29sb3Itc3dhdGNoIikpCisgICAgICAgIGV2ZW50
LnRhcmdldC5mb2N1cygpOworfTsKKworQ29sb3JQaWNrZXIucHJvdG90eXBlLl9oYW5kbGVNb3Vz
ZURvd24gPSBmdW5jdGlvbihldmVudCkgeworICAgIC8vIFByZXZlbnQgYmx1ci4KKyAgICBpZiAo
ZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiY29sb3Itc3dhdGNoIikpCisgICAgICAg
IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7Cit9OworCitDb2xvclBpY2tlci5wcm90b3R5cGUuX2hh
bmRsZUtleURvd24gPSBmdW5jdGlvbihldmVudCkgeworICAgIHZhciBrZXkgPSBldmVudC5rZXlJ
ZGVudGlmaWVyOworICAgIGlmIChrZXkgPT09ICJVKzAwMUIiKSAvLyBFU0MKKyAgICAgICAgaGFu
ZGxlQ2FuY2VsKCk7CisgICAgZWxzZSBpZiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8
fCBrZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSB7CisgICAgICAgIHZhciBzZWxlY3Rl
ZEVsZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OworICAgICAgICB2YXIgaW5kZXggPSAw
OworICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygib3RoZXIt
Y29sb3IiKSkgeworICAgICAgICAgICAgaWYgKGtleSAhPSAiUmlnaHQiICYmIGtleSAhPSAiVXAi
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fY29u
dGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rl
ZEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1zd2F0Y2giKSkgeworICAgICAgICAg
ICAgaW5kZXggPSBwYXJzZUludChzZWxlY3RlZEVsZW1lbnQuZGF0YXNldC5pbmRleCwgMTApOwor
ICAgICAgICAgICAgc3dpdGNoIChrZXkpIHsKKyAgICAgICAgICAgIGNhc2UgIkxlZnQiOgorICAg
ICAgICAgICAgICAgIGluZGV4LS07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlICJSaWdodCI6CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIlVwIjoKKyAgICAgICAgICAgICAgICBpbmRleCAt
PSBTd2F0Y2hlc1BlclJvdzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgIkRvd24iOgorICAgICAgICAgICAgICAgIGluZGV4ICs9IFN3YXRjaGVzUGVyUm93OworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4
ID4gdGhpcy5fY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAg
ICAgIHRoaXMuX290aGVyQnV0dG9uLmZvY3VzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHRoaXMuc2VsZWN0Q29sb3JBdEluZGV4
KGluZGV4KTsKKyAgICB9CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK307CisKK0NvbG9y
UGlja2VyLnByb3RvdHlwZS5faGFuZGxlU3dhdGNoQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgewor
ICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1zd2F0Y2giKSkK
KyAgICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQudmFsdWUpOworfTsKKwor
aWYgKHdpbmRvdy5kaWFsb2dBcmd1bWVudHMpIHsKKyAgICBpbml0aWFsaXplKGRpYWxvZ0FyZ3Vt
ZW50cyk7Cit9IGVsc2UgeworICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwg
aGFuZGxlTWVzc2FnZSwgZmFsc2UpOworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGhhbmRsZUFyZ3Vt
ZW50c1RpbWVvdXQsIDEwMDApOworfQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9n
CmluZGV4IDFkMmZmM2Y5ZWYwYTk2ZjRjOTU1MDMzMzczOTMwMzBiODU3NGQ5ODMuLjgyNzEyNzIz
NGRhMDlkMGZlNGE3NWRkMjI3MTkwZDMwN2I5MDQ0OTUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZwor
KysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMi0wOC0xMyAgS2Vpc2hpIEhhdHRv
cmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KKworICAgICAgICBNb3ZlIHBhZ2UgcG9wdXAgcmVzb3Vy
Y2VzIHRvIHNlcGFyYXRlIGRpcmVjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTM5MzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE1hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1s
OgorICAgICAgICAqIE1hbnVhbFRlc3RzL2Zvcm1zL2NvbG9yLXN1Z2dlc3Rpb24tcGlja2VyLmh0
bWw6CisKIDIwMTItMDgtMTEgIFJhcGhhZWwgS3VibyBkYSBDb3N0YSAgPHJha3Vjb0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtDTWFrZV0gUmV3cml0ZSBGaW5kTGliU291cDIuY21ha2UuCmRpZmYg
LS1naXQgYS9NYW51YWxUZXN0cy9mb3Jtcy9jYWxlbmRhci1waWNrZXIuaHRtbCBiL01hbnVhbFRl
c3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCmluZGV4IGEzOGRjMzAwMGJiYzU2NTg1NGE5
ODQzNTk0MDk1YTkwNmUzYjFmZGQuLjM2OWY5ODE0Y2E0MDQyYTE4Y2VmM2JhYzViMzI1YWVhOGQ0
MmFkZGQgMTAwNjQ0Ci0tLSBhL01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1s
CisrKyBiL01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCkBAIC03NSwxMCAr
NzUsMTAgQEAgZnVuY3Rpb24gb3BlbkNhbGVuZGFyKGFyZ3MpIHsKICAgICBkb2MuZG9jdW1lbnRF
bGVtZW50LmlubmVySFRNTCA9ICc8aGVhZD48L2hlYWQ+PGJvZHk+PGRpdiBpZD1tYWluPkxvYWRp
bmcuLi48L2Rpdj48L2JvZHk+JzsKICAgICB2YXIgbGluayA9IGRvYy5jcmVhdGVFbGVtZW50KCds
aW5rJyk7CiAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7Ci0gICAgbGluay5ocmVmID0gJy4u
Ly4uL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3M/JyArIChuZXcg
RGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgbGluay5ocmVmID0gJy4uLy4uL1NvdXJjZS9XZWJDb3Jl
L1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyLmNzcz8nICsgKG5ldyBEYXRlKCkp
LmdldFRpbWUoKTsKICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTsKICAgICB2YXIgc2Ny
aXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwotICAgIHNjcmlwdC5zcmMgPSAnLi4v
Li4vU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzPycgKyAobmV3IERh
dGUoKSkuZ2V0VGltZSgpOworICAgIHNjcmlwdC5zcmMgPSAnLi4vLi4vU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuanM/JyArIChuZXcgRGF0ZSgpKS5n
ZXRUaW1lKCk7CiAgICAgZG9jLmJvZHkuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKIAogICAgIHZhciBw
YWdlUG9wdXBDb250cm9sbGVyID0gewpkaWZmIC0tZ2l0IGEvTWFudWFsVGVzdHMvZm9ybXMvY29s
b3Itc3VnZ2VzdGlvbi1waWNrZXIuaHRtbCBiL01hbnVhbFRlc3RzL2Zvcm1zL2NvbG9yLXN1Z2dl
c3Rpb24tcGlja2VyLmh0bWwKaW5kZXggNmEyNWM3NGYzNDRmYjU4MTBhNGZiYzI5NTg2MDBiMWVk
YTFiZjY0Ny4uOGY0NjBmM2I0ODNiNTdhNjliNDYzZDE4OTA3N2Q3MDYzYTU4YTFhMSAxMDA2NDQK
LS0tIGEvTWFudWFsVGVzdHMvZm9ybXMvY29sb3Itc3VnZ2VzdGlvbi1waWNrZXIuaHRtbAorKysg
Yi9NYW51YWxUZXN0cy9mb3Jtcy9jb2xvci1zdWdnZXN0aW9uLXBpY2tlci5odG1sCkBAIC0zOCwx
MCArMzgsMTAgQEAgZnVuY3Rpb24gb3BlbkNvbG9yUGlja2VyKGFyZ3MpIHsKICAgICBkb2MuZG9j
dW1lbnRFbGVtZW50LmlubmVySFRNTCA9ICc8aGVhZD48L2hlYWQ+PGJvZHk+PGRpdiBpZD1tYWlu
PkxvYWRpbmcuLi48L2Rpdj48L2JvZHk+JzsKICAgICB2YXIgbGluayA9IGRvYy5jcmVhdGVFbGVt
ZW50KCdsaW5rJyk7CiAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7Ci0gICAgbGluay5ocmVm
ID0gJy4uLy4uL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIu
Y3NzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgIGxpbmsuaHJlZiA9ICcuLi8uLi9T
b3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIu
Y3NzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwogICAgIGRvYy5oZWFkLmFwcGVuZENoaWxk
KGxpbmspOwogICAgIHZhciBzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7Ci0g
ICAgc2NyaXB0LnNyYyA9ICcuLi8uLi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY29sb3JTdWdn
ZXN0aW9uUGlja2VyLmpzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgIHNjcmlwdC5z
cmMgPSAnLi4vLi4vU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdn
ZXN0aW9uUGlja2VyLmpzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOwogICAgIGRvYy5ib2R5
LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAKICAgICB2YXIgcGFnZVBvcHVwQ29udHJvbGxlciA9IHsK
</data>
<flag name="commit-queue"
          id="168275"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>158239</attachid>
            <date>2012-08-14 00:09:39 -0700</date>
            <delta_ts>2012-08-14 01:48:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-93932-20120814160906.patch</filename>
            <type>text/plain</type>
            <size>129930</size>
            <attacher name="Keishi Hattori">keishi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI1NTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDg4YWU4YTNjNDUyYTYw
N2ZiMzBmMGNiMmUyNWVjOWJiNTA4OWI3Ny4uOTczNTNkYjk5MTAxMDQ3Y2ZlMjZiMGE4NzY3NDU1
NjMzNzM1YzJjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTA4LTE0ICBLZWlz
aGkgSGF0dG9yaSAgPGtlaXNoaUB3ZWJraXQub3JnPgorCisgICAgICAgIE1vdmUgcGFnZSBwb3B1
cCByZXNvdXJjZXMgdG8gc2VwYXJhdGUgZGlyZWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzkzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEtlZXBpbmcgdGhlIHJlc291cmNlcyBvcmdhbml6ZWQu
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLgorCisgICAgICAgICogUmVzb3VyY2VzL3BhZ2Vwb3B1
cHMvY2FsZW5kYXJQaWNrZXIuY3NzOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvUmVzb3Vy
Y2VzL2NhbGVuZGFyUGlja2VyLmNzcy4KKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBvcHVwcy9j
YWxlbmRhclBpY2tlci5qczogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9j
YWxlbmRhclBpY2tlci5qcy4KKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRh
clBpY2tlck1hYy5jc3M6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2Fs
ZW5kYXJQaWNrZXJNYWMuY3NzLgorICAgICAgICAqIFJlc291cmNlcy9wYWdlcG9wdXBzL2NvbG9y
U3VnZ2VzdGlvblBpY2tlci5jc3M6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9SZXNvdXJj
ZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmNzcy4KKyAgICAgICAgKiBSZXNvdXJjZXMvcGFnZXBv
cHVwcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuanM6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9SZXNvdXJjZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzLgorICAgICAgICAqIFdlYkNvcmUu
Z3lwL1dlYkNvcmUuZ3lwOgorCiAyMDEyLTA4LTEzICBLZWlzaGkgSGF0dG9yaSAgPGtlaXNoaUB3
ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBmYWRlIGluIHRyYW5zaXRpb24gZnJvbSBjYWxl
bmRhciBwaWNrZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRh
clBpY2tlci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuY3Nz
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MThhMjVhZDE4MjMxYjQ5NzA4NGUzYWJm
MTk0NjUzYWUxMDA2M2RhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlci5jc3MKKysrIC9k
ZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLWJvZHkgewotICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6
IG5vbmU7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7Ci0gICAgZm9udDogLXdlYmtpdC1z
bWFsbC1jb250cm9sOwotICAgIG1hcmdpbjogMDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotfQot
Ci0ubm8tZm9jdXMtcmluZyA6Zm9jdXMgewotICAgIG91dGxpbmU6IG5vbmU7Ci19Ci0KLSNtYWlu
IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBib3JkZXI6IHNvbGlkIDFweCAj
ODg5OWFhOwotICAgIGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMnB4IHdoaXRlLAotICAgICAg
ICBpbnNldCAtMnB4IC0ycHggMXB4IHJnYmEoMCwwLDAsMC4xKTsKLSAgICBwYWRkaW5nOiA2cHg7
Ci0gICAgd2hpdGVzcGFjZTogbm93cmFwOwotICAgIC8qIHdpZHRoIGlzIHJlc2V0IGluIHRoZSBK
UyBjb2RlLiAqLwotICAgIHdpZHRoOiA1MDBweDsKLX0KLQotLnllYXItbW9udGgtYXJlYSB7Ci19
Ci0KLS55ZWFyLW1vbnRoLXVwcGVyIHsKLSAgICAvKiBkaXNwbGF5Oi13ZWJraXQtYm94OyBpcyBh
ZGRlZCBpbiB0aGUgSlMgY29kZS4gKi8KLX0KLQotLnllYXItc2VsZWN0b3IgewotICAgIHRleHQt
YWxpZ246IHJpZ2h0OwotICAgIHdpZHRoOiA2ZW07Ci19Ci0KLS5tb250aC1zZWxlY3Rvci1ib3gg
ewotICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0g
ICAgLXdlYmtpdC1ib3gtZmxleDogMjsKLX0KLQotLm1vbnRoLXNlbGVjdG9yIHsKLSAgICBiYWNr
Z3JvdW5kLWNvbG9yOiB3aGl0ZTsKLSAgICBjdXJzb3I6IHBvaW50ZXI7Ci0gICAgZGlzcGxheTog
aW5saW5lLWJsb2NrOwotICAgIHBhZGRpbmc6IDNweCA2cHggM3B4IDZweDsKLX0KLS5tb250aC1z
ZWxlY3RvcjphZnRlciB7Ci0gICAgY29udGVudDogIiDilrwiOwotICAgIGZvbnQtc2l6ZTogc21h
bGxlcjsKLX0KLQotLm1vbnRoLXNlbGVjdG9yLXBvcHVwIHsKLSAgICAtd2Via2l0LWJveC1zaXpp
bmc6IGNvbnRlbnQtYm94OwotICAgIC13ZWJraXQtYm94LXNoYWRvdzoKLSAgICAgICAgMCAwIDAg
MXB4IHJnYmEoMCwwLDAsMC4xKSwKLSAgICAgICAgMCA1cHggMXB4IDFweCByZ2JhKDAsMCwwLDAu
MSksCi0gICAgICAgIDAgNXB4IDJweCAxcHggcmdiYSgwLDAsMCwwLjEpLAotICAgICAgICAwIDVw
eCAxMnB4IDFweCByZ2JhKDAsMCwwLDAuNSk7Ci0gICAgYmFja2dyb3VuZDogI2ZmZjsKLSAgICBk
aXNwbGF5OiBub25lOwotICAgIG1heC1oZWlnaHQ6IDEwLjhlbTsKLSAgICBvdmVyZmxvdy14OiBo
aWRkZW47Ci0gICAgb3ZlcmZsb3cteTogYXV0bzsKLSAgICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0g
ICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKLX0KLQotLm1vbnRoLXNlbGVjdG9yLXBvcHVwLWNvbnRl
bnRzIHsKLSAgICBkaXNwbGF5OiB0YWJsZTsKLX0KLQotLm1vbnRoLXNlbGVjdG9yLXBvcHVwLWVu
dHJ5IHsKLSAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDVweDsKLSAgICAtd2Via2l0LXBhZGRp
bmctZW5kOiA1cHg7Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotICAgIGRpc3BsYXk7IHRhYmxlLXJv
dzsKLSAgICBsaW5lLWhlaWdodDogMS4yZW07Ci19Ci0KLS5zZWxlY3RlZC1tb250aC15ZWFyIHsK
LSAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoaWdobGlnaHQ7Ci0gICAgY29sb3I6IGhpZ2hsaWdodHRl
eHQ7Ci0gICAgdGV4dC1zaGFkb3c6IG5vbmU7Ci19Ci0KLUBtZWRpYSAocG9pbnRlcjpjb2Fyc2Up
IHsKLQotICAgIC5tb250aC1zZWxlY3Rvci1wb3B1cCB7Ci0gICAgICAgIG1heC1oZWlnaHQ6IDE1
MHB4OwotICAgIH0KLQotICAgIC5tb250aC1zZWxlY3Rvci1wb3B1cC1lbnRyeSB7Ci0gICAgICAg
IGxpbmUtaGVpZ2h0OiAzMHB4OwotICAgIH0KLX0KLQotLm1vbnRoLXNlbGVjdG9yLXdhbGwgewot
ICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgaGVpZ2h0OiAxMDAlOwotICAgIGxlZnQ6IDBweDsKLSAg
ICBwb3NpdGlvbjogYWJzb2x1dGU7Ci0gICAgdG9wOiAwcHg7Ci0gICAgd2lkdGg6IDEwMCU7Ci19
Ci0KLS55ZWFyLW1vbnRoLWJ1dHRvbi1sZWZ0IHsKLSAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
Ci19Ci0KLS55ZWFyLW1vbnRoLWJ1dHRvbi1yaWdodCB7Ci0gICAgZGlzcGxheTogaW5saW5lLWJs
b2NrOwotfQotCi0uZGF5cy1hcmVhLWNvbnRhaW5lciB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjog
d2hpdGU7Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggYmxhY2s7Ci0gICAgbWFyZ2luLWJvdHRvbTog
NHB4OwotICAgIG1hcmdpbi10b3A6IDRweDsKLSAgICBvdmVyZmxvdzogaGlkZGVuOwotfQotCi0u
ZGF5cy1hcmVhIHsgLyogPHRhYmxlPiAqLwotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwot
ICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7Ci0gICAgYm9yZGVyLXNwYWNpbmc6IDBweDsK
LSAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7Ci0gICAgLyogdGFibGUtbGF5b3V0OmZp
eGVkIGFuZCB3aWR0aDoxMDAlIGFyZSBhZGRlZCBpbiB0aGUgSlMgY29kZS4gKi8KLX0KLQotLmRh
eS1sYWJlbCB7IC8qIDx0aD4gKi8KLSAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7
Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogI2UzZTlmZjsKLSAgICBib3JkZXItbGVmdC1jb2xvcjog
I2YwZjRmZjsKLSAgICBib3JkZXItdG9wLWNvbG9yOiAjZjBmNGZmOwotICAgIGJvcmRlcjogc29s
aWQgMXB4ICNkMGQ0ZjA7Ci0gICAgY29sb3I6ICMyMGM7Ci0gICAgZm9udC13ZWlnaHQ6IG5vcm1h
bDsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci19Ci0KLS5kYXkgeyAvKiA8dGQ+ICovCi0gICAg
cGFkZGluZzogMXB4OwotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLSAgICBiYWNrZ3JvdW5kLWNv
bG9yOiB3aGl0ZTsKLSAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0ZTsKLSAgICAtd2Via2l0LWJv
eC1zaXppbmc6IGJvcmRlci1ib3g7Ci19Ci0KLUBtZWRpYSAocG9pbnRlcjpjb2Fyc2UpIHsKLSAg
ICAuZGF5IHsKLSAgICAgICAgbWluLXdpZHRoOiAyOHB4OwotICAgICAgICBsaW5lLWhlaWdodDog
MjhweDsKLSAgICB9Ci19Ci0KLS5hdmFpbGFibGUgewotICAgIGN1cnNvcjogZGVmYXVsdDsKLSAg
ICBmb250LXdlaWdodDogNzAwOwotICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwotICAgIGJv
cmRlcjogMXB4IHNvbGlkIHdoaXRlOwotICAgIGJvcmRlci1yYWRpdXM6IDVweDsKLSAgICAtd2Vi
a2l0LXRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7Ci19Ci0KLS5ub3QtdGhpcy1tb250aCB7Ci0g
ICAgY29sb3I6IGdyYXl0ZXh0OwotICAgIGZvbnQtd2VpZ2h0OiA0MDA7Ci0gICAgdGV4dC1zaGFk
b3c6IG5vbmU7Ci19Ci0KLS5hdmFpbGFibGUuZGF5LXNlbGVjdGVkIHsKLSAgICBiYWNrZ3JvdW5k
LWNvbG9yOiBoaWdobGlnaHQ7Ci0gICAgY29sb3I6IGhpZ2hsaWdodHRleHQ7Ci0gICAgdGV4dC1z
aGFkb3c6IG5vbmU7Ci19Ci0KLS51bmF2YWlsYWJsZSB7Ci0gICAgY3Vyc29yOiBkZWZhdWx0Owot
ICAgIGNvbG9yOiBncmF5dGV4dDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwotICAgIGJv
cmRlcjogMXB4IHNvbGlkICNlZWU7Ci0gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBib3JkZXItY29s
b3IgMC4ycyBlYXNlOwotfQotCi0udW5hdmFpbGFibGUuZGF5LXNlbGVjdGVkIHsKLSAgICBib3Jk
ZXI6IDFweCBzb2xpZCBoaWdobGlnaHQ7Ci19Ci0KLS5jYW5jZWwtYnV0dG9uIHsKLSAgICBmbG9h
dDogcmlnaHQ7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5k
YXJQaWNrZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY2FsZW5kYXJQaWNrZXIuanMK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZWQ3MjFkNjAyMGE4ODA2YWFmNDA4MmNj
ZTQ1MzA1ODMyMTZjZWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyLmpzCisrKyAvZGV2
L251bGwKQEAgLTEsMTIzOSArMCwwIEBACi0idXNlIHN0cmljdCI7Ci0vKgotICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4K
LSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotLy8gRklYTUU6Ci0vLyAgLSBU
b3VjaCBldmVudAotCi0vKioKLSAqIENTUyBjbGFzcyBuYW1lcy4KLSAqCi0gKiBAZW51bSB7c3Ry
aW5nfQotICovCi12YXIgQ2xhc3NOYW1lcyA9IHsKLSAgICBBdmFpbGFibGU6ICJhdmFpbGFibGUi
LAotICAgIENhbmNlbEJ1dHRvbjogImNhbmNlbC1idXR0b24iLAotICAgIENsZWFyQnV0dG9uOiAi
Y2xlYXItYnV0dG9uIiwKLSAgICBEYXk6ICJkYXkiLAotICAgIERheUxhYmVsOiAiZGF5LWxhYmVs
IiwKLSAgICBEYXlMYWJlbENvbnRhaW5lcjogImRheS1sYWJlbC1jb250YWluZXIiLAotICAgIERh
eXNBcmVhOiAiZGF5cy1hcmVhIiwKLSAgICBEYXlzQXJlYUNvbnRhaW5lcjogImRheXMtYXJlYS1j
b250YWluZXIiLAotICAgIE1vbnRoU2VsZWN0b3I6ICJtb250aC1zZWxlY3RvciIsCi0gICAgTW9u
dGhTZWxlY3RvckJveDogIm1vbnRoLXNlbGVjdG9yLWJveCIsCi0gICAgTW9udGhTZWxlY3RvclBv
cHVwOiAibW9udGgtc2VsZWN0b3ItcG9wdXAiLAotICAgIE1vbnRoU2VsZWN0b3JQb3B1cENvbnRl
bnRzOiAibW9udGgtc2VsZWN0b3ItcG9wdXAtY29udGVudHMiLAotICAgIE1vbnRoU2VsZWN0b3JQ
b3B1cEVudHJ5OiAibW9udGgtc2VsZWN0b3ItcG9wdXAtZW50cnkiLAotICAgIE1vbnRoU2VsZWN0
b3JQb3B1cFNpemVyOiAibW9udGgtc2VsZWN0b3ItcG9wdXAtc2l6ZXIiLAotICAgIE1vbnRoU2Vs
ZWN0b3JXYWxsOiAibW9udGgtc2VsZWN0b3Itd2FsbCIsCi0gICAgTm9Gb2N1c1Jpbmc6ICJuby1m
b2N1cy1yaW5nIiwKLSAgICBOb3RUaGlzTW9udGg6ICJub3QtdGhpcy1tb250aCIsCi0gICAgU2Vs
ZWN0ZWQ6ICJkYXktc2VsZWN0ZWQiLAotICAgIFNlbGVjdGVkTW9udGhZZWFyOiAic2VsZWN0ZWQt
bW9udGgteWVhciIsCi0gICAgVG9kYXlCdXR0b246ICJ0b2RheS1idXR0b24iLAotICAgIFRvZGF5
Q2xlYXJBcmVhOiAidG9kYXktY2xlYXItYXJlYSIsCi0gICAgVW5hdmFpbGFibGU6ICJ1bmF2YWls
YWJsZSIsCi0gICAgV2Vla0NvbnRhaW5lcjogIndlZWstY29udGFpbmVyIiwKLSAgICBZZWFyTW9u
dGhBcmVhOiAieWVhci1tb250aC1hcmVhIiwKLSAgICBZZWFyTW9udGhCdXR0b246ICJ5ZWFyLW1v
bnRoLWJ1dHRvbiIsCi0gICAgWWVhck1vbnRoQnV0dG9uTGVmdDogInllYXItbW9udGgtYnV0dG9u
LWxlZnQiLAotICAgIFllYXJNb250aEJ1dHRvblJpZ2h0OiAieWVhci1tb250aC1idXR0b24tcmln
aHQiLAotICAgIFllYXJNb250aFVwcGVyOiAieWVhci1tb250aC11cHBlciIKLX07Ci0KLS8qKgot
ICogQHR5cGUge09iamVjdH0KLSAqLwotdmFyIGdsb2JhbCA9IHsKLSAgICBhcmd1bWVudHNSZWNl
aXZlZDogZmFsc2UsCi0gICAgaGFkS2V5RXZlbnQ6IGZhbHNlLAotICAgIHBhcmFtczogbnVsbAot
fTsKLQotLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotLy8gVXRpbGl0eSBmdW5jdGlvbnMKLQotLyoqCi0gKiBAcGFyYW0g
eyFzdHJpbmd9IGlkCi0gKi8KLWZ1bmN0aW9uICQoaWQpIHsKLSAgICByZXR1cm4gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoaWQpOwotfQotCi1mdW5jdGlvbiBiaW5kKGZ1bmMsIGNvbnRleHQpIHsK
LSAgICByZXR1cm4gZnVuY3Rpb24oKSB7Ci0gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRl
eHQsIGFyZ3VtZW50cyk7Ci0gICAgfTsKLX0KLQotLyoqCi0gKiBAcGFyYW0geyFzdHJpbmd9IHRh
Z05hbWUKLSAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X2NsYXNzCi0gKiBAcGFyYW0ge3N0cmluZz19
IG9wdF90ZXh0Ci0gKiBAcmV0dXJuIHshRWxlbWVudH0KLSAqLwotZnVuY3Rpb24gY3JlYXRlRWxl
bWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7Ci0gICAgdmFyIGVsZW1lbnQgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgIGlmIChvcHRfY2xhc3MpCi0gICAg
ICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG9wdF9jbGFzcyk7Ci0gICAgaWYgKG9w
dF90ZXh0KQotICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKG9wdF90ZXh0KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLS8qKgotICogQHJldHVy
biB7IXN0cmluZ30gbG93ZXJjYXNlIGxvY2FsZSBuYW1lLiBlLmcuICJlbi11cyIKLSAqLwotZnVu
Y3Rpb24gZ2V0TG9jYWxlKCkgewotICAgIHJldHVybiAoZ2xvYmFsLnBhcmFtcy5sb2NhbGUgfHwg
ImVuLXVzIikudG9Mb3dlckNhc2UoKTsKLX0KLQotLyoqCi0gKiBAcmV0dXJuIHshc3RyaW5nfSBs
b3dlcmNhc2UgbGFuZ3VhZ2UgY29kZS4gZS5nLiAiZW4iCi0gKi8KLWZ1bmN0aW9uIGdldExhbmd1
YWdlKCkgewotICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKTsKLSAgICB2YXIgcmVzdWx0ID0g
bG9jYWxlLm1hdGNoKC9eKFthLXpdKykvKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0
dXJuICJlbiI7Ci0gICAgcmV0dXJuIHJlc3VsdFsxXTsKLX0KLQotLyoKLSAqIEBjb25zdAotICog
QHR5cGUge251bWJlcn0KLSAqLwotdmFyIEltcGVyaWFsRXJhTGltaXQgPSAyMDg3OwotCi0vKioK
LSAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgotICogQHBhcmFtIHshbnVtYmVyfSBtb250aAotICog
QHJldHVybiB7IXN0cmluZ30KLSAqLwotZnVuY3Rpb24gZm9ybWF0SmFwYW5lc2VJbXBlcmlhbEVy
YSh5ZWFyLCBtb250aCkgewotICAgIC8vIFdlIGRvbid0IHNob3cgYW4gaW1wZXJpYWwgZXJhIGlm
IGl0IGlzIGdyZWF0ZXIgdGhhbiA5OSBiZWNhc2Ugb2Ygc3BhY2UKLSAgICAvLyBsaW1pdGF0aW9u
LgotICAgIGlmICh5ZWFyID4gSW1wZXJpYWxFcmFMaW1pdCkKLSAgICAgICAgcmV0dXJuICIiOwot
ICAgIGlmICh5ZWFyID4gMTk4OSkKLSAgICAgICAgcmV0dXJuICIo5bmz5oiQIiArICh5ZWFyIC0g
MTk4OCkgKyAi5bm0KSI7Ci0gICAgaWYgKHllYXIgPT0gMTk4OSkKLSAgICAgICAgcmV0dXJuICIo
5bmz5oiQ5YWD5bm0KSI7Ci0gICAgaWYgKHllYXIgPj0gMTkyNykKLSAgICAgICAgcmV0dXJuICIo
5pit5ZKMIiArICh5ZWFyIC0gMTkyNSkgKyAi5bm0KSI7Ci0gICAgaWYgKHllYXIgPiAxOTEyKQot
ICAgICAgICByZXR1cm4gIijlpKfmraMiICsgKHllYXIgLSAxOTExKSArICLlubQpIjsKLSAgICBp
ZiAoeWVhciA9PSAxOTEyICYmIG1vbnRoID49IDcpCi0gICAgICAgIHJldHVybiAiKOWkp+ato+WF
g+W5tCkiOwotICAgIGlmICh5ZWFyID4gMTg2OCkKLSAgICAgICAgcmV0dXJuICIo5piO5rK7IiAr
ICh5ZWFyIC0gMTg2NykgKyAi5bm0KSI7Ci0gICAgaWYgKHllYXIgPT0gMTg2OCkKLSAgICAgICAg
cmV0dXJuICIo5piO5rK75YWD5bm0KSI7Ci0gICAgcmV0dXJuICIiOwotfQotCi0vKioKLSAqIEBw
YXJhbSB7IW51bWJlcn0geWVhcgotICogQHBhcmFtIHshbnVtYmVyfSBtb250aAotICogQHJldHVy
biB7IXN0cmluZ30KLSAqLwotZnVuY3Rpb24gZm9ybWF0WWVhck1vbnRoKHllYXIsIG1vbnRoKSB7
Ci0gICAgLy8gRklYTUU6IE5lZWQgbG9jYWxpemVkIG51bWJlcj8KLSAgICB2YXIgeWVhclN0cmlu
ZyA9IFN0cmluZyh5ZWFyKTsKLSAgICB2YXIgbW9udGhTdHJpbmcgPSBnbG9iYWwucGFyYW1zLm1v
bnRoTGFiZWxzW21vbnRoXTsKLSAgICBzd2l0Y2ggKGdldExhbmd1YWdlKCkpIHsKLSAgICBjYXNl
ICJldSI6Ci0gICAgY2FzZSAiZmlsIjoKLSAgICBjYXNlICJsdCI6Ci0gICAgY2FzZSAibWwiOgot
ICAgIGNhc2UgIm10IjoKLSAgICBjYXNlICJ0bCI6Ci0gICAgY2FzZSAidXIiOgotICAgICAgICBy
ZXR1cm4geWVhclN0cmluZyArICIgIiArIG1vbnRoU3RyaW5nOwotICAgIGNhc2UgImh1IjoKLSAg
ICAgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLiAiICsgbW9udGhTdHJpbmc7Ci0gICAgY2FzZSAi
amEiOgotICAgICAgICByZXR1cm4geWVhclN0cmluZyArICLlubQiICsgZm9ybWF0SmFwYW5lc2VJ
bXBlcmlhbEVyYSh5ZWFyLCBtb250aCkgKyAiICIgKyBtb250aFN0cmluZzsKLSAgICBjYXNlICJ6
aCI6Ci0gICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuW5tCIgKyBtb250aFN0cmluZzsKLSAg
ICBjYXNlICJrbyI6Ci0gICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuuFhCAiICsgbW9udGhT
dHJpbmc7Ci0gICAgY2FzZSAibHYiOgotICAgICAgICByZXR1cm4geWVhclN0cmluZyArICIuIGcu
ICIgKyBtb250aFN0cmluZzsKLSAgICBjYXNlICJwdCI6Ci0gICAgICAgIHJldHVybiBtb250aFN0
cmluZyArICIgZGUgIiArIHllYXJTdHJpbmc7Ci0gICAgY2FzZSAic3IiOgotICAgICAgICByZXR1
cm4gbW9udGhTdHJpbmcgKyAiLiAiICsgeWVhclN0cmluZzsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gbW9udGhTdHJpbmcgKyAiICIgKyB5ZWFyU3RyaW5nOwotICAgIH0KLX0KLQotLyoq
Ci0gKiBAcGFyYW0ge3N0cmluZz19IG9wdF9jdXJyZW50Ci0gKiBAcmV0dXJuIHshRGF0ZX0KLSAq
LwotZnVuY3Rpb24gcGFyc2VEYXRlU3RyaW5nKG9wdF9jdXJyZW50KSB7Ci0gICAgaWYgKG9wdF9j
dXJyZW50KSB7Ci0gICAgICAgIHZhciByZXN1bHQgPSBvcHRfY3VycmVudC5tYXRjaCgvKFxkKykt
KFxkKyktKFxkKykvKTsKLSAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiBu
ZXcgRGF0ZShEYXRlLlVUQyhOdW1iZXIocmVzdWx0WzFdKSwgTnVtYmVyKHJlc3VsdFsyXSkgLSAx
LCBOdW1iZXIocmVzdWx0WzNdKSkpOwotICAgIH0KLSAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsK
LSAgICAvLyBDcmVhdGUgVVRDIGRhdGUgd2l0aCBzYW1lIG51bWJlcnMgYXMgbG9jYWwgZGF0ZS4K
LSAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRN
b250aCgpLCBub3cuZ2V0RGF0ZSgpKSk7Ci19Ci0KLS8qKgotICogQHBhcmFtIHshbnVtYmVyfSB5
ZWFyCi0gKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCi0gKiBAcGFyYW0geyFudW1iZXJ9IGRheQot
ICogQHJldHVybiB7IXN0cmluZ30KLSAqLwotZnVuY3Rpb24gc2VyaWFsaXplRGF0ZSh5ZWFyLCBt
b250aCwgZGF5KSB7Ci0gICAgdmFyIHllYXJTdHJpbmcgPSBTdHJpbmcoeWVhcik7Ci0gICAgaWYg
KHllYXJTdHJpbmcubGVuZ3RoIDwgNCkKLSAgICAgICAgeWVhclN0cmluZyA9ICgiMDAwIiArIHll
YXJTdHJpbmcpLnN1YnN0cigtNCwgNCk7Ci0gICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLSIgKyAo
IjAiICsgKG1vbnRoICsgMSkpLnN1YnN0cigtMiwgMikgKyAiLSIgKyAoIjAiICsgZGF5KS5zdWJz
dHIoLTIsIDIpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7IW51bWJlcn0gd2lkdGgKLSAqIEBwYXJh
bSB7IW51bWJlcn0gaGVpZ2h0Ci0gKi8KLWZ1bmN0aW9uIHJlc2l6ZVdpbmRvdyh3aWR0aCwgaGVp
Z2h0KSB7Ci0gICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpIHsKLSAgICAgICAgd2luZG93LmZy
YW1lRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKLSAgICAgICAgd2luZG93LmZy
YW1lRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHdpbmRvdy5yZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKLSAgICB9Ci19Ci0KLS8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLS8vIEluaXRpYWxpemF0aW9uCi0KLS8qKgotICogQHBhcmFtIHtFdmVudH0gZXZlbnQK
LSAqLwotZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkgewotICAgIGlmIChnbG9iYWwuYXJn
dW1lbnRzUmVjZWl2ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICBnbG9iYWwuYXJndW1lbnRzUmVj
ZWl2ZWQgPSB0cnVlOwotICAgIGluaXRpYWxpemUoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7Ci19
Ci0KLWZ1bmN0aW9uIGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQoKSB7Ci0gICAgaWYgKGdsb2JhbC5h
cmd1bWVudHNSZWNlaXZlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhciBhcmdzID0gewotICAg
ICAgICBtb250aExhYmVscyA6IFsibTEiLCAibTIiLCAibTMiLCAibTQiLCAibTUiLCAibTYiLAot
ICAgICAgICAgICAgICAgICAgICAgICAibTciLCAibTgiLCAibTkiLCAibTEwIiwgIm0xMSIsICJt
MTIiXSwKLSAgICAgICAgZGF5TGFiZWxzIDogWyJkMSIsICJkMiIsICJkMyIsICJkNCIsICJkNSIs
ICJkNiIsICJkNyJdLAotICAgICAgICB0b2RheUxhYmVsIDogIlRvZGF5IiwKLSAgICAgICAgY2xl
YXJMYWJlbCA6ICJDbGVhciIsCi0gICAgICAgIGNhbmNlbExhYmVsIDogIkNhbmNlbCIsCi0gICAg
ICAgIGN1cnJlbnRWYWx1ZSA6ICIiLAotICAgICAgICB3ZWVrU3RhcnREYXkgOiAwLAotICAgICAg
ICBzdGVwIDogMQotICAgIH07Ci0gICAgaW5pdGlhbGl6ZShhcmdzKTsKLX0KLQotLyoqCi0gKiBA
cGFyYW0geyFPYmplY3R9IGFyZ3MKLSAqIEByZXR1cm4gez9zdHJpbmd9IEFuIGVycm9yIG1lc3Nh
Z2UsIG9yIG51bGwgaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBlcnJvcnMuCi0gKi8KLWZ1bmN0aW9u
IHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpIHsKLSAgICBpZiAoIWFyZ3MubW9udGhMYWJlbHMpCi0g
ICAgICAgIHJldHVybiAiTm8gbW9udGhMYWJlbHMuIjsKLSAgICBpZiAoYXJncy5tb250aExhYmVs
cy5sZW5ndGggIT0gMTIpCi0gICAgICAgIHJldHVybiAibW9udGhMYWJlbHMgaXMgbm90IGFuIGFy
cmF5IHdpdGggMTIgZWxlbWVudHMuIjsKLSAgICBpZiAoIWFyZ3MuZGF5TGFiZWxzKQotICAgICAg
ICByZXR1cm4gIk5vIGRheUxhYmVscy4iOwotICAgIGlmIChhcmdzLmRheUxhYmVscy5sZW5ndGgg
IT0gNykKLSAgICAgICAgcmV0dXJuICJkYXlMYWJlbHMgaXMgbm90IGFuIGFycmF5IHdpdGggNyBl
bGVtZW50cy4iOwotICAgIGlmICghYXJncy5jbGVhckxhYmVsKQotICAgICAgICByZXR1cm4gIk5v
IGNsZWFyTGFiZWwuIjsKLSAgICBpZiAoIWFyZ3MudG9kYXlMYWJlbCkKLSAgICAgICAgcmV0dXJu
ICJObyB0b2RheUxhYmVsLiI7Ci0gICAgaWYgKGFyZ3Mud2Vla1N0YXJ0RGF5KSB7Ci0gICAgICAg
IGlmIChhcmdzLndlZWtTdGFydERheSA8IDAgfHwgYXJncy53ZWVrU3RhcnREYXkgPiA2KQotICAg
ICAgICAgICAgcmV0dXJuICJJbnZhbGlkIHdlZWtTdGFydERheTogIiArIGFyZ3Mud2Vla1N0YXJ0
RGF5OwotICAgIH0KLSAgICByZXR1cm4gbnVsbDsKLX0KLQotLyoqCi0gKiBAcGFyYW0geyFPYmpl
Y3R9IGFyZ3MKLSAqLwotZnVuY3Rpb24gaW5pdGlhbGl6ZShhcmdzKSB7Ci0gICAgdmFyIG1haW4g
PSAkKCJtYWluIik7Ci0gICAgbWFpbi5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuTm9Gb2N1c1Jp
bmcpOwotCi0gICAgdmFyIGVycm9yU3RyaW5nID0gdmFsaWRhdGVBcmd1bWVudHMoYXJncyk7Ci0g
ICAgaWYgKGVycm9yU3RyaW5nKSB7Ci0gICAgICAgIG1haW4udGV4dENvbnRlbnQgPSAiSW50ZXJu
YWwgZXJyb3I6ICIgKyBlcnJvclN0cmluZzsKLSAgICAgICAgcmVzaXplV2luZG93KG1haW4ub2Zm
c2V0V2lkdGgsIG1haW4ub2Zmc2V0SGVpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBnbG9i
YWwucGFyYW1zID0gYXJnczsKLSAgICAgICAgY2hlY2tMaW1pdHMoKTsKLSAgICAgICAgbGF5b3V0
KCk7Ci0KLSAgICAgICAgdmFyIGluaXRpYWxEYXRlID0gcGFyc2VEYXRlU3RyaW5nKGFyZ3MuY3Vy
cmVudFZhbHVlKTsKLSAgICAgICAgaWYgKGluaXRpYWxEYXRlIDwgZ2xvYmFsLm1pbmltdW1EYXRl
KQotICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWluaW11bURhdGU7Ci0gICAgICAg
IGVsc2UgaWYgKGluaXRpYWxEYXRlID4gZ2xvYmFsLm1heGltdW1EYXRlKQotICAgICAgICAgICAg
aW5pdGlhbERhdGUgPSBnbG9iYWwubWF4aW11bURhdGU7Ci0gICAgICAgIGdsb2JhbC5kYXlzVGFi
bGUuc2VsZWN0RGF0ZShpbml0aWFsRGF0ZSk7Ci0KLSAgICAgICAgc2V0VGltZW91dChmaXhXaW5k
b3dTaXplLCAwKTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIGZpeFdpbmRvd1NpemUoKSB7Ci0gICAg
dmFyIHllYXJNb250aFJpZ2h0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05h
bWUoQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25SaWdodClbMF07Ci0gICAgdmFyIGRheXNBcmVh
RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5EYXlz
QXJlYSlbMF07Ci0gICAgdmFyIGhlYWRlcnMgPSBkYXlzQXJlYUVsZW1lbnQuZ2V0RWxlbWVudHNC
eUNsYXNzTmFtZShDbGFzc05hbWVzLkRheUxhYmVsKTsKLSAgICB2YXIgbWF4Q2VsbFdpZHRoID0g
MDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kpIHsKLSAgICAg
ICAgaWYgKG1heENlbGxXaWR0aCA8IGhlYWRlcnNbaV0ub2Zmc2V0V2lkdGgpCi0gICAgICAgICAg
ICBtYXhDZWxsV2lkdGggPSBoZWFkZXJzW2ldLm9mZnNldFdpZHRoOwotICAgIH0KLSAgICB2YXIg
RGF5c0FyZWFDb250YWluZXJCb3JkZXIgPSAxOwotICAgIHZhciBtYWluID0gJCgibWFpbiIpOwot
ICAgIHZhciB5ZWFyTW9udGhFbmQ7Ci0gICAgdmFyIGRheXNBcmVhRW5kOwotICAgIGlmIChnbG9i
YWwucGFyYW1zLmlzUlRMKSB7Ci0gICAgICAgIHZhciBzdGFydE9mZnNldCA9IG1haW4ub2Zmc2V0
TGVmdCArIG1haW4ub2Zmc2V0V2lkdGg7Ci0gICAgICAgIHllYXJNb250aEVuZCA9IHN0YXJ0T2Zm
c2V0IC0geWVhck1vbnRoUmlnaHRFbGVtZW50Lm9mZnNldExlZnQ7Ci0gICAgICAgIGRheXNBcmVh
RW5kID0gc3RhcnRPZmZzZXQgLSAoZGF5c0FyZWFFbGVtZW50Lm9mZnNldExlZnQgKyBkYXlzQXJl
YUVsZW1lbnQub2Zmc2V0V2lkdGgpICsgbWF4Q2VsbFdpZHRoICogNyArIERheXNBcmVhQ29udGFp
bmVyQm9yZGVyOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHllYXJNb250aEVuZCA9IHllYXJNb250
aFJpZ2h0RWxlbWVudC5vZmZzZXRMZWZ0ICsgeWVhck1vbnRoUmlnaHRFbGVtZW50Lm9mZnNldFdp
ZHRoOwotICAgICAgICBkYXlzQXJlYUVuZCA9IGRheXNBcmVhRWxlbWVudC5vZmZzZXRMZWZ0ICsg
bWF4Q2VsbFdpZHRoICogNyArIERheXNBcmVhQ29udGFpbmVyQm9yZGVyOwotICAgIH0KLQotICAg
IHZhciBtYXhFbmQgPSBNYXRoLm1heCh5ZWFyTW9udGhFbmQsIGRheXNBcmVhRW5kKTsKLSAgICB2
YXIgTWFpblBhZGRpbmcgPSA2OwotICAgIHZhciBNYWluQm9yZGVyID0gMTsKLSAgICB2YXIgZGVz
aXJlZEJvZHlXaWR0aCA9IG1heEVuZCArIE1haW5QYWRkaW5nICsgTWFpbkJvcmRlcjsKLQotICAg
IHZhciBtYWluSGVpZ2h0ID0gbWFpbi5vZmZzZXRIZWlnaHQ7Ci0gICAgbWFpbi5zdHlsZS53aWR0
aCA9ICJhdXRvIjsKLSAgICBkYXlzQXJlYUVsZW1lbnQuc3R5bGUud2lkdGggPSAiMTAwJSI7Ci0g
ICAgZGF5c0FyZWFFbGVtZW50LnN0eWxlLnRhYmxlTGF5b3V0ID0gImZpeGVkIjsKLSAgICBkb2N1
bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpWzBd
LnN0eWxlLmRpc3BsYXkgPSAiLXdlYmtpdC1ib3giOwotICAgIGRvY3VtZW50LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5Nb250aFNlbGVjdG9yQm94KVswXS5zdHlsZS5kaXNwbGF5
ID0gImJsb2NrIjsKLSAgICByZXNpemVXaW5kb3coZGVzaXJlZEJvZHlXaWR0aCwgbWFpbkhlaWdo
dCk7Ci19Ci0KLWZ1bmN0aW9uIGNoZWNrTGltaXRzKCkgewotICAgIC8vIEhhcmQgbGltaXRzIG9m
IHR5cGU9ZGF0ZS4gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMuaC4KLSAgICBn
bG9iYWwubWluaW11bURhdGUgPSBuZXcgRGF0ZSgtNjIxMzU1OTY4MDAwMDAuMCk7Ci0gICAgZ2xv
YmFsLm1heGltdW1EYXRlID0gbmV3IERhdGUoODY0MDAwMDAwMDAwMDAwMC4wKTsKLSAgICAvLyBT
ZWUgV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwLgotICAgIGdsb2JhbC5zdGVwID0gODY0
MDAwMDA7Ci0KLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5taW4pIHsKLSAgICAgICAgLy8gV2UgYXNz
dW1lIHBhcmFtcy5taW4gaXMgYSB2YWxpZCBkYXRlLgotICAgICAgICBnbG9iYWwubWluaW11bURh
dGUgPSBwYXJzZURhdGVTdHJpbmcoZ2xvYmFsLnBhcmFtcy5taW4pOwotICAgIH0KLSAgICBpZiAo
Z2xvYmFsLnBhcmFtcy5tYXgpIHsKLSAgICAgICAgLy8gV2UgYXNzdW1lIHBhcmFtcy5tYXggaXMg
YSB2YWxpZCBkYXRlLgotICAgICAgICBnbG9iYWwubWF4aW11bURhdGUgPSBwYXJzZURhdGVTdHJp
bmcoZ2xvYmFsLnBhcmFtcy5tYXgpOwotICAgIH0KLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5zdGVw
KQotICAgICAgICBnbG9iYWwuc3RlcCAqPSBnbG9iYWwucGFyYW1zLnN0ZXA7Ci19Ci0KLWZ1bmN0
aW9uIGxheW91dCgpIHsKLSAgICBpZiAoZ2xvYmFsLnBhcmFtcy5pc1JUTCkKLSAgICAgICAgZG9j
dW1lbnQuYm9keS5kaXIgPSAicnRsIjsKLSAgICBlbHNlCi0gICAgICAgIGRvY3VtZW50LmJvZHku
ZGlyID0gImx0ciI7Ci0gICAgdmFyIG1haW4gPSAkKCJtYWluIik7Ci0gICAgdmFyIHBhcmFtcyA9
IGdsb2JhbC5wYXJhbXM7Ci0gICAgbWFpbi5yZW1vdmVDaGlsZChtYWluLmZpcnN0Q2hpbGQpOwot
ICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGhhbmRsZUdsb2Jh
bEtleSwgZmFsc2UpOwotCi0gICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIgPSBuZXcgWWVh
ck1vbnRoQ29udHJvbGxlcigpOwotICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLmF0dGFj
aFRvKG1haW4pOwotICAgIGdsb2JhbC5kYXlzVGFibGUgPSBuZXcgRGF5c1RhYmxlKCk7Ci0gICAg
Z2xvYmFsLmRheXNUYWJsZS5hdHRhY2hUbyhtYWluKTsKLSAgICBsYXlvdXRCdXR0b25zKG1haW4p
OwotfQotCi0vKioKLSAqIEBwYXJhbSB7RWxlbWVudH0gbWFpbgotICovCi1mdW5jdGlvbiBsYXlv
dXRCdXR0b25zKG1haW4pIHsKLSAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2
IiwgQ2xhc3NOYW1lcy5Ub2RheUNsZWFyQXJlYSk7Ci0gICAgZ2xvYmFsLnRvZGF5ID0gY3JlYXRl
RWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlRvZGF5QnV0dG9uKTsKLSAgICBnbG9iYWwudG9k
YXkudHlwZSA9ICJidXR0b24iOwotICAgIGdsb2JhbC50b2RheS52YWx1ZSA9IGdsb2JhbC5wYXJh
bXMudG9kYXlMYWJlbDsKLSAgICBnbG9iYWwudG9kYXkuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2si
LCBoYW5kbGVUb2RheSwgZmFsc2UpOwotICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChnbG9iYWwu
dG9kYXkpOwotICAgIGdsb2JhbC5jbGVhciA9IG51bGw7Ci0gICAgaWYgKCFnbG9iYWwucGFyYW1z
LnJlcXVpcmVkKSB7Ci0gICAgICAgIGdsb2JhbC5jbGVhciA9IGNyZWF0ZUVsZW1lbnQoImlucHV0
IiwgQ2xhc3NOYW1lcy5DbGVhckJ1dHRvbik7Ci0gICAgICAgIGdsb2JhbC5jbGVhci50eXBlID0g
ImJ1dHRvbiI7Ci0gICAgICAgIGdsb2JhbC5jbGVhci52YWx1ZSA9IGdsb2JhbC5wYXJhbXMuY2xl
YXJMYWJlbDsKLSAgICAgICAgZ2xvYmFsLmNsZWFyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwg
aGFuZGxlQ2xlYXIsIGZhbHNlKTsKLSAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGdsb2Jh
bC5jbGVhcik7Ci0gICAgfQotICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLQotICAg
IGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbCA9IGdsb2JhbC5jbGVhciB8fCBnbG9iYWwudG9k
YXk7Ci19Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyoqCi0gKiBAY29uc3RydWN0b3IKLSAqLwotZnVuY3Rp
b24gWWVhck1vbnRoQ29udHJvbGxlcigpIHsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7IW51bWJl
cn0KLSAgICAgKi8KLSAgICB0aGlzLl9jdXJyZW50WWVhciA9IC0xOwotICAgIC8qKgotICAgICAq
IEB0eXBlIHshbnVtYmVyfQotICAgICAqLwotICAgIHRoaXMuX2N1cnJlbnRNb250aCA9IC0xOwot
fQotCi0vKioKLSAqIEBwYXJhbSB7IUVsZW1lbnR9IG1haW4KLSAqLwotWWVhck1vbnRoQ29udHJv
bGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihtYWluKSB7Ci0gICAgdmFyIG91dGVy
Q29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhBcmVh
KTsKLQotICAgIHZhciBpbm5lckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNz
TmFtZXMuWWVhck1vbnRoVXBwZXIpOwotICAgIG91dGVyQ29udGFpbmVyLmFwcGVuZENoaWxkKGlu
bmVyQ29udGFpbmVyKTsKLQotICAgIHRoaXMuX2F0dGFjaExlZnRCdXR0b25zVG8oaW5uZXJDb250
YWluZXIpOwotCi0gICAgdmFyIGJveCA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMu
TW9udGhTZWxlY3RvckJveCk7Ci0gICAgaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoYm94KTsK
LSAgICAvLyBXZSBjYW4ndCB1c2UgPHNlbGVjdD4gcG9wdXAgaW4gUGFnZVBvcHVwLgotICAgIHRo
aXMuX21vbnRoUG9wdXAgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2Vs
ZWN0b3JQb3B1cCk7Ci0gICAgdGhpcy5fbW9udGhQb3B1cC5hZGRFdmVudExpc3RlbmVyKCJjbGlj
ayIsIGJpbmQodGhpcy5faGFuZGxlWWVhck1vbnRoQ2hhbmdlLCB0aGlzKSwgZmFsc2UpOwotICAg
IHRoaXMuX21vbnRoUG9wdXAuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhpcy5f
aGFuZGxlTW9udGhQb3B1cEtleSwgdGhpcyksIGZhbHNlKTsKLSAgICB0aGlzLl9tb250aFBvcHVw
LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VNb3Zl
LCB0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlID0g
dHJ1ZTsKLSAgICB0aGlzLl9tb250aFBvcHVwLnRhYkluZGV4ID0gMDsKLSAgICB0aGlzLl9tb250
aFBvcHVwQ29udGVudHMgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2Vs
ZWN0b3JQb3B1cENvbnRlbnRzKTsKLSAgICB0aGlzLl9tb250aFBvcHVwLmFwcGVuZENoaWxkKHRo
aXMuX21vbnRoUG9wdXBDb250ZW50cyk7Ci0gICAgLy8gU2l6ZXIgdXNlZCB0byBkZXRlcm1pbmUg
dGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCBpbiB0aGUgcG9wdXAgbWVudS4KLSAgICB2YXIgc2l6
ZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JQb3B1cFNp
emVyKTsKLSAgICB0aGlzLl9tb250aFBvcHVwLmFwcGVuZENoaWxkKHNpemVyKTsKLSAgICBib3gu
YXBwZW5kQ2hpbGQodGhpcy5fbW9udGhQb3B1cCk7Ci0gICAgdGhpcy5fbW9udGggPSBjcmVhdGVF
bGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3IpOwotICAgIHRoaXMuX21vbnRo
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9zaG93UG9wdXAsIHRoaXMpLCBm
YWxzZSk7Ci0gICAgYm94LmFwcGVuZENoaWxkKHRoaXMuX21vbnRoKTsKLQotICAgIHRoaXMuX2F0
dGFjaFJpZ2h0QnV0dG9uc1RvKGlubmVyQ29udGFpbmVyKTsKLSAgICBtYWluLmFwcGVuZENoaWxk
KG91dGVyQ29udGFpbmVyKTsKLQotICAgIHRoaXMuX3dhbGwgPSBjcmVhdGVFbGVtZW50KCJkaXYi
LCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JXYWxsKTsKLSAgICB0aGlzLl93YWxsLmFkZEV2ZW50
TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9jbG9zZVBvcHVwLCB0aGlzKSwgZmFsc2UpOwot
ICAgIG1haW4uYXBwZW5kQ2hpbGQodGhpcy5fd2FsbCk7Ci0KLSAgICB2YXIgbWF4aW11bVllYXIg
PSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKTsKLSAgICB2YXIgbWF4V2lkdGgg
PSAwOwotICAgIGZvciAodmFyIG0gPSAwOyBtIDwgMTI7ICsrbSkgewotICAgICAgICB0aGlzLl9t
b250aC50ZXh0Q29udGVudCA9IGZvcm1hdFllYXJNb250aChtYXhpbXVtWWVhciwgbSk7Ci0gICAg
ICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRo
KTsKLSAgICB9Ci0gICAgaWYgKGdldExhbmd1YWdlKCkgPT0gImphIiAmJiBJbXBlcmlhbEVyYUxp
bWl0IDwgbWF4aW11bVllYXIpIHsKLSAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCAxMjsgKytt
KSB7Ci0gICAgICAgICAgICB0aGlzLl9tb250aC50ZXh0Q29udGVudCA9IGZvcm1hdFllYXJNb250
aChJbXBlcmlhbEVyYUxpbWl0LCBtKTsKLSAgICAgICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgo
bWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICB0aGlzLl9tb250aC5zdHlsZS5taW5XaWR0aCA9IG1heFdpZHRoICsgJ3B4JzsKLQotICAgIGds
b2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wgPSB0aGlzLl9sZWZ0MjsgLy8gRklYTUU6IFNob3Vs
ZCBpdCBiZSB0aGlzLm1vbnRoPwotfTsKLQotWWVhck1vbnRoQ29udHJvbGxlci5hZGRUZW5ZZWFy
c0J1dHRvbnMgPSBmYWxzZTsKLQotLyoqCi0gKiBAcGFyYW0geyFFbGVtZW50fSBwYXJlbnQKLSAq
LwotWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2F0dGFjaExlZnRCdXR0b25zVG8gPSBm
dW5jdGlvbihwYXJlbnQpIHsKLSAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2
IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25MZWZ0KTsKLSAgICBwYXJlbnQuYXBwZW5kQ2hp
bGQoY29udGFpbmVyKTsKLQotICAgIGlmIChZZWFyTW9udGhDb250cm9sbGVyLmFkZFRlblllYXJz
QnV0dG9ucykgewotICAgICAgICB0aGlzLl9sZWZ0MyA9IGNyZWF0ZUVsZW1lbnQoImlucHV0Iiwg
Q2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOwotICAgICAgICB0aGlzLl9sZWZ0My50eXBlID0g
ImJ1dHRvbiI7Ci0gICAgICAgIHRoaXMuX2xlZnQzLnZhbHVlID0gIjw8PCI7Ci0gICAgICAgIHRo
aXMuX2xlZnQzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9oYW5kbGVCdXR0
b25DbGljaywgdGhpcyksIGZhbHNlKTsKLSAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRo
aXMuX2xlZnQzKTsKLSAgICB9Ci0KLSAgICB0aGlzLl9sZWZ0MiA9IGNyZWF0ZUVsZW1lbnQoImlu
cHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOwotICAgIHRoaXMuX2xlZnQyLnR5cGUg
PSAiYnV0dG9uIjsKLSAgICB0aGlzLl9sZWZ0Mi52YWx1ZSA9ICI8PCI7Ci0gICAgdGhpcy5fbGVm
dDIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNr
LCB0aGlzKSwgZmFsc2UpOwotICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9sZWZ0Mik7
Ci0KLSAgICB0aGlzLl9sZWZ0MSA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5Z
ZWFyTW9udGhCdXR0b24pOwotICAgIHRoaXMuX2xlZnQxLnR5cGUgPSAiYnV0dG9uIjsKLSAgICB0
aGlzLl9sZWZ0MS52YWx1ZSA9ICI8IjsKLSAgICB0aGlzLl9sZWZ0MS5hZGRFdmVudExpc3RlbmVy
KCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7Ci0g
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQxKTsKLX07Ci0KLS8qKgotICogQHBh
cmFtIHshRWxlbWVudH0gcGFyZW50Ci0gKi8KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBl
Ll9hdHRhY2hSaWdodEJ1dHRvbnNUbyA9IGZ1bmN0aW9uKHBhcmVudCkgewotICAgIHZhciBjb250
YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvblJp
Z2h0KTsKLSAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLSAgICB0aGlzLl9yaWdo
dDEgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNzTmFtZXMuWWVhck1vbnRoQnV0dG9uKTsK
LSAgICB0aGlzLl9yaWdodDEudHlwZSA9ICJidXR0b24iOwotICAgIHRoaXMuX3JpZ2h0MS52YWx1
ZSA9ICI+IjsKLSAgICB0aGlzLl9yaWdodDEuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5k
KHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOwotICAgIGNvbnRhaW5lci5h
cHBlbmRDaGlsZCh0aGlzLl9yaWdodDEpOwotCi0gICAgdGhpcy5fcmlnaHQyID0gY3JlYXRlRWxl
bWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7Ci0gICAgdGhpcy5fcmln
aHQyLnR5cGUgPSAiYnV0dG9uIjsKLSAgICB0aGlzLl9yaWdodDIudmFsdWUgPSAiPj4iOwotICAg
IHRoaXMuX3JpZ2h0Mi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxl
QnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7Ci0gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRo
aXMuX3JpZ2h0Mik7Ci0KLSAgICBpZiAoWWVhck1vbnRoQ29udHJvbGxlci5hZGRUZW5ZZWFyc0J1
dHRvbnMpIHsKLSAgICAgICAgdGhpcy5fcmlnaHQzID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBD
bGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7Ci0gICAgICAgIHRoaXMuX3JpZ2h0My50eXBlID0g
ImJ1dHRvbiI7Ci0gICAgICAgIHRoaXMuX3JpZ2h0My52YWx1ZSA9ICI+Pj4iOwotICAgICAgICB0
aGlzLl9yaWdodDMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1
dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOwotICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQo
dGhpcy5fcmlnaHQzKTsKLSAgICB9Ci19OwotCi0vKioKLSAqIEByZXR1cm4geyFudW1iZXJ9Ci0g
Ki8KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnllYXIgPSBmdW5jdGlvbigpIHsKLSAg
ICByZXR1cm4gdGhpcy5fY3VycmVudFllYXI7Ci19OwotCi0vKioKLSAqIEByZXR1cm4geyFudW1i
ZXJ9Ci0gKi8KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLm1vbnRoID0gZnVuY3Rpb24o
KSB7Ci0gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRNb250aDsKLX07Ci0KLS8qKgotICogQHBhcmFt
IHshbnVtYmVyfSB5ZWFyCi0gKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCi0gKi8KLVllYXJNb250
aENvbnRyb2xsZXIucHJvdG90eXBlLnNldFllYXJNb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRo
KSB7Ci0gICAgdGhpcy5fY3VycmVudFllYXIgPSB5ZWFyOwotICAgIHRoaXMuX2N1cnJlbnRNb250
aCA9IG1vbnRoOwotICAgIHRoaXMuX3JlZHJhdygpOwotfTsKLQotWWVhck1vbnRoQ29udHJvbGxl
ci5wcm90b3R5cGUuX3JlZHJhdyA9IGZ1bmN0aW9uKCkgewotICAgIHZhciBtaW4gPSBnbG9iYWwu
bWluaW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1pbmltdW1EYXRlLmdl
dFVUQ01vbnRoKCk7Ci0gICAgdmFyIG1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRVVENGdWxs
WWVhcigpICogMTIgKyBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsKLSAgICB2YXIg
Y3VycmVudCA9IHRoaXMuX2N1cnJlbnRZZWFyICogMTIgKyB0aGlzLl9jdXJyZW50TW9udGg7Ci0g
ICAgaWYgKHRoaXMuX2xlZnQzKQotICAgICAgICB0aGlzLl9sZWZ0My5kaXNhYmxlZCA9IGN1cnJl
bnQgLSAxMyA8IG1pbjsKLSAgICB0aGlzLl9sZWZ0Mi5kaXNhYmxlZCA9IGN1cnJlbnQgLSAyIDwg
bWluOwotICAgIHRoaXMuX2xlZnQxLmRpc2FibGVkID0gY3VycmVudCAtIDEgPCBtaW47Ci0gICAg
dGhpcy5fcmlnaHQxLmRpc2FibGVkID0gY3VycmVudCArIDEgPiBtYXg7Ci0gICAgdGhpcy5fcmln
aHQyLmRpc2FibGVkID0gY3VycmVudCArIDIgPiBtYXg7Ci0gICAgaWYgKHRoaXMuX3JpZ2h0MykK
LSAgICAgICAgdGhpcy5fcmlnaHQzLmRpc2FibGVkID0gY3VycmVudCArIDEzID4gbWF4OwotICAg
IHRoaXMuX21vbnRoLmlubmVyVGV4dCA9IGZvcm1hdFllYXJNb250aCh0aGlzLl9jdXJyZW50WWVh
ciwgdGhpcy5fY3VycmVudE1vbnRoKTsKLSAgICB3aGlsZSAodGhpcy5fbW9udGhQb3B1cENvbnRl
bnRzLmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgdGhpcy5fbW9udGhQb3B1cENvbnRlbnRzLnJl
bW92ZUNoaWxkKHRoaXMuX21vbnRoUG9wdXBDb250ZW50cy5maXJzdENoaWxkKTsKLQotICAgIGZv
ciAodmFyIG0gPSBjdXJyZW50IC0gNjsgbSA8PSBjdXJyZW50ICsgNjsgbSsrKSB7Ci0gICAgICAg
IGlmIChtIDwgbWluIHx8IG0gPiBtYXgpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
dmFyIG9wdGlvbiA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuTW9udGhTZWxlY3Rv
clBvcHVwRW50cnksIGZvcm1hdFllYXJNb250aChNYXRoLmZsb29yKG0gLyAxMiksIG0gJSAxMikp
OwotICAgICAgICBvcHRpb24uZGF0YXNldC52YWx1ZSA9IFN0cmluZyhNYXRoLmZsb29yKG0gLyAx
MikpICsgIi0iICsgU3RyaW5nKG0gJSAxMik7Ci0gICAgICAgIHRoaXMuX21vbnRoUG9wdXBDb250
ZW50cy5hcHBlbmRDaGlsZChvcHRpb24pOwotICAgICAgICBpZiAobSA9PSBjdXJyZW50KQotICAg
ICAgICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZE1vbnRoWWVh
cik7Ci0gICAgfQotfTsKLQotWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX3Nob3dQb3B1
cCA9IGZ1bmN0aW9uKCkgewotICAgIHRoaXMuX21vbnRoUG9wdXAuc3R5bGUuZGlzcGxheSA9ICJi
bG9jayI7Ci0gICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS56SW5kZXggPSAiMTAwMCI7IC8vIExh
cmdlciB0aGFuIHRoZSBkYXlzIGFyZWEuCi0gICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS5sZWZ0
ID0gdGhpcy5fbW9udGgub2Zmc2V0TGVmdCArICh0aGlzLl9tb250aC5vZmZzZXRXaWR0aCAtIHRo
aXMuX21vbnRoUG9wdXAub2Zmc2V0V2lkdGgpIC8gMiArICJweCI7Ci0gICAgdGhpcy5fbW9udGhQ
b3B1cC5zdHlsZS50b3AgPSB0aGlzLl9tb250aC5vZmZzZXRUb3AgKyB0aGlzLl9tb250aC5vZmZz
ZXRIZWlnaHQgKyAicHgiOwotCi0gICAgdGhpcy5fd2FsbC5zdHlsZS5kaXNwbGF5ID0gImJsb2Nr
IjsKLSAgICB0aGlzLl93YWxsLnN0eWxlLnpJbmRleCA9ICI5OTkiOyAvLyBUaGlzIHNob3VsZCBi
ZSBzbWFsbGVyIHRoYW4gdGhlIHotaW5kZXggb2YgbW9udGhQb3B1cC4KLQotICAgIHZhciBwb3B1
cEhlaWdodCA9IHRoaXMuX21vbnRoUG9wdXAuY2xpZW50SGVpZ2h0OwotICAgIHZhciBmdWxsSGVp
Z2h0ID0gdGhpcy5fbW9udGhQb3B1cENvbnRlbnRzLmNsaWVudEhlaWdodDsKLSAgICBpZiAoZnVs
bEhlaWdodCA+IHBvcHVwSGVpZ2h0KSB7Ci0gICAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuX2dl
dFNlbGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgdmFyIGJv
dHRvbSA9IHNlbGVjdGVkLm9mZnNldFRvcCArIHNlbGVjdGVkLmNsaWVudEhlaWdodDsKLSAgICAg
ICAgICAgaWYgKGJvdHRvbSA+IHBvcHVwSGVpZ2h0KQotICAgICAgICAgICAgICAgdGhpcy5fbW9u
dGhQb3B1cC5zY3JvbGxUb3AgPSBib3R0b20gLSBwb3B1cEhlaWdodDsKLSAgICAgICAgfQotICAg
ICAgICB2YXIgc2l6ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuIiArIENsYXNzTmFtZXMu
TW9udGhTZWxlY3RvclBvcHVwU2l6ZXIpOwotICAgICAgICB2YXIgc2Nyb2xsV2lkdGggPSB0aGlz
Ll9tb250aFBvcHVwQ29udGVudHMuY2xpZW50V2lkdGggLSBzaXplci5jbGllbnRXaWR0aDsKLSAg
ICAgICAgaWYgKHNjcm9sbFdpZHRoID4gMCkKLSAgICAgICAgICAgIHRoaXMuX21vbnRoUG9wdXAu
c3R5bGUud2Via2l0UGFkZGluZ0VuZCA9IHNjcm9sbFdpZHRoICsgJ3B4JzsKLSAgICB9Ci0gICAg
dGhpcy5fbW9udGhQb3B1cC5mb2N1cygpOwotfTsKLQotWWVhck1vbnRoQ29udHJvbGxlci5wcm90
b3R5cGUuX2Nsb3NlUG9wdXAgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLl9tb250aFBvcHVwLnN0
eWxlLmRpc3BsYXkgPSAibm9uZSI7Ci0gICAgdGhpcy5fd2FsbC5zdHlsZS5kaXNwbGF5ID0gIm5v
bmUiOwotICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuIiArIENs
YXNzTmFtZXMuRGF5c0FyZWFDb250YWluZXIpOwotICAgIGNvbnRhaW5lci5mb2N1cygpOwotfTsK
LQotLyoqCi0gKiBAcmV0dXJuIHtFbGVtZW50fSBTZWxlY3RlZCBlbGVtZW50IGluIHRoZSBtb250
aC15ZWFyIHBvcHVwLgotICovCi1ZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5fZ2V0U2Vs
ZWN0aW9uID0gZnVuY3Rpb24oKQotewotICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9y
KCIuIiArIENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOwotfQotCi0vKioKLSAqIEBwYXJh
bSB7RXZlbnR9IGV2ZW50Ci0gKi8KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5k
bGVNb3VzZU1vdmUgPSBmdW5jdGlvbihldmVudCkKLXsKLSAgICBpZiAoIXRoaXMuX3VwZGF0ZVNl
bGVjdGlvbk9uTW91c2VNb3ZlKSB7Ci0gICAgICAgIC8vIFNlbGVjdGlvbiB1cGRhdGUgdHVybmVk
IG9mZiB3aGlsZSBuYXZpZ2F0aW5nIHdpdGgga2V5Ym9hcmQgdG8gcHJldmVudCBhIG1vdXNlCi0g
ICAgICAgIC8vIG1vdmUgdHJpZ2dlZCBkdXJpbmcgYSBzY3JvbGwgZnJvbSByZXNldHRpbmcgdGhl
IHNlbGVjdGlvbi4gQXV0b21hdGljYWxseQotICAgICAgICAvLyByZWFybSBjb250cm9sIHRvIGVu
YWJsZSBtb3VzZS1iYXNlZCBzZWxlY3Rpb24uCi0gICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlv
bk9uTW91c2VNb3ZlID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YXIgdGFyZ2V0ID0g
ZXZlbnQudGFyZ2V0OwotICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0U2VsZWN0aW9u
KCk7Ci0gICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9IHNlbGVjdGlvbiAmJiB0YXJnZXQu
Y2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMuTW9udGhTZWxlY3RvclBvcHVwRW50cnkpKSB7
Ci0gICAgICAgICAgICBpZiAoc2VsZWN0aW9uKQotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5j
bGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOwotICAgICAgICAg
ICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZE1vbnRoWWVhcik7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICov
Ci1ZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlTW9udGhQb3B1cEtleSA9IGZ1
bmN0aW9uKGV2ZW50KQotewotICAgIHZhciBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVyOwotICAg
IGlmIChrZXkgPT0gIkRvd24iKSB7Ci0gICAgICAgIHZhciBzZWxlY3RlZCA9IHRoaXMuX2dldFNl
bGVjdGlvbigpOwotICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKLSAgICAgICAgICAgIHZhciBuZXh0
ID0gc2VsZWN0ZWQubmV4dFNpYmxpbmc7Ci0gICAgICAgICAgICBpZiAobmV4dCkgewotICAgICAg
ICAgICAgICAgIHNlbGVjdGVkLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZE1v
bnRoWWVhcik7Ci0gICAgICAgICAgICAgICAgbmV4dC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMu
U2VsZWN0ZWRNb250aFllYXIpOwotICAgICAgICAgICAgICAgIHZhciBib3R0b20gPSBuZXh0Lm9m
ZnNldFRvcCArIG5leHQuY2xpZW50SGVpZ2h0OwotICAgICAgICAgICAgICAgIGlmIChib3R0b20g
PiB0aGlzLl9tb250aFBvcHVwLnNjcm9sbFRvcCArIHRoaXMuX21vbnRoUG9wdXAuY2xpZW50SGVp
Z2h0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VN
b3ZlID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoUG9wdXAuc2Nyb2xs
VG9wID0gYm90dG9tIC0gdGhpcy5fbW9udGhQb3B1cC5jbGllbnRIZWlnaHQ7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGV2ZW50LnN0b3BQcm9w
YWdhdGlvbigpOwotICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwotICAgIH0gZWxzZSBp
ZiAoa2V5ID09ICJVcCIpIHsKLSAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5fZ2V0U2VsZWN0
aW9uKCk7Ci0gICAgICAgIGlmIChzZWxlY3RlZCkgewotICAgICAgICAgICAgdmFyIHByZXZpb3Vz
ID0gc2VsZWN0ZWQucHJldmlvdXNTaWJsaW5nOwotICAgICAgICAgICAgaWYgKHByZXZpb3VzKSB7
Ci0gICAgICAgICAgICAgICAgc2VsZWN0ZWQuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVzLlNl
bGVjdGVkTW9udGhZZWFyKTsKLSAgICAgICAgICAgICAgICBwcmV2aW91cy5jbGFzc0xpc3QuYWRk
KENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOwotICAgICAgICAgICAgICAgIGlmIChwcmV2
aW91cy5vZmZzZXRUb3AgPCB0aGlzLl9tb250aFBvcHVwLnNjcm9sbFRvcCkgewotICAgICAgICAg
ICAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb25Pbk1vdXNlTW92ZSA9IGZhbHNlOwotICAg
ICAgICAgICAgICAgICAgICB0aGlzLl9tb250aFBvcHVwLnNjcm9sbFRvcCA9IHByZXZpb3VzLm9m
ZnNldFRvcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Ci0gICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7Ci0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDAxQiIpIHsKLSAgICAgICAgdGhpcy5f
Y2xvc2VQb3B1cCgpOwotICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiRW50ZXIiKSB7
Ci0gICAgICAgIHRoaXMuX2hhbmRsZVllYXJNb250aENoYW5nZSgpOwotICAgICAgICBldmVudC5z
dG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9
Ci19Ci0KLVllYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVZZWFyTW9udGhDaGFu
Z2UgPSBmdW5jdGlvbigpIHsKLSAgICB0aGlzLl9jbG9zZVBvcHVwKCk7Ci0gICAgdmFyIHNlbGVj
dGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOwotICAgIGlmICghc2VsZWN0aW9uKQotICAgICAg
ICByZXR1cm47Ci0gICAgdmFyIHZhbHVlID0gc2VsZWN0aW9uLmRhdGFzZXQudmFsdWU7Ci0gICAg
dmFyIHJlc3VsdCAgPSB2YWx1ZS5tYXRjaCgvKFxkKyktKFxkKykvKTsKLSAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuOwotICAgIHZhciBuZXdZZWFyID0gTnVtYmVyKHJlc3VsdFsxXSk7
Ci0gICAgdmFyIG5ld01vbnRoID0gTnVtYmVyKHJlc3VsdFsyXSk7Ci0gICAgZ2xvYmFsLmRheXNU
YWJsZS5uYXZpZ2F0ZVRvTW9udGhBbmRLZWVwU2VsZWN0aW9uUG9zaXRpb24obmV3WWVhciwgbmV3
TW9udGgpOwotfTsKLQotLyoKLSAqIEBjb25zdAotICogQHR5cGUge251bWJlcn0KLSAqLwotWWVh
ck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzID0gLTEyMDsKLS8qCi0gKiBAY29uc3QK
LSAqIEB0eXBlIHtudW1iZXJ9Ci0gKi8KLVllYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNZZWFy
ID0gLTEyOwotLyoKLSAqIEBjb25zdAotICogQHR5cGUge251bWJlcn0KLSAqLwotWWVhck1vbnRo
Q29udHJvbGxlci5QcmV2aW91c01vbnRoID0gLTE7Ci0vKgotICogQGNvbnN0Ci0gKiBAdHlwZSB7
bnVtYmVyfQotICovCi1ZZWFyTW9udGhDb250cm9sbGVyLk5leHRNb250aCA9IDE7Ci0vKgotICog
QGNvbnN0Ci0gKiBAdHlwZSB7bnVtYmVyfQotICovCi1ZZWFyTW9udGhDb250cm9sbGVyLk5leHRZ
ZWFyID0gMTI7Ci0vKgotICogQGNvbnN0Ci0gKiBAdHlwZSB7bnVtYmVyfQotICovCi1ZZWFyTW9u
dGhDb250cm9sbGVyLk5leHRUZW5ZZWFycyA9IDEyMDsKLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50
fSBldmVudAotICovCi1ZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlQnV0dG9u
Q2xpY2sgPSBmdW5jdGlvbihldmVudCkgewotICAgIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5f
bGVmdDMpCi0gICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5Q
cmV2aW91c1RlblllYXJzKTsKLSAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fbGVm
dDIpCi0gICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5QcmV2
aW91c1llYXIpOwotICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9sZWZ0MSkKLSAg
ICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9sbGVyLlByZXZpb3VzTW9u
dGgpOwotICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9yaWdodDEpCi0gICAgICAg
IHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9udGgpCi0gICAg
ZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMuX3JpZ2h0MikKLSAgICAgICAgdGhpcy5tb3Zl
UmVsYXRpdmVseShZZWFyTW9udGhDb250cm9sbGVyLk5leHRZZWFyKTsKLSAgICBlbHNlIGlmIChl
dmVudC50YXJnZXQgPT0gdGhpcy5fcmlnaHQzKQotICAgICAgICB0aGlzLm1vdmVSZWxhdGl2ZWx5
KFllYXJNb250aENvbnRyb2xsZXIuTmV4dFRlblllYXJzKTsKLSAgICBlbHNlCi0gICAgICAgIHJl
dHVybjsKLX07Ci0KLS8qKgotICogQHBhcmFtIHshbnVtYmVyfSBhbW91bnQKLSAqLwotWWVhck1v
bnRoQ29udHJvbGxlci5wcm90b3R5cGUubW92ZVJlbGF0aXZlbHkgPSBmdW5jdGlvbihhbW91bnQp
IHsKLSAgICB2YXIgbWluID0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ0Z1bGxZZWFyKCkgKiAx
MiArIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENNb250aCgpOwotICAgIHZhciBtYXggPSBnbG9i
YWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1heGltdW1EYXRl
LmdldFVUQ01vbnRoKCk7Ci0gICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50WWVhciAqIDEy
ICsgdGhpcy5fY3VycmVudE1vbnRoOwotICAgIHZhciB1cGRhdGVkID0gY3VycmVudDsKLSAgICBp
ZiAoYW1vdW50IDwgMCkKLSAgICAgICAgdXBkYXRlZCA9IGN1cnJlbnQgKyBhbW91bnQgPj0gbWlu
ID8gY3VycmVudCArIGFtb3VudCA6IG1pbjsKLSAgICBlbHNlCi0gICAgICAgIHVwZGF0ZWQgPSBj
dXJyZW50ICsgYW1vdW50IDw9IG1heCA/IGN1cnJlbnQgKyBhbW91bnQgOiBtYXg7Ci0gICAgaWYg
KHVwZGF0ZWQgPT0gY3VycmVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIGdsb2JhbC5kYXlzVGFi
bGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlvblBvc2l0aW9uKE1hdGguZmxvb3IodXBk
YXRlZCAvIDEyKSwgdXBkYXRlZCAlIDEyKTsKLX07Ci0KLS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotLyoqCi0gKiBA
Y29uc3RydWN0b3IKLSAqLwotZnVuY3Rpb24gRGF5c1RhYmxlKCkgewotICAgIC8qKgotICAgICAq
IEB0eXBlIHshbnVtYmVyfQotICAgICAqLwotICAgIHRoaXMuX3ggPSAtMTsKLSAgICAvKioKLSAg
ICAgKiBAdHlwZSB7IW51bWJlcn0KLSAgICAgKi8KLSAgICB0aGlzLl95ID0gLTE7Ci0gICAgLyoq
Ci0gICAgICogQHR5cGUgeyFudW1iZXJ9Ci0gICAgICovCi0gICAgdGhpcy5fY3VycmVudFllYXIg
PSAtMTsKLSAgICAvKioKLSAgICAgKiBAdHlwZSB7IW51bWJlcn0KLSAgICAgKi8KLSAgICB0aGlz
Ll9jdXJyZW50TW9udGggPSAtMTsKLX0KLQotLyoqCi0gKiBAcmV0dXJuIHshYm9vbGVhbn0KLSAq
LwotRGF5c1RhYmxlLnByb3RvdHlwZS5faGFzU2VsZWN0aW9uID0gZnVuY3Rpb24oKSB7Ci0gICAg
cmV0dXJuIHRoaXMuX3ggPj0gMCAmJiB0aGlzLl95ID49IDA7Ci19Ci0KLS8qKgotICogVGhlIG51
bWJlciBvZiB3ZWVrIGxpbmVzIGluIHRoZSBzY3JlZW4uCi0gKiBAY29uc3QKLSAqIEB0eXBlIHtu
dW1iZXJ9Ci0gKi8KLURheXNUYWJsZS5fV2Vla3MgPSA2OwotCi0vKioKLSAqIEBwYXJhbSB7IUVs
ZW1lbnR9IG1haW4KLSAqLwotRGF5c1RhYmxlLnByb3RvdHlwZS5hdHRhY2hUbyA9IGZ1bmN0aW9u
KG1haW4pIHsKLSAgICB0aGlzLl9kYXlzQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgidGFibGUi
LCBDbGFzc05hbWVzLkRheXNBcmVhKTsKLSAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFkZEV2ZW50
TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9oYW5kbGVEYXlDbGljaywgdGhpcyksIGZhbHNl
KTsKLSAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlb3ZlciIs
IGJpbmQodGhpcy5faGFuZGxlTW91c2VPdmVyLCB0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX2Rh
eXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCBiaW5kKHRoaXMuX2hhbmRs
ZU1vdXNlT3V0LCB0aGlzKSwgZmFsc2UpOwotICAgIHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZl
bnRMaXN0ZW5lcigid2Via2l0VHJhbnNpdGlvbkVuZCIsIGJpbmQodGhpcy5fbW92ZUluRGF5cywg
dGhpcyksIGZhbHNlKTsKLSAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgidHIiLCBD
bGFzc05hbWVzLkRheUxhYmVsQ29udGFpbmVyKTsKLSAgICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xv
YmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IDc7
IGkrKykKLSAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1lbnQoInRoIiwg
Q2xhc3NOYW1lcy5EYXlMYWJlbCwgZ2xvYmFsLnBhcmFtcy5kYXlMYWJlbHNbKHdlZWtTdGFydERh
eSArIGkpICUgN10pKTsKLSAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRh
aW5lcik7Ci0gICAgdGhpcy5fZGF5cyA9IFtdOwotICAgIGZvciAodmFyIHcgPSAwOyB3IDwgRGF5
c1RhYmxlLl9XZWVrczsgdysrKSB7Ci0gICAgICAgIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQo
InRyIiwgQ2xhc3NOYW1lcy5XZWVrQ29udGFpbmVyKTsKLSAgICAgICAgdmFyIHdlZWsgPSBbXTsK
LSAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKLSAgICAgICAgICAgIHZhciBk
YXkgPSBjcmVhdGVFbGVtZW50KCJ0ZCIsIENsYXNzTmFtZXMuRGF5LCAiICIpOwotICAgICAgICAg
ICAgZGF5LnNldEF0dHJpYnV0ZSgiZGF0YS1wb3NpdGlvbi14IiwgU3RyaW5nKGQpKTsKLSAgICAg
ICAgICAgIGRheS5zZXRBdHRyaWJ1dGUoImRhdGEtcG9zaXRpb24teSIsIFN0cmluZyh3KSk7Ci0g
ICAgICAgICAgICB3ZWVrLnB1c2goZGF5KTsKLSAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRD
aGlsZChkYXkpOwotICAgICAgICB9Ci0gICAgICAgIHRoaXMuX2RheXMucHVzaCh3ZWVrKTsKLSAg
ICAgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpOwotICAgIH0K
LSAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLkRheXNBcmVh
Q29udGFpbmVyKTsKLSAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZGF5c0NvbnRhaW5l
cik7Ci0gICAgY29udGFpbmVyLnRhYkluZGV4ID0gMDsKLSAgICBjb250YWluZXIuYWRkRXZlbnRM
aXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxlS2V5LCB0aGlzKSwgZmFsc2UpOwot
ICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKLQotICAgIGNvbnRhaW5lci5mb2N1cygp
OwotfTsKLQotLyoqCi0gKiBAcGFyYW0geyFudW1iZXJ9IHRpbWUgZGF0ZSBpbiBtaWxsaXNlY29u
ZC4KLSAqIEByZXR1cm4geyFib29sZWFufQotICovCi1mdW5jdGlvbiBzdGVwTWlzbWF0Y2godGlt
ZSkgewotICAgIHJldHVybiAodGltZSAtIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRUaW1lKCkpICUg
Z2xvYmFsLnN0ZXAgIT0gMDsKLX0KLQotLyoqCi0gKiBAcGFyYW0geyFudW1iZXJ9IHRpbWUgZGF0
ZSBpbiBtaWxsaXNlY29uZC4KLSAqIEByZXR1cm4geyFib29sZWFufQotICovCi1mdW5jdGlvbiBv
dXRPZlJhbmdlKHRpbWUpIHsKLSAgICByZXR1cm4gdGltZSA8IGdsb2JhbC5taW5pbXVtRGF0ZS5n
ZXRUaW1lKCkgfHwgdGltZSA+IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRUaW1lKCk7Ci19Ci0KLS8q
KgotICogQHBhcmFtIHshbnVtYmVyfSB0aW1lIGRhdGUgaW4gbWlsbGlzZWNvbmQuCi0gKiBAcmV0
dXJuIHshYm9vbGVhbn0KLSAqLwotZnVuY3Rpb24gaXNWYWxpZERhdGUodGltZSkgewotICAgIHJl
dHVybiAhb3V0T2ZSYW5nZSh0aW1lKSAmJiAhc3RlcE1pc21hdGNoKHRpbWUpOwotfQotCi0vKioK
LSAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgotICogQHBhcmFtIHshbnVtYmVyfSBtb250aAotICov
Ci1EYXlzVGFibGUucHJvdG90eXBlLl9yZW5kZXJNb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRo
KSB7Ci0gICAgdGhpcy5fY3VycmVudFllYXIgPSB5ZWFyOwotICAgIHRoaXMuX2N1cnJlbnRNb250
aCA9IG1vbnRoOwotICAgIHZhciBkYXlJdGVyYXRvciA9IG5ldyBEYXRlKERhdGUuVVRDKHllYXIs
IG1vbnRoLCAxKSk7Ci0gICAgZGF5SXRlcmF0b3Iuc2V0VVRDRnVsbFllYXIoeWVhcik7Ci0gICAg
dmFyIG1vbnRoU3RhcnREYXkgPSBkYXlJdGVyYXRvci5nZXRVVENEYXkoKTsKLSAgICB2YXIgd2Vl
a1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsKLSAgICB2YXIgc3Rh
cnRPZmZzZXQgPSB3ZWVrU3RhcnREYXkgLSBtb250aFN0YXJ0RGF5OwotICAgIGlmIChzdGFydE9m
ZnNldCA+PSAwKQotICAgICAgICBzdGFydE9mZnNldCAtPSA3OwotICAgIGRheUl0ZXJhdG9yLnNl
dFVUQ0RhdGUoc3RhcnRPZmZzZXQgKyAxKTsKLSAgICBmb3IgKHZhciB3ID0gMDsgdyA8IERheXNU
YWJsZS5fV2Vla3M7IHcrKykgewotICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8IDc7IGQrKykg
ewotICAgICAgICAgICAgdmFyIGl0ZXJZZWFyID0gZGF5SXRlcmF0b3IuZ2V0VVRDRnVsbFllYXIo
KTsKLSAgICAgICAgICAgIHZhciBpdGVyTW9udGggPSBkYXlJdGVyYXRvci5nZXRVVENNb250aCgp
OwotICAgICAgICAgICAgdmFyIHRpbWUgPSBkYXlJdGVyYXRvci5nZXRUaW1lKCk7Ci0gICAgICAg
ICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX2RheXNbd11bZF07Ci0gICAgICAgICAgICAvLyBGSVhN
RTogTmVlZCBsb2NhbGl6ZWQgbnVtYmVyPwotICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQg
PSBTdHJpbmcoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsKLSAgICAgICAgICAgIGVsZW1lbnQu
Y2xhc3NOYW1lID0gQ2xhc3NOYW1lcy5EYXk7Ci0gICAgICAgICAgICBlbGVtZW50LmRhdGFzZXQu
c3VibWl0VmFsdWUgPSBzZXJpYWxpemVEYXRlKGl0ZXJZZWFyLCBpdGVyTW9udGgsIGRheUl0ZXJh
dG9yLmdldFVUQ0RhdGUoKSk7Ci0gICAgICAgICAgICBpZiAob3V0T2ZSYW5nZSh0aW1lKSkKLSAg
ICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5VbmF2YWlsYWJs
ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChzdGVwTWlzbWF0Y2godGltZSkpCi0gICAgICAgICAg
ICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuVW5hdmFpbGFibGUpOwotICAg
ICAgICAgICAgZWxzZSBpZiAoKGl0ZXJZZWFyID09IHllYXIgJiYgZGF5SXRlcmF0b3IuZ2V0VVRD
TW9udGgoKSA8IG1vbnRoKSB8fCAobW9udGggPT0gMCAmJiBpdGVyTW9udGggPT0gMTEpKSB7Ci0g
ICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuQXZhaWxhYmxl
KTsKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5Ob3RU
aGlzTW9udGgpOwotICAgICAgICAgICAgfSBlbHNlIGlmICgoaXRlclllYXIgPT0geWVhciAmJiBk
YXlJdGVyYXRvci5nZXRVVENNb250aCgpID4gbW9udGgpIHx8IChtb250aCA9PSAxMSAmJiBpdGVy
TW9udGggPT0gMCkpIHsKLSAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xh
c3NOYW1lcy5BdmFpbGFibGUpOwotICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFk
ZChDbGFzc05hbWVzLk5vdFRoaXNNb250aCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFO
KHRpbWUpKSB7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSAiLSI7Ci0gICAg
ICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuVW5hdmFpbGFibGUp
OwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3Qu
YWRkKENsYXNzTmFtZXMuQXZhaWxhYmxlKTsKLSAgICAgICAgICAgIGRheUl0ZXJhdG9yLnNldFVU
Q0RhdGUoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpICsgMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBnbG9iYWwudG9kYXkuZGlzYWJsZWQgPSAhaXNWYWxpZERhdGUocGFyc2VEYXRlU3RyaW5n
KCkuZ2V0VGltZSgpKTsKLX07Ci0KLS8qKgotICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCi0gKiBA
cGFyYW0geyFudW1iZXJ9IG1vbnRoCi0gKi8KLURheXNUYWJsZS5wcm90b3R5cGUuX25hdmlnYXRl
VG9Nb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7Ci0gICAgZ2xvYmFsLnllYXJNb250aENv
bnRyb2xsZXIuc2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKTsKLSAgICB0aGlzLl9yZW5kZXJNb250
aCh5ZWFyLCBtb250aCk7Ci19OwotCi0vKioKLSAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgotICog
QHBhcmFtIHshbnVtYmVyfSBtb250aAotICovCi1EYXlzVGFibGUucHJvdG90eXBlLl9uYXZpZ2F0
ZVRvTW9udGhXaXRoQW5pbWF0aW9uID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKLSAgICBpZiAo
dGhpcy5fY3VycmVudFllYXIgPj0gMCAmJiB0aGlzLl9jdXJyZW50TW9udGggPj0gMCkgewotICAg
ICAgICBpZiAoeWVhciA9PSB0aGlzLl9jdXJyZW50WWVhciAmJiBtb250aCA9PSB0aGlzLl9jdXJy
ZW50TW9udGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBkZWNyZWFzaW5nID0g
ZmFsc2U7Ci0gICAgICAgIGlmICh5ZWFyIDwgdGhpcy5fY3VycmVudFllYXIpCi0gICAgICAgICAg
ICBkZWNyZWFzaW5nID0gdHJ1ZTsKLSAgICAgICAgZWxzZSBpZiAoeWVhciA+IHRoaXMuX2N1cnJl
bnRZZWFyKQotICAgICAgICAgICAgZGVjcmVhc2luZyA9IGZhbHNlOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBkZWNyZWFzaW5nID0gbW9udGggPCB0aGlzLl9jdXJyZW50TW9udGg7Ci0gICAg
ICAgIHZhciBkYXlzU3R5bGUgPSB0aGlzLl9kYXlzQ29udGFpbmVyLnN0eWxlOwotICAgICAgICBk
YXlzU3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOwotICAgICAgICBkYXlzU3R5bGUud2Via2l0
VHJhbnNpdGlvbiA9ICJsZWZ0IDAuMXMgZWFzZSI7Ci0gICAgICAgIGRheXNTdHlsZS5sZWZ0ID0g
KGRlY3JlYXNpbmcgPyAiIiA6ICItIikgKyB0aGlzLl9kYXlzQ29udGFpbmVyLm9mZnNldFdpZHRo
ICsgInB4IjsKLSAgICB9Ci0gICAgdGhpcy5fbmF2aWdhdGVUb01vbnRoKHllYXIsIG1vbnRoKTsK
LX07Ci0KLURheXNUYWJsZS5wcm90b3R5cGUuX21vdmVJbkRheXMgPSBmdW5jdGlvbigpIHsKLSAg
ICB2YXIgZGF5c1N0eWxlID0gdGhpcy5fZGF5c0NvbnRhaW5lci5zdHlsZTsKLSAgICBpZiAoZGF5
c1N0eWxlLmxlZnQgPT0gIjBweCIpCi0gICAgICAgIHJldHVybjsKLSAgICBkYXlzU3R5bGUud2Vi
a2l0VHJhbnNpdGlvbiA9ICIiOwotICAgIGRheXNTdHlsZS5sZWZ0ID0gKGRheXNTdHlsZS5sZWZ0
LmNoYXJBdCgwKSA9PSAiLSIgPyAiIiA6ICItIikgKyB0aGlzLl9kYXlzQ29udGFpbmVyLm9mZnNl
dFdpZHRoICsgInB4IjsKLSAgICB0aGlzLl9kYXlzQ29udGFpbmVyLm9mZnNldExlZnQ7IC8vIEZv
cmNlIHRvIGxheW91dC4KLSAgICBkYXlzU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICJsZWZ0IDAu
MXMgZWFzZSI7Ci0gICAgZGF5c1N0eWxlLmxlZnQgPSAiMHB4IjsKLX07Ci0KLS8qKgotICogQHBh
cmFtIHshbnVtYmVyfSB5ZWFyCi0gKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCi0gKi8KLURheXNU
YWJsZS5wcm90b3R5cGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlvblBvc2l0aW9uID0g
ZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKLSAgICBpZiAoeWVhciA9PSB0aGlzLl9jdXJyZW50WWVh
ciAmJiBtb250aCA9PSB0aGlzLl9jdXJyZW50TW9udGgpCi0gICAgICAgIHJldHVybjsKLSAgICB0
aGlzLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKTsKLSAgICBpZiAo
dGhpcy5faGFzU2VsZWN0aW9uKCkpCi0gICAgICAgIHRoaXMuX2RheXNbdGhpcy5feV1bdGhpcy5f
eF0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVkKTsKLX07Ci0KLS8qKgotICogQHBh
cmFtIHshRGF0ZX0gZGF0ZQotICovCi1EYXlzVGFibGUucHJvdG90eXBlLnNlbGVjdERhdGUgPSBm
dW5jdGlvbihkYXRlKSB7Ci0gICAgdGhpcy5fbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbihk
YXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSk7Ci0gICAgdmFyIGRhdGVT
dHJpbmcgPSBzZXJpYWxpemVEYXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENN
b250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7Ci0gICAgZm9yICh2YXIgdyA9IDA7IHcgPCBEYXlz
VGFibGUuX1dlZWtzOyB3KyspIHsKLSAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKysp
IHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9kYXlzW3ddW2RdLmRhdGFzZXQuc3VibWl0VmFsdWUg
PT0gZGF0ZVN0cmluZykgewotICAgICAgICAgICAgICAgIHRoaXMuX2RheXNbd11bZF0uY2xhc3NM
aXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVkKTsKLSAgICAgICAgICAgICAgICB0aGlzLl94ID0g
ZDsKLSAgICAgICAgICAgICAgICB0aGlzLl95ID0gdzsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX07Ci0KLS8qKgotICogQHJldHVybiB7
IWJvb2xlYW59Ci0gKi8KLURheXNUYWJsZS5wcm90b3R5cGUuX21heWJlU2V0UHJldmlvdXNNb250
aCA9IGZ1bmN0aW9uKCkgewotICAgIHZhciB5ZWFyID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xs
ZXIueWVhcigpOwotICAgIHZhciBtb250aCA9IGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1v
bnRoKCk7Ci0gICAgdmFyIHRoaXNNb250aFN0YXJ0VGltZSA9IERhdGUuVVRDKHllYXIsIG1vbnRo
LCAxKTsKLSAgICBpZiAoZ2xvYmFsLm1pbmltdW1EYXRlLmdldFRpbWUoKSA+PSB0aGlzTW9udGhT
dGFydFRpbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobW9udGggPT0gMCkgewot
ICAgICAgICB5ZWFyLS07Ci0gICAgICAgIG1vbnRoID0gMTE7Ci0gICAgfSBlbHNlCi0gICAgICAg
IG1vbnRoLS07Ci0gICAgdGhpcy5fbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlvbih5ZWFyLCBt
b250aCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19OwotCi0vKioKLSAqIEByZXR1cm4geyFib29sZWFu
fQotICovCi1EYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldE5leHRNb250aCA9IGZ1bmN0aW9u
KCkgewotICAgIHZhciB5ZWFyID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIueWVhcigpOwot
ICAgIHZhciBtb250aCA9IGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vbnRoKCk7Ci0gICAg
aWYgKG1vbnRoID09IDExKSB7Ci0gICAgICAgIHllYXIrKzsKLSAgICAgICAgbW9udGggPSAwOwot
ICAgIH0gZWxzZQotICAgICAgICBtb250aCsrOwotICAgIHZhciBuZXh0TW9udGhTdGFydFRpbWUg
PSBEYXRlLlVUQyh5ZWFyLCBtb250aCwgMSk7Ci0gICAgaWYgKGdsb2JhbC5tYXhpbXVtRGF0ZS5n
ZXRUaW1lKCkgPCBuZXh0TW9udGhTdGFydFRpbWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX07Ci0KLS8qKgotICogQHBhcmFtIHtFdmVudH0gZXZlbnQKLSAqLwotRGF5
c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlRGF5Q2xpY2sgPSBmdW5jdGlvbihldmVudCkgewotICAg
IGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMuQXZhaWxhYmxl
KSkKLSAgICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQuc3VibWl0VmFsdWUp
OwotfTsKLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICovCi1EYXlzVGFibGUucHJv
dG90eXBlLl9oYW5kbGVNb3VzZU92ZXIgPSBmdW5jdGlvbihldmVudCkgewotICAgIHZhciBub2Rl
ID0gZXZlbnQudGFyZ2V0OwotICAgIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSkKLSAgICAgICAg
dGhpcy5fZGF5c1t0aGlzLl95XVt0aGlzLl94XS5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZXMu
U2VsZWN0ZWQpOwotICAgIGlmICghbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xhc3NOYW1lcy5E
YXkpKSB7Ci0gICAgICAgIHRoaXMuX3ggPSAtMTsKLSAgICAgICAgdGhpcy5feSA9IC0xOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG5vZGUuY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlNl
bGVjdGVkKTsKLSAgICB0aGlzLl94ID0gTnVtYmVyKG5vZGUuZGF0YXNldC5wb3NpdGlvblgpOwot
ICAgIHRoaXMuX3kgPSBOdW1iZXIobm9kZS5kYXRhc2V0LnBvc2l0aW9uWSk7Ci19OwotCi0vKioK
LSAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gKi8KLURheXNUYWJsZS5wcm90b3R5cGUuX2hhbmRs
ZU1vdXNlT3V0ID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICBpZiAodGhpcy5faGFzU2VsZWN0aW9u
KCkpCi0gICAgICAgIHRoaXMuX2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NMaXN0LnJlbW92
ZShDbGFzc05hbWVzLlNlbGVjdGVkKTsKLSAgICB0aGlzLl94ID0gLTE7Ci0gICAgdGhpcy5feSA9
IC0xOwotfTsKLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICovCi1EYXlzVGFibGUu
cHJvdG90eXBlLl9oYW5kbGVLZXkgPSBmdW5jdGlvbihldmVudCkgewotICAgIG1heWJlVXBkYXRl
Rm9jdXNTdHlsZSgpOwotICAgIHZhciB4ID0gdGhpcy5feDsKLSAgICB2YXIgeSA9IHRoaXMuX3k7
Ci0gICAgdmFyIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXI7Ci0gICAgaWYgKCF0aGlzLl9oYXNT
ZWxlY3Rpb24oKSAmJiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlJp
Z2h0IiB8fCBrZXkgPT0gIkRvd24iKSkgewotICAgICAgICAvLyBQdXQgdGhlIHNlbGVjdGlvbiBv
biBhIGNlbnRlciBjZWxsLgotICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgMywg
TWF0aC5mbG9vcihEYXlzVGFibGUuX1dlZWtzIC8gMiAtIDEpKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChrZXkgPT0gKGdsb2JhbC5wYXJhbXMuaXNSVEwgPyAiUmlnaHQiIDog
IkxlZnQiKSkgewotICAgICAgICBpZiAoeCA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoeSA9PSAw
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3VzTW9udGgoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIHkgPSBEYXlzVGFi
bGUuX1dlZWtzIC0gMTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHktLTsK
LSAgICAgICAgICAgIHggPSA2OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHgtLTsKLSAg
ICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwotCi0gICAgfSBlbHNlIGlm
IChrZXkgPT0gIlVwIikgewotICAgICAgICBpZiAoeSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAo
IXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIHkgPSBEYXlzVGFibGUuX1dlZWtzIC0gMTsKLSAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB5LS07Ci0gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGV2ZW50LCB4LCB5
KTsKLQotICAgIH0gZWxzZSBpZiAoa2V5ID09IChnbG9iYWwucGFyYW1zLmlzUlRMID8gIkxlZnQi
IDogIlJpZ2h0IikpIHsKLSAgICAgICAgaWYgKHggPT0gNikgewotICAgICAgICAgICAgaWYgKHkg
PT0gRGF5c1RhYmxlLl9XZWVrcyAtIDEpIHsKLSAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX21h
eWJlU2V0TmV4dE1vbnRoKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgICAgICB5ID0gMDsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHkrKzsK
LSAgICAgICAgICAgIHggPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHgrKzsKLSAg
ICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOwotCi0gICAgfSBlbHNlIGlm
IChrZXkgPT0gIkRvd24iKSB7Ci0gICAgICAgIGlmICh5ID09IERheXNUYWJsZS5fV2Vla3MgLSAx
KSB7Ci0gICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgeSA9IDA7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgeSsrOwotICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7
Ci0KLSAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZVVwIikgewotICAgICAgICBpZiAoIXRoaXMu
X21heWJlU2V0UHJldmlvdXNNb250aCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0
aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7Ci0KLSAgICB9IGVsc2UgaWYgKGtleSA9
PSAiUGFnZURvd24iKSB7Ci0gICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXROZXh0TW9udGgoKSkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQs
IHgsIHkpOwotCi0gICAgfSBlbHNlIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiBrZXkgPT0g
IkVudGVyIikgewotICAgICAgICB2YXIgZGF5Tm9kZSA9IHRoaXMuX2RheXNbeV1beF07Ci0gICAg
ICAgIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWVzLkF2YWlsYWJsZSkp
IHsKLSAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRheU5vZGUuZGF0YXNldC5zdWJtaXRWYWx1ZSk7
Ci0gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKLSAgICAgICAgfQotCi0gICAg
fSBlbHNlIGlmIChrZXkgPT0gIlUrMDA1NCIpIHsgLy8gJ3QnCi0gICAgICAgIHRoaXMuX2RheXNb
dGhpcy5feV1bdGhpcy5feF0uY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVzLlNlbGVjdGVkKTsK
LSAgICAgICAgdGhpcy5zZWxlY3REYXRlKG5ldyBEYXRlKCkpOwotICAgICAgICBldmVudC5zdG9w
UHJvcGFnYXRpb24oKTsKLSAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLSAgICB9Ci19
OwotCi0vKioKLSAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50Ci0gKiBAcGFyYW0geyFudW1iZXJ9IHgK
LSAqIEBwYXJhbSB7IW51bWJlcn0geQotICovCi1EYXlzVGFibGUucHJvdG90eXBlLnVwZGF0ZVNl
bGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50LCB4LCB5KSB7Ci0gICAgaWYgKHRoaXMuX2hhc1NlbGVj
dGlvbigpKQotICAgICAgICB0aGlzLl9kYXlzW3RoaXMuX3ldW3RoaXMuX3hdLmNsYXNzTGlzdC5y
ZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7Ci0gICAgaWYgKHggPj0gMCAmJiB5ID49IDApIHsK
LSAgICAgICAgdGhpcy5fZGF5c1t5XVt4XS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0
ZWQpOwotICAgICAgICB0aGlzLl94ID0geDsKLSAgICAgICAgdGhpcy5feSA9IHk7Ci0gICAgfQot
ICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7
Ci19OwotCi0vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0KLWZ1bmN0aW9uIGhhbmRsZVRvZGF5KCkgewotICAgIHZhciBk
YXRlID0gbmV3IERhdGUoKTsKLSAgICBnbG9iYWwuZGF5c1RhYmxlLnNlbGVjdERhdGUoZGF0ZSk7
Ci0gICAgc3VibWl0VmFsdWUoc2VyaWFsaXplRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUu
Z2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpKTsKLX0KLQotZnVuY3Rpb24gaGFuZGxlQ2xlYXIo
KSB7Ci0gICAgc3VibWl0VmFsdWUoIiIpOwotfQotCi0vKioKLSAqIEBwYXJhbSB7c3RyaW5nfSB2
YWx1ZQotICovCi1mdW5jdGlvbiBzdWJtaXRWYWx1ZSh2YWx1ZSkgewotICAgIHdpbmRvdy5wYWdl
UG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5kQ2xvc2VQb3B1cCgwLCB2YWx1ZSk7Ci19Ci0KLWZ1
bmN0aW9uIGhhbmRsZUNhbmNlbCgpIHsKLSAgICB3aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5z
ZXRWYWx1ZUFuZENsb3NlUG9wdXAoLTEsICIiKTsKLX0KLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50
fSBldmVudAotICovCi1mdW5jdGlvbiBoYW5kbGVHbG9iYWxLZXkoZXZlbnQpIHsKLSAgICBtYXli
ZVVwZGF0ZUZvY3VzU3R5bGUoKTsKLSAgICB2YXIga2V5ID0gZXZlbnQua2V5SWRlbnRpZmllcjsK
LSAgICBpZiAoa2V5ID09ICJVKzAwMDkiKSB7Ci0gICAgICAgIGlmICghZXZlbnQuc2hpZnRLZXkg
JiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwubGFzdEZvY3VzYWJsZUNvbnRyb2wp
IHsKLSAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICAgICAgZXZl
bnQucHJldmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIGdsb2JhbC5maXJzdEZvY3VzYWJsZUNv
bnRyb2wuZm9jdXMoKTsKLSAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtleSAmJiBkb2N1
bWVudC5hY3RpdmVFbGVtZW50ID09IGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wpIHsKLSAg
ICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwotICAgICAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKLSAgICAgICAgICAgIGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbC5m
b2N1cygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA0RCIpIHsgLy8g
J20nCi0gICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxhdGl2ZWx5KGV2
ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c01vbnRoIDogWWVhck1v
bnRoQ29udHJvbGxlci5OZXh0TW9udGgpOwotICAgIH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwNTki
KSB7IC8vICd5JwotICAgICAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5tb3ZlUmVsYXRp
dmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENvbnRyb2xsZXIuUHJldmlvdXNZZWFyIDog
WWVhck1vbnRoQ29udHJvbGxlci5OZXh0WWVhcik7Ci0gICAgfSBlbHNlIGlmIChrZXkgPT0gIlUr
MDA0NCIpIHsgLy8gJ2QnCi0gICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vdmVS
ZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1Rl
blllYXJzIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0VGVuWWVhcnMpOwotICAgIH0gZWxzZSBp
ZiAoa2V5ID09ICJVKzAwMUIiKSAvLyBFU0MKLSAgICAgICAgaGFuZGxlQ2FuY2VsKCk7Ci19Ci0K
LWZ1bmN0aW9uIG1heWJlVXBkYXRlRm9jdXNTdHlsZSgpIHsKLSAgICBpZiAoZ2xvYmFsLmhhZEtl
eUV2ZW50KQotICAgICAgICByZXR1cm47Ci0gICAgZ2xvYmFsLmhhZEtleUV2ZW50ID0gdHJ1ZTsK
LSAgICAkKCJtYWluIikuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVzLk5vRm9jdXNSaW5nKTsK
LX0KLQotaWYgKHdpbmRvdy5kaWFsb2dBcmd1bWVudHMpIHsKLSAgICBpbml0aWFsaXplKGRpYWxv
Z0FyZ3VtZW50cyk7Ci19IGVsc2UgewotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNz
YWdlIiwgaGFuZGxlTWVzc2FnZSwgZmFsc2UpOwotICAgIHdpbmRvdy5zZXRUaW1lb3V0KGhhbmRs
ZUFyZ3VtZW50c1RpbWVvdXQsIDEwMDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
UmVzb3VyY2VzL2NhbGVuZGFyUGlja2VyTWFjLmNzcyBiL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNl
cy9jYWxlbmRhclBpY2tlck1hYy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQx
NDQ2NDU2MjdhOTc1ZTdiNWE5Nzg1OTRiYWVmZjExMjA4MThiOTIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2Nh
bGVuZGFyUGlja2VyTWFjLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0ueWVhci1t
b250aC1idXR0b24gewotICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTsKLSAgICBiYWNrZ3Jv
dW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9t
KCNmZmYpLCBjb2xvci1zdG9wKDAuMywgI2ZmZiksIGNvbG9yLXN0b3AoMC4zNSwgI2Y3ZjdmNyks
IGNvbG9yLXN0b3AoMC40OSwgI2Y3ZjdmNyksIGNvbG9yLXN0b3AoMC41LCAjZWRlZGVkKSwgdG8o
I2VkZWRlZCkpOwotICAgIGJvcmRlcjogc29saWQgMXB4ICNhNmE2YTY7Ci0gICAgYm9yZGVyLXJh
ZGl1czogNHB4OwotICAgIGJveC1zaGFkb3c6IGluc2V0IDFweCAxcHggMXB4IHJnYmEoMjU1LDI1
NSwyNTUsMC40KSwgaW5zZXQgLTFweCAtMXB4IDFweCByZ2JhKDI1NSwyNTUsMjU1LDAuNCk7Ci0g
ICAgcGFkZGluZy1sZWZ0OiAzcHg7Ci0gICAgcGFkZGluZy1yaWdodDogM3B4OwotfQotCi0ueWVh
ci1tb250aC1idXR0b246YWN0aXZlIHsKLSAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50
KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBmcm9tKCNhM2JmZWYpLCBjb2xvci1zdG9w
KDAuNDksICAjNmJhM2VmKSwgY29sb3Itc3RvcCgwLjUsICM0NDkxZWYpLCB0bygjYTNkMWVmKSk7
Ci0gICAgYm9yZGVyOiBzb2xpZCAxcHggIzRkNGQ1MDsKLX0KLQotLnllYXItbW9udGgtYnV0dG9u
OmRpc2FibGVkIHsKLSAgICBjb2xvcjogIzg4ODsKLSAgICBib3JkZXI6IHNvbGlkIDFweCAjZDFk
MWQxOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NvbG9yU3VnZ2Vz
dGlvblBpY2tlci5jc3MgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY29sb3JTdWdnZXN0aW9u
UGlja2VyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY4NDdmZWJjYWVlYTc2
OTU1YWI1ZmI1ODcxYzQ3MjFiOTliNGJmNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY29sb3JTdWdnZXN0aW9u
UGlja2VyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi1ib2R5
IHsKLSAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwotICAgIGJhY2tncm91bmQtY29sb3I6
IHdoaXRlOwotICAgIGZvbnQ6IC13ZWJraXQtc21hbGwtY29udHJvbDsKLSAgICBtYXJnaW46IDA7
Ci0gICAgb3ZlcmZsb3c6IGhpZGRlbjsKLX0KLQotI21haW4gewotICAgIGJhY2tncm91bmQtY29s
b3I6IHdoaXRlOwotICAgIGJvcmRlcjogc29saWQgMXB4ICM4ODk5YWE7Ci0gICAgYm94LXNoYWRv
dzogaW5zZXQgMnB4IDJweCAycHggd2hpdGUsCi0gICAgICAgIGluc2V0IC0ycHggLTJweCAxcHgg
cmdiYSgwLDAsMCwwLjEpOwotICAgIHBhZGRpbmc6IDZweDsKLSAgICBmbG9hdDogbGVmdDsKLX0K
LQotLmNvbG9yLXN3YXRjaCB7Ci0gICAgZmxvYXQ6IGxlZnQ7Ci0gICAgd2lkdGg6IDIwcHg7Ci0g
ICAgaGVpZ2h0OiAyMHB4OwotICAgIG1hcmdpbjogMXB4OwotICAgIHBhZGRpbmc6IDA7Ci0gICAg
Ym9yZGVyOiAxcHggc29saWQgI2UwZTBlMDsKLSAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsK
LX0KLQotLmNvbG9yLXN3YXRjaDpmb2N1cyB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzAwMDAw
MDsKLSAgICBvdXRsaW5lOiBub25lOwotfQotCi0uY29sb3Itc3dhdGNoLWNvbnRhaW5lciB7Ci0g
ICAgd2lkdGg6IDEwMCU7Ci0gICAgbWF4LWhlaWdodDogMTA0cHg7Ci0gICAgb3ZlcmZsb3c6IGF1
dG87Ci0gICAgZGlzcGxheTogLXdlYmtpdC1mbGV4OwotICAgIC13ZWJraXQtZmxleC1mbG93OiBy
b3cgd3JhcDsKLSAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7Ci19Ci0KLS5vdGhlci1j
b2xvciB7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgbWFyZ2luOiA0cHggMCAwIDA7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpz
IGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2NvbG9yU3VnZ2VzdGlvblBpY2tlci5qcwpkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgyN2U5NmQxYzFkZTdhMDMwYWVlYWE4YjhmYzE3
MWI3ZGM5YTViYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzCisrKyAv
ZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLSJ1c2Ugc3RyaWN0IjsKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
LSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCi0gKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi12YXIg
Z2xvYmFsID0gewotICAgIGFyZ3VtZW50c1JlY2VpdmVkOiBmYWxzZSwKLSAgICBzY3JvbGxiYXJX
aWR0aDogbnVsbAotfTsKLQotLyoqCi0gKiBAcGFyYW0geyFzdHJpbmd9IGlkCi0gKi8KLWZ1bmN0
aW9uICQoaWQpIHsKLSAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwotfQot
Ci1mdW5jdGlvbiBiaW5kKGZ1bmMsIGNvbnRleHQpIHsKLSAgICByZXR1cm4gZnVuY3Rpb24oKSB7
Ci0gICAgICAgIHJldHVybiBmdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7Ci0gICAgfTsK
LX0KLQotZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyV2lkdGgoKSB7Ci0gICAgaWYgKGdsb2JhbC5zY3Jv
bGxiYXJXaWR0aCA9PT0gbnVsbCkgewotICAgICAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiZGl2Iik7Ci0gICAgICAgIHNjcm9sbERpdi5zdHlsZS5vcGFjaXR5ID0g
IjAiOwotICAgICAgICBzY3JvbGxEaXYuc3R5bGUub3ZlcmZsb3cgPSAic2Nyb2xsIjsKLSAgICAg
ICAgc2Nyb2xsRGl2LnN0eWxlLndpZHRoID0gIjUwcHgiOwotICAgICAgICBzY3JvbGxEaXYuc3R5
bGUuaGVpZ2h0ID0gIjUwcHgiOwotICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNj
cm9sbERpdik7Ci0gICAgICAgIGdsb2JhbC5zY3JvbGxiYXJXaWR0aCA9IHNjcm9sbERpdi5vZmZz
ZXRXaWR0aCAtIHNjcm9sbERpdi5jbGllbnRXaWR0aDsKLSAgICAgICAgc2Nyb2xsRGl2LnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoc2Nyb2xsRGl2KTsKLSAgICB9Ci0gICAgcmV0dXJuIGdsb2JhbC5z
Y3JvbGxiYXJXaWR0aDsKLX0KLQotLyoqCi0gKiBAcGFyYW0geyFzdHJpbmd9IHRhZ05hbWUKLSAq
IEBwYXJhbSB7c3RyaW5nPX0gb3B0X2NsYXNzCi0gKiBAcGFyYW0ge3N0cmluZz19IG9wdF90ZXh0
Ci0gKiBAcmV0dXJuIHshRWxlbWVudH0KLSAqLwotZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdO
YW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7Ci0gICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KHRhZ05hbWUpOwotICAgIGlmIChvcHRfY2xhc3MpCi0gICAgICAgIGVsZW1l
bnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG9wdF9jbGFzcyk7Ci0gICAgaWYgKG9wdF90ZXh0KQot
ICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90
ZXh0KSk7Ci0gICAgcmV0dXJuIGVsZW1lbnQ7Ci19Ci0KLS8qKgotICogQHBhcmFtIHshbnVtYmVy
fSB3aWR0aAotICogQHBhcmFtIHshbnVtYmVyfSBoZWlnaHQKLSAqLwotZnVuY3Rpb24gcmVzaXpl
V2luZG93KHdpZHRoLCBoZWlnaHQpIHsKLSAgICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkgewot
ICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOwot
ICAgICAgICB3aW5kb3cuZnJhbWVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgd2luZG93LnJlc2l6ZVRvKHdpZHRoLCBoZWlnaHQpOwot
ICAgIH0KLX0KLQotLyoqCi0gKiBAcGFyYW0ge0V2ZW50fSBldmVudAotICovCi1mdW5jdGlvbiBo
YW5kbGVNZXNzYWdlKGV2ZW50KSB7Ci0gICAgaW5pdGlhbGl6ZShKU09OLnBhcnNlKGV2ZW50LmRh
dGEpKTsKLSAgICBnbG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQgPSB0cnVlOwotfQotCi0vKioKLSAq
IEBwYXJhbSB7IU9iamVjdH0gYXJncwotICovCi1mdW5jdGlvbiBpbml0aWFsaXplKGFyZ3MpIHsK
LSAgICB2YXIgbWFpbiA9ICQoIm1haW4iKTsKLSAgICBtYWluLmlubmVySFRNTCA9ICIiOwotICAg
IHZhciBlcnJvclN0cmluZyA9IHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpOwotICAgIGlmIChlcnJv
clN0cmluZykgewotICAgICAgICBtYWluLnRleHRDb250ZW50ID0gIkludGVybmFsIGVycm9yOiAi
ICsgZXJyb3JTdHJpbmc7Ci0gICAgICAgIHJlc2l6ZVdpbmRvdyhtYWluLm9mZnNldFdpZHRoLCBt
YWluLm9mZnNldEhlaWdodCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG5ldyBDb2xvclBpY2tlciht
YWluLCBhcmdzKTsKLX0KLQotLy8gVGhlIERlZmF1bHRDb2xvclBhbGV0dGUgaXMgdXNlZCB3aGVu
IHRoZSBsaXN0IG9mIHZhbHVlcyBhcmUgZW1wdHkuIAotdmFyIERlZmF1bHRDb2xvclBhbGV0dGUg
PSBbIiMwMDAwMDAiLCAiIzQwNDA0MCIsICIjODA4MDgwIiwgIiNjMGMwYzAiLAotICAgICIjZmZm
ZmZmIiwgIiM5ODAwMDAiLCAiI2ZmMDAwMCIsICIjZmY5OTAwIiwgIiNmZmZmMDAiLCAiIzAwZmYw
MCIsICIjMDBmZmZmIiwKLSAgICAiIzRhODZlOCIsICIjMDAwMGZmIiwgIiM5OTAwZmYiLCAiI2Zm
MDBmZiJdOwotCi1mdW5jdGlvbiBoYW5kbGVBcmd1bWVudHNUaW1lb3V0KCkgewotICAgIGlmIChn
bG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICB2YXIgYXJncyA9
IHsKLSAgICAgICAgdmFsdWVzIDogRGVmYXVsdENvbG9yUGFsZXR0ZSwKLSAgICAgICAgb3RoZXJD
b2xvckxhYmVsOiAiT3RoZXIuLi4iCi0gICAgfTsKLSAgICBpbml0aWFsaXplKGFyZ3MpOwotfQot
Ci0vKioKLSAqIEBwYXJhbSB7IU9iamVjdH0gYXJncwotICogQHJldHVybiB7P3N0cmluZ30gQW4g
ZXJyb3IgbWVzc2FnZSwgb3IgbnVsbCBpZiB0aGUgYXJndW1lbnQgaGFzIG5vIGVycm9ycy4KLSAq
LwotZnVuY3Rpb24gdmFsaWRhdGVBcmd1bWVudHMoYXJncykgewotICAgIGlmICghYXJncy52YWx1
ZXMpCi0gICAgICAgIHJldHVybiAiTm8gdmFsdWVzLiI7Ci0gICAgaWYgKCFhcmdzLm90aGVyQ29s
b3JMYWJlbCkKLSAgICAgICAgcmV0dXJuICJObyBvdGhlckNvbG9yTGFiZWwuIjsKLSAgICByZXR1
cm4gbnVsbDsKLX0KLQotdmFyIEFjdGlvbnMgPSB7Ci0gICAgQ2hvb3NlT3RoZXJDb2xvcjogLTIs
Ci0gICAgQ2FuY2VsOiAtMSwKLSAgICBTZXRWYWx1ZTogMAotfTsKLQotLyoqCi0gKiBAcGFyYW0g
e3N0cmluZ30gdmFsdWUKLSAqLwotZnVuY3Rpb24gc3VibWl0VmFsdWUodmFsdWUpIHsKLSAgICB3
aW5kb3cucGFnZVBvcHVwQ29udHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoQWN0aW9ucy5T
ZXRWYWx1ZSwgdmFsdWUpOwotfQotCi1mdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7Ci0gICAgd2lu
ZG93LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2Fu
Y2VsLCAiIik7Ci19Ci0KLWZ1bmN0aW9uIGNob29zZU90aGVyQ29sb3IoKSB7Ci0gICAgd2luZG93
LnBhZ2VQb3B1cENvbnRyb2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2hvb3Nl
T3RoZXJDb2xvciwgIiIpOwotfQotCi1mdW5jdGlvbiBDb2xvclBpY2tlcihlbGVtZW50LCBjb25m
aWcpIHsKLSAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudDsKLSAgICB0aGlzLl9jb25maWcgPSBj
b25maWc7Ci0gICAgaWYgKHRoaXMuX2NvbmZpZy52YWx1ZXMubGVuZ3RoID09PSAwKQotICAgICAg
ICB0aGlzLl9jb25maWcudmFsdWVzID0gRGVmYXVsdENvbG9yUGFsZXR0ZTsKLSAgICB0aGlzLl9j
b250YWluZXIgPSBudWxsOwotICAgIHRoaXMuX2xheW91dCgpOwotICAgIGRvY3VtZW50LmJvZHku
YWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxlS2V5RG93biwgdGhp
cykpOwotICAgIHRoaXMuX2VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgYmlu
ZCh0aGlzLl9oYW5kbGVNb3VzZU1vdmUsIHRoaXMpKTsKLSAgICB0aGlzLl9lbGVtZW50LmFkZEV2
ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VEb3duLCB0aGlz
KSk7Ci19Ci0KLXZhciBTd2F0Y2hCb3JkZXJCb3hXaWR0aCA9IDI0OyAvLyBrZWVwIGluIHN5bmMg
d2l0aCBDU1MKLXZhciBTd2F0Y2hCb3JkZXJCb3hIZWlnaHQgPSAyNDsgLy8ga2VlcCBpbiBzeW5j
IHdpdGggQ1NTCi12YXIgU3dhdGNoZXNQZXJSb3cgPSA1OwotdmFyIFN3YXRjaGVzTWF4Um93ID0g
NDsKLQotQ29sb3JQaWNrZXIucHJvdG90eXBlLl9sYXlvdXQgPSBmdW5jdGlvbigpIHsKLSAgICB2
YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgImNvbG9yLXN3YXRjaC1jb250YWlu
ZXIiKTsKLSAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMu
X2hhbmRsZVN3YXRjaENsaWNrLCB0aGlzKSwgZmFsc2UpOwotICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGhpcy5fY29uZmlnLnZhbHVlcy5sZW5ndGg7ICsraSkgewotICAgICAgICB2YXIgc3dhdGNo
ID0gY3JlYXRlRWxlbWVudCgiYnV0dG9uIiwgImNvbG9yLXN3YXRjaCIpOwotICAgICAgICBzd2F0
Y2guZGF0YXNldC5pbmRleCA9IGk7Ci0gICAgICAgIHN3YXRjaC5kYXRhc2V0LnZhbHVlID0gdGhp
cy5fY29uZmlnLnZhbHVlc1tpXTsKLSAgICAgICAgc3dhdGNoLnRpdGxlID0gdGhpcy5fY29uZmln
LnZhbHVlc1tpXTsKLSAgICAgICAgc3dhdGNoLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMu
X2NvbmZpZy52YWx1ZXNbaV07Ci0gICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzd2F0Y2gp
OwotICAgIH0KLSAgICB2YXIgY29udGFpbmVyV2lkdGggPSBTd2F0Y2hCb3JkZXJCb3hXaWR0aCAq
IFN3YXRjaGVzUGVyUm93OwotICAgIGlmICh0aGlzLl9jb25maWcudmFsdWVzLmxlbmd0aCA+IFN3
YXRjaGVzUGVyUm93ICogU3dhdGNoZXNNYXhSb3cpCi0gICAgICAgIGNvbnRhaW5lcldpZHRoICs9
IGdldFNjcm9sbGJhcldpZHRoKCk7Ci0gICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gY29udGFp
bmVyV2lkdGggKyAicHgiOwotICAgIGNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSAoU3dhdGNo
Qm9yZGVyQm94SGVpZ2h0ICogU3dhdGNoZXNNYXhSb3cpICsgInB4IjsKLSAgICB0aGlzLl9lbGVt
ZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7Ci0gICAgdmFyIG90aGVyQnV0dG9uID0gY3JlYXRl
RWxlbWVudCgiYnV0dG9uIiwgIm90aGVyLWNvbG9yIiwgdGhpcy5fY29uZmlnLm90aGVyQ29sb3JM
YWJlbCk7Ci0gICAgb3RoZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBjaG9vc2VP
dGhlckNvbG9yLCBmYWxzZSk7Ci0gICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChvdGhlckJ1
dHRvbik7Ci0gICAgdGhpcy5fY29udGFpbmVyID0gY29udGFpbmVyOwotICAgIHRoaXMuX290aGVy
QnV0dG9uID0gb3RoZXJCdXR0b247Ci0gICAgdmFyIGVsZW1lbnRXaWR0aCA9IHRoaXMuX2VsZW1l
bnQub2Zmc2V0V2lkdGg7Ci0gICAgdmFyIGVsZW1lbnRIZWlnaHQgPSB0aGlzLl9lbGVtZW50Lm9m
ZnNldEhlaWdodDsKLSAgICByZXNpemVXaW5kb3coZWxlbWVudFdpZHRoLCBlbGVtZW50SGVpZ2h0
KTsKLX07Ci0KLUNvbG9yUGlja2VyLnByb3RvdHlwZS5zZWxlY3RDb2xvckF0SW5kZXggPSBmdW5j
dGlvbihpbmRleCkgewotICAgIGluZGV4ID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5fY29udGFp
bmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSwgaW5kZXgpLCAwKTsKLSAgICB0aGlzLl9jb250YWlu
ZXIuY2hpbGROb2Rlc1tpbmRleF0uZm9jdXMoKTsKLX07Ci0KLUNvbG9yUGlja2VyLnByb3RvdHlw
ZS5faGFuZGxlTW91c2VNb3ZlID0gZnVuY3Rpb24oZXZlbnQpIHsKLSAgICBpZiAoZXZlbnQudGFy
Z2V0LmNsYXNzTGlzdC5jb250YWlucygiY29sb3Itc3dhdGNoIikpCi0gICAgICAgIGV2ZW50LnRh
cmdldC5mb2N1cygpOwotfTsKLQotQ29sb3JQaWNrZXIucHJvdG90eXBlLl9oYW5kbGVNb3VzZURv
d24gPSBmdW5jdGlvbihldmVudCkgewotICAgIC8vIFByZXZlbnQgYmx1ci4KLSAgICBpZiAoZXZl
bnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiY29sb3Itc3dhdGNoIikpCi0gICAgICAgIGV2
ZW50LnByZXZlbnREZWZhdWx0KCk7Ci19OwotCi1Db2xvclBpY2tlci5wcm90b3R5cGUuX2hhbmRs
ZUtleURvd24gPSBmdW5jdGlvbihldmVudCkgewotICAgIHZhciBrZXkgPSBldmVudC5rZXlJZGVu
dGlmaWVyOwotICAgIGlmIChrZXkgPT09ICJVKzAwMUIiKSAvLyBFU0MKLSAgICAgICAgaGFuZGxl
Q2FuY2VsKCk7Ci0gICAgZWxzZSBpZiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8fCBr
ZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSB7Ci0gICAgICAgIHZhciBzZWxlY3RlZEVs
ZW1lbnQgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50OwotICAgICAgICB2YXIgaW5kZXggPSAwOwot
ICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygib3RoZXItY29s
b3IiKSkgewotICAgICAgICAgICAgaWYgKGtleSAhPSAiUmlnaHQiICYmIGtleSAhPSAiVXAiKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fY29udGFp
bmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsKLSAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZEVs
ZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1zd2F0Y2giKSkgewotICAgICAgICAgICAg
aW5kZXggPSBwYXJzZUludChzZWxlY3RlZEVsZW1lbnQuZGF0YXNldC5pbmRleCwgMTApOwotICAg
ICAgICAgICAgc3dpdGNoIChrZXkpIHsKLSAgICAgICAgICAgIGNhc2UgIkxlZnQiOgotICAgICAg
ICAgICAgICAgIGluZGV4LS07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlICJSaWdodCI6Ci0gICAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgIlVwIjoKLSAgICAgICAgICAgICAgICBpbmRleCAtPSBT
d2F0Y2hlc1BlclJvdzsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
IkRvd24iOgotICAgICAgICAgICAgICAgIGluZGV4ICs9IFN3YXRjaGVzUGVyUm93OwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGluZGV4ID4g
dGhpcy5fY29udGFpbmVyLmNoaWxkTm9kZXMubGVuZ3RoIC0gMSkgewotICAgICAgICAgICAgICAg
IHRoaXMuX290aGVyQnV0dG9uLmZvY3VzKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHRoaXMuc2VsZWN0Q29sb3JBdEluZGV4KGlu
ZGV4KTsKLSAgICB9Ci0gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKLX07Ci0KLUNvbG9yUGlj
a2VyLnByb3RvdHlwZS5faGFuZGxlU3dhdGNoQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgewotICAg
IGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1zd2F0Y2giKSkKLSAg
ICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQudmFsdWUpOwotfTsKLQotaWYg
KHdpbmRvdy5kaWFsb2dBcmd1bWVudHMpIHsKLSAgICBpbml0aWFsaXplKGRpYWxvZ0FyZ3VtZW50
cyk7Ci19IGVsc2UgewotICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgaGFu
ZGxlTWVzc2FnZSwgZmFsc2UpOwotICAgIHdpbmRvdy5zZXRUaW1lb3V0KGhhbmRsZUFyZ3VtZW50
c1RpbWVvdXQsIDEwMDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2Vz
L3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2Vz
L3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxOGEyNWFkMTgyMzFi
NDk3MDg0ZTNhYmYxOTQ2NTNhZTEwMDYzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5jc3MKQEAgLTAsMCArMSwy
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCitib2R5IHsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOworICAgIGJhY2tncm91
bmQtY29sb3I6IHdoaXRlOworICAgIGZvbnQ6IC13ZWJraXQtc21hbGwtY29udHJvbDsKKyAgICBt
YXJnaW46IDA7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLm5vLWZvY3VzLXJpbmcgOmZv
Y3VzIHsKKyAgICBvdXRsaW5lOiBub25lOworfQorCisjbWFpbiB7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogd2hpdGU7CisgICAgYm9yZGVyOiBzb2xpZCAxcHggIzg4OTlhYTsKKyAgICBib3gtc2hh
ZG93OiBpbnNldCAycHggMnB4IDJweCB3aGl0ZSwKKyAgICAgICAgaW5zZXQgLTJweCAtMnB4IDFw
eCByZ2JhKDAsMCwwLDAuMSk7CisgICAgcGFkZGluZzogNnB4OworICAgIHdoaXRlc3BhY2U6IG5v
d3JhcDsKKyAgICAvKiB3aWR0aCBpcyByZXNldCBpbiB0aGUgSlMgY29kZS4gKi8KKyAgICB3aWR0
aDogNTAwcHg7Cit9CisKKy55ZWFyLW1vbnRoLWFyZWEgeworfQorCisueWVhci1tb250aC11cHBl
ciB7CisgICAgLyogZGlzcGxheTotd2Via2l0LWJveDsgaXMgYWRkZWQgaW4gdGhlIEpTIGNvZGUu
ICovCit9CisKKy55ZWFyLXNlbGVjdG9yIHsKKyAgICB0ZXh0LWFsaWduOiByaWdodDsKKyAgICB3
aWR0aDogNmVtOworfQorCisubW9udGgtc2VsZWN0b3ItYm94IHsKKyAgICBkaXNwbGF5OiBpbmxp
bmUtYmxvY2s7CisgICAgdGV4dC1hbGlnbjogY2VudGVyOworICAgIC13ZWJraXQtYm94LWZsZXg6
IDI7Cit9CisKKy5tb250aC1zZWxlY3RvciB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7
CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBw
YWRkaW5nOiAzcHggNnB4IDNweCA2cHg7Cit9CisubW9udGgtc2VsZWN0b3I6YWZ0ZXIgeworICAg
IGNvbnRlbnQ6ICIg4pa8IjsKKyAgICBmb250LXNpemU6IHNtYWxsZXI7Cit9CisKKy5tb250aC1z
ZWxlY3Rvci1wb3B1cCB7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBjb250ZW50LWJveDsKKyAg
ICAtd2Via2l0LWJveC1zaGFkb3c6CisgICAgICAgIDAgMCAwIDFweCByZ2JhKDAsMCwwLDAuMSks
CisgICAgICAgIDAgNXB4IDFweCAxcHggcmdiYSgwLDAsMCwwLjEpLAorICAgICAgICAwIDVweCAy
cHggMXB4IHJnYmEoMCwwLDAsMC4xKSwKKyAgICAgICAgMCA1cHggMTJweCAxcHggcmdiYSgwLDAs
MCwwLjUpOworICAgIGJhY2tncm91bmQ6ICNmZmY7CisgICAgZGlzcGxheTogbm9uZTsKKyAgICBt
YXgtaGVpZ2h0OiAxMC44ZW07CisgICAgb3ZlcmZsb3cteDogaGlkZGVuOworICAgIG92ZXJmbG93
LXk6IGF1dG87CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAgIHdoaXRlLXNwYWNlOiBub3dy
YXA7Cit9CisKKy5tb250aC1zZWxlY3Rvci1wb3B1cC1jb250ZW50cyB7CisgICAgZGlzcGxheTog
dGFibGU7Cit9CisKKy5tb250aC1zZWxlY3Rvci1wb3B1cC1lbnRyeSB7CisgICAgLXdlYmtpdC1w
YWRkaW5nLXN0YXJ0OiA1cHg7CisgICAgLXdlYmtpdC1wYWRkaW5nLWVuZDogNXB4OworICAgIGN1
cnNvcjogcG9pbnRlcjsKKyAgICBkaXNwbGF5OyB0YWJsZS1yb3c7CisgICAgbGluZS1oZWlnaHQ6
IDEuMmVtOworfQorCisuc2VsZWN0ZWQtbW9udGgteWVhciB7CisgICAgYmFja2dyb3VuZC1jb2xv
cjogaGlnaGxpZ2h0OworICAgIGNvbG9yOiBoaWdobGlnaHR0ZXh0OworICAgIHRleHQtc2hhZG93
OiBub25lOworfQorCitAbWVkaWEgKHBvaW50ZXI6Y29hcnNlKSB7CisKKyAgICAubW9udGgtc2Vs
ZWN0b3ItcG9wdXAgeworICAgICAgICBtYXgtaGVpZ2h0OiAxNTBweDsKKyAgICB9CisKKyAgICAu
bW9udGgtc2VsZWN0b3ItcG9wdXAtZW50cnkgeworICAgICAgICBsaW5lLWhlaWdodDogMzBweDsK
KyAgICB9Cit9CisKKy5tb250aC1zZWxlY3Rvci13YWxsIHsKKyAgICBkaXNwbGF5OiBub25lOwor
ICAgIGhlaWdodDogMTAwJTsKKyAgICBsZWZ0OiAwcHg7CisgICAgcG9zaXRpb246IGFic29sdXRl
OworICAgIHRvcDogMHB4OworICAgIHdpZHRoOiAxMDAlOworfQorCisueWVhci1tb250aC1idXR0
b24tbGVmdCB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisueWVhci1tb250aC1i
dXR0b24tcmlnaHQgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKK30KKworLmRheXMtYXJl
YS1jb250YWluZXIgeworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlcjog
c29saWQgMXB4IGJsYWNrOworICAgIG1hcmdpbi1ib3R0b206IDRweDsKKyAgICBtYXJnaW4tdG9w
OiA0cHg7CisgICAgb3ZlcmZsb3c6IGhpZGRlbjsKK30KKworLmRheXMtYXJlYSB7IC8qIDx0YWJs
ZT4gKi8KKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXItY29sbGFwc2U6
IHNlcGFyYXRlOworICAgIGJvcmRlci1zcGFjaW5nOiAwcHg7CisgICAgZm9udDogLXdlYmtpdC1z
bWFsbC1jb250cm9sOworICAgIC8qIHRhYmxlLWxheW91dDpmaXhlZCBhbmQgd2lkdGg6MTAwJSBh
cmUgYWRkZWQgaW4gdGhlIEpTIGNvZGUuICovCit9CisKKy5kYXktbGFiZWwgeyAvKiA8dGg+ICov
CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIGJhY2tncm91bmQtY29s
b3I6ICNlM2U5ZmY7CisgICAgYm9yZGVyLWxlZnQtY29sb3I6ICNmMGY0ZmY7CisgICAgYm9yZGVy
LXRvcC1jb2xvcjogI2YwZjRmZjsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjZDBkNGYwOworICAg
IGNvbG9yOiAjMjBjOworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CisgICAgdGV4dC1hbGlnbjog
Y2VudGVyOworfQorCisuZGF5IHsgLyogPHRkPiAqLworICAgIHBhZGRpbmc6IDFweDsKKyAgICB0
ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgYm9y
ZGVyOiAxcHggc29saWQgd2hpdGU7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94
OworfQorCitAbWVkaWEgKHBvaW50ZXI6Y29hcnNlKSB7CisgICAgLmRheSB7CisgICAgICAgIG1p
bi13aWR0aDogMjhweDsKKyAgICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7CisgICAgfQorfQorCisu
YXZhaWxhYmxlIHsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7CisgICAgZm9udC13ZWlnaHQ6IDcwMDsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB3aGl0
ZTsKKyAgICBib3JkZXItcmFkaXVzOiA1cHg7CisgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwg
MC4ycyBlYXNlOworfQorCisubm90LXRoaXMtbW9udGggeworICAgIGNvbG9yOiBncmF5dGV4dDsK
KyAgICBmb250LXdlaWdodDogNDAwOworICAgIHRleHQtc2hhZG93OiBub25lOworfQorCisuYXZh
aWxhYmxlLmRheS1zZWxlY3RlZCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaGlnaGxpZ2h0Owor
ICAgIGNvbG9yOiBoaWdobGlnaHR0ZXh0OworICAgIHRleHQtc2hhZG93OiBub25lOworfQorCisu
dW5hdmFpbGFibGUgeworICAgIGN1cnNvcjogZGVmYXVsdDsKKyAgICBjb2xvcjogZ3JheXRleHQ7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVl
OworICAgIC13ZWJraXQtdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZTsKK30KKwor
LnVuYXZhaWxhYmxlLmRheS1zZWxlY3RlZCB7CisgICAgYm9yZGVyOiAxcHggc29saWQgaGlnaGxp
Z2h0OworfQorCisuY2FuY2VsLWJ1dHRvbiB7CisgICAgZmxvYXQ6IHJpZ2h0OworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXIu
anMgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRhclBpY2tlci5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45M2VkNzIxZDYwMjBhODgwNmFhZjQwODJjY2U0NTMwNTgzMjE2Y2VhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2Fs
ZW5kYXJQaWNrZXIuanMKQEAgLTAsMCArMSwxMjM5IEBACisidXNlIHN0cmljdCI7CisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gRklYTUU6
CisvLyAgLSBUb3VjaCBldmVudAorCisvKioKKyAqIENTUyBjbGFzcyBuYW1lcy4KKyAqCisgKiBA
ZW51bSB7c3RyaW5nfQorICovCit2YXIgQ2xhc3NOYW1lcyA9IHsKKyAgICBBdmFpbGFibGU6ICJh
dmFpbGFibGUiLAorICAgIENhbmNlbEJ1dHRvbjogImNhbmNlbC1idXR0b24iLAorICAgIENsZWFy
QnV0dG9uOiAiY2xlYXItYnV0dG9uIiwKKyAgICBEYXk6ICJkYXkiLAorICAgIERheUxhYmVsOiAi
ZGF5LWxhYmVsIiwKKyAgICBEYXlMYWJlbENvbnRhaW5lcjogImRheS1sYWJlbC1jb250YWluZXIi
LAorICAgIERheXNBcmVhOiAiZGF5cy1hcmVhIiwKKyAgICBEYXlzQXJlYUNvbnRhaW5lcjogImRh
eXMtYXJlYS1jb250YWluZXIiLAorICAgIE1vbnRoU2VsZWN0b3I6ICJtb250aC1zZWxlY3RvciIs
CisgICAgTW9udGhTZWxlY3RvckJveDogIm1vbnRoLXNlbGVjdG9yLWJveCIsCisgICAgTW9udGhT
ZWxlY3RvclBvcHVwOiAibW9udGgtc2VsZWN0b3ItcG9wdXAiLAorICAgIE1vbnRoU2VsZWN0b3JQ
b3B1cENvbnRlbnRzOiAibW9udGgtc2VsZWN0b3ItcG9wdXAtY29udGVudHMiLAorICAgIE1vbnRo
U2VsZWN0b3JQb3B1cEVudHJ5OiAibW9udGgtc2VsZWN0b3ItcG9wdXAtZW50cnkiLAorICAgIE1v
bnRoU2VsZWN0b3JQb3B1cFNpemVyOiAibW9udGgtc2VsZWN0b3ItcG9wdXAtc2l6ZXIiLAorICAg
IE1vbnRoU2VsZWN0b3JXYWxsOiAibW9udGgtc2VsZWN0b3Itd2FsbCIsCisgICAgTm9Gb2N1c1Jp
bmc6ICJuby1mb2N1cy1yaW5nIiwKKyAgICBOb3RUaGlzTW9udGg6ICJub3QtdGhpcy1tb250aCIs
CisgICAgU2VsZWN0ZWQ6ICJkYXktc2VsZWN0ZWQiLAorICAgIFNlbGVjdGVkTW9udGhZZWFyOiAi
c2VsZWN0ZWQtbW9udGgteWVhciIsCisgICAgVG9kYXlCdXR0b246ICJ0b2RheS1idXR0b24iLAor
ICAgIFRvZGF5Q2xlYXJBcmVhOiAidG9kYXktY2xlYXItYXJlYSIsCisgICAgVW5hdmFpbGFibGU6
ICJ1bmF2YWlsYWJsZSIsCisgICAgV2Vla0NvbnRhaW5lcjogIndlZWstY29udGFpbmVyIiwKKyAg
ICBZZWFyTW9udGhBcmVhOiAieWVhci1tb250aC1hcmVhIiwKKyAgICBZZWFyTW9udGhCdXR0b246
ICJ5ZWFyLW1vbnRoLWJ1dHRvbiIsCisgICAgWWVhck1vbnRoQnV0dG9uTGVmdDogInllYXItbW9u
dGgtYnV0dG9uLWxlZnQiLAorICAgIFllYXJNb250aEJ1dHRvblJpZ2h0OiAieWVhci1tb250aC1i
dXR0b24tcmlnaHQiLAorICAgIFllYXJNb250aFVwcGVyOiAieWVhci1tb250aC11cHBlciIKK307
CisKKy8qKgorICogQHR5cGUge09iamVjdH0KKyAqLwordmFyIGdsb2JhbCA9IHsKKyAgICBhcmd1
bWVudHNSZWNlaXZlZDogZmFsc2UsCisgICAgaGFkS2V5RXZlbnQ6IGZhbHNlLAorICAgIHBhcmFt
czogbnVsbAorfTsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLy8gVXRpbGl0eSBmdW5jdGlvbnMKKworLyoqCisg
KiBAcGFyYW0geyFzdHJpbmd9IGlkCisgKi8KK2Z1bmN0aW9uICQoaWQpIHsKKyAgICByZXR1cm4g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworfQorCitmdW5jdGlvbiBiaW5kKGZ1bmMsIGNv
bnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBmdW5jLmFw
cGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKK30KKworLyoqCisgKiBAcGFyYW0geyFz
dHJpbmd9IHRhZ05hbWUKKyAqIEBwYXJhbSB7c3RyaW5nPX0gb3B0X2NsYXNzCisgKiBAcGFyYW0g
e3N0cmluZz19IG9wdF90ZXh0CisgKiBAcmV0dXJuIHshRWxlbWVudH0KKyAqLworZnVuY3Rpb24g
Y3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9wdF90ZXh0KSB7CisgICAgdmFyIGVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpOworICAgIGlmIChvcHRfY2xh
c3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJjbGFzcyIsIG9wdF9jbGFzcyk7Cisg
ICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJuIGVsZW1lbnQ7Cit9CisKKy8qKgor
ICogQHJldHVybiB7IXN0cmluZ30gbG93ZXJjYXNlIGxvY2FsZSBuYW1lLiBlLmcuICJlbi11cyIK
KyAqLworZnVuY3Rpb24gZ2V0TG9jYWxlKCkgeworICAgIHJldHVybiAoZ2xvYmFsLnBhcmFtcy5s
b2NhbGUgfHwgImVuLXVzIikudG9Mb3dlckNhc2UoKTsKK30KKworLyoqCisgKiBAcmV0dXJuIHsh
c3RyaW5nfSBsb3dlcmNhc2UgbGFuZ3VhZ2UgY29kZS4gZS5nLiAiZW4iCisgKi8KK2Z1bmN0aW9u
IGdldExhbmd1YWdlKCkgeworICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKTsKKyAgICB2YXIg
cmVzdWx0ID0gbG9jYWxlLm1hdGNoKC9eKFthLXpdKykvKTsKKyAgICBpZiAoIXJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuICJlbiI7CisgICAgcmV0dXJuIHJlc3VsdFsxXTsKK30KKworLyoKKyAqIEBj
b25zdAorICogQHR5cGUge251bWJlcn0KKyAqLwordmFyIEltcGVyaWFsRXJhTGltaXQgPSAyMDg3
OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgorICogQHBhcmFtIHshbnVtYmVyfSBt
b250aAorICogQHJldHVybiB7IXN0cmluZ30KKyAqLworZnVuY3Rpb24gZm9ybWF0SmFwYW5lc2VJ
bXBlcmlhbEVyYSh5ZWFyLCBtb250aCkgeworICAgIC8vIFdlIGRvbid0IHNob3cgYW4gaW1wZXJp
YWwgZXJhIGlmIGl0IGlzIGdyZWF0ZXIgdGhhbiA5OSBiZWNhc2Ugb2Ygc3BhY2UKKyAgICAvLyBs
aW1pdGF0aW9uLgorICAgIGlmICh5ZWFyID4gSW1wZXJpYWxFcmFMaW1pdCkKKyAgICAgICAgcmV0
dXJuICIiOworICAgIGlmICh5ZWFyID4gMTk4OSkKKyAgICAgICAgcmV0dXJuICIo5bmz5oiQIiAr
ICh5ZWFyIC0gMTk4OCkgKyAi5bm0KSI7CisgICAgaWYgKHllYXIgPT0gMTk4OSkKKyAgICAgICAg
cmV0dXJuICIo5bmz5oiQ5YWD5bm0KSI7CisgICAgaWYgKHllYXIgPj0gMTkyNykKKyAgICAgICAg
cmV0dXJuICIo5pit5ZKMIiArICh5ZWFyIC0gMTkyNSkgKyAi5bm0KSI7CisgICAgaWYgKHllYXIg
PiAxOTEyKQorICAgICAgICByZXR1cm4gIijlpKfmraMiICsgKHllYXIgLSAxOTExKSArICLlubQp
IjsKKyAgICBpZiAoeWVhciA9PSAxOTEyICYmIG1vbnRoID49IDcpCisgICAgICAgIHJldHVybiAi
KOWkp+ato+WFg+W5tCkiOworICAgIGlmICh5ZWFyID4gMTg2OCkKKyAgICAgICAgcmV0dXJuICIo
5piO5rK7IiArICh5ZWFyIC0gMTg2NykgKyAi5bm0KSI7CisgICAgaWYgKHllYXIgPT0gMTg2OCkK
KyAgICAgICAgcmV0dXJuICIo5piO5rK75YWD5bm0KSI7CisgICAgcmV0dXJuICIiOworfQorCisv
KioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgorICogQHBhcmFtIHshbnVtYmVyfSBtb250aAor
ICogQHJldHVybiB7IXN0cmluZ30KKyAqLworZnVuY3Rpb24gZm9ybWF0WWVhck1vbnRoKHllYXIs
IG1vbnRoKSB7CisgICAgLy8gRklYTUU6IE5lZWQgbG9jYWxpemVkIG51bWJlcj8KKyAgICB2YXIg
eWVhclN0cmluZyA9IFN0cmluZyh5ZWFyKTsKKyAgICB2YXIgbW9udGhTdHJpbmcgPSBnbG9iYWwu
cGFyYW1zLm1vbnRoTGFiZWxzW21vbnRoXTsKKyAgICBzd2l0Y2ggKGdldExhbmd1YWdlKCkpIHsK
KyAgICBjYXNlICJldSI6CisgICAgY2FzZSAiZmlsIjoKKyAgICBjYXNlICJsdCI6CisgICAgY2Fz
ZSAibWwiOgorICAgIGNhc2UgIm10IjoKKyAgICBjYXNlICJ0bCI6CisgICAgY2FzZSAidXIiOgor
ICAgICAgICByZXR1cm4geWVhclN0cmluZyArICIgIiArIG1vbnRoU3RyaW5nOworICAgIGNhc2Ug
Imh1IjoKKyAgICAgICAgcmV0dXJuIHllYXJTdHJpbmcgKyAiLiAiICsgbW9udGhTdHJpbmc7Cisg
ICAgY2FzZSAiamEiOgorICAgICAgICByZXR1cm4geWVhclN0cmluZyArICLlubQiICsgZm9ybWF0
SmFwYW5lc2VJbXBlcmlhbEVyYSh5ZWFyLCBtb250aCkgKyAiICIgKyBtb250aFN0cmluZzsKKyAg
ICBjYXNlICJ6aCI6CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuW5tCIgKyBtb250aFN0
cmluZzsKKyAgICBjYXNlICJrbyI6CisgICAgICAgIHJldHVybiB5ZWFyU3RyaW5nICsgIuuFhCAi
ICsgbW9udGhTdHJpbmc7CisgICAgY2FzZSAibHYiOgorICAgICAgICByZXR1cm4geWVhclN0cmlu
ZyArICIuIGcuICIgKyBtb250aFN0cmluZzsKKyAgICBjYXNlICJwdCI6CisgICAgICAgIHJldHVy
biBtb250aFN0cmluZyArICIgZGUgIiArIHllYXJTdHJpbmc7CisgICAgY2FzZSAic3IiOgorICAg
ICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAiLiAiICsgeWVhclN0cmluZzsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gbW9udGhTdHJpbmcgKyAiICIgKyB5ZWFyU3RyaW5nOworICAgIH0K
K30KKworLyoqCisgKiBAcGFyYW0ge3N0cmluZz19IG9wdF9jdXJyZW50CisgKiBAcmV0dXJuIHsh
RGF0ZX0KKyAqLworZnVuY3Rpb24gcGFyc2VEYXRlU3RyaW5nKG9wdF9jdXJyZW50KSB7CisgICAg
aWYgKG9wdF9jdXJyZW50KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBvcHRfY3VycmVudC5tYXRj
aCgvKFxkKyktKFxkKyktKFxkKykvKTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAg
IHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhOdW1iZXIocmVzdWx0WzFdKSwgTnVtYmVyKHJlc3Vs
dFsyXSkgLSAxLCBOdW1iZXIocmVzdWx0WzNdKSkpOworICAgIH0KKyAgICB2YXIgbm93ID0gbmV3
IERhdGUoKTsKKyAgICAvLyBDcmVhdGUgVVRDIGRhdGUgd2l0aCBzYW1lIG51bWJlcnMgYXMgbG9j
YWwgZGF0ZS4KKyAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMobm93LmdldEZ1bGxZZWFyKCks
IG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpKSk7Cit9CisKKy8qKgorICogQHBhcmFtIHsh
bnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCisgKiBAcGFyYW0geyFudW1i
ZXJ9IGRheQorICogQHJldHVybiB7IXN0cmluZ30KKyAqLworZnVuY3Rpb24gc2VyaWFsaXplRGF0
ZSh5ZWFyLCBtb250aCwgZGF5KSB7CisgICAgdmFyIHllYXJTdHJpbmcgPSBTdHJpbmcoeWVhcik7
CisgICAgaWYgKHllYXJTdHJpbmcubGVuZ3RoIDwgNCkKKyAgICAgICAgeWVhclN0cmluZyA9ICgi
MDAwIiArIHllYXJTdHJpbmcpLnN1YnN0cigtNCwgNCk7CisgICAgcmV0dXJuIHllYXJTdHJpbmcg
KyAiLSIgKyAoIjAiICsgKG1vbnRoICsgMSkpLnN1YnN0cigtMiwgMikgKyAiLSIgKyAoIjAiICsg
ZGF5KS5zdWJzdHIoLTIsIDIpOworfQorCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0gd2lkdGgK
KyAqIEBwYXJhbSB7IW51bWJlcn0gaGVpZ2h0CisgKi8KK2Z1bmN0aW9uIHJlc2l6ZVdpbmRvdyh3
aWR0aCwgaGVpZ2h0KSB7CisgICAgaWYgKHdpbmRvdy5mcmFtZUVsZW1lbnQpIHsKKyAgICAgICAg
d2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoICsgInB4IjsKKyAgICAgICAg
d2luZG93LmZyYW1lRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAicHgiOworICAgIH0g
ZWxzZSB7CisgICAgICAgIHdpbmRvdy5yZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKKyAgICB9Cit9
CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKy8vIEluaXRpYWxpemF0aW9uCisKKy8qKgorICogQHBhcmFtIHtFdmVu
dH0gZXZlbnQKKyAqLworZnVuY3Rpb24gaGFuZGxlTWVzc2FnZShldmVudCkgeworICAgIGlmIChn
bG9iYWwuYXJndW1lbnRzUmVjZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICBnbG9iYWwuYXJn
dW1lbnRzUmVjZWl2ZWQgPSB0cnVlOworICAgIGluaXRpYWxpemUoSlNPTi5wYXJzZShldmVudC5k
YXRhKSk7Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQoKSB7CisgICAgaWYg
KGdsb2JhbC5hcmd1bWVudHNSZWNlaXZlZCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBhcmdz
ID0geworICAgICAgICBtb250aExhYmVscyA6IFsibTEiLCAibTIiLCAibTMiLCAibTQiLCAibTUi
LCAibTYiLAorICAgICAgICAgICAgICAgICAgICAgICAibTciLCAibTgiLCAibTkiLCAibTEwIiwg
Im0xMSIsICJtMTIiXSwKKyAgICAgICAgZGF5TGFiZWxzIDogWyJkMSIsICJkMiIsICJkMyIsICJk
NCIsICJkNSIsICJkNiIsICJkNyJdLAorICAgICAgICB0b2RheUxhYmVsIDogIlRvZGF5IiwKKyAg
ICAgICAgY2xlYXJMYWJlbCA6ICJDbGVhciIsCisgICAgICAgIGNhbmNlbExhYmVsIDogIkNhbmNl
bCIsCisgICAgICAgIGN1cnJlbnRWYWx1ZSA6ICIiLAorICAgICAgICB3ZWVrU3RhcnREYXkgOiAw
LAorICAgICAgICBzdGVwIDogMQorICAgIH07CisgICAgaW5pdGlhbGl6ZShhcmdzKTsKK30KKwor
LyoqCisgKiBAcGFyYW0geyFPYmplY3R9IGFyZ3MKKyAqIEByZXR1cm4gez9zdHJpbmd9IEFuIGVy
cm9yIG1lc3NhZ2UsIG9yIG51bGwgaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBlcnJvcnMuCisgKi8K
K2Z1bmN0aW9uIHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpIHsKKyAgICBpZiAoIWFyZ3MubW9udGhM
YWJlbHMpCisgICAgICAgIHJldHVybiAiTm8gbW9udGhMYWJlbHMuIjsKKyAgICBpZiAoYXJncy5t
b250aExhYmVscy5sZW5ndGggIT0gMTIpCisgICAgICAgIHJldHVybiAibW9udGhMYWJlbHMgaXMg
bm90IGFuIGFycmF5IHdpdGggMTIgZWxlbWVudHMuIjsKKyAgICBpZiAoIWFyZ3MuZGF5TGFiZWxz
KQorICAgICAgICByZXR1cm4gIk5vIGRheUxhYmVscy4iOworICAgIGlmIChhcmdzLmRheUxhYmVs
cy5sZW5ndGggIT0gNykKKyAgICAgICAgcmV0dXJuICJkYXlMYWJlbHMgaXMgbm90IGFuIGFycmF5
IHdpdGggNyBlbGVtZW50cy4iOworICAgIGlmICghYXJncy5jbGVhckxhYmVsKQorICAgICAgICBy
ZXR1cm4gIk5vIGNsZWFyTGFiZWwuIjsKKyAgICBpZiAoIWFyZ3MudG9kYXlMYWJlbCkKKyAgICAg
ICAgcmV0dXJuICJObyB0b2RheUxhYmVsLiI7CisgICAgaWYgKGFyZ3Mud2Vla1N0YXJ0RGF5KSB7
CisgICAgICAgIGlmIChhcmdzLndlZWtTdGFydERheSA8IDAgfHwgYXJncy53ZWVrU3RhcnREYXkg
PiA2KQorICAgICAgICAgICAgcmV0dXJuICJJbnZhbGlkIHdlZWtTdGFydERheTogIiArIGFyZ3Mu
d2Vla1N0YXJ0RGF5OworICAgIH0KKyAgICByZXR1cm4gbnVsbDsKK30KKworLyoqCisgKiBAcGFy
YW0geyFPYmplY3R9IGFyZ3MKKyAqLworZnVuY3Rpb24gaW5pdGlhbGl6ZShhcmdzKSB7CisgICAg
dmFyIG1haW4gPSAkKCJtYWluIik7CisgICAgbWFpbi5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMu
Tm9Gb2N1c1JpbmcpOworCisgICAgdmFyIGVycm9yU3RyaW5nID0gdmFsaWRhdGVBcmd1bWVudHMo
YXJncyk7CisgICAgaWYgKGVycm9yU3RyaW5nKSB7CisgICAgICAgIG1haW4udGV4dENvbnRlbnQg
PSAiSW50ZXJuYWwgZXJyb3I6ICIgKyBlcnJvclN0cmluZzsKKyAgICAgICAgcmVzaXplV2luZG93
KG1haW4ub2Zmc2V0V2lkdGgsIG1haW4ub2Zmc2V0SGVpZ2h0KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBnbG9iYWwucGFyYW1zID0gYXJnczsKKyAgICAgICAgY2hlY2tMaW1pdHMoKTsKKyAgICAg
ICAgbGF5b3V0KCk7CisKKyAgICAgICAgdmFyIGluaXRpYWxEYXRlID0gcGFyc2VEYXRlU3RyaW5n
KGFyZ3MuY3VycmVudFZhbHVlKTsKKyAgICAgICAgaWYgKGluaXRpYWxEYXRlIDwgZ2xvYmFsLm1p
bmltdW1EYXRlKQorICAgICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWluaW11bURhdGU7
CisgICAgICAgIGVsc2UgaWYgKGluaXRpYWxEYXRlID4gZ2xvYmFsLm1heGltdW1EYXRlKQorICAg
ICAgICAgICAgaW5pdGlhbERhdGUgPSBnbG9iYWwubWF4aW11bURhdGU7CisgICAgICAgIGdsb2Jh
bC5kYXlzVGFibGUuc2VsZWN0RGF0ZShpbml0aWFsRGF0ZSk7CisKKyAgICAgICAgc2V0VGltZW91
dChmaXhXaW5kb3dTaXplLCAwKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGZpeFdpbmRvd1NpemUo
KSB7CisgICAgdmFyIHllYXJNb250aFJpZ2h0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRz
QnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25SaWdodClbMF07CisgICAgdmFy
IGRheXNBcmVhRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NO
YW1lcy5EYXlzQXJlYSlbMF07CisgICAgdmFyIGhlYWRlcnMgPSBkYXlzQXJlYUVsZW1lbnQuZ2V0
RWxlbWVudHNCeUNsYXNzTmFtZShDbGFzc05hbWVzLkRheUxhYmVsKTsKKyAgICB2YXIgbWF4Q2Vs
bFdpZHRoID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyArK2kp
IHsKKyAgICAgICAgaWYgKG1heENlbGxXaWR0aCA8IGhlYWRlcnNbaV0ub2Zmc2V0V2lkdGgpCisg
ICAgICAgICAgICBtYXhDZWxsV2lkdGggPSBoZWFkZXJzW2ldLm9mZnNldFdpZHRoOworICAgIH0K
KyAgICB2YXIgRGF5c0FyZWFDb250YWluZXJCb3JkZXIgPSAxOworICAgIHZhciBtYWluID0gJCgi
bWFpbiIpOworICAgIHZhciB5ZWFyTW9udGhFbmQ7CisgICAgdmFyIGRheXNBcmVhRW5kOworICAg
IGlmIChnbG9iYWwucGFyYW1zLmlzUlRMKSB7CisgICAgICAgIHZhciBzdGFydE9mZnNldCA9IG1h
aW4ub2Zmc2V0TGVmdCArIG1haW4ub2Zmc2V0V2lkdGg7CisgICAgICAgIHllYXJNb250aEVuZCA9
IHN0YXJ0T2Zmc2V0IC0geWVhck1vbnRoUmlnaHRFbGVtZW50Lm9mZnNldExlZnQ7CisgICAgICAg
IGRheXNBcmVhRW5kID0gc3RhcnRPZmZzZXQgLSAoZGF5c0FyZWFFbGVtZW50Lm9mZnNldExlZnQg
KyBkYXlzQXJlYUVsZW1lbnQub2Zmc2V0V2lkdGgpICsgbWF4Q2VsbFdpZHRoICogNyArIERheXNB
cmVhQ29udGFpbmVyQm9yZGVyOworICAgIH0gZWxzZSB7CisgICAgICAgIHllYXJNb250aEVuZCA9
IHllYXJNb250aFJpZ2h0RWxlbWVudC5vZmZzZXRMZWZ0ICsgeWVhck1vbnRoUmlnaHRFbGVtZW50
Lm9mZnNldFdpZHRoOworICAgICAgICBkYXlzQXJlYUVuZCA9IGRheXNBcmVhRWxlbWVudC5vZmZz
ZXRMZWZ0ICsgbWF4Q2VsbFdpZHRoICogNyArIERheXNBcmVhQ29udGFpbmVyQm9yZGVyOworICAg
IH0KKworICAgIHZhciBtYXhFbmQgPSBNYXRoLm1heCh5ZWFyTW9udGhFbmQsIGRheXNBcmVhRW5k
KTsKKyAgICB2YXIgTWFpblBhZGRpbmcgPSA2OworICAgIHZhciBNYWluQm9yZGVyID0gMTsKKyAg
ICB2YXIgZGVzaXJlZEJvZHlXaWR0aCA9IG1heEVuZCArIE1haW5QYWRkaW5nICsgTWFpbkJvcmRl
cjsKKworICAgIHZhciBtYWluSGVpZ2h0ID0gbWFpbi5vZmZzZXRIZWlnaHQ7CisgICAgbWFpbi5z
dHlsZS53aWR0aCA9ICJhdXRvIjsKKyAgICBkYXlzQXJlYUVsZW1lbnQuc3R5bGUud2lkdGggPSAi
MTAwJSI7CisgICAgZGF5c0FyZWFFbGVtZW50LnN0eWxlLnRhYmxlTGF5b3V0ID0gImZpeGVkIjsK
KyAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKENsYXNzTmFtZXMuWWVhck1vbnRo
VXBwZXIpWzBdLnN0eWxlLmRpc3BsYXkgPSAiLXdlYmtpdC1ib3giOworICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRzQnlDbGFzc05hbWUoQ2xhc3NOYW1lcy5Nb250aFNlbGVjdG9yQm94KVswXS5zdHls
ZS5kaXNwbGF5ID0gImJsb2NrIjsKKyAgICByZXNpemVXaW5kb3coZGVzaXJlZEJvZHlXaWR0aCwg
bWFpbkhlaWdodCk7Cit9CisKK2Z1bmN0aW9uIGNoZWNrTGltaXRzKCkgeworICAgIC8vIEhhcmQg
bGltaXRzIG9mIHR5cGU9ZGF0ZS4gU2VlIFdlYkNvcmUvcGxhdGZvcm0vRGF0ZUNvbXBvbmVudHMu
aC4KKyAgICBnbG9iYWwubWluaW11bURhdGUgPSBuZXcgRGF0ZSgtNjIxMzU1OTY4MDAwMDAuMCk7
CisgICAgZ2xvYmFsLm1heGltdW1EYXRlID0gbmV3IERhdGUoODY0MDAwMDAwMDAwMDAwMC4wKTsK
KyAgICAvLyBTZWUgV2ViQ29yZS9odG1sL0RhdGVJbnB1dFR5cGUuY3BwLgorICAgIGdsb2JhbC5z
dGVwID0gODY0MDAwMDA7CisKKyAgICBpZiAoZ2xvYmFsLnBhcmFtcy5taW4pIHsKKyAgICAgICAg
Ly8gV2UgYXNzdW1lIHBhcmFtcy5taW4gaXMgYSB2YWxpZCBkYXRlLgorICAgICAgICBnbG9iYWwu
bWluaW11bURhdGUgPSBwYXJzZURhdGVTdHJpbmcoZ2xvYmFsLnBhcmFtcy5taW4pOworICAgIH0K
KyAgICBpZiAoZ2xvYmFsLnBhcmFtcy5tYXgpIHsKKyAgICAgICAgLy8gV2UgYXNzdW1lIHBhcmFt
cy5tYXggaXMgYSB2YWxpZCBkYXRlLgorICAgICAgICBnbG9iYWwubWF4aW11bURhdGUgPSBwYXJz
ZURhdGVTdHJpbmcoZ2xvYmFsLnBhcmFtcy5tYXgpOworICAgIH0KKyAgICBpZiAoZ2xvYmFsLnBh
cmFtcy5zdGVwKQorICAgICAgICBnbG9iYWwuc3RlcCAqPSBnbG9iYWwucGFyYW1zLnN0ZXA7Cit9
CisKK2Z1bmN0aW9uIGxheW91dCgpIHsKKyAgICBpZiAoZ2xvYmFsLnBhcmFtcy5pc1JUTCkKKyAg
ICAgICAgZG9jdW1lbnQuYm9keS5kaXIgPSAicnRsIjsKKyAgICBlbHNlCisgICAgICAgIGRvY3Vt
ZW50LmJvZHkuZGlyID0gImx0ciI7CisgICAgdmFyIG1haW4gPSAkKCJtYWluIik7CisgICAgdmFy
IHBhcmFtcyA9IGdsb2JhbC5wYXJhbXM7CisgICAgbWFpbi5yZW1vdmVDaGlsZChtYWluLmZpcnN0
Q2hpbGQpOworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGhh
bmRsZUdsb2JhbEtleSwgZmFsc2UpOworCisgICAgZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIg
PSBuZXcgWWVhck1vbnRoQ29udHJvbGxlcigpOworICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9s
bGVyLmF0dGFjaFRvKG1haW4pOworICAgIGdsb2JhbC5kYXlzVGFibGUgPSBuZXcgRGF5c1RhYmxl
KCk7CisgICAgZ2xvYmFsLmRheXNUYWJsZS5hdHRhY2hUbyhtYWluKTsKKyAgICBsYXlvdXRCdXR0
b25zKG1haW4pOworfQorCisvKioKKyAqIEBwYXJhbSB7RWxlbWVudH0gbWFpbgorICovCitmdW5j
dGlvbiBsYXlvdXRCdXR0b25zKG1haW4pIHsKKyAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxl
bWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5Ub2RheUNsZWFyQXJlYSk7CisgICAgZ2xvYmFsLnRvZGF5
ID0gY3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlRvZGF5QnV0dG9uKTsKKyAgICBn
bG9iYWwudG9kYXkudHlwZSA9ICJidXR0b24iOworICAgIGdsb2JhbC50b2RheS52YWx1ZSA9IGds
b2JhbC5wYXJhbXMudG9kYXlMYWJlbDsKKyAgICBnbG9iYWwudG9kYXkuYWRkRXZlbnRMaXN0ZW5l
cigiY2xpY2siLCBoYW5kbGVUb2RheSwgZmFsc2UpOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGls
ZChnbG9iYWwudG9kYXkpOworICAgIGdsb2JhbC5jbGVhciA9IG51bGw7CisgICAgaWYgKCFnbG9i
YWwucGFyYW1zLnJlcXVpcmVkKSB7CisgICAgICAgIGdsb2JhbC5jbGVhciA9IGNyZWF0ZUVsZW1l
bnQoImlucHV0IiwgQ2xhc3NOYW1lcy5DbGVhckJ1dHRvbik7CisgICAgICAgIGdsb2JhbC5jbGVh
ci50eXBlID0gImJ1dHRvbiI7CisgICAgICAgIGdsb2JhbC5jbGVhci52YWx1ZSA9IGdsb2JhbC5w
YXJhbXMuY2xlYXJMYWJlbDsKKyAgICAgICAgZ2xvYmFsLmNsZWFyLmFkZEV2ZW50TGlzdGVuZXIo
ImNsaWNrIiwgaGFuZGxlQ2xlYXIsIGZhbHNlKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENo
aWxkKGdsb2JhbC5jbGVhcik7CisgICAgfQorICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFpbmVy
KTsKKworICAgIGdsb2JhbC5sYXN0Rm9jdXNhYmxlQ29udHJvbCA9IGdsb2JhbC5jbGVhciB8fCBn
bG9iYWwudG9kYXk7Cit9CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyoqCisgKiBAY29uc3RydWN0b3IKKyAq
LworZnVuY3Rpb24gWWVhck1vbnRoQ29udHJvbGxlcigpIHsKKyAgICAvKioKKyAgICAgKiBAdHlw
ZSB7IW51bWJlcn0KKyAgICAgKi8KKyAgICB0aGlzLl9jdXJyZW50WWVhciA9IC0xOworICAgIC8q
KgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLworICAgIHRoaXMuX2N1cnJlbnRNb250
aCA9IC0xOworfQorCisvKioKKyAqIEBwYXJhbSB7IUVsZW1lbnR9IG1haW4KKyAqLworWWVhck1v
bnRoQ29udHJvbGxlci5wcm90b3R5cGUuYXR0YWNoVG8gPSBmdW5jdGlvbihtYWluKSB7CisgICAg
dmFyIG91dGVyQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5ZZWFy
TW9udGhBcmVhKTsKKworICAgIHZhciBpbm5lckNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoImRp
diIsIENsYXNzTmFtZXMuWWVhck1vbnRoVXBwZXIpOworICAgIG91dGVyQ29udGFpbmVyLmFwcGVu
ZENoaWxkKGlubmVyQ29udGFpbmVyKTsKKworICAgIHRoaXMuX2F0dGFjaExlZnRCdXR0b25zVG8o
aW5uZXJDb250YWluZXIpOworCisgICAgdmFyIGJveCA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENs
YXNzTmFtZXMuTW9udGhTZWxlY3RvckJveCk7CisgICAgaW5uZXJDb250YWluZXIuYXBwZW5kQ2hp
bGQoYm94KTsKKyAgICAvLyBXZSBjYW4ndCB1c2UgPHNlbGVjdD4gcG9wdXAgaW4gUGFnZVBvcHVw
LgorICAgIHRoaXMuX21vbnRoUG9wdXAgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVz
Lk1vbnRoU2VsZWN0b3JQb3B1cCk7CisgICAgdGhpcy5fbW9udGhQb3B1cC5hZGRFdmVudExpc3Rl
bmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlWWVhck1vbnRoQ2hhbmdlLCB0aGlzKSwgZmFs
c2UpOworICAgIHRoaXMuX21vbnRoUG9wdXAuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJp
bmQodGhpcy5faGFuZGxlTW9udGhQb3B1cEtleSwgdGhpcyksIGZhbHNlKTsKKyAgICB0aGlzLl9t
b250aFBvcHVwLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIGJpbmQodGhpcy5faGFuZGxl
TW91c2VNb3ZlLCB0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlvbk9uTW91
c2VNb3ZlID0gdHJ1ZTsKKyAgICB0aGlzLl9tb250aFBvcHVwLnRhYkluZGV4ID0gMDsKKyAgICB0
aGlzLl9tb250aFBvcHVwQ29udGVudHMgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVz
Lk1vbnRoU2VsZWN0b3JQb3B1cENvbnRlbnRzKTsKKyAgICB0aGlzLl9tb250aFBvcHVwLmFwcGVu
ZENoaWxkKHRoaXMuX21vbnRoUG9wdXBDb250ZW50cyk7CisgICAgLy8gU2l6ZXIgdXNlZCB0byBk
ZXRlcm1pbmUgdGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydCBpbiB0aGUgcG9wdXAgbWVudS4KKyAg
ICB2YXIgc2l6ZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0
b3JQb3B1cFNpemVyKTsKKyAgICB0aGlzLl9tb250aFBvcHVwLmFwcGVuZENoaWxkKHNpemVyKTsK
KyAgICBib3guYXBwZW5kQ2hpbGQodGhpcy5fbW9udGhQb3B1cCk7CisgICAgdGhpcy5fbW9udGgg
PSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3IpOworICAgIHRo
aXMuX21vbnRoLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9zaG93UG9wdXAs
IHRoaXMpLCBmYWxzZSk7CisgICAgYm94LmFwcGVuZENoaWxkKHRoaXMuX21vbnRoKTsKKworICAg
IHRoaXMuX2F0dGFjaFJpZ2h0QnV0dG9uc1RvKGlubmVyQ29udGFpbmVyKTsKKyAgICBtYWluLmFw
cGVuZENoaWxkKG91dGVyQ29udGFpbmVyKTsKKworICAgIHRoaXMuX3dhbGwgPSBjcmVhdGVFbGVt
ZW50KCJkaXYiLCBDbGFzc05hbWVzLk1vbnRoU2VsZWN0b3JXYWxsKTsKKyAgICB0aGlzLl93YWxs
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9jbG9zZVBvcHVwLCB0aGlzKSwg
ZmFsc2UpOworICAgIG1haW4uYXBwZW5kQ2hpbGQodGhpcy5fd2FsbCk7CisKKyAgICB2YXIgbWF4
aW11bVllYXIgPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKTsKKyAgICB2YXIg
bWF4V2lkdGggPSAwOworICAgIGZvciAodmFyIG0gPSAwOyBtIDwgMTI7ICsrbSkgeworICAgICAg
ICB0aGlzLl9tb250aC50ZXh0Q29udGVudCA9IGZvcm1hdFllYXJNb250aChtYXhpbXVtWWVhciwg
bSk7CisgICAgICAgIG1heFdpZHRoID0gTWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9m
ZnNldFdpZHRoKTsKKyAgICB9CisgICAgaWYgKGdldExhbmd1YWdlKCkgPT0gImphIiAmJiBJbXBl
cmlhbEVyYUxpbWl0IDwgbWF4aW11bVllYXIpIHsKKyAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0g
PCAxMjsgKyttKSB7CisgICAgICAgICAgICB0aGlzLl9tb250aC50ZXh0Q29udGVudCA9IGZvcm1h
dFllYXJNb250aChJbXBlcmlhbEVyYUxpbWl0LCBtKTsKKyAgICAgICAgICAgIG1heFdpZHRoID0g
TWF0aC5tYXgobWF4V2lkdGgsIHRoaXMuX21vbnRoLm9mZnNldFdpZHRoKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB0aGlzLl9tb250aC5zdHlsZS5taW5XaWR0aCA9IG1heFdpZHRoICsgJ3B4JzsK
KworICAgIGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRyb2wgPSB0aGlzLl9sZWZ0MjsgLy8gRklY
TUU6IFNob3VsZCBpdCBiZSB0aGlzLm1vbnRoPworfTsKKworWWVhck1vbnRoQ29udHJvbGxlci5h
ZGRUZW5ZZWFyc0J1dHRvbnMgPSBmYWxzZTsKKworLyoqCisgKiBAcGFyYW0geyFFbGVtZW50fSBw
YXJlbnQKKyAqLworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUuX2F0dGFjaExlZnRCdXR0
b25zVG8gPSBmdW5jdGlvbihwYXJlbnQpIHsKKyAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxl
bWVudCgiZGl2IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b25MZWZ0KTsKKyAgICBwYXJlbnQu
YXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKworICAgIGlmIChZZWFyTW9udGhDb250cm9sbGVyLmFk
ZFRlblllYXJzQnV0dG9ucykgeworICAgICAgICB0aGlzLl9sZWZ0MyA9IGNyZWF0ZUVsZW1lbnQo
ImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOworICAgICAgICB0aGlzLl9sZWZ0
My50eXBlID0gImJ1dHRvbiI7CisgICAgICAgIHRoaXMuX2xlZnQzLnZhbHVlID0gIjw8PCI7Cisg
ICAgICAgIHRoaXMuX2xlZnQzLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9o
YW5kbGVCdXR0b25DbGljaywgdGhpcyksIGZhbHNlKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKHRoaXMuX2xlZnQzKTsKKyAgICB9CisKKyAgICB0aGlzLl9sZWZ0MiA9IGNyZWF0ZUVs
ZW1lbnQoImlucHV0IiwgQ2xhc3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOworICAgIHRoaXMuX2xl
ZnQyLnR5cGUgPSAiYnV0dG9uIjsKKyAgICB0aGlzLl9sZWZ0Mi52YWx1ZSA9ICI8PCI7CisgICAg
dGhpcy5fbGVmdDIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1
dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOworICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlz
Ll9sZWZ0Mik7CisKKyAgICB0aGlzLl9sZWZ0MSA9IGNyZWF0ZUVsZW1lbnQoImlucHV0IiwgQ2xh
c3NOYW1lcy5ZZWFyTW9udGhCdXR0b24pOworICAgIHRoaXMuX2xlZnQxLnR5cGUgPSAiYnV0dG9u
IjsKKyAgICB0aGlzLl9sZWZ0MS52YWx1ZSA9ICI8IjsKKyAgICB0aGlzLl9sZWZ0MS5hZGRFdmVu
dExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhpcy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBm
YWxzZSk7CisgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuX2xlZnQxKTsKK307CisKKy8q
KgorICogQHBhcmFtIHshRWxlbWVudH0gcGFyZW50CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIu
cHJvdG90eXBlLl9hdHRhY2hSaWdodEJ1dHRvbnNUbyA9IGZ1bmN0aW9uKHBhcmVudCkgeworICAg
IHZhciBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVzLlllYXJNb250
aEJ1dHRvblJpZ2h0KTsKKyAgICBwYXJlbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKyAgICB0
aGlzLl9yaWdodDEgPSBjcmVhdGVFbGVtZW50KCJpbnB1dCIsIENsYXNzTmFtZXMuWWVhck1vbnRo
QnV0dG9uKTsKKyAgICB0aGlzLl9yaWdodDEudHlwZSA9ICJidXR0b24iOworICAgIHRoaXMuX3Jp
Z2h0MS52YWx1ZSA9ICI+IjsKKyAgICB0aGlzLl9yaWdodDEuYWRkRXZlbnRMaXN0ZW5lcigiY2xp
Y2siLCBiaW5kKHRoaXMuX2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOworICAgIGNv
bnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLl9yaWdodDEpOworCisgICAgdGhpcy5fcmlnaHQyID0g
Y3JlYXRlRWxlbWVudCgiaW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CisgICAg
dGhpcy5fcmlnaHQyLnR5cGUgPSAiYnV0dG9uIjsKKyAgICB0aGlzLl9yaWdodDIudmFsdWUgPSAi
Pj4iOworICAgIHRoaXMuX3JpZ2h0Mi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGJpbmQodGhp
cy5faGFuZGxlQnV0dG9uQ2xpY2ssIHRoaXMpLCBmYWxzZSk7CisgICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKHRoaXMuX3JpZ2h0Mik7CisKKyAgICBpZiAoWWVhck1vbnRoQ29udHJvbGxlci5hZGRU
ZW5ZZWFyc0J1dHRvbnMpIHsKKyAgICAgICAgdGhpcy5fcmlnaHQzID0gY3JlYXRlRWxlbWVudCgi
aW5wdXQiLCBDbGFzc05hbWVzLlllYXJNb250aEJ1dHRvbik7CisgICAgICAgIHRoaXMuX3JpZ2h0
My50eXBlID0gImJ1dHRvbiI7CisgICAgICAgIHRoaXMuX3JpZ2h0My52YWx1ZSA9ICI+Pj4iOwor
ICAgICAgICB0aGlzLl9yaWdodDMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMu
X2hhbmRsZUJ1dHRvbkNsaWNrLCB0aGlzKSwgZmFsc2UpOworICAgICAgICBjb250YWluZXIuYXBw
ZW5kQ2hpbGQodGhpcy5fcmlnaHQzKTsKKyAgICB9Cit9OworCisvKioKKyAqIEByZXR1cm4geyFu
dW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnllYXIgPSBmdW5jdGlv
bigpIHsKKyAgICByZXR1cm4gdGhpcy5fY3VycmVudFllYXI7Cit9OworCisvKioKKyAqIEByZXR1
cm4geyFudW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLm1vbnRoID0g
ZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRNb250aDsKK307CisKKy8qKgor
ICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCisgKi8K
K1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLnNldFllYXJNb250aCA9IGZ1bmN0aW9uKHll
YXIsIG1vbnRoKSB7CisgICAgdGhpcy5fY3VycmVudFllYXIgPSB5ZWFyOworICAgIHRoaXMuX2N1
cnJlbnRNb250aCA9IG1vbnRoOworICAgIHRoaXMuX3JlZHJhdygpOworfTsKKworWWVhck1vbnRo
Q29udHJvbGxlci5wcm90b3R5cGUuX3JlZHJhdyA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBtaW4g
PSBnbG9iYWwubWluaW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1pbmlt
dW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAgdmFyIG1heCA9IGdsb2JhbC5tYXhpbXVtRGF0ZS5n
ZXRVVENGdWxsWWVhcigpICogMTIgKyBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDTW9udGgoKTsK
KyAgICB2YXIgY3VycmVudCA9IHRoaXMuX2N1cnJlbnRZZWFyICogMTIgKyB0aGlzLl9jdXJyZW50
TW9udGg7CisgICAgaWYgKHRoaXMuX2xlZnQzKQorICAgICAgICB0aGlzLl9sZWZ0My5kaXNhYmxl
ZCA9IGN1cnJlbnQgLSAxMyA8IG1pbjsKKyAgICB0aGlzLl9sZWZ0Mi5kaXNhYmxlZCA9IGN1cnJl
bnQgLSAyIDwgbWluOworICAgIHRoaXMuX2xlZnQxLmRpc2FibGVkID0gY3VycmVudCAtIDEgPCBt
aW47CisgICAgdGhpcy5fcmlnaHQxLmRpc2FibGVkID0gY3VycmVudCArIDEgPiBtYXg7CisgICAg
dGhpcy5fcmlnaHQyLmRpc2FibGVkID0gY3VycmVudCArIDIgPiBtYXg7CisgICAgaWYgKHRoaXMu
X3JpZ2h0MykKKyAgICAgICAgdGhpcy5fcmlnaHQzLmRpc2FibGVkID0gY3VycmVudCArIDEzID4g
bWF4OworICAgIHRoaXMuX21vbnRoLmlubmVyVGV4dCA9IGZvcm1hdFllYXJNb250aCh0aGlzLl9j
dXJyZW50WWVhciwgdGhpcy5fY3VycmVudE1vbnRoKTsKKyAgICB3aGlsZSAodGhpcy5fbW9udGhQ
b3B1cENvbnRlbnRzLmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgdGhpcy5fbW9udGhQb3B1cENv
bnRlbnRzLnJlbW92ZUNoaWxkKHRoaXMuX21vbnRoUG9wdXBDb250ZW50cy5maXJzdENoaWxkKTsK
KworICAgIGZvciAodmFyIG0gPSBjdXJyZW50IC0gNjsgbSA8PSBjdXJyZW50ICsgNjsgbSsrKSB7
CisgICAgICAgIGlmIChtIDwgbWluIHx8IG0gPiBtYXgpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgdmFyIG9wdGlvbiA9IGNyZWF0ZUVsZW1lbnQoImRpdiIsIENsYXNzTmFtZXMuTW9u
dGhTZWxlY3RvclBvcHVwRW50cnksIGZvcm1hdFllYXJNb250aChNYXRoLmZsb29yKG0gLyAxMiks
IG0gJSAxMikpOworICAgICAgICBvcHRpb24uZGF0YXNldC52YWx1ZSA9IFN0cmluZyhNYXRoLmZs
b29yKG0gLyAxMikpICsgIi0iICsgU3RyaW5nKG0gJSAxMik7CisgICAgICAgIHRoaXMuX21vbnRo
UG9wdXBDb250ZW50cy5hcHBlbmRDaGlsZChvcHRpb24pOworICAgICAgICBpZiAobSA9PSBjdXJy
ZW50KQorICAgICAgICAgICAgb3B0aW9uLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3Rl
ZE1vbnRoWWVhcik7CisgICAgfQorfTsKKworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUu
X3Nob3dQb3B1cCA9IGZ1bmN0aW9uKCkgeworICAgIHRoaXMuX21vbnRoUG9wdXAuc3R5bGUuZGlz
cGxheSA9ICJibG9jayI7CisgICAgdGhpcy5fbW9udGhQb3B1cC5zdHlsZS56SW5kZXggPSAiMTAw
MCI7IC8vIExhcmdlciB0aGFuIHRoZSBkYXlzIGFyZWEuCisgICAgdGhpcy5fbW9udGhQb3B1cC5z
dHlsZS5sZWZ0ID0gdGhpcy5fbW9udGgub2Zmc2V0TGVmdCArICh0aGlzLl9tb250aC5vZmZzZXRX
aWR0aCAtIHRoaXMuX21vbnRoUG9wdXAub2Zmc2V0V2lkdGgpIC8gMiArICJweCI7CisgICAgdGhp
cy5fbW9udGhQb3B1cC5zdHlsZS50b3AgPSB0aGlzLl9tb250aC5vZmZzZXRUb3AgKyB0aGlzLl9t
b250aC5vZmZzZXRIZWlnaHQgKyAicHgiOworCisgICAgdGhpcy5fd2FsbC5zdHlsZS5kaXNwbGF5
ID0gImJsb2NrIjsKKyAgICB0aGlzLl93YWxsLnN0eWxlLnpJbmRleCA9ICI5OTkiOyAvLyBUaGlz
IHNob3VsZCBiZSBzbWFsbGVyIHRoYW4gdGhlIHotaW5kZXggb2YgbW9udGhQb3B1cC4KKworICAg
IHZhciBwb3B1cEhlaWdodCA9IHRoaXMuX21vbnRoUG9wdXAuY2xpZW50SGVpZ2h0OworICAgIHZh
ciBmdWxsSGVpZ2h0ID0gdGhpcy5fbW9udGhQb3B1cENvbnRlbnRzLmNsaWVudEhlaWdodDsKKyAg
ICBpZiAoZnVsbEhlaWdodCA+IHBvcHVwSGVpZ2h0KSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9
IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKKyAgICAgICAg
ICAgdmFyIGJvdHRvbSA9IHNlbGVjdGVkLm9mZnNldFRvcCArIHNlbGVjdGVkLmNsaWVudEhlaWdo
dDsKKyAgICAgICAgICAgaWYgKGJvdHRvbSA+IHBvcHVwSGVpZ2h0KQorICAgICAgICAgICAgICAg
dGhpcy5fbW9udGhQb3B1cC5zY3JvbGxUb3AgPSBib3R0b20gLSBwb3B1cEhlaWdodDsKKyAgICAg
ICAgfQorICAgICAgICB2YXIgc2l6ZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuIiArIENs
YXNzTmFtZXMuTW9udGhTZWxlY3RvclBvcHVwU2l6ZXIpOworICAgICAgICB2YXIgc2Nyb2xsV2lk
dGggPSB0aGlzLl9tb250aFBvcHVwQ29udGVudHMuY2xpZW50V2lkdGggLSBzaXplci5jbGllbnRX
aWR0aDsKKyAgICAgICAgaWYgKHNjcm9sbFdpZHRoID4gMCkKKyAgICAgICAgICAgIHRoaXMuX21v
bnRoUG9wdXAuc3R5bGUud2Via2l0UGFkZGluZ0VuZCA9IHNjcm9sbFdpZHRoICsgJ3B4JzsKKyAg
ICB9CisgICAgdGhpcy5fbW9udGhQb3B1cC5mb2N1cygpOworfTsKKworWWVhck1vbnRoQ29udHJv
bGxlci5wcm90b3R5cGUuX2Nsb3NlUG9wdXAgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLl9tb250
aFBvcHVwLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CisgICAgdGhpcy5fd2FsbC5zdHlsZS5kaXNw
bGF5ID0gIm5vbmUiOworICAgIHZhciBjb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9y
KCIuIiArIENsYXNzTmFtZXMuRGF5c0FyZWFDb250YWluZXIpOworICAgIGNvbnRhaW5lci5mb2N1
cygpOworfTsKKworLyoqCisgKiBAcmV0dXJuIHtFbGVtZW50fSBTZWxlY3RlZCBlbGVtZW50IGlu
IHRoZSBtb250aC15ZWFyIHBvcHVwLgorICovCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlw
ZS5fZ2V0U2VsZWN0aW9uID0gZnVuY3Rpb24oKQoreworICAgIHJldHVybiBkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCIuIiArIENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOworfQorCisvKioK
KyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90
eXBlLl9oYW5kbGVNb3VzZU1vdmUgPSBmdW5jdGlvbihldmVudCkKK3sKKyAgICBpZiAoIXRoaXMu
X3VwZGF0ZVNlbGVjdGlvbk9uTW91c2VNb3ZlKSB7CisgICAgICAgIC8vIFNlbGVjdGlvbiB1cGRh
dGUgdHVybmVkIG9mZiB3aGlsZSBuYXZpZ2F0aW5nIHdpdGgga2V5Ym9hcmQgdG8gcHJldmVudCBh
IG1vdXNlCisgICAgICAgIC8vIG1vdmUgdHJpZ2dlZCBkdXJpbmcgYSBzY3JvbGwgZnJvbSByZXNl
dHRpbmcgdGhlIHNlbGVjdGlvbi4gQXV0b21hdGljYWxseQorICAgICAgICAvLyByZWFybSBjb250
cm9sIHRvIGVuYWJsZSBtb3VzZS1iYXNlZCBzZWxlY3Rpb24uCisgICAgICAgIHRoaXMuX3VwZGF0
ZVNlbGVjdGlvbk9uTW91c2VNb3ZlID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICB2YXIg
dGFyZ2V0ID0gZXZlbnQudGFyZ2V0OworICAgICAgICB2YXIgc2VsZWN0aW9uID0gdGhpcy5fZ2V0
U2VsZWN0aW9uKCk7CisgICAgICAgIGlmICh0YXJnZXQgJiYgdGFyZ2V0ICE9IHNlbGVjdGlvbiAm
JiB0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMuTW9udGhTZWxlY3RvclBvcHVw
RW50cnkpKSB7CisgICAgICAgICAgICBpZiAoc2VsZWN0aW9uKQorICAgICAgICAgICAgICAgIHNl
bGVjdGlvbi5jbGFzc0xpc3QucmVtb3ZlKENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOwor
ICAgICAgICAgICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5TZWxlY3RlZE1vbnRo
WWVhcik7CisgICAgICAgIH0KKyAgICB9CisgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Cisg
ICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKK30KKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBl
dmVudAorICovCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFuZGxlTW9udGhQb3B1
cEtleSA9IGZ1bmN0aW9uKGV2ZW50KQoreworICAgIHZhciBrZXkgPSBldmVudC5rZXlJZGVudGlm
aWVyOworICAgIGlmIChrZXkgPT0gIkRvd24iKSB7CisgICAgICAgIHZhciBzZWxlY3RlZCA9IHRo
aXMuX2dldFNlbGVjdGlvbigpOworICAgICAgICBpZiAoc2VsZWN0ZWQpIHsKKyAgICAgICAgICAg
IHZhciBuZXh0ID0gc2VsZWN0ZWQubmV4dFNpYmxpbmc7CisgICAgICAgICAgICBpZiAobmV4dCkg
eworICAgICAgICAgICAgICAgIHNlbGVjdGVkLmNsYXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lcy5T
ZWxlY3RlZE1vbnRoWWVhcik7CisgICAgICAgICAgICAgICAgbmV4dC5jbGFzc0xpc3QuYWRkKENs
YXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOworICAgICAgICAgICAgICAgIHZhciBib3R0b20g
PSBuZXh0Lm9mZnNldFRvcCArIG5leHQuY2xpZW50SGVpZ2h0OworICAgICAgICAgICAgICAgIGlm
IChib3R0b20gPiB0aGlzLl9tb250aFBvcHVwLnNjcm9sbFRvcCArIHRoaXMuX21vbnRoUG9wdXAu
Y2xpZW50SGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVNlbGVjdGlv
bk9uTW91c2VNb3ZlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoUG9w
dXAuc2Nyb2xsVG9wID0gYm90dG9tIC0gdGhpcy5fbW9udGhQb3B1cC5jbGllbnRIZWlnaHQ7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGV2ZW50
LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAg
IH0gZWxzZSBpZiAoa2V5ID09ICJVcCIpIHsKKyAgICAgICAgdmFyIHNlbGVjdGVkID0gdGhpcy5f
Z2V0U2VsZWN0aW9uKCk7CisgICAgICAgIGlmIChzZWxlY3RlZCkgeworICAgICAgICAgICAgdmFy
IHByZXZpb3VzID0gc2VsZWN0ZWQucHJldmlvdXNTaWJsaW5nOworICAgICAgICAgICAgaWYgKHBy
ZXZpb3VzKSB7CisgICAgICAgICAgICAgICAgc2VsZWN0ZWQuY2xhc3NMaXN0LnJlbW92ZShDbGFz
c05hbWVzLlNlbGVjdGVkTW9udGhZZWFyKTsKKyAgICAgICAgICAgICAgICBwcmV2aW91cy5jbGFz
c0xpc3QuYWRkKENsYXNzTmFtZXMuU2VsZWN0ZWRNb250aFllYXIpOworICAgICAgICAgICAgICAg
IGlmIChwcmV2aW91cy5vZmZzZXRUb3AgPCB0aGlzLl9tb250aFBvcHVwLnNjcm9sbFRvcCkgewor
ICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTZWxlY3Rpb25Pbk1vdXNlTW92ZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb250aFBvcHVwLnNjcm9sbFRvcCA9IHBy
ZXZpb3VzLm9mZnNldFRvcDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgIGV2ZW50LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDAxQiIpIHsKKyAgICAg
ICAgdGhpcy5fY2xvc2VQb3B1cCgpOworICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsK
KyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAi
RW50ZXIiKSB7CisgICAgICAgIHRoaXMuX2hhbmRsZVllYXJNb250aENoYW5nZSgpOworICAgICAg
ICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQo
KTsKKyAgICB9Cit9CisKK1llYXJNb250aENvbnRyb2xsZXIucHJvdG90eXBlLl9oYW5kbGVZZWFy
TW9udGhDaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICB0aGlzLl9jbG9zZVBvcHVwKCk7CisgICAg
dmFyIHNlbGVjdGlvbiA9IHRoaXMuX2dldFNlbGVjdGlvbigpOworICAgIGlmICghc2VsZWN0aW9u
KQorICAgICAgICByZXR1cm47CisgICAgdmFyIHZhbHVlID0gc2VsZWN0aW9uLmRhdGFzZXQudmFs
dWU7CisgICAgdmFyIHJlc3VsdCAgPSB2YWx1ZS5tYXRjaCgvKFxkKyktKFxkKykvKTsKKyAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBuZXdZZWFyID0gTnVtYmVyKHJl
c3VsdFsxXSk7CisgICAgdmFyIG5ld01vbnRoID0gTnVtYmVyKHJlc3VsdFsyXSk7CisgICAgZ2xv
YmFsLmRheXNUYWJsZS5uYXZpZ2F0ZVRvTW9udGhBbmRLZWVwU2VsZWN0aW9uUG9zaXRpb24obmV3
WWVhciwgbmV3TW9udGgpOworfTsKKworLyoKKyAqIEBjb25zdAorICogQHR5cGUge251bWJlcn0K
KyAqLworWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c1RlblllYXJzID0gLTEyMDsKKy8qCisg
KiBAY29uc3QKKyAqIEB0eXBlIHtudW1iZXJ9CisgKi8KK1llYXJNb250aENvbnRyb2xsZXIuUHJl
dmlvdXNZZWFyID0gLTEyOworLyoKKyAqIEBjb25zdAorICogQHR5cGUge251bWJlcn0KKyAqLwor
WWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c01vbnRoID0gLTE7CisvKgorICogQGNvbnN0Cisg
KiBAdHlwZSB7bnVtYmVyfQorICovCitZZWFyTW9udGhDb250cm9sbGVyLk5leHRNb250aCA9IDE7
CisvKgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQorICovCitZZWFyTW9udGhDb250cm9s
bGVyLk5leHRZZWFyID0gMTI7CisvKgorICogQGNvbnN0CisgKiBAdHlwZSB7bnVtYmVyfQorICov
CitZZWFyTW9udGhDb250cm9sbGVyLk5leHRUZW5ZZWFycyA9IDEyMDsKKworLyoqCisgKiBAcGFy
YW0ge0V2ZW50fSBldmVudAorICovCitZZWFyTW9udGhDb250cm9sbGVyLnByb3RvdHlwZS5faGFu
ZGxlQnV0dG9uQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChldmVudC50YXJnZXQg
PT0gdGhpcy5fbGVmdDMpCisgICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29u
dHJvbGxlci5QcmV2aW91c1RlblllYXJzKTsKKyAgICBlbHNlIGlmIChldmVudC50YXJnZXQgPT0g
dGhpcy5fbGVmdDIpCisgICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJv
bGxlci5QcmV2aW91c1llYXIpOworICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9s
ZWZ0MSkKKyAgICAgICAgdGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9sbGVyLlBy
ZXZpb3VzTW9udGgpOworICAgIGVsc2UgaWYgKGV2ZW50LnRhcmdldCA9PSB0aGlzLl9yaWdodDEp
CisgICAgICAgIHRoaXMubW92ZVJlbGF0aXZlbHkoWWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9u
dGgpCisgICAgZWxzZSBpZiAoZXZlbnQudGFyZ2V0ID09IHRoaXMuX3JpZ2h0MikKKyAgICAgICAg
dGhpcy5tb3ZlUmVsYXRpdmVseShZZWFyTW9udGhDb250cm9sbGVyLk5leHRZZWFyKTsKKyAgICBl
bHNlIGlmIChldmVudC50YXJnZXQgPT0gdGhpcy5fcmlnaHQzKQorICAgICAgICB0aGlzLm1vdmVS
ZWxhdGl2ZWx5KFllYXJNb250aENvbnRyb2xsZXIuTmV4dFRlblllYXJzKTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybjsKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSBhbW91bnQKKyAq
LworWWVhck1vbnRoQ29udHJvbGxlci5wcm90b3R5cGUubW92ZVJlbGF0aXZlbHkgPSBmdW5jdGlv
bihhbW91bnQpIHsKKyAgICB2YXIgbWluID0gZ2xvYmFsLm1pbmltdW1EYXRlLmdldFVUQ0Z1bGxZ
ZWFyKCkgKiAxMiArIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRVVENNb250aCgpOworICAgIHZhciBt
YXggPSBnbG9iYWwubWF4aW11bURhdGUuZ2V0VVRDRnVsbFllYXIoKSAqIDEyICsgZ2xvYmFsLm1h
eGltdW1EYXRlLmdldFVUQ01vbnRoKCk7CisgICAgdmFyIGN1cnJlbnQgPSB0aGlzLl9jdXJyZW50
WWVhciAqIDEyICsgdGhpcy5fY3VycmVudE1vbnRoOworICAgIHZhciB1cGRhdGVkID0gY3VycmVu
dDsKKyAgICBpZiAoYW1vdW50IDwgMCkKKyAgICAgICAgdXBkYXRlZCA9IGN1cnJlbnQgKyBhbW91
bnQgPj0gbWluID8gY3VycmVudCArIGFtb3VudCA6IG1pbjsKKyAgICBlbHNlCisgICAgICAgIHVw
ZGF0ZWQgPSBjdXJyZW50ICsgYW1vdW50IDw9IG1heCA/IGN1cnJlbnQgKyBhbW91bnQgOiBtYXg7
CisgICAgaWYgKHVwZGF0ZWQgPT0gY3VycmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGdsb2Jh
bC5kYXlzVGFibGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlvblBvc2l0aW9uKE1hdGgu
Zmxvb3IodXBkYXRlZCAvIDEyKSwgdXBkYXRlZCAlIDEyKTsKK307CisKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
LyoqCisgKiBAY29uc3RydWN0b3IKKyAqLworZnVuY3Rpb24gRGF5c1RhYmxlKCkgeworICAgIC8q
KgorICAgICAqIEB0eXBlIHshbnVtYmVyfQorICAgICAqLworICAgIHRoaXMuX3ggPSAtMTsKKyAg
ICAvKioKKyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAgKi8KKyAgICB0aGlzLl95ID0gLTE7
CisgICAgLyoqCisgICAgICogQHR5cGUgeyFudW1iZXJ9CisgICAgICovCisgICAgdGhpcy5fY3Vy
cmVudFllYXIgPSAtMTsKKyAgICAvKioKKyAgICAgKiBAdHlwZSB7IW51bWJlcn0KKyAgICAgKi8K
KyAgICB0aGlzLl9jdXJyZW50TW9udGggPSAtMTsKK30KKworLyoqCisgKiBAcmV0dXJuIHshYm9v
bGVhbn0KKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5faGFzU2VsZWN0aW9uID0gZnVuY3Rpb24o
KSB7CisgICAgcmV0dXJuIHRoaXMuX3ggPj0gMCAmJiB0aGlzLl95ID49IDA7Cit9CisKKy8qKgor
ICogVGhlIG51bWJlciBvZiB3ZWVrIGxpbmVzIGluIHRoZSBzY3JlZW4uCisgKiBAY29uc3QKKyAq
IEB0eXBlIHtudW1iZXJ9CisgKi8KK0RheXNUYWJsZS5fV2Vla3MgPSA2OworCisvKioKKyAqIEBw
YXJhbSB7IUVsZW1lbnR9IG1haW4KKyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5hdHRhY2hUbyA9
IGZ1bmN0aW9uKG1haW4pIHsKKyAgICB0aGlzLl9kYXlzQ29udGFpbmVyID0gY3JlYXRlRWxlbWVu
dCgidGFibGUiLCBDbGFzc05hbWVzLkRheXNBcmVhKTsKKyAgICB0aGlzLl9kYXlzQ29udGFpbmVy
LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYmluZCh0aGlzLl9oYW5kbGVEYXlDbGljaywgdGhp
cyksIGZhbHNlKTsKKyAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoIm1v
dXNlb3ZlciIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VPdmVyLCB0aGlzKSwgZmFsc2UpOworICAg
IHRoaXMuX2RheXNDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdXQiLCBiaW5kKHRo
aXMuX2hhbmRsZU1vdXNlT3V0LCB0aGlzKSwgZmFsc2UpOworICAgIHRoaXMuX2RheXNDb250YWlu
ZXIuYWRkRXZlbnRMaXN0ZW5lcigid2Via2l0VHJhbnNpdGlvbkVuZCIsIGJpbmQodGhpcy5fbW92
ZUluRGF5cywgdGhpcyksIGZhbHNlKTsKKyAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVu
dCgidHIiLCBDbGFzc05hbWVzLkRheUxhYmVsQ29udGFpbmVyKTsKKyAgICB2YXIgd2Vla1N0YXJ0
RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDc7IGkrKykKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGNyZWF0ZUVsZW1l
bnQoInRoIiwgQ2xhc3NOYW1lcy5EYXlMYWJlbCwgZ2xvYmFsLnBhcmFtcy5kYXlMYWJlbHNbKHdl
ZWtTdGFydERheSArIGkpICUgN10pKTsKKyAgICB0aGlzLl9kYXlzQ29udGFpbmVyLmFwcGVuZENo
aWxkKGNvbnRhaW5lcik7CisgICAgdGhpcy5fZGF5cyA9IFtdOworICAgIGZvciAodmFyIHcgPSAw
OyB3IDwgRGF5c1RhYmxlLl9XZWVrczsgdysrKSB7CisgICAgICAgIGNvbnRhaW5lciA9IGNyZWF0
ZUVsZW1lbnQoInRyIiwgQ2xhc3NOYW1lcy5XZWVrQ29udGFpbmVyKTsKKyAgICAgICAgdmFyIHdl
ZWsgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCA3OyBkKyspIHsKKyAgICAgICAg
ICAgIHZhciBkYXkgPSBjcmVhdGVFbGVtZW50KCJ0ZCIsIENsYXNzTmFtZXMuRGF5LCAiICIpOwor
ICAgICAgICAgICAgZGF5LnNldEF0dHJpYnV0ZSgiZGF0YS1wb3NpdGlvbi14IiwgU3RyaW5nKGQp
KTsKKyAgICAgICAgICAgIGRheS5zZXRBdHRyaWJ1dGUoImRhdGEtcG9zaXRpb24teSIsIFN0cmlu
Zyh3KSk7CisgICAgICAgICAgICB3ZWVrLnB1c2goZGF5KTsKKyAgICAgICAgICAgIGNvbnRhaW5l
ci5hcHBlbmRDaGlsZChkYXkpOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2RheXMucHVzaCh3
ZWVrKTsKKyAgICAgICAgdGhpcy5fZGF5c0NvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIp
OworICAgIH0KKyAgICBjb250YWluZXIgPSBjcmVhdGVFbGVtZW50KCJkaXYiLCBDbGFzc05hbWVz
LkRheXNBcmVhQ29udGFpbmVyKTsKKyAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fZGF5
c0NvbnRhaW5lcik7CisgICAgY29udGFpbmVyLnRhYkluZGV4ID0gMDsKKyAgICBjb250YWluZXIu
YWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxlS2V5LCB0aGlzKSwg
ZmFsc2UpOworICAgIG1haW4uYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKKworICAgIGNvbnRhaW5l
ci5mb2N1cygpOworfTsKKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9IHRpbWUgZGF0ZSBpbiBt
aWxsaXNlY29uZC4KKyAqIEByZXR1cm4geyFib29sZWFufQorICovCitmdW5jdGlvbiBzdGVwTWlz
bWF0Y2godGltZSkgeworICAgIHJldHVybiAodGltZSAtIGdsb2JhbC5taW5pbXVtRGF0ZS5nZXRU
aW1lKCkpICUgZ2xvYmFsLnN0ZXAgIT0gMDsKK30KKworLyoqCisgKiBAcGFyYW0geyFudW1iZXJ9
IHRpbWUgZGF0ZSBpbiBtaWxsaXNlY29uZC4KKyAqIEByZXR1cm4geyFib29sZWFufQorICovCitm
dW5jdGlvbiBvdXRPZlJhbmdlKHRpbWUpIHsKKyAgICByZXR1cm4gdGltZSA8IGdsb2JhbC5taW5p
bXVtRGF0ZS5nZXRUaW1lKCkgfHwgdGltZSA+IGdsb2JhbC5tYXhpbXVtRGF0ZS5nZXRUaW1lKCk7
Cit9CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB0aW1lIGRhdGUgaW4gbWlsbGlzZWNvbmQu
CisgKiBAcmV0dXJuIHshYm9vbGVhbn0KKyAqLworZnVuY3Rpb24gaXNWYWxpZERhdGUodGltZSkg
eworICAgIHJldHVybiAhb3V0T2ZSYW5nZSh0aW1lKSAmJiAhc3RlcE1pc21hdGNoKHRpbWUpOwor
fQorCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0geWVhcgorICogQHBhcmFtIHshbnVtYmVyfSBt
b250aAorICovCitEYXlzVGFibGUucHJvdG90eXBlLl9yZW5kZXJNb250aCA9IGZ1bmN0aW9uKHll
YXIsIG1vbnRoKSB7CisgICAgdGhpcy5fY3VycmVudFllYXIgPSB5ZWFyOworICAgIHRoaXMuX2N1
cnJlbnRNb250aCA9IG1vbnRoOworICAgIHZhciBkYXlJdGVyYXRvciA9IG5ldyBEYXRlKERhdGUu
VVRDKHllYXIsIG1vbnRoLCAxKSk7CisgICAgZGF5SXRlcmF0b3Iuc2V0VVRDRnVsbFllYXIoeWVh
cik7CisgICAgdmFyIG1vbnRoU3RhcnREYXkgPSBkYXlJdGVyYXRvci5nZXRVVENEYXkoKTsKKyAg
ICB2YXIgd2Vla1N0YXJ0RGF5ID0gZ2xvYmFsLnBhcmFtcy53ZWVrU3RhcnREYXkgfHwgMDsKKyAg
ICB2YXIgc3RhcnRPZmZzZXQgPSB3ZWVrU3RhcnREYXkgLSBtb250aFN0YXJ0RGF5OworICAgIGlm
IChzdGFydE9mZnNldCA+PSAwKQorICAgICAgICBzdGFydE9mZnNldCAtPSA3OworICAgIGRheUl0
ZXJhdG9yLnNldFVUQ0RhdGUoc3RhcnRPZmZzZXQgKyAxKTsKKyAgICBmb3IgKHZhciB3ID0gMDsg
dyA8IERheXNUYWJsZS5fV2Vla3M7IHcrKykgeworICAgICAgICBmb3IgKHZhciBkID0gMDsgZCA8
IDc7IGQrKykgeworICAgICAgICAgICAgdmFyIGl0ZXJZZWFyID0gZGF5SXRlcmF0b3IuZ2V0VVRD
RnVsbFllYXIoKTsKKyAgICAgICAgICAgIHZhciBpdGVyTW9udGggPSBkYXlJdGVyYXRvci5nZXRV
VENNb250aCgpOworICAgICAgICAgICAgdmFyIHRpbWUgPSBkYXlJdGVyYXRvci5nZXRUaW1lKCk7
CisgICAgICAgICAgICB2YXIgZWxlbWVudCA9IHRoaXMuX2RheXNbd11bZF07CisgICAgICAgICAg
ICAvLyBGSVhNRTogTmVlZCBsb2NhbGl6ZWQgbnVtYmVyPworICAgICAgICAgICAgZWxlbWVudC5p
bm5lclRleHQgPSBTdHJpbmcoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpKTsKKyAgICAgICAgICAg
IGVsZW1lbnQuY2xhc3NOYW1lID0gQ2xhc3NOYW1lcy5EYXk7CisgICAgICAgICAgICBlbGVtZW50
LmRhdGFzZXQuc3VibWl0VmFsdWUgPSBzZXJpYWxpemVEYXRlKGl0ZXJZZWFyLCBpdGVyTW9udGgs
IGRheUl0ZXJhdG9yLmdldFVUQ0RhdGUoKSk7CisgICAgICAgICAgICBpZiAob3V0T2ZSYW5nZSh0
aW1lKSkKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lcy5V
bmF2YWlsYWJsZSk7CisgICAgICAgICAgICBlbHNlIGlmIChzdGVwTWlzbWF0Y2godGltZSkpCisg
ICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuVW5hdmFpbGFi
bGUpOworICAgICAgICAgICAgZWxzZSBpZiAoKGl0ZXJZZWFyID09IHllYXIgJiYgZGF5SXRlcmF0
b3IuZ2V0VVRDTW9udGgoKSA8IG1vbnRoKSB8fCAobW9udGggPT0gMCAmJiBpdGVyTW9udGggPT0g
MTEpKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMu
QXZhaWxhYmxlKTsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ2xhc3NO
YW1lcy5Ob3RUaGlzTW9udGgpOworICAgICAgICAgICAgfSBlbHNlIGlmICgoaXRlclllYXIgPT0g
eWVhciAmJiBkYXlJdGVyYXRvci5nZXRVVENNb250aCgpID4gbW9udGgpIHx8IChtb250aCA9PSAx
MSAmJiBpdGVyTW9udGggPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlz
dC5hZGQoQ2xhc3NOYW1lcy5BdmFpbGFibGUpOworICAgICAgICAgICAgICAgIGVsZW1lbnQuY2xh
c3NMaXN0LmFkZChDbGFzc05hbWVzLk5vdFRoaXNNb250aCk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKGlzTmFOKHRpbWUpKSB7CisgICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lclRleHQgPSAi
LSI7CisgICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuVW5h
dmFpbGFibGUpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgZWxlbWVudC5j
bGFzc0xpc3QuYWRkKENsYXNzTmFtZXMuQXZhaWxhYmxlKTsKKyAgICAgICAgICAgIGRheUl0ZXJh
dG9yLnNldFVUQ0RhdGUoZGF5SXRlcmF0b3IuZ2V0VVRDRGF0ZSgpICsgMSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBnbG9iYWwudG9kYXkuZGlzYWJsZWQgPSAhaXNWYWxpZERhdGUocGFyc2VE
YXRlU3RyaW5nKCkuZ2V0VGltZSgpKTsKK307CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB5
ZWFyCisgKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUu
X25hdmlnYXRlVG9Nb250aCA9IGZ1bmN0aW9uKHllYXIsIG1vbnRoKSB7CisgICAgZ2xvYmFsLnll
YXJNb250aENvbnRyb2xsZXIuc2V0WWVhck1vbnRoKHllYXIsIG1vbnRoKTsKKyAgICB0aGlzLl9y
ZW5kZXJNb250aCh5ZWFyLCBtb250aCk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7IW51bWJlcn0g
eWVhcgorICogQHBhcmFtIHshbnVtYmVyfSBtb250aAorICovCitEYXlzVGFibGUucHJvdG90eXBl
Ll9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsK
KyAgICBpZiAodGhpcy5fY3VycmVudFllYXIgPj0gMCAmJiB0aGlzLl9jdXJyZW50TW9udGggPj0g
MCkgeworICAgICAgICBpZiAoeWVhciA9PSB0aGlzLl9jdXJyZW50WWVhciAmJiBtb250aCA9PSB0
aGlzLl9jdXJyZW50TW9udGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHZhciBkZWNy
ZWFzaW5nID0gZmFsc2U7CisgICAgICAgIGlmICh5ZWFyIDwgdGhpcy5fY3VycmVudFllYXIpCisg
ICAgICAgICAgICBkZWNyZWFzaW5nID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoeWVhciA+IHRo
aXMuX2N1cnJlbnRZZWFyKQorICAgICAgICAgICAgZGVjcmVhc2luZyA9IGZhbHNlOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBkZWNyZWFzaW5nID0gbW9udGggPCB0aGlzLl9jdXJyZW50TW9u
dGg7CisgICAgICAgIHZhciBkYXlzU3R5bGUgPSB0aGlzLl9kYXlzQ29udGFpbmVyLnN0eWxlOwor
ICAgICAgICBkYXlzU3R5bGUucG9zaXRpb24gPSAicmVsYXRpdmUiOworICAgICAgICBkYXlzU3R5
bGUud2Via2l0VHJhbnNpdGlvbiA9ICJsZWZ0IDAuMXMgZWFzZSI7CisgICAgICAgIGRheXNTdHls
ZS5sZWZ0ID0gKGRlY3JlYXNpbmcgPyAiIiA6ICItIikgKyB0aGlzLl9kYXlzQ29udGFpbmVyLm9m
ZnNldFdpZHRoICsgInB4IjsKKyAgICB9CisgICAgdGhpcy5fbmF2aWdhdGVUb01vbnRoKHllYXIs
IG1vbnRoKTsKK307CisKK0RheXNUYWJsZS5wcm90b3R5cGUuX21vdmVJbkRheXMgPSBmdW5jdGlv
bigpIHsKKyAgICB2YXIgZGF5c1N0eWxlID0gdGhpcy5fZGF5c0NvbnRhaW5lci5zdHlsZTsKKyAg
ICBpZiAoZGF5c1N0eWxlLmxlZnQgPT0gIjBweCIpCisgICAgICAgIHJldHVybjsKKyAgICBkYXlz
U3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICIiOworICAgIGRheXNTdHlsZS5sZWZ0ID0gKGRheXNT
dHlsZS5sZWZ0LmNoYXJBdCgwKSA9PSAiLSIgPyAiIiA6ICItIikgKyB0aGlzLl9kYXlzQ29udGFp
bmVyLm9mZnNldFdpZHRoICsgInB4IjsKKyAgICB0aGlzLl9kYXlzQ29udGFpbmVyLm9mZnNldExl
ZnQ7IC8vIEZvcmNlIHRvIGxheW91dC4KKyAgICBkYXlzU3R5bGUud2Via2l0VHJhbnNpdGlvbiA9
ICJsZWZ0IDAuMXMgZWFzZSI7CisgICAgZGF5c1N0eWxlLmxlZnQgPSAiMHB4IjsKK307CisKKy8q
KgorICogQHBhcmFtIHshbnVtYmVyfSB5ZWFyCisgKiBAcGFyYW0geyFudW1iZXJ9IG1vbnRoCisg
Ki8KK0RheXNUYWJsZS5wcm90b3R5cGUubmF2aWdhdGVUb01vbnRoQW5kS2VlcFNlbGVjdGlvblBv
c2l0aW9uID0gZnVuY3Rpb24oeWVhciwgbW9udGgpIHsKKyAgICBpZiAoeWVhciA9PSB0aGlzLl9j
dXJyZW50WWVhciAmJiBtb250aCA9PSB0aGlzLl9jdXJyZW50TW9udGgpCisgICAgICAgIHJldHVy
bjsKKyAgICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRoKTsK
KyAgICBpZiAodGhpcy5faGFzU2VsZWN0aW9uKCkpCisgICAgICAgIHRoaXMuX2RheXNbdGhpcy5f
eV1bdGhpcy5feF0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVkKTsKK307CisKKy8q
KgorICogQHBhcmFtIHshRGF0ZX0gZGF0ZQorICovCitEYXlzVGFibGUucHJvdG90eXBlLnNlbGVj
dERhdGUgPSBmdW5jdGlvbihkYXRlKSB7CisgICAgdGhpcy5fbmF2aWdhdGVUb01vbnRoV2l0aEFu
aW1hdGlvbihkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSk7CisgICAg
dmFyIGRhdGVTdHJpbmcgPSBzZXJpYWxpemVEYXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0
ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSk7CisgICAgZm9yICh2YXIgdyA9IDA7
IHcgPCBEYXlzVGFibGUuX1dlZWtzOyB3KyspIHsKKyAgICAgICAgZm9yICh2YXIgZCA9IDA7IGQg
PCA3OyBkKyspIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9kYXlzW3ddW2RdLmRhdGFzZXQuc3Vi
bWl0VmFsdWUgPT0gZGF0ZVN0cmluZykgeworICAgICAgICAgICAgICAgIHRoaXMuX2RheXNbd11b
ZF0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWVzLlNlbGVjdGVkKTsKKyAgICAgICAgICAgICAgICB0
aGlzLl94ID0gZDsKKyAgICAgICAgICAgICAgICB0aGlzLl95ID0gdzsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKKy8qKgorICog
QHJldHVybiB7IWJvb2xlYW59CisgKi8KK0RheXNUYWJsZS5wcm90b3R5cGUuX21heWJlU2V0UHJl
dmlvdXNNb250aCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciB5ZWFyID0gZ2xvYmFsLnllYXJNb250
aENvbnRyb2xsZXIueWVhcigpOworICAgIHZhciBtb250aCA9IGdsb2JhbC55ZWFyTW9udGhDb250
cm9sbGVyLm1vbnRoKCk7CisgICAgdmFyIHRoaXNNb250aFN0YXJ0VGltZSA9IERhdGUuVVRDKHll
YXIsIG1vbnRoLCAxKTsKKyAgICBpZiAoZ2xvYmFsLm1pbmltdW1EYXRlLmdldFRpbWUoKSA+PSB0
aGlzTW9udGhTdGFydFRpbWUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobW9udGgg
PT0gMCkgeworICAgICAgICB5ZWFyLS07CisgICAgICAgIG1vbnRoID0gMTE7CisgICAgfSBlbHNl
CisgICAgICAgIG1vbnRoLS07CisgICAgdGhpcy5fbmF2aWdhdGVUb01vbnRoV2l0aEFuaW1hdGlv
bih5ZWFyLCBtb250aCk7CisgICAgcmV0dXJuIHRydWU7Cit9OworCisvKioKKyAqIEByZXR1cm4g
eyFib29sZWFufQorICovCitEYXlzVGFibGUucHJvdG90eXBlLl9tYXliZVNldE5leHRNb250aCA9
IGZ1bmN0aW9uKCkgeworICAgIHZhciB5ZWFyID0gZ2xvYmFsLnllYXJNb250aENvbnRyb2xsZXIu
eWVhcigpOworICAgIHZhciBtb250aCA9IGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vbnRo
KCk7CisgICAgaWYgKG1vbnRoID09IDExKSB7CisgICAgICAgIHllYXIrKzsKKyAgICAgICAgbW9u
dGggPSAwOworICAgIH0gZWxzZQorICAgICAgICBtb250aCsrOworICAgIHZhciBuZXh0TW9udGhT
dGFydFRpbWUgPSBEYXRlLlVUQyh5ZWFyLCBtb250aCwgMSk7CisgICAgaWYgKGdsb2JhbC5tYXhp
bXVtRGF0ZS5nZXRUaW1lKCkgPCBuZXh0TW9udGhTdGFydFRpbWUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB0aGlzLl9uYXZpZ2F0ZVRvTW9udGhXaXRoQW5pbWF0aW9uKHllYXIsIG1vbnRo
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK307CisKKy8qKgorICogQHBhcmFtIHtFdmVudH0gZXZlbnQK
KyAqLworRGF5c1RhYmxlLnByb3RvdHlwZS5faGFuZGxlRGF5Q2xpY2sgPSBmdW5jdGlvbihldmVu
dCkgeworICAgIGlmIChldmVudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENsYXNzTmFtZXMu
QXZhaWxhYmxlKSkKKyAgICAgICAgc3VibWl0VmFsdWUoZXZlbnQudGFyZ2V0LmRhdGFzZXQuc3Vi
bWl0VmFsdWUpOworfTsKKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitEYXlz
VGFibGUucHJvdG90eXBlLl9oYW5kbGVNb3VzZU92ZXIgPSBmdW5jdGlvbihldmVudCkgeworICAg
IHZhciBub2RlID0gZXZlbnQudGFyZ2V0OworICAgIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSkK
KyAgICAgICAgdGhpcy5fZGF5c1t0aGlzLl95XVt0aGlzLl94XS5jbGFzc0xpc3QucmVtb3ZlKENs
YXNzTmFtZXMuU2VsZWN0ZWQpOworICAgIGlmICghbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ2xh
c3NOYW1lcy5EYXkpKSB7CisgICAgICAgIHRoaXMuX3ggPSAtMTsKKyAgICAgICAgdGhpcy5feSA9
IC0xOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5vZGUuY2xhc3NMaXN0LmFkZChDbGFz
c05hbWVzLlNlbGVjdGVkKTsKKyAgICB0aGlzLl94ID0gTnVtYmVyKG5vZGUuZGF0YXNldC5wb3Np
dGlvblgpOworICAgIHRoaXMuX3kgPSBOdW1iZXIobm9kZS5kYXRhc2V0LnBvc2l0aW9uWSk7Cit9
OworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKi8KK0RheXNUYWJsZS5wcm90b3R5
cGUuX2hhbmRsZU1vdXNlT3V0ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAodGhpcy5faGFz
U2VsZWN0aW9uKCkpCisgICAgICAgIHRoaXMuX2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NM
aXN0LnJlbW92ZShDbGFzc05hbWVzLlNlbGVjdGVkKTsKKyAgICB0aGlzLl94ID0gLTE7CisgICAg
dGhpcy5feSA9IC0xOworfTsKKworLyoqCisgKiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitE
YXlzVGFibGUucHJvdG90eXBlLl9oYW5kbGVLZXkgPSBmdW5jdGlvbihldmVudCkgeworICAgIG1h
eWJlVXBkYXRlRm9jdXNTdHlsZSgpOworICAgIHZhciB4ID0gdGhpcy5feDsKKyAgICB2YXIgeSA9
IHRoaXMuX3k7CisgICAgdmFyIGtleSA9IGV2ZW50LmtleUlkZW50aWZpZXI7CisgICAgaWYgKCF0
aGlzLl9oYXNTZWxlY3Rpb24oKSAmJiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8fCBr
ZXkgPT0gIlJpZ2h0IiB8fCBrZXkgPT0gIkRvd24iKSkgeworICAgICAgICAvLyBQdXQgdGhlIHNl
bGVjdGlvbiBvbiBhIGNlbnRlciBjZWxsLgorICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihl
dmVudCwgMywgTWF0aC5mbG9vcihEYXlzVGFibGUuX1dlZWtzIC8gMiAtIDEpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChrZXkgPT0gKGdsb2JhbC5wYXJhbXMuaXNSVEwgPyAi
UmlnaHQiIDogIkxlZnQiKSkgeworICAgICAgICBpZiAoeCA9PSAwKSB7CisgICAgICAgICAgICBp
ZiAoeSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9tYXliZVNldFByZXZpb3Vz
TW9udGgoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHkg
PSBEYXlzVGFibGUuX1dlZWtzIC0gMTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIHktLTsKKyAgICAgICAgICAgIHggPSA2OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHgtLTsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworCisgICAg
fSBlbHNlIGlmIChrZXkgPT0gIlVwIikgeworICAgICAgICBpZiAoeSA9PSAwKSB7CisgICAgICAg
ICAgICBpZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aCgpKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIHkgPSBEYXlzVGFibGUuX1dlZWtzIC0gMTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICB5LS07CisgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGV2
ZW50LCB4LCB5KTsKKworICAgIH0gZWxzZSBpZiAoa2V5ID09IChnbG9iYWwucGFyYW1zLmlzUlRM
ID8gIkxlZnQiIDogIlJpZ2h0IikpIHsKKyAgICAgICAgaWYgKHggPT0gNikgeworICAgICAgICAg
ICAgaWYgKHkgPT0gRGF5c1RhYmxlLl9XZWVrcyAtIDEpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB5ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
ICAgIHkrKzsKKyAgICAgICAgICAgIHggPSAwOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IHgrKzsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZXZlbnQsIHgsIHkpOworCisgICAg
fSBlbHNlIGlmIChrZXkgPT0gIkRvd24iKSB7CisgICAgICAgIGlmICh5ID09IERheXNUYWJsZS5f
V2Vla3MgLSAxKSB7CisgICAgICAgICAgICBpZiAoIXRoaXMuX21heWJlU2V0TmV4dE1vbnRoKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgeSA9IDA7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgeSsrOworICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVu
dCwgeCwgeSk7CisKKyAgICB9IGVsc2UgaWYgKGtleSA9PSAiUGFnZVVwIikgeworICAgICAgICBp
ZiAoIXRoaXMuX21heWJlU2V0UHJldmlvdXNNb250aCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbihldmVudCwgeCwgeSk7CisKKyAgICB9IGVsc2Ug
aWYgKGtleSA9PSAiUGFnZURvd24iKSB7CisgICAgICAgIGlmICghdGhpcy5fbWF5YmVTZXROZXh0
TW9udGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rp
b24oZXZlbnQsIHgsIHkpOworCisgICAgfSBlbHNlIGlmICh0aGlzLl9oYXNTZWxlY3Rpb24oKSAm
JiBrZXkgPT0gIkVudGVyIikgeworICAgICAgICB2YXIgZGF5Tm9kZSA9IHRoaXMuX2RheXNbeV1b
eF07CisgICAgICAgIGlmIChkYXlOb2RlLmNsYXNzTGlzdC5jb250YWlucyhDbGFzc05hbWVzLkF2
YWlsYWJsZSkpIHsKKyAgICAgICAgICAgIHN1Ym1pdFZhbHVlKGRheU5vZGUuZGF0YXNldC5zdWJt
aXRWYWx1ZSk7CisgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAg
fQorCisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA1NCIpIHsgLy8gJ3QnCisgICAgICAgIHRo
aXMuX2RheXNbdGhpcy5feV1bdGhpcy5feF0uY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVzLlNl
bGVjdGVkKTsKKyAgICAgICAgdGhpcy5zZWxlY3REYXRlKG5ldyBEYXRlKCkpOworICAgICAgICBl
dmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsK
KyAgICB9Cit9OworCisvKioKKyAqIEBwYXJhbSB7RXZlbnR9IGV2ZW50CisgKiBAcGFyYW0geyFu
dW1iZXJ9IHgKKyAqIEBwYXJhbSB7IW51bWJlcn0geQorICovCitEYXlzVGFibGUucHJvdG90eXBl
LnVwZGF0ZVNlbGVjdGlvbiA9IGZ1bmN0aW9uKGV2ZW50LCB4LCB5KSB7CisgICAgaWYgKHRoaXMu
X2hhc1NlbGVjdGlvbigpKQorICAgICAgICB0aGlzLl9kYXlzW3RoaXMuX3ldW3RoaXMuX3hdLmNs
YXNzTGlzdC5yZW1vdmUoQ2xhc3NOYW1lcy5TZWxlY3RlZCk7CisgICAgaWYgKHggPj0gMCAmJiB5
ID49IDApIHsKKyAgICAgICAgdGhpcy5fZGF5c1t5XVt4XS5jbGFzc0xpc3QuYWRkKENsYXNzTmFt
ZXMuU2VsZWN0ZWQpOworICAgICAgICB0aGlzLl94ID0geDsKKyAgICAgICAgdGhpcy5feSA9IHk7
CisgICAgfQorICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgIGV2ZW50LnByZXZlbnRE
ZWZhdWx0KCk7Cit9OworCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Z1bmN0aW9uIGhhbmRsZVRvZGF5KCkgewor
ICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTsKKyAgICBnbG9iYWwuZGF5c1RhYmxlLnNlbGVjdERh
dGUoZGF0ZSk7CisgICAgc3VibWl0VmFsdWUoc2VyaWFsaXplRGF0ZShkYXRlLmdldEZ1bGxZZWFy
KCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpKTsKK30KKworZnVuY3Rpb24gaGFu
ZGxlQ2xlYXIoKSB7CisgICAgc3VibWl0VmFsdWUoIiIpOworfQorCisvKioKKyAqIEBwYXJhbSB7
c3RyaW5nfSB2YWx1ZQorICovCitmdW5jdGlvbiBzdWJtaXRWYWx1ZSh2YWx1ZSkgeworICAgIHdp
bmRvdy5wYWdlUG9wdXBDb250cm9sbGVyLnNldFZhbHVlQW5kQ2xvc2VQb3B1cCgwLCB2YWx1ZSk7
Cit9CisKK2Z1bmN0aW9uIGhhbmRsZUNhbmNlbCgpIHsKKyAgICB3aW5kb3cucGFnZVBvcHVwQ29u
dHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoLTEsICIiKTsKK30KKworLyoqCisgKiBAcGFy
YW0ge0V2ZW50fSBldmVudAorICovCitmdW5jdGlvbiBoYW5kbGVHbG9iYWxLZXkoZXZlbnQpIHsK
KyAgICBtYXliZVVwZGF0ZUZvY3VzU3R5bGUoKTsKKyAgICB2YXIga2V5ID0gZXZlbnQua2V5SWRl
bnRpZmllcjsKKyAgICBpZiAoa2V5ID09ICJVKzAwMDkiKSB7CisgICAgICAgIGlmICghZXZlbnQu
c2hpZnRLZXkgJiYgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBnbG9iYWwubGFzdEZvY3VzYWJs
ZUNvbnRyb2wpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAg
ICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIGdsb2JhbC5maXJzdEZv
Y3VzYWJsZUNvbnRyb2wuZm9jdXMoKTsKKyAgICAgICAgfSBlbHNlIGlmIChldmVudC5zaGlmdEtl
eSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09IGdsb2JhbC5maXJzdEZvY3VzYWJsZUNvbnRy
b2wpIHsKKyAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOworICAgICAgICAgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgIGdsb2JhbC5sYXN0Rm9jdXNhYmxl
Q29udHJvbC5mb2N1cygpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChrZXkgPT0gIlUrMDA0
RCIpIHsgLy8gJ20nCisgICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9sbGVyLm1vdmVSZWxh
dGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlci5QcmV2aW91c01vbnRo
IDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0TW9udGgpOworICAgIH0gZWxzZSBpZiAoa2V5ID09
ICJVKzAwNTkiKSB7IC8vICd5JworICAgICAgICBnbG9iYWwueWVhck1vbnRoQ29udHJvbGxlci5t
b3ZlUmVsYXRpdmVseShldmVudC5zaGlmdEtleSA/IFllYXJNb250aENvbnRyb2xsZXIuUHJldmlv
dXNZZWFyIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0WWVhcik7CisgICAgfSBlbHNlIGlmIChr
ZXkgPT0gIlUrMDA0NCIpIHsgLy8gJ2QnCisgICAgICAgIGdsb2JhbC55ZWFyTW9udGhDb250cm9s
bGVyLm1vdmVSZWxhdGl2ZWx5KGV2ZW50LnNoaWZ0S2V5ID8gWWVhck1vbnRoQ29udHJvbGxlci5Q
cmV2aW91c1RlblllYXJzIDogWWVhck1vbnRoQ29udHJvbGxlci5OZXh0VGVuWWVhcnMpOworICAg
IH0gZWxzZSBpZiAoa2V5ID09ICJVKzAwMUIiKSAvLyBFU0MKKyAgICAgICAgaGFuZGxlQ2FuY2Vs
KCk7Cit9CisKK2Z1bmN0aW9uIG1heWJlVXBkYXRlRm9jdXNTdHlsZSgpIHsKKyAgICBpZiAoZ2xv
YmFsLmhhZEtleUV2ZW50KQorICAgICAgICByZXR1cm47CisgICAgZ2xvYmFsLmhhZEtleUV2ZW50
ID0gdHJ1ZTsKKyAgICAkKCJtYWluIikuY2xhc3NMaXN0LnJlbW92ZShDbGFzc05hbWVzLk5vRm9j
dXNSaW5nKTsKK30KKworaWYgKHdpbmRvdy5kaWFsb2dBcmd1bWVudHMpIHsKKyAgICBpbml0aWFs
aXplKGRpYWxvZ0FyZ3VtZW50cyk7Cit9IGVsc2UgeworICAgIHdpbmRvdy5hZGRFdmVudExpc3Rl
bmVyKCJtZXNzYWdlIiwgaGFuZGxlTWVzc2FnZSwgZmFsc2UpOworICAgIHdpbmRvdy5zZXRUaW1l
b3V0KGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQsIDEwMDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXJNYWMuY3NzIGIvU291
cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQaWNrZXJNYWMuY3NzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjQxNDQ2NDU2MjdhOTc1ZTdiNWE5Nzg1OTRiYWVmZjExMjA4MThiOTIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jYWxlbmRh
clBpY2tlck1hYy5jc3MKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy55ZWFyLW1vbnRoLWJ1dHRvbiB7CisgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOworICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGll
bnQobGluZWFyLCBsZWZ0IHRvcCwgbGVmdCBib3R0b20sIGZyb20oI2ZmZiksIGNvbG9yLXN0b3Ao
MC4zLCAjZmZmKSwgY29sb3Itc3RvcCgwLjM1LCAjZjdmN2Y3KSwgY29sb3Itc3RvcCgwLjQ5LCAj
ZjdmN2Y3KSwgY29sb3Itc3RvcCgwLjUsICNlZGVkZWQpLCB0bygjZWRlZGVkKSk7CisgICAgYm9y
ZGVyOiBzb2xpZCAxcHggI2E2YTZhNjsKKyAgICBib3JkZXItcmFkaXVzOiA0cHg7CisgICAgYm94
LXNoYWRvdzogaW5zZXQgMXB4IDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjQpLCBpbnNldCAt
MXB4IC0xcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC40KTsKKyAgICBwYWRkaW5nLWxlZnQ6IDNw
eDsKKyAgICBwYWRkaW5nLXJpZ2h0OiAzcHg7Cit9CisKKy55ZWFyLW1vbnRoLWJ1dHRvbjphY3Rp
dmUgeworICAgIGJhY2tncm91bmQ6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IHRvcCwg
bGVmdCBib3R0b20sIGZyb20oI2EzYmZlZiksIGNvbG9yLXN0b3AoMC40OSwgICM2YmEzZWYpLCBj
b2xvci1zdG9wKDAuNSwgIzQ0OTFlZiksIHRvKCNhM2QxZWYpKTsKKyAgICBib3JkZXI6IHNvbGlk
IDFweCAjNGQ0ZDUwOworfQorCisueWVhci1tb250aC1idXR0b246ZGlzYWJsZWQgeworICAgIGNv
bG9yOiAjODg4OworICAgIGJvcmRlcjogc29saWQgMXB4ICNkMWQxZDE7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jb2xvclN1Z2dlc3Rpb25QaWNr
ZXIuY3NzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0
aW9uUGlja2VyLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Zjg0N2ZlYmNhZWVhNzY5NTVhYjVmYjU4NzFjNDcy
MWI5OWI0YmY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3Bh
Z2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmNzcwpAQCAtMCwwICsxLDY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworYm9keSB7CisgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7CisgICAg
bWFyZ2luOiAwOworICAgIG92ZXJmbG93OiBoaWRkZW47Cit9CisKKyNtYWluIHsKKyAgICBiYWNr
Z3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IHNvbGlkIDFweCAjODg5OWFhOworICAg
IGJveC1zaGFkb3c6IGluc2V0IDJweCAycHggMnB4IHdoaXRlLAorICAgICAgICBpbnNldCAtMnB4
IC0ycHggMXB4IHJnYmEoMCwwLDAsMC4xKTsKKyAgICBwYWRkaW5nOiA2cHg7CisgICAgZmxvYXQ6
IGxlZnQ7Cit9CisKKy5jb2xvci1zd2F0Y2ggeworICAgIGZsb2F0OiBsZWZ0OworICAgIHdpZHRo
OiAyMHB4OworICAgIGhlaWdodDogMjBweDsKKyAgICBtYXJnaW46IDFweDsKKyAgICBwYWRkaW5n
OiAwOworICAgIGJvcmRlcjogMXB4IHNvbGlkICNlMGUwZTA7CisgICAgYm94LXNpemluZzogY29u
dGVudC1ib3g7Cit9CisKKy5jb2xvci1zd2F0Y2g6Zm9jdXMgeworICAgIGJvcmRlcjogMXB4IHNv
bGlkICMwMDAwMDA7CisgICAgb3V0bGluZTogbm9uZTsKK30KKworLmNvbG9yLXN3YXRjaC1jb250
YWluZXIgeworICAgIHdpZHRoOiAxMDAlOworICAgIG1heC1oZWlnaHQ6IDEwNHB4OworICAgIG92
ZXJmbG93OiBhdXRvOworICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKKyAgICAtd2Via2l0LWZs
ZXgtZmxvdzogcm93IHdyYXA7CisgICAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyOworfQor
Cisub3RoZXItY29sb3IgeworICAgIHdpZHRoOiAxMDAlOworICAgIG1hcmdpbjogNHB4IDAgMCAw
OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY29s
b3JTdWdnZXN0aW9uUGlja2VyLmpzIGIvU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1
cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4MjdlOTZkMWMxZGU3YTAz
MGFlZWFhOGI4ZmMxNzFiN2RjOWE1YmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9SZXNvdXJjZXMvcGFnZXBvcHVwcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuanMKQEAgLTAsMCAr
MSwyNjMgQEAKKyJ1c2Ugc3RyaWN0IjsKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCit2YXIgZ2xvYmFsID0geworICAgIGFy
Z3VtZW50c1JlY2VpdmVkOiBmYWxzZSwKKyAgICBzY3JvbGxiYXJXaWR0aDogbnVsbAorfTsKKwor
LyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IGlkCisgKi8KK2Z1bmN0aW9uICQoaWQpIHsKKyAgICBy
ZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworfQorCitmdW5jdGlvbiBiaW5kKGZ1
bmMsIGNvbnRleHQpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBm
dW5jLmFwcGx5KGNvbnRleHQsIGFyZ3VtZW50cyk7CisgICAgfTsKK30KKworZnVuY3Rpb24gZ2V0
U2Nyb2xsYmFyV2lkdGgoKSB7CisgICAgaWYgKGdsb2JhbC5zY3JvbGxiYXJXaWR0aCA9PT0gbnVs
bCkgeworICAgICAgICB2YXIgc2Nyb2xsRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2
Iik7CisgICAgICAgIHNjcm9sbERpdi5zdHlsZS5vcGFjaXR5ID0gIjAiOworICAgICAgICBzY3Jv
bGxEaXYuc3R5bGUub3ZlcmZsb3cgPSAic2Nyb2xsIjsKKyAgICAgICAgc2Nyb2xsRGl2LnN0eWxl
LndpZHRoID0gIjUwcHgiOworICAgICAgICBzY3JvbGxEaXYuc3R5bGUuaGVpZ2h0ID0gIjUwcHgi
OworICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcm9sbERpdik7CisgICAgICAg
IGdsb2JhbC5zY3JvbGxiYXJXaWR0aCA9IHNjcm9sbERpdi5vZmZzZXRXaWR0aCAtIHNjcm9sbERp
di5jbGllbnRXaWR0aDsKKyAgICAgICAgc2Nyb2xsRGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQo
c2Nyb2xsRGl2KTsKKyAgICB9CisgICAgcmV0dXJuIGdsb2JhbC5zY3JvbGxiYXJXaWR0aDsKK30K
KworLyoqCisgKiBAcGFyYW0geyFzdHJpbmd9IHRhZ05hbWUKKyAqIEBwYXJhbSB7c3RyaW5nPX0g
b3B0X2NsYXNzCisgKiBAcGFyYW0ge3N0cmluZz19IG9wdF90ZXh0CisgKiBAcmV0dXJuIHshRWxl
bWVudH0KKyAqLworZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBvcHRfY2xhc3MsIG9w
dF90ZXh0KSB7CisgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05h
bWUpOworICAgIGlmIChvcHRfY2xhc3MpCisgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCJj
bGFzcyIsIG9wdF9jbGFzcyk7CisgICAgaWYgKG9wdF90ZXh0KQorICAgICAgICBlbGVtZW50LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG9wdF90ZXh0KSk7CisgICAgcmV0dXJu
IGVsZW1lbnQ7Cit9CisKKy8qKgorICogQHBhcmFtIHshbnVtYmVyfSB3aWR0aAorICogQHBhcmFt
IHshbnVtYmVyfSBoZWlnaHQKKyAqLworZnVuY3Rpb24gcmVzaXplV2luZG93KHdpZHRoLCBoZWln
aHQpIHsKKyAgICBpZiAod2luZG93LmZyYW1lRWxlbWVudCkgeworICAgICAgICB3aW5kb3cuZnJh
bWVFbGVtZW50LnN0eWxlLndpZHRoID0gd2lkdGggKyAicHgiOworICAgICAgICB3aW5kb3cuZnJh
bWVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGhlaWdodCArICJweCI7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgd2luZG93LnJlc2l6ZVRvKHdpZHRoLCBoZWlnaHQpOworICAgIH0KK30KKworLyoqCisg
KiBAcGFyYW0ge0V2ZW50fSBldmVudAorICovCitmdW5jdGlvbiBoYW5kbGVNZXNzYWdlKGV2ZW50
KSB7CisgICAgaW5pdGlhbGl6ZShKU09OLnBhcnNlKGV2ZW50LmRhdGEpKTsKKyAgICBnbG9iYWwu
YXJndW1lbnRzUmVjZWl2ZWQgPSB0cnVlOworfQorCisvKioKKyAqIEBwYXJhbSB7IU9iamVjdH0g
YXJncworICovCitmdW5jdGlvbiBpbml0aWFsaXplKGFyZ3MpIHsKKyAgICB2YXIgbWFpbiA9ICQo
Im1haW4iKTsKKyAgICBtYWluLmlubmVySFRNTCA9ICIiOworICAgIHZhciBlcnJvclN0cmluZyA9
IHZhbGlkYXRlQXJndW1lbnRzKGFyZ3MpOworICAgIGlmIChlcnJvclN0cmluZykgeworICAgICAg
ICBtYWluLnRleHRDb250ZW50ID0gIkludGVybmFsIGVycm9yOiAiICsgZXJyb3JTdHJpbmc7Cisg
ICAgICAgIHJlc2l6ZVdpbmRvdyhtYWluLm9mZnNldFdpZHRoLCBtYWluLm9mZnNldEhlaWdodCk7
CisgICAgfSBlbHNlCisgICAgICAgIG5ldyBDb2xvclBpY2tlcihtYWluLCBhcmdzKTsKK30KKwor
Ly8gVGhlIERlZmF1bHRDb2xvclBhbGV0dGUgaXMgdXNlZCB3aGVuIHRoZSBsaXN0IG9mIHZhbHVl
cyBhcmUgZW1wdHkuIAordmFyIERlZmF1bHRDb2xvclBhbGV0dGUgPSBbIiMwMDAwMDAiLCAiIzQw
NDA0MCIsICIjODA4MDgwIiwgIiNjMGMwYzAiLAorICAgICIjZmZmZmZmIiwgIiM5ODAwMDAiLCAi
I2ZmMDAwMCIsICIjZmY5OTAwIiwgIiNmZmZmMDAiLCAiIzAwZmYwMCIsICIjMDBmZmZmIiwKKyAg
ICAiIzRhODZlOCIsICIjMDAwMGZmIiwgIiM5OTAwZmYiLCAiI2ZmMDBmZiJdOworCitmdW5jdGlv
biBoYW5kbGVBcmd1bWVudHNUaW1lb3V0KCkgeworICAgIGlmIChnbG9iYWwuYXJndW1lbnRzUmVj
ZWl2ZWQpCisgICAgICAgIHJldHVybjsKKyAgICB2YXIgYXJncyA9IHsKKyAgICAgICAgdmFsdWVz
IDogRGVmYXVsdENvbG9yUGFsZXR0ZSwKKyAgICAgICAgb3RoZXJDb2xvckxhYmVsOiAiT3RoZXIu
Li4iCisgICAgfTsKKyAgICBpbml0aWFsaXplKGFyZ3MpOworfQorCisvKioKKyAqIEBwYXJhbSB7
IU9iamVjdH0gYXJncworICogQHJldHVybiB7P3N0cmluZ30gQW4gZXJyb3IgbWVzc2FnZSwgb3Ig
bnVsbCBpZiB0aGUgYXJndW1lbnQgaGFzIG5vIGVycm9ycy4KKyAqLworZnVuY3Rpb24gdmFsaWRh
dGVBcmd1bWVudHMoYXJncykgeworICAgIGlmICghYXJncy52YWx1ZXMpCisgICAgICAgIHJldHVy
biAiTm8gdmFsdWVzLiI7CisgICAgaWYgKCFhcmdzLm90aGVyQ29sb3JMYWJlbCkKKyAgICAgICAg
cmV0dXJuICJObyBvdGhlckNvbG9yTGFiZWwuIjsKKyAgICByZXR1cm4gbnVsbDsKK30KKwordmFy
IEFjdGlvbnMgPSB7CisgICAgQ2hvb3NlT3RoZXJDb2xvcjogLTIsCisgICAgQ2FuY2VsOiAtMSwK
KyAgICBTZXRWYWx1ZTogMAorfTsKKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWUKKyAq
LworZnVuY3Rpb24gc3VibWl0VmFsdWUodmFsdWUpIHsKKyAgICB3aW5kb3cucGFnZVBvcHVwQ29u
dHJvbGxlci5zZXRWYWx1ZUFuZENsb3NlUG9wdXAoQWN0aW9ucy5TZXRWYWx1ZSwgdmFsdWUpOwor
fQorCitmdW5jdGlvbiBoYW5kbGVDYW5jZWwoKSB7CisgICAgd2luZG93LnBhZ2VQb3B1cENvbnRy
b2xsZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2FuY2VsLCAiIik7Cit9CisKK2Z1
bmN0aW9uIGNob29zZU90aGVyQ29sb3IoKSB7CisgICAgd2luZG93LnBhZ2VQb3B1cENvbnRyb2xs
ZXIuc2V0VmFsdWVBbmRDbG9zZVBvcHVwKEFjdGlvbnMuQ2hvb3NlT3RoZXJDb2xvciwgIiIpOwor
fQorCitmdW5jdGlvbiBDb2xvclBpY2tlcihlbGVtZW50LCBjb25maWcpIHsKKyAgICB0aGlzLl9l
bGVtZW50ID0gZWxlbWVudDsKKyAgICB0aGlzLl9jb25maWcgPSBjb25maWc7CisgICAgaWYgKHRo
aXMuX2NvbmZpZy52YWx1ZXMubGVuZ3RoID09PSAwKQorICAgICAgICB0aGlzLl9jb25maWcudmFs
dWVzID0gRGVmYXVsdENvbG9yUGFsZXR0ZTsKKyAgICB0aGlzLl9jb250YWluZXIgPSBudWxsOwor
ICAgIHRoaXMuX2xheW91dCgpOworICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigi
a2V5ZG93biIsIGJpbmQodGhpcy5faGFuZGxlS2V5RG93biwgdGhpcykpOworICAgIHRoaXMuX2Vs
ZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgYmluZCh0aGlzLl9oYW5kbGVNb3Vz
ZU1vdmUsIHRoaXMpKTsKKyAgICB0aGlzLl9lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNl
ZG93biIsIGJpbmQodGhpcy5faGFuZGxlTW91c2VEb3duLCB0aGlzKSk7Cit9CisKK3ZhciBTd2F0
Y2hCb3JkZXJCb3hXaWR0aCA9IDI0OyAvLyBrZWVwIGluIHN5bmMgd2l0aCBDU1MKK3ZhciBTd2F0
Y2hCb3JkZXJCb3hIZWlnaHQgPSAyNDsgLy8ga2VlcCBpbiBzeW5jIHdpdGggQ1NTCit2YXIgU3dh
dGNoZXNQZXJSb3cgPSA1OwordmFyIFN3YXRjaGVzTWF4Um93ID0gNDsKKworQ29sb3JQaWNrZXIu
cHJvdG90eXBlLl9sYXlvdXQgPSBmdW5jdGlvbigpIHsKKyAgICB2YXIgY29udGFpbmVyID0gY3Jl
YXRlRWxlbWVudCgiZGl2IiwgImNvbG9yLXN3YXRjaC1jb250YWluZXIiKTsKKyAgICBjb250YWlu
ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBiaW5kKHRoaXMuX2hhbmRsZVN3YXRjaENsaWNr
LCB0aGlzKSwgZmFsc2UpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fY29uZmlnLnZh
bHVlcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgc3dhdGNoID0gY3JlYXRlRWxlbWVudCgi
YnV0dG9uIiwgImNvbG9yLXN3YXRjaCIpOworICAgICAgICBzd2F0Y2guZGF0YXNldC5pbmRleCA9
IGk7CisgICAgICAgIHN3YXRjaC5kYXRhc2V0LnZhbHVlID0gdGhpcy5fY29uZmlnLnZhbHVlc1tp
XTsKKyAgICAgICAgc3dhdGNoLnRpdGxlID0gdGhpcy5fY29uZmlnLnZhbHVlc1tpXTsKKyAgICAg
ICAgc3dhdGNoLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuX2NvbmZpZy52YWx1ZXNbaV07
CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChzd2F0Y2gpOworICAgIH0KKyAgICB2YXIg
Y29udGFpbmVyV2lkdGggPSBTd2F0Y2hCb3JkZXJCb3hXaWR0aCAqIFN3YXRjaGVzUGVyUm93Owor
ICAgIGlmICh0aGlzLl9jb25maWcudmFsdWVzLmxlbmd0aCA+IFN3YXRjaGVzUGVyUm93ICogU3dh
dGNoZXNNYXhSb3cpCisgICAgICAgIGNvbnRhaW5lcldpZHRoICs9IGdldFNjcm9sbGJhcldpZHRo
KCk7CisgICAgY29udGFpbmVyLnN0eWxlLndpZHRoID0gY29udGFpbmVyV2lkdGggKyAicHgiOwor
ICAgIGNvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQgPSAoU3dhdGNoQm9yZGVyQm94SGVpZ2h0ICog
U3dhdGNoZXNNYXhSb3cpICsgInB4IjsKKyAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGNv
bnRhaW5lcik7CisgICAgdmFyIG90aGVyQnV0dG9uID0gY3JlYXRlRWxlbWVudCgiYnV0dG9uIiwg
Im90aGVyLWNvbG9yIiwgdGhpcy5fY29uZmlnLm90aGVyQ29sb3JMYWJlbCk7CisgICAgb3RoZXJC
dXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBjaG9vc2VPdGhlckNvbG9yLCBmYWxzZSk7
CisgICAgdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChvdGhlckJ1dHRvbik7CisgICAgdGhpcy5f
Y29udGFpbmVyID0gY29udGFpbmVyOworICAgIHRoaXMuX290aGVyQnV0dG9uID0gb3RoZXJCdXR0
b247CisgICAgdmFyIGVsZW1lbnRXaWR0aCA9IHRoaXMuX2VsZW1lbnQub2Zmc2V0V2lkdGg7Cisg
ICAgdmFyIGVsZW1lbnRIZWlnaHQgPSB0aGlzLl9lbGVtZW50Lm9mZnNldEhlaWdodDsKKyAgICBy
ZXNpemVXaW5kb3coZWxlbWVudFdpZHRoLCBlbGVtZW50SGVpZ2h0KTsKK307CisKK0NvbG9yUGlj
a2VyLnByb3RvdHlwZS5zZWxlY3RDb2xvckF0SW5kZXggPSBmdW5jdGlvbihpbmRleCkgeworICAg
IGluZGV4ID0gTWF0aC5tYXgoTWF0aC5taW4odGhpcy5fY29udGFpbmVyLmNoaWxkTm9kZXMubGVu
Z3RoIC0gMSwgaW5kZXgpLCAwKTsKKyAgICB0aGlzLl9jb250YWluZXIuY2hpbGROb2Rlc1tpbmRl
eF0uZm9jdXMoKTsKK307CisKK0NvbG9yUGlja2VyLnByb3RvdHlwZS5faGFuZGxlTW91c2VNb3Zl
ID0gZnVuY3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlzdC5jb250
YWlucygiY29sb3Itc3dhdGNoIikpCisgICAgICAgIGV2ZW50LnRhcmdldC5mb2N1cygpOworfTsK
KworQ29sb3JQaWNrZXIucHJvdG90eXBlLl9oYW5kbGVNb3VzZURvd24gPSBmdW5jdGlvbihldmVu
dCkgeworICAgIC8vIFByZXZlbnQgYmx1ci4KKyAgICBpZiAoZXZlbnQudGFyZ2V0LmNsYXNzTGlz
dC5jb250YWlucygiY29sb3Itc3dhdGNoIikpCisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7Cit9OworCitDb2xvclBpY2tlci5wcm90b3R5cGUuX2hhbmRsZUtleURvd24gPSBmdW5jdGlv
bihldmVudCkgeworICAgIHZhciBrZXkgPSBldmVudC5rZXlJZGVudGlmaWVyOworICAgIGlmIChr
ZXkgPT09ICJVKzAwMUIiKSAvLyBFU0MKKyAgICAgICAgaGFuZGxlQ2FuY2VsKCk7CisgICAgZWxz
ZSBpZiAoa2V5ID09ICJMZWZ0IiB8fCBrZXkgPT0gIlVwIiB8fCBrZXkgPT0gIlJpZ2h0IiB8fCBr
ZXkgPT0gIkRvd24iKSB7CisgICAgICAgIHZhciBzZWxlY3RlZEVsZW1lbnQgPSBkb2N1bWVudC5h
Y3RpdmVFbGVtZW50OworICAgICAgICB2YXIgaW5kZXggPSAwOworICAgICAgICBpZiAoc2VsZWN0
ZWRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygib3RoZXItY29sb3IiKSkgeworICAgICAgICAg
ICAgaWYgKGtleSAhPSAiUmlnaHQiICYmIGtleSAhPSAiVXAiKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIGluZGV4ID0gdGhpcy5fY29udGFpbmVyLmNoaWxkTm9kZXMubGVu
Z3RoIC0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChzZWxlY3RlZEVsZW1lbnQuY2xhc3NMaXN0LmNv
bnRhaW5zKCJjb2xvci1zd2F0Y2giKSkgeworICAgICAgICAgICAgaW5kZXggPSBwYXJzZUludChz
ZWxlY3RlZEVsZW1lbnQuZGF0YXNldC5pbmRleCwgMTApOworICAgICAgICAgICAgc3dpdGNoIChr
ZXkpIHsKKyAgICAgICAgICAgIGNhc2UgIkxlZnQiOgorICAgICAgICAgICAgICAgIGluZGV4LS07
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJSaWdodCI6CisgICAg
ICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgIlVwIjoKKyAgICAgICAgICAgICAgICBpbmRleCAtPSBTd2F0Y2hlc1BlclJvdzsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgIkRvd24iOgorICAgICAgICAg
ICAgICAgIGluZGV4ICs9IFN3YXRjaGVzUGVyUm93OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4ID4gdGhpcy5fY29udGFpbmVyLmNo
aWxkTm9kZXMubGVuZ3RoIC0gMSkgeworICAgICAgICAgICAgICAgIHRoaXMuX290aGVyQnV0dG9u
LmZvY3VzKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIHRoaXMuc2VsZWN0Q29sb3JBdEluZGV4KGluZGV4KTsKKyAgICB9CisgICAg
ZXZlbnQucHJldmVudERlZmF1bHQoKTsKK307CisKK0NvbG9yUGlja2VyLnByb3RvdHlwZS5faGFu
ZGxlU3dhdGNoQ2xpY2sgPSBmdW5jdGlvbihldmVudCkgeworICAgIGlmIChldmVudC50YXJnZXQu
Y2xhc3NMaXN0LmNvbnRhaW5zKCJjb2xvci1zd2F0Y2giKSkKKyAgICAgICAgc3VibWl0VmFsdWUo
ZXZlbnQudGFyZ2V0LmRhdGFzZXQudmFsdWUpOworfTsKKworaWYgKHdpbmRvdy5kaWFsb2dBcmd1
bWVudHMpIHsKKyAgICBpbml0aWFsaXplKGRpYWxvZ0FyZ3VtZW50cyk7Cit9IGVsc2UgeworICAg
IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgaGFuZGxlTWVzc2FnZSwgZmFsc2Up
OworICAgIHdpbmRvdy5zZXRUaW1lb3V0KGhhbmRsZUFyZ3VtZW50c1RpbWVvdXQsIDEwMDApOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAppbmRleCA4NDdjMmQ2YWNmYWQw
NmRkMWUyYThkMTQwN2E4MDJmYTJlNzZhNjJjLi5mODEyZjc4NWY4ZWI0NzlmOTdkZTA4MTJlMzY2
N2RkZjEzMmJkNTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJD
b3JlLmd5cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cApAQCAt
OTA1LDggKzkwNSw4IEBACiAgICAgICAgIHsKICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnQ2Fs
ZW5kYXJQaWNrZXInLAogICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4vUmVz
b3VyY2VzL2NhbGVuZGFyUGlja2VyLmNzcycsCi0gICAgICAgICAgICAnLi4vUmVzb3VyY2VzL2Nh
bGVuZGFyUGlja2VyLmpzJywKKyAgICAgICAgICAgICcuLi9SZXNvdXJjZXMvcGFnZXBvcHVwcy9j
YWxlbmRhclBpY2tlci5jc3MnLAorICAgICAgICAgICAgJy4uL1Jlc291cmNlcy9wYWdlcG9wdXBz
L2NhbGVuZGFyUGlja2VyLmpzJywKICAgICAgICAgICBdLAogICAgICAgICAgICdvdXRwdXRzJzog
WwogICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdC9DYWxlbmRh
clBpY2tlci5oJywKQEAgLTkyNCw3ICs5MjQsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgJ2Fj
dGlvbl9uYW1lJzogJ0NhbGVuZGFyUGlja2VyTWFjJywKICAgICAgICAgICAnaW5wdXRzJzogWwot
ICAgICAgICAgICAgJy4uL1Jlc291cmNlcy9jYWxlbmRhclBpY2tlck1hYy5jc3MnLAorICAgICAg
ICAgICAgJy4uL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFyUGlja2VyTWFjLmNzcycsCiAg
ICAgICAgICAgXSwKICAgICAgICAgICAnb3V0cHV0cyc6IFsKICAgICAgICAgICAgICc8KFNIQVJF
RF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQvQ2FsZW5kYXJQaWNrZXJNYWMuaCcsCkBAIC05NDIs
OCArOTQyLDggQEAKICAgICAgICAgewogICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdDb2xvclN1
Z2dlc3Rpb25QaWNrZXInLAogICAgICAgICAgICdpbnB1dHMnOiBbCi0gICAgICAgICAgICAnLi4v
UmVzb3VyY2VzL2NvbG9yU3VnZ2VzdGlvblBpY2tlci5jc3MnLAotICAgICAgICAgICAgJy4uL1Jl
c291cmNlcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuanMnLAorICAgICAgICAgICAgJy4uL1Jlc291
cmNlcy9wYWdlcG9wdXBzL2NvbG9yU3VnZ2VzdGlvblBpY2tlci5jc3MnLAorICAgICAgICAgICAg
Jy4uL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NvbG9yU3VnZ2VzdGlvblBpY2tlci5qcycsCiAgICAg
ICAgICAgXSwKICAgICAgICAgICAnb3V0cHV0cyc6IFsKICAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS93ZWJraXQvQ29sb3JTdWdnZXN0aW9uUGlja2VyLmgnLApkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDFkMmZmM2Y5ZWYwYTk2ZjRjOTU1MDMz
MzczOTMwMzBiODU3NGQ5ODMuLjM5NGZiYTUxY2Q5ZDY4ZmQzYTVlZmQyNGYxYWQ2YjBiNzZhYjQ0
MjkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAxMi0wOC0xNCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KKworICAg
ICAgICBNb3ZlIHBhZ2UgcG9wdXAgcmVzb3VyY2VzIHRvIHNlcGFyYXRlIGRpcmVjdG9yeQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTM5MzIKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1hbnVhbFRlc3Rz
L2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sOgorICAgICAgICAqIE1hbnVhbFRlc3RzL2Zvcm1z
L2NvbG9yLXN1Z2dlc3Rpb24tcGlja2VyLmh0bWw6CisKIDIwMTItMDgtMTEgIFJhcGhhZWwgS3Vi
byBkYSBDb3N0YSAgPHJha3Vjb0B3ZWJraXQub3JnPgogCiAgICAgICAgIFtDTWFrZV0gUmV3cml0
ZSBGaW5kTGliU291cDIuY21ha2UuCmRpZmYgLS1naXQgYS9NYW51YWxUZXN0cy9mb3Jtcy9jYWxl
bmRhci1waWNrZXIuaHRtbCBiL01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1s
CmluZGV4IGEzOGRjMzAwMGJiYzU2NTg1NGE5ODQzNTk0MDk1YTkwNmUzYjFmZGQuLjM2OWY5ODE0
Y2E0MDQyYTE4Y2VmM2JhYzViMzI1YWVhOGQ0MmFkZGQgMTAwNjQ0Ci0tLSBhL01hbnVhbFRlc3Rz
L2Zvcm1zL2NhbGVuZGFyLXBpY2tlci5odG1sCisrKyBiL01hbnVhbFRlc3RzL2Zvcm1zL2NhbGVu
ZGFyLXBpY2tlci5odG1sCkBAIC03NSwxMCArNzUsMTAgQEAgZnVuY3Rpb24gb3BlbkNhbGVuZGFy
KGFyZ3MpIHsKICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9ICc8aGVhZD48L2hl
YWQ+PGJvZHk+PGRpdiBpZD1tYWluPkxvYWRpbmcuLi48L2Rpdj48L2JvZHk+JzsKICAgICB2YXIg
bGluayA9IGRvYy5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CiAgICAgbGluay5yZWwgPSAnc3R5bGVz
aGVldCc7Ci0gICAgbGluay5ocmVmID0gJy4uLy4uL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9j
YWxlbmRhclBpY2tlci5jc3M/JyArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CisgICAgbGluay5o
cmVmID0gJy4uLy4uL1NvdXJjZS9XZWJDb3JlL1Jlc291cmNlcy9wYWdlcG9wdXBzL2NhbGVuZGFy
UGlja2VyLmNzcz8nICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTsKICAgICBkb2MuaGVhZC5hcHBl
bmRDaGlsZChsaW5rKTsKICAgICB2YXIgc2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3Njcmlw
dCcpOwotICAgIHNjcmlwdC5zcmMgPSAnLi4vLi4vU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL2Nh
bGVuZGFyUGlja2VyLmpzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgpOworICAgIHNjcmlwdC5z
cmMgPSAnLi4vLi4vU291cmNlL1dlYkNvcmUvUmVzb3VyY2VzL3BhZ2Vwb3B1cHMvY2FsZW5kYXJQ
aWNrZXIuanM/JyArIChuZXcgRGF0ZSgpKS5nZXRUaW1lKCk7CiAgICAgZG9jLmJvZHkuYXBwZW5k
Q2hpbGQoc2NyaXB0KTsKIAogICAgIHZhciBwYWdlUG9wdXBDb250cm9sbGVyID0gewpkaWZmIC0t
Z2l0IGEvTWFudWFsVGVzdHMvZm9ybXMvY29sb3Itc3VnZ2VzdGlvbi1waWNrZXIuaHRtbCBiL01h
bnVhbFRlc3RzL2Zvcm1zL2NvbG9yLXN1Z2dlc3Rpb24tcGlja2VyLmh0bWwKaW5kZXggNmEyNWM3
NGYzNDRmYjU4MTBhNGZiYzI5NTg2MDBiMWVkYTFiZjY0Ny4uOGY0NjBmM2I0ODNiNTdhNjliNDYz
ZDE4OTA3N2Q3MDYzYTU4YTFhMSAxMDA2NDQKLS0tIGEvTWFudWFsVGVzdHMvZm9ybXMvY29sb3It
c3VnZ2VzdGlvbi1waWNrZXIuaHRtbAorKysgYi9NYW51YWxUZXN0cy9mb3Jtcy9jb2xvci1zdWdn
ZXN0aW9uLXBpY2tlci5odG1sCkBAIC0zOCwxMCArMzgsMTAgQEAgZnVuY3Rpb24gb3BlbkNvbG9y
UGlja2VyKGFyZ3MpIHsKICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LmlubmVySFRNTCA9ICc8aGVh
ZD48L2hlYWQ+PGJvZHk+PGRpdiBpZD1tYWluPkxvYWRpbmcuLi48L2Rpdj48L2JvZHk+JzsKICAg
ICB2YXIgbGluayA9IGRvYy5jcmVhdGVFbGVtZW50KCdsaW5rJyk7CiAgICAgbGluay5yZWwgPSAn
c3R5bGVzaGVldCc7Ci0gICAgbGluay5ocmVmID0gJy4uLy4uL1NvdXJjZS9XZWJDb3JlL1Jlc291
cmNlcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuY3NzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgp
OworICAgIGxpbmsuaHJlZiA9ICcuLi8uLi9Tb3VyY2UvV2ViQ29yZS9SZXNvdXJjZXMvcGFnZXBv
cHVwcy9jb2xvclN1Z2dlc3Rpb25QaWNrZXIuY3NzPycgKyAobmV3IERhdGUoKSkuZ2V0VGltZSgp
OwogICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKGxpbmspOwogICAgIHZhciBzY3JpcHQgPSBkb2Mu
Y3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7Ci0gICAgc2NyaXB0LnNyYyA9ICcuLi8uLi9Tb3VyY2Uv
V2ViQ29yZS9SZXNvdXJjZXMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzPycgKyAobmV3IERhdGUo
KSkuZ2V0VGltZSgpOworICAgIHNjcmlwdC5zcmMgPSAnLi4vLi4vU291cmNlL1dlYkNvcmUvUmVz
b3VyY2VzL3BhZ2Vwb3B1cHMvY29sb3JTdWdnZXN0aW9uUGlja2VyLmpzPycgKyAobmV3IERhdGUo
KSkuZ2V0VGltZSgpOwogICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7CiAKICAgICB2
YXIgcGFnZVBvcHVwQ29udHJvbGxlciA9IHsK
</data>

          </attachment>
      

    </bug>

</bugzilla>