La casa de mi balance: una herramienta de reflexión personalBy Martha Ramirez / August 13, 2026 LinkedIn Twitter/X Facebook WhatsApp Reddit Email Cargando… PCFET0NUWVBFIGh0bWw+CjxodG1sPjxoZWFkPgo8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CjxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1k ZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MSI+CjxzY3JpcHQ+Ly8gR0VORVJBVEVEIGZyb20gZGMtcnVudGltZS9zcmMvKi50cyDigJQgZG8gbm90IGVk aXQuIFJlYnVpbGQgd2l0aCBgY2QgZGMtcnVudGltZSAmJiBidW4gcnVuIGJ1aWxkYC4KInVzZSBzdHJpY3QiOwooKCkgPT4gewogIHZhciBfX2RlZlByb3Ag PSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgdmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlBy b3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9 IHZhbHVlOwogIHZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4gX19kZWZOb3JtYWxQcm9wKG9iaiwgdHlwZW9mIGtleSAhPT0gInN5 bWJvbCIgPyBrZXkgKyAiIiA6IGtleSwgdmFsdWUpOwoKICAvLyBzcmMvcmVhY3QudHMKICBmdW5jdGlvbiBnZXRSZWFjdCgpIHsKICAgIGNvbnN0IFIgPSB3 aW5kb3cuUmVhY3Q7CiAgICBpZiAoIVIpIHRocm93IG5ldyBFcnJvcigiZGMtcnVudGltZTogd2luZG93LlJlYWN0IGlzIG5vdCBhdmFpbGFibGUgeWV0Iik7 CiAgICByZXR1cm4gUjsKICB9CiAgZnVuY3Rpb24gZ2V0UmVhY3RET00oKSB7CiAgICBjb25zdCBSRCA9IHdpbmRvdy5SZWFjdERPTTsKICAgIGlmICghUkQp IHRocm93IG5ldyBFcnJvcigiZGMtcnVudGltZTogd2luZG93LlJlYWN0RE9NIGlzIG5vdCBhdmFpbGFibGUgeWV0Iik7CiAgICByZXR1cm4gUkQ7CiAgfQog IHZhciBoID0gKCguLi5hcmdzKSA9PiBnZXRSZWFjdCgpLmNyZWF0ZUVsZW1lbnQoCiAgICAuLi5hcmdzCiAgKSk7CgogIC8vIHNyYy9wYXJzZS50cwogIGZ1 bmN0aW9uIHBhcnNlRGNEb2N1bWVudChkb2MpIHsKICAgIGNvbnN0IGRjID0gZG9jLnF1ZXJ5U2VsZWN0b3IoIngtZGMiKTsKICAgIGlmICghZGMpIHJldHVy biBudWxsOwogICAgY29uc3Qgc2NyaXB0RWwgPSBkb2MucXVlcnlTZWxlY3Rvcigic2NyaXB0W2RhdGEtZGMtc2NyaXB0XSIpOwogICAgY29uc3QgeyBwcm9w cywgcHJldmlldyB9ID0gcGFyc2VEYXRhUHJvcHMoCiAgICAgIHNjcmlwdEVsPy5nZXRBdHRyaWJ1dGUoImRhdGEtcHJvcHMiKSA/PyBudWxsCiAgICApOwog ICAgcmV0dXJuIHsKICAgICAgdGVtcGxhdGU6IGRjLmlubmVySFRNTCwKICAgICAganM6IHNjcmlwdEVsID8gc2NyaXB0RWwudGV4dENvbnRlbnQgfHwgIiIg OiAiIiwKICAgICAgcHJvcHMsCiAgICAgIHByZXZpZXcKICAgIH07CiAgfQogIGZ1bmN0aW9uIHBhcnNlRGNUZXh0KHNyYykgewogICAgY29uc3Qgb3Blbk1h dGNoID0gLzx4LWRjKD86XHNbXj5dKik/Pi8uZXhlYyhzcmMpOwogICAgaWYgKCFvcGVuTWF0Y2gpIHJldHVybiBudWxsOwogICAgY29uc3QgY2xvc2UgPSBz cmMubGFzdEluZGV4T2YoIjwveC1kYz4iKTsKICAgIGlmIChjbG9zZSA9PT0gLTEgfHwgY2xvc2UgPCBvcGVuTWF0Y2guaW5kZXgpIHJldHVybiBudWxsOwog ICAgY29uc3QgdGVtcGxhdGUgPSBzcmMuc2xpY2Uob3Blbk1hdGNoLmluZGV4ICsgb3Blbk1hdGNoWzBdLmxlbmd0aCwgY2xvc2UpOwogICAgY29uc3QgZG9j ID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhzcmMsICJ0ZXh0L2h0bWwiKTsKICAgIGNvbnN0IHNjcmlwdEVsID0gZG9jLnF1ZXJ5U2VsZWN0 b3IoInNjcmlwdFtkYXRhLWRjLXNjcmlwdF0iKTsKICAgIGNvbnN0IHsgcHJvcHMsIHByZXZpZXcgfSA9IHBhcnNlRGF0YVByb3BzKAogICAgICBzY3JpcHRF bD8uZ2V0QXR0cmlidXRlKCJkYXRhLXByb3BzIikgPz8gbnVsbAogICAgKTsKICAgIHJldHVybiB7CiAgICAgIHRlbXBsYXRlLAogICAgICBqczogc2NyaXB0 RWwgPyBzY3JpcHRFbC50ZXh0Q29udGVudCB8fCAiIiA6ICIiLAogICAgICBwcm9wcywKICAgICAgcHJldmlldwogICAgfTsKICB9CiAgZnVuY3Rpb24gcGFy c2VEYXRhUHJvcHMocmF3KSB7CiAgICBpZiAoIXJhdykgcmV0dXJuIHsgcHJvcHM6IG51bGwsIHByZXZpZXc6IG51bGwgfTsKICAgIGxldCBwYXJzZWQ7CiAg ICB0cnkgewogICAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHJhdyk7CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIHsgcHJvcHM6IG51bGwsIHByZXZpZXc6 IG51bGwgfTsKICAgIH0KICAgIGlmICghcGFyc2VkIHx8IHR5cGVvZiBwYXJzZWQgIT09ICJvYmplY3QiIHx8IEFycmF5LmlzQXJyYXkocGFyc2VkKSkgewog ICAgICByZXR1cm4geyBwcm9wczogbnVsbCwgcHJldmlldzogbnVsbCB9OwogICAgfQogICAgY29uc3Qgb2JqID0gcGFyc2VkOwogICAgY29uc3QgcHJldmll dyA9IG9iai4kcHJldmlldyAmJiB0eXBlb2Ygb2JqLiRwcmV2aWV3ID09PSAib2JqZWN0IiA/IG9iai4kcHJldmlldyA6IG51bGw7CiAgICBjb25zdCByZXN0 ID0ge307CiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXMob2JqKSkgewogICAgICBpZiAoa1swXSAhPT0gIiQiKSByZXN0W2tdID0gb2JqW2tdOwog ICAgfQogICAgcmV0dXJuIHsgcHJvcHM6IE9iamVjdC5rZXlzKHJlc3QpLmxlbmd0aCA/IHJlc3QgOiBudWxsLCBwcmV2aWV3IH07CiAgfQogIGZ1bmN0aW9u IGRjTmFtZUZyb21QYXRoKHBhdGhuYW1lKSB7CiAgICBsZXQgcCA9IHBhdGhuYW1lIHx8ICIiOwogICAgdHJ5IHsKICAgICAgcCA9IGRlY29kZVVSSUNvbXBv bmVudChwKTsKICAgIH0gY2F0Y2ggewogICAgfQogICAgY29uc3QgYmFzZSA9IHAuc3BsaXQoIi8iKS5wb3AoKSB8fCAiUm9vdCI7CiAgICByZXR1cm4gYmFz ZS5yZXBsYWNlKC9cLmRjXC5odG1sJC8sICIiKS5yZXBsYWNlKC9cLmh0bWw/JC8sICIiKSB8fCAiUm9vdCI7CiAgfQoKICAvLyBzcmMvYm9vdC50cwogIHZh ciBCQVNFX0NTUyA9IGAKICAgIC5zYy1wbGFjZWhvbGRlcntiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLGN1cnJlbnRDb2xvciA4JSx0cmFuc3BhcmVu dCk7CiAgICAgIGJvcmRlcjoxcHggc29saWQgY29sb3ItbWl4KGluIHNyZ2IsY3VycmVudENvbG9yIDUwJSx0cmFuc3BhcmVudCk7CiAgICAgIGJvcmRlci1y YWRpdXM6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpoaWRkZW59CiAgICBAa2V5ZnJhbWVzIHNjLXNoaW5lezAle2JhY2tncm91bmQtcG9z aXRpb246MTAwJSA1MCV9MTAwJXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAlIDUwJX19CiAgICBodG1sLnNjLWRjLXN0cmVhbWluZyAuc2MtcGxhY2Vob2xkZXIs CiAgICBodG1sLnNjLWRjLXN0cmVhbWluZyAuc2MtaW50ZXJwLnNjLW1pc3Npbmd7cG9zaXRpb246cmVsYXRpdmU7CiAgICAgIGJhY2tncm91bmQ6Y29sb3It bWl4KGluIHNyZ2IsY3VycmVudENvbG9yIDUlLHRyYW5zcGFyZW50KTsKICAgICAgYm9yZGVyLWNvbG9yOnRyYW5zcGFyZW50fQogICAgaHRtbC5zYy1kYy1z dHJlYW1pbmcgLnNjLXBsYWNlaG9sZGVyOjpiZWZvcmUsCiAgICBodG1sLnNjLWRjLXN0cmVhbWluZyAuc2MtaW50ZXJwLnNjLW1pc3Npbmc6OmJlZm9yZXtj b250ZW50OicnOwogICAgICBwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7CiAgICAgIGJhY2tncm91bmQ6bGluZWFyLWdy YWRpZW50KDkwZGVnLHJnYmEoMjE3LDExOSw4NywwKSAyNSUscmdiYSgyNDcsMjI1LDIxMSwuOTUpIDM3JSxyZ2JhKDIxNywxMTksODcsMCkgNjMlKTsKICAg ICAgYmFja2dyb3VuZC1zaXplOjQwMCUgMTAwJTthbmltYXRpb246c2Mtc2hpbmUgMS40cyBlYXNlIGluZmluaXRlfQogICAgaHRtbC5zYy1kYy1zdHJlYW1p bmcgLnNjLXBsYWNlaG9sZGVyOm50aC1jaGlsZChuKzkgb2YgLnNjLXBsYWNlaG9sZGVyKTo6YmVmb3JlLAogICAgaHRtbC5zYy1kYy1zdHJlYW1pbmcgLnNj LWludGVycC5zYy1taXNzaW5nOm50aC1jaGlsZChuKzkgb2YgLnNjLWludGVycC5zYy1taXNzaW5nKTo6YmVmb3Jle2FuaW1hdGlvbjpub25lOwogICAgICBi YWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLGN1cnJlbnRDb2xvciA4JSx0cmFuc3BhcmVudCl9CiAgICAuc2MtcGxhY2Vob2xkZXItZXJyb3J7cGFkZGlu Zzo0cHggOHB4O2ZvbnQ6MTFweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTsKICAgICAgY29sb3I6Y29sb3ItbWl4KGluIHNyZ2IsY3VycmVudENvbG9y IDcwJSx0cmFuc3BhcmVudCk7d29yZC1icmVhazpicmVhay13b3JkfQogICAgLnNjLWludGVycC5zYy1taXNzaW5ne2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dp ZHRoOjJlbTtoZWlnaHQ6MWVtO292ZXJmbG93OmhpZGRlbjsKICAgICAgdmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207YmFja2dyb3VuZDpyZ2JhKDI1NSwy NTUsMjU1LC4zKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjUpOwogICAgICBib3JkZXItcmFkaXVzOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7 Y29sb3I6dHJhbnNwYXJlbnQ7CiAgICAgIHVzZXItc2VsZWN0Om5vbmV9CiAgICAuc2MtaW50ZXJwLnNjLXVucmVzb2x2ZWR7Zm9udC1mYW1pbHk6dWktbW9u b3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6Ljg1ZW07CiAgICAgIGNvbG9yOmNvbG9yLW1peChpbiBzcmdiLGN1cnJlbnRDb2xvciA1MCUsdHJhbnNwYXJl bnQpOwogICAgICBiYWNrZ3JvdW5kOmNvbG9yLW1peChpbiBzcmdiLGN1cnJlbnRDb2xvciAxMCUsdHJhbnNwYXJlbnQpO2JvcmRlci1yYWRpdXM6M3B4Owog ICAgICBwYWRkaW5nOjAgM3B4fQogICAgLnNjLWhvc3Quc2MtaGFzLWVycm9ye3Bvc2l0aW9uOnJlbGF0aXZlfQogICAgLnNjLWxvZ2ljLWVycm9ye3Bvc2l0 aW9uOmFic29sdXRlO3RvcDo4cHg7bGVmdDo4cHg7ei1pbmRleDoyMTQ3NDgzNjQ3O21heC13aWR0aDo2MGNoOwogICAgICBwYWRkaW5nOjZweCAxMHB4O2Jh Y2tncm91bmQ6I2IwMDAyMDtjb2xvcjojZmZmO2ZvbnQ6MTJweC8xLjQgdWktbW9ub3NwYWNlLG1vbm9zcGFjZTsKICAgICAgYm9yZGVyLXJhZGl1czo0cHg7 d2hpdGUtc3BhY2U6cHJlLXdyYXA7cG9pbnRlci1ldmVudHM6bm9uZX0KICAgIC8qIE1pcnJvcnMgUFJJTlRfQkFTRUxJTkVfQ1NTIGluIGFwcHMvd2ViIGRl Y2stc3RhZ2UtZXhwb3J0LnRzIFx1MjAxNCBrZWVwIGJvdGgKICAgICAgIGluIHN5bmMgdW50aWwgZGMtcnVudGltZSByZWdhaW5zIGEgYnVpbGQgc3RlcC4g Ki8KICAgIEBtZWRpYSBwcmludCB7CiAgICAgIEBwYWdlIHsgbWFyZ2luOiAwLjVjbTsgfQogICAgICBmaWd1cmUsIHRhYmxlIHsgYnJlYWstaW5zaWRlOiBh dm9pZDsgfQogICAgICAjZGMtcm9vdCwgI2RjLXJvb3QgPiAuc2MtaG9zdCB7IGhlaWdodDogYXV0bzsgfQogICAgICAqLCAqOjpiZWZvcmUsICo6OmFmdGVy IHsKICAgICAgICBwcmludC1jb2xvci1hZGp1c3Q6IGV4YWN0OyAtd2Via2l0LXByaW50LWNvbG9yLWFkanVzdDogZXhhY3Q7CiAgICAgICAgYmFja2Ryb3At ZmlsdGVyOiBub25lICFpbXBvcnRhbnQ7IC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBub25lICFpbXBvcnRhbnQ7CiAgICAgICAgYW5pbWF0aW9uLWRlbGF5 OiAtOTlzICFpbXBvcnRhbnQ7IGFuaW1hdGlvbi1kdXJhdGlvbjogLjAwMXMgIWltcG9ydGFudDsKICAgICAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50 OiAxICFpbXBvcnRhbnQ7IGFuaW1hdGlvbi1maWxsLW1vZGU6IGJvdGggIWltcG9ydGFudDsKICAgICAgICBhbmltYXRpb24tcGxheS1zdGF0ZTogcnVubmlu ZyAhaW1wb3J0YW50OyB0cmFuc2l0aW9uLWR1cmF0aW9uOiAwcyAhaW1wb3J0YW50OwogICAgICB9CiAgICB9CiAgYDsKICB2YXIgRlVMTF9QQUdFX0NTUyA9 ICJodG1sLGJvZHl7aGVpZ2h0OjEwMCU7bWFyZ2luOjB9I2RjLXJvb3QsI2RjLXJvb3Q+LnNjLWhvc3R7aGVpZ2h0OjEwMCV9IjsKICBmdW5jdGlvbiByb290 TmFtZUZvckRvY3VtZW50KGRvYywgbG9jKSB7CiAgICBsZXQgYm9vdFBhdGggPSBsb2MucGF0aG5hbWUgfHwgIiI7CiAgICBpZiAoIS9cLmRjXC5odG1sPyQv aS50ZXN0KHNhZmVEZWNvZGUoYm9vdFBhdGgpKSkgewogICAgICB0cnkgewogICAgICAgIGJvb3RQYXRoID0gbmV3IFVSTChkb2MuYmFzZVVSSSB8fCAiLyIp LnBhdGhuYW1lOwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRjTmFtZUZyb21QYXRoKGJvb3RQYXRoKTsKICB9CiAgZnVuY3Rp b24gc2FmZURlY29kZShzKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHMpOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVy biBzOwogICAgfQogIH0KICBmdW5jdGlvbiBib290KHJ1bnRpbWUsIGRvYyA9IGRvY3VtZW50KSB7CiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZURjRG9jdW1l bnQoZG9jKTsKICAgIGlmICghcGFyc2VkKSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IFJlYWN0ID0gZ2V0UmVhY3QoKTsKICAgIGNvbnN0IHJvb3ROYW1lID0g cm9vdE5hbWVGb3JEb2N1bWVudChkb2MsIGxvY2F0aW9uKTsKICAgIHJ1bnRpbWUubWFya0ZldGNoZWQocm9vdE5hbWUpOwogICAgcnVudGltZS5zZXRSb290 TmFtZShyb290TmFtZSk7CiAgICBydW50aW1lLmFkb3B0UGFyc2VkKHJvb3ROYW1lLCBwYXJzZWQpOwogICAgaWYgKCF3aW5kb3cuX19yZXNvdXJjZXMpIHsK ICAgICAgZmV0Y2gobG9jYXRpb24uaHJlZikudGhlbigocmVzKSA9PiByZXMub2sgPyByZXMudGV4dCgpIDogIiIpLnRoZW4oKHQpID0+IHsKICAgICAgICBj b25zdCByYXcgPSB0ID8gcGFyc2VEY1RleHQodCkgOiBudWxsOwogICAgICAgIGlmIChyYXc/LnRlbXBsYXRlKSBydW50aW1lLnVwZGF0ZUh0bWwocm9vdE5h bWUsIHJhdy50ZW1wbGF0ZSk7CiAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBkYyA9IGRvYy5xdWVyeVNlbGVjdG9y KCJ4LWRjIik7CiAgICBjb25zdCBob3N0RWwgPSBkb2MuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBob3N0RWwuaWQgPSAiZGMtcm9vdCI7CiAgICBkYy5y ZXBsYWNlV2l0aChob3N0RWwpOwogICAgaWYgKCFwYXJzZWQucHJldmlldykgewogICAgICBjb25zdCBzID0gZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7 CiAgICAgIHMudGV4dENvbnRlbnQgPSBGVUxMX1BBR0VfQ1NTOwogICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGNvbnN0IFJvb3Qg PSBydW50aW1lLmdldERDKHJvb3ROYW1lKTsKICAgIGNvbnN0IGVudHJ5ID0gcnVudGltZS5yZWdpc3RyeS5nZXQocm9vdE5hbWUpOwogICAgZnVuY3Rpb24g U3RhbmRhbG9uZVJvb3QoKSB7CiAgICAgIGNvbnN0IFssIHNldFRpY2tdID0gUmVhY3QudXNlU3RhdGUoMCk7CiAgICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9 PiB7CiAgICAgICAgY29uc3Qgc3ViID0gKCkgPT4gc2V0VGljaygobikgPT4gbiArIDEpOwogICAgICAgIGVudHJ5LnN1YnMuYWRkKHN1Yik7CiAgICAgICAg cmV0dXJuICgpID0+IHsKICAgICAgICAgIGVudHJ5LnN1YnMuZGVsZXRlKHN1Yik7CiAgICAgICAgfTsKICAgICAgfSwgW10pOwogICAgICBjb25zdCBkZWZh dWx0cyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gewogICAgICAgIGNvbnN0IGQgPSB7fTsKICAgICAgICBmb3IgKGNvbnN0IGsgaW4gZW50cnkucHJvcHNNZXRh IHx8IHt9KSB7CiAgICAgICAgICBjb25zdCB2ID0gZW50cnkucHJvcHNNZXRhPy5ba10/LmRlZmF1bHQ7CiAgICAgICAgICBpZiAodiAhPT0gdm9pZCAwKSBk W2tdID0gdjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGQ7CiAgICAgIH0sIFtlbnRyeS5wcm9wc01ldGFdKTsKICAgICAgcmV0dXJuIGgoUm9vdCwgeyAu Li5kZWZhdWx0cywgLi4uZW50cnkucHJvcE92ZXJyaWRlcyB8fCB7fSB9KTsKICAgIH0KICAgIGNvbnN0IFJlYWN0RE9NID0gZ2V0UmVhY3RET00oKTsKICAg IGlmIChSZWFjdERPTS5jcmVhdGVSb290KQogICAgICBSZWFjdERPTS5jcmVhdGVSb290KGhvc3RFbCkucmVuZGVyKGgoU3RhbmRhbG9uZVJvb3QpKTsKICAg IGVsc2UgUmVhY3RET00ucmVuZGVyKGgoU3RhbmRhbG9uZVJvb3QpLCBob3N0RWwpOwogICAgcmV0dXJuIHJvb3ROYW1lOwogIH0KCiAgLy8gc3JjL2V4cHIu dHMKICB2YXIgSURFTlRfUkUgPSAvXltBLVphLXpfJF1bQS1aYS16MC05XyRdKi87CiAgdmFyIE5VTUJFUl9SRSA9IC9eLT9cZCsoXC5cZCspPyQvOwogIGZ1 bmN0aW9uIHJlc29sdmUodmFscywgc3JjKSB7CiAgICBjb25zdCBleHByID0gU3RyaW5nKHNyYykudHJpbSgpOwogICAgaWYgKCFleHByKSByZXR1cm4gdm9p ZCAwOwogICAgaWYgKGV4cHJbMF0gPT09ICIoIiAmJiBleHByW2V4cHIubGVuZ3RoIC0gMV0gPT09ICIpIiAmJiBwYXJlbnNXcmFwV2hvbGUoZXhwcikpIHsK ICAgICAgcmV0dXJuIHJlc29sdmUodmFscywgZXhwci5zbGljZSgxLCAtMSkpOwogICAgfQogICAgY29uc3QgZXEgPSBmaW5kVG9wTGV2ZWxFcXVhbGl0eShl eHByKTsKICAgIGlmIChlcSkgewogICAgICBjb25zdCBsdiA9IHJlc29sdmUodmFscywgZXhwci5zbGljZSgwLCBlcS5pbmRleCkpOwogICAgICBjb25zdCBy diA9IHJlc29sdmUodmFscywgZXhwci5zbGljZShlcS5pbmRleCArIGVxLm9wLmxlbmd0aCkpOwogICAgICBzd2l0Y2ggKGVxLm9wKSB7CiAgICAgICAgY2Fz ZSAiPT09IjoKICAgICAgICAgIHJldHVybiBsdiA9PT0gcnY7CiAgICAgICAgY2FzZSAiIT09IjoKICAgICAgICAgIHJldHVybiBsdiAhPT0gcnY7CiAgICAg ICAgY2FzZSAiPT0iOgogICAgICAgICAgcmV0dXJuIGx2ID09IHJ2OwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gbHYgIT0gcnY7CiAgICAg IH0KICAgIH0KICAgIGlmIChleHByWzBdID09PSAiISIpIHJldHVybiAhcmVzb2x2ZSh2YWxzLCBleHByLnNsaWNlKDEpKTsKICAgIGlmIChleHByID09PSAi dHJ1ZSIpIHJldHVybiB0cnVlOwogICAgaWYgKGV4cHIgPT09ICJmYWxzZSIpIHJldHVybiBmYWxzZTsKICAgIGlmIChleHByID09PSAibnVsbCIpIHJldHVy biBudWxsOwogICAgaWYgKGV4cHIgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gdm9pZCAwOwogICAgaWYgKE5VTUJFUl9SRS50ZXN0KGV4cHIpKSByZXR1cm4g TnVtYmVyKGV4cHIpOwogICAgaWYgKGV4cHIubGVuZ3RoID49IDIgJiYgKGV4cHJbMF0gPT09ICciJyB8fCBleHByWzBdID09PSAiJyIpICYmIGV4cHJbZXhw ci5sZW5ndGggLSAxXSA9PT0gZXhwclswXSkgewogICAgICByZXR1cm4gZXhwci5zbGljZSgxLCAtMSk7CiAgICB9CiAgICByZXR1cm4gcmVzb2x2ZVBhdGgo dmFscywgZXhwcik7CiAgfQogIGZ1bmN0aW9uIHBhcmVuc1dyYXBXaG9sZShleHByKSB7CiAgICBsZXQgZGVwdGggPSAwOwogICAgZm9yIChsZXQgaSA9IDA7 IGkgPCBleHByLmxlbmd0aCAtIDE7IGkrKykgewogICAgICBpZiAoZXhwcltpXSA9PT0gIigiKSBkZXB0aCsrOwogICAgICBlbHNlIGlmIChleHByW2ldID09 PSAiKSIpIHsKICAgICAgICBkZXB0aC0tOwogICAgICAgIGlmIChkZXB0aCA9PT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4g dHJ1ZTsKICB9CiAgZnVuY3Rpb24gZmluZFRvcExldmVsRXF1YWxpdHkoZXhwcikgewogICAgbGV0IGRlcHRoID0gMDsKICAgIGZvciAobGV0IGkgPSAwOyBp IDwgZXhwci5sZW5ndGg7IGkrKykgewogICAgICBjb25zdCBjID0gZXhwcltpXTsKICAgICAgaWYgKGMgPT09ICJbIiB8fCBjID09PSAiKCIpIGRlcHRoKys7 CiAgICAgIGVsc2UgaWYgKGMgPT09ICJdIiB8fCBjID09PSAiKSIpIGRlcHRoLS07CiAgICAgIGVsc2UgaWYgKGRlcHRoID09PSAwICYmIChjID09PSAiPSIg fHwgYyA9PT0gIiEiKSAmJiBleHByW2kgKyAxXSA9PT0gIj0iKSB7CiAgICAgICAgaWYgKGkgPiAwICYmIChleHByW2kgLSAxXSA9PT0gIj0iIHx8IGV4cHJb aSAtIDFdID09PSAiISIpKSBjb250aW51ZTsKICAgICAgICBpZiAoIWV4cHIuc2xpY2UoMCwgaSkudHJpbSgpKSBjb250aW51ZTsKICAgICAgICBjb25zdCBv cCA9IGV4cHJbaSArIDJdID09PSAiPSIgPyBjICsgIj09IiA6IGMgKyAiPSI7CiAgICAgICAgcmV0dXJuIHsgaW5kZXg6IGksIG9wIH07CiAgICAgIH0KICAg IH0KICAgIHJldHVybiBudWxsOwogIH0KICBmdW5jdGlvbiByZXNvbHZlUGF0aCh2YWxzLCBleHByKSB7CiAgICBjb25zdCBoZWFkID0gZXhwci5tYXRjaChJ REVOVF9SRSk7CiAgICBpZiAoIWhlYWQpIHJldHVybiB2b2lkIDA7CiAgICBsZXQgY3VyID0gdmFscyA9PSBudWxsID8gdm9pZCAwIDogdmFsc1toZWFkWzBd XTsKICAgIGxldCBpID0gaGVhZFswXS5sZW5ndGg7CiAgICB3aGlsZSAoaSA8IGV4cHIubGVuZ3RoKSB7CiAgICAgIGlmIChleHByW2ldID09PSAiLiIpIHsK ICAgICAgICBjb25zdCBtID0gZXhwci5zbGljZShpICsgMSkubWF0Y2goSURFTlRfUkUpIHx8IGV4cHIuc2xpY2UoaSArIDEpLm1hdGNoKC9eXGQrLyk7CiAg ICAgICAgaWYgKCFtKSByZXR1cm4gdm9pZCAwOwogICAgICAgIGN1ciA9IGN1ciA9PSBudWxsID8gdm9pZCAwIDogY3VyW21bMF1dOwogICAgICAgIGkgKz0g MSArIG1bMF0ubGVuZ3RoOwogICAgICB9IGVsc2UgaWYgKGV4cHJbaV0gPT09ICJbIikgewogICAgICAgIGxldCBkZXB0aCA9IDE7CiAgICAgICAgbGV0IGog PSBpICsgMTsKICAgICAgICB3aGlsZSAoaiA8IGV4cHIubGVuZ3RoICYmIGRlcHRoID4gMCkgewogICAgICAgICAgaWYgKGV4cHJbal0gPT09ICJbIikgZGVw dGgrKzsKICAgICAgICAgIGVsc2UgaWYgKGV4cHJbal0gPT09ICJdIikgewogICAgICAgICAgICBkZXB0aC0tOwogICAgICAgICAgICBpZiAoZGVwdGggPT09 IDApIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBpZiAoZGVwdGggIT09IDApIHJldHVybiB2b2lkIDA7CiAg ICAgICAgY29uc3Qga2V5ID0gcmVzb2x2ZSh2YWxzLCBleHByLnNsaWNlKGkgKyAxLCBqKSk7CiAgICAgICAgY3VyID0gY3VyID09IG51bGwgPyB2b2lkIDAg OiBjdXJba2V5XTsKICAgICAgICBpID0gaiArIDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfQogICAgfQogICAgcmV0 dXJuIGN1cjsKICB9CgogIC8vIHNyYy9lbmNvZGUudHMKICB2YXIgQ0FNRUxfQVRUUiA9ICJzYy1jYW1lbC0iOwogIHZhciBJTkxJTkVfVEVYVF9UQUdTID0g bmV3IFNldCgKICAgICJhIGFiYnIgYiBiZGkgYmRvIGJyIGNpdGUgY29kZSBkZWwgZGZuIGVtIGkgaW5zIGtiZCBtYXJrIHEgcyBzYW1wIHNtYWxsIHNwYW4g c3RyaWtlIHN0cm9uZyBzdWIgc3VwIHUgdmFyIHdiciIuc3BsaXQoCiAgICAgICIgIgogICAgKQogICk7CiAgdmFyIFJBV19XUkFQID0gewogICAgc2VsZWN0 OiAic2MtcmF3LXNlbGVjdCIsCiAgICB0YWJsZTogInNjLXJhdy10YWJsZSIsCiAgICB0Ym9keTogInNjLXJhdy10Ym9keSIsCiAgICB0aGVhZDogInNjLXJh dy10aGVhZCIsCiAgICB0Zm9vdDogInNjLXJhdy10Zm9vdCIsCiAgICB0cjogInNjLXJhdy10ciIsCiAgICB0ZDogInNjLXJhdy10ZCIsCiAgICB0aDogInNj LXJhdy10aCIsCiAgICBjYXB0aW9uOiAic2MtcmF3LWNhcHRpb24iCiAgfTsKICB2YXIgUkFXX1VOV1JBUCA9IE9iamVjdC5mcm9tRW50cmllcygKICAgIE9i amVjdC5lbnRyaWVzKFJBV19XUkFQKS5tYXAoKFtrLCB2XSkgPT4gW3YsIGtdKQogICk7CiAgdmFyIEVWRU5UX01BUCA9IHsKICAgIG9uY2xpY2s6ICJvbkNs aWNrIiwKICAgIG9uY2hhbmdlOiAib25DaGFuZ2UiLAogICAgb25pbnB1dDogIm9uSW5wdXQiLAogICAgb25zdWJtaXQ6ICJvblN1Ym1pdCIsCiAgICBvbmtl eWRvd246ICJvbktleURvd24iLAogICAgb25rZXl1cDogIm9uS2V5VXAiLAogICAgb25rZXlwcmVzczogIm9uS2V5UHJlc3MiLAogICAgb25tb3VzZWRvd246 ICJvbk1vdXNlRG93biIsCiAgICBvbm1vdXNldXA6ICJvbk1vdXNlVXAiLAogICAgb25tb3VzZWVudGVyOiAib25Nb3VzZUVudGVyIiwKICAgIG9ubW91c2Vs ZWF2ZTogIm9uTW91c2VMZWF2ZSIsCiAgICBvbmZvY3VzOiAib25Gb2N1cyIsCiAgICBvbmJsdXI6ICJvbkJsdXIiLAogICAgb25kb3VibGVjbGljazogIm9u RG91YmxlQ2xpY2siLAogICAgb25jb250ZXh0bWVudTogIm9uQ29udGV4dE1lbnUiLAogICAgb25tb3VzZW1vdmU6ICJvbk1vdXNlTW92ZSIsCiAgICBvbm1v dXNlb3ZlcjogIm9uTW91c2VPdmVyIiwKICAgIG9ubW91c2VvdXQ6ICJvbk1vdXNlT3V0IiwKICAgIG9ucG9pbnRlcmRvd246ICJvblBvaW50ZXJEb3duIiwK ICAgIG9ucG9pbnRlcnVwOiAib25Qb2ludGVyVXAiLAogICAgb25wb2ludGVybW92ZTogIm9uUG9pbnRlck1vdmUiLAogICAgb25wb2ludGVyZW50ZXI6ICJv blBvaW50ZXJFbnRlciIsCiAgICBvbnBvaW50ZXJsZWF2ZTogIm9uUG9pbnRlckxlYXZlIiwKICAgIG9ucG9pbnRlcmNhbmNlbDogIm9uUG9pbnRlckNhbmNl bCIsCiAgICBvbnBvaW50ZXJvdmVyOiAib25Qb2ludGVyT3ZlciIsCiAgICBvbnBvaW50ZXJvdXQ6ICJvblBvaW50ZXJPdXQiLAogICAgb25nb3Rwb2ludGVy Y2FwdHVyZTogIm9uR290UG9pbnRlckNhcHR1cmUiLAogICAgb25sb3N0cG9pbnRlcmNhcHR1cmU6ICJvbkxvc3RQb2ludGVyQ2FwdHVyZSIsCiAgICBvbnRv dWNoc3RhcnQ6ICJvblRvdWNoU3RhcnQiLAogICAgb250b3VjaGVuZDogIm9uVG91Y2hFbmQiLAogICAgb250b3VjaG1vdmU6ICJvblRvdWNoTW92ZSIsCiAg ICBvbnRvdWNoY2FuY2VsOiAib25Ub3VjaENhbmNlbCIsCiAgICBvbmRyYWdzdGFydDogIm9uRHJhZ1N0YXJ0IiwKICAgIG9uZHJhZ2VuZDogIm9uRHJhZ0Vu ZCIsCiAgICBvbmRyYWdlbnRlcjogIm9uRHJhZ0VudGVyIiwKICAgIG9uZHJhZ2xlYXZlOiAib25EcmFnTGVhdmUiLAogICAgb25kcmFnb3ZlcjogIm9uRHJh Z092ZXIiLAogICAgb25hbmltYXRpb25zdGFydDogIm9uQW5pbWF0aW9uU3RhcnQiLAogICAgb25hbmltYXRpb25lbmQ6ICJvbkFuaW1hdGlvbkVuZCIsCiAg ICBvbmFuaW1hdGlvbml0ZXJhdGlvbjogIm9uQW5pbWF0aW9uSXRlcmF0aW9uIiwKICAgIG9udHJhbnNpdGlvbmVuZDogIm9uVHJhbnNpdGlvbkVuZCIKICB9 OwogIHZhciBBVFRSUyA9IGAoPzpbXj4iJ118IlteIl0qInwnW14nXSonKSpgOwogIHZhciBJTVBPUlRfU0VMRl9DTE9TRV9SRSA9IG5ldyBSZWdFeHAoCiAg ICAiPCh4LWltcG9ydHxkYy1pbXBvcnQpKCIgKyBBVFRSUyArICIpLz4iLAogICAgImdpIgogICk7CiAgdmFyIENBTUVMX0FUVFJfUkUgPSAvKFxzKShbYS16 XStbQS1aXVtBLVphLXowLTldKikoXHMqPSkvZzsKICBmdW5jdGlvbiBlbmNvZGVDYW1lbEF0dHJzKGh0bWwpIHsKICAgIHJldHVybiBodG1sLnJlcGxhY2Uo CiAgICAgIENBTUVMX0FUVFJfUkUsCiAgICAgIChfLCBzcCwgbmFtZSwgZXEpID0+IHNwICsgQ0FNRUxfQVRUUiArIG5hbWUucmVwbGFjZSgvW0EtWl0vZywg KGMpID0+ICItIiArIGMudG9Mb3dlckNhc2UoKSkgKyBlcQogICAgKTsKICB9CiAgZnVuY3Rpb24gZW5jb2RlQ2FzZShodG1sKSB7CiAgICBodG1sID0gaHRt bC5yZXBsYWNlKAogICAgICBJTVBPUlRfU0VMRl9DTE9TRV9SRSwKICAgICAgKF8sIHQsIGEpID0+ICI8IiArIHQgKyBhICsgIj48LyIgKyB0ICsgIj4iCiAg ICApOwogICAgaHRtbCA9IGh0bWwucmVwbGFjZSgvPGhlbG1ldChcc3w+KS9naSwgIjxzYy1oZWxtZXQkMSIpOwogICAgaHRtbCA9IGh0bWwucmVwbGFjZSgv PFwvaGVsbWV0XHMqPi9naSwgIjwvc2MtaGVsbWV0PiIpOwogICAgaHRtbCA9IGVuY29kZUNhbWVsQXR0cnMoaHRtbCk7CiAgICBmb3IgKGNvbnN0IFtyZWFs LCBhbGlhc10gb2YgT2JqZWN0LmVudHJpZXMoUkFXX1dSQVApKSB7CiAgICAgIGh0bWwgPSBodG1sLnJlcGxhY2UoCiAgICAgICAgbmV3IFJlZ0V4cCgiKDwv PykiICsgcmVhbCArICIoPz1bXFxzPl0pIiwgImdpIiksCiAgICAgICAgIiQxIiArIGFsaWFzCiAgICAgICk7CiAgICB9CiAgICByZXR1cm4gaHRtbDsKICB9 CiAgZnVuY3Rpb24ga2ViYWJUb0NhbWVsKHMpIHsKICAgIHJldHVybiBzLnJlcGxhY2UoLy0oW2Etel0pL2csIChfLCBjKSA9PiBjLnRvVXBwZXJDYXNlKCkp OwogIH0KICBmdW5jdGlvbiBjc3NUb09iaihjc3MpIHsKICAgIGNvbnN0IG8gPSB7fTsKICAgIGZvciAoY29uc3QgZGVjbCBvZiBjc3Muc3BsaXQoIjsiKSkg ewogICAgICBjb25zdCBpID0gZGVjbC5pbmRleE9mKCI6Iik7CiAgICAgIGlmIChpIDwgMCkgY29udGludWU7CiAgICAgIGNvbnN0IHByb3AgPSBkZWNsLnNs aWNlKDAsIGkpLnRyaW0oKTsKICAgICAgb1twcm9wLnN0YXJ0c1dpdGgoIi0tIikgPyBwcm9wIDoga2ViYWJUb0NhbWVsKHByb3ApXSA9IGRlY2wuc2xpY2Uo aSArIDEpLnRyaW0oKTsKICAgIH0KICAgIHJldHVybiBvOwogIH0KICBmdW5jdGlvbiBjb21waWxlQXR0cihyYXcpIHsKICAgIGNvbnN0IHdob2xlID0gcmF3 Lm1hdGNoKC9eXHMqXHtceyhbXHNcU10rPylcfVx9XHMqJC8pOwogICAgaWYgKHdob2xlKSB7CiAgICAgIGNvbnN0IHBhdGggPSB3aG9sZVsxXTsKICAgICAg cmV0dXJuICh2YWxzKSA9PiByZXNvbHZlKHZhbHMsIHBhdGgpOwogICAgfQogICAgaWYgKHJhdy5pbmNsdWRlcygie3siKSkgewogICAgICBjb25zdCBwYXJ0 cyA9IHJhdy5zcGxpdCgvXHtceyhbXHNcU10rPylcfVx9L2cpOwogICAgICByZXR1cm4gKHZhbHMpID0+IHBhcnRzLm1hcCgocywgaSkgPT4gaSAmIDEgPyBy ZXNvbHZlKHZhbHMsIHMpID8/ICIiIDogcykuam9pbigiIik7CiAgICB9CiAgICByZXR1cm4gKCkgPT4gcmF3OwogIH0KCiAgLy8gc3JjL2NvbXBpbGUudHMK ICBmdW5jdGlvbiBjb2xsZWN0UHJvcHMobm9kZSwga2luZCwgaG9zdCkgewogICAgY29uc3QgcHJvcEdldHRlcnMgPSBbXTsKICAgIGNvbnN0IHBzZXVkb0Ns YXNzZXMgPSBbXTsKICAgIGxldCBoaW50U2l6ZSA9IG51bGw7CiAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiBbLi4ubm9kZS5hdHRyaWJ1dGVz XSkgewogICAgICBpZiAobmFtZSA9PT0gInNjLW5hbWUiIHx8IG5hbWUgPT09ICJkYXRhLWRjLXRwbCIpIGNvbnRpbnVlOwogICAgICBsZXQga2V5ID0gbmFt ZTsKICAgICAgaWYgKGtleS5zdGFydHNXaXRoKENBTUVMX0FUVFIpKQogICAgICAgIGtleSA9IGtlYmFiVG9DYW1lbChrZXkuc2xpY2UoQ0FNRUxfQVRUUi5s ZW5ndGgpKTsKICAgICAgaWYgKGtleSA9PT0gImhpbnQtc2l6ZSIpIHsKICAgICAgICBoaW50U2l6ZSA9IHZhbHVlOwogICAgICAgIGNvbnRpbnVlOwogICAg ICB9CiAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgic3R5bGUtIikpIHsKICAgICAgICBwc2V1ZG9DbGFzc2VzLnB1c2goaG9zdC5wc2V1ZG9DbGFzcyhrZXku c2xpY2UoNiksIHZhbHVlKSk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGtpbmQgIT09ICJkb20iKSB7CiAgICAgICAgaWYgKGtleS5p bmNsdWRlcygiLSIpICYmICEoa2luZCA9PT0gIngtaW1wb3J0IiAmJiAoa2V5LnN0YXJ0c1dpdGgoImFyaWEtIikgfHwga2V5LnN0YXJ0c1dpdGgoImRhdGEt IikpKSkKICAgICAgICAgIGtleSA9IGtlYmFiVG9DYW1lbChrZXkpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChrZXkgPT09ICJjbGFzcyIpIGtleSA9 ICJjbGFzc05hbWUiOwogICAgICAgIGVsc2UgaWYgKGtleSA9PT0gImZvciIpIGtleSA9ICJodG1sRm9yIjsKICAgICAgICBlbHNlIGlmIChrZXkuc3RhcnRz V2l0aCgib24iKSkKICAgICAgICAgIGtleSA9IEVWRU5UX01BUFtrZXldIHx8ICJvbiIgKyBrZXlbMl0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgzKTsK ICAgICAgfQogICAgICBwcm9wR2V0dGVycy5wdXNoKFtrZXksIGNvbXBpbGVBdHRyKHZhbHVlKV0pOwogICAgfQogICAgcmV0dXJuIHsgcHJvcEdldHRlcnMs IHBzZXVkb0NsYXNzZXMsIGhpbnRTaXplIH07CiAgfQogIHZhciBIT1NUX1NUWUxFX1BST1BTID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoWwogICAgInBv c2l0aW9uIiwKICAgICJsZWZ0IiwKICAgICJyaWdodCIsCiAgICAidG9wIiwKICAgICJib3R0b20iLAogICAgImluc2V0IiwKICAgICJ3aWR0aCIsCiAgICAi aGVpZ2h0IiwKICAgICJ6LWluZGV4IiwKICAgICJ0cmFuc2Zvcm0iCiAgXSk7CiAgZnVuY3Rpb24gaG9zdFBvc2l0aW9uU3R5bGUoc3R5bGUpIHsKICAgIGNv bnN0IGFsbCA9IHR5cGVvZiBzdHlsZSA9PT0gInN0cmluZyIgPyBjc3NUb09iaihzdHlsZSkgOiBzdHlsZSAhPSBudWxsICYmIHR5cGVvZiBzdHlsZSA9PT0g Im9iamVjdCIgPyBzdHlsZSA6IG51bGw7CiAgICBpZiAoIWFsbCkgcmV0dXJuIHZvaWQgMDsKICAgIGNvbnN0IG91dCA9IHt9OwogICAgZm9yIChjb25zdCBb aywgdl0gb2YgT2JqZWN0LmVudHJpZXMoYWxsKSkgewogICAgICBjb25zdCBrZWJhYiA9IGsucmVwbGFjZSgvW0EtWl0vZywgKGMpID0+ICItIiArIGMudG9M b3dlckNhc2UoKSk7CiAgICAgIGlmIChIT1NUX1NUWUxFX1BST1BTLmhhcyhrZWJhYikpIG91dFtrXSA9IHY7CiAgICB9CiAgICByZXR1cm4gT2JqZWN0Lmtl eXMob3V0KS5sZW5ndGggPyBvdXQgOiB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIGNvbXBpbGVUZW1wbGF0ZShodG1sLCBob3N0KSB7CiAgICBjb25zdCB0cGwg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZW1wbGF0ZSIpOwogICAgLy8hIG5vc2VtZ3JlcDogZGlyZWN0LWlubmVyLWh0bWwtYXNzaWdubWVudAogICAg dHBsLmlubmVySFRNTCA9IGVuY29kZUNhc2UoaHRtbCk7CiAgICBsZXQgdHBsTiA9IDA7CiAgICAoZnVuY3Rpb24gc3RhbXAobm9kZSkgewogICAgICBpZiAo bm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBub2RlLnNldEF0dHJpYnV0ZSgiZGF0YS1kYy10cGwiLCBTdHJpbmcodHBs TisrKSk7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBjIG9mIG5vZGUuY2hpbGROb2Rlcykgc3RhbXAoYyk7CiAgICB9KSh0cGwuY29udGVudCk7CiAgICBj b25zdCBidWlsZGVycyA9IHdhbGtDaGlsZHJlbih0cGwuY29udGVudCwgaG9zdCk7CiAgICBjb25zdCByZW5kZXIgPSAoKHZhbHMsIGN0eCkgPT4gYnVpbGRl cnMubWFwKChiLCBpKSA9PiBiKHZhbHMgfHwge30sIGN0eCwgaSkpKTsKICAgIHJlbmRlci5fX2Fubm90YXRlZCA9IHRwbC5pbm5lckhUTUw7CiAgICByZXR1 cm4gcmVuZGVyOwogIH0KICBmdW5jdGlvbiB3YWxrQ2hpbGRyZW4obm9kZSwgaG9zdCkgewogICAgcmV0dXJuIFsuLi5ub2RlLmNoaWxkTm9kZXNdLm1hcCgo YykgPT4gd2FsayhjLCBob3N0KSkuZmlsdGVyKChiKSA9PiBiICE9IG51bGwpOwogIH0KICB2YXIgU0xJREVfSURfVkFMVUVfUkUgPSAvXlswLTlhLWZdezh9 JC87CiAgdmFyIERFQ0tfQ09OVFJPTF9GTE9XX1JFID0gL14oc2MtaWZ8c2MtZm9yfHNjLWVsc2V8ZGMtaW1wb3J0fHgtaW1wb3J0KSQvOwogIHZhciBERUNL X0FVWF9SRSA9IC9eKHRlbXBsYXRlfHNjcmlwdHxzdHlsZXxzYy1oZWxtZXR8aGVsbWV0KSQvOwogIGZ1bmN0aW9uIGlzRGVja01vdW50VGFnKGVsKSB7CiAg ICBpZiAoZWwubG9jYWxOYW1lID09PSAiZGVjay1zdGFnZSIpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGVsLmxvY2FsTmFtZSA9PT0gIngtaW1wb3J0IiAm JiAoZWwuZ2V0QXR0cmlidXRlKCJjb21wb25lbnQtZnJvbS1nbG9iYWwtc2NvcGUiKSB8fCAiIikgPT09ICJkZWNrLXN0YWdlIjsKICB9CiAgZnVuY3Rpb24g d2Fsa0RlY2tDaGlsZHJlbihlbCwgaG9zdCkgewogICAgY29uc3QgcGFpcnMgPSBbLi4uZWwuY2hpbGROb2Rlc10ubWFwKChjKSA9PiAoeyBjLCBiOiB3YWxr KGMsIGhvc3QpIH0pKS5maWx0ZXIoKHApID0+IHAuYiAhPT0gbnVsbCk7CiAgICBjb25zdCBraWRzID0gcGFpcnMubWFwKChwKSA9PiBwLmIpOwogICAgY29u c3Qgc2VlbiA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICBjb25zdCB3c1NlZW4gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgY29u c3Qga2V5cyA9IFtdOwogICAgY29uc3QgbmV4dFNsaWRlSWQgPSBuZXcgQXJyYXkocGFpcnMubGVuZ3RoKTsKICAgIHsKICAgICAgbGV0IHVwY29taW5nID0g bnVsbDsKICAgICAgZm9yIChsZXQgaiA9IHBhaXJzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7CiAgICAgICAgY29uc3QgbiA9IHBhaXJzW2pdLmM7CiAg ICAgICAgaWYgKG4ubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CiAgICAgICAgICBjb25zdCB0ID0gbi5sb2NhbE5hbWU7CiAgICAgICAgICB1 cGNvbWluZyA9ICFERUNLX0FVWF9SRS50ZXN0KHQpICYmICFERUNLX0NPTlRST0xfRkxPV19SRS50ZXN0KHQpID8gbi5nZXRBdHRyaWJ1dGUoImRhdGEtb20t c2xpZGUtaWQiKSA6IG51bGw7CiAgICAgICAgfQogICAgICAgIG5leHRTbGlkZUlkW2pdID0gdXBjb21pbmc7CiAgICAgIH0KICAgIH0KICAgIGZvciAobGV0 IGogPSAwOyBqIDwgcGFpcnMubGVuZ3RoOyBqKyspIHsKICAgICAgY29uc3QgeyBjIH0gPSBwYWlyc1tqXTsKICAgICAgaWYgKGMubm9kZVR5cGUgPT09IE5v ZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgaWYgKChjLm5vZGVWYWx1ZSA/PyAiIikudHJpbSgpID09PSAiIikgewogICAgICAgICAgY29uc3QgYmFzZSA9IG5l eHRTbGlkZUlkW2pdID8gIm9taWQtd3M6IiArIG5leHRTbGlkZUlkW2pdIDogIm9taWQtd3M6YXV4IjsKICAgICAgICAgIGNvbnN0IG4gPSB3c1NlZW4uZ2V0 KGJhc2UpID8/IDA7CiAgICAgICAgICB3c1NlZW4uc2V0KGJhc2UsIG4gKyAxKTsKICAgICAgICAgIGtleXMucHVzaChuID09PSAwID8gYmFzZSA6IGJhc2Ug KyAiOiIgKyBuKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4geyBraWRzLCBrZXlzOiBudWxsIH07CiAgICAgIH0KICAg ICAgaWYgKGMubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7CiAgICAgICAga2V5cy5wdXNoKGopOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9 CiAgICAgIGNvbnN0IGNoaWxkID0gYzsKICAgICAgY29uc3QgdGFnID0gY2hpbGQubG9jYWxOYW1lOwogICAgICBpZiAoREVDS19BVVhfUkUudGVzdCh0YWcp KSB7CiAgICAgICAga2V5cy5wdXNoKGopOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChERUNLX0NPTlRST0xfRkxPV19SRS50ZXN0KHRh ZykpIHJldHVybiB7IGtpZHMsIGtleXM6IG51bGwgfTsKICAgICAgY29uc3QgdiA9IGNoaWxkLmdldEF0dHJpYnV0ZSgiZGF0YS1vbS1zbGlkZS1pZCIpOwog ICAgICBpZiAoIXYgfHwgIVNMSURFX0lEX1ZBTFVFX1JFLnRlc3QodikgfHwgc2Vlbi5oYXModikpIHsKICAgICAgICByZXR1cm4geyBraWRzLCBrZXlzOiBu dWxsIH07CiAgICAgIH0KICAgICAgc2Vlbi5hZGQodik7CiAgICAgIGtleXMucHVzaCgib21pZDoiICsgdik7CiAgICB9CiAgICByZXR1cm4geyBraWRzLCBr ZXlzIH07CiAgfQogIGZ1bmN0aW9uIHJlbmRlckRlY2tLaWRzKGtpZHMsIGtpZEtleXMsIHZhbHMsIGN0eCkgewogICAgcmV0dXJuIGtpZHMubWFwKChiLCBq KSA9PiB7CiAgICAgIGNvbnN0IGsgPSBraWRLZXlzID8ga2lkS2V5c1tqXSA6IGo7CiAgICAgIGNvbnN0IG91dCA9IGIodmFscywgY3R4LCBrKTsKICAgICAg cmV0dXJuIGtpZEtleXMgIT0gbnVsbCAmJiB0eXBlb2Ygb3V0ID09PSAic3RyaW5nIiA/IGgoZ2V0UmVhY3QoKS5GcmFnbWVudCwgeyBrZXk6IGsgfSwgb3V0 KSA6IG91dDsKICAgIH0pOwogIH0KICBmdW5jdGlvbiB3YWxrKG5vZGUsIGhvc3QpIHsKICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9E RSkgcmV0dXJuIHdhbGtUZXh0KG5vZGUpOwogICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSByZXR1cm4gbnVsbDsKICAgIGNv bnN0IGVsID0gbm9kZTsKICAgIGNvbnN0IHRhZyA9IGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgIGlmICh0YWcgPT09ICJzYy1mb3IiKSByZXR1cm4g d2Fsa0ZvcihlbCwgaG9zdCk7CiAgICBpZiAodGFnID09PSAic2MtaWYiKSByZXR1cm4gd2Fsa0lmKGVsLCBob3N0KTsKICAgIGlmICh0YWcgPT09ICJ4LWlt cG9ydCIpIHJldHVybiB3YWxrWEltcG9ydChlbCwgaG9zdCk7CiAgICBpZiAodGFnID09PSAic2MtaGVsbWV0IikgcmV0dXJuIGhvc3QuaGVsbWV0KGVsKTsK ICAgIGlmICh0YWcgPT09ICJkYy1pbXBvcnQiKSByZXR1cm4gd2Fsa0NvbXBvbmVudChlbCwgaG9zdCk7CiAgICByZXR1cm4gd2Fsa0VsZW1lbnQoZWwsIGhv c3QpOwogIH0KICB2YXIgd2FybmVkSG9sZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogIGZ1bmN0aW9uIHdhcm5VbnJlc29sdmVkKGN0eCwgd2hh dCkgewogICAgY29uc3Qga2V5ID0gKGN0eD8uX19uYW1lIHx8ICI/IikgKyAiXDAiICsgd2hhdDsKICAgIGlmICh3YXJuZWRIb2xlcy5oYXMoa2V5KSkgcmV0 dXJuOwogICAgd2FybmVkSG9sZXMuYWRkKGtleSk7CiAgICBjb25zb2xlLndhcm4oIltkYy1ydW50aW1lXSAiICsgKGN0eD8uX19uYW1lIHx8ICJ0ZW1wbGF0 ZSIpICsgIjogIiArIHdoYXQpOwogIH0KICBmdW5jdGlvbiB3YWxrVGV4dChub2RlKSB7CiAgICBjb25zdCB0eHQgPSBub2RlLm5vZGVWYWx1ZSA/PyAiIjsK ICAgIGlmICghdHh0LmluY2x1ZGVzKCJ7eyIpKSB7CiAgICAgIGlmICghdHh0LnRyaW0oKSAmJiAhdHh0LmluY2x1ZGVzKCIgIikpIHJldHVybiBudWxsOwog ICAgICByZXR1cm4gKCkgPT4gdHh0OwogICAgfQogICAgY29uc3QgcGFydHMgPSB0eHQuc3BsaXQoL1x7XHsoW1xzXFNdKz8pXH1cfS9nKTsKICAgIHJldHVy biAodmFscywgY3R4LCBrZXkpID0+IGgoCiAgICAgIGdldFJlYWN0KCkuRnJhZ21lbnQsCiAgICAgIHsga2V5IH0sCiAgICAgIC4uLnBhcnRzLm1hcCgocCwg aSkgPT4gewogICAgICAgIGlmICghKGkgJiAxKSkgcmV0dXJuIHA7CiAgICAgICAgY29uc3QgdiA9IHJlc29sdmUodmFscywgcCk7CiAgICAgICAgaWYgKHYg PT09IHZvaWQgMCkgewogICAgICAgICAgaWYgKCFjdHg/Ll9fc3RyZWFtaW5nTm93KSB7CiAgICAgICAgICAgIGlmIChkb2N1bWVudC5ib2R5Py5oYXNBdHRy aWJ1dGUoImRhdGEtZGMtZWRpdG9yLW9uIikpIHsKICAgICAgICAgICAgICByZXR1cm4gaCgKICAgICAgICAgICAgICAgICJzcGFuIiwKICAgICAgICAgICAg ICAgIHsga2V5OiBpLCBjbGFzc05hbWU6ICJzYy1pbnRlcnAgc2MtdW5yZXNvbHZlZCIgfSwKICAgICAgICAgICAgICAgICJ7eyAiICsgcC50cmltKCkgKyAi IH19IgogICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2FyblVucmVzb2x2ZWQoCiAgICAgICAgICAgICAgY3R4LAogICAgICAg ICAgICAgICJ7eyAiICsgcC50cmltKCkgKyAiIH19IG5ldmVyIHJlc29sdmVkIFx1MjAxNCByZW5kZXJlZCBhcyBlbXB0eSIKICAgICAgICAgICAgKTsKICAg ICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaCgKICAgICAgICAgICAgInNwYW4iLAogICAgICAgICAgICB7IGtl eTogaSwgY2xhc3NOYW1lOiAic2MtaW50ZXJwIHNjLW1pc3NpbmciIH0sCiAgICAgICAgICAgIHAudHJpbSgpCiAgICAgICAgICApOwogICAgICAgIH0KICAg ICAgICBpZiAoZ2V0UmVhY3QoKS5pc1ZhbGlkRWxlbWVudCh2KSB8fCBBcnJheS5pc0FycmF5KHYpKSB7CiAgICAgICAgICByZXR1cm4gaChnZXRSZWFjdCgp LkZyYWdtZW50LCB7IGtleTogaSB9LCB2KTsKICAgICAgICB9CiAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdHlwZW9mIHYgPT09ICJib29sZWFuIikgcmV0 dXJuIG51bGw7CiAgICAgICAgcmV0dXJuIGgoInNwYW4iLCB7IGtleTogaSwgY2xhc3NOYW1lOiAic2MtaW50ZXJwIiB9LCBTdHJpbmcodikpOwogICAgICB9 KQogICAgKTsKICB9CiAgZnVuY3Rpb24gd2Fsa0ZvcihlbCwgaG9zdCkgewogICAgY29uc3QgbGlzdEdldCA9IGNvbXBpbGVBdHRyKGVsLmdldEF0dHJpYnV0 ZSgibGlzdCIpIHx8ICIiKTsKICAgIGNvbnN0IGFzTmFtZSA9IGVsLmdldEF0dHJpYnV0ZSgiYXMiKSB8fCAiaXRlbSI7CiAgICBjb25zdCBoaW50TiA9IHBh cnNlSW50KGVsLmdldEF0dHJpYnV0ZSgiaGludC1wbGFjZWhvbGRlci1jb3VudCIpIHx8ICIwIiwgMTApOwogICAgY29uc3Qga2lkcyA9IHdhbGtDaGlsZHJl bihlbCwgaG9zdCk7CiAgICBjb25zdCBsaXN0U3JjID0gZWwuZ2V0QXR0cmlidXRlKCJsaXN0IikgfHwgIiI7CiAgICByZXR1cm4gKHZhbHMsIGN0eCwga2V5 KSA9PiB7CiAgICAgIGxldCBsaXN0ID0gbGlzdEdldCh2YWxzKTsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxpc3QpKSB7CiAgICAgICAgaWYgKCFjdHg/ Ll9fc3RyZWFtaW5nTm93KSB7CiAgICAgICAgICBpZiAobGlzdCAhPT0gdm9pZCAwICYmIGxpc3QgIT09IG51bGwpIHsKICAgICAgICAgICAgd2FyblVucmVz b2x2ZWQoCiAgICAgICAgICAgICAgY3R4LAogICAgICAgICAgICAgICdzYy1mb3IgbGlzdD0iJyArIGxpc3RTcmMgKyAnIiBpcyBub3QgYW4gYXJyYXkgKCcg KyB0eXBlb2YgbGlzdCArICIpIgogICAgICAgICAgICApOwogICAgICAgICAgfQogICAgICAgICAgbGlzdCA9IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAg ICAgICBsaXN0ID0gaGludE4gPiAwID8gQXJyYXkoaGludE4pLmZpbGwodm9pZCAwKSA6IFtdOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaCgK ICAgICAgICBnZXRSZWFjdCgpLkZyYWdtZW50LAogICAgICAgIHsga2V5IH0sCiAgICAgICAgbGlzdC5tYXAoKGl0ZW0sIGkpID0+IHsKICAgICAgICAgIGNv bnN0IHN1YiA9IHsgLi4udmFscywgW2FzTmFtZV06IGl0ZW0sICRpbmRleDogaSB9OwogICAgICAgICAgcmV0dXJuIGgoCiAgICAgICAgICAgIGdldFJlYWN0 KCkuRnJhZ21lbnQsCiAgICAgICAgICAgIHsga2V5OiBpIH0sCiAgICAgICAgICAgIGtpZHMubWFwKChiLCBqKSA9PiBiKHN1YiwgY3R4LCBqKSkKICAgICAg ICAgICk7CiAgICAgICAgfSkKICAgICAgKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHdhbGtJZihlbCwgaG9zdCkgewogICAgY29uc3QgdmFsR2V0ID0gY29t cGlsZUF0dHIoZWwuZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpIHx8ICIiKTsKICAgIGNvbnN0IGhpbnRSYXcgPSBlbC5nZXRBdHRyaWJ1dGUoImhpbnQtcGxhY2Vo b2xkZXItdmFsIik7CiAgICBjb25zdCBoaW50R2V0ID0gaGludFJhdyAhPSBudWxsID8gY29tcGlsZUF0dHIoaGludFJhdykgOiBudWxsOwogICAgY29uc3Qg a2lkcyA9IHdhbGtDaGlsZHJlbihlbCwgaG9zdCk7CiAgICByZXR1cm4gKHZhbHMsIGN0eCwga2V5KSA9PiB7CiAgICAgIGxldCB2ID0gdmFsR2V0KHZhbHMp OwogICAgICBpZiAodiA9PT0gdm9pZCAwICYmIGhpbnRHZXQgJiYgY3R4Py5fX3N0cmVhbWluZ05vdykgdiA9IGhpbnRHZXQodmFscyk7CiAgICAgIHJldHVy biB2ID8gaCgKICAgICAgICBnZXRSZWFjdCgpLkZyYWdtZW50LAogICAgICAgIHsga2V5IH0sCiAgICAgICAga2lkcy5tYXAoKGIsIGopID0+IGIodmFscywg Y3R4LCBqKSkKICAgICAgKSA6IG51bGw7CiAgICB9OwogIH0KICBmdW5jdGlvbiB3YWxrQ29tcG9uZW50KGVsLCBob3N0KSB7CiAgICBjb25zdCBuYW1lID0g ZWwuZ2V0QXR0cmlidXRlKCJuYW1lIikgfHwgZWwuZ2V0QXR0cmlidXRlKCJjb21wb25lbnQiKSB8fCAiIjsKICAgIGVsLnJlbW92ZUF0dHJpYnV0ZSgibmFt ZSIpOwogICAgZWwucmVtb3ZlQXR0cmlidXRlKCJjb21wb25lbnQiKTsKICAgIGNvbnN0IHRwbElkID0gZWwuZ2V0QXR0cmlidXRlKCJkYXRhLWRjLXRwbCIp OwogICAgY29uc3Qgc3R5bGVSYXcgPSBlbC5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7CiAgICBjb25z dCBzdHlsZUdldCA9IHN0eWxlUmF3ICE9IG51bGwgPyBjb21waWxlQXR0cihzdHlsZVJhdykgOiBudWxsOwogICAgY29uc3QgeyBwcm9wR2V0dGVycywgaGlu dFNpemUgfSA9IGNvbGxlY3RQcm9wcyhlbCwgImRjLWltcG9ydCIsIGhvc3QpOwogICAgY29uc3Qga2lkcyA9IHdhbGtDaGlsZHJlbihlbCwgaG9zdCk7CiAg ICByZXR1cm4gKHZhbHMsIGN0eCwga2V5KSA9PiB7CiAgICAgIGNvbnN0IHByb3BzID0gewogICAgICAgIGtleSwKICAgICAgICBfX2hpbnRTaXplOiBoaW50 U2l6ZSwKICAgICAgICBfX3RwbElkOiB0cGxJZCwKICAgICAgICBfX2hvc3RTdHlsZTogc3R5bGVHZXQgPyBob3N0UG9zaXRpb25TdHlsZShzdHlsZUdldCh2 YWxzKSkgOiB2b2lkIDAKICAgICAgfTsKICAgICAgZm9yIChjb25zdCBbaywgZ10gb2YgcHJvcEdldHRlcnMpIHsKICAgICAgICBjb25zdCB2ID0gZyh2YWxz KTsKICAgICAgICBpZiAoayA9PT0gImRjUHJvcHMiKSB7CiAgICAgICAgICBpZiAodiAmJiB0eXBlb2YgdiA9PT0gIm9iamVjdCIpIE9iamVjdC5hc3NpZ24o cHJvcHMsIHYpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHByb3BzW2tdID0gdjsKICAgICAgfQogICAgICBpZiAoa2lkcy5sZW5n dGgpIHByb3BzLmNoaWxkcmVuID0ga2lkcy5tYXAoKGIsIGopID0+IGIodmFscywgY3R4LCBqKSk7CiAgICAgIHJldHVybiBoKGhvc3QuY29tcG9uZW50KG5h bWUpLCBwcm9wcyk7CiAgICB9OwogIH0KICBmdW5jdGlvbiB3YWxrWEltcG9ydChlbCwgaG9zdCkgewogICAgY29uc3QgZ2xvYmFsTmFtZUdldCA9IGNvbXBp bGVBdHRyKAogICAgICBlbC5nZXRBdHRyaWJ1dGUoImNvbXBvbmVudC1mcm9tLWdsb2JhbC1zY29wZSIpIHx8ICIiCiAgICApOwogICAgY29uc3QgZXhwb3J0 TmFtZUdldCA9IGNvbXBpbGVBdHRyKAogICAgICBlbC5nZXRBdHRyaWJ1dGUoImNvbXBvbmVudCIpIHx8IGVsLmdldEF0dHJpYnV0ZSgibmFtZSIpIHx8ICIi CiAgICApOwogICAgY29uc3QgZnJvbVJhdyA9IGVsLmdldEF0dHJpYnV0ZSgiZnJvbSIpIHx8IChlbC5nZXRBdHRyaWJ1dGUoImNvbXBvbmVudC1mcm9tLWds b2JhbC1zY29wZSIpID8gIiIgOiBlbC5nZXRBdHRyaWJ1dGUoInNyYyIpIHx8IGVsLmdldEF0dHJpYnV0ZSgiaW1wb3J0IikgfHwgIiIpOwogICAgY29uc3Qg dXJscyA9IGZyb21SYXcudHJpbSgpID8gZnJvbVJhdy50cmltKCkuc3BsaXQoL1xzKy8pIDogW107CiAgICBjb25zdCB1cmwgPSB1cmxzLmxlbmd0aCA/IHVy bHNbdXJscy5sZW5ndGggLSAxXSA6ICIiOwogICAgY29uc3Qga2luZE9mID0gKHUpID0+IC9cLihqc3h8dHN4KShcP3wjfCQpL2kudGVzdCh1KSA/ICJqc3gi IDogImpzIjsKICAgIGNvbnN0IHRwbElkID0gZWwuZ2V0QXR0cmlidXRlKCJkYXRhLWRjLXRwbCIpOwogICAgY29uc3Qgc3R5bGVSYXcgPSBlbC5nZXRBdHRy aWJ1dGUoInN0eWxlIik7CiAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIik7CiAgICBjb25zdCBzdHlsZUdldCA9IHN0eWxlUmF3ICE9IG51bGwgPyBj b21waWxlQXR0cihzdHlsZVJhdykgOiBudWxsOwogICAgY29uc3Qgd3JhcCA9IHRwbElkICE9IG51bGwgfHwgc3R5bGVHZXQgIT0gbnVsbDsKICAgIGNvbnN0 IHsgcHJvcEdldHRlcnMsIGhpbnRTaXplIH0gPSBjb2xsZWN0UHJvcHMoZWwsICJ4LWltcG9ydCIsIGhvc3QpOwogICAgY29uc3QgaGFzQ29udGVudCA9IGVs LmNoaWxkcmVuLmxlbmd0aCA+IDAgfHwgISEoZWwudGV4dENvbnRlbnQgfHwgIiIpLnRyaW0oKTsKICAgIGNvbnN0IGRlY2tLZXllZCA9IGhhc0NvbnRlbnQg JiYgaXNEZWNrTW91bnRUYWcoZWwpID8gd2Fsa0RlY2tDaGlsZHJlbihlbCwgaG9zdCkgOiBudWxsOwogICAgY29uc3Qga2lkcyA9IGRlY2tLZXllZCA/IGRl Y2tLZXllZC5raWRzIDogaGFzQ29udGVudCA/IHdhbGtDaGlsZHJlbihlbCwgaG9zdCkgOiBbXTsKICAgIGNvbnN0IGtpZEtleXMgPSBkZWNrS2V5ZWQ/Lmtl eXMgPz8gbnVsbDsKICAgIGNvbnN0IHVybEJpbmRhYmxlID0gZnJvbVJhdy5pbmNsdWRlcygie3siKTsKICAgIGlmICh1cmxzLmxlbmd0aCAmJiAhdXJsQmlu ZGFibGUpIHsKICAgICAgbGV0IHByZXY7CiAgICAgIGZvciAoY29uc3QgdSBvZiB1cmxzKSBwcmV2ID0gaG9zdC5sb2FkRXh0ZXJuYWwoa2luZE9mKHUpLCB1 LCBwcmV2KTsKICAgIH0KICAgIGNvbnN0IGV2YWxOYW1lID0gKGcsIHZhbHMpID0+IHsKICAgICAgY29uc3QgdiA9IGcodmFscyk7CiAgICAgIGNvbnN0IHMg PSB2ID09IG51bGwgPyAiIiA6IFN0cmluZyh2KTsKICAgICAgcmV0dXJuIHMuaW5jbHVkZXMoInt7IikgPyAiIiA6IHM7CiAgICB9OwogICAgcmV0dXJuICh2 YWxzLCBjdHgsIGtleSkgPT4gewogICAgICBjb25zdCBnbG9iYWxOYW1lID0gZXZhbE5hbWUoZ2xvYmFsTmFtZUdldCwgdmFscyk7CiAgICAgIGNvbnN0IG5h bWUgPSBnbG9iYWxOYW1lIHx8IGV2YWxOYW1lKGV4cG9ydE5hbWVHZXQsIHZhbHMpOwogICAgICBjb25zdCBDID0gIW5hbWUgfHwgdXJsQmluZGFibGUgPyBu dWxsIDogZ2xvYmFsTmFtZSA/IGhvc3QucmVzb2x2ZUV4dGVybmFsR2xvYmFsKHVybCwgZ2xvYmFsTmFtZSkgOiBob3N0LnJlc29sdmVFeHRlcm5hbCh1cmws IG5hbWUpOwogICAgICBjb25zdCBob3N0U3R5bGUgPSBzdHlsZUdldCA/IGhvc3RQb3NpdGlvblN0eWxlKHN0eWxlR2V0KHZhbHMpKSA6IHZvaWQgMDsKICAg ICAgY29uc3Qgd3JhcHBlciA9IHdyYXAgPyB7CiAgICAgICAga2V5LAogICAgICAgIGNsYXNzTmFtZTogInNjLWhvc3QteCIsCiAgICAgICAgImRhdGEtZGMt dHBsIjogdHBsSWQsCiAgICAgICAgc3R5bGU6IGhvc3RTdHlsZSB8fCB7IGRpc3BsYXk6ICJjb250ZW50cyIgfQogICAgICB9IDogbnVsbDsKICAgICAgaWYg KCFDKSB7CiAgICAgICAgY29uc3QgZXJyb3IgPSB1cmxCaW5kYWJsZSA/ICJ4LWltcG9ydCBgZnJvbWAgY2Fubm90IGNvbnRhaW4ge3sgXHUyMDI2IH19IFx1 MjAxNCBtb2R1bGUgVVJMcyBhcmUgcmVzb2x2ZWQgYXQgcGFyc2UgdGltZTsgdXNlIGEgbGl0ZXJhbCBVUkwiIDogaG9zdC5yZXNvbHZlRXh0ZXJuYWxFcnJv cih1cmwsIG5hbWUpOwogICAgICAgIGNvbnN0IHBoID0gaG9zdC5wbGFjZWhvbGRlcih7CiAgICAgICAgICBrZXk6IHdyYXBwZXIgPyB2b2lkIDAgOiBrZXks CiAgICAgICAgICBuYW1lLAogICAgICAgICAgaGludFNpemUsCiAgICAgICAgICBlcnJvcgogICAgICAgIH0pOwogICAgICAgIHJldHVybiB3cmFwcGVyID8g aCgiZGl2Iiwgd3JhcHBlciwgcGgpIDogcGg7CiAgICAgIH0KICAgICAgY29uc3QgcHJvcHMgPSB3cmFwcGVyID8ge30gOiB7IGtleSB9OwogICAgICBsZXQg dW5yZXNvbHZlZEhvbGUgPSBmYWxzZTsKICAgICAgZm9yIChjb25zdCBbaywgZ10gb2YgcHJvcEdldHRlcnMpIHsKICAgICAgICBpZiAoayA9PT0gImNvbXBv bmVudCIgfHwgayA9PT0gImNvbXBvbmVudEZyb21HbG9iYWxTY29wZSIgfHwgayA9PT0gImZyb20iKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9 CiAgICAgICAgY29uc3QgdiA9IGcodmFscyk7CiAgICAgICAgaWYgKHYgPT09IHZvaWQgMCkgdW5yZXNvbHZlZEhvbGUgPSB0cnVlOwogICAgICAgIGlmIChr ID09PSAiZGNQcm9wcyIpIHsKICAgICAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAib2JqZWN0IikgT2JqZWN0LmFzc2lnbihwcm9wcywgdik7CiAgICAg ICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcHJvcHNba10gPSB2OwogICAgICB9CiAgICAgIGlmICh1bnJlc29sdmVkSG9sZSAmJiBjdHg/Ll9f aHRtbFN0cmVhbWluZ05vdykgewogICAgICAgIGNvbnN0IHBoID0gaG9zdC5wbGFjZWhvbGRlcih7CiAgICAgICAgICBrZXk6IHdyYXBwZXIgPyB2b2lkIDAg OiBrZXksCiAgICAgICAgICBuYW1lLAogICAgICAgICAgaGludFNpemUsCiAgICAgICAgICBlcnJvcjogbnVsbAogICAgICAgIH0pOwogICAgICAgIHJldHVy biB3cmFwcGVyID8gaCgiZGl2Iiwgd3JhcHBlciwgcGgpIDogcGg7CiAgICAgIH0KICAgICAgaWYgKGtpZHMubGVuZ3RoKSB7CiAgICAgICAgcHJvcHMuY2hp bGRyZW4gPSByZW5kZXJEZWNrS2lkcyhraWRzLCBraWRLZXlzLCB2YWxzLCBjdHgpOwogICAgICB9CiAgICAgIHJldHVybiB3cmFwcGVyID8gaCgiZGl2Iiwg d3JhcHBlciwgaChDLCBwcm9wcykpIDogaChDLCBwcm9wcyk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBjb250ZW50S2V5KGVsKSB7CiAgICBjb25zdCBjbG9u ZSA9IGVsLmNsb25lTm9kZSh0cnVlKTsKICAgIGZvciAoY29uc3QgZCBvZiBjbG9uZS5xdWVyeVNlbGVjdG9yQWxsKCIqIikpIHsKICAgICAgd2hpbGUgKGQu YXR0cmlidXRlcy5sZW5ndGgpIGQucmVtb3ZlQXR0cmlidXRlKGQuYXR0cmlidXRlc1swXS5uYW1lKTsKICAgIH0KICAgIGNvbnN0IHMgPSBjbG9uZS5pbm5l ckhUTUw7CiAgICBsZXQgaDIgPSA1MzgxOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSBoMiA9IChoMiA8PCA1KSArIGgyICsgcy5j aGFyQ29kZUF0KGkpIHwgMDsKICAgIHJldHVybiBzLmxlbmd0aCArICIuIiArIChoMiA+Pj4gMCkudG9TdHJpbmcoMzYpOwogIH0KICB2YXIgTkVWRVJfQ09O VEVOVF9LRVlFRCA9IG5ldyBTZXQoCiAgICAic2NyaXB0IHN0eWxlIHRleHRhcmVhIG9wdGlvbiB0aXRsZSBzZWxlY3QgY2FudmFzIGlmcmFtZSB2aWRlbyBh dWRpbyIuc3BsaXQoCiAgICAgICIgIgogICAgKQogICk7CiAgdmFyIE5PVF9JTkxJTkVfU0VMRUNUT1IgPSAiOm5vdCgiICsgWy4uLklOTElORV9URVhUX1RB R1NdLmpvaW4oIiwiKSArICIpIjsKICBmdW5jdGlvbiB3YWxrRWxlbWVudChlbCwgaG9zdCkgewogICAgY29uc3QgcmVhbFRhZyA9IFJBV19VTldSQVBbZWwu bG9jYWxOYW1lXSB8fCBlbC5sb2NhbE5hbWU7CiAgICBjb25zdCB0cGxJZCA9IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1kYy10cGwiKTsKICAgIGNvbnN0IGlu bGluZU9ubHkgPSBlbC5jaGlsZE5vZGVzLmxlbmd0aCA+IDAgJiYgIU5FVkVSX0NPTlRFTlRfS0VZRUQuaGFzKHJlYWxUYWcpICYmIGVsLnF1ZXJ5U2VsZWN0 b3IoTk9UX0lOTElORV9TRUxFQ1RPUikgPT09IG51bGw7CiAgICBjb25zdCBrZXlTdWZmaXggPSBpbmxpbmVPbmx5ID8gInwiICsgY29udGVudEtleShlbCkg OiAiIjsKICAgIGNvbnN0IHsgcHJvcEdldHRlcnMsIHBzZXVkb0NsYXNzZXMgfSA9IGNvbGxlY3RQcm9wcyhlbCwgImRvbSIsIGhvc3QpOwogICAgY29uc3Qg ZGVja0tleWVkID0gaXNEZWNrTW91bnRUYWcoZWwpID8gd2Fsa0RlY2tDaGlsZHJlbihlbCwgaG9zdCkgOiBudWxsOwogICAgY29uc3Qga2lkcyA9IGRlY2tL ZXllZCA/IGRlY2tLZXllZC5raWRzIDogd2Fsa0NoaWxkcmVuKGVsLCBob3N0KTsKICAgIGNvbnN0IGtpZEtleXMgPSBkZWNrS2V5ZWQ/LmtleXMgPz8gbnVs bDsKICAgIHJldHVybiAodmFscywgY3R4LCBrZXkpID0+IHsKICAgICAgY29uc3QgcHJvcHMgPSB7CiAgICAgICAga2V5OiBrZXkgKyBrZXlTdWZmaXgsCiAg ICAgICAgImRhdGEtZGMtdHBsIjogdHBsSWQKICAgICAgfTsKICAgICAgZm9yIChjb25zdCBbaywgZ10gb2YgcHJvcEdldHRlcnMpIHsKICAgICAgICBsZXQg diA9IGcodmFscyk7CiAgICAgICAgaWYgKGsgPT09ICJzdHlsZSIgJiYgdHlwZW9mIHYgPT09ICJzdHJpbmciKSB2ID0gY3NzVG9PYmoodik7CiAgICAgICAg aWYgKChrID09PSAidmFsdWUiIHx8IGsgPT09ICJjaGVja2VkIikgJiYgdiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICB2ID0gayA9PT0gImNoZWNrZWQiID8g ZmFsc2UgOiAiIjsKICAgICAgICB9CiAgICAgICAgcHJvcHNba10gPSB2OwogICAgICB9CiAgICAgIGlmIChwc2V1ZG9DbGFzc2VzLmxlbmd0aCkgewogICAg ICAgIHByb3BzLmNsYXNzTmFtZSA9IFtwcm9wcy5jbGFzc05hbWUsIC4uLnBzZXVkb0NsYXNzZXNdLmZpbHRlcihCb29sZWFuKS5qb2luKCIgIik7CiAgICAg IH0KICAgICAgcmV0dXJuIGgocmVhbFRhZywgcHJvcHMsIC4uLnJlbmRlckRlY2tLaWRzKGtpZHMsIGtpZEtleXMsIHZhbHMsIGN0eCkpOwogICAgfTsKICB9 CgogIC8vIHNyYy9sb2dpYy50cwogIHZhciBTdHJlYW1hYmxlTG9naWMgPSBjbGFzcyB7CiAgICBjb25zdHJ1Y3Rvcihwcm9wcykgewogICAgICBfX3B1Ymxp Y0ZpZWxkKHRoaXMsICJwcm9wcyIpOwogICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJzdGF0ZSIsIHt9KTsKICAgICAgLyoqIEJhY2stcG9pbnRlciB0byB0 aGUgd3JhcHBlciBjb21wb25lbnQsIGluc3RhbGxlZCBhZnRlciBjb25zdHJ1Y3Rpb24uICovCiAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9faG9zdCIp OwogICAgICB0aGlzLnByb3BzID0gcHJvcHMgfHwge307CiAgICB9CiAgICBzZXRTdGF0ZSh1cGRhdGUsIGNiKSB7CiAgICAgIHRoaXMuX19ob3N0ICYmIHRo aXMuX19ob3N0Ll9fc2V0TG9naWNTdGF0ZSh1cGRhdGUsIGNiKTsKICAgIH0KICAgIGZvcmNlVXBkYXRlKCkgewogICAgICB0aGlzLl9faG9zdCAmJiB0aGlz Ll9faG9zdC5mb3JjZVVwZGF0ZSgpOwogICAgfQogICAgY29tcG9uZW50RGlkTW91bnQoKSB7CiAgICB9CiAgICBjb21wb25lbnREaWRVcGRhdGUoX3ByZXZQ cm9wcykgewogICAgfQogICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7CiAgICB9CiAgICAvKiogVGhlIGZsYXQgb2JqZWN0IHRoZSB0ZW1wbGF0ZSByZW5k ZXJzIGFnYWluc3QgKG1lcmdlZCBvdmVyIHByb3BzKS4gKi8KICAgIHJlbmRlclZhbHMoKSB7CiAgICAgIHJldHVybiB7fTsKICAgIH0KICB9OwogIGZ1bmN0 aW9uIGV2YWxEY0xvZ2ljKHNyYykgewogICAgLy8hIG5vc2VtZ3JlcDogZXZhbC1hbmQtZnVuY3Rpb24tY29uc3RydWN0b3IKICAgIGNvbnN0IGZuID0gbmV3 IEZ1bmN0aW9uKAogICAgICAiRENMb2dpYyIsCiAgICAgICJTdHJlYW1hYmxlTG9naWMiLAogICAgICAiUmVhY3QiLAogICAgICBzcmMgKyAnXG47cmV0dXJu ICh0eXBlb2YgQ29tcG9uZW50IT09InVuZGVmaW5lZCImJkNvbXBvbmVudCl8fHVuZGVmaW5lZDsnCiAgICApOwogICAgcmV0dXJuIGZuKFN0cmVhbWFibGVM b2dpYywgU3RyZWFtYWJsZUxvZ2ljLCBnZXRSZWFjdCgpKTsKICB9CgogIC8vIHNyYy9jb21wb25lbnQudHMKICBmdW5jdGlvbiBzaGFsbG93RXF1YWwoYSwg YikgewogICAgaWYgKCFiKSByZXR1cm4gZmFsc2U7CiAgICBjb25zdCBhayA9IE9iamVjdC5rZXlzKGEpLmZpbHRlcigoaykgPT4gayAhPT0gImNoaWxkcmVu Iik7CiAgICBjb25zdCBiayA9IE9iamVjdC5rZXlzKGIpLmZpbHRlcigoaykgPT4gayAhPT0gImNoaWxkcmVuIik7CiAgICBpZiAoYWsubGVuZ3RoICE9PSBi ay5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoY29uc3QgayBvZiBhaykgaWYgKGFba10gIT09IGJba10pIHJldHVybiBmYWxzZTsKICAgIHJldHVy biB0cnVlOwogIH0KICBmdW5jdGlvbiBQbGFjZWhvbGRlcih7CiAgICBuYW1lLAogICAgaGludFNpemUsCiAgICBzdHJlYW1pbmcsCiAgICBlcnJvcgogIH0p IHsKICAgIGNvbnN0IFt3LCBoZ3RdID0gKGhpbnRTaXplIHx8ICIxMDAlLDYwcHgiKS5zcGxpdCgiLCIpOwogICAgcmV0dXJuIGgoCiAgICAgICJkaXYiLAog ICAgICB7CiAgICAgICAgY2xhc3NOYW1lOiAic2MtcGxhY2Vob2xkZXIiICsgKHN0cmVhbWluZyA/ICIgc2Mtc3RyZWFtaW5nIiA6ICIiKSwKICAgICAgICBz dHlsZTogeyB3aWR0aDogdy50cmltKCksIGhlaWdodDogaGd0ICYmIGhndC50cmltKCkgfSwKICAgICAgICB0aXRsZTogbmFtZQogICAgICB9LAogICAgICBl cnJvciA/IGgoCiAgICAgICAgImRpdiIsCiAgICAgICAgeyBjbGFzc05hbWU6ICJzYy1wbGFjZWhvbGRlci1lcnJvciIgfSwKICAgICAgICAobmFtZSA/IG5h bWUgKyAiOiAiIDogIiIpICsgZXJyb3IKICAgICAgKSA6IG51bGwKICAgICk7CiAgfQogIGZ1bmN0aW9uIGhpbnRUb01pbihoaW50KSB7CiAgICBpZiAoIWhp bnQpIHJldHVybiB2b2lkIDA7CiAgICBjb25zdCBbdywgaGd0XSA9IGhpbnQuc3BsaXQoIiwiKTsKICAgIHJldHVybiB7IG1pbldpZHRoOiB3LnRyaW0oKSwg bWluSGVpZ2h0OiBoZ3QgJiYgaGd0LnRyaW0oKSB9OwogIH0KICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnRGYWN0b3J5KHJlZ2lzdHJ5LCBlbnN1cmVGZXRj aGVkKSB7CiAgICBjb25zdCBSZWFjdCA9IGdldFJlYWN0KCk7CiAgICBjb25zdCBBbmNlc3RvckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0KFtdKTsK ICAgIGNsYXNzIFN0cmVhbWFibGVDb21wb25lbnQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgewogICAgICBjb25zdHJ1Y3Rvcihwcm9wcykgewogICAgICAg IHN1cGVyKHByb3BzKTsKICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfX25hbWUiKTsKICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfX3N1YiIp OwogICAgICAgIF9fcHVibGljRmllbGQodGhpcywgIl9fbmVlZHNEaWRNb3VudCIsIGZhbHNlKTsKICAgICAgICAvKiogU25hcHNob3Qgb2YgdGhlIHJlZ2lz dHJ5J3Mgc3RyZWFtaW5nIGZsYWdzIHRha2VuIGF0IHJlbmRlciB0aW1lIOKAlAogICAgICAgICAqICBidWlsZGVycyByZWFkIGl0IG9mZiB0aGUgUmVuZGVy Q3R4ICh0aGlzKSB0byBwaWNrIHBsYWNlaG9sZGVyIHZzCiAgICAgICAgICogIHJlbmRlci1ub3RoaW5nIGZvciB1bnJlc29sdmVkIHZhbHVlcy4gKi8KICAg ICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfX3N0cmVhbWluZ05vdyIsIGZhbHNlKTsKICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJfX2h0bWxTdHJl YW1pbmdOb3ciLCBmYWxzZSk7CiAgICAgICAgLyoqIFdoZW4gYSBjb25zdHJ1Y3QgdGhyb3dzLCByZW1lbWJlciB0aGUgKGNsYXNzLCByZWdpc3RyeS52ZXIs IHByb3BzKQogICAgICAgICAqICB0cmlwbGUgc28gcmVuZGVyLXRpbWUgcmVjb25jaWxlIGRvZXNuJ3QgcmUtYXR0ZW1wdCBpdCBvbiBldmVyeSBwYXJlbnQK ICAgICAgICAgKiAgcmUtcmVuZGVyLiBBIHJlZ2lzdHJ5IGJ1bXAgKG5ldyBjbGFzcywgdGVtcGxhdGUsIGV4dGVybmFsIG1vZHVsZQogICAgICAgICAqICBy ZXNvbHZpbmcgdmlhIGJ1bXBBbGwpIGNoYW5nZXMgYHZlcmAgYW5kIGJyZWFrcyB0aGUgbWVtbyBzbyBhbgogICAgICAgICAqICBlbnYtZGVwZW5kZW50IGNv bnN0cnVjdG9yIGNhbiBzZWxmLWhlYWwuICovCiAgICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX19mYWlsZWRMb2dpYyIsIG51bGwpOwogICAgICAgIF9f cHVibGljRmllbGQodGhpcywgIl9fZmFpbGVkVXNlclByb3BzIiwgbnVsbCk7CiAgICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX19mYWlsZWRWZXIiLCAt MSk7CiAgICAgICAgLyoqIFBlci1pbnN0YW5jZSBjb25zdHJ1Y3RvciBlcnJvciDigJQga2VwdCBoZXJlIChub3Qgb24gdGhlIHJlZ2lzdHJ5IGVudHJ5KQog ICAgICAgICAqICBzbyBvbmUgaW5zdGFuY2UncyBzdWNjZXNzZnVsIGNvbnN0cnVjdCBjYW4ndCBoaWRlIGEgc2libGluZydzIGZhaWx1cmUsCiAgICAgICAg ICogIGFuZCBhIGNvbnN0cnVjdCBjYW4gbmV2ZXIgd2lwZSBhbiBldmFsIGVycm9yIGB1cGRhdGVKc2AgcmVjb3JkZWQgb24KICAgICAgICAgKiAgYHIubG9n aWNFcnJvcmAuICovCiAgICAgICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiX19jdG9yRXJyb3IiLCBudWxsKTsKICAgICAgICBfX3B1YmxpY0ZpZWxkKHRoaXMs ICJsb2dpYyIpOwogICAgICAgIHRoaXMuX19uYW1lID0gcHJvcHMuX19uYW1lOwogICAgICAgIHRoaXMuc3RhdGUgPSB7IF9fdjogMCwgX19lcnI6IG51bGwg fTsKICAgICAgICB0aGlzLl9fc3ViID0gKCkgPT4gewogICAgICAgICAgaWYgKHRoaXMuc3RhdGUuX19lcnIpIHRoaXMuc2V0U3RhdGUoeyBfX2VycjogbnVs bCB9KTsKICAgICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTsKICAgICAgICB9OwogICAgICAgIHRoaXMuX19tYWtlTG9naWMocmVnaXN0cnkuZ2V0KHRoaXMu X19uYW1lKS5Mb2dpYywgbnVsbCk7CiAgICAgICAgZW5zdXJlRmV0Y2hlZCh0aGlzLl9fbmFtZSk7CiAgICAgIH0KICAgICAgLyoqIEVycm9yLWJvdW5kYXJ5 IGhvb2s6IGEgcmVuZGVyIGNyYXNoIGFueXdoZXJlIGluIHRoaXMgREMncyBzdWJ0cmVlCiAgICAgICAqICAoaXRzIG93biB0ZW1wbGF0ZSwgYW4geC1pbXBv cnQnZCBjb21wb25lbnQsIGEgY2hpbGQgREMgd2l0aG91dCBpdHMKICAgICAgICogIG93biBkZWVwZXIgYm91bmRhcnkpIGxhbmRzIGhlcmUgaW5zdGVhZCBv ZiB1bm1vdW50aW5nIHRoZSBwYWdlLiAqLwogICAgICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKGUpIHsKICAgICAgICByZXR1cm4geyBfX2Vy cjogZSBpbnN0YW5jZW9mIEVycm9yICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSB9OwogICAgICB9CiAgICAgIGNvbXBvbmVudERpZENh dGNoKGUsIGluZm8pIHsKICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAgICAgIltkYy1ydW50aW1lXSByZW5kZXIgZXJyb3IgaW4gPCIgKyB0aGlzLl9f bmFtZSArICI+OiIsCiAgICAgICAgICBlLAogICAgICAgICAgaW5mbz8uY29tcG9uZW50U3RhY2sgfHwgIiIKICAgICAgICApOwogICAgICB9CiAgICAgIC8q KiBJbnN0YW50aWF0ZSB0aGUgbG9naWMgY2xhc3MgKG9yIHRoZSBuby1vcCBiYXNlKSBhbmQgYWRvcHQgYHByZXZTdGF0ZWAKICAgICAgICogIG92ZXIgaXRz IGluaXRpYWwgc3RhdGUg4oCUIHVzZWQgYm90aCBhdCBtb3VudCBhbmQgb24gaG90LXN3YXAuICovCiAgICAgIF9fbWFrZUxvZ2ljKExvZ2ljLCBwcmV2U3Rh dGUpIHsKICAgICAgICBjb25zdCBMID0gTG9naWMgfHwgU3RyZWFtYWJsZUxvZ2ljOwogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLmxvZ2ljID0gbmV3 IEwodGhpcy5fX3VzZXJQcm9wcygpKTsKICAgICAgICAgIHRoaXMuX19mYWlsZWRMb2dpYyA9IG51bGw7CiAgICAgICAgICB0aGlzLl9fZmFpbGVkVXNlclBy b3BzID0gbnVsbDsKICAgICAgICAgIHRoaXMuX19jdG9yRXJyb3IgPSBudWxsOwogICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgIGNvbnNvbGUuZXJy b3IoZSk7CiAgICAgICAgICB0aGlzLl9fZmFpbGVkTG9naWMgPSBMb2dpYzsKICAgICAgICAgIHRoaXMuX19mYWlsZWRVc2VyUHJvcHMgPSB0aGlzLl9fdXNl clByb3BzKCk7CiAgICAgICAgICB0aGlzLl9fZmFpbGVkVmVyID0gcmVnaXN0cnkuZ2V0KHRoaXMuX19uYW1lKS52ZXI7CiAgICAgICAgICB0aGlzLl9fY3Rv ckVycm9yID0gdGhpcy5fX25hbWUgKyAiOiAiICsgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSkpOwog ICAgICAgICAgdGhpcy5sb2dpYyA9IG5ldyBTdHJlYW1hYmxlTG9naWMoCiAgICAgICAgICAgIHRoaXMuX191c2VyUHJvcHMoKQogICAgICAgICAgKTsKICAg ICAgICB9CiAgICAgICAgdGhpcy5sb2dpYy5fX2hvc3QgPSB0aGlzOwogICAgICAgIGlmIChwcmV2U3RhdGUpCiAgICAgICAgICB0aGlzLmxvZ2ljLnN0YXRl ID0geyAuLi50aGlzLmxvZ2ljLnN0YXRlIHx8IHt9LCAuLi5wcmV2U3RhdGUgfTsKICAgICAgfQogICAgICAvKiogVGhlIHByb3BzIHRoZSBhdXRob3IncyBs b2dpYyArIHRlbXBsYXRlIHNlZSDigJQgaW50ZXJuYWwgX18tcHJlZml4ZWQKICAgICAgICogIHdpcmluZyBzdHJpcHBlZC4gKi8KICAgICAgX191c2VyUHJv cHMoKSB7CiAgICAgICAgY29uc3QgeyBfX25hbWUsIF9faGludFNpemUsIF9fdHBsSWQsIF9faG9zdFN0eWxlLCAuLi5yZXN0IH0gPSB0aGlzLnByb3BzOwog ICAgICAgIHJldHVybiByZXN0OwogICAgICB9CiAgICAgIF9fc2V0TG9naWNTdGF0ZSh1cGRhdGUsIGNiKSB7CiAgICAgICAgY29uc3QgcHJldiA9IHRoaXMu bG9naWMuc3RhdGU7CiAgICAgICAgY29uc3QgcGF0Y2ggPSB0eXBlb2YgdXBkYXRlID09PSAiZnVuY3Rpb24iID8gdXBkYXRlKHByZXYpIDogdXBkYXRlOwog ICAgICAgIHRoaXMubG9naWMuc3RhdGUgPSB7IC4uLnByZXYsIC4uLnBhdGNoIH07CiAgICAgICAgdGhpcy5zZXRTdGF0ZSgocykgPT4gKHsgX192OiBzLl9f diArIDEgfSksIGNiKTsKICAgICAgfQogICAgICAvKiogU3dhcCB0aGUgbG9naWMgaW5zdGFuY2Ugd2hlbiB0aGUgcmVnaXN0cnkncyBMb2dpYyBjbGFzcyBj aGFuZ2VkCiAgICAgICAqICAoc3RyZWFtaW5nIGNvbXBsZXRpb24sIGhvdCByZWxvYWQpLiBTdGF0ZSBjYXJyaWVzIG92ZXI7IGRpZE1vdW50CiAgICAgICAq ICByZS1maXJlcyBhZnRlciB0aGUgc3dhcCBjb21taXRzIHNvIHJlZnMgZXhpc3QuICovCiAgICAgIF9fcmVjb25jaWxlTG9naWMoKSB7CiAgICAgICAgY29u c3QgciA9IHJlZ2lzdHJ5LmdldCh0aGlzLl9fbmFtZSk7CiAgICAgICAgY29uc3QgTmV4dCA9IHIuTG9naWM7CiAgICAgICAgY29uc3QgQ3VyID0gdGhpcy5s b2dpYy5jb25zdHJ1Y3RvcjsKICAgICAgICBpZiAoTmV4dCA9PT0gQ3VyIHx8ICFOZXh0ICYmIEN1ciA9PT0gU3RyZWFtYWJsZUxvZ2ljIHx8IE5leHQgPT09 IHRoaXMuX19mYWlsZWRMb2dpYyAmJiByLnZlciA9PT0gdGhpcy5fX2ZhaWxlZFZlciAmJiBzaGFsbG93RXF1YWwodGhpcy5fX3VzZXJQcm9wcygpLCB0aGlz Ll9fZmFpbGVkVXNlclByb3BzKSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMuX19uZWVkc0RpZE1vdW50KSB7CiAg ICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmxvZ2ljLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAg ICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuX19tYWtlTG9naWMoTmV4dCwgdGhpcy5sb2dpYy5z dGF0ZSk7CiAgICAgICAgdGhpcy5fX25lZWRzRGlkTW91bnQgPSB0cnVlOwogICAgICB9CiAgICAgIGNvbXBvbmVudERpZE1vdW50KCkgewogICAgICAgIHJl Z2lzdHJ5LmdldCh0aGlzLl9fbmFtZSkuc3Vicy5hZGQodGhpcy5fX3N1Yik7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMubG9naWMuY29tcG9uZW50 RGlkTW91bnQoKTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb21w b25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7CiAgICAgICAgdGhpcy5sb2dpYy5wcm9wcyA9IHRoaXMuX191c2VyUHJvcHMoKTsKICAgICAgICBpZiAodGhp cy5fX25lZWRzRGlkTW91bnQpIHsKICAgICAgICAgIGlmICh0aGlzLnN0YXRlLl9fZXJyIHx8ICFyZWdpc3RyeS5nZXQodGhpcy5fX25hbWUpLnRwbCkgcmV0 dXJuOwogICAgICAgICAgdGhpcy5fX25lZWRzRGlkTW91bnQgPSBmYWxzZTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMubG9naWMuY29tcG9u ZW50RGlkTW91bnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgIH0KICAgICAgICB9 IGVsc2UgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhpcy5sb2dpYy5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKTsKICAgICAgICAgIH0g Y2F0Y2ggKGUpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29tcG9uZW50V2ls bFVubW91bnQoKSB7CiAgICAgICAgcmVnaXN0cnkuZ2V0KHRoaXMuX19uYW1lKS5zdWJzLmRlbGV0ZSh0aGlzLl9fc3ViKTsKICAgICAgICBpZiAoIXRoaXMu X19uZWVkc0RpZE1vdW50KSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aGlzLmxvZ2ljLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7CiAgICAgICAg ICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlbmRlcigp IHsKICAgICAgICBjb25zdCByID0gcmVnaXN0cnkuZ2V0KHRoaXMuX19uYW1lKTsKICAgICAgICBjb25zdCBjbHMgPSAic2MtaG9zdCIgKyAoci5odG1sU3Ry ZWFtaW5nID8gIiBzYy1zdHJlYW1pbmctaHRtbCIgOiAiIikgKyAoci5qc1N0cmVhbWluZyA/ICIgc2Mtc3RyZWFtaW5nLWpzIiA6ICIiKTsKICAgICAgICBj b25zdCBoaW50U3R5bGUgPSByLmh0bWxTdHJlYW1pbmcgPyBoaW50VG9NaW4odGhpcy5wcm9wcy5fX2hpbnRTaXplKSA6IHZvaWQgMDsKICAgICAgICBjb25z dCBob3N0U3R5bGUgPSB0aGlzLnByb3BzLl9faG9zdFN0eWxlIHx8IGhpbnRTdHlsZSA/IHsgLi4uaGludFN0eWxlIHx8IHt9LCAuLi50aGlzLnByb3BzLl9f aG9zdFN0eWxlIHx8IHt9IH0gOiB2b2lkIDA7CiAgICAgICAgY29uc3QgaG9zdEJhc2UgPSB7CiAgICAgICAgICBjbGFzc05hbWU6IGNscywKICAgICAgICAg IHN0eWxlOiBob3N0U3R5bGUsCiAgICAgICAgICAiZGF0YS1zYy1uYW1lIjogdGhpcy5fX25hbWUsCiAgICAgICAgICAiZGF0YS1kYy10cGwiOiB0aGlzLnBy b3BzLl9fdHBsSWQKICAgICAgICB9OwogICAgICAgIGNvbnN0IGNoYWluID0gQXJyYXkuaXNBcnJheSh0aGlzLmNvbnRleHQpID8gdGhpcy5jb250ZXh0IDog W107CiAgICAgICAgaWYgKGNoYWluLmluY2x1ZGVzKHRoaXMuX19uYW1lKSkgewogICAgICAgICAgY29uc3QgY3ljbGUgPSBbCiAgICAgICAgICAgIC4uLmNo YWluLnNsaWNlKGNoYWluLmluZGV4T2YodGhpcy5fX25hbWUpKSwKICAgICAgICAgICAgdGhpcy5fX25hbWUKICAgICAgICAgIF0uam9pbigiIFx1MjE5MiAi KTsKICAgICAgICAgIHJldHVybiBoKAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgeyAuLi5ob3N0QmFzZSwgY2xhc3NOYW1lOiBjbHMgKyAiIHNj LWhhcy1lcnJvciIgfSwKICAgICAgICAgICAgaChQbGFjZWhvbGRlciwgewogICAgICAgICAgICAgIG5hbWU6IHRoaXMuX19uYW1lLAogICAgICAgICAgICAg IGhpbnRTaXplOiB0aGlzLnByb3BzLl9faGludFNpemUsCiAgICAgICAgICAgICAgZXJyb3I6ICJjaXJjdWxhciBpbXBvcnQ6ICIgKyBjeWNsZQogICAgICAg ICAgICB9KQogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuc3RhdGUuX19lcnIpIHsKICAgICAgICAgIHJldHVybiBoKAogICAgICAg ICAgICAiZGl2IiwKICAgICAgICAgICAgeyAuLi5ob3N0QmFzZSwgY2xhc3NOYW1lOiBjbHMgKyAiIHNjLWhhcy1lcnJvciIgfSwKICAgICAgICAgICAgaCgK ICAgICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgICB7IGNsYXNzTmFtZTogInNjLWxvZ2ljLWVycm9yIiwgImRhdGEtb21lbGV0dGUtY2hyb21lIjog IiIgfSwKICAgICAgICAgICAgICB0aGlzLl9fbmFtZSArICI6ICIgKyB0aGlzLnN0YXRlLl9fZXJyCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGgoUGxh Y2Vob2xkZXIsIHsKICAgICAgICAgICAgICBuYW1lOiB0aGlzLl9fbmFtZSwKICAgICAgICAgICAgICBoaW50U2l6ZTogdGhpcy5wcm9wcy5fX2hpbnRTaXpl LAogICAgICAgICAgICAgIGVycm9yOiB0aGlzLnN0YXRlLl9fZXJyCiAgICAgICAgICAgIH0pCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICB0aGlz Ll9fcmVjb25jaWxlTG9naWMoKTsKICAgICAgICBpZiAoIXIudHBsKSB7CiAgICAgICAgICByZXR1cm4gaCgKICAgICAgICAgICAgImRpdiIsCiAgICAgICAg ICAgIGhvc3RCYXNlLAogICAgICAgICAgICBoKFBsYWNlaG9sZGVyLCB7IG5hbWU6IHRoaXMuX19uYW1lLCBoaW50U2l6ZTogdGhpcy5wcm9wcy5fX2hpbnRT aXplIH0pCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBjb25zdCB1c2VyUHJvcHMgPSB0aGlzLl9fdXNlclByb3BzKCk7CiAgICAgICAgdGhpcy5s b2dpYy5wcm9wcyA9IHVzZXJQcm9wczsKICAgICAgICBsZXQgdmFscyA9IHVzZXJQcm9wczsKICAgICAgICBsZXQgcmVuZGVyRXJyID0gci5sb2dpY0Vycm9y IHx8IHRoaXMuX19jdG9yRXJyb3I7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhbHMgPSB7IC4uLnVzZXJQcm9wcywgLi4udGhpcy5sb2dpYy5yZW5kZXJW YWxzKCkgfHwge30gfTsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpOwogICAgICAgICAgcmVuZGVyRXJyID0gdGhp cy5fX25hbWUgKyAiLnJlbmRlclZhbHMoKTogIiArIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTsK ICAgICAgICB9CiAgICAgICAgdGhpcy5fX3N0cmVhbWluZ05vdyA9ICEhKHIuaHRtbFN0cmVhbWluZyB8fCByLmpzU3RyZWFtaW5nKTsKICAgICAgICB0aGlz Ll9faHRtbFN0cmVhbWluZ05vdyA9ICEhci5odG1sU3RyZWFtaW5nOwogICAgICAgIHJldHVybiBoKAogICAgICAgICAgImRpdiIsCiAgICAgICAgICB7IC4u Lmhvc3RCYXNlLCBjbGFzc05hbWU6IGNscyArIChyZW5kZXJFcnIgPyAiIHNjLWhhcy1lcnJvciIgOiAiIikgfSwKICAgICAgICAgIHJlbmRlckVyciAmJiBo KAogICAgICAgICAgICAiZGl2IiwKICAgICAgICAgICAgeyBjbGFzc05hbWU6ICJzYy1sb2dpYy1lcnJvciIsICJkYXRhLW9tZWxldHRlLWNocm9tZSI6ICIi IH0sCiAgICAgICAgICAgIHJlbmRlckVycgogICAgICAgICAgKSwKICAgICAgICAgIGgoCiAgICAgICAgICAgIEFuY2VzdG9yQ29udGV4dC5Qcm92aWRlciwK ICAgICAgICAgICAgeyB2YWx1ZTogWy4uLmNoYWluLCB0aGlzLl9fbmFtZV0gfSwKICAgICAgICAgICAgci50cGwodmFscywgdGhpcykKICAgICAgICAgICkK ICAgICAgICApOwogICAgICB9CiAgICB9CiAgICBfX3B1YmxpY0ZpZWxkKFN0cmVhbWFibGVDb21wb25lbnQsICJjb250ZXh0VHlwZSIsIEFuY2VzdG9yQ29u dGV4dCk7CiAgICBjb25zdCBuYW1lZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBmdW5jdGlvbiBnZXREQyhuYW1lKSB7CiAgICAgIGNvbnN0 IGhpdCA9IG5hbWVkLmdldChuYW1lKTsKICAgICAgaWYgKGhpdCkgcmV0dXJuIGhpdDsKICAgICAgZnVuY3Rpb24gRGlzcGF0Y2hlcihwKSB7CiAgICAgICAg Y29uc3QgWywgc2V0VGlja10gPSBSZWFjdC51c2VTdGF0ZSgwKTsKICAgICAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4gewogICAgICAgICAgY29uc3Qgc3Vi ID0gKCkgPT4gc2V0VGljaygobikgPT4gbiArIDEpOwogICAgICAgICAgcmVnaXN0cnkuZ2V0KG5hbWUpLnN1YnMuYWRkKHN1Yik7CiAgICAgICAgICByZXR1 cm4gKCkgPT4gewogICAgICAgICAgICByZWdpc3RyeS5nZXQobmFtZSkuc3Vicy5kZWxldGUoc3ViKTsKICAgICAgICAgIH07CiAgICAgICAgfSwgW10pOwog ICAgICAgIGVuc3VyZUZldGNoZWQobmFtZSk7CiAgICAgICAgcmV0dXJuIGgoU3RyZWFtYWJsZUNvbXBvbmVudCwgeyAuLi5wLCBfX25hbWU6IG5hbWUgfSk7 CiAgICAgIH0KICAgICAgRGlzcGF0Y2hlci5kaXNwbGF5TmFtZSA9IG5hbWU7CiAgICAgIG5hbWVkLnNldChuYW1lLCBEaXNwYXRjaGVyKTsKICAgICAgcmV0 dXJuIERpc3BhdGNoZXI7CiAgICB9CiAgICByZXR1cm4gewogICAgICBnZXREQywKICAgICAgU3RyZWFtYWJsZUNvbXBvbmVudAogICAgfTsKICB9CgogIC8v IHNyYy9idW5kbGVkLnRzCiAgZnVuY3Rpb24gYnVuZGxlZEJsb2IodXJsKSB7CiAgICBjb25zdCBibG9icyA9IHdpbmRvdy5fX3Jlc291cmNlQmxvYnM7CiAg ICBjb25zdCBiID0gYmxvYnMgPyBibG9ic1t1cmwuc3BsaXQoIiMiKVswXV0gOiB2b2lkIDA7CiAgICByZXR1cm4gYiBpbnN0YW5jZW9mIEJsb2IgPyBiIDog bnVsbDsKICB9CgogIC8vIHNyYy9jZG4udHMKICB2YXIgUkVBQ1RfVVJMID0gImh0dHBzOi8vdW5wa2cuY29tL3JlYWN0QDE4LjMuMS91bWQvcmVhY3QucHJv ZHVjdGlvbi5taW4uanMiOwogIHZhciBSRUFDVF9TUkkgPSAic2hhMzg0LURHeUx4QXlqcTBmOVNQcFZldkQ2SWd6dENGbG5NRjZvVy9YUUdtZmUrSXNaOFRx RWlEcmNIa01MS0k2ZmlCL1oiOwogIHZhciBSRUFDVF9ET01fVVJMID0gImh0dHBzOi8vdW5wa2cuY29tL3JlYWN0LWRvbUAxOC4zLjEvdW1kL3JlYWN0LWRv bS5wcm9kdWN0aW9uLm1pbi5qcyI7CiAgdmFyIFJFQUNUX0RPTV9TUkkgPSAic2hhMzg0LWdUR3hoejIxbFZHWU5NY2RKT3lxMDFFZGcwamhuL2MyMm5zeDBr eXFQMFR4YVY1V1Zkc1NIMWZTRFVmNVlKajEiOwogIHZhciBCQUJFTF9VUkwgPSAiaHR0cHM6Ly91bnBrZy5jb20vQGJhYmVsL3N0YW5kYWxvbmVANy4yOS4w L2JhYmVsLm1pbi5qcyI7CiAgdmFyIEJBQkVMX1NSSSA9ICJzaGEzODQtbTA4S2lkaU5xTGRwSnFMcTk1Ry9MRWk4UXZqbC94VVlsbDNRSUx5cE1vUTY1UW9y SjlMdnRwMlJYWUdCRmoxeSI7CiAgZnVuY3Rpb24gY2RuU2NyaXB0Rm9yKHVybCwgc3JpKSB7CiAgICBjb25zdCByZXMgPSB3aW5kb3cuX19yZXNvdXJjZXM7 CiAgICBjb25zdCB2ID0gcmVzID8gcmVzW3VybF0gOiB2b2lkIDA7CiAgICByZXR1cm4gdHlwZW9mIHYgPT09ICJzdHJpbmciICYmIHYgPyB7IHNyYzogdiB9 IDogeyBzcmM6IHVybCwgaW50ZWdyaXR5OiBzcmkgfTsKICB9CgogIC8vIHNyYy9leHRlcm5hbC50cwogIHZhciBpc0N1c3RvbUVsZW1lbnROYW1lID0gKG4p ID0+ICFuLmluY2x1ZGVzKCIuIikgJiYgbi5pbmNsdWRlcygiLSIpOwogIGZ1bmN0aW9uIGlzUmVuZGVyYWJsZVR5cGUoZykgewogICAgaWYgKHR5cGVvZiBn ID09PSAiZnVuY3Rpb24iKSByZXR1cm4gIWlzRWxlbWVudENsYXNzKGcpOwogICAgcmV0dXJuIHR5cGVvZiBnID09PSAib2JqZWN0IiAmJiBnICE9PSBudWxs ICYmIHR5cGVvZiBnLiQkdHlwZW9mID09PSAic3ltYm9sIjsKICB9CiAgZnVuY3Rpb24gcmVzb2x2ZURvdHRlZFBhdGgocm9vdCwgbmFtZSkgewogICAgbGV0 IGN1ciA9IHJvb3Q7CiAgICBmb3IgKGNvbnN0IHNlZyBvZiBuYW1lLnNwbGl0KCIuIikpIHsKICAgICAgaWYgKGN1ciA9PSBudWxsKSByZXR1cm4gdm9pZCAw OwogICAgICBjdXIgPSBjdXJbc2VnXTsKICAgIH0KICAgIHJldHVybiBjdXI7CiAgfQogIHZhciBHTE9CQUxfUE9MTF9JTlRFUlZBTF9NUyA9IDUwOwogIHZh ciBHTE9CQUxfUE9MTF9USU1FT1VUX01TID0gM2U0OwogIGZ1bmN0aW9uIGNyZWF0ZUV4dGVybmFsTW9kdWxlcyhvblJlc29sdmVkKSB7CiAgICBjb25zdCBj YWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBsZXQgYmFiZWxMb2FkaW5nID0gbnVsbDsKICAgIGNvbnN0IHJlcG9ydGVkTWlzc2luZyA9 IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjb25zdCBwb2xsaW5nID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIGZ1bmN0aW9uIGVu c3VyZUJhYmVsKCkgewogICAgICBpZiAod2luZG93LkJhYmVsKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgIGlmIChiYWJlbExvYWRpbmcpIHJl dHVybiBiYWJlbExvYWRpbmc7CiAgICAgIGNvbnN0IGJhYmVsID0gY2RuU2NyaXB0Rm9yKEJBQkVMX1VSTCwgQkFCRUxfU1JJKTsKICAgICAgYmFiZWxMb2Fk aW5nID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7CiAgICAgICAgY29uc3QgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAg ICAgIHMuc3JjID0gYmFiZWwuc3JjOwogICAgICAgIGlmIChiYWJlbC5pbnRlZ3JpdHkpIHsKICAgICAgICAgIHMuaW50ZWdyaXR5ID0gYmFiZWwuaW50ZWdy aXR5OwogICAgICAgICAgcy5jcm9zc09yaWdpbiA9ICJhbm9ueW1vdXMiOwogICAgICAgIH0KICAgICAgICBzLm9ubG9hZCA9ICgpID0+IHJlcygpOwogICAg ICAgIHMub25lcnJvciA9IHJlajsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGJhYmVsTG9h ZGluZzsKICAgIH0KICAgIGNvbnN0IHBlbmRpbmcgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZnVuY3Rpb24gbG9hZChraW5kLCB1cmwsIGFm dGVyKSB7CiAgICAgIGNvbnN0IGV4aXN0aW5nID0gcGVuZGluZy5nZXQodXJsKTsKICAgICAgaWYgKGV4aXN0aW5nKSByZXR1cm4gZXhpc3Rpbmc7CiAgICAg IGNhY2hlLnNldCh1cmwsIG51bGwpOwogICAgICBjb25zb2xlLmluZm8oIltkYy1ydW50aW1lXSB4LWltcG9ydDogbG9hZGluZyIsIHVybCwgIigiICsga2lu ZCArICIpIik7CiAgICAgIGNvbnN0IHJlYWR5ID0gUHJvbWlzZS5hbGwoWwogICAgICAgIGtpbmQgPT09ICJqc3giID8gZW5zdXJlQmFiZWwoKSA6IFByb21p c2UucmVzb2x2ZSgpLAogICAgICAgIGFmdGVyID8/IFByb21pc2UucmVzb2x2ZSgpCiAgICAgIF0pOwogICAgICBjb25zdCBwID0gcmVhZHkudGhlbigoKSA9 PiB7CiAgICAgICAgY29uc3QgcHJlID0gYnVuZGxlZEJsb2IodXJsKTsKICAgICAgICBpZiAocHJlKSByZXR1cm4gcHJlLnRleHQoKTsKICAgICAgICByZXR1 cm4gZmV0Y2godXJsKS50aGVuKChyKSA9PiB7CiAgICAgICAgICBpZiAoIXIub2spIHRocm93IG5ldyBFcnJvcigiSFRUUCAiICsgci5zdGF0dXMpOwogICAg ICAgICAgcmV0dXJuIHIudGV4dCgpOwogICAgICAgIH0pOwogICAgICB9KS50aGVuKChzcmMpID0+IHsKICAgICAgICBjb25zdCBjb2RlID0ga2luZCA9PT0g ImpzeCIgPyB3aW5kb3cuQmFiZWwudHJhbnNmb3JtKHNyYywgewogICAgICAgICAgZmlsZW5hbWU6IHVybCwKICAgICAgICAgIHByZXNldHM6IFsicmVhY3Qi LCAidHlwZXNjcmlwdCJdCiAgICAgICAgfSkuY29kZSA6IHNyYzsKICAgICAgICBjb25zdCBtb2R1bGUgPSB7IGV4cG9ydHM6IHt9IH07CiAgICAgICAgY29u c3QgYmVmb3JlID0gbmV3IFNldChPYmplY3Qua2V5cyh3aW5kb3cpKTsKICAgICAgICAvLyEgbm9zZW1ncmVwOiBldmFsLWFuZC1mdW5jdGlvbi1jb25zdHJ1 Y3RvcgogICAgICAgIG5ldyBGdW5jdGlvbigiUmVhY3QiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAicmVxdWlyZSIsIGNvZGUpKAogICAgICAgICAgZ2V0UmVh Y3QoKSwKICAgICAgICAgIG1vZHVsZSwKICAgICAgICAgIG1vZHVsZS5leHBvcnRzLAogICAgICAgICAgKCkgPT4gKHt9KQogICAgICAgICk7CiAgICAgICAg Y29uc3QgZ2xvYmFscyA9IHt9OwogICAgICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh3aW5kb3cpKSB7CiAgICAgICAgICBpZiAoIWJlZm9yZS5o YXMoaykgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICBnbG9iYWxzW2tdID0gd2luZG93W2tdOwogICAgICAgICAg fQogICAgICAgIH0KICAgICAgICBjYWNoZS5zZXQodXJsLCB7IG1vZDogbW9kdWxlLmV4cG9ydHMsIGdsb2JhbHMgfSk7CiAgICAgICAgY29uc29sZS5pbmZv KAogICAgICAgICAgIltkYy1ydW50aW1lXSB4LWltcG9ydDogbG9hZGVkIiwKICAgICAgICAgIHVybCwKICAgICAgICAgICJcdTIwMTQgZXhwb3J0czoiLAog ICAgICAgICAgT2JqZWN0LmtleXMobW9kdWxlLmV4cG9ydHMpLAogICAgICAgICAgIndpbmRvdyBnbG9iYWxzOiIsCiAgICAgICAgICBPYmplY3Qua2V5cyhn bG9iYWxzKQogICAgICAgICk7CiAgICAgICAgb25SZXNvbHZlZCgpOwogICAgICB9KS5jYXRjaCgoZSkgPT4gewogICAgICAgIGNhY2hlLnNldCh1cmwsIHsK ICAgICAgICAgIG1vZDoge30sCiAgICAgICAgICBnbG9iYWxzOiB7fSwKICAgICAgICAgIGVycm9yOiAiZmFpbGVkIHRvIGxvYWQ6ICIgKyAoZSBpbnN0YW5j ZW9mIEVycm9yICYmIGUubWVzc2FnZSA/IGUubWVzc2FnZSA6IFN0cmluZyhlKSkKICAgICAgICB9KTsKICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAg ICAgIltkYy1ydW50aW1lXSB4LWltcG9ydDogRkFJTEVEIHRvIGxvYWQiLAogICAgICAgICAgdXJsLAogICAgICAgICAgIigiICsga2luZCArICIpIiwKICAg ICAgICAgIGUKICAgICAgICApOwogICAgICAgIG9uUmVzb2x2ZWQoKTsKICAgICAgfSk7CiAgICAgIHBlbmRpbmcuc2V0KHVybCwgcCk7CiAgICAgIHJldHVy biBwOwogICAgfQogICAgZnVuY3Rpb24gcmVzb2x2ZTIodXJsLCBuYW1lKSB7CiAgICAgIGNvbnN0IGVudHJ5ID0gY2FjaGUuZ2V0KHVybCk7CiAgICAgIGlm ICghZW50cnkpIHJldHVybiBudWxsOwogICAgICBjb25zdCB7IG1vZCwgZ2xvYmFscyB9ID0gZW50cnk7CiAgICAgIGNvbnN0IEMgPSBtb2QgJiYgbW9kW25h bWVdIHx8IGdsb2JhbHMgJiYgZ2xvYmFsc1tuYW1lXSB8fCB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiAmJiB3aW5kb3dbbmFtZV0gfHwgbW9kICYm IG1vZC5kZWZhdWx0OwogICAgICBpZiAodHlwZW9mIEMgPT09ICJmdW5jdGlvbiIpIHJldHVybiBDOwogICAgICBjb25zdCBrZXkgPSB1cmwgKyAiXDAiICsg bmFtZTsKICAgICAgaWYgKCFyZXBvcnRlZE1pc3NpbmcuaGFzKGtleSkpIHsKICAgICAgICByZXBvcnRlZE1pc3Npbmcuc2V0KAogICAgICAgICAga2V5LAog ICAgICAgICAgZW50cnkuZXJyb3IgfHwgJ25vIGV4cG9ydCBuYW1lZCAiJyArIG5hbWUgKyAnIiAoaGFzOiAnICsgT2JqZWN0LmtleXMobW9kKS5qb2luKCIs ICIpICsgIikiCiAgICAgICAgKTsKICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAgICAgIltkYy1ydW50aW1lXSB4LWltcG9ydDogbW9kdWxlIiwKICAg ICAgICAgIHVybCwKICAgICAgICAgICJsb2FkZWQgYnV0IGhhcyBubyBjb21wb25lbnQgbmFtZWQiLAogICAgICAgICAgSlNPTi5zdHJpbmdpZnkobmFtZSks CiAgICAgICAgICAiXHUyMDE0IGF2YWlsYWJsZSBleHBvcnRzOiIsCiAgICAgICAgICBPYmplY3Qua2V5cyhtb2QpLAogICAgICAgICAgIndpbmRvdyBnbG9i YWxzOiIsCiAgICAgICAgICBPYmplY3Qua2V5cyhnbG9iYWxzKSwKICAgICAgICAgICIuIFRoZSBtb2R1bGUgbXVzdCBgbW9kdWxlLmV4cG9ydHMgPSB7IiAr IG5hbWUgKyAifWAgb3Igc2V0IGB3aW5kb3cuIiArIG5hbWUgKyAiYC4iCiAgICAgICAgKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAg IGZ1bmN0aW9uIHdhaXRGb3JHbG9iYWwobmFtZSkgewogICAgICBpZiAocG9sbGluZy5oYXMobmFtZSkpIHJldHVybjsKICAgICAgcG9sbGluZy5hZGQobmFt ZSk7CiAgICAgIGNvbnN0IHN0YXJ0ZWQgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBpc0NFID0gaXNDdXN0b21FbGVtZW50TmFtZShuYW1lKTsKICAgICAg Y29uc3QgdGljayA9ICgpID0+IHsKICAgICAgICBjb25zdCBmb3VuZCA9IGlzQ0UgPyBjdXN0b21FbGVtZW50cy5nZXQobmFtZSkgOiBpc1JlbmRlcmFibGVU eXBlKHJlc29sdmVEb3R0ZWRQYXRoKHdpbmRvdywgbmFtZSkpOwogICAgICAgIGlmIChmb3VuZCkgewogICAgICAgICAgcG9sbGluZy5kZWxldGUobmFtZSk7 CiAgICAgICAgICBvblJlc29sdmVkKCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnRlZCA+PSBH TE9CQUxfUE9MTF9USU1FT1VUX01TKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oCiAgICAgICAgICAgICJbZGMtcnVudGltZV0geC1pbXBvcnQ6IGdsb2Jh bCIsCiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KG5hbWUpLAogICAgICAgICAgICAibmV2ZXIgYXBwZWFyZWQgb24gd2luZG93IGFmdGVyICIgKyBHTE9C QUxfUE9MTF9USU1FT1VUX01TICsgIm1zIgogICAgICAgICAgKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgc2V0VGltZW91dCh0aWNr LCBHTE9CQUxfUE9MTF9JTlRFUlZBTF9NUyk7CiAgICAgIH07CiAgICAgIHNldFRpbWVvdXQodGljaywgR0xPQkFMX1BPTExfSU5URVJWQUxfTVMpOwogICAg fQogICAgZnVuY3Rpb24gcmVzb2x2ZUdsb2JhbCh1cmwsIG5hbWUpIHsKICAgICAgY29uc3QgaXNDRSA9IGlzQ3VzdG9tRWxlbWVudE5hbWUobmFtZSk7CiAg ICAgIGlmICghdXJsKSB7CiAgICAgICAgaWYgKGlzQ0UpIHsKICAgICAgICAgIGlmIChjdXN0b21FbGVtZW50cy5nZXQobmFtZSkpIHJldHVybiBuYW1lOwog ICAgICAgICAgd2FpdEZvckdsb2JhbChuYW1lKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBjb25zdCBnMiA9IHJlc29sdmVE b3R0ZWRQYXRoKHdpbmRvdywgbmFtZSk7CiAgICAgICAgaWYgKGlzUmVuZGVyYWJsZVR5cGUoZzIpKSByZXR1cm4gZzI7CiAgICAgICAgd2FpdEZvckdsb2Jh bChuYW1lKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBlbnRyeSA9IGNhY2hlLmdldCh1cmwpOwogICAgICBpZiAoIWVudHJ5 KSByZXR1cm4gbnVsbDsKICAgICAgaWYgKGlzQ0UgJiYgY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpKSByZXR1cm4gbmFtZTsKICAgICAgY29uc3QgZyA9IGVu dHJ5Lmdsb2JhbHNbbmFtZV0gPz8gcmVzb2x2ZURvdHRlZFBhdGgod2luZG93LCBuYW1lKTsKICAgICAgaWYgKGlzUmVuZGVyYWJsZVR5cGUoZykpIHJldHVy biBnOwogICAgICBpZiAobmFtZS5pbmNsdWRlcygiLiIpKSByZXR1cm4gbnVsbDsKICAgICAgY29uc3Qga2V5ID0gdXJsICsgIlwwZ2xvYmFsXDAiICsgbmFt ZTsKICAgICAgaWYgKCFyZXBvcnRlZE1pc3NpbmcuaGFzKGtleSkpIHsKICAgICAgICByZXBvcnRlZE1pc3Npbmcuc2V0KGtleSwgbnVsbCk7CiAgICAgICAg aWYgKGlzQ0UgJiYgIWN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSkgewogICAgICAgICAgY29uc29sZS53YXJuKAogICAgICAgICAgICAiW2RjLXJ1bnRpbWVd IHgtaW1wb3J0OiIsCiAgICAgICAgICAgIHVybCwKICAgICAgICAgICAgImxvYWRlZCBidXQgbm8gY3VzdG9tIGVsZW1lbnQiLAogICAgICAgICAgICBKU09O LnN0cmluZ2lmeShuYW1lKSwKICAgICAgICAgICAgImlzIHJlZ2lzdGVyZWQgYW5kIHdpbmRvdy4iICsgbmFtZSArICIgaXMgbm90IGEgZnVuY3Rpb24gXHUy MDE0IHJlbmRlcmluZyA8IiArIG5hbWUgKyAiPiBhcyBhbiB1bmtub3duIGVsZW1lbnQuIgogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0KICAgICAg cmV0dXJuIG5hbWU7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRFcnJvcih1cmwsIG5hbWUpIHsKICAgICAgY29uc3QgZW50cnkgPSBjYWNoZS5nZXQodXJsKTsK ICAgICAgaWYgKGVudHJ5Py5lcnJvcikgcmV0dXJuIGVudHJ5LmVycm9yOwogICAgICByZXR1cm4gcmVwb3J0ZWRNaXNzaW5nLmdldCh1cmwgKyAiXDAiICsg bmFtZSkgfHwgbnVsbDsKICAgIH0KICAgIHJldHVybiB7IGxvYWQsIHJlc29sdmU6IHJlc29sdmUyLCByZXNvbHZlR2xvYmFsLCBnZXRFcnJvciB9OwogIH0K ICBmdW5jdGlvbiBpc0VsZW1lbnRDbGFzcyhnKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gdHlwZW9mIGcgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIEhU TUxFbGVtZW50ICE9PSAidW5kZWZpbmVkIiAmJiBnLnByb3RvdHlwZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVy biBmYWxzZTsKICAgIH0KICB9CgogIC8vIHNyYy9hdG9taWNzLnRzCiAgdmFyIEFUT01JQ19DU1MgPSAoCiAgICAvLyBsYXlvdXQKICAgICIuZnh7ZGlzcGxh eTpmbGV4fS5jb2x7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uZ3JpZHtkaXNwbGF5OmdyaWR9LmFje2FsaWduLWl0ZW1zOmNlbnRlcn0u amN7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uamJ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmYxe2ZsZXg6MX0ubm9zaHJpbmt7ZmxleC1zaHJp bms6MH0ud3JhcHtmbGV4LXdyYXA6d3JhcH0uZnc1e2ZvbnQtd2VpZ2h0OjUwMH0uZnc2e2ZvbnQtd2VpZ2h0OjYwMH0uZnc3e2ZvbnQtd2VpZ2h0OjcwMH0u Znc4e2ZvbnQtd2VpZ2h0OjgwMH0uZnMxMXtmb250LXNpemU6MTFweH0uZnMxMntmb250LXNpemU6MTJweH0uZnMxM3tmb250LXNpemU6MTNweH0uZnMxNHtm b250LXNpemU6MTRweH0uZnMxNXtmb250LXNpemU6MTVweH0uZnMxNntmb250LXNpemU6MTZweH0uZnMyMHtmb250LXNpemU6MjBweH0uZnMyMntmb250LXNp emU6MjJweH0udXBwZXJ7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfS50Y3t0ZXh0LWFsaWduOmNlbnRlcn0ubm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0u Z2FwOHtnYXA6OHB4fS5nYXAxMHtnYXA6MTBweH0uZ2FwMTJ7Z2FwOjEycHh9LmdhcDE2e2dhcDoxNnB4fS5nYXAyNHtnYXA6MjRweH0ubTB7bWFyZ2luOjB9 Lm10OHttYXJnaW4tdG9wOjhweH0ubXQxMnttYXJnaW4tdG9wOjEycHh9Lm10MTZ7bWFyZ2luLXRvcDoxNnB4fS5tYjh7bWFyZ2luLWJvdHRvbTo4cHh9Lm1i MTJ7bWFyZ2luLWJvdHRvbToxMnB4fS5tYjE2e21hcmdpbi1ib3R0b206MTZweH0ucG9zcmVse3Bvc2l0aW9uOnJlbGF0aXZlfS5wb3NhYnN7cG9zaXRpb246 YWJzb2x1dGV9LnJvdW5ke2JvcmRlci1yYWRpdXM6NTAlfS5vaGlkZXtvdmVyZmxvdzpoaWRkZW59LmJib3h7Ym94LXNpemluZzpib3JkZXItYm94fS5wb2lu dGVye2N1cnNvcjpwb2ludGVyfS53MTAwe3dpZHRoOjEwMCV9LmIwe2JvcmRlcjpub25lfSIKICApOwoKICAvLyBzcmMvaGVsbWV0LnRzCiAgdmFyIERFU0lH Tl9ET0NfTU9ERV9SRSA9IC88bWV0YVxiW14+XSpcYm5hbWVccyo9XHMqWyInXWRlc2lnbl9kb2NfbW9kZVsiJ11bXj5dKlxiKD86Y29udGVudHx2YWx1ZSlc cyo9XHMqWyInXShcdyspWyInXS9pOwogIHZhciBDQU5WQVNfQkdfTElHSFQgPSAiI2YwZWVlNiI7CiAgdmFyIENBTlZBU19CR19EQVJLID0gIiMyZTJjMjYi OwogIGZ1bmN0aW9uIGNyZWF0ZUhlbG1ldE1hbmFnZXIoZG9jLCBpc1N0cmVhbWluZykgewogICAgY29uc3QgbW91bnRlZCA9IC8qIEBfX1BVUkVfXyAqLyBu ZXcgU2V0KCk7CiAgICBjb25zdCBsaXZlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIGxldCBkZXNpZ25Eb2NNb2RlID0gbnVsbDsKICAgIGxl dCBjYW52YXNTdHlsZUVsID0gbnVsbDsKICAgIGxldCBhcHBUaGVtZSA9ICJsaWdodCI7CiAgICB0cnkgewogICAgICBjb25zdCBkcyA9IGRvYy5kb2N1bWVu dEVsZW1lbnQuZGF0YXNldC50aGVtZTsKICAgICAgYXBwVGhlbWUgPSBkcyA9PT0gImRhcmsiIHx8IGRzID09PSAibGlnaHQiID8gZHMgOiBuZXcgVVJMU2Vh cmNoUGFyYW1zKGRvYy5kZWZhdWx0Vmlldz8ubG9jYXRpb24uc2VhcmNoID8/ICIiKS5nZXQoCiAgICAgICAgInRoZW1lIgogICAgICApID09PSAiZGFyayIg PyAiZGFyayIgOiAibGlnaHQiOwogICAgfSBjYXRjaCB7CiAgICB9CiAgICBmdW5jdGlvbiBhcHBseUNhbnZhc0JnKCkgewogICAgICBpZiAoIWNhbnZhc1N0 eWxlRWwpIHJldHVybjsKICAgICAgY29uc3QgYmcgPSBhcHBUaGVtZSA9PT0gImRhcmsiID8gQ0FOVkFTX0JHX0RBUksgOiBDQU5WQVNfQkdfTElHSFQ7CiAg ICAgIGNhbnZhc1N0eWxlRWwudGV4dENvbnRlbnQgPSBgaHRtbCxib2R5e2JhY2tncm91bmQ6JHtiZ319I2RjLXJvb3Q+LnNjLWhvc3R7cG9zaXRpb246cmVs YXRpdmV9YDsKICAgIH0KICAgIGZ1bmN0aW9uIHBvc3REZXNpZ25Nb2RlKG1vZGUpIHsKICAgICAgaWYgKHdpbmRvdy5wYXJlbnQgPT09IHdpbmRvdykgcmV0 dXJuOwogICAgICB0cnkgewogICAgICAgIHdpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2UoeyB0eXBlOiAiX19kY19kZXNpZ25fbW9kZSIsIG1vZGUgfSwgIioi KTsKICAgICAgfSBjYXRjaCB7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHNldERlc2lnbkRvY01vZGUobW9kZSkgewogICAgICBpZiAobW9kZSA9PT0g ZGVzaWduRG9jTW9kZSkgcmV0dXJuOwogICAgICBkZXNpZ25Eb2NNb2RlID0gbW9kZTsKICAgICAgcG9zdERlc2lnbk1vZGUobW9kZSk7CiAgICAgIGlmICht b2RlID09PSAiY2FudmFzIikgewogICAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuc2V0QXR0cmlidXRlKCJkYXRhLWRjLWNhbnZhcyIsICIiKTsKICAgICAg ICBjYW52YXNTdHlsZUVsID0gZG9jLmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgY2FudmFzU3R5bGVFbC5zZXRBdHRyaWJ1dGUoImRhdGEtZGMt Y2FudmFzIiwgIiIpOwogICAgICAgIGFwcGx5Q2FudmFzQmcoKTsKICAgICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChjYW52YXNTdHlsZUVsKTsKICAgICAg fSBlbHNlIHsKICAgICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiZGF0YS1kYy1jYW52YXMiKTsKICAgICAgICBjYW52YXNTdHls ZUVsPy5yZW1vdmUoKTsKICAgICAgICBjYW52YXNTdHlsZUVsID0gbnVsbDsKICAgICAgfQogICAgfQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1l c3NhZ2UiLCAoZSkgPT4gewogICAgICBjb25zdCB0eXBlID0gZS5kYXRhICYmIGUuZGF0YS50eXBlOwogICAgICBpZiAodHlwZSA9PT0gIl9fZGNfdGhlbWUi KSB7CiAgICAgICAgY29uc3QgdCA9IGUuZGF0YS50aGVtZTsKICAgICAgICBpZiAodCA9PT0gImxpZ2h0IiB8fCB0ID09PSAiZGFyayIpIHsKICAgICAgICAg IGFwcFRoZW1lID0gdDsKICAgICAgICAgIGFwcGx5Q2FudmFzQmcoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghZGVz aWduRG9jTW9kZSB8fCB0eXBlICE9PSAiX19kY19wcm9iZSIpIHJldHVybjsKICAgICAgcG9zdERlc2lnbk1vZGUoZGVzaWduRG9jTW9kZSk7CiAgICB9KTsK ICAgIGZ1bmN0aW9uIGNvbXBpbGUobm9kZSkgewogICAgICBjb25zdCByYXcgPSBbLi4ubm9kZS5jaGlsZHJlbl07CiAgICAgIGNvbnN0IGhlbG1ldENsb3Nl ZCA9IG5vZGUubmV4dFNpYmxpbmcgIT0gbnVsbCB8fCBub2RlLnBhcmVudE5vZGU/Lm5leHRTaWJsaW5nICE9IG51bGw7CiAgICAgIGlmIChub2RlLmhhc0F0 dHJpYnV0ZSgiZGF0YS1kYy1hdG9taWNzIikgJiYgIW1vdW50ZWQuaGFzKCJfX2RjLWF0b21pY3MiKSkgewogICAgICAgIG1vdW50ZWQuYWRkKCJfX2RjLWF0 b21pY3MiKTsKICAgICAgICBjb25zdCBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIGVsLmlkID0gIl9fZGMtYXRvbWljcyI7CiAg ICAgICAgZWwudGV4dENvbnRlbnQgPSBBVE9NSUNfQ1NTOwogICAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKGVsKTsKICAgICAgfQogICAgICByZXR1cm4g KF92YWxzLCBjdHgpID0+IHsKICAgICAgICBjb25zdCBuYW1lID0gY3R4ICYmIGN0eC5fX25hbWUgfHwgIiI7CiAgICAgICAgY29uc3Qgc3RyZWFtaW5nID0g ISEobmFtZSAmJiBpc1N0cmVhbWluZyhuYW1lKSk7CiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByYXcubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGNv bnN0IGNoaWxkID0gcmF3W2ldOwogICAgICAgICAgY29uc3QgdGFnID0gY2hpbGQudGFnTmFtZTsKICAgICAgICAgIGNvbnN0IG1heUJlUGFydGlhbCA9IHN0 cmVhbWluZyAmJiAhaGVsbWV0Q2xvc2VkICYmIGkgPT09IHJhdy5sZW5ndGggLSAxOwogICAgICAgICAgaWYgKHRhZyA9PT0gIlNDUklQVCIpIHsKICAgICAg ICAgICAgaWYgKG1heUJlUGFydGlhbCkgY29udGludWU7CiAgICAgICAgICAgIGNvbnN0IGtleSA9ICJTQ1JJUFR8IiArIChjaGlsZC5nZXRBdHRyaWJ1dGUo InNyYyIpIHx8IGNoaWxkLnRleHRDb250ZW50IHx8ICIiKTsKICAgICAgICAgICAgaWYgKG1vdW50ZWQuaGFzKGtleSkpIGNvbnRpbnVlOwogICAgICAgICAg ICBtb3VudGVkLmFkZChrZXkpOwogICAgICAgICAgICBjb25zdCBlbCA9IGRvYy5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICAgICAgZm9yIChj b25zdCB7IG5hbWU6IGFuLCB2YWx1ZSB9IG9mIFsuLi5jaGlsZC5hdHRyaWJ1dGVzXSkKICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoYW4sIHZhbHVl KTsKICAgICAgICAgICAgaWYgKGNoaWxkLnRleHRDb250ZW50KSBlbC50ZXh0Q29udGVudCA9IGNoaWxkLnRleHRDb250ZW50OwogICAgICAgICAgICBkb2Mu aGVhZC5hcHBlbmRDaGlsZChlbCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gIkxJTksiIHx8IHRhZyA9PT0gIk1FVEEiKSB7CiAgICAgICAgICAg IGlmIChtYXlCZVBhcnRpYWwpIGNvbnRpbnVlOwogICAgICAgICAgICBjb25zdCBrZXkgPSB0YWcgKyAifCIgKyAoY2hpbGQuZ2V0QXR0cmlidXRlKCJocmVm IikgfHwgY2hpbGQuZ2V0QXR0cmlidXRlKCJzcmMiKSB8fCBjaGlsZC5vdXRlckhUTUwpOwogICAgICAgICAgICBpZiAobW91bnRlZC5oYXMoa2V5KSkgY29u dGludWU7CiAgICAgICAgICAgIG1vdW50ZWQuYWRkKGtleSk7CiAgICAgICAgICAgIGlmICh0YWcgPT09ICJMSU5LIikgewogICAgICAgICAgICAgIGNvbnN0 IHJlbCA9IChjaGlsZC5nZXRBdHRyaWJ1dGUoInJlbCIpIHx8ICIiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KC9ccysvKTsKICAgICAgICAgICAgICBjb25zdCBo cmVmID0gKGNoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpIHx8ICIiKS50cmltKCk7CiAgICAgICAgICAgICAgY29uc3QgcmVzID0gd2luZG93Ll9fcmVzb3Vy Y2VzOwogICAgICAgICAgICAgIGNvbnN0IHByZSA9IHJlcyAmJiByZWwuaW5jbHVkZXMoInN0eWxlc2hlZXQiKSAmJiAhcmVsLmluY2x1ZGVzKCJhbHRlcm5h dGUiKSA/IHJlc1tocmVmXSA6IHZvaWQgMDsKICAgICAgICAgICAgICBjb25zdCBibG9iID0gdHlwZW9mIHByZSA9PT0gInN0cmluZyIgJiYgcHJlID8gYnVu ZGxlZEJsb2IocHJlKSA6IG51bGw7CiAgICAgICAgICAgICAgaWYgKGJsb2IpIHsKICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZG9jLmNyZWF0ZUVsZW1l bnQoInN0eWxlIik7CiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSB7CiAgICAgICAgICAgICAgICAgIGVsLnNl dEF0dHJpYnV0ZSgibWVkaWEiLCAibm90IGFsbCIpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC5nZXRBdHRyaWJ1dGUoIm1lZGlhIikpIHsK ICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCJtZWRpYSIsIGNoaWxkLmdldEF0dHJpYnV0ZSgibWVkaWEiKSk7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICBpZiAoY2hpbGQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKQogICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoInRpdGxl IiwgY2hpbGQuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTsKICAgICAgICAgICAgICAgIHZvaWQgYmxvYi50ZXh0KCkudGhlbigoY3NzKSA9PiB7CiAgICAgICAg ICAgICAgICAgIGVsLnRleHRDb250ZW50ID0gY3NzOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChl bCk7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hp bGQoY2hpbGQuY2xvbmVOb2RlKHRydWUpKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGtleSA9IG5hbWUgKyAifCIgKyBpOwogICAg ICAgICAgICBsZXQgZWwgPSBsaXZlLmdldChrZXkpOwogICAgICAgICAgICBpZiAoIWVsIHx8IGVsLnRhZ05hbWUgIT09IHRhZykgewogICAgICAgICAgICAg IGlmIChlbCkgZWwucmVtb3ZlKCk7CiAgICAgICAgICAgICAgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCh0YWcudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgICAg ICAgbGl2ZS5zZXQoa2V5LCBlbCk7CiAgICAgICAgICAgICAgZG9jLmhlYWQuYXBwZW5kQ2hpbGQoZWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZv ciAoY29uc3QgeyBuYW1lOiBhbiwgdmFsdWUgfSBvZiBbLi4uY2hpbGQuYXR0cmlidXRlc10pIHsKICAgICAgICAgICAgICBpZiAoZWwuZ2V0QXR0cmlidXRl KGFuKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShhbiwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChlbC50ZXh0Q29udGVudCAh PT0gY2hpbGQudGV4dENvbnRlbnQpCiAgICAgICAgICAgICAgZWwudGV4dENvbnRlbnQgPSBjaGlsZC50ZXh0Q29udGVudDsKICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH07CiAgICB9CiAgICByZXR1cm4geyBjb21waWxlLCBzZXREZXNpZ25Eb2NNb2RlIH07CiAgfQoKICAv LyBzcmMvcHNldWRvLnRzCiAgZnVuY3Rpb24gc2NhblVucXVvdGVkVXJsKGNzcywgaSkgewogICAgaWYgKGNzc1tpXSAhPT0gInUiICYmIGNzc1tpXSAhPT0g IlUiIHx8IGNzcy5zbGljZShpLCBpICsgNCkudG9Mb3dlckNhc2UoKSAhPT0gInVybCgiIHx8IC9bYS16MC05Xy1dL2kudGVzdChjc3NbaSAtIDFdID8/ICIi KSkgewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBsZXQgaiA9IGkgKyA0OwogICAgd2hpbGUgKGogPCBjc3MubGVuZ3RoICYmIC9ccy8udGVzdChjc3Nb al0pKSBqKys7CiAgICBpZiAoY3NzW2pdID09PSAnIicgfHwgY3NzW2pdID09PSAiJyIpIHJldHVybiAtMTsKICAgIHdoaWxlIChqIDwgY3NzLmxlbmd0aCAm JiBjc3Nbal0gIT09ICIpIikgewogICAgICBpZiAoY3NzW2pdID09PSAiXFwiKSBqKys7CiAgICAgIGorKzsKICAgIH0KICAgIHJldHVybiBqIDwgY3NzLmxl bmd0aCA/IGogKyAxIDogY3NzLmxlbmd0aDsKICB9CiAgZnVuY3Rpb24gc3RyaXBDb21tZW50cyhjc3MpIHsKICAgIGxldCBvdXQgPSAiIjsKICAgIGxldCBx dW90ZSA9ICIiOwogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjc3MubGVuZ3RoOyBpKyspIHsKICAgICAgY29uc3QgYyA9IGNzc1tpXTsKICAgICAgaWYgKHF1 b3RlKSB7CiAgICAgICAgaWYgKGMgPT09ICJcXCIpIHsKICAgICAgICAgIG91dCArPSBjICsgKGNzc1tpICsgMV0gPz8gIiIpOwogICAgICAgICAgaSsrOwog ICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChjID09PSBxdW90ZSkgcXVvdGUgPSAiIjsKICAgICAgICBvdXQgKz0gYzsKICAgICAg fSBlbHNlIGlmIChjID09PSAiJyIgfHwgYyA9PT0gJyInKSB7CiAgICAgICAgcXVvdGUgPSBjOwogICAgICAgIG91dCArPSBjOwogICAgICB9IGVsc2UgaWYg KGMgPT09ICIvIiAmJiBjc3NbaSArIDFdID09PSAiKiIpIHsKICAgICAgICBjb25zdCBlbmQgPSBjc3MuaW5kZXhPZigiKi8iLCBpICsgMik7CiAgICAgICAg aSA9IGVuZCA9PT0gLTEgPyBjc3MubGVuZ3RoIDogZW5kICsgMTsKICAgICAgICBvdXQgKz0gIiAiOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGVu ZCA9IHNjYW5VbnF1b3RlZFVybChjc3MsIGkpOwogICAgICAgIGlmIChlbmQgPT09IC0xKSBvdXQgKz0gYzsKICAgICAgICBlbHNlIHsKICAgICAgICAgIG91 dCArPSBjc3Muc2xpY2UoaSwgZW5kKTsKICAgICAgICAgIGkgPSBlbmQgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG91dDsKICB9 CiAgZnVuY3Rpb24gaW1wb3J0YW50aWZ5KGNzcykgewogICAgY3NzID0gc3RyaXBDb21tZW50cyhjc3MpOwogICAgY29uc3QgZGVjbHMgPSBbXTsKICAgIGxl dCBzdGFydCA9IDA7CiAgICBsZXQgZGVwdGggPSAwOwogICAgbGV0IHF1b3RlID0gIiI7CiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNzcy5sZW5ndGg7IGkr KykgewogICAgICBjb25zdCBjID0gY3NzW2ldOwogICAgICBpZiAocXVvdGUpIHsKICAgICAgICBpZiAoYyA9PT0gIlxcIikgaSsrOwogICAgICAgIGVsc2Ug aWYgKGMgPT09IHF1b3RlKSBxdW90ZSA9ICIiOwogICAgICB9IGVsc2UgaWYgKGMgPT09ICInIiB8fCBjID09PSAnIicpIHF1b3RlID0gYzsKICAgICAgZWxz ZSBpZiAoYyA9PT0gIigiKSBkZXB0aCsrOwogICAgICBlbHNlIGlmIChjID09PSAiKSIpIGRlcHRoID0gTWF0aC5tYXgoMCwgZGVwdGggLSAxKTsKICAgICAg ZWxzZSBpZiAoYyA9PT0gIjsiICYmIGRlcHRoID09PSAwKSB7CiAgICAgICAgZGVjbHMucHVzaChjc3Muc2xpY2Uoc3RhcnQsIGkpKTsKICAgICAgICBzdGFy dCA9IGkgKyAxOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGVuZCA9IHNjYW5VbnF1b3RlZFVybChjc3MsIGkpOwogICAgICAgIGlmIChlbmQgIT09 IC0xKSBpID0gZW5kIC0gMTsKICAgICAgfQogICAgfQogICAgZGVjbHMucHVzaChjc3Muc2xpY2Uoc3RhcnQpKTsKICAgIHJldHVybiBkZWNscy5tYXAoKGQp ID0+IGQudHJpbSgpKS5maWx0ZXIoQm9vbGVhbikubWFwKChkKSA9PiAvIVxzKmltcG9ydGFudCQvaS50ZXN0KGQpID8gZCA6IGQgKyAiICFpbXBvcnRhbnQi KS5qb2luKCI7Iik7CiAgfQogIGZ1bmN0aW9uIGNyZWF0ZVBzZXVkb1NoZWV0KGRvYykgewogICAgbGV0IGVsID0gbnVsbDsKICAgIGNvbnN0IGNhY2hlID0g LyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIGxldCBuID0gMDsKICAgIHJldHVybiAocHNldWRvLCBjc3MpID0+IHsKICAgICAgY29uc3QgayA9IHBz ZXVkbyArICJ8IiArIGNzczsKICAgICAgY29uc3QgaGl0ID0gY2FjaGUuZ2V0KGspOwogICAgICBpZiAoaGl0KSByZXR1cm4gaGl0OwogICAgICBpZiAoIWVs KSB7CiAgICAgICAgZWwgPSBkb2MuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChlbCk7CiAgICAgIH0KICAg ICAgY29uc3QgY2xzID0gInNjcCIgKyAobisrKS50b1N0cmluZygzNik7CiAgICAgIGNvbnN0IGlzUHNldWRvRWxlbWVudCA9IHBzZXVkbyA9PT0gImJlZm9y ZSIgfHwgcHNldWRvID09PSAiYWZ0ZXIiOwogICAgICBjb25zdCBzZWwgPSBpc1BzZXVkb0VsZW1lbnQgPyAiLiIgKyBjbHMgKyAiOjoiICsgcHNldWRvIDog Ii4iICsgY2xzICsgIjoiICsgcHNldWRvOwogICAgICBlbC5zaGVldC5pbnNlcnRSdWxlKAogICAgICAgIHNlbCArICJ7IiArIChpc1BzZXVkb0VsZW1lbnQg PyBjc3MgOiBpbXBvcnRhbnRpZnkoY3NzKSkgKyAifSIsCiAgICAgICAgZWwuc2hlZXQuY3NzUnVsZXMubGVuZ3RoCiAgICAgICk7CiAgICAgIGNhY2hlLnNl dChrLCBjbHMpOwogICAgICByZXR1cm4gY2xzOwogICAgfTsKICB9CgogIC8vIHNyYy9yZWdpc3RyeS50cwogIGZ1bmN0aW9uIGNyZWF0ZVJlZ2lzdHJ5KCkg ewogICAgY29uc3QgZW50cmllcyA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpOwogICAgZnVuY3Rpb24gZ2V0KG5hbWUpIHsKICAgICAg cmV0dXJuIGVudHJpZXNbbmFtZV0gfHwgKGVudHJpZXNbbmFtZV0gPSB7CiAgICAgICAgaHRtbDogIiIsCiAgICAgICAgdHBsOiBudWxsLAogICAgICAgIExv Z2ljOiBudWxsLAogICAgICAgIGpzU3RyZWFtaW5nOiBmYWxzZSwKICAgICAgICBodG1sU3RyZWFtaW5nOiBmYWxzZSwKICAgICAgICB2ZXI6IDAsCiAgICAg ICAgc3ViczogLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwKICAgICAgICBmZXRjaGVkOiBmYWxzZQogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGJ1 bXAobmFtZSkgewogICAgICBjb25zdCByID0gZ2V0KG5hbWUpOwogICAgICByLnZlcisrOwogICAgICBmb3IgKGNvbnN0IGZuIG9mIHIuc3VicykgZm4oKTsK ICAgIH0KICAgIHJldHVybiB7CiAgICAgIGVudHJpZXMsCiAgICAgIGdldCwKICAgICAgYnVtcCwKICAgICAgYnVtcEFsbCgpIHsKICAgICAgICBmb3IgKGNv bnN0IG4gaW4gZW50cmllcykgYnVtcChuKTsKICAgICAgfQogICAgfTsKICB9CgogIC8vIHNyYy9ydW50aW1lLnRzCiAgdmFyIENPTVBPTkVOVF9ESVIgPSAi LiI7CiAgZnVuY3Rpb24gY3JlYXRlUnVudGltZShkb2MgPSBkb2N1bWVudCkgewogICAgY29uc3QgcmVnaXN0cnkgPSBjcmVhdGVSZWdpc3RyeSgpOwogICAg Y29uc3QgcHNldWRvQ2xhc3MgPSBjcmVhdGVQc2V1ZG9TaGVldChkb2MpOwogICAgY29uc3QgaGVsbWV0ID0gY3JlYXRlSGVsbWV0TWFuYWdlcigKICAgICAg ZG9jLAogICAgICAobmFtZSkgPT4gcmVnaXN0cnkuZ2V0KG5hbWUpLmh0bWxTdHJlYW1pbmcKICAgICk7CiAgICBjb25zdCBleHRlcm5hbCA9IGNyZWF0ZUV4 dGVybmFsTW9kdWxlcygoKSA9PiByZWdpc3RyeS5idW1wQWxsKCkpOwogICAgY29uc3QgZmFjdG9yeSA9IGNyZWF0ZUNvbXBvbmVudEZhY3RvcnkocmVnaXN0 cnksIGVuc3VyZUZldGNoZWQpOwogICAgY29uc3QgaG9zdCA9IHsKICAgICAgY29tcG9uZW50OiAobmFtZSkgPT4gZmFjdG9yeS5nZXREQyhuYW1lKSwKICAg ICAgcGxhY2Vob2xkZXI6IChwcm9wcykgPT4gaChQbGFjZWhvbGRlciwgcHJvcHMpLAogICAgICBoZWxtZXQ6IChub2RlKSA9PiBoZWxtZXQuY29tcGlsZShu b2RlKSwKICAgICAgbG9hZEV4dGVybmFsOiAoa2luZCwgdXJsLCBhZnRlcikgPT4gZXh0ZXJuYWwubG9hZChraW5kLCB1cmwsIGFmdGVyKSwKICAgICAgcmVz b2x2ZUV4dGVybmFsOiAodXJsLCBuYW1lKSA9PiBleHRlcm5hbC5yZXNvbHZlKHVybCwgbmFtZSksCiAgICAgIHJlc29sdmVFeHRlcm5hbEdsb2JhbDogKHVy bCwgbmFtZSkgPT4gZXh0ZXJuYWwucmVzb2x2ZUdsb2JhbCh1cmwsIG5hbWUpLAogICAgICByZXNvbHZlRXh0ZXJuYWxFcnJvcjogKHVybCwgbmFtZSkgPT4g ZXh0ZXJuYWwuZ2V0RXJyb3IodXJsLCBuYW1lKSwKICAgICAgcHNldWRvQ2xhc3MKICAgIH07CiAgICBmdW5jdGlvbiBlbnN1cmVGZXRjaGVkKG5hbWUpIHsK ICAgICAgY29uc3QgciA9IHJlZ2lzdHJ5LmdldChuYW1lKTsKICAgICAgaWYgKHIuZmV0Y2hlZCkgcmV0dXJuOwogICAgICByLmZldGNoZWQgPSB0cnVlOwog ICAgICBjb25zdCB1cmwgPSBDT01QT05FTlRfRElSICsgIi8iICsgZW5jb2RlVVJJQ29tcG9uZW50KG5hbWUpICsgIi5kYy5odG1sIjsKICAgICAgY29uc3Qg cmVzID0gd2luZG93Ll9fcmVzb3VyY2VzOwogICAgICBjb25zdCBwcmUgPSByZXMgPyByZXNbdXJsXSA6IHZvaWQgMDsKICAgICAgY29uc3QgdGFyZ2V0ID0g dHlwZW9mIHByZSA9PT0gInN0cmluZyIgJiYgcHJlID8gcHJlIDogdXJsOwogICAgICBjb25zdCBibG9iID0gYnVuZGxlZEJsb2IodGFyZ2V0KTsKICAgICAg KGJsb2IgPyBibG9iLnRleHQoKSA6IGZldGNoKHRhcmdldCkudGhlbigocmVzMikgPT4gewogICAgICAgIGlmICghcmVzMi5vaykgewogICAgICAgICAgY29u c29sZS5lcnJvcigKICAgICAgICAgICAgJ1tkYy1ydW50aW1lXSBzaWJsaW5nIGZldGNoIGZvciAiJyArIG5hbWUgKyAnIiBmYWlsZWQ6JywKICAgICAgICAg ICAgdXJsLAogICAgICAgICAgICAicmV0dXJuZWQiLAogICAgICAgICAgICByZXMyLnN0YXR1cywKICAgICAgICAgICAgIlx1MjAxNCB0aGUgcmVmZXJlbmNl IHJlbmRlcnMgYXMgYW4gZW1wdHkgcGxhY2Vob2xkZXIuIgogICAgICAgICAgKTsKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICB9CiAgICAgICAgcmV0 dXJuIHJlczIudGV4dCgpOwogICAgICB9KSkudGhlbigodCkgPT4gewogICAgICAgIGlmICghdCkgcmV0dXJuOwogICAgICAgIGNvbnN0IHBhcnNlZCA9IHBh cnNlRGNUZXh0KHQpOwogICAgICAgIGlmICghcGFyc2VkKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAgICAgICAnW2RjLXJ1bnRpbWVdIHNp YmxpbmcgZmV0Y2ggZm9yICInICsgbmFtZSArICciOicsCiAgICAgICAgICAgIHVybCwKICAgICAgICAgICAgImhhcyBubyA8eC1kYz4gYmxvY2sgXHUyMDE0 IG5vdCBhIERlc2lnbiBDb21wb25lbnQuIgogICAgICAgICAgKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcnNlZC5wcm9w cykgci5wcm9wc01ldGEgPSBwYXJzZWQucHJvcHM7CiAgICAgICAgaWYgKHBhcnNlZC5wcmV2aWV3KSByLnByZXZpZXcgPSBwYXJzZWQucHJldmlldzsKICAg ICAgICBpZiAocGFyc2VkLnRlbXBsYXRlICYmICFyLmh0bWwpIHVwZGF0ZUh0bWwobmFtZSwgcGFyc2VkLnRlbXBsYXRlKTsKICAgICAgICBpZiAocGFyc2Vk LmpzICYmICFyLkxvZ2ljKSB1cGRhdGVKcyhuYW1lLCBwYXJzZWQuanMpOwogICAgICB9KS5jYXRjaCgKICAgICAgICAoZSkgPT4gY29uc29sZS5lcnJvcigK ICAgICAgICAgICdbZGMtcnVudGltZV0gc2libGluZyBmZXRjaCBmb3IgIicgKyBuYW1lICsgJyIgdGhyZXc6JywKICAgICAgICAgIHVybCwKICAgICAgICAg IGUKICAgICAgICApCiAgICAgICk7CiAgICB9CiAgICBsZXQgcm9vdE5hbWUgPSBudWxsOwogICAgZnVuY3Rpb24gdXBkYXRlSHRtbChuYW1lLCBodG1sKSB7 CiAgICAgIGNvbnN0IHIgPSByZWdpc3RyeS5nZXQobmFtZSk7CiAgICAgIHIuaHRtbCA9IGh0bWw7CiAgICAgIGlmIChuYW1lID09PSByb290TmFtZSkgewog ICAgICAgIGNvbnN0IG1vZGUgPSBERVNJR05fRE9DX01PREVfUkUuZXhlYyhodG1sKT8uWzFdID8/IG51bGw7CiAgICAgICAgaWYgKG1vZGUgfHwgIXIuaHRt bFN0cmVhbWluZykgaGVsbWV0LnNldERlc2lnbkRvY01vZGUobW9kZSk7CiAgICAgIH0KICAgICAgdHJ5IHsKICAgICAgICByLnRwbCA9IGNvbXBpbGVUZW1w bGF0ZShodG1sLCBob3N0KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIltkYy1ydW50aW1lXSB0ZW1wbGF0ZSBjb21waWxl IEZBSUxFRCBmb3IiLCBuYW1lLCBlKTsKICAgICAgfQogICAgICByZWdpc3RyeS5idW1wKG5hbWUpOwogICAgfQogICAgZnVuY3Rpb24gdXBkYXRlSnMobmFt ZSwgc3JjKSB7CiAgICAgIGNvbnN0IHIgPSByZWdpc3RyeS5nZXQobmFtZSk7CiAgICAgIGNvbnN0IHNlcSA9IHIuanNTZXEgPSAoci5qc1NlcSB8fCAwKSAr IDE7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgQ2xzID0gZXZhbERjTG9naWMoc3JjKTsKICAgICAgICBpZiAoci5qc1NlcSAhPT0gc2VxKSByZXR1cm47 CiAgICAgICAgaWYgKHR5cGVvZiBDbHMgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHIubG9naWNFcnJvciA9IG5hbWUgKyAiLmRjLmh0bWw6IDxzY3Jp cHQgZGF0YS1kYy1zY3JpcHQ+IG11c3QgZGVmaW5lIGBjbGFzcyBDb21wb25lbnQgZXh0ZW5kcyBEQ0xvZ2ljYCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgIHIubG9naWNFcnJvciA9IG51bGw7CiAgICAgICAgICByLkxvZ2ljID0gQ2xzOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGlm IChyLmpzU2VxICE9PSBzZXEpIHJldHVybjsKICAgICAgICBjb25zb2xlLmVycm9yKAogICAgICAgICAgIltkYy1ydW50aW1lXSBsb2dpYyBjbGFzcyBldmFs IEZBSUxFRCBmb3IiLAogICAgICAgICAgbmFtZSwKICAgICAgICAgICJcdTIwMTQgdGhlIHRlbXBsYXRlIHJlbmRlcnMgd2l0aCBwcm9wcyBvbmx5LiIsCiAg ICAgICAgICBlCiAgICAgICAgKTsKICAgICAgICByLmxvZ2ljRXJyb3IgPSBuYW1lICsgIjogIiArIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdl ID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpKTsKICAgICAgfQogICAgICByZWdpc3RyeS5idW1wKG5hbWUpOwogICAgfQogICAgZnVuY3Rpb24gc2V0U3RyZWFt aW5nKG5hbWUsIGtpbmQsIG9uKSB7CiAgICAgIGNvbnN0IHIgPSByZWdpc3RyeS5nZXQobmFtZSk7CiAgICAgIGlmIChraW5kID09PSAiaHRtbCIpIHIuaHRt bFN0cmVhbWluZyA9ICEhb247CiAgICAgIGVsc2Ugci5qc1N0cmVhbWluZyA9ICEhb247CiAgICAgIGxldCBhbnkgPSBmYWxzZTsKICAgICAgZm9yIChjb25z dCBuIGluIHJlZ2lzdHJ5LmVudHJpZXMpIHsKICAgICAgICBjb25zdCBlID0gcmVnaXN0cnkuZW50cmllc1tuXTsKICAgICAgICBpZiAoZSAmJiAoZS5odG1s U3RyZWFtaW5nIHx8IGUuanNTdHJlYW1pbmcpKSB7CiAgICAgICAgICBhbnkgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAg ICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgic2MtZGMtc3RyZWFtaW5nIiwgYW55KTsKICAgICAgcmVnaXN0cnkuYnVtcChuYW1l KTsKICAgIH0KICAgIGZ1bmN0aW9uIGRjVXBkYXRlKG5hbWUsIGtpbmQsIGNvbnRlbnQsIHN0cmVhbWluZykgewogICAgICBpZiAoc3RyZWFtaW5nKSByZWdp c3RyeS5nZXQobmFtZSkuZmV0Y2hlZCA9IHRydWU7CiAgICAgIGlmIChraW5kID09PSAiaHRtbCIpIHsKICAgICAgICBzZXRTdHJlYW1pbmcobmFtZSwgImh0 bWwiLCAhIXN0cmVhbWluZyk7CiAgICAgICAgdXBkYXRlSHRtbChuYW1lLCBjb250ZW50KTsKICAgICAgfSBlbHNlIGlmIChraW5kID09PSAianMiKSB7CiAg ICAgICAgc2V0U3RyZWFtaW5nKG5hbWUsICJqcyIsICEhc3RyZWFtaW5nKTsKICAgICAgICBpZiAoIXN0cmVhbWluZykgdXBkYXRlSnMobmFtZSwgY29udGVu dCk7CiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PT0gInByb3BzIikgewogICAgICAgIGNvbnN0IHsgcHJvcHMsIHByZXZpZXcgfSA9IHBhcnNlRGF0YVByb3Bz KGNvbnRlbnQpOwogICAgICAgIGNvbnN0IHIgPSByZWdpc3RyeS5nZXQobmFtZSk7CiAgICAgICAgci5wcm9wc01ldGEgPSBwcm9wcyA/PyB2b2lkIDA7CiAg ICAgICAgci5wcmV2aWV3ID0gcHJldmlldzsKICAgICAgICByZWdpc3RyeS5idW1wKG5hbWUpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBzZXRQcm9w cyhuYW1lLCBvdmVycmlkZXMpIHsKICAgICAgcmVnaXN0cnkuZ2V0KG5hbWUpLnByb3BPdmVycmlkZXMgPSBvdmVycmlkZXMgJiYgdHlwZW9mIG92ZXJyaWRl cyA9PT0gIm9iamVjdCIgPyB7IC4uLm92ZXJyaWRlcyB9IDogbnVsbDsKICAgICAgcmVnaXN0cnkuYnVtcChuYW1lKTsKICAgIH0KICAgIGZ1bmN0aW9uIGFk b3B0UGFyc2VkKG5hbWUsIHBhcnNlZCkgewogICAgICBpZiAoIXBhcnNlZCkgcmV0dXJuOwogICAgICBjb25zdCByID0gcmVnaXN0cnkuZ2V0KG5hbWUpOwog ICAgICBpZiAocGFyc2VkLnByb3BzKSByLnByb3BzTWV0YSA9IHBhcnNlZC5wcm9wczsKICAgICAgaWYgKHBhcnNlZC5wcmV2aWV3KSByLnByZXZpZXcgPSBw YXJzZWQucHJldmlldzsKICAgICAgaWYgKHBhcnNlZC50ZW1wbGF0ZSkgdXBkYXRlSHRtbChuYW1lLCBwYXJzZWQudGVtcGxhdGUpOwogICAgICBpZiAocGFy c2VkLmpzKSB1cGRhdGVKcyhuYW1lLCBwYXJzZWQuanMpOwogICAgfQogICAgcmV0dXJuIHsKICAgICAgcmVnaXN0cnksCiAgICAgIGdldERDOiBmYWN0b3J5 LmdldERDLAogICAgICB1cGRhdGVIdG1sLAogICAgICB1cGRhdGVKcywKICAgICAgZGNVcGRhdGUsCiAgICAgIHNldFByb3BzLAogICAgICBhZG9wdFBhcnNl ZCwKICAgICAgc2V0Um9vdE5hbWU6IChuYW1lKSA9PiB7CiAgICAgICAgcm9vdE5hbWUgPSBuYW1lOwogICAgICB9LAogICAgICBtYXJrRmV0Y2hlZDogKG5h bWUpID0+IHsKICAgICAgICByZWdpc3RyeS5nZXQobmFtZSkuZmV0Y2hlZCA9IHRydWU7CiAgICAgIH0sCiAgICAgIGFubm90YXRlZFRlbXBsYXRlOiAobmFt ZSkgPT4gewogICAgICAgIGNvbnN0IHIgPSByZWdpc3RyeS5nZXQobmFtZSk7CiAgICAgICAgcmV0dXJuIHIudHBsICYmIHIudHBsLl9fYW5ub3RhdGVkIHx8 IG51bGw7CiAgICAgIH0sCiAgICAgIHRlbXBsYXRlU291cmNlOiAobmFtZSkgPT4gcmVnaXN0cnkuZ2V0KG5hbWUpLmh0bWwgfHwgbnVsbCwKICAgICAgU3Ry ZWFtYWJsZUxvZ2ljCiAgICB9OwogIH0KCiAgLy8gc3JjL3N0cmVhbS1zdGF0ZS50cwogIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbVRyYWNrZXIoc3RhbGVNcyA9 IDZlNCwgbm93ID0gRGF0ZS5ub3cpIHsKICAgIGNvbnN0IHNpbmNlID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIGNvbnN0IGxpdmVPbmUgPSAo bikgPT4gewogICAgICBjb25zdCB0ID0gc2luY2UuZ2V0KG4pOwogICAgICBpZiAodCA9PT0gdm9pZCAwKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChub3co KSAtIHQgPiBzdGFsZU1zKSB7CiAgICAgICAgc2luY2UuZGVsZXRlKG4pOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1 ZTsKICAgIH07CiAgICByZXR1cm4gewogICAgICBwdXNoKG5hbWUsIHN0cmVhbWluZywgdmlld3BvcnRLZXkpIHsKICAgICAgICBpZiAodmlld3BvcnRLZXkg PT09ICJkYy1tb2RlbCIpIHJldHVybjsKICAgICAgICBpZiAoc3RyZWFtaW5nKSBzaW5jZS5zZXQobmFtZSwgbm93KCkpOwogICAgICAgIGVsc2Ugc2luY2Uu ZGVsZXRlKG5hbWUpOwogICAgICB9LAogICAgICBsaXZlKG5hbWUpIHsKICAgICAgICBpZiAobmFtZSAhPT0gdm9pZCAwKSByZXR1cm4gbGl2ZU9uZShuYW1l KTsKICAgICAgICBmb3IgKGNvbnN0IG4gb2YgWy4uLnNpbmNlLmtleXMoKV0pIGlmIChsaXZlT25lKG4pKSByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4g ZmFsc2U7CiAgICAgIH0KICAgIH07CiAgfQoKICAvLyBzcmMvaW5kZXgudHMKICBmdW5jdGlvbiBoaWRlUmF3VGVtcGxhdGUoKSB7CiAgICBjb25zdCBzID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgIHMudGV4dENvbnRlbnQgPSAieC1kY3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fSI7CiAgICBk b2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpOwogIH0KICBmdW5jdGlvbiBsb2FkU2NyaXB0KHNyYywgaW50ZWdyaXR5KSB7CiAgICByZXR1cm4gbmV3IFBy b21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgLy8hIG5vc2VtZ3JlcDogY3JlYXRlLXNjcmlwdC1lbGVtZW50CiAgICAgIGNvbnN0IHMgPSBk b2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgcy5zcmMgPSBzcmM7CiAgICAgIGlmIChpbnRlZ3JpdHkpIHsKICAgICAgICBzLmludGVn cml0eSA9IGludGVncml0eTsKICAgICAgICBzLmNyb3NzT3JpZ2luID0gImFub255bW91cyI7CiAgICAgIH0KICAgICAgcy5hc3luYyA9IGZhbHNlOwogICAg ICBzLm9ubG9hZCA9ICgpID0+IHJlc29sdmUyKCk7CiAgICAgIHMub25lcnJvciA9ICgpID0+IHJlamVjdChuZXcgRXJyb3IoYGZhaWxlZCB0byBsb2FkICR7 c3JjfWApKTsKICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzKTsKICAgIH0pOwogIH0KICBmdW5jdGlvbiBsb2FkUmVhY3RVbWQoKSB7CiAgICBj b25zdCB3ID0gd2luZG93OwogICAgaWYgKHcuUmVhY3QgJiYgdy5SZWFjdERPTSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgY29uc3QgcmVhY3Qg PSBjZG5TY3JpcHRGb3IoUkVBQ1RfVVJMLCBSRUFDVF9TUkkpOwogICAgY29uc3QgcmVhY3REb20gPSBjZG5TY3JpcHRGb3IoUkVBQ1RfRE9NX1VSTCwgUkVB Q1RfRE9NX1NSSSk7CiAgICByZXR1cm4gUHJvbWlzZS5hbGwoWwogICAgICBsb2FkU2NyaXB0KHJlYWN0LnNyYywgcmVhY3QuaW50ZWdyaXR5KSwKICAgICAg bG9hZFNjcmlwdChyZWFjdERvbS5zcmMsIHJlYWN0RG9tLmludGVncml0eSkKICAgIF0pLnRoZW4oKCkgPT4gdm9pZCAwKTsKICB9CiAgZnVuY3Rpb24gaW5p dCgpIHsKICAgIGNvbnN0IHJ1bnRpbWUgPSBjcmVhdGVSdW50aW1lKGRvY3VtZW50KTsKICAgIGxldCByb290TmFtZSA9ICJSb290IjsKICAgIGNvbnN0IGJh c2VDc3MgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgYmFzZUNzcy50ZXh0Q29udGVudCA9IEJBU0VfQ1NTOwogICAgZG9jdW1lbnQu aGVhZC5wcmVwZW5kKGJhc2VDc3MpOwogICAgY29uc3Qgbm90aWZ5SG9zdCA9ICgpID0+IHsKICAgICAgaWYgKHdpbmRvdy5wYXJlbnQgPT09IHdpbmRvdykg cmV0dXJuOwogICAgICBjb25zdCByID0gcnVudGltZS5yZWdpc3RyeS5lbnRyaWVzW3Jvb3ROYW1lXTsKICAgICAgdHJ5IHsKICAgICAgICB3aW5kb3cucGFy ZW50LnBvc3RNZXNzYWdlKAogICAgICAgICAgewogICAgICAgICAgICB0eXBlOiAiX19kY19ib290ZWQiLAogICAgICAgICAgICByb290TmFtZSwKICAgICAg ICAgICAgcHJvcHNNZXRhOiByICYmIHIucHJvcHNNZXRhIHx8IG51bGwsCiAgICAgICAgICAgIHByZXZpZXc6IHIgJiYgci5wcmV2aWV3IHx8IG51bGwKICAg ICAgICAgIH0sCiAgICAgICAgICAiKiIKICAgICAgICApOwogICAgICB9IGNhdGNoIHsKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHN0cmVhbXMgPSBjcmVh dGVTdHJlYW1UcmFja2VyKCk7CiAgICBjb25zdCBhcGkgPSB7CiAgICAgIF9fZGNVcGRhdGU6IChuYW1lLCBraW5kLCBjb250ZW50LCBzdHJlYW1pbmcsIHZp ZXdwb3J0S2V5KSA9PiB7CiAgICAgICAgc3RyZWFtcy5wdXNoKG5hbWUsIHN0cmVhbWluZywgdmlld3BvcnRLZXkpOwogICAgICAgIHJ1bnRpbWUuZGNVcGRh dGUobmFtZSwga2luZCwgY29udGVudCwgc3RyZWFtaW5nKTsKICAgICAgICBpZiAobmFtZSA9PT0gcm9vdE5hbWUgJiYgIXN0cmVhbWluZyAmJiBraW5kID09 PSAicHJvcHMiKSBub3RpZnlIb3N0KCk7CiAgICAgIH0sCiAgICAgIF9fZGNTdHJlYW1pbmc6IChuYW1lKSA9PiBzdHJlYW1zLmxpdmUobmFtZSksCiAgICAg IF9fZGNTZXRQcm9wczogKG5hbWUsIG92ZXJyaWRlcykgPT4gcnVudGltZS5zZXRQcm9wcyhuYW1lLCBvdmVycmlkZXMpLAogICAgICAvKiogTmFtZSBvZiB0 aGUgY29tcG9uZW50IGN1cnJlbnRseSBtb3VudGVkIGFzIHRoZSBwYWdlIHJvb3Qg4oCUIERDIHRvb2xzCiAgICAgICAqICBwdXNoIHRoZWlyIHRlbXBsYXRl LXN0cmVhbSBoZXJlIHdoZW4gdGFyZ2V0aW5nICJ0aGUgb3BlbiBwYWdlIi4gKi8KICAgICAgX19kY1Jvb3ROYW1lOiAoKSA9PiByb290TmFtZSwKICAgICAg LyoqIEVkaXRvciBicmlkZ2Ug4oCUIHRoZSBlbmNvZGVkLCBgZGF0YS1kYy10cGxgLWFubm90YXRlZCB0ZW1wbGF0ZSBzb3VyY2UuCiAgICAgICAqICBUaGUg aG9zdCBlZGl0b3IgcGFyc2VzIHRoaXMgaW50byBpdHMgb3duIHRlbXBsYXRlIERPTSBzbyBpdCBjYW4gbWFwIGEKICAgICAgICogIHJlbmRlcmVkIG5vZGUg KGNhcnJ5aW5nIHRoZSBzYW1lIGBkYXRhLWRjLXRwbGApIGJhY2sgdG8gdGhlIHNvdXJjZQogICAgICAgKiAgbm9kZSB0aGF0IGVtaXR0ZWQgaXQuIFJldHVy bnMgdGhlIGVuY29kZWQgZm9ybSAoYHNjLWNhbWVsLSpgIGF0dHJzLAogICAgICAgKiAgYDxzYy1yYXctKj5gL2A8c2MtaGVsbWV0PmAgdGFncyk7IHRoZSBl ZGl0b3IgZGVjb2RlcyBvbiBzZXJpYWxpemUuICovCiAgICAgIF9fZGNBbm5vdGF0ZWRUZW1wbGF0ZTogKG5hbWUpID0+IHJ1bnRpbWUuYW5ub3RhdGVkVGVt cGxhdGUobmFtZSksCiAgICAgIC8qKiBFZGl0b3IgYnJpZGdlIOKAlCB0aGUgKm9yaWdpbmFsKiAoZGVjb2RlZCkgdGVtcGxhdGUgc291cmNlLiAqLwogICAg ICBfX2RjVGVtcGxhdGVTb3VyY2U6IChuYW1lKSA9PiBydW50aW1lLnRlbXBsYXRlU291cmNlKG5hbWUpLAogICAgICBfX2RjQm9vdDogKCkgPT4gewogICAg ICAgIHJvb3ROYW1lID0gYm9vdChydW50aW1lLCBkb2N1bWVudCkgPz8gcm9vdE5hbWU7CiAgICAgICAgbm90aWZ5SG9zdCgpOwogICAgICB9LAogICAgICBf X2RjUmVnaXN0cnk6IHJ1bnRpbWUucmVnaXN0cnkuZW50cmllcywKICAgICAgZ2V0REM6IChuYW1lKSA9PiBydW50aW1lLmdldERDKG5hbWUpLAogICAgICAv LyBgRENMb2dpY2AgaXMgdGhlIGRvY3VtZW50ZWQgYmFzZSBjbGFzcyBuYW1lOyBgU3RyZWFtYWJsZUxvZ2ljYCBpcyB0aGUKICAgICAgLy8gaW1wbGVtZW50 YXRpb24gYWxpYXMga2VwdCBmb3IgYW55IHByb2plY3QgdGhhdCBhbHJlYWR5IHJlZmVyZW5jZXMgaXQuCiAgICAgIERDTG9naWM6IHJ1bnRpbWUuU3RyZWFt YWJsZUxvZ2ljLAogICAgICBTdHJlYW1hYmxlTG9naWM6IHJ1bnRpbWUuU3RyZWFtYWJsZUxvZ2ljCiAgICB9OwogICAgT2JqZWN0LmFzc2lnbih3aW5kb3cs IGFwaSk7CiAgICB3aW5kb3cuX19kY0NvbnRlbnRLZXllZCA9IHRydWU7CiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gImxvYWRpbmciKSBhcGku X19kY0Jvb3QoKTsKICAgIGVsc2UgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsICgpID0+IGFwaS5fX2RjQm9vdCgpKTsK ICB9CiAgaGlkZVJhd1RlbXBsYXRlKCk7CiAgbG9hZFJlYWN0VW1kKCkudGhlbihpbml0KS5jYXRjaCgoZXJyKSA9PiB7CiAgICBjb25zb2xlLmVycm9yKCJb ZGNdIGZhaWxlZCB0byBsb2FkIFJlYWN0IG9yIGJvb3Q6IiwgZXJyKTsKICAgIHRocm93IGVycjsKICB9KTsKfSkoKTsKPC9zY3JpcHQ+CjwvaGVhZD4KPGJv ZHk+Cjx4LWRjPgo8aGVsbWV0PgoKPGxpbmsgcmVsPSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tIj4KPGxpbmsgcmVs PSJwcmVjb25uZWN0IiBocmVmPSJodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tIiBjcm9zc29yaWdpbj0iIj4KPHN0eWxlPgogIGJvZHkgeyBtYXJnaW46IDA7 IGJhY2tncm91bmQ6ICNGRkZERkI7IH0KICBhIHsgY29sb3I6ICNCNDAwNkE7IH0KICBhOmhvdmVyIHsgY29sb3I6ICMxNDI2MUM7IH0KICAuY2Itb3B0OmZv Y3VzLXZpc2libGUsIC5jYi1pbnA6Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDNweCBzb2xpZCAjMDBBMERDOyBvdXRsaW5lLW9mZnNldDogMnB4OyB9CiAg QG1lZGlhIChtYXgtd2lkdGg6IDkwMHB4KXsKICAgIC5jYi1sYXlvdXR7IGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyICFpbXBvcnRhbnQ7IH0KICAgIC5j Yi1wYW5lbHsgcG9zaXRpb246IHN0YXRpYyAhaW1wb3J0YW50OyB0b3A6IDAgIWltcG9ydGFudDsgei1pbmRleDogNjsgcGFkZGluZzogOHB4ICFpbXBvcnRh bnQ7IGJvcmRlci1yYWRpdXM6IDAgMCAyMHB4IDIwcHggIWltcG9ydGFudDsgYm94LXNoYWRvdzogMCA2cHggMCAjQ0JCM0YwICFpbXBvcnRhbnQ7IH0KICAg IC5jYi1zdmd7IG1heC1oZWlnaHQ6IDMydmg7IH0KICAgIC5jYi1jYXB0aW9ueyBkaXNwbGF5OiBub25lOyB9CiAgfQogIEBtZWRpYSAobWF4LXdpZHRoOiA3 MDBweCl7CiAgICBib2R5ID4geC1kYyA+IGRpdiB7IHBhZGRpbmc6IDI0cHggMTJweCA0OHB4ICFpbXBvcnRhbnQ7IH0KICAgIC5jYi1jYXJkcyB7IGdyaWQt dGVtcGxhdGUtY29sdW1uczogMWZyICFpbXBvcnRhbnQ7IGdhcDogMTJweCAhaW1wb3J0YW50OyB9CiAgICAuY2ItcGFuZWwgeyBib3JkZXItcmFkaXVzOiAx OHB4ICFpbXBvcnRhbnQ7IH0KICAgIC5jYi1zdmcgeyBtYXgtaGVpZ2h0OiBub25lICFpbXBvcnRhbnQ7IHdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7IH0KICAg IC5jYi1vcHQgeyBtaW4td2lkdGg6IDA7IHBhZGRpbmctbGVmdDogMCAhaW1wb3J0YW50OyBwYWRkaW5nLXJpZ2h0OiAwICFpbXBvcnRhbnQ7IH0KICAgIGgx IHsgZm9udC1zaXplOiBjbGFtcCgzMHB4LCAxMHZ3LCA0MnB4KSAhaW1wb3J0YW50OyB9CiAgfQo8L3N0eWxlPgo8L2hlbG1ldD4KPGRpdiBzdHlsZT0iZm9u dC1mYW1pbHk6IE51bml0bywgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOyBjb2xvcjogIzE0MjYxQzsgYmFja2dyb3VuZDogI0ZGRkRGQjsgcGFkZGluZzogNDRw eCAyNHB4IDgwcHg7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7Ij4KICAKPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiAxMDQwcHg7IG1hcmdpbjogMCBhdXRvOyI+ CgogICAgPGhlYWRlciBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAyMnB4OyI+CiAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6 IGlubGluZS1ibG9jazsgZm9udC1mYW1pbHk6ICdCYWxvbyAyJywgc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAxM3B4OyBsZXR0 ZXItc3BhY2luZzogLjE0ZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiAjQjQwMDZBOyBiYWNrZ3JvdW5kOiAjRkNFOUYzOyBib3JkZXIt cmFkaXVzOiAzMHB4OyBwYWRkaW5nOiA2cHggMThweDsgbWFyZ2luLWJvdHRvbTogMTRweDsiPkJhbGFuY2UgZGUgdmlkYTwvZGl2PgogICAgICA8aDEgc3R5 bGU9ImZvbnQtZmFtaWx5OiAnQmFsb28gMicsIHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogY2xhbXAoMzRweCwgNXZ3LCA1MnB4 KTsgbWFyZ2luOiAwIDAgMTJweDsgbGluZS1oZWlnaHQ6IDEuMDQ7IHRleHQtd3JhcDogYmFsYW5jZTsiPkxhIGNhc2EgZGUgbWkgPHNwYW4gc3R5bGU9ImJh Y2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzAwQTBEQywgI0RDMDA3OCk7IC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0OyBiYWNrZ3Jv dW5kLWNsaXA6IHRleHQ7IGNvbG9yOiB0cmFuc3BhcmVudDsiPmJhbGFuY2U8L3NwYW4+PC9oMT4KICAgICAgPHAgc3R5bGU9ImNvbG9yOiAjNTk2MTVBOyBm b250LXNpemU6IDE2cHg7IG1heC13aWR0aDogNjQwcHg7IG1hcmdpbjogMCBhdXRvIDE2cHg7IGxpbmUtaGVpZ2h0OiAxLjY7IHRleHQtd3JhcDogcHJldHR5 OyI+RGlleiBwcmVndW50YXMgc29icmUgZGlleiDDoXJlYXMgZGUgdHUgdmlkYS4gUmVzcG9uZGUgY29uIGhvbmVzdGlkYWQsIGRlbCAxIGFsIDUuIDxicj5D YWRhIGVzcGFjaW8gZGUgbGEgY2FzYSBzZSBwaW50YSBzZWfDum4gdHUgcmVzcHVlc3RhLCB5IGFsIGZpbmFsIHJlY2liZXMgdW4gdGlwIHBvciDDoXJlYSB5 IGVsaWdlcyB1biBjb21wcm9taXNvLjwvcD4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IGdhcDog MTBweDsgZmxleC13cmFwOiB3cmFwOyBmb250LWZhbWlseTogJ0JhbG9vIDInLCBzYW5zLXNlcmlmOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDEz cHg7IGNvbG9yOiAjM0E0NDNFOyI+CiAgICAgICAgPHNwYW4gc3R5bGU9ImJhY2tncm91bmQ6ICNGRkZGRkY7IGJvcmRlcjogMnB4IHNvbGlkICMxNDI2MUM7 IGJvcmRlci1yYWRpdXM6IDIwcHg7IHBhZGRpbmc6IDVweCAxNHB4OyI+MTAgcHJlZ3VudGFzPC9zcGFuPgogICAgICAgIDxzcGFuIHN0eWxlPSJiYWNrZ3Jv dW5kOiAjRkZGRkZGOyBib3JkZXI6IDJweCBzb2xpZCAjMTQyNjFDOyBib3JkZXItcmFkaXVzOiAyMHB4OyBwYWRkaW5nOiA1cHggMTRweDsiPjUgbWludXRv czwvc3Bhbj4KICAgICAgICA8c3BhbiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGRkZGRjsgYm9yZGVyOiAycHggc29saWQgIzE0MjYxQzsgYm9yZGVyLXJhZGl1 czogMjBweDsgcGFkZGluZzogNXB4IDE0cHg7Ij5UZXJtaW5hcyBjb24gMTAgdGlwcyB5IHVuIGNvbXByb21pc288L3NwYW4+CiAgICAgIDwvZGl2PgogICAg PC9oZWFkZXI+CgogICAgPGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA2MjBweDsgbWFyZ2luOiAwIGF1dG8gMjZweDsiPgogICAgICA8ZGl2IHN0eWxlPSJkaXNw bGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47IGFsaWduLWl0ZW1zOiBiYXNlbGluZTsgZm9udC1zaXplOiAxM3B4OyBmb250LXdl aWdodDogNzAwOyBjb2xvcjogIzNBNDQzRTsgbWFyZ2luLWJvdHRvbTogN3B4OyI+CiAgICAgICAgPHNwYW4+e3sgcHJvZ3Jlc3NMYWJlbCB9fTwvc3Bhbj4K ICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICM1OTYxNUE7Ij57eyBwcm9ncmVzc0hpbnQgfX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IHN0 eWxlPSJoZWlnaHQ6IDE0cHg7IGJvcmRlci1yYWRpdXM6IDlweDsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBiYWNrZ3JvdW5kOiAjRkZGRkZGOyBv dmVyZmxvdzogaGlkZGVuOyI+CiAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OiAxMDAlOyB3aWR0aDoge3sgcHJvZ3Jlc3NQY3QgfX07IGJhY2tncm91bmQ6 IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzAwQTBEQywgIzhBNUZBRSwgI0RDMDA3OCk7IHRyYW5zaXRpb246IHdpZHRoIC4zNXMgZWFzZTsiPjwvZGl2Pgog ICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVu dDogY2VudGVyOyBnYXA6IDE0cHg7IG1hcmdpbjogMCAwIDI2cHg7IGZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICMzQTQ0M0U7 IGZsZXgtd3JhcDogd3JhcDsiPgogICAgICA8c3BhbiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogN3B4 OyI+PHNwYW4gc3R5bGU9IndpZHRoOiAxNnB4OyBoZWlnaHQ6IDE2cHg7IGJvcmRlci1yYWRpdXM6IDVweDsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFD OyBiYWNrZ3JvdW5kOiAjRkZGRkZGOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7Ij48L3NwYW4+U2luIHJlc3BvbmRlcjwvc3Bhbj4KICAgICAgPHNwYW4+MSDC tyBGcsOtbzwvc3Bhbj4KICAgICAgPGRpdiBzdHlsZT0id2lkdGg6IDE3MHB4OyBoZWlnaHQ6IDEzcHg7IGJvcmRlci1yYWRpdXM6IDlweDsgYmFja2dyb3Vu ZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCByZ2JhKDAsMTYwLDIyMCwuMzIpLCByZ2JhKDEzOCw5NSwxNzQsLjUpLCByZ2JhKDIyMCwwLDEyMCwuNzIpKTsg Ym9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyI+PC9kaXY+CiAgICAgIDxzcGFuPjUgwrcgQ2FsaWVudGU8L3NwYW4+CiAgICA8L2Rpdj4KCiAgICA8ZGl2 IGNsYXNzPSJjYi1sYXlvdXQiIHN0eWxlPSJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAxZnIpOyBnYXA6IDMwcHg7 IGFsaWduLWl0ZW1zOiBzdGFydDsiPgoKICAgICAgPGRpdiBjbGFzcz0iY2ItcGFuZWwiIHN0eWxlPSJwb3NpdGlvbjogc3RhdGljOyBiYWNrZ3JvdW5kOiAj RkZGRkZGOyBib3JkZXItcmFkaXVzOiAyNHB4OyBwYWRkaW5nOiAxNnB4IDE0cHggMTJweDsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBib3gtc2hh ZG93OiA3cHggN3B4IDAgI0NCQjNGMDsiPgogICAgICAgIDxzdmcgcmVmPSJ7eyBzdmdSZWYgfX0iIGNsYXNzPSJjYi1zdmciIHNjLWNhbWVsLXZpZXctYm94 PSIwIDAgMTQwMCA5NTAiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiA3NjBweDsgbWF4LWhlaWdodDogNTh2aDsgaGVpZ2h0OiBhdXRvOyBkaXNw bGF5OiBibG9jazsgbWFyZ2luOiAwIGF1dG87IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgYXJpYS1sYWJlbD0ie3sg YXJpYUhvdXNlIH19Ij4KICAgICAgICAgIDxnIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzE0MjYxQyIgc3Ryb2tlLXdpZHRoPSI2IiBzdHJva2UtbGluZWNhcD0i cm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgoKICAgICAgICAgICAgPCEtLSA9PT09PSBNSSBFTlRPUk5POiBmcmFuamEgZGUgc3VlbG8gPT09PT0g LS0+CiAgICAgICAgICAgIDxyZWN0IHg9IjQwIiB5PSI4MTgiIHdpZHRoPSIxMzIwIiBoZWlnaHQ9Ijk2IiByeD0iMjYiIGZpbGw9Int7IGMucjQgfX0iPjwv cmVjdD4KICAgICAgICAgICAgPHJlY3QgeD0iNDAiIHk9IjgxOCIgd2lkdGg9IjEzMjAiIGhlaWdodD0iOTYiIHJ4PSIyNiI+PC9yZWN0PgogICAgICAgICAg ICA8dGV4dCB4PSIxMTIiIHk9Ijg3NiIgZm9udC1mYW1pbHk9IidCYWxvbyAyJywgc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9IjcwMCIgZm9udC1zaXplPSIy NCIgZmlsbD0iIzE0MjYxQyIgc3Ryb2tlPSIjRkZGRkZGIiBzdHJva2Utd2lkdGg9IjciIHBhaW50LW9yZGVyPSJzdHJva2UiPk1pIGVudG9ybm88L3RleHQ+ CgogICAgICAgICAgICA8ZyBzdHJva2Utd2lkdGg9IjUiIGZpbGw9Int7IGMuZjQgfX0iPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik05MDIsODgyIEM5MDIs ODczIDk3Miw4NzMgOTcyLDg4MiBDOTcyLDg5MSA5MDIsODkxIDkwMiw4ODIgWiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMDAyLDg2NCBD MTAwMiw4NTYgMTA2MCw4NTYgMTA2MCw4NjQgQzEwNjAsODcyIDEwMDIsODcyIDEwMDIsODY0IFoiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgoKICAgICAg ICAgICAgPCEtLSDDoXJib2wgLS0+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Int7IGMuZjQgfX0iIGQ9Ik05NCw4MTggQzk4LDc2NCA4OCw3MjQgMTAyLDY4 MiBMMTM0LDY4MiBDMTQ2LDcyOCAxMzIsNzY4IDE0MCw4MTggWiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBmaWxsPSJ7eyBjLmY0IH19IiBkPSJNMTE4 LDQ5MCBDMTYxLDQ4NSAxOTQsNTA4IDE5OCw1NDMgQzIzMyw1NTcgMjM1LDYwMiAyMDksNjIxIEMyMTEsNjU0IDE4MCw2NzcgMTQ3LDY2OCBDMTI2LDY5MiA4 NCw2ODkgNjcsNjY4IEMzMiw2NzMgMTAsNjQwIDI1LDYxMCBDNCw1ODQgMTksNTQyIDUyLDUzNSBDNTcsNTAyIDg4LDQ4MyAxMTgsNDkwIFoiPjwvcGF0aD4K ICAgICAgICAgICAgPHBhdGggc3Ryb2tlLXdpZHRoPSI1IiBkPSJNMTE4LDY4MiBDMTE2LDYzMiAxMTgsNTg0IDEyMCw1NDgiPjwvcGF0aD4KICAgICAgICAg ICAgPHBhdGggc3Ryb2tlLXdpZHRoPSI1IiBkPSJNMTE4LDYzNCBDMTAyLDYyMCA4Niw2MTAgNzAsNjAyIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIHN0 cm9rZS13aWR0aD0iNSIgZD0iTTExOSw2MDYgQzEzNCw1OTIgMTUwLDU4MiAxNjYsNTc2Ij48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIHN0cm9rZS13aWR0 aD0iNSIgZD0iTTExOCw1NzAgQzEwOCw1NjAgOTgsNTUyIDg4LDU0NiI+PC9wYXRoPgoKICAgICAgICAgICAgPCEtLSBhcmJ1c3RvcyB5IGZsb3JlcyAtLT4K ICAgICAgICAgICAgPHBhdGggZmlsbD0ie3sgYy5mNCB9fSIgZD0iTTEyMDUsODE4IEMxMTc4LDgxOCAxMTcwLDc5MCAxMTg4LDc3NiBDMTE4OCw3NTAgMTIy NCw3NDIgMTI0MCw3NjAgQzEyNjYsNzQ4IDEyOTAsNzcwIDEyODIsNzkyIEMxMjk0LDgwNCAxMjg2LDgxOCAxMjY4LDgxOCBaIj48L3BhdGg+CiAgICAgICAg ICAgIDxwYXRoIGZpbGw9Int7IGMuZjQgfX0iIGQ9Ik0xMjk4LDgxOCBDMTI3OCw4MTggMTI3Miw3OTggMTI4Niw3ODggQzEyODYsNzY2IDEzMjAsNzYwIDEz MzIsNzc2IEMxMzU0LDc3MiAxMzY4LDc5NCAxMzU0LDgwOCBDMTM1OCw4MTYgMTM0OCw4MTggMTMzNiw4MTggWiI+PC9wYXRoPgogICAgICAgICAgICA8ZyBz dHJva2Utd2lkdGg9IjQiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMjgsODE4IEMyMzAsODA0IDIyNCw3OTYgMjIwLDc5MCI+PC9wYXRoPgogICAgICAg ICAgICAgIDxwYXRoIGQ9Ik0xMTUwLDgxOCBDMTE1Miw4MDQgMTE0Niw3OTYgMTE0Miw3OTAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAg ICA8ZyBzdHJva2Utd2lkdGg9IjQiIGZpbGw9Int7IGMuZjQgfX0iPgogICAgICAgICAgICAgIDxjaXJjbGUgY3g9IjIxOCIgY3k9Ijc4NCIgcj0iOCI+PC9j aXJjbGU+CiAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTE0MCIgY3k9Ijc4NCIgcj0iOCI+PC9jaXJjbGU+CiAgICAgICAgICAgIDwvZz4KCiAgICAgICAg ICAgIDwhLS0gPT09PT0gVklEQSBTT0NJQUw6IHRlcnJhemEgPT09PT0gLS0+CiAgICAgICAgICAgIDxyZWN0IHg9Ijk1NCIgeT0iNTU2IiB3aWR0aD0iMjE2 IiBoZWlnaHQ9IjI2MiIgcng9IjE2IiBmaWxsPSJ7eyBjLnIyIH19IiBzdHJva2U9Im5vbmUiPjwvcmVjdD4KICAgICAgICAgICAgPHRleHQgeD0iMTA2MiIg eT0iNTQ0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iJ0JhbG9vIDInLCBzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIiBmb250LXNp emU9IjI0IiBmaWxsPSIjMTQyNjFDIiBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iNyIgcGFpbnQtb3JkZXI9InN0cm9rZSI+VmlkYSBzb2NpYWw8 L3RleHQ+CiAgICAgICAgICAgIDxyZWN0IGZpbGw9Int7IGMuZjIgfX0iIHg9Ijk2MiIgeT0iNzgwIiB3aWR0aD0iMTgiIGhlaWdodD0iMzgiIHJ4PSIzIj48 L3JlY3Q+CiAgICAgICAgICAgIDxyZWN0IGZpbGw9Int7IGMuZjIgfX0iIHg9IjExMjgiIHk9Ijc4MCIgd2lkdGg9IjE4IiBoZWlnaHQ9IjM4IiByeD0iMyI+ PC9yZWN0PgogICAgICAgICAgICA8cmVjdCBmaWxsPSJ7eyBjLmYyIH19IiB4PSI5NTAiIHk9Ijc1NCIgd2lkdGg9IjIxMCIgaGVpZ2h0PSIyNiIgcng9IjQi PjwvcmVjdD4KICAgICAgICAgICAgPGcgc3Ryb2tlLXdpZHRoPSI0Ij4KICAgICAgICAgICAgICA8cGF0aCBkPSJNOTgwLDc1NiBMOTgwLDc3OCI+PC9wYXRo PgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMDEwLDc1NiBMMTAxMCw3NzgiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMTA0MCw3NTYgTDEw NDAsNzc4Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTEwNzAsNzU2IEwxMDcwLDc3OCI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9 Ik0xMTAwLDc1NiBMMTEwMCw3NzgiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMTEzMCw3NTYgTDExMzAsNzc4Ij48L3BhdGg+CiAgICAgICAg ICAgIDwvZz4KICAgICAgICAgICAgPHBhdGggZD0iTTEwNTUsNjA2IEwxMDU1LDc1NCI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBmaWxsPSJ7eyBjLmYy IH19IiBkPSJNOTk2LDYwOCBDMTAwMCw1NjggMTExMCw1NjggMTExNCw2MDggQzExMDAsNTk4IDEwODQsNjEyIDEwNjksNjAyIEMxMDU2LDYxNCAxMDQwLDU5 OCAxMDI2LDYwOCBaIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik05NTAsNjYwIEwxMTYwLDY2MCI+PC9wYXRoPgogICAgICAgICAgICA8ZyBzdHJv a2Utd2lkdGg9IjQiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik05NTgsNjYyIEw5NTgsNzUyIj48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTk5 OCw2NjIgTDk5OCw3NTIiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMTAzOCw2NjIgTDEwMzgsNzUyIj48L3BhdGg+CiAgICAgICAgICAgICAg PHBhdGggZD0iTTEwNzgsNjYyIEwxMDc4LDc1MiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMTE4LDY2MiBMMTExOCw3NTIiPjwvcGF0aD4K ICAgICAgICAgICAgICA8cGF0aCBkPSJNMTE1Miw2NjIgTDExNTIsNzUyIj48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPGcgZmlsbD0i e3sgYy5mMiB9fSI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTk2NCw3MDYgTDk3OCw2NTIgTDEwMTQsNjU5IEwxMDAwLDcwOCBaIj48L3BhdGg+CiAgICAg ICAgICAgICAgPHJlY3QgeD0iOTYyIiB5PSI3MDAiIHdpZHRoPSI2NiIgaGVpZ2h0PSIxOCIgcng9IjgiPjwvcmVjdD4KICAgICAgICAgICAgICA8cmVjdCB4 PSI5NjQiIHk9IjcyMCIgd2lkdGg9IjYyIiBoZWlnaHQ9IjEwIiByeD0iNSI+PC9yZWN0PgogICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS13aWR0aD0iNSIg ZD0iTTk3MCw3MzAgTDk3MCw3NTIiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBzdHJva2Utd2lkdGg9IjUiIGQ9Ik0xMDIwLDczMCBMMTAyMCw3NTIi PjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMTA5NCw2NTkgTDExMzAsNjUyIEwxMTQ0LDcwNiBMMTEwOCw3MDggWiI+PC9wYXRoPgogICAgICAg ICAgICAgIDxyZWN0IHg9IjEwODAiIHk9IjcwMCIgd2lkdGg9IjY2IiBoZWlnaHQ9IjE4IiByeD0iOCI+PC9yZWN0PgogICAgICAgICAgICAgIDxyZWN0IHg9 IjEwODIiIHk9IjcyMCIgd2lkdGg9IjYyIiBoZWlnaHQ9IjEwIiByeD0iNSI+PC9yZWN0PgogICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS13aWR0aD0iNSIg ZD0iTTEwODgsNzMwIEwxMDg4LDc1MiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIHN0cm9rZS13aWR0aD0iNSIgZD0iTTExMzgsNzMwIEwxMTM4LDc1 MiI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDxnIHN0cm9rZS13aWR0aD0iNCI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTk3Miw2 ODQgTDEwMDYsNjkxIj48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTExMDIsNjkxIEwxMTM2LDY4NCI+PC9wYXRoPgogICAgICAgICAgICA8L2c+ CgogICAgICAgICAgICA8IS0tID09PT09IGNoaW1lbmVhID09PT09IC0tPgogICAgICAgICAgICA8cmVjdCBmaWxsPSJ7eyBjLmY2IH19IiB4PSI4MDIiIHk9 IjExNiIgd2lkdGg9IjY2IiBoZWlnaHQ9IjEzMCI+PC9yZWN0PgogICAgICAgICAgICA8cmVjdCBmaWxsPSJ7eyBjLmY2IH19IiB4PSI3OTAiIHk9Ijk4IiB3 aWR0aD0iOTAiIGhlaWdodD0iMjAiIHJ4PSI0Ij48L3JlY3Q+CiAgICAgICAgICAgIDxnIHN0cm9rZS13aWR0aD0iNCI+CiAgICAgICAgICAgICAgPHBhdGgg ZD0iTTgwMiwxNDAgTDg2OCwxNDAiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNODAyLDE2NCBMODY4LDE2NCI+PC9wYXRoPgogICAgICAgICAg ICAgIDxwYXRoIGQ9Ik04MDYsMTg4IEw4NjgsMTg4Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTgzNSwxMTggTDgzNSwxNDAiPjwvcGF0aD4K ICAgICAgICAgICAgICA8cGF0aCBkPSJNODE4LDE0MCBMODE4LDE2NCI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik04NTIsMTQwIEw4NTIsMTY0 Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTgzNSwxNjQgTDgzNSwxODgiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNODE4LDE4 OCBMODE4LDE5NyI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik04NTIsMTg4IEw4NTIsMjE4Ij48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KCiAg ICAgICAgICAgIDwhLS0gPT09PT0gQ1JFQ0lNSUVOVE86IMOhdGljbyA9PT09PSAtLT4KICAgICAgICAgICAgPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTIy OCwzMDIgQzIyNiwyOTYgMjMyLDI5MCAyMzgsMjg2IEw1OTIsNjQgQzU5OCw2MCA2MDQsNjAgNjEwLDY0IEw5NjQsMjg2IEM5NzAsMjkwIDk3NCwyOTYgOTcy LDMwMiBaIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Int7IGMucjYgfX0iIHN0cm9rZT0ibm9uZSIgZD0iTTIzMiwyOTggTDU5OCw2OCBMOTY2 LDI5OCBaIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMjgsMzAyIEMyMjYsMjk2IDIzMiwyOTAgMjM4LDI4NiBMNTkyLDY0IEM1OTgsNjAgNjA0 LDYwIDYxMCw2NCBMOTY0LDI4NiBDOTcwLDI5MCA5NzQsMjk2IDk3MiwzMDIgWiI+PC9wYXRoPgogICAgICAgICAgICA8cmVjdCBmaWxsPSJ7eyBjLmY2IH19 IiB4PSI0MDQiIHk9IjE4MiIgd2lkdGg9Ijk2IiBoZWlnaHQ9IjExMiIgcng9IjciPjwvcmVjdD4KICAgICAgICAgICAgPGcgc3Ryb2tlLXdpZHRoPSI0Ij4K ICAgICAgICAgICAgICA8cGF0aCBkPSJNNDA0LDIxMCBMNTAwLDIxMCI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik00MDQsMjM4IEw1MDAsMjM4 Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTQwNCwyNjYgTDUwMCwyNjYiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8 ZyBzdHJva2Utd2lkdGg9IjQiIGZpbGw9Int7IGMuZjYgfX0iPgogICAgICAgICAgICAgIDxyZWN0IHg9IjQxMiIgeT0iMTg4IiB3aWR0aD0iMTUiIGhlaWdo dD0iMjAiIHJ4PSIyIj48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNDMxIiB5PSIxODgiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyMCIgcng9IjIiPjwv cmVjdD4KICAgICAgICAgICAgICA8cmVjdCB4PSI0NTQiIHk9IjE5MCIgd2lkdGg9IjEzIiBoZWlnaHQ9IjE4IiByeD0iMiI+PC9yZWN0PgogICAgICAgICAg ICAgIDxyZWN0IHg9IjQxMiIgeT0iMjE2IiB3aWR0aD0iMTUiIGhlaWdodD0iMjAiIHJ4PSIyIj48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNDM0 IiB5PSIyMTgiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxOCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICA8cmVjdCB4PSI0NjYiIHk9IjIxNiIgd2lkdGg9 IjE1IiBoZWlnaHQ9IjIwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgIDxyZWN0IHg9IjQxMiIgeT0iMjQ2IiB3aWR0aD0iMTQiIGhlaWdodD0iMTgi IHJ4PSIyIj48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNDMwIiB5PSIyNDQiIHdpZHRoPSIxNSIgaGVpZ2h0PSIyMCIgcng9IjIiPjwvcmVjdD4K ICAgICAgICAgICAgICA8cmVjdCB4PSI0NTIiIHk9IjI0NiIgd2lkdGg9IjE0IiBoZWlnaHQ9IjE4IiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgIDxy ZWN0IHg9IjQxOCIgeT0iMjc0IiB3aWR0aD0iMTUiIGhlaWdodD0iMTYiIHJ4PSIyIj48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNDM5IiB5PSIy NzIiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxOCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8Y2lyY2xlIGN4PSI2MDAiIGN5 PSIxMzgiIHI9IjM0IiBmaWxsPSJ7eyBjLmY2IH19Ij48L2NpcmNsZT4KICAgICAgICAgICAgPGcgc3Ryb2tlLXdpZHRoPSI0Ij4KICAgICAgICAgICAgICA8 cGF0aCBkPSJNNjAwLDEwNCBMNjAwLDE3MiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik01NjYsMTM4IEw2MzQsMTM4Ij48L3BhdGg+CiAgICAg ICAgICAgIDwvZz4KICAgICAgICAgICAgPGcgZmlsbD0ie3sgYy5mNiB9fSI+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNzA4IiB5PSIyMjgiIHdpZHRoPSI3 MiIgaGVpZ2h0PSI1MiIgcng9IjE0Ij48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNjkyIiB5PSIyNjYiIHdpZHRoPSIxMDQiIGhlaWdodD0iMzAi IHJ4PSIxMSI+PC9yZWN0PgogICAgICAgICAgICAgIDxyZWN0IHg9IjY4NiIgeT0iMjUwIiB3aWR0aD0iMjAiIGhlaWdodD0iNDYiIHJ4PSI5Ij48L3JlY3Q+ CiAgICAgICAgICAgICAgPHJlY3QgeD0iNzgyIiB5PSIyNTAiIHdpZHRoPSIyMCIgaGVpZ2h0PSI0NiIgcng9IjkiPjwvcmVjdD4KICAgICAgICAgICAgPC9n PgogICAgICAgICAgICA8ZyBzdHJva2Utd2lkdGg9IjUiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik03MDAsMjk2IEw3MDAsMzAwIj48L3BhdGg+CiAgICAg ICAgICAgICAgPHBhdGggZD0iTTc4OCwyOTYgTDc4OCwzMDAiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8cGF0aCBkPSJNODMyLDI5 NiBMODMyLDI2MiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBmaWxsPSJ7eyBjLmY2IH19IiBkPSJNODE2LDIzOCBMODUwLDIzOCBMODYwLDI2MiBMODA2 LDI2MiBaIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIHN0cm9rZS13aWR0aD0iNSIgZD0iTTgxOCwyOTYgTDg0NiwyOTYiPjwvcGF0aD4KICAgICAgICAg ICAgPHRleHQgeD0iNjAwIiB5PSIyMTQiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSInQmFsb28gMicsIHNhbnMtc2VyaWYiIGZvbnQtd2Vp Z2h0PSI3MDAiIGZvbnQtc2l6ZT0iMjQiIGZpbGw9IiMxNDI2MUMiIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSI3IiBwYWludC1vcmRlcj0ic3Ry b2tlIj5DcmVjaW1pZW50bzwvdGV4dD4KCiAgICAgICAgICAgIDwhLS0gPT09PT0gY3VlcnBvIGRlIGxhIGNhc2EgPT09PT0gLS0+CiAgICAgICAgICAgIDxy ZWN0IGZpbGw9IiNGRkZGRkYiIHg9IjI1MCIgeT0iMzAwIiB3aWR0aD0iNzAwIiBoZWlnaHQ9IjUxOCIgcng9IjYiPjwvcmVjdD4KICAgICAgICAgICAgPGcg c3Ryb2tlPSJub25lIj4KICAgICAgICAgICAgICA8cmVjdCB4PSIyNTIiIHk9IjMwMiIgd2lkdGg9IjM0NiIgaGVpZ2h0PSIyMDYiIGZpbGw9Int7IGMucjEg fX0iPjwvcmVjdD4KICAgICAgICAgICAgICA8cmVjdCB4PSI2MDIiIHk9IjMwMiIgd2lkdGg9IjM0NiIgaGVpZ2h0PSIyMDYiIGZpbGw9Int7IGMucjggfX0i PjwvcmVjdD4KICAgICAgICAgICAgICA8cmVjdCB4PSIyNTIiIHk9IjUxMiIgd2lkdGg9IjIwNiIgaGVpZ2h0PSIyNDAiIGZpbGw9Int7IGMucjAgfX0iPjwv cmVjdD4KICAgICAgICAgICAgICA8cmVjdCB4PSI0NjIiIHk9IjUxMiIgd2lkdGg9IjE2MiIgaGVpZ2h0PSIyNDAiIGZpbGw9Int7IGMucjUgfX0iPjwvcmVj dD4KICAgICAgICAgICAgICA8cmVjdCB4PSI2MjgiIHk9IjUxMiIgd2lkdGg9IjE0OCIgaGVpZ2h0PSIyNDAiIGZpbGw9Int7IGMucjkgfX0iPjwvcmVjdD4K ICAgICAgICAgICAgICA8cmVjdCB4PSI3ODAiIHk9IjUxMiIgd2lkdGg9IjE2OCIgaGVpZ2h0PSIyNDAiIGZpbGw9Int7IGMucjMgfX0iPjwvcmVjdD4KICAg ICAgICAgICAgICA8cmVjdCB4PSIyNTIiIHk9Ijc1NiIgd2lkdGg9IjY5NiIgaGVpZ2h0PSI2MCIgZmlsbD0ie3sgYy5yNyB9fSI+PC9yZWN0PgogICAgICAg ICAgICA8L2c+CiAgICAgICAgICAgIDxyZWN0IHg9IjI1MCIgeT0iMzAwIiB3aWR0aD0iNzAwIiBoZWlnaHQ9IjUxOCIgcng9IjYiPjwvcmVjdD4KICAgICAg ICAgICAgPHBhdGggZD0iTTI1MCw1MTAgTDk1MCw1MTAiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggZD0iTTYwMCwzMDIgTDYwMCw1MTAiPjwvcGF0aD4K ICAgICAgICAgICAgPHBhdGggZD0iTTI1MCw3NTQgTDk1MCw3NTQiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggZD0iTTQ2MCw1MTIgTDQ2MCw3NTIiPjwv cGF0aD4KICAgICAgICAgICAgPHBhdGggZD0iTTYyNiw1MTIgTDYyNiw3NTIiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggZD0iTTc3OCw1MTIgTDc3OCw3 NTIiPjwvcGF0aD4KCiAgICAgICAgICAgIDwhLS0gY2ltaWVudG9zOiBQUk9Qw5NTSVRPIC0tPgogICAgICAgICAgICA8ZyBzdHJva2Utd2lkdGg9IjIuNSIg b3BhY2l0eT0iMC4zMiI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTI1MCw3NzUgTDk1MCw3NzUiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJN MjUwLDc5NiBMOTUwLDc5NiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMDAsNzU0IEwzMDAsNzc1Ij48L3BhdGg+CiAgICAgICAgICAgICAg PHBhdGggZD0iTTM4MCw3NTQgTDM4MCw3NzUiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNDYwLDc1NCBMNDYwLDc3NSI+PC9wYXRoPgogICAg ICAgICAgICAgIDxwYXRoIGQ9Ik01NDAsNzU0IEw1NDAsNzc1Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTYyMCw3NTQgTDYyMCw3NzUiPjwv cGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNzgwLDc1NCBMNzgwLDc3NSI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik04NjAsNzU0IEw4 NjAsNzc1Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTM0MCw3NzUgTDM0MCw3OTYiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJN NDIwLDc3NSBMNDIwLDc5NiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik01MDAsNzc1IEw1MDAsNzk2Ij48L3BhdGg+CiAgICAgICAgICAgICAg PHBhdGggZD0iTTU4MCw3NzUgTDU4MCw3OTYiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNzQwLDc3NSBMNzQwLDc5NiI+PC9wYXRoPgogICAg ICAgICAgICAgIDxwYXRoIGQ9Ik04MjAsNzc1IEw4MjAsNzk2Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTkwMCw3NzUgTDkwMCw3OTYiPjwv cGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMzAwLDc5NiBMMzAwLDgxNiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zODAsNzk2IEwz ODAsODE2Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTQ2MCw3OTYgTDQ2MCw4MTYiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJN NTQwLDc5NiBMNTQwLDgxNiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik03ODAsNzk2IEw3ODAsODE2Ij48L3BhdGg+CiAgICAgICAgICAgICAg PHBhdGggZD0iTTg2MCw3OTYgTDg2MCw4MTYiPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8dGV4dCB4PSI0MzAiIHk9Ijc5NCIgdGV4 dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9IidCYWxvbyAyJywgc2Fucy1zZXJpZiIgZm9udC13ZWlnaHQ9IjcwMCIgZm9udC1zaXplPSIyNCIgZmls bD0iIzE0MjYxQyIgc3Ryb2tlPSIjRkZGRkZGIiBzdHJva2Utd2lkdGg9IjciIHBhaW50LW9yZGVyPSJzdHJva2UiPlByb3DDs3NpdG88L3RleHQ+CgogICAg ICAgICAgICA8IS0tID09PT09IEVTUEFDSU8gUEVSU09OQUw6IGRvcm1pdG9yaW8gPT09PT0gLS0+CiAgICAgICAgICAgIDx0ZXh0IHg9IjQyNSIgeT0iMzQ0 IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iJ0JhbG9vIDInLCBzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIiBmb250LXNpemU9IjI0 IiBmaWxsPSIjMTQyNjFDIiBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iNyIgcGFpbnQtb3JkZXI9InN0cm9rZSI+RXNwYWNpbyBwZXJzb25hbDwv dGV4dD4KCiAgICAgICAgICAgIDxyZWN0IHg9IjUwNiIgeT0iMzg4IiB3aWR0aD0iNzQiIGhlaWdodD0iNzAiIHJ4PSI1IiBmaWxsPSJ7eyBjLmYxIH19Ij48 L3JlY3Q+CiAgICAgICAgICAgIDxnIHN0cm9rZS13aWR0aD0iNCI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTU0MywzODggTDU0Myw0NTgiPjwvcGF0aD4K ICAgICAgICAgICAgICA8cGF0aCBkPSJNNTA2LDQyMyBMNTgwLDQyMyI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDxnIGZpbGw9Int7 IGMuZjEgfX0iPgogICAgICAgICAgICAgIDxyZWN0IHg9IjI2NiIgeT0iNDI2IiB3aWR0aD0iMTgiIGhlaWdodD0iNzgiIHJ4PSI4Ij48L3JlY3Q+CiAgICAg ICAgICAgICAgPHJlY3QgeD0iMjg0IiB5PSI0NDAiIHdpZHRoPSIxNTAiIGhlaWdodD0iNjQiIHJ4PSIxMiI+PC9yZWN0PgogICAgICAgICAgICAgIDxyZWN0 IHg9IjI5NiIgeT0iNDUwIiB3aWR0aD0iNTQiIGhlaWdodD0iMjgiIHJ4PSI5Ij48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNDQwIiB5PSI0NDgi IHdpZHRoPSI1NiIgaGVpZ2h0PSI1NiIgcng9IjYiPjwvcmVjdD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8ZyBzdHJva2Utd2lkdGg9IjQiPgog ICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNjYsNDQyIEwzNjYsNTAyIj48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTQ0MCw0NzYgTDQ5Niw0NzYi PjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8Y2lyY2xlIGZpbGw9Int7IGMuZjEgfX0iIHN0cm9rZS13aWR0aD0iNCIgY3g9IjQ2OCIg Y3k9IjQ2NCIgcj0iNSI+PC9jaXJjbGU+CgogICAgICAgICAgICA8IS0tID09PT09IEJJRU5FU1RBUjogYmHDsW8gPT09PT0gLS0+CiAgICAgICAgICAgIDx0 ZXh0IHg9Ijc3NSIgeT0iMzQ0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iJ0JhbG9vIDInLCBzYW5zLXNlcmlmIiBmb250LXdlaWdodD0i NzAwIiBmb250LXNpemU9IjI0IiBmaWxsPSIjMTQyNjFDIiBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iNyIgcGFpbnQtb3JkZXI9InN0cm9rZSI+ QmllbmVzdGFyPC90ZXh0PgoKICAgICAgICAgICAgPGNpcmNsZSBjeD0iNzAwIiBjeT0iNDAyIiByPSIzNiIgZmlsbD0ie3sgYy5mOCB9fSI+PC9jaXJjbGU+ CiAgICAgICAgICAgIDxjaXJjbGUgc3Ryb2tlLXdpZHRoPSI0IiBjeD0iNzAwIiBjeT0iNDAyIiByPSIyMyI+PC9jaXJjbGU+CiAgICAgICAgICAgIDxyZWN0 IGZpbGw9Int7IGMuZjggfX0iIHg9IjgyNiIgeT0iMzgwIiB3aWR0aD0iOTIiIGhlaWdodD0iMTQiIHJ4PSI0Ij48L3JlY3Q+CiAgICAgICAgICAgIDxnIGZp bGw9Int7IGMuZjggfX0iPgogICAgICAgICAgICAgIDxyZWN0IHg9IjgzNiIgeT0iMzk0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDQiIHJ4PSIxNSI+PC9yZWN0 PgogICAgICAgICAgICAgIDxyZWN0IHg9Ijg3NiIgeT0iMzk0IiB3aWR0aD0iMzIiIGhlaWdodD0iNDQiIHJ4PSIxNSI+PC9yZWN0PgogICAgICAgICAgICA8 L2c+CiAgICAgICAgICAgIDxnIHN0cm9rZS13aWR0aD0iNCI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTg0Niw0MDggTDg2MCw0MDgiPjwvcGF0aD4KICAg ICAgICAgICAgICA8cGF0aCBkPSJNODg2LDQyMCBMOTAwLDQyMCI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDxwYXRoIGZpbGw9Int7 IGMuZjggfX0iIGQ9Ik02NjYsNDUwIEw4OTIsNDUwIEM4OTYsNDUwIDg5OCw0NTQgODk2LDQ2NCBMODg4LDQ4NiBDODg0LDQ5NCA4NzYsNDk4IDg2Niw0OTgg TDY5Miw0OTggQzY4Miw0OTggNjc0LDQ5NCA2NzAsNDg2IEw2NjIsNDY0IEM2NjAsNDU0IDY2Miw0NTAgNjY2LDQ1MCBaIj48L3BhdGg+CiAgICAgICAgICAg IDxnIGZpbGw9Int7IGMuZjggfX0iIHN0cm9rZS13aWR0aD0iNSI+CiAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iNzAwIiBjeT0iNTA0IiByPSI2Ij48L2Np cmNsZT4KICAgICAgICAgICAgICA8Y2lyY2xlIGN4PSI4NTgiIGN5PSI1MDQiIHI9IjYiPjwvY2lyY2xlPgogICAgICAgICAgICA8L2c+CgogICAgICAgICAg ICA8IS0tID09PT09IFJFTEFDSU9ORVM6IHNhbGEgPT09PT0gLS0+CiAgICAgICAgICAgIDx0ZXh0IHg9IjM1NiIgeT0iNTU0IiB0ZXh0LWFuY2hvcj0ibWlk ZGxlIiBmb250LWZhbWlseT0iJ0JhbG9vIDInLCBzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIiBmb250LXNpemU9IjI0IiBmaWxsPSIjMTQyNjFDIiBz dHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iNyIgcGFpbnQtb3JkZXI9InN0cm9rZSI+UmVsYWNpb25lczwvdGV4dD4KCiAgICAgICAgICAgIDxnIGZp bGw9Int7IGMuZjAgfX0iPgogICAgICAgICAgICAgIDxyZWN0IHg9IjI2OCIgeT0iNjY0IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjcwIiByeD0iMTQiPjwvcmVj dD4KICAgICAgICAgICAgICA8cmVjdCB4PSIyNjIiIHk9IjY0NCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjkwIiByeD0iOSI+PC9yZWN0PgogICAgICAgICAgICAg IDxyZWN0IHg9IjM3MCIgeT0iNjQ0IiB3aWR0aD0iMjQiIGhlaWdodD0iOTAiIHJ4PSI5Ij48L3JlY3Q+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAg PGcgc3Ryb2tlLXdpZHRoPSI0Ij4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMzI4LDY2OCBMMzI4LDczMiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRo IGQ9Ik0yODYsNjY4IEwzNzAsNjY4Ij48L3BhdGg+CiAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPHBhdGggZD0iTTQyNiw3NTIgTDQyNiw2MjQiPjwv cGF0aD4KICAgICAgICAgICAgPHBhdGggZmlsbD0ie3sgYy5mMCB9fSIgZD0iTTQwNiw1OTYgTDQ0Niw1OTYgTDQ1Miw2MjQgTDQwMCw2MjQgWiI+PC9wYXRo PgogICAgICAgICAgICA8cGF0aCBzdHJva2Utd2lkdGg9IjUiIGQ9Ik00MTIsNzUyIEw0NDAsNzUyIj48L3BhdGg+CgogICAgICAgICAgICA8IS0tID09PT09 IEZJTkFOWkFTOiBjb2NpbmEgPT09PT0gLS0+CiAgICAgICAgICAgIDx0ZXh0IHg9IjU0NCIgeT0iNTU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZh bWlseT0iJ0JhbG9vIDInLCBzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIiBmb250LXNpemU9IjI0IiBmaWxsPSIjMTQyNjFDIiBzdHJva2U9IiNGRkZG RkYiIHN0cm9rZS13aWR0aD0iNyIgcGFpbnQtb3JkZXI9InN0cm9rZSI+RmluYW56YXM8L3RleHQ+CgogICAgICAgICAgICA8cmVjdCBmaWxsPSJ7eyBjLmY1 IH19IiB4PSI0NzAiIHk9IjYzNiIgd2lkdGg9IjY4IiBoZWlnaHQ9IjQ4IiByeD0iNiI+PC9yZWN0PgogICAgICAgICAgICA8ZyBzdHJva2Utd2lkdGg9IjQi PgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik01MDQsNjM2IEw1MDQsNjg0Ij48L3BhdGg+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTQ5Miw2NTQgTDQ5Miw2 NjYiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNTE2LDY1NCBMNTE2LDY2NiI+PC9wYXRoPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICAg IDxyZWN0IGZpbGw9Int7IGMuZjUgfX0iIHg9IjQ3NCIgeT0iNjkwIiB3aWR0aD0iMTQwIiBoZWlnaHQ9IjYyIiByeD0iNiI+PC9yZWN0PgogICAgICAgICAg ICA8cGF0aCBzdHJva2Utd2lkdGg9IjQiIGQ9Ik00NzQsNzA4IEw2MTQsNzA4Ij48L3BhdGg+CiAgICAgICAgICAgIDxnIHN0cm9rZS13aWR0aD0iNCIgZmls bD0ie3sgYy5mNSB9fSI+CiAgICAgICAgICAgICAgPGNpcmNsZSBjeD0iNTAwIiBjeT0iNjk5IiByPSI4Ij48L2NpcmNsZT4KICAgICAgICAgICAgICA8Y2ly Y2xlIGN4PSI1MjgiIGN5PSI2OTkiIHI9IjgiPjwvY2lyY2xlPgogICAgICAgICAgICA8L2c+CiAgICAgICAgICAgIDxwYXRoIHN0cm9rZS13aWR0aD0iNCIg ZD0iTTU1Niw3MjQgTDU5OCw3MjQiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggZmlsbD0ie3sgYy5mNSB9fSIgZD0iTTU1NCw2NjAgTDYwNiw2NjAgTDYx MCw2OTAgTDU1MCw2OTAgWiI+PC9wYXRoPgogICAgICAgICAgICA8cmVjdCBmaWxsPSJ7eyBjLmY1IH19IiB4PSI1NDgiIHk9IjY0OCIgd2lkdGg9IjY0IiBo ZWlnaHQ9IjEyIiByeD0iNSI+PC9yZWN0PgogICAgICAgICAgICA8cGF0aCBmaWxsPSJ7eyBjLmY1IH19IiBkPSJNNTcyLDY0OCBDNTcyLDYzOCA1ODgsNjM4 IDU4OCw2NDggWiI+PC9wYXRoPgoKICAgICAgICAgICAgPCEtLSBlc2NhbG9uZXMgZGUgZW50cmFkYSAtLT4KICAgICAgICAgICAgPHBhdGggZmlsbD0ie3sg Yy5mNCB9fSIgZD0iTTU5Niw4NTYgTDgwOCw4NTYgTDgwOCw4ODQgUTgwOCw4OTAgODAyLDg5MCBMNjAyLDg5MCBRNTk2LDg5MCA1OTYsODg0IFoiPjwvcGF0 aD4KICAgICAgICAgICAgPHBhdGggZmlsbD0ie3sgYy5mNyB9fSIgZD0iTTY2OCw3NTQgTDczNiw3NTQgTDczNiw3ODggTDc2MCw3ODggTDc2MCw4MjIgTDc4 NCw4MjIgTDc4NCw4NTYgTDYyMCw4NTYgTDYyMCw4MjIgTDY0NCw4MjIgTDY0NCw3ODggTDY2OCw3ODggWiI+PC9wYXRoPgogICAgICAgICAgICA8ZyBzdHJv a2Utd2lkdGg9IjMuNSI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTY2OCw3ODggTDczNiw3ODgiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJN NjQ0LDgyMiBMNzYwLDgyMiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik02MjAsODU2IEw3ODQsODU2Ij48L3BhdGg+CiAgICAgICAgICAgIDwv Zz4KCiAgICAgICAgICAgIDwhLS0gPT09PT0gUFJJT1JJREFERVM6IGVudHJhZGEgPT09PT0gLS0+CiAgICAgICAgICAgIDx0ZXh0IHg9IjcwMiIgeT0iNTU0 IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iJ0JhbG9vIDInLCBzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIiBmb250LXNpemU9IjI0 IiBmaWxsPSIjMTQyNjFDIiBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iNyIgcGFpbnQtb3JkZXI9InN0cm9rZSI+UHJpb3JpZGFkZXM8L3RleHQ+ CgogICAgICAgICAgICA8cmVjdCBmaWxsPSJ7eyBjLmY5IH19IiB4PSI2NzQiIHk9IjYzMCIgd2lkdGg9IjU2IiBoZWlnaHQ9IjEyNCIgcng9IjgiPjwvcmVj dD4KICAgICAgICAgICAgPHBhdGggc3Ryb2tlLXdpZHRoPSI0IiBkPSJNNjgyLDY1MCBMNzIyLDY1MCI+PC9wYXRoPgogICAgICAgICAgICA8Y2lyY2xlIGZp bGw9Int7IGMuZjkgfX0iIHN0cm9rZS13aWR0aD0iNCIgY3g9IjcxNiIgY3k9IjcwMCIgcj0iNSI+PC9jaXJjbGU+CgogICAgICAgICAgICA8IS0tID09PT09 IERFU0FSUk9MTE86IG9maWNpbmEgPT09PT0gLS0+CiAgICAgICAgICAgIDx0ZXh0IHg9Ijg2MCIgeT0iNTU0IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250 LWZhbWlseT0iJ0JhbG9vIDInLCBzYW5zLXNlcmlmIiBmb250LXdlaWdodD0iNzAwIiBmb250LXNpemU9IjI0IiBmaWxsPSIjMTQyNjFDIiBzdHJva2U9IiNG RkZGRkYiIHN0cm9rZS13aWR0aD0iNyIgcGFpbnQtb3JkZXI9InN0cm9rZSI+RGVzYXJyb2xsbzwvdGV4dD4KCiAgICAgICAgICAgIDxyZWN0IGZpbGw9Int7 IGMuZjMgfX0iIHg9Ijc5OCIgeT0iNjkyIiB3aWR0aD0iMTE4IiBoZWlnaHQ9IjIwIiByeD0iNiI+PC9yZWN0PgogICAgICAgICAgICA8cGF0aCBzdHJva2Ut d2lkdGg9IjUiIGQ9Ik04MDgsNzEyIEw4MDgsNzUyIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIHN0cm9rZS13aWR0aD0iNSIgZD0iTTkwNiw3MTIgTDkw Niw3NTIiPjwvcGF0aD4KICAgICAgICAgICAgPHJlY3QgZmlsbD0ie3sgYy5mMyB9fSIgeD0iODE4IiB5PSI2ODAiIHdpZHRoPSI3MCIgaGVpZ2h0PSIxMiIg cng9IjUiPjwvcmVjdD4KICAgICAgICAgICAgPHBhdGggZmlsbD0ie3sgYy5mMyB9fSIgZD0iTTgyNiw2ODAgTDg4Miw2ODAgTDg4OCw2MzIgTDgzMiw2MzIg WiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBzdHJva2Utd2lkdGg9IjQiIGQ9Ik04MzcsNjcwIEw4NzgsNjcwIj48L3BhdGg+CiAgICAgICAgICAgIDxy ZWN0IGZpbGw9Int7IGMuZjMgfX0iIHg9IjkyMCIgeT0iNjU2IiB3aWR0aD0iMTUiIGhlaWdodD0iNTgiIHJ4PSI3Ij48L3JlY3Q+CiAgICAgICAgICAgIDxy ZWN0IGZpbGw9Int7IGMuZjMgfX0iIHg9IjkxNCIgeT0iNzE0IiB3aWR0aD0iMzIiIGhlaWdodD0iMTYiIHJ4PSI3Ij48L3JlY3Q+CiAgICAgICAgICAgIDxw YXRoIHN0cm9rZS13aWR0aD0iNSIgZD0iTTkzMCw3MzAgTDkzMCw3NDQiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggc3Ryb2tlLXdpZHRoPSI1IiBkPSJN OTE2LDc1MiBMOTMwLDc0NCBMOTQ0LDc1MiI+PC9wYXRoPgoKICAgICAgICAgICAge3sgaGlnaGxpZ2h0IH19CiAgICAgICAgICAgIHt7IG1lZGFscyB9fQoK ICAgICAgICAgICAgPCEtLSB6b25hcyBzZW5zaWJsZXM6IGNsaWMgc2FsdGEgYSBsYSBwcmVndW50YSAtLT4KICAgICAgICAgICAgPGcgZmlsbD0iI0ZGRkZG RiIgZmlsbC1vcGFjaXR5PSIwIiBzdHJva2U9Im5vbmUiIHN0eWxlPSJjdXJzb3I6IHBvaW50ZXI7Ij4KICAgICAgICAgICAgICA8cG9seWdvbiBwb2ludHM9 IjIzOCwyOTIgNTk4LDc0IDk2MCwyOTIiIHNjLWNhbWVsLW9uLWNsaWNrPSJ7eyBoaXQucjYgfX0iIHNjLWNhbWVsLW9uLW1vdXNlLWVudGVyPSJ7eyBvdmVy LnI2IH19IiBzYy1jYW1lbC1vbi1tb3VzZS1sZWF2ZT0ie3sgb3V0IH19Ij48L3BvbHlnb24+CiAgICAgICAgICAgICAgPHJlY3QgeD0iMjUyIiB5PSIzMDIi IHdpZHRoPSIzNDYiIGhlaWdodD0iMjA2IiBzYy1jYW1lbC1vbi1jbGljaz0ie3sgaGl0LnIxIH19IiBzYy1jYW1lbC1vbi1tb3VzZS1lbnRlcj0ie3sgb3Zl ci5yMSB9fSIgc2MtY2FtZWwtb24tbW91c2UtbGVhdmU9Int7IG91dCB9fSI+PC9yZWN0PgogICAgICAgICAgICAgIDxyZWN0IHg9IjYwMiIgeT0iMzAyIiB3 aWR0aD0iMzQ2IiBoZWlnaHQ9IjIwNiIgc2MtY2FtZWwtb24tY2xpY2s9Int7IGhpdC5yOCB9fSIgc2MtY2FtZWwtb24tbW91c2UtZW50ZXI9Int7IG92ZXIu cjggfX0iIHNjLWNhbWVsLW9uLW1vdXNlLWxlYXZlPSJ7eyBvdXQgfX0iPjwvcmVjdD4KICAgICAgICAgICAgICA8cmVjdCB4PSIyNTIiIHk9IjUxMiIgd2lk dGg9IjIwNiIgaGVpZ2h0PSIyNDAiIHNjLWNhbWVsLW9uLWNsaWNrPSJ7eyBoaXQucjAgfX0iIHNjLWNhbWVsLW9uLW1vdXNlLWVudGVyPSJ7eyBvdmVyLnIw IH19IiBzYy1jYW1lbC1vbi1tb3VzZS1sZWF2ZT0ie3sgb3V0IH19Ij48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNDYyIiB5PSI1MTIiIHdpZHRo PSIxNjIiIGhlaWdodD0iMjQwIiBzYy1jYW1lbC1vbi1jbGljaz0ie3sgaGl0LnI1IH19IiBzYy1jYW1lbC1vbi1tb3VzZS1lbnRlcj0ie3sgb3Zlci5yNSB9 fSIgc2MtY2FtZWwtb24tbW91c2UtbGVhdmU9Int7IG91dCB9fSI+PC9yZWN0PgogICAgICAgICAgICAgIDxyZWN0IHg9IjYyOCIgeT0iNTEyIiB3aWR0aD0i MTQ4IiBoZWlnaHQ9IjI0MCIgc2MtY2FtZWwtb24tY2xpY2s9Int7IGhpdC5yOSB9fSIgc2MtY2FtZWwtb24tbW91c2UtZW50ZXI9Int7IG92ZXIucjkgfX0i IHNjLWNhbWVsLW9uLW1vdXNlLWxlYXZlPSJ7eyBvdXQgfX0iPjwvcmVjdD4KICAgICAgICAgICAgICA8cmVjdCB4PSI3ODAiIHk9IjUxMiIgd2lkdGg9IjE2 OCIgaGVpZ2h0PSIyNDAiIHNjLWNhbWVsLW9uLWNsaWNrPSJ7eyBoaXQucjMgfX0iIHNjLWNhbWVsLW9uLW1vdXNlLWVudGVyPSJ7eyBvdmVyLnIzIH19IiBz Yy1jYW1lbC1vbi1tb3VzZS1sZWF2ZT0ie3sgb3V0IH19Ij48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iMjUyIiB5PSI3NTYiIHdpZHRoPSI2OTYi IGhlaWdodD0iNjAiIHNjLWNhbWVsLW9uLWNsaWNrPSJ7eyBoaXQucjcgfX0iIHNjLWNhbWVsLW9uLW1vdXNlLWVudGVyPSJ7eyBvdmVyLnI3IH19IiBzYy1j YW1lbC1vbi1tb3VzZS1sZWF2ZT0ie3sgb3V0IH19Ij48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iOTU0IiB5PSI1NTYiIHdpZHRoPSIyMTYiIGhl aWdodD0iMjYyIiByeD0iMTYiIHNjLWNhbWVsLW9uLWNsaWNrPSJ7eyBoaXQucjIgfX0iIHNjLWNhbWVsLW9uLW1vdXNlLWVudGVyPSJ7eyBvdmVyLnIyIH19 IiBzYy1jYW1lbC1vbi1tb3VzZS1sZWF2ZT0ie3sgb3V0IH19Ij48L3JlY3Q+CiAgICAgICAgICAgICAgPHJlY3QgeD0iNDAiIHk9IjgxOCIgd2lkdGg9IjEz MjAiIGhlaWdodD0iOTYiIHJ4PSIyNiIgc2MtY2FtZWwtb24tY2xpY2s9Int7IGhpdC5yNCB9fSIgc2MtY2FtZWwtb24tbW91c2UtZW50ZXI9Int7IG92ZXIu cjQgfX0iIHNjLWNhbWVsLW9uLW1vdXNlLWxlYXZlPSJ7eyBvdXQgfX0iPjwvcmVjdD4KICAgICAgICAgICAgPC9nPgogICAgICAgICAgPC9nPgogICAgICAg IDwvc3ZnPgogICAgICAgIDxkaXYgY2xhc3M9ImNiLWNhcHRpb24iIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7IGZvbnQtZmFtaWx5OiAnQmFsb28gMics IHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMTRweDsgY29sb3I6ICM1OTYxNUE7IG1hcmdpbi10b3A6IDEwcHg7Ij5Ub2NhIHVu IGVzcGFjaW8gcGFyYSBpciBhIHN1IHByZWd1bnRhPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iY2ItY2FyZHMiIHN0eWxlPSJkaXNw bGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7IGdhcDogMTZweDsgYWxpZ24taXRlbXM6IHN0cmV0 Y2g7Ij4KICAgICAgICA8c2MtZm9yIGxpc3Q9Int7IHRpbGVzIH19IiBhcz0idCIgaGludC1wbGFjZWhvbGRlci1jb3VudD0iMTAiPgogICAgICAgICAgPGRp diByZWY9Int7IHQucmVmIH19IiBzYy1jYW1lbC1vbi1tb3VzZS1lbnRlcj0ie3sgdC5vbkVudGVyIH19IiBzYy1jYW1lbC1vbi1tb3VzZS1sZWF2ZT0ie3sg dC5vbkxlYXZlIH19IiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGRkZGRjsgYm9yZGVyLXJhZGl1czogMThweDsgYm9yZGVyOiAyLjVweCBzb2xpZCB7eyB0LmJv cmRlciB9fTsgb3ZlcmZsb3c6IGhpZGRlbjsgYm94LXNoYWRvdzoge3sgdC5zaGFkb3cgfX07IHRyYW5zaXRpb246IGJveC1zaGFkb3cgLjJzIGVhc2U7IGRp c3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47Ij4KICAgICAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OiA3cHg7IGJhY2tncm91bmQ6IHt7 IHQuYWNjZW50IH19OyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDE0cHggMThweCAxOHB4OyBkaXNwbGF5OiBmbGV4OyBmbGV4 LWRpcmVjdGlvbjogY29sdW1uOyBmbGV4OiAxOyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBz cGFjZS1iZXR3ZWVuOyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDEycHg7Ij4KICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxp bmUtZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiA3cHg7IGZvbnQtZmFtaWx5OiAnQmFsb28gMicsIHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OiA2 MDA7IGZvbnQtc2l6ZTogMTJweDsgY29sb3I6ICM1NjQwOEM7IGJhY2tncm91bmQ6ICNGNEVFRkI7IGJvcmRlci1yYWRpdXM6IDIwcHg7IHBhZGRpbmc6IDRw eCAxM3B4OyI+e3sgdC5yb29tIH19PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnQmFsb28gMicsIHNhbnMtc2Vy aWY7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogMjBweDsgY29sb3I6IHt7IHQuYWNjZW50IH19OyI+e3sgdC5iYWRnZSB9fTwvc3Bhbj4KICAgICAg ICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAxMHB4OyBmb250LXNpemU6IDE1cHg7IGxpbmUtaGVpZ2h0OiAx LjQ1OyBtaW4taGVpZ2h0OiA0NHB4OyI+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiAnQmFsb28gMicsIHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OiA3MDA7 IGZvbnQtc2l6ZTogMTdweDsiPnt7IHQubmFtZSB9fTwvc3Bhbj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjNTk2MTVBOyBmb250LXdlaWdodDogNjAwOyI+wrcg e3sgdC5kZXNjIH19PC9zcGFuPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbjogMTJweCAwIDZweDsgYmFja2dyb3VuZDogI0ZCRjdG RjsgYm9yZGVyOiAxLjVweCBkYXNoZWQgI0E5OEJENjsgYm9yZGVyLXJhZGl1czogMTNweDsgcGFkZGluZzogMTJweCAxNXB4OyB0ZXh0LXdyYXA6IHByZXR0 eTsgZmxleDogMTsgZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7Ij4KICAgICAgICAgICAg ICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTVweDsgZm9udC13ZWlnaHQ6IDcwMDsgbGluZS1oZWlnaHQ6IDEuNDU7IGNvbG9yOiAjMkUyNTQ1OyI+e3sg dC5xdWVzdGlvbiB9fTwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogNjAwOyBsaW5lLWhl aWdodDogMS40NTsgY29sb3I6ICM2QjVFOEE7IG1hcmdpbi10b3A6IDZweDsiPnt7IHQuaGludCB9fTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAg ICAgICAgICAgIDxkaXYgcm9sZT0iZ3JvdXAiIGFyaWEtbGFiZWw9Int7IHQubmFtZSB9fSIgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBtYXJn aW4tdG9wOiAxMnB4OyI+CiAgICAgICAgICAgICAgICA8c2MtZm9yIGxpc3Q9Int7IHQub3B0cyB9fSIgYXM9Im8iIGhpbnQtcGxhY2Vob2xkZXItY291bnQ9 IjUiPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjYi1vcHQiIHR5cGU9ImJ1dHRvbiIgc2MtY2FtZWwtb24tY2xpY2s9Int7IG8ub25QaWNr IH19IiBhcmlhLXByZXNzZWQ9Int7IG8uYWN0aXZlIH19IiBhcmlhLWxhYmVsPSJ7eyBvLmFyaWEgfX0iIHN0eWxlPSJmbGV4OiAxOyBtaW4taGVpZ2h0OiA0 NnB4OyBib3JkZXItcmFkaXVzOiAxMnB4OyBib3JkZXI6IDIuNXB4IHNvbGlkICMxNDI2MUM7IGN1cnNvcjogcG9pbnRlcjsgZm9udC1mYW1pbHk6ICdCYWxv byAyJywgc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAxN3B4OyBiYWNrZ3JvdW5kOiB7eyBvLmJnIH19OyBjb2xvcjoge3sgby5m ZyB9fTsgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4xMnMgZWFzZTsiIHN0eWxlLWhvdmVyPSJ0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7Ij57eyBvLm4g fX08L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvc2MtZm9yPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImRpc3Bs YXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsgbWFyZ2luLXRvcDogOHB4OyBnYXA6IDEwcHg7IGZvbnQtc2l6ZTogMTIuNXB4OyBm b250LXdlaWdodDogNzAwOyBjb2xvcjogIzU5NjE1QTsiPgogICAgICAgICAgICAgICAgPHNwYW4+MSDCtyB7eyB0LmxvdyB9fTwvc3Bhbj4KICAgICAgICAg ICAgICAgIDxzcGFuPjUgwrcge3sgdC5oaWdoIH19PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxzYy1pZiB2YWx1ZT0ie3sg dC5hbnN3ZXJlZCB9fSIgaGludC1wbGFjZWhvbGRlci12YWw9Int7IGZhbHNlIH19Ij4KICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6 IDE0cHg7IGJvcmRlci10b3A6IDJweCBkYXNoZWQgI0U0RTBEQTsgcGFkZGluZy10b3A6IDEycHg7Ij4KICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0i Zm9udC1zaXplOiAxMi41cHg7IGZvbnQtd2VpZ2h0OiA4MDA7IGxldHRlci1zcGFjaW5nOiAuMDhlbTsgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgY29s b3I6IHt7IHQuYWNjZW50IH19OyI+e3sgdC5zdGF0ZSB9fTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiA3cHg7IGZv bnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDEuNTsgY29sb3I6ICMyQTMzMkM7IHRleHQtd3JhcDogcHJldHR5OyI+e3sgdC50aXAgfX08L2Rpdj4KICAg ICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvc2MtaWY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9z Yy1mb3I+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPHNjLWlmIHZhbHVlPSJ7eyBoYXNTdGF0cyB9fSIgaGludC1wbGFjZWhvbGRlci12YWw9Int7 IHRydWUgfX0iPgogICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBncmlkOyBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4 KDIzMHB4LCAxZnIpKTsgZ2FwOiAxNnB4OyBtYXJnaW4tdG9wOiA0NHB4OyI+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogI0ZGRkZGRjsgYm9y ZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBib3JkZXItcmFkaXVzOiAxOHB4OyBwYWRkaW5nOiAyMHB4IDIycHg7IGJveC1zaGFkb3c6IDZweCA2cHggMCAj QkRFN0Y3OyI+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEyLjVweDsgZm9udC13ZWlnaHQ6IDcwMDsgbGV0dGVyLXNwYWNpbmc6IC4xZW07 IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiAjNTk2MTVBOyI+w4FyZWEgbcOhcyBjYWxpZW50ZTwvZGl2PgogICAgICAgICAgPGRpdiBzdHls ZT0iZm9udC1mYW1pbHk6ICdCYWxvbyAyJywgc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tdG9wOiA2cHg7 IGxpbmUtaGVpZ2h0OiAxLjI7Ij57eyBob3R0ZXN0IH19PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3VuZDogI0ZG RkZGRjsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBib3JkZXItcmFkaXVzOiAxOHB4OyBwYWRkaW5nOiAyMHB4IDIycHg7IGJveC1zaGFkb3c6IDZw eCA2cHggMCAjQkRFN0Y3OyI+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEyLjVweDsgZm9udC13ZWlnaHQ6IDcwMDsgbGV0dGVyLXNwYWNp bmc6IC4xZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiAjNTk2MTVBOyI+w4FyZWEgbcOhcyBmcsOtYTwvZGl2PgogICAgICAgICAgPGRp diBzdHlsZT0iZm9udC1mYW1pbHk6ICdCYWxvbyAyJywgc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tdG9w OiA2cHg7IGxpbmUtaGVpZ2h0OiAxLjI7Ij57eyBjb2xkZXN0IH19PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBzdHlsZT0iYmFja2dyb3Vu ZDogI0ZGRkZGRjsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBib3JkZXItcmFkaXVzOiAxOHB4OyBwYWRkaW5nOiAyMHB4IDIycHg7IGJveC1zaGFk b3c6IDZweCA2cHggMCAjRjdEOUVBOyI+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDEyLjVweDsgZm9udC13ZWlnaHQ6IDcwMDsgbGV0dGVy LXNwYWNpbmc6IC4xZW07IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IGNvbG9yOiAjNTk2MTVBOyI+RGVzZXF1aWxpYnJpbzwvZGl2PgogICAgICAgICAg PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6ICdCYWxvbyAyJywgc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4t dG9wOiA2cHg7IGxpbmUtaGVpZ2h0OiAxLjI7Ij57eyBnYXBMYWJlbCB9fTwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBm b250LXdlaWdodDogNjAwOyBjb2xvcjogIzU5NjE1QTsgbWFyZ2luLXRvcDogNHB4OyBsaW5lLWhlaWdodDogMS40OyI+e3sgZ2FwTm90ZSB9fTwvZGl2Pgog ICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgc3R5bGU9ImJhY2tncm91bmQ6ICNGRkZGRkY7IGJvcmRlcjogMi41cHggc29saWQgIzE0MjYxQzsgYm9yZGVy LXJhZGl1czogMThweDsgcGFkZGluZzogMjBweCAyMnB4OyBib3gtc2hhZG93OiA2cHggNnB4IDAgI0Y3RDlFQTsiPgogICAgICAgICAgPGRpdiBzdHlsZT0i Zm9udC1zaXplOiAxMi41cHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGxldHRlci1zcGFjaW5nOiAuMWVtOyB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyBjb2xv cjogIzU5NjE1QTsiPlBpZGVuIGF0ZW5jacOzbjwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6ICdCYWxvbyAyJywgc2Fucy1zZXJp ZjsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tdG9wOiA2cHg7IGxpbmUtaGVpZ2h0OiAxLjI7Ij57eyBhdHRlbnRpb25MYWJl bCB9fTwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAxM3B4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzU5NjE1QTsgbWFyZ2lu LXRvcDogNHB4OyBsaW5lLWhlaWdodDogMS40OyI+e3sgYXR0ZW50aW9uTm90ZSB9fTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwv c2MtaWY+CgogICAgPHNjLWlmIHZhbHVlPSJ7eyBhbGxBbnN3ZXJlZCB9fSIgaGludC1wbGFjZWhvbGRlci12YWw9Int7IGZhbHNlIH19Ij4KICAgICAgPGRp diBzdHlsZT0ibWFyZ2luLXRvcDogMzBweDsgYmFja2dyb3VuZDogI0Y0RUVGQjsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBib3JkZXItcmFkaXVz OiAyNHB4OyBwYWRkaW5nOiAzMHB4IDMwcHggMzRweDsgY29sb3I6ICMxNDI2MUM7IGJveC1zaGFkb3c6IDdweCA3cHggMCAjQ0JCM0YwOyI+CiAgICAgICAg PGRpdiBzdHlsZT0ibWF4LXdpZHRoOiA3MjBweDsgbWFyZ2luOiAwIGF1dG87Ij4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtZmFtaWx5OiAnQmFsb28g MicsIHNhbnMtc2VyaWY7IGZvbnQtd2VpZ2h0OiA4MDA7IGZvbnQtc2l6ZTogMjRweDsgdGV4dC1hbGlnbjogY2VudGVyOyI+TWkgY29tcHJvbWlzbyBkZSBl c3RhIHNlbWFuYTwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBmb250LXNpemU6IDE1cHg7IGNvbG9yOiAjNTY0MDhD OyBtYXJnaW4tdG9wOiA4cHg7IGxpbmUtaGVpZ2h0OiAxLjU1OyB0ZXh0LXdyYXA6IHByZXR0eTsiPnt7IGNvbW1pdFByb21wdCB9fTwvZGl2PgogICAgICAg ICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZ3JpZDsgZ2FwOiAxMnB4OyBtYXJnaW4tdG9wOiAyMHB4OyI+CiAgICAgICAgICAgIDxsYWJlbCBzdHlsZT0iZGlz cGxheTogZ3JpZDsgZ2FwOiA2cHg7IGZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICMzQTJFNTI7Ij7DgXJlYSBxdWUgdm95IGEg bW92ZXIKICAgICAgICAgICAgICA8c2MtcmF3LXNlbGVjdCBjbGFzcz0iY2ItaW5wIiB2YWx1ZT0ie3sgY29tbWl0QXJlYSB9fSIgc2MtY2FtZWwtb24tY2hh bmdlPSJ7eyBvbkNvbW1pdEFyZWEgfX0iIHN0eWxlPSJmb250LWZhbWlseTogTnVuaXRvLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE1cHg7IGZvbnQtd2Vp Z2h0OiA2MDA7IHBhZGRpbmc6IDEzcHggMTRweDsgYm9yZGVyLXJhZGl1czogMTNweDsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBiYWNrZ3JvdW5k OiAjRkZGRkZGOyBjb2xvcjogIzE0MjYxQzsiPgogICAgICAgICAgICAgICAgPHNjLWZvciBsaXN0PSJ7eyBhcmVhT3B0aW9ucyB9fSIgYXM9ImEiIGhpbnQt cGxhY2Vob2xkZXItY291bnQ9IjEwIj4KICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0ie3sgYS52YWx1ZSB9fSI+e3sgYS5sYWJlbCB9fTwvb3B0 aW9uPgogICAgICAgICAgICAgICAgPC9zYy1mb3I+CiAgICAgICAgICAgICAgPC9zYy1yYXctc2VsZWN0PgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAg ICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6IGdyaWQ7IGdhcDogNnB4OyBmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjM0Ey RTUyOyI+TGEgYWNjacOzbiBjb25jcmV0YQogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iY2ItaW5wIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ie3sgY29tbWl0 VGV4dCB9fSIgc2MtY2FtZWwtb24tY2hhbmdlPSJ7eyBvbkNvbW1pdFRleHQgfX0iIHBsYWNlaG9sZGVyPSJFai46IGxsYW1vIGEgbWkgaGVybWFuYSBlbCBq dWV2ZXMgZW4gbGEgbm9jaGUiIHN0eWxlPSJmb250LWZhbWlseTogTnVuaXRvLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE1cHg7IGZvbnQtd2VpZ2h0OiA2 MDA7IHBhZGRpbmc6IDEzcHggMTRweDsgYm9yZGVyLXJhZGl1czogMTNweDsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBiYWNrZ3JvdW5kOiAjRkZG RkZGOyBjb2xvcjogIzE0MjYxQzsiPgogICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6IGdyaWQ7IGdhcDog NnB4OyBmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjM0EyRTUyOyI+QW50ZXMgZGUKICAgICAgICAgICAgICA8aW5wdXQgY2xh c3M9ImNiLWlucCIgdHlwZT0iZGF0ZSIgdmFsdWU9Int7IGNvbW1pdERhdGUgfX0iIHNjLWNhbWVsLW9uLWNoYW5nZT0ie3sgb25Db21taXREYXRlIH19IiBz dHlsZT0iZm9udC1mYW1pbHk6IE51bml0bywgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNXB4OyBmb250LXdlaWdodDogNjAwOyBwYWRkaW5nOiAxM3B4IDE0 cHg7IGJvcmRlci1yYWRpdXM6IDEzcHg7IGJvcmRlcjogMi41cHggc29saWQgIzE0MjYxQzsgYmFja2dyb3VuZDogI0ZGRkZGRjsgY29sb3I6ICMxNDI2MUM7 Ij4KICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMTRweDsgZm9udC1zaXpl OiAxM3B4OyBmb250LXdlaWdodDogNjAwOyBjb2xvcjogIzZCNUU4QTsgdGV4dC1hbGlnbjogY2VudGVyOyI+e3sgY29tbWl0U3RhdHVzIH19PC9kaXY+CiAg ICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9zYy1pZj4KCiAgICA8c2MtaWYgdmFsdWU9Int7IGFsbEFuc3dlcmVkIH19IiBoaW50LXBsYWNlaG9s ZGVyLXZhbD0ie3sgZmFsc2UgfX0iPgogICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyMnB4OyBiYWNrZ3JvdW5kOiAjRkZGRkZGOyBib3JkZXI6IDIu NXB4IHNvbGlkICMxNDI2MUM7IGJvcmRlci1yYWRpdXM6IDI0cHg7IHBhZGRpbmc6IDI2cHggMzBweCAzMHB4OyBjb2xvcjogIzE0MjYxQzsgYm94LXNoYWRv dzogN3B4IDdweCAwICNCREU3Rjc7Ij4KICAgICAgICA8ZGl2IHN0eWxlPSJtYXgtd2lkdGg6IDcyMHB4OyBtYXJnaW46IDAgYXV0bzsiPgogICAgICAgICAg PGRpdiBzdHlsZT0iZm9udC1mYW1pbHk6ICdCYWxvbyAyJywgc2Fucy1zZXJpZjsgZm9udC13ZWlnaHQ6IDgwMDsgZm9udC1zaXplOiAyMnB4OyB0ZXh0LWFs aWduOiBjZW50ZXI7Ij5Vbm9zIGRhdG9zIG9wY2lvbmFsZXM8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsgZm9udC1z aXplOiAxNHB4OyBjb2xvcjogIzU5NjE1QTsgZm9udC13ZWlnaHQ6IDYwMDsgbWFyZ2luLXRvcDogNnB4OyI+VG9kbyBwdWVkZSBxdWVkYXIgZW4gYmxhbmNv LjwvZGl2PgoKICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDIwcHg7IGZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6 ICMzQTQ0M0U7Ij5FZGFkPC9kaXY+CiAgICAgICAgICA8ZGl2IHJvbGU9Imdyb3VwIiBhcmlhLWxhYmVsPSJFZGFkIiBzdHlsZT0iZGlzcGxheTogZmxleDsg ZmxleC13cmFwOiB3cmFwOyBnYXA6IDhweDsgbWFyZ2luLXRvcDogOHB4OyI+CiAgICAgICAgICAgIDxzYy1mb3IgbGlzdD0ie3sgYWdlT3B0aW9ucyB9fSIg YXM9ImEiIGhpbnQtcGxhY2Vob2xkZXItY291bnQ9IjUiPgogICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBzYy1jYW1lbC1vbi1jbGljaz0i e3sgYS5vblBpY2sgfX0iIGFyaWEtcHJlc3NlZD0ie3sgYS5hY3RpdmUgfX0iIHN0eWxlPSJmb250LWZhbWlseTogJ0JhbG9vIDInLCBzYW5zLXNlcmlmOyBm b250LXdlaWdodDogNzAwOyBmb250LXNpemU6IDE0cHg7IG1pbi1oZWlnaHQ6IDQ0cHg7IHBhZGRpbmc6IDEwcHggMThweDsgYm9yZGVyLXJhZGl1czogNDBw eDsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBjdXJzb3I6IHBvaW50ZXI7IGJhY2tncm91bmQ6IHt7IGEuYmcgfX07IGNvbG9yOiB7eyBhLmZnIH19 OyI+e3sgYS5sYWJlbCB9fTwvYnV0dG9uPgogICAgICAgICAgICA8L3NjLWZvcj4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgc3R5bGU9ImRp c3BsYXk6IGdyaWQ7IGdhcDogMTJweDsgbWFyZ2luLXRvcDogMjBweDsiPgogICAgICAgICAgICA8bGFiZWwgc3R5bGU9ImRpc3BsYXk6IGdyaWQ7IGdhcDog NnB4OyBmb250LXNpemU6IDEzcHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGNvbG9yOiAjM0E0NDNFOyI+Q2l1ZGFkIHkgcGHDrXMKICAgICAgICAgICAgICA8aW5w dXQgY2xhc3M9ImNiLWlucCIgdHlwZT0idGV4dCIgbWF4bGVuZ3RoPSI4MCIgdmFsdWU9Int7IGN0eENpdHkgfX0iIHNjLWNhbWVsLW9uLWNoYW5nZT0ie3sg b25DdHhDaXR5IH19IiBwbGFjZWhvbGRlcj0iRWouOiBCb2dvdMOhLCBDb2xvbWJpYSIgc3R5bGU9ImZvbnQtZmFtaWx5OiBOdW5pdG8sIHNhbnMtc2VyaWY7 IGZvbnQtc2l6ZTogMTVweDsgZm9udC13ZWlnaHQ6IDYwMDsgcGFkZGluZzogMTNweCAxNHB4OyBib3JkZXItcmFkaXVzOiAxM3B4OyBib3JkZXI6IDIuNXB4 IHNvbGlkICMxNDI2MUM7IGJhY2tncm91bmQ6ICNGRkZGRkY7IGNvbG9yOiAjMTQyNjFDOyI+CiAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgIDxs YWJlbCBzdHlsZT0iZGlzcGxheTogZ3JpZDsgZ2FwOiA2cHg7IGZvbnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICMzQTQ0M0U7Ij5P Y3VwYWNpw7NuCiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJjYi1pbnAiIHR5cGU9InRleHQiIG1heGxlbmd0aD0iODAiIHZhbHVlPSJ7eyBjdHhKb2Ig fX0iIHNjLWNhbWVsLW9uLWNoYW5nZT0ie3sgb25DdHhKb2IgfX0iIHBsYWNlaG9sZGVyPSJFai46IGRpc2XDsWFkb3JhLCBkb2NlbnRlLCBpbmRlcGVuZGll bnRlIiBzdHlsZT0iZm9udC1mYW1pbHk6IE51bml0bywgc2Fucy1zZXJpZjsgZm9udC1zaXplOiAxNXB4OyBmb250LXdlaWdodDogNjAwOyBwYWRkaW5nOiAx M3B4IDE0cHg7IGJvcmRlci1yYWRpdXM6IDEzcHg7IGJvcmRlcjogMi41cHggc29saWQgIzE0MjYxQzsgYmFja2dyb3VuZDogI0ZGRkZGRjsgY29sb3I6ICMx NDI2MUM7Ij4KICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IGZv bnQtc2l6ZTogMTNweDsgZm9udC13ZWlnaHQ6IDYwMDsgY29sb3I6ICM1OTYxNUE7IGxpbmUtaGVpZ2h0OiAxLjU1OyB0ZXh0LWFsaWduOiBjZW50ZXI7IHRl eHQtd3JhcDogcHJldHR5OyI+Tm8gcGVkaW1vcyBub21icmUgbmkgY29ycmVvLiBFc3RvcyBkYXRvcyBub3MgYXl1ZGFuIGEgZW50ZW5kZXIgY8OzbW8gZGlz dGludGFzIHBlcnNvbmFzIHZpdmVuIHN1IGJhbGFuY2UuPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9zYy1pZj4KCiAgICA8ZGl2 IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgZ2FwOiAxNnB4OyBtYXJnaW4tdG9wOiA0MnB4OyBmbGV4LXdyYXA6IHdy YXA7Ij4KICAgICAgPGJ1dHRvbiBzYy1jYW1lbC1vbi1jbGljaz0ie3sgb25FeHBvcnQgfX0iIGRpc2FibGVkPSJ7eyBleHBvcnREaXNhYmxlZCB9fSIgc3R5 bGU9ImZvbnQtZmFtaWx5OiAnQmFsb28gMicsIHNhbnMtc2VyaWY7IGJhY2tncm91bmQ6IHt7IGV4cG9ydEJnIH19OyBib3JkZXI6IDIuNXB4IHNvbGlkICMx NDI2MUM7IGNvbG9yOiAjZmZmOyBwYWRkaW5nOiAxNHB4IDMwcHg7IGJvcmRlci1yYWRpdXM6IDQwcHg7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6 IDcwMDsgY3Vyc29yOiB7eyBleHBvcnRDdXJzb3IgfX07IGJveC1zaGFkb3c6IDRweCA0cHggMCAjMTQyNjFDOyIgc3R5bGUtaG92ZXI9InRyYW5zZm9ybTog dHJhbnNsYXRlKDJweCwgMnB4KTsgYm94LXNoYWRvdzogMnB4IDJweCAwICMxNDI2MUM7Ij57eyBleHBvcnRMYWJlbCB9fTwvYnV0dG9uPgogICAgICA8YnV0 dG9uIHNjLWNhbWVsLW9uLWNsaWNrPSJ7eyBvblJlc2V0IH19IiBzdHlsZT0iZm9udC1mYW1pbHk6ICdCYWxvbyAyJywgc2Fucy1zZXJpZjsgYmFja2dyb3Vu ZDoge3sgcmVzZXRCZyB9fTsgYm9yZGVyOiAyLjVweCBzb2xpZCAjMTQyNjFDOyBjb2xvcjogIzE0MjYxQzsgcGFkZGluZzogMTNweCAyNnB4OyBib3JkZXIt cmFkaXVzOiA0MHB4OyBmb250LXNpemU6IDE1cHg7IGZvbnQtd2VpZ2h0OiA3MDA7IGN1cnNvcjogcG9pbnRlcjsgYm94LXNoYWRvdzogNHB4IDRweCAwICNF OUU0REQ7IiBzdHlsZS1ob3Zlcj0idHJhbnNmb3JtOiB0cmFuc2xhdGUoMnB4LCAycHgpOyBib3gtc2hhZG93OiAycHggMnB4IDAgI0U5RTRERDsiPnt7IHJl c2V0TGFiZWwgfX08L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxwIHN0eWxlPSJtYXgtd2lkdGg6IDc2MHB4OyBtYXJnaW46IDE4cHggYXV0byAwOyB0ZXh0 LWFsaWduOiBjZW50ZXI7IHRleHQtd3JhcDogYmFsYW5jZTsgZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMS42OyBjb2xvcjogIzU5NjE1QTsgZm9u dC13ZWlnaHQ6IDYwMDsiPlR1cyByZXNwdWVzdGFzIHNlIGd1YXJkYW4gZGUgZm9ybWEgYW7Ds25pbWEuIExhIGltYWdlbiBxdWUgZGVzY2FyZ2FzIGVzIHBh cmEgdGkuIDxicj5HdcOhcmRhbGEgeSB2dWVsdmUgYSBoYWNlciBlbCBlamVyY2ljaW8gbcOhcyBhZGVsYW50ZSBwYXJhIGNvbXBhcmFyIHR1cyBjYXNhcyB5 IHZlciBxdcOpIGhhIGNhbWJpYWRvLjwvcD4KCiAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAzNnB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGRpc3BsYXk6 IHt7IHByZXZpZXdEaXNwbGF5IH19OyI+CiAgICAgIDxjYW52YXMgcmVmPSJ7eyBjYW52YXNSZWYgfX0iIHdpZHRoPSI4MjAiIGhlaWdodD0iMTYwMCIgc3R5 bGU9Im1heC13aWR0aDogMTAwJTsgaGVpZ2h0OiBhdXRvOyBib3JkZXItcmFkaXVzOiAxNnB4OyBib3JkZXI6IDIuNXB4IHNvbGlkICMxNDI2MUM7IGJveC1z aGFkb3c6IDhweCA4cHggMCAjQ0JCM0YwOyI+PC9jYW52YXM+CiAgICAgIDxkaXY+CiAgICAgICAgPGEgcmVmPSJ7eyBsaW5rUmVmIH19IiBkb3dubG9hZD0i bWktY2FzYS1kZS1iYWxhbmNlLnBuZyIgc3R5bGU9ImZvbnQtZmFtaWx5OiAnQmFsb28gMicsIHNhbnMtc2VyaWY7IGRpc3BsYXk6IGlubGluZS1ibG9jazsg bWFyZ2luLXRvcDogMjBweDsgYmFja2dyb3VuZDogIzE0MjYxQzsgY29sb3I6ICNmZmY7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgcGFkZGluZzogMTNweCAz MHB4OyBib3JkZXItcmFkaXVzOiA0MHB4OyBmb250LXNpemU6IDE1cHg7IGZvbnQtd2VpZ2h0OiA3MDA7Ij5EZXNjYXJnYXIgaW1hZ2VuPC9hPgogICAgICA8 L2Rpdj4KICAgIDwvZGl2PgoKICA8L2Rpdj48L2Rpdj4KPC94LWRjPgo8c2NyaXB0IHR5cGU9InRleHQveC1kYyIgZGF0YS1kYy1zY3JpcHQ9IiIgZGF0YS1w cm9wcz0ieyZxdW90O3Nob3dSZWZsZWN0aW9uJnF1b3Q7OnsmcXVvdDtlZGl0b3ImcXVvdDs6JnF1b3Q7Ym9vbGVhbiZxdW90OywmcXVvdDtkZWZhdWx0JnF1 b3Q7OnRydWUsJnF1b3Q7dHNUeXBlJnF1b3Q7OiZxdW90O2Jvb2xlYW4mcXVvdDssJnF1b3Q7c2VjdGlvbiZxdW90OzomcXVvdDtDb250ZW5pZG8mcXVvdDt9 fSI+CmNvbnN0IERPTUFJTlMgPSBbCiAge2lkOjAsa2V5OiJyNyIsbmFtZToiUHJvcMOzc2l0byIsZGVzYzoiTG8gcXVlIGxlIGRhIHNlbnRpZG8gcHJvZnVu ZG8gYSBtaSB2aWRhIixyb29tOiJDaW1pZW50b3MiLAogICBxdWVzdGlvbjoiwr9MbyBxdWUgaGFnbyBlc3TDoSBjb25lY3RhZG8gY29uIGFsZ28gcXVlIGxl IGRhIHNlbnRpZG8gYSBtaSB2aWRhPyIsCiAgIGhpbnQ6Ik3DoXMgYWxsw6EgZGUgY3VtcGxpciBjb24gZWwgZMOtYSBhIGTDrWEuIixsb3c6IkNhc2kgbmFk YSIsaGlnaDoiTXVjaG8iLAogICB0aXBzOntiYWpvOiJSZWNvbm9jZS4gSGF6IHVuYSBsaXN0YSBkZSB0cmVzIGNvc2FzIGEgbGFzIHF1ZSB0ZSBndXN0YXLD rWEgZGVkaWNhciBtw6FzIHRpZW1wbyBwb3JxdWUgc29uIGltcG9ydGFudGVzIHBhcmEgdGkuIiwKICAgICAgICAgbWVkaW86IkVsaWdlLiBJZGVudGlmaWNh IHVuYSBhY3RpdmlkYWQgcXVlIHRlbmdhIHNlbnRpZG8gcGFyYSB0aSB5IGRlY2lkZSBxdcOpIHB1ZWRlcyBoYWNlciBwYXJhIGRhcmxlIG3DoXMgZXNwYWNp by4iLAogICAgICAgICBhbHRvOiJQcm90ZWdlLiBJZGVudGlmaWNhIHVuYSBhY3RpdmlkYWQgcXVlIHRlIGNvbmVjdGEgY29uIGxvIHF1ZSBlcyBpbXBvcnRh bnRlIHBhcmEgdGkgeSBldml0YSBxdWUgb3RyYXMgZGVtYW5kYXMgb2N1cGVuIHN1IGx1Z2FyLiJ9fSwKICB7aWQ6MSxrZXk6InI5IixuYW1lOiJQcmlvcmlk YWRlcyIsZGVzYzoiVml2aXIgZW4gZnVuY2nDs24gZGUgbG8gcXVlIG3DoXMgbWUgaW1wb3J0YSIscm9vbToiRW50cmFkYSIsCiAgIHF1ZXN0aW9uOiLCv0Vz dG95IHZpdmllbmRvIGhveSBlbiBmdW5jacOzbiBkZSBsbyBxdWUgbcOhcyBtZSBpbXBvcnRhPyIsCiAgIGhpbnQ6IkxvIGltcG9ydGFudGUsIG5vIHNvbG8g bG8gdXJnZW50ZS4iLGxvdzoiUGlsb3RlbyBlbCBkw61hIixoaWdoOiJDb24gaW50ZW5jacOzbiIsCiAgIHRpcHM6e2Jham86IkNvbXBhcmEuIEVzY3JpYmUg dHVzIHRyZXMgcHJpb3JpZGFkZXMgYWN0dWFsZXMgeSBjb21ww6FyYWxhcyBjb24gbGEgZm9ybWEgZW4gcXVlIGVzdMOhcyB1c2FuZG8gdHUgdGllbXBvLiIs CiAgICAgICAgIG1lZGlvOiJBanVzdGEuIEVsaWdlIHVuYSBkZSB0dXMgcHJpb3JpZGFkZXMgeSBtb2RpZmljYSB1bmEgYWNjacOzbiBjb25jcmV0YSBwYXJh IGRhcmxlIGVsIGVzcGFjaW8gcXVlIG1lcmVjZS4iLAogICAgICAgICBhbHRvOiJSZXZpc2EuIE1pcmEgdHVzIHByaW9yaWRhZGVzIHkgZGVjaWRlIGN1w6Fs ZXMgcXVpZXJlcyBtYW50ZW5lciwgY2FtYmlhciBvIGRlamFyIGRlIHByaW9yaXphci4ifX0sCiAge2lkOjIsa2V5OiJyOCIsbmFtZToiQmllbmVzdGFyIixk ZXNjOiJNaSBlcXVpbGlicmlvIGVudHJlIGN1ZXJwbywgbWVudGUgeSBlbW9jaW9uZXMiLHJvb206IkJhw7FvIiwKICAgcXVlc3Rpb246IsK/Q3VpZG8gbWkg Y3VlcnBvLCBtaSBtZW50ZSB5IG1pcyBlbW9jaW9uZXMgZGUgZm9ybWEgY29uc2NpZW50ZT8iLAogICBoaW50OiJBbnRlcyBkZSBsbGVnYXIgYWwgbMOtbWl0 ZSwgbm8gZGVzcHXDqXMuIixsb3c6IlNvbG8gcmVhY2Npb25vIixoaWdoOiJMbyBjdWlkbyBhIGRpYXJpbyIsCiAgIHRpcHM6e2Jham86IkFnZW5kYS4gUmVz ZXJ2YSB1biBlc3BhY2lvIHBhcmEgZGVzY2Fuc2FyLCBtb3ZlcnRlIG8gYXRlbmRlciB1bmEgbmVjZXNpZGFkIGRlIHNhbHVkLiIsCiAgICAgICAgIG1lZGlv OiJSZXNwb25kZS4gSWRlbnRpZmljYSB1bmEgc2XDsWFsIGRlIGNhbnNhbmNpbywgdGVuc2nDs24gbyBzb2JyZWNhcmdhIHkgZWxpZ2UgdW5hIGFjY2nDs24g Y29uY3JldGEgcGFyYSBhdGVuZGVybGEuIiwKICAgICAgICAgYWx0bzoiU2ltcGxpZmljYS4gRWxpZ2UgdW5hIHByw6FjdGljYSBkZSBjdWlkYWRvIHF1ZSBw dWVkYXMgbWFudGVuZXIgaW5jbHVzbyBjdWFuZG8gYXVtZW50ZW4gdHVzIHJlc3BvbnNhYmlsaWRhZGVzLiJ9fSwKICB7aWQ6MyxrZXk6InIxIixuYW1lOiJF c3BhY2lvIHBlcnNvbmFsIixkZXNjOiJUaWVtcG8geSBlc3BhY2lvIHF1ZSBtZSBkb3kgc29sbyBwYXJhIG3DrSIscm9vbToiRG9ybWl0b3JpbyIsCiAgIHF1 ZXN0aW9uOiLCv01lIGRveSBlc3BhY2lvcyBxdWUgc29uIHNvbG8gbcOtb3MsIHNpbiBjdWxwYT8iLAogICBoaW50OiJDdWVudGEgZWwgdGllbXBvIHF1ZSBl bGlnZXMsIG5vIGVsIHF1ZSBzb2JyYS4iLGxvdzoiQ2FzaSBudW5jYSIsaGlnaDoiQ2FzaSBzaWVtcHJlIiwKICAgdGlwczp7YmFqbzoiUmVzZXJ2YS4gQmxv cXVlYSAyMCBtaW51dG9zIHNvbG8gcGFyYSB0aSB5IG3DoXJjYWxvcyBlbiB0dSBjYWxlbmRhcmlvIGNvbW8gb2N1cGFkb3MuIiwKICAgICAgICAgbWVkaW86 IlJldG9tYS4gRWxpZ2UgdW5hIGFjdGl2aWRhZCBxdWUgZGlzZnJ1dGFiYXMgeSBxdWUgaGFzIGRlamFkbyBkZSBoYWNlci4gUmVzZXJ2YSB1biBlc3BhY2lv IHBhcmEgcmV0b21hcmxhLiIsCiAgICAgICAgIGFsdG86IlByb3RlZ2UuIElkZW50aWZpY2EgcXXDqSB0ZSBheXVkYSBhIHRlbmVyIHRpZW1wbyBwYXJhIHRp IHkgY3VpZGEgZXNhcyBjb25kaWNpb25lcy4ifX0sCiAge2lkOjQsa2V5OiJyNiIsbmFtZToiQ3JlY2ltaWVudG8iLGRlc2M6Ik1pIGludmVyc2nDs24gZW4g bcOtIGNvbW8gcGVyc29uYSwgbcOhcyBhbGzDoSBkZWwgdHJhYmFqbyIscm9vbToiw4F0aWNvIiwKICAgcXVlc3Rpb246IsK/RXN0b3kgaW52aXJ0aWVuZG8g ZW4gYWxnbyBxdWUgbWUgZW5yaXF1ZWNlIGNvbW8gcGVyc29uYT8iLAogICBoaW50OiJNw6FzIGFsbMOhIGRlIGxvIHByb2Zlc2lvbmFsLiIsbG93OiJFc3TD oSBlbiBwYXVzYSIsaGlnaDoiTXV5IGFjdGl2byIsCiAgIHRpcHM6e2Jham86IkNvbWllbnphLiBEYSBlbCBwcmltZXIgcGFzbyBjb24gZXNlIGxpYnJvLCBj dXJzbyBvIGFwcmVuZGl6YWplIHF1ZSBsbGV2YXMgdGllbXBvIHBvc3BvbmllbmRvLiIsCiAgICAgICAgIG1lZGlvOiJSZXRvbWEuIEVsaWdlIHVuIGFwcmVu ZGl6YWplIHF1ZSBoYXlhcyBkZWphZG8geSBkZWZpbmUgdW5hIGFjY2nDs24gY29uY3JldGEgcGFyYSBjb250aW51YXJsby4iLAogICAgICAgICBhbHRvOiJD b25zb2xpZGEuIEVsaWdlIGFsZ28gcXVlIGVzdMOpcyBhcHJlbmRpZW5kbyB5IGJ1c2NhIHVuYSBmb3JtYSBjb25jcmV0YSBkZSBwb25lcmxvIGVuIHByw6Fj dGljYS4ifX0sCiAge2lkOjUsa2V5OiJyMyIsbmFtZToiRGVzYXJyb2xsbyIsZGVzYzoiQXByZW5kaXphamUgeSBwcm9ncmVzbyBlbiBtaSByb2wgYWN0dWFs Iixyb29tOiJPZmljaW5hIiwKICAgcXVlc3Rpb246IsK/U2llbnRvIHF1ZSBlc3RveSBhcHJlbmRpZW5kbyB5IGNyZWNpZW5kbyBlbiBtaSB0cmFiYWpvPyIs CiAgIGhpbnQ6IkFwcmVuZGVyIGRlIHZlcmRhZCwgbm8gc29sbyBhY3VtdWxhciB0YXJlYXMuIixsb3c6IlBpbG90byBhdXRvbcOhdGljbyIsaGlnaDoiQ3Jl emNvIGNhZGEgc2VtYW5hIiwKICAgdGlwczp7YmFqbzoiRW1waWV6YS4gRWxpZ2UgdW5hIGhhYmlsaWRhZCBxdWUgcXVpZXJhcyBmb3J0YWxlY2VyIHkgZGEg dW4gcHJpbWVyIHBhc28gY29uY3JldG8gcGFyYSBkZXNhcnJvbGxhcmxhLiIsCiAgICAgICAgIG1lZGlvOiJSZXRvbWEuIEVsaWdlIHVuYSBtZXRhIHByb2Zl c2lvbmFsIHF1ZSBoYXlhcyBwYXVzYWRvIHkgZGVmaW5lIHVuYSBhY2Npw7NuIGNvbmNyZXRhIHBhcmEgcmV0b21hcmxhLiIsCiAgICAgICAgIGFsdG86IlNv c3TDqW4uIElkZW50aWZpY2EgdW5hIGFjdGl2aWRhZCBxdWUgZXN0w6kgaW1wdWxzYW5kbyB0dSBkZXNhcnJvbGxvIHByb2Zlc2lvbmFsIHkgcmVzZXJ2YSB0 aWVtcG8gcGFyYSBjb250aW51YXJsYS4ifX0sCiAge2lkOjYsa2V5OiJyNSIsbmFtZToiRmluYW56YXMiLGRlc2M6Ik1pcyBkZWNpc2lvbmVzIGVjb27Ds21p Y2FzIGNvbnNjaWVudGVzIixyb29tOiJDb2NpbmEiLAogICBxdWVzdGlvbjoiwr9HZXN0aW9ubyBtaXMgcmVjdXJzb3MgZWNvbsOzbWljb3MgY29uIGNsYXJp ZGFkPyIsCiAgIGhpbnQ6IkNvbiBkZWNpc2lvbmVzIHF1ZSBlbGlqbywgbm8gcG9yIGluZXJjaWEuIixsb3c6IlBvciBpbmVyY2lhIixoaWdoOiJDb24gY2xh cmlkYWQiLAogICB0aXBzOntiYWpvOiJSZXZpc2EuIE1pcmEgdHVzIGdhc3RvcyByZWNpZW50ZXMgZSBpZGVudGlmaWNhIHVubyBxdWUgcHVlZGFzIHJlZHVj aXIsIGVsaW1pbmFyIG8gcGxhbmVhciBtZWpvci4iLAogICAgICAgICBtZWRpbzoiUHJpb3JpemEuIEVsaWdlIHVuYSBwcmlvcmlkYWQgaW1wb3J0YW50ZSBw YXJhIHRpIHkgcmV2aXNhIHNpIHR1cyBkZWNpc2lvbmVzIGRlIGdhc3RvIGVzdMOhbiBhbGluZWFkYXMgY29uIGVsbGEuIiwKICAgICAgICAgYWx0bzoiQW50 aWNpcGEuIFJldmlzYSBxdcOpIG1hcmdlbiB0aWVuZXMgcGFyYSB1biBnYXN0byBpbmVzcGVyYWRvIHkgZGVmaW5lIHF1w6kgcG9kcsOtYXMgYWp1c3RhciBz aSBmdWVyYSBuZWNlc2FyaW8uIn19LAogIHtpZDo3LGtleToicjAiLG5hbWU6IlJlbGFjaW9uZXMiLGRlc2M6IkPDs21vIGN1bHRpdm8gbWlzIHbDrW5jdWxv cyBjZXJjYW5vcyIscm9vbToiU2FsYSIsCiAgIHF1ZXN0aW9uOiLCv0VzdG95IHByZXNlbnRlIHkgY29uZWN0YWRvL2EgY29uIGxhcyBwZXJzb25hcyBpbXBv cnRhbnRlcyBkZSBtaSB2aWRhPyIsCiAgIGhpbnQ6IlByZXNlbnRlIGRlIHZlcmRhZCwgbm8gc29sbyBlc3RhciBhaMOtIGbDrXNpY2FtZW50ZS4iLGxvdzoi Q2FzaSBudW5jYSIsaGlnaDoiQ2FzaSBzaWVtcHJlIiwKICAgdGlwczp7YmFqbzoiUmVjb25lY3RhLiBFc2NyaWJlIGEgdW5hIHBlcnNvbmEgY29uIGxhIHF1 ZSBwZXJkaXN0ZSBjb250YWN0byB5IHByb3DDs24gdW4gbW9tZW50byBwYXJhIGhhYmxhci4iLAogICAgICAgICBtZWRpbzoiRGVzY29uw6ljdGF0ZSBwYXJh IGNvbmVjdGFyLiBFbGlnZSB1bmEgY29udmVyc2FjacOzbiB5IGRlamEgZWwgY2VsdWxhciBndWFyZGFkbyBoYXN0YSBxdWUgdGVybWluZS4iLAogICAgICAg ICBhbHRvOiJQcm90ZWdlLiBJZGVudGlmaWNhIHVuIGjDoWJpdG8gcXVlIHRlIGF5dWRhIGEgY3VpZGFyIHR1cyByZWxhY2lvbmVzIHkgcmVzZXJ2YSB1biBl c3BhY2lvIHBhcmEgbWFudGVuZXJsby4ifX0sCiAge2lkOjgsa2V5OiJyMiIsbmFtZToiVmlkYSBzb2NpYWwiLGRlc2M6IkRpc2ZydXRlIHkgY29uZXhpw7Nu IGNvbiBvdHJvcyBmdWVyYSBkZWwgdHJhYmFqbyIscm9vbToiVGVycmF6YSIsCiAgIHF1ZXN0aW9uOiLCv0luY2x1eW8gbW9tZW50b3MgZGUgZGlzZnJ1dGUg eSBjb25leGnDs24gY29uIG90cm9zPyIsCiAgIGhpbnQ6IkZ1ZXJhIGRlbCB0cmFiYWpvIHkgZGUgbGFzIG9ibGlnYWNpb25lcy4iLGxvdzoiQ2FzaSBudW5j YSIsaGlnaDoiQ2FzaSBzaWVtcHJlIiwKICAgdGlwczp7YmFqbzoiQWN0aXZhLiBFbGlnZSBhIHVuYSBwZXJzb25hIGNvbiBxdWllbiBkaXNmcnV0YXMgY29t cGFydGlyIHkgcHJvcMOzbiB1biBwbGFuIHNlbmNpbGxvLiIsCiAgICAgICAgIG1lZGlvOiJQcmlvcml6YS4gSWRlbnRpZmljYSBxdcOpIHBsYW5lcyBzb2Np YWxlcyByZWFsbWVudGUgZGlzZnJ1dGFzIHkgZGFsZXMgcHJpb3JpZGFkIHNvYnJlIGxvcyBxdWUgaGFjZXMgc29sbyBwb3IgY29tcHJvbWlzby4iLAogICAg ICAgICBhbHRvOiJFcXVpbGlicmEuIE1hbnTDqW4gbG9zIGVzcGFjaW9zIHNvY2lhbGVzIHF1ZSBkaXNmcnV0YXMgc2luIHNhY3JpZmljYXIgdHUgZGVzY2Fu c28gbmkgdHUgdGllbXBvIHBlcnNvbmFsLiJ9fSwKICB7aWQ6OSxrZXk6InI0IixuYW1lOiJNaSBlbnRvcm5vIixkZXNjOiJMb3MgZXNwYWNpb3MgZG9uZGUg aGFiaXRvIHkgdHJhYmFqbyIscm9vbToiSmFyZMOtbiIsCiAgIHF1ZXN0aW9uOiLCv0xvcyBlc3BhY2lvcyBlbiBsb3MgcXVlIGhhYml0byB5IHRyYWJham8g bWUgbnV0cmVuPyIsCiAgIGhpbnQ6Ik1pIGNhc2EgeSBtaSBsdWdhciBkZSB0cmFiYWpvLiIsbG93OiJNZSBkZXNnYXN0YW4iLGhpZ2g6Ik1lIG51dHJlbiIs CiAgIHRpcHM6e2Jham86Ik9yZ2FuaXphLiBFbGlnZSB1biBlc3BhY2lvIGRlIHR1IGNhc2EgdSBvZmljaW5hIHkgZGVkaWNhIHVub3MgbWludXRvcyBhIG9y ZGVuYXJsby4iLAogICAgICAgICBtZWRpbzoiQ2FtYmlhLiBJZGVudGlmaWNhIGFsZ28gZGUgdHUgZW50b3JubyBxdWUgdGUgZ2VuZXJlIGluY29tb2RpZGFk IG8gZGlzdHJhY2Npw7NuIHkgbW9kaWbDrWNhbG8uIiwKICAgICAgICAgYWx0bzoiQWp1c3RhLiBSZXZpc2EgdHUgZXNwYWNpbyB5IGNhbWJpYSB1biBkZXRh bGxlIHF1ZSBwdWVkYSBoYWNlcmxvIG3DoXMgY8OzbW9kbyBvIGZ1bmNpb25hbC4ifX0KXTsKCmNvbnN0IFNUQVRFUyA9IFsiIiwiRnLDrW8gwrcgY2FzaSBz aW4gYXRlbmNpw7NuIiwiVGliaW8gwrcgYXRlbmNpw7NuIG9jYXNpb25hbCIsIlRlbXBsYWRvIMK3IGF0ZW5jacOzbiBwYXJjaWFsIiwiQ8OhbGlkbyDCtyBi dWVuYSBhdGVuY2nDs24iLCJDYWxpZW50ZSDCtyBhdGVuY2nDs24gcGxlbmEiXTsKY29uc3QgR0VPTSA9IHsKICByNjp7dHlwZToicG9seSIscG9pbnRzOiIy NDYsMjkwIDU5OCw4MCA5NTIsMjkwIn0sCiAgcjE6e3g6MjU4LHk6MzA4LHc6MzM0LGg6MTk0fSwgcjg6e3g6NjA4LHk6MzA4LHc6MzM0LGg6MTk0fSwKICBy MDp7eDoyNTgseTo1MTgsdzoxOTQsaDoyMjh9LCByNTp7eDo0NjgseTo1MTgsdzoxNTAsaDoyMjh9LAogIHI5Ont4OjYzNCx5OjUxOCx3OjEzNixoOjIyOH0s IHIzOnt4Ojc4Nix5OjUxOCx3OjE1NixoOjIyOH0sCiAgcjc6e3g6MjU4LHk6NzYxLHc6Njg0LGg6NTAscjo0fSwgcjI6e3g6OTYwLHk6NTYyLHc6MjA0LGg6 MjUwLHI6MTJ9LAogIHI0Ont4OjQ3LHk6ODI1LHc6MTMwNixoOjgyLHI6MjJ9Cn07CgpmdW5jdGlvbiBoZWF0UkdCKHYpewogIGNvbnN0IHQ1ID0gKHYgLSAx KSAvIDQsIGN5YW4gPSBbMCwxNjAsMjIwXSwgbWlkID0gWzEzOCw5NSwxNzRdLCBtYWcgPSBbMjIwLDAsMTIwXTsKICBsZXQgYzEsIGMyLCB0OwogIGlmICh0 NSA8PSAuNSkgeyBjMSA9IGN5YW47IGMyID0gbWlkOyB0ID0gdDUgKiAyOyB9IGVsc2UgeyBjMSA9IG1pZDsgYzIgPSBtYWc7IHQgPSAodDUgLSAuNSkgKiAy OyB9CiAgcmV0dXJuIFswLDEsMl0ubWFwKGkgPT4gTWF0aC5yb3VuZChjMVtpXSArIChjMltpXSAtIGMxW2ldKSAqIHQpKTsKfQpmdW5jdGlvbiByZ2JhKHYs IGEpeyBjb25zdCBjID0gaGVhdFJHQih2KTsgcmV0dXJuICJyZ2JhKCIgKyBjWzBdICsgIiwiICsgY1sxXSArICIsIiArIGNbMl0gKyAiLCIgKyBhICsgIiki OyB9CmZ1bmN0aW9uIHNvbGlkKHYpeyByZXR1cm4gcmdiYSh2LCAxKTsgfQovLyBhbHBoYSBjbGltYnMgd2l0aCB0aGUgc2NvcmUgc28gMyBhbmQgNCBhcmUg YWN0dWFsbHkgZGlzdGluZ3Vpc2hhYmxlCmZ1bmN0aW9uIHdhc2godil7IHJldHVybiByZ2JhKHYsIDAuMTYgKyAoKHYgLSAxKSAvIDQpICogMC4zNik7IH0K Ly8gbXVlYmxlcyBvcGFjb3M6IHNpIGZ1ZXJhbiB0cmFuc2zDumNpZG9zLCBsYXMgYmFyYW5kYXMgeSBsw61uZWFzIGRlbCBmb25kbyBzZSB2ZW4gYSB0cmF2 w6lzCmZ1bmN0aW9uIGZ1cm4odil7CiAgY29uc3QgYXcgPSAwLjE2ICsgKCh2IC0gMSkgLyA0KSAqIDAuMzYsIGFmID0gMC40MCArICgodiAtIDEpIC8gNCkg KiAwLjM4OwogIGNvbnN0IGEgPSBhdyArIGFmIC0gYXcgKiBhZiwgYyA9IGhlYXRSR0Iodik7CiAgY29uc3QgbWl4ID0gaSA9PiBNYXRoLnJvdW5kKDI1NSAr IChjW2ldIC0gMjU1KSAqIGEpOwogIHJldHVybiAicmdiKCIgKyBtaXgoMCkgKyAiLCIgKyBtaXgoMSkgKyAiLCIgKyBtaXgoMikgKyAiKSI7Cn0KZnVuY3Rp b24gdGlwRm9yKGQsIHYpeyByZXR1cm4gdiA8PSAyID8gZC50aXBzLmJham8gOiAodiA9PT0gMyA/IGQudGlwcy5tZWRpbyA6IGQudGlwcy5hbHRvKTsgfQpj b25zdCBFTVBUWV9XQVNIID0gIiNGRkZGRkYiLCBFTVBUWV9GVVJOID0gIiNGRkZGRkYiOwoKLyogUGVnYSBhcXXDrSBsYSBVUkwgL2V4ZWMgZGUgdHUgR29v Z2xlIEFwcHMgU2NyaXB0IChJbXBsZW1lbnRhciA+IE51ZXZhIGltcGxlbWVudGFjacOzbiA+IEFwcCB3ZWIsCiAgIGVqZWN1dGFyIGNvbW8gdMO6LCBjb24g YWNjZXNvICJDdWFscXVpZXIgcGVyc29uYSIpLiBTaSBxdWVkYSB2YWPDrWEsIG5vIHNlIGVudsOtYSBuYWRhLiAqLwpjb25zdCBTSEVFVF9FTkRQT0lOVCA9 ICIiOwoKY29uc3QgUkVGTEVDVElPTlMgPSBbCiAgIkVsIMOhcmVhIG3DoXMgZnLDrWEgZGUgbWkgY2FzYSwgwr9sYSBkZWpvIGZyw61hIHBvciBlbGVjY2nD s24gbyBwb3IgY29zdHVtYnJlPyIsCiAgIlNpIHN1Ym8gdW4gcHVudG8gZWwgw6FyZWEgbcOhcyBmcsOtYSBlc3RhIHNlbWFuYSwgwr9xdcOpIGFjY2nDs24g Y29uY3JldGEgbG8gbG9ncmE/IgpdOwoKY29uc3QgQUdFX09QVFMgPSBbIk1lbm9zIGRlIDI1IiwgIjI14oCTMzQiLCAiMzXigJM0NCIsICI0NeKAkzU0Iiwg IjU1IG8gbcOhcyJdOwoKCmZ1bmN0aW9uIHBvc3RUb1NoZWV0KHBheWxvYWQsIGtlZXBhbGl2ZSl7dHJ5e3dpbmRvdy5wYXJlbnQucG9zdE1lc3NhZ2Uoe3R5 cGU6ImNhc2EtYmFsYW5jZS1zaGVldCIscGF5bG9hZDpwYXlsb2FkLGtlZXBhbGl2ZTohIWtlZXBhbGl2ZX0sIioiKTt9Y2F0Y2goZSl7fX0KCmNsYXNzIENv bXBvbmVudCBleHRlbmRzIERDTG9naWMgewogIGNvbnN0cnVjdG9yKHByb3BzKXsKICAgIHN1cGVyKHByb3BzKTsKICAgIHRoaXMuc3RhdGUgPSB7CiAgICAg IHZhbHVlczogRE9NQUlOUy5tYXAoKCkgPT4gbnVsbCksCiAgICAgIGhvdmVyOiBudWxsLCBzaG93UHJldmlldzogZmFsc2UsIHNob3dUaXBzOiBmYWxzZSwg Y29uZmlybVJlc2V0OiBmYWxzZSwgYnVzeTogZmFsc2UsCiAgICAgIGNvbW1pdDogeyBhcmVhOiBudWxsLCB0ZXh0OiAiIiwgZGF0ZTogIiIgfSwKICAgICAg Y3R4OiB7IGFnZTogbnVsbCwgY2l0eTogIiIsIGpvYjogIiIgfQogICAgfTsKICAgIHRoaXMuY2FudmFzUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7CiAgICB0 aGlzLmxpbmtSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTsKICAgIHRoaXMuc3ZnUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7CiAgICB0aGlzLmNhcmRSZWZzID0g RE9NQUlOUy5tYXAoKCkgPT4gUmVhY3QuY3JlYXRlUmVmKCkpOwogICAgdGhpcy5zaWQgPSBEYXRlLm5vdygpLnRvU3RyaW5nKDM2KSArICItIiArIE1hdGgu cmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDkpOwogICAgdGhpcy5jb3JlU2VudCA9IGZhbHNlOwogICAgdGhpcy5zYXZlVGltZXIgPSBudWxsOwog ICAgdGhpcy5yZXZpc2lvbiA9IDA7CiAgfQogIHNlbmRTbmFwc2hvdChrZWVwYWxpdmUsZG93bmxvYWRlZCl7Y29uc3QgdnM9dGhpcy5zdGF0ZS52YWx1ZXMs YW5zd2VyZWQ9dnMuZmlsdGVyKHY9PnYhPW51bGwpO2NvbnN0IHA9e3NpZDp0aGlzLnNpZCxyZXZpc2lvbjorK3RoaXMucmV2aXNpb24sdGltZXN0YW1wOm5l dyBEYXRlKCkudG9JU09TdHJpbmcoKSxwcm9tZWRpbzphbnN3ZXJlZC5sZW5ndGg/KGFuc3dlcmVkLnJlZHVjZSgoYSxiKT0+YStiLDApL2Fuc3dlcmVkLmxl bmd0aCkudG9GaXhlZCgyKToiIixhcmVhX2NvbXByb21pc286dGhpcy5zdGF0ZS5jb21taXQuYXJlYSE9bnVsbD9ET01BSU5TW3RoaXMuc3RhdGUuY29tbWl0 LmFyZWFdLm5hbWU6IiIsY29tcHJvbWlzbzp0aGlzLnN0YXRlLmNvbW1pdC50ZXh0fHwiIixmZWNoYV9jb21wcm9taXNvOnRoaXMuc3RhdGUuY29tbWl0LmRh dGV8fCIiLGRlc2NhcmdvX2ltYWdlbjpkb3dubG9hZGVkPyJzw60iOiIiLGVkYWQ6dGhpcy5zdGF0ZS5jdHguYWdlfHwiIixjaXVkYWQ6dGhpcy5zdGF0ZS5j dHguY2l0eXx8IiIsb2N1cGFjaW9uOnRoaXMuc3RhdGUuY3R4LmpvYnx8IiIsaWRpb21hOiJlcyJ9O0RPTUFJTlMuZm9yRWFjaCgoZCxpKT0+e3BbInMiKyhp KzEpXT12c1tkLmlkXT09bnVsbD8iIjp2c1tkLmlkXTtwWyJuIisoaSsxKV09ZC5uYW1lO30pO3Bvc3RUb1NoZWV0KHAsISFrZWVwYWxpdmUpO30KICBxdWV1 ZVNuYXBzaG90KCl7Y2xlYXJUaW1lb3V0KHRoaXMuc2F2ZVRpbWVyKTt0aGlzLnNhdmVUaW1lcj1zZXRUaW1lb3V0KCgpPT50aGlzLnNlbmRTbmFwc2hvdChm YWxzZSxmYWxzZSksNDUwKTt9CgogIHNldFZhbHVlKGksIHYpewogICAgY29uc3QgdmFsdWVzID0gdGhpcy5zdGF0ZS52YWx1ZXMuc2xpY2UoKTsKICAgIHZh bHVlc1tpXSA9IHZhbHVlc1tpXSA9PT0gdiA/IG51bGwgOiB2OwogICAgdGhpcy5zZXRTdGF0ZSh7IHZhbHVlcywgY29uZmlybVJlc2V0OiBmYWxzZSwgc2hv d1RpcHM6IGZhbHNlIH0sICgpID0+IHRoaXMuc2VuZFNuYXBzaG90KGZhbHNlLGZhbHNlKSk7CiAgfQoKICBtYXliZVNlbmRDb3JlKCl7CiAgICBpZiAodGhp cy5jb3JlU2VudCkgcmV0dXJuOwogICAgY29uc3QgdnMgPSB0aGlzLnN0YXRlLnZhbHVlczsKICAgIGlmICh2cy5zb21lKHYgPT4gdiA9PSBudWxsKSkgcmV0 dXJuOwogICAgdGhpcy5jb3JlU2VudCA9IHRydWU7CiAgICBjb25zdCBwID0geyBzaWQ6IHRoaXMuc2lkLCB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09T dHJpbmcoKSwgcHJvbWVkaW86ICh2cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiLCAwKSAvIHZzLmxlbmd0aCkudG9GaXhlZCgyKSB9OwogICAgRE9NQUlOUy5m b3JFYWNoKChkLCBpKSA9PiB7IHBbInMiICsgKGkgKyAxKV0gPSB2c1tkLmlkXTsgcFsibiIgKyAoaSArIDEpXSA9IGQubmFtZTsgfSk7CiAgICBwb3N0VG9T aGVldChwLCBmYWxzZSk7CiAgfQoKICByZXNldCgpewogICAgaWYgKCF0aGlzLnN0YXRlLmNvbmZpcm1SZXNldCkgeyB0aGlzLnNldFN0YXRlKHsgY29uZmly bVJlc2V0OiB0cnVlIH0pOyByZXR1cm47IH0KICAgIHRoaXMuY29yZVNlbnQgPSBmYWxzZTsKICAgIHRoaXMuc2lkID0gRGF0ZS5ub3coKS50b1N0cmluZygz NikgKyAiLSIgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCA5KTsKICAgIHRoaXMuc2V0U3RhdGUoeyB2YWx1ZXM6IERPTUFJTlMubWFw KCgpID0+IG51bGwpLCBzaG93UHJldmlldzogZmFsc2UsIHNob3dUaXBzOiBmYWxzZSwgY29uZmlybVJlc2V0OiBmYWxzZSB9KTsKICB9CgogIHNhdmVDdHgo cGF0Y2gpe3RoaXMuc2V0U3RhdGUoe2N0eDpPYmplY3QuYXNzaWduKHt9LHRoaXMuc3RhdGUuY3R4LHBhdGNoKX0sKCk9PnRoaXMucXVldWVTbmFwc2hvdCgp KTt9CiAgc2F2ZUNvbW1pdChwYXRjaCl7dGhpcy5zZXRTdGF0ZSh7Y29tbWl0Ok9iamVjdC5hc3NpZ24oe30sdGhpcy5zdGF0ZS5jb21taXQscGF0Y2gpfSwo KT0+dGhpcy5xdWV1ZVNuYXBzaG90KCkpO30KCiAganVtcFRvKGkpewogICAgY29uc3QgZWwgPSB0aGlzLmNhcmRSZWZzW2ldLmN1cnJlbnQ7CiAgICB0aGlz LnNldFN0YXRlKHsgaG92ZXI6IERPTUFJTlNbaV0ua2V5IH0pOwogICAgaWYgKCFlbCkgcmV0dXJuOwogICAgY29uc3QgdG9wID0gZWwuZ2V0Qm91bmRpbmdD bGllbnRSZWN0KCkudG9wICsgd2luZG93LnNjcm9sbFkgLSAyMDsKICAgIHdpbmRvdy5zY3JvbGxUbyh7IHRvcDogdG9wLCBiZWhhdmlvcjogInNtb290aCIg fSk7CiAgfQoKICBhbnN3ZXJlZElkeCgpeyByZXR1cm4gRE9NQUlOUy5tYXAoZCA9PiBkLmlkKS5maWx0ZXIoaSA9PiB0aGlzLnN0YXRlLnZhbHVlc1tpXSAh PSBudWxsKTsgfQoKICBzdGF0cygpewogICAgY29uc3QgdnMgPSB0aGlzLnN0YXRlLnZhbHVlcywgaWR4ID0gdGhpcy5hbnN3ZXJlZElkeCgpOwogICAgaWYg KCFpZHgubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIGxldCBoaSA9IGlkeFswXSwgbG8gPSBpZHhbMF0sIHN1bSA9IDA7CiAgICBpZHguZm9yRWFjaChpID0+ IHsgc3VtICs9IHZzW2ldOyBpZiAodnNbaV0gPiB2c1toaV0pIGhpID0gaTsgaWYgKHZzW2ldIDwgdnNbbG9dKSBsbyA9IGk7IH0pOwogICAgcmV0dXJuIHsg aGk6IGhpLCBsbzogbG8sIGF2ZzogKHN1bSAvIGlkeC5sZW5ndGgpLnRvRml4ZWQoMSksIGdhcDogdnNbaGldIC0gdnNbbG9dLCBsb3c6IGlkeC5maWx0ZXIo aSA9PiB2c1tpXSA8PSAyKSB9OwogIH0KCiAgYXN5bmMgbG9hZEZvbnRDU1MoKXsKICAgIGlmICh0aGlzLl9mb250Q1NTICE9PSB1bmRlZmluZWQpIHJldHVy biB0aGlzLl9mb250Q1NTOwogICAgdGhpcy5fZm9udENTUyA9ICIiOwogICAgdHJ5IHsKICAgICAgY29uc3QgdXJsID0gImh0dHBzOi8vZm9udHMuZ29vZ2xl YXBpcy5jb20vY3NzMj9mYW1pbHk9QmFsb28rMjp3Z2h0QDcwMDs4MDAmZmFtaWx5PU51bml0bzp3Z2h0QDQwMDs2MDA7NzAwJmRpc3BsYXk9c3dhcCI7CiAg ICAgIGxldCBjc3MgPSBhd2FpdCAoYXdhaXQgZmV0Y2godXJsKSkudGV4dCgpOwogICAgICBjb25zdCB1cmxzID0gQXJyYXkuZnJvbShuZXcgU2V0KChjc3Mu bWF0Y2goL2h0dHBzOlwvXC9mb250c1wuZ3N0YXRpY1wuY29tW14pXSsvZykgfHwgW10pKSk7CiAgICAgIGZvciAoY29uc3QgdSBvZiB1cmxzKSB7CiAgICAg ICAgY29uc3QgYmxvYiA9IGF3YWl0IChhd2FpdCBmZXRjaCh1KSkuYmxvYigpOwogICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXMg PT4geyBjb25zdCBmciA9IG5ldyBGaWxlUmVhZGVyKCk7IGZyLm9ubG9hZCA9ICgpID0+IHJlcyhmci5yZXN1bHQpOyBmci5yZWFkQXNEYXRhVVJMKGJsb2Ip OyB9KTsKICAgICAgICBjc3MgPSBjc3Muc3BsaXQodSkuam9pbihkYXRhKTsKICAgICAgfQogICAgICB0aGlzLl9mb250Q1NTID0gY3NzOwogICAgfSBjYXRj aCAoZSkgeyB0aGlzLl9mb250Q1NTID0gIiI7IH0KICAgIHJldHVybiB0aGlzLl9mb250Q1NTOwogIH0KCiAgYXN5bmMgZXhwb3J0SW1hZ2UoKXsKICAgIGNv bnN0IHN0ID0gdGhpcy5zdGF0cygpOwogICAgaWYgKCFzdCB8fCB0aGlzLmFuc3dlcmVkSWR4KCkubGVuZ3RoIDwgRE9NQUlOUy5sZW5ndGggfHwgdGhpcy5z dGF0ZS5idXN5KSByZXR1cm47CiAgICB0aGlzLnNldFN0YXRlKHsgYnVzeTogdHJ1ZSB9KTsKICAgIGNvbnN0IHN2ZyA9IHRoaXMuc3ZnUmVmLmN1cnJlbnQ7 CiAgICBjb25zdCBjYW52YXMgPSB0aGlzLmNhbnZhc1JlZi5jdXJyZW50OwogICAgaWYgKCFjYW52YXMgfHwgIXN2ZykgeyB0aGlzLnNldFN0YXRlKHsgYnVz eTogZmFsc2UgfSk7IHJldHVybjsgfQogICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICBjb25zdCBXID0gY2FudmFzLndpZHRo OwogICAgY29uc3QgRElTUExBWSA9ICInQmFsb28gMicsIHNhbnMtc2VyaWYiLCBCT0RZID0gIk51bml0bywgc2Fucy1zZXJpZiI7CiAgICBjb25zdCB2cyA9 IHRoaXMuc3RhdGUudmFsdWVzLCBjbSA9IHRoaXMuc3RhdGUuY29tbWl0OwogICAgY29uc3QgY29tbWl0QXJlYSA9IGNtLmFyZWEgIT0gbnVsbCA/IERPTUFJ TlNbY20uYXJlYV0gOiBET01BSU5TW3N0LmxvXTsKICAgIGNvbnN0IGhhc0NvbW1pdCA9ICEhKGNtLnRleHQgJiYgY20udGV4dC50cmltKCkpOwoKICAgIGN0 eC5mb250ID0gIjQwMCAxM3B4ICIgKyBCT0RZOwogICAgY29uc3QgYmxvY2tzID0gRE9NQUlOUy5tYXAoZCA9PiB7CiAgICAgIGNvbnN0IGxpbmVzID0gdGhp cy53cmFwKGN0eCwgdGlwRm9yKGQsIHZzW2QuaWRdKSwgVyAtIDE0Nik7CiAgICAgIHJldHVybiB7IGQ6IGQsIGxpbmVzOiBsaW5lcywgaDogNDQgKyBsaW5l cy5sZW5ndGggKiAxOSB9OwogICAgfSk7CiAgICBjdHguZm9udCA9ICI3MDAgMTVweCAiICsgQk9EWTsKICAgIGNvbnN0IGNvbW1pdExpbmVzID0gaGFzQ29t bWl0ID8gdGhpcy53cmFwKGN0eCwgY20udGV4dC50cmltKCksIFcgLSAxNTApIDogW107CiAgICBjb25zdCBjb21taXRIID0gaGFzQ29tbWl0ID8gNzQgKyBj b21taXRMaW5lcy5sZW5ndGggKiAyMSA6IDA7CiAgICBjb25zdCB3YW50UmVmbCA9IHRoaXMucHJvcHMuc2hvd1JlZmxlY3Rpb24gIT09IGZhbHNlOwogICAg Y3R4LmZvbnQgPSAiNDAwIDEzcHggIiArIEJPRFk7CiAgICBjb25zdCByZWZsQmxvY2tzID0gd2FudFJlZmwgPyBSRUZMRUNUSU9OUy5tYXAocSA9PiB7CiAg ICAgIGNvbnN0IGxpbmVzID0gdGhpcy53cmFwKGN0eCwgcSwgVyAtIDE1MCk7CiAgICAgIHJldHVybiB7IGxpbmVzOiBsaW5lcywgaDogMjAgKyBsaW5lcy5s ZW5ndGggKiAxOSB9OwogICAgfSkgOiBbXTsKICAgIGNvbnN0IHJlZmxIID0gd2FudFJlZmwgPyA0NCArIHJlZmxCbG9ja3MucmVkdWNlKChhLCBiKSA9PiBh ICsgYi5oICsgOSwgMCkgOiAwOwogICAgY29uc3QgZHJhd1cgPSA3MjAsIGRyYXdIID0gZHJhd1cgKiAoOTUwIC8gMTQwMCk7CiAgICBjb25zdCB0aXBzVG9w ID0gMTE4ICsgZHJhd0ggKyAyNiArIDYyICsgMzQ7CiAgICBjYW52YXMuaGVpZ2h0ID0gTWF0aC5yb3VuZCh0aXBzVG9wICsgYmxvY2tzLnJlZHVjZSgoYSwg YikgPT4gYSArIGIuaCArIDExLCAwKSArIGNvbW1pdEggKyByZWZsSCArIDU0KTsKICAgIGNvbnN0IEggPSBjYW52YXMuaGVpZ2h0OwoKICAgIGN0eC5maWxs U3R5bGUgPSAiI0ZGRkRGQiI7IGN0eC5maWxsUmVjdCgwLCAwLCBXLCBIKTsKICAgIGNvbnN0IGcgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwg VywgMCk7CiAgICBnLmFkZENvbG9yU3RvcCgwLCAiIzAwQTBEQyIpOyBnLmFkZENvbG9yU3RvcCgxLCAiI0RDMDA3OCIpOwogICAgY3R4LmZpbGxTdHlsZSA9 IGc7IGN0eC5maWxsUmVjdCgwLCAwLCBXLCAxMik7CgogICAgY3R4LnRleHRBbGlnbiA9ICJjZW50ZXIiOwogICAgY3R4LmZpbGxTdHlsZSA9ICIjMTQyNjFD IjsgY3R4LmZvbnQgPSAiODAwIDQwcHggIiArIERJU1BMQVk7CiAgICBjdHguZmlsbFRleHQoIkxhIGNhc2EgZGUgbWkgYmFsYW5jZSIsIFcgLyAyLCA3Mik7 CiAgICBjdHguZm9udCA9ICI2MDAgMTRweCAiICsgQk9EWTsgY3R4LmZpbGxTdHlsZSA9ICIjNTk2MTVBIjsKICAgIGN0eC5maWxsVGV4dChuZXcgRGF0ZSgp LnRvTG9jYWxlRGF0ZVN0cmluZygiZXMtQ08iLCB7IHllYXI6ICJudW1lcmljIiwgbW9udGg6ICJsb25nIiwgZGF5OiAibnVtZXJpYyIgfSksIFcgLyAyLCA5 OCk7CgogICAgY29uc3QgZmluaXNoID0gKCkgPT4gewogICAgICBsZXQgeSA9IDExOCArIGRyYXdIICsgMjY7CiAgICAgIHRoaXMucm91bmRSZWN0KGN0eCwg NTUsIHksIFcgLSAxMTAsIDU2LCAxNCk7CiAgICAgIGN0eC5maWxsU3R5bGUgPSAiI0Y0RUVGQiI7IGN0eC5maWxsKCk7CiAgICAgIGN0eC5zdHJva2VTdHls ZSA9ICIjMTQyNjFDIjsgY3R4LmxpbmVXaWR0aCA9IDIuNTsgY3R4LnN0cm9rZSgpOwogICAgICBjdHguZmlsbFN0eWxlID0gIiMxNDI2MUMiOyBjdHguZm9u dCA9ICI3MDAgMTNweCAiICsgQk9EWTsgY3R4LnRleHRBbGlnbiA9ICJjZW50ZXIiOwogICAgICBjdHguZmlsbFRleHQoIk3DoXMgY2FsaWVudGU6ICIgKyBE T01BSU5TW3N0LmhpXS5uYW1lICsgIiAoIiArIHZzW3N0LmhpXSArICIpICAgwrcgICBNw6FzIGZyw61vOiAiICsgRE9NQUlOU1tzdC5sb10ubmFtZSArICIg KCIgKyB2c1tzdC5sb10gKyAiKSAgIMK3ICAgQnJlY2hhOiAiICsgc3QuZ2FwICsgIiBwdW50b3MiLCBXIC8gMiwgeSArIDM0KTsKCiAgICAgIHkgKz0gOTA7 CiAgICAgIGN0eC50ZXh0QWxpZ24gPSAibGVmdCI7IGN0eC5mb250ID0gIjgwMCAyNHB4ICIgKyBESVNQTEFZOyBjdHguZmlsbFN0eWxlID0gIiMxNDI2MUMi OwogICAgICBjdHguZmlsbFRleHQoIlRpcHMgcGFyYSBjdWlkYXIgbWkgY2FzYSIsIDU1LCB5KTsKICAgICAgeSArPSAyNDsKCiAgICAgIGJsb2Nrcy5mb3JF YWNoKGIgPT4gewogICAgICAgIGNvbnN0IHYgPSB2c1tiLmQuaWRdLCBjb2xvciA9IHNvbGlkKHYpOwogICAgICAgIHRoaXMucm91bmRSZWN0KGN0eCwgNTUs IHksIFcgLSAxMTAsIGIuaCwgMTMpOwogICAgICAgIGN0eC5maWxsU3R5bGUgPSAiI0ZGRkZGRiI7IGN0eC5maWxsKCk7CiAgICAgICAgY3R4LnN0cm9rZVN0 eWxlID0gIiMxNDI2MUMiOyBjdHgubGluZVdpZHRoID0gMjsgY3R4LnN0cm9rZSgpOwogICAgICAgIHRoaXMucm91bmRSZWN0KGN0eCwgNTUsIHksIDksIGIu aCwgNCk7IGN0eC5maWxsU3R5bGUgPSBjb2xvcjsgY3R4LmZpbGwoKTsKICAgICAgICBjdHguZmlsbFN0eWxlID0gIiMxNDI2MUMiOyBjdHguZm9udCA9ICI3 MDAgMTVweCAiICsgRElTUExBWTsgY3R4LnRleHRBbGlnbiA9ICJsZWZ0IjsKICAgICAgICBjdHguZmlsbFRleHQoYi5kLm5hbWUsIDgwLCB5ICsgMjQpOwog ICAgICAgIGN0eC5maWxsU3R5bGUgPSBjb2xvcjsgY3R4LmZvbnQgPSAiODAwIDE1cHggIiArIERJU1BMQVk7IGN0eC50ZXh0QWxpZ24gPSAicmlnaHQiOwog ICAgICAgIGN0eC5maWxsVGV4dCh2ICsgIi81IiwgVyAtIDc2LCB5ICsgMjQpOwogICAgICAgIGN0eC5maWxsU3R5bGUgPSAiIzJBMzMyQyI7IGN0eC5mb250 ID0gIjQwMCAxM3B4ICIgKyBCT0RZOyBjdHgudGV4dEFsaWduID0gImxlZnQiOwogICAgICAgIGIubGluZXMuZm9yRWFjaCgobCwgaSkgPT4gY3R4LmZpbGxU ZXh0KGwsIDgwLCB5ICsgNDQgKyBpICogMTkpKTsKICAgICAgICB5ICs9IGIuaCArIDExOwogICAgICB9KTsKCiAgICAgIGlmIChoYXNDb21taXQpIHsKICAg ICAgICB5ICs9IDg7CiAgICAgICAgdGhpcy5yb3VuZFJlY3QoY3R4LCA2MSwgeSArIDYsIFcgLSAxMTAsIGNvbW1pdEggLSA4LCAxNCk7CiAgICAgICAgY3R4 LmZpbGxTdHlsZSA9ICIjQ0JCM0YwIjsgY3R4LmZpbGwoKTsKICAgICAgICB0aGlzLnJvdW5kUmVjdChjdHgsIDU1LCB5LCBXIC0gMTEwLCBjb21taXRIIC0g OCwgMTQpOwogICAgICAgIGN0eC5maWxsU3R5bGUgPSAiI0Y0RUVGQiI7IGN0eC5maWxsKCk7CiAgICAgICAgY3R4LnN0cm9rZVN0eWxlID0gIiMxNDI2MUMi OyBjdHgubGluZVdpZHRoID0gMi41OyBjdHguc3Ryb2tlKCk7CiAgICAgICAgY3R4LmZpbGxTdHlsZSA9ICIjNTY0MDhDIjsgY3R4LmZvbnQgPSAiNzAwIDEy cHggIiArIEJPRFk7IGN0eC50ZXh0QWxpZ24gPSAibGVmdCI7CiAgICAgICAgY3R4LmZpbGxUZXh0KCJNSSBDT01QUk9NSVNPIMK3ICIgKyBjb21taXRBcmVh Lm5hbWUudG9VcHBlckNhc2UoKSArIChjbS5kYXRlID8gIiAgwrcgIEFOVEVTIERFICIgKyBjbS5kYXRlIDogIiIpLCA4MCwgeSArIDI4KTsKICAgICAgICBj dHguZmlsbFN0eWxlID0gIiMxNDI2MUMiOyBjdHguZm9udCA9ICI3MDAgMTVweCAiICsgQk9EWTsKICAgICAgICBjb21taXRMaW5lcy5mb3JFYWNoKChsLCBp KSA9PiBjdHguZmlsbFRleHQobCwgODAsIHkgKyA1NCArIGkgKiAyMSkpOwogICAgICAgIHkgKz0gY29tbWl0SDsKICAgICAgfQoKICAgICAgaWYgKHdhbnRS ZWZsKSB7CiAgICAgICAgeSArPSAyMDsKICAgICAgICBjdHgudGV4dEFsaWduID0gImxlZnQiOyBjdHguZm9udCA9ICI4MDAgMjBweCAiICsgRElTUExBWTsg Y3R4LmZpbGxTdHlsZSA9ICIjMTQyNjFDIjsKICAgICAgICBjdHguZmlsbFRleHQoIlBhcmEgcmVmbGV4aW9uYXIiLCA1NSwgeSk7CiAgICAgICAgeSArPSAy MDsKICAgICAgICByZWZsQmxvY2tzLmZvckVhY2goYiA9PiB7CiAgICAgICAgICB0aGlzLnJvdW5kUmVjdChjdHgsIDU1LCB5LCBXIC0gMTEwLCBiLmgsIDEy KTsKICAgICAgICAgIGN0eC5maWxsU3R5bGUgPSAiI0ZGRkZGRiI7IGN0eC5maWxsKCk7CiAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAiIzE0MjYxQyI7 IGN0eC5saW5lV2lkdGggPSAyOyBjdHguc3Ryb2tlKCk7CiAgICAgICAgICBjdHguZmlsbFN0eWxlID0gIiMyQTMzMkMiOyBjdHguZm9udCA9ICI0MDAgMTNw eCAiICsgQk9EWTsgY3R4LnRleHRBbGlnbiA9ICJsZWZ0IjsKICAgICAgICAgIGIubGluZXMuZm9yRWFjaCgobCwgaSkgPT4gY3R4LmZpbGxUZXh0KGwsIDc2 LCB5ICsgMjQgKyBpICogMTkpKTsKICAgICAgICAgIHkgKz0gYi5oICsgOTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgY3R4LnRleHRBbGlnbiA9ICJj ZW50ZXIiOyBjdHguZm9udCA9ICI2MDAgMTNweCAiICsgQk9EWTsgY3R4LmZpbGxTdHlsZSA9ICIjNTk2MTVBIjsKICAgICAgY3R4LmZpbGxUZXh0KCJtYXJ0 aGFyYW1pcmV6LmNvbS5jbyIsIFcgLyAyLCBIIC0gMjIpOwoKICAgICAgdGhpcy5zZW5kU25hcHNob3QodHJ1ZSx0cnVlKTsKCiAgICAgIHRoaXMuc2V0U3Rh dGUoeyBzaG93UHJldmlldzogdHJ1ZSwgc2hvd1RpcHM6IHRydWUsIGJ1c3k6IGZhbHNlIH0sICgpID0+IHsKICAgICAgICBpZiAodGhpcy5saW5rUmVmLmN1 cnJlbnQpIHRoaXMubGlua1JlZi5jdXJyZW50LmhyZWYgPSBjYW52YXMudG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKICAgICAgICBjb25zdCBlbCA9IHRoaXMu Y2FudmFzUmVmLmN1cnJlbnQ7CiAgICAgICAgaWYgKGVsKSB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAr IHdpbmRvdy5zY3JvbGxZIC0gMzAsIGJlaGF2aW9yOiAic21vb3RoIiB9KTsKICAgICAgfSk7CiAgICB9OwoKICAgIGNvbnN0IGNsb25lID0gc3ZnLmNsb25l Tm9kZSh0cnVlKTsKICAgIGNsb25lLnNldEF0dHJpYnV0ZSgieG1sbnMiLCAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciKTsKICAgIGNvbnN0IGZvbnRD U1MgPSBhd2FpdCB0aGlzLmxvYWRGb250Q1NTKCk7CiAgICBpZiAoZm9udENTUykgewogICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l bnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAic3R5bGUiKTsKICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBmb250Q1NTOwogICAgICBjbG9u ZS5pbnNlcnRCZWZvcmUoc3R5bGUsIGNsb25lLmZpcnN0Q2hpbGQpOwogICAgfQogICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7CiAgICBpbWcub25sb2Fk ID0gKCkgPT4geyBjdHguZHJhd0ltYWdlKGltZywgKFcgLSBkcmF3VykgLyAyLCAxMTgsIGRyYXdXLCBkcmF3SCk7IGZpbmlzaCgpOyB9OwogICAgaW1nLm9u ZXJyb3IgPSBmaW5pc2g7CiAgICBpbWcuc3JjID0gImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCIgKyBlbmNvZGVVUklDb21wb25lbnQobmV3 IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhjbG9uZSkpOwogIH0KCiAgcm91bmRSZWN0KGN0eCwgeCwgeSwgdywgaCwgcil7CiAgICBjdHgu YmVnaW5QYXRoKCk7IGN0eC5tb3ZlVG8oeCArIHIsIHkpOwogICAgY3R4LmFyY1RvKHggKyB3LCB5LCB4ICsgdywgeSArIGgsIHIpOyBjdHguYXJjVG8oeCAr IHcsIHkgKyBoLCB4LCB5ICsgaCwgcik7CiAgICBjdHguYXJjVG8oeCwgeSArIGgsIHgsIHksIHIpOyBjdHguYXJjVG8oeCwgeSwgeCArIHcsIHksIHIpOyBj dHguY2xvc2VQYXRoKCk7CiAgfQoKICB3cmFwKGN0eCwgdGV4dCwgbWF4V2lkdGgpewogICAgY29uc3Qgd29yZHMgPSB0ZXh0LnNwbGl0KCIgIiksIGxpbmVz ID0gW107IGxldCBsaW5lID0gIiI7CiAgICB3b3Jkcy5mb3JFYWNoKHcgPT4gewogICAgICBjb25zdCB0ID0gbGluZSA/IGxpbmUgKyAiICIgKyB3IDogdzsK ICAgICAgaWYgKGN0eC5tZWFzdXJlVGV4dCh0KS53aWR0aCA+IG1heFdpZHRoICYmIGxpbmUpIHsgbGluZXMucHVzaChsaW5lKTsgbGluZSA9IHc7IH0gZWxz ZSBsaW5lID0gdDsKICAgIH0pOwogICAgaWYgKGxpbmUpIGxpbmVzLnB1c2gobGluZSk7CiAgICByZXR1cm4gbGluZXM7CiAgfQoKICByZW5kZXJWYWxzKCl7 CiAgICBjb25zdCB2cyA9IHRoaXMuc3RhdGUudmFsdWVzLCBzdCA9IHRoaXMuc3RhdHMoKSwgaG92ZXIgPSB0aGlzLnN0YXRlLmhvdmVyOwogICAgY29uc3Qg YW5zd2VyZWQgPSB0aGlzLmFuc3dlcmVkSWR4KCksIG4gPSBhbnN3ZXJlZC5sZW5ndGgsIGFsbCA9IG4gPT09IERPTUFJTlMubGVuZ3RoOwogICAgY29uc3Qg YyA9IHt9LCBoaXQgPSB7fSwgb3ZlciA9IHt9OwoKICAgIERPTUFJTlMuZm9yRWFjaChkID0+IHsKICAgICAgY29uc3QgdiA9IHZzW2QuaWRdLCBmayA9ICJm IiArIGQua2V5LnNsaWNlKDEpOwogICAgICBjW2Qua2V5XSA9IHYgPT0gbnVsbCA/IEVNUFRZX1dBU0ggOiB3YXNoKHYpOwogICAgICBjW2ZrXSA9IHYgPT0g bnVsbCA/IEVNUFRZX0ZVUk4gOiBmdXJuKHYpOwogICAgICBoaXRbZC5rZXldID0gKCkgPT4gdGhpcy5qdW1wVG8oZC5pZCk7CiAgICAgIG92ZXJbZC5rZXld ID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7IGhvdmVyOiBkLmtleSB9KTsKICAgIH0pOwoKICAgIGNvbnN0IGhnID0gaG92ZXIgPyBHRU9NW2hvdmVyXSA6IG51 bGw7CiAgICBjb25zdCBoaWdobGlnaHQgPSBoZyA/IFJlYWN0LmNyZWF0ZUVsZW1lbnQoImciLCB7IGtleTogImhsIiwgZmlsbDogIm5vbmUiLCBzdHJva2U6 ICIjMTQyNjFDIiwgc3Ryb2tlV2lkdGg6IDcsIHN0cm9rZURhc2hhcnJheTogIjE2IDExIiwgb3BhY2l0eTogMC44NSwgc3R5bGU6IHsgcG9pbnRlckV2ZW50 czogIm5vbmUiIH0gfSwKICAgICAgaGcudHlwZSA9PT0gInBvbHkiCiAgICAgICAgPyBSZWFjdC5jcmVhdGVFbGVtZW50KCJwb2x5Z29uIiwgeyBwb2ludHM6 IGhnLnBvaW50cyB9KQogICAgICAgIDogUmVhY3QuY3JlYXRlRWxlbWVudCgicmVjdCIsIHsgeDogaGcueCwgeTogaGcueSwgd2lkdGg6IGhnLncsIGhlaWdo dDogaGcuaCwgcng6IGhnLnIgfHwgOCB9KQogICAgKSA6IG51bGw7CgogICAgY29uc3QgTUVEQUxTID0gWwogICAgICB7IGs6ICJyNCIsIHg6IDI4NCwgeTog ODY3IH0sIHsgazogInIyIiwgeDogMTE1MCwgeTogNTM2IH0sCiAgICAgIHsgazogInI2IiwgeDogNjAwLCB5OiAyNTggfSwgeyBrOiAicjciLCB4OiA1MzYs IHk6IDc4NiB9LAogICAgICB7IGs6ICJyMSIsIHg6IDQyNSwgeTogMzg4IH0sIHsgazogInI4IiwgeDogNzc1LCB5OiAzODggfSwKICAgICAgeyBrOiAicjAi LCB4OiAzNTYsIHk6IDU5OCB9LCB7IGs6ICJyNSIsIHg6IDU0NCwgeTogNTk4IH0sCiAgICAgIHsgazogInI5IiwgeDogNzAyLCB5OiA1OTggfSwgeyBrOiAi cjMiLCB4OiA4NjQsIHk6IDU5OCB9CiAgICBdOwogICAgY29uc3QgYnlLZXkgPSB7fTsKICAgIERPTUFJTlMuZm9yRWFjaChkID0+IHsgYnlLZXlbZC5rZXld ID0gdnNbZC5pZF07IH0pOwogICAgY29uc3QgbWVkYWxzID0gUmVhY3QuY3JlYXRlRWxlbWVudCgiZyIsIHsga2V5OiAibWVkYWxzIiwgc3R5bGU6IHsgcG9p bnRlckV2ZW50czogIm5vbmUiIH0gfSwgTUVEQUxTLmZpbHRlcihtID0+IGJ5S2V5W20ua10gIT0gbnVsbCkubWFwKG0gPT4gewogICAgICBjb25zdCB2YWwg PSBieUtleVttLmtdOwogICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudCgiZyIsIHsga2V5OiBtLmsgfSwKICAgICAgICBSZWFjdC5jcmVhdGVFbGVt ZW50KCJjaXJjbGUiLCB7IGN4OiBtLngsIGN5OiBtLnksIHI6IDI0LCBmaWxsOiAiI0ZGRkZGRiIsIHN0cm9rZTogIiMxNDI2MUMiLCBzdHJva2VXaWR0aDog NiB9KSwKICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KCJ0ZXh0IiwgewogICAgICAgICAgeDogbS54LCB5OiBtLnkgKyAyOCAqIDAuMzUsIHRleHRBbmNo b3I6ICJtaWRkbGUiLCBmb250RmFtaWx5OiAiJ0JhbG9vIDInLCBzYW5zLXNlcmlmIiwKICAgICAgICAgIGZvbnRXZWlnaHQ6IDgwMCwgZm9udFNpemU6IDI4 LCBmaWxsOiAiIzE0MjYxQyIsIHN0cm9rZTogIm5vbmUiCiAgICAgICAgfSwgU3RyaW5nKHZhbCkpCiAgICAgICk7CiAgICB9KSk7CgogICAgY29uc3QgYXJp YUhvdXNlID0gIkNhc2EgZGUgYmFsYW5jZS4gIiArIERPTUFJTlMubWFwKGQgPT4gZC5uYW1lICsgIjogIiArICh2c1tkLmlkXSA9PSBudWxsID8gInNpbiBy ZXNwb25kZXIiIDogdnNbZC5pZF0gKyAiIGRlIDUiKSkuam9pbigiLiAiKSArICIuIjsKCiAgICByZXR1cm4gewogICAgICBjOiBjLCBoaXQ6IGhpdCwgb3Zl cjogb3Zlciwgb3V0OiAoKSA9PiB0aGlzLnNldFN0YXRlKHsgaG92ZXI6IG51bGwgfSksCiAgICAgIGhpZ2hsaWdodDogaGlnaGxpZ2h0LCBtZWRhbHM6IG1l ZGFscywgYXJpYUhvdXNlOiBhcmlhSG91c2UsCgogICAgICBwcm9ncmVzc0xhYmVsOiBuID09PSAwID8gIkHDum4gbm8gaGFzIHJlc3BvbmRpZG8iIDogbiAr ICIgZGUgMTAgcmVzcG9uZGlkYXMiLAogICAgICBwcm9ncmVzc0hpbnQ6IGFsbCA/ICJMaXN0byDCtyBhYmFqbyBlc3TDoW4gdHVzIHRpcHMiIDogIkZhbHRh biAiICsgKDEwIC0gbiksCiAgICAgIHByb2dyZXNzUGN0OiAobiAvIERPTUFJTlMubGVuZ3RoICogMTAwKSArICIlIiwKCiAgICAgIHRpbGVzOiBET01BSU5T Lm1hcChkID0+IHsKICAgICAgICBjb25zdCB2ID0gdnNbZC5pZF0sIGlzSG92ZXIgPSBob3ZlciA9PT0gZC5rZXk7CiAgICAgICAgcmV0dXJuIHsKICAgICAg ICAgIHJvb206IGQucm9vbSwgbmFtZTogZC5uYW1lLCBkZXNjOiBkLmRlc2MsIHF1ZXN0aW9uOiBkLnF1ZXN0aW9uLCBoaW50OiBkLmhpbnQsCiAgICAgICAg ICBsb3c6IGQubG93LCBoaWdoOiBkLmhpZ2gsIHJlZjogdGhpcy5jYXJkUmVmc1tkLmlkXSwKICAgICAgICAgIGFuc3dlcmVkOiB2ICE9IG51bGwgJiYgKGFs bCB8fCB0aGlzLnN0YXRlLnNob3dUaXBzKSwgYmFkZ2U6IHYgPT0gbnVsbCA/ICLigJQiIDogdiArICIvNSIsCiAgICAgICAgICBhY2NlbnQ6IHYgPT0gbnVs bCA/ICIjOUFBMjlBIiA6IHNvbGlkKHYpLAogICAgICAgICAgc3RhdGU6IHYgPT0gbnVsbCA/ICIiIDogU1RBVEVTW3ZdLCB0aXA6IHYgPT0gbnVsbCA/ICIi IDogdGlwRm9yKGQsIHYpLAogICAgICAgICAgYm9yZGVyOiBpc0hvdmVyID8gIiNCNDAwNkEiIDogIiMxNDI2MUMiLAogICAgICAgICAgc2hhZG93OiBpc0hv dmVyID8gIjAgMCAwIDRweCByZ2JhKDE4MCwwLDEwNiwuMTYpIiA6ICJub25lIiwKICAgICAgICAgIG9uRW50ZXI6ICgpID0+IHRoaXMuc2V0U3RhdGUoeyBo b3ZlcjogZC5rZXkgfSksCiAgICAgICAgICBvbkxlYXZlOiAoKSA9PiB0aGlzLnNldFN0YXRlKHsgaG92ZXI6IG51bGwgfSksCiAgICAgICAgICBvcHRzOiBb MSwyLDMsNCw1XS5tYXAobm4gPT4gKHsKICAgICAgICAgICAgbjogbm4sIGFjdGl2ZTogdiA9PT0gbm4sIGFyaWE6IGQubmFtZSArICI6ICIgKyBubiArICIg ZGUgNSIsCiAgICAgICAgICAgIGJnOiB2ID09PSBubiA/IHNvbGlkKG5uKSA6ICIjRkZGRkZGIiwgZmc6IHYgPT09IG5uID8gIiNGRkZGRkYiIDogIiMxNDI2 MUMiLAogICAgICAgICAgICBvblBpY2s6ICgpID0+IHRoaXMuc2V0VmFsdWUoZC5pZCwgbm4pCiAgICAgICAgICB9KSkKICAgICAgICB9OwogICAgICB9KSwK CiAgICAgIGhhc1N0YXRzOiBuID49IDIsCiAgICAgIGhvdHRlc3Q6IHN0ID8gRE9NQUlOU1tzdC5oaV0ubmFtZSArICIgKCIgKyB2c1tzdC5oaV0gKyAiKSIg OiAi4oCUIiwKICAgICAgY29sZGVzdDogc3QgPyBET01BSU5TW3N0LmxvXS5uYW1lICsgIiAoIiArIHZzW3N0LmxvXSArICIpIiA6ICLigJQiLAogICAgICBn YXBMYWJlbDogc3QgPyBzdC5nYXAgKyAoc3QuZ2FwID09PSAxID8gIiBwdW50byIgOiAiIHB1bnRvcyIpIDogIuKAlCIsCiAgICAgIGdhcE5vdGU6IHN0ID8g KHN0LmdhcCA+PSAzID8gIlR1IGNhc2EgZXN0w6EgZGVzbml2ZWxhZGE6IGhheSBlc3BhY2lvcyBtdXkgY2FsaWVudGVzIGp1bnRvIGEgb3Ryb3MgbXV5IGZy w61vcy4iIDogIlR1IGNhc2EgZXN0w6EgYmFzdGFudGUgcGFyZWphIGVudHJlIGVzcGFjaW9zLiIpIDogIiIsCiAgICAgIGF0dGVudGlvbkxhYmVsOiBzdCA/ IHN0Lmxvdy5sZW5ndGggKyAoc3QubG93Lmxlbmd0aCA9PT0gMSA/ICIgw6FyZWEiIDogIiDDoXJlYXMiKSA6ICLigJQiLAogICAgICBhdHRlbnRpb25Ob3Rl OiBzdCA/IChzdC5sb3cubGVuZ3RoID8gc3QubG93Lm1hcChpID0+IERPTUFJTlNbaV0ubmFtZSkuam9pbigiLCAiKSA6ICJOaW5ndW5hIMOhcmVhIHF1ZWTD syBlbiAxIG8gMi4iKSA6ICIiLAoKICAgICAgYWxsQW5zd2VyZWQ6IGFsbCwKICAgICAgY29tbWl0UHJvbXB0OiBzdCA/ICJVbmEgc29sYSBhY2Npw7NuLCBl biB1bmEgc29sYSDDoXJlYS4gU3VnZXJlbmNpYTogIiArIERPTUFJTlNbc3QubG9dLm5hbWUgKyAiLCB0dSBlc3BhY2lvIG3DoXMgZnLDrW8uIiA6ICIiLAog ICAgICBjb21taXRBcmVhOiB0aGlzLnN0YXRlLmNvbW1pdC5hcmVhID09IG51bGwgPyAoc3QgPyBTdHJpbmcoc3QubG8pIDogIjAiKSA6IFN0cmluZyh0aGlz LnN0YXRlLmNvbW1pdC5hcmVhKSwKICAgICAgY29tbWl0VGV4dDogdGhpcy5zdGF0ZS5jb21taXQudGV4dCB8fCAiIiwKICAgICAgY29tbWl0RGF0ZTogdGhp cy5zdGF0ZS5jb21taXQuZGF0ZSB8fCAiIiwKICAgICAgYXJlYU9wdGlvbnM6IERPTUFJTlMubWFwKGQgPT4gKHsgdmFsdWU6IFN0cmluZyhkLmlkKSwgbGFi ZWw6IGQubmFtZSB9KSksCiAgICAgIGN0eENpdHk6IHRoaXMuc3RhdGUuY3R4LmNpdHksIGN0eEpvYjogdGhpcy5zdGF0ZS5jdHguam9iLAogICAgICBvbkN0 eENpdHk6IGUgPT4gdGhpcy5zYXZlQ3R4KHsgY2l0eTogZS50YXJnZXQudmFsdWUgfSksCiAgICAgIG9uQ3R4Sm9iOiBlID0+IHRoaXMuc2F2ZUN0eCh7IGpv YjogZS50YXJnZXQudmFsdWUgfSksCiAgICAgIGFnZU9wdGlvbnM6IEFHRV9PUFRTLm1hcChsYWJlbCA9PiAoewogICAgICAgIGxhYmVsOiBsYWJlbCwgYWN0 aXZlOiB0aGlzLnN0YXRlLmN0eC5hZ2UgPT09IGxhYmVsLAogICAgICAgIGJnOiB0aGlzLnN0YXRlLmN0eC5hZ2UgPT09IGxhYmVsID8gIiNCNDAwNkEiIDog IiNGRkZGRkYiLAogICAgICAgIGZnOiB0aGlzLnN0YXRlLmN0eC5hZ2UgPT09IGxhYmVsID8gIiNGRkZGRkYiIDogIiMxNDI2MUMiLAogICAgICAgIG9uUGlj azogKCkgPT4gdGhpcy5zYXZlQ3R4KHsgYWdlOiB0aGlzLnN0YXRlLmN0eC5hZ2UgPT09IGxhYmVsID8gbnVsbCA6IGxhYmVsIH0pCiAgICAgIH0pKSwKICAg ICAgb25Db21taXRBcmVhOiBlID0+IHRoaXMuc2F2ZUNvbW1pdCh7IGFyZWE6IHBhcnNlSW50KGUudGFyZ2V0LnZhbHVlLCAxMCkgfSksCiAgICAgIG9uQ29t bWl0VGV4dDogZSA9PiB0aGlzLnNhdmVDb21taXQoeyB0ZXh0OiBlLnRhcmdldC52YWx1ZSB9KSwKICAgICAgb25Db21taXREYXRlOiBlID0+IHRoaXMuc2F2 ZUNvbW1pdCh7IGRhdGU6IGUudGFyZ2V0LnZhbHVlIH0pLAogICAgICBjb21taXRTdGF0dXM6ICh0aGlzLnN0YXRlLmNvbW1pdC50ZXh0IHx8ICIiKS50cmlt KCkgPyAiTGlzdG8uIFR1IGNvbXByb21pc28gdmEgZGVudHJvIGRlIGxhIGltYWdlbiBxdWUgZGVzY2FyZ3Vlcy4iIDogIkxvIHF1ZSBlc2NyaWJhcyBhcXXD rSBxdWVkYSBkZW50cm8gZGUgdHUgaW1hZ2VuIGRlc2NhcmdhYmxlLiIsCgogICAgICBzaG93UmVmbGVjdGlvbjogdGhpcy5wcm9wcy5zaG93UmVmbGVjdGlv biAhPT0gZmFsc2UsCgogICAgICBleHBvcnREaXNhYmxlZDogIWFsbCB8fCB0aGlzLnN0YXRlLmJ1c3ksCiAgICAgIGV4cG9ydExhYmVsOiB0aGlzLnN0YXRl LmJ1c3kgPyAiR2VuZXJhbmRv4oCmIiA6IChhbGwgPyAiRGVzY2FyZ2EgaW1hZ2VuIHkgdGlwcyIgOiAiUmVzcG9uZGUgbGFzIDEwIHBhcmEgZGVzY2FyZ2Fy IiksCiAgICAgIGV4cG9ydEJnOiBhbGwgJiYgIXRoaXMuc3RhdGUuYnVzeSA/ICJsaW5lYXItZ3JhZGllbnQoOTBkZWcsICMwMEEwREMsICNEQzAwNzgpIiA6 ICIjQjlCRUI4IiwKICAgICAgZXhwb3J0Q3Vyc29yOiBhbGwgJiYgIXRoaXMuc3RhdGUuYnVzeSA/ICJwb2ludGVyIiA6ICJub3QtYWxsb3dlZCIsCiAgICAg IHJlc2V0TGFiZWw6IHRoaXMuc3RhdGUuY29uZmlybVJlc2V0ID8gIsK/U2VndXJvPyBTw60sIGJvcnJhciB0b2RvIiA6ICJSZWluaWNpYXIgY2FzYSIsCiAg ICAgIHJlc2V0Qmc6IHRoaXMuc3RhdGUuY29uZmlybVJlc2V0ID8gIiNGQ0U5RjMiIDogIiNGRkZGRkYiLAoKICAgICAgcHJldmlld0Rpc3BsYXk6IHRoaXMu c3RhdGUuc2hvd1ByZXZpZXcgPyAiYmxvY2siIDogIm5vbmUiLAogICAgICBjYW52YXNSZWY6IHRoaXMuY2FudmFzUmVmLCBsaW5rUmVmOiB0aGlzLmxpbmtS ZWYsIHN2Z1JlZjogdGhpcy5zdmdSZWYsCiAgICAgIG9uRXhwb3J0OiAoKSA9PiB0aGlzLmV4cG9ydEltYWdlKCksIG9uUmVzZXQ6ICgpID0+IHRoaXMucmVz ZXQoKQogICAgfTsKICB9Cn0KPC9zY3JpcHQ+CgoKPHNjcmlwdD4KKGZ1bmN0aW9uKCl7CiAgdmFyIGxhc3RIZWlnaHQ9MDsKICB2YXIgc2NoZWR1bGVkPWZh bHNlOwogIGZ1bmN0aW9uIG1lYXN1cmUoKXsKICAgIHNjaGVkdWxlZD1mYWxzZTsKICAgIHZhciBhcHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keSA+ IHgtZGMgPiBkaXYnKXx8ZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYm9keSA+IHgtZGMnKXx8ZG9jdW1lbnQuYm9keTsKICAgIGlmKCFhcHApcmV0dXJuOwog ICAgdmFyIGhlaWdodD1NYXRoLmNlaWwoTWF0aC5tYXgoYXBwLnNjcm9sbEhlaWdodHx8MCxhcHAub2Zmc2V0SGVpZ2h0fHwwKSk7CiAgICBpZihoZWlnaHQ+ MzAwJiZNYXRoLmFicyhoZWlnaHQtbGFzdEhlaWdodCk+Mil7CiAgICAgIGxhc3RIZWlnaHQ9aGVpZ2h0OwogICAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNz YWdlKHt0eXBlOidjYXNhLWJhbGFuY2UtaGVpZ2h0JyxoZWlnaHQ6aGVpZ2h0fSwnKicpOwogICAgfQogIH0KICBmdW5jdGlvbiBzY2hlZHVsZSgpewogICAg aWYoc2NoZWR1bGVkKXJldHVybjsKICAgIHNjaGVkdWxlZD10cnVlOwogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKG1lYXN1cmUpOwogIH0KICB3aW5kb3cu YWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsc2NoZWR1bGUpOwogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLHNjaGVkdWxlKTsKICBkb2N1bWVu dC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZnVuY3Rpb24oKXtzZXRUaW1lb3V0KHNjaGVkdWxlLDApO3NldFRpbWVvdXQoc2NoZWR1bGUsMzUwKTt9KTsK ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsc2NoZWR1bGUpOwogIGlmKGRvY3VtZW50LmZvbnRzJiZkb2N1bWVudC5mb250cy5yZWFkeSlk b2N1bWVudC5mb250cy5yZWFkeS50aGVuKHNjaGVkdWxlKTsKICBpZih3aW5kb3cuUmVzaXplT2JzZXJ2ZXIpewogICAgdmFyIHJvPW5ldyBSZXNpemVPYnNl cnZlcihzY2hlZHVsZSk7CiAgICB2YXIgdGFyZ2V0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2JvZHkgPiB4LWRjJyl8fGRvY3VtZW50LmJvZHk7CiAgICBp Zih0YXJnZXQpcm8ub2JzZXJ2ZSh0YXJnZXQpOwogIH0KICBpZih3aW5kb3cuTXV0YXRpb25PYnNlcnZlcil7CiAgICB2YXIgbW89bmV3IE11dGF0aW9uT2Jz ZXJ2ZXIoc2NoZWR1bGUpOwogICAgbW8ub2JzZXJ2ZShkb2N1bWVudC5ib2R5LHtzdWJ0cmVlOnRydWUsY2hpbGRMaXN0OnRydWUsYXR0cmlidXRlczp0cnVl LGF0dHJpYnV0ZUZpbHRlcjpbJ3N0eWxlJywnY2xhc3MnLCdoaWRkZW4nXX0pOwogIH0KICBzY2hlZHVsZSgpOwogIHNldFRpbWVvdXQoc2NoZWR1bGUsMjUw KTsKICBzZXRUaW1lb3V0KHNjaGVkdWxlLDEyMDApOwp9KSgpOwo8L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4K LinkedIn Twitter/X Facebook WhatsApp Reddit Email