ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZG9jL2V2YWwudHh0IGIvcnVudGltZS9kb2MvZXZhbC50eHQKaW5kZXggN2Y0Y2Y4MS4uODNiZjJlMyAxMDA2NDQKLS0tIGEvcnVudGltZS9kb2MvZXZhbC50eHQKKysrIGIvcnVudGltZS9kb2MvZXZhbC50eHQKQEAgLTEsNCArMSw0IEBACi0qZXZhbC50eHQqICAgICAgRm9yIFZpbSB2ZXJzaW9uIDcuMC4gIExhc3QgY2hhbmdlOiAyMDA3IEFwciAyNAorKmV2YWwudHh0KiAgICAgIEZvciBWaW0gdmVyc2lvbiA3LjFhLiAgTGFzdCBjaGFuZ2U6IDIwMDcgTWF5IDAzCiAKIAogCQkgIFZJTSBSRUZFUkVOQ0UgTUFOVUFMICAgIGJ5IEJyYW0gTW9vbGVuYWFyCkBAIC0xOTIsNyArMTkyLDcgQEAKIAk6bGV0IHNob3J0bGlzdCA9IG15bGlzdFsyOi0xXQkiIGdldCBMaXN0IFszLCAiZm91ciJdCiAKIE9taXR0aW5nIHRoZSBmaXJzdCBpbmRleCBpcyBzaW1pbGFyIHRvIHplcm8uICBPbWl0dGluZyB0aGUgbGFzdCBpbmRleCBpcwotc2ltaWxhciB0byAtMS4KK3NpbWlsYXIgdG8gLTEuID4KIAk6bGV0IGVuZGxpc3QgPSBteWxpc3RbMjpdCSIgZnJvbSBpdGVtIDIgdG8gdGhlIGVuZDogWzMsICJmb3VyIl0KIAk6bGV0IHNob3J0bGlzdCA9IG15bGlzdFsyOjJdCSIgTGlzdCB3aXRoIG9uZSBpdGVtOiBbM10KIAk6bGV0IG90aGVybGlzdCA9IG15bGlzdFs6XQkiIG1ha2UgYSBjb3B5IG9mIHRoZSBMaXN0CkBAIC00NDQsOCArNDQ0LDggQEAKIAogSWYgeW91IHdhbnQgYm90aCB0aGUga2V5IGFuZCB0aGUgdmFsdWUgdXNlIHRoZSB8aXRlbXMoKXwgZnVuY3Rpb24uICBJdCByZXR1cm5zCiBhIExpc3QgaW4gd2hpY2ggZWFjaCBpdGVtIGlzIGEgIExpc3Qgd2l0aCB0d28gaXRlbXMsIHRoZSBrZXkgYW5kIHRoZSB2YWx1ZTogPgotCTpmb3IgZW50cnkgaW4gaXRlbXMobXlkaWN0KQotCTogICBlY2hvIGVudHJ5WzBdIC4gJzogJyAuIGVudHJ5WzFdCisJOmZvciBba2V5LCB2YWx1ZV0gaW4gaXRlbXMobXlkaWN0KQorCTogICBlY2hvIGtleSAuICc6ICcgLiB2YWx1ZQogCTplbmRmb3IKIAogCkBAIC00ODYsNyArNDg2LDcgQEAKIGFkaWN0LgogCiBXZWVkaW5nIG91dCBlbnRyaWVzIGZyb20gYSBEaWN0aW9uYXJ5IGNhbiBiZSBkb25lIHdpdGggfGZpbHRlcigpfDogPgotCTpjYWxsIGZpbHRlcihkaWN0ICd2OnZhbCA9fiAieCInKQorCTpjYWxsIGZpbHRlcihkaWN0LCAndjp2YWwgPX4gIngiJykKIFRoaXMgcmVtb3ZlcyBhbGwgZW50cmllcyBmcm9tICJkaWN0IiB3aXRoIGEgdmFsdWUgbm90IG1hdGNoaW5nICd4Jy4KIAogCkBAIC02NTAsNiArNjUwLDkgQEAKIAk6XAkJPyAibGFzdCIKIAk6XAkJOiBsbnVtCiAKK1lvdSBzaG91bGQgYWx3YXlzIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgJzonLCBvdGhlcndpc2UgaXQgY2FuIGJlIG1pc3Rha2VuIGZvcgordXNlIGluIGEgdmFyaWFibGUgc3VjaCBhcyAiYToxIi4KKwogCiBleHByMiBhbmQgZXhwcjMJCQkJCQkqZXhwcjIqICpleHByMyoKIC0tLS0tLS0tLS0tLS0tLQpAQCAtNzUwLDEwICs3NTMsMTIgQEAKIG5lY2Vzc2FyaWx5IHRoZSBhbHBoYWJldGljYWwgZGlmZmVyZW5jZSBpbiB0aGUgbG9jYWwgbGFuZ3VhZ2UuCiAKIFdoZW4gdXNpbmcgdGhlIG9wZXJhdG9ycyB3aXRoIGEgdHJhaWxpbmcgJyMiLCBvciB0aGUgc2hvcnQgdmVyc2lvbiBhbmQKLSdpZ25vcmVjYXNlJyBpcyBvZmYsIHRoZSBjb21wYXJpbmcgaXMgZG9uZSB3aXRoIHN0cmNtcCgpLgorJ2lnbm9yZWNhc2UnIGlzIG9mZiwgdGhlIGNvbXBhcmluZyBpcyBkb25lIHdpdGggc3RyY21wKCk6IGNhc2UgbWF0dGVycy4KIAogV2hlbiB1c2luZyB0aGUgb3BlcmF0b3JzIHdpdGggYSB0cmFpbGluZyAnPycsIG9yIHRoZSBzaG9ydCB2ZXJzaW9uIGFuZAotJ2lnbm9yZWNhc2UnIGlzIHNldCwgdGhlIGNvbXBhcmluZyBpcyBkb25lIHdpdGggc3RyaWNtcCgpLgorJ2lnbm9yZWNhc2UnIGlzIHNldCwgdGhlIGNvbXBhcmluZyBpcyBkb25lIHdpdGggc3RyaWNtcCgpOiBjYXNlIGlzIGlnbm9yZWQuCisKKydzbWFydGNhc2UnIGlzIG5vdCB1c2VkLgogCiBUaGUgIj1+IiBhbmQgIiF+IiBvcGVyYXRvcnMgbWF0Y2ggdGhlIGxlZnRoYW5kIGFyZ3VtZW50IHdpdGggdGhlIHJpZ2h0aGFuZAogYXJndW1lbnQsIHdoaWNoIGlzIHVzZWQgYXMgYSBwYXR0ZXJuLiAgU2VlIHxwYXR0ZXJufCBmb3Igd2hhdCBhIHBhdHRlcm4gaXMuCkBAIC05MzIsNiArOTM3LDEwIEBACiBcIglkb3VibGUgcXVvdGUKIFw8eHh4PglTcGVjaWFsIGtleSBuYW1lZCAieHh4Ii4gIGUuZy4gIlw8Qy1XPiIgZm9yIENUUkwtVy4KIAorTm90ZSB0aGF0ICJceGZmIiBpcyBzdG9yZWQgYXMgdGhlIGJ5dGUgMjU1LCB3aGljaCBtYXkgYmUgaW52YWxpZCBpbiBzb21lCitlbmNvZGluZ3MuICBVc2UgIlx1MDBmZiIgdG8gc3RvcmUgY2hhcmFjdGVyIDI1NSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgdmFsdWUKK29mICdlbmNvZGluZycuCisKIE5vdGUgdGhhdCAiXDAwMCIgYW5kICJceDAwIiBmb3JjZSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCiAKIApAQCAtOTY1LDcgKzk3NCw3IEBACiBhbnl3YXkuCiAKIAotcmVnaXN0ZXIJCQkJCQkqZXhwci1yZWdpc3RlcioKK3JlZ2lzdGVyCQkJCQkJKmV4cHItcmVnaXN0ZXIqICpAcioKIC0tLS0tLS0tCiBAcgkJCWNvbnRlbnRzIG9mIHJlZ2lzdGVyICdyJwogCkBAIC0xMDc5LDcgKzEwODgsMTAgQEAKIAogCQkJCQkJKmxvY2FsLXZhcmlhYmxlKiAqbDp2YXIqCiBJbnNpZGUgZnVuY3Rpb25zIGxvY2FsIHZhcmlhYmxlcyBhcmUgYWNjZXNzZWQgd2l0aG91dCBwcmVwZW5kaW5nIGFueXRoaW5nLgotQnV0IHlvdSBjYW4gYWxzbyBwcmVwZW5kICJsOiIgaWYgeW91IGxpa2UuCitCdXQgeW91IGNhbiBhbHNvIHByZXBlbmQgImw6IiBpZiB5b3UgbGlrZS4gIEhvd2V2ZXIsIHdpdGhvdXQgcHJlcGVuZGluZyAibDoiCit5b3UgbWF5IHJ1biBpbnRvIHJlc2VydmVkIHZhcmlhYmxlIG5hbWVzLiAgRm9yIGV4YW1wbGUgImNvdW50Ii4gIEJ5IGl0c2VsZiBpdAorcmVmZXJzIHRvICJ2OmNvdW50Ii4gIFVzaW5nICJsOmNvdW50IiB5b3UgY2FuIGhhdmUgYSBsb2NhbCB2YXJpYWJsZSB3aXRoIHRoZQorc2FtZSBuYW1lLgogCiAJCQkJCQkqc2NyaXB0LXZhcmlhYmxlKiAqczp2YXIqCiBJbiBhIFZpbSBzY3JpcHQgdmFyaWFibGVzIHN0YXJ0aW5nIHdpdGggInM6IiBjYW4gYmUgdXNlZC4gIFRoZXkgY2Fubm90IGJlCkBAIC0xMDk3LDggKzExMDksOCBAQAogLSBtYXBwaW5ncwogLSBldGMuCiAKLXNjcmlwdCB2YXJpYWJsZXMgY2FuIGJlIHVzZWQgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggZ2xvYmFsIHZhcmlhYmxlIG5hbWVzLgotVGFrZSB0aGlzIGV4YW1wbGU6CitTY3JpcHQgdmFyaWFibGVzIGNhbiBiZSB1c2VkIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIGdsb2JhbCB2YXJpYWJsZSBuYW1lcy4KK1Rha2UgdGhpcyBleGFtcGxlOiA+CiAKIAlsZXQgczpjb3VudGVyID0gMAogCWZ1bmN0aW9uIE15Q291bnRlcigpCkBAIC0xODg5LDcgKzE5MDEsOSBAQAogCQkiIiBvciAiJSIgY2FuIGJlIHVzZWQgZm9yIHRoZSBjdXJyZW50IGJ1ZmZlciwgIiMiIGZvciB0aGUKIAkJYWx0ZXJuYXRlIGJ1ZmZlci4KIAkJQSBmdWxsIG1hdGNoIGlzIHByZWZlcnJlZCwgb3RoZXJ3aXNlIGEgbWF0Y2ggYXQgdGhlIHN0YXJ0LCBlbmQKLQkJb3IgbWlkZGxlIG9mIHRoZSBidWZmZXIgbmFtZSBpcyBhY2NlcHRlZC4KKwkJb3IgbWlkZGxlIG9mIHRoZSBidWZmZXIgbmFtZSBpcyBhY2NlcHRlZC4gIElmIHlvdSBvbmx5IHdhbnQgYQorCQlmdWxsIG1hdGNoIHRoZW4gcHV0ICJeIiBhdCB0aGUgc3RhcnQgYW5kICIkIiBhdCB0aGUgZW5kIG9mIHRoZQorCQlwYXR0ZXJuLgogCQlMaXN0ZWQgYnVmZmVycyBhcmUgZm91bmQgZmlyc3QuICBJZiB0aGVyZSBpcyBhIHNpbmdsZSBtYXRjaAogCQl3aXRoIGEgbGlzdGVkIGJ1ZmZlciwgdGhhdCBvbmUgaXMgcmV0dXJuZWQuICBOZXh0IHVubGlzdGVkCiAJCWJ1ZmZlcnMgYXJlIHNlYXJjaGVkIGZvci4KQEAgLTE5MzQsNiArMTk0OCw3IEBACiAKIDwJCVRoZSBudW1iZXIgY2FuIGJlIHVzZWQgd2l0aCB8Q1RSTC1XX3d8IGFuZCAiOndpbmNtZCB3IgogCQl8OndpbmNtZHwuCisJCU9ubHkgZGVhbHMgd2l0aCB0aGUgY3VycmVudCB0YWIgcGFnZS4KIAogCiBieXRlMmxpbmUoe2J5dGV9KQkJCQkJKmJ5dGUybGluZSgpKgpAQCAtMTk4NCw4ICsxOTk5LDggQEAKIAkJCWNoYXIybnIoIiAiKQkJcmV0dXJucyAzMgogCQkJY2hhcjJucigiQUJDIikJCXJldHVybnMgNjUKIDwJCVRoZSBjdXJyZW50ICdlbmNvZGluZycgaXMgdXNlZC4gIEV4YW1wbGUgZm9yICJ1dGYtOCI6ID4KLQkJCWNoYXIybnIoIj8iKQkJcmV0dXJucyAyMjUKLQkJCWNoYXIybnIoIj8iWzBdKQkJcmV0dXJucyAxOTUKKwkJCWNoYXIybnIoIuEiKQkJcmV0dXJucyAyMjUKKwkJCWNoYXIybnIoIuEiWzBdKQkJcmV0dXJucyAxOTUKIDwJCW5yMmNoYXIoKSBkb2VzIHRoZSBvcHBvc2l0ZS4KIAogY2luZGVudCh7bG51bX0pCQkJCQkJKmNpbmRlbnQoKSoKQEAgLTIwMDUsNyArMjAyMCw3IEBACiAJCQkgICAgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gdGhlIGN1cnNvciBsaW5lIHBsdXMgb25lKQogCQkgICAgJ3gJICAgIHBvc2l0aW9uIG9mIG1hcmsgeCAoaWYgdGhlIG1hcmsgaXMgbm90IHNldCwgMCBpcwogCQkJICAgIHJldHVybmVkKQotCQlUbyBnZXQgdGhlIGxpbmUgbnVtYmVyIHVzZSB8Y29sKCl8LiAgVG8gZ2V0IGJvdGggdXNlCisJCVRvIGdldCB0aGUgbGluZSBudW1iZXIgdXNlIHxsaW5lKCl8LiAgVG8gZ2V0IGJvdGggdXNlCiAJCXxnZXRwb3MoKXwuCiAJCUZvciB0aGUgc2NyZWVuIGNvbHVtbiBwb3NpdGlvbiB1c2UgfHZpcnRjb2woKXwuCiAJCU5vdGUgdGhhdCBvbmx5IG1hcmtzIGluIHRoZSBjdXJyZW50IGZpbGUgY2FuIGJlIHVzZWQuCkBAIC0yMDE1LDYgKzIwMzAsOCBAQAogCQkJY29sKCIndCIpCQljb2x1bW4gb2YgbWFyayB0CiAJCQljb2woIiciIC4gbWFya25hbWUpCWNvbHVtbiBvZiBtYXJrIG1hcmtuYW1lCiA8CQlUaGUgZmlyc3QgY29sdW1uIGlzIDEuICAwIGlzIHJldHVybmVkIGZvciBhbiBlcnJvci4KKwkJRm9yIGFuIHVwcGVyY2FzZSBtYXJrIHRoZSBjb2x1bW4gbWF5IGFjdHVhbGx5IGJlIGluIGFub3RoZXIKKwkJYnVmZmVyLgogCQlGb3IgdGhlIGN1cnNvciBwb3NpdGlvbiwgd2hlbiAndmlydHVhbGVkaXQnIGlzIGFjdGl2ZSwgdGhlCiAJCWNvbHVtbiBpcyBvbmUgaGlnaGVyIGlmIHRoZSBjdXJzb3IgaXMgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUKIAkJbGluZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gb2J0YWluIHRoZSBjb2x1bW4gaW4gSW5zZXJ0IG1vZGU6ID4KQEAgLTIwMjcsOCArMjA0NCw4IEBACiBjb21wbGV0ZSh7c3RhcnRjb2x9LCB7bWF0Y2hlc30pCQkJKmNvbXBsZXRlKCkqICpFNzg1KgogCQlTZXQgdGhlIG1hdGNoZXMgZm9yIEluc2VydCBtb2RlIGNvbXBsZXRpb24uCiAJCUNhbiBvbmx5IGJlIHVzZWQgaW4gSW5zZXJ0IG1vZGUuICBZb3UgbmVlZCB0byB1c2UgYSBtYXBwaW5nCi0JCXdpdGggYW4gZXhwcmVzc2lvbiBhcmd1bWVudCB8Om1hcC08ZXhwcj58IG9yIENUUkwtUiA9Ci0JCXxpX0NUUkwtUnwuICBJdCBkb2VzIG5vdCB3b3JrIGFmdGVyIENUUkwtTy4KKwkJd2l0aCBDVFJMLVIgPSB8aV9DVFJMLVJ8LiAgSXQgZG9lcyBub3Qgd29yayBhZnRlciBDVFJMLU8gb3IKKwkJd2l0aCBhbiBleHByZXNzaW9uIG1hcHBpbmcuCiAJCXtzdGFydGNvbH0gaXMgdGhlIGJ5dGUgb2Zmc2V0IGluIHRoZSBsaW5lIHdoZXJlIHRoZSBjb21wbGV0ZWQKIAkJdGV4dCBzdGFydC4gIFRoZSB0ZXh0IHVwIHRvIHRoZSBjdXJzb3IgaXMgdGhlIG9yaWdpbmFsIHRleHQKIAkJdGhhdCB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBtYXRjaGVzLiAgVXNlIGNvbCgnLicpIGZvciBhbgpAQCAtMjA0Miw3ICsyMDU5LDcgQEAKIAkJSW5zZXJ0IG1vZGUgY29tcGxldGlvbi4gIFRoZSBwb3B1cCBtZW51IHdpbGwgYXBwZWFyIGlmCiAJCXNwZWNpZmllZCwgc2VlIHxpbnMtY29tcGxldGlvbi1tZW51fC4KIAkJRXhhbXBsZTogPgotCWlub3JlbWFwIDxleHByPiA8RjU+IExpc3RNb250aHMoKQorCWlub3JlbWFwIDxGNT4gPEMtUj49TGlzdE1vbnRocygpPENSPgogCiAJZnVuYyEgTGlzdE1vbnRocygpCiAJICBjYWxsIGNvbXBsZXRlKGNvbCgnLicpLCBbJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLApAQCAtMjE3OSw4ICsyMTk2LDggQEAKIDwKIGN1cnNvcih7bG51bX0sIHtjb2x9IFssIHtvZmZ9XSkJCQkJKmN1cnNvcigpKgogY3Vyc29yKHtsaXN0fSkKLQkJUG9zaXRpb25zIHRoZSBjdXJzb3IgYXQgdGhlIGNvbHVtbiB7Y29sfSBpbiB0aGUgbGluZSB7bG51bX0uCi0JCVRoZSBmaXJzdCBjb2x1bW4gaXMgb25lLgorCQlQb3NpdGlvbnMgdGhlIGN1cnNvciBhdCB0aGUgY29sdW1uIChieXRlIGNvdW50KSB7Y29sfSBpbiB0aGUKKwkJbGluZSB7bG51bX0uICBUaGUgZmlyc3QgY29sdW1uIGlzIG9uZS4KIAkJV2hlbiB0aGVyZSBpcyBvbmUgYXJndW1lbnQge2xpc3R9IHRoaXMgaXMgdXNlZCBhcyBhIHxMaXN0fAogCQl3aXRoIHR3byBvciB0aHJlZSBpdGVtcyB7bG51bX0sIHtjb2x9IGFuZCB7b2ZmfS4gIFRoaXMgaXMgbGlrZQogCQl0aGUgcmV0dXJuIHZhbHVlIG9mIHxnZXRwb3MoKXwsIGJ1dCB3aXRob3V0IHRoZSBmaXJzdCBpdGVtLgpAQCAtMjQ4Nyw4ICsyNTA0LDggQEAKIAogZmVlZGtleXMoe3N0cmluZ30gWywge21vZGV9XSkJCQkJKmZlZWRrZXlzKCkqCiAJCUNoYXJhY3RlcnMgaW4ge3N0cmluZ30gYXJlIHF1ZXVlZCBmb3IgcHJvY2Vzc2luZyBhcyBpZiB0aGV5Ci0JCWNvbWUgZnJvbSBhIG1hcHBpbmcgb3Igd2VyZSB0eXBlZCBieSB1c2VyLiAgVGhleSBhcmUgYWRkZWQgdG8KLQkJdGhlIGVuZCBvZiB0aGUgdHlwZWFoZWFkIGJ1ZmZlciwgdGh1cyBpZiBhIG1hcHBpbmcgaXMgc3RpbGwKKwkJY29tZSBmcm9tIGEgbWFwcGluZyBvciB3ZXJlIHR5cGVkIGJ5IHRoZSB1c2VyLiAgVGhleSBhcmUgYWRkZWQKKwkJdG8gdGhlIGVuZCBvZiB0aGUgdHlwZWFoZWFkIGJ1ZmZlciwgdGh1cyBpZiBhIG1hcHBpbmcgaXMgc3RpbGwKIAkJYmVpbmcgZXhlY3V0ZWQgdGhlc2UgY2hhcmFjdGVycyBjb21lIGFmdGVyIHRoZW0uCiAJCVRoZSBmdW5jdGlvbiBkb2VzIG5vdCB3YWl0IGZvciBwcm9jZXNzaW5nIG9mIGtleXMgY29udGFpbmVkIGluCiAJCXtzdHJpbmd9LgpAQCAtMjUxMCwxMCArMjUyNywxOSBAQAogCQluYW1lIHtmaWxlfSBleGlzdHMsIGFuZCBjYW4gYmUgcmVhZC4gIElmIHtmaWxlfSBkb2Vzbid0IGV4aXN0LAogCQlvciBpcyBhIGRpcmVjdG9yeSwgdGhlIHJlc3VsdCBpcyBGQUxTRS4gIHtmaWxlfSBpcyBhbnkKIAkJZXhwcmVzc2lvbiwgd2hpY2ggaXMgdXNlZCBhcyBhIFN0cmluZy4KKwkJSWYgeW91IGRvbid0IGNhcmUgYWJvdXQgdGhlIGZpbGUgYmVpbmcgcmVhZGFibGUgeW91IGNhbiB1c2UKKwkJfGdsb2IoKXwuCiAJCQkJCQkJKmZpbGVfcmVhZGFibGUoKSoKIAkJT2Jzb2xldGUgbmFtZTogZmlsZV9yZWFkYWJsZSgpLgogCiAKK2ZpbGV3cml0YWJsZSh7ZmlsZX0pCQkJCQkqZmlsZXdyaXRhYmxlKCkqCisJCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIDEgd2hlbiBhIGZpbGUgd2l0aCB0aGUKKwkJbmFtZSB7ZmlsZX0gZXhpc3RzLCBhbmQgY2FuIGJlIHdyaXR0ZW4uICBJZiB7ZmlsZX0gZG9lc24ndAorCQlleGlzdCwgb3IgaXMgbm90IHdyaXRhYmxlLCB0aGUgcmVzdWx0IGlzIDAuICBJZiAoZmlsZSkgaXMgYQorCQlkaXJlY3RvcnksIGFuZCB3ZSBjYW4gd3JpdGUgdG8gaXQsIHRoZSByZXN1bHQgaXMgMi4KKworCiBmaWx0ZXIoe2V4cHJ9LCB7c3RyaW5nfSkJCQkJCSpmaWx0ZXIoKSoKIAkJe2V4cHJ9IG11c3QgYmUgYSB8TGlzdHwgb3IgYSB8RGljdGlvbmFyeXwuCiAJCUZvciBlYWNoIGl0ZW0gaW4ge2V4cHJ9IGV2YWx1YXRlIHtzdHJpbmd9IGFuZCB3aGVuIHRoZSByZXN1bHQKQEAgLTI1NjAsMTQgKzI1ODYsOCBAQAogCQlVc2VzICdzdWZmaXhlc2FkZCcuCiAJCUV4YW1wbGU6ID4KIAkJCTplY2hvIGZpbmRmaWxlKCJ0YWdzLnZpbSIsICIuOyIpCi08CQlTZWFyY2hlcyBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB1cHdhcmRzIHVudGlsIGl0IGZpbmRzCi0JCXRoZSBmaWxlICJ0YWdzLnZpbSIuCi0KLWZpbGV3cml0YWJsZSh7ZmlsZX0pCQkJCQkqZmlsZXdyaXRhYmxlKCkqCi0JCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIDEgd2hlbiBhIGZpbGUgd2l0aCB0aGUKLQkJbmFtZSB7ZmlsZX0gZXhpc3RzLCBhbmQgY2FuIGJlIHdyaXR0ZW4uICBJZiB7ZmlsZX0gZG9lc24ndAotCQlleGlzdCwgb3IgaXMgbm90IHdyaXRhYmxlLCB0aGUgcmVzdWx0IGlzIDAuICBJZiAoZmlsZSkgaXMgYQotCQlkaXJlY3RvcnksIGFuZCB3ZSBjYW4gd3JpdGUgdG8gaXQsIHRoZSByZXN1bHQgaXMgMi4KKzwJCVNlYXJjaGVzIGZyb20gdGhlIGRpcmVjdG9yeSBvZiB0aGUgY3VycmVudCBmaWxlIHVwd2FyZHMgdW50aWwKKwkJaXQgZmluZHMgdGhlIGZpbGUgInRhZ3MudmltIi4KIAogZm5hbWVtb2RpZnkoe2ZuYW1lfSwge21vZHN9KQkJCQkqZm5hbWVtb2RpZnkoKSoKIAkJTW9kaWZ5IGZpbGUgbmFtZSB7Zm5hbWV9IGFjY29yZGluZyB0byB7bW9kc30uICB7bW9kc30gaXMgYQpAQCAtMjg4Myw2ICsyOTAzLDggQEAKIAkJCTpsZXQgZW5kID0gc2VhcmNoKCJeJCIpIC0gMQogCQkJOmxldCBsaW5lcyA9IGdldGxpbmUoc3RhcnQsIGVuZCkKIAorPAkJVG8gZ2V0IGxpbmVzIGZyb20gYW5vdGhlciBidWZmZXIgc2VlIHxnZXRidWZsaW5lKCl8CisKIGdldGxvY2xpc3Qoe25yfSkJCQkJCSpnZXRsb2NsaXN0KCkqCiAJCVJldHVybnMgYSBsaXN0IHdpdGggYWxsIHRoZSBlbnRyaWVzIGluIHRoZSBsb2NhdGlvbiBsaXN0IGZvcgogCQl3aW5kb3cge25yfS4gV2hlbiB7bnJ9IGlzIHplcm8gdGhlIGN1cnJlbnQgd2luZG93IGlzIHVzZWQuCkBAIC0yOTQwLDE1ICsyOTYyLDE5IEBACiAJCUlmIHtyZWduYW1lfSBpcyBub3Qgc3BlY2lmaWVkLCB8djpyZWdpc3RlcnwgaXMgdXNlZC4KIAogZ2V0dGFid2ludmFyKHt0YWJucn0sIHt3aW5ucn0sIHt2YXJuYW1lfSkJCSpnZXR0YWJ3aW52YXIoKSoKLQkJR2V0IHRoZSB2YWx1ZSBvZiBhbiBvcHRpb24gb3IgbG9jYWwgd2luZG93IHZhcmlhYmxlIHt2YXJuYW1lfQotCQlpbiB3aW5kb3cge3dpbm5yfSBpbiB0YWIgcGFnZSB7dGFibnJ9LgorCQlHZXQgdGhlIHZhbHVlIG9mIHdpbmRvdy1sb2NhbCB2YXJpYWJsZSB7dmFybmFtZX0gaW4gd2luZG93CisJCXt3aW5ucn0gaW4gdGFiIHBhZ2Uge3RhYm5yfS4KKwkJV2hlbiB7dmFybmFtZX0gc3RhcnRzIHdpdGggIiYiIGdldCB0aGUgdmFsdWUgb2YgYSB3aW5kb3ctbG9jYWwKKwkJb3B0aW9uLgogCQlUYWJzIGFyZSBudW1iZXJlZCBzdGFydGluZyB3aXRoIG9uZS4gIEZvciB0aGUgY3VycmVudCB0YWJwYWdlCiAJCXVzZSB8Z2V0d2ludmFyKCl8LgogCQlXaGVuIHt3aW5ucn0gaXMgemVybyB0aGUgY3VycmVudCB3aW5kb3cgaXMgdXNlZC4KIAkJVGhpcyBhbHNvIHdvcmtzIGZvciBhIGdsb2JhbCBvcHRpb24sIGJ1ZmZlci1sb2NhbCBvcHRpb24gYW5kCiAJCXdpbmRvdy1sb2NhbCBvcHRpb24sIGJ1dCBpdCBkb2Vzbid0IHdvcmsgZm9yIGEgZ2xvYmFsIHZhcmlhYmxlCiAJCW9yIGJ1ZmZlci1sb2NhbCB2YXJpYWJsZS4KLQkJTm90ZSB0aGF0IHRoZSBuYW1lIHdpdGhvdXQgInc6IiBtdXN0IGJlIHVzZWQuCisJCVdoZW4ge3Zhcm5hbWV9IGlzIGVtcHR5IGEgZGljdGlvbmFyeSB3aXRoIGFsbCB3aW5kb3ctbG9jYWwKKwkJdmFyaWFibGVzIGlzIHJldHVybmVkLgorCQlOb3RlIHRoYXQge3Zhcm5hbWV9IG11c3QgYmUgdGhlIG5hbWUgd2l0aG91dCAidzoiLgogCQlFeGFtcGxlczogPgogCQkJOmxldCBsaXN0X2lzX29uID0gZ2V0dGFid2ludmFyKDEsIDIsICcmbGlzdCcpCiAJCQk6ZWNobyAibXl2YXIgPSAiIC4gZ2V0dGFid2ludmFyKDMsIDEsICdteXZhcicpCkBAIC0yOTcwLDcgKzI5OTYsOSBAQAogCQkJOmVjaG8gIm15dmFyID0gIiAuIGdldHdpbnZhcigxLCAnbXl2YXInKQogPAogCQkJCQkJCSpnbG9iKCkqCi1nbG9iKHtleHByfSkJRXhwYW5kIHRoZSBmaWxlIHdpbGRjYXJkcyBpbiB7ZXhwcn0uICBUaGUgcmVzdWx0IGlzIGEgU3RyaW5nLgorZ2xvYih7ZXhwcn0pCUV4cGFuZCB0aGUgZmlsZSB3aWxkY2FyZHMgaW4ge2V4cHJ9LiAgU2VlIHx3aWxkY2FyZHN8IGZvciB0aGUKKwkJdXNlIG9mIHNwZWNpYWwgY2hhcmFjdGVycy4KKwkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZy4KIAkJV2hlbiB0aGVyZSBhcmUgc2V2ZXJhbCBtYXRjaGVzLCB0aGV5IGFyZSBzZXBhcmF0ZWQgYnkgPE5MPgogCQljaGFyYWN0ZXJzLgogCQlJZiB0aGUgZXhwYW5zaW9uIGZhaWxzLCB0aGUgcmVzdWx0IGlzIGFuIGVtcHR5IHN0cmluZy4KQEAgLTMyNTQsNyArMzI4Miw4IEBACiAJCWlzIHJldHVybmVkLgogCQlNYWtlIHN1cmUge3RleHRsaXN0fSBoYXMgbGVzcyB0aGVuICdsaW5lcycgZW50cmllcywgb3RoZXJ3aXNlCiAJCWl0IHdvbid0IHdvcmsuICBJdCdzIGEgZ29vZCBpZGVhIHRvIHB1dCB0aGUgZW50cnkgbnVtYmVyIGF0Ci0JCXRoZSBzdGFydCBvZiB0aGUgc3RyaW5nLiAgRXhhbXBsZTogPgorCQl0aGUgc3RhcnQgb2YgdGhlIHN0cmluZy4gIEFuZCBwdXQgYSBwcm9tcHQgaW4gdGhlIGZpcnN0IGl0ZW0uCisJCUV4YW1wbGU6ID4KIAkJCWxldCBjb2xvciA9IGlucHV0bGlzdChbJ1NlbGVjdCBjb2xvcjonLCAnMS4gcmVkJywKIAkJCQlcICcyLiBncmVlbicsICczLiBibHVlJ10pCiAKQEAgLTM0MTQsNyArMzQ0Myw4IEBACiAJCQkgICAgcmV0dXJuZWQpCiAJCSAgICB3MAkgICAgZmlyc3QgbGluZSB2aXNpYmxlIGluIGN1cnJlbnQgd2luZG93CiAJCSAgICB3JAkgICAgbGFzdCBsaW5lIHZpc2libGUgaW4gY3VycmVudCB3aW5kb3cKLQkJTm90ZSB0aGF0IGEgbWFyayBpbiBhbm90aGVyIGZpbGUgY2FuIGJlIHVzZWQuCisJCU5vdGUgdGhhdCBhIG1hcmsgaW4gYW5vdGhlciBmaWxlIGNhbiBiZSB1c2VkLiAgVGhlIGxpbmUgbnVtYmVyCisJCXRoZW4gYXBwbGllcyB0byBhbm90aGVyIGJ1ZmZlci4KIAkJVG8gZ2V0IHRoZSBjb2x1bW4gbnVtYmVyIHVzZSB8Y29sKCl8LiAgVG8gZ2V0IGJvdGggdXNlCiAJCXxnZXRwb3MoKXwuCiAJCUV4YW1wbGVzOiA+CkBAIC0zOTQyLDcgKzM5NzIsMTAgQEAKIAkJCWVjaG8gcmVsdGltZXN0cihyZWx0aW1lKHN0YXJ0KSkKIDwJCU5vdGUgdGhhdCBvdmVyaGVhZCBmb3IgdGhlIGNvbW1hbmRzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIHRpbWUuCiAJCVRoZSBhY2N1cmFjeSBkZXBlbmRzIG9uIHRoZSBzeXN0ZW0uCi0JCUFsc28gc2VlIHxwcm9maWxpbmd8LgorCQlMZWFkaW5nIHNwYWNlcyBhcmUgdXNlZCB0byBtYWtlIHRoZSBzdHJpbmcgYWxpZ24gbmljZWx5LiAgWW91CisJCWNhbiB1c2Ugc3BsaXQoKSB0byByZW1vdmUgaXQuID4KKwkJCWVjaG8gc3BsaXQocmVsdGltZXN0cihyZWx0aW1lKHN0YXJ0KSkpWzBdCis8CQlBbHNvIHNlZSB8cHJvZmlsaW5nfC4KIAkJe29ubHkgYXZhaWxhYmxlIHdoZW4gY29tcGlsZWQgd2l0aCB0aGUgK3JlbHRpbWUgZmVhdHVyZX0KIAogCQkJCQkJCSpyZW1vdGVfZXhwcigpKiAqRTQ0OSoKQEAgLTQwOTgsNiArNDEzMSw4IEBACiAJCWN1cnNvciBpcyBtb3ZlZC4gVGhlICdzJyBmbGFnIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIHRoZSAnbicKIAkJZmxhZy4KIAorCQknaWdub3JlY2FzZScsICdzbWFydGNhc2UnIGFuZCAnbWFnaWMnIGFyZSB1c2VkLgorCiAJCVdoZW4gdGhlIHtzdG9wbGluZX0gYXJndW1lbnQgaXMgZ2l2ZW4gdGhlbiB0aGUgc2VhcmNoIHN0b3BzCiAJCWFmdGVyIHNlYXJjaGluZyB0aGlzIGxpbmUuICBUaGlzIGlzIHVzZWZ1bCB0byByZXN0cmljdCB0aGUKIAkJc2VhcmNoIHRvIGEgcmFuZ2Ugb2YgbGluZXMuICBFeGFtcGxlczogPgpAQCAtNDM3Miw2ICs0NDA3LDkgQEAKIAogCQlBbHNvIHNlZSB8Z2V0cG9zKCl8CiAKKwkJVGhpcyBkb2VzIG5vdCByZXN0b3JlIHRoZSBwcmVmZXJyZWQgY29sdW1uIGZvciBtb3ZpbmcKKwkJdmVydGljYWxseS4gIFNlZSB8d2lucmVzdHZpZXcoKXwgZm9yIHRoYXQuCisKIAogc2V0cWZsaXN0KHtsaXN0fSBbLCB7YWN0aW9ufV0pCQkJCSpzZXRxZmxpc3QoKSoKIAkJQ3JlYXRlIG9yIHJlcGxhY2Ugb3IgYWRkIHRvIHRoZSBxdWlja2ZpeCBsaXN0IHVzaW5nIHRoZSBpdGVtcwpAQCAtNDY2Niw2ICs0NzA0LDcgQEAKIAkJCUxpc3QJCVtpdGVtLCBpdGVtXQogCQkJRGljdGlvbmFyeQl7a2V5OiB2YWx1ZSwga2V5OiB2YWx1ZX0KIAkJTm90ZSB0aGF0IGluIFN0cmluZyB2YWx1ZXMgdGhlICcgY2hhcmFjdGVyIGlzIGRvdWJsZWQuCisJCUFsc28gc2VlIHxzdHJ0cmFucygpfC4KIAogCQkJCQkJCSpzdHJsZW4oKSoKIHN0cmxlbih7ZXhwcn0pCVRoZSByZXN1bHQgaXMgYSBOdW1iZXIsIHdoaWNoIGlzIHRoZSBsZW5ndGggb2YgdGhlIFN0cmluZwpAQCAtNDczNSw3ICs0Nzc0LDcgQEAKIAkJbGlrZSB0aGUgIjpzdWJzdGl0dXRlIiBjb21tYW5kICh3aXRob3V0IGFueSBmbGFncykuICBCdXQgdGhlCiAJCW1hdGNoaW5nIHdpdGgge3BhdH0gaXMgYWx3YXlzIGRvbmUgbGlrZSB0aGUgJ21hZ2ljJyBvcHRpb24gaXMKIAkJc2V0IGFuZCAnY3BvcHRpb25zJyBpcyBlbXB0eSAodG8gbWFrZSBzY3JpcHRzIHBvcnRhYmxlKS4KLQkJJ2lnbm9yZWNhc2UnIGlzIHN0aWxsIHJlbGV2YW50LgorCQknaWdub3JlY2FzZScgaXMgc3RpbGwgcmVsZXZhbnQuICAnc21hcnRjYXNlJyBpcyBub3QgdXNlZC4KIAkJU2VlIHxzdHJpbmctbWF0Y2h8IGZvciBob3cge3BhdH0gaXMgdXNlZC4KIAkJQW5kIGEgIn4iIGluIHtzdWJ9IGlzIG5vdCByZXBsYWNlZCB3aXRoIHRoZSBwcmV2aW91cyB7c3VifS4KIAkJTm90ZSB0aGF0IHNvbWUgY29kZXMgaW4ge3N1Yn0gaGF2ZSBhIHNwZWNpYWwgbWVhbmluZwpAQCAtNDg4OCwyMiArNDkyNywyMyBAQAogCQllbnRyaWVzOgogCQkJbmFtZQkJTmFtZSBvZiB0aGUgdGFnLgogCQkJZmlsZW5hbWUJTmFtZSBvZiB0aGUgZmlsZSB3aGVyZSB0aGUgdGFnIGlzCi0JCQkJCWRlZmluZWQuCisJCQkJCWRlZmluZWQuICBJdCBpcyBlaXRoZXIgcmVsYXRpdmUgdG8gdGhlCisJCQkJCWN1cnJlbnQgZGlyZWN0b3J5IG9yIGEgZnVsbCBwYXRoLgogCQkJY21kCQlFeCBjb21tYW5kIHVzZWQgdG8gbG9jYXRlIHRoZSB0YWcgaW4KIAkJCQkJdGhlIGZpbGUuCiAJCQlraW5kCQlUeXBlIG9mIHRoZSB0YWcuICBUaGUgdmFsdWUgZm9yIHRoaXMKIAkJCQkJZW50cnkgZGVwZW5kcyBvbiB0aGUgbGFuZ3VhZ2Ugc3BlY2lmaWMKLQkJCQkJa2luZCB2YWx1ZXMgZ2VuZXJhdGVkIGJ5IHRoZSBjdGFncwotCQkJCQl0b29sLgorCQkJCQlraW5kIHZhbHVlcy4gIE9ubHkgYXZhaWxhYmxlIHdoZW4KKwkJCQkJdXNpbmcgYSB0YWdzIGZpbGUgZ2VuZXJhdGVkIGJ5CisJCQkJCUV4dWJlcmFudCBjdGFncyBvciBoZHJ0YWcuCiAJCQlzdGF0aWMJCUEgZmlsZSBzcGVjaWZpYyB0YWcuICBSZWZlciB0bwogCQkJCQl8c3RhdGljLXRhZ3wgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0JCVRoZSAia2luZCIgZW50cnkgaXMgb25seSBhdmFpbGFibGUgd2hlbiB1c2luZyBFeHViZXJhbnQgY3RhZ3MKLQkJZ2VuZXJhdGVkIHRhZ3MgZmlsZS4gIE1vcmUgZW50cmllcyBtYXkgYmUgcHJlc2VudCwgZGVwZW5kaW5nCi0JCW9uIHRoZSBjb250ZW50IG9mIHRoZSB0YWdzIGZpbGU6IGFjY2VzcywgaW1wbGVtZW50YXRpb24sCi0JCWluaGVyaXRzIGFuZCBzaWduYXR1cmUuICBSZWZlciB0byB0aGUgY3RhZ3MgZG9jdW1lbnRhdGlvbiBmb3IKLQkJaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgZmllbGRzLiAgRm9yIEMgY29kZSB0aGUgZmllbGRzCi0JCSJzdHJ1Y3QiLCAiY2xhc3MiIGFuZCAiZW51bSIgbWF5IGFwcGVhciwgdGhleSBnaXZlIHRoZSBuYW1lIG9mCi0JCXRoZSBlbnRpdHkgdGhlIHRhZyBpcyBjb250YWluZWQgaW4uCisJCU1vcmUgZW50cmllcyBtYXkgYmUgcHJlc2VudCwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZW50IG9mIHRoZQorCQl0YWdzIGZpbGU6IGFjY2VzcywgaW1wbGVtZW50YXRpb24sIGluaGVyaXRzIGFuZCBzaWduYXR1cmUuCisJCVJlZmVyIHRvIHRoZSBjdGFncyBkb2N1bWVudGF0aW9uIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGVzZQorCQlmaWVsZHMuICBGb3IgQyBjb2RlIHRoZSBmaWVsZHMgInN0cnVjdCIsICJjbGFzcyIgYW5kICJlbnVtIgorCQltYXkgYXBwZWFyLCB0aGV5IGdpdmUgdGhlIG5hbWUgb2YgdGhlIGVudGl0eSB0aGUgdGFnIGlzCisJCWNvbnRhaW5lZCBpbi4KIAogCQlUaGUgZXgtY29tbWFuZCAnY21kJyBjYW4gYmUgZWl0aGVyIGFuIGV4IHNlYXJjaCBwYXR0ZXJuLCBhCiAJCWxpbmUgbnVtYmVyIG9yIGEgbGluZSBudW1iZXIgZm9sbG93ZWQgYnkgYSBieXRlIG51bWJlci4KQEAgLTUwMDUsNiArNTA0NSwxMCBAQAogICB2aXJ0Y29sKCIkIikJICAgd2l0aCB0ZXh0ICJmb29eTGJhciIsIHJldHVybnMgOQogICB2aXJ0Y29sKCIndCIpICAgIHdpdGggdGV4dCAiICAgIHRoZXJlIiwgd2l0aCAndCBhdCAnaCcsIHJldHVybnMgNgogPAkJVGhlIGZpcnN0IGNvbHVtbiBpcyAxLiAgMCBpcyByZXR1cm5lZCBmb3IgYW4gZXJyb3IuCisJCUEgbW9yZSBhZHZhbmNlZCBleGFtcGxlIHRoYXQgZWNob2VzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZgorCQlhbGwgbGluZXM6ID4KKwkJICAgIGVjaG8gbWF4KG1hcChyYW5nZSgxLCBsaW5lKCckJykpLCAidmlydGNvbChbdjp2YWwsICckJ10pIikpCisKIAogdmlzdWFsbW9kZShbZXhwcl0pCQkJCQkJKnZpc3VhbG1vZGUoKSoKIAkJVGhlIHJlc3VsdCBpcyBhIFN0cmluZywgd2hpY2ggZGVzY3JpYmVzIHRoZSBsYXN0IFZpc3VhbCBtb2RlCkBAIC01MDU5LDkgKzUxMDMsMTEgQEAKIAkJbGFzdCB3aW5kb3cgaXMgcmV0dXJuZWQgKHRoZSB3aW5kb3cgY291bnQpLgogCQlXaGVuIHRoZSBvcHRpb25hbCBhcmd1bWVudCBpcyAiIyIsIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QKIAkJYWNjZXNzZWQgd2luZG93IGlzIHJldHVybmVkICh3aGVyZSB8Q1RSTC1XX3B8IGdvZXMgdG8pLgotCQlJZiB0aGVyZSBpcyBubyBwcmV2aW91cyB3aW5kb3cgMCBpcyByZXR1cm5lZC4KKwkJSWYgdGhlcmUgaXMgbm8gcHJldmlvdXMgd2luZG93IG9yIGl0IGlzIGluIGFub3RoZXIgdGFiIHBhZ2UgMAorCQlpcyByZXR1cm5lZC4KIAkJVGhlIG51bWJlciBjYW4gYmUgdXNlZCB3aXRoIHxDVFJMLVdfd3wgYW5kICI6d2luY21kIHciCiAJCXw6d2luY21kfC4KKwkJQWxzbyBzZWUgfHRhYnBhZ2V3aW5ucigpfC4KIAogCQkJCQkJCSp3aW5yZXN0Y21kKCkqCiB3aW5yZXN0Y21kKCkJUmV0dXJucyBhIHNlcXVlbmNlIG9mIHw6cmVzaXplfCBjb21tYW5kcyB0aGF0IHNob3VsZCByZXN0b3JlCkBAIC01MTQ2LDYgKzUxOTIsOCBAQAogICAgIFRoZW4gdGhlICJwYXRjaDEyMyIgZmVhdHVyZSBtZWFucyB0aGF0IHBhdGNoIDEyMyBoYXMgYmVlbiBpbmNsdWRlZCBmb3IKICAgICB0aGlzIHZlcnNpb24uICBFeGFtcGxlIChjaGVja2luZyB2ZXJzaW9uIDYuMi4xNDggb3IgbGF0ZXIpOiA+CiAJOmlmIHY6dmVyc2lvbiA+IDYwMiB8fCB2OnZlcnNpb24gPT0gNjAyICYmIGhhcygicGF0Y2gxNDgiKQorPCAgIE5vdGUgdGhhdCBpdCdzIHBvc3NpYmxlIGZvciBwYXRjaCAxNDcgdG8gYmUgb21pdHRlZCBldmVuIHRob3VnaCAxNDggaXMKKyAgICBpbmNsdWRlZC4KIAogYWxsX2J1aWx0aW5fdGVybXMJQ29tcGlsZWQgd2l0aCBhbGwgYnVpbHRpbiB0ZXJtaW5hbHMgZW5hYmxlZC4KIGFtaWdhCQkJQW1pZ2EgdmVyc2lvbiBvZiBWaW0uCkBAIC01NDQ3LDcgKzU0OTUsNyBAQAogCQkJCQkJKmZ1bmN0aW9uLWFyZ3VtZW50KiAqYTp2YXIqCiBBbiBhcmd1bWVudCBjYW4gYmUgZGVmaW5lZCBieSBnaXZpbmcgaXRzIG5hbWUuICBJbiB0aGUgZnVuY3Rpb24gdGhpcyBjYW4gdGhlbgogYmUgdXNlZCBhcyAiYTpuYW1lIiAoImE6IiBmb3IgYXJndW1lbnQpLgotCQkJCQkJKmE6MCogKmE6MSogKmE6MDAwKiAqRTc0MCoKKwkJCQkJKmE6MCogKmE6MSogKmE6MDAwKiAqRTc0MCogKi4uLioKIFVwIHRvIDIwIGFyZ3VtZW50cyBjYW4gYmUgZ2l2ZW4sIHNlcGFyYXRlZCBieSBjb21tYXMuICBBZnRlciB0aGUgbmFtZWQKIGFyZ3VtZW50cyBhbiBhcmd1bWVudCAiLi4uIiBjYW4gYmUgc3BlY2lmaWVkLCB3aGljaCBtZWFucyB0aGF0IG1vcmUgYXJndW1lbnRzCiBtYXkgb3B0aW9uYWxseSBiZSBmb2xsb3dpbmcuICBJbiB0aGUgZnVuY3Rpb24gdGhlIGV4dHJhIGFyZ3VtZW50cyBjYW4gYmUgdXNlZApAQCAtNTQ5MCw0MCArNTUzOCwyNSBAQAogICBjYWxsIFRhYmxlKCJUYWJsZSIsICJsaW5lMSIsICJsaW5lMiIpCiAgIGNhbGwgVGFibGUoIkVtcHR5IFRhYmxlIikKIAotVG8gcmV0dXJuIG1vcmUgdGhhbiBvbmUgdmFsdWUsIHBhc3MgdGhlIG5hbWUgb2YgYSBnbG9iYWwgdmFyaWFibGU6ID4KLSAgOmZ1bmN0aW9uIENvbXB1dGUobjEsIG4yLCBkaXZuYW1lKQorVG8gcmV0dXJuIG1vcmUgdGhhbiBvbmUgdmFsdWUsIHJldHVybiBhIHxMaXN0fDogPgorICA6ZnVuY3Rpb24gQ29tcHV0ZShuMSwgbjIpCiAgIDogIGlmIGE6bjIgPT0gMAotICA6ICAgIHJldHVybiAiZmFpbCIKKyAgOiAgICByZXR1cm4gWyJmYWlsIiwgMF0KICAgOiAgZW5kaWYKLSAgOiAgbGV0IGc6e2E6ZGl2bmFtZX0gPSBhOm4xIC8gYTpuMgotICA6ICByZXR1cm4gIm9rIgorICA6ICByZXR1cm4gWyJvayIsIGE6bjEgLyBhOm4yXQogICA6ZW5kZnVuY3Rpb24KIAogVGhpcyBmdW5jdGlvbiBjYW4gdGhlbiBiZSBjYWxsZWQgd2l0aDogPgotICA6bGV0IHN1Y2Nlc3MgPSBDb21wdXRlKDEzLCAxMzI0LCAiZGl2IikKKyAgOmxldCBbc3VjY2VzcywgZGl2XSA9IENvbXB1dGUoMTAyLCA2KQogICA6aWYgc3VjY2VzcyA9PSAib2siCiAgIDogIGVjaG8gZGl2CiAgIDplbmRpZgotCi1BbiBhbHRlcm5hdGl2ZSBpcyB0byByZXR1cm4gYSBjb21tYW5kIHRoYXQgY2FuIGJlIGV4ZWN1dGVkLiAgVGhpcyBhbHNvIHdvcmtzCi13aXRoIGxvY2FsIHZhcmlhYmxlcyBpbiBhIGNhbGxpbmcgZnVuY3Rpb24uICBFeGFtcGxlOiA+Ci0gIDpmdW5jdGlvbiBGb28oKQotICA6ICBleGVjdXRlIEJhcigpCi0gIDogIGVjaG8gImxpbmUgIiAuIGxudW0gLiAiIGNvbHVtbiAiIC4gY29sCi0gIDplbmRmdW5jdGlvbgotCi0gIDpmdW5jdGlvbiBCYXIoKQotICA6ICByZXR1cm4gImxldCBsbnVtID0gIiAuIGxpbmUoIi4iKSAuICIgfCBsZXQgY29sID0gIiAuIGNvbCgiLiIpCi0gIDplbmRmdW5jdGlvbgotCi1UaGUgbmFtZXMgImxudW0iIGFuZCAiY29sIiBjb3VsZCBhbHNvIGJlIHBhc3NlZCBhcyBhcmd1bWVudCB0byBCYXIoKSwgdG8gYWxsb3cKLXRoZSBjYWxsZXIgdG8gc2V0IHRoZSBuYW1lcy4KLQorPAogCQkJCQkJKjpjYWwqICo6Y2FsbCogKkUxMDcqICpFMTE3KgogOltyYW5nZV1jYWxbbF0ge25hbWV9KFthcmd1bWVudHNdKQogCQlDYWxsIGEgZnVuY3Rpb24uICBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gYW5kIGl0cyBhcmd1bWVudHMKIAkJYXJlIGFzIHNwZWNpZmllZCB3aXRoIHw6ZnVuY3Rpb258LiAgVXAgdG8gMjAgYXJndW1lbnRzIGNhbiBiZQotCQl1c2VkLgorCQl1c2VkLiAgVGhlIHJldHVybmVkIHZhbHVlIGlzIGRpc2NhcmRlZC4KIAkJV2l0aG91dCBhIHJhbmdlIGFuZCBmb3IgZnVuY3Rpb25zIHRoYXQgYWNjZXB0IGEgcmFuZ2UsIHRoZQogCQlmdW5jdGlvbiBpcyBjYWxsZWQgb25jZS4gIFdoZW4gYSByYW5nZSBpcyBnaXZlbiB0aGUgY3Vyc29yIGlzCiAJCXBvc2l0aW9uZWQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaXJzdCBsaW5lIGJlZm9yZSBleGVjdXRpbmcgdGhlCkBAIC01NTU0LDYgKzU1ODcsMTEgQEAKIAkJVGhpcyBmdW5jdGlvbiBpbnNlcnRzIHRoZSBjb250aW51YXRpb24gY2hhcmFjdGVyICJcIiBpbiBmcm9udAogCQlvZiBhbGwgdGhlIGxpbmVzIGluIHRoZSByYW5nZSwgZXhjZXB0IHRoZSBmaXJzdCBvbmUuCiAKKwkJV2hlbiB0aGUgZnVuY3Rpb24gcmV0dXJucyBhIGNvbXBvc2l0ZSB2YWx1ZSBpdCBjYW4gYmUgZnVydGhlcgorCQlkZXJlZmVyZW5jZWQsIGJ1dCB0aGUgcmFuZ2Ugd2lsbCBub3QgYmUgdXNlZCB0aGVuLiAgRXhhbXBsZTogPgorCTo0LDhjYWxsIEdldERpY3QoKS5tZXRob2QoKQorPAkJSGVyZSBHZXREaWN0KCkgZ2V0cyB0aGUgcmFuZ2UgYnV0IG1ldGhvZCgpIGRvZXMgbm90LgorCiAJCQkJCQkJCSpFMTMyKgogVGhlIHJlY3Vyc2l2ZW5lc3Mgb2YgdXNlciBmdW5jdGlvbnMgaXMgcmVzdHJpY3RlZCB3aXRoIHRoZSB8J21heGZ1bmNkZXB0aCd8CiBvcHRpb24uCkBAIC01NzQwLDcgKzU3NzgsNyBAQAogCQkJQXBwZW5kIHtleHByMX0gdG8gcmVnaXN0ZXIge3JlZy1uYW1lfS4gIElmIHRoZQogCQkJcmVnaXN0ZXIgd2FzIGVtcHR5IGl0J3MgbGlrZSBzZXR0aW5nIGl0IHRvIHtleHByMX0uCiAKLTpsZXQgJntvcHRpb24tbmFtZX0gPSB7ZXhwcjF9CQkJKjpsZXQtb3B0aW9uKiAqOmxldC1zdGFyKgorOmxldCAme29wdGlvbi1uYW1lfSA9IHtleHByMX0JCQkqOmxldC1vcHRpb24qICo6bGV0LSYqCiAJCQlTZXQgb3B0aW9uIHtvcHRpb24tbmFtZX0gdG8gdGhlIHJlc3VsdCBvZiB0aGUKIAkJCWV4cHJlc3Npb24ge2V4cHIxfS4gIEEgU3RyaW5nIG9yIE51bWJlciB2YWx1ZSBpcwogCQkJYWx3YXlzIGNvbnZlcnRlZCB0byB0aGUgdHlwZSBvZiB0aGUgb3B0aW9uLgpAQCAtNTgzMCw3ICs1ODY4LDcgQEAKIAkJCQkqCUZ1bmNyZWYKIAogCi06dW5sW2V0XVshXSB7bmFtZX0gLi4uCQkJCQkqOnVubGV0KiAqOnVubCogKkUxMDgqCis6dW5sW2V0XVshXSB7bmFtZX0gLi4uCQkJCSo6dW5sZXQqICo6dW5sKiAqRTEwOCogKkU3OTUqCiAJCQlSZW1vdmUgdGhlIGludGVybmFsIHZhcmlhYmxlIHtuYW1lfS4gIFNldmVyYWwgdmFyaWFibGUKIAkJCW5hbWVzIGNhbiBiZSBnaXZlbiwgdGhleSBhcmUgYWxsIHJlbW92ZWQuICBUaGUgbmFtZQogCQkJbWF5IGFsc28gYmUgYSB8TGlzdHwgb3IgfERpY3Rpb25hcnl8IGl0ZW0uCkBAIC02MTAwLDExICs2MTM4LDE0IEBACiAJCQlDYW5ub3QgYmUgZm9sbG93ZWQgYnkgYSBjb21tZW50LgogCQkJRXhhbXBsZTogPgogCQk6ZWNobyAidGhlIHZhbHVlIG9mICdzaGVsbCcgaXMiICZzaGVsbAotPAkJCUEgbGF0ZXIgcmVkcmF3IG1heSBtYWtlIHRoZSBtZXNzYWdlIGRpc2FwcGVhciBhZ2Fpbi4KLQkJCVRvIGF2b2lkIHRoYXQgYSBjb21tYW5kIGZyb20gYmVmb3JlIHRoZSAiOmVjaG8iIGNhdXNlcwotCQkJYSByZWRyYXcgYWZ0ZXJ3YXJkcyAocmVkcmF3cyBhcmUgb2Z0ZW4gcG9zdHBvbmVkIHVudGlsCi0JCQl5b3UgdHlwZSBzb21ldGhpbmcpLCBmb3JjZSBhIHJlZHJhdyB3aXRoIHRoZSB8OnJlZHJhd3wKLQkJCWNvbW1hbmQuICBFeGFtcGxlOiA+Cis8CQkJCQkJCSo6ZWNoby1yZWRyYXcqCisJCQlBIGxhdGVyIHJlZHJhdyBtYXkgbWFrZSB0aGUgbWVzc2FnZSBkaXNhcHBlYXIgYWdhaW4uCisJCQlBbmQgc2luY2UgVmltIG1vc3RseSBwb3N0cG9uZXMgcmVkcmF3aW5nIHVudGlsIGl0J3MKKwkJCWZpbmlzaGVkIHdpdGggYSBzZXF1ZW5jZSBvZiBjb21tYW5kcyB0aGlzIGhhcHBlbnMKKwkJCXF1aXRlIG9mdGVuLiAgVG8gYXZvaWQgdGhhdCBhIGNvbW1hbmQgZnJvbSBiZWZvcmUgdGhlCisJCQkiOmVjaG8iIGNhdXNlcyBhIHJlZHJhdyBhZnRlcndhcmRzIChyZWRyYXdzIGFyZSBvZnRlbgorCQkJcG9zdHBvbmVkIHVudGlsIHlvdSB0eXBlIHNvbWV0aGluZyksIGZvcmNlIGEgcmVkcmF3CisJCQl3aXRoIHRoZSB8OnJlZHJhd3wgY29tbWFuZC4gIEV4YW1wbGU6ID4KIAkJOm5ldyB8IHJlZHJhdyB8IGVjaG8gInRoZXJlIGlzIGEgbmV3IHdpbmRvdyIKIDwKIAkJCQkJCQkqOmVjaG9uKgpAQCAtNjE0NCwxMCArNjE4NSwxNiBAQAogCQkJU3BhY2VzIGFyZSBwbGFjZWQgYmV0d2VlbiB0aGUgYXJndW1lbnRzIGFzIHdpdGggdGhlCiAJCQl8OmVjaG98IGNvbW1hbmQuICBCdXQgdW5wcmludGFibGUgY2hhcmFjdGVycyBhcmUKIAkJCWRpc3BsYXllZCwgbm90IGludGVycHJldGVkLgorCQkJVGhlIHBhcnNpbmcgd29ya3Mgc2xpZ2h0bHkgZGlmZmVyZW50IGZyb20gfDplY2hvfCwKKwkJCW1vcmUgbGlrZSB8OmV4ZWN1dGV8LiAgQWxsIHRoZSBleHByZXNzaW9ucyBhcmUgZmlyc3QKKwkJCWV2YWx1YXRlZCBhbmQgY29uY2F0ZW5hdGVkIGJlZm9yZSBlY2hvaW5nIGFueXRoaW5nLgorCQkJVGhlIGV4cHJlc3Npb25zIG11c3QgZXZhbHVhdGUgdG8gYSBOdW1iZXIgb3IgU3RyaW5nLCBhCisJCQlEaWN0aW9uYXJ5IG9yIExpc3QgY2F1c2VzIGFuIGVycm9yLgogCQkJVXNlcyB0aGUgaGlnaGxpZ2h0aW5nIHNldCBieSB0aGUgfDplY2hvaGx8IGNvbW1hbmQuCiAJCQlFeGFtcGxlOiA+CiAJCTplY2hvbXNnICJJdCdzIGEgWml6emVyIFphenplciBadXp6LCBhcyB5b3UgY2FuIHBsYWlubHkgc2VlLiIKLTwKKzwJCQlTZWUgfDplY2hvLXJlZHJhd3wgdG8gYXZvaWQgdGhlIG1lc3NhZ2UgZGlzYXBwZWFyaW5nCisJCQl3aGVuIHRoZSBzY3JlZW4gaXMgcmVkcmF3bi4KIAkJCQkJCQkqOmVjaG9lKiAqOmVjaG9lcnIqCiA6ZWNob2VbcnJdIHtleHByMX0gLi4JRWNobyB0aGUgZXhwcmVzc2lvbihzKSBhcyBhbiBlcnJvciBtZXNzYWdlLCBzYXZpbmcgdGhlCiAJCQltZXNzYWdlIGluIHRoZSB8bWVzc2FnZS1oaXN0b3J5fC4gIFdoZW4gdXNlZCBpbiBhCkBAIC03MTk4LDEwNiArNzI0NSw1MSBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiA5LiBFeGFtcGxlcwkJCQkJCSpldmFsLWV4YW1wbGVzKgogCi1QcmludGluZyBpbiBIZXggfgorUHJpbnRpbmcgaW4gQmluYXJ5IH4KID4KLSAgOiIgVGhlIGZ1bmN0aW9uIE5yMkhleCgpIHJldHVybnMgdGhlIEhleCBzdHJpbmcgb2YgYSBudW1iZXIuCi0gIDpmdW5jIE5yMkhleChucikKKyAgOiIgVGhlIGZ1bmN0aW9uIE5yMkJpbigpIHJldHVybnMgdGhlIEhleCBzdHJpbmcgb2YgYSBudW1iZXIuCisgIDpmdW5jIE5yMkJpbihucikKICAgOiAgbGV0IG4gPSBhOm5yCiAgIDogIGxldCByID0gIiIKICAgOiAgd2hpbGUgbgotICA6ICAgIGxldCByID0gJzAxMjM0NTY3ODlBQkNERUYnW24gJSAxNl0gLiByCi0gIDogICAgbGV0IG4gPSBuIC8gMTYKKyAgOiAgICBsZXQgciA9ICcwMSdbbiAlIDJdIC4gcgorICA6ICAgIGxldCBuID0gbiAvIDIKICAgOiAgZW5kd2hpbGUKICAgOiAgcmV0dXJuIHIKICAgOmVuZGZ1bmMKIAotICA6IiBUaGUgZnVuY3Rpb24gU3RyaW5nMkhleCgpIGNvbnZlcnRzIGVhY2ggY2hhcmFjdGVyIGluIGEgc3RyaW5nIHRvIGEgdHdvCi0gIDoiIGNoYXJhY3RlciBIZXggc3RyaW5nLgotICA6ZnVuYyBTdHJpbmcySGV4KHN0cikKKyAgOiIgVGhlIGZ1bmN0aW9uIFN0cmluZzJCaW4oKSBjb252ZXJ0cyBlYWNoIGNoYXJhY3RlciBpbiBhIHN0cmluZyB0byBhCisgIDoiIGJpbmFyeSBzdHJpbmcsIHNlcGFyYXRlZCB3aXRoIGRhc2hlcy4KKyAgOmZ1bmMgU3RyaW5nMkJpbihzdHIpCiAgIDogIGxldCBvdXQgPSAnJwotICA6ICBsZXQgaXggPSAwCi0gIDogIHdoaWxlIGl4IDwgc3RybGVuKGE6c3RyKQotICA6ICAgIGxldCBvdXQgPSBvdXQgLiBOcjJIZXgoY2hhcjJucihhOnN0cltpeF0pKQotICA6ICAgIGxldCBpeCA9IGl4ICsgMQotICA6ICBlbmR3aGlsZQotICA6ICByZXR1cm4gb3V0CisgIDogIGZvciBpeCBpbiByYW5nZShzdHJsZW4oYTpzdHIpKQorICA6ICAgIGxldCBvdXQgPSBvdXQgLiAnLScgLiBOcjJCaW4oY2hhcjJucihhOnN0cltpeF0pKQorICA6ICBlbmRmb3IKKyAgOiAgcmV0dXJuIG91dFsxOl0KICAgOmVuZGZ1bmMKIAogRXhhbXBsZSBvZiBpdHMgdXNlOiA+Ci0gIDplY2hvIE5yMkhleCgzMikKLXJlc3VsdDogIjIwIiA+Ci0gIDplY2hvIFN0cmluZzJIZXgoIjMyIikKLXJlc3VsdDogIjMzMzIiCisgIDplY2hvIE5yMkJpbigzMikKK3Jlc3VsdDogIjEwMDAwMCIgPgorICA6ZWNobyBTdHJpbmcyQmluKCIzMiIpCityZXN1bHQ6ICIxMTAwMTEtMTEwMDEwIgogCiAKLVNvcnRpbmcgbGluZXMgKGJ5IFJvYmVydCBXZWJiKSB+CitTb3J0aW5nIGxpbmVzIH4KIAotSGVyZSBpcyBhIFZpbSBzY3JpcHQgdG8gc29ydCBsaW5lcy4gIEhpZ2hsaWdodCB0aGUgbGluZXMgaW4gVmltIGFuZCB0eXBlCi0iOlNvcnQiLiAgVGhpcyBkb2Vzbid0IGNhbGwgYW55IGV4dGVybmFsIHByb2dyYW1zIHNvIGl0J2xsIHdvcmsgb24gYW55Ci1wbGF0Zm9ybS4gIFRoZSBmdW5jdGlvbiBTb3J0KCkgYWN0dWFsbHkgdGFrZXMgdGhlIG5hbWUgb2YgYSBjb21wYXJpc29uCi1mdW5jdGlvbiBhcyBpdHMgYXJndW1lbnQsIGxpa2UgcXNvcnQoKSBkb2VzIGluIEMuICBTbyB5b3UgY291bGQgc3VwcGx5IGl0Ci13aXRoIGRpZmZlcmVudCBjb21wYXJpc29uIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBzb3J0IGFjY29yZGluZyB0byBkYXRlIGV0Yy4KLT4KLSAgOiIgRnVuY3Rpb24gZm9yIHVzZSB3aXRoIFNvcnQoKSwgdG8gY29tcGFyZSB0d28gc3RyaW5ncy4KLSAgOmZ1bmMhIFN0cmNtcChzdHIxLCBzdHIyKQotICA6ICBpZiAoYTpzdHIxIDwgYTpzdHIyKQotICA6CXJldHVybiAtMQotICA6ICBlbHNlaWYgKGE6c3RyMSA+IGE6c3RyMikKLSAgOglyZXR1cm4gMQotICA6ICBlbHNlCi0gIDoJcmV0dXJuIDAKLSAgOiAgZW5kaWYKK1RoaXMgZXhhbXBsZSBzb3J0cyBsaW5lcyB3aXRoIGEgc3BlY2lmaWMgY29tcGFyZSBmdW5jdGlvbi4gPgorCisgIDpmdW5jIFNvcnRCdWZmZXIoKQorICA6ICBsZXQgbGluZXMgPSBnZXRsaW5lKDEsICckJykKKyAgOiAgY2FsbCBzb3J0KGxpbmVzLCBmdW5jdGlvbigiU3RyY21wIikpCisgIDogIGNhbGwgc2V0bGluZSgxLCBsaW5lcykKICAgOmVuZGZ1bmN0aW9uCiAKLSAgOiIgU29ydCBsaW5lcy4gIFNvcnRSKCkgaXMgY2FsbGVkIHJlY3Vyc2l2ZWx5LgotICA6ZnVuYyEgU29ydFIoc3RhcnQsIGVuZCwgY21wKQotICA6ICBpZiAoYTpzdGFydCA+PSBhOmVuZCkKLSAgOglyZXR1cm4KLSAgOiAgZW5kaWYKLSAgOiAgbGV0IHBhcnRpdGlvbiA9IGE6c3RhcnQgLSAxCi0gIDogIGxldCBtaWRkbGUgPSBwYXJ0aXRpb24KLSAgOiAgbGV0IHBhcnRTdHIgPSBnZXRsaW5lKChhOnN0YXJ0ICsgYTplbmQpIC8gMikKLSAgOiAgbGV0IGkgPSBhOnN0YXJ0Ci0gIDogIHdoaWxlIChpIDw9IGE6ZW5kKQotICA6CWxldCBzdHIgPSBnZXRsaW5lKGkpCi0gIDoJZXhlYyAibGV0IHJlc3VsdCA9ICIgLiBhOmNtcCAuICIoc3RyLCBwYXJ0U3RyKSIKLSAgOglpZiAocmVzdWx0IDw9IDApCi0gIDoJICAgICIgTmVlZCB0byBwdXQgaXQgYmVmb3JlIHRoZSBwYXJ0aXRpb24uICBTd2FwIGxpbmVzIGkgYW5kIHBhcnRpdGlvbi4KLSAgOgkgICAgbGV0IHBhcnRpdGlvbiA9IHBhcnRpdGlvbiArIDEKLSAgOgkgICAgaWYgKHJlc3VsdCA9PSAwKQotICA6CQlsZXQgbWlkZGxlID0gcGFydGl0aW9uCi0gIDoJICAgIGVuZGlmCi0gIDoJICAgIGlmIChpICE9IHBhcnRpdGlvbikKLSAgOgkJbGV0IHN0cjIgPSBnZXRsaW5lKHBhcnRpdGlvbikKLSAgOgkJY2FsbCBzZXRsaW5lKGksIHN0cjIpCi0gIDoJCWNhbGwgc2V0bGluZShwYXJ0aXRpb24sIHN0cikKLSAgOgkgICAgZW5kaWYKLSAgOgllbmRpZgotICA6CWxldCBpID0gaSArIDEKLSAgOiAgZW5kd2hpbGUKK0FzIGEgb25lLWxpbmVyOiA+CisgIDpjYWxsIHNldGxpbmUoMSwgc29ydChnZXRsaW5lKDEsICckJyksIGZ1bmN0aW9uKCJTdHJjbXAiKSkpCiAKLSAgOiAgIiBOb3cgd2UgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlICJtaWRkbGUiIGVsZW1lbnQsIGFzIGZhciBhcyBwYXJ0aXRpb25pbmcKLSAgOiAgIiBnb2VzLCB3aGljaCBjb3VsZCBiZSBhbnl3aGVyZSBiZWZvcmUgdGhlIHBhcnRpdGlvbi4gIE1ha2Ugc3VyZSBpdCBpcyBhdAotICA6ICAiIHRoZSBlbmQgb2YgdGhlIHBhcnRpdGlvbi4KLSAgOiAgaWYgKG1pZGRsZSAhPSBwYXJ0aXRpb24pCi0gIDoJbGV0IHN0ciA9IGdldGxpbmUobWlkZGxlKQotICA6CWxldCBzdHIyID0gZ2V0bGluZShwYXJ0aXRpb24pCi0gIDoJY2FsbCBzZXRsaW5lKG1pZGRsZSwgc3RyMikKLSAgOgljYWxsIHNldGxpbmUocGFydGl0aW9uLCBzdHIpCi0gIDogIGVuZGlmCi0gIDogIGNhbGwgU29ydFIoYTpzdGFydCwgcGFydGl0aW9uIC0gMSwgYTpjbXApCi0gIDogIGNhbGwgU29ydFIocGFydGl0aW9uICsgMSwgYTplbmQsIGE6Y21wKQotICA6ZW5kZnVuYwogCi0gIDoiIFRvIFNvcnQgYSByYW5nZSBvZiBsaW5lcywgcGFzcyB0aGUgcmFuZ2UgdG8gU29ydCgpIGFsb25nIHdpdGggdGhlIG5hbWUgb2YgYQotICA6IiBmdW5jdGlvbiB0aGF0IHdpbGwgY29tcGFyZSB0d28gbGluZXMuCi0gIDpmdW5jISBTb3J0KGNtcCkgcmFuZ2UKLSAgOiAgY2FsbCBTb3J0UihhOmZpcnN0bGluZSwgYTpsYXN0bGluZSwgYTpjbXApCi0gIDplbmRmdW5jCi0KLSAgOiIgOlNvcnQgdGFrZXMgYSByYW5nZSBvZiBsaW5lcyBhbmQgc29ydHMgdGhlbS4KLSAgOmNvbW1hbmQhIC1uYXJncz0wIC1yYW5nZSBTb3J0IDxsaW5lMT4sPGxpbmUyPmNhbGwgU29ydCgiU3RyY21wIikKLTwKK3NjYW5mKCkgcmVwbGFjZW1lbnQgfgogCQkJCQkJCSpzc2NhbmYqCiBUaGVyZSBpcyBubyBzc2NhbmYoKSBmdW5jdGlvbiBpbiBWaW0uICBJZiB5b3UgbmVlZCB0byBleHRyYWN0IHBhcnRzIGZyb20gYQogbGluZSwgeW91IGNhbiB1c2UgbWF0Y2hzdHIoKSBhbmQgc3Vic3RpdHV0ZSgpIHRvIGRvIGl0LiAgVGhpcyBleGFtcGxlIHNob3dzCkBAIC03MzE1LDYgKzczMDcsMzUgQEAKIFRoZSBpbnB1dCBpcyBpbiB0aGUgdmFyaWFibGUgImxpbmUiLCB0aGUgcmVzdWx0cyBpbiB0aGUgdmFyaWFibGVzICJmaWxlIiwKICJsbnVtIiBhbmQgImNvbCIuIChpZGVhIGZyb20gTWljaGFlbCBHZWRkZXMpCiAKKworZ2V0dGluZyB0aGUgc2NyaXB0bmFtZXMgaW4gYSBEaWN0aW9uYXJ5IH4KKwkJCQkJCSpzY3JpcHRuYW1lcy1kaWN0aW9uYXJ5KgorVGhlIHw6c2NyaXB0bmFtZXN8IGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gZ2V0IGEgbGlzdCBvZiBhbGwgc2NyaXB0IGZpbGVzIHRoYXQKK2hhdmUgYmVlbiBzb3VyY2VkLiAgVGhlcmUgaXMgbm8gZXF1aXZhbGVudCBmdW5jdGlvbiBvciB2YXJpYWJsZSBmb3IgdGhpcworKGJlY2F1c2UgaXQncyByYXJlbHkgbmVlZGVkKS4gIEluIGNhc2UgeW91IG5lZWQgdG8gbWFuaXB1bGF0ZSB0aGUgbGlzdCB0aGlzCitjb2RlIGNhbiBiZSB1c2VkOiA+CisgICAgIiBHZXQgdGhlIG91dHB1dCBvZiAiOnNjcmlwdG5hbWVzIiBpbiB0aGUgc2NyaXB0bmFtZXNfb3V0cHV0IHZhcmlhYmxlLgorICAgIGxldCBzY3JpcHRuYW1lc19vdXRwdXQgPSAnJworICAgIHJlZGlyID0+IHNjcmlwdG5hbWVzX291dHB1dAorICAgIHNpbGVudCBzY3JpcHRuYW1lcworICAgIHJlZGlyIEVORAorICAgIAorICAgICIgU3BsaXQgdGhlIG91dHB1dCBpbnRvIGxpbmVzIGFuZCBwYXJzZSBlYWNoIGxpbmUuICBBZGQgYW4gZW50cnkgdG8gdGhlCisgICAgIiAic2NyaXB0cyIgZGljdGlvbmFyeS4KKyAgICBsZXQgc2NyaXB0cyA9IHt9CisgICAgZm9yIGxpbmUgaW4gc3BsaXQoc2NyaXB0bmFtZXNfb3V0cHV0LCAiXG4iKQorICAgICAgIiBPbmx5IGRvIG5vbi1ibGFuayBsaW5lcy4KKyAgICAgIGlmIGxpbmUgPX4gJ1xTJworCSIgR2V0IHRoZSBmaXJzdCBudW1iZXIgaW4gdGhlIGxpbmUuCisgICAgICAgIGxldCBuciA9IG1hdGNoc3RyKGxpbmUsICdcZFwrJykKKwkiIEdldCB0aGUgZmlsZSBuYW1lLCByZW1vdmUgdGhlIHNjcmlwdCBudW1iZXIgIiAxMjM6ICIuCisgICAgICAgIGxldCBuYW1lID0gc3Vic3RpdHV0ZShsaW5lLCAnLlwrOlxzKicsICcnLCAnJykKKwkiIEFkZCBhbiBpdGVtIHRvIHRoZSBEaWN0aW9uYXJ5CisgICAgICAgIGxldCBzY3JpcHRzW25yXSA9IG5hbWUKKyAgICAgIGVuZGlmCisgICAgZW5kZm9yCisgICAgdW5sZXQgc2NyaXB0bmFtZXNfb3V0cHV0CisKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogMTAuIE5vICtldmFsIGZlYXR1cmUJCQkJKm5vLWV2YWwtZmVhdHVyZSoKIApAQCAtNzM0OSw2ICs3MzcwLDcgQEAKIAktIGNoYW5naW5nIHRoZSBidWZmZXIgdGV4dAogCS0gZGVmaW5pbmcgb3IgY2hhbmdpbmcgbWFwcGluZywgYXV0b2NvbW1hbmRzLCBmdW5jdGlvbnMsIHVzZXIgY29tbWFuZHMKIAktIHNldHRpbmcgY2VydGFpbiBvcHRpb25zIChzZWUgfG9wdGlvbi1zdW1tYXJ5fCkKKwktIHNldHRpbmcgY2VydGFpbiB2OiB2YXJpYWJsZXMgKHNlZSB8djp2YXJ8KSAgKkU3OTQqCiAJLSBleGVjdXRpbmcgYSBzaGVsbCBjb21tYW5kCiAJLSByZWFkaW5nIG9yIHdyaXRpbmcgYSBmaWxlCiAJLSBqdW1waW5nIHRvIGFub3RoZXIgYnVmZmVyIG9yIGVkaXRpbmcgYSBmaWxlCg==