Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hkVwX-0006BQ-D6 for pgadmin-hackers@arkaria.postgresql.org; Mon, 08 Jul 2019 15:52:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1hkVwW-0005Yi-9T for pgadmin-hackers@arkaria.postgresql.org; Mon, 08 Jul 2019 15:52:40 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hkTvq-0000YH-4h for pgadmin-hackers@lists.postgresql.org; Mon, 08 Jul 2019 13:43:50 +0000 Received: from mail-yb1-xb2b.google.com ([2607:f8b0:4864:20::b2b]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hkTvh-0000cP-Lh for pgadmin-hackers@postgresql.org; Mon, 08 Jul 2019 13:43:49 +0000 Received: by mail-yb1-xb2b.google.com with SMTP id a14so4704446ybm.11 for ; Mon, 08 Jul 2019 06:43:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=/BwTNKetIGG/G0A+YGw2cCo9VHFdsn2FM9WZFLKpfAI=; b=jAsDY1PPCMfXuT6HaZSINjiGWQkUL/m+TteK1hx61bVDgdSOatjyGo0wj+S1x8FQWX BCqt++6oWadgJSV1cubYMJSXr2nHPXsqMLe+K7ALgkJqVq4GMrkNw93i+SpX6tKYEBGR pgq8M7uuNX/Yb0+pipxST0brcdl9Z1wEEtI3re3RKUP6WiPTizjNHF1PoVH6PFooKIod Vuu47XksIorw4+CjvJRQjMavbz60GS8nid7v89rIFvgwdzMIfCYmOVnT/SYU9jhqwgJp mzP9q6UMyfRtJuWCA5ku7yyKat/irETwxcGG476TqLQJwdVlISNHhjOd2iEyNE6hLf2n s2Dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=/BwTNKetIGG/G0A+YGw2cCo9VHFdsn2FM9WZFLKpfAI=; b=jDL2NiXjZPg4NPehSSb4qjlvF7Nq41kGk3UUpBiUyf53r4nb1+PPbkz/o65KFEjgeh ZkpdeBozY2WErS7ZV+HndMkA4IvoUFyfcKxH5GwSHaNKAOuNmImD0+5LfYuLPGxkhsF5 RBsInS4/SOYjs+WJ26ZcUe3Xqsxc/Bw3rE5cCkO5hXCdqGlwufQ9e2MVSADmWhX2xRGN BV5uf76W7Y6+Rt6G1ey5pikMLH39BpVEM+Gn07lA5+i8rczxWgtLUeCSuUtrrAa1Z43N k5lRD+7V0xZImf7dyqKzYnEvviiRmuV/0v5jIXBpaeV6xNx8MgCvBra3HT4GSClfEGdg qQbQ== X-Gm-Message-State: APjAAAXmwf7zfNlvq02wrlL4+WmdAbCPDDaOuftAl0aHzqPTUN+KjbWN clkEbQPf4ciS+eTJPwPVZ0N0BnexRXfE/Q7VB6UtaDxjlBM/EA== X-Google-Smtp-Source: APXvYqxl6wcOgaB0sLFHdnYaA6/MP8x7T1dq+pbua1QMUcxxciwM862FluxxkAm3hMPibPoEL3yjszSdXBrnJxir10Y= X-Received: by 2002:a25:bf84:: with SMTP id l4mr9726638ybk.516.1562593418430; Mon, 08 Jul 2019 06:43:38 -0700 (PDT) MIME-Version: 1.0 From: Ganesh Jaybhay Date: Mon, 8 Jul 2019 19:13:31 +0530 Message-ID: Subject: [pgAdmin4][patch] Keyboard accessibility for sub-node control To: pgadmin-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000a2853d058d2ba165" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --000000000000a2853d058d2ba165 Content-Type: multipart/alternative; boundary="000000000000a2853b058d2ba163" --000000000000a2853b058d2ba163 Content-Type: text/plain; charset="UTF-8" Hi Hackers, Attached is the patch for keyboard accessibility of sub-node control. It also covers sub-node dialog forward/backward tab navigation with shortcuts. Kindly review. Regards, Ganesh Jaybhay --000000000000a2853b058d2ba163 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Attached i= s the patch for keyboard accessibility of sub-node control. It also covers = sub-node dialog forward/backward tab navigation with shortcuts.
<= br>
Kindly review.

Regards,
Ga= nesh Jaybhay
--000000000000a2853b058d2ba163-- --000000000000a2853d058d2ba165 Content-Type: application/octet-stream; name="subnode_control_accessibility.patch" Content-Disposition: attachment; filename="subnode_control_accessibility.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jxufrnwm0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvcmVnaXN0ZXJfYnJvd3Nlcl9wcmVmZXJl bmNlcy5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvcmVnaXN0ZXJfYnJvd3Nlcl9wcmVmZXJlbmNl cy5weQppbmRleCAwMDlmMWMxLi5iYjVkYTA2IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93 c2VyL3JlZ2lzdGVyX2Jyb3dzZXJfcHJlZmVyZW5jZXMucHkKKysrIGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9yZWdpc3Rlcl9icm93c2VyX3ByZWZlcmVuY2VzLnB5CkBAIC0zODcsMyArMzg3LDE4IEBA IGRlZiByZWdpc3Rlcl9icm93c2VyX3ByZWZlcmVuY2VzKHNlbGYpOgogICAgICAgICBjYXRlZ29y eV9sYWJlbD1nZXR0ZXh0KCdLZXlib2FyZCBzaG9ydGN1dHMnKSwKICAgICAgICAgZmllbGRzPWZp ZWxkcwogICAgICkKKworICAgIHNlbGYucHJlZmVyZW5jZS5yZWdpc3RlcigKKyAgICAgICAgJ2tl eWJvYXJkX3Nob3J0Y3V0cycsCisgICAgICAgICdhZGRfZ3JpZF9yb3cnLAorICAgICAgICBnZXR0 ZXh0KCdBZGQgZ3JpZCByb3cnKSwKKyAgICAgICAgJ2tleWJvYXJkc2hvcnRjdXQnLAorICAgICAg ICB7CisgICAgICAgICAgICAnYWx0JzogRmFsc2UsCisgICAgICAgICAgICAnc2hpZnQnOiBUcnVl LAorICAgICAgICAgICAgJ2NvbnRyb2wnOiBUcnVlLAorICAgICAgICAgICAgJ2tleSc6IHsna2V5 X2NvZGUnOiA2NSwgJ2NoYXInOiAnYSd9CisgICAgICAgIH0sCisgICAgICAgIGNhdGVnb3J5X2xh YmVsPWdldHRleHQoJ0tleWJvYXJkIHNob3J0Y3V0cycpLAorICAgICAgICBmaWVsZHM9ZmllbGRz CisgICAgKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMva2V5Ym9h cmQuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9rZXlib2FyZC5qcwppbmRleCA5 YWQ1OWI2Li5iNTBkMDI1IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9q cy9rZXlib2FyZC5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9rZXlib2Fy ZC5qcwpAQCAtNDEsNiArNDEsNyBAQCBfLmV4dGVuZChwZ0Jyb3dzZXIua2V5Ym9hcmROYXZpZ2F0 aW9uLCB7CiAgICAgICAgICdkaXJlY3RfZGVidWdnaW5nJzogY29tbW9uVXRpbHMucGFyc2VTaG9y dGN1dFZhbHVlKHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZSgnYnJvd3NlcicsICdkaXJlY3RfZGVi dWdnaW5nJykudmFsdWUpLAogICAgICAgICAnZHJvcF9tdWx0aXBsZV9vYmplY3RzJzogY29tbW9u VXRpbHMucGFyc2VTaG9ydGN1dFZhbHVlKHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZSgnYnJvd3Nl cicsICdncmlkX21lbnVfZHJvcF9tdWx0aXBsZScpLnZhbHVlKSwKICAgICAgICAgJ2Ryb3BfY2Fz Y2FkZV9tdWx0aXBsZV9vYmplY3RzJzogY29tbW9uVXRpbHMucGFyc2VTaG9ydGN1dFZhbHVlKHBn QnJvd3Nlci5nZXRfcHJlZmVyZW5jZSgnYnJvd3NlcicsICdncmlkX21lbnVfZHJvcF9jYXNjYWRl X211bHRpcGxlJykudmFsdWUpLAorICAgICAgICAnYWRkX2dyaWRfcm93JzogY29tbW9uVXRpbHMu cGFyc2VTaG9ydGN1dFZhbHVlKHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZSgnYnJvd3NlcicsICdh ZGRfZ3JpZF9yb3cnKS52YWx1ZSksCiAKICAgICAgIH07CiAgICAgICB0aGlzLnNob3J0Y3V0TWV0 aG9kcyA9IHsKQEAgLTYxLDYgKzYyLDcgQEAgXy5leHRlbmQocGdCcm93c2VyLmtleWJvYXJkTmF2 aWdhdGlvbiwgewogICAgICAgICAnYmluZERpcmVjdERlYnVnZ2luZyc6IHsnc2hvcnRjdXRzJzog dGhpcy5rZXlib2FyZFNob3J0Y3V0LmRpcmVjdF9kZWJ1Z2dpbmd9LCAvLyBTdWIgbWVudSAtIERp cmVjdCBEZWJ1Z2dpbmcKICAgICAgICAgJ2JpbmREcm9wTXVsdGlwbGVPYmplY3RzJzogeydzaG9y dGN1dHMnOiB0aGlzLmtleWJvYXJkU2hvcnRjdXQuZHJvcF9tdWx0aXBsZV9vYmplY3RzfSwgLy8g R3JpZCBNZW51IERyb3AgTXVsdGlwbGUKICAgICAgICAgJ2JpbmREcm9wQ2FzY2FkZU11bHRpcGxl T2JqZWN0cyc6IHsnc2hvcnRjdXRzJzogdGhpcy5rZXlib2FyZFNob3J0Y3V0LmRyb3BfY2FzY2Fk ZV9tdWx0aXBsZV9vYmplY3RzfSwgLy8gR3JpZCBNZW51IERyb3AgQ2FzY2FkZSBNdWx0aXBsZQor ICAgICAgICAnYmluZEFkZEdyaWRSb3cnOiB7J3Nob3J0Y3V0cyc6IHRoaXMua2V5Ym9hcmRTaG9y dGN1dC5hZGRfZ3JpZF9yb3d9LCAvLyBTdWJub2RlIEdyaWQgQWRkIFJvdwogICAgICAgfTsKICAg ICAgIHRoaXMuYmluZFNob3J0Y3V0cygpOwogICAgIH0KQEAgLTMzMCw2ICszMzIsMTIgQEAgXy5l eHRlbmQocGdCcm93c2VyLmtleWJvYXJkTmF2aWdhdGlvbiwgewogICAgICAgJCgnYnV0dG9uLmRl bGV0ZV9tdWx0aXBsZV9jYXNjYWRlJykuY2xpY2soKTsKICAgICB9CiAgIH0sCisgIGJpbmRBZGRH cmlkUm93OiBmdW5jdGlvbigpIHsKKyAgICBsZXQgc3ViTm9kZSA9ICQoZG9jdW1lbnQuYWN0aXZl RWxlbWVudCkuY2xvc2VzdCgnLm9iamVjdC5zdWJub2RlJyk7CisgICAgaWYoJChzdWJOb2RlKS5s ZW5ndGgpIHsKKyAgICAgICQoc3ViTm9kZSkuZmluZCgnLmFkZCcpLmNsaWNrKCk7CisgICAgfQor ICB9LAogICBpc1Byb3BlcnR5UGFuZWxWaXNpYmxlOiBmdW5jdGlvbigpIHsKICAgICBsZXQgaXNQ YW5lbFZpc2libGUgPSBmYWxzZTsKICAgICBfLmVhY2gocGdBZG1pbi5Ccm93c2VyLmRvY2tlci5m aW5kUGFuZWxzKCksIChwYW5lbCkgPT4gewpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGlj L2pzL2JhY2tmb3JtLnBnYWRtaW4uanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2Zvcm0u cGdhZG1pbi5qcwppbmRleCBiOTdmYzM4Li4xNTY0MzBkIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1p bi9zdGF0aWMvanMvYmFja2Zvcm0ucGdhZG1pbi5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMv anMvYmFja2Zvcm0ucGdhZG1pbi5qcwpAQCAtMTAsOCArMTAsMTAgQEAKIGRlZmluZShbCiAgICdz b3VyY2VzL2dldHRleHQnLCAndW5kZXJzY29yZScsICd1bmRlcnNjb3JlLnN0cmluZycsICdqcXVl cnknLAogICAnYmFja2JvbmUnLCAnYmFja2Zvcm0nLCAnYmFja2dyaWQnLCAnY29kZW1pcnJvcics ICdzb3VyY2VzL3NxbGVkaXRvcl91dGlscycsCisgICdzb3VyY2VzL2tleWJvYXJkX3Nob3J0Y3V0 cycsCiAgICdzcGVjdHJ1bScsICdwZ2FkbWluLmJhY2tncmlkJywgJ3NlbGVjdDInLCAnYm9vdHN0 cmFwLnRvZ2dsZScsCi1dLCBmdW5jdGlvbihnZXR0ZXh0LCBfLCBTLCAkLCBCYWNrYm9uZSwgQmFj a2Zvcm0sIEJhY2tncmlkLCBDb2RlTWlycm9yLCBTcWxFZGl0b3JVdGlscykgeworXSwgZnVuY3Rp b24oZ2V0dGV4dCwgXywgUywgJCwgQmFja2JvbmUsIEJhY2tmb3JtLCBCYWNrZ3JpZCwgQ29kZU1p cnJvciwKKyAgU3FsRWRpdG9yVXRpbHMsIGtleWJvYXJkU2hvcnRjdXRzKSB7CiAKICAgdmFyIHBn QWRtaW4gPSAod2luZG93LnBnQWRtaW4gPSB3aW5kb3cucGdBZG1pbiB8fCB7fSksCiAgICAgcGdC cm93c2VyID0gcGdBZG1pbi5Ccm93c2VyOwpAQCAtMTI2OSw2ICsxMjcxLDEzIEBAIGRlZmluZShb CiAKICAgICAgIHZhciAkZGlhbG9nID0gZ3JpZEJvZHkuYXBwZW5kKHN1Yk5vZGVHcmlkKTsKIAor ICAgICAgbGV0IHByZWZlcmVuY2VzID0gcGdCcm93c2VyLmdldF9wcmVmZXJlbmNlc19mb3JfbW9k dWxlKCdicm93c2VyJyk7CisgICAgICBsZXQgYWRkQnRuID0gJGRpYWxvZy5maW5kKCcuYWRkJyk7 CisgICAgICAvLyBBZGQgdGl0bGUgdG8gdGhlIGJ1dHRvbnMKKyAgICAgICQoYWRkQnRuKQorICAg ICAgICAuYXR0cigndGl0bGUnLAorICAgICAgICAgIGtleWJvYXJkU2hvcnRjdXRzLnNob3J0Y3V0 X3RpdGxlKGdldHRleHQoJ0FkZCBuZXcgcm93JykscHJlZmVyZW5jZXMuYWRkX2dyaWRfcm93KSk7 CisKICAgICAgIC8vIEFkZCBidXR0b24gY2FsbGJhY2sKICAgICAgIGlmICghKGRhdGEuZGlzYWJs ZWQgfHwgZGF0YS5jYW5BZGQgPT0gZmFsc2UpKSB7CiAgICAgICAgICRkaWFsb2cuZmluZCgnYnV0 dG9uLmFkZCcpLmZpcnN0KCkub24oJ2NsaWNrJywoZSkgPT4gewpAQCAtMTU1NCw2ICsxNTYzLDE0 IEBAIGRlZmluZShbCiAKICAgICAgIHZhciAkZGlhbG9nID0gZ3JpZEJvZHkuYXBwZW5kKHN1Yk5v ZGVHcmlkKTsKIAorICAgICAgbGV0IHByZWZlcmVuY2VzID0gcGdCcm93c2VyLmdldF9wcmVmZXJl bmNlc19mb3JfbW9kdWxlKCdicm93c2VyJyk7CisgICAgICBsZXQgYWRkQnRuID0gJGRpYWxvZy5m aW5kKCcuYWRkJyk7CisgICAgICAvLyBBZGQgdGl0bGUgdG8gdGhlIGJ1dHRvbnMKKyAgICAgICQo YWRkQnRuKQorICAgICAgICAuYXR0cigndGl0bGUnLAorICAgICAgICAgIGtleWJvYXJkU2hvcnRj dXRzLnNob3J0Y3V0X3RpdGxlKGdldHRleHQoJ0FkZCBuZXcgcm93JykscHJlZmVyZW5jZXMuYWRk X2dyaWRfcm93KSk7CisKKwogICAgICAgLy8gQWRkIGJ1dHRvbiBjYWxsYmFjawogICAgICAgJGRp YWxvZy5maW5kKCdidXR0b24uYWRkJykub24oJ2NsaWNrJywoZSkgPT4gewogICAgICAgICBlLnBy ZXZlbnREZWZhdWx0KCk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2dy aWQucGdhZG1pbi5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZ3JpZC5wZ2FkbWluLmpz CmluZGV4IGM4MDQ2MDkuLjg2Y2MzNWMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy9iYWNrZ3JpZC5wZ2FkbWluLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZ3Jp ZC5wZ2FkbWluLmpzCkBAIC05LDE1ICs5LDE4IEBACiAKIGRlZmluZShbCiAgICdzb3VyY2VzL2dl dHRleHQnLCAndW5kZXJzY29yZScsICdqcXVlcnknLCAnYmFja2JvbmUnLCAnYmFja2Zvcm0nLCAn YmFja2dyaWQnLCAnYWxlcnRpZnknLAotICAnbW9tZW50JywgJ2JpZ251bWJlcicsICdib290c3Ry YXAuZGF0ZXRpbWVwaWNrZXInLCAnYmFja2dyaWQuZmlsdGVyJywKLSAgJ2Jvb3RzdHJhcC50b2dn bGUnLAorICAnbW9tZW50JywgJ2JpZ251bWJlcicsICdzb3VyY2VzL3V0aWxzJywgJ3NvdXJjZXMv a2V5Ym9hcmRfc2hvcnRjdXRzJywKKyAgJ2Jvb3RzdHJhcC5kYXRldGltZXBpY2tlcicsICdiYWNr Z3JpZC5maWx0ZXInLCAnYm9vdHN0cmFwLnRvZ2dsZScsCiBdLCBmdW5jdGlvbigKLSAgZ2V0dGV4 dCwgXywgJCwgQmFja2JvbmUsIEJhY2tmb3JtLCBCYWNrZ3JpZCwgQWxlcnRpZnksIG1vbWVudCwg QmlnTnVtYmVyCisgIGdldHRleHQsIF8sICQsIEJhY2tib25lLCBCYWNrZm9ybSwgQmFja2dyaWQs IEFsZXJ0aWZ5LCBtb21lbnQsIEJpZ051bWJlciwKKyAgY29tbW9uVXRpbHMsIGtleWJvYXJkU2hv cnRjdXRzCiApIHsKICAgLyoKICAgICogQWRkIG1lY2hhbmlzbSBpbiBiYWNrZ3JpZCB0byByZW5k ZXIgZGlmZmVyZW50IHR5cGVzIG9mIGNlbGxzIGluCiAgICAqIHNhbWUgY29sdW1uOwogICAgKi8K KyAgbGV0IHBnQWRtaW4gPSAod2luZG93LnBnQWRtaW4gPSB3aW5kb3cucGdBZG1pbiB8fCB7fSks CisgICAgcGdCcm93c2VyID0gcGdBZG1pbi5Ccm93c2VyOwogCiAgIC8vIEFkZCBuZXcgcHJvcGVy dHkgY2VsbEZ1bmN0aW9uIGluIEJhY2tncmlkLkNvbHVtbi4KICAgXy5leHRlbmQoQmFja2dyaWQu Q29sdW1uLnByb3RvdHlwZS5kZWZhdWx0cywgewpAQCAtMzcsNiArNDAsMTggQEAgZGVmaW5lKFsK ICAgICB9LAogICB9KTsKIAorICAvLyBiaW5kIHNob3J0Y3V0IGluIGNlbGwgZWRpdCBtb2RlCisg IF8uZXh0ZW5kKEJhY2tncmlkLklucHV0Q2VsbEVkaXRvci5wcm90b3R5cGUuZXZlbnRzLCB7Cisg ICAgJ2tleWRvd24nOiBmdW5jdGlvbihlKSB7CisgICAgICBsZXQgcHJlZmVyZW5jZXMgPSBwZ0Jy b3dzZXIuZ2V0X3ByZWZlcmVuY2VzX2Zvcl9tb2R1bGUoJ2Jyb3dzZXInKTsKKyAgICAgIGlmKGtl eWJvYXJkU2hvcnRjdXRzLnZhbGlkYXRlU2hvcnRjdXRLZXlzKHByZWZlcmVuY2VzLmFkZF9ncmlk X3JvdyxlKSkgeworICAgICAgICBwZ0Jyb3dzZXIua2V5Ym9hcmROYXZpZ2F0aW9uLmJpbmRBZGRH cmlkUm93KCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBCYWNrZ3JpZC5JbnB1dENlbGxFZGl0 b3IucHJvdG90eXBlLnNhdmVPckNhbmNlbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAg fQorICAgIH0sCisgIH0pOworCiAgIC8qIE92ZXJyaWRpbmcgYmFja2dyaWQgc29ydCBtZXRob2Qu CiAgICAqIEFzIHdlIGFyZSBnZXR0aW5nIG51bWVyaWMsIGludGVnZXIgdmFsdWVzIGFzIHN0cmlu ZwogICAgKiBmcm9tIHNlcnZlciBzaWRlLCBidXQgb24gY2xpZW50IHNpZGUgamF2YXNjcmlwdCB0 cnVuY2F0ZXMKQEAgLTE4OSw3ICsyMDQsNyBAQCBkZWZpbmUoWwogCiAgIHZhciBPYmplY3RDZWxs RWRpdG9yID0gQmFja2dyaWQuRXh0ZW5zaW9uLk9iamVjdENlbGxFZGl0b3IgPSBCYWNrZ3JpZC5D ZWxsRWRpdG9yLmV4dGVuZCh7CiAgICAgbW9kYWxUZW1wbGF0ZTogXy50ZW1wbGF0ZShbCi0gICAg ICAnPGRpdiBjbGFzcz0ic3Vibm9kZS1kaWFsb2ciIHRhYmluZGV4PSIxIj4nLAorICAgICAgJzxk aXYgY2xhc3M9InN1Ym5vZGUtZGlhbG9nIiB0YWJpbmRleD0iMCI+JywKICAgICAgICcgICAgPGRp diBjbGFzcz0ic3Vibm9kZS1ib2R5Ij48L2Rpdj4nLAogICAgICAgJzwvZGl2PicsCiAgICAgXS5q b2luKCdcbicpKSwKQEAgLTIzNSw2ICsyNTAsMTggQEAgZGVmaW5lKFsKICAgICAgICAgdGFiUGFu ZWxDbGFzc05hbWU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgIHJldHVybiAnc3ViLW5vZGUtZm9y bSBjb2wtc20tMTInOwogICAgICAgICB9LAorICAgICAgICBldmVudHM6IHsKKyAgICAgICAgICAn a2V5ZG93bic6IGZ1bmN0aW9uIChldmVudCkgeworICAgICAgICAgICAgbGV0IHByZWZlcmVuY2Vz ID0gcGdCcm93c2VyLmdldF9wcmVmZXJlbmNlc19mb3JfbW9kdWxlKCdicm93c2VyJyk7CisgICAg ICAgICAgICBpZihrZXlib2FyZFNob3J0Y3V0cy52YWxpZGF0ZVNob3J0Y3V0S2V5cyhwcmVmZXJl bmNlcy5hZGRfZ3JpZF9yb3csZXZlbnQpKSB7CisgICAgICAgICAgICAgIHBnQnJvd3Nlci5rZXli b2FyZE5hdmlnYXRpb24uYmluZEFkZEdyaWRSb3coKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZihr ZXlib2FyZFNob3J0Y3V0cy52YWxpZGF0ZVNob3J0Y3V0S2V5cyhwcmVmZXJlbmNlcy5zYXZlX2dy aWRfcm93LGV2ZW50KSkgeworICAgICAgICAgICAgICBwZ0Jyb3dzZXIua2V5Ym9hcmROYXZpZ2F0 aW9uLmJpbmRTYXZlR3JpZFJvdygpOworICAgICAgICAgICAgfSBlbHNlIGlmKGtleWJvYXJkU2hv cnRjdXRzLnZhbGlkYXRlU2hvcnRjdXRLZXlzKHByZWZlcmVuY2VzLnJlZnJlc2hfZ3JpZCxldmVu dCkpIHsKKyAgICAgICAgICAgICAgcGdCcm93c2VyLmtleWJvYXJkTmF2aWdhdGlvbi5iaW5kUmVm cmVzaEdyaWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICB9LAogICAg ICAgfSk7CiAKICAgICAgIHRoaXMub2JqZWN0Vmlldy5yZW5kZXIoKTsKQEAgLTMxNSwxMiArMzQy LDE4IEBAIGRlZmluZShbCiAKICAgICAgIGVkaXRvck9wdGlvbnNbJ2VsJ10gPSAkKHRoaXMuZWwp OwogICAgICAgZWRpdG9yT3B0aW9uc1snY29sdW1uc19sZW5ndGgnXSA9IHRoaXMuY29sdW1uLmNv bGxlY3Rpb24ubGVuZ3RoOwotICAgICAgZWRpdG9yT3B0aW9uc1snZWwnXS5hdHRyKCd0YWJpbmRl eCcsIDEpOworICAgICAgZWRpdG9yT3B0aW9uc1snZWwnXS5hdHRyKCd0YWJpbmRleCcsIDApOwog CiAgICAgICB0aGlzLmxpc3RlblRvKHRoaXMubW9kZWwsICdiYWNrZ3JpZDplZGl0JywgZnVuY3Rp b24obW9kZWwsIGNvbHVtbiwgY2VsbCwgZWRpdG9yKSB7CiAgICAgICAgIGlmIChjb2x1bW4uZ2V0 KCduYW1lJykgPT0gdGhpcy5jb2x1bW4uZ2V0KCduYW1lJykpCiAgICAgICAgICAgZWRpdG9yLmV4 dGVuZFdpdGhPcHRpb25zKGVkaXRvck9wdGlvbnMpOwogICAgICAgfSk7CisgICAgICAvLyBMaXN0 ZW4gZm9yIFRhYiBrZXksIG9wZW4gc3Vibm9kZSBkaWFsb2cgb24gc3BhY2Uga2V5CisgICAgICB0 aGlzLiRlbC5vbigna2V5ZG93bicsIGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgaWYgKGUua2V5Q29k ZSA9PSAzMikgeworICAgICAgICAgICQodGhpcykuY2xpY2soKTsKKyAgICAgICAgfQorICAgICAg fSk7CiAgICAgfSwKICAgICBlbnRlckVkaXRNb2RlOiBmdW5jdGlvbigpIHsKICAgICAgIC8vIE5v dGlmeSB0aGF0IHdlIGFyZSBhYm91dCB0byBlbnRlciBpbiBlZGl0IG1vZGUgZm9yIGN1cnJlbnQg Y2VsbC4KQEAgLTM0Miw2ICszNzUsMTAgQEAgZGVmaW5lKFsKICAgICAgICAgICB0aGlzLiRlbC5o dG1sKAogICAgICAgICAgICAgJzxpIGNsYXNzPVwnZmEgZmEtcGVuY2lsLXNxdWFyZSBzdWJub2Rl LWVkaXQtaW4tcHJvY2Vzc1wnIHRpdGxlPVwnJyArIF8oJ0VkaXQgcm93JykgKyAnXCc+PC9pPicK ICAgICAgICAgICApOworICAgICAgICAgIGxldCBib2R5ID0gJCh0aGlzLiRlbCkucGFyZW50cygp WzFdLAorICAgICAgICAgICAgY29udGFpbmVyID0gJChib2R5KS5maW5kKCcudGFiLWNvbnRlbnQ6 Zmlyc3QgPiAudGFiLXBhbmUuYWN0aXZlOmZpcnN0Jyk7CisgICAgICAgICAgY29tbW9uVXRpbHMu ZmluZEFuZFNldEZvY3VzKGNvbnRhaW5lcik7CisgICAgICAgICAgcGdCcm93c2VyLmtleWJvYXJk TmF2aWdhdGlvbi5nZXREaWFsb2dUYWJOYXZpZ2F0b3IoJChib2R5KS5maW5kKCcuc3Vibm9kZS1k aWFsb2cnKSk7CiAgICAgICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKAogICAgICAgICAgICAgJ3Bn LXN1Yi1ub2RlOm9wZW5lZCcsIHRoaXMubW9kZWwsIHRoaXMKICAgICAgICAgICApOwpAQCAtMzYy LDE0ICszOTksMTYgQEAgZGVmaW5lKFsKICAgICAgIHJldHVybiB0aGlzOwogICAgIH0sCiAgICAg ZXhpdEVkaXRNb2RlOiBmdW5jdGlvbigpIHsKLSAgICAgIHZhciBpbmRleCA9ICQodGhpcy5jdXJy ZW50RWRpdG9yLm9iamVjdFZpZXcuZWwpCi0gICAgICAgIC5maW5kKCcubmF2LXRhYnMgPiAuYWN0 aXZlID4gYVtkYXRhLXRvZ2dsZT0idGFiIl0nKS5maXJzdCgpCi0gICAgICAgIC5kYXRhKCd0YWJJ bmRleCcpOwotICAgICAgQmFja2dyaWQuQ2VsbC5wcm90b3R5cGUuZXhpdEVkaXRNb2RlLmFwcGx5 KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoCi0gICAgICAgICdw Zy1zdWItbm9kZTpjbG9zZWQnLCB0aGlzLCBpbmRleAotICAgICAgKTsKLSAgICAgIHRoaXMuZ3Jh YkZvY3VzID0gdHJ1ZTsKKyAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKHRoaXMuY3VycmVudEVkaXRv cikgfHwgIV8uaXNFbXB0eSh0aGlzLmN1cnJlbnRFZGl0b3IpKSB7CisgICAgICAgIHZhciBpbmRl eCA9ICQodGhpcy5jdXJyZW50RWRpdG9yLm9iamVjdFZpZXcuZWwpCisgICAgICAgICAgLmZpbmQo Jy5uYXYtdGFicyA+IC5hY3RpdmUgPiBhW2RhdGEtdG9nZ2xlPSJ0YWIiXScpLmZpcnN0KCkKKyAg ICAgICAgICAuZGF0YSgndGFiSW5kZXgnKTsKKyAgICAgICAgQmFja2dyaWQuQ2VsbC5wcm90b3R5 cGUuZXhpdEVkaXRNb2RlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIHRoaXMubW9k ZWwudHJpZ2dlcigKKyAgICAgICAgICAncGctc3ViLW5vZGU6Y2xvc2VkJywgdGhpcywgaW5kZXgK KyAgICAgICAgKTsKKyAgICAgICAgdGhpcy5ncmFiRm9jdXMgPSB0cnVlOworICAgICAgfQogICAg IH0sCiAgICAgZXZlbnRzOiB7CiAgICAgICAnY2xpY2snOiBmdW5jdGlvbihlKSB7CkBAIC0zODIs NiArNDIxLDE3IEBAIGRlZmluZShbCiAgICAgICAgIH0KICAgICAgICAgZS5wcmV2ZW50RGVmYXVs dCgpOwogICAgICAgfSwKKyAgICAgICdrZXlkb3duJzogZnVuY3Rpb24oZSkgeworICAgICAgICB2 YXIgbW9kZWwgPSB0aGlzLm1vZGVsOworICAgICAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW47 CisgICAgICAgIHZhciBjb21tYW5kID0gbmV3IEJhY2tncmlkLkNvbW1hbmQoZSk7CisKKyAgICAg ICAgaWYgKGNvbW1hbmQubW92ZUxlZnQoKSkgeworICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp b24oKSB7CisgICAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdiYWNrZ3JpZDplZGl0ZWQnLCBtb2Rl bCwgY29sdW1uLCBjb21tYW5kKTsKKyAgICAgICAgICB9LCAyMCk7CisgICAgICAgIH0KKyAgICAg IH0sCiAgICAgfSwKICAgfSk7CiAKQEAgLTQxMyw3ICs0NjMsMTYgQEAgZGVmaW5lKFsKICAgICAg ICAgICBkZWxldGVfdGl0bGUsCiAgICAgICAgICAgZGVsZXRlX21zZywKICAgICAgICAgICBmdW5j dGlvbigpIHsKKyAgICAgICAgICAgIGxldCB0Ym9keSA9IHRoYXQuZWwuY2xvc2VzdCgndGJvZHkn KTsKICAgICAgICAgICAgIHRoYXQubW9kZWwuY29sbGVjdGlvbi5yZW1vdmUodGhhdC5tb2RlbCk7 CisgICAgICAgICAgICBsZXQgcm93ID0gJCh0Ym9keSkuZmluZCgndHInKTsKKyAgICAgICAgICAg IGlmKHJvdy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgIC8vIHNldCBmb2N1cyB0byBmaXJz dCB0cgorICAgICAgICAgICAgICByb3cuZmlyc3QoKS5jaGlsZHJlbigpWzBdLmZvY3VzKCk7Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAvLyBzZXQgZm9jdXMgdG8gYWRkIGJ1 dHRvbgorICAgICAgICAgICAgICAkKHRib2R5KS5jbG9zZXN0KCcuc3Vibm9kZScpLmZpbmQoJy5h ZGQnKS5mb2N1cygpOworICAgICAgICAgICAgfQogICAgICAgICAgIH0sCiAgICAgICAgICAgZnVu Y3Rpb24oKSB7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQyNywxMiArNDg2LDU0IEBA IGRlZmluZShbCiAgICAgICAgICk7CiAgICAgICB9CiAgICAgfSwKKyAgICBleGl0RWRpdE1vZGU6 IGZ1bmN0aW9uKCkgeworICAgICAgdGhpcy4kZWwucmVtb3ZlQ2xhc3MoJ2VkaXRvcicpOworICAg IH0sCiAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7CiAgICAgICBCYWNrZ3JpZC5DZWxsLnBy b3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgfSwKICAgICBy ZW5kZXI6IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgdGhpcy4k ZWwuZW1wdHkoKTsKKyAgICAgICQodGhpcy4kZWwpLmF0dHIoJ3RhYmluZGV4JywgMCk7CiAgICAg ICB0aGlzLiRlbC5odG1sKCc8aSBjbGFzcz1cJ2ZhIGZhLXRyYXNoXCcgdGl0bGU9XCcnICsgXygn RGVsZXRlIHJvdycpICsgJ1wnPjwvaT4nKTsKKyAgICAgIC8vIExpc3RlbiBmb3IgVGFiL1NoaWZ0 LVRhYiBrZXkKKyAgICAgIHRoaXMuJGVsLm9uKCdrZXlkb3duJywgZnVuY3Rpb24oZSkgeworICAg ICAgICAvLyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24gb24gc3BhY2Uga2V5LCBtYXJrIHJvdyBm b3IgZGVsZXRpb24KKyAgICAgICAgaWYgKGUua2V5Q29kZSA9PSAzMikgeworICAgICAgICAgIHNl bGYuJGVsLmNsaWNrKCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGdvdG9DZWxsOworICAgICAg ICBpZiAoZS5rZXlDb2RlID09IDkgfHwgZS5rZXlDb2RlID09IDE2KSB7CisgICAgICAgICAgLy8g Z28gdG8gTmV4dCBDZWxsICYgaWYgU2hpZnQgaXMgYWxzbyBwcmVzc2VkIGdvIHRvIFByZXZpb3Vz IENlbGwKKyAgICAgICAgICBnb3RvQ2VsbCA9IGUuc2hpZnRLZXkgPyBzZWxmLiRlbC5wcmV2KCkg OiBzZWxmLiRlbC5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZ290b0NlbGwpIHsK KyAgICAgICAgICBsZXQgY29tbWFuZCA9IG5ldyBCYWNrZ3JpZC5Db21tYW5kKHsKKyAgICAgICAg ICAgIGtleTogJ1RhYicsCisgICAgICAgICAgICBrZXlDb2RlOiA5LAorICAgICAgICAgICAgd2hp Y2g6IDksCisgICAgICAgICAgICBzaGlmdEtleTogZS5zaGlmdEtleSwKKyAgICAgICAgICB9KTsK KyAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgLy8gV2hlbiB3 ZSBoYXZlIEVkaXRhYmxlIENlbGwKKyAgICAgICAgICAgIGlmIChnb3RvQ2VsbC5oYXNDbGFzcygn ZWRpdGFibGUnKSkgeworICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg ICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CisgICAgICAgICAgICAgIHNlbGYubW9kZWwudHJp Z2dlcignYmFja2dyaWQ6ZWRpdGVkJywgc2VsZi5tb2RlbCwKKyAgICAgICAgICAgICAgICBzZWxm LmNvbHVtbiwgY29tbWFuZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAg ICAgICAgICAgICAgLy8gV2hlbiB3ZSBoYXZlIE5vbi1FZGl0YWJsZSBDZWxsCisgICAgICAgICAg ICAgIHNlbGYubW9kZWwudHJpZ2dlcignYmFja2dyaWQ6ZWRpdGVkJywgc2VsZi5tb2RlbCwKKyAg ICAgICAgICAgICAgICBzZWxmLmNvbHVtbiwgY29tbWFuZCk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgfSwgMjApOworICAgICAgICB9CisgICAgICB9KTsKKworCiAgICAgICB0aGlzLmRlbGVn YXRlRXZlbnRzKCk7CiAgICAgICByZXR1cm4gdGhpczsKICAgICB9LApAQCAtNDg4LDYgKzU4OSw3 IEBAIGRlZmluZShbCiAgICAgICAnY2hhbmdlIGlucHV0JzogJ29uQ2hhbmdlJywKICAgICAgICdr ZXl1cCc6ICd0b2dnbGVTd2l0Y2gnLAogICAgICAgJ2JsdXIgaW5wdXQnOiAnZXhpdEVkaXRNb2Rl JywKKyAgICAgICdrZXlkb3duJzogJ29uS2V5RG93bicsCiAgICAgfSwKIAogICAgIHRvZ2dsZVN3 aXRjaDogZnVuY3Rpb24oZSkgewpAQCAtNDk3LDYgKzU5OSwxMyBAQCBkZWZpbmUoWwogICAgICAg fQogICAgIH0sCiAKKyAgICBvbktleURvd246IGZ1bmN0aW9uKGUpIHsKKyAgICAgIGxldCBwcmVm ZXJlbmNlcyA9IHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZXNfZm9yX21vZHVsZSgnYnJvd3Nlcicp OworICAgICAgaWYoa2V5Ym9hcmRTaG9ydGN1dHMudmFsaWRhdGVTaG9ydGN1dEtleXMocHJlZmVy ZW5jZXMuYWRkX2dyaWRfcm93LGUpKSB7CisgICAgICAgIHBnQnJvd3Nlci5rZXlib2FyZE5hdmln YXRpb24uYmluZEFkZEdyaWRSb3coKTsKKyAgICAgIH0KKyAgICB9LAorCiAgICAgb25DaGFuZ2U6 IGZ1bmN0aW9uKCkgewogICAgICAgdmFyIG1vZGVsID0gdGhpcy5tb2RlbCwKICAgICAgICAgY29s dW1uID0gdGhpcy5jb2x1bW4sCkBAIC01NTMsNyArNjYyLDExIEBAIGRlZmluZShbCiAgICAgICAg ICAgfSk7CiAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgIC8v IFdoZW4gd2UgaGF2ZSBFZGl0YWJsZSBDZWxsCi0gICAgICAgICAgICBpZiAoZ290b0NlbGwuaGFz Q2xhc3MoJ2VkaXRhYmxlJykpIHsKKyAgICAgICAgICAgIGlmIChnb3RvQ2VsbC5oYXNDbGFzcygn ZWRpdGFibGUnKSAmJiBnb3RvQ2VsbC5oYXNDbGFzcygnZWRpdC1jZWxsJykpIHsKKyAgICAgICAg ICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlv bigpOworICAgICAgICAgICAgICBnb3RvQ2VsbC50cmlnZ2VyKCdmb2N1cycpOworICAgICAgICAg ICAgfSBlbHNlIGlmIChnb3RvQ2VsbC5oYXNDbGFzcygnZWRpdGFibGUnKSkgewogICAgICAgICAg ICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9u KCk7CiAgICAgICAgICAgICAgIHNlbGYubW9kZWwudHJpZ2dlcignYmFja2dyaWQ6ZWRpdGVkJywg c2VsZi5tb2RlbCwKQEAgLTYwOCw4ICs3MjEsNyBAQCBkZWZpbmUoWwogICAgIH0sCiAKICAgICBz YXZlT3JDYW5jZWw6IGZ1bmN0aW9uIChlKSB7Ci0gICAgICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVs OwotICAgICAgdmFyIGNvbHVtbiA9IHRoaXMuY29sdW1uOworICAgICAgdmFyIHNlbGYgPSB0aGlz OwogCiAgICAgICB2YXIgY29tbWFuZCA9IG5ldyBCYWNrZ3JpZC5Db21tYW5kKGUpOwogICAgICAg dmFyIGJsdXJyZWQgPSBlLnR5cGUgPT09ICdibHVyJzsKQEAgLTYxNywxMCArNzI5LDMyIEBAIGRl ZmluZShbCiAgICAgICBpZiAoY29tbWFuZC5tb3ZlVXAoKSB8fCBjb21tYW5kLm1vdmVEb3duKCkg fHwgY29tbWFuZC5tb3ZlTGVmdCgpIHx8IGNvbW1hbmQubW92ZVJpZ2h0KCkgfHwKICAgICAgICAg ICBjb21tYW5kLnNhdmUoKSB8fCBibHVycmVkKSB7CiAKLSAgICAgICAgdGhpcy5leGl0RWRpdE1v ZGUoKTsKLSAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwotICAgICAgICBlLnN0b3BQcm9wYWdh dGlvbigpOwotICAgICAgICBtb2RlbC50cmlnZ2VyKCdiYWNrZ3JpZDplZGl0ZWQnLCBtb2RlbCwg Y29sdW1uLCBjb21tYW5kKTsKKyAgICAgICAgbGV0IGdvdG9DZWxsOworICAgICAgICAvLyBnbyB0 byBOZXh0IENlbGwgJiBpZiBTaGlmdCBpcyBhbHNvIHByZXNzZWQgZ28gdG8gUHJldmlvdXMgQ2Vs bAorICAgICAgICBnb3RvQ2VsbCA9IGUuc2hpZnRLZXkgPyBzZWxmLiRlbC5wcmV2KCkgOiBzZWxm LiRlbC5uZXh0KCk7CisKKyAgICAgICAgaWYgKGdvdG9DZWxsKSB7CisgICAgICAgICAgbGV0IGNv bW1hbmQgPSBuZXcgQmFja2dyaWQuQ29tbWFuZCh7CisgICAgICAgICAgICBrZXk6ICdUYWInLAor ICAgICAgICAgICAga2V5Q29kZTogOSwKKyAgICAgICAgICAgIHdoaWNoOiA5LAorICAgICAgICAg ICAgc2hpZnRLZXk6IGUuc2hpZnRLZXksCisgICAgICAgICAgfSk7CisgICAgICAgICAgc2V0VGlt ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIC8vIFdoZW4gd2UgaGF2ZSBFZGl0YWJsZSBD ZWxsCisgICAgICAgICAgICBpZiAoZ290b0NlbGwuaGFzQ2xhc3MoJ2VkaXRhYmxlJykpIHsKKyAg ICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgICBlLnN0b3BQcm9w YWdhdGlvbigpOworICAgICAgICAgICAgICBzZWxmLm1vZGVsLnRyaWdnZXIoJ2JhY2tncmlkOmVk aXRlZCcsIHNlbGYubW9kZWwsCisgICAgICAgICAgICAgICAgc2VsZi5jb2x1bW4sIGNvbW1hbmQp OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIC8vIFdo ZW4gd2UgaGF2ZSBOb24tRWRpdGFibGUgQ2VsbAorICAgICAgICAgICAgICBzZWxmLm1vZGVsLnRy aWdnZXIoJ2JhY2tncmlkOmVkaXRlZCcsIHNlbGYubW9kZWwsCisgICAgICAgICAgICAgICAgc2Vs Zi5jb2x1bW4sIGNvbW1hbmQpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sIDIwKTsKKyAg ICAgICAgfQogICAgICAgfQogICAgIH0sCiAgICAgZXZlbnRzOiB7CmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9zdGF0aWMvanMvZGlhbG9nX3RhYl9uYXZpZ2F0b3IuanMgYi93ZWIvcGdhZG1pbi9z dGF0aWMvanMvZGlhbG9nX3RhYl9uYXZpZ2F0b3IuanMKaW5kZXggNDQ3MjE3Mi4uMzdiZmY2YiAx MDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2RpYWxvZ190YWJfbmF2aWdhdG9yLmpz CisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9kaWFsb2dfdGFiX25hdmlnYXRvci5qcwpAQCAt NDYsMTMgKzQ2LDEzIEBAIGNsYXNzIGRpYWxvZ1RhYk5hdmlnYXRvciB7CiAKICAgICBpZihjaGls ZFRhYkRhdGEpIHsKICAgICAgIHZhciByZXMgPSB0aGlzLm5hdmlnYXRlKHNob3J0Y3V0LCBjaGls ZFRhYkRhdGEuY2hpbGRUYWIsCi0gICAgICAgIGNoaWxkVGFiRGF0YS5jaGlsZFRhYlBhbmUpOwor ICAgICAgICBjaGlsZFRhYkRhdGEuY2hpbGRUYWJQYW5lLCBldmVudCk7CiAKICAgICAgIGlmICgh cmVzKSB7Ci0gICAgICAgIHRoaXMubmF2aWdhdGUoc2hvcnRjdXQsIHRoaXMudGFicywgY3VycmVu dFRhYlBhbmUpOworICAgICAgICB0aGlzLm5hdmlnYXRlKHNob3J0Y3V0LCB0aGlzLnRhYnMsIGN1 cnJlbnRUYWJQYW5lLCBldmVudCk7CiAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgIHRoaXMu bmF2aWdhdGUoc2hvcnRjdXQsIHRoaXMudGFicywgY3VycmVudFRhYlBhbmUpOworICAgICAgdGhp cy5uYXZpZ2F0ZShzaG9ydGN1dCwgdGhpcy50YWJzLCBjdXJyZW50VGFiUGFuZSwgZXZlbnQpOwog ICAgIH0KICAgfQogCkBAIC03MywxNiArNzMsMTYgQEAgY2xhc3MgZGlhbG9nVGFiTmF2aWdhdG9y IHsKICAgICByZXR1cm4gbnVsbDsKICAgfQogCi0gIG5hdmlnYXRlKHNob3J0Y3V0LCB0YWJzLCB0 YWJfcGFuZSkgeworICBuYXZpZ2F0ZShzaG9ydGN1dCwgdGFicywgdGFiX3BhbmUsIGV2ZW50KSB7 CiAgICAgaWYoc2hvcnRjdXQgPT0gdGhpcy5kaWFsb2dUYWJCYWNrd2FyZCkgewotICAgICAgcmV0 dXJuIHRoaXMubmF2aWdhdGVCYWNrd2FyZCh0YWJzLCB0YWJfcGFuZSk7CisgICAgICByZXR1cm4g dGhpcy5uYXZpZ2F0ZUJhY2t3YXJkKHRhYnMsIHRhYl9wYW5lLCBldmVudCk7CiAgICAgfWVsc2Ug aWYgKHNob3J0Y3V0ID09IHRoaXMuZGlhbG9nVGFiRm9yd2FyZCkgewotICAgICAgcmV0dXJuIHRo aXMubmF2aWdhdGVGb3J3YXJkKHRhYnMsIHRhYl9wYW5lKTsKKyAgICAgIHJldHVybiB0aGlzLm5h dmlnYXRlRm9yd2FyZCh0YWJzLCB0YWJfcGFuZSwgZXZlbnQpOwogICAgIH0KICAgICByZXR1cm4g ZmFsc2U7CiAgIH0KIAotICBuYXZpZ2F0ZUJhY2t3YXJkKHRhYnMsIHRhYl9wYW5lKSB7CisgIG5h dmlnYXRlQmFja3dhcmQodGFicywgdGFiX3BhbmUsIGV2ZW50KSB7CiAgICAgdmFyIHNlbGYgPSB0 aGlzLAogICAgICAgbmV4dFRhYlBhbmUsCiAgICAgICBpbm5lclRhYkNvbnRhaW5lciwKQEAgLTEw NSw2ICsxMDUsNyBAQCBjbGFzcyBkaWFsb2dUYWJOYXZpZ2F0b3IgewogICAgICAgICBzZWxmLnRh YlN3aXRjaGluZyA9IGZhbHNlOwogICAgICAgfSwgMjAwKTsKIAorICAgICAgZXZlbnQuc3RvcFBy b3BhZ2F0aW9uKCk7CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTExMiw3ICsxMTMs NyBAQCBjbGFzcyBkaWFsb2dUYWJOYXZpZ2F0b3IgewogICAgIHJldHVybiBmYWxzZTsKICAgfQog Ci0gIG5hdmlnYXRlRm9yd2FyZCh0YWJzLCB0YWJfcGFuZSkgeworICBuYXZpZ2F0ZUZvcndhcmQo dGFicywgdGFiX3BhbmUsIGV2ZW50KSB7CiAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgbmV4 dFRhYlBhbmUsCiAgICAgICBpbm5lclRhYkNvbnRhaW5lciwKQEAgLTEzNSw2ICsxMzYsOCBAQCBj bGFzcyBkaWFsb2dUYWJOYXZpZ2F0b3IgewogICAgICAgICBzZWxmLnRhYlN3aXRjaGluZyA9IGZh bHNlOwogICAgICAgfSwgMjAwKTsKIAorICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CisK ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICB0aGlzLnRhYlN3aXRjaGluZyA9IGZhbHNl OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL3Njc3MvX2JhY2tncmlkLm92ZXJyaWRl cy5zY3NzIGIvd2ViL3BnYWRtaW4vc3RhdGljL3Njc3MvX2JhY2tncmlkLm92ZXJyaWRlcy5zY3Nz CmluZGV4IGIwYjc0NzUuLjQxMjY2ZWIgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9z Y3NzL19iYWNrZ3JpZC5vdmVycmlkZXMuc2NzcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvc2Nz cy9fYmFja2dyaWQub3ZlcnJpZGVzLnNjc3MKQEAgLTI4OCw2ICsyODgsMTAgQEAgdGFibGUuYmFj a2dyaWQgewogICAgIGJhY2tncm91bmQtY29sb3I6ICRjb2xvci1iZy10aGVtZSAhaW1wb3J0YW50 OwogICB9CiAKKyAgJiB0ZC5lZGl0LWNlbGwuZWRpdG9yOmZvY3VzIHsKKyAgICBvdXRsaW5lOiAk aW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yIGF1dG8gNXB4ICFpbXBvcnRhbnQ7CisgIH0KKwogICB0 ci5lZGl0b3Itcm93ICB7CiAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLWdyYXktbGlnaHQg IWltcG9ydGFudDsKICAgICAmID4gdGQgewpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGlj L3Njc3MvX3BnYWRtaW4uc3R5bGUuc2NzcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9zY3NzL19wZ2Fk bWluLnN0eWxlLnNjc3MKaW5kZXggZjVhODg3Ny4uOGYxZTI0OCAxMDA2NDQKLS0tIGEvd2ViL3Bn YWRtaW4vc3RhdGljL3Njc3MvX3BnYWRtaW4uc3R5bGUuc2NzcworKysgYi93ZWIvcGdhZG1pbi9z dGF0aWMvc2Nzcy9fcGdhZG1pbi5zdHlsZS5zY3NzCkBAIC03MjksMTAgKzcyOSwxNyBAQCB0YWJs ZSB0ciB0aCB7CiAgICAgcGFkZGluZzogMDsKICAgfQogICAmIGJ1dHRvbjpmb2N1cyB7Ci0gICAg b3V0bGluZTogbm9uZTsKKyAgICBvdXRsaW5lOiAkaW5wdXQtZm9jdXMtYm9yZGVyLWNvbG9yIGF1 dG8gNXB4ICFpbXBvcnRhbnQ7CiAgIH0KIH0KIAordGFibGUgdHIgdGQgeworICB0ZC5lZGl0LWNl bGw6Zm9jdXMsCisgIHRkLmRlbGV0ZS1jZWxsOmZvY3VzLAorICB0ZC5zdHJpbmctY2VsbDpmb2N1 cyB7CisgICAgb3V0bGluZTogJGlucHV0LWZvY3VzLWJvcmRlci1jb2xvciBhdXRvIDVweCAhaW1w b3J0YW50OworICB9Cit9CiAKIC5wcml2aWxlZ2VfbGFiZWx7CiAgIGZvbnQtc2l6ZTogMTBweCFp bXBvcnRhbnQ7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvdmVuZG9yL2JhY2tncmlk L2JhY2tncmlkLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL3ZlbmRvci9iYWNrZ3JpZC9iYWNrZ3Jp ZC5qcwppbmRleCA5NjNkZGNhLi4xYjMxNzNiIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0 aWMvdmVuZG9yL2JhY2tncmlkL2JhY2tncmlkLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy92 ZW5kb3IvYmFja2dyaWQvYmFja2dyaWQuanMKQEAgLTgsMzIgKzgsMzUgQEAKIC8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIC8q IQotICBiYWNrZ3JpZAotICBodHRwOi8vZ2l0aHViLmNvbS93eXVlbmhvL2JhY2tncmlkCisgIGJh Y2tncmlkIDAuMy44CisgIGh0dHA6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvYmFja2dyaWQKIAot ICBDb3B5cmlnaHQgKGMpIDIwMTQgSmltbXkgWXVlbiBIbyBXb25nIGFuZCBjb250cmlidXRvcnMg PHd5dWVuaG9AZ21haWwuY29tPgorICBDb3B5cmlnaHQgKGMpIDIwMTcgQ2xvdWRmbGFyZSwgSW5j LiBhbmQgY29udHJpYnV0b3JzIDxqd29uZ0BjbG91ZGZsYXJlLmNvbT4KICAgTGljZW5zZWQgdW5k ZXIgdGhlIE1JVCBsaWNlbnNlLgogKi8KIAotKGZ1bmN0aW9uIChmYWN0b3J5KSB7CisoZnVuY3Rp b24gKHJvb3QsIGZhY3RvcnkpIHsKIAotICAvLyBDb21tb25KUwotICBpZiAodHlwZW9mIGV4cG9y dHMgPT0gIm9iamVjdCIpIHsKLSAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkobW9kdWxlLmV4 cG9ydHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmUoInVuZGVyc2NvcmUi KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZSgiYmFja2JvbmUiKSk7Ci0g IH0KLSAgLy8gQnJvd3NlcgotICBlbHNlIGZhY3RvcnkodGhpcywgdGhpcy5fLCB0aGlzLkJhY2ti b25lKTsKLX0oZnVuY3Rpb24gKHJvb3QsIF8sIEJhY2tib25lKSB7CisgIGlmICh0eXBlb2YgZGVm aW5lID09PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIHsKKyAgICAvLyBBTUQgKCsgZ2xvYmFs IGZvciBleHRlbnNpb25zKQorICAgIGRlZmluZShbInVuZGVyc2NvcmUiLCAiYmFja2JvbmUiXSwg ZnVuY3Rpb24gKF8sIEJhY2tib25lKSB7CisgICAgICByZXR1cm4gKHJvb3QuQmFja2dyaWQgPSBm YWN0b3J5KF8sIEJhY2tib25lKSk7CisgICAgfSk7CisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9y dHMgPT09ICJvYmplY3QiKSB7CisgICAgLy8gQ29tbW9uSlMKKyAgICBtb2R1bGUuZXhwb3J0cyA9 IGZhY3RvcnkocmVxdWlyZSgidW5kZXJzY29yZSIpLCByZXF1aXJlKCJiYWNrYm9uZSIpKTsKKyAg fSBlbHNlIHsKKyAgICAvLyBCcm93c2VyCisgICAgcm9vdC5CYWNrZ3JpZCA9IGZhY3Rvcnkocm9v dC5fLCByb290LkJhY2tib25lKTsKKyAgfX0odGhpcywgZnVuY3Rpb24gKF8sIEJhY2tib25lKSB7 CiAKICAgInVzZSBzdHJpY3QiOwogCiAvKgogICBiYWNrZ3JpZAotICBodHRwOi8vZ2l0aHViLmNv bS93eXVlbmhvL2JhY2tncmlkCisgIGh0dHA6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvYmFja2dy aWQKIAotICBDb3B5cmlnaHQgKGMpIDIwMTMgSmltbXkgWXVlbiBIbyBXb25nIGFuZCBjb250cmli dXRvcnMKKyAgQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQgQ2xvdWRmbGFyZSwgSW5jLiBhbmQg Y29udHJpYnV0b3JzCiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICovCiAKQEAg LTcyLDcgKzc1LDcgQEAgZnVuY3Rpb24gbHBhZChzdHIsIGxlbmd0aCwgcGFkc3RyKSB7CiAKIHZh ciAkID0gQmFja2JvbmUuJDsKIAotdmFyIEJhY2tncmlkID0gcm9vdC5CYWNrZ3JpZCA9IHsKK3Zh ciBCYWNrZ3JpZCA9IHsKIAogICBFeHRlbnNpb246IHt9LAogCkBAIC0xODAsOSArMTgzLDkgQEAg Xy5leHRlbmQoQ29tbWFuZC5wcm90b3R5cGUsIHsKIAogLyoKICAgYmFja2dyaWQKLSAgaHR0cDov L2dpdGh1Yi5jb20vd3l1ZW5oby9iYWNrZ3JpZAorICBodHRwOi8vZ2l0aHViLmNvbS9jbG91ZGZs YXJlL2JhY2tncmlkCiAKLSAgQ29weXJpZ2h0IChjKSAyMDEzIEppbW15IFl1ZW4gSG8gV29uZyBh bmQgY29udHJpYnV0b3JzCisgIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50IENsb3VkZmxhcmUs IEluYy4gYW5kIGNvbnRyaWJ1dG9ycwogICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2Uu CiAqLwogCkBAIC0yODUsNyArMjg4LDcgQEAgXy5leHRlbmQoTnVtYmVyRm9ybWF0dGVyLnByb3Rv dHlwZSwgewogICBmcm9tUmF3OiBmdW5jdGlvbiAobnVtYmVyLCBtb2RlbCkgewogICAgIGlmIChf LmlzTnVsbChudW1iZXIpIHx8IF8uaXNVbmRlZmluZWQobnVtYmVyKSkgcmV0dXJuICcnOwogCi0g ICAgbnVtYmVyID0gbnVtYmVyLnRvRml4ZWQofn50aGlzLmRlY2ltYWxzKTsKKyAgICBudW1iZXIg PSBwYXJzZUZsb2F0KG51bWJlcikudG9GaXhlZCh+fnRoaXMuZGVjaW1hbHMpOwogCiAgICAgdmFy IHBhcnRzID0gbnVtYmVyLnNwbGl0KCcuJyk7CiAgICAgdmFyIGludGVnZXJQYXJ0ID0gcGFydHNb MF07CkBAIC02MjUsOSArNjI4LDkgQEAgXy5leHRlbmQoU2VsZWN0Rm9ybWF0dGVyLnByb3RvdHlw ZSwgewogCiAvKgogICBiYWNrZ3JpZAotICBodHRwOi8vZ2l0aHViLmNvbS93eXVlbmhvL2JhY2tn cmlkCisgIGh0dHA6Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvYmFja2dyaWQKIAotICBDb3B5cmln aHQgKGMpIDIwMTMgSmltbXkgWXVlbiBIbyBXb25nIGFuZCBjb250cmlidXRvcnMKKyAgQ29weXJp Z2h0IChjKSAyMDEzLXByZXNlbnQgQ2xvdWRmbGFyZSwgSW5jLiBhbmQgY29udHJpYnV0b3JzCiAg IExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS4KICovCiAKQEAgLTgyNSw3ICs4MjgsOCBA QCB2YXIgQ2VsbCA9IEJhY2tncmlkLkNlbGwgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CiAKICAg LyoqIEBwcm9wZXJ0eSAqLwogICBldmVudHM6IHsKLSAgICAiY2xpY2siOiAiZW50ZXJFZGl0TW9k ZSIKKyAgICAiY2xpY2siOiAiZW50ZXJFZGl0TW9kZSIsCisgICAgImZvY3VzIjogIm9uRm9jdXMi CiAgIH0sCiAKICAgLyoqCkBAIC04NzMsOSArODc3LDE2IEBAIHZhciBDZWxsID0gQmFja2dyaWQu Q2VsbCA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHsKICAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICAgfSk7CiAKLSAgICBpZiAoQmFja2dyaWQuY2FsbEJ5TmVlZChjb2x1bW4u ZWRpdGFibGUoKSwgY29sdW1uLCBtb2RlbCkpICRlbC5hZGRDbGFzcygiZWRpdGFibGUiKTsKLSAg ICBpZiAoQmFja2dyaWQuY2FsbEJ5TmVlZChjb2x1bW4uc29ydGFibGUoKSwgY29sdW1uLCBtb2Rl bCkpICRlbC5hZGRDbGFzcygic29ydGFibGUiKTsKLSAgICBpZiAoQmFja2dyaWQuY2FsbEJ5TmVl ZChjb2x1bW4ucmVuZGVyYWJsZSgpLCBjb2x1bW4sIG1vZGVsKSkgJGVsLmFkZENsYXNzKCJyZW5k ZXJhYmxlIik7CisgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXNNYXliZSgpOworICB9LAorCisg IHVwZGF0ZVN0YXRlQ2xhc3Nlc01heWJlOiBmdW5jdGlvbiAoKSB7CisgICAgdmFyIG1vZGVsID0g dGhpcy5tb2RlbDsKKyAgICB2YXIgY29sdW1uID0gdGhpcy5jb2x1bW47CisgICAgdmFyICRlbCA9 IHRoaXMuJGVsOworICAgICRlbC50b2dnbGVDbGFzcygiZWRpdGFibGUiLCBCYWNrZ3JpZC5jYWxs QnlOZWVkKGNvbHVtbi5lZGl0YWJsZSgpLCBjb2x1bW4sIG1vZGVsKSk7CisgICAgJGVsLnRvZ2ds ZUNsYXNzKCJzb3J0YWJsZSIsIEJhY2tncmlkLmNhbGxCeU5lZWQoY29sdW1uLnNvcnRhYmxlKCks IGNvbHVtbiwgbW9kZWwpKTsKKyAgICAkZWwudG9nZ2xlQ2xhc3MoInJlbmRlcmFibGUiLCBCYWNr Z3JpZC5jYWxsQnlOZWVkKGNvbHVtbi5yZW5kZXJhYmxlKCksIGNvbHVtbiwgbW9kZWwpKTsKICAg fSwKIAogICAvKioKQEAgLTg4Myw5ICs4OTQsMTggQEAgdmFyIENlbGwgPSBCYWNrZ3JpZC5DZWxs ID0gQmFja2JvbmUuVmlldy5leHRlbmQoewogICAgICBtb2RlbCdzIHJhdyB2YWx1ZSBmb3IgdGhp cyBjZWxsJ3MgY29sdW1uLgogICAqLwogICByZW5kZXI6IGZ1bmN0aW9uICgpIHsKLSAgICB0aGlz LiRlbC5lbXB0eSgpOworICAgIHZhciAkZWwgPSB0aGlzLiRlbDsKKyAgICAkZWwuZW1wdHkoKTsK ICAgICB2YXIgbW9kZWwgPSB0aGlzLm1vZGVsOwotICAgIHRoaXMuJGVsLnRleHQodGhpcy5mb3Jt YXR0ZXIuZnJvbVJhdyhtb2RlbC5nZXQodGhpcy5jb2x1bW4uZ2V0KCJuYW1lIikpLCBtb2RlbCkp OworICAgIHZhciBjb2x1bW5OYW1lID0gdGhpcy5jb2x1bW4uZ2V0KCJuYW1lIik7CisgICAgJGVs LnRleHQodGhpcy5mb3JtYXR0ZXIuZnJvbVJhdyhtb2RlbC5nZXQoY29sdW1uTmFtZSksIG1vZGVs KSk7CisgICAgJGVsLmFkZENsYXNzKGNvbHVtbk5hbWUpOworICAgIGlmKHRoaXMuJGVsLmhhc0Ns YXNzKCdzdHJpbmctY2VsbCcpKSB7CisgICAgICBpZihCYWNrZ3JpZC5jYWxsQnlOZWVkKHRoaXMu Y29sdW1uLmVkaXRhYmxlKCksIHRoaXMuY29sdW1uLCB0aGlzLm1vZGVsKSkgeworICAgICAgICAk ZWwuYXR0cigndGFiaW5kZXgnLCAwKTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhpcy51cGRhdGVT dGF0ZUNsYXNzZXNNYXliZSgpOwogICAgIHRoaXMuZGVsZWdhdGVFdmVudHMoKTsKICAgICByZXR1 cm4gdGhpczsKICAgfSwKQEAgLTkzNSw2ICs5NTUsMTIgQEAgdmFyIENlbGwgPSBCYWNrZ3JpZC5D ZWxsID0gQmFja2JvbmUuVmlldy5leHRlbmQoewogICAgIH0KICAgfSwKIAorICBvbkZvY3VzOiBm dW5jdGlvbiAoZSkgeworICAgIGlmKGUua2V5Q29kZSA9PSA5ICYmICQodGhpcykuaGFzQ2xhc3Mo J3N0cmluZy1jZWxsJykgJiYgJCh0aGlzKS5oYXNDbGFzcygnZWRpdGFibGUnKSkgeworICAgICAg JCh0aGlzKS5jbGljaygpOworICAgIH0KKyAgfSwKKwogICAvKioKICAgICAgUHV0IGFuIGBlcnJv cmAgQ1NTIGNsYXNzIG9uIHRoZSB0YWJsZSBjZWxsLgogICAqLwpAQCAtMTQwOCw3ICsxNDM0LDE1 IEBAIHZhciBTZWxlY3RDZWxsRWRpdG9yID0gQmFja2dyaWQuU2VsZWN0Q2VsbEVkaXRvciA9IENl bGxFZGl0b3IuZXh0ZW5kKHsKICAgfSwKIAogICAvKiogQHByb3BlcnR5IHtmdW5jdGlvbihPYmpl Y3QsID9PYmplY3Q9KTogc3RyaW5nfSB0ZW1wbGF0ZSAqLwotICB0ZW1wbGF0ZTogXy50ZW1wbGF0 ZSgnPG9wdGlvbiB2YWx1ZT0iPCUtIHZhbHVlICU+IiA8JT0gc2VsZWN0ZWQgPyBcJ3NlbGVjdGVk PSJzZWxlY3RlZCJcJyA6ICIiICU+PjwlLSB0ZXh0ICU+PC9vcHRpb24+JywgbnVsbCwge3Zhcmlh YmxlOiBudWxsfSksCisgIHRlbXBsYXRlOiBfLnRlbXBsYXRlKAorICAgICc8b3B0aW9uIHZhbHVl PSI8JS0gdmFsdWUgJT4iIDwlPSBzZWxlY3RlZCA/IFwnc2VsZWN0ZWQ9InNlbGVjdGVkIlwnIDog IiIgJT4+PCUtIHRleHQgJT48L29wdGlvbj4nLAorICAgIG51bGwsCisgICAgeworICAgICAgICB2 YXJpYWJsZSAgICA6IG51bGwsCisgICAgICAgIGV2YWx1YXRlICAgIDogLzwlKFtcc1xTXSs/KSU+ L2csCisgICAgICAgIGludGVycG9sYXRlIDogLzwlPShbXHNcU10rPyklPi9nLAorICAgICAgICBl c2NhcGUgICAgICA6IC88JS0oW1xzXFNdKz8pJT4vZworICAgIH0pLAogCiAgIHNldE9wdGlvblZh bHVlczogZnVuY3Rpb24gKG9wdGlvblZhbHVlcykgewogICAgIHRoaXMub3B0aW9uVmFsdWVzID0g b3B0aW9uVmFsdWVzOwpAQCAtMTY1MSw5ICsxNjg1LDkgQEAgdmFyIFNlbGVjdENlbGwgPSBCYWNr Z3JpZC5TZWxlY3RDZWxsID0gQ2VsbC5leHRlbmQoewogCiAvKgogICBiYWNrZ3JpZAotICBodHRw Oi8vZ2l0aHViLmNvbS93eXVlbmhvL2JhY2tncmlkCisgIGh0dHA6Ly9naXRodWIuY29tL2Nsb3Vk ZmxhcmUvYmFja2dyaWQKIAotICBDb3B5cmlnaHQgKGMpIDIwMTMgSmltbXkgWXVlbiBIbyBXb25n IGFuZCBjb250cmlidXRvcnMKKyAgQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQgQ2xvdWRmbGFy ZSwgSW5jLiBhbmQgY29udHJpYnV0b3JzCiAgIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5z ZS4KICovCiAKQEAgLTE3MDYsMTkgKzE3NDAsMjAgQEAgdmFyIENvbHVtbiA9IEJhY2tncmlkLkNv bHVtbiA9IEJhY2tib25lLk1vZGVsLmV4dGVuZCh7CiAgICAgIHRoaXMgY29sdW1uIGlzIHNvcnRh YmxlLiBJZiB0aGUgdmFsdWUgaXMgYSBzdHJpbmcsIGEgbWV0aG9kIHdpbGwgdGhlIHNhbWUKICAg ICAgbmFtZSB3aWxsIGJlIGxvb2tlZCB1cCBmcm9tIHRoZSBjb2x1bW4gaW5zdGFuY2UgdG8gZGV0 ZXJtaW5lIHdoZXRoZXIgdGhlCiAgICAgIGNvbHVtbiBzaG91bGQgYmUgc29ydGFibGUuIFRoZSBt ZXRob2QncyBzaWduYXR1cmUgbXVzdCBiZSBgZnVuY3Rpb24KLSAgICAgKEJhY2tncmlkLkNvbHVt biwgQmFja2JvbmUuTW9kZWwpOiBib29sZWFuYC4KKyAgICAgKEJhY2tib25lLk1vZGVsKTogYm9v bGVhbmAuIFRoZSBmdW5jdGlvbidzIGNvbnRleHQgaXMgdGhlIGNvbHVtbiBpbnN0YW5jZS4KIAog ICAgICBAY2ZnIHtib29sZWFufHN0cmluZ3xmdW5jdGlvbigpOiBib29sZWFufSBbZGVmYXVsdHMu ZWRpdGFibGU9dHJ1ZV0gV2hldGhlcgogICAgICB0aGlzIGNvbHVtbiBpcyBlZGl0YWJsZS4gSWYg dGhlIHZhbHVlIGlzIGEgc3RyaW5nLCBhIG1ldGhvZCB3aWxsIHRoZSBzYW1lCiAgICAgIG5hbWUg d2lsbCBiZSBsb29rZWQgdXAgZnJvbSB0aGUgY29sdW1uIGluc3RhbmNlIHRvIGRldGVybWluZSB3 aGV0aGVyIHRoZQogICAgICBjb2x1bW4gc2hvdWxkIGJlIGVkaXRhYmxlLiBUaGUgbWV0aG9kJ3Mg c2lnbmF0dXJlIG11c3QgYmUgYGZ1bmN0aW9uCi0gICAgIChCYWNrZ3JpZC5Db2x1bW4sIEJhY2ti b25lLk1vZGVsKTogYm9vbGVhbmAuCisgICAgIChCYWNrYm9uZS5Nb2RlbCk6IGJvb2xlYW5gLiBU aGUgZnVuY3Rpb24ncyBjb250ZXh0IGlzIHRoZSBjb2x1bW4gaW5zdGFuY2UuCiAKICAgICAgQGNm ZyB7Ym9vbGVhbnxzdHJpbmd8ZnVuY3Rpb24oKTogYm9vbGVhbn0gW2RlZmF1bHRzLnJlbmRlcmFi bGU9dHJ1ZV0KICAgICAgV2hldGhlciB0aGlzIGNvbHVtbiBpcyByZW5kZXJhYmxlLiBJZiB0aGUg dmFsdWUgaXMgYSBzdHJpbmcsIGEgbWV0aG9kIHdpbGwKICAgICAgdGhlIHNhbWUgbmFtZSB3aWxs IGJlIGxvb2tlZCB1cCBmcm9tIHRoZSBjb2x1bW4gaW5zdGFuY2UgdG8gZGV0ZXJtaW5lCiAgICAg IHdoZXRoZXIgdGhlIGNvbHVtbiBzaG91bGQgYmUgcmVuZGVyYWJsZS4gVGhlIG1ldGhvZCdzIHNp Z25hdHVyZSBtdXN0IGJlCi0gICAgIGBmdW5jdGlvbiAoQmFja3JpZC5Db2x1bW4sIEJhY2tib25l Lk1vZGVsKTogYm9vbGVhbmAuCisgICAgIGBmdW5jdGlvbiAoQmFja2JvbmUuTW9kZWwpOiBib29s ZWFuYC4gVGhlIGZ1bmN0aW9uJ3MgY29udGV4dCBpcyB0aGUgY29sdW1uCisgICAgIGluc3RhbmNl LgogCiAgICAgIEBjZmcge0JhY2tncmlkLkNlbGxGb3JtYXR0ZXIgfCBPYmplY3QgfCBzdHJpbmd9 IFtkZWZhdWx0cy5mb3JtYXR0ZXJdIFRoZQogICAgICBmb3JtYXR0ZXIgdG8gdXNlIHRvIGNvbnZl cnQgYmV0d2VlbiByYXcgbW9kZWwgdmFsdWVzIGFuZCB1c2VyIGlucHV0LgpAQCAtMTgyNCwyNCAr MTg1OSwzMyBAQCB2YXIgQ29sdW1uID0gQmFja2dyaWQuQ29sdW1uID0gQmFja2JvbmUuTW9kZWwu ZXh0ZW5kKHsKICAgfQogCiAgIC8qKgorICAgICBJZiB5b3UgY2Fubm90IGFsd2F5cyBkZXRlcm1p bmUgd2hldGhlciBhIGNvbHVtbiBzaG91bGQgYmUgc29ydGFibGUgYmVmb3JlCisgICAgIHRoZSBn cmlkIGdldCBpbml0aWFsaXplZCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIG1ldGhvZC4KKwogICAg ICBAbWVtYmVyIEJhY2tncmlkLkNvbHVtbgogICAgICBAcHJvdGVjdGVkCiAgICAgIEBtZXRob2Qg c29ydGFibGUKLSAgICAgQHJldHVybiB7ZnVuY3Rpb24oQmFja2dyaWQuQ29sdW1uLCBCYWNrYm9u ZS5Nb2RlbCk6IGJvb2xlYW4gfCBib29sZWFufQorICAgICBAcmV0dXJuIHtmdW5jdGlvbihCYWNr Ym9uZS5Nb2RlbCk6IGJvb2xlYW4gfCBib29sZWFufQogICAqLwogCiAgIC8qKgorICAgICBJZiB5 b3UgY2Fubm90IGFsd2F5cyBkZXRlcm1pbmUgd2hldGhlciBhIGNvbHVtbiBzaG91bGQgYmUgZWRp dGFibGUgYmVmb3JlCisgICAgIHRoZSBncmlkIGdldCBpbml0aWFsaXplZCwgeW91IGNhbiBvdmVy cmlkZSB0aGlzIG1ldGhvZC4KKwogICAgICBAbWVtYmVyIEJhY2tncmlkLkNvbHVtbgogICAgICBA cHJvdGVjdGVkCiAgICAgIEBtZXRob2QgZWRpdGFibGUKLSAgICAgQHJldHVybiB7ZnVuY3Rpb24o QmFja2dyaWQuQ29sdW1uLCBCYWNrYm9uZS5Nb2RlbCk6IGJvb2xlYW4gfCBib29sZWFufQorICAg ICBAcmV0dXJuIHtmdW5jdGlvbihCYWNrYm9uZS5Nb2RlbCk6IGJvb2xlYW4gfCBib29sZWFufQog ICAqLwogCiAgIC8qKgorICAgICBJZiB5b3UgY2Fubm90IGFsd2F5cyBkZXRlcm1pbmUgd2hldGhl ciBhIGNvbHVtbiBzaG91bGQgYmUgcmVuZGVyYWJsZSBiZWZvcmUKKyAgICAgdGhlIGdyaWQgZ2V0 IGluaXRpYWxpemVkLCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgbWV0aG9kLgorCiAgICAgIEBtZW1i ZXIgQmFja2dyaWQuQ29sdW1uCiAgICAgIEBwcm90ZWN0ZWQKICAgICAgQG1ldGhvZCByZW5kZXJh YmxlCi0gICAgIEByZXR1cm4ge2Z1bmN0aW9uKEJhY2tncmlkLkNvbHVtbiwgQmFja2JvbmUuTW9k ZWwpOiBib29sZWFuIHwgYm9vbGVhbn0KKyAgICAgQHJldHVybiB7ZnVuY3Rpb24oQmFja2JvbmUu TW9kZWwpOiBib29sZWFuIHwgYm9vbGVhbn0KICAgKi8KIH0pOwogCkBAIC0xODcxLDkgKzE5MTUs OSBAQCB2YXIgQ29sdW1ucyA9IEJhY2tncmlkLkNvbHVtbnMgPSBCYWNrYm9uZS5Db2xsZWN0aW9u LmV4dGVuZCh7CiAKIC8qCiAgIGJhY2tncmlkCi0gIGh0dHA6Ly9naXRodWIuY29tL3d5dWVuaG8v YmFja2dyaWQKKyAgaHR0cDovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS9iYWNrZ3JpZAogCi0gIENv cHlyaWdodCAoYykgMjAxMyBKaW1teSBZdWVuIEhvIFdvbmcgYW5kIGNvbnRyaWJ1dG9ycworICBD b3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCBDbG91ZGZsYXJlLCBJbmMuIGFuZCBjb250cmlidXRv cnMKICAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgogKi8KIApAQCAtMjAyMCw3ICsy MDY0LDkgQEAgdmFyIEVtcHR5Um93ID0gQmFja2dyaWQuRW1wdHlSb3cgPSBCYWNrYm9uZS5WaWV3 LmV4dGVuZCh7CiAKICAgICB2YXIgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZCIpOwog ICAgIHRkLnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsIHRoaXMuY29sdW1ucy5sZW5ndGgpOwotICAg IHRkLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKF8ucmVzdWx0KHRoaXMsICJl bXB0eVRleHQiKSkpOworICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh biIpOworICAgIHNwYW4uaW5uZXJIVE1MID0gXy5yZXN1bHQodGhpcywgImVtcHR5VGV4dCIpOwor ICAgIHRkLmFwcGVuZENoaWxkKHNwYW4pOwogCiAgICAgdGhpcy5lbC5jbGFzc05hbWUgPSAiZW1w dHkiOwogICAgIHRoaXMuZWwuYXBwZW5kQ2hpbGQodGQpOwpAQCAtMjAzMSw5ICsyMDc3LDkgQEAg dmFyIEVtcHR5Um93ID0gQmFja2dyaWQuRW1wdHlSb3cgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7 CiAKIC8qCiAgIGJhY2tncmlkCi0gIGh0dHA6Ly9naXRodWIuY29tL3d5dWVuaG8vYmFja2dyaWQK KyAgaHR0cDovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS9iYWNrZ3JpZAogCi0gIENvcHlyaWdodCAo YykgMjAxMyBKaW1teSBZdWVuIEhvIFdvbmcgYW5kIGNvbnRyaWJ1dG9ycworICBDb3B5cmlnaHQg KGMpIDIwMTMtcHJlc2VudCBDbG91ZGZsYXJlLCBJbmMuIGFuZCBjb250cmlidXRvcnMKICAgTGlj ZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgogKi8KIApAQCAtMjA1Miw3ICsyMDk4LDcgQEAg dmFyIEhlYWRlckNlbGwgPSBCYWNrZ3JpZC5IZWFkZXJDZWxsID0gQmFja2JvbmUuVmlldy5leHRl bmQoewogCiAgIC8qKiBAcHJvcGVydHkgKi8KICAgZXZlbnRzOiB7Ci0gICAgImNsaWNrIGEiOiAi b25DbGljayIKKyAgICAiY2xpY2sgYnV0dG9uIjogIm9uQ2xpY2siCiAgIH0sCiAKICAgLyoqCkBA IC0yMDg3LDEyICsyMTMzLDEyIEBAIHZhciBIZWFkZXJDZWxsID0gQmFja2dyaWQuSGVhZGVyQ2Vs bCA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHsKICAgICBpZiAoQmFja2dyaWQuY2FsbEJ5TmVlZChj b2x1bW4uc29ydGFibGUoKSwgY29sdW1uLCBjb2xsZWN0aW9uKSkgJGVsLmFkZENsYXNzKCJzb3J0 YWJsZSIpOwogICAgIGlmIChCYWNrZ3JpZC5jYWxsQnlOZWVkKGNvbHVtbi5yZW5kZXJhYmxlKCks IGNvbHVtbiwgY29sbGVjdGlvbikpICRlbC5hZGRDbGFzcygicmVuZGVyYWJsZSIpOwogCi0gICAg dGhpcy5saXN0ZW5Ubyhjb2xsZWN0aW9uLmZ1bGxDb2xsZWN0aW9uIHx8IGNvbGxlY3Rpb24sICJz b3J0IiwgdGhpcy5yZW1vdmVDZWxsRGlyZWN0aW9uKTsKKyAgICB0aGlzLmxpc3RlblRvKGNvbGxl Y3Rpb24uZnVsbENvbGxlY3Rpb24gfHwgY29sbGVjdGlvbiwgImJhY2tncmlkOnNvcnRlZCIsIHRo aXMucmVtb3ZlQ2VsbERpcmVjdGlvbik7CiAgIH0sCiAKICAgLyoqCi0gICAgIEV2ZW50IGhhbmRs ZXIgZm9yIHRoZSBjb2xsZWN0aW9uJ3MgYHNvcnRgIGV2ZW50LiBSZW1vdmVzIGFsbCB0aGUgQ1NT Ci0gICAgIGRpcmVjdGlvbiBjbGFzc2VzLgorICAgICBFdmVudCBoYW5kbGVyIGZvciB0aGUgY29s bGVjdGlvbidzIGBiYWNrZ3JpZDpzb3J0ZWRgIGV2ZW50LiBSZW1vdmVzCisgICAgIGFsbCB0aGUg Q1NTIGRpcmVjdGlvbiBjbGFzc2VzLgogICAgKi8KICAgcmVtb3ZlQ2VsbERpcmVjdGlvbjogZnVu Y3Rpb24gKCkgewogICAgIHRoaXMuJGVsLnJlbW92ZUNsYXNzKCJhc2NlbmRpbmciKS5yZW1vdmVD bGFzcygiZGVzY2VuZGluZyIpOwpAQCAtMjE1MSw3ICsyMTk3LDcgQEAgdmFyIEhlYWRlckNlbGwg PSBCYWNrZ3JpZC5IZWFkZXJDZWxsID0gQmFja2JvbmUuVmlldy5leHRlbmQoewogICAgIHZhciBz b3J0YWJsZSA9IEJhY2tncmlkLmNhbGxCeU5lZWQoY29sdW1uLnNvcnRhYmxlKCksIGNvbHVtbiwg dGhpcy5jb2xsZWN0aW9uKTsKICAgICB2YXIgbGFiZWw7CiAgICAgaWYoc29ydGFibGUpewotICAg ICAgbGFiZWwgPSAkKCI8YT4iKS50ZXh0KGNvbHVtbi5nZXQoImxhYmVsIikpLmFwcGVuZCgiPGIg Y2xhc3M9J3NvcnQtY2FyZXQnPjwvYj4iKTsKKyAgICAgIGxhYmVsID0gJCgiPGJ1dHRvbj4iKS50 ZXh0KGNvbHVtbi5nZXQoImxhYmVsIikpLmFwcGVuZCgiPHNwYW4gY2xhc3M9J3NvcnQtY2FyZXQn IGFyaWEtaGlkZGVuPSd0cnVlJz48L3NwYW4+Iik7CiAgICAgfSBlbHNlIHsKICAgICAgIGxhYmVs ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY29sdW1uLmdldCgibGFiZWwiKSk7CiAgICAgfQpA QCAtMjE3Myw4ICsyMjE5LDYgQEAgdmFyIEhlYWRlckNlbGwgPSBCYWNrZ3JpZC5IZWFkZXJDZWxs ID0gQmFja2JvbmUuVmlldy5leHRlbmQoewogICovCiB2YXIgSGVhZGVyUm93ID0gQmFja2dyaWQu SGVhZGVyUm93ID0gQmFja2dyaWQuUm93LmV4dGVuZCh7CiAKLSAgcmVxdWlyZWRPcHRpb25zOiBb ImNvbHVtbnMiLCAiY29sbGVjdGlvbiJdLAotCiAgIC8qKgogICAgICBJbml0aWFsaXplci4KIApA QCAtMjI1OSw5ICsyMzAzLDkgQEAgdmFyIEhlYWRlciA9IEJhY2tncmlkLkhlYWRlciA9IEJhY2ti b25lLlZpZXcuZXh0ZW5kKHsKIAogLyoKICAgYmFja2dyaWQKLSAgaHR0cDovL2dpdGh1Yi5jb20v d3l1ZW5oby9iYWNrZ3JpZAorICBodHRwOi8vZ2l0aHViLmNvbS9jbG91ZGZsYXJlL2JhY2tncmlk CiAKLSAgQ29weXJpZ2h0IChjKSAyMDEzIEppbW15IFl1ZW4gSG8gV29uZyBhbmQgY29udHJpYnV0 b3JzCisgIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50IENsb3VkZmxhcmUsIEluYy4gYW5kIGNv bnRyaWJ1dG9ycwogICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqLwogCkBAIC0y Mjk4LDcgKzIzNDIsNyBAQCB2YXIgQm9keSA9IEJhY2tncmlkLkJvZHkgPSBCYWNrYm9uZS5WaWV3 LmV4dGVuZCh7CiAgICAgICB0aGlzLmNvbHVtbnMgPSBuZXcgQ29sdW1ucyh0aGlzLmNvbHVtbnMp OwogICAgIH0KIAotICAgIHRoaXMucm93ID0gb3B0aW9ucy5yb3cgfHwgUm93OworICAgIHRoaXMu cm93ID0gb3B0aW9ucy5yb3cgfHwgdGhpcy5yb3cgfHwgUm93OwogICAgIHRoaXMucm93cyA9IHRo aXMuY29sbGVjdGlvbi5tYXAoZnVuY3Rpb24gKG1vZGVsKSB7CiAgICAgICB2YXIgcm93ID0gbmV3 IHRoaXMucm93KHsKICAgICAgICAgY29sdW1uczogdGhpcy5jb2x1bW5zLApAQCAtMjMxOCwxNCAr MjM2MiwxOSBAQCB2YXIgQm9keSA9IEJhY2tncmlkLkJvZHkgPSBCYWNrYm9uZS5WaWV3LmV4dGVu ZCh7CiAgICAgdGhpcy5saXN0ZW5Ubyhjb2xsZWN0aW9uLCAicmVzZXQiLCB0aGlzLnJlZnJlc2gp OwogICAgIHRoaXMubGlzdGVuVG8oY29sbGVjdGlvbiwgImJhY2tncmlkOnNvcnQiLCB0aGlzLnNv cnQpOwogICAgIHRoaXMubGlzdGVuVG8oY29sbGVjdGlvbiwgImJhY2tncmlkOmVkaXRlZCIsIHRo aXMubW92ZVRvTmV4dENlbGwpOworCisgICAgdGhpcy5saXN0ZW5Ubyh0aGlzLmNvbHVtbnMsICJh ZGQgcmVtb3ZlIiwgdGhpcy51cGRhdGVFbXB0eVJvdyk7CiAgIH0sCiAKICAgX3Vuc2hpZnRFbXB0 eVJvd01heUJlOiBmdW5jdGlvbiAoKSB7CiAgICAgaWYgKHRoaXMucm93cy5sZW5ndGggPT09IDAg JiYgdGhpcy5lbXB0eVRleHQgIT0gbnVsbCkgewotICAgICAgdGhpcy5yb3dzLnVuc2hpZnQobmV3 IEVtcHR5Um93KHsKKyAgICAgIHRoaXMuZW1wdHlSb3cgPSBuZXcgRW1wdHlSb3coewogICAgICAg ICBlbXB0eVRleHQ6IHRoaXMuZW1wdHlUZXh0LAogICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVt bnMKLSAgICAgIH0pKTsKKyAgICAgIH0pOworCisgICAgICB0aGlzLnJvd3MudW5zaGlmdCh0aGlz LmVtcHR5Um93KTsKKyAgICAgIHJldHVybiB0cnVlCiAgICAgfQogICB9LAogCkBAIC0yNDEzLDcg KzI0NjIsOSBAQCB2YXIgQm9keSA9IEJhY2tncmlkLkJvZHkgPSBCYWNrYm9uZS5WaWV3LmV4dGVu ZCh7CiAgICAgLy8gcmVtb3ZlUm93KCkgaXMgY2FsbGVkIGRpcmVjdGx5CiAgICAgaWYgKCFvcHRp b25zKSB7CiAgICAgICB0aGlzLmNvbGxlY3Rpb24ucmVtb3ZlKG1vZGVsLCAob3B0aW9ucyA9IGNv bGxlY3Rpb24pKTsKLSAgICAgIHRoaXMuX3Vuc2hpZnRFbXB0eVJvd01heUJlKCk7CisgICAgICBp ZiAodGhpcy5fdW5zaGlmdEVtcHR5Um93TWF5QmUoKSkgeworICAgICAgICB0aGlzLnJlbmRlcigp OworICAgICAgfQogICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjQyMiwxMiArMjQ3MywyNSBA QCB2YXIgQm9keSA9IEJhY2tncmlkLkJvZHkgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CiAgICAg fQogCiAgICAgdGhpcy5yb3dzLnNwbGljZShvcHRpb25zLmluZGV4LCAxKTsKLSAgICB0aGlzLl91 bnNoaWZ0RW1wdHlSb3dNYXlCZSgpOworICAgIGlmICh0aGlzLl91bnNoaWZ0RW1wdHlSb3dNYXlC ZSgpKSB7CisgICAgICB0aGlzLnJlbmRlcigpOworICAgIH0KIAogICAgIHJldHVybiB0aGlzOwog ICB9LAogCiAgIC8qKgorICAgICBSZXJlbmRlciB0aGUgRW1wdHlSb3cgd2hpY2ggZW1wdGllcyB0 aGUgRE9NIGVsZW1lbnQsIGNyZWF0ZXMgdGhlIHRkIHdpdGggdGhlCisgICAgIHVwZGF0ZWQgY29s c3BhbiwgYW5kIGFwcGVuZHMgaXQgYmFjayBpbnRvIHRoZSBET00KKyAgKi8KKworICB1cGRhdGVF bXB0eVJvdzogZnVuY3Rpb24gKCkgeworICAgIGlmICh0aGlzLmVtcHR5Um93ICE9IG51bGwpIHsK KyAgICAgIHRoaXMuZW1wdHlSb3cucmVuZGVyKCk7CisgICAgfQorICB9LAorCisgIC8qKgogICAg ICBSZWluaXRpYWxpemUgYWxsIHRoZSByb3dzIGluc2lkZSB0aGUgYm9keSBhbmQgcmUtcmVuZGVy IHRoZW0uIFRyaWdnZXJzIGEKICAgICAgQmFja2JvbmUgYGJhY2tncmlkOnJlZnJlc2hgIGV2ZW50 IGZyb20gdGhlIGNvbGxlY3Rpb24gYWxvbmcgd2l0aCB0aGUgYm9keQogICAgICBpbnN0YW5jZSBh cyBpdHMgc29sZSBwYXJhbWV0ZXIgd2hlbiBkb25lLgpAQCAtMjUwMyw3ICsyNTY3LDcgQEAgdmFy IEJvZHkgPSBCYWNrZ3JpZC5Cb2R5ID0gQmFja2JvbmUuVmlldy5leHRlbmQoewogICAgICBUcmln Z2VycyBhIEJhY2tib25lIGBiYWNrZ3JpZDpzb3J0ZWRgIGV2ZW50IGZyb20gdGhlIGNvbGxlY3Rp b24gd2hlbiBkb25lCiAgICAgIHdpdGggdGhlIGNvbHVtbiwgZGlyZWN0aW9uIGFuZCBhIHJlZmVy ZW5jZSB0byB0aGUgY29sbGVjdGlvbi4KIAotICAgICBAcGFyYW0ge0JhY2tncmlkLkNvbHVtbn0g Y29sdW1uCisgICAgIEBwYXJhbSB7QmFja2dyaWQuQ29sdW1ufHN0cmluZ30gY29sdW1uCiAgICAg IEBwYXJhbSB7bnVsbHwiYXNjZW5kaW5nInwiZGVzY2VuZGluZyJ9IGRpcmVjdGlvbgogCiAgICAg IFNlZSBbQmFja2JvbmUuQ29sbGVjdGlvbiNjb21wYXJhdG9yXShodHRwOi8vYmFja2JvbmVqcy5v cmcvI0NvbGxlY3Rpb24tY29tcGFyYXRvcikKQEAgLTI1NDUsMTkgKzI2MDksMjAgQEAgdmFyIEJv ZHkgPSBCYWNrZ3JpZC5Cb2R5ID0gQmFja2JvbmUuVmlldy5leHRlbmQoewogICAgICAgICB9CiAg ICAgICAgIGNvbGxlY3Rpb24uZnVsbENvbGxlY3Rpb24uc29ydCgpOwogICAgICAgICBjb2xsZWN0 aW9uLnRyaWdnZXIoImJhY2tncmlkOnNvcnRlZCIsIGNvbHVtbiwgZGlyZWN0aW9uLCBjb2xsZWN0 aW9uKTsKKyAgICAgICAgY29sdW1uLnNldCgiZGlyZWN0aW9uIiwgZGlyZWN0aW9uKTsKICAgICAg IH0KICAgICAgIGVsc2UgY29sbGVjdGlvbi5mZXRjaCh7cmVzZXQ6IHRydWUsIHN1Y2Nlc3M6IGZ1 bmN0aW9uICgpIHsKICAgICAgICAgY29sbGVjdGlvbi50cmlnZ2VyKCJiYWNrZ3JpZDpzb3J0ZWQi LCBjb2x1bW4sIGRpcmVjdGlvbiwgY29sbGVjdGlvbik7CisgICAgICAgIGNvbHVtbi5zZXQoImRp cmVjdGlvbiIsIGRpcmVjdGlvbik7CiAgICAgICB9fSk7CiAgICAgfQogICAgIGVsc2UgewogICAg ICAgY29sbGVjdGlvbi5jb21wYXJhdG9yID0gY29tcGFyYXRvcjsKICAgICAgIGNvbGxlY3Rpb24u c29ydCgpOwogICAgICAgY29sbGVjdGlvbi50cmlnZ2VyKCJiYWNrZ3JpZDpzb3J0ZWQiLCBjb2x1 bW4sIGRpcmVjdGlvbiwgY29sbGVjdGlvbik7CisgICAgICBjb2x1bW4uc2V0KCJkaXJlY3Rpb24i LCBkaXJlY3Rpb24pOwogICAgIH0KIAotICAgIGNvbHVtbi5zZXQoImRpcmVjdGlvbiIsIGRpcmVj dGlvbik7Ci0KICAgICByZXR1cm4gdGhpczsKICAgfSwKIApAQCAtMjU5Niw2ICsyNjYxLDkgQEAg dmFyIEJvZHkgPSBCYWNrZ3JpZC5Cb2R5ID0gQmFja2JvbmUuVmlldy5leHRlbmQoewogICAgIHZh ciBqID0gdGhpcy5jb2x1bW5zLmluZGV4T2YoY29sdW1uKTsKICAgICB2YXIgY2VsbCwgcmVuZGVy YWJsZSwgZWRpdGFibGUsIG0sIG47CiAKKyAgICAvLyByZXR1cm4gaWYgbW9kZWwgYmVpbmcgZWRp dGVkIGluIGEgZGlmZmVyZW50IGdyaWQKKyAgICBpZiAoaiA9PT0gLTEpIHJldHVybiB0aGlzOwor CiAgICAgdGhpcy5yb3dzW2ldLmNlbGxzW2pdLmV4aXRFZGl0TW9kZSgpOwogCiAgICAgaWYgKGNv bW1hbmQubW92ZVVwKCkgfHwgY29tbWFuZC5tb3ZlRG93bigpIHx8IGNvbW1hbmQubW92ZUxlZnQo KSB8fApAQCAtMjYyNSw3ICsyNjkzLDExIEBAIHZhciBCb2R5ID0gQmFja2dyaWQuQm9keSA9IEJh Y2tib25lLlZpZXcuZXh0ZW5kKHsKICAgICAgICAgICBjZWxsID0gdGhpcy5yb3dzW21dLmNlbGxz W25dOwogICAgICAgICAgIHJlbmRlcmFibGUgPSBCYWNrZ3JpZC5jYWxsQnlOZWVkKGNlbGwuY29s dW1uLnJlbmRlcmFibGUoKSwgY2VsbC5jb2x1bW4sIGNlbGwubW9kZWwpOwogICAgICAgICAgIGVk aXRhYmxlID0gQmFja2dyaWQuY2FsbEJ5TmVlZChjZWxsLmNvbHVtbi5lZGl0YWJsZSgpLCBjZWxs LmNvbHVtbiwgbW9kZWwpOwotICAgICAgICAgIGlmIChyZW5kZXJhYmxlICYmIGVkaXRhYmxlKSB7 CisgICAgICAgICAgaWYoY2VsbCAmJiBjZWxsLiRlbC5oYXNDbGFzcygnZWRpdC1jZWxsJykgJiYK KyAgICAgICAgICAgICFjZWxsLiRlbC5oYXNDbGFzcygncHJpdmlsZWdlcycpIHx8IGNlbGwuJGVs Lmhhc0NsYXNzKCdkZWxldGUtY2VsbCcpKSB7CisgICAgICAgICAgICBtb2RlbC50cmlnZ2VyKCJi YWNrZ3JpZDpuZXh0IiwgbSwgbiwgZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgfSBlbHNlIGlmIChyZW5kZXJhYmxlICYmIGVkaXRhYmxlKSB7CiAgICAgICAgICAgICBjZWxs LmVudGVyRWRpdE1vZGUoKTsKICAgICAgICAgICAgIG1vZGVsLnRyaWdnZXIoImJhY2tncmlkOm5l eHQiLCBtLCBuLCBmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI2NDQsOSArMjcxNiw5 IEBAIHZhciBCb2R5ID0gQmFja2dyaWQuQm9keSA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHsKIAog LyoKICAgYmFja2dyaWQKLSAgaHR0cDovL2dpdGh1Yi5jb20vd3l1ZW5oby9iYWNrZ3JpZAorICBo dHRwOi8vZ2l0aHViLmNvbS9jbG91ZGZsYXJlL2JhY2tncmlkCiAKLSAgQ29weXJpZ2h0IChjKSAy MDEzIEppbW15IFl1ZW4gSG8gV29uZyBhbmQgY29udHJpYnV0b3JzCisgIENvcHlyaWdodCAoYykg MjAxMy1wcmVzZW50IENsb3VkZmxhcmUsIEluYy4gYW5kIGNvbnRyaWJ1dG9ycwogICBMaWNlbnNl ZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCiAqLwogCkBAIC0yNjg0LDkgKzI3NTYsOSBAQCB2YXIg Rm9vdGVyID0gQmFja2dyaWQuRm9vdGVyID0gQmFja2JvbmUuVmlldy5leHRlbmQoewogCiAvKgog ICBiYWNrZ3JpZAotICBodHRwOi8vZ2l0aHViLmNvbS93eXVlbmhvL2JhY2tncmlkCisgIGh0dHA6 Ly9naXRodWIuY29tL2Nsb3VkZmxhcmUvYmFja2dyaWQKIAotICBDb3B5cmlnaHQgKGMpIDIwMTMg SmltbXkgWXVlbiBIbyBXb25nIGFuZCBjb250cmlidXRvcnMKKyAgQ29weXJpZ2h0IChjKSAyMDEz LXByZXNlbnQgQ2xvdWRmbGFyZSwgSW5jLiBhbmQgY29udHJpYnV0b3JzCiAgIExpY2Vuc2VkIHVu ZGVyIHRoZSBNSVQgbGljZW5zZS4KICovCiAKQEAgLTI3NjAsNiArMjgzMiw3IEBAIHZhciBHcmlk ID0gQmFja2dyaWQuR3JpZCA9IEJhY2tib25lLlZpZXcuZXh0ZW5kKHsKICAgICAgQHBhcmFtIHtP YmplY3R9IG9wdGlvbnMKICAgICAgQHBhcmFtIHtCYWNrYm9uZS5Db2xsZWN0aW9uLjxCYWNrZ3Jp ZC5Db2x1bW5zPnxBcnJheS48QmFja2dyaWQuQ29sdW1uPnxBcnJheS48T2JqZWN0Pn0gb3B0aW9u cy5jb2x1bW5zIENvbHVtbiBtZXRhZGF0YS4KICAgICAgQHBhcmFtIHtCYWNrYm9uZS5Db2xsZWN0 aW9ufSBvcHRpb25zLmNvbGxlY3Rpb24gVGhlIGNvbGxlY3Rpb24gb2YgdGFidWxhciBtb2RlbCBk YXRhIHRvIGRpc3BsYXkuCisgICAgIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYXB0aW9uPXN0 cmluZ10gQW4gb3B0aW9uYWwgY2FwdGlvbiB0byBiZSBhZGRlZCB0byB0aGUgdGFibGUuCiAgICAg IEBwYXJhbSB7QmFja2dyaWQuSGVhZGVyfSBbb3B0aW9ucy5oZWFkZXI9QmFja2dyaWQuSGVhZGVy XSBBbiBvcHRpb25hbCBIZWFkZXIgY2xhc3MgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQuCiAgICAg IEBwYXJhbSB7QmFja2dyaWQuQm9keX0gW29wdGlvbnMuYm9keT1CYWNrZ3JpZC5Cb2R5XSBBbiBv cHRpb25hbCBCb2R5IGNsYXNzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LgogICAgICBAcGFyYW0g e0JhY2tncmlkLlJvd30gW29wdGlvbnMucm93PUJhY2tncmlkLlJvd10gQW4gb3B0aW9uYWwgUm93 IGNsYXNzIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0LgpAQCAtMjc2OSwxMCArMjg0MiwxMiBAQCB2 YXIgR3JpZCA9IEJhY2tncmlkLkdyaWQgPSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CiAgICAgLy8g Q29udmVydCB0aGUgbGlzdCBvZiBjb2x1bW4gb2JqZWN0cyBoZXJlIGZpcnN0IHNvIHRoZSBzdWJ2 aWV3cyBkb24ndCBoYXZlCiAgICAgLy8gdG8uCiAgICAgaWYgKCEob3B0aW9ucy5jb2x1bW5zIGlu c3RhbmNlb2YgQmFja2JvbmUuQ29sbGVjdGlvbikpIHsKLSAgICAgIG9wdGlvbnMuY29sdW1ucyA9 IG5ldyBDb2x1bW5zKG9wdGlvbnMuY29sdW1ucyk7CisgICAgICBvcHRpb25zLmNvbHVtbnMgPSBu ZXcgQ29sdW1ucyhvcHRpb25zLmNvbHVtbnMgfHwgdGhpcy5jb2x1bW5zKTsKICAgICB9CiAgICAg dGhpcy5jb2x1bW5zID0gb3B0aW9ucy5jb2x1bW5zOwogCisgICAgdGhpcy5jYXB0aW9uID0gb3B0 aW9ucy5jYXB0aW9uOworCiAgICAgdmFyIGZpbHRlcmVkT3B0aW9ucyA9IF8ub21pdChvcHRpb25z LCBbImVsIiwgImlkIiwgImF0dHJpYnV0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJjbGFzc05hbWUiLCAidGFnTmFtZSIsICJldmVudHMiXSk7CiAKQEAg LTI4NTEsMTMgKzI5MjYsMTcgQEAgdmFyIEdyaWQgPSBCYWNrZ3JpZC5HcmlkID0gQmFja2JvbmUu Vmlldy5leHRlbmQoewogICB9LAogCiAgIC8qKgotICAgICBSZW5kZXJzIHRoZSBncmlkJ3MgaGVh ZGVyLCB0aGVuIGZvb3RlciwgdGhlbiBmaW5hbGx5IHRoZSBib2R5LiBUcmlnZ2VycyBhCisgICAg IFJlbmRlcnMgdGhlIGdyaWQncyBjYXB0aW9uLCB0aGVuIGhlYWRlciwgdGhlbiBmb290ZXIsIHRo ZW4gZmluYWxseSB0aGUgYm9keS4gVHJpZ2dlcnMgYQogICAgICBCYWNrYm9uZSBgYmFja2dyaWQ6 cmVuZGVyZWRgIGV2ZW50IGFsb25nIHdpdGggYSByZWZlcmVuY2UgdG8gdGhlIGdyaWQgd2hlbgog ICAgICB0aGUgaXQgaGFzIHN1Y2Nlc3NmdWxseSBiZWVuIHJlbmRlcmVkLgogICAgKi8KICAgcmVu ZGVyOiBmdW5jdGlvbiAoKSB7CiAgICAgdGhpcy4kZWwuZW1wdHkoKTsKIAorICAgIGlmICh0aGlz LmNhcHRpb24pIHsKKyAgICAgIHRoaXMuJGVsLmFwcGVuZCgkKCI8Y2FwdGlvbj4iKS50ZXh0KHRo aXMuY2FwdGlvbikpOworICAgIH0KKwogICAgIGlmICh0aGlzLmhlYWRlcikgewogICAgICAgdGhp cy4kZWwuYXBwZW5kKHRoaXMuaGVhZGVyLnJlbmRlcigpLiRlbCk7CiAgICAgfQpAQCAtMjg4OCw1 ICsyOTY3LDUgQEAgdmFyIEdyaWQgPSBCYWNrZ3JpZC5HcmlkID0gQmFja2JvbmUuVmlldy5leHRl bmQoewogICB9CiAKIH0pOwotcmV0dXJuIEJhY2tncmlkOworICByZXR1cm4gQmFja2dyaWQ7CiB9 KSk7CmRpZmYgLS1naXQgYS93ZWIvd2VicGFjay5zaGltLmpzIGIvd2ViL3dlYnBhY2suc2hpbS5q cwppbmRleCA4ZjQzYjJhLi41ZjJlNDhjIDEwMDY0NAotLS0gYS93ZWIvd2VicGFjay5zaGltLmpz CisrKyBiL3dlYi93ZWJwYWNrLnNoaW0uanMKQEAgLTE3MCw3ICsxNzAsOCBAQCB2YXIgd2VicGFj a1NoaW1Db25maWcgPSB7CiAgICAgJ2JhY2tib25lJzogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4v bm9kZV9tb2R1bGVzL2JhY2tib25lL2JhY2tib25lJyksCiAgICAgJ2JhY2tib25lLnVuZG8nOiBw YXRoLmpvaW4oX19kaXJuYW1lLCAnLi9ub2RlX21vZHVsZXMvYmFja2JvbmUtdW5kby9CYWNrYm9u ZS5VbmRvJyksCiAgICAgJ2JhY2tmb3JtJzogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4vcGdhZG1p bi9zdGF0aWMvdmVuZG9yL2JhY2tmb3JtL2JhY2tmb3JtJyksCi0gICAgJ2JhY2tncmlkJzogcGF0 aC5qb2luKF9fZGlybmFtZSwgJy4vbm9kZV9tb2R1bGVzL2JhY2tncmlkL2xpYi9iYWNrZ3JpZCcp LAorICAgIC8vICdiYWNrZ3JpZCc6IHBhdGguam9pbihfX2Rpcm5hbWUsICcuL25vZGVfbW9kdWxl cy9iYWNrZ3JpZC9saWIvYmFja2dyaWQnKSwKKyAgICAnYmFja2dyaWQnOiBwYXRoLmpvaW4oX19k aXJuYW1lLCAnLi9wZ2FkbWluL3N0YXRpYy92ZW5kb3IvYmFja2dyaWQvYmFja2dyaWQnKSwKICAg ICAnYm9vdHN0cmFwLmRhdGV0aW1lcGlja2VyJzogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4vbm9k ZV9tb2R1bGVzL3RlbXB1c2RvbWludXMtYm9vdHN0cmFwLTQvYnVpbGQvanMvdGVtcHVzZG9taW51 cy1ib290c3RyYXAtNC5taW4nKSwKICAgICAnYm9vdHN0cmFwLnRvZ2dsZSc6IHBhdGguam9pbihf X2Rpcm5hbWUsICcuL25vZGVfbW9kdWxlcy9ib290c3RyYXA0LXRvZ2dsZS9qcy9ib290c3RyYXA0 LXRvZ2dsZScpLAogICAgICdzZWxlY3QyJzogcGF0aC5qb2luKF9fZGlybmFtZSwgJy4vbm9kZV9t b2R1bGVzL3NlbGVjdDIvZGlzdC9qcy9zZWxlY3QyLmZ1bGwnKSwK --000000000000a2853d058d2ba165--