VGhlIHNwaGlueC1wcmUtaW5zdGFsbCBjb2RlIGhhcyBzb21lIGxvZ2ljIHRvIGRlYWwgd2l0aCBQ eXRob24KdmVyc2lvbiwgd2hpY2ggZW5zdXJlcyB0aGF0IGEgbWluaW1hbCB2ZXJzaW9uIHdpbGwg YmUgZW5mb3JjZWQKZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgbG9naWMuCgpNb3ZlIGl0IHRvIGEg c2VwYXJhdGUgbGlicmFyeSB0byBhbGxvdyByZS11c2luZyBpdHMgY29kZS4KCk5vIGZ1bmN0aW9u YWwgY2hhbmdlcy4KClNpZ25lZC1vZmYtYnk6IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhh YitodWF3ZWlAa2VybmVsLm9yZz4KLS0tCiB0b29scy9kb2NzL2xpYi9weXRob25fdmVyc2lvbi5w eSB8IDEzMyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB0b29scy9kb2NzL3NwaGlu eC1wcmUtaW5zdGFsbCAgICB8IDEyMCArKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAyIGZp bGVzIGNoYW5nZWQsIDE0NiBpbnNlcnRpb25zKCspLCAxMDcgZGVsZXRpb25zKC0pCiBjcmVhdGUg bW9kZSAxMDA2NDQgdG9vbHMvZG9jcy9saWIvcHl0aG9uX3ZlcnNpb24ucHkKCmRpZmYgLS1naXQg YS90b29scy9kb2NzL2xpYi9weXRob25fdmVyc2lvbi5weSBiL3Rvb2xzL2RvY3MvbGliL3B5dGhv bl92ZXJzaW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDUx OWQ1MjRlNTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZG9jcy9saWIvcHl0aG9uX3ZlcnNp b24ucHkKQEAgLTAsMCArMSwxMzMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKyMgU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKKyMgQ29weXJpZ2h0IChjKSAyMDE3 LTIwMjUgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiK2h1YXdlaUBrZXJuZWwub3JnPgor CisiIiIKK0hhbmRsZSBQeXRob24gdmVyc2lvbiBjaGVjayBsb2dpYy4KKworTm90IGFsbCBQeXRo b24gdmVyc2lvbnMgYXJlIHN1cHBvcnRlZCBieSBzY3JpcHRzLiBZZXQsIG9uIHNvbWUgY2FzZXMs CitsaWtlIGR1cmluZyBkb2N1bWVudGF0aW9uIGJ1aWxkLCBhIG5ld2VyIHZlcnNpb24gb2YgcHl0 aG9uIGNvdWxkIGJlCithdmFpbGFibGUuCisKK1RoaXMgY2xhc3MgYWxsb3dzIGNoZWNraW5nIGlm IHRoZSBtaW5pbWFsIHJlcXVpcmVtZW50cyBhcmUgZm9sbG93ZWQuCisKK0JldHRlciB0aGFuIHRo YXQsIFB5dGhvblZlcnNpb24uY2hlY2tfcHl0aG9uKCkgbm90IG9ubHkgY2hlY2tzIHRoZSBtaW5p bWFsCityZXF1aXJlbWVudHMsIGJ1dCBpdCBhdXRvbWF0aWNhbGx5IHN3aXRjaGVzIHRvIGEgdGhl IG5ld2VzdCBhdmFpbGFibGUKK1B5dGhvbiB2ZXJzaW9uIGlmIHByZXNlbnQuCisKKyIiIgorCitp bXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKKworZnJv bSBnbG9iIGltcG9ydCBnbG9iCisKK2NsYXNzIFB5dGhvblZlcnNpb246CisgICAgIiIiCisgICAg QW5jaWxsYXJ5IG1ldGhvZHMgdGhhdCBjaGVja3MgZm9yIG1pc3NpbmcgZGVwZW5kZW5jaWVzIGZv ciBkaWZmZXJlbnQKKyAgICB0eXBlcyBvZiB0eXBlcywgbGlrZSBiaW5hcmllcywgcHl0aG9uIG1v ZHVsZXMsIHJwbSBkZXBzLCBldGMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg dmVyc2lvbik6CisgICAgICAgICIiIu+/ve+/vW5pdGlhbGl6ZSBzZWxmLnZlcnNpb24gdHVwbGUg ZnJvbSBhIHZlcnNpb24gc3RyaW5nIiIiCisgICAgICAgIHNlbGYudmVyc2lvbiA9IHNlbGYucGFy c2VfdmVyc2lvbih2ZXJzaW9uKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBwYXJzZV92 ZXJzaW9uKHZlcnNpb24pOgorICAgICAgICAiIiJDb252ZXJ0IGEgbWFqb3IubWlub3IucGF0Y2gg dmVyc2lvbiBpbnRvIGEgdHVwbGUiIiIKKyAgICAgICAgcmV0dXJuIHR1cGxlKGludCh4KSBmb3Ig eCBpbiB2ZXJzaW9uLnNwbGl0KCIuIikpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHZl cl9zdHIodmVyc2lvbik6CisgICAgICAgICIiIlJldHVybnMgYSB2ZXJzaW9uIHR1cGxlIGFzIG1h am9yLm1pbm9yLnBhdGNoIiIiCisgICAgICAgIHJldHVybiAiLiIuam9pbihbc3RyKHgpIGZvciB4 IGluIHZlcnNpb25dKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVy bnMgYSB2ZXJzaW9uIHR1cGxlIGFzIG1ham9yLm1pbm9yLnBhdGNoIGZyb20gc2VsZi52ZXJzaW9u IiIiCisgICAgICAgIHJldHVybiBzZWxmLnZlcl9zdHIoc2VsZi52ZXJzaW9uKQorCisgICAgQHN0 YXRpY21ldGhvZAorICAgIGRlZiBnZXRfcHl0aG9uX3ZlcnNpb24oY21kKToKKyAgICAgICAgIiIi CisgICAgICAgIEdldCBweXRob24gdmVyc2lvbiBmcm9tIGEgUHl0aG9uIGJpbmFyeS4gQXMgd2Ug bmVlZCB0byBkZXRlY3QgaWYKKyAgICAgICAgYXJlIG91dCB0aGVyZSBuZXdlciBweXRob24gYmlu YXJpZXMsIHdlIGNhbid0IHJlbHkgb24gc3lzLnJlbGVhc2UgaGVyZS4KKyAgICAgICAgIiIiCisK KyAgICAgICAga3dhcmdzID0ge30KKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA8ICgzLCA3 KToKKyAgICAgICAgICAgIGt3YXJnc1sndW5pdmVyc2FsX25ld2xpbmVzJ10gPSBUcnVlCisgICAg ICAgIGVsc2U6CisgICAgICAgICAgICBrd2FyZ3NbJ3RleHQnXSA9IFRydWUKKworICAgICAgICBy ZXN1bHQgPSBzdWJwcm9jZXNzLnJ1bihbY21kLCAiLS12ZXJzaW9uIl0sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RkZXJyID0gc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKmt3YXJncywgY2hlY2s9RmFsc2UpCisKKyAgICAgICAg dmVyc2lvbiA9IHJlc3VsdC5zdGRvdXQuc3RyaXAoKQorCisgICAgICAgIG1hdGNoID0gcmUuc2Vh cmNoKHIiKFxkK1wuXGQrXC5cZCspIiwgdmVyc2lvbikKKyAgICAgICAgaWYgbWF0Y2g6CisgICAg ICAgICAgICByZXR1cm4gUHl0aG9uVmVyc2lvbi5wYXJzZV92ZXJzaW9uKG1hdGNoLmdyb3VwKDEp KQorCisgICAgICAgIHByaW50KGYiQ2FuJ3QgcGFyc2UgdmVyc2lvbiB7dmVyc2lvbn0iKQorICAg ICAgICByZXR1cm4gKDAsIDAsIDApCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGZpbmRf cHl0aG9uKG1pbl92ZXJzaW9uKToKKyAgICAgICAgIiIiCisgICAgICAgIERldGVjdCBpZiBhcmUg b3V0IHRoZXJlIGFueSBweXRob24gMy54eSB2ZXJzaW9uIG5ld2VyIHRoYW4gdGhlCisgICAgICAg IGN1cnJlbnQgb25lLgorCisgICAgICAgIE5vdGU6IHRoaXMgcm91dGluZSBpcyBsaW1pdGVkIHRv IHVwIHRvIDIgZGlnaXRzIGZvciBweXRob24zLiBXZQorICAgICAgICBtYXkgbmVlZCB0byB1cGRh dGUgaXQgb25lIGRheSwgaG9wZWZ1bGx5IG9uIGEgZGlzdGFudCBmdXR1cmUuCisgICAgICAgICIi IgorICAgICAgICBwYXR0ZXJucyA9IFsKKyAgICAgICAgICAgICJweXRob24zLlswLTldIiwKKyAg ICAgICAgICAgICJweXRob24zLlswLTldWzAtOV0iLAorICAgICAgICBdCisKKyAgICAgICAgIyBT ZWVrIGZvciBhIHB5dGhvbiBiaW5hcnkgbmV3ZXIgdGhhbiBtaW5fdmVyc2lvbgorICAgICAgICBm b3IgcGF0aCBpbiBvcy5nZXRlbnYoIlBBVEgiLCAiIikuc3BsaXQoIjoiKToKKyAgICAgICAgICAg IGZvciBwYXR0ZXJuIGluIHBhdHRlcm5zOgorICAgICAgICAgICAgICAgIGZvciBjbWQgaW4gZ2xv Yihvcy5wYXRoLmpvaW4ocGF0aCwgcGF0dGVybikpOgorICAgICAgICAgICAgICAgICAgICBpZiBv cy5wYXRoLmlzZmlsZShjbWQpIGFuZCBvcy5hY2Nlc3MoY21kLCBvcy5YX09LKToKKyAgICAgICAg ICAgICAgICAgICAgICAgIHZlcnNpb24gPSBQeXRob25WZXJzaW9uLmdldF9weXRob25fdmVyc2lv bihjbWQpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB2ZXJzaW9uID49IG1pbl92ZXJzaW9u OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbWQKKworICAgICAgICByZXR1 cm4gTm9uZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjaGVja19weXRob24obWluX3Zl cnNpb24pOgorICAgICAgICAiIiIKKyAgICAgICAgQ2hlY2sgaWYgdGhlIGN1cnJlbnQgcHl0aG9u IGJpbmFyeSBzYXRpc2ZpZXMgb3VyIG1pbmltYWwgcmVxdWlyZW1lbnQKKyAgICAgICAgZm9yIFNw aGlueCBidWlsZC4gSWYgbm90LCByZS1ydW4gd2l0aCBhIG5ld2VyIHZlcnNpb24gaWYgZm91bmQu CisgICAgICAgICIiIgorICAgICAgICBjdXJfdmVyID0gc3lzLnZlcnNpb25faW5mb1s6M10KKyAg ICAgICAgaWYgY3VyX3ZlciA+PSBtaW5fdmVyc2lvbjoKKyAgICAgICAgICAgIHZlciA9IFB5dGhv blZlcnNpb24udmVyX3N0cihjdXJfdmVyKQorICAgICAgICAgICAgcHJpbnQoZiJQeXRob24gdmVy c2lvbjoge3Zlcn0iKQorCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBweXRob25fdmVy ID0gUHl0aG9uVmVyc2lvbi52ZXJfc3RyKGN1cl92ZXIpCisKKyAgICAgICAgbmV3X3B5dGhvbl9j bWQgPSBQeXRob25WZXJzaW9uLmZpbmRfcHl0aG9uKG1pbl92ZXJzaW9uKQorICAgICAgICBpZiBu b3QgbmV3X3B5dGhvbl9jbWQ6CisgICAgICAgICAgICBwcmludChmIkVSUk9SOiBQeXRob24gdmVy c2lvbiB7cHl0aG9uX3Zlcn0gaXMgbm90IHNwcG9ydGVkIGFueW1vcmVcbiIpCisgICAgICAgICAg ICBwcmludCgiICAgICAgIENhbid0IGZpbmQgYSBuZXcgdmVyc2lvbi4gVGhpcyBzY3JpcHQgbWF5 IGZhaWwiKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBSZXN0YXJ0IHNjcmlwdCB1 c2luZyB0aGUgbmV3ZXIgdmVyc2lvbgorICAgICAgICBzY3JpcHRfcGF0aCA9IG9zLnBhdGguYWJz cGF0aChzeXMuYXJndlswXSkKKyAgICAgICAgYXJncyA9IFtuZXdfcHl0aG9uX2NtZCwgc2NyaXB0 X3BhdGhdICsgc3lzLmFyZ3ZbMTpdCisKKyAgICAgICAgcHJpbnQoZiJQeXRob24ge3B5dGhvbl92 ZXJ9IG5vdCBzdXBwb3J0ZWQuIENoYW5naW5nIHRvIHtuZXdfcHl0aG9uX2NtZH0iKQorCisgICAg ICAgIHRyeToKKyAgICAgICAgICAgIG9zLmV4ZWN2KG5ld19weXRob25fY21kLCBhcmdzKQorICAg ICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgc3lzLmV4aXQoZiJGYWlsZWQg dG8gcmVzdGFydCB3aXRoIHtuZXdfcHl0aG9uX2NtZH06IHtlfSIpCmRpZmYgLS1naXQgYS90b29s cy9kb2NzL3NwaGlueC1wcmUtaW5zdGFsbCBiL3Rvb2xzL2RvY3Mvc3BoaW54LXByZS1pbnN0YWxs CmluZGV4IDk1NGVkM2RjMDY0NS4uZDZkNjczYjc5NDVjIDEwMDc1NQotLS0gYS90b29scy9kb2Nz L3NwaGlueC1wcmUtaW5zdGFsbAorKysgYi90b29scy9kb2NzL3NwaGlueC1wcmUtaW5zdGFsbApA QCAtMzIsMjAgKzMyLDEwIEBAIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBmcm9tIGds b2IgaW1wb3J0IGdsb2IKIAorZnJvbSBsaWIucHl0aG9uX3ZlcnNpb24gaW1wb3J0IFB5dGhvblZl cnNpb24KIAotZGVmIHBhcnNlX3ZlcnNpb24odmVyc2lvbik6Ci0gICAgIiIiQ29udmVydCBhIG1h am9yLm1pbm9yLnBhdGNoIHZlcnNpb24gaW50byBhIHR1cGxlIiIiCi0gICAgcmV0dXJuIHR1cGxl KGludCh4KSBmb3IgeCBpbiB2ZXJzaW9uLnNwbGl0KCIuIikpCi0KLQotZGVmIHZlcl9zdHIodmVy c2lvbik6Ci0gICAgIiIiUmV0dXJucyBhIHZlcnNpb24gdHVwbGUgYXMgbWFqb3IubWlub3IucGF0 Y2giIiIKLQotICAgIHJldHVybiAiLiIuam9pbihbc3RyKHgpIGZvciB4IGluIHZlcnNpb25dKQot Ci0KLVJFQ09NTUVOREVEX1ZFUlNJT04gPSBwYXJzZV92ZXJzaW9uKCIzLjQuMyIpCi1NSU5fUFlU SE9OX1ZFUlNJT04gPSBwYXJzZV92ZXJzaW9uKCIzLjciKQorUkVDT01NRU5ERURfVkVSU0lPTiA9 IFB5dGhvblZlcnNpb24oIjMuNC4zIikudmVyc2lvbgorTUlOX1BZVEhPTl9WRVJTSU9OID0gUHl0 aG9uVmVyc2lvbigiMy43IikudmVyc2lvbgogCiAKIGNsYXNzIERlcE1hbmFnZXI6CkBAIC0yMzUs OTUgKzIyNSwxMSBAQCBjbGFzcyBBbmNpbGxhcnlNZXRob2RzOgogCiAgICAgICAgIHJldHVybiBO b25lCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldF9weXRob25fdmVyc2lvbihjbWQp OgotICAgICAgICAiIiIKLSAgICAgICAgR2V0IHB5dGhvbiB2ZXJzaW9uIGZyb20gYSBQeXRob24g YmluYXJ5LiBBcyB3ZSBuZWVkIHRvIGRldGVjdCBpZgotICAgICAgICBhcmUgb3V0IHRoZXJlIG5l d2VyIHB5dGhvbiBiaW5hcmllcywgd2UgY2FuJ3QgcmVseSBvbiBzeXMucmVsZWFzZSBoZXJlLgot ICAgICAgICAiIiIKLQotICAgICAgICByZXN1bHQgPSBTcGhpbnhEZXBlbmRlbmN5Q2hlY2tlci5y dW4oW2NtZCwgIi0tdmVyc2lvbiJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXB0dXJlX291dHB1dD1UcnVlLCB0ZXh0PVRydWUpCi0gICAgICAgIHZlcnNp b24gPSByZXN1bHQuc3Rkb3V0LnN0cmlwKCkKLQotICAgICAgICBtYXRjaCA9IHJlLnNlYXJjaChy IihcZCtcLlxkK1wuXGQrKSIsIHZlcnNpb24pCi0gICAgICAgIGlmIG1hdGNoOgotICAgICAgICAg ICAgcmV0dXJuIHBhcnNlX3ZlcnNpb24obWF0Y2guZ3JvdXAoMSkpCi0KLSAgICAgICAgcHJpbnQo ZiJDYW4ndCBwYXJzZSB2ZXJzaW9uIHt2ZXJzaW9ufSIpCi0gICAgICAgIHJldHVybiAoMCwgMCwg MCkKLQotICAgIEBzdGF0aWNtZXRob2QKLSAgICBkZWYgZmluZF9weXRob24oKToKLSAgICAgICAg IiIiCi0gICAgICAgIERldGVjdCBpZiBhcmUgb3V0IHRoZXJlIGFueSBweXRob24gMy54eSB2ZXJz aW9uIG5ld2VyIHRoYW4gdGhlCi0gICAgICAgIGN1cnJlbnQgb25lLgotCi0gICAgICAgIE5vdGU6 IHRoaXMgcm91dGluZSBpcyBsaW1pdGVkIHRvIHVwIHRvIDIgZGlnaXRzIGZvciBweXRob24zLiBX ZQotICAgICAgICBtYXkgbmVlZCB0byB1cGRhdGUgaXQgb25lIGRheSwgaG9wZWZ1bGx5IG9uIGEg ZGlzdGFudCBmdXR1cmUuCi0gICAgICAgICIiIgotICAgICAgICBwYXR0ZXJucyA9IFsKLSAgICAg ICAgICAgICJweXRob24zLlswLTldIiwKLSAgICAgICAgICAgICJweXRob24zLlswLTldWzAtOV0i LAotICAgICAgICBdCi0KLSAgICAgICAgIyBTZWVrIGZvciBhIHB5dGhvbiBiaW5hcnkgbmV3ZXIg dGhhbiBNSU5fUFlUSE9OX1ZFUlNJT04KLSAgICAgICAgZm9yIHBhdGggaW4gb3MuZ2V0ZW52KCJQ QVRIIiwgIiIpLnNwbGl0KCI6Iik6Ci0gICAgICAgICAgICBmb3IgcGF0dGVybiBpbiBwYXR0ZXJu czoKLSAgICAgICAgICAgICAgICBmb3IgY21kIGluIGdsb2Iob3MucGF0aC5qb2luKHBhdGgsIHBh dHRlcm4pKToKLSAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKSBhbmQg b3MuYWNjZXNzKGNtZCwgb3MuWF9PSyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9u ID0gU3BoaW54RGVwZW5kZW5jeUNoZWNrZXIuZ2V0X3B5dGhvbl92ZXJzaW9uKGNtZCkKLSAgICAg ICAgICAgICAgICAgICAgICAgIGlmIHZlcnNpb24gPj0gTUlOX1BZVEhPTl9WRVJTSU9OOgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbWQKLQotICAgIEBzdGF0aWNtZXRob2QK LSAgICBkZWYgY2hlY2tfcHl0aG9uKCk6Ci0gICAgICAgICIiIgotICAgICAgICBDaGVjayBpZiB0 aGUgY3VycmVudCBweXRob24gYmluYXJ5IHNhdGlzZmllcyBvdXIgbWluaW1hbCByZXF1aXJlbWVu dAotICAgICAgICBmb3IgU3BoaW54IGJ1aWxkLiBJZiBub3QsIHJlLXJ1biB3aXRoIGEgbmV3ZXIg dmVyc2lvbiBpZiBmb3VuZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGN1cl92ZXIgPSBzeXMudmVy c2lvbl9pbmZvWzozXQotICAgICAgICBpZiBjdXJfdmVyID49IE1JTl9QWVRIT05fVkVSU0lPTjoK LSAgICAgICAgICAgIHZlciA9IHZlcl9zdHIoY3VyX3ZlcikKLSAgICAgICAgICAgIHByaW50KGYi UHl0aG9uIHZlcnNpb246IHt2ZXJ9IikKLQotICAgICAgICAgICAgIyBUaGlzIGNvdWxkIGJlIHVz ZWZ1bCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCi0gICAgICAgICAgICBpZiBTcGhpbnhEZXBlbmRl bmN5Q2hlY2tlci53aGljaCgiZG9jdXRpbHMiKToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBT cGhpbnhEZXBlbmRlbmN5Q2hlY2tlci5ydW4oWyJkb2N1dGlscyIsICItLXZlcnNpb24iXSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJl X291dHB1dD1UcnVlLCB0ZXh0PVRydWUpCi0gICAgICAgICAgICAgICAgdmVyID0gcmVzdWx0LnN0 ZG91dC5zdHJpcCgpCi0gICAgICAgICAgICAgICAgbWF0Y2ggPSByZS5zZWFyY2gociIoXGQrXC5c ZCtcLlxkKykiLCB2ZXIpCi0gICAgICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAgICAg ICAgICAgIHZlciA9IG1hdGNoLmdyb3VwKDEpCi0KLSAgICAgICAgICAgICAgICBwcmludChmIkRv Y3V0aWxzIHZlcnNpb246IHt2ZXJ9IikKLQotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAg cHl0aG9uX3ZlciA9IHZlcl9zdHIoY3VyX3ZlcikKLQotICAgICAgICBuZXdfcHl0aG9uX2NtZCA9 IFNwaGlueERlcGVuZGVuY3lDaGVja2VyLmZpbmRfcHl0aG9uKCkKLSAgICAgICAgaWYgbm90IG5l d19weXRob25fY21kOgotICAgICAgICAgICAgcHJpbnQoZiJFUlJPUjogUHl0aG9uIHZlcnNpb24g e3B5dGhvbl92ZXJ9IGlzIG5vdCBzcHBvcnRlZCBhbnltb3JlXG4iKQotICAgICAgICAgICAgcHJp bnQoIiAgICAgICBDYW4ndCBmaW5kIGEgbmV3IHZlcnNpb24uIFRoaXMgc2NyaXB0IG1heSBmYWls IikKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgICAgICMgUmVzdGFydCBzY3JpcHQgdXNpbmcg dGhlIG5ld2VyIHZlcnNpb24KLSAgICAgICAgc2NyaXB0X3BhdGggPSBvcy5wYXRoLmFic3BhdGgo c3lzLmFyZ3ZbMF0pCi0gICAgICAgIGFyZ3MgPSBbbmV3X3B5dGhvbl9jbWQsIHNjcmlwdF9wYXRo XSArIHN5cy5hcmd2WzE6XQotCi0gICAgICAgIHByaW50KGYiUHl0aG9uIHtweXRob25fdmVyfSBu b3Qgc3VwcG9ydGVkLiBDaGFuZ2luZyB0byB7bmV3X3B5dGhvbl9jbWR9IikKLQotICAgICAgICB0 cnk6Ci0gICAgICAgICAgICBvcy5leGVjdihuZXdfcHl0aG9uX2NtZCwgYXJncykKLSAgICAgICAg ZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIHN5cy5leGl0KGYiRmFpbGVkIHRvIHJl c3RhcnQgd2l0aCB7bmV3X3B5dGhvbl9jbWR9OiB7ZX0iKQotCiAgICAgQHN0YXRpY21ldGhvZAog ICAgIGRlZiBydW4oKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIEV4Y2Vj dXRlIGEgY29tbWFuZCwgaGlkaW5nIGl0cyBvdXRwdXQgYnkgZGVmYXVsdC4KLSAgICAgICAgUHJl c2VydmUgY29tYXRpYmlsaXR5IHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zLgorICAgICAgICBQ cmVzZXJ2ZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zLgogICAgICAg ICAiIiIKIAogICAgICAgICBjYXB0dXJlX291dHB1dCA9IGt3YXJncy5wb3AoJ2NhcHR1cmVfb3V0 cHV0JywgRmFsc2UpCkBAIC01MjcsMTEgKzQzMywxMSBAQCBjbGFzcyBNaXNzaW5nQ2hlY2tlcnMo QW5jaWxsYXJ5TWV0aG9kcyk6CiAgICAgICAgIGZvciBsaW5lIGluIHJlc3VsdC5zdGRvdXQuc3Bs aXQoIlxuIik6CiAgICAgICAgICAgICBtYXRjaCA9IHJlLm1hdGNoKHIiXnNwaGlueC1idWlsZFxz KyhbXGRcLl0rKSg/OlwrKD86L1tcZGEtZl0rKXxiXGQrKT9ccyokIiwgbGluZSkKICAgICAgICAg ICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZV92ZXJzaW9uKG1hdGNo Lmdyb3VwKDEpKQorICAgICAgICAgICAgICAgIHJldHVybiBQeXRob25WZXJzaW9uLnBhcnNlX3Zl cnNpb24obWF0Y2guZ3JvdXAoMSkpCiAKICAgICAgICAgICAgIG1hdGNoID0gcmUubWF0Y2gociJe U3BoaW54LipccysoW1xkXC5dKylccyokIiwgbGluZSkKICAgICAgICAgICAgIGlmIG1hdGNoOgot ICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZV92ZXJzaW9uKG1hdGNoLmdyb3VwKDEpKQorICAg ICAgICAgICAgICAgIHJldHVybiBQeXRob25WZXJzaW9uLnBhcnNlX3ZlcnNpb24obWF0Y2guZ3Jv dXAoMSkpCiAKICAgICBkZWYgY2hlY2tfc3BoaW54KHNlbGYsIGNvbmYpOgogICAgICAgICAiIiIK QEAgLTU0Miw3ICs0NDgsNyBAQCBjbGFzcyBNaXNzaW5nQ2hlY2tlcnMoQW5jaWxsYXJ5TWV0aG9k cyk6CiAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgICAgICAgICAg bWF0Y2ggPSByZS5tYXRjaChyIl5ccypuZWVkc19zcGhpbnhccyo9XHMqW1wnXCJdKFtcZFwuXSsp W1wnXCJdIiwgbGluZSkKICAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2g6Ci0gICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLm1pbl92ZXJzaW9uID0gcGFyc2VfdmVyc2lvbihtYXRjaC5ncm91 cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWluX3ZlcnNpb24gPSBQeXRob25W ZXJzaW9uLnBhcnNlX3ZlcnNpb24obWF0Y2guZ3JvdXAoMSkpCiAgICAgICAgICAgICAgICAgICAg ICAgICBicmVhawogICAgICAgICBleGNlcHQgSU9FcnJvcjoKICAgICAgICAgICAgIHN5cy5leGl0 KGYiQ2FuJ3Qgb3BlbiB7Y29uZn0iKQpAQCAtNTYyLDggKzQ2OCw4IEBAIGNsYXNzIE1pc3NpbmdD aGVja2VycyhBbmNpbGxhcnlNZXRob2RzKToKICAgICAgICAgICAgIHN5cy5leGl0KGYie3NwaGlu eH0gZGlkbid0IHJldHVybiBpdHMgdmVyc2lvbiIpCiAKICAgICAgICAgaWYgc2VsZi5jdXJfdmVy c2lvbiA8IHNlbGYubWluX3ZlcnNpb246Ci0gICAgICAgICAgICBjdXJ2ZXIgPSB2ZXJfc3RyKHNl bGYuY3VyX3ZlcnNpb24pCi0gICAgICAgICAgICBtaW52ZXIgPSB2ZXJfc3RyKHNlbGYubWluX3Zl cnNpb24pCisgICAgICAgICAgICBjdXJ2ZXIgPSBQeXRob25WZXJzaW9uLnZlcl9zdHIoc2VsZi5j dXJfdmVyc2lvbikKKyAgICAgICAgICAgIG1pbnZlciA9IFB5dGhvblZlcnNpb24udmVyX3N0cihz ZWxmLm1pbl92ZXJzaW9uKQogCiAgICAgICAgICAgICBwcmludChmIkVSUk9SOiBTcGhpbnggdmVy c2lvbiBpcyB7Y3VydmVyfS4gSXQgc2hvdWxkIGJlID49IHttaW52ZXJ9IikKICAgICAgICAgICAg IHNlbGYubmVlZF9zcGhpbnggPSAxCkBAIC0xMzA0LDcgKzEyMTAsNyBAQCBjbGFzcyBTcGhpbnhE ZXBlbmRlbmN5Q2hlY2tlcihNaXNzaW5nQ2hlY2tlcnMpOgogICAgICAgICAgICAgZWxzZToKICAg ICAgICAgICAgICAgICBpZiBzZWxmLm5lZWRfc3BoaW54IGFuZCB2ZXIgPj0gc2VsZi5taW5fdmVy c2lvbjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChmLCB2ZXIpCi0gICAgICAgICAgICAg ICAgZWxpZiBwYXJzZV92ZXJzaW9uKHZlcikgPiBzZWxmLmN1cl92ZXJzaW9uOgorICAgICAgICAg ICAgICAgIGVsaWYgUHl0aG9uVmVyc2lvbi5wYXJzZV92ZXJzaW9uKHZlcikgPiBzZWxmLmN1cl92 ZXJzaW9uOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGYsIHZlcikKIAogICAgICAgICBy ZXR1cm4gKCIiLCB2ZXIpCkBAIC0xNDExLDcgKzEzMTcsNyBAQCBjbGFzcyBTcGhpbnhEZXBlbmRl bmN5Q2hlY2tlcihNaXNzaW5nQ2hlY2tlcnMpOgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAg ICAgaWYgc2VsZi5sYXRlc3RfYXZhaWxfdmVyOgotICAgICAgICAgICAgbGF0ZXN0X2F2YWlsX3Zl ciA9IHZlcl9zdHIoc2VsZi5sYXRlc3RfYXZhaWxfdmVyKQorICAgICAgICAgICAgbGF0ZXN0X2F2 YWlsX3ZlciA9IFB5dGhvblZlcnNpb24udmVyX3N0cihzZWxmLmxhdGVzdF9hdmFpbF92ZXIpCiAK ICAgICAgICAgaWYgbm90IHNlbGYubmVlZF9zcGhpbng6CiAgICAgICAgICAgICAjIHNwaGlueC1i dWlsZCBpcyBwcmVzZW50IGFuZCBpdHMgdmVyc2lvbiBpcyA+PSAkbWluX3ZlcnNpb24KQEAgLTE1 MDcsNyArMTQxMyw3IEBAIGNsYXNzIFNwaGlueERlcGVuZGVuY3lDaGVja2VyKE1pc3NpbmdDaGVj a2Vycyk6CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCgiVW5rbm93biBPUyIpCiAg ICAgICAgIGlmIHNlbGYuY3VyX3ZlcnNpb24gIT0gKDAsIDAsIDApOgotICAgICAgICAgICAgdmVy ID0gdmVyX3N0cihzZWxmLmN1cl92ZXJzaW9uKQorICAgICAgICAgICAgdmVyID0gUHl0aG9uVmVy c2lvbi52ZXJfc3RyKHNlbGYuY3VyX3ZlcnNpb24pCiAgICAgICAgICAgICBwcmludChmIlNwaGlu eCB2ZXJzaW9uOiB7dmVyfVxuIikKIAogICAgICAgICAjIENoZWNrIHRoZSB0eXBlIG9mIHZpcnR1 YWwgZW52LCBkZXBlbmRpbmcgb24gUHl0aG9uIHZlcnNpb24KQEAgLTE2MTMsNyArMTUxOSw3IEBA IGRlZiBtYWluKCk6CiAKICAgICBjaGVja2VyID0gU3BoaW54RGVwZW5kZW5jeUNoZWNrZXIoYXJn cykKIAotICAgIGNoZWNrZXIuY2hlY2tfcHl0aG9uKCkKKyAgICBQeXRob25WZXJzaW9uLmNoZWNr X3B5dGhvbihNSU5fUFlUSE9OX1ZFUlNJT04pCiAgICAgY2hlY2tlci5jaGVja19uZWVkcygpCiAK ICMgQ2FsbCBtYWluIGlmIG5vdCB1c2VkIGFzIG1vZHVsZQotLSAKMi41MS4wCgo=