From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 From: Germano Massullo (Thetra) To: git-commits@fedoraproject.org Subject: [rpms/darktable] rawhide: fixed lua-5.5 patches Date: Tue, 01 Sep 2026 14:31:53 GMT Message-ID: <178827311333.1.17184380959993664833.rpms-darktable-a7914949dd2e@fedoraproject.org> List-ID: X-Git-Repo: rpms/darktable X-Git-Branch: rawhide X-Git-Rev: a7914949dd2ec041baaead2cf78b163b1056d938 QSBuZXcgY29tbWl0IGhhcyBiZWVuIHB1c2hlZC4KClJlcG8gICA6IHJwbXMvZGFya3RhYmxlCkJy YW5jaCA6IHJhd2hpZGUKQ29tbWl0IDogYTc5MTQ5NDlkZDJlYzA0MWJhYWVhZDJjZjc4YjE2M2Ix MDU2ZDkzOApBdXRob3IgOiBHZXJtYW5vIE1hc3N1bGxvIChUaGV0cmEpIDxnZXJtYW5vLm1hc3N1 bGxvQHRoZXRyYS5ldT4KRGF0ZSAgIDogMjAyNi0wOS0wMVQxNjozMTowOCswMjowMApTdGF0cyAg OiArMTgyLy0zMDcwIGluIDQgZmlsZShzKQpVUkwgICAgOiBodHRwczovL3NyYy5mZWRvcmFwcm9q ZWN0Lm9yZy9ycG1zL2Rhcmt0YWJsZS9jL2E3OTE0OTQ5ZGQyZWMwNDFiYWFlYWQyY2Y3OGIxNjNi MTA1NmQ5Mzg/YnJhbmNoPXJhd2hpZGUKCkxvZzoKZml4ZWQgbHVhLTUuNSBwYXRjaGVzCgotLS0K ZGlmZiAtLWdpdCBhL2Rhcmt0YWJsZS01LjYuMS1sdWEtNS41LXNjcmlwdHMucGF0Y2ggYi9kYXJr dGFibGUtNS42LjEtbHVhLTUuNS1zY3JpcHRzLnBhdGNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLjEyNTE0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kYXJrdGFibGUtNS42LjEt bHVhLTUuNS1zY3JpcHRzLnBhdGNoCkBAIC0wLDAgKzEsMTUyIEBACitkaWZmIC0tZ2l0IGEvc3Jj L2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvSERSTWVyZ2UubHVhIGIvc3JjL2V4dGVybmFs L2x1YS1zY3JpcHRzL2NvbnRyaWIvSERSTWVyZ2UubHVhCitpbmRleCA5ZDdhOTUxLi4xOGUwNDk5 IDEwMDY0NAorLS0tIGEvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvSERSTWVyZ2Uu bHVhCisrKysgYi9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9IRFJNZXJnZS5sdWEK K0BAIC0yNzcsOSArMjc3LDkgQEAgbG9jYWwgZnVuY3Rpb24gbWFpbigpCisgICAgIGxvY2FsIHNl dF90YWcgPSBHVUkuVGFyZ2V0LmFkZF90YWdzLnRleHQKKyAgICAgaWYgc2V0X3RhZyB+PSBuaWwg dGhlbiAtLSBhZGQgYWRkaXRpb25hbCB1c2VyLXNwZWNpZmllZCB0YWdzCisgICAgICAgZm9yIHRh ZyBpbiBzdHJpbmcuZ21hdGNoKHNldF90YWcsICdbXixdKycpIGRvCistICAgICAgICB0YWcgPSBD bGVhblNwYWNlcyh0YWcpCistICAgICAgICB0YWcgPSBkdC50YWdzLmNyZWF0ZSh0YWcpCistICAg ICAgICBkdC50YWdzLmF0dGFjaCh0YWcsIGltcG9ydGVkKSAKKysgICAgICAgIGxvY2FsIGNsZWFu ZWRfdGFnID0gQ2xlYW5TcGFjZXModGFnKQorKyAgICAgICAgY2xlYW5lZF90YWcgPSBkdC50YWdz LmNyZWF0ZShjbGVhbmVkX3RhZykKKysgICAgICAgIGR0LnRhZ3MuYXR0YWNoKGNsZWFuZWRfdGFn LCBpbXBvcnRlZCkKKyAgICAgICBlbmQKKyAgICAgZW5kCisgICAgIGR0LnByaW50KF8oJ0hEUk1l cmdlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHknKSkKK2RpZmYgLS1naXQgYS9zcmMvZXh0ZXJuYWwv bHVhLXNjcmlwdHMvY29udHJpYi9lbmZ1c2VBZHZhbmNlZC5sdWEgYi9zcmMvZXh0ZXJuYWwvbHVh LXNjcmlwdHMvY29udHJpYi9lbmZ1c2VBZHZhbmNlZC5sdWEKK2luZGV4IDk5Mzc1MGYuLjU1YTBj MzAgMTAwNjQ0CistLS0gYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9lbmZ1c2VB ZHZhbmNlZC5sdWEKKysrKyBiL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2VuZnVz ZUFkdmFuY2VkLmx1YQorQEAgLTUyNyw5ICs1MjcsOSBAQCBsb2NhbCBmdW5jdGlvbiBtYWluKHN0 b3JhZ2UsIGltYWdlX3RhYmxlLCBleHRyYV9kYXRhKQorICAgICAgICAgICAgIGxvY2FsIHNldF90 YWcgPSBHVUkuVGFyZ2V0LmFkZF90YWdzLnRleHQKKyAgICAgICAgICAgICBpZiBzZXRfdGFnIH49 IG5pbCB0aGVuIC0tYWRkIGFkZGl0aW9uYWwgdXNlci1zcGVjaWZpZWQgdGFncworICAgICAgICAg ICAgICAgICBmb3IgdGFnIGluIHN0cmluZy5nbWF0Y2goc2V0X3RhZywgJ1teLF0rJykgZG8KKy0g ICAgICAgICAgICAgICAgICAgIHRhZyA9IENsZWFuU3BhY2VzKHRhZykKKy0gICAgICAgICAgICAg ICAgICAgIHRhZyA9IGR0LnRhZ3MuY3JlYXRlKHRhZykKKy0gICAgICAgICAgICAgICAgICAgIGR0 LnRhZ3MuYXR0YWNoKHRhZywgaW1wb3J0ZWQpIAorKyAgICAgICAgICAgICAgICAgICAgbG9jYWwg Y2xlYW5lZF90YWcgPSBDbGVhblNwYWNlcyh0YWcpCisrICAgICAgICAgICAgICAgICAgICBjbGVh bmVkX3RhZyA9IGR0LnRhZ3MuY3JlYXRlKGNsZWFuZWRfdGFnKQorKyAgICAgICAgICAgICAgICAg ICAgZHQudGFncy5hdHRhY2goY2xlYW5lZF90YWcsIGltcG9ydGVkKQorICAgICAgICAgICAgICAg ICBlbmQKKyAgICAgICAgICAgICBlbmQKKyAgICAgICAgIGVuZAorZGlmZiAtLWdpdCBhL3NyYy9l eHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2ZhY2VfcmVjb2duaXRpb24ubHVhIGIvc3JjL2V4 dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZmFjZV9yZWNvZ25pdGlvbi5sdWEKK2luZGV4IDBj NjBhNWMuLjkxNDAwMmQgMTAwNjQ0CistLS0gYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29u dHJpYi9mYWNlX3JlY29nbml0aW9uLmx1YQorKysrIGIvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRz L2NvbnRyaWIvZmFjZV9yZWNvZ25pdGlvbi5sdWEKK0BAIC0zMTEsMjUgKzMxMSwyNiBAQCBsb2Nh bCBmdW5jdGlvbiBmYWNlX3JlY29nbml0aW9uICgpCisgICAgICAgICAgICAgaWYgaWdub3JlQnlU YWcgKGltZywgaWdub3JlVGFncykgdGhlbgorICAgICAgICAgICAgICAgZHQucHJpbnRfbG9nKCJG YWNlIHJlY29nbml0aW9uOiBJZ25vcmluZyBpbWFnZSB3aXRoIElEICIgLi4gaW1nLmlkKQorICAg ICAgICAgICAgIGVsc2UKKysgICAgICAgICAgICAgIGxvY2FsIHRhZ19uYW1lID0gdAorICAgICAg ICAgICAgICAgLS0gQ2hlY2sgb2YgdW5yZWNvZ25pemVkIHVua25vd25fcGVyc29uCistICAgICAg ICAgICAgICBpZiB0ID09ICJ1bmtub3duX3BlcnNvbiIgdGhlbgorLSAgICAgICAgICAgICAgICB0 ID0gdW5rbm93blRhZworKyAgICAgICAgICAgICAgaWYgdGFnX25hbWUgPT0gInVua25vd25fcGVy c29uIiB0aGVuCisrICAgICAgICAgICAgICAgIHRhZ19uYW1lID0gdW5rbm93blRhZworICAgICAg ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAtLSBDaGVjayBvZiB1bnJlY29nbml6ZWQgbm9f cGVyc29uc19mb3VuZAorLSAgICAgICAgICAgICAgaWYgdCA9PSAibm9fcGVyc29uc19mb3VuZCIg dGhlbgorLSAgICAgICAgICAgICAgICB0ID0gbm9ucGVyc29uc2ZvdW5kVGFnCisrICAgICAgICAg ICAgICBpZiB0YWdfbmFtZSA9PSAibm9fcGVyc29uc19mb3VuZCIgdGhlbgorKyAgICAgICAgICAg ICAgICB0YWdfbmFtZSA9IG5vbnBlcnNvbnNmb3VuZFRhZworICAgICAgICAgICAgICAgZW5kCist ICAgICAgICAgICAgICBpZiB0IH49ICIiIGFuZCB0IH49IG5pbCB0aGVuCistICAgICAgICAgICAg ICAgIGlmIGNhdGVnb3J5VGFnU3RyaW5nIH49ICIiIGFuZCB0IH49IG5vbnBlcnNvbnNmb3VuZFRh ZyB0aGVuCistICAgICAgICAgICAgICAgICAgdCA9IGNhdGVnb3J5VGFnU3RyaW5nIC4uICJ8IiAu LiB0CisrICAgICAgICAgICAgICBpZiB0YWdfbmFtZSB+PSAiIiBhbmQgdGFnX25hbWUgfj0gbmls IHRoZW4KKysgICAgICAgICAgICAgICAgaWYgY2F0ZWdvcnlUYWdTdHJpbmcgfj0gIiIgYW5kIHRh Z19uYW1lIH49IG5vbnBlcnNvbnNmb3VuZFRhZyB0aGVuCisrICAgICAgICAgICAgICAgICAgdGFn X25hbWUgPSBjYXRlZ29yeVRhZ1N0cmluZyAuLiAifCIgLi4gdGFnX25hbWUKKyAgICAgICAgICAg ICAgICAgZW5kICAgICAgICAgICAgICAgICAgCistICAgICAgICAgICAgICAgIGR0LnByaW50X2xv ZyAoIkltZ0lkOiIgLi4gaW1nLmlkIC4uICIgVGFnOiIuLiB0KQorKyAgICAgICAgICAgICAgICBk dC5wcmludF9sb2cgKCJJbWdJZDoiIC4uIGltZy5pZCAuLiAiIFRhZzoiLi4gdGFnX25hbWUpCisg ICAgICAgICAgICAgICAgIC0tIENyZWF0ZSB0YWcgaWYgaXQgZG9lcyBub3QgZXhpc3QKKy0gICAg ICAgICAgICAgICAgaWYgdGFnc19saXN0W3RdID09IG5pbCB0aGVuCistICAgICAgICAgICAgICAg ICAgdGFnID0gZHQudGFncy5jcmVhdGUgKHQpCistICAgICAgICAgICAgICAgICAgdGFnc19saXN0 W3RdID0gdGFnCisrICAgICAgICAgICAgICAgIGlmIHRhZ3NfbGlzdFt0YWdfbmFtZV0gPT0gbmls IHRoZW4KKysgICAgICAgICAgICAgICAgICB0YWcgPSBkdC50YWdzLmNyZWF0ZSAodGFnX25hbWUp CisrICAgICAgICAgICAgICAgICAgdGFnc19saXN0W3RhZ19uYW1lXSA9IHRhZworICAgICAgICAg ICAgICAgICBlbHNlCistICAgICAgICAgICAgICAgICAgdGFnID0gdGFnc19saXN0W3RdCisrICAg ICAgICAgICAgICAgICAgdGFnID0gdGFnc19saXN0W3RhZ19uYW1lXQorICAgICAgICAgICAgICAg ICBlbmQKKyAgICAgICAgICAgICAgICAgaW1nOmF0dGFjaF90YWcgKHRhZykKKyAgICAgICAgICAg ICAgIGVuZAorZGlmZiAtLWdpdCBhL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2dp bXAubHVhIGIvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZ2ltcC5sdWEKK2luZGV4 IDkyYzZkMGMuLmFjYzczODEgMTAwNjQ0CistLS0gYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMv Y29udHJpYi9naW1wLmx1YQorKysrIGIvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIv Z2ltcC5sdWEKK0BAIC0xNDIsOCArMTQyLDggQEAgbG9jYWwgZnVuY3Rpb24gZ2ltcF9lZGl0KHN0 b3JhZ2UsIGltYWdlX3RhYmxlLCBleHRyYV9kYXRhKSAtLWZpbmFsaXplCisgICBpbWdfbGlzdCA9 ICIiCisgCisgICBmb3IgXyxleHBfaW1nIGluIHBhaXJzKGltYWdlX3RhYmxlKSBkbworLSAgICBl eHBfaW1nID0gZGYuc2FuaXRpemVfZmlsZW5hbWUoZXhwX2ltZykKKy0gICAgaW1nX2xpc3QgPSBp bWdfbGlzdCAuLmV4cF9pbWcuLiAiICIKKysgICAgbG9jYWwgc2FuaXRpemVkID0gZGYuc2FuaXRp emVfZmlsZW5hbWUoZXhwX2ltZykKKysgICAgaW1nX2xpc3QgPSBpbWdfbGlzdCAuLnNhbml0aXpl ZC4uICIgIgorICAgZW5kCisgCisgICBkdC5wcmludChfKCJsYXVuY2hpbmcgR0lNUC4uLiIpKQor ZGlmZiAtLWdpdCBhL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2ltYWdlX3N0YWNr Lmx1YSBiL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2ltYWdlX3N0YWNrLmx1YQor aW5kZXggNjYxYjI4ZC4uYTZkMTk3OCAxMDA2NDQKKy0tLSBhL3NyYy9leHRlcm5hbC9sdWEtc2Ny aXB0cy9jb250cmliL2ltYWdlX3N0YWNrLmx1YQorKysrIGIvc3JjL2V4dGVybmFsL2x1YS1zY3Jp cHRzL2NvbnRyaWIvaW1hZ2Vfc3RhY2subHVhCitAQCAtMzIzLDggKzMyMyw4IEBAIGxvY2FsIGZ1 bmN0aW9uIGNsZWFudXAoaW1nX2xpc3QpCisgICBkdC5wcmludF9sb2coImltYWdlIGxpc3QgaXMg IiAuLiBpbWdfbGlzdCkKKyAgIGZpbGVzID0gZHUuc3BsaXQoaW1nX2xpc3QsICIgIikKKyAgIGZv ciBfLGYgaW4gaXBhaXJzKGZpbGVzKSBkbworLSAgICBmID0gc3RyaW5nLmdzdWIoZiwgJ1tcJ1wi XScsICIiKQorLSAgICBvcy5yZW1vdmUoZikKKysgICAgbG9jYWwgY2xlYW5lZCA9IHN0cmluZy5n c3ViKGYsICdbXCdcIl0nLCAiIikKKysgICAgb3MucmVtb3ZlKGNsZWFuZWQpCisgICBlbmQKKyBl bmQKKyAKK2RpZmYgLS1naXQgYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xp Yl9tYW5wYWdlcy5sdWEgYi9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xpYl9t YW5wYWdlcy5sdWEKK2luZGV4IDBlNjQxMTAuLmRkNWI2YWMgMTAwNjQ0CistLS0gYS9zcmMvZXh0 ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xpYl9tYW5wYWdlcy5sdWEKKysrKyBiL3NyYy9l eHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9nZXRfbGliX21hbnBhZ2VzLmx1YQorQEAgLTYzLDgg KzYzLDggQEAgbG9jYWwgb3V0cHV0ID0gaW8ucG9wZW4oImNkICIuLmR0LmNvbmZpZ3VyYXRpb24u Y29uZmlnX2Rpci4uIi9sdWEvbGliIDtmaW5kIC4gLW4KKyAtLSBsb29wIHRocm91Z2ggdGhlIGxp YnJhcmllcworIAorIGZvciBsaW5lIGluIG91dHB1dDpsaW5lcygpIGRvCistICBsaW5lID0gc3Ry aW5nLmdzdWIobGluZSwgIi8iLCAiLiIpCistICBsb2NhbCBsaWJfbmFtZSA9IGxpbmU6c3ViKDMs LTUpCisrICBsb2NhbCBjbGVhbmVkX2xpbmUgPSBzdHJpbmcuZ3N1YihsaW5lLCAiLyIsICIuIikK KysgIGxvY2FsIGxpYl9uYW1lID0gY2xlYW5lZF9saW5lOnN1YigzLC01KQorICAgaWYgbGliX25h bWU6bGVuKCkgPiAyIHRoZW4KKyAgICAgbGliX25hbWUgPSAibGliLyIgLi4gbGliX25hbWUKKyAg ICAgbG9jYWwgbGliID0gcmVxdWlyZShsaWJfbmFtZSkKK2RpZmYgLS1naXQgYS9zcmMvZXh0ZXJu YWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xpYmRvYy5sdWEgYi9zcmMvZXh0ZXJuYWwvbHVhLXNj cmlwdHMvdG9vbHMvZ2V0X2xpYmRvYy5sdWEKK2luZGV4IDJjNDQ1OGQuLmZmYmMzNzkgMTAwNjQ0 CistLS0gYS9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvZ2V0X2xpYmRvYy5sdWEKKysr KyBiL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9nZXRfbGliZG9jLmx1YQorQEAgLTQw LDggKzQwLDggQEAgbG9jYWwgb3V0cHV0ID0gaW8ucG9wZW4oImNkICIuLmR0LmNvbmZpZ3VyYXRp b24uY29uZmlnX2Rpci4uIi9sdWEvbGliIDtmaW5kIC4gLW4KKyAtLSBsb29wIHRocm91Z2ggdGhl IGxpYnJhcmllcworIAorIGZvciBsaW5lIGluIG91dHB1dDpsaW5lcygpIGRvCistICBsaW5lID0g c3RyaW5nLmdzdWIobGluZSwgIi8iLCAiLiIpCistICBsb2NhbCBsaWJfbmFtZSA9IGxpbmU6c3Vi KDMsLTUpCisrICBsb2NhbCBjbGVhbmVkX2xpbmUgPSBzdHJpbmcuZ3N1YihsaW5lLCAiLyIsICIu IikKKysgIGxvY2FsIGxpYl9uYW1lID0gY2xlYW5lZF9saW5lOnN1YigzLC01KQorICAgaWYgbGli X25hbWU6bGVuKCkgPiAyIHRoZW4KKyAgICAgbGliX25hbWUgPSAibGliLyIgLi4gbGliX25hbWUK KyAgICAgbG9jYWwgbGliID0gcmVxdWlyZShsaWJfbmFtZSkKK2RpZmYgLS1naXQgYS9zcmMvZXh0 ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMvc2NyaXB0X21hbmFnZXIubHVhIGIvc3JjL2V4dGVybmFs L2x1YS1zY3JpcHRzL3Rvb2xzL3NjcmlwdF9tYW5hZ2VyLmx1YQoraW5kZXggMDM4YTY3OS4uNmQ1 YjllMSAxMDA2NDQKKy0tLSBhL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9zY3JpcHRf bWFuYWdlci5sdWEKKysrKyBiL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9zY3JpcHRf bWFuYWdlci5sdWEKK0BAIC05NTYsNyArOTU2LDkgQEAgbG9jYWwgZnVuY3Rpb24gaW5zdGFsbF9z Y3JpcHRzKCkKKyAgICAgICAgICAgc20ud2lkZ2V0cy5mb2xkZXJfc2VsZWN0b3Iuc2VsZWN0ZWQg PSBpCisgICAgICAgICAgIGJyZWFrCisgICAgICAgICBlbmQKKy0gICAgICAgIGkgPSBpICsgMQor KyAgICAgICAgLS0gTHVhIDUuNTogZm9yIGxvb3AgY29udHJvbCB2YXJpYWJsZXMgYXJlIHJlYWQt b25seS4gVGhpcyBpbmNyZW1lbnQKKysgICAgICAgIC0tIHdhcyBhbHdheXMgYSBuby1vcCBzaW5j ZSBudW1lcmljIGZvciBsb29wcyB1c2UgYW4gaW50ZXJuYWwgY291bnRlci4KKysgICAgICAgIC0t IGkgPSBpICsgMQorICAgICAgIGVuZAorIAorICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiY2xl YXJpbmcgdGV4dCBmaWVsZHMiKQoKZGlmZiAtLWdpdCBhL2Rhcmt0YWJsZS01LjYuMS1sdWEtNS41 LnBhdGNoIGIvZGFya3RhYmxlLTUuNi4xLWx1YS01LjUucGF0Y2gKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uODE1ODNkZAotLS0gL2Rldi9udWxsCisrKyBiL2Rhcmt0YWJsZS01 LjYuMS1sdWEtNS41LnBhdGNoCkBAIC0wLDAgKzEsMjUgQEAKK2RpZmYgLS1naXQgYS9jbWFrZS9t b2R1bGVzL0ZpbmRMdWE1NC5jbWFrZSBiL2NtYWtlL21vZHVsZXMvRmluZEx1YTU0LmNtYWtlCitp bmRleCBmNDMxNzdkLi5kZmI3NTZiIDEwMDY0NAorLS0tIGEvY21ha2UvbW9kdWxlcy9GaW5kTHVh NTQuY21ha2UKKysrKyBiL2NtYWtlL21vZHVsZXMvRmluZEx1YTU0LmNtYWtlCitAQCAtMSw5ICsx LDkgQEAKKy1TRVQoTHVhX1ZFUlNJT05fVE9PX0hJR0ggNS41KQorK1NFVChMdWFfVkVSU0lPTl9U T09fSElHSCA1LjYpCisgCisgaW5jbHVkZShQcmVidWlsdCkKKyBpbmNsdWRlKExpYkZpbmRNYWNy b3MpCisgCistbGliZmluZF9wa2dfc2VhcmNoX21vZHVsZShMdWE1NCBsdWE1NCBsdWE1LjQgbHVh LTUuNCBsdWEpCisrbGliZmluZF9wa2dfc2VhcmNoX21vZHVsZShMdWE1NCBsdWE1NSBsdWE1LjUg bHVhLTUuNSBsdWE1NCBsdWE1LjQgbHVhLTUuNCBsdWEpCisgCisgaWYoTHVhNTRfRklORF9WRVJT SU9OKQorICAgY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMTAuMCkKK0BAIC0zNiw3 ICszNiw3IEBAIGlmKEx1YTU0X0ZJTkRfVkVSU0lPTikKKyBlbmRpZihMdWE1NF9GSU5EX1ZFUlNJ T04pCisgCisgaWYoTHVhNTRfRk9VTkQpCistICBzZXQoTHVhNTQgT04gQ0FDSEUgQk9PTCAiQnVp bGQgd2l0aCBsdWE1LjQgc3VwcG9ydC4iKQorKyAgc2V0KEx1YTU0IE9OIENBQ0hFIEJPT0wgIkJ1 aWxkIHdpdGggbHVhNS40IG9yIGx1YTUuNSBzdXBwb3J0LiIpCisgICBpZihBUFBMRSkKKyAgICAg Zm9yZWFjaChpICR7THVhNTRfTElCUkFSSUVTfSkKKyAgICAgICBmaW5kX2xpYnJhcnkoX2x1YTU0 X0xJQlJBUlkgTkFNRVMgJHtpfSBISU5UUyAke0x1YTU0X0xJQlJBUllfRElSU30pCgpkaWZmIC0t Z2l0IGEvZGFya3RhYmxlLnNwZWMgYi9kYXJrdGFibGUuc3BlYwppbmRleCA3OGI0NmFlLi4xYzMx NTlmIDEwMDY0NAotLS0gYS9kYXJrdGFibGUuc3BlYworKysgYi9kYXJrdGFibGUuc3BlYwpAQCAt MTgsOCArMTgsMTIgQEAgU291cmNlMDogaHR0cHM6Ly9naXRodWIuY29tL2Rhcmt0YWJsZS1vcmcv ZGFya3RhYmxlL3JlbGVhc2VzL2Rvd25sb2FkL3JlbGVhc2UtJXsKICNTb3VyY2UxOiBodHRwczov L2dpdGh1Yi5jb20vZGFya3RhYmxlLW9yZy9kYXJrdGFibGUvcmVsZWFzZXMvZG93bmxvYWQvcmVs ZWFzZS0lJXt2ZXJzaW9ufS8lJXtuYW1lfS0lJXt2ZXJzaW9ufS50YXIueHouYXNjCiAjU291cmNl MjogaHR0cHM6Ly9rZXlzZXJ2ZXIudWJ1bnR1LmNvbS9wa3MvbG9va3VwP29wPWdldCZzZWFyY2g9 MHhmMTBmOTY4NjY1MmIwZTk0OWZjZDk0YzMxOGRjYTEyM2Y5NDliZDNiCiAKKworIyBMdWEgNS41 IGJ1aWxkIHN1cHBvcnQKK1BhdGNoMDogZGFya3RhYmxlLTUuNi4xLWx1YS01LjUucGF0Y2gKKwog IyBodHRwczovL2dpdGh1Yi5jb20vZGFya3RhYmxlLW9yZy9sdWEtc2NyaXB0cy9wdWxsLzY3OAot UGF0Y2gwOiBsdWEucGF0Y2gKK1BhdGNoMTogZGFya3RhYmxlLTUuNi4xLWx1YS01LjUtc2NyaXB0 cy5wYXRjaAogCiBCdWlsZFJlcXVpcmVzOiBjYWlyby1kZXZlbAogIyBjbGFuZyBpcyBvcHRpb25h bCAoT3BlbkNMIGtlcm5lbCBidWlsZCB0ZXN0KQoKZGlmZiAtLWdpdCBhL2x1YS5wYXRjaCBiL2x1 YS5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTRjZDMyMy4uMDAwMDAwMAot LS0gYS9sdWEucGF0Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwzMDY5ICswLDAgQEAKLWRpZmYgLXVy TnIgZGFya3RhYmxlLTUuNi4wLW9yaWcvY21ha2UvbW9kdWxlcy9GaW5kTHVhNTUuY21ha2UgZGFy a3RhYmxlLTUuNi4wL2NtYWtlL21vZHVsZXMvRmluZEx1YTU1LmNtYWtlCi0tLS0gZGFya3RhYmxl LTUuNi4wLW9yaWcvY21ha2UvbW9kdWxlcy9GaW5kTHVhNTUuY21ha2UJMTk3MC0wMS0wMSAwMTow MDowMC4wMDAwMDAwMDAgKzAxMDAKLSsrKyBkYXJrdGFibGUtNS42LjAvY21ha2UvbW9kdWxlcy9G aW5kTHVhNTUuY21ha2UJMjAyNi0wOS0wMSAwOTozOTo1NC45OTExMzQ0NzggKzAyMDAKLUBAIC0w LDAgKzEsNDkgQEAKLStTRVQoTHVhX1ZFUlNJT05fVE9PX0hJR0ggNS42KQotKwotK2luY2x1ZGUo UHJlYnVpbHQpCi0raW5jbHVkZShMaWJGaW5kTWFjcm9zKQotKwotK2xpYmZpbmRfcGtnX3NlYXJj aF9tb2R1bGUoTHVhNTUgbHVhNTUgbHVhNS41IGx1YS01LjUgbHVhKQotKwotK2lmKEx1YTU1X0ZJ TkRfVkVSU0lPTikKLSsgIGNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjEwLjApCi0r ICBzZXQoTHVhNTVfRkFJTEVEX1ZFUlNJT05fQ0hFQ0sgdHJ1ZSkKLSsKLSsgIGlmKEx1YTU1X0ZJ TkRfVkVSU0lPTl9FWEFDVCkKLSsgICAgaWYoTHVhNTVfVkVSU0lPTiBWRVJTSU9OX0VRVUFMIEx1 YTU1X0ZJTkRfVkVSU0lPTikKLSsgICAgICBzZXQoTHVhNTVfRkFJTEVEX1ZFUlNJT05fQ0hFQ0sg ZmFsc2UpCi0rICAgIGVuZGlmKCkKLSsgIGVsc2UoKQotKyAgICBpZihMdWE1NV9WRVJTSU9OIFZF UlNJT05fRVFVQUwgICBMdWE1NV9GSU5EX1ZFUlNJT04gT1IKLSsgICAgICAgTHVhNTVfVkVSU0lP TiBWRVJTSU9OX0dSRUFURVIgTHVhNTVfRklORF9WRVJTSU9OIEFORAotKyAgICAgICBMdWE1NV9W RVJTSU9OIFZFUlNJT05fTEVTUyBMdWFfVkVSU0lPTl9UT09fSElHSCkKLSsgICAgICBzZXQoTHVh NTVfRkFJTEVEX1ZFUlNJT05fQ0hFQ0sgZmFsc2UpCi0rICAgIGVuZGlmKCkKLSsgIGVuZGlmKCkK LSsKLSsgIGlmKEx1YTU1X0ZBSUxFRF9WRVJTSU9OX0NIRUNLKQotKyAgICBpZihMdWE1NV9GSU5E X1JFUVVJUkVEIEFORCBOT1QgTHVhNTVfRklORF9RVUlFVExZKQotKyAgICAgICAgaWYoTHVhNTVf RklORF9WRVJTSU9OX0VYQUNUKQotKyAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkx1 YTUuNSB2ZXJzaW9uIGNoZWNrIGZhaWxlZC4gIFZlcnNpb24gJHtMdWE1NV9WRVJTSU9OfSB3YXMg Zm91bmQsIHZlcnNpb24gJHtMdWE1NV9GSU5EX1ZFUlNJT059IGlzIG5lZWRlZCBleGFjdGx5LiIp Ci0rICAgICAgICBlbHNlKEx1YTU1X0ZJTkRfVkVSU0lPTl9FWEFDVCkKLSsgICAgICAgICAgICBt ZXNzYWdlKEZBVEFMX0VSUk9SICJMdWE1LjUgdmVyc2lvbiBjaGVjayBmYWlsZWQuICBWZXJzaW9u ICR7THVhNTVfVkVSU0lPTn0gd2FzIGZvdW5kLCBhdCBsZWFzdCB2ZXJzaW9uICR7THVhNTVfRklO RF9WRVJTSU9OfSBpcyByZXF1aXJlZCIpCi0rICAgICAgICBlbmRpZihMdWE1NV9GSU5EX1ZFUlNJ T05fRVhBQ1QpCi0rICAgIGVuZGlmKEx1YTU1X0ZJTkRfUkVRVUlSRUQgQU5EIE5PVCBMdWE1NV9G SU5EX1FVSUVUTFkpCi0rCi0rICAgIHNldChMdWE1NV9GT1VORCBmYWxzZSkKLSsgIGVuZGlmKEx1 YTU1X0ZBSUxFRF9WRVJTSU9OX0NIRUNLKQotKwotK2VuZGlmKEx1YTU1X0ZJTkRfVkVSU0lPTikK LSsKLStpZihMdWE1NV9GT1VORCkKLSsgIHNldChMdWE1NSBPTiBDQUNIRSBCT09MICJCdWlsZCB3 aXRoIGx1YTUuNSBzdXBwb3J0LiIpCi0rICBpZihBUFBMRSkKLSsgICAgZm9yZWFjaChpICR7THVh NTVfTElCUkFSSUVTfSkKLSsgICAgICBmaW5kX2xpYnJhcnkoX2x1YTU1X0xJQlJBUlkgTkFNRVMg JHtpfSBISU5UUyAke0x1YTU1X0xJQlJBUllfRElSU30pCi0rICAgICAgbGlzdChBUFBFTkQgTHVh NTVfTElCUkFSSUVTX0ZVTEwgJHtfbHVhNTVfTElCUkFSWX0pCi0rICAgICAgdW5zZXQoX2x1YTU1 X0xJQlJBUlkgQ0FDSEUpCi0rICAgIGVuZGZvcmVhY2goaSkKLSsgICAgc2V0KEx1YTU1X0xJQlJB UklFUyAke0x1YTU1X0xJQlJBUklFU19GVUxMfSkKLSsgICAgdW5zZXQoTHVhNTVfTElCUkFSSUVT X0ZVTEwgQ0FDSEUpCi0rICBlbmRpZigpCi0rZW5kaWYoTHVhNTVfRk9VTkQpCi1kaWZmIC11ck5y IGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9DTWFrZUxpc3RzLnR4dCBkYXJrdGFibGUtNS42LjAv c3JjL0NNYWtlTGlzdHMudHh0Ci0tLS0gZGFya3RhYmxlLTUuNi4wLW9yaWcvc3JjL0NNYWtlTGlz dHMudHh0CTIwMjYtMDYtMjEgMTA6MjA6MjMuMDAwMDAwMDAwICswMjAwCi0rKysgZGFya3RhYmxl LTUuNi4wL3NyYy9DTWFrZUxpc3RzLnR4dAkyMDI2LTA5LTAxIDA5OjUwOjM5LjMzNTM4ODc1MiAr MDIwMAotQEAgLTc2MCwxNCArNzYwLDE0IEBACi0gIyBCdWlsZCBleHRlcm5hbCBkZXBzCi0gIwot IGlmKFVTRV9MVUEpCi0tICBmaW5kX3BhY2thZ2UoTHVhNTQgNS40KQotLSAgaWYoTHVhNTRfRk9V TkQpCi0rICBmaW5kX3BhY2thZ2UoTHVhNTUgNS41KQotKyAgaWYoTHVhNTVfRk9VTkQpCi0gICAg IG1lc3NhZ2UoU1RBVFVTICJMdWEgc3VwcG9ydDogRW5hYmxlZCIpCi0tICAgIGluY2x1ZGVfZGly ZWN0b3JpZXMoU1lTVEVNICR7THVhNTRfSU5DTFVERV9ESVJTfSkKLS0gICAgbGlzdChBUFBFTkQg TElCUyAke0x1YTU0X0xERkxBR1N9KQotKyAgICBpbmNsdWRlX2RpcmVjdG9yaWVzKFNZU1RFTSAk e0x1YTU1X0lOQ0xVREVfRElSU30pCi0rICAgIGxpc3QoQVBQRU5EIExJQlMgJHtMdWE1NV9MREZM QUdTfSkKLSAgIGVsc2UoKQotICAgICBpZihET05UX1VTRV9JTlRFUk5BTF9MVUEpCi0tICAgICAg bWVzc2FnZShGQVRBTF9FUlJPUiAiTHVhIHN1cHBvcnQ6IFN5c3RlbSBsaWJyYXJ5IGZvciBMdWEg NS40IG5vdCBmb3VuZCAodG8gdXNlIGRhcmt0YWJsZSdzIHZlcnNpb24gYWRkIC1ERE9OVF9VU0Vf SU5URVJOQUxfTFVBPU9mZikiKQotKyAgICAgIG1lc3NhZ2UoU1RBVFVTICJMdWEgc3VwcG9ydDog U3lzdGVtIGxpYnJhcnkgZm9yIGx1YSA1LjUgbm90IGZvdW5kICh0byB1c2UgZGFya3RhYmxlJ3Mg dmVyc2lvbiB1c2UgLURET05UX1VTRV9JTlRFUk5BTF9MVUE9T2ZmKSIpCi0gICAgIGVsc2UoRE9O VF9VU0VfSU5URVJOQUxfTFVBKQotICAgICAgIG1lc3NhZ2UoU1RBVFVTICJMdWEgc3VwcG9ydDog U3lzdGVtIGxpYnJhcnkgbm90IGZvdW5kICh1c2luZyBkYXJrdGFibGUncyB2ZXJzaW9uKSIpCi0g ICAgICAgaW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vZXh0 ZXJuYWwvbHVhL3NyYykKLUBAIC04MzAsOSArODMwLDkgQEAKLSBlbmRpZihVU0VfTFVBKQotIAot IGlmKFVTRV9MVUEpCi0tICBpZihOT1QgTHVhNTRfRk9VTkQpCi0rICBpZihOT1QgTHVhNTVfRk9V TkQpCi0gICAgIGxpc3QoQVBQRU5EIExJQl9ERVBTIGx1YSkgIyAybmQgaGFsZiBvZiB0aGUgdWds aW5lc3MgOi8KLS0gIGVuZGlmKE5PVCBMdWE1NF9GT1VORCkKLSsgIGVuZGlmKE5PVCBMdWE1NV9G T1VORCkKLSAgICMgbGlibGF1dG9jIGZvciBsdWEgYXV0b21hdGVkIGludGVyZmFjZSBnZW5lcmF0 aW9uCi0gICBhZGRfbGlicmFyeShsYXV0b2Nfc3RhdGljIFNUQVRJQyBJTVBPUlRFRCkKLSAgIHNl dF90YXJnZXRfcHJvcGVydGllcyhsYXV0b2Nfc3RhdGljIFBST1BFUlRJRVMgSU1QT1JURURfTE9D QVRJT04gJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2V4dGVybmFsL0x1YUF1dG9DL2xpYmxh dXRvYy5hIFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREUgVHJ1ZSkKLWRpZmYgLXVyTnIgZGFya3Rh YmxlLTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZW5mdXNlQWR2 YW5jZWQubHVhIGRhcmt0YWJsZS01LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJp Yi9lbmZ1c2VBZHZhbmNlZC5sdWEKLS0tLSBkYXJrdGFibGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJu YWwvbHVhLXNjcmlwdHMvY29udHJpYi9lbmZ1c2VBZHZhbmNlZC5sdWEJMjAyNi0wNi0xMiAwNTow NjozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBkYXJrdGFibGUtNS42LjAvc3JjL2V4dGVybmFsL2x1 YS1zY3JpcHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQubHVhCTIwMjYtMDktMDEgMDk6NDI6MDQu MzcwOTI4OTE4ICswMjAwCi1AQCAtNTI3LDkgKzUyNyw5IEBACi0gICAgICAgICAgICAgbG9jYWwg c2V0X3RhZyA9IEdVSS5UYXJnZXQuYWRkX3RhZ3MudGV4dAotICAgICAgICAgICAgIGlmIHNldF90 YWcgfj0gbmlsIHRoZW4gLS1hZGQgYWRkaXRpb25hbCB1c2VyLXNwZWNpZmllZCB0YWdzCi0gICAg ICAgICAgICAgICAgIGZvciB0YWcgaW4gc3RyaW5nLmdtYXRjaChzZXRfdGFnLCAnW14sXSsnKSBk bwotLSAgICAgICAgICAgICAgICAgICAgdGFnID0gQ2xlYW5TcGFjZXModGFnKQotLSAgICAgICAg ICAgICAgICAgICAgdGFnID0gZHQudGFncy5jcmVhdGUodGFnKQotLSAgICAgICAgICAgICAgICAg ICAgZHQudGFncy5hdHRhY2godGFnLCBpbXBvcnRlZCkgCi0rICAgICAgICAgICAgICAgICAgICBs b2NhbCBjbGVhbmVkX3RhZyA9IENsZWFuU3BhY2VzKHRhZykKLSsgICAgICAgICAgICAgICAgICAg IGNsZWFuZWRfdGFnID0gZHQudGFncy5jcmVhdGUoY2xlYW5lZF90YWcpCi0rICAgICAgICAgICAg ICAgICAgICBkdC50YWdzLmF0dGFjaChjbGVhbmVkX3RhZywgaW1wb3J0ZWQpIAotICAgICAgICAg ICAgICAgICBlbmQKLSAgICAgICAgICAgICBlbmQKLSAgICAgICAgIGVuZAotZGlmZiAtdXJOciBk YXJrdGFibGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9lbmZ1 c2VBZHZhbmNlZC5sdWEub3JpZyBkYXJrdGFibGUtNS42LjAvc3JjL2V4dGVybmFsL2x1YS1zY3Jp cHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQubHVhLm9yaWcKLS0tLSBkYXJrdGFibGUtNS42LjAt b3JpZy9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9lbmZ1c2VBZHZhbmNlZC5sdWEu b3JpZwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAotKysrIGRhcmt0YWJsZS01 LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9lbmZ1c2VBZHZhbmNlZC5sdWEu b3JpZwkyMDI2LTA2LTEyIDA1OjA2OjM4LjAwMDAwMDAwMCArMDIwMAotQEAgLTAsMCArMSwxMTc1 IEBACi0rLS1bW0VuZnVzZSBBZHZhbmNlZCBwbHVnaW4gZm9yIGRhcmt0YWJsZSAyLjIuWCBhbmQg Mi40LlgKLSsKLSsgIGNvcHlyaWdodCAoYykgMjAxNywgMjAxOCAgSG9sZ2VyIEtsZW1tIChPcmln aW5hbCBMaW51eC1vbmx5IHZlcnNpb24pCi0rICBNb2RpZmllZCBieTogS2V2aW4gRXJ0ZWwKLSsg IAotKyAgZGFya3RhYmxlIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKLSsgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0rICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgotKyAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSsgIAotKyAgZGFya3RhYmxlIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0rICBidXQgV0lUSE9VVCBB TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKyAgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQotKyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSsgIAot KyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UKLSsgIGFsb25nIHdpdGggZGFya3RhYmxlLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgotK11dCi0rCi0rLS1bW0Fib3V0IHRoaXMgcGx1Z2lu Ci0rVGhpcyBwbHVnaW4gd2lsbCBhZGQgdGhlIG5ldyBleHBvcnQgbW9kdWxlICdmdXNpb24gdG8g RFJJIG9yIERGRiBpbWFnZScuCi0rICAgCi0rLS0tLVJFUVVJUkVEIFNPRlRXQVJFLS0tLQotK2Fs aWduX2ltYWdlX3N0YWNrCi0rZW5mdXNlIHZlci4gNC4yIG9yIGdyZWF0ZXIKLStleGlmdG9vbAot KwotKy0tLS1VU0FHRS0tLS0KLStJbnN0YWxsOgotKyAxKSBHZXQgdGhlIEx1YSBzY3JpcHRzOiBo dHRwczovL2dpdGh1Yi5jb20vZGFya3RhYmxlLW9yZy9sdWEtc2NyaXB0cyNkb3dubG9hZC1hbmQt aW5zdGFsbAotKyAyKSBSZXF1aXJlIHRoaXMgZmlsZSBpbiB5b3VyIGx1YXJjIGZpbGUsIGFzIHdp dGggYW55IG90aGVyIGR0IHBsdWctaW46IHJlcXVpcmUgImNvbnRyaWIvZW5mdXNlQWR2YW5jZWQi Ci0rIDMpIFRoZW4gc2VsZWN0ICJEUkkgb3IgREZGIGltYWdlIiBhcyBzdG9yYWdlIG9wdGlvbgot KyA0KSBPbiB0aGUgaW5pdGlhbCBzdGFydHVwIHNldCB5b3VyIGV4ZWN1dGFibGUgcGF0aHMgCi0r Ci0rRFJJID0gRHluYW1pYyBSYW5nZSBJbmNyZWFzZSAoQmxlbmQgbXVsdGlwbGUgYnJhY2tldCBp bWFnZXMgaW50byBhIHNpbmdsZSBMRFIgZmlsZSkKLStERkYgPSBEZXB0aCBGcm9tIEZvY3VzICgn Rm9jdXMgU3RhY2tpbmcnIC0gQmxlbmQgbXVsdGlwbGUgaW1hZ2VzIHdpdGggZGlmZmVyZW50IGZv Y3VzIGludG8gYSBzaW5nbGUgaW1hZ2UpCi0rU2VsZWN0IG11bHRpcGxlIGltYWdlcyB0aGF0IGFy ZSBlaXRoZXIgYnJhY2tldGVkLCBvciBmb2N1cy1zaGlmdGVkLCBzZXQgeW91ciBkZXNpcmVkIG9w ZXJhdGluZyBwYXJhbWV0ZXJzLCBhbmQgcHJlc3MgdGhlIGV4cG9ydCBidXR0b24uIEEgbmV3IGlt YWdlIHdpbGwgYmUgY3JlYXRlZC4gVGhlIGltYWdlIHdpbGwKLStiZSBhdXRvIGltcG9ydGVkIGlu dG8gZGFya3RhYmxlIGlmIHlvdSBoYXZlIHRoYXQgb3B0aW9uIGVuYWJsZWQuIEFkZGl0aW9uYWwg dGFncyBvciBzdHlsZSBjYW4gYmUgYXBwbGllZCBvbiBhdXRvIGltcG9ydCBhcyB3ZWxsLCBpZiB5 b3UgZGVzaXJlLgotKwotK2ltYWdlIGFsaWduIG9wdGlvbnM6Ci0rU2VlIGFsaWduX2ltYWdlX3N0 YWNrIGRvY3VtZW50YXRpb24gZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb24gb2YgaG93IGl0IHNwZWNp ZmljYWxseSB3b3JrcyBhbmQgdGhlIG9wdGlvbnMgcHJvdmlkZWQgKGh0dHA6Ly9odWdpbi5zb3Vy Y2Vmb3JnZS5uZXQvZG9jcy9tYW51YWwvQWxpZ25faW1hZ2Vfc3RhY2suaHRtbCkKLSsKLStpbWFn ZSBmdXN0aW9uIG9wdGlvbnM6Ci0rU2VlIGVuZnVzZSBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVy IGV4cGxhbmF0aW9uIG9mIGhvdyBpdCBzcGVjaWZpY2FsbHkgd29ya3MgYW5kIHRoZSBvcHRpb25z IHByb3ZpZGVkIChodHRwczovL3dpa2kucGFub3Rvb2xzLm9yZy9FbmZ1c2UpCi0rSWYgeW91IGhh dmUgYSBzcGVjaWZpYyBzZXQgb2YgcGFyYW1ldGVycyB5b3UgZnJlcXVlbnRseSBsaWtlIHRvIHVz ZSwgeW91IGNhbiBzYXZlIHRoZW0gdG8gYSBwcmVzZXQuIFRoZXJlIGFyZSAzIHByZXNldHMgYXZh aWxhYmxlIGZvciBEUkksIGFuZCAzIGZvciBERkYuCi0rCi0rdGFyZ2V0IGZpbGU6Ci0rU2VsZWN0 IHlvdXIgZmlsZSBkZXN0aW5hdGlvbiBwYXRoLCBvciBjaGVjayB0aGUgJ3NhdmUgdG8gc291cmNl IGltYWdlIGxvY2F0aW9uJyBvcHRpb24uCi0rJ0NyZWF0ZSBVbmlxdWUgRmlsZW5hbWUnIGlzIGVu YWJsZWQgYnkgZGVmYXVsdCBhdCBzdGFydHVwLCB0aGUgdXNlciBjYW4gY2hvb3NlIHRvIG92ZXJ3 cml0ZSBleGlzdGluZwotK1NldCBhbnkgdGFncyBvciBzdHlsZSB5b3UgZGVzaXJlIHRvIGJlIGFk ZGVkIHRvIHRoZSBuZXcgaW1hZ2UgKG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBhdXRvLWltcG9ydCBv cHRpb24gaXMgZW5hYmxlZCkuIFlvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIGRlZmF1bHRzIGZvciB0 aGlzIHVuZGVyIHNldHRpbmdzID4gbHVhIG9wdGlvbnMKLSsKLStmb3JtYXQgb3B0aW9uczoKLStT YW1lIGFzIG90aGVyIGV4cG9ydCBtb2R1bGVzCi0rCi0rZ2xvYmFsIG9wdGlvbnM6Ci0rU2FtZSBh cyBvdGhlciBleHBvcnQgbW9kdWxlcwotKwotK11dCi0rCi0rbG9jYWwgZHQgPSByZXF1aXJlICdk YXJrdGFibGUnCi0rbG9jYWwgZGYgPSByZXF1aXJlICdsaWIvZHR1dGlscy5maWxlJwotK2xvY2Fs IGRzeXMgPSByZXF1aXJlICdsaWIvZHR1dGlscy5zeXN0ZW0nCi0rbG9jYWwgZHUgPSByZXF1aXJl ICdsaWIvZHR1dGlscycKLStsb2NhbCBtb2QgPSAnbW9kdWxlX2VuZnVzZUFkdmFuY2VkJwotK2xv Y2FsIG9zX3BhdGhfc2VwZXJhdG9yID0gJy8nCi0raWYgZHQuY29uZmlndXJhdGlvbi5ydW5uaW5n X29zID09ICd3aW5kb3dzJyB0aGVuIG9zX3BhdGhfc2VwZXJhdG9yID0gJ1xcJyBlbmQKLSsKLStk dS5jaGVja19taW5fYXBpX3ZlcnNpb24oIjcuMC4wIiwgImVuZnVzZUFkdmFuY2VkIikgCi0rCi0r LS0gVGVsbCBnZXR0ZXh0IHdoZXJlIHRvIGZpbmQgdGhlIC5tbyBmaWxlIHRyYW5zbGF0aW5nIG1l c3NhZ2VzIGZvciBhIHBhcnRpY3VsYXIgZG9tYWluCi0rbG9jYWwgZ2V0dGV4dCA9IGR0LmdldHRl eHQuZ2V0dGV4dAotKwotK2xvY2FsIGZ1bmN0aW9uIF8obXNnaWQpCi0rICAgIHJldHVybiBnZXR0 ZXh0KG1zZ2lkKQotK2VuZAotKwotKy0tIHJldHVybiBkYXRhIHN0cnVjdHVyZSBmb3Igc2NyaXB0 X21hbmFnZXIKLSsKLStsb2NhbCBzY3JpcHRfZGF0YSA9IHt9Ci0rCi0rc2NyaXB0X2RhdGEubWV0 YWRhdGEgPSB7Ci0rICBuYW1lID0gXygiZW5mdXNlIGFkdmFuY2VkIiksCi0rICBwdXJwb3NlID0g XygiZm9jdXMgc3RhY2sgb3IgZXhwb3N1cmUgYmxlbmQgaW1hZ2VzIiksCi0rICBhdXRob3IgPSAi S2V2aW4gRXJ0ZWwiLAotKyAgaGVscCA9ICJodHRwczovL2RvY3MuZGFya3RhYmxlLm9yZy9sdWEv c3RhYmxlL2x1YS5zY3JpcHRzLm1hbnVhbC9zY3JpcHRzL2NvbnRyaWIvZW5mdXNlQWR2YW5jZWQi Ci0rfQotKwotK3NjcmlwdF9kYXRhLmRlc3Ryb3kgPSBuaWwgLS0gZnVuY3Rpb24gdG8gZGVzdG9y eSB0aGUgc2NyaXB0Ci0rc2NyaXB0X2RhdGEuZGVzdHJveV9tZXRob2QgPSBuaWwgLS0gc2V0IHRv IGhpZGUgZm9yIGxpYnMgc2luY2Ugd2UgY2FuJ3QgZGVzdHJveSB0aGVtIGNvbW1wbGV0ZWx5IHll dCwgb3RoZXJ3aXNlIGxlYXZlIGFzIG5pbAotK3NjcmlwdF9kYXRhLnJlc3RhcnQgPSBuaWwgLS0g aG93IHRvIHJlc3RhcnQgdGhlIChsaWIpIHNjcmlwdCBhZnRlciBpdCdzIGJlZW4gaGlkZGVuIC0g aS5lLiBtYWtlIGl0IHZpc2libGUgYWdhaW4KLStzY3JpcHRfZGF0YS5zaG93ID0gbmlsIC0tIG9u bHkgcmVxdWlyZWQgZm9yIGxpYnMgc2luY2UgdGhlIGRlc3Ryb3lfbWV0aG9kIG9ubHkgaGlkZXMg dGhlbQotKwotKy0tIElOSVRTIC0tCi0rbG9jYWwgQUlTID0gewotKyAgICBuYW1lID0gJ2FsaWdu X2ltYWdlX3N0YWNrJywKLSsgICAgYmluID0gJycsCi0rICAgIGZpcnN0X3J1biA9IHRydWUsCi0r ICAgIGluc3RhbGxfZXJyb3IgPSBmYWxzZSwKLSsgICAgYXJnX3N0cmluZyA9ICcnLAotKyAgICBp bWFnZXNfc3RyaW5nID0gJycsCi0rICAgIGFyZ3MgPSB7Ci0rICAgICAgICByYWRpYWxfZGlzdG9y dGlvbiAgICAgICA9IHt0ZXh0ID0gJy1kJywgICAgICAgICAgICAgc3R5bGUgPSAnYm9vbCd9LAot KyAgICAgICAgb3B0aW1pemVfZmllbGQgICAgICAgICAgPSB7dGV4dCA9ICctbScsICAgICAgICAg ICAgIHN0eWxlID0gJ2Jvb2wnfSwKLSsgICAgICAgIG9wdGltaXplX2ltYWdlX2NlbnRlciAgID0g e3RleHQgPSAnLWknLCAgICAgICAgICAgICBzdHlsZSA9ICdib29sJ30sCi0rICAgICAgICBhdXRv X2Nyb3AgICAgICAgICAgICAgICA9IHt0ZXh0ID0gJy1DJywgICAgICAgICAgICAgc3R5bGUgPSAn Ym9vbCd9LAotKyAgICAgICAgZGlzdG9ydGlvbiAgICAgICAgICAgICAgPSB7dGV4dCA9ICctLWRp c3RvcnRpb24nLCAgIHN0eWxlID0gJ2Jvb2wnfSwKLSsgICAgICAgIGdwdSAgICAgICAgICAgICAg ICAgICAgID0ge3RleHQgPSAnLS1ncHUnLCAgICAgICAgICBzdHlsZSA9ICdib29sJ30sCi0rICAg ICAgICBncmlkX3NpemUgICAgICAgICAgICAgICA9IHt0ZXh0ID0gJy1nICcsICAgICAgICAgICAg c3R5bGUgPSAnaW50ZWdlcid9LAotKyAgICAgICAgY29udHJvbF9wb2ludHMgICAgICAgICAgPSB7 dGV4dCA9ICctYyAnLCAgICAgICAgICAgIHN0eWxlID0gJ2ludGVnZXInfSwKLSsgICAgICAgIGNv bnRyb2xfcG9pbnRzX3JlbW92ZSAgID0ge3RleHQgPSAnLXQgJywgICAgICAgICAgICBzdHlsZSA9 ICdpbnRlZ2VyJ30sCi0rICAgICAgICBjb3JyZWxhdGlvbiAgICAgICAgICAgICA9IHt0ZXh0ID0g Jy0tY29ycj0nLCAgICAgICAgc3R5bGUgPSAnZmxvYXQnfQotKyAgICB9Ci0rfQotK2xvY2FsIEVO RiA9IHsKLSsgICAgbmFtZSA9ICdlbmZ1c2UnLAotKyAgICBiaW4gPSAnJywKLSsgICAgZmlyc3Rf cnVuID0gdHJ1ZSwKLSsgICAgaW5zdGFsbF9lcnJvciA9IGZhbHNlLAotKyAgICBhcmdfc3RyaW5n ID0gJycsCi0rICAgIGltYWdlX3N0cmluZyA9ICcnLAotKyAgICBhcmdzID0gewotKyAgICAgICAg ZXhwb3N1cmVfd2VpZ2h0ICAgICAgICAgPSB7dGV4dCA9ICctLWV4cG9zdXJlLXdlaWdodD0nLCAg ICAgICAgIHN0eWxlID0gJ2Zsb2F0J30sCi0rICAgICAgICBzYXR1cmF0aW9uX3dlaWdodCAgICAg ICA9IHt0ZXh0ID0gJy0tc2F0dXJhdGlvbi13ZWlnaHQ9JywgICAgICAgc3R5bGUgPSAnZmxvYXQn fSwKLSsgICAgICAgIGNvbnRyYXN0X3dlaWdodCAgICAgICAgID0ge3RleHQgPSAnLS1jb250cmFz dC13ZWlnaHQ9JywgICAgICAgICBzdHlsZSA9ICdmbG9hdCd9LAotKyAgICAgICAgZXhwb3N1cmVf b3B0aW11bSAgICAgICAgPSB7dGV4dCA9ICctLWV4cG9zdXJlLW9wdGltdW09JywgICAgICAgIHN0 eWxlID0gJ2Zsb2F0J30sCi0rICAgICAgICBleHBvc3VyZV93aWR0aCAgICAgICAgICA9IHt0ZXh0 ID0gJy0tZXhwb3N1cmUtd2lkdGg9JywgICAgICAgICAgc3R5bGUgPSAnZmxvYXQnfSwKLSsgICAg ICAgIGhhcmRfbWFza3MgICAgICAgICAgICAgID0ge3RleHQgPSAnLS1oYXJkLW1hc2snLCAgICAg ICAgICAgICAgICBzdHlsZSA9ICdib29sJ30sCi0rICAgICAgICBzYXZlX21hc2tzICAgICAgICAg ICAgICA9IHt0ZXh0ID0gJy0tc2F2ZS1tYXNrcycsICAgICAgICAgICAgICAgc3R5bGUgPSAnYm9v bCd9LAotKyAgICAgICAgY29udHJhc3Rfd2luZG93X3NpemUgICAgPSB7dGV4dCA9ICctLWNvbnRy YXN0LXdpbmRvdy1zaXplPScsICAgIHN0eWxlID0gJ2ludGVnZXInfSwKLSsgICAgICAgIGNvbnRy YXN0X2VkZ2Vfc2NhbGUgICAgID0ge3RleHQgPSAnLS1jb250cmFzdC1lZGdlLXNjYWxlPScsICAg ICBzdHlsZSA9ICdmbG9hdCd9LAotKyAgICAgICAgY29udHJhc3RfbWluX2N1cnZhdHVyZSAgPSB7 dGV4dCA9ICctLWNvbnRyYXN0LW1pbi1jdXJ2YXR1cmU9Jywgc3R5bGUgPSAnc3RyaW5nJ30KLSsg ICAgfQotK30KLStsb2NhbCBFWEYgPSB7Ci0rICAgIG5hbWUgPSAnZXhpZnRvb2wnLAotKyAgICBi aW4gPSAnJywKLSsgICAgZmlyc3RfcnVuID0gdHJ1ZSwKLSsgICAgaW5zdGFsbF9lcnJvciA9IGZh bHNlCi0rfQotK2xvY2FsIEdVSSA9IHsKLSsgICAgQUlTID0gewotKyAgICAgICAgcmFkaWFsX2Rp c3RvcnRpb24gICAgICAgPSB7fSwKLSsgICAgICAgIG9wdGltaXplX2ZpZWxkICAgICAgICAgID0g e30sCi0rICAgICAgICBvcHRpbWl6ZV9pbWFnZV9jZW50ZXIgICA9IHt9LAotKyAgICAgICAgYXV0 b19jcm9wICAgICAgICAgICAgICAgPSB7fSwKLSsgICAgICAgIGRpc3RvcnRpb24gICAgICAgICAg ICAgID0ge30sCi0rICAgICAgICBncmlkX3NpemUgICAgICAgICAgICAgICA9IHt9LAotKyAgICAg ICAgY29udHJvbF9wb2ludHMgICAgICAgICAgPSB7fSwKLSsgICAgICAgIGNvbnRyb2xfcG9pbnRz X3JlbW92ZSAgID0ge30sCi0rICAgICAgICBjb3JyZWxhdGlvbiAgICAgICAgICAgICA9IHt9fSwK LSsgICAgRU5GID0gewotKyAgICAgICAgZXhwb3N1cmVfd2VpZ2h0ICAgICAgICAgPSB7fSwKLSsg ICAgICAgIHNhdHVyYXRpb25fd2VpZ2h0ICAgICAgID0ge30sCi0rICAgICAgICBjb250cmFzdF93 ZWlnaHQgICAgICAgICA9IHt9LAotKyAgICAgICAgZXhwb3N1cmVfb3B0aW11bSAgICAgICAgPSB7 fSwKLSsgICAgICAgIGV4cG9zdXJlX3dpZHRoICAgICAgICAgID0ge30sCi0rICAgICAgICBoYXJk X21hc2tzICAgICAgICAgICAgICA9IHt9LAotKyAgICAgICAgc2F2ZV9tYXNrcyAgICAgICAgICAg ICAgPSB7fSwKLSsgICAgICAgIGNvbnRyYXN0X3dpbmRvd19zaXplICAgID0ge30sCi0rICAgICAg ICBjb250cmFzdF9lZGdlX3NjYWxlICAgICA9IHt9LAotKyAgICAgICAgY29udHJhc3RfbWluX2N1 cnZhdHVyZSAgPSB7fX0sCi0rICAgIFRhcmdldCA9IHsKLSsgICAgICAgIGZvcm1hdCAgICAgICAg ICAgICAgICAgID0ge30sCi0rICAgICAgICBkZXB0aCAgICAgICAgICAgICAgICAgICA9IHt9LCAg IAotKyAgICAgICAgY29tcHJlc3Npb25fbGV2ZWxfdGlmICAgPSB7fSwKLSsgICAgICAgIGNvbXBy ZXNzaW9uX2xldmVsX2pwZyAgID0ge30sCi0rICAgICAgICBvdXRwdXRfY29tcHJlc3MgICAgICAg ICA9IHt9LAotKyAgICAgICAgb3V0cHV0X2RpcmVjdG9yeSAgICAgICAgPSB7fSwKLSsgICAgICAg IHNvdXJjZV9sb2NhdGlvbiAgICAgICAgID0ge30sCi0rICAgICAgICBvbl9jb25mbGljdCAgICAg ICAgICAgICA9IHt9LAotKyAgICAgICAgYXV0b19pbXBvcnQgICAgICAgICAgICAgPSB7fSwKLSsg ICAgICAgIGFwcGx5X3N0eWxlICAgICAgICAgICAgID0ge30sCi0rICAgICAgICBjb3B5X3RhZ3Mg ICAgICAgICAgICAgICA9IHt9LAotKyAgICAgICAgYWRkX3RhZ3MgICAgICAgICAgICAgICAgPSB7 fX0sCi0rICAgIFByZXNldHMgPSB7Ci0rICAgICAgICBjdXJyZW50X3ByZXNldCAgICAgID17fTsK LSsgICAgICAgIGxvYWQgICAgICAgICAgICAgICAgPXt9OwotKyAgICAgICAgc2F2ZSAgICAgICAg ICAgICAgICA9e307Ci0rICAgICAgICB2YXJpYW50cyAgICAgICAgICAgID17fTsKLSsgICAgICAg IHZhcmlhbnRzX3R5cGUgICAgICAgPXt9fSwKLSsgICAgZXhlcyA9IHsKLSsgICAgICAgIGFsaWdu X2ltYWdlX3N0YWNrID0ge30sCi0rICAgICAgICBlbmZ1c2UgPSB7fSwKLSsgICAgICAgIGV4aWZ0 b29sID0ge30sCi0rICAgICAgICB1cGRhdGUgPSB7fQotKyAgICB9LAotKyAgICBhbGlnbiAgICAg ICAgICAgICAgICAgICA9IHt9LAotKyAgICBvcHRpb25zX2NvbnRhaW4gICAgICAgICA9IHt9LAot KyAgICBzaG93X29wdGlvbnMgICAgICAgICAgICA9IHt9Ci0rfQotKwotK2xvY2FsIHN0eWxlcyA9 IGR0LnN0eWxlcwotK2xvY2FsIHN0eWxlc19jb3VudCA9IDEgLS0gJ25vbmUnID0gMQotK2ZvciBf LGkgaW4gcGFpcnMoZHQuc3R5bGVzKSBkbwotKyAgICBpZiB0eXBlKGkpID09ICd1c2VyZGF0YScg dGhlbiBzdHlsZXNfY291bnQgPSBzdHlsZXNfY291bnQgKyAxIGVuZAotK2VuZAotKwotKy0tIEZV TkNUSU9OIC0tCi0rCi0rbG9jYWwgZnVuY3Rpb24gc2FuaXRpemVfZGVjaW1hbHMoY21kKSAtLSBt YWtlIHN1cmUgZGVjaW1hbCBzZXBhcmF0b3IgaXMgYSAnLicKLSsgICAgcmV0dXJuIHN0cmluZy5n c3ViKGNtZCwgJyglZCksKCVkKScsICIlMS4lMiIpCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24g SW5SYW5nZSh0ZXN0LCBsb3csIGhpZ2gpIC0tIHRlc3RzIGlmIHRlc3QgdmFsdWUgaXMgd2l0aGlu IHJhbmdlIG9mIGxvdyBhbmQgaGlnaCAoaW5jbHVzaXZlKQotKyAgICBpZiB0ZXN0ID49IGxvdyBh bmQgdGVzdCA8PSBoaWdoIHRoZW4KLSsgICAgICAgIHJldHVybiB0cnVlCi0rICAgIGVsc2UKLSsg ICAgICAgIHJldHVybiBmYWxzZQotKyAgICBlbmQKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBH ZXRGaWxlTmFtZShmdWxsX3BhdGgpIC0tIFBhcnNlcyBhIGZ1bGwgcGF0aCAocGF0aC9maWxlbmFt ZV9pZGVudGlmaWVyLmV4dGVuc2lvbikgaW50byBpbmRpdmlkdWFsIHBhcnRzCi0rLS1bW0lucHV0 OiBGb2xkZXIxL0ZvbGRlcjIvRm9sZGVyMy9JbWdfMDAwMS5DUjIKLSsgICAgCi0rICAgIFJldHVy bnM6Ci0rICAgIHBhdGg6IEZvbGRlcjEvRm9sZGVyMi9Gb2xkZXIzLwotKyAgICBmaWxlbmFtZTog SW1nXzAwMDEKLSsgICAgaWRlbnRpZmllcjogMDAwMQotKyAgICBleHRlbnNpb246IC5DUjIKLSsg ICAgCi0rICAgIEVYOgotKyAgICBwYXRoXzEsIGZpbGVfMSwgaWRfMSwgZXh0XzEgPSBHZXRGaWxl TmFtZShmdWxsX3BhdGhfMSkKLSsgICAgXV0KLSsgICAgbG9jYWwgcGF0aCA9IHN0cmluZy5tYXRj aChmdWxsX3BhdGgsICcuKltcXC9dJykKLSsgICAgbG9jYWwgZmlsZW5hbWUgPSBzdHJpbmcuZ3N1 YihzdHJpbmcubWF0Y2goZnVsbF9wYXRoLCAnWyV3LV9dKiUuJykgLCAnJS4nICwgJycgKSAKLSsg ICAgbG9jYWwgaWRlbnRpZmllciA9IHN0cmluZy5tYXRjaChmaWxlbmFtZSwgJyVkKiQnKQotKyAg ICBsb2NhbCBleHRlbnNpb24gPSBzdHJpbmcubWF0Y2goZnVsbF9wYXRoLCAnJS4ldyonKQotKyAg ICByZXR1cm4gcGF0aCwgZmlsZW5hbWUsIGlkZW50aWZpZXIsIGV4dGVuc2lvbgotK2VuZAotKwot K2xvY2FsIGZ1bmN0aW9uIENsZWFuU3BhY2VzKHRleHQpIC0tcmVtb3ZlcyBzcGFjZXMgZnJvbSB0 aGUgZnJvbnQgYW5kIGJhY2sgb2YgcGFzc2VkIGluIHRleHQKLSsgICAgdGV4dCA9IHN0cmluZy5n c3ViKHRleHQsJ14lcyonLCcnKQotKyAgICB0ZXh0ID0gc3RyaW5nLmdzdWIodGV4dCwnJXMqJCcs JycpCi0rICAgIHJldHVybiB0ZXh0Ci0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gQnVpbGRFeGVj dXRlQ21kKHByb2dfdGFibGUpIC0tY3JlYXRlcyBhIHByb2dyYW0gY29tbWFuZCB1c2luZyBlbGVt ZW50cyBvZiB0aGUgcGFzc2VkIGluIHByb2dyYW0gdGFibGUKLSsgICAgbG9jYWwgcmVzdWx0ID0g Q2xlYW5TcGFjZXMocHJvZ190YWJsZS5iaW4pLi4nICcuLkNsZWFuU3BhY2VzKHByb2dfdGFibGUu YXJnX3N0cmluZykuLicgJy4uQ2xlYW5TcGFjZXMocHJvZ190YWJsZS5pbWFnZXNfc3RyaW5nKQot KyAgICByZXR1cm4gcmVzdWx0Ci0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gUHJlQ2FsbChwcm9n X3RibHMpIC0tbG9va3MgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwsIGlmIHNvIGNo ZWNrcyB0byBzZWUgaWYgcHJvZ3JhbSBpcyBpbnN0YWxsZWQgcHJvcGVybHkKLSsgICAgZm9yIF8s cHJvZyBpbiBwYWlycyhwcm9nX3RibHMpIGRvCi0rICAgICAgICBpZiBwcm9nLmZpcnN0X3J1biB0 aGVuCi0rICAgICAgICAgICAgcHJvZy5iaW4gPSBkZi5jaGVja19pZl9iaW5fZXhpc3RzKHByb2cu bmFtZSkKLSsgICAgICAgICAgICBpZiBub3QgcHJvZy5iaW4gdGhlbiAKLSsgICAgICAgICAgICAg ICAgcHJvZy5pbnN0YWxsX2Vycm9yID0gdHJ1ZQotKyAgICAgICAgICAgICAgICBkdC5wcmVmZXJl bmNlcy53cml0ZShtb2QsICdiaW5fZXhpc3RzJywgJ2Jvb2wnLCBmYWxzZSkKLSsgICAgICAgICAg ICBlbHNlCi0rICAgICAgICAgICAgICAgIHByb2cuYmluID0gQ2xlYW5TcGFjZXMocHJvZy5iaW4p Ci0rICAgICAgICAgICAgZW5kCi0rICAgICAgICAgICAgcHJvZy5maXJzdF9ydW4gPSBmYWxzZQot KyAgICAgICAgZW5kCi0rICAgIGVuZAotKyAgICBpZiBub3QgZHQucHJlZmVyZW5jZXMucmVhZCht b2QsICdiaW5fZXhpc3RzJywgJ2Jvb2wnKSB0aGVuCi0rICAgICAgICBHVUkub3B0aW9uc19jb250 YWluLmFjdGl2ZSA9IDQKLSsgICAgICAgIEdVSS5zaG93X29wdGlvbnMuc2Vuc2l0aXZlID0gZmFs c2UKLSsgICAgICAgIGR0LnByaW50KF8oJ3BsZWFzZSB1cGRhdGUgeW91ciBiaW5hcnkgbG9jYXRp b25zJykpCi0rICAgIGVuZAotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIEV4ZVVwZGF0ZShwcm9n X3RibCkgLS11cGRhdGVzIGV4ZWN1dGFibGUgcGF0aHMgYW5kIHZlcmlmaWVzIHRoZW0KLSsgICAg ZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYmluX2V4aXN0cycsICdib29sJywgdHJ1ZSkKLSsg ICAgZm9yIHgscHJvZyBpbiBwYWlycyhwcm9nX3RibCkgZG8KLSsgICAgICAgIGR0LnByZWZlcmVu Y2VzLndyaXRlKCdleGVjdXRhYmxlX3BhdGhzJywgcHJvZy5uYW1lLCAnc3RyaW5nJywgR1VJLmV4 ZXNbcHJvZy5uYW1lXS52YWx1ZSkKLSsgICAgICAgIHByb2cuYmluID0gZGYuY2hlY2tfaWZfYmlu X2V4aXN0cyhwcm9nLm5hbWUpCi0rICAgICAgICBpZiBub3QgcHJvZy5iaW4gdGhlbiAKLSsgICAg ICAgICAgICBwcm9nLmluc3RhbGxfZXJyb3IgPSB0cnVlCi0rICAgICAgICAgICAgZHQucHJlZmVy ZW5jZXMud3JpdGUobW9kLCAnYmluX2V4aXN0cycsICdib29sJywgZmFsc2UpCi0rICAgICAgICAg ICAgZHQucHJpbnQoc3RyaW5nLmZvcm1hdChfKCJpc3N1ZSB3aXRoICVzIGV4ZWN1dGFibGUiKSwg cHJvZy5uYW1lKSkKLSsgICAgICAgIGVsc2UKLSsgICAgICAgICAgICBwcm9nLmJpbiA9IENsZWFu U3BhY2VzKHByb2cuYmluKQotKyAgICAgICAgZW5kCi0rICAgICAgICBwcm9nLmZpcnN0X3J1biA9 IGZhbHNlCi0rICAgIGVuZAotKyAgICBpZiBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2Jpbl9l eGlzdHMnLCAnYm9vbCcpIHRoZW4KLSsgICAgICAgIEdVSS5vcHRpb25zX2NvbnRhaW4uYWN0aXZl ID0gMgotKyAgICAgICAgR1VJLnNob3dfb3B0aW9ucy5zZW5zaXRpdmUgPSB0cnVlCi0rICAgICAg ICBkdC5wcmludChfKCd1cGRhdGUgc3VjY2Vzc2Z1bCcpKQotKyAgICBlbHNlCi0rICAgICAgICBk dC5wcmludChfKCd1cGRhdGUgdW5zdWNjZXNzZnVsLCBwbGVhc2UgdHJ5IGFnYWluJykpCi0rICAg IGVuZAotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIEdldEFyZ3NGcm9tUHJlZmVyZW5jZShwcm9n X3RhYmxlLCBwcmVmaXgpIC0tZm9yIGVhY2ggYXJnIGluIGEgcHJvZ3JhbSB0YWJsZSByZWFkcyBp biB0aGUgYXNzb2NpYXRlZCB2YWx1ZSBpbiB0aGUgYWN0aXZlIHByZWZlcmVuY2UgKHdoaWNoIGlz IGNvbnRpbnVhbGx5IHVwZGF0ZWQgdmlhIGNsaWNrZWQvY2hhbmdlZCBjYWxsYmFjayBpbiBHVUkg ZWxlbWVudHMKLSsgICAgcHJvZ190YWJsZS5hcmdfc3RyaW5nID0gJycKLSsgICAgZm9yIGFyZ3Vt ZW50LCBhcmdfZGF0YSBpbiBwYWlycyhwcm9nX3RhYmxlLmFyZ3MpIGRvCi0rICAgICAgICBsb2Nh bCB0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsIHByZWZpeC4uYXJndW1lbnQsIGFyZ19k YXRhLnN0eWxlKQotKyAgICAgICAgaWYgYXJnX2RhdGEuc3R5bGUgPT0gJ2Jvb2wnIGFuZCB0ZW1w IHRoZW4KLSsgICAgICAgICAgICBwcm9nX3RhYmxlLmFyZ19zdHJpbmcgPSBwcm9nX3RhYmxlLmFy Z19zdHJpbmcuLmFyZ19kYXRhLnRleHQuLicgJwotKyAgICAgICAgZWxzZWlmIGFyZ19kYXRhLnN0 eWxlID09ICdpbnRlZ2VyJyB0aGVuCi0rICAgICAgICAgICAgcHJvZ190YWJsZS5hcmdfc3RyaW5n ID0gcHJvZ190YWJsZS5hcmdfc3RyaW5nLi5hcmdfZGF0YS50ZXh0Li50ZW1wLi4nICcKLSsgICAg ICAgIGVsc2VpZiBhcmdfZGF0YS5zdHlsZSA9PSAnc3RyaW5nJyB0aGVuCi0rICAgICAgICAgICAg aWYgZHQuY29uZmlndXJhdGlvbi5ydW5uaW5nX29zID09ICJ3aW5kb3dzIiB0aGVuCi0rICAgICAg ICAgICAgICAgIC0tZXNjYXBlICUgd2l0aCAlJSBhcyAlIG1lYW5zIGVudiB2YXIgb24gd2luZG93 cyBhbmQgY2FsbCB3aWxsIGZhaWwgb3RoZXJ3aXNlCi0rICAgICAgICAgICAgICAgIHRlbXAgPSBz dHJpbmcuZ3N1Yih0ZW1wLCAiJSUiLCAiJSUlJSIpCi0rICAgICAgICAgICAgZW5kCi0rICAgICAg ICAgICAgcHJvZ190YWJsZS5hcmdfc3RyaW5nID0gcHJvZ190YWJsZS5hcmdfc3RyaW5nLi5hcmdf ZGF0YS50ZXh0Li50ZW1wLi4nICcKLSsgICAgICAgIGVsc2VpZiBhcmdfZGF0YS5zdHlsZSA9PSAn ZmxvYXQnIHRoZW4KLSsgICAgICAgICAgICB0ZW1wID0gc3RyaW5nLnN1Yih0b3N0cmluZyh0ZW1w KSwxLDMpCi0rICAgICAgICAgICAgcHJvZ190YWJsZS5hcmdfc3RyaW5nID0gcHJvZ190YWJsZS5h cmdfc3RyaW5nLi5hcmdfZGF0YS50ZXh0Li50ZW1wLi4nICcKLSsgICAgICAgIGVuZAotKyAgICBl bmQKLSsgICAgcHJvZ190YWJsZS5hcmdfc3RyaW5nID0gQ2xlYW5TcGFjZXMocHJvZ190YWJsZS5h cmdfc3RyaW5nKQotKyAgICByZXR1cm4gcHJvZ190YWJsZS5hcmdfc3RyaW5nCi0rZW5kCi0rCi0r bG9jYWwgZnVuY3Rpb24gVXBkYXRlQUlTYXJncyhpbWFnZV90YWJsZSwgaW1hZ2VzX3RvX3JlbW92 ZSkgLS11cGRhdGVzIHRoZSBBSVMgYXJndW1lbnRzLCBidWlsZHMgdGhlIGlucHV0IGltYWdlIHN0 cmluZywgcmV0dXJucyBhIG1vZGlmaWVkIGltYWdlIHRhYmxlIHdoaWNoIGNvbnRhaW5zIHRoZSBh bGlnbmVkIGltYWdlIG5hbWVzIGluIHBsYWNlIG9mIHRoZSBleHBvcnRlZCBpbWFnZSBuYW1lcyBh bHNvIHVwZGF0ZXMgdGhlIGltYWdlcyB0byByZW1vdmUgc3RyaW5nIHdpdGggbmV3IGFsaWduZWQg aW1hZ2VzIGFuZCBhIHN0cmluZyBvZiB0aGUgaW1hZ2VzIHRvIGFsaWduCi0rICAgIEdldEFyZ3NG cm9tUHJlZmVyZW5jZShBSVMsICdhY3RpdmVfJykKLSsgICAgbG9jYWwgc291cmNlX3BhdGggPSAn JwotKyAgICBsb2NhbCBpbWFnZXNfdG9fYWxpZ24gPSAnJwotKyAgICBsb2NhbCBpbmRleCA9IDAK LSsgICAgZm9yIHJhdywgdGVtcF9pbWFnZSBpbiBwYWlycyhpbWFnZV90YWJsZSkgZG8KLSsgICAg ICAgIGxvY2FsIGluZGV4X3N0ciA9ICcnCi0rICAgICAgICBzb3VyY2VfcGF0aCA9IEdldEZpbGVO YW1lKHRlbXBfaW1hZ2UpCi0rICAgICAgICBpbWFnZXNfdG9fYWxpZ24gPSBpbWFnZXNfdG9fYWxp Z24uLmRmLnNhbml0aXplX2ZpbGVuYW1lKHRlbXBfaW1hZ2UpLi4nICcKLSsgICAgICAgIGlmIElu UmFuZ2UoaW5kZXgsMCw5KSB0aGVuIGluZGV4X3N0ciA9ICcwMDAnLi50b3N0cmluZyhpbmRleCkK LSsgICAgICAgIGVsc2VpZiBJblJhbmdlKGluZGV4LDEwLDk5KSB0aGVuIGluZGV4X3N0ciA9ICcw MCcuLnRvc3RyaW5nKGluZGV4KQotKyAgICAgICAgZW5kCi0rICAgICAgICBpbWFnZV90YWJsZVty YXddID0gc291cmNlX3BhdGguLidhbGlnbmVkXycuLmluZGV4X3N0ci4uJy50aWYnCi0rICAgICAg ICBpbWFnZXNfdG9fcmVtb3ZlID0gaW1hZ2VzX3RvX3JlbW92ZS4uZGYuc2FuaXRpemVfZmlsZW5h bWUoaW1hZ2VfdGFibGVbcmF3XSkuLicgJwotKyAgICAgICAgaW5kZXggPSBpbmRleCArIDEKLSsg ICAgZW5kCi0rICAgIHNvdXJjZV9wYXRoID0gZGYuc2FuaXRpemVfZmlsZW5hbWUoc291cmNlX3Bh dGguLidhbGlnbmVkXycpCi0rICAgIEFJUy5hcmdfc3RyaW5nID0gQUlTLmFyZ19zdHJpbmcuLicg LWEgJy4uc291cmNlX3BhdGgKLSsgICAgaW1hZ2VzX3RvX2FsaWduID0gQ2xlYW5TcGFjZXMoaW1h Z2VzX3RvX2FsaWduKQotKyAgICAKLSsgICAgcmV0dXJuIGltYWdlX3RhYmxlLCBpbWFnZXNfdG9f cmVtb3ZlLCBpbWFnZXNfdG9fYWxpZ24KLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBVcGRhdGVF TkZhcmdzKGltYWdlX3RhYmxlLCBwcmVmaXgpIC0tdXBkYXRlcyB0aGUgRW5mdXNlIGFyZ3VtZW50 cywgYnVpbGRzIHRoZSBpbnB1dCBpbWFnZSBzdHJpbmcsIGdlbmVyYXRlcyBvdXRwdXQgZmlsZW5h bWUsIHJldHVybnMgc3RyaW5nIG9mIGltYWdlcyB0byBibGVuZCwgdGhlIG5hbWUgb2YgdGhlIG91 dG91dCBpbWFnZSwgYW5kIHRoZSBmaXJzdCByYXcgaW1hZ2Ugb2JqZWN0Ci0rICAgIEdldEFyZ3NG cm9tUHJlZmVyZW5jZShFTkYsIHByZWZpeCkKLSsgICAgbG9jYWwgaW1hZ2VzX3RvX2JsZW5kID0g JycKLSsgICAgbG9jYWwgb3V0X3BhdGggPSAnJwotKyAgICBsb2NhbCBvdXRfbmFtZSA9ICcnCi0r ICAgIGxvY2FsIHNtYWxsZXN0X25hbWUgPSAnJwotKyAgICBsb2NhbCBzbWFsbGVzdF9pZCA9IG1h dGguaHVnZQotKyAgICBsb2NhbCBsYXJnZXN0X2lkID0gMAotKyAgICBsb2NhbCBmaXJzdF9yYXcg PSB7fQotKyAgICBmb3IgcmF3LCB0ZW1wX2ltYWdlIGluIHBhaXJzKGltYWdlX3RhYmxlKSBkbwot KyAgICAgICAgbG9jYWwgXywgc291cmNlX25hbWUsIHNvdXJjZV9pZCA9IEdldEZpbGVOYW1lKHJh dy5maWxlbmFtZSkKLSsgICAgICAgIHNvdXJjZV9pZCA9IHRvbnVtYmVyKHNvdXJjZV9pZCkKLSsg ICAgICAgIGlmIHNvdXJjZV9pZCA8IHNtYWxsZXN0X2lkIHRoZW4gCi0rICAgICAgICAgICAgc21h bGxlc3RfaWQgPSBzb3VyY2VfaWQKLSsgICAgICAgICAgICBzbWFsbGVzdF9uYW1lID0gc291cmNl X25hbWUKLSsgICAgICAgICAgICBmaXJzdF9yYXcgPSByYXcKLSsgICAgICAgIGVuZAotKyAgICAg ICAgaWYgc291cmNlX2lkID4gbGFyZ2VzdF9pZCB0aGVuIGxhcmdlc3RfaWQgPSBzb3VyY2VfaWQg ZW5kCi0rICAgICAgICBvdXRfcGF0aCA9IHJhdy5wYXRoCi0rICAgICAgICBpbWFnZXNfdG9fYmxl bmQgPSBpbWFnZXNfdG9fYmxlbmQuLmRmLnNhbml0aXplX2ZpbGVuYW1lKHRlbXBfaW1hZ2UpLi4n ICcKLSsgICAgZW5kCi0rICAgIEVORi5hcmdfc3RyaW5nID0gRU5GLmFyZ19zdHJpbmcuLicgLS1k ZXB0aD0nLi5HVUkuVGFyZ2V0LmRlcHRoLnZhbHVlLi4nICcKLSsgICAgaWYgR1VJLlRhcmdldC5m b3JtYXQudmFsdWUgPT0gJ3RpZicgdGhlbiBFTkYuYXJnX3N0cmluZyA9IEVORi5hcmdfc3RyaW5n Li4nLS1jb21wcmVzc2lvbj0nLi5HVUkuVGFyZ2V0LmNvbXByZXNzaW9uX2xldmVsX3RpZi52YWx1 ZS4uJyAnCi0rICAgIGVsc2VpZiBHVUkuVGFyZ2V0LmZvcm1hdC52YWx1ZSA9PSAnanBnJyB0aGVu IEVORi5hcmdfc3RyaW5nID0gRU5GLmFyZ19zdHJpbmcuLictLWNvbXByZXNzaW9uPScuLnRvc3Ry aW5nKG1hdGguZmxvb3IoR1VJLlRhcmdldC5jb21wcmVzc2lvbl9sZXZlbF9qcGcudmFsdWUpKS4u JyAnCi0rICAgIGVuZAotKyAgICBpZiBub3QgR1VJLlRhcmdldC5zb3VyY2VfbG9jYXRpb24udmFs dWUgdGhlbiBvdXRfcGF0aCA9IEdVSS5UYXJnZXQub3V0cHV0X2RpcmVjdG9yeS52YWx1ZSBlbmQK LSsgICAgb3V0X25hbWUgPSBzbWFsbGVzdF9uYW1lLi4nLScuLmxhcmdlc3RfaWQKLSsgICAgb3V0 X3BhdGggPSBvdXRfcGF0aC4ub3NfcGF0aF9zZXBlcmF0b3IuLm91dF9uYW1lLi4nLicuLkdVSS5U YXJnZXQuZm9ybWF0LnZhbHVlCi0rICAgIGlmIEdVSS5UYXJnZXQub25fY29uZmxpY3QudmFsdWUg PT0gJ2NyZWF0ZSB1bmlxdWUgZmlsZW5hbWUnIHRoZW4gb3V0X3BhdGggPSBkZi5jcmVhdGVfdW5p cXVlX2ZpbGVuYW1lKG91dF9wYXRoKSBlbmQKLSsgICAgRU5GLmFyZ19zdHJpbmcgPSBFTkYuYXJn X3N0cmluZy4uJy0tb3V0cHV0PScuLmRmLnNhbml0aXplX2ZpbGVuYW1lKG91dF9wYXRoKQotKyAg ICBpbWFnZXNfdG9fYmxlbmQgPSBDbGVhblNwYWNlcyhpbWFnZXNfdG9fYmxlbmQpCi0rICAgIAot KyAgICByZXR1cm4gaW1hZ2VzX3RvX2JsZW5kLCBvdXRfcGF0aCwgZmlyc3RfcmF3Ci0rZW5kCi0r Ci0rbG9jYWwgZnVuY3Rpb24gVXBkYXRlQWN0aXZlUHJlZmVyZW5jZSgpIC0tc2xpZGVycyAmIGVu dHJ5IGJveGVzIGRvIG5vdCBoYXZlIGEgY2xpY2svY2hhbmdlZCBjYWxsYmFjaywgc28gdGhlaXIg dmFsdWVzIG11c3QgYmUgc2F2ZWQgdG8gdGhlIGFjdGl2ZSBwcmVmZXJlbmNlICdtYW51YWxseScK LSsgICAgbG9jYWwgZW5mID0geydleHBvc3VyZV93ZWlnaHQnLCdzYXR1cmF0aW9uX3dlaWdodCcs J2NvbnRyYXN0X3dlaWdodCcsJ2V4cG9zdXJlX29wdGltdW0nLCdleHBvc3VyZV93aWR0aCd9Ci0r ICAgIGZvciBfLGRlc2NyaXB0b3IgaW4gcGFpcnMoZW5mKSBkbwotKyAgICAgICAgdGVtcCA9IEdV SS5FTkZbZGVzY3JpcHRvcl0udmFsdWUKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1v ZCwgJ2FjdGl2ZV8nLi5kZXNjcmlwdG9yLCAnZmxvYXQnLCB0ZW1wKQotKyAgICBlbmQKLSsgICAg dGVtcCA9IEdVSS5UYXJnZXQuY29tcHJlc3Npb25fbGV2ZWxfanBnLnZhbHVlCi0rICAgIHRlbXAg PSBtYXRoLmZsb29yKHRlbXApCi0rICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2 ZV9jb21wcmVzc2lvbl9sZXZlbF9qcGcnLCAnaW50ZWdlcicsIHRlbXApCi0rICAgIHRlbXAgPSBH VUkuVGFyZ2V0LmFkZF90YWdzLnRleHQKLSsgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAn YWN0aXZlX2FkZF90YWdzJywgJ3N0cmluZycsIHRlbXApCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rp b24gU2F2ZVRvUHJlZmVyZW5jZShwcmVzZXQpIC0tc2F2ZSB0aGUgcHJlc2VudCB2YWx1ZXMgb2Yg ZW5mdXNlIEdVSSBlbGVtZW50cyB0byB0aGUgc3BlY2lmaWVkICdwcmVzZXQnCi0rICAgIFVwZGF0 ZUFjdGl2ZVByZWZlcmVuY2UoKQotKyAgICBmb3IgYXJndW1lbnQsIGFyZ19kYXRhIGluIHBhaXJz KEVORi5hcmdzKSBkbwotKyAgICAgICAgbG9jYWwgdGVtcAotKyAgICAgICAgaWYgYXJndW1lbnQg PT0gJ2NvbnRyYXN0X3dpbmRvd19zaXplJyBvciBhcmd1bWVudCA9PSAnY29udHJhc3RfZWRnZV9z Y2FsZScgb3IgYXJndW1lbnQgPT0gJ2NvbnRyYXN0X21pbl9jdXJ2YXR1cmUnIHRoZW4gLS1jb21i b2JveGVzIG11c3QgYmUgaGFuZGxlZCBzcGVjaWFsbHkgdmlhIGFuIGluZGV4IHZhbHVlCi0rICAg ICAgICAgICAgdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlXycuLmFyZ3Vt ZW50Li4nX2luZCcsICdpbnRlZ2VyJykKLSsgICAgICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0 ZShtb2QsIHByZXNldC4uYXJndW1lbnQuLidfaW5kJywgJ2ludGVnZXInLCB0ZW1wKQotKyAgICAg ICAgICAgIHRlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV8nLi5hcmd1bWVu dCwgYXJnX2RhdGEuc3R5bGUpCi0rICAgICAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9k LCBwcmVzZXQuLmFyZ3VtZW50LCBhcmdfZGF0YS5zdHlsZSwgdGVtcCkKLSsgICAgICAgIGVsc2UK LSsgICAgICAgICAgICB0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfJy4u YXJndW1lbnQsIGFyZ19kYXRhLnN0eWxlKQotKyAgICAgICAgICAgIGR0LnByZWZlcmVuY2VzLndy aXRlKG1vZCwgcHJlc2V0Li5hcmd1bWVudCwgYXJnX2RhdGEuc3R5bGUsIHRlbXApCi0rICAgICAg ICBlbmQKLSsgICAgZW5kCi0rICAgIGR0LnByaW50KHN0cmluZy5mb3JtYXQoXygic2F2ZWQgdG8g JXMiKSwgcHJlc2V0KSkKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBMb2FkRnJvbVByZWZlcmVu Y2UocHJlc2V0KSAtLWxvYWQgdmFsdWVzIGZyb20gdGhlIHNwZWNpZmllZCAncHJlc2V0JyBpbnRv IHRoZSBHVUkgZWxlbWVudHMKLSsgICAgZm9yIGFyZ3VtZW50LCBhcmdfZGF0YSBpbiBwYWlycyhF TkYuYXJncykgZG8KLSsgICAgbG9jYWwgdGVtcAotKyAgICAgICAgaWYgYXJndW1lbnQgPT0gJ2Nv bnRyYXN0X3dpbmRvd19zaXplJyBvciBhcmd1bWVudCA9PSAnY29udHJhc3RfZWRnZV9zY2FsZScg b3IgYXJndW1lbnQgPT0gJ2NvbnRyYXN0X21pbl9jdXJ2YXR1cmUnIHRoZW4gIC0tY29tYm9ib3hl cyBtdXN0IGJlIGhhbmRsZWQgc3BlY2lhbGx5IHZpYSBhbiBpbmRleCB2YWx1ZQotKyAgICAgICAg ICAgIHRlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgcHJlc2V0Li5hcmd1bWVudC4uJ19p bmQnLCAnaW50ZWdlcicpCi0rICAgICAgICAgICAgR1VJLkVORlthcmd1bWVudF0uc2VsZWN0ZWQg PSB0ZW1wCi0rICAgICAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlXycu LmFyZ3VtZW50Li4nX2luZCcsICdpbnRlZ2VyJywgdGVtcCkKLSsgICAgICAgIGVsc2UKLSsgICAg ICAgICAgICB0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsIHByZXNldC4uYXJndW1lbnQs IGFyZ19kYXRhLnN0eWxlKQotKyAgICAgICAgICAgIEdVSS5FTkZbYXJndW1lbnRdLnZhbHVlID0g dGVtcAotKyAgICAgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV8nLi5h cmd1bWVudCwgYXJnX2RhdGEuc3R5bGUsIHRlbXApCi0rICAgICAgICBlbmQgICAgIAotKyAgICBl bmQKLSsgICAgZHQucHJpbnQoc3RyaW5nLmZvcm1hdChfKCJsb2FkZWQgZnJvbSAlcyIpLCBwcmVz ZXQpKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIHJlbW92ZV90ZW1wX2ZpbGVzKGltYWdlc190 b19yZW1vdmUpIC0tZGVsZXRlcyBhbGwgZmlsZXMgc3BlY2lmaWVkIGJ5IHRoZSBpbnB1dCBzdHJp bmcKLSsgICAgaWYgZHQuY29uZmlndXJhdGlvbi5ydW5uaW5nX29zID09ICd3aW5kb3dzJyB0aGVu Ci0rICAgICAgICBkdC5jb250cm9sLmV4ZWN1dGUoJ2RlbCAnLi5pbWFnZXNfdG9fcmVtb3ZlKQot KyAgICBlbHNlCi0rICAgICAgICBkdC5jb250cm9sLmV4ZWN1dGUoJ3JtICcuLmltYWdlc190b19y ZW1vdmUpCi0rICAgIGVuZAotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIGluaXRpYWwoc3RvcmFn ZSwgZm9ybWF0LCBpbWFnZXMsIGhpZ2hfcXVhbGl0eSwgZXh0cmFfZGF0YSkgLS1jYWxsZWQgYmVm b3JlIGV4cG9ydCBoYXBwZW5zLCBlbnN1cmUgZW5vdWdoIGltYWdlcyBzZWxlY3RlZCBhbmQgYWxs IG5lY2VzYXJ5IHByb2dyYW1zIGluc3RhbGxlZCBjb3JyZWN0bHksIGlmIGVycm9yIHRoZW4gaXQg c2V0cyBhIGJpdCBpbiBleHRyYV9kYXRhIGZvciB1c2UgYnkgbWFpbiBhbmQgY2FuY2VscyBleHBv cnQKLSsgICAgaWYgI2ltYWdlcyA8MiB0aGVuCi0rICAgICAgICB0YWJsZS5pbnNlcnQoZXh0cmFf ZGF0YSwgMSwgMSkKLSsgICAgICAgIHJldHVybiB7fQotKyAgICBlbHNlCi0rICAgICAgICBQcmVD YWxsKHtFTkYsQUlTLEVYRn0pCi0rICAgICAgICBpZiBBSVMuaW5zdGFsbF9lcnJvciBvciBFTkYu aW5zdGFsbF9lcnJvciBvciBFWEYuaW5zdGFsbF9lcnJvciB0aGVuCi0rICAgICAgICAgICAgdGFi bGUuaW5zZXJ0KGV4dHJhX2RhdGEsIDEsIDIpCi0rICAgICAgICAgICAgcmV0dXJuIHt9Ci0rICAg ICAgICBlbHNlCi0rICAgICAgICAgICAgdGFibGUuaW5zZXJ0KGV4dHJhX2RhdGEsIDEsIDApCi0r ICAgICAgICAgICAgcmV0dXJuIGltYWdlcwotKyAgICAgICAgZW5kCi0rICAgIGVuZAotK2VuZAot KwotK2xvY2FsIGZ1bmN0aW9uIHN1cHBvcnRfZm9ybWF0KHN0b3JhZ2UsIGZvcm1hdCkgLS10ZWxs cyBkdCB3ZSBvbmx5IHN1cHBvcnQgVElGRiBleHBvcnQgdHlwZQotKyAgICBsb2NhbCByZXQgPSBm YWxzZQotKyAgICBsb2NhbCB0ZW1wID0gc3RyaW5nLmZpbmQoZm9ybWF0Lm5hbWUsICdUSUZGJykK LSsgICAgaWYgdGVtcCB+PSBuaWwgdGhlbiByZXQgPSB0cnVlIGVuZAotKyAgICByZXR1cm4gcmV0 Ci0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gc2hvd19zdGF0dXMoc3RvcmFnZSwgaW1hZ2UsIGZv cm1hdCwgZmlsZW5hbWUsIG51bWJlciwgdG90YWwsIGhpZ2hfcXVhbGl0eSwgZXh0cmFfZGF0YSkg LS1vdXRwdXRzIG1lc3NhZ2UgdG8gdXNlciBzaG93aW5nIHNjcmlwdCBleHBvcnQgc3RhdHVzCi0r ICAgIGR0LnByaW50KHN0cmluZy5mb3JtYXQoXygiZXhwb3J0IGZvciBpbWFnZSBmdXNpb24gJWQg LyAlZCIpLCBtYXRoLmZsb29yKG51bWJlciksIG1hdGguZmxvb3IodG90YWwpKSkKLStlbmQKLSsK LStsb2NhbCBmdW5jdGlvbiBtYWluKHN0b3JhZ2UsIGltYWdlX3RhYmxlLCBleHRyYV9kYXRhKQot KyAgICBpZiBleHRyYV9kYXRhWzFdID09IDEgdGhlbgotKyAgICAgICAgZHQucHJpbnQoXygndG9v IGZldyBpbWFnZXMgc2VsZWN0ZWQsIHBsZWFzZSBzZWxlY3QgYXQgbGVhc3QgMiBpbWFnZXMnKSkK LSsgICAgICAgIHJldHVybgotKyAgICBlbHNlaWYgZXh0cmFfZGF0YVsxXSA9PSAyIHRoZW4KLSsg ICAgICAgIGR0LnByaW50KF8oJ2luc3RhbGxhdGlvbiBlcnJvciwgcGxlYXNlIHZlcmlmeSBiaW5h cnkgcGF0aHMgYXJlIGNvcnJlY3QnKSkKLSsgICAgICAgIHJldHVybgotKyAgICBlbmQKLSsgICAg bG9jYWwgaW1hZ2VzX3RvX3JlbW92ZSA9ICcnCi0rICAgIGxvY2FsIGZpbmFsX2ltYWdlID0gbmls Ci0rICAgIGxvY2FsIHNvdXJjZV9yYXcgPSBuaWwKLSsgICAgZm9yIHJhdyxleHBvcnRlZCBpbiBw YWlycyhpbWFnZV90YWJsZSkgZG8gLS1hZGQgdGhlIGV4cG9ydGVkIGZpbGVzIHRvIGxpc3Qgb2Yg aW1hZ2VzIHRvIHJlbW92ZSB3aGVuIGNvbXBsZXRlXGZhaWwKLSsgICAgICAgIGltYWdlc190b19y ZW1vdmUgPSBpbWFnZXNfdG9fcmVtb3ZlLi5kZi5zYW5pdGl6ZV9maWxlbmFtZShleHBvcnRlZCku LicgJwotKyAgICBlbmQKLSsgICAgaWYgR1VJLmFsaWduLnZhbHVlIHRoZW4gLS1pZiB1c2VyIHNl bGVjdGVkIHRvIGFsaWduIGltYWdlcyB0aGVuIHVwZGF0ZSBBSVMgYXJndW1lbnRzIGFuZCBleGVj dXRlIEFJUyBjb21tYW5kCi0rICAgICAgICBsb2NhbCBqb2IgPSBkdC5ndWkuY3JlYXRlX2pvYign YWxpZ25pbmcgaW1hZ2VzJykKLSsgICAgICAgIGltYWdlX3RhYmxlLCBpbWFnZXNfdG9fcmVtb3Zl LCBBSVMuaW1hZ2VzX3N0cmluZyA9IFVwZGF0ZUFJU2FyZ3MoaW1hZ2VfdGFibGUsIGltYWdlc190 b19yZW1vdmUpCi0rICAgICAgICBsb2NhbCBydW5fY21kID0gQnVpbGRFeGVjdXRlQ21kKEFJUykK LSsgICAgICAgIGR0LnByaW50X2xvZygiQUlTIHJ1biBjb21tYW5kIGlzICIgLi4gcnVuX2NtZCkK LSsgICAgICAgIHJ1bl9jbWQgPSBzYW5pdGl6ZV9kZWNpbWFscyhydW5fY21kKQotKyAgICAgICAg ZHQucHJpbnRfbG9nKCJBSVMgZGVjaW1hYWwgc2FuaXRpemVkIGNvbW1hbmQgaXMgIiAuLiBydW5f Y21kKQotKyAgICAgICAgbG9jYWwgcmVzcCA9IGRzeXMuZXh0ZXJuYWxfY29tbWFuZChydW5fY21k KQotKyAgICAgICAgam9iLnZhbGlkID0gZmFsc2UKLSsgICAgICAgIGlmIHJlc3Agfj0gMCB0aGVu Ci0rICAgICAgICAgICAgcmVtb3ZlX3RlbXBfZmlsZXMoaW1hZ2VzX3RvX3JlbW92ZSkKLSsgICAg ICAgICAgICBkdC5wcmludChzdHJpbmcuZm9ybWF0KF8oIiVzIGZhaWxlZCIpLCBBSVMubmFtZSkp Ci0rICAgICAgICAgICAgZHQucHJpbnRfZXJyb3IoQUlTLm5hbWUgLi4gJyBmYWlsZWQnKQotKyAg ICAgICAgICAgIHJldHVybgotKyAgICAgICAgZW5kCi0rICAgIGVuZAotKyAgICB2YXJpYW50cyA9 IHsnYWN0aXZlXyd9IC0tZGVmYXVsdCB0byAnYWN0aXZlJyBzZXR0aW5ncyB1bmxlc3MgdXNlciBz ZWxlY3RlZCB0byBjcmVhdGUgbXVsdGlwbGUgaW1hZ2UgdmFyaWFudHMgZnJvbSB0aGUgc3BlY2lm aWVkIHByZXNldCB0eXBlcwotKyAgICBpZiBHVUkuUHJlc2V0cy52YXJpYW50cy52YWx1ZSB0aGVu Ci0rICAgICAgICBpZiBHVUkuUHJlc2V0cy52YXJpYW50c190eXBlLnZhbHVlID09ICdkcmknIHRo ZW4KLSsgICAgICAgICAgICB2YXJpYW50cyA9IHsnZHJpXzEnLCAnZHJpXzInLCAnZHJpXzMnfQot KyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIHZhcmlhbnRzID0geydkZmZfMicsICdkZmZfMics ICdkZmZfMyd9Ci0rICAgICAgICBlbmQKLSsgICAgZW5kCi0rICAgIGxvY2FsIGltYWdlX251bSA9 IDAKLSsgICAgbG9jYWwgam9iID0gZHQuZ3VpLmNyZWF0ZV9qb2IoJ2JsZW5kaW5nICcuLiN2YXJp YW50cy4uJyBpbWFnZShzKScsIHRydWUpIC0tY3JlYXRlIGEgR1VJIGpvYiBiYXIgdG8gZGlzcGxh eSBlbmZ1c2UgcHJvZ3Jlc3MKLSsgICAgVXBkYXRlQWN0aXZlUHJlZmVyZW5jZSgpIC0tbG9hZCBj dXJyZW50IEdVSSB2YWx1ZXMgaW50byBhY3RpdmUgcHJlZmVyZW5jZSAob25seSBhcHBsaWVzIHRv IGVsZW1lbnRzIHdpdGhvdXQgYSBjbGlja2VkL2NoYW5nZWQgY2FsbGJhY2spCi0rICAgIGZvciB4 LHByZWZpeCBpbiBwYWlycyh2YXJpYW50cykgZG8gLS1mb3IgZWFjaCBpbWFnZSB0byBiZSBjcmVh dGVkIGxvYWQgaW4gdGhlIHByZWZlcmVuY2UgdmFsdWVzLCBidWlsZCBhcmd1bWVudHMgc3RyaW5n LCBvdXRwdXQgaW1hZ2UsIGFuZCBydW4gY29tbWFuZCB0aGVuIGV4ZWN1dGUuCi0rICAgICAgICBq b2IucGVyY2VudCA9IGltYWdlX251bSAvKCN2YXJpYW50cykKLSsgICAgICAgIGltYWdlX251bSA9 IGltYWdlX251bSsxCi0rICAgICAgICBFTkYuaW1hZ2VzX3N0cmluZywgZmluYWxfaW1hZ2UsIHNv dXJjZV9yYXcgPSBVcGRhdGVFTkZhcmdzKGltYWdlX3RhYmxlLCBwcmVmaXgpCi0rICAgICAgICBs b2NhbCBydW5fY21kID0gQnVpbGRFeGVjdXRlQ21kKEVORikKLSsgICAgICAgIGR0LnByaW50X2xv ZygiRU5GIHJ1biBjb21tYW5kIGlzICIgLi4gcnVuX2NtZCkKLSsgICAgICAgIHJ1bl9jbWQgPSBz YW5pdGl6ZV9kZWNpbWFscyhydW5fY21kKQotKyAgICAgICAgZHQucHJpbnRfbG9nKCJFTkYgZGVj aW1hYWwgc2FuaXRpemVkIGNvbW1hbmQgaXMgIiAuLiBydW5fY21kKQotKyAgICAgICAgbG9jYWwg cmVzcCA9IGRzeXMuZXh0ZXJuYWxfY29tbWFuZChydW5fY21kKQotKyAgICAgICAgaWYgcmVzcCB+ PSAwIHRoZW4KLSsgICAgICAgICAgICByZW1vdmVfdGVtcF9maWxlcyhpbWFnZXNfdG9fcmVtb3Zl KQotKyAgICAgICAgICAgIGR0LnByaW50X2Vycm9yKEVORi5uYW1lLi4nIGZhaWxlZCcpCi0rICAg ICAgICAgICAgZHQucHJpbnQoc3RyaW5nLmZvcm1hdChfKCIlcyBmYWlsZWQiKSwgRU5GLm5hbWUp KQotKyAgICAgICAgICAgIGpvYi52YWxpZCA9IGZhbHNlCi0rICAgICAgICAgICAgcmV0dXJuCi0r ICAgICAgICBlbmQKLSsgICAgICAgIAotKyAgICAgICAgLS1jb3B5IGV4aWYgZGF0YSBmcm9tIG9y aWdpbmFsIGZpbGUKLSsgICAgICAgIHJ1bl9jbWQgPSBFWEYuYmluLi4nIC1UYWdzRnJvbUZpbGUg Jy4uZGYuc2FuaXRpemVfZmlsZW5hbWUoc291cmNlX3Jhdy5wYXRoLi5vc19wYXRoX3NlcGVyYXRv ci4uc291cmNlX3Jhdy5maWxlbmFtZSkuLicgLWV4aWY6YWxsIC0tc3ViaWZkOmFsbCAtb3Zlcndy aXRlX29yaWdpbmFsICcuLmRmLnNhbml0aXplX2ZpbGVuYW1lKGZpbmFsX2ltYWdlKQotKyAgICAg ICAgLS0gcmVwbGFjZSBjb21tYSBkZWNpbWFsIHNlcGFyYXRvciB3aXRoIHBlcmlvZAotKyAgICAg ICAgZHQucHJpbnRfbG9nKCJFWEYgcnVuIGNvbW1hbmQgaXMgIiAuLiBydW5fY21kKQotKyAgICAg ICAgcnVuX2NtZCA9IHNhbml0aXplX2RlY2ltYWxzKHJ1bl9jbWQpCi0rICAgICAgICBkdC5wcmlu dF9sb2coIkVYRiBkZWNpbWFhbCBzYW5pdGl6ZWQgY29tbWFuZCBpcyAiIC4uIHJ1bl9jbWQpCi0r ICAgICAgICByZXNwID0gZHN5cy5leHRlcm5hbF9jb21tYW5kKHJ1bl9jbWQpCi0rICAgICAgICAK LSsgICAgICAgIAotKyAgICAgICAgaWYgR1VJLlRhcmdldC5hdXRvX2ltcG9ydC52YWx1ZSB0aGVu IC0taW1wb3J0IGltYWdlIGludG8gZHQgaWYgc3BlY2lmaWVkCi0rICAgICAgICAgICAgbG9jYWwg aW1wb3J0ZWQgPSBkdC5kYXRhYmFzZS5pbXBvcnQoZmluYWxfaW1hZ2UpCi0rICAgICAgICAgICAg ZHQucHJpbnRfbG9nKCJpbWFnZSBpbXBvcnRlZCIpCi0rICAgICAgICAgICAgaWYgR1VJLlRhcmdl dC5hcHBseV9zdHlsZS5zZWxlY3RlZCA+IDEgdGhlbiAtLWFwcGx5IHNwZWNpZmllZCBzdHlsZSB0 byBpbXBvcnRlZCBpbWFnZQotKyAgICAgICAgICAgICAgICBsb2NhbCBzZXRfc3R5bGUgPSBzdHls ZXNbR1VJLlRhcmdldC5hcHBseV9zdHlsZS5zZWxlY3RlZCAtIDFdCi0rICAgICAgICAgICAgICAg IGR0LnN0eWxlcy5hcHBseShzZXRfc3R5bGUgLCBpbXBvcnRlZCkKLSsgICAgICAgICAgICBlbmQK LSsgICAgICAgICAgICBpZiBHVUkuVGFyZ2V0LmNvcHlfdGFncy52YWx1ZSB0aGVuIC0tY29weSB0 YWdzIGZyb20gc291cmNlIGltYWdlCi0rICAgICAgICAgICAgICAgIGxvY2FsIGFsbF90YWdzID0g ZHQudGFncy5nZXRfdGFncyhzb3VyY2VfcmF3KSAKLSsgICAgICAgICAgICAgICAgZm9yIF8sdGFn IGluIHBhaXJzKGFsbF90YWdzKSBkbwotKyAgICAgICAgICAgICAgICAgICAgaWYgc3RyaW5nLm1h dGNoKHRhZy5uYW1lLCAnZGFya3RhYmxlfCcpID09IG5pbCB0aGVuIGR0LnRhZ3MuYXR0YWNoKHRh ZywgaW1wb3J0ZWQpIGVuZAotKyAgICAgICAgICAgICAgICBlbmQKLSsgICAgICAgICAgICBlbmQK LSsgICAgICAgICAgICBsb2NhbCBzZXRfdGFnID0gR1VJLlRhcmdldC5hZGRfdGFncy50ZXh0Ci0r ICAgICAgICAgICAgaWYgc2V0X3RhZyB+PSBuaWwgdGhlbiAtLWFkZCBhZGRpdGlvbmFsIHVzZXIt c3BlY2lmaWVkIHRhZ3MKLSsgICAgICAgICAgICAgICAgZm9yIHRhZyBpbiBzdHJpbmcuZ21hdGNo KHNldF90YWcsICdbXixdKycpIGRvCi0rICAgICAgICAgICAgICAgICAgICB0YWcgPSBDbGVhblNw YWNlcyh0YWcpCi0rICAgICAgICAgICAgICAgICAgICB0YWcgPSBkdC50YWdzLmNyZWF0ZSh0YWcp Ci0rICAgICAgICAgICAgICAgICAgICBkdC50YWdzLmF0dGFjaCh0YWcsIGltcG9ydGVkKSAKLSsg ICAgICAgICAgICAgICAgZW5kCi0rICAgICAgICAgICAgZW5kCi0rICAgICAgICBlbmQKLSsgICAg ZW5kCi0rICAgIHJlbW92ZV90ZW1wX2ZpbGVzKGltYWdlc190b19yZW1vdmUpCi0rICAgIGpvYi52 YWxpZCA9IGZhbHNlCi0rICAgIGR0LnByaW50KCdpbWFnZSBmdXNpb24gcHJvY2VzcyBjb21wbGV0 ZScpCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gZGVzdHJveSgpCi0rICAgIGR0LmRlc3Ryb3lf c3RvcmFnZSgnbW9kdWxlX2VuZnVzZUFkdmFuY2VkJykKLStlbmQKLSsKLSstLUdVSS0tCi0rc3Rh Y2tfY29tcHJlc3Npb24gPSBkdC5uZXdfd2lkZ2V0KCdzdGFjaycpe30KLStsb2NhbCBsYWJlbF9B SVNfb3B0aW9ucz0gZHQubmV3X3dpZGdldCgnc2VjdGlvbl9sYWJlbCcpewotKyAgICBsYWJlbCA9 IF8oJ2ltYWdlIGFsaWduIG9wdGlvbnMnKQotK30KLStHVUkuYWxpZ24gPSBkdC5uZXdfd2lkZ2V0 KCdjaGVja19idXR0b24nKXsKLSsgICAgbGFiZWwgPSBfKCdhbGlnbiBpbWFnZXMnKSwKLSsgICAg dmFsdWUgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9hbGlnbicsICdib29sJyks Ci0rICAgIHRvb2x0aXAgPSBfKCdhdXRvbWF0aWNhbGx5IGFsaWduIGltYWdlcyBwcmlvciB0byBl bmZ1c2UnKSwKLSsgICAgY2xpY2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAg ICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2FsaWduJywgJ2Jvb2wnLCBzZWxm LnZhbHVlKSAKLSsgICAgICAgIGZvciBfLHdpZGdldCBpbiBwYWlycyhHVUkuQUlTKSBkbwotKyAg ICAgICAgICAgIHdpZGdldC5zZW5zaXRpdmUgPSBzZWxmLnZhbHVlCi0rICAgICAgICBlbmQKLSsg ICAgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIHNlbGYudmFsdWUg PSB0cnVlIGVuZAotK30KLStHVUkuQUlTLnJhZGlhbF9kaXN0b3J0aW9uID0gZHQubmV3X3dpZGdl dCgnY2hlY2tfYnV0dG9uJyl7Ci0rICAgIGxhYmVsID0gXygnb3B0aW1pemUgcmFkaWFsIGRpc3Rv cnRpb24nKSwKLSsgICAgdmFsdWUgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9y YWRpYWxfZGlzdG9ydGlvbicsICdib29sJyksCi0rICAgIHRvb2x0aXAgPSBfKCdvcHRpbWl6ZSBy YWRpYWwgZGlzdG9ydGlvbiBmb3IgYWxsIGltYWdlcywgXG5leGNlcHQgZm9yIGZpcnN0JyksCi0r ICAgIGNsaWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBkdC5wcmVmZXJlbmNlcy53cml0 ZShtb2QsICdhY3RpdmVfcmFkaWFsX2Rpc3RvcnRpb24nLCAnYm9vbCcsIHNlbGYudmFsdWUpIGVu ZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnZhbHVlID0gdHJ1 ZSBlbmQKLSt9Ci0rR1VJLkFJUy5vcHRpbWl6ZV9maWVsZCA9IGR0Lm5ld193aWRnZXQoJ2NoZWNr X2J1dHRvbicpewotKyAgICBsYWJlbCA9IF8oJ29wdGltaXplIGZpZWxkIG9mIHZpZXcnKSwgCi0r ICAgIHZhbHVlID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfb3B0aW1pemVfZmll bGQnLCAnYm9vbCcpLAotKyAgICB0b29sdGlwID0gXygnb3B0aW1pemUgZmllbGQgb2YgdmlldyBm b3IgYWxsIGltYWdlcywgZXhjZXB0IGZvciBmaXJzdC4gXG5Vc2VmdWwgZm9yIGFsaWduaW5nIGZv Y3VzIHN0YWNrcyAoREZGKSB3aXRoIHNsaWdodGx5IFxuZGlmZmVyZW50IG1hZ25pZmljYXRpb24u JyksCi0rICAgIGNsaWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBkdC5wcmVmZXJlbmNl cy53cml0ZShtb2QsICdhY3RpdmVfb3B0aW1pemVfZmllbGQnLCAnYm9vbCcsIHNlbGYudmFsdWUp IGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnZhbHVlID0g dHJ1ZSBlbmQKLSt9Ci0rR1VJLkFJUy5vcHRpbWl6ZV9pbWFnZV9jZW50ZXIgPSBkdC5uZXdfd2lk Z2V0KCdjaGVja19idXR0b24nKXsKLSsgICAgbGFiZWwgPSBfKCdvcHRpbWl6ZSBpbWFnZSBjZW50 ZXIgc2hpZnQnKSwgCi0rICAgIHZhbHVlID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3Rp dmVfb3B0aW1pemVfaW1hZ2VfY2VudGVyJywgJ2Jvb2wnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ29w dGltaXplIGltYWdlIGNlbnRlciBzaGlmdCBmb3IgYWxsIGltYWdlcywgXG5leGNlcHQgZm9yIGZp cnN0LicpLAotKyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgZHQucHJlZmVy ZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX29wdGltaXplX2ltYWdlX2NlbnRlcicsICdib29sJywg c2VsZi52YWx1ZSkgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIHNl bGYudmFsdWUgPSB0cnVlIGVuZAotK30KLStHVUkuQUlTLmF1dG9fY3JvcCA9IGR0Lm5ld193aWRn ZXQoJ2NoZWNrX2J1dHRvbicpewotKyAgICBsYWJlbCA9IF8oJ2F1dG8gY3JvcCcpLCAKLSsgICAg dmFsdWUgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9hdXRvX2Nyb3AnLCAnYm9v bCcpLAotKyAgICB0b29sdGlwID0gXygnYXV0byBjcm9wIHRoZSBpbWFnZSB0byB0aGUgYXJlYSBj b3ZlcmVkIGJ5IGFsbCBpbWFnZXMuJyksCi0rICAgIGNsaWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlv bihzZWxmKSBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfYXV0b19jcm9wJywgJ2Jv b2wnLCBzZWxmLnZhbHVlKSBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2Vs Zikgc2VsZi52YWx1ZSA9IHRydWUgZW5kCi0rfQotK0dVSS5BSVMuZGlzdG9ydGlvbiA9IGR0Lm5l d193aWRnZXQoJ2NoZWNrX2J1dHRvbicpewotKyAgICBsYWJlbCA9IF8oJ2xvYWQgZGlzdG9ydGlv biBmcm9tIGxlbnMgZGF0YWJhc2UnKSwgCi0rICAgIHZhbHVlID0gZHQucHJlZmVyZW5jZXMucmVh ZChtb2QsICdhY3RpdmVfZGlzdG9ydGlvbicsICdib29sJyksCi0rICAgIHRvb2x0aXAgPSBfKCd0 cnkgdG8gbG9hZCBkaXN0b3J0aW9uIGluZm9ybWF0aW9uIGZyb20gbGVucyBkYXRhYmFzZScpLAot KyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgZHQucHJlZmVyZW5jZXMud3Jp dGUobW9kLCAnYWN0aXZlX2Rpc3RvcnRpb24nLCAnYm9vbCcsIHNlbGYudmFsdWUpIGVuZCwKLSsg ICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnZhbHVlID0gdHJ1ZSBlbmQK LSt9Ci0rR1VJLkFJUy5ncHUgPSBkdC5uZXdfd2lkZ2V0KCdjaGVja19idXR0b24nKXsKLSsgICAg bGFiZWwgPSBfKCd1c2UgZ3B1JyksIAotKyAgICB2YWx1ZSA9IGR0LnByZWZlcmVuY2VzLnJlYWQo bW9kLCAnYWN0aXZlX2dwdScsICdib29sJyksCi0rICAgIHRvb2x0aXAgPSBfKCd1c2UgZ3B1IGR1 cmluZyBhbGlnbm1lbnQnKSwKLSsgICAgY2xpY2tlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYp IGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9ncHUnLCAnYm9vbCcsIHNlbGYudmFs dWUpIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnZhbHVl ID0gdHJ1ZSBlbmQKLSt9Ci0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZl X2dyaWRfc2l6ZV9pbmQnLCAnaW50ZWdlcicpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMSwgOSkg dGhlbiB0ZW1wID0gNSBlbmQgCi0rR1VJLkFJUy5ncmlkX3NpemUgPSBkdC5uZXdfd2lkZ2V0KCdj b21ib2JveCcpewotKyAgICBsYWJlbCA9IF8oJ2ltYWdlIGdyaWQgc2l6ZScpLCAKLSsgICAgdG9v bHRpcCA9IF8oJ2JyZWFrIGltYWdlIGludG8gYSByZWN0YW5ndWxhciBncmlkIFxuYW5kIGF0dGVt cHQgdG8gZmluZCBudW0gY29udHJvbCBwb2ludHMgaW4gZWFjaCBzZWN0aW9uLlxuZGVmYXVsdDog KDV4NSknKSwKLSsgICAgc2VsZWN0ZWQgPSB0ZW1wLAotKyAgICAnMScsJzInLCczJywnNCcsJzUn LCc2JywnNycsJzgnLCc5JywKLSsgICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYp Ci0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfZ3JpZF9zaXplJywg J2ludGVnZXInLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1v ZCwgJ2FjdGl2ZV9ncmlkX3NpemVfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAg ICBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBz ZWxmLnNlbGVjdGVkID0gNQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0 aXZlX2dyaWRfc2l6ZScsICdpbnRlZ2VyJywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVm ZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfZ3JpZF9zaXplX2luZCcsICdpbnRlZ2VyJywgc2Vs Zi5zZWxlY3RlZCkKLSsgICAgZW5kCi0rfSAKLSt0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZCht b2QsICdhY3RpdmVfY29udHJvbF9wb2ludHNfaW5kJywgJ2ludGVnZXInKQotK2lmIG5vdCBJblJh bmdlKHRlbXAsIDEsIDkpIHRoZW4gdGVtcCA9IDggZW5kIAotK0dVSS5BSVMuY29udHJvbF9wb2lu dHMgPSBkdC5uZXdfd2lkZ2V0KCdjb21ib2JveCcpewotKyAgICBsYWJlbCA9IF8oJ2NvbnRyb2wg cG9pbnRzL2dyaWQnKSwgCi0rICAgIHRvb2x0aXAgPSBfKCdudW1iZXIgb2YgY29udHJvbCBwb2lu dHMgKHBlciBncmlkLCBzZWUgb3B0aW9uIC1nKSBcbnRvIGNyZWF0ZSBiZXR3ZWVuIGFkamFjZW50 IGltYWdlcyBcbmRlZmF1bHQ6ICg4KS4nKSwKLSsgICAgc2VsZWN0ZWQgPSB0ZW1wLAotKyAgICAn MScsJzInLCczJywnNCcsJzUnLCc2JywnNycsJzgnLCc5JywgICAgICAgICAgICAgCi0rICAgIGNo YW5nZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMu d3JpdGUobW9kLCAnYWN0aXZlX2NvbnRyb2xfcG9pbnRzJywgJ2ludGVnZXInLCBzZWxmLnZhbHVl KSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cm9sX3Bv aW50c19pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVuZCwKLSsgICAgcmVz ZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIHNlbGYuc2VsZWN0ZWQgPSA4 Ci0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29udHJvbF9wb2lu dHMnLCAnaW50ZWdlcicsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3Jp dGUobW9kLCAnYWN0aXZlX2NvbnRyb2xfcG9pbnRzX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxl Y3RlZCkKLSsgICAgZW5kCi0rfSAKLSt0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdh Y3RpdmVfY29udHJvbF9wb2ludHNfcmVtb3ZlX2luZCcsICdpbnRlZ2VyJykKLStpZiBub3QgSW5S YW5nZSh0ZW1wLCAxLCA5KSB0aGVuIHRlbXAgPSAzIGVuZCAKLStHVUkuQUlTLmNvbnRyb2xfcG9p bnRzX3JlbW92ZSA9IGR0Lm5ld193aWRnZXQoJ2NvbWJvYm94Jyl7Ci0rICAgIGxhYmVsID0gXygn cmVtb3ZlIGNvbnRyb2wgcG9pbnRzIHdpdGggZXJyb3InKSwgCi0rICAgIHRvb2x0aXAgPSBfKCdy ZW1vdmUgYWxsIGNvbnRyb2wgcG9pbnRzIHdpdGggYW4gZXJyb3IgaGlnaGVyIFxudGhhbiBudW0g cGl4ZWxzIFxuZGVmYXVsdDogKDMpJyksCi0rICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJzEn LCcyJywnMycsJzQnLCc1JywnNicsJzcnLCc4JywnOScsICAgICAgICAgICAgIAotKyAgICBjaGFu Z2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndy aXRlKG1vZCwgJ2FjdGl2ZV9jb250cm9sX3BvaW50c19yZW1vdmUnLCAnaW50ZWdlcicsIHNlbGYu dmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRy b2xfcG9pbnRzX3JlbW92ZV9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVu ZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIHNlbGYu c2VsZWN0ZWQgPSAzCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVf Y29udHJvbF9wb2ludHNfcmVtb3ZlJywgJ2ludGVnZXInLCBzZWxmLnZhbHVlKSAKLSsgICAgICAg IGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cm9sX3BvaW50c19yZW1vdmVf aW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQKLSt9Ci0rdGVtcCA9IGR0 LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX2NvcnJlbGF0aW9uX2luZCcsICdpbnRlZ2Vy JykKLStpZiBub3QgSW5SYW5nZSh0ZW1wLCAxLCAxMCkgdGhlbiB0ZW1wID0gOSBlbmQgCi0rR1VJ LkFJUy5jb3JyZWxhdGlvbiAgPSBkdC5uZXdfd2lkZ2V0KCdjb21ib2JveCcpewotKyAgICBsYWJl bCA9IF8oJ2NvcnJlbGF0aW9uIHRocmVzaG9sZCBmb3IgY29udHJvbCBwb2ludHMnKSwgCi0rICAg IHRvb2x0aXAgPSBfKCdjb3JyZWxhdGlvbiB0aHJlc2hvbGQgZm9yIGlkZW50aWZ5aW5nIFxuY29u dHJvbCBwb2ludHMgXG5kZWZhdWx0OiAoMC45KS4nKSwKLSsgICAgc2VsZWN0ZWQgPSB0ZW1wLAot KyAgICAnMC4xJywnMC4yJywnMC4zJywnMC40JywnMC41JywnMC42JywnMC43JywnMC44JywnMC45 JywnMS4wJywgICAgIAotKyAgICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsg ICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb3JyZWxhdGlvbicsICdm bG9hdCcsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAn YWN0aXZlX2NvcnJlbGF0aW9uX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAg ZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2Vs Zi5zZWxlY3RlZCA9IDkKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2 ZV9jb3JyZWxhdGlvbicsICdmbG9hdCcsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVy ZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvcnJlbGF0aW9uX2luZCcsICdpbnRlZ2VyJywgc2Vs Zi5zZWxlY3RlZCkKLSsgICAgZW5kCi0rfSAKLStsb2NhbCBsYWJlbF9FTkZfb3B0aW9ucz0gZHQu bmV3X3dpZGdldCgnc2VjdGlvbl9sYWJlbCcpewotKyAgICBsYWJlbCA9IF8oJ2ltYWdlIGZ1c2lv biBvcHRpb25zJykKLSt9Ci0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZl X2V4cG9zdXJlX3dlaWdodCcsICdmbG9hdCcpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMCwgMSkg dGhlbiB0ZW1wID0gMSBlbmQKLStHVUkuRU5GLmV4cG9zdXJlX3dlaWdodCA9IGR0Lm5ld193aWRn ZXQoJ3NsaWRlcicpewotKyAgICBsYWJlbCA9IF8oJ2V4cG9zdXJlIHdlaWdodCcpLAotKyAgICB0 b29sdGlwID0gXygnc2V0IHRoZSByZWxhdGl2ZSB3ZWlnaHQgb2YgdGhlIHdlbGwtZXhwb3NlZG5l c3MgY3JpdGVyaW9uIFxuYXMgZGVmaW5lZCBieSB0aGUgY2hvc2VuIGV4cG9zdXJlIHdlaWdodCBm dW5jdGlvbi4gXG5pbmNyZWFzaW5nIHRoaXMgd2VpZ2h0IHJlbGF0aXZlIHRvIHRoZSBvdGhlcnMg d2lsbFxuIG1ha2Ugd2VsbC1leHBvc2VkIHBpeGVscyBjb250cmlidXRlIG1vcmUgdG9cbiB0aGUg ZmluYWwgb3V0cHV0LiBcbmRlZmF1bHQ6ICgxLjApJyksCi0rICAgIGhhcmRfbWluID0gMCwKLSsg ICAgaGFyZF9tYXggPSAxLAotKyAgICB2YWx1ZSA9IHRlbXAsCi0rICAgIHJlc2V0X2NhbGxiYWNr ID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxmLnZhbHVlID0gMQotKyAgICBlbmQKLSt9 Ci0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX3NhdHVyYXRpb25fd2Vp Z2h0JywgJ2Zsb2F0JykKLStpZiBub3QgSW5SYW5nZSh0ZW1wLCAwLCAxKSB0aGVuIHRlbXAgPSAu MiBlbmQKLStHVUkuRU5GLnNhdHVyYXRpb25fd2VpZ2h0ID0gZHQubmV3X3dpZGdldCgnc2xpZGVy Jyl7Ci0rICAgIGxhYmVsID0gXygnc2F0dXJhdGlvbiB3ZWlnaHQnKSwKLSsgICAgdG9vbHRpcCA9 IF8oJ3NldCB0aGUgcmVsYXRpdmUgd2VpZ2h0IG9mIGhpZ2gtc2F0dXJhdGlvbiBwaXhlbHMuIFxu aW5jcmVhc2luZyB0aGlzIHdlaWdodCBtYWtlcyBwaXhlbHMgd2l0aCBoaWdoIFxuc2F0dXJhdGlv biBjb250cmlidXRlIG1vcmUgdG8gdGhlIGZpbmFsIG91dHB1dC4gXG5kZWZhdWx0OiAoMC4yKScp LAotKyAgICBoYXJkX21pbiA9IDAsCi0rICAgIGhhcmRfbWF4ID0gMSwKLSsgICAgdmFsdWUgPSB0 ZW1wLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2Vs Zi52YWx1ZSA9IDAuMgotKyAgICBlbmQKLSt9Ci0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQo bW9kLCAnYWN0aXZlX2NvbnRyYXN0X3dlaWdodCcsICdmbG9hdCcpCi0raWYgbm90IEluUmFuZ2Uo dGVtcCwgMCwgMSkgdGhlbiB0ZW1wID0gMCBlbmQKLStHVUkuRU5GLmNvbnRyYXN0X3dlaWdodCA9 IGR0Lm5ld193aWRnZXQoJ3NsaWRlcicpewotKyAgICBsYWJlbCA9IF8oJ2NvbnRyYXN0IHdlaWdo dCcpLAotKyAgICB0b29sdGlwID0gXygnc2V0cyB0aGUgcmVsYXRpdmUgd2VpZ2h0IG9mIGhpZ2gg bG9jYWwtY29udHJhc3QgcGl4ZWxzLiBcbmRlZmF1bHQ6ICgwLjApLicpLAotKyAgICBoYXJkX21p biA9IDAsCi0rICAgIGhhcmRfbWF4ID0gMSwKLSsgICAgdmFsdWUgPSB0ZW1wLAotKyAgICByZXNl dF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAotKyAgICAgICAgc2VsZi52YWx1ZSA9IDAKLSsg ICAgZW5kCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9leHBv c3VyZV9vcHRpbXVtJywgJ2Zsb2F0JykKLStpZiBub3QgSW5SYW5nZSh0ZW1wLCAwLCAxKSB0aGVu IHRlbXAgPSAwLjUgZW5kCi0rR1VJLkVORi5leHBvc3VyZV9vcHRpbXVtID0gZHQubmV3X3dpZGdl dCgnc2xpZGVyJyl7Ci0rICAgIGxhYmVsID0gXygnZXhwb3N1cmUgb3B0aW11bScpLAotKyAgICB0 b29sdGlwID0gXygnZGV0ZXJtaW5lIGF0IHdoYXQgbm9ybWFsaXplZCBleHBvc3VyZSB2YWx1ZVxu IHRoZSBvcHRpbXVtIGV4cG9zdXJlIG9mIHRoZSBpbnB1dCBpbWFnZXNcbiBpcy4gdGhpcyBpcywg c2V0IHRoZSBwb3NpdGlvbiBvZiB0aGUgbWF4aW11bVxuIG9mIHRoZSBleHBvc3VyZSB3ZWlnaHQg Y3VydmUuIHVzZSB0aGlzIFxub3B0aW9uIHRvIGZpbmUtdHVuZSBleHBvc3VyZSB3ZWlnaHRpbmcu IFxuZGVmYXVsdDogKDAuNSknKSwKLSsgICAgaGFyZF9taW4gPSAwLAotKyAgICBoYXJkX21heCA9 IDEsCi0rICAgIHZhbHVlID0gdGVtcCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihz ZWxmKSAKLSsgICAgICAgIHNlbGYudmFsdWUgPSAwLjUKLSsgICAgZW5kCi0rfQotK3RlbXAgPSBk dC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9leHBvc3VyZV93aWR0aCcsICdmbG9hdCcp Ci0raWYgbm90IEluUmFuZ2UodGVtcCwgMCwgMSkgdGhlbiB0ZW1wID0gMC4yIGVuZAotK0dVSS5F TkYuZXhwb3N1cmVfd2lkdGggPSBkdC5uZXdfd2lkZ2V0KCdzbGlkZXInKXsKLSsgICAgbGFiZWwg PSBfKCdleHBvc3VyZSB3aWR0aCcpLAotKyAgICB0b29sdGlwID0gXygnc2V0IHRoZSBjaGFyYWN0 ZXJpc3RpYyB3aWR0aCAoRldITSkgb2YgdGhlIGV4cG9zdXJlIFxud2VpZ2h0IGZ1bmN0aW9uLiBs b3cgbnVtYmVycyBnaXZlIGxlc3Mgd2VpZ2h0IHRvIFxucGl4ZWxzIHRoYXQgYXJlIGZhciBmcm9t IHRoZSB1c2VyLWRlZmluZWQgXG5vcHRpbXVtIGFuZCB2aWNlIHZlcnNhLiB1c2UgdGhpcyBvcHRp b24gdG8gXG5maW5lLXR1bmUgZXhwb3N1cmUgd2VpZ2h0aW5nLiBcbmRlZmF1bHQ6ICgwLjIpJyks Ci0rICAgIGhhcmRfbWluID0gMCwKLSsgICAgaGFyZF9tYXggPSAxLAotKyAgICB2YWx1ZSA9IHRl bXAsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxm LnZhbHVlID0gMC4yCi0rICAgIGVuZAotK30KLStHVUkuRU5GLmhhcmRfbWFza3MgPSBkdC5uZXdf d2lkZ2V0KCdjaGVja19idXR0b24nKXsKLSsgICAgbGFiZWwgPSBfKCdoYXJkIG1hc2snKSwgCi0r ICAgIHZhbHVlID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfaGFyZF9tYXNrcycs ICdib29sJyksCi0rICAgIHRvb2x0aXAgPSBfKCdmb3JjZSBoYXJkIGJsZW5kIG1hc2tzIG9uIHRo ZSBmaW5lc3Qgc2NhbGUuIHRoaXMgYXZvaWRzIFxuYXZlcmFnaW5nIG9mIGZpbmUgZGV0YWlscyAo b25seSksIGF0IHRoZSBleHBlbnNlIFxub2YgaW5jcmVhc2luZyB0aGUgbm9pc2UuIHRoaXMgaW1w cm92ZXMgdGhlIFxuc2hhcnBuZXNzIG9mIGZvY3VzIHN0YWNrcyBjb25zaWRlcmFibHkuXG5kZWZh dWx0IChzb2Z0IG1hc2spJyksICAgCi0rICAgIGNsaWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihz ZWxmKSBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfaGFyZF9tYXNrcycsICdib29s Jywgc2VsZi52YWx1ZSkgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYp IHNlbGYudmFsdWUgPSBmYWxzZSBlbmQKLSt9Ci0rR1VJLkVORi5zYXZlX21hc2tzID0gZHQubmV3 X3dpZGdldCgnY2hlY2tfYnV0dG9uJyl7Ci0rICAgIGxhYmVsID0gXygnc2F2ZSBtYXNrcycpLCAK LSsgICAgdmFsdWUgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9zYXZlX21hc2tz JywgJ2Jvb2wnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ3NhdmUgdGhlIGdlbmVyYXRlZCB3ZWlnaHQg bWFza3MgdG8geW91ciBob21lIGRpcmVjdG9yeSxcbmVuYmxlbmQgc2F2ZXMgbWFza3MgYXMgOCBi aXQgZ3JheXNjYWxlLCBcbmkuZS4gc2luZ2xlIGNoYW5uZWwgaW1hZ2VzLiBcbmZvciBhY2N1cmFj eSB3ZSByZWNvbW1lbmQgdG8gY2hvb3NlIGEgbG9zc2xlc3MgZm9ybWF0LicpLCAgCi0rICAgIGNs aWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2Qs ICdhY3RpdmVfc2F2ZV9tYXNrcycsICdib29sJywgc2VsZi52YWx1ZSkgZW5kLAotKyAgICByZXNl dF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIHNlbGYudmFsdWUgPSBmYWxzZSBlbmQKLSt9Ci0r dGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX2NvbnRyYXN0X3dpbmRvd19z aXplX2luZCcsICdpbnRlZ2VyJykKLStpZiBub3QgSW5SYW5nZSh0ZW1wLCAxLCA4KSB0aGVuIHRl bXAgPSAzIGVuZCAKLStHVUkuRU5GLmNvbnRyYXN0X3dpbmRvd19zaXplID0gZHQubmV3X3dpZGdl dCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCdjb250cmFzdCB3aW5kb3cgc2l6ZScpLCAK LSsgICAgdG9vbHRpcCA9IF8oJ3NldCB0aGUgd2luZG93IHNpemUgZm9yIGxvY2FsIGNvbnRyYXN0 IGFuYWx5c2lzLiBcbnRoZSB3aW5kb3cgd2lsbCBiZSBhIHNxdWFyZSBvZiBzaXplIMOXIHNpemUg cGl4ZWxzLiBcbmlmIGdpdmVuIGFuIGV2ZW4gc2l6ZSwgRW5mdXNlIHdpbGwgXG5hdXRvbWF0aWNh bGx5IHVzZSB0aGUgbmV4dCBvZGQgbnVtYmVyLlxuZm9yIGNvbnRyYXN0IGFuYWx5c2lzIHNpemUg dmFsdWVzIGxhcmdlciBcbnRoYW4gNSBwaXhlbHMgbWlnaHQgcmVzdWx0IGluIGEgXG5ibHVycnkg Y29tcG9zaXRlIGltYWdlLiB2YWx1ZXMgb2YgMyBhbmQgXG41IHBpeGVscyBoYXZlIGdpdmVuIGdv b2QgcmVzdWx0cyBvbiBcbmZvY3VzIHN0YWNrcy4gXG5kZWZhdWx0OiAoNSkgcGl4ZWxzJyksCi0r ICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJzMnLCc0JywnNScsJzYnLCc3JywnOCcsJzknLCcx MCcsCi0rICAgIGNoYW5nZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKQotKyAgICAgICAgZHQu cHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRyYXN0X3dpbmRvd19zaXplJywgJ2lu dGVnZXInLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwg J2FjdGl2ZV9jb250cmFzdF93aW5kb3dfc2l6ZV9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0 ZWQpCi0rICAgIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsg ICAgICAgIHNlbGYuc2VsZWN0ZWQgPSAzCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZSht b2QsICdhY3RpdmVfY29udHJhc3Rfd2luZG93X3NpemUnLCAnaW50ZWdlcicsIHNlbGYudmFsdWUp IAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRyYXN0X3dp bmRvd19zaXplX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kCi0rfSAK LSt0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfY29udHJhc3RfZWRnZV9z Y2FsZV9pbmQnLCAnaW50ZWdlcicpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMSwgNikgdGhlbiB0 ZW1wID0gMSBlbmQgCi0rR1VJLkVORi5jb250cmFzdF9lZGdlX3NjYWxlID0gZHQubmV3X3dpZGdl dCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCdjb250cmFzdCBlZGdlIHNjYWxlJyksIAot KyAgICB0b29sdGlwID0gXygnYSBub24temVybyB2YWx1ZSBmb3IgRURHRS1TQ0FMRSBzd2l0Y2hl cyBvbiB0aGUgXG5MYXBsYWNpYW4tb2YtR2F1c3NpYW4gKExvRykgZWRnZSBkZXRlY3Rpb24gYWxn b3JpdGhtLlxuIGVkYWdlLXNjYWxlIGlzIHRoZSByYWRpdXMgb2YgdGhlIEdhdXNzaWFuIHVzZWQg XG5pbiB0aGUgc2VhcmNoIGZvciBlZGdlcy4gYSBwb3NpdGl2ZSBMQ0UtU0NBTEUgXG50dXJucyBv biBsb2NhbCBjb250cmFzdCBlbmhhbmNlbWVudCAoTENFKSBcbmJlZm9yZSB0aGUgTG9HIGVkZ2Ug ZGV0ZWN0aW9uLiBcbkRlZmF1bHQ6ICgwLjApIHBpeGVscy4nKSwKLSsgICAgc2VsZWN0ZWQgPSB0 ZW1wLAotKyAgICAnMC4wJywnMC4xJywnMC4yJywnMC4zJywnMC40JywnMC41JywKLSsgICAgY2hh bmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53 cml0ZShtb2QsICdhY3RpdmVfY29udHJhc3RfZWRnZV9zY2FsZScsICdmbG9hdCcsIHNlbGYudmFs dWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRyYXN0 X2VkZ2Vfc2NhbGVfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQsCi0r ICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxmLnNlbGVj dGVkID0gMQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRy YXN0X2VkZ2Vfc2NhbGUnLCAnZmxvYXQnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZl cmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cmFzdF9lZGdlX3NjYWxlX2luZCcsICdpbnRl Z2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kCi0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNl cy5yZWFkKG1vZCwgJ2FjdGl2ZV9jb250cmFzdF9taW5fY3VydmF0dXJlX2luZCcsICdpbnRlZ2Vy JykKLStpZiBub3QgSW5SYW5nZSh0ZW1wLCAxLCAxMSkgdGhlbiB0ZW1wID0gMSBlbmQgCi0rR1VJ LkVORi5jb250cmFzdF9taW5fY3VydmF0dXJlID0gZHQubmV3X3dpZGdldCgnY29tYm9ib3gnKXsK LSsgICAgbGFiZWwgPSBfKCdjb250cmFzdCBtaW4gY3VydmF0dXJlIFslXScpLAotKyAgICB0b29s dGlwID0gXygnZGVmaW5lIHRoZSBtaW5pbXVtIGN1cnZhdHVyZSBmb3IgdGhlIExvRyBlZGdlIGRl dGVjdGlvbi4gQXBwZW5kIGEg4oCYJeKAmSB0byBzcGVjaWZ5IHRoZSBtaW5pbXVtIGN1cnZhdHVy ZSByZWxhdGl2ZSB0byBtYXhpbXVtIHBpeGVsIHZhbHVlIGluIHRoZSBzb3VyY2UgaW1hZ2UuIERl ZmF1bHQ6ICgwLjAlKScpLAotKyAgICBzZWxlY3RlZCA9IHRlbXAsIAotKyAgICAnMC4wJScsJzAu MSUnLCcwLjIlJywnMC4zJScsJzAuNCUnLCcwLjUlJywnMC42JScsJzAuNyUnLCcwLjglJywnMC45 JScsJzEuMCUnLAotKyAgICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAg ICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb250cmFzdF9taW5fY3VydmF0 dXJlJywgJ3N0cmluZycsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3Jp dGUobW9kLCAnYWN0aXZlX2NvbnRyYXN0X21pbl9jdXJ2YXR1cmVfaW5kJywgJ2ludGVnZXInLCBz ZWxmLnNlbGVjdGVkKQotKyAgICBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24o c2VsZikgCi0rICAgICAgICBzZWxmLnNlbGVjdGVkID0gMQotKyAgICAgICAgZHQucHJlZmVyZW5j ZXMud3JpdGUobW9kLCAnYWN0aXZlX2NvbnRyYXN0X21pbl9jdXJ2YXR1cmUnLCAnc3RyaW5nJywg c2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVf Y29udHJhc3RfbWluX2N1cnZhdHVyZV9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0r ICAgIGVuZAotK30gCi0rbG9jYWwgbGFiZWxfdGFyZ2V0X29wdGlvbnM9IGR0Lm5ld193aWRnZXQo J3NlY3Rpb25fbGFiZWwnKXsKLSsgICAgbGFiZWwgPSBfKCd0YXJnZXQgZmlsZScpCi0rfQotK3Rl bXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9jb21wcmVzc2lvbl9sZXZlbF90 aWZfaW5kJywgJ2ludGVnZXInKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDEsIDQpIHRoZW4gdGVt cCA9IDEgZW5kIAotK0dVSS5UYXJnZXQuY29tcHJlc3Npb25fbGV2ZWxfdGlmID0gZHQubmV3X3dp ZGdldCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCd0aWZmIGNvbXByZXNzaW9uJyksIAot KyAgICB0b29sdGlwID0gXygnY29tcHJlc3Npb24gbWV0aG9kIGZvciB0aWZmIGZpbGVzJyksCi0r ICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJ25vbmUnLCdkZWZsYXRlJywnbHp3JywncGFja2Jp dHMnLAotKyAgICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAgICAgIGR0 LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9jb21wcmVzc2lvbl9sZXZlbF90aWYnLCAn c3RyaW5nJywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2Qs ICdhY3RpdmVfY29tcHJlc3Npb25fbGV2ZWxfdGlmX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxl Y3RlZCkKLSsgICAgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpIAot KyAgICAgICAgc2VsZi5zZWxlY3RlZCA9IDEKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRl KG1vZCwgJ2FjdGl2ZV9jb21wcmVzc2lvbl9sZXZlbF90aWYnLCAnc3RyaW5nJywgc2VsZi52YWx1 ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY29tcHJlc3Np b25fbGV2ZWxfdGlmX2luZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kIAot K30KLSt0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfY29tcHJlc3Npb25f bGV2ZWxfanBnJywgJ2ludGVnZXInKQotK2lmIG5vdCBJblJhbmdlKHRlbXAsIDAsIDEwMCkgdGhl biB0ZW1wID0gMCBlbmQKLStHVUkuVGFyZ2V0LmNvbXByZXNzaW9uX2xldmVsX2pwZyA9IGR0Lm5l d193aWRnZXQoJ3NsaWRlcicpewotKyAgICBsYWJlbCA9IF8oJ2pwZWcgY29tcHJlc3Npb24nKSwK LSsgICAgdG9vbHRpcCA9IF8oJ2pwZWcgY29tcHJlc3Npb24gbGV2ZWwnKSwKLSsgICAgc29mdF9t aW4gPSAwLAotKyAgICBzb2Z0X21heCA9IDEwMCwKLSsgICAgaGFyZF9taW4gPSAwLAotKyAgICBo YXJkX21heCA9IDEwMCwKLSsgICAgc3RlcCA9IDUsCi0rICAgIGRpZ2l0cyA9IDAsCi0rICAgIHZh bHVlID0gdGVtcCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAg ICAgIHNlbGYudmFsdWUgPSAwCi0rICAgIGVuZAotK30KLStsb2NhbCBibGFuayA9IGR0Lm5ld193 aWRnZXQoJ2JveCcpe30KLStzdGFja19jb21wcmVzc2lvbiA9IGR0Lm5ld193aWRnZXQoJ3N0YWNr Jyl7Ci0rICAgIEdVSS5UYXJnZXQuY29tcHJlc3Npb25fbGV2ZWxfdGlmLAotKyAgICBHVUkuVGFy Z2V0LmNvbXByZXNzaW9uX2xldmVsX2pwZywKLSsgICAgYmxhbmssCi0rICAgIGFjdGl2ZSA9IDEK LSt9Ci0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX2Zvcm1hdF9pbmQn LCAnaW50ZWdlcicpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMSwgNikgdGhlbiB0ZW1wID0gMSBl bmQgCi0rR1VJLlRhcmdldC5mb3JtYXQgPSBkdC5uZXdfd2lkZ2V0KCdjb21ib2JveCcpewotKyAg ICBsYWJlbCA9IF8oJ2ZpbGUgZm9ybWF0JyksIAotKyAgICB0b29sdGlwID0gXygnZmlsZSBmb3Jt YXQgb2YgdGhlIGVuZnVzZWQgZmluYWwgaW1hZ2UnKSwKLSsgICAgc2VsZWN0ZWQgPSB0ZW1wLAot KyAgICAndGlmJywnanBnJywncG5nJywncG5tJywncGJtJywncHBtJywKLSsgICAgY2hhbmdlZF9j YWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZSht b2QsICdhY3RpdmVfZm9ybWF0JywgJ3N0cmluZycsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQu cHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2Zvcm1hdF9pbmQnLCAnaW50ZWdlcicsIHNl bGYuc2VsZWN0ZWQpCi0rICAgICAgICBpZiBzZWxmLnZhbHVlID09ICd0aWYnIHRoZW4gc3RhY2tf Y29tcHJlc3Npb24uYWN0aXZlID0gMQotKyAgICAgICAgZWxzZWlmIHNlbGYudmFsdWUgPT0gJ2pw ZycgdGhlbiBzdGFja19jb21wcmVzc2lvbi5hY3RpdmUgPSAyCi0rICAgICAgICBlbHNlIHN0YWNr X2NvbXByZXNzaW9uLmFjdGl2ZSA9IDMKLSsgICAgICAgIGVuZAotKyAgICBlbmQsCi0rICAgIHJl c2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxmLnNlbGVjdGVkID0g MQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2Zvcm1hdCcsICdz dHJpbmcnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwg J2FjdGl2ZV9mb3JtYXRfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQg Ci0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9kZXB0aF9pbmQn LCAnaW50ZWdlcicpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMSwgNSkgdGhlbiB0ZW1wID0gMyBl bmQgCi0rR1VJLlRhcmdldC5kZXB0aCA9IGR0Lm5ld193aWRnZXQoJ2NvbWJvYm94Jyl7Ci0rICAg IGxhYmVsID0gXygnYml0IGRlcHRoJyksIAotKyAgICB0b29sdGlwID0gXygnYml0IGRlcHRoIG9m IHRoZSBlbmZ1c2VkIGZpbGUnKSwKLSsgICAgc2VsZWN0ZWQgPSB0ZW1wLAotKyAgICAnOCcsJzE2 JywnMzInLCdyMzInLCdyNjQnLAotKyAgICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2Vs ZikKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9kZXB0aCcsICdz dHJpbmcnLCBzZWxmLnZhbHVlKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwg J2FjdGl2ZV9kZXB0aF9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVuZCwK LSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIHNlbGYuc2Vs ZWN0ZWQgPSAyCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfZGVw dGgnLCAnc3RyaW5nJywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0 ZShtb2QsICdhY3RpdmVfZGVwdGhfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAg ICBlbmQgCi0rfQotK2xvY2FsIGxhYmVsX2RpcmVjdG9yeSA9IGR0Lm5ld193aWRnZXQoJ2xhYmVs Jyl7Ci0rICAgIGxhYmVsID0gXygnZGlyZWN0b3J5JyksCi0rICAgIGVsbGlwc2l6ZSA9ICdzdGFy dCcsCi0rICAgIGhhbGlnbiA9ICdzdGFydCcKLSt9Ci0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJl YWQobW9kLCAnYWN0aXZlX291dHB1dF9kaXJlY3RvcnknLCAnc3RyaW5nJykKLStpZiB0ZW1wID09 ICcnIG9yIHRlbXAgPT0gbmlsIHRoZW4gdGVtcCA9IGR0LmNvbGxlY3Rpb25bMV0ucGF0aCBlbmQK LStHVUkuVGFyZ2V0Lm91dHB1dF9kaXJlY3RvcnkgPSBkdC5uZXdfd2lkZ2V0KCdmaWxlX2Nob29z ZXJfYnV0dG9uJyl7Ci0rICAgIHRpdGxlID0gJ1NlbGVjdCBleHBvcnQgcGF0aCcsIAotKyAgICBp c19kaXJlY3RvcnkgPSB0cnVlLAotKyAgICB0b29sdGlwID0gXygnc2VsZWN0IHRoZSB0YXJnZXQg ZGlyZWN0b3J5IGZvciB0aGUgZnVzZWQgaW1hZ2UuIFxudGhlIGZpbGVuYW1lIGlzIGNyZWF0ZWQg YXV0b21hdGljYWxseS4nKSwKLSsgICAgdmFsdWUgPSB0ZW1wLAotKyAgICBjaGFuZ2VkX2NhbGxi YWNrID0gZnVuY3Rpb24oc2VsZikgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX291 dHB1dF9kaXJlY3RvcnknLCAnc3RyaW5nJywgc2VsZi52YWx1ZSkgZW5kCi0rfQotK0dVSS5UYXJn ZXQuc291cmNlX2xvY2F0aW9uID0gZHQubmV3X3dpZGdldCgnY2hlY2tfYnV0dG9uJyl7Ci0rICAg IGxhYmVsID0gXygnc2F2ZSB0byBzb3VyY2UgaW1hZ2UgbG9jYXRpb24nKSwgCi0rICAgIHZhbHVl ID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfc291cmNlX2xvY2F0aW9uJywgJ2Jv b2wnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ2lmIGNoZWNrZWQgaWdub3JlcyB0aGUgbG9jYXRpb24g YWJvdmUgYW5kIHNhdmVzIG91dHB1dCBpbWFnZShzKSB0byB0aGUgc2FtZSBsb2NhdGlvbiBhcyB0 aGUgc291cmNlIGltYWdlcy4nKSwgIAotKyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24o c2VsZikgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX3NvdXJjZV9sb2NhdGlvbics ICdib29sJywgc2VsZi52YWx1ZSkgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9u KHNlbGYpIHNlbGYudmFsdWUgPSB0cnVlIGVuZAotK30KLSt0ZW1wID0gZHQucHJlZmVyZW5jZXMu cmVhZChtb2QsICdhY3RpdmVfb25fY29uZmxpY3RfaW5kJywgJ2ludGVnZXInKQotK2lmIG5vdCBJ blJhbmdlKHRlbXAsIDEsIDIpIHRoZW4gdGVtcCA9IDEgZW5kIAotK0dVSS5UYXJnZXQub25fY29u ZmxpY3QgPSBkdC5uZXdfd2lkZ2V0KCdjb21ib2JveCcpewotKyAgICBsYWJlbCA9IF8oJ29uIGNv bmZsaWN0JyksIAotKyAgICBzZWxlY3RlZCA9IDEsICAKLSsgICAgJ2NyZWF0ZSB1bmlxdWUgZmls ZW5hbWUnLCdvdmVyd3JpdGUnLCAgICAgICAgICAgCi0rICAgIGNoYW5nZWRfY2FsbGJhY2sgPSBm dW5jdGlvbihzZWxmKQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZl X29uX2NvbmZsaWN0JywgJ3N0cmluZycsIHNlbGYudmFsdWUpIAotKyAgICAgICAgZHQucHJlZmVy ZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX29uX2NvbmZsaWN0X2luZCcsICdpbnRlZ2VyJywgc2Vs Zi5zZWxlY3RlZCkKLSsgICAgZW5kLAotKyAgICByZXNldF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNl bGYpIAotKyAgICAgICAgc2VsZi5zZWxlY3RlZCA9IDEKLSsgICAgICAgIGR0LnByZWZlcmVuY2Vz LndyaXRlKG1vZCwgJ2FjdGl2ZV9vbl9jb25mbGljdCcsICdzdHJpbmcnLCBzZWxmLnZhbHVlKSAK LSsgICAgICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9vbl9jb25mbGljdF9p bmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0ZWQpCi0rICAgIGVuZCAKLSt9ICAKLStHVUkuVGFy Z2V0LmF1dG9faW1wb3J0ID0gZHQubmV3X3dpZGdldCgnY2hlY2tfYnV0dG9uJyl7Ci0rICAgIGxh YmVsID0gXygnYXV0byBpbXBvcnQnKSwgCi0rICAgIHZhbHVlID0gZHQucHJlZmVyZW5jZXMucmVh ZChtb2QsICdhY3RpdmVfYXV0b19pbXBvcnQnLCAnYm9vbCcpLAotKyAgICB0b29sdGlwID0gXygn aW1wb3J0IHRoZSBpbWFnZSBpbnRvIGRhcmt0YWJsZSBkYXRhYmFzZSB3aGVuIGVuZnVzZSBjb21w bGV0ZXMnKSwgIAotKyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAg ICAgIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9hdXRvX2ltcG9ydCcsICdib29s Jywgc2VsZi52YWx1ZSkKLSsgICAgICAgIEdVSS5UYXJnZXQuYXBwbHlfc3R5bGUuc2Vuc2l0aXZl ID0gc2VsZi52YWx1ZQotKyAgICAgICAgR1VJLlRhcmdldC5jb3B5X3RhZ3Muc2Vuc2l0aXZlID0g c2VsZi52YWx1ZQotKyAgICAgICAgR1VJLlRhcmdldC5hZGRfdGFncy5zZW5zaXRpdmUgPSBzZWxm LnZhbHVlCi0rICAgIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBz ZWxmLnZhbHVlID0gdHJ1ZSBlbmQKLSt9Ci0rdGVtcCA9IGR0LnByZWZlcmVuY2VzLnJlYWQobW9k LCAnYWN0aXZlX2FwcGx5X3N0eWxlX2luZCcsICdpbnRlZ2VyJykKLStHVUkuVGFyZ2V0LmFwcGx5 X3N0eWxlID0gZHQubmV3X3dpZGdldCgnY29tYm9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCdhcHBs eSBzdHlsZSBvbiBJbXBvcnQnKSwKLSsgICAgdG9vbHRpcCA9IF8oJ2FwcGx5IHNlbGVjdGVkIHN0 eWxlIG9uIGF1dG8taW1wb3J0IHRvIG5ld2x5IGNyZWF0ZWQgYmxlbmRlZCBpbWFnZScpLAotKyAg ICBzZWxlY3RlZCA9IDEsCi0rICAgICdub25lJywKLSsgICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1 bmN0aW9uKHNlbGYpCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVf YXBwbHlfc3R5bGUnLCAnc3RyaW5nJywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJl bmNlcy53cml0ZShtb2QsICdhY3RpdmVfYXBwbHlfc3R5bGVfaW5kJywgJ2ludGVnZXInLCBzZWxm LnNlbGVjdGVkKQotKyAgICBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2Vs ZikgCi0rICAgICAgICBzZWxmLnNlbGVjdGVkID0gMQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMu d3JpdGUobW9kLCAnYWN0aXZlX2FwcGx5X3N0eWxlJywgJ3N0cmluZycsIHNlbGYudmFsdWUpIAot KyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2FwcGx5X3N0eWxlX2lu ZCcsICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kIAotK30KLStmb3Igaz0xLCAo c3R5bGVzX2NvdW50LTEpIGRvCi0rICAgIEdVSS5UYXJnZXQuYXBwbHlfc3R5bGVbaysxXSA9IHN0 eWxlc1trXS5uYW1lCi0rZW5kCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMSwgc3R5bGVzX2NvdW50 KSB0aGVuIHRlbXAgPSAxIGVuZAotK0dVSS5UYXJnZXQuYXBwbHlfc3R5bGUuc2VsZWN0ZWQgPSB0 ZW1wCi0rR1VJLlRhcmdldC5jb3B5X3RhZ3MgPSBkdC5uZXdfd2lkZ2V0KCdjaGVja19idXR0b24n KXsKLSsgICAgbGFiZWwgPSBfKCdjb3B5IHRhZ3MnKSwgCi0rICAgIHZhbHVlID0gZHQucHJlZmVy ZW5jZXMucmVhZChtb2QsICdhY3RpdmVfY29weV90YWdzJywgJ2Jvb2wnKSwKLSsgICAgdG9vbHRp cCA9IF8oJ2NvcHkgdGFncyBmcm9tIGZpcnN0IGltYWdlLicpLCAKLSsgICAgY2xpY2tlZF9jYWxs YmFjayA9IGZ1bmN0aW9uKHNlbGYpIGR0LnByZWZlcmVuY2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV9j b3B5X3RhZ3MnLCAnYm9vbCcsIHNlbGYudmFsdWUpIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJhY2sg PSBmdW5jdGlvbihzZWxmKSBzZWxmLnZhbHVlID0gdHJ1ZSBlbmQKLSt9Ci0rdGVtcCA9IGR0LnBy ZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX2FkZF90YWdzJywgJ3N0cmluZycpCi0raWYgdGVt cCA9PSAnJyB0aGVuIHRlbXAgPSBuaWwgZW5kIAotK0dVSS5UYXJnZXQuYWRkX3RhZ3MgPSBkdC5u ZXdfd2lkZ2V0KCdlbnRyeScpewotKyAgICB0b29sdGlwID0gXygnYWRkaXRpb25hbCB0YWdzIHRv IGJlIGFkZGVkIG9uIGltcG9ydCwgc2VwZXJhdGUgd2l0aCBjb21tYXMsIGFsbCBzcGFjZXMgd2ls bCBiZSByZW1vdmVkJyksCi0rICAgIHRleHQgPSB0ZW1wLAotKyAgICBwbGFjZWhvbGRlciA9IF8o J2VudGVyIHRhZ3MsIHNlcGFyYXRlZCBieSBjb21tYXMnKSwKLSsgICAgZWRpdGFibGUgPSB0cnVl Ci0rfQotK3RlbXAgPSBkdC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2FjdGl2ZV9jdXJyZW50X3By ZXNldF9pbmQnLCAnaW50ZWdlcicpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMSwgNikgdGhlbiB0 ZW1wID0gMSBlbmQKLStHVUkuUHJlc2V0cy5jdXJyZW50X3ByZXNldCA9IGR0Lm5ld193aWRnZXQo J2NvbWJvYm94Jyl7Ci0rICAgIGxhYmVsID0gXygnYWN0aXZlIHByZXNldCcpLAotKyAgICB0b29s dGlwID0gXygncHJlc2V0IHRvIGJlIGxvYWRlZCBmcm9tIG9yIHNhdmVkIHRvJyksCi0rICAgIHZh bHVlID0gdGVtcCwKLSsgICAgJ2RyaV8xJywgJ2RyaV8yJywgJ2RyaV8zJywgJ2RmZl8xJywgJ2Rm Zl8yJywgJ2RmZl8zJywKLSsgICAgY2hhbmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHNlbGYpCi0r ICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY3VycmVudF9wcmVzZXQn LCAnc3RyaW5nJywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZSht b2QsICdhY3RpdmVfY3VycmVudF9wcmVzZXRfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVk KQotKyAgICBlbmQsCi0rICAgIHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAg ICAgICBzZWxmLnNlbGVjdGVkID0gMQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9k LCAnYWN0aXZlX2N1cnJlbnRfcHJlc2V0JywgJ3N0cmluZycsIHNlbGYudmFsdWUpIAotKyAgICAg ICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX2N1cnJlbnRfcHJlc2V0X2luZCcs ICdpbnRlZ2VyJywgc2VsZi5zZWxlY3RlZCkKLSsgICAgZW5kIAotK30KLStHVUkuUHJlc2V0cy5s b2FkID0gZHQubmV3X3dpZGdldCgnYnV0dG9uJyl7Ci0rICAgIGxhYmVsID0gXygnbG9hZCBmdXNp b24gcHJlc2V0JyksCi0rICAgIHRvb2x0aXAgPSBfKCdsb2FkIGN1cnJlbnQgZnVzaW9uIHBhcmFt ZXRlcnMgZnJvbSBzZWxlY3RlZCBwcmVzZXQnKSwKLSsgICAgY2xpY2tlZF9jYWxsYmFjayA9IGZ1 bmN0aW9uKCkgTG9hZEZyb21QcmVmZXJlbmNlKEdVSS5QcmVzZXRzLmN1cnJlbnRfcHJlc2V0LnZh bHVlKSBlbmQKLSt9Ci0rR1VJLlByZXNldHMuc2F2ZSA9IGR0Lm5ld193aWRnZXQoJ2J1dHRvbicp ewotKyAgICBsYWJlbCA9IF8oJ3NhdmUgdG8gZnVzaW9uIHByZXNldCcpLAotKyAgICB0b29sdGlw ID0gXygnc2F2ZSBjdXJyZW50IGZ1c2lvbiBwYXJhbWV0ZXJzIHRvIHNlbGVjdGVkIHByZXNldCcp LAotKyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oKSBTYXZlVG9QcmVmZXJlbmNlKEdV SS5QcmVzZXRzLmN1cnJlbnRfcHJlc2V0LnZhbHVlKSBlbmQKLSt9Ci0rR1VJLlByZXNldHMudmFy aWFudHMgPSBkdC5uZXdfd2lkZ2V0KCdjaGVja19idXR0b24nKXsKLSsgICAgbGFiZWwgPSBfKCdj cmVhdGUgaW1hZ2UgdmFyaWFudHMgZnJvbSBwcmVzZXRzJyksIAotKyAgICB2YWx1ZSA9IGR0LnBy ZWZlcmVuY2VzLnJlYWQobW9kLCAnYWN0aXZlX3ZhcmlhbnRzJywgJ2Jvb2wnKSwKLSsgICAgdG9v bHRpcCA9IF8oJ2NyZWF0ZSBtdWx0aXBsZSBpbWFnZSB2YXJpYW50cyBiYXNlZCBvbiB0aGUgdGhy ZWUgZGlmZmVyZW50IHByZXNldHMgb2YgdGhlIHNwZWNpZmllZCB0eXBlJyksICAgCi0rICAgIGNs aWNrZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIGR0LnByZWZlcmVuY2Vz LndyaXRlKG1vZCwgJ2FjdGl2ZV92YXJpYW50cycsICdib29sJywgc2VsZi52YWx1ZSkKLSsgICAg ICAgIGlmIHNlbGYudmFsdWUgdGhlbgotKyAgICAgICAgICAgIEdVSS5UYXJnZXQub25fY29uZmxp Y3Quc2VsZWN0ZWQgPSAxCi0rICAgICAgICAgICAgR1VJLlRhcmdldC5vbl9jb25mbGljdC5zZW5z aXRpdmUgPSBmYWxzZQotKyAgICAgICAgICAgIEdVSS5QcmVzZXRzLnZhcmlhbnRzX3R5cGUuc2Vu c2l0aXZlID0gdHJ1ZQotKyAgICAgICAgZWxzZQotKyAgICAgICAgICAgIEdVSS5UYXJnZXQub25f Y29uZmxpY3Quc2Vuc2l0aXZlID0gdHJ1ZQotKyAgICAgICAgICAgIEdVSS5QcmVzZXRzLnZhcmlh bnRzX3R5cGUuc2Vuc2l0aXZlID0gZmFsc2UKLSsgICAgICAgIGVuZAotKyAgICBlbmQsCi0rICAg IHJlc2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgc2VsZi52YWx1ZSA9IGZhbHNlIGVuZAot K30KLSt0ZW1wID0gZHQucHJlZmVyZW5jZXMucmVhZChtb2QsICdhY3RpdmVfdmFyaWFudHNfdHlw ZV9pbmQnLCAnaW50ZWdlcicpCi0raWYgbm90IEluUmFuZ2UodGVtcCwgMSwgMikgdGhlbiB0ZW1w ID0gMSBlbmQKLStHVUkuUHJlc2V0cy52YXJpYW50c190eXBlID0gZHQubmV3X3dpZGdldCgnY29t Ym9ib3gnKXsKLSsgICAgbGFiZWwgPSBfKCdjcmVhdGUgdmFyaWFudHMgdHlwZScpLAotKyAgICB0 b29sdGlwID0gXygncHJlc2V0IHR5cGUgdG8gYmUgdXNlZCB3aGVuIGNyZWF0aW5nIGltYWdlIHZh cmlhbnRzJyksCi0rICAgIHNlbGVjdGVkID0gdGVtcCwKLSsgICAgJ2RyaScsICdkZmYnLAotKyAg ICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikKLSsgICAgICAgIGR0LnByZWZlcmVu Y2VzLndyaXRlKG1vZCwgJ2FjdGl2ZV92YXJpYW50c190eXBlJywgJ3N0cmluZycsIHNlbGYudmFs dWUpIAotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX3ZhcmlhbnRz X3R5cGVfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAgICBlbmQsCi0rICAgIHJl c2V0X2NhbGxiYWNrID0gZnVuY3Rpb24oc2VsZikgCi0rICAgICAgICBzZWxmLnNlbGVjdGVkID0g MQotKyAgICAgICAgZHQucHJlZmVyZW5jZXMud3JpdGUobW9kLCAnYWN0aXZlX3ZhcmlhbnRzX3R5 cGUnLCAnc3RyaW5nJywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0 ZShtb2QsICdhY3RpdmVfdmFyaWFudHNfdHlwZV9pbmQnLCAnaW50ZWdlcicsIHNlbGYuc2VsZWN0 ZWQpCi0rICAgIGVuZCAKLSt9Ci0rR1VJLlByZXNldHMudmFyaWFudHNfdHlwZS5zZW5zaXRpdmUg PSBHVUkuUHJlc2V0cy52YXJpYW50cy52YWx1ZQotK3RlbXAgPSBkZi5nZXRfZXhlY3V0YWJsZV9w YXRoX3ByZWZlcmVuY2UoQUlTLm5hbWUpCi0rR1VJLmV4ZXMuYWxpZ25faW1hZ2Vfc3RhY2sgPSBk dC5uZXdfd2lkZ2V0KCdmaWxlX2Nob29zZXJfYnV0dG9uJyl7Ci0rICAgIHRpdGxlID0gJ2FsaWdu X2ltYWdlX3N0YWNrICcgLi4gXygnYmluYXJ5IHBhdGgnKSwKLSsgICAgdmFsdWUgPSB0ZW1wLAot KyAgICB0b29sdGlwID0gdGVtcCwKLSsgICAgaXNfZGlyZWN0b3J5ID0gZmFsc2UsCi0rICAgIGNo YW5nZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnRvb2x0aXAgPSBzZWxmLnZhbHVl IGVuZAotK30KLSt0ZW1wID0gZGYuZ2V0X2V4ZWN1dGFibGVfcGF0aF9wcmVmZXJlbmNlKEVORi5u YW1lKQotK0dVSS5leGVzLmVuZnVzZSA9IGR0Lm5ld193aWRnZXQoJ2ZpbGVfY2hvb3Nlcl9idXR0 b24nKXsKLSsgICAgdGl0bGUgPSAnZW5mdXNlICcgLi4gXygnYmluYXJ5IHBhdGgnKSwKLSsgICAg dmFsdWUgPSB0ZW1wLAotKyAgICB0b29sdGlwID0gdGVtcCwKLSsgICAgaXNfZGlyZWN0b3J5ID0g ZmFsc2UsCi0rICAgIGNoYW5nZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKSBzZWxmLnRvb2x0 aXAgPSBzZWxmLnZhbHVlIGVuZAotK30KLSt0ZW1wID0gZGYuZ2V0X2V4ZWN1dGFibGVfcGF0aF9w cmVmZXJlbmNlKEVYRi5uYW1lKQotK0dVSS5leGVzLmV4aWZ0b29sID0gZHQubmV3X3dpZGdldCgn ZmlsZV9jaG9vc2VyX2J1dHRvbicpewotKyAgICB0aXRsZSA9ICdleGlmdG9vbCAnIC4uIF8oJ2Jp bmFyeSBwYXRoJyksCi0rICAgIHZhbHVlID0gdGVtcCwKLSsgICAgdG9vbHRpcCA9IHRlbXAsCi0r ICAgIGlzX2RpcmVjdG9yeSA9IGZhbHNlLAotKyAgICBjaGFuZ2VkX2NhbGxiYWNrID0gZnVuY3Rp b24oc2VsZikgc2VsZi50b29sdGlwID0gc2VsZi52YWx1ZSBlbmQKLSt9IAotK0dVSS5leGVzLnVw ZGF0ZSA9IGR0Lm5ld193aWRnZXQoJ2J1dHRvbicpewotKyAgICBsYWJlbCA9IF8oJ3VwZGF0ZScp LAotKyAgICB0b29sdGlwID0gXygndXBkYXRlIHRoZSBiaW5hcnkgcGF0aHMgd2l0aCBjdXJyZW50 IHZhbHVlcycpLAotKyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24oKSBFeGVVcGRhdGUo e0FJUyxFTkYsRVhGfSkgZW5kCi0rfQotK3RlbXAgPSBHVUkuVGFyZ2V0LmZvcm1hdC52YWx1ZQot K2lmIHRlbXAgPT0gJ3RpZicgdGhlbiB0ZW1wID0gMQotK2Vsc2VpZiB0ZW1wID09ICdqcGcnIHRo ZW4gdGVtcCA9IDIKLStlbHNlIHRlbXAgPSAzCi0rZW5kCi0rc3RhY2tfY29tcHJlc3Npb24uYWN0 aXZlID0gdGVtcAotK2ZvciBfLHdpZGdldCBpbiBwYWlycyhHVUkuQUlTKSBkbwotKyAgICB3aWRn ZXQuc2Vuc2l0aXZlID0gR1VJLmFsaWduLnZhbHVlCi0rZW5kCi0rR1VJLlRhcmdldC5hcHBseV9z dHlsZS5zZW5zaXRpdmUgPSBHVUkuVGFyZ2V0LmF1dG9faW1wb3J0LnZhbHVlCi0rR1VJLlRhcmdl dC5jb3B5X3RhZ3Muc2Vuc2l0aXZlID0gR1VJLlRhcmdldC5hdXRvX2ltcG9ydC52YWx1ZQotK0dV SS5UYXJnZXQuYWRkX3RhZ3Muc2Vuc2l0aXZlID0gR1VJLlRhcmdldC5hdXRvX2ltcG9ydC52YWx1 ZQotKwotK2xvY2FsIGJveF9BSVMgPSBkdC5uZXdfd2lkZ2V0KCdib3gnKXsKLSsgICAgb3JpZW50 YXRpb24gPSAndmVydGljYWwnLAotKyAgICBsYWJlbF9BSVNfb3B0aW9ucywKLSsgICAgR1VJLmFs aWduLAotKyAgICBHVUkuQUlTLnJhZGlhbF9kaXN0b3J0aW9uLAotKyAgICBHVUkuQUlTLm9wdGlt aXplX2ZpZWxkLAotKyAgICBHVUkuQUlTLm9wdGltaXplX2ltYWdlX2NlbnRlciwKLSsgICAgR1VJ LkFJUy5hdXRvX2Nyb3AsCi0rICAgIEdVSS5BSVMuZGlzdG9ydGlvbiwKLSsgICAgR1VJLkFJUy5n cHUsCi0rICAgIEdVSS5BSVMuZ3JpZF9zaXplLAotKyAgICBHVUkuQUlTLmNvbnRyb2xfcG9pbnRz LAotKyAgICBHVUkuQUlTLmNvbnRyb2xfcG9pbnRzX3JlbW92ZSwKLSsgICAgR1VJLkFJUy5jb3Jy ZWxhdGlvbgotK30KLStsb2NhbCBib3hfRU5GID0gZHQubmV3X3dpZGdldCgnYm94Jyl7Ci0rICAg IG9yaWVudGF0aW9uID0gJ3ZlcnRpY2FsJywKLSsgICAgbGFiZWxfRU5GX29wdGlvbnMsCi0rICAg IEdVSS5FTkYuZXhwb3N1cmVfd2VpZ2h0LAotKyAgICBHVUkuRU5GLnNhdHVyYXRpb25fd2VpZ2h0 LAotKyAgICBHVUkuRU5GLmNvbnRyYXN0X3dlaWdodCwKLSsgICAgR1VJLkVORi5leHBvc3VyZV9v cHRpbXVtLAotKyAgICBHVUkuRU5GLmV4cG9zdXJlX3dpZHRoLAotKyAgICBHVUkuRU5GLmhhcmRf bWFza3MsCi0rICAgIEdVSS5FTkYuc2F2ZV9tYXNrcywKLSsgICAgR1VJLkVORi5jb250cmFzdF93 aW5kb3dfc2l6ZSwKLSsgICAgR1VJLkVORi5jb250cmFzdF9lZGdlX3NjYWxlLAotKyAgICBHVUku RU5GLmNvbnRyYXN0X21pbl9jdXJ2YXR1cmUsCi0rICAgIEdVSS5QcmVzZXRzLmN1cnJlbnRfcHJl c2V0LAotKyAgICBHVUkuUHJlc2V0cy5sb2FkLAotKyAgICBHVUkuUHJlc2V0cy5zYXZlCi0rfQot K2xvY2FsIGJveF9UYXJnZXQgPSBkdC5uZXdfd2lkZ2V0KCdib3gnKXsKLSsgICAgb3JpZW50YXRp b24gPSAndmVydGljYWwnLAotKyAgICBsYWJlbF90YXJnZXRfb3B0aW9ucywKLSsgICAgR1VJLlRh cmdldC5mb3JtYXQsCi0rICAgIEdVSS5UYXJnZXQuZGVwdGgsCi0rICAgIHN0YWNrX2NvbXByZXNz aW9uLAotKyAgICBsYWJlbF9kaXJlY3RvcnksCi0rICAgIEdVSS5UYXJnZXQub3V0cHV0X2RpcmVj dG9yeSwKLSsgICAgR1VJLlRhcmdldC5zb3VyY2VfbG9jYXRpb24sCi0rICAgIEdVSS5UYXJnZXQu b25fY29uZmxpY3QsCi0rICAgIEdVSS5QcmVzZXRzLnZhcmlhbnRzLAotKyAgICBHVUkuUHJlc2V0 cy52YXJpYW50c190eXBlLAotKyAgICBHVUkuVGFyZ2V0LmF1dG9faW1wb3J0LAotKyAgICBHVUku VGFyZ2V0LmFwcGx5X3N0eWxlLAotKyAgICBHVUkuVGFyZ2V0LmNvcHlfdGFncywKLSsgICAgR1VJ LlRhcmdldC5hZGRfdGFncwotK30KLStsb2NhbCBib3hfZXhlcyA9IGR0Lm5ld193aWRnZXQoJ2Jv eCcpewotKyAgICBvcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCcsCi0rICAgIEdVSS5leGVzLmFsaWdu X2ltYWdlX3N0YWNrLAotKyAgICBHVUkuZXhlcy5lbmZ1c2UsCi0rICAgIEdVSS5leGVzLmV4aWZ0 b29sLAotKyAgICBHVUkuZXhlcy51cGRhdGUKLSt9Ci0rR1VJLm9wdGlvbnNfY29udGFpbiA9IGR0 Lm5ld193aWRnZXQoJ3N0YWNrJyl7Ci0rICAgIGJveF9BSVMsCi0rICAgIGJveF9FTkYsCi0rICAg IGJveF9UYXJnZXQsCi0rICAgIGJveF9leGVzLAotKyAgICBhY3RpdmUgPSAyCi0rfQotK0dVSS5z aG93X29wdGlvbnMgPSBkdC5uZXdfd2lkZ2V0KCdjb21ib2JveCcpewotKyAgICBsYWJlbCA9IF8o J3Nob3cgb3B0aW9ucycpLAotKyAgICB0b29sdGlwID0gXygnc2hvdyBvcHRpb25zIGZvciBzcGVj aWZpZWQgYXNwZWN0IG9mIG91dHB1dCcpLAotKyAgICBzZWxlY3RlZCA9IDIsCi0rICAgICdhbGln biBpbWFnZSBzdGFjaycsICdlbmZ1c2UvZW5ibGVuZCcsICd0YXJnZXQgZmlsZScsCi0rICAgIGNo YW5nZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKQotKyAgICAgICAgR1VJLm9wdGlvbnNfY29u dGFpbi5hY3RpdmUgPSBzZWxmLnNlbGVjdGVkCi0rICAgIGVuZCwKLSsgICAgcmVzZXRfY2FsbGJh Y2sgPSBmdW5jdGlvbihzZWxmKSAKLSsgICAgICAgIHNlbGYuc2VsZWN0ZWQgPSAxCi0rICAgICAg ICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdhY3RpdmVfY3VycmVudF9wcmVzZXQnLCAnc3Ry aW5nJywgc2VsZi52YWx1ZSkgCi0rICAgICAgICBkdC5wcmVmZXJlbmNlcy53cml0ZShtb2QsICdh Y3RpdmVfY3VycmVudF9wcmVzZXRfaW5kJywgJ2ludGVnZXInLCBzZWxmLnNlbGVjdGVkKQotKyAg ICBlbmQgCi0rfQotK2xvY2FsIHN0b3JhZ2Vfd2lkZ2V0ID0gZHQubmV3X3dpZGdldCgnYm94Jykg ewotKyAgICBvcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCcsCi0rICAgIEdVSS5zaG93X29wdGlvbnMs Ci0rICAgIEdVSS5vcHRpb25zX2NvbnRhaW4KLSt9IAotKwotKy0tIFJlZ2lzdGVyIG5ldyBzdG9y YWdlIC0tCi0rZHQucmVnaXN0ZXJfc3RvcmFnZSgKLSsgICAgJ21vZHVsZV9lbmZ1c2VBZHZhbmNl ZCcsIC0tTW9kdWxlIG5hbWUKLSsgICAgXygnRFJJIG9yIERGRiBpbWFnZScpLCAtLU5hbWUKLSsg ICAgc2hvd19zdGF0dXMsIC0tc3RvcmU6IGNhbGxlZCBvbmNlIHBlciBleHBvcnRlZCBpbWFnZQot KyAgICBtYWluLCAtLWZpbmFsaXplOiBjYWxsZWQgb25jZSB3aGVuIGFsbCBpbWFnZXMgaGF2ZSBm aW5pc2hlZCBleHBvcnRpbmcKLSsgICAgc3VwcG9ydF9mb3JtYXQsIC0tc3VwcG9ydGVkCi0rICAg IGluaXRpYWwsIC0taW5pdGlhbGl6ZQotKyAgICBzdG9yYWdlX3dpZGdldAotKykKLSsKLStpZiBk dC5wcmVmZXJlbmNlcy5yZWFkKG1vZCwgJ2Jpbl9leGlzdHMnLCAnYm9vbCcpIHRoZW4gCi0rICAg IEdVSS5vcHRpb25zX2NvbnRhaW4uYWN0aXZlID0gMgotKyAgICBHVUkuc2hvd19vcHRpb25zLnNl bnNpdGl2ZSA9IHRydWUKLStlbHNlCi0rICAgIEdVSS5vcHRpb25zX2NvbnRhaW4uYWN0aXZlID0g NAotKyAgICBHVUkuc2hvd19vcHRpb25zLnNlbnNpdGl2ZSA9IGZhbHNlCi0rZW5kCi0rCi0rc2Ny aXB0X2RhdGEuZGVzdHJveSA9IGRlc3Ryb3kKLSsKLStyZXR1cm4gc2NyaXB0X2RhdGEKLWRpZmYg LXVyTnIgZGFya3RhYmxlLTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRy aWIvZmFjZV9yZWNvZ25pdGlvbi5sdWEgZGFya3RhYmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEt c2NyaXB0cy9jb250cmliL2ZhY2VfcmVjb2duaXRpb24ubHVhCi0tLS0gZGFya3RhYmxlLTUuNi4w LW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZmFjZV9yZWNvZ25pdGlvbi5s dWEJMjAyNi0wNi0xMiAwNTowNjozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBkYXJrdGFibGUtNS42 LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZmFjZV9yZWNvZ25pdGlvbi5sdWEJ MjAyNi0wOS0wMSAwOTo0MjowNC4zNzE1NTI2ODEgKzAyMDAKLUBAIC0zMTEsMjUgKzMxMSwyNiBA QAotICAgICAgICAgICAgIGlmIGlnbm9yZUJ5VGFnIChpbWcsIGlnbm9yZVRhZ3MpIHRoZW4KLSAg ICAgICAgICAgICAgIGR0LnByaW50X2xvZygiRmFjZSByZWNvZ25pdGlvbjogSWdub3JpbmcgaW1h Z2Ugd2l0aCBJRCAiIC4uIGltZy5pZCkKLSAgICAgICAgICAgICBlbHNlCi0rICAgICAgICAgICAg ICBsb2NhbCB0YWdfbmFtZSA9IHQKLSAgICAgICAgICAgICAgIC0tIENoZWNrIG9mIHVucmVjb2du aXplZCB1bmtub3duX3BlcnNvbgotLSAgICAgICAgICAgICAgaWYgdCA9PSAidW5rbm93bl9wZXJz b24iIHRoZW4KLS0gICAgICAgICAgICAgICAgdCA9IHVua25vd25UYWcKLSsgICAgICAgICAgICAg IGlmIHRhZ19uYW1lID09ICJ1bmtub3duX3BlcnNvbiIgdGhlbgotKyAgICAgICAgICAgICAgICB0 YWdfbmFtZSA9IHVua25vd25UYWcKLSAgICAgICAgICAgICAgIGVuZAotICAgICAgICAgICAgICAg LS0gQ2hlY2sgb2YgdW5yZWNvZ25pemVkIG5vX3BlcnNvbnNfZm91bmQKLS0gICAgICAgICAgICAg IGlmIHQgPT0gIm5vX3BlcnNvbnNfZm91bmQiIHRoZW4KLS0gICAgICAgICAgICAgICAgdCA9IG5v bnBlcnNvbnNmb3VuZFRhZwotKyAgICAgICAgICAgICAgaWYgdGFnX25hbWUgPT0gIm5vX3BlcnNv bnNfZm91bmQiIHRoZW4KLSsgICAgICAgICAgICAgICAgdGFnX25hbWUgPSBub25wZXJzb25zZm91 bmRUYWcKLSAgICAgICAgICAgICAgIGVuZAotLSAgICAgICAgICAgICAgaWYgdCB+PSAiIiBhbmQg dCB+PSBuaWwgdGhlbgotLSAgICAgICAgICAgICAgICBpZiBjYXRlZ29yeVRhZ1N0cmluZyB+PSAi IiBhbmQgdCB+PSBub25wZXJzb25zZm91bmRUYWcgdGhlbgotLSAgICAgICAgICAgICAgICAgIHQg PSBjYXRlZ29yeVRhZ1N0cmluZyAuLiAifCIgLi4gdAotKyAgICAgICAgICAgICAgaWYgdGFnX25h bWUgfj0gIiIgYW5kIHRhZ19uYW1lIH49IG5pbCB0aGVuCi0rICAgICAgICAgICAgICAgIGlmIGNh dGVnb3J5VGFnU3RyaW5nIH49ICIiIGFuZCB0YWdfbmFtZSB+PSBub25wZXJzb25zZm91bmRUYWcg dGhlbgotKyAgICAgICAgICAgICAgICAgIHRhZ19uYW1lID0gY2F0ZWdvcnlUYWdTdHJpbmcgLi4g InwiIC4uIHRhZ19uYW1lCi0gICAgICAgICAgICAgICAgIGVuZCAgICAgICAgICAgICAgICAgIAot LSAgICAgICAgICAgICAgICBkdC5wcmludF9sb2cgKCJJbWdJZDoiIC4uIGltZy5pZCAuLiAiIFRh ZzoiLi4gdCkKLSsgICAgICAgICAgICAgICAgZHQucHJpbnRfbG9nICgiSW1nSWQ6IiAuLiBpbWcu aWQgLi4gIiBUYWc6Ii4uIHRhZ19uYW1lKQotICAgICAgICAgICAgICAgICAtLSBDcmVhdGUgdGFn IGlmIGl0IGRvZXMgbm90IGV4aXN0Ci0tICAgICAgICAgICAgICAgIGlmIHRhZ3NfbGlzdFt0XSA9 PSBuaWwgdGhlbgotLSAgICAgICAgICAgICAgICAgIHRhZyA9IGR0LnRhZ3MuY3JlYXRlICh0KQot LSAgICAgICAgICAgICAgICAgIHRhZ3NfbGlzdFt0XSA9IHRhZwotKyAgICAgICAgICAgICAgICBp ZiB0YWdzX2xpc3RbdGFnX25hbWVdID09IG5pbCB0aGVuCi0rICAgICAgICAgICAgICAgICAgdGFn ID0gZHQudGFncy5jcmVhdGUgKHRhZ19uYW1lKQotKyAgICAgICAgICAgICAgICAgIHRhZ3NfbGlz dFt0YWdfbmFtZV0gPSB0YWcKLSAgICAgICAgICAgICAgICAgZWxzZQotLSAgICAgICAgICAgICAg ICAgIHRhZyA9IHRhZ3NfbGlzdFt0XQotKyAgICAgICAgICAgICAgICAgIHRhZyA9IHRhZ3NfbGlz dFt0YWdfbmFtZV0KLSAgICAgICAgICAgICAgICAgZW5kCi0gICAgICAgICAgICAgICAgIGltZzph dHRhY2hfdGFnICh0YWcpCi0gICAgICAgICAgICAgICBlbmQKLWRpZmYgLXVyTnIgZGFya3RhYmxl LTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZ2ltcC5sdWEgZGFy a3RhYmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2dpbXAubHVhCi0t LS0gZGFya3RhYmxlLTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIv Z2ltcC5sdWEJMjAyNi0wNi0xMiAwNTowNjozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBkYXJrdGFi bGUtNS42LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvZ2ltcC5sdWEJMjAyNi0w OS0wMSAwOTo0MjowNC4zNzE5MjQzNTkgKzAyMDAKLUBAIC0xNDIsOCArMTQyLDggQEAKLSAgIGlt Z19saXN0ID0gIiIKLSAKLSAgIGZvciBfLGV4cF9pbWcgaW4gcGFpcnMoaW1hZ2VfdGFibGUpIGRv Ci0tICAgIGV4cF9pbWcgPSBkZi5zYW5pdGl6ZV9maWxlbmFtZShleHBfaW1nKQotLSAgICBpbWdf bGlzdCA9IGltZ19saXN0IC4uZXhwX2ltZy4uICIgIgotKyAgICBsb2NhbCBzYW5pdGl6ZWQgPSBk Zi5zYW5pdGl6ZV9maWxlbmFtZShleHBfaW1nKQotKyAgICBpbWdfbGlzdCA9IGltZ19saXN0IC4u c2FuaXRpemVkLi4gIiAiCi0gICBlbmQKLSAKLSAgIGR0LnByaW50KF8oImxhdW5jaGluZyBHSU1Q Li4uIikpCi1kaWZmIC11ck5yIGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5hbC9sdWEt c2NyaXB0cy9jb250cmliL0hEUk1lcmdlLmx1YSBkYXJrdGFibGUtNS42LjAvc3JjL2V4dGVybmFs L2x1YS1zY3JpcHRzL2NvbnRyaWIvSERSTWVyZ2UubHVhCi0tLS0gZGFya3RhYmxlLTUuNi4wLW9y aWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL2NvbnRyaWIvSERSTWVyZ2UubHVhCTIwMjYtMDYt MTIgMDU6MDY6MzguMDAwMDAwMDAwICswMjAwCi0rKysgZGFya3RhYmxlLTUuNi4wL3NyYy9leHRl cm5hbC9sdWEtc2NyaXB0cy9jb250cmliL0hEUk1lcmdlLmx1YQkyMDI2LTA5LTAxIDA5OjQyOjA0 LjM2OTI4OTAyOCArMDIwMAotQEAgLTI3Nyw5ICsyNzcsOSBAQAotICAgICBsb2NhbCBzZXRfdGFn ID0gR1VJLlRhcmdldC5hZGRfdGFncy50ZXh0Ci0gICAgIGlmIHNldF90YWcgfj0gbmlsIHRoZW4g LS0gYWRkIGFkZGl0aW9uYWwgdXNlci1zcGVjaWZpZWQgdGFncwotICAgICAgIGZvciB0YWcgaW4g c3RyaW5nLmdtYXRjaChzZXRfdGFnLCAnW14sXSsnKSBkbwotLSAgICAgICAgdGFnID0gQ2xlYW5T cGFjZXModGFnKQotLSAgICAgICAgdGFnID0gZHQudGFncy5jcmVhdGUodGFnKQotLSAgICAgICAg ZHQudGFncy5hdHRhY2godGFnLCBpbXBvcnRlZCkgCi0rICAgICAgICBsb2NhbCBjbGVhbmVkX3Rh ZyA9IENsZWFuU3BhY2VzKHRhZykKLSsgICAgICAgIGNsZWFuZWRfdGFnID0gZHQudGFncy5jcmVh dGUoY2xlYW5lZF90YWcpCi0rICAgICAgICBkdC50YWdzLmF0dGFjaChjbGVhbmVkX3RhZywgaW1w b3J0ZWQpIAotICAgICAgIGVuZAotICAgICBlbmQKLSAgICAgZHQucHJpbnQoXygnSERSTWVyZ2Ug Y29tcGxldGVkIHN1Y2Nlc3NmdWxseScpKQotZGlmZiAtdXJOciBkYXJrdGFibGUtNS42LjAtb3Jp Zy9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9pbWFnZV9zdGFjay5sdWEgZGFya3Rh YmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250cmliL2ltYWdlX3N0YWNrLmx1 YQotLS0tIGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy9jb250 cmliL2ltYWdlX3N0YWNrLmx1YQkyMDI2LTA2LTEyIDA1OjA2OjM4LjAwMDAwMDAwMCArMDIwMAot KysrIGRhcmt0YWJsZS01LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvY29udHJpYi9pbWFn ZV9zdGFjay5sdWEJMjAyNi0wOS0wMSAwOTo0MjowNC4zNzIyNDY1ODUgKzAyMDAKLUBAIC0zMjMs OCArMzIzLDggQEAKLSAgIGR0LnByaW50X2xvZygiaW1hZ2UgbGlzdCBpcyAiIC4uIGltZ19saXN0 KQotICAgZmlsZXMgPSBkdS5zcGxpdChpbWdfbGlzdCwgIiAiKQotICAgZm9yIF8sZiBpbiBpcGFp cnMoZmlsZXMpIGRvCi0tICAgIGYgPSBzdHJpbmcuZ3N1YihmLCAnW1wnXCJdJywgIiIpCi0tICAg IG9zLnJlbW92ZShmKQotKyAgICBsb2NhbCBjbGVhbmVkID0gc3RyaW5nLmdzdWIoZiwgJ1tcJ1wi XScsICIiKQotKyAgICBvcy5yZW1vdmUoY2xlYW5lZCkKLSAgIGVuZAotIGVuZAotIAotZGlmZiAt dXJOciBkYXJrdGFibGUtNS42LjAtb3JpZy9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlwdHMvdG9vbHMv Z2V0X2xpYmRvYy5sdWEgZGFya3RhYmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90 b29scy9nZXRfbGliZG9jLmx1YQotLS0tIGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5h bC9sdWEtc2NyaXB0cy90b29scy9nZXRfbGliZG9jLmx1YQkyMDI2LTA2LTEyIDA1OjA2OjM4LjAw MDAwMDAwMCArMDIwMAotKysrIGRhcmt0YWJsZS01LjYuMC9zcmMvZXh0ZXJuYWwvbHVhLXNjcmlw dHMvdG9vbHMvZ2V0X2xpYmRvYy5sdWEJMjAyNi0wOS0wMSAwOTo0MjowNC4zNzI2OTYyMzAgKzAy MDAKLUBAIC00MCw4ICs0MCw4IEBACi0gLS0gbG9vcCB0aHJvdWdoIHRoZSBsaWJyYXJpZXMKLSAK LSBmb3IgbGluZSBpbiBvdXRwdXQ6bGluZXMoKSBkbwotLSAgbGluZSA9IHN0cmluZy5nc3ViKGxp bmUsICIvIiwgIi4iKQotLSAgbG9jYWwgbGliX25hbWUgPSBsaW5lOnN1YigzLC01KQotKyAgbG9j YWwgY2xlYW5lZF9saW5lID0gc3RyaW5nLmdzdWIobGluZSwgIi8iLCAiLiIpCi0rICBsb2NhbCBs aWJfbmFtZSA9IGNsZWFuZWRfbGluZTpzdWIoMywtNSkKLSAgIGlmIGxpYl9uYW1lOmxlbigpID4g MiB0aGVuCi0gICAgIGxpYl9uYW1lID0gImxpYi8iIC4uIGxpYl9uYW1lCi0gICAgIGxvY2FsIGxp YiA9IHJlcXVpcmUobGliX25hbWUpCi1kaWZmIC11ck5yIGRhcmt0YWJsZS01LjYuMC1vcmlnL3Ny Yy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9nZXRfbGliX21hbnBhZ2VzLmx1YSBkYXJrdGFi bGUtNS42LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL2dldF9saWJfbWFucGFnZXMu bHVhCi0tLS0gZGFya3RhYmxlLTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rv b2xzL2dldF9saWJfbWFucGFnZXMubHVhCTIwMjYtMDYtMTIgMDU6MDY6MzguMDAwMDAwMDAwICsw MjAwCi0rKysgZGFya3RhYmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9n ZXRfbGliX21hbnBhZ2VzLmx1YQkyMDI2LTA5LTAxIDA5OjQyOjA0LjM3MjUzMDQzOSArMDIwMAot QEAgLTYzLDggKzYzLDggQEAKLSAtLSBsb29wIHRocm91Z2ggdGhlIGxpYnJhcmllcwotIAotIGZv ciBsaW5lIGluIG91dHB1dDpsaW5lcygpIGRvCi0tICBsaW5lID0gc3RyaW5nLmdzdWIobGluZSwg Ii8iLCAiLiIpCi0tICBsb2NhbCBsaWJfbmFtZSA9IGxpbmU6c3ViKDMsLTUpCi0rICBsb2NhbCBj bGVhbmVkX2xpbmUgPSBzdHJpbmcuZ3N1YihsaW5lLCAiLyIsICIuIikKLSsgIGxvY2FsIGxpYl9u YW1lID0gY2xlYW5lZF9saW5lOnN1YigzLC01KQotICAgaWYgbGliX25hbWU6bGVuKCkgPiAyIHRo ZW4KLSAgICAgbGliX25hbWUgPSAibGliLyIgLi4gbGliX25hbWUKLSAgICAgbG9jYWwgbGliID0g cmVxdWlyZShsaWJfbmFtZSkKLWRpZmYgLXVyTnIgZGFya3RhYmxlLTUuNi4wLW9yaWcvc3JjL2V4 dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL3NjcmlwdF9tYW5hZ2VyLmx1YSBkYXJrdGFibGUtNS42 LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL3NjcmlwdF9tYW5hZ2VyLmx1YQotLS0t IGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9zY3Jp cHRfbWFuYWdlci5sdWEJMjAyNi0wNi0xMiAwNTowNjozOC4wMDAwMDAwMDAgKzAyMDAKLSsrKyBk YXJrdGFibGUtNS42LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL3NjcmlwdF9tYW5h Z2VyLmx1YQkyMDI2LTA5LTAxIDA5OjQyOjA0LjM3Mjg5NzY3OSArMDIwMAotQEAgLTk0Niw3ICs5 NDYsOSBAQAotICAgICAgICAgICBzbS53aWRnZXRzLmZvbGRlcl9zZWxlY3Rvci5zZWxlY3RlZCA9 IGkKLSAgICAgICAgICAgYnJlYWsKLSAgICAgICAgIGVuZAotLSAgICAgICAgaSA9IGkgKyAxCi0r ICAgICAgICAtLSBMdWEgNS41OiBmb3IgbG9vcCBjb250cm9sIHZhcmlhYmxlcyBhcmUgcmVhZC1v bmx5LiBUaGlzIGluY3JlbWVudAotKyAgICAgICAgLS0gd2FzIGFsd2F5cyBhIG5vLW9wIHNpbmNl IG51bWVyaWMgZm9yIGxvb3BzIHVzZSBhbiBpbnRlcm5hbCBjb3VudGVyLgotKyAgICAgICAgLS0g aSA9IGkgKyAxCi0gICAgICAgZW5kCi0gCi0gICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJjbGVh cmluZyB0ZXh0IGZpZWxkcyIpCi1kaWZmIC11ck5yIGRhcmt0YWJsZS01LjYuMC1vcmlnL3NyYy9l eHRlcm5hbC9sdWEtc2NyaXB0cy90b29scy9zY3JpcHRfbWFuYWdlci5sdWEub3JpZyBkYXJrdGFi bGUtNS42LjAvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRzL3Rvb2xzL3NjcmlwdF9tYW5hZ2VyLmx1 YS5vcmlnCi0tLS0gZGFya3RhYmxlLTUuNi4wLW9yaWcvc3JjL2V4dGVybmFsL2x1YS1zY3JpcHRz L3Rvb2xzL3NjcmlwdF9tYW5hZ2VyLmx1YS5vcmlnCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAw MDAwICswMTAwCi0rKysgZGFya3RhYmxlLTUuNi4wL3NyYy9leHRlcm5hbC9sdWEtc2NyaXB0cy90 b29scy9zY3JpcHRfbWFuYWdlci5sdWEub3JpZwkyMDI2LTA2LTEyIDA1OjA2OjM4LjAwMDAwMDAw MCArMDIwMAotQEAgLTAsMCArMSwxNjU0IEBACi0rLS1bWwotKyAgVGhpcyBmaWxlIGlzIHBhcnQg b2YgZGFya3RhYmxlLAotKyAgY29weXJpZ2h0IChjKSAyMDE4LCAyMDIwLCAyMDIzLCAyMDI0IEJp bGwgRmVyZ3Vzb24gPHdwZmVyZ3Vzb25AZ21haWwuY29tPgotKyAgCi0rICBkYXJrdGFibGUgaXMg ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotKyAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKLSsgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJz aW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0rICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgotKyAgCi0rICBkYXJrdGFibGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0rICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0rICBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKyAgCi0rICBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKyAgYWxv bmcgd2l0aCBkYXJrdGFibGUuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCi0rXV0KLSstLVtbCi0rICAgIHNjcmlwdF9tYW5hZ2VyLmx1YSAtIGEgdG9vbCBmb3Ig bWFuYWdpbmcgdGhlIGRhcmt0YWJsZSBsdWEgc2NyaXB0cwotKwotKyAgICBzY3JpcHRfbWFuYWdl ciBpcyBkZXNpZ25lZCB0byBiZSBjYWxsZWQgZnJvbSB0aGUgdXNlcnMgbHVhcmMgZmlsZSBhbmQg dXNlZCB0bwotKyAgICBtYW5hZ2UgdGhlIGx1YSBzY3JpcHRzLgotKwotKyAgICBPbiBzdGFydHVw IHNjcmlwdF9tYW5hZ2VyIHNjYW5zIHRoZSBsdWEgc2NyaXB0cyBkaXJlY3RvcnkgdG8gc2VlIHdo YXQgc2NyaXB0cyBhcmUgcHJlc2VudC4KLSsgICAgU2NyaXB0cyBhcmUgc29ydGVkIGJ5ICdmb2xk ZXInIGJhc2VkIG9uIHdoYXQgc3ViLWRpcmVjdG9yeSB0aGV5IGFyZSBpbi4gIFdpdGggbm8gCi0r ICAgIGFkZGl0aW9uYWwgc2NyaXB0IHJlcG9zaXRvcmllcyBpaW5zdGFsbGVkLCB0aGUgZm9sZGVy cyBhcmUgY29udHJpYiwgZXhhbXBsZXMsIG9mZmljaWFsCi0rICAgIGFuZCB0b29scy4gIFdoZW4g YSBmb2xkZXIgaXMgc2VsZWN0ZWQgdGhlIGJ1dHRvbnMgc2hvdyB0aGUgc2NyaXB0IG5hbWUgYW5k IHdoZXRoZXIgdGhlCi0rICAgIHNjcmlwdCBpcyBzdGFydGVkIG9yIHN0b3BwZWQuICBUaGUgYnV0 dG9uIGlzIGEgdG9nZ2xlLCBzbyBpZiB0aGUgc2NyaXB0IGlzIHN0b3BwZWQgY2xpY2sgCi0rICAg IHRoZSBidXR0b24gdG8gc3RhcnQgaXQgYW5kIHZpY2UgdmVyc2EuCi0rCi0rICAgIEZlYXR1cmVz Ci0rCi0rICAgICogdGhlIG51bWJlciBvZiBzY3JpcHQgYnV0dG9ucyBzaG93biBjYW4gYmUgY2hh bmdlZCB0byBhbnkgbnVtYmVyIGJldHdlZW4gNSBhbmQgMjAuICBUaGUgCi0rICAgICAgZGVmYXVs dCBpcyAxMCBidXR0b25zLiAgVGhpcyBjYW4gYmUgY2hhbmdlZCBpbiB0aGUgY29uZmlndXJhdGlv biBhY3Rpb24uCi0rCi0rICAgICogYWRkaXRpb25hbCByZXBvc2l0b3JpZXMgb2Ygc2NyaXB0cyBt YXkgYmUgaW5zdGFsbGVkIHVzaW5nIGZyb20gdGhlIGluc3RhbGwvdXBkYXRlIGFjdGlvbi4KLSsK LSsgICAgKiBpbnN0YWxsZWQgc2NyaXB0cyBjYW4gYmUgdXBkYXRlZCBmcm9tIHRoZSBpbnN0YWxs L3VwZGF0ZSBhY3Rpb24uICBUaGlzIGluY2x1ZGVzIGV4dHJhCi0rICAgICAgcmVwb3NpdG9yaWVz IHRoYXQgaGF2ZSBiZWVuIGluc3RhbGxlZC4KLSsKLSsgICAgKiB0aGUgc2NyaXB0cyBjYW4gYmUg ZGlzYWJsZWQgaWYgZGVzaXJlZCBmcm9tIHRoZSBpbnN0YWxsL3VwZGF0ZSBhY3Rpb24uICBUaGlz IGNhbiBvbmx5Ci0rICAgICAgYmUgcmV2ZXJzZWQgbWFudWFsbHkuICBUbyBlbmFibGUgdGhlICJE aXNhYmxlIFNjcmlwdHMiIGJ1dHRvbiwgY2hlY2sgdGhlIGNoZWNrYm94IHRvCi0rICAgICAgZW5k YWJsZSBpdC4gIFRoaXMgaXMgdG8gcHJldmVudCBhY2NpZGVudGFsbHkgZGlzYWJsaW5nIHRoZSBz Y3JpcHRzLiAgQ2xpY2sgdGhlIAotKyAgICAgICJEaXNhYmxlIFNjcmlwdHMiIGJ1dHRvbiBhbmQg dGhlIGx1YXJjIGZpbGUgaXMgcmVuYW1lZCB0byBsdWFyYy5kaXNhYmxlLiAgSWYgYXQKLSsgICAg ICBhIGxhdGVyIHRpbWUgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBzY3JpcHRzIGFnYWluLCBzaW1w bHkgcmVuYW1lIHRoZSBsdWFyYy5kaXNhYmxlZCAKLSsgICAgICBmaWxlIHRvIGx1YXJjIGFuZCB0 aGUgc2NyaXB0cyB3aWxsIHJ1bi4KLSsKLStdXQotKwotKwotK2xvY2FsIGR0ID0gcmVxdWlyZSAi ZGFya3RhYmxlIgotK2xvY2FsIGR1ID0gcmVxdWlyZSAibGliL2R0dXRpbHMiCi0rbG9jYWwgZGYg PSByZXF1aXJlICJsaWIvZHR1dGlscy5maWxlIgotK2xvY2FsIGRzID0gcmVxdWlyZSAibGliL2R0 dXRpbHMuc3RyaW5nIgotK2xvY2FsIGR0c3lzID0gcmVxdWlyZSAibGliL2R0dXRpbHMuc3lzdGVt IgotK2xvY2FsIGxvZyA9IHJlcXVpcmUgImxpYi9kdHV0aWxzLmxvZyIKLStsb2NhbCBkdGRlYnVn ID0gcmVxdWlyZSAiZGFya3RhYmxlLmRlYnVnIgotKwotK2xvY2FsIGdldHRleHQgPSBkdC5nZXR0 ZXh0LmdldHRleHQKLSsKLStsb2NhbCBmdW5jdGlvbiBfKG1zZ2lkKQotKyAgICByZXR1cm4gZ2V0 dGV4dChtc2dpZCkKLStlbmQKLSsKLSstLSBmaWd1cmUgb3V0IHdoZXJlIHdlIGFyZSBydW5uaW5n IGZyb20KLSsKLStsb2NhbCBpbmZvID0gZGVidWcuZ2V0aW5mbygxLCAiUyIpCi0rbG9jYWwgc2Ny aXB0c19wYXRoID0gaW5mby5zb3VyY2U6c3ViKDIpCi0rCi0rLS0gYXNzdW1lIHVzZXIgYmFzZWQK LStsb2NhbCBzeXN0ZW1fYmFzZWQgPSBmYWxzZQotKwotK2lmIHN0cmluZy5tYXRjaChzY3JpcHRz X3BhdGgsIGRzLnNhbml0aXplX2x1YShkdC5jb25maWd1cmF0aW9uLmRhdGFfZGlyKSkgdGhlbgot KyAgbG9nLm1zZyhsb2cuaW5mbywgInNjcmlwdF9tYW5hZ2VyIHVzaW5nIHN5c3RlbSBiYXNlZCBz Y3JpcHRzIikKLSsgIHN5c3RlbV9iYXNlZCA9IHRydWUKLStlbmQKLSsKLSstLSBhcGkgY2hlY2sK LSsKLSstLSBkdS5jaGVja19taW5fYXBpX3ZlcnNpb24oIjkuMy4wIiwgInNjcmlwdF9tYW5hZ2Vy IikKLSsKLSstLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g Ci0rLS0gQyBPIE4gUyBUIEEgTiBUIFMKLSstLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gCi0rCi0rLS0gc2NyaXB0X21hbmFnZXIgcmVxdWlyZWQgQVBJIHZl cnNpb24KLStsb2NhbCBTTV9BUElfVkVSX1JFUUQgPGNvbnN0PiA9ICI5LjcuMCIKLSsKLSstLSBw YXRoIHNlcGFyYXRvcgotK2xvY2FsIFBTIDxjb25zdD4gPSBkdC5jb25maWd1cmF0aW9uLnJ1bm5p bmdfb3MgPT0gIndpbmRvd3MiIGFuZCAiXFwiIG9yICIvIgotKwotKy0tIGNvbW1hbmQgc2VwYXJh dG9yCi0rbG9jYWwgQ1MgPGNvbnN0PiA9IGR0LmNvbmZpZ3VyYXRpb24ucnVubmluZ19vcyA9PSAi d2luZG93cyIgYW5kICImIiBvciAiOyIKLSsKLStsb2NhbCBNT0RVTEUgPGNvbnN0PiA9ICJzY3Jp cHRfbWFuYWdlciIKLSsKLStsb2NhbCBNSU5fQlVUVE9OU19QRVJfUEFHRSA8Y29uc3Q+ID0gNQot K2xvY2FsIE1BWF9CVVRUT05TX1BFUl9QQUdFIDxjb25zdD4gPSAyMAotK2xvY2FsIERFRkFVTFRf QlVUVE9OU19QRVJfUEFHRSA8Y29uc3Q+ID0gMTAKLSsKLStsb2NhbCBERUZBVUxUX0xPR19MRVZF TCA8Y29uc3Q+ID0gbG9nLmluZm8KLSsKLStsb2NhbCBVU0VSX0xVQV9ESVIgPGNvbnN0PiA9IGR0 LmNvbmZpZ3VyYXRpb24uY29uZmlnX2RpciAuLiBQUyAuLiAibHVhIgotK2xvY2FsIFNZU1RFTV9M VUFfRElSIDxjb25zdD4gPSBkdC5jb25maWd1cmF0aW9uLmRhdGFfZGlyIC4uIFBTIC4uICJsdWEt c2NyaXB0cyIKLSsKLStsb2NhbCBMVUFfU0NSSVBUX1JFUE8gPGNvbnN0PiA9ICJodHRwczovL2dp dGh1Yi5jb20vZGFya3RhYmxlLW9yZy9sdWEtc2NyaXB0cy5naXQiCi0rCi0rbG9jYWwgTFVBX0FQ SV9WRVIgPGNvbnN0PiA9ICJBUEktIiAuLiBkdC5jb25maWd1cmF0aW9uLmFwaV92ZXJzaW9uX3N0 cmluZwotKwotKy0tIGxvY2FsIFBPV0VSX0lDT04gPSBkdC5jb25maWd1cmF0aW9uLmNvbmZpZ19k aXIgLi4gIi9sdWEvZGF0YS9kYXRhL2ljb25zL3Bvd2VyLnBuZyIKLStsb2NhbCBVU0VSX1BPV0VS X0lDT04gPGNvbnN0PiA9IGR0LmNvbmZpZ3VyYXRpb24uY29uZmlnX2RpciAuLiAiL2x1YS9kYXRh L2ljb25zL3BhdGgyMC5wbmciCi0rbG9jYWwgVVNFUl9CTEFOS19JQ09OIDxjb25zdD4gPSBkdC5j b25maWd1cmF0aW9uLmNvbmZpZ19kaXIgLi4gIi9sdWEvZGF0YS9pY29ucy9ibGFuazIwLnBuZyIK LSsKLStsb2NhbCBTWVNURU1fUE9XRVJfSUNPTiA8Y29uc3Q+ID0gZHQuY29uZmlndXJhdGlvbi5k YXRhX2RpciAuLiAiL2x1YS1zY3JpcHRzL2RhdGEvaWNvbnMvcGF0aDIwLnBuZyIKLStsb2NhbCBT WVNURU1fQkxBTktfSUNPTiA8Y29uc3Q+ID0gZHQuY29uZmlndXJhdGlvbi5kYXRhX2RpciAuLiAi L2x1YS1zY3JpcHRzL2RhdGEvaWNvbnMvYmxhbmsyMC5wbmciCi0rCi0rbG9jYWwgTFVBX0RJUiA9 IFVTRVJfTFVBX0RJUgotK2xvY2FsIFBPV0VSX0lDT04gPSBVU0VSX1BPV0VSX0lDT04KLStsb2Nh bCBCTEFOS19JQ09OID0gVVNFUl9CTEFOS19JQ09OCi0rCi0raWYgc3lzdGVtX2Jhc2VkIHRoZW4K LSsgIExVQV9ESVIgPSBTWVNURU1fTFVBX0RJUgotKyAgUE9XRVJfSUNPTiA9IFNZU1RFTV9QT1dF Ul9JQ09OCi0rICBCTEFOS19JQ09OID0gU1lTVEVNX0JMQU5LX0lDT04KLStlbmQKLSstLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gCi0rLS0gUCBSIEUgRiBF IFIgRSBOIEMgRSBTCi0rLS0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAt IC0gLSAtIAotKwotK2R0LnByZWZlcmVuY2VzLnJlZ2lzdGVyKE1PRFVMRSwgImRpc2FibGVfc2Ny aXB0cyIsICJib29sIiwKLSsgIF8oImRpc2FibGUgTHVhIHNjcmlwdHMiKSwKLSsgIF8oImRvIG5v dCBydW4gdGhlIEx1YSBzY3JpcHRzIiksCi0rICAgIGZhbHNlKQotKwotKyAgaWYgZHQucHJlZmVy ZW5jZXMucmVhZChNT0RVTEUsICJkaXNhYmxlX3NjcmlwdHMiLCAiYm9vbCIpIHRoZW4KLSsgICAg cmV0dXJuCi0rICBlbmQKLSsKLStkdC5wcmVmZXJlbmNlcy5yZWdpc3RlcihNT0RVTEUsICJjaGVj a191cGRhdGUiLCAiYm9vbCIsCi0rICBfKCJjaGVjayBmb3IgdXBkYXRlZCBzY3JpcHRzIG9uIHN0 YXJ0IHVwIiksIAotKyAgXygiYXV0b21hdGljYWxseSB1cGRhdGUgc2NyaXB0cyB0byBjb3JyZWN0 IHZlcnNpb24iKSwgCi0rICB0cnVlKQotKwotK2xvY2FsIGNoZWNrX2Zvcl91cGRhdGVzID0gZHQu cHJlZmVyZW5jZXMucmVhZChNT0RVTEUsICJjaGVja191cGRhdGUiLCAiYm9vbCIpCi0rCi0rLS0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAotKy0tIEwgTyBH ICBMIEUgViBFIEwKLSstLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gCi0rCi0rbG9jYWwgb2xkX2xvZ19sZXZlbCA9IGxvZy5sb2dfbGV2ZWwoKQotKwotK2xv Zy5sb2dfbGV2ZWwoREVGQVVMVF9MT0dfTEVWRUwpCi0rCi0rLS0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAotKy0tIE4gQSBNIEUgIFMgUCBBIEMgRQotKy0t IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAKLSsKLStsb2Nh bCBzY3JpcHRfbWFuYWdlciA9IHt9Ci0rbG9jYWwgc20gPSBzY3JpcHRfbWFuYWdlcgotKwotK3Nt LmV4ZWN1dGFibGVzID0ge30KLStzbS5leGVjdXRhYmxlcy5naXQgPSBkZi5jaGVja19pZl9iaW5f ZXhpc3RzKCJnaXQiKQotKwotK3NtLm1vZHVsZV9pbnN0YWxsZWQgPSBmYWxzZQotK3NtLmV2ZW50 X3JlZ2lzdGVyZWQgPSBmYWxzZQotKwotKy0tIHNldCB1cCB0YWJsZXMgdG8gY29udGFpbiBhbGwg dGhlIHdpZGdldHMgYW5kIGNob2ljZXMKLSsKLStzbS53aWRnZXRzID0ge30KLStzbS5mb2xkZXJz ID0ge30KLStzbS50cmFuc2xhdGVkX2ZvbGRlcnMgPSB7fQotKwotKy0tIHNldCBsb2cgbGV2ZWwg Zm9yIGZ1bmN0aW9ucwotKwotK3NtLmxvZ19sZXZlbCA9IERFRkFVTFRfTE9HX0xFVkVMCi0rCi0r LS1bWwotKwotKyAgc20uc2NyaXB0cyBpcyBhIHRhYmxlIG9mIHRhYmxlcyBmb3IgY29udGFpbmlu ZyB0aGUgc2NyaXB0cwotKyAgSXQgaXMgb3JnYW5pemVkIGFzIGludG8gZm9sZGVyIChmb2xkZXIp IHN1YnRhYmxlcyBjb250YWluaW5nCi0rICBlYWNoIHNjcmlwdCBkZWZpbml0aW9uLCB3aGljaCBp cyBhIHRhYmxlCi0rCi0rICBzbS5zY3JpcHRzLQotKyAgICAgICAgICAgIHwKLSsgICAgICAgICAg ICAtIGZvbGRlci0tLS0tLS0tLS0tLXwKLSsgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAg ICAgLSBzY3JpcHQKLSsgICAgICAgICAgICAtIGZvbGRlci0tLS18ICAgICAgIHwKLSsgICAgICAg ICAgICAgICAgICAgICAgICAgIC0gc2NyaXB0fAotKyAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgICAgICAtIHNjcmlwdAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgLSBzY3JpcHR8Ci0r Ci0rICBhbmQgYSBzY3JpcHQgdGFibGUgbG9va3MgbGlrZQotKwotKyAgbmFtZSAgICAgICAgICB0 aGUgbmFtZSBvZiB0aGUgc2NyaXB0IGZpbGUgd2l0aG91dCB0aGUgbHVhIGV4dGVuc2lvbgotKyAg cGF0aCAgICAgICAgICBmb2xkZXIgKGZvbGRlciksIHBhdGggc2VwYXJhdG9yLCBwYXRoLCBuYW1l IHdpdGhvdXQgdGhlIGx1YSBleHRlbnNpb24KLSsgIGRvYyAgICAgICAgICAgdGhlIGhlYWRlciBj b21tZW50cyBmcm9tIHRoZSBzY3JpcHQgdG8gYmUgdXNlZCBhcyBhIHRvb2x0aXAKLSsgIHNjcmlw dF9uYW1lICAgdGhlIGZvbGRlciwgcGF0aCBzZXBhcmF0b3IsIGFuZCBuYW1lIHdpdGhvdXQgdGhl IGx1YSBleHRlbnNpb24KLSsgIHJ1bm5pbmcgICAgICAgdHJ1ZSBpZiBydW5uaW5nLCBmYWxzZSBp ZiBub3QsIGhpZGRlbiBpZiBydW5uaW5nIGJ1dCB0aGUgCi0rICAgICAgICAgICAgICAgIGxpYi9z dG9yYWdlL2FjdGlvbiBmb3IgdGhlIHNjcmlwdCBpcyBoaWRkZW4KLSsgIGhhc19saWIgICAgICAg dHJ1ZSBpZiBpdCBjcmVhdGVzIGEgbW9kdWxlCi0rICBsaWJfbmFtZSAgICAgIG5hbWUgb2YgdGhl IGNyZWF0ZWQgbGliCi0rICBoYXNfc3RvcmFnZSAgIHRydWUgaWYgaXQgY3JlYXRlcyBhIHN0b3Jh Z2UgKGV4cG9ydGVyKQotKyAgc3RvcmFnZV9uYW1lICBuYW1lIG9mIHRoZSBleHBvcnRlciAoaW4g dGhlIGV4cG9ydGVyIHN0b3JhZ2UgbWVudSkKLSsgIGhhc19hY3Rpb24gICAgdHJ1ZSBpZiBpdCBj cmVhdGVzIGFuIGFjdGlvbgotKyAgYWN0aW9uX25hbWUgICBuYW1lIG9uIHRoZSBidXR0b24KLSsg IGhhc19zZWxlY3QgICAgdHJ1ZSBpZiBpdCBjcmVhdGVzIGEgc2VsZWN0Ci0rICBzZWxlY3RfbmFt ZSAgIG5hbWUgb24gdGhlIGJ1dHRvbgotKyAgaGFzX2V2ZW50ICAgICB0cnVlIGlmIGl0IGNyZWF0 ZXMgYW4gZXZlbnQgaGFuZGxlcgotKyAgZXZlbnRfdHlwZSAgICB0eXBlIG9mIGV2ZW50LCBzaG9y dGN1dCwgcG9zdC14eHgsIHByZS14eHgKLSsgIGNhbGxiYWNrICAgICAgbmFtZSBvZiB0aGUgY2Fs bGJhY2sgcm91dGluZQotKyAgaW5pdGlhbGl6ZWQgICBhbGwgb2YgdGhlIGFib3ZlIGRhdGEgaGFz IGJlZW4gcmV0cmVpdmVkIGFuZCBzZXQuICBJZiB0aGUgCi0rICAgICAgICAgICAgICAgIHNjcmlw dCBpcyB1bmxvYWRlZCBhbmQgcmVsb2FkZWQgd2UgZG9uJ3QgaGF2ZSB0byByZXBhcnNlIHRoZSBm aWxlCi0rCi0rXV0KLSsKLStzbS5zY3JpcHRzID0ge30KLStzbS5zdGFydF9xdWV1ZSA9IHt9Ci0r c20ucGFnZV9zdGF0dXMgPSB7fQotK3NtLnBhZ2Vfc3RhdHVzLm51bV9idXR0b25zID0gREVGQVVM VF9CVVRUT05TX1BFUl9QQUdFCi0rc20ucGFnZV9zdGF0dXMuYnV0dG9uc19jcmVhdGVkID0gMAot K3NtLnBhZ2Vfc3RhdHVzLmN1cnJlbnRfcGFnZSA9IDAKLStzbS5wYWdlX3N0YXR1cy5mb2xkZXIg PSAiIgotKwotKy0tIGluc3RhbGxlZCBzY3JpcHQgcmVwb3NpdG9yaWVzCi0rc20uaW5zdGFsbGVk X3JlcG9zaXRvcmllcyA9IHsKLSsgIHtuYW1lID0gImx1YS1zY3JpcHRzIiwgZGlyZWN0b3J5ID0g TFVBX0RJUn0sCi0rfQotKwotKwotKy0tIGRvbid0IGxldCBpdCBydW4gdW50aWwgZXZlcnl0aGlu ZyBpcyBpbiBwbGFjZQotK3NtLnJ1biA9IGZhbHNlCi0rCi0rLS0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAotKy0tIEYgVSBOIEMgVCBJIE8gTiBTCi0rLS0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAotKwotKy0tLS0t LS0tLS0tLS0tLS0tLS0KLSstLSBoZWxwZXIgZnVuY3Rpb25zCi0rLS0tLS0tLS0tLS0tLS0tLS0t LQotKwotK2xvY2FsIGZ1bmN0aW9uIHNldF9sb2dfbGV2ZWwobGV2ZWwpCi0rICBsb2NhbCBvbGRf bG9nX2xldmVsID0gbG9nLmxvZ19sZXZlbCgpCi0rICBsb2cubG9nX2xldmVsKGxldmVsKQotKyAg cmV0dXJuIG9sZF9sb2dfbGV2ZWwKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiByZXN0b3JlX2xv Z19sZXZlbChsZXZlbCkKLSsgIGxvZy5sb2dfbGV2ZWwobGV2ZWwpCi0rZW5kCi0rCi0rbG9jYWwg ZnVuY3Rpb24gcHJlZl9yZWFkKG5hbWUsIHByZWZfdHlwZSkKLSsgIGxvY2FsIG9sZF9sb2dfbGV2 ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGxvZy5tc2cobG9nLmRlYnVn LCAibmFtZSBpcyAiIC4uIG5hbWUgLi4gIiBhbmQgdHlwZSBpcyAiIC4uIHByZWZfdHlwZSkKLSsK LSsgIGxvY2FsIHZhbCA9IGR0LnByZWZlcmVuY2VzLnJlYWQoTU9EVUxFLCBuYW1lLCBwcmVmX3R5 cGUpCi0rCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgInJlYWQgdmFsdWUgIiAuLiB0b3N0cmluZyh2 YWwpKQotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLSsgIHJldHVybiB2 YWwKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBwcmVmX3dyaXRlKG5hbWUsIHByZWZfdHlwZSwg dmFsdWUpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2 ZWwpCi0rCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgIndyaXRpbmcgdmFsdWUgIiAuLiB0b3N0cmlu Zyh2YWx1ZSkgLi4gIiBmb3IgbmFtZSAiIC4uIG5hbWUpCi0rCi0rICBkdC5wcmVmZXJlbmNlcy53 cml0ZShNT0RVTEUsIG5hbWUsIHByZWZfdHlwZSwgdmFsdWUpCi0rCi0rICByZXN0b3JlX2xvZ19s ZXZlbChvbGRfbG9nX2xldmVsKQotK2VuZAotKwotKy0tLS0tLS0tLS0tLS0tLS0KLSstLSBnaXQg aW50ZXJmYWNlCi0rLS0tLS0tLS0tLS0tLS0tLQotKwotK2xvY2FsIGZ1bmN0aW9uIGdldF9yZXBv X3N0YXR1cyhyZXBvKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20u bG9nX2xldmVsKQotKwotKyAgbG9jYWwgcCA9IGlvLnBvcGVuKCJjZCAiIC4uIHJlcG8gLi4gQ1Mg Li4gImdpdCBzdGF0dXMiKQotKwotKyAgaWYgcCB0aGVuCi0rICAgIGxvY2FsIGRhdGEgPSBwOnJl YWQoIiphIikKLSsgICAgcDpjbG9zZSgpCi0rICAgIHJldHVybiBkYXRhCi0rICBlbmQKLSsKLSsg IGxvZy5tc2cobG9nLmVycm9yLCAidW5hYmxlIHRvIGdldCBzdGF0dXMgb2YgIiAuLiByZXBvKQot KyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLSsgIHJldHVybiBuaWwKLStlbmQK LSsKLStsb2NhbCBmdW5jdGlvbiBnZXRfY3VycmVudF9yZXBvX2JyYW5jaChyZXBvKQotKyAgbG9j YWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgbG9j YWwgYnJhbmNoID0gbmlsCi0rCi0rICBsb2NhbCBwID0gaW8ucG9wZW4oImNkICIgLi4gcmVwbyAu LiBDUyAuLiAiZ2l0IGJyYW5jaCAtLWFsbCIpCi0rCi0rICBpZiBwIHRoZW4KLSsgICAgbG9jYWwg ZGF0YSA9IHA6cmVhZCgiKmEiKQotKyAgICBwOmNsb3NlKCkKLSsgICAgbG9jYWwgYnJhbmNoZXMg PSBkdS5zcGxpdChkYXRhLCAiXG4iKQotKyAgICBmb3IgXywgYiBpbiBpcGFpcnMoYnJhbmNoZXMp IGRvCi0rICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJicmFuY2ggZm9yIHRlc3RpbmcgaXMgIiAu LiBiKQotKyAgICAgIGJyYW5jaCA9IHN0cmluZy5tYXRjaChiLCAiXiUqICguLSkkIikKLSsKLSsg ICAgICBpZiBicmFuY2ggdGhlbgotKyAgICAgICAgbG9nLm1zZyhsb2cuaW5mbywgImN1cnJlbnQg cmVwbyBicmFuY2ggaXMgIiAuLiBicmFuY2gpCi0rICAgICAgICByZXR1cm4gYnJhbmNoCi0rICAg ICAgZW5kCi0rCi0rICAgIGVuZAotKyAgZW5kCi0rCi0rICBpZiBub3QgYnJhbmNoIHRoZW4KLSsg ICAgbG9nLm1zZyhsb2cuZXJyb3IsICJubyBjdXJyZW50IGJyYW5jaCBkZXRlY3RlZCBpbiByZXBv X2RhdGEiKQotKyAgZW5kCi0rCi0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQot KyAgcmV0dXJuIG5pbAotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIGdldF9yZXBvX2JyYW5jaGVz KHJlcG8pCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2 ZWwpCi0rCi0rICBsb2NhbCBicmFuY2hlcyA9IHt9Ci0rICBsb2NhbCBwID0gaW8ucG9wZW4oImNk ICIgLi4gcmVwbyAuLiBDUyAuLiAiZ2l0IHB1bGwgLS1hbGwiIC4uIENTIC4uICJnaXQgYnJhbmNo IC0tYWxsIikKLSsKLSsgIGlmIHAgdGhlbgotKyAgICBsb2NhbCBkYXRhID0gcDpyZWFkKCIqYSIp Ci0rICAgIHA6Y2xvc2UoKQotKyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImRhdGEgaXMgXG4iIC4u IGRhdGEpCi0rICAgIGxvY2FsIGJyYW5jaF9kYXRhID0gZHUuc3BsaXQoZGF0YSwgIlxuIikKLSsg ICAgZm9yIF8sIGxpbmUgaW4gaXBhaXJzKGJyYW5jaF9kYXRhKSBkbwotKyAgICAgIGxvZy5tc2co bG9nLmRlYnVnLCAibGluZSBpcyAgIiAuLiBsaW5lKQotKyAgICAgIGxvY2FsIGJyYW5jaCA9IHN0 cmluZy5nc3ViKGxpbmUsICIlcytyZW1vdGVzLyVhKy8iLCAiIikKLSsgICAgICBpZiBzdHJpbmcu bWF0Y2goYnJhbmNoLCAiQVBJIikgdGhlbgotKyAgICAgICAgbG9nLm1zZyhsb2cuaW5mbywgImZv dW5kIGJyYW5jaCAtICIgLi4gYnJhbmNoKQotKyAgICAgICAgdGFibGUuaW5zZXJ0KGJyYW5jaGVz LCBicmFuY2gpCi0rICAgICAgZW5kCi0rICAgIGVuZAotKyAgZW5kCi0rCi0rICByZXN0b3JlX2xv Z19sZXZlbChvbGRfbG9nX2xldmVsKQotKyAgcmV0dXJuIGJyYW5jaGVzIAotK2VuZAotKwotK2xv Y2FsIGZ1bmN0aW9uIGlzX3JlcG9fY2xlYW4ocmVwb19kYXRhKQotKyAgbG9jYWwgb2xkX2xvZ19s ZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgaWYgc3RyaW5nLm1hdGNo KHJlcG9fZGF0YSwgIlxuJXMtJWEuLSVhOiVzLSVhJWctXG4iKSB0aGVuCi0rICAgIGxvZy5tc2co bG9nLmluZm8sICJyZXBvIGlzIGRpcnR5IikKLSsgICAgcmV0dXJuIGZhbHNlCi0rICBlbHNlCi0r ICAgIGxvZy5tc2cobG9nLmluZm8sICJyZXBvIGlzIGNsZWFuIikKLSsgICAgcmV0dXJuIHRydWUK LSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLStlbmQKLSsK LStsb2NhbCBmdW5jdGlvbiBjaGVja291dF9yZXBvX2JyYW5jaChyZXBvLCBicmFuY2gpCi0rICBs b2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0rICBs b2cubXNnKGxvZy5pbmZvLCAiY2hlY2tvdXQgb3V0IGJyYW5jaCAiIC4uIGJyYW5jaCAuLiAiIGZy b20gcmVwb3NpdG9yeSAiIC4uIHJlcG8pCi0rCi0rICBvcy5leGVjdXRlKCJjZCAiIC4uIHJlcG8g Li4gQ1MgLi4gImdpdCBjaGVja291dCAiIC4uIGJyYW5jaCkKLSsKLSsgIHJlc3RvcmVfbG9nX2xl dmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0rLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSstLSB1 dGlsaXR5IGZ1bmN0aW9ucwotKy0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rCi0rbG9jYWwgZnVuY3Rp b24gdXBkYXRlX2NvbWJvYm94X2Nob2ljZXMoY29tYm9ib3gsIGNob2ljZV90YWJsZSwgc2VsZWN0 ZWQpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwp Ci0rCi0rICBsb2NhbCBpdGVtcyA9ICNjb21ib2JveAotKyAgbG9jYWwgY2hvaWNlcyA9ICNjaG9p Y2VfdGFibGUKLSsKLSsgIGZvciBpLCBuYW1lIGluIGlwYWlycyhjaG9pY2VfdGFibGUpIGRvIAot KyAgICBjb21ib2JveFtpXSA9IG5hbWUKLSsgIGVuZAotKwotKyAgaWYgY2hvaWNlcyA8IGl0ZW1z IHRoZW4KLSsgICAgZm9yIGogPSBpdGVtcywgY2hvaWNlcyArIDEsIC0xIGRvCi0rICAgICAgY29t Ym9ib3hbal0gPSBuaWwKLSsgICAgZW5kCi0rICBlbmQKLSsKLSsgIGlmIG5vdCBzZWxlY3RlZCB0 aGVuCi0rICAgIHNlbGVjdGVkID0gMQotKyAgZW5kCi0rCi0rICBjb21ib2JveC52YWx1ZSA9IHNl bGVjdGVkCi0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotK2VuZAotKwotK2xv Y2FsIGZ1bmN0aW9uIHN0cmluZ190cmltKHN0cikKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBz ZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGxvY2FsIHJlc3VsdCA9IHN0cmluZy5n c3ViKHN0ciwgIl4lcysiLCAiIikgLS0gdHJpbSBsZWFkaW5nIHNwYWNlcwotKyAgcmVzdWx0ID0g c3RyaW5nLmdzdWIocmVzdWx0LCAiJXMrJCIsICIiKSAgICAtLSB0cmltIHRyYWlsaW5nIHNwYWNl cwotKyAgcmVzdWx0ID0gc3RyaW5nLmdzdWIocmVzdWx0LCAiLD8lcyslLSUtLiskIiwgIiIpIC0t IHRyaW0gdHJhaWxpbmcgY29tbWEgYW5kIGNvbW1lbnRzCi0rCi0rICByZXN0b3JlX2xvZ19sZXZl bChvbGRfbG9nX2xldmVsKQotKyAgcmV0dXJuIHJlc3VsdAotK2VuZAotKwotK2xvY2FsIGZ1bmN0 aW9uIHN0cmluZ19kZXF1b3RlKHN0cikKLSsgIHJldHVybiBzdHJpbmcuZ3N1YihzdHIsICJbJ1wi XSIsICIiKQotK2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIHN0cmluZ19kZWkxOG4oc3RyKQotKyAg cmV0dXJuIHN0cmluZy5tYXRjaChzdHIsICIlXyUoKC4rKSUpIikKLStlbmQKLSsKLStsb2NhbCBm dW5jdGlvbiBzdHJpbmdfY2hvcChzdHIpCi0rICByZXR1cm4gc3RyOnN1YigxLCAtMikKLStlbmQK LSsKLSstLS0tLS0tLS0tLS0tLS0tLS0KLSstLSBzY3JpcHQgaGFuZGxpbmcKLSstLS0tLS0tLS0t LS0tLS0tLS0KLSsKLStsb2NhbCBmdW5jdGlvbiBpc19mb2xkZXJfa25vd24oZm9sZGVyX3RhYmxl LCBuYW1lKQotKyAgbG9jYWwgbWF0Y2ggPSBmYWxzZQotKwotKyAgZm9yIF8sIGZvbGRlcl9uYW1l IGluIGlwYWlycyhmb2xkZXJfdGFibGUpIGRvCi0rICAgIGlmIG5hbWUgPT0gZm9sZGVyX25hbWUg dGhlbgotKyAgICAgIG1hdGNoID0gdHJ1ZQotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgcmV0dXJu IG1hdGNoCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gZmluZF90cmFuc2xhdGVkX25hbWUoZm9s ZGVyKQotKyAgbG9jYWwgdHJhbnNsYXRlZF9uYW1lID0gbmlsCi0rCi0rICBpZiBmb2xkZXIgPT0g ImNvbnRyaWIiIHRoZW4KLSsgICAgdHJhbnNsYXRlZF9uYW1lID0gXygiY29udHJpYnV0ZWQiKQot KyAgZWxzZWlmIGZvbGRlciA9PSAiZXhhbXBsZXMiIHRoZW4KLSsgICAgdHJhbnNsYXRlZF9uYW1l ID0gXygiZXhhbXBsZXMiKQotKyAgZWxzZWlmIGZvbGRlciA9PSAib2ZmaWNpYWwiIHRoZW4KLSsg ICAgdHJhbnNsYXRlZF9uYW1lID0gXygib2ZmaWNpYWwiKQotKyAgZWxzZWlmIGZvbGRlciA9PSAi dG9vbHMiIHRoZW4KLSsgICAgdHJhbnNsYXRlZF9uYW1lID0gXygidG9vbHMiKQotKyAgZWxzZQot KyAgICB0cmFuc2xhdGVkX25hbWUgPSBfKGZvbGRlcikgLS0gaW4gY2FzZSB3ZSBnZXQgbHVja3kg YW5kIHRoZSBzdHJpbmcgZ290IHRyYW5zbGF0ZWQgZWxzZXdoZXJlCi0rICBlbmQKLSsKLSsgIHJl dHVybiB0cmFuc2xhdGVkX25hbWUKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBhZGRfc2NyaXB0 X2ZvbGRlcihmb2xkZXIpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChz bS5sb2dfbGV2ZWwpCi0rCi0rICBpZiAjc20uZm9sZGVycyA9PSAwIG9yIG5vdCBpc19mb2xkZXJf a25vd24oc20uZm9sZGVycywgZm9sZGVyKSB0aGVuCi0rICAgIHRhYmxlLmluc2VydChzbS5mb2xk ZXJzLCBmb2xkZXIpCi0rICAgIHRhYmxlLmluc2VydChzbS50cmFuc2xhdGVkX2ZvbGRlcnMsIGZp bmRfdHJhbnNsYXRlZF9uYW1lKGZvbGRlcikpCi0rICAgIHNtLnNjcmlwdHNbZm9sZGVyXSA9IHt9 Ci0rICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiY3JlYXRlZCBmb2xkZXIgIiAuLiBmb2xkZXIpCi0r ICBlbmQKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0r bG9jYWwgZnVuY3Rpb24gZ2V0X3NjcmlwdF9tZXRhZGF0YShzY3JpcHQpCi0rICBsb2NhbCBvbGRf bG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rICAtLSBzZXRfbG9nX2xl dmVsKGxvZy5kZWJ1ZykKLSsKLSsgIGxvZy5tc2cobG9nLmRlYnVnLCAicHJvY2Vzc2luZyBtZXRh dGRhdGEgZm9yICIgLi4gc2NyaXB0KQotKwotKyAgbG9jYWwgbWV0YWRhdGFfYmxvY2sgPSBuaWwK LSsgIGxvY2FsIG1ldGFkYXRhID0ge30KLSsKLSsgIGYgPSBpby5vcGVuKExVQV9ESVIgLi4gUFMg Li4gc2NyaXB0IC4uICIubHVhIikKLSsgIGlmIGYgdGhlbgotKyAgICAtLSBzbHVycCB0aGUgZmls ZQotKyAgICBsb2NhbCBjb250ZW50ID0gZjpyZWFkKCIqYWxsIikKLSsgICAgZjpjbG9zZSgpCi0r ICAgIC0tIGdyYWIgdGhlIHNjcmlwdF9kYXRhLm1ldGFkYXRhIHRhYmxlCi0rICAgIG1ldGFkYXRh X2Jsb2NrID0gc3RyaW5nLm1hdGNoKGNvbnRlbnQsICJzY3JpcHRfZGF0YSUubWV0YWRhdGEgPSAl e1xyP1xuKC4tKVxyP1xuJX0iKQotKyAgZWxzZQotKyAgICBsb2cubXNnKGxvZy5lcnJvciwgImNh bnQgcmVhZCBmcm9tICIgLi4gc2NyaXB0KQotKyAgZW5kCi0rCi0rICBpZiBtZXRhZGF0YV9ibG9j ayB0aGVuCi0rICAgIC0tIGJyZWFrIHVwIHRoZSBsaW5lcyBpbnRvIGtleSB2YWx1ZSBwYWlycwot KyAgICBsb2NhbCBsaW5lcyA9IGR1LnNwbGl0KG1ldGFkYXRhX2Jsb2NrLCAiXG4iKQotKyAgICBs b2cubXNnKGxvZy5kZWJ1ZywgImdvdCAiIC4uICNsaW5lcyAuLiAiIGxpbmVzIikKLSsgICAgZm9y IGkgPSAxLCAjbGluZXMgZG8KLSsgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgInNwbGl0dGluZyBs aW5lICIgLi4gbGluZXNbaV0pCi0rICAgICAgbG9jYWwgcGFydHMgPSBkdS5zcGxpdChsaW5lc1tp XSwgIiA9ICIpCi0rICAgICAgcGFydHNbMV0gPSBzdHJpbmdfdHJpbShwYXJ0c1sxXSkKLSsgICAg ICBwYXJ0c1syXSA9IHN0cmluZ190cmltKHBhcnRzWzJdKQotKyAgICAgIGxvZy5tc2cobG9nLmRl YnVnLCAiZ290IHZhbHVlICIgLi4gcGFydHNbMV0gLi4gIiBhbmQgZGF0YSAiIC4uIHBhcnRzWzJd KQotKyAgICAgIGlmIHN0cmluZy5tYXRjaChwYXJ0c1syXSwgIiVfJSgiKSB0aGVuCi0rICAgICAg ICBwYXJ0c1syXSA9IF8oc3RyaW5nX2RlcXVvdGUoc3RyaW5nX2RlaTE4bihwYXJ0c1syXSkpKQot KyAgICAgIGVsc2UKLSsgICAgICAgIHBhcnRzWzJdID0gc3RyaW5nX2RlcXVvdGUocGFydHNbMl0p Ci0rICAgICAgZW5kCi0rICAgICAgaWYgc3RyaW5nLm1hdGNoKHBhcnRzWzJdLCAiLCQiKSB0aGVu Ci0rICAgICAgICBwYXJ0c1syXSA9IHN0cmluZ19jaG9wKHBhcnRzWzJdKQotKyAgICAgIGVuZAot KyAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAicGFydHMgMSBpcyAiIC4uIHBhcnRzWzFdIC4uICIg YW5kIHBhcnRzIDIgaXMgIiAuLiBwYXJ0c1syXSkKLSsgICAgICBtZXRhZGF0YVtwYXJ0c1sxXV0g PSBwYXJ0c1syXQotKyAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAibWV0YWRhdGEgIiAuLiBwYXJ0 c1sxXSAuLiAiIGlzICIgLi4gbWV0YWRhdGFbcGFydHNbMV1dKQotKyAgICBlbmQKLSsgICAgbG9n Lm1zZyhsb2cuZGVidWcsICJzY3JpcHQgZGF0YSBmb3VuZCBmb3IgIiAuLiBtZXRhZGF0YVsibmFt ZSJdKQotKyAgZW5kCi0rCi0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotKyAg cmV0dXJuIG1ldGFkYXRhX2Jsb2NrIGFuZCBtZXRhZGF0YSBvciBuaWwKLStlbmQKLSsKLStsb2Nh bCBmdW5jdGlvbiBnZXRfc2NyaXB0X2RvYyhzY3JpcHQpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVs ID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rICBsb2NhbCBkZXNjcmlwdGlvbiA9IG5p bAotKyAgZiA9IGlvLm9wZW4oTFVBX0RJUiAuLiBQUyAuLiBzY3JpcHQgLi4gIi5sdWEiKQotKyAg aWYgZiB0aGVuCi0rICAgIC0tIHNsdXJwIHRoZSBmaWxlCi0rICAgIGxvY2FsIGNvbnRlbnQgPSBm OnJlYWQoIiphbGwiKQotKyAgICBmOmNsb3NlKCkKLSsgICAgLS0gYXNzdW1lIHRoYXQgdGhlIHNl Y29uZCBibG9jayBjb21tZW50IGlzIHRoZSBkb2N1bWVudGF0aW9uCi0rICAgIGRlc2NyaXB0aW9u ID0gc3RyaW5nLm1hdGNoKGNvbnRlbnQsICIlLSUtJVslWy4tJV0lXS4tJS0lLSVbJVsoLi0pJV0l XSIpCi0rICBlbHNlCi0rICAgIGxvZy5tc2cobG9nLmVycm9yLCAiY2FuJ3QgcmVhZCBmcm9tICIg Li4gc2NyaXB0KQotKyAgZW5kCi0rICBpZiBkZXNjcmlwdGlvbiB0aGVuCi0rICAgIHJlc3RvcmVf bG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rICAgIHJldHVybiBkZXNjcmlwdGlvbgotKyAgZWxz ZQotKyAgICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotKyAgICByZXR1cm4gXygi bm8gZG9jdW1lbnRhdGlvbiBhdmFpbGFibGUiKQotKyAgZW5kCi0rZW5kCi0rCi0rbG9jYWwgZnVu Y3Rpb24gYWN0aXZhdGUoc2NyaXB0KQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2df bGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgbG9jYWwgc3RhdHVzID0gbmlsIC0tIHN0YXR1cyBv ZiBzdGFydCBmdW5jdGlvbgotKyAgbG9jYWwgZXJyID0gbmlsICAgIC0tIGVycm9yIG1lc3NhZ2Ug cmV0dXJuZWQgaWYgbW9kdWxlIGRvZXNuJ3Qgc3RhcnQKLSsKLSsgIGxvZy5tc2cobG9nLmluZm8s ICJhY3RpdmF0aW5nICIgLi4gc2NyaXB0Lm5hbWUpCi0rCi0rICBpZiBzY3JpcHQucnVubmluZyA9 PSBmYWxzZSB0aGVuCi0rCi0rICAgIHNjcmlwdF9tYW5hZ2VyX3J1bm5pbmdfc2NyaXB0ID0gc2Ny aXB0Lm5hbWUKLSsKLSsgICAgc3RhdHVzLCBlcnIgPSBkdS5wcmVxdWlyZShzY3JpcHQucGF0aCkK LSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJwcmVxdWlyZSByZXR1cm5lZCAiIC4uIHRvc3RyaW5n KHN0YXR1cykgLi4gIiBhbmQgZm9yIGVyciAiIC4uIHRvc3RyaW5nKGVycikpCi0rCi0rICAgIHNj cmlwdF9tYW5hZ2VyX3J1bm5pbmdfc2NyaXB0ID0gbmlsCi0rCi0rICAgIGlmIHN0YXR1cyB0aGVu Ci0rICAgICAgcHJlZl93cml0ZShzY3JpcHQuc2NyaXB0X25hbWUsICJib29sIiwgdHJ1ZSkKLSsg ICAgICBsb2cubXNnKGxvZy5zY3JlZW4sIF8oc3RyaW5nLmZvcm1hdCgibG9hZGVkICVzIiwgc2Ny aXB0LnNjcmlwdF9uYW1lKSkpCi0rICAgICAgc2NyaXB0LnJ1bm5pbmcgPSB0cnVlCi0rCi0rICAg ICAgaWYgZXJyIH49IHRydWUgdGhlbgotKyAgICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJnb3Qg bGliIGRhdGEiKQotKyAgICAgICAgc2NyaXB0LmRhdGEgPSBlcnIKLSsgICAgICAgIGlmIHNjcmlw dC5kYXRhLmRlc3Ryb3lfbWV0aG9kIGFuZCBzY3JpcHQuZGF0YS5kZXN0cm95X21ldGhvZCA9PSAi aGlkZSIgYW5kIHNjcmlwdC5kYXRhLnNob3cgYW5kIGR0Lmd1aS5jdXJyZW50X3ZpZXcoKS5pZCA9 PSAibGlnaHR0YWJsZSIgdGhlbgotKyAgICAgICAgICBzY3JpcHQuZGF0YS5zaG93KCkKLSsgICAg ICAgIGVuZAotKyAgICAgIGVsc2UKLSsgICAgICAgIHNjcmlwdC5kYXRhID0gbmlsCi0rICAgICAg ZW5kCi0rCi0rICAgICBlbHNlCi0rICAgICAgbG9nLm1zZyhsb2cuc2NyZWVuLCBfKHN0cmluZy5m b3JtYXQoIiVzIGZhaWxlZCB0byBsb2FkIiwgc2NyaXB0LnNjcmlwdF9uYW1lKSkpCi0rICAgICAg bG9nLm1zZyhsb2cuZXJyb3IsICJlcnJvciBsb2FkaW5nICIgLi4gc2NyaXB0LnNjcmlwdF9uYW1l KQotKyAgICAgIGxvZy5tc2cobG9nLmVycm9yLCAiZXJyb3IgbWVzc2FnZTogIiAuLiBlcnIpCi0r ICAgIGVuZAotKwotKyAgZWxzZSAtLSBzY3JpcHQgaXMgYSBsaWIgYW5kIGxvYWRlZCBidXQgaGlk ZGVuIGFuZCB0aGUgdXNlciB3YW50cyB0byByZWxvYWQKLSsgICAgc2NyaXB0LmRhdGEucmVzdGFy dCgpCi0rICAgIHNjcmlwdC5ydW5uaW5nID0gdHJ1ZQotKyAgICBzdGF0dXMgPSB0cnVlCi0rICAg IHByZWZfd3JpdGUoc2NyaXB0LnNjcmlwdF9uYW1lLCAiYm9vbCIsIHRydWUpCi0rICBlbmQKLSsg IHNjcmlwdF9tYW5hZ2VyX3J1bm5pbmdfc2NyaXB0ID0gInNjcmlwdF9tYW5hZ2VyIgotKwotKyAg cmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLSsgIHJldHVybiBzdGF0dXMKLStlbmQK LSsKLStsb2NhbCBmdW5jdGlvbiBkZWFjdGl2YXRlKHNjcmlwdCkKLSsgIC0tIHByZXNlbnRseSB0 aGUgbHVhIGFwaSBkb2Vzbid0IHN1cHBvcnQgdW5sb2FkaW5nIGxpYiBlbGVtZW50cyBob3dldmVy LCB3ZQotKyAgLS0gICBjYW4gaGlkZSBsaWJzLCBzbyB3ZSBqdXN0IG1hcmsgdGhvc2UgYXMgaGlk ZGVuIGFuZCBoaWRlIHRoZSBndWkKLSsgIC0tICAgY2FuIGRlbGV0ZSBzdG9yYWdlcwotKyAgLS0g ICBjYW4gZGVsZXRlIGFjdGlvbnMKLSsgIC0tICAgY2FuIGRlbGV0ZSBzZWxlY3RzCi0rICAtLSAg IGFuZCBtYXJrIHRoZW0gaW5hY3RpdmUgZm9yIHRoZSBuZXh0IHRpbWUgZGFya3RhYmxlIHN0YXJ0 cwotKwotKyAgLS0gZGVhY3RpdmF0ZSBpdC4uLi4KLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBz ZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIHByZWZfd3JpdGUoc2NyaXB0LnNjcmlw dF9uYW1lLCAiYm9vbCIsIGZhbHNlKQotKwotKyAgaWYgc2NyaXB0LmRhdGEgdGhlbgotKwotKyAg ICBzY3JpcHQuZGF0YS5kZXN0cm95KCkKLSsKLSsgICAgaWYgc2NyaXB0LmRhdGEuZGVzdHJveV9t ZXRob2QgdGhlbgotKyAgICAgIGlmIHN0cmluZy5tYXRjaChzY3JpcHQuZGF0YS5kZXN0cm95X21l dGhvZCwgImhpZGUiKSB0aGVuCi0rICAgICAgICBzY3JpcHQucnVubmluZyA9ICJoaWRkZW4iCi0r ICAgICAgZWxzZQotKyAgICAgICAgcGFja2FnZS5sb2FkZWRbc2NyaXB0LnNjcmlwdF9uYW1lXSA9 IG5pbAotKyAgICAgICAgc2NyaXB0LnJ1bm5pbmcgPSBmYWxzZQotKyAgICAgIGVuZAotKyAgICBl bHNlCi0rICAgICAgcGFja2FnZS5sb2FkZWRbc2NyaXB0LnNjcmlwdF9uYW1lXSA9IG5pbAotKyAg ICAgIHNjcmlwdC5ydW5uaW5nID0gZmFsc2UKLSsgICAgZW5kCi0rCi0rICAgIGxvZy5tc2cobG9n LmluZm8sICJ0dXJuZWQgb2ZmICIgLi4gc2NyaXB0LnNjcmlwdF9uYW1lKQotKyAgICBsb2cubXNn KGxvZy5zY3JlZW4sIF8oc3RyaW5nLmZvcm1hdCgiJXMgc3RvcHBlZCIsIHNjcmlwdC5uYW1lKSkp Ci0rCi0rICBlbHNlCi0rICAgIHNjcmlwdC5ydW5uaW5nID0gZmFsc2UKLSsKLSsgICAgbG9nLm1z Zyhsb2cuaW5mbywgInNldHRpbmcgIiAuLiBzY3JpcHQuc2NyaXB0X25hbWUgLi4gIiB0byBub3Qg c3RhcnQiKQotKyAgICBsb2cubXNnKGxvZy5zY3JlZW4sIF8oc3RyaW5nLmZvcm1hdCgiJXMgd2ls bCBub3Qgc3RhcnQgd2hlbiBkYXJrdGFibGUgaXMgcmVzdGFydGVkIiwgc2NyaXB0Lm5hbWUpKSkK LSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLStlbmQKLSsK LStsb2NhbCBmdW5jdGlvbiBzdGFydF9zY3JpcHRzKCkKLSsgIGZvciBfLCBzY3JpcHQgaW4gaXBh aXJzKHNtLnN0YXJ0X3F1ZXVlKSBkbwotKyAgICBhY3RpdmF0ZShzY3JpcHQpCi0rICAgIGZvciBp ID0gMSwgc20ucGFnZV9zdGF0dXMubnVtX2J1dHRvbnMgZG8KLSsgICAgICBsb2NhbCBuYW1lID0g c2NyaXB0Lm1ldGFkYXRhIGFuZCBzY3JpcHQubWV0YWRhdGEubmFtZSBvciBzY3JpcHQubmFtZQot KyAgICAgIGlmIHNtLndpZGdldHMubGFiZWxzW2ldLmxhYmVsID09IG5hbWUgdGhlbgotKyAgICAg ICAgc20ud2lkZ2V0cy5idXR0b25zW2ldLm5hbWUgPSAicGJfb24iCi0rICAgICAgICBicmVhawot KyAgICAgIGVuZAotKyAgICBlbmQKLSsgIGVuZAotKyAgc20uc3RhcnRfcXVldWUgPSB7fQotK2Vu ZAotKwotK2xvY2FsIGZ1bmN0aW9uIHF1ZXVlX3NjcmlwdF90b19zdGFydChzY3JpcHQpCi0rICB0 YWJsZS5pbnNlcnQoc20uc3RhcnRfcXVldWUsIHNjcmlwdCkKLStlbmQKLSsKLStsb2NhbCBmdW5j dGlvbiBhZGRfc2NyaXB0X25hbWUobmFtZSwgcGF0aCwgZm9sZGVyKQotKyAgbG9jYWwgb2xkX2xv Z19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgbG9nLm1zZyhsb2cu ZGVidWcsICJmb2xkZXIgaXMgIiAuLiBmb2xkZXIpCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgIm5h bWUgaXMgIiAuLiBuYW1lKQotKwotKyAgbG9jYWwgc2NyaXB0ID0geyAKLSsgICAgbmFtZSA9IG5h bWUsIAotKyAgICBwYXRoID0gZm9sZGVyIC4uICIvIiAuLiBwYXRoIC4uIG5hbWUsCi0rICAgIHJ1 bm5pbmcgPSBmYWxzZSwKLSsgICAgZG9jID0gZ2V0X3NjcmlwdF9kb2MoZm9sZGVyIC4uICIvIiAu LiBwYXRoIC4uIG5hbWUpLAotKyAgICBtZXRhZGF0YSA9IGdldF9zY3JpcHRfbWV0YWRhdGEoZm9s ZGVyIC4uICIvIiAuLiBwYXRoIC4uIG5hbWUpLAotKyAgICBzY3JpcHRfbmFtZSA9IGZvbGRlciAu LiAiLyIgLi4gbmFtZSwKLSsgICAgZGF0YSA9IG5pbAotKyAgfQotKwotKyAgdGFibGUuaW5zZXJ0 KHNtLnNjcmlwdHNbZm9sZGVyXSwgc2NyaXB0KQotKwotKyAgaWYgcHJlZl9yZWFkKHNjcmlwdC5z Y3JpcHRfbmFtZSwgImJvb2wiKSB0aGVuCi0rICAgIHF1ZXVlX3NjcmlwdF90b19zdGFydChzY3Jp cHQpCi0rICBlbHNlCi0rICAgIHByZWZfd3JpdGUoc2NyaXB0LnNjcmlwdF9uYW1lLCAiYm9vbCIs IGZhbHNlKQotKyAgZW5kCi0rCi0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQot K2VuZAotKwotK2xvY2FsIGZ1bmN0aW9uIHByb2Nlc3Nfc2NyaXB0X2RhdGEoc2NyaXB0X2ZpbGUp Ci0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0r Ci0rICAtLSB0aGUgc2NyaXB0IGZpbGUgc3VwcGxpZWQgaXMgZm9sZGVyL2ZpbGVuYW1lLmZpbGV0 eXBlCi0rICAtLSB0aGUgZm9sbG93aW5nIHBhdHRlcm4gc3BsaXRzIHRoZSBzdHJpbmcgaW50byBm b2xkZXIsIHBhdGgsIG5hbWUsIGZpbGVlbmFtZSwgYW5kIGZpbGV0eXBlCi0rICAtLSBmb3IgZXhh bXBsZSBjb250cmliL2dpbXAubHVhIGJlY29tZXMKLSsgIC0tIGZvbGRlciAtIGNvbnRyaWIKLSsg IC0tIHBhdGggLSAKLSsgIC0tIG5hbWUgLSBnaW1wLmx1YQotKyAgLS0gZmlsZW5hbWUgLSBnaW1w Ci0rICAtLSBmaWxldHlwZSAtIGx1YQotKwotKyAgLS0gVGhhbmtzIFRvYmlhcyBKYWtvYnMgZm9y IHRoZSBhd2Vzb21lIHJlZ3VsYXJ5IGV4cHJlc3Npb24KLSsKLSsgIGxvY2FsIHBhdHRlcm4gPSAi KC4tKS8oLi0pKChbXlxcL10tKSUuPyhbXiUuXFwvXSopKSQiCi0rICBpZiBkdC5jb25maWd1cmF0 aW9uLnJ1bm5pbmdfb3MgPT0gIndpbmRvd3MiIHRoZW4KLSsgICAgLS0gY2hhbmdlIHRoZSBwYXRo IHNlcGFyYXRvciBmcm9tIC8gdG8gXCBmb3Igd2luZG93cwotKyAgICBwYXR0ZXJuID0gIiguLSlc XCguLSkoKFteXFxdLSklLj8oW14lLlxcXSopKSQiCi0rICBlbmQKLSsKLSsgIGxvZy5tc2cobG9n LmluZm8sICJwcm9jZXNzaW5nICIgLi4gc2NyaXB0X2ZpbGUpCi0rCi0rICAtLSBhZGQgdGhlIHNj cmlwdCBkYXRhCi0rICBsb2NhbCBmb2xkZXIscGF0aCxuYW1lLGZpbGVuYW1lLGZpbGV0eXBlID0g c3RyaW5nLm1hdGNoKHNjcmlwdF9maWxlLCBwYXR0ZXJuKQotKwotKyAgaWYgZm9sZGVyIGFuZCBu YW1lIGFuZCBwYXRoIHRoZW4KLSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJmb2xkZXIgaXMgIiAu LiBmb2xkZXIpCi0rICAgIGxvZy5tc2cobG9nLmRlYnVnLCAibmFtZSBpcyAiIC4uIG5hbWUpCi0r Ci0rICAgIGFkZF9zY3JpcHRfZm9sZGVyKGZvbGRlcikKLSsgICAgYWRkX3NjcmlwdF9uYW1lKG5h bWUsIHBhdGgsIGZvbGRlcikKLSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xv Z19sZXZlbCkKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBlbnN1cmVfbGliX2luX3NlYXJjaF9w YXRoKGxpbmUpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChzbS5sb2df bGV2ZWwpCi0rCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgImxpbmUgaXMgIiAuLiBsaW5lKQotKwot KyAgaWYgc3RyaW5nLm1hdGNoKGxpbmUsIGRzLnNhbml0aXplX2x1YShkdC5jb25maWd1cmF0aW9u LmNvbmZpZ19kaXIgLi4gUFMgLi4gImx1YS9saWIiKSkgdGhlbgotKyAgICBsb2cubXNnKGxvZy5k ZWJ1ZywgbGluZSAuLiAiIGlzIGFscmVhZHkgaW4gc2VhcmNoIHBhdGgsIHJldHVybmluZy4uLiIp Ci0rICAgIHJldHVybgotKyAgZW5kCi0rCi0rICBsb2NhbCBwYXR0ZXJuID0gIGR0LmNvbmZpZ3Vy YXRpb24ucnVubmluZ19vcyA9PSAid2luZG93cyIgYW5kICAiKC4rKVxcbGliXFwuK2x1YSIgb3Ig ICIoLispL2xpYi8uK2x1YSIKLSsgIGxvY2FsIHBhdGggPSBzdHJpbmcubWF0Y2gobGluZSwgcGF0 dGVybikKLSsKLSsgIGxvZy5tc2cobG9nLmRlYnVnLCAiZXh0cmFjdGVkIHBhdGggaXMgIiAuLiBw YXRoKQotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJwYWNrYWdlLnBhdGggaXMgIiAuLiBwYWNrYWdl LnBhdGgpCi0rCi0rICBpZiBub3Qgc3RyaW5nLm1hdGNoKHBhY2thZ2UucGF0aCwgZHMuc2FuaXRp emVfbHVhKHBhdGgpKSB0aGVuCi0rCi0rICAgIGxvZy5tc2cobG9nLmRlYnVnLCAicGF0aCBpc24n dCBpbiBwYWNrYWdlLnBhdGgsIGFkZGluZy4uLiIpCi0rCi0rICAgIHBhY2thZ2UucGF0aCA9IHBh Y2thZ2UucGF0aCAuLiAiOyIgLi4gcGF0aCAuLiAiLz8ubHVhIgotKwotKyAgICBsb2cubXNnKGxv Zy5kZWJ1ZywgIm5ldyBwYWNrYWdlLnBhdGggaXMgIiAuLiBwYWNrYWdlLnBhdGgpCi0rICBlbmQK LSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0rbG9jYWwg ZnVuY3Rpb24gc2Nhbl9zY3JpcHRzKHNjcmlwdF9kaXIpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVs ID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0rICBsb2NhbCBzY3JpcHRfY291bnQg PSAwCi0rICBsb2NhbCBmaW5kX2NtZCA9ICJmaW5kIC1MICIgLi4gc2NyaXB0X2RpciAuLiAiIC1u YW1lIFxcKi5sdWEgLXByaW50IHwgc29ydCIKLSsKLSsgIGlmIGR0LmNvbmZpZ3VyYXRpb24ucnVu bmluZ19vcyA9PSAid2luZG93cyIgdGhlbgotKyAgICBmaW5kX2NtZCA9ICJkaXIgL2IvcyBcIiIg Li4gc2NyaXB0X2RpciAuLiAiXFwqLmx1YVwiIDI+bnVsIHwgc29ydCIKLSsgIGVuZAotKwotKyAg bG9nLm1zZyhsb2cuZGVidWcsICJmaW5kIGNvbW1hbmQgaXMgIiAuLiBmaW5kX2NtZCkKLSsKLSsg IC0tIHNjYW4gdGhlIHNjcmlwdHMKLSsgIGxvY2FsIG91dHB1dCA9IGlvLnBvcGVuKGZpbmRfY21k KQotKyAgZm9yIGxpbmUgaW4gb3V0cHV0OmxpbmVzKCkgZG8KLSsgICAgbG9nLm1zZyhsb2cuZGVi dWcsICJsaW5lIGlzICIgLi4gbGluZSkKLSsgICAgbG9jYWwgc2NyaXB0X2RpciA9IFNZU1RFTV9M VUFfRElSCi0rICAgIGlmIHN0cmluZy5tYXRjaChsaW5lLCBkcy5zYW5pdGl6ZV9sdWEoVVNFUl9M VUFfRElSKSkgdGhlbgotKyAgICAgIHNjcmlwdF9kaXIgPSBVU0VSX0xVQV9ESVIKLSsgICAgZW5k Ci0rICAgIC0tIGFkZCBhIHN0cmluZy5tYXRjaCB0byBmaWd1cmUgb3V0IHdoaWNoIGx1YSBkaXIg dG8gdXNlCi0rICAgIGxvY2FsIGwgPSBzdHJpbmcuZ3N1YihsaW5lLCBkcy5zYW5pdGl6ZV9sdWEo c2NyaXB0X2RpcikgLi4gUFMsICIiKSAgIC0tIHN0cmlwIHRoZSBsdWEgZGlyIG9mZgotKyAgICBs b2NhbCBzY3JpcHRfZmlsZSA9IGw6c3ViKDEsLTUpICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtLSBzdHJpcCBvZmYgLmx1YVxuCi0rICAgIGlmIG5vdCBzdHJpbmcubWF0Y2goc2Ny aXB0X2ZpbGUsICJzY3JpcHRfbWFuYWdlciIpIHRoZW4gICAgICAgICAgIC0tIGxldCdzIG5vdCBp bmNsdWRlIG91cnNlbGYKLSsgICAgICBpZiBub3Qgc3RyaW5nLm1hdGNoKHNjcmlwdF9maWxlLCAi cGx1Z2lucyIpIHRoZW4gICAgICAgICAgICAgICAgLS0gc2tpcCBwbHVnaW5zCi0rICAgICAgICBp ZiBub3Qgc3RyaW5nLm1hdGNoKHNjcmlwdF9maWxlLCAibGliIiAuLiBQUykgdGhlbiAgICAgICAg ICAgIC0tIGxldCdzIG5vdCB0cnkgYW5kIHJ1biBsaWJyYXJpZXMKLSsgICAgICAgICAgaWYgbm90 IHN0cmluZy5tYXRjaChzY3JpcHRfZmlsZSwgIiUuZ2l0IikgdGhlbiAgICAgICAgICAgICAgLS0g ZG9uJ3QgbWF0Y2ggZmlsZXMgaW4gdGhlIC5naXQgZGlyZWN0b3J5Ci0rICAgICAgICAgICAgcHJv Y2Vzc19zY3JpcHRfZGF0YShzY3JpcHRfZmlsZSkKLSsgICAgICAgICAgICBzY3JpcHRfY291bnQg PSBzY3JpcHRfY291bnQgKyAxCi0rICAgICAgICAgIGVuZAotKyAgICAgICAgZWxzZQotKyAgICAg ICAgICBlbnN1cmVfbGliX2luX3NlYXJjaF9wYXRoKGxpbmUpICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAtLSBidXQgbGV0J3MgbWFrZSBzdXJlIGxpYnJhcmllcyBjYW4gYmUgZm91bmQKLSsg ICAgICAgIGVuZAotKyAgICAgIGVuZAotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgcmVzdG9yZV9s b2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLSsgIHJldHVybiBzY3JpcHRfY291bnQKLStlbmQKLSsK LStsb2NhbCBmdW5jdGlvbiB1cGRhdGVfc2NyaXB0cygpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVs ID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rICBsb2NhbCByZXN1bHQgPSBmYWxzZQot KwotKyAgbG9jYWwgZ2l0ID0gc20uZXhlY3V0YWJsZXMuZ2l0Ci0rCi0rICBpZiBub3QgZ2l0IHRo ZW4KLSsgICAgbG9nLm1zZyhsb2cuc2NyZWVuLCBfKCJFUlJPUjogZ2l0IG5vdCBmb3VuZC4gIElu c3RhbGwgb3Igc3BlY2lmeSB0aGUgbG9jYXRpb24gb2YgdGhlIGdpdCBleGVjdXRhYmxlLiIpKQot KyAgICByZXR1cm4KLSsgIGVuZAotKwotKyAgbG9jYWwgZ2l0X2NvbW1hbmQgPSAiY2QgIiAuLiBM VUFfRElSIC4uICIgIiAuLiBDUyAuLiAiICIgLi4gZ2l0IC4uICIgcHVsbCIKLSsgIGxvZy5tc2co bG9nLmRlYnVnLCAidXBkYXRlIGdpdCBjb21tYW5kIGlzICIgLi4gZ2l0X2NvbW1hbmQpCi0rCi0r ICBpZiBkdC5jb25maWd1cmF0aW9uLnJ1bm5pbmdfb3MgPT0gIndpbmRvd3MiIHRoZW4KLSsgICAg cmVzdWx0ID0gZHRzeXMud2luZG93c19jb21tYW5kKGdpdF9jb21tYW5kKQotKyAgZWxzZQotKyAg ICByZXN1bHQgPSBvcy5leGVjdXRlKGdpdF9jb21tYW5kKQotKyAgZW5kCi0rCi0rICBpZiByZXN1 bHQgPT0gMCB0aGVuCi0rICAgIGxvZy5tc2cobG9nLnNjcmVlbiwgXygibHVhIHNjcmlwdHMgc3Vj Y2Vzc2Z1bGx5IHVwZGF0ZWQiKSkKLSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xk X2xvZ19sZXZlbCkKLSsgIHJldHVybiByZXN1bHQKLStlbmQKLSsKLSstLS0tLS0tLS0tLS0tLQot Ky0tIFVJIGhhbmRsaW5nCi0rLS0tLS0tLS0tLS0tLS0KLSsKLStsb2NhbCBmdW5jdGlvbiB1cGRh dGVfc2NyaXB0X3VwZGF0ZV9jaG9pY2VzKCkKLSsgIGxvY2FsIG9sZF9sb2dfbGV2ZWwgPSBzZXRf bG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGxvY2FsIGluc3RhbGxzID0ge30KLSsgIGxv Y2FsIHByZWZfc3RyaW5nID0gIiIKLSsKLSsgIGZvciBpLCByZXBvIGluIGlwYWlycyhzbS5pbnN0 YWxsZWRfcmVwb3NpdG9yaWVzKSBkbwotKyAgICB0YWJsZS5pbnNlcnQoaW5zdGFsbHMsIHJlcG8u bmFtZSkKLSsgICAgaWYgbm90IHN0cmluZy5tYXRjaChwcmVmX3N0cmluZywgZHMuc2FuaXRpemVf bHVhKHJlcG8ubmFtZSkpIHRoZW4KLSsgICAgICBwcmVmX3N0cmluZyA9IHByZWZfc3RyaW5nIC4u IGkgLi4gIiwiIC4uIHJlcG8ubmFtZSAuLiAiLCIgLi4gcmVwby5kaXJlY3RvcnkgLi4gIiwiCi0r ICAgIGVuZAotKyAgZW5kCi0rCi0rICB1cGRhdGVfY29tYm9ib3hfY2hvaWNlcyhzbS53aWRnZXRz LnVwZGF0ZV9zY3JpcHRfY2hvaWNlcywgaW5zdGFsbHMsIDEpCi0rCi0rICBsb2cubXNnKGxvZy5k ZWJ1ZywgInJlcG8gcHJlZiBzdHJpbmcgaXMgIiAuLiBwcmVmX3N0cmluZykKLSsgIHByZWZfd3Jp dGUoImluc3RhbGxlZF9yZXBvcyIsICJzdHJpbmciLCBwcmVmX3N0cmluZykKLSsKLSsgIHJlc3Rv cmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gc2Nh bl9yZXBvc2l0b3JpZXMoKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwo c20ubG9nX2xldmVsKQotKwotKyAgbG9jYWwgc2NyaXB0X2NvdW50ID0gMAotKyAgbG9jYWwgZmlu ZF9jbWQgPSAiZmluZCAtTCAiIC4uIExVQV9ESVIgLi4gIiAtbmFtZSBcXCouZ2l0IC1wcmludCB8 IHNvcnQiCi0rCi0rICBpZiBkdC5jb25maWd1cmF0aW9uLnJ1bm5pbmdfb3MgPT0gIndpbmRvd3Mi IHRoZW4KLSsgICAgZmluZF9jbWQgPSAiZGlyIC9iL3MgL2E6ZCAiIC4uIExVQV9ESVIgLi4gUFMg Li4gIiouZ2l0IDI+bnVsIHwgc29ydCIKLSsgIGVuZAotKwotKyAgbG9nLm1zZyhsb2cuZGVidWcs ICJmaW5kIGNvbW1hbmQgaXMgIiAuLiBmaW5kX2NtZCkKLSsKLSsgIGxvY2FsIG91dHB1dCA9IGlv LnBvcGVuKGZpbmRfY21kKQotKwotKyAgZm9yIGxpbmUgaW4gb3V0cHV0OmxpbmVzKCkgZG8KLSsg ICAgbG9jYWwgbCA9IHN0cmluZy5nc3ViKGxpbmUsIGRzLnNhbml0aXplX2x1YShMVUFfRElSKSAu LiBQUywgIiIpICAgLS0gc3RyaXAgdGhlIGx1YSBkaXIgb2ZmCi0rICAgIGxvY2FsIGZvbGRlciA9 IHN0cmluZy5tYXRjaChsLCAiKC4tKSIgLi4gUFMpICAgICAgICAgICAgICAgICAgICAgICAgLS0g Z2V0IGV2ZXJ5dGhpbmcgdG8gdGhlIGZpcnN0IC8KLSsKLSsgICAgaWYgZm9sZGVyIHRoZW4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gaWYgd2UgaGF2 ZSBhIGZvbGRlciAoLmdpdCBkb2Vzbid0KQotKwotKyAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAi Zm91bmQgZm9sZGVyICIgLi4gZm9sZGVyKQotKwotKyAgICAgIGlmIG5vdCBzdHJpbmcubWF0Y2go Zm9sZGVyLCAicGx1Z2lucyIpIGFuZCBub3Qgc3RyaW5nLm1hdGNoKGZvbGRlciwgIiUuZ2l0Iikg dGhlbiAtLSBza2lwIHBsdWdpbnMKLSsKLSsgICAgICAgIGlmICNzbS5pbnN0YWxsZWRfcmVwb3Np dG9yaWVzID09IDEgdGhlbgotKyAgICAgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgIm9ubHkgMSBy ZXBvLCBhZGRpbmcgIiAuLiBmb2xkZXIpCi0rICAgICAgICAgIHRhYmxlLmluc2VydChzbS5pbnN0 YWxsZWRfcmVwb3NpdG9yaWVzLCB7bmFtZSA9IGZvbGRlciwgZGlyZWN0b3J5ID0gTFVBX0RJUiAu LiBQUyAuLiBmb2xkZXJ9KQotKyAgICAgICAgZWxzZQotKyAgICAgICAgICBsb2cubXNnKGxvZy5k ZWJ1ZywgIm1vcmUgdGhhbiAxIHJlcG8sIHdlIGhhdmUgdG8gc2VhcmNoIHRoZSByZXBvcyB0byBt YWtlIHN1cmUgaXQncyBub3QgdGhlcmUiKQotKyAgICAgICAgICBsb2NhbCBmb3VuZCA9IG5pbAot KwotKyAgICAgICAgICBmb3IgXywgcmVwbyBpbiBpcGFpcnMoc20uaW5zdGFsbGVkX3JlcG9zaXRv cmllcykgZG8KLSsgICAgICAgICAgICBpZiBzdHJpbmcubWF0Y2gocmVwby5uYW1lLCBkcy5zYW5p dGl6ZV9sdWEoZm9sZGVyKSkgdGhlbgotKyAgICAgICAgICAgICAgbG9nLm1zZyhsb2cuZGVidWcs ICJtYXRjaGVkICIgLi4gcmVwby5uYW1lKQotKyAgICAgICAgICAgICAgZm91bmQgPSB0cnVlCi0r ICAgICAgICAgICAgICBicmVhawotKyAgICAgICAgICAgIGVuZAotKyAgICAgICAgICBlbmQKLSsK LSsgICAgICAgICAgaWYgbm90IGZvdW5kIHRoZW4KLSsgICAgICAgICAgICB0YWJsZS5pbnNlcnQo c20uaW5zdGFsbGVkX3JlcG9zaXRvcmllcywge25hbWUgPSBmb2xkZXIsIGRpcmVjdG9yeSA9IExV QV9ESVIgLi4gUFMgLi4gZm9sZGVyfSkKLSsgICAgICAgICAgZW5kCi0rCi0rICAgICAgICBlbmQK LSsgICAgICBlbmQKLSsgICAgZW5kCi0rICBlbmQKLSsKLSsgIHVwZGF0ZV9zY3JpcHRfdXBkYXRl X2Nob2ljZXMoKQotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLStlbmQK LSsKLStsb2NhbCBmdW5jdGlvbiBpbnN0YWxsX3NjcmlwdHMoKQotKyAgbG9jYWwgb2xkX2xvZ19s ZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwotKyAgbG9jYWwgdXJsID0gc20u d2lkZ2V0cy5zY3JpcHRfdXJsLnRleHQKLSsgIGxvY2FsIGZvbGRlciA9IHNtLndpZGdldHMubmV3 X2ZvbGRlci50ZXh0Ci0rCi0rICBpZiBub3QgZGYudGVzdF9maWxlKFVTRVJfTFVBX0RJUiwgImQi KSB0aGVuCi0rICAgIGRmLm1rZGlyKFVTRVJfTFVBX0RJUikKLSsgICAgaWYgbm90IGRmLnRlc3Rf ZmlsZShVU0VSX0xVQV9ESVIsICJkIikgdGhlbgotKyAgICAgIGxvZy5tc2cobG9nLmVycm9yLCAi dW5hYmxlIHRvIGNyZWF0ZSB1c2VyIGx1YSBkaXJlY3RvcnkiKQotKyAgICAgIGxvZy5tc2cobG9n LnNjcmVlbiwgXygidW5hYmxlIHRvIGNyZWF0ZSB1c2VyIGx1YSBkaXJlY3RvcnksIGluc3RhbGxp bmcgYWRkaXRpb25hbCBzY3JpcHRzIGZhaWxlZCIpKQotKyAgICAgIHJldHVybgotKyAgICBlbmQK LSsgIGVuZAotKwotKyAgaWYgc3RyaW5nLm1hdGNoKGR1LmpvaW4oc20uZm9sZGVycywgIiAiKSwg ZHMuc2FuaXRpemVfbHVhKGZvbGRlcikpIHRoZW4KLSsgICAgbG9nLm1zZyhsb2cuc2NyZWVuLCBz dHJpbmcuZm9ybWF0KF8oImZvbGRlciAlcyBpcyBhbHJlYWR5IGluIHVzZS4gUGxlYXNlIHNwZWNp ZnkgYSBkaWZmZXJlbnQgZm9sZGVyIG5hbWUuIiksIGZvbGRlcikpCi0rICAgIGxvZy5tc2cobG9n LmVycm9yLCAiZm9sZGVyICIgLi4gZm9sZGVyIC4uICIgYWxyZWFkeSBleGlzdHMsIHJldHVybmlu Zy4uLiIpCi0rICAgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rICAgIHJldHVy bgotKyAgZW5kCi0rCi0rICBsb2NhbCByZXN1bHQgPSBmYWxzZQotKwotKyAgbG9jYWwgZ2l0ID0g c20uZXhlY3V0YWJsZXMuZ2l0Ci0rCi0rICBpZiBub3QgZ2l0IHRoZW4KLSsgICAgbG9nLm1zZyhs b2cuc2NyZWVuLCBfKCJFUlJPUjogZ2l0IG5vdCBmb3VuZC4gIEluc3RhbGwgb3Igc3BlY2lmeSB0 aGUgbG9jYXRpb24gb2YgdGhlIGdpdCBleGVjdXRhYmxlLiIpKQotKyAgICByZXN0b3JlX2xvZ19s ZXZlbChvbGRfbG9nX2xldmVsKQotKyAgICByZXR1cm4KLSsgIGVuZAotKwotKyAgbG9jYWwgZ2l0 X2NvbW1hbmQgPSAiY2QgIiAuLiBVU0VSX0xVQV9ESVIgLi4gIiAiIC4uIENTIC4uICIgIiAuLiBn aXQgLi4gIiBjbG9uZSAiIC4uIHVybCAuLiAiICIgLi4gZm9sZGVyCi0rICBsb2cubXNnKGxvZy5k ZWJ1ZywgInVwZGF0ZSBnaXQgY29tbWFuZCBpcyAiIC4uIGdpdF9jb21tYW5kKQotKwotKyAgaWYg ZHQuY29uZmlndXJhdGlvbi5ydW5uaW5nX29zID09ICJ3aW5kb3dzIiB0aGVuCi0rICAgIHJlc3Vs dCA9IGR0c3lzLndpbmRvd3NfY29tbWFuZChnaXRfY29tbWFuZCkKLSsgIGVsc2UKLSsgICAgcmVz dWx0ID0gZHRzeXMuZXh0ZXJuYWxfY29tbWFuZChnaXRfY29tbWFuZCkKLSsgIGVuZAotKwotKyAg bG9nLm1zZyhsb2cuaW5mbywgInJlc3VsdCBmcm9tIGltcG9ydCBpcyAiIC4uIHJlc3VsdCkKLSsK LSsgIGlmIHJlc3VsdCA9PSAwIHRoZW4KLSsgICAgbG9jYWwgY291bnQgPSBzY2FuX3NjcmlwdHMo VVNFUl9MVUFfRElSKQotKwotKyAgICBpZiBjb3VudCA+IDAgdGhlbgotKyAgICAgIHVwZGF0ZV9j b21ib2JveF9jaG9pY2VzKHNtLndpZGdldHMuZm9sZGVyX3NlbGVjdG9yLCBzbS5mb2xkZXJzLCBz bS53aWRnZXRzLmZvbGRlcl9zZWxlY3Rvci5zZWxlY3RlZCkKLSsgICAgICBkdC5wcmludChzdHJp bmcuZm9ybWF0KF8oInNjcmlwdHMgc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBpbnRvIGZvbGRlciAl cyIpLCBmb2xkZXIpKQotKyAgICAgIHRhYmxlLmluc2VydChzbS5pbnN0YWxsZWRfcmVwb3NpdG9y aWVzLCB7bmFtZSA9IGZvbGRlciwgZGlyZWN0b3J5ID0gVVNFUl9MVUFfRElSIC4uIFBTIC4uIGZv bGRlcn0pCi0rICAgICAgdXBkYXRlX3NjcmlwdF91cGRhdGVfY2hvaWNlcygpCi0rCi0rICAgICAg Zm9yIGkgPSAxLCAjc20ud2lkZ2V0cy5mb2xkZXJfc2VsZWN0b3IgZG8KLSsgICAgICAgIGlmIHN0 cmluZy5tYXRjaChzbS53aWRnZXRzLmZvbGRlcl9zZWxlY3RvcltpXSwgZHMuc2FuaXRpemVfbHVh KGZvbGRlcikpIHRoZW4KLSsgICAgICAgICAgbG9nLm1zZyhsb2cuZGVidWcsICJzZXR0aW5nIGZv bGRlciBzZWxlY3RvciB0byAiIC4uIGkpCi0rICAgICAgICAgIHNtLndpZGdldHMuZm9sZGVyX3Nl bGVjdG9yLnNlbGVjdGVkID0gaQotKyAgICAgICAgICBicmVhawotKyAgICAgICAgZW5kCi0rICAg ICAgICBpID0gaSArIDEKLSsgICAgICBlbmQKLSsKLSsgICAgICBsb2cubXNnKGxvZy5kZWJ1Zywg ImNsZWFyaW5nIHRleHQgZmllbGRzIikKLSsgICAgICBzbS53aWRnZXRzLnNjcmlwdF91cmwudGV4 dCA9ICIiCi0rICAgICAgc20ud2lkZ2V0cy5uZXdfZm9sZGVyLnRleHQgPSAiIgotKyAgICAgIHNt LndpZGdldHMubWFpbl9tZW51LnNlbGVjdGVkID0gMwotKyAgICBlbHNlCi0rICAgICAgbG9nLm1z Zyhsb2cuc2NyZWVuLCBfKCJubyBzY3JpcHRzIGZvdW5kIHRvIGluc3RhbGwiKSkKLSsgICAgICBs b2cubXNnKGxvZy5lcnJvciwgInNjYW5fc2NyaXB0cyByZXR1cm5lZCAiIC4uIGNvdW50IC4uICIg c2NyaXB0cyBmb3VuZC4gIE5vdCBhZGRpbmcgdG8gZm9sZGVyX3NlbGVjdG9yIikKLSsgICAgZW5k Ci0rCi0rICBlbHNlCi0rICAgIGxvZy5tc2cobG9nLnNjcmVlbiwgXygiZmFpbGVkIHRvIGRvd25s b2FkIHNjcmlwdHMiKSkKLSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19s ZXZlbCkKLSsgIHJldHVybiByZXN1bHQKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBjbGVhcl9i dXR0b24obnVtYmVyKQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20u bG9nX2xldmVsKQotKwotKyAgbG9jYWwgYnV0dG9uID0gc20ud2lkZ2V0cy5idXR0b25zW251bWJl cl0KLSsgIGxvY2FsIGxhYmVsID0gc20ud2lkZ2V0cy5sYWJlbHNbbnVtYmVyXQotKwotKyAgYnV0 dG9uLmltYWdlID0gQkxBTktfSUNPTgotKyAgYnV0dG9uLnRvb2x0aXAgPSAiIgotKyAgYnV0dG9u LnNlbnNpdGl2ZSA9IGZhbHNlCi0rICBsYWJlbC5sYWJlbCA9ICIiCi0rICBidXR0b24ubmFtZSA9 ICIiCi0rCi0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotK2VuZAotKwotK2xv Y2FsIGZ1bmN0aW9uIGZpbmRfc2NyaXB0KGZvbGRlciwgbmFtZSkKLSsgIGxvY2FsIG9sZF9sb2df bGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIGxvZy5tc2cobG9nLmRl YnVnLCAibG9va2luZyBmb3Igc2NyaXB0ICIgLi4gbmFtZSAuLiAiIGluIGZvbGRlciAiIC4uIGZv bGRlcikKLSsKLSsgIGZvciBfLCBzY3JpcHQgaW4gaXBhaXJzKHNtLnNjcmlwdHNbZm9sZGVyXSkg ZG8KLSsgICAgaWYgc3RyaW5nLm1hdGNoKHNjcmlwdC5uYW1lLCAiXiIgLi4gZHMuc2FuaXRpemVf bHVhKG5hbWUpIC4uICIkIikgdGhlbgotKyAgICAgIHJldHVybiBzY3JpcHQKLSsgICAgZW5kCi0r ICBlbmQKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rICByZXR1cm4g bmlsCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gcG9wdWxhdGVfYnV0dG9ucyhmb2xkZXIsIGZp cnN0LCBsYXN0KQotKyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9n X2xldmVsKQotKwotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJmb2xkZXIgaXMgIiAuLiBmb2xkZXIg Li4gIiBhbmQgZmlyc3QgaXMgIiAuLiBmaXJzdCAuLiAiIGFuZCBsYXN0IGlzICIgLi4gbGFzdCkK LSsKLSsgIGxvY2FsIGJ1dHRvbl9udW0gPSAxCi0rCi0rICBmb3IgaSA9IGZpcnN0LCBsYXN0IGRv Ci0rICAgIGxvY2FsIHNjcmlwdCA9IHNtLnNjcmlwdHNbZm9sZGVyXVtpXQotKyAgICBsb2NhbCBi dXR0b24gPSBzbS53aWRnZXRzLmJ1dHRvbnNbYnV0dG9uX251bV0KLSsgICAgbG9jYWwgbGFiZWwg PSBzbS53aWRnZXRzLmxhYmVsc1tidXR0b25fbnVtXQotKwotKyAgICBpZiBzY3JpcHQucnVubmlu ZyA9PSB0cnVlIHRoZW4KLSsgICAgICBidXR0b24ubmFtZSA9ICJwYl9vbiIKLSsgICAgZWxzZQot KyAgICAgIGJ1dHRvbi5uYW1lID0gInBiX29mZiIKLSsgICAgZW5kCi0rCi0rICAgIGJ1dHRvbi5p bWFnZSA9IFBPV0VSX0lDT04KLSsgICAgbGFiZWwubGFiZWwgPSBzY3JpcHQubWV0YWRhdGEgYW5k IHNjcmlwdC5tZXRhZGF0YS5uYW1lIG9yIHNjcmlwdC5uYW1lCi0rICAgIGxhYmVsLm5hbWUgPSAi cGJfbGFiZWwiCi0rICAgIGJ1dHRvbi5lbGxpcHNpemUgPSAiZW5kIgotKyAgICBidXR0b24uc2Vu c2l0aXZlID0gdHJ1ZQotKyAgICBsYWJlbC50b29sdGlwID0gc2NyaXB0Lm1ldGFkYXRhIGFuZCBz Y3JpcHQubWV0YWRhdGEucHVycG9zZSBvciBzY3JpcHQuZG9jCi0rCi0rICAgIGJ1dHRvbi5jbGlj a2VkX2NhbGxiYWNrID0gZnVuY3Rpb24gKHRoaXMpCi0rICAgICAgbG9jYWwgY2Jfc2NyaXB0ID0g c2NyaXB0Ci0rICAgICAgbG9jYWwgc3RhdGUgPSBuaWwKLSsgICAgICBpZiBjYl9zY3JpcHQgdGhl biAKLSsgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiZm91bmQgc2NyaXB0ICIgLi4gY2Jfc2Ny aXB0Lm5hbWUgLi4gIiB3aXRoIHBhdGggIiAuLiBjYl9zY3JpcHQucGF0aCkKLSsgICAgICAgIGlm IGNiX3NjcmlwdC5ydW5uaW5nID09IHRydWUgdGhlbgotKyAgICAgICAgICBsb2cubXNnKGxvZy5k ZWJ1ZywgImRlYWN0aXZhdGluZyAiIC4uIGNiX3NjcmlwdC5uYW1lIC4uICIgb24gIiAuLiBjYl9z Y3JpcHQucGF0aCkKLSsgICAgICAgICAgZGVhY3RpdmF0ZShjYl9zY3JpcHQpCi0rICAgICAgICAg IHRoaXMubmFtZSA9ICJwYl9vZmYiCi0rICAgICAgICBlbHNlCi0rICAgICAgICAgIGxvZy5tc2co bG9nLmRlYnVnLCAiYWN0aXZhdGluZyAiIC4uIGNiX3NjcmlwdC5uYW1lIC4uICIgb24gIiAuLiBz Y3JpcHQucGF0aCkKLSsgICAgICAgICAgbG9jYWwgcmVzdWx0ID0gYWN0aXZhdGUoY2Jfc2NyaXB0 KQotKyAgICAgICAgICBpZiByZXN1bHQgdGhlbgotKyAgICAgICAgICAgIHRoaXMubmFtZSA9ICJw Yl9vbiIKLSsgICAgICAgICAgZW5kCi0rICAgICAgICBlbmQKLSsgICAgICBlbmQKLSsgICAgZW5k Ci0rCi0rICAgIGJ1dHRvbl9udW0gPSBidXR0b25fbnVtICsgMQotKyAgZW5kCi0rCi0rICBsb2cu bXNnKGxvZy5kZWJ1ZywgImJ1dHRvbiBudW0gaXMgIiAuLiBidXR0b25fbnVtIC4uICIgYW5kIG51 bV9idXR0b25zIGlzICIgLi4gc20ucGFnZV9zdGF0dXMubnVtX2J1dHRvbnMpCi0rICBpZiBidXR0 b25fbnVtIDw9IHNtLnBhZ2Vfc3RhdHVzLm51bV9idXR0b25zIHRoZW4KLSsgICAgZm9yIGkgPSBi dXR0b25fbnVtLCBzbS5wYWdlX3N0YXR1cy5udW1fYnV0dG9ucyBkbwotKyAgICAgIGNsZWFyX2J1 dHRvbihpKQotKyAgICBlbmQKLSsgIGVuZAotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xv Z19sZXZlbCkKLStlbmQKLSsKLStsb2NhbCBmdW5jdGlvbiBwYWdpbmF0ZShkaXJlY3Rpb24pCi0r ICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0r ICBsb2NhbCBmb2xkZXIgPSBzbS5wYWdlX3N0YXR1cy5mb2xkZXIKLSsgIGxvZy5tc2cobG9nLmRl YnVnLCAiZm9sZGVyIGlzICIgLi4gZm9sZGVyKQotKwotKyAgbG9jYWwgbnVtX3NjcmlwdHMgPSAj c20uc2NyaXB0c1tmb2xkZXJdCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgIm51bV9zY3JpcHRzIGlz ICIgLi4gbnVtX3NjcmlwdHMpCi0rCi0rICBsb2NhbCBtYXhfcGFnZXMgPSBtYXRoLmNlaWwobnVt X3NjcmlwdHMgLyBzbS5wYWdlX3N0YXR1cy5udW1fYnV0dG9ucykKLSsKLSsgIGxvY2FsIGN1cl9w YWdlID0gc20ucGFnZV9zdGF0dXMuY3VycmVudF9wYWdlCi0rICBsb2cubXNnKGxvZy5kZWJ1Zywg Im1heCBwYWdlcyBpcyAiIC4uIG1heF9wYWdlcykKLSsKLSsgIGxvY2FsIGJ1dHRvbnNfbmVlZGVk ID0gbmlsCi0rICBsb2NhbCBmaXJzdCA9IG5pbAotKyAgbG9jYWwgbGFzdCA9IG5pbAotKwotKyAg aWYgZGlyZWN0aW9uID09IDAgdGhlbgotKyAgICBjdXJfcGFnZSA9IGN1cl9wYWdlIC0gMQotKyAg ICBpZiBjdXJfcGFnZSA8IDEgdGhlbgotKyAgICAgIGN1cl9wYWdlID0gMQotKyAgICBlbmQKLSsg IGVsc2VpZiBkaXJlY3Rpb24gPT0gMSB0aGVuCi0rICAgIGN1cl9wYWdlID0gY3VyX3BhZ2UgKyAx Ci0rICAgIGlmIGN1cl9wYWdlID4gbWF4X3BhZ2VzIHRoZW4KLSsgICAgICBjdXJfcGFnZSA9IG1h eF9wYWdlcwotKyAgICBlbmQKLSsgIGVsc2UKLSsgICAgbG9nLm1zZyhsb2cuZGVidWcsICJ0b29r IHBhdGggMiIpCi0rICAgIGN1cl9wYWdlID0gMQotKyAgZW5kCi0rCi0rICBsb2cubXNnKGxvZy5k ZWJ1ZywgImN1cl9wYWdlIGlzICIgLi4gY3VyX3BhZ2UgLi4gIiBhbmQgbWF4X3BhZ2VzIGlzICIg Li4gbWF4X3BhZ2VzKQotKwotKyAgaWYgY3VyX3BhZ2UgPT0gbWF4X3BhZ2VzIGFuZCBjdXJfcGFn ZSA9PSAxIHRoZW4KLSsgICAgc20ud2lkZ2V0cy5wYWdlX2ZvcndhcmQuc2Vuc2l0aXZlID0gZmFs c2UKLSsgICAgc20ud2lkZ2V0cy5wYWdlX2JhY2suc2Vuc2l0aXZlID0gZmFsc2UKLSsgIGVsc2Vp ZiBjdXJfcGFnZSA9PSBtYXhfcGFnZXMgdGhlbgotKyAgICBzbS53aWRnZXRzLnBhZ2VfZm9yd2Fy ZC5zZW5zaXRpdmUgPSBmYWxzZQotKyAgICBzbS53aWRnZXRzLnBhZ2VfYmFjay5zZW5zaXRpdmUg PSB0cnVlCi0rICBlbHNlaWYgY3VyX3BhZ2UgPT0gMSB0aGVuCi0rICAgIHNtLndpZGdldHMucGFn ZV9mb3J3YXJkLnNlbnNpdGl2ZSA9IHRydWUKLSsgICAgc20ud2lkZ2V0cy5wYWdlX2JhY2suc2Vu c2l0aXZlID0gZmFsc2UKLSsgIGVsc2UKLSsgICAgc20ud2lkZ2V0cy5wYWdlX2ZvcndhcmQuc2Vu c2l0aXZlID0gdHJ1ZQotKyAgICBzbS53aWRnZXRzLnBhZ2VfYmFjay5zZW5zaXRpdmUgPSB0cnVl Ci0rICBlbmQKLSsKLSsgIHNtLnBhZ2Vfc3RhdHVzLmN1cnJlbnRfcGFnZSA9IGN1cl9wYWdlCi0r Ci0rICBmaXJzdCA9IChjdXJfcGFnZSAqIHNtLnBhZ2Vfc3RhdHVzLm51bV9idXR0b25zKSAtIChz bS5wYWdlX3N0YXR1cy5udW1fYnV0dG9ucyAtIDEpCi0rCi0rICBpZiBmaXJzdCArIHNtLnBhZ2Vf c3RhdHVzLm51bV9idXR0b25zID4gbnVtX3NjcmlwdHMgdGhlbgotKyAgICBsYXN0ID0gbnVtX3Nj cmlwdHMKLSsgIGVsc2UKLSsgICAgbGFzdCA9IGZpcnN0ICsgc20ucGFnZV9zdGF0dXMubnVtX2J1 dHRvbnMgLSAxCi0rICBlbmQKLSsKLSsgIHNtLndpZGdldHMucGFnZV9zdGF0dXMubGFiZWwgPSBz dHJpbmcuZm9ybWF0KF8oInBhZ2UgJWQgb2YgJWQiKSwgY3VyX3BhZ2UsIG1heF9wYWdlcykKLSsK LSsgIHBvcHVsYXRlX2J1dHRvbnMoZm9sZGVyLCBmaXJzdCwgbGFzdCkKLSsKLSsgIHJlc3RvcmVf bG9nX2xldmVsKG9sZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gY2hhbmdl X2ZvbGRlcihmb2xkZXIpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0X2xvZ19sZXZlbChz bS5sb2dfbGV2ZWwpCi0rCi0rICBpZiBub3QgZm9sZGVyIHRoZW4KLSsgICAgbG9nLm1zZyhsb2cu ZGVidWcgInNldHRpbmcgZm9sZGVyIHRvIHNlbGVjdG9yIHZhbHVlICIgLi4gIHNtLndpZGdldHMu Zm9sZGVyX3NlbGVjdG9yLnZhbHVlKQotKyAgICBzbS5wYWdlX3N0YXR1cy5mb2xkZXIgPSBzbS53 aWRnZXRzLmZvbGRlcl9zZWxlY3Rvci52YWx1ZQotKyAgZWxzZQotKyAgICBsb2cubXNnKGxvZy5k ZWJ1ZywgInNldHRpbmcgY2F0Z29yeSB0byBhcmd1bWVudCAiIC4uIGZvbGRlcikKLSsgICAgc20u cGFnZV9zdGF0dXMuZm9sZGVyID0gZm9sZGVyCi0rICBlbmQKLSsKLSsgIHBhZ2luYXRlKDIpCi0r Ci0rICByZXN0b3JlX2xvZ19sZXZlbChvbGRfbG9nX2xldmVsKQotK2VuZAotKwotK2xvY2FsIGZ1 bmN0aW9uIGNoYW5nZV9udW1fYnV0dG9ucygpCi0rICBsb2NhbCBvbGRfbG9nX2xldmVsID0gc2V0 X2xvZ19sZXZlbChzbS5sb2dfbGV2ZWwpCi0rCi0rICBjdXJfYnV0dG9ucyA9IHNtLnBhZ2Vfc3Rh dHVzLm51bV9idXR0b25zCi0rICBuZXdfYnV0dG9ucyA9IHNtLndpZGdldHMubnVtX2J1dHRvbnMu dmFsdWUKLSsKLSsgIHByZWZfd3JpdGUoIm51bV9idXR0b25zIiwgImludGVnZXIiLCBuZXdfYnV0 dG9ucykKLSsKLSsgIGlmIG5ld19idXR0b25zIDwgY3VyX2J1dHRvbnMgdGhlbgotKyAgICBsb2cu bXNnKGxvZy5kZWJ1ZywgInRvb2sgbmV3IGlzIGxlc3MgdGhhbiBjdXJyZW50IGJyYW5jaCIpCi0r Ci0rICAgIGZvciBpID0gMSwgY3VyX2J1dHRvbnMgLSBuZXdfYnV0dG9ucyBkbwotKyAgICAgIHRh YmxlLnJlbW92ZShzbS53aWRnZXRzLnNjcmlwdHMpCi0rICAgIGVuZAotKwotKyAgICBsb2cubXNn KGxvZy5kZWJ1ZywgImZpbmlzaGVkIHJlbW92aW5nIHdpZGdldHMsIG5vdyB0aGVyZSBhcmUgIiAu LiAjc20ud2lkZ2V0cy5idXR0b25zKQotKyAgZWxzZWlmIG5ld19idXR0b25zID4gY3VyX2J1dHRv bnMgdGhlbgotKyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgInRvb2sgbmV3IGlzIGdyZWF0ZXIgdGhh biBjdXJyZW50IGJyYW5jaCIpCi0rICAgIGxvZy5tc2cobG9nLmRlYnVnLCAibnVtYmVyIG9mIHNj cmlwdHMgaXMgIiAuLiAjc20ud2lkZ2V0cy5zY3JpcHRzKQotKyAgICBsb2cubXNnKGxvZy5kZWJ1 ZywgIm51bWJlciBvZiBidXR0b25zIGlzICIgLi4gI3NtLndpZGdldHMuYnV0dG9ucykKLSsgICAg bG9nLm1zZyhsb2cuZGVidWcsICJudW1iZXIgb2YgbGFiZWxzIGlzICIgLi4gI3NtLndpZGdldHMu bGFiZWxzKQotKyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgIm51bWJlciBvZiBib3hlcyBpcyAiIC4u ICNzbS53aWRnZXRzLmJveGVzKQotKwotKyAgICBpZiBuZXdfYnV0dG9ucyA+IHNtLnBhZ2Vfc3Rh dHVzLmJ1dHRvbnNfY3JlYXRlZCB0aGVuCi0rCi0rICAgICAgZm9yIGkgPSBzbS5wYWdlX3N0YXR1 cy5idXR0b25zX2NyZWF0ZWQgKyAxLCBuZXdfYnV0dG9ucyBkbwotKyAgICAgICAgbG9nLm1zZyhs b2cuZGVidWcsICJpIGlzICIgLi4gaSkKLSsgICAgICAgIHRhYmxlLmluc2VydChzbS53aWRnZXRz LmJ1dHRvbnMsIGR0Lm5ld193aWRnZXQoImJ1dHRvbiIpe30pCi0rICAgICAgICBsb2cubXNnKGxv Zy5kZWJ1ZywgImluc2VydGVkIG5ldyBidXR0b24iKQotKyAgICAgICAgbG9nLm1zZyhsb2cuZGVi dWcsICJudW1iZXIgb2YgYnV0dG9ucyBpcyAiIC4uICNzbS53aWRnZXRzLmJ1dHRvbnMpCi0rICAg ICAgICB0YWJsZS5pbnNlcnQoc20ud2lkZ2V0cy5sYWJlbHMsIGR0Lm5ld193aWRnZXQoImxhYmVs Iil7fSkKLSsgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiaW5zZXJ0ZWQgbmV3IGxhYmVsIikK LSsgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAibnVtYmVyIG9mIGxhYmVscyBpcyAiIC4uICNz bS53aWRnZXRzLmxhYmVscykKLSsgICAgICAgIHRhYmxlLmluc2VydChzbS53aWRnZXRzLmJveGVz LCBkdC5uZXdfd2lkZ2V0KCJib3giKXsgb3JpZW50YXRpb24gPSAiaG9yaXpvbnRhbCIsIGV4cGFu ZCA9IGZhbHNlLCBmaWxsID0gZmFsc2UsIAotKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzbS53aWRnZXRzLmJ1dHRvbnNbaV0sIHNtLndpZGdl dHMubGFiZWxzW2ldfSkKLSsgICAgICAgIGxvZy5tc2cobG9nLmRlYnVnLCAiaW5zZXJ0ZWQgbmV3 IGJveCIpCi0rICAgICAgICBzbS5wYWdlX3N0YXR1cy5idXR0b25zX2NyZWF0ZWQgPSBzbS5wYWdl X3N0YXR1cy5idXR0b25zX2NyZWF0ZWQgKyAxCi0rICAgICAgZW5kCi0rCi0rICAgIGVuZAotKwot KyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImN1cl9idXR0b25zIGlzICIgLi4gY3VyX2J1dHRvbnMg Li4gIiBhbmQgbmV3X2J1dHRvbnMgaXMgIiAuLiBuZXdfYnV0dG9ucykKLSsgICAgbG9nLm1zZyhs b2cuZGVidWcsICNzbS53aWRnZXRzLmJ1dHRvbnMgLi4gIiBidXR0b25zIGFyZSBhdmFpbGFibGUi KQotKwotKyAgICBmb3IgaSA9IGN1cl9idXR0b25zICsgMSwgbmV3X2J1dHRvbnMgZG8KLSsgICAg ICBsb2cubXNnKGxvZy5kZWJ1ZywgImluc2VydGluZyBidXR0b24gIiAuLiBpIC4uICIgaW50byBz Y3JpcHRzIHdpZGdldCIpCi0rICAgICAgdGFibGUuaW5zZXJ0KHNtLndpZGdldHMuc2NyaXB0cywg c20ud2lkZ2V0cy5ib3hlc1tpXSkKLSsgICAgZW5kCi0rCi0rICAgIGxvZy5tc2cobG9nLmRlYnVn LCAiZmluaXNoZWQgYWRkaW5nIHdpZGdldHMsIG5vdyB0aGVyZSBhcmUgIiAuLiAjc20ud2lkZ2V0 cy5idXR0b25zKQotKyAgZWxzZSAtLSBubyBjaGFuZ2UKLSsgICAgbG9nLm1zZyhsb2cuZGVidWcs ICJubyBjaGFuZ2UsIGp1c3QgcmV0dXJuaW5nIikKLSsgICAgcmV0dXJuCi0rICBlbmQKLSsKLSsg IHNtLnBhZ2Vfc3RhdHVzLm51bV9idXR0b25zID0gbmV3X2J1dHRvbnMKLSsgIGxvZy5tc2cobG9n LmRlYnVnLCAibnVtX2J1dHRvbnMgc2V0IHRvICIgLi4gc20ucGFnZV9zdGF0dXMubnVtX2J1dHRv bnMpCi0rICBwYWdpbmF0ZSgyKSAtLSBmb3JjZSB0aGUgYnV0dG9ucyB0byByZXBvcHVsYXRlCi0r ICBzbS53aWRnZXRzLm1haW5fbWVudS5zZWxlY3RlZCA9IDMgLS0ganVtcCBiYWNrIHRvIHN0YXJ0 L3N0b3Agc2NyaXB0cwotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwob2xkX2xvZ19sZXZlbCkKLStl bmQKLSsKLStsb2NhbCBmdW5jdGlvbiBsb2FkX3ByZWZlcmVuY2VzKCkKLSsgIGxvY2FsIG9sZF9s b2dfbGV2ZWwgPSBzZXRfbG9nX2xldmVsKHNtLmxvZ19sZXZlbCkKLSsKLSsgIC0tIGxvYWQgdGhl IHByZWZzIGFuZCB1cGRhdGUgc2V0dGluZ3MKLSsgIC0tIHVwZGF0ZV9zY3JpcHRfY2hvaWNlcwot KwotKyAgbG9jYWwgcHJlZl9zdHJpbmcgPSBwcmVmX3JlYWQoImluc3RhbGxlZF9yZXBvcyIsICJz dHJpbmciKQotKyAgbG9jYWwgZW50cmllcyA9IGR1LnNwbGl0KHByZWZfc3RyaW5nLCAiLCIpCi0r Ci0rICB3aGlsZSAgI2VudHJpZXMgPiAyIGRvCi0rICAgIGxvY2FsIG51bSA9IHRhYmxlLnJlbW92 ZShlbnRyaWVzLCAxKQotKyAgICBsb2NhbCBuYW1lID0gdGFibGUucmVtb3ZlKGVudHJpZXMsIDEp Ci0rICAgIGxvY2FsIGRpcmVjdG9yeSA9IHRhYmxlLnJlbW92ZShlbnRyaWVzLCAxKQotKwotKyAg ICBpZiBub3Qgc3RyaW5nLm1hdGNoKHNtLmluc3RhbGxlZF9yZXBvc2l0b3JpZXNbMV0ubmFtZSwg Il4iIC4uIGRzLnNhbml0aXplX2x1YShuYW1lKSAuLiAiJCIpIHRoZW4KLSsgICAgICB0YWJsZS5p bnNlcnQoc20uaW5zdGFsbGVkX3JlcG9zaXRvcmllcywge25hbWUgPSBuYW1lLCBkaXJlY3Rvcnkg PSBkaXJlY3Rvcnl9KQotKyAgICBlbmQKLSsKLSsgIGVuZAotKwotKyAgdXBkYXRlX3NjcmlwdF91 cGRhdGVfY2hvaWNlcygpCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgInVwZGF0ZWQgaW5zdGFsbGVk IHNjcmlwdHMiKQotKwotKyAgLS0gZm9sZGVyIHNlbGVjdG9yCi0rICBsb2NhbCB2YWwgPSBwcmVm X3JlYWQoImZvbGRlcl9zZWxlY3RvciIsICJpbnRlZ2VyIikKLSsKLSsgIGlmIHZhbCA9PSAwIHRo ZW4KLSsgICAgdmFsID0gMQotKyAgZW5kCi0rCi0rICBzbS53aWRnZXRzLmZvbGRlcl9zZWxlY3Rv ci5zZWxlY3RlZCA9IHZhbAotKyAgc20ucGFnZV9zdGF0dXMuZm9sZGVyID0gc20ud2lkZ2V0cy5m b2xkZXJfc2VsZWN0b3IudmFsdWUKLSsgIGxvZy5tc2cobG9nLmRlYnVnLCAidXBkYXRlZCBmb2xk ZXIgc2VsZWN0b3IgYW5kIHNldCBpdCB0byAiIC4uIHNtLndpZGdldHMuZm9sZGVyX3NlbGVjdG9y LnZhbHVlKQotKwotKyAgLS0gbnVtX2J1dHRvbnMKLSsgIGxvY2FsIHZhbCA9IHByZWZfcmVhZCgi bnVtX2J1dHRvbnMiLCAiaW50ZWdlciIpCi0rCi0rICBpZiB2YWwgPT0gMCB0aGVuCi0rICAgIHZh bCA9IERFRkFVTFRfQlVUVE9OU19QRVJfUEFHRQotKyAgZW5kCi0rCi0rICBzbS53aWRnZXRzLm51 bV9idXR0b25zLnZhbHVlID0gdmFsCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgInNldCBwYWdlIGJ1 dHRvbnMgdG8gIiAuLiB2YWwpCi0rCi0rICBjaGFuZ2VfbnVtX2J1dHRvbnMoKQotKyAgbG9nLm1z Zyhsb2cuZGVidWcsICJwYWdpbmF0ZWQiKQotKwotKyAgLS0gbWFpbiBtZW51Ci0rICBsb2NhbCB2 YWwgPSBwcmVmX3JlYWQoIm1haW5fbWVudV9hY3Rpb24iLCAiaW50ZWdlciIpCi0rICBsb2cubXNn KGxvZy5kZWJ1ZywgInJlYWQgIiAuLiB2YWwgLi4gIiBmb3IgbWFpbiBtZW51IikKLSsKLSsgIGlm IHZhbCA9PSAwIHRoZW4KLSsgICAgdmFsID0gMwotKyAgZW5kCi0rCi0rICBzbS53aWRnZXRzLm1h aW5fbWVudS5zZWxlY3RlZCA9IHZhbAotKyAgbG9nLm1zZyhsb2cuZGVidWcsICJzZXQgbWFpbiBt ZW51IHRvIHZhbCAiIC4uIHZhbCAuLiAiIHdoaWNoIGlzICIgLi4gc20ud2lkZ2V0cy5tYWluX21l bnUudmFsdWUpCi0rCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgInNldCBtYWluIG1lbnUgdG8gIiAu LiBzbS53aWRnZXRzLm1haW5fbWVudS52YWx1ZSkKLSsKLSsgIHJlc3RvcmVfbG9nX2xldmVsKG9s ZF9sb2dfbGV2ZWwpCi0rZW5kCi0rCi0rbG9jYWwgZnVuY3Rpb24gaW5zdGFsbF9tb2R1bGUoKQot KyAgbG9jYWwgb2xkX2xvZ19sZXZlbCA9IHNldF9sb2dfbGV2ZWwoc20ubG9nX2xldmVsKQotKwot KyAgaWYgbm90IHNtLm1vZHVsZV9pbnN0YWxsZWQgdGhlbgotKyAgICBkdC5yZWdpc3Rlcl9saWIo Ci0rICAgICAgInNjcmlwdF9tYW5hZ2VyIiwgICAgIC0tIE1vZHVsZSBuYW1lCi0rICAgICAgXygi c2NyaXB0cyIpLCAgICAgLS0gVmlzaWJsZSBuYW1lCi0rICAgICAgdHJ1ZSwgICAgICAgICAgICAg ICAgLS0gZXhwYW5kYWJsZQotKyAgICAgIGZhbHNlLCAgICAgICAgICAgICAgIC0tIHJlc2V0YWJs ZQotKyAgICAgIHtbZHQuZ3VpLnZpZXdzLmxpZ2h0dGFibGVdID0geyJEVF9VSV9DT05UQUlORVJf UEFORUxfTEVGVF9CT1RUT00iLCAxMDB9fSwgICAtLSBjb250YWluZXJzCi0rICAgICAgc20ud2lk Z2V0cy5tYWluX2JveCwKLSsgICAgICBuaWwsLS0gdmlld19lbnRlcgotKyAgICAgIG5pbCAtLSB2 aWV3X2xlYXZlCi0rICAgICkKLSsgICAgc20ubW9kdWxlX2luc3RhbGxlZCA9IHRydWUKLSsgIGVu ZAotKwotKyAgc20ucnVuID0gdHJ1ZQotKyAgc20udXNlX2NvbG9yID0gcHJlZl9yZWFkKCJ1c2Vf Y29sb3IiLCAiYm9vbCIpCi0rICBsb2cubXNnKGxvZy5kZWJ1ZywgInNldCBydW4gdG8gdHJ1ZSwg bG9hZGluZyBwcmVmZXJlbmNlcyIpCi0rICBsb2FkX3ByZWZlcmVuY2VzKCkKLSsgIHNjYW5fcmVw b3NpdG9yaWVzKCkKLSsgIHN0YXJ0X3NjcmlwdHMoKQotKwotKyAgcmVzdG9yZV9sb2dfbGV2ZWwo b2xkX2xvZ19sZXZlbCkKLStlbmQKLSsKLSstLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gCi0rLS0gTSBBIEkgTiAgUCBSIE8gRyBSIEEgTQotKy0tIC0gLSAt IC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAKLSsKLSstLSBlbnN1cmUg c2hvcnRjdXRzIG1vZHVsZSBrbm93cyB3aWRnZXRzIGJlbG9uZyB0byBzY3JpcHRfbWFuYWdlcgot KwotK3NjcmlwdF9tYW5hZ2VyX3J1bm5pbmdfc2NyaXB0ID0gInNjcmlwdF9tYW5hZ2VyIgotKwot K2lmIChjaGVja19mb3JfdXBkYXRlcyBvciBTTV9BUElfVkVSX1JFUUQgPiBkdC5jb25maWd1cmF0 aW9uLmFwaV92ZXJzaW9uX3N0cmluZykgYW5kIG5vdCBzeXN0ZW1fYmFzZWQgdGhlbgotKyAgbG9j YWwgcmVwb19kYXRhID0gZ2V0X3JlcG9fc3RhdHVzKExVQV9ESVIpCi0rICBsb2NhbCBjdXJyZW50 X2JyYW5jaCA9IGdldF9jdXJyZW50X3JlcG9fYnJhbmNoKExVQV9ESVIpCi0rICBsb2NhbCBjbGVh biA9IGlzX3JlcG9fY2xlYW4ocmVwb19kYXRhKQotKyAgbG9jYWwgcmVwbyA9IExVQV9ESVIKLSsK LSsgIGlmIGN1cnJlbnRfYnJhbmNoIHRoZW4KLSsKLSsgICAgaWYgc20uZXhlY3V0YWJsZXMuZ2l0 IGFuZCBjbGVhbiBhbmQgCi0rCi0rICAgICAgKGN1cnJlbnRfYnJhbmNoID09ICJtYXN0ZXIiIG9y IHN0cmluZy5tYXRjaChjdXJyZW50X2JyYW5jaCwgIl5BUEklLSIpKSB0aGVuIC0tIG9ubHkgbWFr ZSBjaGFuZ2VzIHRvIGNsZWFuIGJyYW5jaGVzCi0rICAgICAgbG9jYWwgYnJhbmNoZXMgPSBnZXRf cmVwb19icmFuY2hlcyhMVUFfRElSKQotKwotKyAgICAgIGlmIGN1cnJlbnRfYnJhbmNoIH49IExV QV9BUElfVkVSIGFuZCBjdXJyZW50X2JyYW5jaCB+PSAibWFzdGVyIiB0aGVuCi0rICAgICAgICAt LSBwcm9iYWJseSB1cGdyYWRlZCBmcm9tIGFuIGVhcmxpZXIgYXBpIHZlcnNpb24gc28gZ2V0IGJh Y2sgdG8gbWFzdGVyCi0rICAgICAgICAtLSB0byB1c2UgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHNj cmlwdF9tYW5hZ2VyIHRvIGdldCB0aGUgcHJvcGVyIEFQSQotKyAgICAgICAgY2hlY2tvdXRfcmVw b19icmFuY2gocmVwbywgIm1hc3RlciIpCi0rICAgICAgICBsb2cubXNnKGxvZy5zY3JlZW4sIF8o Imx1YSBBUEkgdmVyc2lvbiByZXNldCwgcGxlYXNlIHJlc3RhcnQgZGFya3RhYmxlIikpCi0rCi0r ICAgICAgZWxzZWlmIExVQV9BUElfVkVSID09IGN1cnJlbnRfYnJhbmNoIHRoZW4KLSsgICAgICAg IC0tIGRvIG5vdGhpbmcsIHdlIGFyZSBmaW5lCi0rICAgICAgICBsb2cubXNnKGxvZy5kZWJ1Zywg InRvb2sgZXF1YWwgYnJhbmNoLCBkb2luZyBub3RoaW5nIikKLSsKLSsgICAgICBlbHNlaWYgc3Ry aW5nLm1hdGNoKExVQV9BUElfVkVSLCAiZGV2IikgdGhlbgotKyAgICAgICAgLS0gd2UgYXJlIG9u IGEgZGV2IEFQSSB2ZXJzaW9uLCBzbyBjaGVja291dCB0aGUgZGV2Ci0rICAgICAgICAtLSBhcGkg dmVyc2lvbiBvciBjaGVja291dC9zdGF5IG9uIG1hc3RlcgotKyAgICAgICAgbG9nLm1zZyhsb2cu ZGVidWcsICJ0b29rIHRoZSBkZXYgYnJhbmNoIikKLSsgICAgICAgIGxvY2FsIG1hdGNoID0gZmFs c2UKLSsKLSsgICAgICAgIGZvciBfLCBicmFuY2ggaW4gaXBhaXJzKGJyYW5jaGVzKSBkbwotKyAg ICAgICAgICBsb2cubXNnKGxvZy5kZWJ1ZywgImNoZWNraW5nIGJyYW5jaCAiIC4uIGJyYW5jaCAu LiAiIGFnYWluc3QgQVBJICIgLi4gTFVBX0FQSV9WRVIpCi0rICAgICAgICAgIGlmIExVQV9BUElf VkVSID09IGJyYW5jaCB0aGVuCi0rICAgICAgICAgICAgbWF0Y2ggPSB0cnVlCi0rICAgICAgICAg ICAgbG9nLm1zZyhsb2cuaW5mbywgImNoZWNraW5nIG91dCByZXBvIGRldmVsb3BtZW50IGJyYW5j aCAiIC4uIGJyYW5jaCkKLSsgICAgICAgICAgICBjaGVja291dF9yZXBvX2JyYW5jaChyZXBvLCBi cmFuY2gpCi0rICAgICAgICAgIGVuZAotKyAgICAgICAgZW5kCi0rCi0rICAgICAgICBpZiBub3Qg bWF0Y2ggdGhlbgotKyAgICAgICAgICBpZiBjdXJyZW50X2JyYW5jaCA9PSAibWFzdGVyIiB0aGVu Ci0rICAgICAgICAgICAgbG9nLm1zZyhsb2cuaW5mbywgInN0YXlpbmcgb24gbWFzdGVyLCBubyBk ZXYgYnJhbmNoIHlldCIpCi0rICAgICAgICAgIGVsc2UKLSsgICAgICAgICAgICBsb2cubXNnKGxv Zy5pbmZvLCAibm8gZGV2IGJyYW5jaCBhdmFpbGFibGUsIGNoZWNraW5nIG91dCBtYXN0ZXIiKQot KyAgICAgICAgICAgIGNoZWNrb3V0X3JlcG9fYnJhbmNoKHJlcG8sICJtYXN0ZXIiKQotKyAgICAg ICAgICBlbmQKLSsgICAgICAgIGVuZAotKwotKyAgICAgIGVsc2VpZiAjYnJhbmNoZXMgPiAwIGFu ZCBMVUFfQVBJX1ZFUiA+IGJyYW5jaGVzWyNicmFuY2hlc10gdGhlbgotKyAgICAgICAgbG9nLm1z Zyhsb2cuaW5mbywgIm5vIG5ld2VyIGJyYW5jaGVzLCBzdGF5aW5nIG9uIG1hc3RlciIpCi0rICAg ICAgICAtLSBzdGF5IG9uIG1hc3RlcgotKwotKyAgICAgIGVsc2UKLSsgICAgICAgIC0tIGNoZWNr b3V0IHRoZSBhcHByb3ByaWF0ZSBicmFuY2ggZm9yIEFQSSB2ZXJzaW9uIGlmIGl0IGV4aXN0cwot KyAgICAgICAgbG9nLm1zZyhsb2cuaW5mbywgImNoZWNraW5nIG91dCB0aGUgYXBwcm9wcmlhdGUg QVBJIGJyYW5jaCIpCi0rCi0rICAgICAgICBsb2NhbCBtYXRjaCA9IGZhbHNlCi0rCi0rICAgICAg ICBmb3IgX3gsIGJyYW5jaCBpbiBpcGFpcnMoYnJhbmNoZXMpIGRvCi0rICAgICAgICAgIGxvZy5t c2cobG9nLmRlYnVnLCAiY2hlY2tpbmcgYnJhbmNoICIgLi4gYnJhbmNoIC4uICIgYWdhaW5zdCBB UEkgIiAuLiBMVUFfQVBJX1ZFUikKLSsKLSsgICAgICAgICAgaWYgTFVBX0FQSV9WRVIgPT0gYnJh bmNoIHRoZW4KLSsgICAgICAgICAgICBtYXRjaCA9IHRydWUKLSsgICAgICAgICAgICBsb2cubXNn KGxvZy5pbmZvLCAiY2hlY2tpbmcgb3V0IHJlcG8gYnJhbmNoICIgLi4gYnJhbmNoKQotKyAgICAg ICAgICAgIGNoZWNrb3V0X3JlcG9fYnJhbmNoKHJlcG8sIGJyYW5jaCkKLSsgICAgICAgICAgICBs b2cubXNnKGxvZy5zY3JlZW4sIF8oInlvdSBtdXN0IHJlc3RhcnQgZGFya3RhYmxlIHRvIHVzZSB0 aGUgY29ycmVjdCB2ZXJzaW9uIG9mIHRoZSBsdWEgc2NyaXB0cyIpKQotKyAgICAgICAgICAgIHJl dHVybgotKyAgICAgICAgICBlbmQKLSsKLSsgICAgICAgIGVuZAotKwotKyAgICAgICAgaWYgbm90 IG1hdGNoIHRoZW4KLSsgICAgICAgICAgbG9nLm1zZyhsb2cud2FybiwgIm5vIG1hdGNoaW5nIGJy YW5jaCBmb3VuZCBmb3IgIiAuLiBMVUFfQVBJX1ZFUikKLSsgICAgICAgIGVuZAotKwotKyAgICAg IGVuZAotKyAgICBlbmQKLSsgIGVuZAotK2VuZAotKwotK3NjYW5fc2NyaXB0cyhMVUFfRElSKQot K2xvZy5tc2cobG9nLmluZm8sICJmaW5pc2hlZCBwcm9jZXNzaW5nIHNjcmlwdHMiKQotKwotK2lm IHN5c3RlbV9iYXNlZCB0aGVuCi0rICAtLSBleGVjIHVzZXIgbHVhcmMgZmlsZSBpZiBpdCBleGlz dHMKLSsgIGxvY2FsIGx1YXJjID0gbG9hZGZpbGUoVVNFUl9MVUFfRElSIC4uICJyYyIpCi0rICBp ZiBsdWFyYyB0aGVuCi0rICAgIGx1YXJjKCkKLSsgIGVuZAotKwotKyAgaWYgZGYudGVzdF9maWxl KFVTRVJfTFVBX0RJUiwgImQiKSB0aGVuCi0rICAgIExVQV9ESVIgPSBVU0VSX0xVQV9ESVIKLSsg ICAgc2Nhbl9zY3JpcHRzKExVQV9ESVIpCi0rICAgIExVQV9ESVIgPSBTWVNURU1fTFVBX0RJUgot KyAgZW5kCi0rCi0rICBkdC5jb25maWd1cmF0aW9uWyJsdWFfZGlyIl0gPSBMVUFfRElSCi0rCi0r ICBkdC5wcmludF9sb2coImx1YSBkaXIgaXMgIiAuLiBkdC5jb25maWd1cmF0aW9uLmx1YV9kaXIp Ci0rICAtLSBzY2FuX3NjcmlwdChVU0VSX0xVQV9ESVIpCi0rZW5kCi0rCi0rCi0rLS0gLSAtIC0g LSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAotKy0tIFUgUyBFIFIgIEkg TiBUIEUgUiBGIEEgQyBFCi0rLS0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIAotKwotKy0tIHVwZGF0ZSB0aGUgc2NyaXB0cwotKwotK3NtLndpZGdldHMudXBk YXRlX3NjcmlwdF9jaG9pY2VzID0gZHQubmV3X3dpZGdldCgiY29tYm9ib3giKXsKLSsgIGxhYmVs ID0gXygic2NyaXB0cyB0byB1cGRhdGUiKSwKLSsgIHRvb2x0aXAgPSBfKCJzZWxlY3QgdGhlIHNj cmlwdHMgaW5zdGFsbGF0aW9uIHRvIHVwZGF0ZSIpLAotKyAgc2VsZWN0ZWQgPSAxLAotKyAgY2hh bmdlZF9jYWxsYmFjayA9IGZ1bmN0aW9uKHRoaXMpCi0rICAgIHByZWZfd3JpdGUoInVwZGF0ZV9z Y3JpcHRfY2hvaWNlcyIsICJpbnRlZ2VyIiwgdGhpcy5zZWxlY3RlZCkKLSsgIGVuZCwKLSsgICJw bGFjZWhvbGRlciIsCi0rfQotKwotK3NtLndpZGdldHMudXBkYXRlID0gZHQubmV3X3dpZGdldCgi YnV0dG9uIil7Ci0rICBsYWJlbCA9IF8oInVwZGF0ZSBzY3JpcHRzIiksCi0rICB0b29sdGlwID0g XygidXBkYXRlIHRoZSBsdWEgc2NyaXB0cyBmcm9tIHRoZSByZXBvc2l0b3J5IiksCi0rICBjbGlj a2VkX2NhbGxiYWNrID0gZnVuY3Rpb24odGhpcykKLSsgICAgdXBkYXRlX3NjcmlwdHMoKQotKyAg ZW5kCi0rfQotKwotKy0tIGFkZCBhZGRpdGlvbmFsIHNjcmlwdHMKLSsKLStzbS53aWRnZXRzLnNj cmlwdF91cmwgPSBkdC5uZXdfd2lkZ2V0KCJlbnRyeSIpewotKyAgdGV4dCA9ICIiLAotKyAgcGxh Y2Vob2xkZXIgPSAiaHR0cHM6Ly88cmVwb3NpdG9yeSB1cmw+IiwKLSsgIHRvb2x0aXAgPSBfKCJl bnRlciB0aGUgVVJMIG9mIHRoZSBnaXQgcmVwb3NpdG9yeSBjb250YWluaW5nIHRoZSBzY3JpcHRz IHlvdSB3aXNoIHRvIGFkZCIpCi0rfQotKwotK3NtLndpZGdldHMubmV3X2ZvbGRlciA9IGR0Lm5l d193aWRnZXQoImVudHJ5Iil7Ci0rICB0ZXh0ID0gIiIsCi0rICBwbGFjZWhvbGRlciA9IF8oIm5h bWUgb2YgbmV3IGZvbGRlciIpLAotKyAgdG9vbHRpcCA9IF8oImVudGVyIGEgZm9sZGVyIG5hbWUg Zm9yIHRoZSBhZGRpdGlvbmFsIHNjcmlwdHMiKQotK30KLSsKLStzbS53aWRnZXRzLmFkZF9zY3Jp cHRzID0gZHQubmV3X3dpZGdldCgiYm94Iil7Ci0rICBvcmllbnRhdGlvbiA9IHZlcnRpY2FsLAot KyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9IF8oIlVSTCB0byBkb3dubG9hZCBhZGRp dGlvbmFsIHNjcmlwdHMgZnJvbSIpfSwKLSsgIHNtLndpZGdldHMuc2NyaXB0X3VybCwKLSsgIGR0 Lm5ld193aWRnZXQoImxhYmVsIil7bGFiZWwgPSBfKCJuZXcgZm9sZGVyIHRvIHBsYWNlIHNjcmlw dHMgaW4iKX0sCi0rICBzbS53aWRnZXRzLm5ld19mb2xkZXIsCi0rICBkdC5uZXdfd2lkZ2V0KCJi dXR0b24iKXsKLSsgICAgbGFiZWwgPSBfKCJpbnN0YWxsIGFkZGl0aW9uYWwgc2NyaXB0cyIpLAot KyAgICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24odGhpcykKLSsgICAgICBpbnN0YWxsX3Nj cmlwdHMoKQotKyAgICBlbmQKLSsgIH0KLSt9Ci0rCi0rc20ud2lkZ2V0cy5hbGxvd19kaXNhYmxl ID0gZHQubmV3X3dpZGdldCgiY2hlY2tfYnV0dG9uIil7Ci0rICBsYWJlbCA9IF8oJ2VuYWJsZSAi ZGlzYWJsZSBzY3JpcHRzIiBidXR0b24nKSwKLSsgIHZhbHVlID0gZmFsc2UsCi0rICBjbGlja2Vk X2NhbGxiYWNrID0gZnVuY3Rpb24odGhpcykKLSsgICAgaWYgdGhpcy52YWx1ZSA9PSB0cnVlIHRo ZW4KLSsgICAgICBzbS53aWRnZXRzLmRpc2FibGVfc2NyaXB0cy5zZW5zaXRpdmUgPSB0cnVlCi0r ICAgIGVsc2UKLSsgICAgICBzbS53aWRnZXRzLmRpc2FibGVfc2NyaXB0cy5zZW5zaXRpdmUgPSBm YWxzZQotKyAgICBlbmQKLSsgIGVuZCwKLSt9Ci0rCi0rc20ud2lkZ2V0cy5kaXNhYmxlX3Njcmlw dHMgPSBkdC5uZXdfd2lkZ2V0KCJidXR0b24iKXsKLSsgIGxhYmVsID0gXygiZGlzYWJsZSBzY3Jp cHRzIiksCi0rICBzZW5zaXRpdmUgPSBmYWxzZSwKLSsgIGNsaWNrZWRfY2FsbGJhY2sgPSBmdW5j dGlvbih0aGlzKQotKyAgICBsb2NhbCBMVUFSQyA9IGR0LmNvbmZpZ3VyYXRpb24uY29uZmlnX2Rp ciAuLiBQUyAuLiAibHVhcmMiCi0rICAgIGRmLmZpbGVfbW92ZShMVUFSQywgTFVBUkMgLi4gIi5k aXNhYmxlZCIpCi0rICAgIGxvZy5tc2cobG9nLmluZm8sICJsdWEgc2NyaXB0cyBkaXNhYmxlZCIp Ci0rICAgIGxvZy5tc2cobG9nLnNjcmVlbiwgXygibHVhIHNjcmlwdHMgd2lsbCBub3QgcnVuIHRo ZSBuZXh0IHRpbWUgZGFya3RhYmxlIGlzIHN0YXJ0ZWQiKSkKLSsgIGVuZAotK30KLSsKLStzbS53 aWRnZXRzLmluc3RhbGxfdXBkYXRlID0gZHQubmV3X3dpZGdldCgiYm94Iil7Ci0rICBvcmllbnRh dGlvbiA9ICJ2ZXJ0aWNhbCIsCi0rICBkdC5uZXdfd2lkZ2V0KCJzZWN0aW9uX2xhYmVsIil7bGFi ZWwgPSAiICJ9LAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9ICIgIn0sCi0rICBk dC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0gXygidXBkYXRlIHNjcmlwdHMiKX0sCi0rICBk dC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0gIiAifSwKLSsgIHNtLndpZGdldHMudXBkYXRl X3NjcmlwdF9jaG9pY2VzLAotKyAgc20ud2lkZ2V0cy51cGRhdGUsCi0rICBkdC5uZXdfd2lkZ2V0 KCJzZWN0aW9uX2xhYmVsIil7bGFiZWwgPSAiICAifSwKLSsgIGR0Lm5ld193aWRnZXQoImxhYmVs Iil7bGFiZWwgPSAiICJ9LAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9IF8oImFk ZCBtb3JlIHNjcmlwdHMiKX0sCi0rICBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0gIiAi fSwKLSsgIHNtLndpZGdldHMuYWRkX3NjcmlwdHMsCi0rICBkdC5uZXdfd2lkZ2V0KCJzZWN0aW9u X2xhYmVsIil7bGFiZWwgPSAiICJ9LAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9 ICIgIn0sCi0rICBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0gXygiZGlzYWJsZSBzY3Jp cHRzIil9LAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9ICIgIn0sCi0rICBzbS53 aWRnZXRzLmFsbG93X2Rpc2FibGUsCi0rICBzbS53aWRnZXRzLmRpc2FibGVfc2NyaXB0cywKLSsg IGR0Lm5ld193aWRnZXQoImxhYmVsIil7bGFiZWwgPSAiICJ9LAotK30KLSsKLSstLSBtYW5hZ2Ug dGhlIHNjcmlwdHMKLSsKLStzbS53aWRnZXRzLmZvbGRlcl9zZWxlY3RvciA9IGR0Lm5ld193aWRn ZXQoImNvbWJvYm94Iil7Ci0rICBsYWJlbCA9IF8oImZvbGRlciIpLAotKyAgdG9vbHRpcCA9IF8o ICJzZWxlY3QgdGhlIHNjcmlwdCBmb2xkZXIiKSwKLSsgIHNlbGVjdGVkID0gMSwKLSsgIGNoYW5n ZWRfY2FsbGJhY2sgPSBmdW5jdGlvbihzZWxmKQotKyAgICBpZiBzbS5ydW4gdGhlbgotKyAgICAg IHByZWZfd3JpdGUoImZvbGRlcl9zZWxlY3RvciIsICJpbnRlZ2VyIiwgc2VsZi5zZWxlY3RlZCkK LSsgICAgICBjaGFuZ2VfZm9sZGVyKHNtLmZvbGRlcnNbc2VsZi5zZWxlY3RlZF0pCi0rICAgIGVu ZAotKyAgZW5kLAotKyAgdGFibGUudW5wYWNrKHNtLnRyYW5zbGF0ZWRfZm9sZGVycyksCi0rfQot KwotKy0tIGEgc2NyaXB0ICJidXR0b24iIGNvbnNpc3RzIG9mOgotKy0tICAgICAgYSBidXR0b24g dG8gc3RhcnQgYW5kIHN0b3AgdGhlIHNjcmlwdAotKy0tICAgICAgYSBsYWJlbCB0aGF0IGNvbnRh aW5zIHRoZSBuYW1lIG9mIHRoZSBzY3JpcHQKLSstLSAgICAgIGEgaG9yaXpvbnRhbCBib3ggdGhh dCBjb250YWlucyB0aGUgYnV0dG9uIGFuZCB0aGUgbGFiZWwKLSsKLStzbS53aWRnZXRzLmJ1dHRv bnMgPXt9Ci0rc20ud2lkZ2V0cy5sYWJlbHMgPSB7fQotK3NtLndpZGdldHMuYm94ZXMgPSB7fQot KwotK2ZvciBpID0xLCBERUZBVUxUX0JVVFRPTlNfUEVSX1BBR0UgZG8gCi0rICB0YWJsZS5pbnNl cnQoc20ud2lkZ2V0cy5idXR0b25zLCBkdC5uZXdfd2lkZ2V0KCJidXR0b24iKXt9KQotKyAgdGFi bGUuaW5zZXJ0KHNtLndpZGdldHMubGFiZWxzLCBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe30pCi0r ICB0YWJsZS5pbnNlcnQoc20ud2lkZ2V0cy5ib3hlcywgZHQubmV3X3dpZGdldCgiYm94Iil7IG9y aWVudGF0aW9uID0gImhvcml6b250YWwiLCBleHBhbmQgPSBmYWxzZSwgZmlsbCA9IGZhbHNlLCAK LSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c20ud2lkZ2V0cy5idXR0b25zW2ldLCBzbS53aWRnZXRzLmxhYmVsc1tpXX0pCi0rICBzbS5wYWdl X3N0YXR1cy5idXR0b25zX2NyZWF0ZWQgPSBzbS5wYWdlX3N0YXR1cy5idXR0b25zX2NyZWF0ZWQg KyAxCi0rZW5kCi0rCi0rbG9jYWwgcGFnZV9iYWNrID0gIjwiCi0rbG9jYWwgcGFnZV9mb3J3YXJk ID0gIj4iCi0rCi0rc20ud2lkZ2V0cy5wYWdlX3N0YXR1cyA9IGR0Lm5ld193aWRnZXQoImxhYmVs Iil7bGFiZWwgPSBfKCJwYWdlIikgLi4gIjoifQotKwotK3NtLndpZGdldHMucGFnZV9iYWNrID0g ZHQubmV3X3dpZGdldCgiYnV0dG9uIil7Ci0rICBsYWJlbCA9IHBhZ2VfYmFjaywKLSsgIGNsaWNr ZWRfY2FsbGJhY2sgPSBmdW5jdGlvbih0aGlzKQotKyAgICBpZiBzbS5ydW4gdGhlbiAKLSsgICAg ICBwYWdpbmF0ZSgwKQotKyAgICBlbmQKLSsgIGVuZAotK30KLSsKLStzbS53aWRnZXRzLnBhZ2Vf Zm9yd2FyZCA9IGR0Lm5ld193aWRnZXQoImJ1dHRvbiIpewotKyAgbGFiZWwgPSBwYWdlX2Zvcndh cmQsCi0rICBjbGlja2VkX2NhbGxiYWNrID0gZnVuY3Rpb24odGhpcykKLSsgICAgaWYgc20ucnVu IHRoZW4KLSsgICAgICBwYWdpbmF0ZSgxKQotKyAgICBlbmQKLSsgIGVuZAotK30KLSsKLStzbS53 aWRnZXRzLnBhZ2VfY29udHJvbCA9IGR0Lm5ld193aWRnZXQoImJveCIpewotKyAgb3JpZW50YXRp b24gPSAiaG9yaXpvbnRhbCIsCi0rICBzbS53aWRnZXRzLnBhZ2VfYmFjaywKLSsgIHNtLndpZGdl dHMucGFnZV9zdGF0dXMsCi0rICBzbS53aWRnZXRzLnBhZ2VfZm9yd2FyZCwKLSt9Ci0rCi0rc20u d2lkZ2V0cy5zY3JpcHRzID0gZHQubmV3X3dpZGdldCgiYm94Iil7Ci0rICBvcmllbnRhdGlvbiA9 IHZlcnRpY2FsLAotKyAgZHQubmV3X3dpZGdldCgic2VjdGlvbl9sYWJlbCIpe2xhYmVsID0gIiAi fSwKLSsgIGR0Lm5ld193aWRnZXQoImxhYmVsIil7bGFiZWwgPSAiICJ9LAotKyAgZHQubmV3X3dp ZGdldCgibGFiZWwiKXtsYWJlbCA9IF8oInNjcmlwdHMiKX0sCi0rICBzbS53aWRnZXRzLmZvbGRl cl9zZWxlY3RvciwKLSsgIHNtLndpZGdldHMucGFnZV9jb250cm9sLAotKyAgdGFibGUudW5wYWNr KHNtLndpZGdldHMuYm94ZXMpLAotK30KLSsKLSstLSBjb25maWd1cmUgb3B0aW9ucwotKwotK3Nt LndpZGdldHMubnVtX2J1dHRvbnMgPSBkdC5uZXdfd2lkZ2V0KCJzbGlkZXIiKXsKLSsgIGxhYmVs ID0gXygic2NyaXB0cyBwZXIgcGFnZSIpLAotKyAgdG9vbHRpcCA9IF8oInNlbGVjdCBudW1iZXIg b2Ygc3RhcnQvc3RvcCBidXR0b25zIHRvIGRpc3BsYXkiKSwKLSsgIHNvZnRfbWluID0gTUlOX0JV VFRPTlNfUEVSX1BBR0UsCi0rICBoYXJkX21pbiA9IE1JTl9CVVRUT05TX1BFUl9QQUdFLAotKyAg c29mdF9tYXggPSBNQVhfQlVUVE9OU19QRVJfUEFHRSwKLSsgIGhhcmRfbWF4ID0gTUFYX0JVVFRP TlNfUEVSX1BBR0UsCi0rICBzdGVwID0gMSwKLSsgIGRpZ2l0cyA9IDAsCi0rICB2YWx1ZSA9IDEw Ci0rfQotKwotK3NtLndpZGdldHMuY2hhbmdlX2J1dHRvbnMgPSBkdC5uZXdfd2lkZ2V0KCJidXR0 b24iKXsKLSsgIGxhYmVsID0gXygiY2hhbmdlIG51bWJlciBvZiBidXR0b25zIiksCi0rICBjbGlj a2VkX2NhbGxiYWNrID0gZnVuY3Rpb24odGhpcykKLSsgICAgY2hhbmdlX251bV9idXR0b25zKCkK LSsgIGVuZAotK30KLSsKLStzbS53aWRnZXRzLmNvbmZpZ3VyZSA9IGR0Lm5ld193aWRnZXQoImJv eCIpewotKyAgb3JpZW50YXRpb24gPSAidmVydGljYWwiLAotKyAgZHQubmV3X3dpZGdldCgic2Vj dGlvbl9sYWJlbCIpe2xhYmVsID0gIiAifSwKLSsgIGR0Lm5ld193aWRnZXQoImxhYmVsIil7bGFi ZWwgPSAiICJ9LAotKyAgZHQubmV3X3dpZGdldCgibGFiZWwiKXtsYWJlbCA9IF8oImNvbmZpZ3Vy YXRpb24iKX0sCi0rICBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0gIiAifSwKLSsgIHNt LndpZGdldHMubnVtX2J1dHRvbnMsCi0rICBkdC5uZXdfd2lkZ2V0KCJsYWJlbCIpe2xhYmVsID0g IiAifSwKLSsgIHNtLndpZGdldHMuY2hhbmdlX2J1dHRvbnMsCi0rICBkdC5uZXdfd2lkZ2V0KCJs YWJlbCIpe2xhYmVsID0gIiAifSwKLSt9Ci0rCi0rLS0gc3RhY2sgZm9yIHRoZSBvcHRpb25zCi0r Ci0rc20ud2lkZ2V0cy5tYWluX3N0YWNrID0gZHQubmV3X3dpZGdldCgic3RhY2siKXsKLSsgIHNt LndpZGdldHMuaW5zdGFsbF91cGRhdGUsCi0rICBzbS53aWRnZXRzLmNvbmZpZ3VyZSwKLSsgIHNt LndpZGdldHMuc2NyaXB0cywKLSt9Ci0rCi0rc20ud2lkZ2V0cy5tYWluX3N0YWNrLmhfc2l6ZV9m aXhlZCA9IGZhbHNlCi0rc20ud2lkZ2V0cy5tYWluX3N0YWNrLnZfc2l6ZV9maXhlZCA9IGZhbHNl Ci0rCi0rLS0gbWFpbiBtZW51Ci0rCi0rc20ud2lkZ2V0cy5tYWluX21lbnUgPSBkdC5uZXdfd2lk Z2V0KCJjb21ib2JveCIpewotKyAgbGFiZWwgPSBfKCJhY3Rpb24iKSwKLSsgIGNoYW5nZWRfY2Fs bGJhY2sgPSBmdW5jdGlvbihzZWxmKQotKyAgICBzbS53aWRnZXRzLm1haW5fc3RhY2suYWN0aXZl ID0gc2VsZi5zZWxlY3RlZAotKyAgICBwcmVmX3dyaXRlKCJtYWluX21lbnVfYWN0aW9uIiwgImlu dGVnZXIiLCBzZWxmLnNlbGVjdGVkKQotKyAgICBsb2cubXNnKGxvZy5kZWJ1ZywgInNhdmVkICIg Li4gc2VsZi5zZWxlY3RlZCAuLiAiIGZvciBtYWluIG1lbnUiKQotKyAgZW5kLAotKyAgIF8oImlu c3RhbGwvdXBkYXRlIHNjcmlwdHMiKSwgXygiY29uZmlndXJlIiksIF8oInN0YXJ0L3N0b3Agc2Ny aXB0cyIpCi0rfQotKwotKy0tIHdpZGdldCBmb3IgbW9kdWxlIAotKwotK3NtLndpZGdldHMubWFp bl9ib3ggPSBkdC5uZXdfd2lkZ2V0KCJib3giKXsKLSsgIHNtLndpZGdldHMubWFpbl9tZW51LAot KyAgc20ud2lkZ2V0cy5tYWluX3N0YWNrCi0rfQotKwotK3NjcmlwdF9tYW5hZ2VyX3J1bm5pbmdf c2NyaXB0ID0gbmlsCi0rCi0rLS0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0g LSAtIC0gLSAtIAotKy0tIEQgQSBSIEsgVCBBIEIgTCBFICBJIE4gVCBFIEcgUiBBIFQgSSBPIE4g Ci0rLS0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIAotKwot K2lmIChkdC5ndWkuY3VycmVudF92aWV3KCkuaWQgPT0gImxpZ2h0dGFibGUiKSBhbmQgZGFya3Rh YmxlX2d1aV9zYWZlIHRoZW4KLSsgIGluc3RhbGxfbW9kdWxlKCkKLStlbHNlCi0rICBpZiBub3Qg c20uZXZlbnRfcmVnaXN0ZXJlZCB0aGVuCi0rICAgIGR0LnJlZ2lzdGVyX2V2ZW50KAotKyAgICAg ICJzY3JpcHRfbWFuYWdlciIsICJ2aWV3LWNoYW5nZWQiLAotKyAgICAgIGZ1bmN0aW9uKGV2ZW50 LCBvbGRfdmlldywgbmV3X3ZpZXcpCi0rICAgICAgICBpZiBuZXdfdmlldy5uYW1lID09ICJsaWdo dHRhYmxlIiBhbmQgb2xkX3ZpZXcubmFtZSA9PSAiZGFya3Jvb20iIHRoZW4KLSsgICAgICAgICAg aW5zdGFsbF9tb2R1bGUoKQotKyAgICAgICAgZW5kCi0rICAgICAgZW5kCi0rICAgICkKLSsgICAg c20uZXZlbnRfcmVnaXN0ZXJlZCA9IHRydWUKLSsgIGVuZAotK2VuZAotKwo=