[PATCH 1/2] maint: Switch bootstrap to use a submodule
Eric Blake via M4-patches <[email protected]> Fri, 4 Apr 2025 11:47:19 -0500
| Newsgroups | gmane.comp.gnu.m4.patches |
|---|---|
| Message-ID | <[email protected]> |
VXBzdHJlYW0gZGV2ZWxvcG1lbnQgb24gYm9vdHN0cmFwIG5vdyBmYXZvcnMgdXNlIG9mIGEgZ2l0 IHN1Ym1vZHVsZSwKcmF0aGVyIHRoYW4gbWFudWFsbHkgY29weWluZyBpbiBmaWxlcyB0byB0aGUg ZXhpc3RpbmcgZ2wvIG92ZXJyaWRlCihhbHRob3VnaCBnbC8gcmVtYWlucyBhdmFpbGFibGUgZm9y IG90aGVyIGdudWxpYiBvdmVycmlkZXMpLiAgVXBkYXRlCnRvIHRoZSBuZXdlc3QgZ251bGliLCB0 byBwdWxsIGluIHNldmVyYWwgZml4ZXMuCgoqIC5naXRtb2R1bGVzOiBBZGQgZ2wtbW9kL2Jvb3Rz dHJhcCBhcyBhIHN1Ym1vZHVsZS4KKiBnbC1tb2QvYm9vdHN0cmFwOiBOZXcgZ2l0IHN1Ym1vZHVs ZS4KKiBib290c3RyYXA6IFJlZ2VuZXJhdGUuCiogbTQvZ251bGliLWNhY2hlLm00OiBMaWtld2lz ZS4KKiBib290c3RyYXAuY29uZiAoZ251bGliX25vbl9tb2R1bGVfZmlsZXMpOiBEcm9wLgoobG9j YWxfZ2xfcGF0aCwgZ251bGliX2dpdF9zdWJtb2R1bGVzKTogVXBkYXRlIHRvIHVzZSBzdWJtb2R1 bGUgaW5zdGVhZC4KKiBnbC8qOiBSZW1vdmUgZmlsZXMgdGhhdCB1c2VkIHRvIGJlIGhhbmQtY29w aWVkIGZyb20gYm9vdHN0cmFwIHByb2plY3QuCi0tLQogLmdpdG1vZHVsZXMgICAgICAgICAgICAg ICAgIHwgICAgMyArCiBib290c3RyYXAgICAgICAgICAgICAgICAgICAgfCAgIDM4ICstCiBib290 c3RyYXAuY29uZiAgICAgICAgICAgICAgfCAgIDEzICstCiBnbC1tb2QvYm9vdHN0cmFwICAgICAg ICAgICAgfCAgICAxICsKIGdsL2J1aWxkLWF1eC9ib290c3RyYXAuaW4gICB8IDI4MzUgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGdsL2J1aWxkLWF1eC9leHRyYWN0LXRyYWNl ICB8ICA0ODYgLS0tLS0tCiBnbC9idWlsZC1hdXgvZnVuY2xpYi5zaCAgICAgfCAxNDY1IC0tLS0t LS0tLS0tLS0tLS0tLQogZ2wvYnVpbGQtYXV4L2lubGluZS1zb3VyY2UgIHwgIDE1OSAtLQogZ2wv YnVpbGQtYXV4L29wdGlvbnMtcGFyc2VyIHwgIDY4NSAtLS0tLS0tLS0KIGdsL2RvYy9ib290c3Ry YXAudGV4aSAgICAgICB8ICA0ODIgLS0tLS0tCiBnbC9tb2R1bGVzL2Jvb3RzdHJhcCAgICAgICAg fCAgIDIzIC0KIGdsL21vZHVsZXMvZXh0cmFjdC10cmFjZSAgICB8ICAgMjEgLQogZ2wvbW9kdWxl cy9mdW5jbGliLnNoICAgICAgIHwgICAxOSAtCiBnbC9tb2R1bGVzL2lubGluZS1zb3VyY2UgICAg fCAgIDIxIC0KIGdsL21vZHVsZXMvb3B0aW9ucy1wYXJzZXIgICB8ICAgMjAgLQogbTQvZ251bGli LWNhY2hlLm00ICAgICAgICAgIHwgICAgNSArLQogMTYgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0 aW9ucygrKSwgNjI0NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDE2MDAwMCBnbC1tb2QvYm9v dHN0cmFwCiBkZWxldGUgbW9kZSAxMDA3NTUgZ2wvYnVpbGQtYXV4L2Jvb3RzdHJhcC5pbgogZGVs ZXRlIG1vZGUgMTAwNzU1IGdsL2J1aWxkLWF1eC9leHRyYWN0LXRyYWNlCiBkZWxldGUgbW9kZSAx MDA2NDQgZ2wvYnVpbGQtYXV4L2Z1bmNsaWIuc2gKIGRlbGV0ZSBtb2RlIDEwMDc1NSBnbC9idWls ZC1hdXgvaW5saW5lLXNvdXJjZQogZGVsZXRlIG1vZGUgMTAwNjQ0IGdsL2J1aWxkLWF1eC9vcHRp b25zLXBhcnNlcgogZGVsZXRlIG1vZGUgMTAwNzU1IGdsL2RvYy9ib290c3RyYXAudGV4aQogZGVs ZXRlIG1vZGUgMTAwNjQ0IGdsL21vZHVsZXMvYm9vdHN0cmFwCiBkZWxldGUgbW9kZSAxMDA2NDQg Z2wvbW9kdWxlcy9leHRyYWN0LXRyYWNlCiBkZWxldGUgbW9kZSAxMDA2NDQgZ2wvbW9kdWxlcy9m dW5jbGliLnNoCiBkZWxldGUgbW9kZSAxMDA2NDQgZ2wvbW9kdWxlcy9pbmxpbmUtc291cmNlCiBk ZWxldGUgbW9kZSAxMDA2NDQgZ2wvbW9kdWxlcy9vcHRpb25zLXBhcnNlcgoKZGlmZiAtLWdpdCBh Ly5naXRtb2R1bGVzIGIvLmdpdG1vZHVsZXMKaW5kZXggOTk5M2Y1NTIuLjUzOGIwNjc4IDEwMDY0 NAotLS0gYS8uZ2l0bW9kdWxlcworKysgYi8uZ2l0bW9kdWxlcwpAQCAtMSwzICsxLDYgQEAKIFtz dWJtb2R1bGUgImdudWxpYiJdCiAgICAgICAgIHBhdGggPSBnbnVsaWIKICAgICAgICAgdXJsID0g aHR0cHM6Ly9naXQuc2F2YW5uYWguZ251Lm9yZy9naXQvZ251bGliLmdpdAorW3N1Ym1vZHVsZSAi Z2wtbW9kL2Jvb3RzdHJhcCJdCisJcGF0aCA9IGdsLW1vZC9ib290c3RyYXAKKwl1cmwgPSBodHRw czovL2dpdGh1Yi5jb20vZ251bGliLW1vZHVsZXMvYm9vdHN0cmFwLmdpdApkaWZmIC0tZ2l0IGEv Ym9vdHN0cmFwIGIvYm9vdHN0cmFwCmluZGV4IGNlMTIzNWM4Li5jMjE0NDU3NiAxMDA3NTUKLS0t IGEvYm9vdHN0cmFwCisrKyBiL2Jvb3RzdHJhcApAQCAtOSwxMSArOSwxMSBAQAogIyBUaGlzIGlz IGZyZWUgc29mdHdhcmUuICBUaGVyZSBpcyBOTyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yCiAjIE1F UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICMKLSMg Q29weXJpZ2h0IChDKSAyMDEwLTIwMTksIDIwMjEsIDIwMjMgQm9vdHN0cmFwIEF1dGhvcnMKKyMg Q29weXJpZ2h0IChDKSAyMDEwLTIwMTksIDIwMjEsIDIwMjMtMjAyNCBCb290c3RyYXAgQXV0aG9y cwogIwogIyBUaGlzIGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IE1JVCBsaWNlbnNlCiAjIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4sIGFu ZCBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyCi0jIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Z3BsLTIuMC5odG1sPi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBvZgorIyA8aHR0cHM6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWw+LiAgWW91IG11c3QgYXBwbHkgb25lIG9mCiAjIHRo ZXNlIGxpY2Vuc2VzIHdoZW4gdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhpcyBzb2Z0d2FyZSBv ciBhbnkgb2YKICMgdGhlIGZpbGVzIHdpdGhpbiBpdC4gIFNlZSB0aGUgVVJMcyBhYm92ZSwgb3Ig dGhlIGZpbGUgYExJQ0VOU0VgCiAjIGluY2x1ZGVkIGluIHRoZSBCb290c3RyYXAgZGlzdHJpYnV0 aW9uIGZvciB0aGUgZnVsbCBsaWNlbnNlIHRleHRzLgpAQCAtNDgsMTIgKzQ4LDEyIEBACiAjICAg Z2wvYnVpbGQtYXV4L2lubGluZS1zb3VyY2UgZ2wvYnVpbGQtYXV4L2Jvb3RzdHJhcC5pbiA+IGJv b3RzdHJhcAogIwogIyBZb3Ugc2hvdWxkIHRoZW4gc3RvcmUgdGhhbiBzY3JpcHQgaW4gdmVyc2lv biBjb250cm9sIGZvciBvdGhlcgotIyBkZXZlbG9wZXJzIGluIHlvdSBwcm9qZWN0LiAgSXQgd2ls bCBnaXZlIHlvdSBpbnN0cnVjdGlvbnMgYWJvdXQKKyMgZGV2ZWxvcGVycyBpbiB5b3VyIHByb2pl Y3QuICBJdCB3aWxsIGdpdmUgeW91IGluc3RydWN0aW9ucyBhYm91dAogIyBob3cgdG8ga2VlcCBp dCB1cCB0byBkYXRlIGlmIHRoZSBzb3VyY2VzIGNoYW5nZS4KICMKICMgU2VlIGdsL2RvYy9ib290 c3RyYXAudGV4aSBmb3IgZG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gd3JpdGUKICMgYSBib290c3Ry YXAuY29uZiB0byBjdXN0b21pemUgaXQgZm9yIHlvdXIgcHJvamVjdCdzCi0jIGlkaW9zeW5jcmFj aWVzLgorIyBpZGlvc3luY3Jhc2llcy4KCgogIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMjCkBAIC0xOTIsNyArMTky LDcgQEAgZXh0cmFfbG9jYWxlX2NhdGVnb3JpZXM9CgogIyBBZGRpdGlvbmFsIHhnZXR0ZXh0IG9w dGlvbnMgdG8gdXNlLiAgR251bGliIG1pZ2h0IHByb3ZpZGUgeW91IHdpdGggYW4KICMgZXh0ZW5z aXZlIGxpc3Qgb2YgYWRkaXRpb25hbCBvcHRpb25zIHRvIGFwcGVuZCB0byB0aGlzLCBidXQgZ2V0 dGV4dAotIyAwLjE2LjEgYW5kIG5ld2VyIGFwcGVuZHMgdGhlbSBhdXRvbWF0aWNhbHksIHNvIHlv dSBjYW4gc2FmZWx5IGlnbm9yZQorIyAwLjE2LjEgYW5kIG5ld2VyIGFwcGVuZHMgdGhlbSBhdXRv bWF0aWNhbGx5LCBzbyB5b3UgY2FuIHNhZmVseSBpZ25vcmUKICMgdGhlIGNvbXBsYWludHMgZnJv bSAnZ251bGliLXRvb2wnIGlmIHlvdXIgJGNvbmZpZ3VyZV9hYyBzdGF0ZXM6CiAjCiAjICAgIEFN X0dOVV9HRVRURVhUX1ZFUlNJT04oWzAuMTYuMV0pCkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBzY3Jp cHR2ZXJzaW9uPTIwMTktMDItMTkuMTU7ICMgVVRDCiAjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZS4g IFRoZXJlIGlzIE5PIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IKICMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogIwotIyBDb3B5cmlnaHQgKEMpIDIw MDQtMjAxOSwgMjAyMSwgMjAyMyBCb290c3RyYXAgQXV0aG9ycworIyBDb3B5cmlnaHQgKEMpIDIw MDQtMjAxOSwgMjAyMSwgMjAyMy0yMDI0IEJvb3RzdHJhcCBBdXRob3JzCiAjCiAjIFRoaXMgZmls ZSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2UKICMg PGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUPiwgYW5kIEdQTCB2ZXJzaW9uIDIg b3IgbGF0ZXIKLSMgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWw+LiAg WW91IG11c3QgYXBwbHkgb25lIG9mCisjIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dw bC0yLjAuaHRtbD4uICBZb3UgbXVzdCBhcHBseSBvbmUgb2YKICMgdGhlc2UgbGljZW5zZXMgd2hl biB1c2luZyBvciByZWRpc3RyaWJ1dGluZyB0aGlzIHNvZnR3YXJlIG9yIGFueSBvZgogIyB0aGUg ZmlsZXMgd2l0aGluIGl0LiAgU2VlIHRoZSBVUkxzIGFib3ZlLCBvciB0aGUgZmlsZSBgTElDRU5T RWAKICMgaW5jbHVkZWQgaW4gdGhlIEJvb3RzdHJhcCBkaXN0cmlidXRpb24gZm9yIHRoZSBmdWxs IGxpY2Vuc2UgdGV4dHMuCkBAIC03NTIsNyArNzUyLDcgQEAgZnVuY19yZXF1aXJlX3Rlcm1fY29s b3JzICgpCgogICAjIF9HX0hBVkVfUExVU0VRX09QCiAgICMgQ2FuIGJlIGVtcHR5LCBpbiB3aGlj aCBjYXNlIHRoZSBzaGVsbCBpcyBwcm9iZWQsICJ5ZXMiIGlmICs9IGlzCi0gICMgdXNlYWJsZSBv ciBhbnl0aGluZyBlbHNlIGlmIGl0IGRvZXMgbm90IHdvcmsuCisgICMgdXNhYmxlIG9yIGFueXRo aW5nIGVsc2UgaWYgaXQgZG9lcyBub3Qgd29yay4KICAgdGVzdCAteiAiJF9HX0hBVkVfUExVU0VR X09QIiBcCiAgICAgJiYgKGV2YWwgJ3g9YTsgeCs9IiBiIjsgdGVzdCAiYSBiIiA9ICIkeCInKSAy Pi9kZXYvbnVsbCBcCiAgICAgJiYgX0dfSEFWRV9QTFVTRVFfT1A9eWVzCkBAIC05MDIsNyArOTAy LDcgQEAgZXZhbCAnZnVuY19kaXJuYW1lICgpCiAjICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBM QUNFTUVOVC4KICMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVf cmVzdWx0IgogIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCi0jICAgICAg ICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyMgICAgICAg ICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKICMgRm9yIGVm ZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0byB0aGUgZnVuY3Rpb25zIGFib3ZlIGJ1dCBp bnN0ZWFkCiAjIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgogZXZhbCAnZnVuY19k aXJuYW1lX2FuZF9iYXNlbmFtZSAoKQpAQCAtMTA2MCw3ICsxMDYwLDcgQEAgZnVuY19ta2Rpcl9w ICgpCiAgICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0 Li4uCiAgICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRfR19kaXJlY3RvcnlfcGF0aCI7IGRvCiAgICAg ICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9u IGRlbGltaXRlZAotCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMg d2hpdGVzcGFjZS4KKwkjIGxpc3QgaW4gY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlu cyB3aGl0ZXNwYWNlLgogICAgICAgICBfR19kaXJfbGlzdD0kX0dfZGlyZWN0b3J5X3BhdGg6JF9H X2Rpcl9saXN0CgogICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNs YXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCkBAIC0xNjk5LDExICsxNjk5LDExIEBAIGZ1bmNf bHRfdmVyICgpCiAjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZS4gIFRoZXJlIGlzIE5PIHdhcnJhbnR5 OyBub3QgZXZlbiBmb3IKICMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLgogIwotIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSwgMjAyMSwgMjAyMyBC b290c3RyYXAgQXV0aG9ycworIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSwgMjAyMSwgMjAyMy0y MDI0IEJvb3RzdHJhcCBBdXRob3JzCiAjCiAjIFRoaXMgZmlsZSBpcyBkdWFsIGxpY2Vuc2VkIHVu ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2UKICMgPGh0dHBzOi8vb3BlbnNvdXJjZS5v cmcvbGljZW5zZXMvTUlUPiwgYW5kIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIKLSMgPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWw+LiAgWW91IG11c3QgYXBwbHkgb25lIG9m CisjIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbD4uICBZb3UgbXVz dCBhcHBseSBvbmUgb2YKICMgdGhlc2UgbGljZW5zZXMgd2hlbiB1c2luZyBvciByZWRpc3RyaWJ1 dGluZyB0aGlzIHNvZnR3YXJlIG9yIGFueSBvZgogIyB0aGUgZmlsZXMgd2l0aGluIGl0LiAgU2Vl IHRoZSBVUkxzIGFib3ZlLCBvciB0aGUgZmlsZSBgTElDRU5TRWAKICMgaW5jbHVkZWQgaW4gdGhl IEJvb3RzdHJhcCBkaXN0cmlidXRpb24gZm9yIHRoZSBmdWxsIGxpY2Vuc2UgdGV4dHMuCkBAIC0y Mzg0LDExICsyMzg0LDExIEBAIGZ1bmNfdmVyc2lvbiAoKQogIyBUaGlzIGlzIGZyZWUgc29mdHdh cmUuICBUaGVyZSBpcyBOTyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yCiAjIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICMKLSMgQ29weXJpZ2h0IChD KSAyMDEwLTIwMTksIDIwMjEsIDIwMjMgQm9vdHN0cmFwIEF1dGhvcnMKKyMgQ29weXJpZ2h0IChD KSAyMDEwLTIwMTksIDIwMjEsIDIwMjMtMjAyNCBCb290c3RyYXAgQXV0aG9ycwogIwogIyBUaGlz IGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNl CiAjIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4sIGFuZCBHUEwgdmVyc2lv biAyIG9yIGxhdGVyCi0jIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1s Pi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBvZgorIyA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy9ncGwtMi4wLmh0bWw+LiAgWW91IG11c3QgYXBwbHkgb25lIG9mCiAjIHRoZXNlIGxpY2Vuc2Vz IHdoZW4gdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhpcyBzb2Z0d2FyZSBvciBhbnkgb2YKICMg dGhlIGZpbGVzIHdpdGhpbiBpdC4gIFNlZSB0aGUgVVJMcyBhYm92ZSwgb3IgdGhlIGZpbGUgYExJ Q0VOU0VgCiAjIGluY2x1ZGVkIGluIHRoZSBCb290c3RyYXAgZGlzdHJpYnV0aW9uIGZvciB0aGUg ZnVsbCBsaWNlbnNlIHRleHRzLgpAQCAtMzgzMiw3ICszODMyLDcgQEAgZm9yIHRvb2wgaW4gYXV0 b2NvbmYgbGlidG9vbGl6ZSBhdXRvcG9pbnQ7IGRvCiAgICAgICBfR192ZXJzaW9uPSRmdW5jX2V4 dHJhY3RfdHJhY2VfcmVzdWx0CiAgICAgICB0ZXN0IC1uICIkX0dfdmVyc2lvbiIgJiYgewogICAg ICAgICBmdW5jX2FwcGVuZCBidWlsZHJlcSAiXAotICAgICAgICAgICAgJyR0b29sJyAkX0dfdmVy c2lvbiBodHRwOi8vd3d3LmdudS5vcmcvcy8nJGInCisgICAgICAgICAgICAnJHRvb2wnICRfR192 ZXJzaW9uIGh0dHBzOi8vd3d3LmdudS5vcmcvcy8nJGInCiAiCiAgICAgICAgIGZ1bmNfdmVyYm9z ZSBcCiAgICAgICAgICAgICAiYXV0by1hZGRpbmcgJ1wnJHRvb2wnLSRfR192ZXJzaW9uJ1wnJyB0 byBidWlsZCByZXF1aXJlbWVudHMiCkBAIC0zODY1LDcgKzM4NjUsNyBAQCBmdW5jX3JlcXVpcmVf YnVpbGRyZXFfYXV0b21ha2UgKCkKICAgICAgICAgdGVzdCAtbiAiJGF1dG9tYWtlX3ZlcnNpb24i IHx8IGF1dG9tYWtlX3ZlcnNpb249LQoKICAgICAgICAgZnVuY19hcHBlbmQgYnVpbGRyZXEgIlwK LSAgICAgICAgICAgIGF1dG9tYWtlICRhdXRvbWFrZV92ZXJzaW9uIGh0dHA6Ly93d3cuZ251Lm9y Zy9zL2F1dG9tYWtlCisgICAgICAgICAgICBhdXRvbWFrZSAkYXV0b21ha2VfdmVyc2lvbiBodHRw czovL3d3dy5nbnUub3JnL3MvYXV0b21ha2UKICIKICAgICAgICAgZnVuY192ZXJib3NlIFwKICAg ICAgICAgICAgICJhdXRvLWFkZGluZyAnYXV0b21ha2UtJGF1dG9tYWtlX3ZlcnNpb24nIHRvIGJ1 aWxkIHJlcXVpcmVtZW50cyIKQEAgLTM5MDIsNyArMzkwMiw3IEBAIGZ1bmNfcmVxdWlyZV9idWls ZHJlcV9wYXRjaCAoKQogICAgICAgICBpZiB0ZXN0ICEgLWQgIiRfR19kaXIiIFwKICAgICAgICAg ICAgIHx8IGZpbmQgIiRfR19kaXIiIC1uYW1lICIqLmRpZmYiIC1leGVjIGZhbHNlIHt9IFw7IDsg dGhlbiA6CiAgICAgICAgIGVsc2UKLSAgICAgICAgICBmdW5jX2FwcGVuZCBidWlsZHJlcSAicGF0 Y2ggLSBodHRwOi8vd3d3LmdudS5vcmcvcy9wYXRjaCRubCIKKyAgICAgICAgICBmdW5jX2FwcGVu ZCBidWlsZHJlcSAicGF0Y2ggLSBodHRwczovL3d3dy5nbnUub3JnL3MvcGF0Y2gkbmwiCiAgICAg ICAgICAgYnJlYWsKICAgICAgICAgZmkKICAgICAgIGRvbmUKQEAgLTUwODIsNyArNTA4Miw3IEBA IGZ1bmNfZ2V0X3ZlcnNpb24gKCkKICAgICBfR19hcHA9JDEKCiAgICAgIyBSYXRoZXIgdGhhbiB1 bmNvbW1lbnQgdGhlIHNlZCBzY3JpcHQgaW4tc2l0dSwgc3RyaXAgdGhlIGNvbW1lbnRzCi0gICAg IyBwcm9ncmFtYXRpY2FsbHkgYmVmb3JlIHBhc3NpbmcgdGhlIHJlc3VsdCB0byAkU0VEIGZvciBl dmFsdWF0aW9uLgorICAgICMgcHJvZ3JhbW1hdGljYWxseSBiZWZvcmUgcGFzc2luZyB0aGUgcmVz dWx0IHRvICRTRUQgZm9yIGV2YWx1YXRpb24uCiAgICAgc2VkX2dldF92ZXJzaW9uPWAkRUNITyAn IyBleHRyYWN0IHZlcnNpb24gd2l0aGluIGxpbmUKICAgICAgICAgICBzfC4qW3YgXVx7MSxcfVwo WzAtOV1cezEsXH1cLlsuYS16MC05LV0qXCkuKnxcMXwKICAgICAgICAgICB0IGRvbmUKQEAgLTUx NjQsNyArNTE2NCw3IEBAIGRlbGltaXRlZCBsaXN0IG9mIHRyaXBsZXM7ICdwcm9ncmFtIG1pbi12 ZXJzaW9uIHVybCcuIgogICAgICAgZXNhYwoKICAgICAgICMgSG9ub3IgJEFQUCB2YXJpYWJsZXMg KCRUQVIsICRBVVRPQ09ORiwgZXRjLikKLSAgICAgIF9HX2FwcHZhcj1gZWNobyAkX0dfYXBwIHx0 ciAnW2Etel0nICdbQS1aXSdgCisgICAgICBfR19hcHB2YXI9YGVjaG8gJF9HX2FwcCB8dHIgJ1th LXotXScgJ1tBLVpfXSdgCiAgICAgICB0ZXN0IFRBUiA9ICIkX0dfYXBwdmFyIiAmJiBfR19hcHB2 YXI9QU1UQVIKICAgICAgIGV2YWwgIl9HX2FwcD1cJHskX0dfYXBwdmFyLSRfR19hcHB9IgoKZGlm ZiAtLWdpdCBhL2Jvb3RzdHJhcC5jb25mIGIvYm9vdHN0cmFwLmNvbmYKaW5kZXggYmRhOWNhZDYu LjExZjA2YzBiIDEwMDY0NAotLS0gYS9ib290c3RyYXAuY29uZgorKysgYi9ib290c3RyYXAuY29u ZgpAQCAtMSw0ICsxLDQgQEAKLSMgYm9vdHN0cmFwLmNvbmYgKEdOVSBNNCkgdmVyc2lvbiAyMDI1 LTA0LTAyCisjIGJvb3RzdHJhcC5jb25mIChHTlUgTTQpIHZlcnNpb24gMjAyNS0wNC0wNAogIyBX cml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAxMAoKICMgQ29weXJpZ2h0IChDKSAyMDEwLCAy MDE0LCAyMDE2LTIwMTcsIDIwMjAtMjAyNSBGcmVlIFNvZnR3YXJlCkBAIC00NiwxNCArNDYsOSBA QCBnbnVsaWJfdG9vbF9vcHRpb25zPSRnbnVsaWJfdG9vbF9vcHRpb25zJwogCS0tbm8tbGlidG9v bAogJwoKLSMgZ251bGliX21vZHVsZXMgbXVzdCByZW1haW4gZW1wdHkgaW4gb3JkZXIgdG8gZ2V0 IC0tdXBkYXRlIHN0eWxlCi0jIGdudWxpYi10b29sIGludm9jYXRpb25zLCBzbyB3ZSBhZGQgdGhl IGJvb3RzdHJhcCBjb21wb25lbnRzIGhlcmUuCi1nbnVsaWJfbm9uX21vZHVsZV9maWxlcz0kZ251 bGliX25vbl9tb2R1bGVfZmlsZXMiCi0JYnVpbGQtYXV4L2Jvb3RzdHJhcC5pbgotCWJ1aWxkLWF1 eC9leHRyYWN0LXRyYWNlCi0JYnVpbGQtYXV4L2Z1bmNsaWIuc2gKLQlidWlsZC1hdXgvaW5saW5l LXNvdXJjZQotCWJ1aWxkLWF1eC9vcHRpb25zLXBhcnNlciIKKyMgRmF2b3IgdGhlIGJvb3RzdHJh cCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9nbnVsaWItbW9kdWxlcy9ib290c3RyYXAKK2xvY2Fs X2dsX3BhdGg9Z2wtbW9kL2Jvb3RzdHJhcDpnbAorZ251bGliX2dpdF9zdWJtb2R1bGVzPWdsLW1v ZC9ib290c3RyYXAKCiAjIFdoYXQgaWdub3JlIGZpbGVzIHRvIG1haW50YWluLgogdmNfaWdub3Jl PSIuY3ZzaWdub3JlIC5naXRpZ25vcmUiCmRpZmYgLS1naXQgYS9nbC1tb2QvYm9vdHN0cmFwIGIv Z2wtbW9kL2Jvb3RzdHJhcApuZXcgZmlsZSBtb2RlIDE2MDAwMAppbmRleCAwMDAwMDAwMC4uYmZk Y2MyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9nbC1tb2QvYm9vdHN0cmFwCkBAIC0wLDAgKzEgQEAK K1N1YnByb2plY3QgY29tbWl0IGJmZGNjMjc3Y2QyMzdmZGUxMTVkM2FhOTcyYWRkNzYwOGQzNDhi OTAKZGlmZiAtLWdpdCBhL2dsL2J1aWxkLWF1eC9ib290c3RyYXAuaW4gYi9nbC9idWlsZC1hdXgv Ym9vdHN0cmFwLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3ODI3YzZhNS4uMDAw MDAwMDAKLS0tIGEvZ2wvYnVpbGQtYXV4L2Jvb3RzdHJhcC5pbgorKysgL2Rldi9udWxsCkBAIC0x LDI4MzUgKzAsMCBAQAotIyEgL2Jpbi9zaAotCi0jIEJvb3RzdHJhcCBhbiBBdXRvdG9vbGVkIHBh Y2thZ2UgZnJvbSBjaGVja2VkLW91dCBzb3VyY2VzLgotIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1 Z2hhbiwgMjAxMAotIyBJbnNwaXJlZCBieSBhIHNjcmlwdCB3cml0dGVuIGJ5IFBhdWwgRWdnZXJ0 LgotCi0jIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZS4gIFRoZXJlIGlzIE5PIHdhcnJhbnR5OyBub3Qg ZXZlbiBmb3IKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLgotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxOSwgMjAyMSwgMjAyMyBCb290c3Ry YXAgQXV0aG9ycwotIwotIyBUaGlzIGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIE1JVCBsaWNlbnNlCi0jIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L01JVD4sIGFuZCBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyCi0jIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvZ3BsLTIuMC5odG1sPi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBvZgotIyB0aGVzZSBs aWNlbnNlcyB3aGVuIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoaXMgc29mdHdhcmUgb3IgYW55 IG9mCi0jIHRoZSBmaWxlcyB3aXRoaW4gaXQuICBTZWUgdGhlIFVSTHMgYWJvdmUsIG9yIHRoZSBm aWxlIGBMSUNFTlNFYAotIyBpbmNsdWRlZCBpbiB0aGUgQm9vdHN0cmFwIGRpc3RyaWJ1dGlvbiBm b3IgdGhlIGZ1bGwgbGljZW5zZSB0ZXh0cy4KLQotIyBZb3Ugc2hvdWxkIHBsYWNlIGEgY29weSBv ZiB0aGlzIHNjcmlwdCB1bmRlciB2ZXJzaW9uIGNvbnRyb2wgaW4gdGhlCi0jIHRvcC1sZXZlbCBk aXJlY3Rvcnkgb2YgeW91ciBwcm9qZWN0LiAgVGhlIGludGVudCBpcyB0aGF0IGFsbAotIyBjdXN0 b21pemF0aW9uIGNhbiBiZSBkb25lIHdpdGggYSBgYm9vdHN0cmFwLmNvbmZgIGZpbGUgYWxzbyBt YWludGFpbmVkCi0jIGluIHlvdXIgdmVyc2lvbiBjb250cm9sLgotCi0jIFBsZWFzZSByZXBvcnQg YnVncyBvciBwcm9wb3NlIHBhdGNoZXMgdG86Ci0jIDxodHRwczovL2dpdGh1Yi5jb20vZ251bGli LW1vZHVsZXMvYm9vdHN0cmFwL2lzc3Vlcz4KLQotCi0jIyAtLS0tLS0gIyMKLSMjIFVzYWdlLiAj IwotIyMgLS0tLS0tICMjCi0KLSMgTW9zdCBHTlVpc2ggcHJvamVjdHMgZG8gbm90IGtlZXAgYWxs IG9mIHRoZSBnZW5lcmF0ZWQgQXV0b3Rvb2wKLSMgZmlsZXMgdW5kZXIgdmVyc2lvbiBjb250cm9s LCBidXQgcnVubmluZyBhbGwgb2YgdGhlIHJpZ2h0IHRvb2xzCi0jIHdpdGggdGhlIHJpZ2h0IGFy Z3VtZW50cywgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgdG8gcmVnZW5lcmF0ZQotIyBhbGwgb2YgdGhv c2UgZmlsZXMgaW4gcmVhZGluZXNzIGZvciBjb25maWd1cmF0aW9uIGFuZCBidWlsZGluZwotIyBj YW4gYmUgc3VycHJpc2luZ2x5IGludm9sdmVkISAgTWFueSBwcm9qZWN0cyBoYXZlIGEgJ2Jvb3Rz dHJhcCcKLSMgc2NyaXB0IHVuZGVyIHZlcnNpb24gY29udHJvbCB0byBpbnZva2UgQXV0b3Rvb2xz IGFuZCBwZXJmb3JtCi0jIG90aGVyIGFzc29ydGVkIGJvb2sta2VlcGluZyB3aXRoIHZlcnNpb24g bnVtYmVycyBhbmQgdGhlIGxpa2UuCi0jCi0jIFRoaXMgYm9vdHN0cmFwIHNjcmlwdCBhaW1zIHRv IHByb2JlIHRoZSBjb25maWd1cmUuYWMgYW5kIHRvcAotIyBNYWtlZmlsZS5hbSBvZiB5b3VyIHBy b2plY3QgdG8gYXV0b21hdGljYWxseSBkZXRlcm1pbmUgd2hhdAotIyB0aGUgY29ycmVjdCBvcmRl cmluZyBhbmQgYXJndW1lbnRzIGFyZSBhbmQgdGhlbiBydW4gdGhlIHRvb2xzIGZvcgotIyB5b3Uu ICBJbiBvcmRlciB0byB1c2UgaXQsIHlvdSBjYW4gZ2VuZXJhdGUgYW4gaW5pdGlhbCBzdGFuZGFs b25lCi0jIHNjcmlwdCB3aXRoOgotIwotIyAgIGdsL2J1aWxkLWF1eC9pbmxpbmUtc291cmNlIGds L2J1aWxkLWF1eC9ib290c3RyYXAuaW4gPiBib290c3RyYXAKLSMKLSMgWW91IHNob3VsZCB0aGVu IHN0b3JlIHRoYW4gc2NyaXB0IGluIHZlcnNpb24gY29udHJvbCBmb3Igb3RoZXIKLSMgZGV2ZWxv cGVycyBpbiB5b3UgcHJvamVjdC4gIEl0IHdpbGwgZ2l2ZSB5b3UgaW5zdHJ1Y3Rpb25zIGFib3V0 Ci0jIGhvdyB0byBrZWVwIGl0IHVwIHRvIGRhdGUgaWYgdGhlIHNvdXJjZXMgY2hhbmdlLgotIwot IyBTZWUgZ2wvZG9jL2Jvb3RzdHJhcC50ZXhpIGZvciBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byB3 cml0ZQotIyBhIGJvb3RzdHJhcC5jb25mIHRvIGN1c3RvbWl6ZSBpdCBmb3IgeW91ciBwcm9qZWN0 J3MKLSMgaWRpb3N5bmNyYWNpZXMuCi0KLQotIyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICMjCi0jIyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IyMKLSMjICAgICBETyBOT1QgRURJVCBUSElTIEZJTEUsIENVU1RPTUlaRSBJVCBVU0lORyBBIEJP T1RTVFJBUC5DT05GICAgICAjIwotIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCi0jIyA9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIyMKLQot IyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgVXNlciBvdmVycmlkYWJs ZSBjb21tYW5kIHBhdGhzLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAj IwotCi0jIEFsbCB1cHBlcmNhc2UgZGVub3RlcyB2YWx1ZXMgc3RvcmVkIGluIHRoZSBlbnZpcm9u bWVudC4gIFRoZXNlCi0jIHZhcmlhYmxlcyBzaG91bGQgZ2VuZXJhbGx5IGJlIG92ZXJyaWRkZW4g YnkgdGhlIHVzZXIgLSBob3dldmVyLCB3ZSBkbwotIyBzZXQgdGhlbSB0byAndHJ1ZScgaW4gc29t ZSBwYXJ0cyBvZiB0aGlzIHNjcmlwdCB0byBwcmV2ZW50IHRoZW0gYmVpbmcKLSMgY2FsbGVkIGF0 IHRoZSB3cm9uZyB0aW1lIGJ5IG90aGVyIHRvb2xzIHRoYXQgd2UgY2FsbCAoJ2F1dG9yZWNvbmYn LAotIyBmb3IgZXhhbXBsZSkuCi0jCi0jIFdlIGFsc28gYWxsb3cgJ0xJQlRPT0xJWkUnLCAnTTQn LCAnU0hBMVNVTScgYW5kIHNvbWUgb3RoZXJzIHRvIGJlCi0jIG92ZXJyaWRkZW4sIGFuZCBleHBv cnQgdGhlIHJlc3VsdCBmb3IgY2hpbGQgcHJvY2Vzc2VzLCBidXQgdGhleSBhcmUKLSMgaGFuZGxl ZCBieSB0aGUgZnVuY3Rpb24gJ2Z1bmNfZmluZF90b29sJyBhbmQgbm90IGRlZmF1bHRlZCBpbiB0 aGlzCi0jIHNlY3Rpb24uCi0KLTogJHtBQ0xPQ0FMPSJhY2xvY2FsIn0KLTogJHtBVVRPQ09ORj0i YXV0b2NvbmYifQotOiAke0FVVE9IRUFERVI9ImF1dG9oZWFkZXIifQotOiAke0FVVE9NNFRFPSJh dXRvbTR0ZSJ9Ci06ICR7QVVUT0hFQURFUj0iYXV0b2hlYWRlciJ9Ci06ICR7QVVUT01BS0U9ImF1 dG9tYWtlIn0KLTogJHtBVVRPUE9JTlQ9ImF1dG9wb2ludCJ9Ci06ICR7QVVUT1JFQ09ORj0iYXV0 b3JlY29uZiJ9Ci06ICR7Q01QPSJjbXAifQotOiAke0NPTkZJR19TSEVMTD0iL2Jpbi9zaCJ9Ci06 ICR7RElGRj0iZGlmZiJ9Ci06ICR7R0lUPSJnaXQifQotOiAke0xOX1M9ImxuIC1zIn0KLTogJHtS TT0icm0ifQotCi1leHBvcnQgQUNMT0NBTAotZXhwb3J0IEFVVE9DT05GCi1leHBvcnQgQVVUT0hF QURFUgotZXhwb3J0IEFVVE9NNFRFCi1leHBvcnQgQVVUT0hFQURFUgotZXhwb3J0IEFVVE9NQUtF Ci1leHBvcnQgQVVUT1BPSU5UCi1leHBvcnQgQVVUT1JFQ09ORgotZXhwb3J0IENPTkZJR19TSEVM TAotCi0KLSMjIC0tLS0tLS0tLS0tLS0tICMjCi0jIyBDb25maWd1cmF0aW9uLiAjIwotIyMgLS0t LS0tLS0tLS0tLS0gIyMKLQotIyBBIG5ld2xpbmUgZGVsaW1pdGVkIGxpc3Qgb2YgdHJpcGxlcyBv ZiBwcm9ncmFtcyAodGhhdCByZXNwb25kIHRvCi0jIC0tdmVyc2lvbiksIHRoZSBtaW5pbXVtIHZl cnNpb24gbnVtYmVycyByZXF1aXJlZCAob3IganVzdCAnLScgaW4gdGhlCi0jIHZlcnNpb24gZmll bGQgaWYgYW55IHZlcnNpb24gd2lsbCBiZSBzdWZmaWNpZW50KSBhbmQgaG9tZXBhZ2UgVVJMcwot IyB0byBoZWxwIGxvY2F0ZSBtaXNzaW5nIHBhY2thZ2VzLgotYnVpbGRyZXE9Ci0KLSMgTmFtZSBv ZiBhIGZpbGUgY29udGFpbmluZyBpbnN0cnVjdGlvbnMgb24gaW5zdGFsbGluZyBtaXNzaW5nIHBh Y2thZ2VzCi0jIHJlcXVpcmVkIGluICdidWlsZHJlcScuCi1idWlsZHJlcV9yZWFkbWU9UkVBRE1F LWhhY2tpbmcKLQotIyBUaGVzZSBhcmUgZXh0cmFjdGVkIGZyb20gQUNfSU5JVCBpbiBjb25maWd1 cmUuYWMsIHRob3VnaCB5b3UgY2FuCi0jIG92ZXJyaWRlIHRob3NlIHZhbHVlcyBpbiAnYm9vdHN0 cmFwLmNvbmYnIGlmIHlvdSBwcmVmZXIuCi1idWlsZF9hdXg9Ci1tYWNyb19kaXI9Ci1wYWNrYWdl PQotcGFja2FnZV9uYW1lPQotcGFja2FnZV92ZXJzaW9uPQotcGFja2FnZV9idWdyZXBvcnQ9Ci0K LSMgVGhlc2UgYXJlIGV4dHJhY3RlZCBmcm9tICdnbnVsaWItY2FjaGUubTQnLCBvciBlbHNlIGZh bGwtYmFjawotIyBhdXRvbWF0aWNhbGx5IG9uIHRoZSBnbnVsaWIgZGVmYXVsdHM7IHVubGVzcyB5 b3Ugc2V0IHRoZSB2YWx1ZXMKLSMgbWFudWFsbHkgaW4gJ2Jvb3RzdHJhcC5jb25mJy4KLWRvY19i YXNlPQotZ251bGliX21rPQotZ251bGliX25hbWU9Ci1sb2NhbF9nbF9wYXRoPQotc291cmNlX2Jh c2U9Ci10ZXN0c19iYXNlPQotCi0jIFRoZSBsaXN0IG9mIGdudWxpYiBtb2R1bGVzIHJlcXVpcmVk IGF0ICdnbnVsaWItdG9vbCcgdGltZS4gIElmIHlvdQotIyBjaGVjayAnZ251bGliLWNhY2hlLm00 JyBpbnRvIHlvdXIgcmVwb3NpdG9yeSwgdGhlbiB0aGlzIGxpc3Qgd2lsbCBiZQotIyBleHRyYWN0 ZWQgYXV0b21hdGljYWxseS4KLWdudWxpYl9tb2R1bGVzPQotCi0jIEV4dHJhIGdudWxpYiBmaWxl cyB0aGF0IGFyZSBub3QgaW4gbW9kdWxlcywgd2hpY2ggb3ZlcnJpZGUgZmlsZXMgb2YKLSMgdGhl IHNhbWUgbmFtZSBpbnN0YWxsZWQgYnkgb3RoZXIgYm9vdHN0cmFwIHRvb2xzLgotZ251bGliX25v bl9tb2R1bGVfZmlsZXM9IgotICAgICAgICBidWlsZC1hdXgvY29tcGlsZQotICAgICAgICBidWls ZC1hdXgvaW5zdGFsbC1zaAotICAgICAgICBidWlsZC1hdXgvbWRhdGUtc2gKLSAgICAgICAgYnVp bGQtYXV4L3RleGluZm8udGV4Ci0gICAgICAgIGJ1aWxkLWF1eC9kZXBjb21wCi0gICAgICAgIGJ1 aWxkLWF1eC9jb25maWcuZ3Vlc3MKLSAgICAgICAgYnVpbGQtYXV4L2NvbmZpZy5zdWIKLSAgICAg ICAgZG9jL0lOU1RBTEwKLSIKLQotIyBSZWxhdGl2ZSBwYXRoIHRvIHRoZSBsb2NhbCBnbnVsaWIg c3VibW9kdWxlLCBhbmQgdXJsIHRvIHRoZSB1cHN0cmVhbQotIyBnaXQgcmVwb3NpdG9yeS4gSWYg eW91IGhhdmUgYSBnbnVsaWIgZW50cnkgaW4geW91ciAuZ2l0bW9kdWxlcyBmaWxlLAotIyB0aGVz ZSB2YWx1ZXMgYXJlIGlnbm9yZWQuCi1nbnVsaWJfcGF0aD0KLWdudWxpYl91cmw9Ci0KLSMgRGF0 ZSBmcm9tIHdoaWNoIHRvIGNsb25lIGdpdGh1YiwgdG8gYXZvaWQgYSBmdWxsIGNsb25lLgotZ251 bGliX2Nsb25lX3NpbmNlPQotCi0jIEFkZGl0aW9uYWwgZ251bGliLXRvb2wgb3B0aW9ucyB0byB1 c2UuCi1nbnVsaWJfdG9vbF9vcHRpb25zPSIKLSAgICAgICAgLS1uby1jaGFuZ2Vsb2cKLSIKLQot IyBib290c3RyYXAgcmVtb3ZlcyBhbnkgbWFjcm8tZmlsZXMgdGhhdCBhcmUgbm90IGluY2x1ZGVk IGJ5IGFjbG9jYWwubTQsCi0jIGV4Y2VwdCBmb3IgZmlsZXMgbGlzdGVkIGluIHRoaXMgdmFyaWFi bGUgdGhhdCBhcmUgYWx3YXlzIGtlcHQuCi1nbnVsaWJfcHJlY2lvdXM9IgotICAgICAgICBnbnVs aWItdG9vbC5tNAotIgotCi0jIFdoZW4gdHJ1bmNhdGluZyBsb25nIGNvbW1hbmRzIGZvciBkaXNw bGF5LCBhbHdheXMgYWxsb3cgYXQgbGVhc3QgdGhpcwotIyBtYW55IGNoYXJhY3RlcnMgYmVmb3Jl IHRydW5jYXRpbmcuCi1taW5fY21kX2xlbj0xNjAKLQotIyBUaGUgY29tbWFuZCB0byBkb3dubG9h ZCBhbGwgLnBvIGZpbGVzIGZvciBhIHNwZWNpZmllZCBkb21haW4gaW50bwotIyBhIHNwZWNpZmll ZCBkaXJlY3RvcnkuICBGaWxsIGluIHRoZSBmaXJzdCAlcyBpcyB0aGUgZG9tYWluIG5hbWUsIGFu ZAotIyB0aGUgc2Vjb25kIHdpdGggdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4gIFVzZSByc3lu YydzIC1MIGFuZCAtcgotIyBvcHRpb25zIGJlY2F1c2UgdGhlIGxhdGVzdC8lcyBkaXJlY3Rvcnkg YW5kIHRoZSAucG8gZmlsZXMgd2l0aGluIGFyZQotIyBhbGwgc3ltbGlua3MuCi1wb19kb3dubG9h ZF9jb21tYW5kX2Zvcm1hdD1cCi0icnN5bmMgLS1kZWxldGUgLS1leGNsdWRlICcqLnMxJyAtTHJ0 dnogXAotJ3RyYW5zbGF0aW9ucHJvamVjdC5vcmc6OnRwL2xhdGVzdC8lcy8nICclcyciCi0KLSMg T3RoZXIgbG9jYWxlIGNhdGVnb3JpZXMgdGhhdCBuZWVkIG1lc3NhZ2UgY2F0YWxvZ3MuCi1leHRy YV9sb2NhbGVfY2F0ZWdvcmllcz0KLQotIyBBZGRpdGlvbmFsIHhnZXR0ZXh0IG9wdGlvbnMgdG8g dXNlLiAgR251bGliIG1pZ2h0IHByb3ZpZGUgeW91IHdpdGggYW4KLSMgZXh0ZW5zaXZlIGxpc3Qg b2YgYWRkaXRpb25hbCBvcHRpb25zIHRvIGFwcGVuZCB0byB0aGlzLCBidXQgZ2V0dGV4dAotIyAw LjE2LjEgYW5kIG5ld2VyIGFwcGVuZHMgdGhlbSBhdXRvbWF0aWNhbHksIHNvIHlvdSBjYW4gc2Fm ZWx5IGlnbm9yZQotIyB0aGUgY29tcGxhaW50cyBmcm9tICdnbnVsaWItdG9vbCcgaWYgeW91ciAk Y29uZmlndXJlX2FjIHN0YXRlczoKLSMKLSMgICAgQU1fR05VX0dFVFRFWFRfVkVSU0lPTihbMC4x Ni4xXSkKLXhnZXR0ZXh0X29wdGlvbnM9IgotICAgICAgICAtLWZsYWc9XzoxOnBhc3MtYy1mb3Jt YXQKLSAgICAgICAgLS1mbGFnPU5fOjE6cGFzcy1jLWZvcm1hdAotIgotCi0jIFBhY2thZ2UgY29w eXJpZ2h0IGhvbGRlciBmb3IgZ2V0dGV4dCBmaWxlcy4gIERlZmF1bHRzIHRvIEZTRiBpZiB1bnNl dC4KLWNvcHlyaWdodF9ob2xkZXI9Ci0KLSMgRmlsZSB0aGF0IHNob3VsZCBleGlzdCBpbiB0aGUg dG9wIGRpcmVjdG9yeSBvZiBhIGNoZWNrZWQgb3V0IGhpZXJhcmNoeSwKLSMgYnV0IG5vdCBpbiBh IGRpc3RyaWJ1dGlvbiB0YXJiYWxsLgotY2hlY2tvdXRfb25seV9maWxlPQotCi0jIFdoZXRoZXIg dG8gdXNlIGNvcGllcyBpbnN0ZWFkIG9mIHN5bWxpbmtzIGJ5IGRlZmF1bHQgKGlmIHNldCB0byB0 cnVlLAotIyB0aGUgLS1jb3B5IG9wdGlvbiBoYXMgbm8gZWZmZWN0KS4KLWNvcHk9ZmFsc2UKLQot IyBTZXQgdGhpcyB0byAiLmN2c2lnbm9yZSAuZ2l0aWdub3JlIiBpbiAnYm9vdHN0cmFwLmNvbmYn IGlmIHlvdSB3YW50Ci0jIHRob3NlIGZpbGVzIHRvIGJlIGdlbmVyYXRlZCBpbiBkaXJlY3Rvcmll cyBsaWtlICdsaWIvJywgJ200LycsIGFuZCAncG8vJywKLSMgb3Igc2V0IGl0IHRvICJhdXRvIiB0 byBtYWtlIHRoaXMgc2NyaXB0IHNlbGVjdCB3aGF0IHRvIHVzZSBiYXNlZAotIyBvbiB3aGF0IHZl cnNpb24gY29udHJvbCBzeXN0ZW0gKGlmIGFueSkgaXMgdXNlZCBpbiB0aGUgc291cmNlIGRpcmVj dG9yeS4KLSMgT3Igc2V0IGl0IHRvICJub25lIiB0byBpZ25vcmUgVkNTIGlnbm9yZSBmaWxlcyBl bnRpcmVseS4gIERlZmF1bHQgaXMKLSMgImF1dG8iLgotdmNfaWdub3JlPQotCi0KLSMjIC0tLS0t LS0tLS0tLS0tLS0tLS0gIyMKLSMjIEV4dGVybmFsIExpYnJhcmllcy4gIyMKLSMjIC0tLS0tLS0t LS0tLS0tLS0tLS0gIyMKLQotIyBTb3VyY2UgcmVxdWlyZWQgZXh0ZXJuYWwgbGlicmFyaWVzOgot LiBgZWNobyAiJDAiIHwke1NFRC1zZWR9ICdzfFteL10qJHx8J2AiZnVuY2xpYi5zaCIKLS4gYGVj aG8gIiQwIiB8JHtTRUQtc2VkfSAnc3xbXi9dKiR8fCdgIm9wdGlvbnMtcGFyc2VyIgotLiBgZWNo byAiJDAiIHwke1NFRC1zZWR9ICdzfFteL10qJHx8J2AiZXh0cmFjdC10cmFjZSIKLQotIyBTZXQg YSB2ZXJzaW9uIHN0cmluZyBmb3IgKnRoaXMqIHNjcmlwdC4KLXNjcmlwdHZlcnNpb249MjAxOS0w My0yMi4xMTsgIyBVVEMKLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBIb29rYWJs ZSBmdW5jdGlvbnMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgQWZ0ZXIgJ2Jv b3RzdHJhcC5jb25mJyBoYXMgYmVlbiBzb3VyY2VkLCBleGVjdXRpb24gcHJvY2VlZHMgYnkgY2Fs bGluZwotIyAnZnVuY19ib290c3RyYXAnLiAgV2hlcmV2ZXIgYSBmdW5jdGlvbiBpcyBkZWNvcmF0 ZWQgd2l0aAotIyAnZnVuY19ob29rYWJsZSBmdW5jX25hbWUnLCB5b3Ugd2lsbCBmaW5kIGEgbWF0 Y2hpbmcgJ2Z1bmNfcnVuX2hvb2tzCi0jIGZ1bmNfbmFtZScsIHdoaWNoIGV4ZWN1dGVzIGFsbCBm dW5jdGlvbnMgYWRkZWQgd2l0aCAnZnVuY19hZGRfaG9vawotIyBmdW5jX25hbWUgbXlfZnVuYycu Ci0jCi0jIFlvdSBtaWdodCBub3RpY2UgdGhhdCBtYW55IG9mIHRoZXNlIGZ1bmN0aW9ucyBiZWdp biB3aXRoIGEgc2VyaWVzIG9mCi0jICckcmVxdWlyZV9mb28nIGxpbmVzLiAgU2VlIHRoZSBkb2N1 LWNvbW1lbnRzIGF0IHRoZSBzdGFydCBvZiB0aGUKLSMgJ1Jlc291cmNlIG1hbmFnZW1lbnQnIHNl Y3Rpb24gZm9yIGEgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGVzZSBhcmUuCi0KLQotIyBmdW5jX2Jv b3RzdHJhcCBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBbGwgdGhlIGZ1 bmN0aW9ucyBjYWxsZWQgaW5zaWRlIGZ1bmNfYm9vdHN0cmFwIGFyZSBob29rYWJsZS4gU2VlIHRo ZQotIyB0aGUgaW5kaXZpZHVhbCBpbXBsZW1lbnRhdGlvbnMgZm9yIGRldGFpbHMuCi1mdW5jX2Jv b3RzdHJhcCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgU2F2ZSB0aGUgY3VycmVudCBw b3NpdGlvbmFsIHBhcmFtZXRlcnMgdG8gcHJldmVudCB0aGVtIGJlaW5nCi0gICAgIyBjb3JydXB0 ZWQgYnkgY2FsbHMgdG8gJ3NldCcgaW4gJ2Z1bmNfaW5pdCcuCi0gICAgZnVuY19xdW90ZSBldmFs ICR7MSsiJEAifQotICAgIF9HX3NhdmVkX3Bvc2l0aW9uYWxfcGFyYW1ldGVycz0kZnVuY19xdW90 ZV9yZXN1bHQKLQotICAgICMgSW5pdGlhbGlzYXRpb24uCi0gICAgZnVuY19pbml0Ci0KLSAgICAj IE9wdGlvbiBwcm9jZXNzaW5nLgotICAgIGV2YWwgZnVuY19vcHRpb25zICIkX0dfc2F2ZWRfcG9z aXRpb25hbF9wYXJhbWV0ZXJzIgotCi0gICAgIyBQb3N0LW9wdGlvbiBwcmVwYXJhdGlvbi4KLSAg ICBmdW5jX3ByZXAKLQotICAgICMgUmVjb25maWd1cmUgdGhlIHBhY2thZ2UuCi0gICAgZnVuY19y ZWNvbmZpZ3VyZQotCi0gICAgIyBFbnN1cmUgLnZlcnNpb24gaXMgdXAtdG8tZGF0ZS4KLSAgICBm dW5jX3VwZGF0ZV9kb3R2ZXJzaW9uCi0KLSAgICAjIEZpbmFsaXNhdGlvbi4KLSAgICBmdW5jX2Zp bmkKLX0KLQotCi0jIGZ1bmNfaW5pdAotIyAtLS0tLS0tLS0KLSMgQW55IGVhcmx5IGluaXRpYWxp c2F0aW9ucyBjYW4gYmUgaG9va2VkIHRvIHRoaXMgZnVuY3Rpb24uICBDb25zaWRlcgotIyB3aGV0 aGVyIHlvdSBjYW4gaG9vayBvbnRvICdmdW5jX3ByZXAnIGluc3RlYWQsIGJlY2F1c2UgaWYgeW91 IGhvb2sKLSMgYW55IHNsb3cgdG8gZXhlY3V0ZSBjb2RlIGluIGhlcmUsIGl0IHdpbGwgYWxzbyBh ZGQgdG8gdGhlIHRpbWUgYmVmb3JlCi0jICcuL2Jvb3RzdHJhcCAtLXZlcnNpb24nIGNhbiByZXNw b25kLgotZnVuY19ob29rYWJsZSBmdW5jX2luaXQKLWZ1bmNfaW5pdCAoKQotewotICAgICRkZWJ1 Z19jbWQKLQotICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfaW5pdAotfQotCi0KLSMgZnVuY19wcmVw Ci0jIC0tLS0tLS0tLQotIyBGdW5jdGlvbiB0byBwZXJmb3JtIHByZXBhcmF0aW9uIGZvciByZW1h aW5pbmcgYm9vdHN0cmFwIHByb2Nlc3MuIElmCi0jIHlvdXIgaG9va2VkIGNvZGUgcmVsaWVzIG9u IHRoZSBvdXRjb21lIG9mICdmdW5jX29wdGlvbnMnIGhvb2sgaXQgaGVyZQotIyByYXRoZXIgdGhh biB0byAnZnVuY19pbml0Jy4KLSMKLSMgQWxsIHRoZSBmdW5jdGlvbnMgY2FsbGVkIGluc2lkZSBm dW5jX3ByZXAgYXJlIGhvb2thYmxlLiBTZWUgdGhlCi0jIGluZGl2aWR1YWwgaW1wbGVtZW50YXRp b25zIGZvciBkZXRhaWxzLgotZnVuY19ob29rYWJsZSBmdW5jX3ByZXAKLWZ1bmNfcHJlcCAoKQot ewotICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX2J1aWxkdG9vbHNfdXB0b2RhdGUKLSAg ICAkcmVxdWlyZV9jaGVja291dF9vbmx5X2ZpbGUKLQotICAgICRyZXF1aXJlX2dudWxpYl9tZXJn ZV9jaGFuZ2Vsb2cKLQotICAgICMgUmVwb3J0IHRoZSByZXN1bHRzIG9mIFNFRCBhbmQgR1JFUCBz ZWFyY2hlcyBmcm9tIGZ1bmNsaWIuc2guCi0gICAgZnVuY192ZXJib3NlICJHUkVQPSckR1JFUCci Ci0gICAgZnVuY192ZXJib3NlICJTRUQ9JyRTRUQnIgotCi0gICAgIyBmZXRjaCB1cGRhdGUgZmls ZXMgZnJvbSB0aGUgdHJhbnNsYXRpb24gcHJvamVjdAotICAgIGZ1bmNfdXBkYXRlX3RyYW5zbGF0 aW9ucwotCi0gICAgZnVuY19ydW5faG9va3MgZnVuY19wcmVwCi19Ci0KLQotIyBmdW5jX3VwZGF0 ZV90cmFuc2xhdGlvbnMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFVwZGF0ZSBwYWNr YWdlIHBvIGZpbGVzIGFuZCB0cmFuc2xhdGlvbnMuCi1mdW5jX2hvb2thYmxlIGZ1bmNfdXBkYXRl X3RyYW5zbGF0aW9ucwotZnVuY191cGRhdGVfdHJhbnNsYXRpb25zICgpCi17Ci0gICAgJGRlYnVn X2NtZAotCi0gICAgJG9wdF9za2lwX3BvIHx8IHsKLSAgICAgIHRlc3QgLWQgcG8gJiYgewotICAg ICAgICAkcmVxdWlyZV9wYWNrYWdlCi0KLSAgICAgICAgZnVuY191cGRhdGVfcG9fZmlsZXMgcG8g JHBhY2thZ2UgfHwgZXhpdCAkPwotICAgICAgfQotCi0gICAgICBmdW5jX3J1bl9ob29rcyBmdW5j X3VwZGF0ZV90cmFuc2xhdGlvbnMKLSAgICB9Ci19Ci0KLQotIyBmdW5jX3JlY29uZmlndXJlCi0j IC0tLS0tLS0tLS0tLS0tLS0KLSMgUmVjb25maWd1cmUgdGhlIGN1cnJlbnQgcGFja2FnZSBieSBy dW5uaW5nIHRoZSBhcHByb3ByaWF0ZSBhdXRvdG9vbHMgaW4gYQotIyBzdWl0YWJsZSBvcmRlci4K LWZ1bmNfaG9va2FibGUgZnVuY19yZWNvbmZpZ3VyZQotZnVuY19yZWNvbmZpZ3VyZSAoKQotewot ICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX2F1dG9tYWtlX29wdGlvbnMKLQotICAgICMg QXV0b21ha2UgKHdpdGhvdXQgJ2ZvcmVpZ24nIG9wdGlvbikgcmVxdWlyZXMgdGhhdCBORVdTICYg UkVBRE1FIGV4aXN0LgotICAgIGNhc2UgIiAkYXV0b21ha2Vfb3B0aW9ucyAiIGluCi0gICAgICAi IGZvcmVpZ24gIikgOzsKLSAgICAgICopCi0gICAgICAgIGZ1bmNfZW5zdXJlX05FV1MKLSAgICAg ICAgZnVuY19lbnN1cmVfUkVBRE1FCi0gICAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgIyBFbnN1 cmUgQ2hhbmdlTG9nIHByZXNlbmNlLgotICAgIGlmIHRlc3QgLW4gIiRnbnVsaWJfbW9kdWxlcyI7 IHRoZW4KLSAgICAgIGZ1bmNfaWZjb250YWlucyAiJGdudWxpYl9tb2R1bGVzIiBnaXRsb2ctdG8t Y2hhbmdlbG9nIFwKLSAgICAgICAgZnVuY19lbnN1cmVfY2hhbmdlbG9nCi0gICAgZWxzZQotICAg ICAgJHJlcXVpcmVfZ251bGliX2NhY2hlCi0gICAgICBpZiAkU0VEIC1uICcvXmdsX01PRFVMRVMo XFsvLC9eXSkkL3AnICRnbnVsaWJfY2FjaGUgMj4vZGV2L251bGwgfAotICAgICAgICAgZnVuY19n cmVwX3EgZ2l0bG9nLXRvLWNoYW5nZWxvZwotICAgICAgdGhlbgotICAgICAgICBmdW5jX2Vuc3Vy ZV9jaGFuZ2Vsb2cKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICMgUmVsZWFzZWQgJ2F1dG9wb2lu dCcgaGFzIHRoZSB0ZW5kZW5jeSB0byBpbnN0YWxsIG1hY3JvcyB0aGF0IGhhdmUKLSAgICAjIGJl ZW4gb2Jzb2xldGVkIGluIGN1cnJlbnQgJ2dudWxpYicsIHNvIHJ1biB0aGlzIGJlZm9yZSAnZ251 bGliLXRvb2wnLgotICAgIGZ1bmNfYXV0b3BvaW50Ci0KLSAgICAjIEF1dG9yZWNvbmYgcnVucyAn YWNsb2NhbCcgYmVmb3JlICdsaWJ0b29saXplJywgd2hpY2ggY2F1c2VzIHNwdXJpb3VzCi0gICAg IyB3YXJuaW5ncyBpZiB0aGUgaW5pdGlhbCAnYWNsb2NhbCcgaXMgY29uZnVzZWQgYnkgdGhlIGxp YnRvb2xpemVkCi0gICAgIyAob3Igd29yc2U6IG91dC1vZi1kYXRlKSBtYWNybyBkaXJlY3Rvcnku Ci0gICAgZnVuY19saWJ0b29saXplCi0KLSAgICAjIElmIHlvdSBuZWVkIHRvIGRvIGFueXRoaW5n IGFmdGVyICdnbnVsaWItdG9vbCcgaXMgZG9uZSwgYnV0IGJlZm9yZQotICAgICMgJ2F1dG9yZWNv bmYnIHJ1bnMsIHlvdSBkb24ndCBuZWVkIHRvIG92ZXJyaWRlIHRoaXMgd2hvbGUgZnVuY3Rpb24s Ci0gICAgIyBiZWNhdXNlICdmdW5jX2dudWxpYl90b29sJyBpcyBob29rYWJsZS4KLSAgICBmdW5j X2dudWxpYl90b29sCi0KLSAgICBmdW5jX2F1dG9yZWNvbmYKLQotICAgIGZ1bmNfcnVuX2hvb2tz IGZ1bmNfcmVjb25maWd1cmUKLX0KLQotCi0jIGZ1bmNfZ251bGliX3Rvb2wKLSMgLS0tLS0tLS0t LS0tLS0tLQotIyBSdW4gJ2dudWxpYi10b29sJyB0byBmZXRjaCBnbnVsaWIgbW9kdWxlcyBpbnRv IHRoZSBjdXJyZW50IHBhY2thZ2UuCi0jCi0jIEl0J3MgYXNzdW1lZCB0aGF0IHNpbmNlIHlvdSBh cmUgdXNpbmcgZ251bGliJ3MgJ2Jvb3RzdHJhcCcgc2NyaXB0LAotIyB5b3UncmUgYWxzbyB1c2lu ZyBnbnVsaWIgZWxzZXdoZXJlIGluIHlvdXIgcGFja2FnZS4gIElmIG5vdCwgdGhlbgotIyB5b3Ug Y2FuIHJlcGxhY2UgdGhpcyBmdW5jdGlvbiBpbiAnYm9vdHN0cmFwLmNvbmYnIHdpdGg6Ci0jCi0j ICAgZnVuY19nbnVsaWJfdG9vbCAoKSB7IDo7IH0KLSMKLSMgKGFsdGhvdWdoIHRoZSBmdW5jdGlv biByZXR1cm5zIGltbWVkaWF0ZWx5IGlmICRnbnVsaWJfdG9vbCBpcyBzZXQgdG8KLSMgdHJ1ZSBp biBhbnkgY2FzZSkuCi1mdW5jX2hvb2thYmxlIGZ1bmNfZ251bGliX3Rvb2wKLWZ1bmNfZ251bGli X3Rvb2wgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkcmVxdWlyZV9nbnVsaWJfdG9vbAot ICAgICRyZXF1aXJlX2xpYnRvb2xpemUKLQotICAgIHRlc3QgdHJ1ZSA9ICIkZ251bGliX3Rvb2wi IHx8IHsKLSAgICAgICRyZXF1aXJlX2dudWxpYl9naXRfc3VibW9kdWxlcwotCi0gICAgICAjIGJv b3RzdHJhcC5jb25mIHdyaXR0ZW4gZm9yIGdudWxpYiBib290c3RyYXAgZXhwZWN0cwotICAgICAg IyBnbnVsaWJfdG9vbF9vcHRpb25fZXh0cmFzIHRvIHdoaWNoIC0tbm8tY2hhbmdlbG9nIGlzIGFw cGVuZGVkLAotICAgICAgIyBidXQgbGlidG9vbCBib290c3RyYXAgZXhwZWN0cyB5b3UgdG8gYXBw ZW5kIHRvIGdudWxpYl90b29sX29wdGlvbnMKLSAgICAgICMgc28gdGhhdCB5b3UgY2FuIG92ZXJy aWRlIHRoZSAtLW5vLWNoYW5nZWxvZyBkZWZhdWx0OiBtYWtlIHN1cmUgd2UKLSAgICAgICMgc3Vw cG9ydCBib3RoIHN0eWxlcyBzbyB1c2VycyBjYW4gbWlncmF0ZSBiZXR3ZWVuIHRoZW0gZWFzaWx5 LgotICAgICAgZ251bGliX3Rvb2xfYWxsX29wdGlvbnM9IiRnbnVsaWJfdG9vbF9vcHRpb25zICRn bnVsaWJfdG9vbF9vcHRpb25fZXh0cmFzIgotCi0gICAgICBpZiB0ZXN0IC1uICIkZ251bGliX21v ZHVsZXMiOyB0aGVuCi0gICAgICAgICRyZXF1aXJlX2dudWxpYl9jYWNoZQotICAgICAgICAkcmVx dWlyZV9nbnVsaWJfdG9vbF9iYXNlX29wdGlvbnMKLQotICAgICAgICBnbnVsaWJfbW9kZT0tLWlt cG9ydAotCi0gICAgICAgICMgVHJ5IG5vdCB0byBwaWNrIHVwIGFueSBzdGFsZSB2YWx1ZXMgZnJv bSAnZ251bGliLWNhY2hlLm00Jy4KLSAgICAgICAgcm0gLWYgIiRnbnVsaWJfY2FjaGUiCi0KLSAg ICAgICAgdGVzdCAtbiAiJGdudWxpYl90b29sX2Jhc2Vfb3B0aW9ucyIgXAotICAgICAgICAgICAg JiYgZnVuY19hcHBlbmRfdW5pcSBnbnVsaWJfdG9vbF9hbGxfb3B0aW9ucyAiICRnbnVsaWJfdG9v bF9iYXNlX29wdGlvbnMiCi0gICAgICAgIHRlc3QgLW4gIiRnbnVsaWJfbWsiIFwKLSAgICAgICAg ICAgICYmIGZ1bmNfYXBwZW5kX3VuaXEgZ251bGliX3Rvb2xfYWxsX29wdGlvbnMgIiAtLW1ha2Vm aWxlLW5hbWU9JGdudWxpYl9tayIKLSAgICAgICAgdGVzdCAtbiAiJHRlc3RzX2Jhc2UiICYmIHsK LSAgICAgICAgICBmdW5jX2FwcGVuZF91bmlxIGdudWxpYl90b29sX2FsbF9vcHRpb25zICIgLS10 ZXN0cy1iYXNlPSR0ZXN0c19iYXNlIgotICAgICAgICAgIGZ1bmNfYXBwZW5kX3VuaXEgZ251bGli X3Rvb2xfYWxsX29wdGlvbnMgIiAtLXdpdGgtdGVzdHMiCi0gICAgICAgIH0KLSAgICAgIGVsc2UK LQotICAgICAgICAjICdnbnVsaWJfbW9kdWxlcycgYW5kIG90aGVycyBhcmUgY2FjaGVkIGluICdn bnVsaWItY2FjaGUubTQnOgotICAgICAgICAjIFVzZSAnZ251bGliIC0tdXBkYXRlJyB0byBmZXRj aCBnbnVsaWIgbW9kdWxlcy4KLSAgICAgICAgZ251bGliX21vZGU9LS11cGRhdGUKLSAgICAgIGZp Ci0KLSAgICAgICMgQWRkIGEgc2Vuc2libGUgZGVmYXVsdCBsaWJ0b29sIG9wdGlvbiB0byBnbnVs aWJfdG9vbF9vcHRpb25zLgotICAgICAgIyBUaGUgZW1iZWRkZWQgZWNobyBpcyB0byBzcXVhc2gg d2hpdGVzcGFjZSBiZWZvcmUgZ2xvYmJpbmcuCi0gICAgICBjYXNlIGBlY2hvICIgIiRnbnVsaWJf dG9vbF9hbGxfb3B0aW9ucyIgImAgaW4KLSAgICAgICAgKiIgLS1uby1saWJ0b29sICIqfCoiIC0t bGlidG9vbCAiKikgOzsKLSAgICAgICAgKikgIGlmIHRlc3QgdHJ1ZSA9ICIkTElCVE9PTElaRSI7 IHRoZW4KLSAgICAgICAgICAgICAgZnVuY19hcHBlbmRfdW5pcSBnbnVsaWJfdG9vbF9hbGxfb3B0 aW9ucyAiIC0tbm8tbGlidG9vbCIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgZnVu Y19hcHBlbmRfdW5pcSBnbnVsaWJfdG9vbF9hbGxfb3B0aW9ucyAiIC0tbGlidG9vbCIKLSAgICAg ICAgICAgIGZpCi0gICAgICAgICAgICA7OwotICAgICAgZXNhYwotCi0gICAgICAkb3B0X2NvcHkg fHwgZnVuY19hcHBlbmRfdW5pcSBnbnVsaWJfdG9vbF9hbGxfb3B0aW9ucyAiIC0tc3ltbGluayIK LQotICAgICAgZnVuY19hcHBlbmRfdW5pcSBnbnVsaWJfdG9vbF9hbGxfb3B0aW9ucyAiICRnbnVs aWJfbW9kZSIKLSAgICAgIGZ1bmNfYXBwZW5kIGdudWxpYl90b29sX2FsbF9vcHRpb25zICIgJGdu dWxpYl9tb2R1bGVzIgotCi0gICAgICAjIFRoZSBlbWJlZGRlZCBlY2hvIGlzIHRvIHNxdWFzaCB3 aGl0ZXNwYWNlIGJlZm9yZSBkaXNwbGF5LgotICAgICAgZ251bGliX2NtZD1gZWNobyAkZ251bGli X3Rvb2wgJGdudWxpYl90b29sX2FsbF9vcHRpb25zYAotCi0gICAgICBmdW5jX3Nob3dfZXZhbCAi JGdudWxpYl9jbWQiICdleGl0ICQ/JwotCi0gICAgICAjIFVzZSAnZ251bGliLXRvb2wgLS1jb3B5 LWZpbGUnIHRvIGluc3RhbGwgbm9uLW1vZHVsZSBmaWxlcy4KLSAgICAgIGZ1bmNfaW5zdGFsbF9n bnVsaWJfbm9uX21vZHVsZV9maWxlcwotICAgIH0KLQotICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNf Z251bGliX3Rvb2wKLX0KLQotCi0jIGZ1bmNfZmluaQotIyAtLS0tLS0tLS0KLSMgRnVuY3Rpb24g dG8gcGVyZm9ybSBhbGwgZmluYWxpc2F0aW9uIGZvciB0aGUgYm9vdHN0cmFwIHByb2Nlc3MuCi1m dW5jX2hvb2thYmxlIGZ1bmNfZmluaQotZnVuY19maW5pICgpCi17Ci0gICAgJGRlYnVnX2NtZAot Ci0gICAgZnVuY19nZXR0ZXh0X2NvbmZpZ3VyYXRpb24KLSAgICBmdW5jX2NsZWFuX2RhbmdsaW5n X3N5bWxpbmtzCi0gICAgZnVuY19jbGVhbl91bnVzZWRfbWFjcm9zCi0gICAgZnVuY19za2lwX3Bv X3JlY29tbWVuZGF0aW9uCi0KLSAgICBmdW5jX3J1bl9ob29rcyBmdW5jX2ZpbmkKLQotICAgICRy ZXF1aXJlX2Jvb3RzdHJhcF91cHRvZGF0ZQotCi0gICAgZnVuY19lY2hvICJEb25lLiAgTm93IHlv dSBjYW4gcnVuICcuL2NvbmZpZ3VyZScuIgotfQotCi0KLSMgZnVuY19nZXR0ZXh0X2NvbmZpZ3Vy YXRpb24KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRWRpdCBjb25maWd1cmF0aW9u IHZhbHVlcyBpbnRvIHBvL01ha2V2YXJzLgotZnVuY19ob29rYWJsZSBmdW5jX2dldHRleHRfY29u ZmlndXJhdGlvbgotZnVuY19nZXR0ZXh0X2NvbmZpZ3VyYXRpb24gKCkKLXsKLSAgICAkZGVidWdf Y21kCi0KLSAgICAkcmVxdWlyZV9hdXRvcG9pbnQKLQotICAgIHRlc3QgdHJ1ZSA9ICIkQVVUT1BP SU5UIiB8fCB7Ci0gICAgICAkcmVxdWlyZV9jb3B5cmlnaHRfaG9sZGVyCi0gICAgICAkcmVxdWly ZV9leHRyYV9sb2NhbGVfY2F0ZWdvcmllcwotICAgICAgJHJlcXVpcmVfcGFja2FnZV9idWdyZXBv cnQKLQotICAgICAgIyBFc2NhcGUgeGdldHRleHQgb3B0aW9ucyBmb3Igc2VkIE1ha2V2YXJzIGdl bmVyYXRpb24gYmVsb3cuCi0gICAgICAjIFdlIGhhdmUgdG8gZGVsZXRlIGJsYW5rIGxpbmVzIGlu IGEgc2VwYXJhdGUgc2NyaXB0IHNvIHRoYXQgd2UgZG9uJ3QKLSAgICAgICMgYXBwZW5kIFxcXCB0 byB0aGUgcGVudWx0aW1hdGUgbGluZSwgYW5kIHRoZW4gZGVsZXRlIHRoZSBsYXN0IGVtcHR5Ci0g ICAgICAjIGxpbmUsIHdoaWNoIG1lc3NlcyB1cCB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uIGxh dGVyIGluIHRoaXMKLSAgICAgICMgZnVuY3Rpb24uICBOb3RlIHRoYXQgYWRkaW5nIGEgbGl0ZXJh bCBcXFwgcmVxdWlyZXMgZG91YmxlIGVzY2FwaW5nCi0gICAgICAjIGhlcmUsIG9uY2UgZm9yIHRo ZSBleGVjdXRpb24gc3Vic2hlbGwsIGFuZCBhZ2FpbiBmb3IgdGhlIGFzc2lnbm1lbnQsCi0gICAg ICAjIHdoaWNoIGlzIHdoeSB0aGVyZSBhcmUgYWN0dWFsbHkgMTIgKCEhKSBiYWNrc2xhc2hlcyBp biB0aGUgc2NyaXB0LgotICAgICAgX0dfeGdldHRleHRfb3B0aW9ucz1gZWNobyAiJHhnZXR0ZXh0 X29wdGlvbnMkbmwiIHwkU0VEICcvXiQvZCcgfCRTRUQgJwotICAgICAgICAgICRiCi0gICAgICAg ICAgc3wkfCBcXFxcXFxcXFxcXFx8J2AKLQotICAgICAgIyBDcmVhdGUgZ2V0dGV4dCBjb25maWd1 cmF0aW9uLgotICAgICAgZnVuY19lY2hvICJDcmVhdGluZyBwby9NYWtldmFycyBmcm9tIHBvL01h a2V2YXJzLnRlbXBsYXRlIC4uLiIKLSAgICAgICRSTSAtZiBwby9NYWtldmFycwotICAgICAgJFNF RCAnCi0gICAgICAgIC9eRVhUUkFfTE9DQUxFX0NBVEVHT1JJRVMgKj0vc3w9Lip8PSAnIiRleHRy YV9sb2NhbGVfY2F0ZWdvcmllcyInfAotICAgICAgICAvXkNPUFlSSUdIVF9IT0xERVIgKj0vc3w9 Lip8PSAnIiRjb3B5cmlnaHRfaG9sZGVyIid8Ci0gICAgICAgIC9eTVNHSURfQlVHU19BRERSRVNT ICo9L3N8PS4qfD0gJyIkcGFja2FnZV9idWdyZXBvcnQiJ3wKLSAgICAgICAgL15YR0VUVEVYVF9P UFRJT05TICo9L3sKLSAgICAgICAgICBzfCR8IFxcfAotICAgICAgICAgIGFcCi0gICAgICAgICAg ICAgJyIkX0dfeGdldHRleHRfb3B0aW9ucyInIFxcXAotICAgICAgICAgICAgICQke2VuZF9vZl94 Z2V0dGV4dF9vcHRpb25zK30KLSAgICAgICAgfQotICAgICAgICBzLyAqJC8vCi0gICAgICAnIHBv L01ha2V2YXJzLnRlbXBsYXRlID5wby9NYWtldmFycyB8fCBleGl0IDEKLSAgICB9Ci0KLSAgICBm dW5jX3J1bl9ob29rcyBmdW5jX2dldHRleHRfY29uZmlndXJhdGlvbgotfQotCi0KLQotIyMgLS0t LS0tLS0tLS0tLS0tICMjCi0jIyBDb3JlIGZ1bmN0aW9ucy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0t LSAjIwotCi0jIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgbWFpbiBmdW5jdGlvbnMgY2FsbGVk IGZyb20gdGhlICdIb29rYWJsZQotIyBmdW5jdGlvbnMnIChzaG93biBhYm92ZSksIGFuZCBhcmUg dGhlIG9uZXMgeW91J3JlICBtb3N0IGxpa2VseQotIyB0byB3YW50IHRvIHJlcGxhY2Ugd2l0aCB5 b3VyIG93biBpbXBsZW1lbnRhdGlvbnMgaW4gJ2Jvb3RzdHJhcC5jb25mJy4KLQotCi0jIGZ1bmNf YXV0b3BvaW50Ci0jIC0tLS0tLS0tLS0tLS0tCi0jIElmIHRoaXMgcGFja2FnZSB1c2VzIGdldHRl eHQsIHRoZW4gcnVuICdhdXRvcG9pbnQnLgotZnVuY19hdXRvcG9pbnQgKCkKLXsKLSAgICAkZGVi dWdfY21kCi0KLSAgICAkcmVxdWlyZV9hdXRvcG9pbnQKLQotICAgIHRlc3QgdHJ1ZSA9ICIkQVVU T1BPSU5UIiBcCi0gICAgICAgIHx8IGZ1bmNfc2hvd19ldmFsICIkQVVUT1BPSU5UIC0tZm9yY2Ui ICdleGl0ICQ/JwotfQotCi0KLSMgZnVuY19saWJ0b29saXplCi0jIC0tLS0tLS0tLS0tLS0tLQot IyBJZiB0aGlzIHBhY2thZ2UgdXNlcyBsaWJ0b29sLCB0aGVuIHJ1biAnbGlidG9vbGl6ZScuCi1m dW5jX2xpYnRvb2xpemUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkcmVxdWlyZV9saWJ0 b29saXplCi0KLSAgICB0ZXN0IHRydWUgPSAiJExJQlRPT0xJWkUiIHx8IHsKLSAgICAgIF9HX2xp YnRvb2xpemVfb3B0aW9ucz0KLSAgICAgICRvcHRfY29weSAmJiBmdW5jX2FwcGVuZCBfR19saWJ0 b29saXplX29wdGlvbnMgIiAtLWNvcHkiCi0gICAgICAkb3B0X2ZvcmNlICYmIGZ1bmNfYXBwZW5k IF9HX2xpYnRvb2xpemVfb3B0aW9ucyAiIC0tZm9yY2UiCi0gICAgICAkb3B0X3ZlcmJvc2UgfHwg ZnVuY19hcHBlbmQgX0dfbGlidG9vbGl6ZV9vcHRpb25zICIgLS1xdWlldCIKLSAgICAgIGZ1bmNf c2hvd19ldmFsICIkTElCVE9PTElaRSRfR19saWJ0b29saXplX29wdGlvbnMiICdleGl0ICQ/Jwot ICAgIH0KLX0KLQotCi0jIGZ1bmNfZ251bGliX3Rvb2xfY29weV9maWxlIFNSQyBERVNUCi0jIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENvcHkgU1JDLCBhIHBhdGggcmVs YXRpdmUgdG8gdGhlIGdudWxpYiBzdWItdHJlZSwgdG8gREVTVCwgYSBwYXRoCi0jIHJlbGF0aXZl IHRvIHRoZSB0b3AtbGV2ZWwgc291cmNlIGRpcmVjdG9yeSB1c2luZyBnbnVsaWItdG9vbCBzbyB0 aGF0Ci0jIGFueSBwYXRjaGVzIG9yIHJlcGxhY2VtZW50cyBpbiAkbG9jYWxfZ2xfcGF0aCBhcmUg YXBwbGllZC4KLWZ1bmNfZ251bGliX3Rvb2xfY29weV9maWxlICgpCi17Ci0gICAgJGRlYnVnX2Nt ZAotCi0gICAgJHJlcXVpcmVfZ251bGliX3Rvb2wKLSAgICAkcmVxdWlyZV9wYXRjaAotCi0gICAg aWYgdGVzdCB0cnVlID0gIiRnbnVsaWJfdG9vbCI7IHRoZW4KLSAgICAgICMgSWYgZ251bGliLXRv b2wgaXMgbm90IGF2YWlsYWJsZSAoZS5nLiBib290c3RyYXBwaW5nIGluIGEKLSAgICAgICMgZGlz dHJpYnV0aW9uIHRhcmJhbGwpLCBtYWtlIHN1cmUgdGhhdCBhdCBsZWFzdCB3ZSBoYXZlIHNvbWUK LSAgICAgICMgdmVyc2lvbiBvZiB0aGUgcmVxdWlyZWQgZmlsZSBhbHJlYWR5IGluIHBsYWNlLgot ICAgICAgdGVzdCAtZiAiJDIiIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlwKLUNhbid0IGZpbmQsIGNv cHkgb3IgZG93bmxvYWQgJyQyJywgYSByZXF1aXJlZAotZ251bGliIHN1cHBsaWVkIGZpbGUsIHBs ZWFzZSBwcm92aWRlIHRoZSBsb2NhdGlvbiBvZiBhCi1jb21wbGV0ZSAnZ251bGliJyB0cmVlIGJ5 IHNldHRpbmcgJ2dudWxpYl9wYXRoJyBpbiB5b3VyCi0nYm9vdHN0cmFwLmNvbmYnIG9yIHdpdGgg dGhlICctLWdudWxpYi1zcmNkaXInIG9wdGlvbiAtCi1vciBlbHNlIHNwZWNpZnkgdGhlIGxvY2F0 aW9uIG9mIHlvdXIgJ2dpdCcgYmluYXJ5IGJ5Ci1zZXR0aW5nICdHSVQnIGluIHRoZSBlbnZpcm9u bWVudCBzbyB0aGF0IGEgZnJlc2gKLSdnbnVsaWInIHN1Ym1vZHVsZSBjYW4gYmUgY2xvbmVkLiIK LSAgICBlbHNlCi0gICAgICAkcmVxdWlyZV9nbnVsaWJfY29weV9jbWQKLQotICAgICAgJGdudWxp Yl9jb3B5X2NtZCAkMSAkMiAyPi9kZXYvbnVsbCB8fCB7Ci0gICAgICAgICRyZXF1aXJlX2dudWxp Yl9wYXRoCi0KLSAgICAgICAgZnVuY19lcnJvciAiJyRnbnVsaWJfcGF0aC8kMScgZG9lcyBub3Qg ZXhpc3QiCi0gICAgICAgIHJldHVybiAxCi0gICAgICB9Ci0gICAgZmkKLX0KLQotCi0jIGZ1bmNf aW5zdGFsbF9nbnVsaWJfbm9uX21vZHVsZV9maWxlcwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSMgR2V0IGFkZGl0aW9uYWwgbm9uLW1vZHVsZSBmaWxlcyBmcm9tIGdu dWxpYiwgb3ZlcnJpZGluZyBleGlzdGluZyBmaWxlcy4KLWZ1bmNfaW5zdGFsbF9nbnVsaWJfbm9u X21vZHVsZV9maWxlcyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX2J1aWxk X2F1eAotICAgICRyZXF1aXJlX2dudWxpYl90b29sCi0KLSAgICB0ZXN0IC1uICIkZ251bGliX25v bl9tb2R1bGVfZmlsZXMiICYmIHsKLSAgICAgIG1heWJlX2V4aXRfY21kPToKLQotICAgICAgZm9y IGZpbGUgaW4gJGdudWxpYl9ub25fbW9kdWxlX2ZpbGVzOyBkbwotICAgICAgICBjYXNlICRmaWxl IGluCi0gICAgICAgICAgKi9DT1BZSU5HKikgZGVzdD1DT1BZSU5HOzsKLSAgICAgICAgICAqL0lO U1RBTEwpIGRlc3Q9SU5TVEFMTDs7Ci0JICBidWlsZC1hdXgvbWlzc2luZykgZGVzdD0KLSAgICAg ICAgICAgIGZ1bmNfd2FybmluZyBzZXR0aW5ncyAiXAotUGxlYXNlIHJlbW92ZSBidWlsZC1hdXgv bWlzc2luZyBmcm9tIGdudWxpYl9tb2R1bGVfZmlsZXMgaW4KLSdib290c3RyYXAuY29uZicsIGFz IGl0IG1heSBjbGFzaCB3aXRoIEF1dG9tYWtlJ3MgdmVyc2lvbi4iCi0gICAgICAgICAgICA7Owot ICAgICAgICAgIGJ1aWxkLWF1eC8qKSBkZXN0PSRidWlsZF9hdXgvYGV4cHIgIiRmaWxlIiA6ICdi dWlsZC1hdXgvXCguKlwpJ2A7OwotICAgICAgICAgICopIGRlc3Q9JGZpbGU7OwotICAgICAgICBl c2FjCi0KLSAgICAgICAgIyBCZSBzdXJlIHRvIHNob3cgYWxsIGNvcHlpbmcgZXJyb3JzIGJlZm9y ZSBiYWlsaW5nIG91dAotCXRlc3QgLXogIiRkZXN0IiBcCi0JICAgIHx8IGZ1bmNfZ251bGliX3Rv b2xfY29weV9maWxlICIkZmlsZSIgIiRkZXN0IiBcCi0JICAgIHx8IG1heWJlX2V4aXRfY21kPSJl eGl0ICRFWElUX0ZBSUxVUkUiCi0gICAgICBkb25lCi0KLSAgICAgICRtYXliZV9leGl0X2NtZAot ICAgIH0KLX0KLQotCi0jIGZ1bmNfZW5zdXJlX2NoYW5nZWxvZwotIyAtLS0tLS0tLS0tLS0tLS0t LS0tLS0KLSMgRXZlbiB3aXRoICdnaXRsb2ctdG8tY2hhbmdlbG9nJyBnZW5lcmF0ZWQgQ2hhbmdl TG9ncywgYXV0b21ha2UKLSMgd2lsbCBub3QgcnVuIHRvIGNvbXBsZXRpb24gd2l0aCBubyBDaGFu Z2VMb2cgZmlsZS4KLWZ1bmNfZW5zdXJlX2NoYW5nZWxvZyAoKQotewotICAgICRkZWJ1Z19jbWQK LQotICAgIHRlc3QgLWYgQ2hhbmdlTG9nICYmIG12IC1mIENoYW5nZUxvZyBDaGFuZ2VMb2d+Ci0K LSAgICBjYXQgPkNoYW5nZUxvZyA8PCdFT1QnCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMj Ci0jIyBETyBOT1QgRURJVCBUSElTIEZJTEUhICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t ICMjCi0KLUNoYW5nZUxvZyBpcyBnZW5lcmF0ZWQgYnkgZ2l0bG9nLXRvLWNoYW5nZWxvZy4KLUVP VAotCi0gICAgX0dfbWVzc2FnZT0iY3JlYXRpbmcgZHVtbXkgJ0NoYW5nZUxvZyciCi0gICAgdGVz dCAtZiBDaGFuZ2VMb2d+IFwKLSAgICAgICYmIGZ1bmNfYXBwZW5kIF9HX21lc3NhZ2UgJyAoYmFj a3VwIGluIENoYW5nZUxvZ34pJwotICAgIGZ1bmNfdmVyYm9zZSAiJF9HX21lc3NhZ2UiCi0KLSAg ICByZXR1cm4gMAotfQotCi0KLSMgZnVuY19lbnN1cmVfTkVXUwotIyAtLS0tLS0tLS0tLS0tLS0t Ci0jIFdpdGhvdXQgQU1fSU5JVF9BVVRPTUFLRShbZm9yZWlnbl0pLCBhdXRvbWFrZSB3aWxsIG5v dCBydW4gdG8KLSMgY29tcGxldGlvbiB3aXRoIG5vIE5FV1MgZmlsZSwgZXZlbiB0aG91Z2ggTkVX Uy5tZCBvciBORVdTLnR4dAotIyBpcyBvZnRlbiBwcmVmZXJhYmxlLgotZnVuY19lbnN1cmVfTkVX UyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIHRlc3QgLWYgTkVXUyB8fCB7Ci0gICAgICBf R19ORVdTPQotICAgICAgZm9yIF9HX25ld3MgaW4gTkVXUy50eHQgTkVXUy5tZCBORVdTLnJzdDsg ZG8KLSAgICAgICAgdGVzdCAtZiAiJF9HX25ld3MiICYmIGJyZWFrCi0gICAgICBkb25lCi0KLSAg ICAgIHRlc3QgLWYgIiRfR19uZXdzIiAmJiAkTE5fUyAkX0dfbmV3cyBORVdTCi0gICAgICBmdW5j X3ZlcmJvc2UgIiRMTl9TICRfR19uZXdzIE5FV1MiCi0gICAgfQotCi0gICAgcmV0dXJuIDAKLX0K LQotCi0jIGZ1bmNfZW5zdXJlX1JFQURNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgV2l0aG91 dCBBTV9JTklUX0FVVE9NQUtFKFtmb3JlaWduXSksIGF1dG9tYWtlIHdpbGwgbm90IHJ1biB0bwot IyBjb21wbGV0aW9uIHdpdGggbm8gUkVBRE1FIGZpbGUsIGV2ZW4gdGhvdWdoIFJFQURNRS5tZCBv ciBSRUFETUUudHh0Ci0jIGlzIG9mdGVuIHByZWZlcmFibGUuCi1mdW5jX2Vuc3VyZV9SRUFETUUg KCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICB0ZXN0IC1mIFJFQURNRSB8fCB7Ci0gICAgICBf R19SRUFETUU9Ci0gICAgICBmb3IgX0dfcmVhZG1lIGluIFJFQURNRS50eHQgUkVBRE1FLm1kIFJF QURNRS5yc3Q7IGRvCi0gICAgICAgIHRlc3QgLWYgIiRfR19yZWFkbWUiICYmIGJyZWFrCi0gICAg ICBkb25lCi0KLSAgICAgIHRlc3QgLWYgIiRfR19yZWFkbWUiICYmICRMTl9TICRfR19yZWFkbWUg UkVBRE1FCi0gICAgICBmdW5jX3ZlcmJvc2UgIiRMTl9TICRfR19yZWFkbWUgUkVBRE1FIgotICAg IH0KLQotICAgIHJldHVybiAwCi19Ci0KLQotIyBmdW5jX2F1dG9yZWNvbmYgW1NVQkRJUl0KLSMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEJlaW5nIGNhcmVmdWwgbm90IHRvIHJlLXJ1biAn YXV0b3BvaW50JyBvciAnbGlidG9vbGl6ZScsIGFuZCBub3QgdG8KLSMgdHJ5IHRvIHJ1biAnYXV0 b3BvaW50JywgJ2xpYnRvb2xpemUnIG9yICdhdXRvaGVhZGVyJyBvbiBwYWNrYWdlcyB0aGF0Ci0j IGRvbid0IHVzZSB0aGVtLCBkZWZlciB0byAnYXV0b3JlY29uZicgZm9yIGV4ZWN1dGlvbiBvZiB0 aGUgcmVtYWluaW5nCi0jIGF1dG90b29scyB0byBib290c3RyYXAgdGhpcyBwYWNrYWdlLgotIwot IyBQcm9qZWN0cyB3aXRoIG11bHRpcGxlIHRyZWVzIHRvIHJlY29uZmlndXJlIGNhbiBob29rIGFu b3RoZXIgY2FsbCB0bwotIyB0aGlzIGZ1bmN0aW9uIG9udG8gZnVuY19yZWNvbmZpZ3VyZToKLSMK LSMgICAgbXlfYXV0b3JlY29uZl9mb28gKCkKLSMgICAgewotIyAgICAgICAgZnVuY19hdXRvcmVj b25mIGZvbwotIyAgICB9Ci0jICAgIGZ1bmNfYWRkX2hvb2sgZnVuY19yZWNvbmZpZ3VyZSBteV9h dXRvcmVjb25mX2ZvbwotZnVuY19hdXRvcmVjb25mICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0g ICAgJHJlcXVpcmVfYXV0b2hlYWRlcgotICAgICRyZXF1aXJlX2J1aWxkX2F1eCAgIyBhdXRvbWFr ZSBhbmQgb3RoZXJzIHB1dCBmaWxlcyBpbiBoZXJlCi0gICAgJHJlcXVpcmVfbWFjcm9fZGlyICAj IGFjbG9jYWwgYW5kIG90aGVycyBwdXQgZmlsZXMgaW4gaGVyZQotCi0gICAgIyBXZSByYW4gdGhl c2UgbWFudWFsbHkgYWxyZWFkeSwgYW5kIGF1dG9yZWNvbmYgd29uJ3QgZXhlYyAnOicKLSAgICBz YXZlX0FVVE9QT0lOVD0kQVVUT1BPSU5UOyBBVVRPUE9JTlQ9dHJ1ZQotICAgIHNhdmVfTElCVE9P TElaRT0kTElCVE9PTElaRTsgTElCVE9PTElaRT10cnVlCi0KLSAgICBfR19hdXRvcmVjb25mX29w dGlvbnM9Ci0gICAgJG9wdF9jb3B5IHx8IGZ1bmNfYXBwZW5kIF9HX2F1dG9yZWNvbmZfb3B0aW9u cyAiIC0tc3ltbGluayIKLSAgICAkb3B0X2ZvcmNlICYmIGZ1bmNfYXBwZW5kIF9HX2F1dG9yZWNv bmZfb3B0aW9ucyAiIC0tZm9yY2UiCi0gICAgJG9wdF92ZXJib3NlICYmIGZ1bmNfYXBwZW5kIF9H X2F1dG9yZWNvbmZfb3B0aW9ucyAiIC0tdmVyYm9zZSIKLSAgICBmdW5jX3Nob3dfZXZhbCAiJEFV VE9SRUNPTkYkX0dfYXV0b3JlY29uZl9vcHRpb25zIC0taW5zdGFsbCR7MSsgJDF9IiAnZXhpdCAk PycKLQotICAgIEFVVE9QT0lOVD0kc2F2ZV9BVVRPUE9JTlQKLSAgICBMSUJUT09MSVpFPSRzYXZl X0xJQlRPT0xJWkUKLX0KLQotCi0jIGZ1bmNfY2hlY2tfY29uZmlndXJhdGlvbiBWQVJOQU1FIFtD T05GSUdVUkVfTUFDUk9dCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCi0jIEV4aXQgd2l0aCBhIHN1aXRhYmxlIGRpYWdub3N0aWMgZm9yIGFuIGlt cG9ydGFudCBjb25maWd1cmF0aW9uIGNoYW5nZQotIyB0aGF0IG5lZWRzIHRvIGJlIG1hZGUgYmVm b3JlIGJvb3RzdHJhcCBjYW4gcnVuIGNvcnJlY3RseS4KLWZ1bmNfY2hlY2tfY29uZmlndXJhdGlv biAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX2NvbmZpZ3VyZV9hYwotCi0g ICAgZXZhbCAndGVzdCAtbiAiJCckMSciJyB8fCB7Ci0gICAgICBfR19lcnJvcl9tc2c9InBsZWFz ZSBzZXQgJyQxJyBpbiAnYm9vdHN0cmFwLmNvbmYnIgotICAgICAgaWYgdGVzdCAtbiAiJGNvbmZp Z3VyZV9hYyIgJiYgdGVzdCAtbiAiJDIiOyB0aGVuCi0gICAgICAgIGZ1bmNfYXBwZW5kIF9HX2Vy cm9yX21zZyAiCi1vciBhZGQgdGhlIGZvbGxvd2luZyAob3Igc2ltaWxhcikgdG8geW91ciAnJGNv bmZpZ3VyZV9hYyc6Ci0kMiIKLSAgICAgIGZpCi0KLSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRf R19lcnJvcl9tc2ciCi0gICAgfQotfQotCi0KLSMgZnVuY19jbGVhbl9kYW5nbGluZ19zeW1saW5r cwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJlbW92ZSBhbnkgZGFuZ2xpbmcg c3ltbGluayBtYXRjaGluZyAiKi5tNCIgb3IgIiouW2NoXSIgaW4gc29tZQotIyBnbnVsaWItcG9w dWxhdGVkIGRpcmVjdG9yaWVzLiBTdWNoIC5tNCBmaWxlcyB3b3VsZCBjYXVzZSBhY2xvY2FsIHRv Ci0jIGZhaWwuICBUaGUgZm9sbG93aW5nIHJlcXVpcmVzIEdOVSBmaW5kIDQuMi4zIG9yIG5ld2Vy LiBDb25zaWRlcmluZwotIyB0aGUgdXN1YWwgcG9ydGFiaWxpdHkgY29uc3RyYWludHMgb2YgdGhp cyBzY3JpcHQsIHRoYXQgbWF5IHNlZW0gYSB2ZXJ5Ci0jIGRlbWFuZGluZyByZXF1aXJlbWVudCwg YnV0IGl0IHNob3VsZCBiZSBvay4gIElnbm9yZSBhbnkgZmFpbHVyZSwKLSMgd2hpY2ggaXMgZmlu ZSwgc2luY2UgdGhpcyBpcyBvbmx5IGEgY29udmVuaWVuY2UgdG8gaGVscCBkZXZlbG9wZXJzCi0j IGF2b2lkIHRoZSByZWxhdGl2ZWx5IHVudXN1YWwgY2FzZSB3aGVyZSBhIHN5bWxpbmtlZC10byAu bTQgZmlsZSBpcwotIyBnaXQtcmVtb3ZlZCBmcm9tIGdudWxpYiBiZXR3ZWVuIHN1Y2Nlc3NpdmUg cnVucyBvZiB0aGlzIHNjcmlwdC4KLWZ1bmNfY2xlYW5fZGFuZ2xpbmdfc3ltbGlua3MgKCkKLXsK LSAgICAkZGVidWdfY21kCi0KLSAgICAkcmVxdWlyZV9tYWNyb19kaXIKLSAgICAkcmVxdWlyZV9z b3VyY2VfYmFzZQotCi0gICAgZnVuY192ZXJib3NlICJjbGVhbmluZyBkYW5nbGluZyBzeW1saW5r cyIKLQotICAgIGZpbmQgIiRtYWNyb19kaXIiICIkc291cmNlX2Jhc2UiIFwKLSAgICAgICAgLWRl cHRoIFwoIC1uYW1lICcqLm00JyAtbyAtbmFtZSAnKi5bY2hdJyBcKSBcCi0gICAgICAgIC10eXBl IGwgLXh0eXBlIGwgLWRlbGV0ZSA+IC9kZXYvbnVsbCAyPiYxCi19Ci0KLQotIyBmdW5jX2NsZWFu X3VudXNlZF9tYWNyb3MKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEF1dG9wb2ludCBj YW4gcmVzdWx0IGluIG92ZXItemVhbG91c2x5IGFkZGluZyBtYWNyb3MgaW50byAkbWFjcm9fZGly Ci0jIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCBhY3R1YWxseSB1c2VkLCBmb3IgZXhhbXBsZSB0 ZXN0cyB0byBoZWxwCi0jIGJ1aWxkIHRoZSAnaW50bCcgZGlyZWN0b3J5IGV2ZW4gdGhvdWdoIHlv dSBoYXZlIHNwZWNpZmllZAotIyAnQU1fR05VX0dFVFRFWFQoW2V4dGVybmFsXSknIGluIHlvdXIg Y29uZmlndXJlLmFjLiAgVGhpcyBmdW5jdGlvbgotIyBsb29rcyByZW1vdmVzIGFueSBtYWNybyBm aWxlcyB0aGF0IGNhbiBiZSBmb3VuZCBpbiBnbnVsaWIsICBidXQKLSMgYXJlIG5vdCAnbTRfaW5j bHVkZSdkIGJ5ICdhY2xvY2FsLm00Jy4KLWZ1bmNfY2xlYW5fdW51c2VkX21hY3JvcyAoKQotewot ICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX2dudWxpYl9wYXRoCi0gICAgJHJlcXVpcmVf bWFjcm9fZGlyCi0KLSAgICB0ZXN0IC1uICIkZ251bGliX3BhdGgiICYmIHRlc3QgLWYgYWNsb2Nh bC5tNCAmJiB7Ci0gICAgICBhY2xvY2FsX200cz1gZmluZCAuIC1uYW1lIGFjbG9jYWwubTQgLXBy aW50YAotCi0gICAgICAjIFdlIHVzZSAnbHN8Z3JlcCcgaW5zdGVhZCBvZiAnbHMgKi5tNCcgdG8g YXZvaWQgZXhjZWVkaW5nCi0gICAgICAjIGNvbW1hbmQgbGluZSBsZW5ndGggbGltaXRzIGluIHNv bWUgc2hlbGxzLgotICAgICAgZm9yIGZpbGUgaW4gYGNkICIkbWFjcm9fZGlyIiAmJiBscyAtMSB8 JEdSRVAgJ1wubTQkJ2A7IGRvCi0KLQkjIFJlbW92ZSBhIG1hY3JvIGZpbGUgd2hlbiBhY2xvY2Fs Lm00IGRvZXMgbm90IG00X2luY2x1ZGUgaXQuLi4KLSAgICAgICAgZnVuY19ncmVwX3EgJ200X2lu Y2x1ZGUoW1tdJyRtYWNyb19kaXIvJGZpbGUnXSknICRhY2xvY2FsX200cyBcCi0gICAgICAgICAg ICB8fCB0ZXN0ICEgLWYgIiRnbnVsaWJfcGF0aC9tNC8kZmlsZSIgfHwgewotCi0gICAgICAgICAg ICAgICMgLi4uYW5kIHRoZXJlIGlzIGFuIGlkZW50aWNhbCBmaWxlIGluIGdudWxpYi4uLgotICAg ICAgICAgICAgICBpZiBmdW5jX2NtcF9zICIkZ251bGliX3BhdGgvbTQvJGZpbGUiICIkbWFjcm9f ZGlyLyRmaWxlIjsgdGhlbgotCi0gICAgICAgICAgICAgICAgIyAuLi5hbmQgaXQncyBub3QgaW4g dGhlIHByZWNpb3VzIGxpc3QgKCdlY2hvJyBpcyBuZWVkZWQKLSAgICAgICAgICAgICAgICAjIGhl cmUgdG8gc3F1YXNoIHdoaXRlc3BhY2UgZm9yIHRoZSBtYXRjaCBleHByZXNzaW9uKS4KLSAgICAg ICAgICAgICAgICBjYXNlICIgImBlY2hvICRnbnVsaWJfcHJlY2lvdXNgIiAiIGluCi0gICAgICAg ICAgICAgICAgICAqIiAkZmlsZSAiKikgOzsKLSAgICAgICAgICAgICAgICAgICopIHJtIC1mICIk bWFjcm9fZGlyLyRmaWxlIgotICAgICAgICAgICAgICAgICAgICAgZnVuY192ZXJib3NlIFwKLSAg ICAgICAgICAgICAgICAgICAgICAgInJlbW92aW5nIHVudXNlZCBnbnVsaWIgZmlsZSAnJG1hY3Jv X2Rpci8kZmlsZSciCi0gICAgICAgICAgICAgICAgZXNhYwotICAgICAgICAgICAgICBmaQotICAg ICAgICB9Ci0gICAgICBkb25lCi0gICAgfQotfQotCi0KLSMgZnVuY19za2lwX3BvX3JlY29tbWVu ZGF0aW9uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJZiB0aGVyZSBpcyBhIHBv IGRpcmVjdG9yeSwgYW5kICctLXNraXAtcG8nIHdhc24ndCBwYXNzZWQsIGxldCB0aGUKLSMgdXNl ciBrbm93IHRoYXQgdGhleSBjYW4gdXNlICctLXNraXAtcG8nIG9uIHN1YnNlcXVlbnQgaW52b2Nh dGlvbnMuCi1mdW5jX3NraXBfcG9fcmVjb21tZW5kYXRpb24gKCkKLXsKLSAgICAkZGVidWdfY21k Ci0KLSAgICB0ZXN0ICEgLWQgcG8gXAotICAgICAgICB8fCAkb3B0X3NraXBfcG8gXAotICAgICAg ICB8fCBmdW5jX3dhcm5pbmcgcmVjb21tZW5kICJcCi1JZiB5b3VyIHBvZmlsZXMgYXJlIHVwLXRv LWRhdGUsIHlvdSBjYW4gcmVydW4gYm9vdHN0cmFwCi1hcyAnJHByb2duYW1lIC0tc2tpcC1wbycg dG8gYXZvaWQgcmVkb3dubG9hZGluZy4iCi19Ci0KLQotIyBmdW5jX3VwZGF0ZV9kb3R2ZXJzaW9u Ci0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRXZlbiB3aXRoICdnaXRsb2ctdG8tY2hhbmdl bG9nJyBnZW5lcmF0ZWQgQ2hhbmdlTG9ncywgYXV0b21ha2UKLSMgd2lsbCBub3QgcnVuIHRvIGNv bXBsZXRpb24gd2l0aCBubyBDaGFuZ2VMb2cgZmlsZS4KLWZ1bmNfdXBkYXRlX2RvdHZlcnNpb24g KCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICB0ZXN0IC1mICIkYnVpbGRfYXV4L2dpdC12ZXJz aW9uLWdlbiIgJiYgewotICAgICAgX0dfbWVzc2FnZT0idXBkYXRpbmcgLnZlcnNpb24iCi0gICAg ICB0ZXN0IC1mIC52ZXJzaW9uICYmIHsKLSAgICAgICAgbXYgLnZlcnNpb24gLnZlcnNpb25+Ci0J ZnVuY19hcHBlbmQgX0dfbWVzc2FnZSAiIChiYWNrdXAgaW4gLnZlcnNpb25+KSIKLSAgICAgIH0K LSAgICAgIGZ1bmNfdmVyYm9zZSAidXBkYXRpbmcgLnZlcnNpb24iCi0KLSAgICAgICRidWlsZF9h dXgvZ2l0LXZlcnNpb24tZ2VuIGR1bW15LWFyZyA+IC52ZXJzaW9uCi0gICAgfQotfQotCi0KLQot IyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlc291cmNlIG1hbmFnZW1lbnQuICMjCi0j IyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIFRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZp bml0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgZWFjaCBlbnN1cmUgYQotIyBwYXJ0aWN1bGFyIHJl c291cmNlIChhIGZpbGUsIG9yIGEgbm9uLWVtcHR5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9y Ci0jIGV4YW1wbGUpIGlzIGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJvcHJpYXRlIHRvIGV4dHJhY3Qg ZGVmYXVsdCB2YWx1ZXMKLSMgZnJvbSBwZXJ0aW5lbnQgcGFja2FnZSBmaWxlcy4gIFdoZXJlIGEg dmFyaWFibGUgYWxyZWFkeSBoYXMgYSBub24tCi0jIGVtcHR5IHZhbHVlIChhcyBzZXQgYnkgdGhl IHBhY2thZ2UncyAnYm9vdHN0cmFwLmNvbmYnKSwgdGhhdCB2YWx1ZSBpcwotIyB1c2VkIGluIHBy ZWZlcmVuY2UgdG8gZGVyaXZpbmcgdGhlIGRlZmF1bHQuIENhbGwgdGhlbSB1c2luZyB0aGVpcgot IyBhc3NvY2lhdGVkICdyZXF1aXJlXyonIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJl IGV4ZWN1dGVkLCBhdAotIyBtb3N0LCBvbmNlLgotCi0KLSMgcmVxdWlyZV9nbnVsaWJfZ2l0X3N1 Ym1vZHVsZXMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSW5pdGlhbGl6ZSBh bGwgZ2l0IG1vZHVsZXMgZnJvbSAkZ251bGliX2dpdF9zdWJtb2R1bGVzIGJlZm9yZSB3ZQotIyBy dW4gJ2dudWxpYi10b29sJy4KLXJlcXVpcmVfZ251bGliX2dpdF9zdWJtb2R1bGVzPWZ1bmNfcmVx dWlyZV9nbnVsaWJfZ2l0X3N1Ym1vZHVsZXMKLWZ1bmNfcmVxdWlyZV9nbnVsaWJfZ2l0X3N1Ym1v ZHVsZXMgKCkKLXsKLSAgICB0ZXN0IC1uICIkZ251bGliX2dpdF9zdWJtb2R1bGVzIiAmJiB7Ci0g ICAgICBmb3IgX0dfc3VibW9kdWxlIGluICRnbnVsaWJfZ2l0X3N1Ym1vZHVsZXMKLSAgICAgIGRv Ci0gICAgICAgIGZ1bmNfc2hvd19ldmFsICJnaXQgc3VibW9kdWxlIGluaXQgLS0gJF9HX3N1Ym1v ZHVsZSIgXAotICAgICAgICAgICAgJiYgZnVuY19zaG93X2V2YWwgImdpdCBzdWJtb2R1bGUgdXBk YXRlIC0tICRfR19zdWJtb2R1bGUiIFwKLSAgICAgICAgICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3Ig IlVuYWJsZSB0byBpbml0IGdpdCBtb2R1bGUgJyRfR19zdWJtb2R1bGUnLiIKLSAgICAgIGRvbmUK LSAgICB9Ci0KLSAgICByZXF1aXJlX2dudWxpYl9naXRfc3VibW9kdWxlcz06Ci19Ci0KLQotIyBy ZXF1aXJlX2NoZWNrb3V0X29ubHlfZmlsZQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IyBCYWlsIG91dCAgaWYgdGhpcyBwYWNrYWdlIG9ubHkgYm9vdHN0cmFwcyBwcm9wZXJseSBmcm9t IGEgcmVwb3NpdG9yeQotIyBjaGVja291dC4KLXJlcXVpcmVfY2hlY2tvdXRfb25seV9maWxlPWZ1 bmNfcmVxdWlyZV9jaGVja291dF9vbmx5X2ZpbGUKLWZ1bmNfcmVxdWlyZV9jaGVja291dF9vbmx5 X2ZpbGUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkb3B0X2ZvcmNlIHx8IHsKLSAgICAg IHRlc3QgLW4gIiRjaGVja291dF9vbmx5X2ZpbGUiICYmIHRlc3QgISAtZiAiJGNoZWNrb3V0X29u bHlfZmlsZSIgXAotICAgICAgICAgICYmIGZ1bmNfZmF0YWxfZXJyb3IgIlwKLUJvb3RzdHJhcHBp bmcgZnJvbSBhIG5vbi1jaGVja2VkLW91dCBkaXN0cmlidXRpb24gaXMgcmlza3kuCi1JZiB5b3Ug d2lzaCB0byBib290c3RyYXAgYW55d2F5LCB1c2UgdGhlICctLWZvcmNlJyBvcHRpb24uIgotICAg IH0KLQotICAgIHJlcXVpcmVfY2hlY2tvdXRfb25seV9maWxlPToKLX0KLQotCi0jIHJlcXVpcmVf YWNsb2NhbF9hbWZsYWdzCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSAnJGFj bG9jYWxfYW1mbGFncycgaGFzIGEgc2Vuc2libGUgZGVmYXVsdCwgZXh0cmFjdGVkIGZyb20KLSMg J01ha2VmaWxlLmFtJyBpZiBuZWNlc3NhcnkuCi1yZXF1aXJlX2FjbG9jYWxfYW1mbGFncz1mdW5j X3JlcXVpcmVfYWNsb2NhbF9hbWZsYWdzCi1mdW5jX3JlcXVpcmVfYWNsb2NhbF9hbWZsYWdzICgp Ci17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfbWFrZWZpbGVfYW0KLQotICAgIF9H X3NlZF9leHRyYWN0X2FjbG9jYWxfYW1mbGFncz0nc3wjLiokfHwKLSAgICAgICAgL15bCSBdKkFD TE9DQUxfQU1GTEFHU1sJIF0qPS8gewotICAgICAgICAgICAgc3xeLio9WwkgXSpcKC4qXCl8YWNs b2NhbF9hbWZsYWdzPSJcMSJ8Ci0gICAgICAgICAgICBwCi0gICAgICAgIH0nCi0KLSAgICBfR19h Y2xvY2FsX2ZsYWdzX2NtZD1gJFNFRCAtbiAiJF9HX3NlZF9leHRyYWN0X2FjbG9jYWxfYW1mbGFn cyIgXAotICAgICAgICAiJG1ha2VmaWxlX2FtImAKLSAgICBldmFsICIkX0dfYWNsb2NhbF9mbGFn c19jbWQiCi0KLSAgICBmdW5jX3ZlcmJvc2UgIkFDTE9DQUxfQU1GTEFHUz0nJGFjbG9jYWxfYW1m bGFncyciCi0KLSAgICByZXF1aXJlX2FjbG9jYWxfYW1mbGFncz06Ci19Ci0KLQotIyByZXF1aXJl X2F1dG9oZWFkZXIKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNraXAgYXV0b2hlYWRlciBpZiBp dCdzIG5vdCBuZWVkZWQuCi1yZXF1aXJlX2F1dG9oZWFkZXI9ZnVuY19yZXF1aXJlX2F1dG9oZWFk ZXIKLWZ1bmNfcmVxdWlyZV9hdXRvaGVhZGVyICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAg dGVzdCB0cnVlID0gIiRBVVRPSEVBREVSIiB8fCB7Ci0gICAgICBmdW5jX2V4dHJhY3RfdHJhY2Ug QUNfQ09ORklHX0hFQURFUlMKLSAgICAgIHRlc3QgLW4gIiRmdW5jX2V4dHJhY3RfdHJhY2VfcmVz dWx0IiBcCi0JICB8fCBmdW5jX2V4dHJhY3RfdHJhY2UgQUNfQ09ORklHX0hFQURFUgotCi0gICAg ICB0ZXN0IC1uICIkZnVuY19leHRyYWN0X3RyYWNlX3Jlc3VsdCIgfHwgewotICAgICAgICBBVVRP SEVBREVSPXRydWUKLQotICAgICAgICBmdW5jX3ZlcmJvc2UgImV4cG9ydCBBVVRPSEVBREVSPSck QVVUT0hFQURFUiciCi0KLSAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHNlYXJjaCByZXN1bHQgaXMg dmlzaWJsZSB0byBzdWJzaGVsbHMKLSAgICAgICAgZXhwb3J0IEFVVE9IRUFERVIKLSAgICAgIH0K LSAgICB9Ci0KLSAgICByZXF1aXJlX2F1dG9oZWFkZXI9OgotfQotCi0KLSMgcmVxdWlyZV9hdXRv bWFrZV9vcHRpb25zCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFeHRyYWN0IG9wdGlv bnMgZnJvbSBBTV9BVVRPTUFLRV9JTklULgotcmVxdWlyZV9hdXRvbWFrZV9vcHRpb25zPWZ1bmNf cmVxdWlyZV9hdXRvbWFrZV9vcHRpb25zCi1mdW5jX3JlcXVpcmVfYXV0b21ha2Vfb3B0aW9ucyAo KQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfZXh0cmFjdF90cmFjZSBBTV9JTklUX0FV VE9NQUtFCi0gICAgYXV0b21ha2Vfb3B0aW9ucz0kZnVuY19leHRyYWN0X3RyYWNlX3Jlc3VsdAot Ci0gICAgcmVxdWlyZV9hdXRvbWFrZV9vcHRpb25zPToKLX0KLQotCi0jIHJlcXVpcmVfYXV0b3Bv aW50Ci0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIFNraXAgYXV0b3BvaW50IGlmIGl0J3Mgbm90IG5l ZWRlZC4KLXJlcXVpcmVfYXV0b3BvaW50PWZ1bmNfcmVxdWlyZV9hdXRvcG9pbnQKLWZ1bmNfcmVx dWlyZV9hdXRvcG9pbnQgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICB0ZXN0IHRydWUgPSAi JEFVVE9QT0lOVCIgfHwgewotICAgICAgZnVuY19leHRyYWN0X3RyYWNlIEFNX0dOVV9HRVRURVhU X1ZFUlNJT04KLQotICAgICAgdGVzdCAtbiAiJGZ1bmNfZXh0cmFjdF90cmFjZV9yZXN1bHQiIHx8 IHsKLSAgICAgICAgQVVUT1BPSU5UPXRydWUKLQotICAgICAgICBmdW5jX3ZlcmJvc2UgImV4cG9y dCBBVVRPUE9JTlQ9JyRBVVRPUE9JTlQnIgotCi0gICAgICAgICMgTWFrZSBzdXJlIHRoZSBzZWFy Y2ggcmVzdWx0IGlzIHZpc2libGUgdG8gc3Vic2hlbGxzCi0gICAgICAgIGV4cG9ydCBBVVRPUE9J TlQKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXF1aXJlX2F1dG9wb2ludD06Ci19Ci0KLQotIyBy ZXF1aXJlX2Jvb3RzdHJhcF91cHRvZGF0ZQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IyBDb21wbGFpbiBpZiB0aGUgdmVyc2lvbiBvZiBib290c3RyYXAgaW4gdGhlIGdudWxpYiBkaXJl Y3RvcnkgZGlmZmVycwotIyBmcm9tIHRoZSBvbmUgd2UgYXJlIHJ1bm5pbmcuCi1yZXF1aXJlX2Jv b3RzdHJhcF91cHRvZGF0ZT1mdW5jX3JlcXVpcmVfYm9vdHN0cmFwX3VwdG9kYXRlCi1mdW5jX3Jl cXVpcmVfYm9vdHN0cmFwX3VwdG9kYXRlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJl cXVpcmVfYnVpbGRfYXV4Ci0KLSAgICBfR19ib290c3RyYXBfc291cmNlcz0iCi0gICAgICAkYnVp bGRfYXV4L2Jvb3RzdHJhcC5pbgotICAgICAgJGJ1aWxkX2F1eC9leHRyYWN0LXRyYWNlCi0gICAg ICAkYnVpbGRfYXV4L2Z1bmNsaWIuc2gKLSAgICAgICRidWlsZF9hdXgvb3B0aW9ucy1wYXJzZXIK LSAgICAiCi0KLSAgICBfR19taXNzaW5nX2Jvb3RzdHJhcF9zb3VyY2VzPWZhbHNlCi0gICAgZm9y IF9HX3NyYyBpbiAkX0dfYm9vdHN0cmFwX3NvdXJjZXM7IGRvCi0gICAgICB0ZXN0IC1mICIkX0df c3JjIiB8fCBfR19taXNzaW5nX2Jvb3RzdHJhcF9zb3VyY2VzPToKLSAgICBkb25lCi0KLSAgICBp ZiAkX0dfbWlzc2luZ19ib290c3RyYXBfc291cmNlczsgdGhlbgotICAgICAgZnVuY193YXJuaW5n IHVwZ3JhZGUgIlwKLVBsZWFzZSBhZGQgYm9vdHN0cmFwIHRvIHlvdXIgZ251bGliX21vZHVsZXMg bGlzdCBpbgotJ2Jvb3RzdHJhcC5jb25mJywgc28gdGhhdCBJIGNhbiB0ZWxsIHlvdSB3aGVuIHRo ZXJlIGFyZQotdXBkYXRlcyBhdmFpbGFibGUuIgotICAgIGVsc2UKLSAgICAgIHJtIC1mIGJvb3Rz dHJhcC5uZXcKLSAgICAgICRidWlsZF9hdXgvaW5saW5lLXNvdXJjZSAkYnVpbGRfYXV4L2Jvb3Rz dHJhcC5pbiA+IGJvb3RzdHJhcC5uZXcKLQotICAgICAgaWYgZnVuY19jbXBfcyAiJHByb2dwYXRo IiBib290c3RyYXAubmV3OyB0aGVuCi0gICAgICAgIHJtIC1mIGJvb3RzdHJhcC5uZXcKLQlmdW5j X3ZlcmJvc2UgImJvb3RzdHJhcCBzY3JpcHQgdXAgdG8gZGF0ZSIKLSAgICAgIGVsc2UKLSAgICAg ICAgY2htb2QgNTU1IGJvb3RzdHJhcC5uZXcKLSAgICAgICAgZnVuY193YXJuaW5nIHVwZ3JhZGUg IlwKLUFuIHVwZGF0ZWQgYm9vdHN0cmFwIHNjcmlwdCBoYXMgYmVlbiBnZW5lcmF0ZWQgZm9yIHlv dSBpbgotJ2Jvb3RzdHJhcC5uZXcnLiAgQWZ0ZXIgeW91J3ZlIHZlcmlmaWVkIHRoYXQgeW91IHdh bnQKLXRoZSBjaGFuZ2VzLCB5b3UgY2FuIHVwZGF0ZSB3aXRoOgotICAgIG12IC1mIGJvb3RzdHJh cC5uZXcgJHByb2duYW1lCi0gICAgLi8kcHJvZ25hbWUKLQotT3IgeW91IGNhbiBkaXNhYmxlIHRo aXMgY2hlY2sgcGVybWFuZW50bHkgYnkgYWRkaW5nIHRoZQotZm9sbG93aW5nIHRvICdib290c3Ry YXAuY29uZic6Ci0gICAgcmVxdWlyZV9ib290c3RyYXBfdXB0b2RhdGU9OiIKLSAgICAgIGZpCi0g ICAgZmkKLQotICAgIHJlcXVpcmVfYm9vdHN0cmFwX3VwdG9kYXRlPToKLX0KLQotCi0jIHJlcXVp cmVfYnVpbGRfYXV4Ci0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0ICckYnVpbGRf YXV4JyBpcyBzZXQsIGFuZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgcG9pbnQgdG8gYW4KLSMgZXhp c3RpbmcgZGlyZWN0b3J5LCBjcmVhdGUgb25lLgotcmVxdWlyZV9idWlsZF9hdXg9ZnVuY19yZXF1 aXJlX2J1aWxkX2F1eAotZnVuY19yZXF1aXJlX2J1aWxkX2F1eCAoKQotewotICAgICRkZWJ1Z19j bWQKLQotICAgIHRlc3QgLW4gIiRidWlsZF9hdXgiIHx8IHsKLSAgICAgIGZ1bmNfZXh0cmFjdF90 cmFjZV9maXJzdCBBQ19DT05GSUdfQVVYX0RJUgotICAgICAgYnVpbGRfYXV4PSRmdW5jX2V4dHJh Y3RfdHJhY2VfZmlyc3RfcmVzdWx0Ci0gICAgICBmdW5jX2NoZWNrX2NvbmZpZ3VyYXRpb24gYnVp bGRfYXV4IFwKLSAgICAgICAgICAiQUNfQ09ORklHX0FVWF9ESVIoW25hbWUgb2YgYSBkaXJlY3Rv cnkgZm9yIGJ1aWxkIHNjcmlwdHNdKSIKLQotICAgICAgZnVuY192ZXJib3NlICJidWlsZF9hdXg9 JyRidWlsZF9hdXgnIgotICAgIH0KLQotICAgICRyZXF1aXJlX3ZjX2lnbm9yZV9maWxlcwotCi0g ICAgIyBJZiB0aGUgYnVpbGRfYXV4IGRpcmVjdG9yeSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQg bm93LCBhbmQgbWFyayBpdAotICAgICMgYXMgaWdub3JlZCBmb3IgdGhlIFZDUy4KLSAgICBpZiB0 ZXN0ICEgLWQgIiRidWlsZF9hdXgiOyB0aGVuCi0gICAgICBmdW5jX3Nob3dfZXZhbCAibWtkaXIg JyRidWlsZF9hdXgnIgotCi0gICAgICB0ZXN0IC1uICIkdmNfaWdub3JlX2ZpbGVzIiBcCi0gICAg ICAgICAgfHwgZnVuY19pbnNlcnRfaWZfYWJzZW50ICIkYnVpbGRfYXV4IiAkdmNfaWdub3JlX2Zp bGVzCi0gICAgZmkKLQotICAgIHJlcXVpcmVfYnVpbGRfYXV4PToKLX0KLQotCi0jIHJlcXVpcmVf YnVpbGRyZXFfYXV0b2J1aWxkCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyeSB0 byBmaW5kIHdoZXRoZXIgdGhlIGJvb3RzdHJhcCByZXF1aXJlcyBhdXRvYnVpbGQuCi1yZXF1aXJl X2J1aWxkcmVxX2F1dG9idWlsZD1mdW5jX3JlcXVpcmVfYnVpbGRyZXFfYXV0b2J1aWxkCi1mdW5j X3JlcXVpcmVfYnVpbGRyZXFfYXV0b2J1aWxkICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAg JHJlcXVpcmVfbWFjcm9fZGlyCi0KLSAgICB0ZXN0IC1mICIkbWFjcm9fZGlyL2F1dG9idWlsZC5t NCIgXAotICAgICAgICB8fCBwcmludGYgJyVzXG4nICIkYnVpbGRyZXEiIHxmdW5jX2dyZXBfcSAn XlsJIF0qYXV0b2J1aWxkJyBcCi0gICAgICAgIHx8IHsKLSAgICAgIGZ1bmNfZXh0cmFjdF90cmFj ZSBBQl9JTklUCi0gICAgICB0ZXN0IC1uICIkZnVuY19leHRyYWN0X3RyYWNlX3Jlc3VsdCIgJiYg ewotICAgICAgICBmdW5jX2FwcGVuZCBidWlsZHJlcSAnYXV0b2J1aWxkIC0gaHR0cDovL2pvc2Vm c3Nvbi5vcmcvYXV0b2J1aWxkLwotJwotICAgICAgICBmdW5jX3ZlcmJvc2UgImF1dG8tYWRkaW5n ICdhdXRvYnVpbGQnIHRvIGJ1aWxkIHJlcXVpcmVtZW50cyIKLSAgICAgIH0KLSAgICB9Ci0KLSAg ICByZXF1aXJlX2J1aWxkcmVxX2F1dG9idWlsZD06Ci19Ci0KLQotIyByZXF1aXJlX2J1aWxkcmVx X2F1dG9jb25mCi0jIHJlcXVpcmVfYnVpbGRyZXFfYXV0b3BvaW50Ci0jIHJlcXVpcmVfYnVpbGRy ZXFfbGlidG9vbGl6ZQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIGZp bmQgdGhlIG1pbmltdW0gY29tcGF0aWJsZSB2ZXJzaW9uIG9mIGF1dG9jb25mL2xpYnRvb2wKLSMg cmVxdWlyZWQgdG8gYm9vdHN0cmFwIHN1Y2Nlc3NmdWxseSwgYW5kIGFkZCBpdCB0byAnJGJ1aWxk cmVxJy4KLWZvciB0b29sIGluIGF1dG9jb25mIGxpYnRvb2xpemUgYXV0b3BvaW50OyBkbwotICBi PSR0b29sCi0gIHY9cmVxdWlyZV9idWlsZHJlcV8ke3Rvb2x9Ci0gIGY9ZnVuY18kdgotICBjYXNl ICR0b29sIGluCi0gICAgYXV0b2NvbmYpIG09QUNfUFJFUkVRIDs7Ci0gICAgbGlidG9vbGl6ZSkg bT1MVF9QUkVSRVE7IGI9bGlidG9vbCA7OwotICAgIGF1dG9wb2ludCkgbT1BTV9HTlVfR0VUVEVY VF9WRVJTSU9OIGI9Z2V0dGV4dCA7OwotICBlc2FjCi0KLSAgZXZhbCAkdic9JyRmJwotICAnJGYn ICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIFRoZSBmb2xsb3dpbmcgaXMgaWdub3Jl ZCBpZiB1bmRlZmluZWQsIGJ1dCBtaWdodCBiZSBuZWNlc3NhcnkKLSAgICAjIGluIG9yZGVyIGZv ciBgZnVuY19maW5kX3Rvb2xgIHRvIHJ1bi4KLSAgICAke3JlcXVpcmVfJyR0b29sJy06fQotCi0g ICAgcHJpbnRmICdcJyclc1xuJ1wnJyAiJGJ1aWxkcmVxIiB8ZnVuY19ncmVwX3EgJ1wnJ15bCSBd KickdG9vbFwnJyB8fCB7Ci0gICAgICBmdW5jX2V4dHJhY3RfdHJhY2UgJyRtJwotICAgICAgX0df dmVyc2lvbj0kZnVuY19leHRyYWN0X3RyYWNlX3Jlc3VsdAotICAgICAgdGVzdCAtbiAiJF9HX3Zl cnNpb24iICYmIHsKLSAgICAgICAgZnVuY19hcHBlbmQgYnVpbGRyZXEgIlwKLSAgICAgICAgICAg ICckdG9vbCcgJF9HX3ZlcnNpb24gaHR0cDovL3d3dy5nbnUub3JnL3MvJyRiJwotIgotICAgICAg ICBmdW5jX3ZlcmJvc2UgXAotICAgICAgICAgICAgImF1dG8tYWRkaW5nICdcJyR0b29sJy0kX0df dmVyc2lvbidcJycgdG8gYnVpbGQgcmVxdWlyZW1lbnRzIgotICAgICAgfQotICAgIH0KLQotICAg ICckdic9OgotICB9Ci0nCi1kb25lCi0KLQotIyByZXF1aXJlX2J1aWxkcmVxX2F1dG9tYWtlCi0j IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgVHJ5IHRvIGZpbmQgdGhlIG1pbmltdW0gY29t cGF0aWJsZSB2ZXJzaW9uIG9mIGF1dG9tYWtlIHJlcXVpcmVkIHRvCi0jIGJvb3RzdHJhcCBzdWNj ZXNzZnVsbHksIGFuZCBhZGQgaXQgdG8gJyRidWlsZHJlcScuCi1yZXF1aXJlX2J1aWxkcmVxX2F1 dG9tYWtlPWZ1bmNfcmVxdWlyZV9idWlsZHJlcV9hdXRvbWFrZQotZnVuY19yZXF1aXJlX2J1aWxk cmVxX2F1dG9tYWtlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgIyBpZiBhdXRvbWFrZSBp cyBub3QgYWxyZWFkeSBsaXN0ZWQgaW4gJGJ1aWxkcmVxLi4uCi0gICAgcHJpbnRmICclc1xuJyAi JGJ1aWxkcmVxIiB8ZnVuY19ncmVwX3EgYXV0b21ha2UgfHwgewotICAgICAgZnVuY19leHRyYWN0 X3RyYWNlIEFNX0lOSVRfQVVUT01BS0UKLQotICAgICAgIyAuLi5hbmQgQU1fSU5JVF9BVVRPTUFL RSBpcyBkZWNsYXJlZC4uLgotICAgICAgdGVzdCAtbiAiJGZ1bmNfZXh0cmFjdF90cmFjZV9yZXN1 bHQiICYmIHsKLSAgICAgICAgYXV0b21ha2VfdmVyc2lvbj1gJEVDSE8gIiRmdW5jX2V4dHJhY3Rf dHJhY2VfcmVzdWx0IiBcCi0gICAgICAgICAgIHwkU0VEIC1lICdzfFteMC05XSp8fCcgLWUgJ3N8 IC4qJHx8J2AKLSAgICAgICAgdGVzdCAtbiAiJGF1dG9tYWtlX3ZlcnNpb24iIHx8IGF1dG9tYWtl X3ZlcnNpb249LQotCi0gICAgICAgIGZ1bmNfYXBwZW5kIGJ1aWxkcmVxICJcCi0gICAgICAgICAg ICBhdXRvbWFrZSAkYXV0b21ha2VfdmVyc2lvbiBodHRwOi8vd3d3LmdudS5vcmcvcy9hdXRvbWFr ZQotIgotICAgICAgICBmdW5jX3ZlcmJvc2UgXAotICAgICAgICAgICAgImF1dG8tYWRkaW5nICdh dXRvbWFrZS0kYXV0b21ha2VfdmVyc2lvbicgdG8gYnVpbGQgcmVxdWlyZW1lbnRzIgotICAgICAg fQotICAgIH0KLQotICAgIHJlcXVpcmVfYnVpbGRyZXFfYXV0b21ha2U9OgotfQotCi0KLSMgcmVx dWlyZV9idWlsZHJlcV9wYXRjaAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEF1dG9tYXRp Y2FsbHkgYWRkIGEgcGF0Y2ggYnVpbGQtcmVxdWlyZW1lbnQgaWYgdGhlcmUgYXJlIGRpZmYgZmls ZXMKLSMgaW4gJGxvY2FsX2dsX3BhdGguCi1yZXF1aXJlX2J1aWxkcmVxX3BhdGNoPWZ1bmNfcmVx dWlyZV9idWlsZHJlcV9wYXRjaAotZnVuY19yZXF1aXJlX2J1aWxkcmVxX3BhdGNoICgpCi17Ci0g ICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfbG9jYWxfZ2xfcGF0aAotCi0gICAgIyBUaGlz IGVuc3VyZXMgUEFUQ0ggaXMgc2V0IGFwcHJvcHJpYXRlbHkgYnkgdGhlIHRpbWUKLSAgICAjIGZ1 bmNfY2hlY2tfdmVyc2lvbnMgZW5mb3JjZXMgJGJ1aWxkcmVxLgotICAgICRyZXF1aXJlX3BhdGNo Ci0KLSAgICAjIElmIHBhdGNoIGlzIG5vdCBhbHJlYWR5IGxpc3RlZCBpbiAkYnVpbGRyZXEuLi4K LSAgICBwcmludGYgJyVzXG4nICIkYnVpbGRyZXEiIHxmdW5jX2dyZXBfcSAnXlsJIF0qcGF0Y2gn IHx8IHsKLSAgICAgIGV2YWwgInNldCBkdW1teSAkbG9jYWxfZ2xfcGF0aF9xdW90ZWQiIDsgc2hp ZnQKLQotICAgICAgZm9yIF9HX2RpcgotICAgICAgZG8KLSAgICAgICAgIyBUaGUgdWdseSBmaW5k IGludm9jYXRpb24gaXMgbmVjZXNzYXJ5IHRvIGV4aXQgd2l0aCBub24temVybwotICAgICAgICAj IHN0YXR1cyBmb3Igb2xkIGZpbmQgYmluYXJpZXMgdGhhdCBkb24ndCBzdXBwb3J0IC1leGVjIGZ1 bGx5LgotICAgICAgICBpZiB0ZXN0ICEgLWQgIiRfR19kaXIiIFwKLSAgICAgICAgICAgIHx8IGZp bmQgIiRfR19kaXIiIC1uYW1lICIqLmRpZmYiIC1leGVjIGZhbHNlIHt9IFw7IDsgdGhlbiA6Ci0g ICAgICAgIGVsc2UKLSAgICAgICAgICBmdW5jX2FwcGVuZCBidWlsZHJlcSAicGF0Y2ggLSBodHRw Oi8vd3d3LmdudS5vcmcvcy9wYXRjaCRubCIKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQot ICAgICAgZG9uZQotICAgIH0KLQotICAgIHJlcXVpcmVfYnVpbGRyZXFfcGF0Y2g9OgotfQotCi0K LSMgcmVxdWlyZV9idWlsZHRvb2xzX3VwdG9kYXRlCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIyBFbnN1cmUgYWxsIHRoZSBwYWNrYWdlcyBsaXN0ZWQgaW4gQlVJTERSRVFTIGFyZSBh dmFpbGFibGUgb24gdGhlIGJ1aWxkCi0jIG1hY2hpbmUgYXQgdGhlIG1pbmltdW0gdmVyc2lvbnMg b3IgYmV0dGVyLgotcmVxdWlyZV9idWlsZHRvb2xzX3VwdG9kYXRlPWZ1bmNfcmVxdWlyZV9idWls ZHRvb2xzX3VwdG9kYXRlCi1mdW5jX3JlcXVpcmVfYnVpbGR0b29sc191cHRvZGF0ZSAoKQotewot ICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX2J1aWxkcmVxX2F1dG9idWlsZAotICAgICRy ZXF1aXJlX2J1aWxkcmVxX2F1dG9jb25mCi0gICAgJHJlcXVpcmVfYnVpbGRyZXFfYXV0b21ha2UK LSAgICAkcmVxdWlyZV9idWlsZHJlcV9saWJ0b29saXplCi0gICAgJHJlcXVpcmVfYnVpbGRyZXFf YXV0b3BvaW50Ci0gICAgJHJlcXVpcmVfYnVpbGRyZXFfcGF0Y2gKLQotICAgIHRlc3QgLW4gIiRi dWlsZHJlcSIgJiYgewotICAgICAgX0dfZXJyb3JfaGRyPQotCi0gICAgICBmdW5jX2NoZWNrX3Zl cnNpb25zICRidWlsZHJlcQotICAgICAgJGZ1bmNfY2hlY2tfdmVyc2lvbnNfcmVzdWx0IHx8IHsK LSAgICAgICAgdGVzdCAtbiAiJGJ1aWxkcmVxX3JlYWRtZSIgXAotICAgICAgICAgICAgJiYgdGVz dCAtZiAiJGJ1aWxkcmVxX3JlYWRtZSIgXAotICAgICAgICAgICAgJiYgX0dfZXJyb3JfaGRyPSJc Ci0kYnVpbGRyZXFfcmVhZG1lIGV4cGxhaW5zIGhvdyB0byBvYnRhaW4gdGhlc2UgcHJlcmVxdWlz aXRlIHByb2dyYW1zOgotIgotICAgICAgICBmdW5jX3N0cnRhYmxlIDAgMTEgMTIgMzYgXAotICAg ICAgICAgICAgIlByb2dyYW0iICJNaW5fdmVyc2lvbiIgIkhvbWVwYWdlIiAkYnVpbGRyZXEKLSAg ICAgICAgZnVuY19mYXRhbF9lcnJvciAiJF9HX2Vycm9yX2hkciRmdW5jX3N0cnRhYmxlX3Jlc3Vs dCIKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXF1aXJlX2J1aWxkdG9vbHNfdXB0b2RhdGU9Ogot fQotCi0KLSMgcmVxdWlyZV9jb3B5cmlnaHRfaG9sZGVyCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIyBFbnN1cmUgdGhlcmUgaXMgYSBzZW5zaWJsZSBub24tZW1wdHkgZGVmYXVsdCB2YWx1 ZSBpbiAnJGNvcHlyaWdodF9ob2xkZXInLgotcmVxdWlyZV9jb3B5cmlnaHRfaG9sZGVyPWZ1bmNf cmVxdWlyZV9jb3B5cmlnaHRfaG9sZGVyCi1mdW5jX3JlcXVpcmVfY29weXJpZ2h0X2hvbGRlciAo KQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIHRlc3QgLW4gIiRjb3B5cmlnaHRfaG9sZGVyIiB8 fCB7Ci0gICAgICBjb3B5cmlnaHRfaG9sZGVyPSdGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4nCi0gICAgICBmdW5jX3dhcm5pbmcgc2V0dGluZ3MgIlwKLVBsZWFzZSBzZXQgY29weXJpZ2h0 X2hvbGRlciBleHBsaWNpdGx5IGluICdib290c3RyYXAuY29uZic7Ci1kZWZhdWx0aW5nIHRvICck Y29weXJpZ2h0X2hvbGRlcicuIgotICAgIH0KLQotICAgIHJlcXVpcmVfY29weXJpZ2h0X2hvbGRl cj06Ci19Ci0KLQotIyByZXF1aXJlX2RvY19iYXNlCi0jIC0tLS0tLS0tLS0tLS0tLS0KLSMgRW5z dXJlIGRvY19iYXNlIGhhcyBhIHNlbnNpYmxlIHZhbHVlLCBleHRyYWN0ZWQgZnJvbSAnZ251bGli LWNhY2hlLm00JwotIyBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGxldHRpbmcgJ2dudWxpYi10b29s JyBwaWNrIGEgZGVmYXVsdC4KLXJlcXVpcmVfZG9jX2Jhc2U9ZnVuY19yZXF1aXJlX2RvY19iYXNl Ci1mdW5jX3JlcXVpcmVfZG9jX2Jhc2UgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkcmVx dWlyZV9nbnVsaWJfY2FjaGUKLQotICAgIHRlc3QgLWYgIiRnbnVsaWJfY2FjaGUiICYmIHRlc3Qg LXogIiRkb2NfYmFzZSIgJiYgewotICAgICAgZnVuY19leHRyYWN0X3RyYWNlX2ZpcnN0ICJnbF9E T0NfQkFTRSIgIiRnbnVsaWJfY2FjaGUiCi0gICAgICBkb2NfYmFzZT0kZnVuY19leHRyYWN0X3Ry YWNlX2ZpcnN0X3Jlc3VsdAotCi0gICAgICB0ZXN0IC1uICIkZG9jX2Jhc2UiICYmIGZ1bmNfdmVy Ym9zZSAiZG9jX2Jhc2U9JyRkb2NfYmFzZSciCi0gICAgfQotCi0gICAgcmVxdWlyZV9kb2NfYmFz ZT06Ci19Ci0KLQotIyByZXF1aXJlX2RvdGdpdG1vZHVsZXMKLSMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0jIEVuc3VyZSB3ZSBoYXZlIGEgJy5naXRtb2R1bGVzJyBmaWxlLCB3aXRoIGFwcHJvcHJp YXRlICdnbnVsaWInIHNldHRpbmdzLgotcmVxdWlyZV9kb3RnaXRtb2R1bGVzPWZ1bmNfcmVxdWly ZV9kb3RnaXRtb2R1bGVzCi1mdW5jX3JlcXVpcmVfZG90Z2l0bW9kdWxlcyAoKQotewotICAgICRk ZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX2dpdAotCi0gICAgdGVzdCB0cnVlID0gIiRHSVQiIHx8 IHsKLSAgICAgICMgQSBnbnVsaWIgZW50cnkgaW4gLmdpdG1vZHVsZXMgYWx3YXlzIHRha2VzIHBy ZWNlZGVuY2UuCi0gICAgICBfR19wYXRoPWAkR0lUIGNvbmZpZyAtLWZpbGUgLmdpdG1vZHVsZXMg c3VibW9kdWxlLmdudWxpYi5wYXRoIDI+L2Rldi9udWxsYAotCi0gICAgICB0ZXN0IC1uICIkX0df cGF0aCIgfHwgewotICAgICAgICAkcmVxdWlyZV92Y19pZ25vcmVfZmlsZXMKLQotICAgICAgICBm dW5jX3ZlcmJvc2UgImNyZWF0aW5nICcuZ2l0bW9kdWxlcyciCi0KLSAgICAgICAgIyBJZiB0aGUg LmdpdG1vZHVsZXMgZmlsZSBkb2Vzbid0IGV4aXN0LCBjcmVhdGUgaXQgbm93LCBhbmQgbWFyawot ICAgICAgICAjIGl0IGFzIGlnbm9yZWQgZm9yIHRoZSBWQ1MuCi0gICAgICAgIHRlc3QgLW4gIiRn bnVsaWJfcGF0aCIgfHwgZ251bGliX3BhdGg9Z251bGliCi0gICAgICAgIHRlc3QgLW4gIiRnbnVs aWJfdXJsIiAgfHwgZ251bGliX3VybD1naXQ6Ly9naXQuc3YuZ251Lm9yZy9nbnVsaWIKLQotICAg ICAgICB7Ci0gICAgICAgICAgZWNobyAnW3N1Ym1vZHVsZSAiZ251bGliIl0nCi0gICAgICAgICAg ZWNobyAiCXBhdGggPSAkZ251bGliX3BhdGgiCi0gICAgICAgICAgZWNobyAiCXVybCA9ICRnbnVs aWJfdXJsIgotICAgICAgICB9ID4+IC5naXRtb2R1bGVzCi0KLSAgICAgICAgdGVzdCAtbiAiJHZj X2lnbm9yZV9maWxlcyIgXAotICAgICAgICAgIHx8IGZ1bmNfaW5zZXJ0X2lmX2Fic2VudCAiLmdp dG1vZHVsZXMiICR2Y19pZ25vcmVfZmlsZXMKLSAgICAgIH0KLSAgICB9Ci0KLSAgICByZXF1aXJl X2RvdGdpdG1vZHVsZXM9OgotfQotCi0KLSMgcmVxdWlyZV9leHRyYV9sb2NhbGVfY2F0ZWdvcmll cwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGVyZSBpcyBh IGRlZmF1bHQgdmFsdWUgaW4gJyRleHRyYV9sb2NhbGVfY2F0ZWdvcmllcycKLXJlcXVpcmVfZXh0 cmFfbG9jYWxlX2NhdGVnb3JpZXM9ZnVuY19yZXF1aXJlX2V4dHJhX2xvY2FsZV9jYXRlZ29yaWVz Ci1mdW5jX3JlcXVpcmVfZXh0cmFfbG9jYWxlX2NhdGVnb3JpZXMgKCkKLXsKLSAgICAkZGVidWdf Y21kCi0KLSAgICAjIERlZmF1bHRzIHRvIGVtcHR5LCBzbyBydW4gd2l0aCB3aGF0ZXZlciB2YWx1 ZSBtYXkgaGF2ZSBiZWVuIHNldCBpbgotICAgICMgJ2Jvb3RzdHJhcC5jb25mJy4KLSAgICByZXF1 aXJlX2V4dHJhX2xvY2FsZV9jYXRlZ29yaWVzPToKLX0KLQotCi0jIHJlcXVpcmVfZ2l0Ci0jIC0t LS0tLS0tLS0tCi0jIElnbm9yZSBnaXQgaWYgaXQncyBub3QgYXZhaWxhYmxlLCBvciB3ZSdyZSBu b3QgaW4gYSBnaXQgY2hlY2tvdXQgdHJlZS4KLXJlcXVpcmVfZ2l0PWZ1bmNfcmVxdWlyZV9naXQK LWZ1bmNfcmVxdWlyZV9naXQgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkb3B0X3NraXBf Z2l0ICYmIEdJVD10cnVlCi0KLSAgICB0ZXN0IHRydWUgPSAiJEdJVCIgfHwgewotICAgICAgaWYg dGVzdCAtZCAuZ2l0Ly47IHRoZW4KLSAgICAgICAgKCRHSVQgLS12ZXJzaW9uKSA+L2Rldi9udWxs IDI+JjEgfHwgR0lUPXRydWUKLSAgICAgIGZpCi0gICAgfQotCi0gICAgZnVuY192ZXJib3NlICJH SVQ9JyRHSVQnIgotCi0gICAgcmVxdWlyZV9naXQ9OgotfQotCi0KLSMgcmVxdWlyZV9nbnVsaWJf Y2FjaGUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoZXJlIGlzIGEgbm9uLWVt cHR5IGRlZmF1bHQgZm9yICckZ251bGliX2NhY2hlJywgYW5kIHRoYXQgaXQKLSMgbmFtZXMgYW4g ZXhpc3RpbmcgZmlsZS4KLXJlcXVpcmVfZ251bGliX2NhY2hlPWZ1bmNfcmVxdWlyZV9nbnVsaWJf Y2FjaGUKLWZ1bmNfcmVxdWlyZV9nbnVsaWJfY2FjaGUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0K LSAgICAkcmVxdWlyZV9tYWNyb19kaXIKLQotICAgIHRlc3QgLW4gIiRnbnVsaWJfY2FjaGUiIFwK LSAgICAgIHx8IGdudWxpYl9jYWNoZT0kbWFjcm9fZGlyL2dudWxpYi1jYWNoZS5tNAotCi0gICAg ZnVuY192ZXJib3NlICJmb3VuZCAnJGdudWxpYl9jYWNoZSciCi0KLSAgICByZXF1aXJlX2dudWxp Yl9jYWNoZT06Ci19Ci0KLQotIyByZXF1aXJlX2dudWxpYl9jb3B5X2NtZAotIyAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotIyBPbmx5IGNhbGN1bGF0ZSB0aGUgb3B0aW9ucyBmb3IgY29weWluZyBm aWxlcyB3aXRoIGdudWxpYiBvbmNlLgotcmVxdWlyZV9nbnVsaWJfY29weV9jbWQ9ZnVuY19yZXF1 aXJlX2dudWxpYl9jb3B5X2NtZAotZnVuY19yZXF1aXJlX2dudWxpYl9jb3B5X2NtZCAoKQotewot ICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJlX2dudWxpYl90b29sCi0gICAgJHJlcXVpcmVf Z251bGliX3Rvb2xfYmFzZV9vcHRpb25zCi0KLSAgICBnbnVsaWJfY29weV9jbWQ9IiRnbnVsaWJf dG9vbCAkZ251bGliX3Rvb2xfYmFzZV9vcHRpb25zIC0tY29weS1maWxlIgotICAgICRvcHRfY29w eSB8fCBmdW5jX2FwcGVuZCBnbnVsaWJfY29weV9jbWQgIiAtLXN5bWxpbmsiCi0gICAgJG9wdF9x dWlldCB8fCBmdW5jX2FwcGVuZCBnbnVsaWJfY29weV9jbWQgIiAtLXZlcmJvc2UiCi0KLSAgICBy ZXF1aXJlX2dudWxpYl9jb3B5X2NtZD06Ci19Ci0KLQotIyByZXF1aXJlX2dudWxpYl9tZXJnZV9j aGFuZ2Vsb2cKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlZSBpZiB3ZSBj YW4gdXNlIGdudWxpYidzIGdpdC1tZXJnZS1jaGFuZ2Vsb2cgbWVyZ2UgZHJpdmVyLgotcmVxdWly ZV9nbnVsaWJfbWVyZ2VfY2hhbmdlbG9nPWZ1bmNfcmVxdWlyZV9nbnVsaWJfbWVyZ2VfY2hhbmdl bG9nCi1mdW5jX3JlcXVpcmVfZ251bGliX21lcmdlX2NoYW5nZWxvZyAoKQotewotICAgICRkZWJ1 Z19jbWQKLQotICAgIHRlc3QgLWYgQ2hhbmdlTG9nICYmIHsKLSAgICAgICRyZXF1aXJlX2dpdAot Ci0gICAgICBmdW5jX2dyZXBfcSAnXlwoL1x8XClDaGFuZ2VMb2ckJyAuZ2l0aWdub3JlIHx8IHRl c3QgdHJ1ZSA9ICIkR0lUIiB8fCB7Ci0gICAgICAgIGlmICRHSVQgY29uZmlnIG1lcmdlLm1lcmdl LWNoYW5nZWxvZy5kcml2ZXIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAgIDoKLSAgICAgICAg ZWxpZiAoZ2l0LW1lcmdlLWNoYW5nZWxvZyAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhl bgotICAgICAgICAgIGZ1bmNfZWNobyAiaW5pdGlhbGl6aW5nIGdpdC1tZXJnZS1jaGFuZ2Vsb2cg ZHJpdmVyIgotICAgICAgICAgICRHSVQgY29uZmlnIG1lcmdlLm1lcmdlLWNoYW5nZWxvZy5uYW1l ICdHTlUtc3R5bGUgQ2hhbmdlTG9nIG1lcmdlIGRyaXZlcicKLSAgICAgICAgICAkR0lUIGNvbmZp ZyBtZXJnZS5tZXJnZS1jaGFuZ2Vsb2cuZHJpdmVyICdnaXQtbWVyZ2UtY2hhbmdlbG9nICVPICVB ICVCJwotICAgICAgICBlbHNlCi0gICAgICAgICAgZnVuY193YXJuaW5nIHJlY29tbWVuZCBcCi0g ICAgICAgICAgICAgICJDb25zaWRlciBpbnN0YWxsaW5nIGdpdC1tZXJnZS1jaGFuZ2Vsb2cgZnJv bSBnbnVsaWIuIgotICAgICAgICBmaQotICAgICAgfQotICAgIH0KLQotICAgIHJlcXVpcmVfZ251 bGliX21lcmdlX2NoYW5nZWxvZz06Ci19Ci0KLQotIyByZXF1aXJlX2dudWxpYl9tawotIyAtLS0t LS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgZ251bGliX21rIGhhcyBhIHNlbnNpYmxlIHZhbHVlLCBl eHRyYWN0ZWQgZnJvbSAnZ251bGliLWNhY2hlLm00JwotIyBpZiBwb3NzaWJsZSwgb3RoZXJ3aXNl IGxldHRpbmcgJ2dudWxpYi10b29sJyBwaWNrIGEgZGVmYXVsdC4KLXJlcXVpcmVfZ251bGliX21r PWZ1bmNfcmVxdWlyZV9nbnVsaWJfbWsKLWZ1bmNfcmVxdWlyZV9nbnVsaWJfbWsgKCkKLXsKLSAg ICAkZGVidWdfY21kCi0KLSAgICAkcmVxdWlyZV9nbnVsaWJfY2FjaGUKLQotICAgIHRlc3QgLWYg IiRnbnVsaWJfY2FjaGUiICYmIHRlc3QgLXogIiRnbnVsaWJfbWsiICYmIHsKLSAgICAgIGZ1bmNf ZXh0cmFjdF90cmFjZV9maXJzdCAiZ2xfTUFLRUZJTEVfTkFNRSIgIiRnbnVsaWJfY2FjaGUiCi0g ICAgICBnbnVsaWJfbWs9JGZ1bmNfZXh0cmFjdF90cmFjZV9maXJzdF9yZXN1bHQKLQotICAgICAg dGVzdCAtbiAiJGdudWxpYl9tayIgJiYgZnVuY192ZXJib3NlICJnbnVsaWJfbWs9JyRnbnVsaWJf bWsnIgotICAgIH0KLQotICAgIHJlcXVpcmVfZ251bGliX21rPToKLX0KLQotCi0jIHJlcXVpcmVf Z251bGliX25hbWUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgZ251bGliX25hbWUg aGFzIGEgc2Vuc2libGUgdmFsdWUsIGV4dHJhY3RlZCBmcm9tICdnbnVsaWItY2FjaGUubTQnCi0j IGlmIHBvc3NpYmxlLCBvdGhlcndpc2UgbGV0dGluZyAnZ251bGliLXRvb2wnIHBpY2sgYSBkZWZh dWx0LgotcmVxdWlyZV9nbnVsaWJfbmFtZT1mdW5jX3JlcXVpcmVfZ251bGliX25hbWUKLWZ1bmNf cmVxdWlyZV9nbnVsaWJfbmFtZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICRyZXF1aXJl X2dudWxpYl9jYWNoZQotCi0gICAgdGVzdCAtZiAiJGdudWxpYl9jYWNoZSIgJiYgdGVzdCAteiAi JGdudWxpYl9uYW1lIiAmJiB7Ci0gICAgICBmdW5jX2V4dHJhY3RfdHJhY2VfZmlyc3QgImdsX0xJ QiIgIiRnbnVsaWJfY2FjaGUiCi0gICAgICBnbnVsaWJfbmFtZT0kZnVuY19leHRyYWN0X3RyYWNl X2ZpcnN0X3Jlc3VsdAotCi0gICAgICB0ZXN0IC1uICIkZ251bGliX25hbWUiICYmIGZ1bmNfdmVy Ym9zZSAiZ251bGliX25hbWU9JyRnbnVsaWJfbmFtZSciCi0gICAgfQotCi0gICAgcmVxdWlyZV9n bnVsaWJfbmFtZT06Ci19Ci0KLQotIyByZXF1aXJlX2dudWxpYl9wYXRoCi0jIHJlcXVpcmVfZ251 bGliX3VybAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSAnZ251bGliX3BhdGgnIGFu ZCAnZ251bGliX3VybCcgYXJlIHNldC4KLXJlcXVpcmVfZ251bGliX3BhdGg9ZnVuY19yZXF1aXJl X2RvdGdpdG1vZHVsZXNfcGFyYW1ldGVycwotcmVxdWlyZV9nbnVsaWJfdXJsPWZ1bmNfcmVxdWly ZV9kb3RnaXRtb2R1bGVzX3BhcmFtZXRlcnMKLWZ1bmNfcmVxdWlyZV9kb3RnaXRtb2R1bGVzX3Bh cmFtZXRlcnMgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkcmVxdWlyZV9naXQKLQotICAg IHRlc3QgdHJ1ZSA9ICIkR0lUIiAmJiB7Ci0gICAgICAjIElmIHdlIGNhbid0IGZpbmQgZ2l0IChv ciBpZiB0aGUgdXNlciBzcGVjaWZpZWQgJy0tc2tpcC1naXQnKSwKLSAgICAgICMgdGhlbiB1c2Ug YW4gZXhpc3RpbmcgZ251bGliIGRpcmVjdG9yeSBzcGVjaWZpZWQgd2l0aAotICAgICAgIyAnLS1n bnVsaWItc3JjZGlyJyBpZiBwb3NzaWJsZS4KLSAgICAgIHRlc3QgLW4gIiRnbnVsaWJfcGF0aCIg XAotICAgICAgICAgIHx8IHRlc3QgISAteCAiJG9wdF9nbnVsaWJfc3JjZGlyL2dudWxpYi10b29s IiBcCi0gICAgICAgICAgfHwgZ251bGliX3BhdGg9JG9wdF9nbnVsaWJfc3JjZGlyCi0gICAgfQot Ci0KLSAgICAkcmVxdWlyZV9kb3RnaXRtb2R1bGVzCi0KLSAgICB0ZXN0IC1mIC5naXRtb2R1bGVz ICYmIHsKLSAgICAgICMgRXh0cmFjdCB0aGUgcGFyYW1ldGVycyB3aXRoIHNlZCwgc2luY2UgZ2l0 IG1heSBiZSBtaXNzaW5nCi0gICAgICB0ZXN0IC1uICIkZ251bGliX3BhdGgiIFwKLSAgICAgICAg fHwgZ251bGliX3BhdGg9YCRTRUQgLWUgJy9eLnN1Ym1vZHVsZSAiZ251bGliIi4kLywkewotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvWwkgXSpwYXRoICo9ICovewotCQkJICAg ICAgICAgICAgIHN8WyAgIF0qfHxnO3N8XltePV0qPXx8O3AKLQkJCSAgICAgICAgICAgfQotCQkg ICAgICAgICAgICAgICAgIH0KLQkJCQkgZCcgLmdpdG1vZHVsZXMgfCRTRUQgMXFgCi0gICAgICB0 ZXN0IC1uICIkZ251bGliX3VybCIgXAotICAgICAgICB8fCBnbnVsaWJfdXJsPWAkU0VEIC1lICcv Xi5zdWJtb2R1bGUgImdudWxpYiIuJC8sJHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvWwkgXSp1cmwgKj0gKi97Ci0JCQkgICAgICAgICAgICBzfFsgICBdKnx8ZztzfF5bXj1d Kj18fDtwCi0JCQkgICAgICAgICAgfQotCQkgICAgICAgICAgICAgICAgfQotCQkJCWQnIC5naXRt b2R1bGVzIHwkU0VEIDFxYAotCi0gICAgICBmdW5jX3ZlcmJvc2UgImdudWxpYl9wYXRoPSckZ251 bGliX3BhdGgnIgotICAgICAgZnVuY192ZXJib3NlICJnbnVsaWJfdXJsPSckZ251bGliX3VybCci Ci0gICAgfQotCi0gICAgcmVxdWlyZV9nbnVsaWJfcGF0aD06Ci0gICAgcmVxdWlyZV9nbnVsaWJf dXJsPToKLX0KLQotCi0jIHJlcXVpcmVfZ251bGliX3N1Ym1vZHVsZQotIyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlcmUgaXMgYSBjdXJyZW50IGdudWxpYiBzdWJt b2R1bGUgYXQgJyRnbnVsaWJfcGF0aCcuCi1yZXF1aXJlX2dudWxpYl9zdWJtb2R1bGU9ZnVuY19y ZXF1aXJlX2dudWxpYl9zdWJtb2R1bGUKLWZ1bmNfcmVxdWlyZV9nbnVsaWJfc3VibW9kdWxlICgp Ci17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfZ2l0Ci0KLSAgICBpZiB0ZXN0IHRy dWUgPSAiJEdJVCI7IHRoZW4KLSAgICAgIGZ1bmNfd2FybmluZyByZWNvbW1lbmQgXAotICAgICAg ICAgICJObyAnZ2l0JyBmb3VuZDsgaW1wb3J0ZWQgZ251bGliIG1vZHVsZXMgbWF5IGJlIG91dGRh dGVkLiIKLSAgICBlbHNlCi0gICAgICAkcmVxdWlyZV9nbnVsaWJfcGF0aAotICAgICAgJHJlcXVp cmVfZ251bGliX3VybAotCi0gICAgICBpZiB0ZXN0IC1mIC5naXRtb2R1bGVzICYmIHRlc3QgLWYg IiRnbnVsaWJfcGF0aC9nbnVsaWItdG9vbCI7IHRoZW4KLSAgICAgICAgOiBBbGwgcHJlc2VudCBh bmQgY29ycmVjdC4KLQotICAgICAgZWxpZiB0ZXN0IC1uICIkb3B0X2dudWxpYl9zcmNkaXIiOyB0 aGVuCi0gICAgICAgICMgT2xkZXIgZ2l0IGNhbid0IGNsb25lIGludG8gYW4gZW1wdHkgZGlyZWN0 b3J5LgotICAgICAgICBybWRpciAiJGdudWxpYl9wYXRoIiAyPi9kZXYvbnVsbAotICAgICAgICBm dW5jX3Nob3dfZXZhbCAiJEdJVCBjbG9uZSAtLXJlZmVyZW5jZSAnJG9wdF9nbnVsaWJfc3JjZGly JyBcCi0gICAgICAgICAgICAgICAgJyRnbnVsaWJfdXJsJyAnJGdudWxpYl9wYXRoJyIgXAotICAg ICAgICAgICAgfHwgZnVuY19mYXRhbF9lcnJvciAiVW5hYmxlIHRvIGZldGNoIGdudWxpYiBzdWJt b2R1bGUuIgotCi0gICAgICAjIFdpdGhvdXQgLS1nbnVsaWItc3JjZGlyLCBhbmQgbm8gZXhpc3Rp bmcgY2hlY2tlZCBvdXQgc3VibW9kdWxlLCB3ZQotICAgICAgIyBjcmVhdGUgYSBuZXcgc2hhbGxv dyBjbG9uZSBvZiB0aGUgcmVtb3RlIGdudWxpYiByZXBvc2l0b3J5LgotICAgICAgZWxzZQotICAg ICAgICB0cmFwIGZ1bmNfY2xlYW51cF9nbnVsaWIgMSAyIDEzIDE1Ci0KLSAgICAgICAgc2hhbGxv dz0KLSAgICAgICAgdGVzdCAtbiAiJGdudWxpYl9jbG9uZV9zaW5jZSIgJiYgXAotICAgICAgICAg ICAgJEdJVCBjbG9uZSAtaCAyPiYxIHxmdW5jX2dyZXBfcSAtLSAtLXNoYWxsb3ctc2luY2UgXAot ICAgICAgICAgICAgJiYgc2hhbGxvdz0iLS1zaGFsbG93LXNpbmNlPSRnbnVsaWJfY2xvbmVfc2lu Y2UiCi0KLSAgICAgICAgZnVuY19zaG93X2V2YWwgIiRHSVQgY2xvbmUgJHNoYWxsb3cgJyRnbnVs aWJfdXJsJyAnJGdudWxpYl9wYXRoJyIgXAotICAgICAgICAgIGZ1bmNfY2xlYW51cF9nbnVsaWIK LQotCSMgRklYTUU6IFNvbGFyaXMgL2Jpbi9zaCB3aWxsIHRyeSB0byBleGVjdXRlICctJyBpZiBh bnkgb2YKLQkjICAgICAgICB0aGVzZSBzaWduYWxzIGFyZSBjYXVnaHQgYWZ0ZXIgdGhpcy4KLSAg ICAgICAgdHJhcCAtIDEgMiAxMyAxNQotICAgICAgZmkKLQotICAgICAgIyBNYWtlIHN1cmUgd2Un dmUgY2hlY2tlZCBvdXQgdGhlIGNvcnJlY3QgcmV2aXNpb24gb2YgZ251bGliLgotICAgICAgZnVu Y19zaG93X2V2YWwgIiRHSVQgc3VibW9kdWxlIGluaXQgLS0gJGdudWxpYl9wYXRoIiBcCi0gICAg ICAgICAgJiYgZnVuY19zaG93X2V2YWwgIiRHSVQgc3VibW9kdWxlIHVwZGF0ZSAtLSAkZ251bGli X3BhdGgiIFwKLSAgICAgICAgICB8fCAgZnVuY19mYXRhbF9lcnJvciAiVW5hYmxlIHRvIHVwZGF0 ZSBnbnVsaWIgc3VibW9kdWxlLiIKLSAgICBmaQotCi0gICAgcmVxdWlyZV9nbnVsaWJfc3VibW9k dWxlPToKLX0KLQotCi0jIHJlcXVpcmVfZ251bGliX3Rvb2wKLSMgLS0tLS0tLS0tLS0tLS0tLS0t LQotIyBFbnN1cmUgdGhhdCAnJGdudWxpYl90b29sJyBpcyBzZXQsIGFuZCBwb2ludHMgdG8gYW4g ZXhlY3V0YWJsZSBmaWxlLAotIyBvciBlbHNlIGZhbGwgYmFjayB0byB1c2luZyB0aGUgYmluYXJ5 ICd0cnVlJyBpZiB0aGUgbWFpbiBnbnVsaWIKLSMgZmlsZXMgYXBwZWFyIHRvIGhhdmUgYmVlbiBp bXBvcnRlZCBhbHJlYWR5LgotcmVxdWlyZV9nbnVsaWJfdG9vbD1mdW5jX3JlcXVpcmVfZ251bGli X3Rvb2wKLWZ1bmNfcmVxdWlyZV9nbnVsaWJfdG9vbCAoKQotewotICAgICRkZWJ1Z19jbWQKLQot ICAgIHRlc3QgdHJ1ZSA9ICIkZ251bGliX3Rvb2wiIHx8IHsKLSAgICAgICRyZXF1aXJlX2dudWxp Yl9zdWJtb2R1bGUKLSAgICAgICRyZXF1aXJlX2dudWxpYl9wYXRoCi0KLSAgICAgIHRlc3QgLW4g IiRnbnVsaWJfdG9vbCIgXAotICAgICAgICB8fCBnbnVsaWJfdG9vbD0kZ251bGliX3BhdGgvZ251 bGliLXRvb2wKLQotICAgICAgdGVzdCAteCAiJGdudWxpYl90b29sIiB8fCB7Ci0gICAgICAgIGdu dWxpYl90b29sPXRydWUKLSAgICAgICAgZnVuY193YXJuaW5nIHJlY29tbWVuZCBcCi0gICAgICAg ICAgICAiTm8gJ2dudWxpYi10b29sJyBmb3VuZDsgZ251bGliIG1vZHVsZXMgbWF5IGJlIG1pc3Np bmcuIgotICAgICAgfQotCi0gICAgICB0ZXN0IHRydWUgPSAiJGdudWxpYl90b29sIiBcCi0gICAg ICAgICAgfHwgZnVuY192ZXJib3NlICJmb3VuZCAnJGdudWxpYl90b29sJyIKLSAgICB9Ci0KLSAg ICByZXF1aXJlX2dudWxpYl90b29sPToKLX0KLQotCi0jIHJlcXVpcmVfZ251bGliX3Rvb2xfYmFz ZV9vcHRpb25zCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0 aGF0ICckZ251bGliX3Rvb2xfYmFzZV9vcHRpb25zJyBjb250YWlucyBhbGwgdGhlIGJhc2Ugb3B0 aW9ucwotIyByZXF1aXJlZCBhY2NvcmRpbmcgdG8gdXNlciBjb25maWd1cmF0aW9uIGZyb20gYm9v dHN0cmFwLmNvbmYuCi1yZXF1aXJlX2dudWxpYl90b29sX2Jhc2Vfb3B0aW9ucz1mdW5jX3JlcXVp cmVfZ251bGliX3Rvb2xfYmFzZV9vcHRpb25zCi1mdW5jX3JlcXVpcmVfZ251bGliX3Rvb2xfYmFz ZV9vcHRpb25zICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfZ251bGliX3Rv b2wKLQotICAgIGdudWxpYl90b29sX2Jhc2Vfb3B0aW9ucz0KLQotICAgIHRlc3QgdHJ1ZSA9ICIk Z251bGliX3Rvb2wiIHx8IHsKLSAgICAgICMgJ2dudWxpYl9tb2R1bGVzJyBhbmQgb3RoZXJzIGFy ZSBtYWludGFpbmVkIGluICdib290c3RyYXAuY29uZic6Ci0gICAgICAjIFVzZSAnZ251bGliIC0t aW1wb3J0JyB0byBmZXRjaCBnbnVsaWIgbW9kdWxlcy4KLSAgICAgICRyZXF1aXJlX2J1aWxkX2F1 eAotICAgICAgdGVzdCAtbiAiJGJ1aWxkX2F1eCIgXAotICAgICAgICAgICYmIGZ1bmNfYXBwZW5k X3VuaXEgZ251bGliX3Rvb2xfYmFzZV9vcHRpb25zICIgLS1hdXgtZGlyPSRidWlsZF9hdXgiCi0g ICAgICAkcmVxdWlyZV9tYWNyb19kaXIKLSAgICAgIHRlc3QgLW4gIiRtYWNyb19kaXIiIFwKLSAg ICAgICAgICAmJiBmdW5jX2FwcGVuZF91bmlxIGdudWxpYl90b29sX2Jhc2Vfb3B0aW9ucyAiIC0t bTQtYmFzZT0kbWFjcm9fZGlyIgotICAgICAgJHJlcXVpcmVfZG9jX2Jhc2UKLSAgICAgIHRlc3Qg LW4gIiRkb2NfYmFzZSIgXAotICAgICAgICAgICYmIGZ1bmNfYXBwZW5kX3VuaXEgZ251bGliX3Rv b2xfYmFzZV9vcHRpb25zICIgLS1kb2MtYmFzZT0kZG9jX2Jhc2UiCi0gICAgICAkcmVxdWlyZV9n bnVsaWJfbmFtZQotICAgICAgdGVzdCAtbiAiJGdudWxpYl9uYW1lIiBcCi0gICAgICAgICAgJiYg ZnVuY19hcHBlbmRfdW5pcSBnbnVsaWJfdG9vbF9iYXNlX29wdGlvbnMgIiAtLWxpYj0kZ251bGli X25hbWUiCi0gICAgICAkcmVxdWlyZV9sb2NhbF9nbF9wYXRoCi0gICAgICB0ZXN0IC1uICIkbG9j YWxfZ2xfcGF0aCIgJiYgewotICAgICAgICBldmFsICJzZXQgZHVtbXkgJGxvY2FsX2dsX3BhdGhf cXVvdGVkIiA7IHNoaWZ0Ci0gICAgICAgIGZvciBfR19kaXIKLSAgICAgICAgZG8KLSAgICAgICAg ICBmdW5jX2FwcGVuZF91bmlxIGdudWxpYl90b29sX2Jhc2Vfb3B0aW9ucyAiIC0tbG9jYWwtZGly PSRfR19kaXIiCi0gICAgICAgIGRvbmUKLSAgICAgIH0KLSAgICAgICRyZXF1aXJlX3NvdXJjZV9i YXNlCi0gICAgICB0ZXN0IC1uICIkc291cmNlX2Jhc2UiIFwKLSAgICAgICAgICAmJiBmdW5jX2Fw cGVuZF91bmlxIGdudWxpYl90b29sX2Jhc2Vfb3B0aW9ucyAiIC0tc291cmNlLWJhc2U9JHNvdXJj ZV9iYXNlIgotICAgIH0KLQotICAgIHJlcXVpcmVfZ251bGliX3Rvb2xfYmFzZV9vcHRpb25zPToK LX0KLQotCi0jIHJlcXVpcmVfbGlidG9vbGl6ZQotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2tp cCBsaWJ0b29saXplIGlmIGl0J3Mgbm90IG5lZWRlZC4KLXJlcXVpcmVfbGlidG9vbGl6ZT1mdW5j X3JlcXVpcmVfbGlidG9vbGl6ZQotZnVuY19yZXF1aXJlX2xpYnRvb2xpemUgKCkKLXsKLSAgICAk ZGVidWdfY21kCi0KLSAgICAjIFVubGVzcyB3ZSdyZSBub3Qgc2VhcmNoaW5nIGZvciBsaWJ0b29s IHVzZSBieSB0aGlzIHBhY2thZ2UsIHNldAotICAgICMgTElCVE9PTElaRSB0byB0cnVlIGlmIG5v bmUgb2YgJ0xUX0lOSVQnLCAnQUNfUFJPR19MSUJUT09MJyBhbmQKLSAgICAjICdBTV9QUk9HX0xJ QlRPT0wnIGFyZSB1c2VkIGluIGNvbmZpZ3VyZS4KLSAgICB0ZXN0IHRydWUgPSAiJExJQlRPT0xJ WkUiIHx8IHsKLSAgICAgIGZ1bmNfZXh0cmFjdF90cmFjZSBMVF9JTklUCi0gICAgICB0ZXN0IC1u ICIkZnVuY19leHRyYWN0X3RyYWNlX3Jlc3VsdCIgfHwgZnVuY19leHRyYWN0X3RyYWNlIEFDX1BS T0dfTElCVE9PTAotICAgICAgdGVzdCAtbiAiJGZ1bmNfZXh0cmFjdF90cmFjZV9yZXN1bHQiIHx8 IGZ1bmNfZXh0cmFjdF90cmFjZSBBTV9QUk9HX0xJQlRPT0wKLSAgICAgIHRlc3QgLW4gIiRmdW5j X2V4dHJhY3RfdHJhY2VfcmVzdWx0IiB8fCBMSUJUT09MSVpFPXRydWUKLSAgICB9Ci0KLSAgICB0 ZXN0IC1uICIkTElCVE9PTElaRSIgfHwgewotICAgICAgIyBGaW5kIGxpYnRvb2xpemUsIG5hbWVk IGdsaWJ0b29saXplIGluIE1hYyBQb3J0cywgYnV0IHByZWZlcgotICAgICAgIyB1c2VyLWluc3Rh bGxlZCBsaWJ0b29saXplIHRvIGFuY2llbnQgZ2xpYnRvb2xpemUgc2hpcHBlZCBieQotICAgICAg IyBBcHBsZSB3aXRoIE1hYyBPUyBYIHdoZW4gTWFjIFBvcnRzIGlzIG5vdCBpbnN0YWxsZWQuCi0g ICAgICBmdW5jX2ZpbmRfdG9vbCBMSUJUT09MSVpFIGxpYnRvb2xpemUgZ2xpYnRvb2xpemUKLSAg ICB9Ci0KLSAgICB0ZXN0IC1uICIkTElCVE9PTElaRSIgfHwgZnVuY19mYXRhbF9lcnJvciAiXAot UGxlYXNlIGluc3RhbGwgR05VIExpYnRvb2wsIG9yICdleHBvcnQgTElCVE9PTElaRT0vcGF0aC90 by9saWJ0b29saXplJy4iCi0KLSAgICBmdW5jX3ZlcmJvc2UgImV4cG9ydCBMSUJUT09MSVpFPSck TElCVE9PTElaRSciCi0KLSAgICAjIE1ha2Ugc3VyZSB0aGUgc2VhcmNoIHJlc3VsdCBpcyB2aXNp YmxlIHRvIHN1YnNoZWxscwotICAgIGV4cG9ydCBMSUJUT09MSVpFCi0KLSAgICByZXF1aXJlX2xp YnRvb2xpemU9OgotfQotCi0KLSMgcmVxdWlyZV9sb2NhbF9nbF9wYXRoCi0jIC0tLS0tLS0tLS0t LS0tLS0tLS0tLQotIyBFbnN1cmUgbG9jYWxfZ2xfcGF0aCBoYXMgYSBzZW5zaWJsZSB2YWx1ZSwg ZXh0cmFjdGVkIGZyb20gJ2dudWxpYi1jYWNoZS5tNCcgaWYKLSMgcG9zc2libGUsIG90aGVyd2lz ZSBsZXR0aW5nICdnbnVsaWItdG9vbCcgcGljayBhIGRlZmF1bHQuCi1yZXF1aXJlX2xvY2FsX2ds X3BhdGg9ZnVuY19yZXF1aXJlX2xvY2FsX2dsX3BhdGgKLWZ1bmNfcmVxdWlyZV9sb2NhbF9nbF9w YXRoICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfZ251bGliX2NhY2hlCi0K LSAgICAjIENvbXBhdCB3aXRoIG9sZGVyIGJvb3RzdHJhcCB2ZXJzaW9ucy4KLSAgICB0ZXN0IC1u ICIkbG9jYWxfZ2xfZGlyIiAmJiB7Ci0gICAgICBmdW5jX3dhcm5pbmcgc2V0dGluZ3MgIlwKLVBs ZWFzZSB1c2UgJ2xvY2FsX2dsX3BhdGgnIGluc3RlYWQgb2YgJ2xvY2FsX2dsX2RpcicgaW4geW91 cgotJ2Jvb3RzdHJhcC5jb25mJyBmaWxlLiIKLSAgICAgIGxvY2FsX2dsX3BhdGg9JGxvY2FsX2ds X2RpcgotICAgICAgbG9jYWxfZ2xfZGlyPQotICAgIH0KLQotICAgIHRlc3QgLWYgIiRnbnVsaWJf Y2FjaGUiICYmIHRlc3QgLXogIiRsb2NhbF9nbF9wYXRoIiAmJiB7Ci0gICAgICBmdW5jX2V4dHJh Y3RfdHJhY2VfZmlyc3QgImdsX0xPQ0FMX0RJUiIgIiRnbnVsaWJfY2FjaGUiCi0gICAgICBsb2Nh bF9nbF9wYXRoPSRmdW5jX2V4dHJhY3RfdHJhY2VfZmlyc3RfcmVzdWx0Ci0gICAgICB0ZXN0IC1u ICIkbG9jYWxfZ2xfcGF0aCIgJiYgZnVuY192ZXJib3NlICJsb2NhbF9nbF9wYXRoPSckbG9jYWxf Z2xfcGF0aCciCi0gICAgfQotCi0gICAgdGVzdCAteiAiJGxvY2FsX2dsX3BhdGhfcXVvdGVkIiAm JiB0ZXN0IC1uICIkbG9jYWxfZ2xfcGF0aCIgJiYgewotICAgICAgc2F2ZV9JRlM9JElGUwotICAg ICAgc2V0IGR1bW15Ci0gICAgICAjIERvbid0IHVzZSBQQVRIX1NFUEFSQVRPUiBoZXJlLCBnbnVs aWIgbXVzdCBiZSBmaXhlZCB0byBzdG9yZSBvbmx5ICc6JyBhcwotICAgICAgIyBwYXRoIHNlcGFy YXRvciBpbnRvIGdudWxpYi1jYWNoZS5tNCAoY29uc2lzdGVuY3kgcmVhc29ucyBhbW9uZyBzeXN0 ZW1zKS4KLSAgICAgIElGUz06Ci0gICAgICBmb3IgX0dfZGlyIGluICRsb2NhbF9nbF9wYXRoCi0g ICAgICBkbwotICAgICAgICBzZXQgIiRAIiAiJF9HX2RpciIKLSAgICAgIGRvbmUKLSAgICAgIHNo aWZ0Ci0gICAgICBJRlM9JHNhdmVfSUZTCi0gICAgICBmdW5jX3F1b3RlIGV2YWwgIiRAIgotICAg ICAgbG9jYWxfZ2xfcGF0aF9xdW90ZWQ9JGZ1bmNfcXVvdGVfcmVzdWx0Ci0gICAgfQotCi0gICAg cmVxdWlyZV9sb2NhbF9nbF9wYXRoPToKLX0KLQotCi0jIHJlcXVpcmVfbWFjcm9fZGlyCi0jIC0t LS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0ICckbWFjcm9fZGlyJyBpcyBzZXQsIGFuZCBp ZiBpdCBkb2Vzbid0IGFscmVhZHkgcG9pbnQgdG8gYW4KLSMgZXhpc3RpbmcgZGlyZWN0b3J5LCBj cmVhdGUgb25lLgotcmVxdWlyZV9tYWNyb19kaXI9ZnVuY19yZXF1aXJlX21hY3JvX2RpcgotZnVu Y19yZXF1aXJlX21hY3JvX2RpciAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgU29tZXRp bWVzIHRoaXMgaXMgc3RvcmVkIGluICdjb25maWd1cmUuYWMnLgotICAgIHRlc3QgLW4gIiRtYWNy b19kaXIiIHx8IHsKLSAgICAgICMgQUNfQ09ORklHX01BQ1JPX0RJUlMgdGFrZXMgYSBzcGFjZSBk ZWxpbWl0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcywKLSAgICAgICMgYnV0IHdlIG9ubHkgY2FyZSBh Ym91dCB0aGUgZmlyc3Qgb25lIGluIGJvb3RzdHJhcC4KLSAgICAgIGZ1bmNfZXh0cmFjdF90cmFj ZV9maXJzdCBBQ19DT05GSUdfTUFDUk9fRElSUwotICAgICAgbWFjcm9fZGlyPWBleHByICJ4JGZ1 bmNfZXh0cmFjdF90cmFjZV9maXJzdF9yZXN1bHQiIDogJ3hcKFteCSBdKlwpJ2AKLSAgICB9Ci0g ICAgdGVzdCAtbiAiJG1hY3JvX2RpciIgfHwgewotICAgICAgZnVuY19leHRyYWN0X3RyYWNlX2Zp cnN0IEFDX0NPTkZJR19NQUNST19ESVIKLSAgICAgIG1hY3JvX2Rpcj0kZnVuY19leHRyYWN0X3Ry YWNlX2ZpcnN0X3Jlc3VsdAotICAgIH0KLQotICAgICMgT3RoZXJ3aXNlIHdlIG1pZ2h0IGZpbmQg aXQgaW4gJ01ha2VmaWxlLmFtJy4KLSAgICB0ZXN0IC1uICIkbWFjcm9fZGlyIiB8fCB7Ci0gICAg ICAkcmVxdWlyZV9hY2xvY2FsX2FtZmxhZ3MKLQotICAgICAgIyBUYWtlIHRoZSBhcmd1bWVudCBm b2xsb3dpbmcgdGhlIGZpcnN0ICctSScsIGlmIGFueS4KLSAgICAgIF9HX21pbnVzX0lfc2Vlbj1m YWxzZQotICAgICAgZm9yIF9HX2FyZyBpbiAkYWNsb2NhbF9hbWZsYWdzOyBkbwotICAgICAgICBj YXNlICRfR19taW51c19JX3NlZW4sJF9HX2FyZyBpbgotICAgICAgICAgIDosKikgICBtYWNyb19k aXI9JF9HX2FyZzsgYnJlYWsgOzsKLSAgICAgICAgICAqLC1JKSAgX0dfbWludXNfSV9zZWVuPTog OzsKLSAgICAgICAgICAqLC1JKikgbWFjcm9fZGlyPWBleHByIHgkX0dfYXJnIDogJ3gtSVwoLipc KSQnYDsgYnJlYWsgOzsKLSAgICAgICAgZXNhYwotICAgICAgZG9uZQotICAgIH0KLQotICAgIGZ1 bmNfdmVyYm9zZSAibWFjcm9fZGlyPSckbWFjcm9fZGlyJyIKLQotICAgIGZ1bmNfY2hlY2tfY29u ZmlndXJhdGlvbiBtYWNyb19kaXIgXAotICAgICAgICAiQUNfQ09ORklHX01BQ1JPX0RJUlMoW25h bWUgb2YgYSBkaXJlY3RvcnkgZm9yIGNvbmZpZ3VyZSBtNCBmaWxlc10pIgotCi0gICAgJHJlcXVp cmVfdmNfaWdub3JlX2ZpbGVzCi0KLSAgICAjIElmIHRoZSBtYWNyb19kaXIgZGlyZWN0b3J5IGRv ZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdCBub3csIGFuZCBtYXJrIGl0Ci0gICAgIyBhcyBpZ25vcmVk IGZvciB0aGUgVkNTLgotICAgIGlmIHRlc3QgISAtZCAiJG1hY3JvX2RpciI7IHRoZW4KLSAgICAg IG1rZGlyICIkbWFjcm9fZGlyIiB8fCBmdW5jX3Blcm1pc3Npb25zX2Vycm9yICIkbWFjcm9fZGly IgotCi0gICAgICB0ZXN0IC1uICIkdmNfaWdub3JlX2ZpbGVzIiBcCi0gICAgICAgIHx8IGZ1bmNf aW5zZXJ0X2lmX2Fic2VudCAiJG1hY3JvX2RpciIgJHZjX2lnbm9yZV9maWxlcwotICAgIGZpCi0K LSAgICByZXF1aXJlX21hY3JvX2Rpcj06Ci19Ci0KLQotIyByZXF1aXJlX21ha2VmaWxlX2FtCi0j IC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoZXJlIGlzIGEgJ01ha2VmaWxlLmFtJyBp biB0aGUgY3VycmVudCBkaXJlY3RvcnkuCi1yZXF1aXJlX21ha2VmaWxlX2FtPWZ1bmNfcmVxdWly ZV9tYWtlZmlsZV9hbQotZnVuY19yZXF1aXJlX21ha2VmaWxlX2FtICgpCi17Ci0gICAgJGRlYnVn X2NtZAotCi0gICAgdGVzdCAtbiAiJG1ha2VmaWxlX2FtIiBcCi0gICAgICB8fCBtYWtlZmlsZV9h bT1NYWtlZmlsZS5hbQotCi0gICAgPCIkbWFrZWZpbGVfYW0iCi0KLSAgICBmdW5jX3ZlcmJvc2Ug ImZvdW5kICckbWFrZWZpbGVfYW0nIgotCi0gICAgcmVxdWlyZV9tYWtlZmlsZV9hbT06Ci19Ci0K LQotIyByZXF1aXJlX3BhY2thZ2UKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0ICck cGFja2FnZScgY29udGFpbnMgYSBzZW5zaWJsZSBkZWZhdWx0IHZhbHVlLgotcmVxdWlyZV9wYWNr YWdlPWZ1bmNfcmVxdWlyZV9wYWNrYWdlCi1mdW5jX3JlcXVpcmVfcGFja2FnZSAoKQotewotICAg ICRkZWJ1Z19jbWQKLQotICAgIHRlc3QgLW4gIiRwYWNrYWdlIiB8fCB7Ci0gICAgICAkcmVxdWly ZV9wYWNrYWdlX25hbWUKLQotICAgICAgcGFja2FnZT1gZWNobyAiJHBhY2thZ2VfbmFtZSIgXAot ICAgICAgICB8JFNFRCAtZSAncy9HTlUgLy8nIFwKLQkgICAgICAtZSAneS9BQkNERUZHSElKS0xN Tk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8nYAotICAgIH0KLQotICAg IGZ1bmNfdmVyYm9zZSAicGFja2FnZT0nJHBhY2thZ2UnIgotCi0gICAgcmVxdWlyZV9wYWNrYWdl PToKLX0KLQotCi0jIHJlcXVpcmVfcGFja2FnZV9idWdyZXBvcnQKLSMgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGlzIGhhcyBhIHNlbnNpYmxlIHZhbHVlLCBleHRy YWN0ZWQgZnJvbSAnY29uZmlndXJlLmFjJwotIyBpZiBhcHByb3ByaWF0ZSAoYW5kIHBvc3NpYmxl ISkuCi1yZXF1aXJlX3BhY2thZ2VfYnVncmVwb3J0PWZ1bmNfcmVxdWlyZV9wYWNrYWdlX2J1Z3Jl cG9ydAotZnVuY19yZXF1aXJlX3BhY2thZ2VfYnVncmVwb3J0ICgpCi17Ci0gICAgJGRlYnVnX2Nt ZAotCi0gICAgZnVuY19leHRyYWN0X3RyYWNlIEFDX0lOSVQKLQotICAgIHNhdmVfaWZzPSRJRlMK LSAgICBJRlM9OgotICAgIHNldCBkdW1teSAkZnVuY19leHRyYWN0X3RyYWNlX3Jlc3VsdAotICAg IElGUz0kc2F2ZV9pZnMKLSAgICBzaGlmdAotCi0gICAgdGVzdCAtbiAiJHBhY2thZ2VfYnVncmVw b3J0IiB8fCBwYWNrYWdlX2J1Z3JlcG9ydD0kMwotICAgIGZ1bmNfY2hlY2tfY29uZmlndXJhdGlv biBwYWNrYWdlX2J1Z3JlcG9ydCBcCi0gICAgICAiQUNfSU5JVChbJHBhY2thZ2VfbmFtZV0sIFsk cGFja2FnZV92ZXJzaW9uXSwgW2J1Zy0kcGFja2FnZUBnbnUub3JnXSkiCi0gICAgZnVuY192ZXJi b3NlICJwYWNrYWdlX2J1Z3JlcG9ydD0nJHBhY2thZ2VfYnVncmVwb3J0JyIKLQotICAgIHJlcXVp cmVfcGFja2FnZV9idWdyZXBvcnQ9OgotfQotCi0KLSMgcmVxdWlyZV9wYWNrYWdlX25hbWUKLSMg LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhpcyBoYXMgYSBzZW5zaWJsZSB2 YWx1ZSwgZXh0cmFjdGVkIGZyb20gJ2NvbmZpZ3VyZS5hYycKLSMgaWYgYXBwcm9wcmlhdGUgKGFu ZCBwb3NzaWJsZSEpLgotcmVxdWlyZV9wYWNrYWdlX25hbWU9ZnVuY19yZXF1aXJlX3BhY2thZ2Vf bmFtZQotZnVuY19yZXF1aXJlX3BhY2thZ2VfbmFtZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQot ICAgIGZ1bmNfZXh0cmFjdF90cmFjZSBBQ19JTklUCi0KLSAgICBzYXZlX2lmcz0kSUZTCi0gICAg SUZTPToKLSAgICBzZXQgZHVtbXkgJGZ1bmNfZXh0cmFjdF90cmFjZV9yZXN1bHQKLSAgICBJRlM9 JHNhdmVfaWZzCi0gICAgc2hpZnQKLQotICAgIHRlc3QgLW4gIiRwYWNrYWdlX25hbWUiIHx8IHBh Y2thZ2VfbmFtZT0kMQotICAgIGZ1bmNfY2hlY2tfY29uZmlndXJhdGlvbiBwYWNrYWdlX25hbWUg XAotICAgICAgIkFDX0lOSVQoW25hbWUgb2YgeW91ciBwYWNrYWdlXSwgW3BhY2thZ2UgdmVyc2lv biBudW1iZXJdKSIKLSAgICBmdW5jX3ZlcmJvc2UgInBhY2thZ2VfbmFtZT0nJHBhY2thZ2VfbmFt ZSciCi0KLSAgICByZXF1aXJlX3BhY2thZ2VfbmFtZT06Ci19Ci0KLQotIyByZXF1aXJlX3BhY2th Z2VfdmVyc2lvbgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFbnN1cmUgdGhhdCB0aGlz IGhhcyBhIHNlbnNpYmxlIHZhbHVlLCBleHRyYWN0ZWQgZnJvbSAnY29uZmlndXJlLmFjJwotIyBp ZiBhcHByb3ByaWF0ZSAoYW5kIHBvc3NpYmxlISkuICBXaGlsZSB3ZSBtaWdodCBoYXZlIHNldCBh bGwgdGhlCi0jIHBhcmFtZXRlcnMgZXh0cmFjdGVkIGZyb20gQUNfSU5JVCBhdCBvbmNlLCAncGFj a2FnZV92ZXJzaW9uJyBpbgotIyBwYXJ0aWN1bGFyIGlzIG5vdCBuZWNlc3NhcmlseSBhdmFpbGFi bGUgYXMgZWFybHkgYXMgdGhlIG90aGVycywgc2luY2UKLSMgJ2dpdC12ZXJzaW9uLWdlbicgaXMg b2Z0ZW4gaW52b2x2ZWQsIGFuZCB1bnRpbCB0aGVuIHdlIGNhbid0IHJlbHkgb24KLSMgZ2V0dGlu ZyBhIGNvcnJlY3QgdmVyc2lvbiBudW1iZXIgZnJvbSBhbiBBQ19JTklUIGV4dHJhY3Rpb24uCi1y ZXF1aXJlX3BhY2thZ2VfdmVyc2lvbj1mdW5jX3JlcXVpcmVfcGFja2FnZV92ZXJzaW9uCi1mdW5j X3JlcXVpcmVfcGFja2FnZV92ZXJzaW9uICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVu Y19leHRyYWN0X3RyYWNlIEFDX0lOSVQKLQotICAgIHNhdmVfaWZzPSRJRlMKLSAgICBJRlM9Ogot ICAgIHNldCBkdW1teSAkZnVuY19leHRyYWN0X3RyYWNlX3Jlc3VsdAotICAgIElGUz0kc2F2ZV9p ZnMKLSAgICBzaGlmdAotCi0gICAgdGVzdCAtbiAiJHBhY2thZ2VfdmVyc2lvbiIgfHwgcGFja2Fn ZV92ZXJzaW9uPSQyCi0gICAgdGVzdCAtbiAiJHBhY2thZ2VfdmVyc2lvbiIgfHwgewotICAgICAg IyBUaGUgZW1iZWRkZWQgZWNobyBpcyB0byBzcXVhc2ggd2hpdGVzcGFjZSBiZWZvcmUgZ2xvYmJp bmcuCi0gICAgICBjYXNlICIgImBlY2hvICRnbnVsaWJfbW9kdWxlc2AiICIgaW4KLQkqIiBnaXQt dmVyc2lvbi1nZW4gIiopCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJcCi1jYW5ub3QgXCRyZXF1aXJl X3BhY2thZ2VfdmVyc2lvbiBpbiBib290c3RyYXAuY29uZiBiZWZvcmUKLWZ1bmNfZ251bGliX3Rv b2wgaGFzIGluc3RhbGxlZCB0aGUgJ2dpdC12ZXJzaW9uLWdlbicgc2NyaXB0LiIKLQkgIDs7Ci0J KikKLSAgICAgICAgICBmdW5jX2NoZWNrX2NvbmZpZ3VyYXRpb24gcGFja2FnZV92ZXJzaW9uIFwK LSAgICAgICAgICAgICJBQ19JTklUKFtuYW1lIG9mIHlvdXIgcGFja2FnZV0sIFtwYWNrYWdlIHZl cnNpb24gbnVtYmVyXSkiCi0JICA7OwotICAgICAgZXNhYwotICAgIH0KLSAgICBmdW5jX3ZlcmJv c2UgInBhY2thZ2VfdmVyc2lvbj0nJHBhY2thZ2VfdmVyc2lvbiciCi0KLSAgICByZXF1aXJlX3Bh Y2thZ2VfdmVyc2lvbj06Ci19Ci0KLQotIyByZXF1aXJlX3BhdGNoCi0jIC0tLS0tLS0tLS0tLS0K LSMgRmluZCBwYXRjaCwgYWNjb3JkaW5nIHRvIHRoZSBQQVRDSCBlbnZpcm9ubWVudCB2YXJpYWJs ZSwgb3IgZWxzZQotIyBzZWFyY2hpbmcgdGhlIHVzZXIncyBQQVRILgotcmVxdWlyZV9wYXRjaD1m dW5jX3JlcXVpcmVfcGF0Y2gKLWZ1bmNfcmVxdWlyZV9wYXRjaCAoKQotewotICAgICRkZWJ1Z19j bWQKLQotICAgIHRlc3QgLW4gIiRQQVRDSCIgfHwgewotICAgICAgIyBGaW5kIGEgcGF0Y2ggcHJv Z3JhbSwgcHJlZmVycmluZyBncGF0Y2gsIHdoaWNoIGlzIHVzdWFsbHkgYmV0dGVyCi0gICAgICAj IHRoYW4gdGhlIHZlbmRvciBwYXRjaC4KLSAgICAgIGZ1bmNfZmluZF90b29sIFBBVENIIGdwYXRj aCBwYXRjaAotICAgIH0KLQotICAgIHRlc3QgLW4gIiRQQVRDSCIgfHwgZnVuY19mYXRhbF9lcnJv ciAiXAotUGxlYXNlIGluc3RhbGwgR05VIFBhdGNoLCBvciAnZXhwb3J0IFBBVENIPS9wYXRoL3Rv L2dudS9wYXRjaCcuIgotCi0gICAgZnVuY192ZXJib3NlICJleHBvcnQgUEFUQ0g9JyRQQVRDSCci Ci0KLSAgICAjIE1ha2Ugc3VyZSB0aGUgc2VhcmNoIHJlc3VsdCBpcyB2aXNpYmxlIHRvIHN1YnNo ZWxscwotICAgIGV4cG9ydCBQQVRDSAotCi0gICAgcmVxdWlyZV9wYXRjaD06Ci19Ci0KLQotIyBy ZXF1aXJlX3NvdXJjZV9iYXNlCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQg c291cmNlX2Jhc2UgaGFzIGEgc2Vuc2libGUgdmFsdWUsIGV4dHJhY3RlZCBmcm9tCi0jICdnbnVs aWItY2FjaGUubTQnIGlmIHBvc3NpYmxlLgotcmVxdWlyZV9zb3VyY2VfYmFzZT1mdW5jX3JlcXVp cmVfc291cmNlX2Jhc2UKLWZ1bmNfcmVxdWlyZV9zb3VyY2VfYmFzZSAoKQotewotICAgICRkZWJ1 Z19jbWQKLQotICAgICRyZXF1aXJlX2dudWxpYl9jYWNoZQotCi0gICAgdGVzdCAtZiAiJGdudWxp Yl9jYWNoZSIgJiYgdGVzdCAteiAiJHNvdXJjZV9iYXNlIiAmJiB7Ci0gICAgICBmdW5jX2V4dHJh Y3RfdHJhY2VfZmlyc3QgImdsX1NPVVJDRV9CQVNFIiAiJGdudWxpYl9jYWNoZSIKLQotICAgICAg c291cmNlX2Jhc2U9JGZ1bmNfZXh0cmFjdF90cmFjZV9maXJzdF9yZXN1bHQKLQotICAgICAgZnVu Y192ZXJib3NlICJzb3VyY2VfYmFzZT0nJHNvdXJjZV9iYXNlJyIKLSAgICB9Ci0KLSAgICByZXF1 aXJlX3NvdXJjZV9iYXNlPToKLX0KLQotCi0jIHJlcXVpcmVfdmNfaWdub3JlX2ZpbGVzCi0jIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0ICckdmNfaWdub3JlJyBoYXMgYmVl biBwcm9jZXNzZWQgdG8gbGlzdCBWQ1MgaWdub3JlIGZpbGVzCi0jIGluICckdmNfaWdub3JlX2Zp bGVzJwotcmVxdWlyZV92Y19pZ25vcmVfZmlsZXM9ZnVuY19yZXF1aXJlX3ZjX2lnbm9yZV9maWxl cwotZnVuY19yZXF1aXJlX3ZjX2lnbm9yZV9maWxlcyAoKQotewotICAgICRkZWJ1Z19jbWQKLQot ICAgIHRlc3QgLW4gIiR2Y19pZ25vcmUiIHx8IHZjX2lnbm9yZT1hdXRvCi0KLSAgICBpZiB0ZXN0 IGF1dG8gPSAiJHZjX2lnbm9yZSIgJiYgdGVzdCAteiAiJHZjX2lnbm9yZV9maWxlcyI7IHRoZW4K LSAgICAgIHZjX2lnbm9yZV9maWxlcz0KLSAgICAgIHRlc3QgLWQgLmdpdCAmJiB2Y19pZ25vcmVf ZmlsZXM9LmdpdGlnbm9yZQotICAgICAgdGVzdCAtZCBDVlMgJiYgdmNfaWdub3JlX2ZpbGVzPSIk dmNfaWdub3JlX2ZpbGVzIC5jdnNpZ25vcmUiCi0gICAgZWxzZQotICAgICAgdmNfaWdub3JlX2Zp bGVzPSR2Y19pZ25vcmUKLSAgICBmaQotCi0gICAgZnVuY192ZXJib3NlICJ2Y19pZ25vcmVfZmls ZXM9JyR2Y19pZ25vcmVfZmlsZXMnIgotCi0gICAgcmVxdWlyZV92Y19pZ25vcmVfZmlsZXM9Ogot fQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBIZWxwZXIgZnVuY3Rpb25zLiAjIwot IyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhlIGhl bHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgcmVzdCBvZiAnYm9vdHN0cmFwJy4KLQotIyBmdW5j X2xlbiBTVFJJTkcKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIFNUUklORyBtYXkgbm90IHN0YXJ0IHdp dGggYSBoeXBoZW4uCi1pZiAoZXZhbCAneD0xMjM7IHRlc3QgeCR7I3h9ID0gIngzIicpIDI+L2Rl di9udWxsCi10aGVuCi0gICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dp bmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KLSAgZXZhbCAnZnVuY19sZW4gKCkKLSAgewot ICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQotICB9JwotZWxzZQot ICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgZXhwciwgd2hpY2ggaXMgb2Z0ZW4g YSBzaGVsbCBidWlsdGluLgotICBmdW5jX2xlbiAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAotCi0g ICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8g MGAKLSAgfQotZmkKLQotCi0jIGZ1bmNfY21wX3MgRklMRTEgRklMRTIKLSMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotIyBSZXR1cm4gbm9uLXplcm8gZXhpdCBzdGF0dXMgdW5sZXNzIEZJTEUxIGFu ZCBGSUxFMiBhcmUgaWRlbnRpY2FsLCB3aXRob3V0Ci0jIGFueSBvdXRwdXQgYXQgYWxsLCBldmVu IGVycm9yIG1lc3NhZ2VzLgotZnVuY19jbXBfcyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAg ICMgVGhpcyBmdW5jdGlvbiByZWxpZXMgb24gbm9uLXplcm8gZXhpdCBzdGF0dXMsIHdoaWNoIHdp bGwgY2F1c2UgdGhlCi0gICAgIyBwcm9ncmFtIHRvIGV4aXQgd2hlbiBydW5uaW5nIGluICdzZXQg LWUnIG1vZGUuCi0gICAgJENNUCAiJEAiID4vZGV2L251bGwgMj4mMQotfQotCi0KLSMgZnVuY19n cmVwX3EgRVhQUkVTU0lPTiBbRklMRU5BTUUuLl0KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUg b2YgYW55IGxpc3RlZCBGSUxFTkFNRSwKLSMgd2l0aG91dCBhbnkgb3V0cHV0IGF0IGFsbCwgZXZl biBlcnJvciBtZXNzYWdlcy4KLWZ1bmNfZ3JlcF9xICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0g ICAgIyBUaGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBub24temVybyBleGl0IHN0YXR1cywgd2hpY2gg d2lsbCBjYXVzZSB0aGUKLSAgICAjIHByb2dyYW0gdG8gZXhpdCB3aGVuIHJ1bm5pbmcgaW4gJ3Nl dCAtZScgbW9kZS4KLSAgICAkR1JFUCAiJEAiID4vZGV2L251bGwgMj4mMQotfQotCi0KLSMgZnVu Y19pZmNvbnRhaW5zIExJU1QgTUVNQkVSIFlFUy1DTUQgW05PLUNNRF0KLSMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSWYgd2hpdGVzcGFjZS1zZXBhcmF0 ZWQgTElTVCBjb250YWlucyBNRU1CRVIgdGhlbiBleGVjdXRlIFlFUy1DTUQsCi0jIG90aGVyd2lz ZSBpZiBOTy1DTUQgd2FzIGdpdmVuLCBleGVjdXRlIHRoYXQuCi1mdW5jX2lmY29udGFpbnMgKCkK LXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR193c2xpc3Q9JDEKLSAgICBfR19tZW1iZXI9JDIK LSAgICBfR195ZXNfY21kPSQzCi0gICAgX0dfbm9fY21kPSR7NC0iOiJ9Ci0KLSAgICBfR19mb3Vu ZD1mYWxzZQotICAgIGZvciBfR19pdGVtIGluICRfR193c2xpc3Q7IGRvCi0gICAgICB0ZXN0ICJ4 JF9HX2l0ZW0iID0gIngkX0dfbWVtYmVyIiAmJiB7Ci0gICAgICAgIF9HX2ZvdW5kPToKLQlicmVh awotICAgICAgfQotICAgIGRvbmUKLSAgICBpZiAkX0dfZm91bmQ7IHRoZW4KLSAgICAgIGV2YWwg IiRfR195ZXNfY21kIgotICAgICAgX0dfc3RhdHVzPSQ/Ci0gICAgZWxzZQotICAgICAgZXZhbCAi JF9HX25vX2NtZCIKLSAgICAgIF9HX3N0YXR1cz0kPwotICAgIGZpCi0KLSAgICB0ZXN0IDAgLWVx ICIkX0dfc3RhdHVzIiB8fCBleGl0ICRfR19zdGF0dXMKLX0KLQotCi0jIGZ1bmNfc3RycGFkIFNU UiBXSURUSCBDSEFSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRyaW0gU1RSLCBv ciBwYWQgd2l0aCBDSEFSIHRvIGZvcmNlIGEgdG90YWwgbGVuZ3RoIG9mIFdJRFRILgotZnVuY19z dHJwYWQgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR193aWR0aD1gZXhwciAiJDIiIC0g MWAKLSAgICBmdW5jX3N0cnBhZF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCRTRUQgJwotICAgICAgICA6 YQotICAgICAgICBzfF4uXHswLCciJF9HX3dpZHRoIidcfSR8JiciJDMiJ3wKLSAgICAgICAgdGEK LSAgICAnYAotfQotCi0KLSMgZnVuY19zdHJycGFkIFNUUiBXSURUSCBDSEFSCi0jIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotIyBUcmltIFNUUiwgb3IgcmlnaHQtanVzdGlmeS1wYWQgd2l0 aCBDSEFSIHRvIGZvcmNlIGEgdG90YWwgbGVuZ3RoIG9mCi0jIFdJRFRILgotZnVuY19zdHJycGFk ICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgX0dfd2lkdGg9YGV4cHIgIiQyIiAtIDFgCi0g ICAgZnVuY19zdHJycGFkX3Jlc3VsdD1gJEVDSE8gIiQxIiB8JFNFRCAnCi0gICAgICAgIDphCi0g ICAgICAgIHN8Xi5cezAsJyIkX0dfd2lkdGgiJ1x9JHwnIiQzIicmfAotICAgICAgICB0YQotICAg ICdgCi19Ci0KLQotIyBmdW5jX3N0cnJvdyBJTkRFTlQgRklFTEQgV0lEVEggW0ZJRUxEbiBXSURU SG5dLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLSMgUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgZWFjaCBGSUVMRCBsZWZ0IGp1c3RpZmll ZCB0byBXSURUSCwgd2l0aAotIyB0aGUgd2hvbGUgdGhpbmcgaW5kZW50ZWQgYnkgSU5ERU5UIHNw YWNlcy4gIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0bwotIyByZW5kZXIgb25lIHJvdyBvZiBhbGln bmVkIGNvbHVtbnMgZm9yIGEgdGFibGUgYnkgZnVuY19zdHJ0YWJsZSgpLgotZnVuY19zdHJyb3cg KCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX3N0cnJvd19saW5lbGVuPSQxOyBzaGlm dAotCi0gICAgX0dfcm93PQotICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gICAgICBmdW5j X3N0cnJvd19saW5lbGVuPWBleHByICRmdW5jX3N0cnJvd19saW5lbGVuICsgJDJgCi0gICAgICBm dW5jX3N0cnBhZCAiJDEiICQyICIgIgotICAgICAgZnVuY19hcHBlbmQgX0dfcm93ICIkZnVuY19z dHJwYWRfcmVzdWx0IgotICAgICAgc2hpZnQ7IHNoaWZ0Ci0gICAgZG9uZQotCi0gICAgZnVuY19z dHJycGFkICIkX0dfcm93IiAkZnVuY19zdHJyb3dfbGluZWxlbiAiICIKLSAgICBmdW5jX3N0cnJv d19yZXN1bHQ9JGZ1bmNfc3RycnBhZF9yZXN1bHQKLX0KLQotCi0jIGZ1bmNfc3RydGFibGUgSU5E RU5UIFdJRFRIMS4uLldJRFRIbiBIRUFERVIxLi4uSEVBREVSbiBGSUVMRDEuLi5GSUVMRG4KLSMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotIyBHZW5lcmF0ZSBhIHN0cmluZyBvZiBuZXdsaW5lLXNlcGFyYXRlZCBy b3dzIGFycmFuZ2VkIGluIGxpbmVkLXVwCi0jIGNvbHVtbnMgb2YgdGhlIGdpdmVuIFdJRFRIcywg d2l0aCB0aGUgZW50aXJlIHRhYmxlIGluZGVudGVkIGJ5IElOREVOVAotIyBzcGFjZXMuICBUaGUg bnVtYmVyIG9mIGNvbHVtbnMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbnVtYmVyIG9mIGludGVnZXIK LSMgdmFsdWVkIFdJRFRIIGFyZ3VtZW50cyBmb2xsb3dpbmcgSU5ERU5ULiAgVGhlIG5leHQgc2V0 IChpLmUuIGEgbnVtYmVyCi0jIG9mIGFyZ3VtZW50cyBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIFdJ RFRIIGFyZ3VtZW50cykgb2YgZmllbGRzIGFyZQotIyB0cmVhdGVkIGFzIHRoZSB0YWJsZSdzIGNv bHVtbiBIRUFERVJzLCBhbmQgYXJlIHNlcGFyYXRlZCBmcm9tIHRoZQotIyByZW1haW5kZXIgb2Yg dGhlIHRhYmxlIGJ5IGFuIGluZGVudGVkIHJvdyBvZiAnLScgY2hhcmFjdGVycy4gUmVtYWluaW5n Ci0jIGFyZ3VtZW50cyBhcmUgZWFjaCBhbGlnbmVkIGJlbG93IHRoZSBuZXh0IGF2YWlsYWJsZSBo ZWFkZXIsIHdyYXBwaW5nCi0jIHRvIGEgbmV3IHJvdyBhcyBuZWNlc3NhcnkuICBGaW5hbGx5IGFu b3RoZXIgcm93IG9mICctJyBjaGFyYWN0ZXJzIGlzCi0jIGFkZGVkIHRvIG1hcmsgdGhlIGVuZCBv ZiB0aGUgdGFibGUuCi0jCi0jIEZvciBleGFtcGxlIGFuIHVuaW5kZW50ZWQgMyBjb2x1bW4gdGFi bGUgd2l0aCAyIHJvd3Mgb2YgZGF0YSB3b3VsZCBiZQotIyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxs OgotIwotIyAgICBmdW5jX3N0cnRhYmxlIDMgMjAgMTAgMjUgXAotIyAgICAgICAgSGVhZGVyMSBI ZWFkZXIyIEhlYWRlcjMgXAotIyAgICAgICAgUm93MUNvbDEgUm93MUNvbDIgUm93MUNvbDMgXAot IyAgICAgICAgUm93MkNvbDEgUm93MkNvbDIgUm93MkNvbDMKLSMKLSMgcmV0dXJuaW5nIHRoZSBm b2xsb3dpbmcgc3RyaW5nOgotIwotIyAiICAgSGVhZGVyMSAgICAgICAgICAgICBIZWFkZXIyICAg SGVhZGVyMwotIyAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQotIyAgICAgUm93MUNvbDEgICAgICAgICAgICBSb3cxQ29sMiAgUm93MUNv bDMKLSMgICAgIFJvdzJDb2wxICAgICAgICAgICAgUm93MkNvbDIgIFJvdzJDb2wzCi0jICAgICAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgot ZnVuY19zdHJ0YWJsZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgU2F2ZSB0aGUgaW5k ZW50IHZhbHVlLCB3ZSdsbCBuZWVkIGl0IGZvciBlYWNoIHJvdyB3ZSByZW5kZXIuCi0gICAgX0df aW5kZW50PSQxOyBzaGlmdAotCi0gICAgIyBDb2xsZWN0IHJlbWFpbmluZyBudW1lcmljIGFyZ3Mg aW50byBhIGxpc3QgZm9yIHJldXNlIGJldHdlZW4KLSAgICAjIG1lbWJlcnMgb2YgZWFjaCByb3cg d2hlbiB3ZSBjYWxsIGZ1bmNfc3Rycm93IGxhdGVyLgotICAgIF9HX3dpZHRocz0kMTsgc2hpZnQK LSAgICB3aGlsZSB0ZXN0IDAgLWx0IGBleHByICIkMSIgOiAnWzEtOV1bMC05XSokJ2A7IGRvCi0g ICAgICBmdW5jX2FwcGVuZCBfR193aWR0aHMgIiAkMSI7IHNoaWZ0Ci0gICAgZG9uZQotCi0gICAg IyBFeHRyYWN0IHRoZSBzYW1lIG51bWJlciBvZiBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgYXMgdGhl cmUgYXJlCi0gICAgIyB3aWR0aCBlbGVtZW50cyAtIHdlJ2xsIGRvIHRoZSBoZWFkZXIgcm93cyBz ZXBhcmF0ZWx5IHNvIHRoYXQKLSAgICAjIHdlIGNhbiBpbnNlcnQgYSBkaXZpZGVyIGxpbmUuCi0g ICAgX0dfaGVhZGVyPSRfR19pbmRlbnQKLSAgICBmb3IgX0dfd2lkdGggaW4gJF9HX3dpZHRoczsg ZG8KLSAgICAgIGZ1bmNfYXBwZW5kIF9HX2hlYWRlciAiICQxICRfR193aWR0aCI7IHNoaWZ0Ci0g ICAgZG9uZQotICAgIGZ1bmNfc3Rycm93ICRfR19oZWFkZXIKLQotICAgICMgU3RyaXAgb2ZmIHRo ZSBpbmRlbnQsIGFuZCBtYWtlIGEgZGl2aWRlciB3aXRoICctJyBjaGFycywgdGhlbgotICAgICMg cmVpbmRlbnQuCi0gICAgX0dfZGl2aWRlcj1gJEVDSE8gIiRmdW5jX3N0cnJvd19yZXN1bHQiIFwK LSAgICAgICAgfCRTRUQgJ3N8W14gXXwtfGcKLSAgICAgICAgICAgIDphCi0gICAgICAgICAgICBz fC0gfC0tfGcKLSAgICAgICAgICAgIHRhCi0gICAgICAgICdgCi0KLSAgICAjIEFwcGVuZCB0aGUg aGVhZGVyIGFuZCBkaXZpZGVyIHRvIHRoZSBydW5uaW5nIHJlc3VsdC4KLSAgICBmdW5jX2FwcGVu ZCBmdW5jX3N0cnRhYmxlX3Jlc3VsdCAiXAotJGZ1bmNfc3Rycm93X3Jlc3VsdAotJF9HX2Rpdmlk ZXIKLSIKLQotICAgICMgVGhlIHJlbWFpbmluZyByb3dzIGFyZSB6aXBwZWQgYmV0d2VlbiB0aGUg d2lkdGggdmFsdWVzIHdlCi0gICAgIyB1bndvdW5kIGVhcmxpZXIganVzdCBsaWtlIHRoZSBoZWFk ZXIgcm93IGFib3ZlLgotICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gICAgICBfR19yb3c9 JF9HX2luZGVudAotICAgICAgZm9yIF9HX3dpZHRoIGluICRfR193aWR0aHM7IGRvCi0gICAgICAg IGZ1bmNfYXBwZW5kIF9HX3JvdyAiICQxICRfR193aWR0aCI7IHNoaWZ0Ci0gICAgICBkb25lCi0g ICAgICBmdW5jX3N0cnJvdyAkX0dfcm93Ci0gICAgICBmdW5jX2FwcGVuZCBmdW5jX3N0cnRhYmxl X3Jlc3VsdCAiXAotJGZ1bmNfc3Rycm93X3Jlc3VsdAotIgotICAgIGRvbmUKLQotICAgICMgTWFy ayB0aGUgZW5kIG9mIHRoZSB0YWJsZSB3aXRoIGEgZmluYWwgZGl2aWRlciBsaW5lLgotICAgIGZ1 bmNfYXBwZW5kIGZ1bmNfc3RydGFibGVfcmVzdWx0ICIkX0dfZGl2aWRlciIKLX0KLQotCi0jIGZ1 bmNfaW50ZXJuYWxfZXJyb3IgQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0j IEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFu ZCBleGl0LgotZnVuY19pbnRlcm5hbF9lcnJvciAoKQotewotICAgIGZ1bmNfZmF0YWxfZXJyb3Ig IlwKLUlOVEVSTkFMOiAiICR7MSsiJEAifSAiCi0gICAgICAgICAgUGxlYXNlIHJlcG9ydCB0aGlz IGJ1ZyB0byAnYnVnLWdudWxpYkBnbnUub3JnJwotICAgICAgICAgIGluIGFzIG11Y2ggZGV0YWls IGFzIHBvc3NpYmxlLiIKLX0KLQotCi0jIGZ1bmNfcGVybWlzc2lvbnNfZXJyb3IgRklMRS1PUi1E SVJFQ1RPUlkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBF Y2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBwZXJtaXNzaW9ucyBlcnJvciBtZXNzYWdlIHRvIHN0 YW5kYXJkCi0jIGVycm9yLCBhbmQgZXhpdC4KLWZ1bmNfcGVybWlzc2lvbnNfZXJyb3IgKCkKLXsK LSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRl ICckMScsIGNoZWNrIHBlcm1pc3Npb25zLiIKLX0KLQotCi0jIGZ1bmNfc2hvd19ldmFsIENNRCBb RkFJTF9FWFBdCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFVubGVzcyBvcHRf c2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMK LSMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWls cywgYW5kIEZBSUxfRVhQCi0jIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgotZnVuY19zaG93 X2V2YWwgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycwot Ci0gICAgX0dfY21kPSQxCi0gICAgX0dfZmFpbF9leHA9JHsyLSc6J30KLQotICAgICR7b3B0X3Np bGVudC0nZmFsc2UnfSB8fCB7Ci0gICAgICBmdW5jX3F1b3RlIGV2YWwgJF9HX2NtZAotICAgICAg ZXZhbCBmdW5jX3RydW5jYXRlX2NtZCAkZnVuY19xdW90ZV9yZXN1bHQKLSAgICAgIGZ1bmNfZWNo byAicnVubmluZzogJHRjX2JvbGQkZnVuY190cnVuY2F0ZV9jbWRfcmVzdWx0JHRjX3Jlc2V0Igot ICAgIH0KLQotICAgICR7b3B0X2RyeV9ydW4tJ2ZhbHNlJ30gfHwgewotICAgICAgZXZhbCAiJF9H X2NtZCIKLSAgICAgIF9HX3N0YXR1cz0kPwotICAgICAgdGVzdCAwIC1lcSAiJF9HX3N0YXR1cyIg fHwgZXZhbCAiKGV4aXQgJF9HX3N0YXR1cyk7ICRfR19mYWlsX2V4cCIKLSAgICB9Ci19Ci0KLQot IyBmdW5jX3RydW5jYXRlX2NtZCBDTUQgW0FSR10uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0jIEZvciB1bnJlYXNvbmFibHkgbG9uZyBjb21tYW5kcyAoc3VjaCBhcyBhIGdu dWxpYi10b29sIGludm9jYXRpb24gd2l0aAotIyB0aGUgZnVsbCBtb2R1bGUgbGlzdCBmb3IgaW1w b3J0KSwgdHJ1bmNhdGUgQ01EIGFmdGVyIHRoZSBzZWNvbmQgbm9uLQotIyBvcHRpb24gQVJHLgot ZnVuY190cnVuY2F0ZV9jbWQgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR19sYXN0X2Fy Z19vcHRfcD1mYWxzZQotICAgIGZ1bmNfdHJ1bmNhdGVfY21kX3Jlc3VsdD0KLQotICAgIHNldCBk dW1teSAiJEAiOyBzaGlmdAotCi0gICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8KLSAgICAgIF9H X29wdD0kMTsgc2hpZnQKLQotICAgICAgdGVzdCAtbiAiJGZ1bmNfdHJ1bmNhdGVfY21kX3Jlc3Vs dCIgXAotICAgICAgICAgICYmIGZ1bmNfYXBwZW5kIGZ1bmNfdHJ1bmNhdGVfY21kX3Jlc3VsdCAn ICcKLSAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfdHJ1bmNhdGVfY21kX3Jlc3VsdCAiJF9HX29wdCIK LQotICAgICAgZnVuY19sZW4gIngkZnVuY190cnVuY2F0ZV9jbWRfcmVzdWx0IgotCi0gICAgICBj YXNlICRfR19vcHQgaW4KLSAgICAgICAgLSopIF9HX2xhc3RfYXJnX29wdF9wPTogOzsKLSAgICAg ICAgKikgICRfR19sYXN0X2FyZ19vcHRfcCBcCi0gICAgICAgICAgICAgICAgfHwgdGVzdCAiJG1p bl9jbWRfbGVuIiAtZ3QgIiRmdW5jX2xlbl9yZXN1bHQiIFwKLSAgICAgICAgICAgICAgICB8fCBi cmVhawotICAgICAgICAgICAgX0dfbGFzdF9hcmdfb3B0X3A9ZmFsc2UKLSAgICAgICAgICAgIDs7 Ci0gICAgICBlc2FjCi0gICAgZG9uZQotCi0gICAgdGVzdCAkIyAtZ3QgMCAmJiBmdW5jX2FwcGVu ZCBmdW5jX3RydW5jYXRlX2NtZF9yZXN1bHQgIi4uLiIKLX0KLQotCi0jIGZ1bmNfZ2l0aWdub3Jl X2VudHJpZXMgRklMRS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgU3Ry aXAgYmxhbmsgYW5kIGNvbW1lbnQgbGluZXMgdG8gbGVhdmUgc2lnbmlmaWNhbnQgZW50cmllcy4K LWZ1bmNfZ2l0aWdub3JlX2VudHJpZXMgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAkU0VE IC1lICcvXiMvZCcgLWUgJy9eJC9kJyAiJEAiCi19Ci0KLQotIyBmdW5jX2luc2VydF9pZl9hYnNl bnQgU1RSIEZJTEUuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIElm ICRTVFIgaXMgbm90IGFscmVhZHkgb24gYSBsaW5lIGJ5IGl0c2VsZiBpbiAkRklMRSwgaW5zZXJ0 IGl0LCBhdCB0aGUKLSMgc3RhcnQuICBFbnRyaWVzIGFyZSBpbnNlcnRlZCBhdCB0aGUgc3RhcnQg b2YgdGhlIGlnbm9yZSBsaXN0IHRvIGVuc3VyZQotIyBleGlzdGluZyBlbnRyaWVzIHN0YXJ0aW5n IHdpdGggISBhcmUgbm90IG92ZXJyaWRkZW4uICBTdWNoIGVudHJpZXMKLSMgc3VwcG9ydCB3aGls ZWxpc3RpbmcgZXhjZXB0aW9ucyBhZnRlciBhIG1vcmUgZ2VuZXJpYyBibGFja2xpc3QgcGF0dGVy bi4KLSMgc29ydGluZyB0aGUgbmV3IGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFuZCByZXBsYWNpbmcg JEZJTEUgd2l0aCB0aGUgcmVzdWx0LgotZnVuY19pbnNlcnRfaWZfYWJzZW50ICgpCi17Ci0gICAg JGRlYnVnX2NtZAotCi0gICAgc3RyPSQxCi0gICAgc2hpZnQKLQotICAgIGZvciBmaWxlCi0gICAg ZG8KLSAgICAgIHRlc3QgLWYgIiRmaWxlIiB8fCB0b3VjaCAiJGZpbGUiCi0KLSAgICAgIGR1cGxp Y2F0ZV9lbnRyaWVzPWBmdW5jX2dpdGlnbm9yZV9lbnRyaWVzICIkZmlsZSIgfHNvcnQgfHVuaXEg LWRgCi0gICAgICB0ZXN0IC1uICIkZHVwbGljYXRlX2VudHJpZXMiIFwKLSAgICAgICAgICAmJiBm dW5jX2Vycm9yICJkdXBsaWNhdGUgZW50cmllcyBpbiAkZmlsZTogIiAkZHVwbGljYXRlX2VudHJp ZXMKLQotICAgICAgZnVuY19ncmVwX3EgIl4kc3RyXCQiICIkZmlsZSIgXAotICAgICAgICAgIHx8 IGZ1bmNfdmVyYm9zZSAiaW5zZXJ0aW5nICckc3RyJyBpbnRvICckZmlsZSciCi0KLSAgICAgIGxp bmVzb2xkPWBmdW5jX2dpdGlnbm9yZV9lbnRyaWVzICIkZmlsZSIgfHdjIC1sYAotICAgICAgbGlu ZXNuZXc9YHsgJEVDSE8gIiRzdHIiOyBjYXQgIiRmaWxlIjsgfSBcCi0gICAgICAgICAgICAgICAg fGZ1bmNfZ2l0aWdub3JlX2VudHJpZXMgfHNvcnQgLXUgfHdjIC1sYAotICAgICAgdGVzdCAiJGxp bmVzb2xkIiAtZXEgIiRsaW5lc25ldyIgXAotICAgICAgICB8fCB7ICRTRUQgIjFpXFwkbmwkc3Ry JG5sIiAiJGZpbGUiID4iJGZpbGUiVCAmJiBtdiAiJGZpbGUiVCAiJGZpbGUiOyB9IFwKLSAgICAg ICAgfHwgZnVuY19wZXJtaXNzaW9uc19lcnJvciAiJGZpbGUiCi0gICAgZG9uZQotfQotCi0KLSMg ZnVuY19nZXRfdmVyc2lvbiBBUFAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZWNobyB0aGUg dmVyc2lvbiBudW1iZXIgKGlmIGFueSkgb2YgQVBQLCB3aGljaCBpcyBsb29rZWQgdXAgYWxvbmcg eW91cgotIyBQQVRILgotZnVuY19nZXRfdmVyc2lvbiAoKQotewotICAgICRkZWJ1Z19jbWQKLQot ICAgIF9HX2FwcD0kMQotCi0gICAgIyBSYXRoZXIgdGhhbiB1bmNvbW1lbnQgdGhlIHNlZCBzY3Jp cHQgaW4tc2l0dSwgc3RyaXAgdGhlIGNvbW1lbnRzCi0gICAgIyBwcm9ncmFtYXRpY2FsbHkgYmVm b3JlIHBhc3NpbmcgdGhlIHJlc3VsdCB0byAkU0VEIGZvciBldmFsdWF0aW9uLgotICAgIHNlZF9n ZXRfdmVyc2lvbj1gJEVDSE8gJyMgZXh0cmFjdCB2ZXJzaW9uIHdpdGhpbiBsaW5lCi0gICAgICAg ICAgc3wuKlt2IF1cezEsXH1cKFswLTldXHsxLFx9XC5bLmEtejAtOS1dKlwpLip8XDF8Ci0gICAg ICAgICAgdCBkb25lCi0KLSAgICAgICAgICAjIGV4dHJhY3QgdmVyc2lvbiBhdCBzdGFydCBvZiBs aW5lCi0gICAgICAgICAgc3xeXChbMC05XVx7MSxcfVwuWy5hLXowLTktXSpcKS4qfFwxfAotICAg ICAgICAgIHQgZG9uZQotCi0gICAgICAgICAgZAotCi0gICAgICAgICAgOmRvbmUKLSAgICAgICAg ICAjIHRoZSBmb2xsb3dpbmcgZXNzZW50aWFsbHkgZG9lcyBzfDUuMDA1fDUuNXwKLSAgICAgICAg ICBzfFwuMCpcKFsxLTldXCl8LlwxfGcKLSAgICAgICAgICBwCi0gICAgICAgICAgcScgXAotICAg IHwkU0VEICcvXlsJIF0qIy4qJC9kJ2AKLQotICAgIGZ1bmNfdG9vbF92ZXJzaW9uX291dHB1dCAk X0dfYXBwID4vZGV2L251bGwKLSAgICBfR19zdGF0dXM9JD8KLQotICAgIHRlc3QgMCAtbmUgIiRf R19zdGF0dXMiIFwKLSAgICAgIHx8ICRfR19hcHAgLS12ZXJzaW9uIDI+JjEgfCRTRUQgLW4gIiRz ZWRfZ2V0X3ZlcnNpb24iCi0KLSAgICAoZXhpdCAkX0dfc3RhdHVzKQotfQotCi0KLSMgZnVuY19j aGVja190b29sIEFQUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlYXJjaCBQQVRIIGZvciBh biBleGVjdXRhYmxlIGF0IEFQUC4KLWZ1bmNfY2hlY2tfdG9vbCAoKQotewotICAgICRkZWJ1Z19j bWQKLQotICAgIGZ1bmNfY2hlY2tfdG9vbF9yZXN1bHQ9Ci0KLSAgICBjYXNlICQxIGluCi0gICAg KltcXC9dKikKLSAgICAgIHRlc3QgLXggIiQxIiAmJiBmdW5jX2NoZWNrX3Rvb2xfcmVzdWx0PSQx Ci0gICAgICA7OwotICAgICopCi0gICAgICBzYXZlX0lGUz0kSUZTCi0gICAgICBJRlM9JHtQQVRI X1NFUEFSQVRPUi06fQotICAgICAgZm9yIF9HX2NoZWNrX3Rvb2xfcGF0aCBpbiAkUEFUSDsgZG8K LSAgICAgICAgSUZTPSRzYXZlX0lGUwotCWlmIHRlc3QgLXggIiRfR19jaGVja190b29sX3BhdGgv JDEiOyB0aGVuCi0JICBmdW5jX2NoZWNrX3Rvb2xfcmVzdWx0PSRfR19jaGVja190b29sX3BhdGgv JDEKLQkgIGJyZWFrCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0kc2F2ZV9JRlMKLSAgICAg IDs7Ci0gICAgZXNhYwotfQotCi0KLSMgZnVuY19jaGVja192ZXJzaW9ucyBBUFAxIFZFUjEgVVJM MSAuLi5bQVBQTiBWRVJOIFVSTE5dCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotZnVuY19jaGVja192ZXJzaW9ucyAoKQotewotICAgICRk ZWJ1Z19jbWQKLQotICAgIGZ1bmNfY2hlY2tfdmVyc2lvbnNfcmVzdWx0PToKLQotICAgIHdoaWxl IHRlc3QgJCMgLWd0IDA7IGRvCi0gICAgICBfR19hcHA9JDE7IHNoaWZ0Ci0gICAgICBfR19yZXF2 ZXI9JDE7IHNoaWZ0Ci0gICAgICBfR191cmw9JDE7IHNoaWZ0Ci0KLSAgICAgICMgRGlhZ25vc2Ug YmFkIGJ1aWxkcmVxIGZvcm1hdHRpbmcuCi0gICAgICBjYXNlICRfR191cmwgaW4KLSAgICAgIFth LXpdKjovLyopIDs7ICMgbG9va3MgbGlrZSBhIHVybAotICAgICAgKikgZnVuY19mYXRhbF9lcnJv ciAiXAotJyRfR191cmwnIGZyb20gdGhlIGJ1aWxkcmVxIHRhYmxlIGluCi0nYm9vdHN0cmFwLmNv bmYnIGRvZXMgbm90IGxvb2sgbGlrZSB0aGUgVVJMIGZvciBkb3dubG9hZGluZwotJF9HX2FwcC4g UGxlYXNlIGVuc3VyZSB0aGF0IGJ1aWxkcmVxIGlzIGEgc3RyaWN0IG5ld2xpbmUKLWRlbGltaXRl ZCBsaXN0IG9mIHRyaXBsZXM7ICdwcm9ncmFtIG1pbi12ZXJzaW9uIHVybCcuIgotICAgICAgICA7 OwotICAgICAgZXNhYwotCi0gICAgICAjIEhvbm9yICRBUFAgdmFyaWFibGVzICgkVEFSLCAkQVVU T0NPTkYsIGV0Yy4pCi0gICAgICBfR19hcHB2YXI9YGVjaG8gJF9HX2FwcCB8dHIgJ1thLXpdJyAn W0EtWl0nYAotICAgICAgdGVzdCBUQVIgPSAiJF9HX2FwcHZhciIgJiYgX0dfYXBwdmFyPUFNVEFS Ci0gICAgICBldmFsICJfR19hcHA9XCR7JF9HX2FwcHZhci0kX0dfYXBwfSIKLQotICAgICAgIyBG YWlsIGlmIG5vIHZlcnNpb24gc3BlY2lmaWVkLCBidXQgdGhlIHByb2dyYW0gY2FuJ3QgYmUgZm91 bmQuCi0gICAgICBpZiB0ZXN0IHgtID0gIngkX0dfcmVxdmVyIjsgdGhlbgotICAgICAgICBmdW5j X2NoZWNrX3Rvb2wgJF9HX2FwcAotCWlmIHRlc3QgLXogIiRmdW5jX2NoZWNrX3Rvb2xfcmVzdWx0 IjsgdGhlbgotCSAgZnVuY19lcnJvciAiUHJlcmVxdWlzaXRlICckX0dfYXBwJyBub3Qgbm90IGZv dW5kLiBQbGVhc2UgaW5zdGFsbCBpdCwgb3IKLSdleHBvcnQgJF9HX2FwcHZhcj0vcGF0aC90by8k X0dfYXBwJy4iCi0gICAgICAgICAgZnVuY19jaGVja192ZXJzaW9uc19yZXN1bHQ9ZmFsc2UKLQll bHNlCi0JICBmdW5jX3ZlcmJvc2UgImZvdW5kICckZnVuY19jaGVja190b29sX3Jlc3VsdCcgZm9y ICRfR19hcHB2YXIuIgotCWZpCi0gICAgICBlbHNlCi0gICAgICAgIF9HX2luc3R2ZXI9YGZ1bmNf Z2V0X3ZlcnNpb24gJF9HX2FwcGAKLQotICAgICAgICAjIEZhaWwgaWYgLS12ZXJzaW9uIGRpZG4n dCB3b3JrLgotICAgICAgICBpZiB0ZXN0IC16ICIkX0dfaW5zdHZlciI7IHRoZW4KLSAgICAgICAg ICBmdW5jX2Vycm9yICJQcmVyZXF1aXNpdGUgJyRfR19hcHAnIG5vdCBmb3VuZC4gUGxlYXNlIGlu c3RhbGwgaXQsIG9yCi0nZXhwb3J0ICRfR19hcHB2YXI9L3BhdGgvdG8vJF9HX2FwcCcuIgotICAg ICAgICAgIGZ1bmNfY2hlY2tfdmVyc2lvbnNfcmVzdWx0PWZhbHNlCi0KLSAgICAgICAgIyBGYWls IGlmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHdoYXQgd2UgaGF2ZSBpcyByZXF1aXJlZC4KLSAgICAg ICAgZWxzZQotICAgICAgICAgIGZ1bmNfdmVyYm9zZSAiZm91bmQgJyRfR19hcHAnIHZlcnNpb24g JF9HX2luc3R2ZXIuIgotCi0JICBjYXNlICRfR19yZXF2ZXIgaW4KLSAgICAgICAgICAgID0qKQot ICAgICAgICAgICAgICAjIElmICRidWlsZHJlcSB2ZXJzaW9uIHN0YXJ0cyB3aXRoICc9JywgdmVy c2lvbiBtdXN0Ci0JICAgICAgIyBtYXRjaCB0aGUgaW5zdGFsbGVkIHByb2dyYW0gZXhhY3RseS4K LQkgICAgICB0ZXN0ICJ4JF9HX3JlcXZlciIgPSAieD0kX0dfaW5zdHZlciIgfHwgewotCSAgICAg ICAgZnVuY19lcnJvciAiXAotICAnJF9HX2FwcCcgdmVyc2lvbiA9PSAkX0dfaW5zdHZlciBpcyB0 b28gb2xkCi0gICdleGFjdGx5ICRfR19hcHAtJF9HX3JlcXZlciBpcyByZXF1aXJlZCIKLSAgICAg ICAgICAgICAgICBmdW5jX2NoZWNrX3ZlcnNpb25zX3Jlc3VsdD1mYWxzZQotICAgICAgICAgICAg ICB9Ci0JICAgICAgOzsKLQkgICAgKikKLSAgICAgICAgICAgICAgIyBPdGhlcndpc2UsIGFueXRo aW5nIHRoYXQgaXMgbm90IG9sZGVyIGlzIGEgbWF0Y2guCi0gICAgICAgICAgICAgIGZ1bmNfbHRf dmVyICIkX0dfcmVxdmVyIiAiJF9HX2luc3R2ZXIiIHx8IHsKLSAgICAgICAgICAgICAgICBmdW5j X2Vycm9yICJcCi0gICckX0dfYXBwJyB2ZXJzaW9uID09ICRfR19pbnN0dmVyIGlzIHRvbyBvbGQK LSAgJyRfR19hcHAnIHZlcnNpb24gPj0gJF9HX3JlcXZlciBpcyByZXF1aXJlZCIKLSAgICAgICAg ICAgIGZ1bmNfY2hlY2tfdmVyc2lvbnNfcmVzdWx0PWZhbHNlCi0gICAgICAgICAgICAgIH0KLQkg ICAgICA7OwotCSAgZXNhYwotICAgICAgICBmaQotICAgICAgZmkKLSAgICBkb25lCi19Ci0KLQot IyBmdW5jX2NsZWFudXBfZ251bGliCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUmVjdXJzaXZl bHkgZGVsZXRlIGV2ZXJ5dGhpbmcgYmVsb3cgdGhlIHBhdGggaW4gdGhlIGdsb2JhbCB2YXJpYWJs ZQotIyBHTlVMSUJfUEFUSC4KLWZ1bmNfY2xlYW51cF9nbnVsaWIgKCkKLXsKLSAgICAkZGVidWdf Y21kCi0KLSAgICBfR19zdGF0dXM9JD8KLSAgICAkUk0gLWZyICIkZ251bGliX3BhdGgiCi0gICAg ZXhpdCAkX0dfc3RhdHVzCi19Ci0KLQotIyBmdW5jX2Rvd25sb2FkX3BvX2ZpbGVzIFNVQkRJUiBE T01BSU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1mdW5jX2Rvd25s b2FkX3BvX2ZpbGVzICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19lY2hvICJnZXR0 aW5nIHRyYW5zbGF0aW9ucyBpbnRvICQxIGZvciAkMi4uLiIKLSAgICBfR19jbWQ9YHByaW50ZiAi JHBvX2Rvd25sb2FkX2NvbW1hbmRfZm9ybWF0IiAiJDIiICIkMSJgCi0gICAgZXZhbCAiJF9HX2Nt ZCIKLX0KLQotCi0jIGZ1bmNfdXBkYXRlX3BvX2ZpbGVzIFBPX0RJUiBET01BSU4KLSMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBNaXJyb3IgLnBvIGZpbGVzIHRvICRwb19k aXIvLnJlZmVyZW5jZSBhbmQgY29weSBvbmx5IHRoZSBuZXcKLSMgb3IgbW9kaWZpZWQgb25lcyBp bnRvICRwb19kaXIuICBBbHNvIHVwZGF0ZSAkcG9fZGlyL0xJTkdVQVMuCi0jIE5vdGUgcG8gZmls ZXMgdGhhdCBleGlzdCBsb2NhbGx5IG9ubHkgYXJlIGxlZnQgaW4gJHBvX2RpciBidXQgd2lsbAot IyBub3QgYmUgaW5jbHVkZWQgaW4gTElOR1VBUyBhbmQgaGVuY2Ugd2lsbCBub3QgYmUgZGlzdHJp YnV0ZWQuCi1mdW5jX3VwZGF0ZV9wb19maWxlcyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAg ICMgRGlyZWN0b3J5IGNvbnRhaW5pbmcgcHJpbWFyeSAucG8gZmlsZXMuCi0gICAgIyBPdmVyd3Jp dGUgdGhlbSBvbmx5IHdoZW4gd2UncmUgc3VyZSBhIC5wbyBmaWxlIGlzIG5ldy4KLSAgICBfR19w b19kaXI9JDEKLSAgICBfR19kb21haW49JDIKLQotICAgICMgTWlycm9yICoucG8gZmlsZXMgaW50 byB0aGlzIGRpci4KLSAgICAjIFVzdWFsbHkgY29udGFpbnMgKi5zMSBjaGVja3N1bSBmaWxlcy4K LSAgICBfR19yZWZfcG9fZGlyPSRfR19wb19kaXIvLnJlZmVyZW5jZQotCi0gICAgdGVzdCAtZCAi JF9HX3JlZl9wb19kaXIiIHx8IG1rZGlyICRfR19yZWZfcG9fZGlyIHx8IHJldHVybgotICAgIGZ1 bmNfZG93bmxvYWRfcG9fZmlsZXMgJF9HX3JlZl9wb19kaXIgJF9HX2RvbWFpbiBcCi0gICAgICAm JiBscyAiJF9HX3JlZl9wb19kaXIiLyoucG8gMj4vZGV2L251bGwgXAotICAgICAgICAgfCRTRUQg LWUgJ3N8LiovfHwnIC1lICdzfFwucG8kfHwnID4gIiRfR19wb19kaXIvTElOR1VBUyIgfHwgcmV0 dXJuCi0KLSAgICAjIEZpbmQgc2hhMXN1bSwgbmFtZWQgZ3NoYTFzdW0gb24gTWFjUG9ydHMsIGFu ZCBzaGFzdW0gb24gTWFjT1MgMTAuNisuCi0gICAgZnVuY19maW5kX3Rvb2wgU0hBMVNVTSBzaGEx c3VtIGdzaGExc3VtIHNoYXN1bSBzaGExCi0KLSAgICB0ZXN0IC1uICIkU0hBMVNVTSIgfHwgZnVu Y19mYXRhbF9lcnJvciAiXAotUGxlYXNlIGluc3RhbGwgR05VIENvcmV1dGlscywgb3IgJ2V4cG9y dCBTSEExU1VNPS9wYXRoL3RvL3NoYTFzdW0nLiIKLQotICAgIF9HX2xhbmdzPWBjZCAkX0dfcmVm X3BvX2RpciAmJiBlY2hvICoucG98JFNFRCAnc3xcLnBvfHxnJ2AKLSAgICB0ZXN0ICcqJyA9ICIk X0dfbGFuZ3MiICYmIF9HX2xhbmdzPXgKLSAgICBmb3IgX0dfcG8gaW4gJF9HX2xhbmdzOyBkbwot ICAgICAgY2FzZSAkX0dfcG8gaW4geCkgY29udGludWU7OyBlc2FjCi0gICAgICBfR19uZXdfcG89 JF9HX3JlZl9wb19kaXIvJF9HX3BvLnBvCi0gICAgICBfR19ja3N1bV9maWxlPSRfR19yZWZfcG9f ZGlyLyRfR19wby5zMQotICAgICAgaWYgISB0ZXN0IC1mICIkX0dfY2tzdW1fZmlsZSIgfHwKLSAg ICAgICAgICAhIHRlc3QgLWYgIiRfR19wb19kaXIvJF9HX3BvLnBvIiB8fAotICAgICAgICAgICEg JFNIQTFTVU0gLWMgIiRfR19ja3N1bV9maWxlIiBcCi0gICAgICAgICAgICAgIDwgIiRfR19uZXdf cG8iID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIGVjaG8gInVwZGF0ZWQgJF9HX3BvX2Rpci8k X0dfcG8ucG8uLi4iCi0gICAgICAgIGNwICIkX0dfbmV3X3BvIiAiJF9HX3BvX2Rpci8kX0dfcG8u cG8iIFwKLSAgICAgICAgICAmJiAkU0hBMVNVTSA8ICIkX0dfbmV3X3BvIiA+ICIkX0dfY2tzdW1f ZmlsZSIgfHwgcmV0dXJuCi0gICAgICBmaQotICAgIGRvbmUKLX0KLQotCi0KLSMjIC0tLS0tLS0t LS0tLS0tLSAjIwotIyMgT3B0aW9uIHBhcnNpbmcuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0gIyMK LQotIyBIb29rIGluIHRoZSBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIG91ciBvd24gb3B0aW9ucyBh cmUgcGFyc2VkIGR1cmluZwotIyB0aGUgb3B0aW9uIHBhcnNpbmcgbG9vcC4KLQotdXNhZ2U9JyRw cm9ncGF0aCBbT1BUSU9OXS4uLicKLQotIyBTaG9ydCBoZWxwIG1lc3NhZ2UgaW4gcmVzcG9uc2Ug dG8gJy1oJy4gIEFkZCB0byB0aGlzIGluICdib290c3RyYXAuY29uZicKLSMgaWYgeW91IGFjY2Vw dCBhbnkgYWRkaXRpb25hbCBvcHRpb25zLgotdXNhZ2VfbWVzc2FnZT0iQ29tbW9uIEJvb3RzdHJh cCBPcHRpb25zOgotICAgLWMsIC0tY29weSAgICAgICAgIGNvcHkgZmlsZXMgaW5zdGVhZCBvZiBj cmVhdGluZyBzeW1ib2xpYyBsaW5rcy4KLSAgICAgICAtLWRlYnVnICAgICAgICBlbmFibGUgdmVy Ym9zZSBzaGVsbCB0cmFjaW5nCi0gICAtbiwgLS1kcnktcnVuICAgICAgcHJpbnQgY29tbWFuZHMg cmF0aGVyIHRoYW4gcnVubmluZyB0aGVtCi0gICAtZiwgLS1mb3JjZSAgICAgICAgYXR0ZW1wdCB0 byBib290c3RyYXAgZXZlbiBpZiB0aGUgc291cmNlcyBzZWVtIG5vdAotICAgICAgICAgICAgICAg ICAgICAgIHRvIGhhdmUgYmVlbiBjaGVja2VkIG91dC4KLSAgICAgICAtLWdudWxpYi1zcmNkaXI9 RElSTkFNRQotICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYSBsb2NhbCBkaXJlY3Rvcnkg d2hlcmUgZ251bGliIHNvdXJjZXMKLSAgICAgICAgICAgICAgICAgICAgICByZXNpZGUuIFVzZSB0 aGlzIGlmIHlvdSBhbHJlYWR5IGhhdmUgdGhlIGdudWxpYgotICAgICAgICAgICAgICAgICAgICAg IHNvdXJjZXMgb24geW91ciBtYWNoaW5lLCBhbmQgZG9uJ3Qgd2FudCB0byB3YXN0ZQotICAgICAg ICAgICAgICAgICAgICAgIHlvdXIgYmFuZHdpZHRoIGRvd25sb2FkaW5nIHRoZW0gYWdhaW4uICBE ZWZhdWx0cyB0bwotICAgICAgICAgICAgICAgICAgICAgIFwkR05VTElCX1NSQ0RJUi4KLSAgICAg ICAtLW5vLXdhcm5pbmdzICBlcXVpdmFsZW50IHRvICctV25vbmUnCi0gICAgICAgLS1za2lwLWdp dCAgICAgZG8gbm90IGZldGNoIGZpbGVzIGZyb20gcmVtb3RlIHJlcG9zaXRvcmllcwotICAgICAg IC0tc2tpcC1wbyAgICAgIGRvIG5vdCBkb3dubG9hZCBwbyBmaWxlcy4KLSAgIC12LCAtLXZlcmJv c2UgICAgICB2ZXJib3NlbHkgcmVwb3J0IHByb2Nlc3NpbmcKLSAgICAgICAtLXZlcnNpb24gICAg ICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gICAtVywgLS13YXJuaW5ncz1D QVRFR09SWQotICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydCB0aGUgd2FybmluZ3MgZmFsbGlu ZyBpbiBDQVRFR09SWSBbYWxsXQotICAgLWgsIC0taGVscCAgICAgICAgIHByaW50IHNob3J0IG9y IGxvbmcgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0iCi0KLSMgQWRkaXRpb25hbCB0ZXh0IGFwcGVu ZGVkIHRvICd1c2FnZV9tZXNzYWdlJyBpbiByZXNwb25zZSB0byAnLS1oZWxwJy4KLWxvbmdfaGVs cF9tZXNzYWdlPSRsb25nX2hlbHBfbWVzc2FnZSIKLSAgICAgICAncmVjb21tZW5kJyAgICBzaG93 IHdhcm5pbmdzIGFib3V0IG1pc3NpbmcgcmVjb21tZW5kZWQgcGFja2FnZXMKLSAgICAgICAnc2V0 dGluZ3MnICAgICBzaG93IHdhcm5pbmdzIGFib3V0IG1pc3NpbmcgJyRwcm9nbmFtZS5jb25mJyBz ZXR0aW5ncwotICAgICAgICd1cGdyYWRlJyAgICAgIHNob3cgd2FybmluZ3MgYWJvdXQgb3V0LWRh dGVkIGZpbGVzCi0KLUlmIHRoZSBmaWxlICckcHJvZ25hbWUuY29uZicgZXhpc3RzIGluIHRoZSBz YW1lIGRpcmVjdG9yeSBhcyB0aGlzCi1zY3JpcHQsIGl0cyBjb250ZW50cyBhcmUgcmVhZCBhcyBz aGVsbCB2YXJpYWJsZXMgdG8gY29uZmlndXJlIHRoZQotYm9vdHN0cmFwLgotCi1Gb3IgYnVpbGQg cHJlcmVxdWlzaXRlcywgZW52aXJvbm1lbnQgdmFyaWFibGVzIGxpa2UgXCRBVVRPQ09ORiBhbmQK LVwkQU1UQVIgYXJlIGhvbm9yZWQuCi0KLVJ1bm5pbmcgd2l0aG91dCBhcmd1bWVudHMgd2lsbCBz dWZmaWNlIGluIG1vc3QgY2FzZXMuCi0iCi0KLSMgV2FybmluZyBjYXRlZ29yaWVzIHVzZWQgYnkg J2Jvb3RzdHJhcCcsIGFwcGVuZCBvdGhlcnMgaWYgeW91IHVzZSB0aGVtCi0jIGluIHlvdXIgJ2Jv b3RzdHJhcC5jb25mJy4KLXdhcm5pbmdfY2F0ZWdvcmllcz0ncmVjb21tZW5kIHNldHRpbmdzIHVw Z3JhZGUnCi0KLQotIyBib290c3RyYXBfb3B0aW9uc19wcmVwIFtBUkddLi4uCi0jIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUHJlcGFyYXRpb24gZm9yIG9wdGlvbnMgcGFyc2Vk IGJ5IEJvb3RzdHJhcC4KLWJvb3RzdHJhcF9vcHRpb25zX3ByZXAgKCkKLXsKLSAgICAkZGVidWdf Y21kCi0KLSAgICAjIE9wdGlvbiBkZWZhdWx0czoKLSAgICBvcHRfY29weT0ke2NvcHktJ2ZhbHNl J30KLSAgICBvcHRfZHJ5X3J1bj1mYWxzZQotICAgIG9wdF9mb3JjZT1mYWxzZQotICAgIG9wdF9n bnVsaWJfc3JjZGlyPSRHTlVMSUJfU1JDRElSCi0gICAgb3B0X3NraXBfZ2l0PWZhbHNlCi0gICAg b3B0X3NraXBfcG89ZmFsc2UKLQotICAgICMgUGFzcyBiYWNrIHRoZSBsaXN0IG9mIG9wdGlvbnMg d2UgY29uc3VtZWQuCi0gICAgZnVuY19xdW90ZSBldmFsICR7MSsiJEAifQotICAgIGJvb3RzdHJh cF9vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3F1b3RlX3Jlc3VsdAotfQotZnVuY19hZGRfaG9v ayBmdW5jX29wdGlvbnNfcHJlcCBib290c3RyYXBfb3B0aW9uc19wcmVwCi0KLQotIyBib290c3Ry YXBfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIyBQcm92aWRlIGhhbmRsaW5nIGZvciBCb290c3RyYXAgc3BlY2lmaWMgb3B0aW9ucy4K LWJvb3RzdHJhcF9wYXJzZV9vcHRpb25zICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgIyBQ ZXJmb3JtIG91ciBvd24gbG9vcCB0byBjb25zdW1lIGFzIG1hbnkgb3B0aW9ucyBhcyBwb3NzaWJs ZSBpbgotICAgICMgZWFjaCBpdGVyYXRpb24uCi0gICAgd2hpbGUgdGVzdCAkIyAtZ3QgMDsgZG8K LSAgICAgIF9HX29wdD0kMQotICAgICAgc2hpZnQKLSAgICAgIGNhc2UgJF9HX29wdCBpbgotICAg ICAgICAtLWRyeS1ydW58LS1kcnlydW58LW4pCi0gICAgICAgICAgICAgICAgICAgICAgb3B0X2Ry eV9ydW49OiA7OwotICAgICAgICAtLWNvcHl8LWMpICAgIG9wdF9jb3B5PTogOzsKLSAgICAgICAg LS1mb3JjZXwtZikgICBvcHRfZm9yY2U9OiA7OwotCi0gICAgICAgIC0tZ251bGliLXNyY2RpcikK LSAgICAgICAgICAgICAgICAgICAgICB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRf R19vcHQgJiYgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICBvcHRfZ251bGliX3NyY2Rpcj0k MQotICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgOzsK LQotICAgICAgICAtLXNraXAtZ2l0fC0tbm8tZ2l0KQotICAgICAgICAgICAgICAgICAgICAgIG9w dF9za2lwX2dpdD06Ci0gICAgICAgICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAtLXNraXAt cG98LS1uby1wbykKLSAgICAgICAgICAgICAgICAgICAgICBvcHRfc2tpcF9wbz06Ci0gICAgICAg ICAgICAgICAgICAgICAgOzsKLQotICAgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9y dCBvcHRpb25zOgotICAgICAgICAtYyp8LWYqfC1uKikKLSAgICAgICAgICAgICAgICAgICAgICBm dW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKLSAgICAgICAgICAgICAgICAgICAgICBzZXQg ZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9Ci0gICAgICAgICAg ICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgICop ICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07IHNoaWZ0OyBicmVhayA7 OwotICAgICAgZXNhYwotICAgIGRvbmUKLQotICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFs IHBhcmFtZXRlcnMgZm9yIGNhbGxlcgotICAgIGZ1bmNfcXVvdGUgZXZhbCAkezErIiRAIn0KLSAg ICBib290c3RyYXBfcGFyc2Vfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcXVvdGVfcmVzdWx0Ci19Ci1m dW5jX2FkZF9ob29rIGZ1bmNfcGFyc2Vfb3B0aW9ucyBib290c3RyYXBfcGFyc2Vfb3B0aW9ucwot Ci0KLSMgYm9vdHN0cmFwX3ZhbGlkYXRlX29wdGlvbnMgW0FSR10uLi4KLSMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiBv cHRpb24gc2V0dGluZ3MgYW5kL29yIHVuY29uc3VtZWQKLSMgYXJndW1lbnRzLgotYm9vdHN0cmFw X3ZhbGlkYXRlX29wdGlvbnMgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIFZhbGlkYXRl IG9wdGlvbnMuCi0gICAgdGVzdCAkIyAtZ3QgMCBcCi0gICAgICAgICYmIGZ1bmNfZmF0YWxfaGVs cCAidG9vIG1hbnkgYXJndW1lbnRzIgotCi0gICAgIyBQYXNzIGJhY2sgdGhlIChlbXB0eSkgbGlz dCBvZiB1bmNvbnN1bWVkIG9wdGlvbnMuCi0gICAgZnVuY19xdW90ZSBldmFsICR7MSsiJEAifQot ICAgIGJvb3RzdHJhcF92YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9yZXN1bHQK LX0KLWZ1bmNfYWRkX2hvb2sgZnVuY192YWxpZGF0ZV9vcHRpb25zIGJvb3RzdHJhcF92YWxpZGF0 ZV9vcHRpb25zCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gIyMKLSMjIFNvdXJjZSBwYWNrYWdlIGN1c3RvbWlzYXRpb25zIGluICdib290 c3RyYXAuY29uZicuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSAjIwotCi0jIE92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24s IGlmIG5lY2Vzc2FyeS4KLSMgTWFrZSBzdXJlIHRoYXQgYm9vdHN0cmFwLmNvbmYgaXMgc291cmNl ZCBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeQotIyBpZiB3ZSB3ZXJlIGludm9rZWQgYXMgInNo IGJvb3RzdHJhcCIuCi1jYXNlICQwIGluCi0gICovKikgdGVzdCAtciAiJDAuY29uZiIgJiYgLiAi JDAuY29uZiIgOzsKLSAgKikgdGVzdCAtciAiJDAuY29uZiIgJiYgLiAuLyIkMC5jb25mIiA7Owot ZXNhYwotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIEFjdHVh bGx5IHBlcmZvcm0gdGhlIGJvb3RzdHJhcC4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0gIyMKLQotZnVuY19ib290c3RyYXAgJHsxKyIkQCJ9Ci0KLSMgVGhlIEVuZC4KLWV4 aXQgJHtleGl0X3N0YXR1cy0kRVhJVF9TVUNDRVNTfQotCi0jIExvY2FsIHZhcmlhYmxlczoKLSMg bW9kZTogc2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOiAyCi0jIGV2YWw6IChhZGQtaG9v ayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1wYXR0ZXJuOiAi NTAwL3NjcmlwdHZlcnNpb249JTp5LSUwMm0tJTAyZC4lMDJIOyAjIFVUQyIKLSMgdGltZS1zdGFt cC10aW1lLXpvbmU6ICJVVEMiCi0jIEVuZDoKZGlmZiAtLWdpdCBhL2dsL2J1aWxkLWF1eC9leHRy YWN0LXRyYWNlIGIvZ2wvYnVpbGQtYXV4L2V4dHJhY3QtdHJhY2UKZGVsZXRlZCBmaWxlIG1vZGUg MTAwNzU1CmluZGV4IDkwN2VmMDk5Li4wMDAwMDAwMAotLS0gYS9nbC9idWlsZC1hdXgvZXh0cmFj dC10cmFjZQorKysgL2Rldi9udWxsCkBAIC0xLDQ4NiArMCwwIEBACi0jISAvYmluL3NoCi0KLSMg RXh0cmFjdCBtYWNybyBhcmd1bWVudHMgZnJvbSBhdXRvdG9vbHMgaW5wdXQgd2l0aCBHTlUgTTQu Ci0jIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDEwCi0jCi0jIFRoaXMgaXMgZnJlZSBz b2Z0d2FyZS4gIFRoZXJlIGlzIE5PIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IKLSMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotIwotIyBDb3B5cmln aHQgKEMpIDIwMTAtMjAxOSwgMjAyMSwgMjAyMyBCb290c3RyYXAgQXV0aG9ycwotIwotIyBUaGlz IGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNl Ci0jIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4sIGFuZCBHUEwgdmVyc2lv biAyIG9yIGxhdGVyCi0jIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1s Pi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBvZgotIyB0aGVzZSBsaWNlbnNlcyB3aGVuIHVzaW5nIG9y IHJlZGlzdHJpYnV0aW5nIHRoaXMgc29mdHdhcmUgb3IgYW55IG9mCi0jIHRoZSBmaWxlcyB3aXRo aW4gaXQuICBTZWUgdGhlIFVSTHMgYWJvdmUsIG9yIHRoZSBmaWxlIGBMSUNFTlNFYAotIyBpbmNs dWRlZCBpbiB0aGUgQm9vdHN0cmFwIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGZ1bGwgbGljZW5zZSB0 ZXh0cy4KLQotIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvOgotIyA8 aHR0cHM6Ly9naXRodWIuY29tL2dudWxpYi1tb2R1bGVzL2Jvb3RzdHJhcC9pc3N1ZXM+Ci0KLSMg TWFrZSBzdXJlIHdlJ3ZlIGV2YWx1YXRlZCBzY3JpcHRzIHdlIGRlcGVuZCBvbi4KLXRlc3QgLXog IiRwcm9ncGF0aCIgJiYgLiBgZWNobyAiJDAiIHwke1NFRC1zZWR9ICdzfFteL10qJHx8J2AvZnVu Y2xpYi5zaAotdGVzdCBleHRyYWN0LXRyYWNlID0gIiRwcm9nbmFtZSIgJiYgLiBgZWNobyAiJDAi IHwke1NFRC1zZWR9ICdzfFteL10qJHx8J2Avb3B0aW9ucy1wYXJzZXIKLQotIyBTZXQgYSB2ZXJz aW9uIHN0cmluZy4KLXNjcmlwdHZlcnNpb249MjAxOS0wMi0xOS4xNTsgIyBVVEMKLQotCi0jIyAt LS0tLS0gIyMKLSMjIFVzYWdlLiAjIwotIyMgLS0tLS0tICMjCi0KLSMgUnVuICcuL2V4dHJhY3Qt dHJhY2UgLS1oZWxwJyBmb3IgaGVscCB3aXRoIHVzaW5nIHRoaXMgc2NyaXB0IGZyb20gdGhlCi0j IGNvbW1hbmQgbGluZS4KLSMKLSMgT3Igc291cmNlIGZpcnN0ICdvcHRpb25zLXBhcnNlcicgYW5k IHRoZW4gdGhpcyBmaWxlIGludG8geW91ciBvd24KLSMgc2NyaXB0cyBpbiBvcmRlciB0byBtYWtl IHVzZSBvZiB0aGUgZnVuY3Rpb24gYW5kIHZhcmlhYmxlIGZyYW1ld29yawotIyB0aGV5IGRlZmlu ZSwgYW5kIGFsc28gdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGZvcmtpbmcgdG8gcnVuIHRoaXMK LSMgc2NyaXB0IGluIGl0cyBvd24gcHJvY2VzcyBvbiBldmVyeSBjYWxsLgotCi0KLQotIyMgLS0t LS0tLS0tLS0tLS0tLS0gIyMKLSMjIEhlbHBlciBmdW5jdGlvbnMuICMjCi0jIyAtLS0tLS0tLS0t LS0tLS0tLSAjIwotCi0jIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgaGVscGVyIGZ1bmN0aW9u cyB1c2VkIGJ5IHRoZSByZXN0IG9mCi0jICdleHRyYWN0LXRyYWNlJy4KLQotCi0jIGZ1bmNfYXV0 b2NvbmZfY29uZmlndXJlIE1BWUJFLUNPTkZJR1VSRS1GSUxFCi0jIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IE1BWUJFLUNPTkZJR1VS RS1GSUxFIGlzIHRoZSBuYW1lIG9mIGEgZmlsZSBpbiB0aGUgY3VycmVudAotIyBkaXJlY3Rvcnkg dGhhdCBjb250YWlucyBhbiB1bmNvbW1lbnRlZCBjYWxsIHRvIEFDX0lOSVQuCi1mdW5jX2F1dG9j b25mX2NvbmZpZ3VyZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIF9HX3NlZF9ub19jb21t ZW50PScKLSAgICAgIHN8Iy4qJHx8Ci0gICAgICBzfF5kbmwgLiokfHwKLSAgICAgIHN8IGRubCAu KiR8fCcKLSAgICBfR19hY19pbml0PQotCi0gICAgIyBJZiB3ZSB3ZXJlIHBhc3NlZCBhIGdlbnVp bmUgZmlsZSwgbWFrZSBzdXJlIGl0IGNhbGxzIEFDX0lOSVQuCi0gICAgdGVzdCAtZiAiJDEiIFwK LSAgICAgICYmIF9HX2FjX2luaXQ9YCRTRUQgIiRfR19zZWRfbm9fY29tbWVudCIgIiQxIiB8JEdS RVAgQUNfSU5JVGAKLQotICAgICMgT3RoZXJ3aXNlIGl0IGlzIG5vdCBhIGdlbnVpbmUgQXV0b2Nv bmYgaW5wdXQgZmlsZS4KLSAgICB0ZXN0IC1uICIkX0dfYWNfaW5pdCIKLSAgICBfR19zdGF0dXM9 JD8KLQotICAgIHRlc3QgMCAtbmUgIiRfR19zdGF0dXMiIFwKLSAgICAgICYmIGZ1bmNfdmVyYm9z ZSAiJyQxJyBub3QgdXNpbmcgQXV0b2NvbmYiCi0KLSAgICAoZXhpdCAkX0dfc3RhdHVzKQotfQot Ci0KLSMgZnVuY190b29sX3ZlcnNpb25fb3V0cHV0IENNRCBbRkFUQUwtRVJST1ItTVNHXQotIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEF0dGVtcHQg dG8gcnVuICdDTUQgLS12ZXJzaW9uJywgZGlzY2FyZGluZyBlcnJvcnMuICBUaGUgb3V0cHV0IGNh biBiZQotIyBpZ25vcmVkIGJ5IHJlZGlyZWN0aW5nIHN0ZG91dCwgYW5kIHRoaXMgZnVuY3Rpb24g dXNlZCBzaW1wbHkgdG8gdGVzdAotIyB3aGV0aGVyIHRoZSBjb21tYW5kIGV4aXN0cyBhbmQgZXhp dHMgbm9ybWFsbHkgd2hlbiBwYXNzZWQgYQotIyAnLS12ZXJzaW9uJyBhcmd1bWVudC4KLSMgV2hl biBGQVRBTC1FUlJPUi1NU0cgaXMgZ2l2ZW4sIHRoZW4gdGhpcyBmdW5jdGlvbiB3aWxsIGRpc3Bs YXkgdGhlCi0jIG1lc3NhZ2UgYW5kIGV4aXQgaWYgcnVubmluZyAnQ01EIC0tdmVyc2lvbicgcmV0 dXJucyBhIG5vbi16ZXJvIGV4aXQKLSMgc3RhdHVzLgotZnVuY190b29sX3ZlcnNpb25fb3V0cHV0 ICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgX0dfY21kPSQxCi0gICAgX0dfZmF0YWxfZXJy b3JfbXNnPSQyCi0KLSAgICAjIFNvbWUgdG9vbHMsIGxpa2UgJ2dpdDJjbCcgcHJvZHVjZSB0aG91 c2FuZHMgb2YgbGluZXMgb2Ygb3V0cHV0Ci0gICAgIyB1bmxlc3Mgc3RkaW4gaXMgL2Rldi9udWxs IC0gaW4gdGhhdCBjYXNlIHdlIHdhbnQgdG8gcmV0dXJuCi0gICAgIyBzdWNjZXNzZnVsbHkgd2l0 aG91dCBzYXZpbmcgYWxsIG9mIHRoYXQgb3V0cHV0LiAgT3RoZXIgdG9vbHMsCi0gICAgIyBzdWNo IGFzICdoZWxwMm1hbicgZXhpdCB3aXRoIGEgbm9uLXplcm8gc3RhdHVzIHdoZW4gc3RkaW4gY29t ZXMKLSAgICAjIGZyb20gL2Rldi9udWxsLCBzbyB3ZSByZS1leGVjdXRlIHdpdGhvdXQgL2Rldi9u dWxsIGlmIHRoYXQKLSAgICAjIGhhcHBlbnMuICBUaGlzIG1lYW5zIHRoYXQgb2NjYXNpb25hbGx5 LCB0aGUgb3V0cHV0IGZyb20gYm90aCBjYWxscwotICAgICMgZW5kcyB1cCBpbiB0aGUgcmVzdWx0 LCBidXQgdGhlIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIGRpc2NhcmQgdGhlCi0gICAgIyBvdXRw dXQgZnJvbSBvbmUgY2FsbCwgYW5kIGhvcGUgdGhlIG90aGVyIHByb2R1Y2VzIHNvbWV0aGluZyB1 c2VmdWwuCi0gICAgeyAkX0dfY21kIC0tdmVyc2lvbiA8L2Rldi9udWxsIHx8ICRfR19jbWQgLS12 ZXJzaW9uOyB9IDI+L2Rldi9udWxsCi0gICAgX0dfc3RhdHVzPSQ/Ci0KLSAgICB0ZXN0IDAgLW5l ICIkX0dfc3RhdHVzIiAmJiB0ZXN0IC1uICIkX0dfZmF0YWxfZXJyb3JfbXNnIiBcCi0gICAgICAg ICYmIGZ1bmNfZmF0YWxfZXJyb3IgIiRfR19mYXRhbF9lcnJvcl9tc2ciCi0KLSAgICAoZXhpdCAk X0dfc3RhdHVzKQotfQotCi0KLSMgZnVuY190b29sX3ZlcnNpb25fbnVtYmVyIENNRCBbRkFUQUwt RVJST1ItTVNHXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0jIFBhc3MgYXJndW1lbnRzIHRvIGZ1bmNfdG9vbF92ZXJzaW9uX291dHB1dCwgYnV0IHNl dAotIyAkZnVuY190b29sX3ZlcnNpb25fbnVtYmVyX3Jlc3VsdCB0byB0aGUgbGFzdCBkb3QgZGVs aW1pdGVkIGRpZ2l0IHN0cmluZwotIyBvbiB0aGUgZmlyc3QgbGluZSBvZiBvdXRwdXQuCi1mdW5j X3Rvb2xfdmVyc2lvbl9udW1iZXIgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR192ZXJv dXQ9YGZ1bmNfdG9vbF92ZXJzaW9uX291dHB1dCAiJEAiYAotICAgIF9HX3N0YXR1cz0kPwotCi0g ICAgIyBBIHZlcnNpb24gbnVtYmVyIHN0YXJ0cyB3aXRoIGEgZGlnaXQgZm9sbG93aW5nIGEgc3Bh Y2Ugb24gdGhlIGZpcnN0Ci0gICAgIyBsaW5lIG9mIG91dHB1dCBmcm9tIGAtLXZlcnNpb25gLgot ICAgIF9HX3Zlcm91dD1gZWNobyAiJF9HX3Zlcm91dCIgfHNlZCAxcWAKLSAgICBpZiB0ZXN0IC1u ICIkX0dfdmVyb3V0IjsgdGhlbgotICAgICAgX0dfdmVybnVtPWBleHByICIkX0dfdmVyb3V0IiA6 ICcuKiBcKFswLTldW14gXSpcKSdgCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLW4gIiRfR192ZXJu dW0iOyB0aGVuCi0gICAgICBwcmludGYgJyVzXG4nICIkX0dfdmVybnVtIgotICAgIGVsc2UKLSAg ICAgIHByaW50ZiAnJXNcbicgIiRfR192ZXJvdXQiCi0gICAgZmkKLQotICAgIChleGl0ICRfR19z dGF0dXMpCi19Ci0KLQotIyBmdW5jX2ZpbmRfdG9vbCBFTlZWQVIgTkFNRVMuLi4KLSMgLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlYXJjaCBmb3IgYSByZXF1aXJlZCBwcm9ncmFt LiAgVXNlIHRoZSB2YWx1ZSBvZiBFTlZWQVIsIGlmIHNldCwKLSMgb3RoZXJ3aXNlIGZpbmQgdGhl IGZpcnN0IG9mIHRoZSBOQU1FUyB0aGF0IGNhbiBiZSBydW4gKGkuZS4sCi0jIHN1cHBvcnRzIC0t dmVyc2lvbikuICBJZiBmb3VuZCwgc2V0IEVOVlZBUiB0byB0aGUgcHJvZ3JhbSBuYW1lLAotIyBk aWUgb3RoZXJ3aXNlLgotZnVuY19maW5kX3Rvb2wgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAg ICBfR19maW5kX3Rvb2xfZW52dmFyPSQxCi0gICAgc2hpZnQKLSAgICBfR19maW5kX3Rvb2xfbmFt ZXM9JEAKLSAgICBldmFsICJfR19maW5kX3Rvb2xfcmVzPVwkJF9HX2ZpbmRfdG9vbF9lbnZ2YXIi Ci0gICAgaWYgdGVzdCAtbiAiJF9HX2ZpbmRfdG9vbF9yZXMiOyB0aGVuCi0gICAgICBfR19maW5k X3Rvb2xfZXJyb3JfcHJlZml4PSJcJCRmaW5kX3Rvb2xfZW52dmFyOiAiCi0gICAgZWxzZQotICAg ICAgX0dfZmluZF90b29sX3Jlcz0KLSAgICAgIF9HX2Jlc3R2ZXI9Ci0gICAgICBmb3IgX0dfcHJv ZwotICAgICAgZG8KLSAgICAgICAgX0dfZmluZF90b29sX3NhdmVfSUZTPSRJRlMKLSAgICAgICAg SUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KLQlmb3IgX0dfZGlyIGluICRQQVRIOyBkbwotCSAgSUZT PSRfR19maW5kX3Rvb2xfc2F2ZV9JRlMKLQkgIF9HX3Byb2dwYXRoPSRfR19kaXIvJF9HX3Byb2cK LSAgICAgICAgICB0ZXN0IC1yICIkX0dfcHJvZ3BhdGgiICYmIHsKLSAgICAgICAgICAgIF9HX2N1 cnZlcj1gZnVuY190b29sX3ZlcnNpb25fbnVtYmVyICRfR19wcm9ncGF0aGAKLQkgICAgY2FzZSAk X0dfYmVzdHZlciwkX0dfY3VydmVyIGluCi0JICAgICwpCi0JICAgICAgIyBmaXJzdCBub24tLXZl cnNpb24gcmVzcG9uc2l2ZSBwcm9nIHN0aWNrcyEKLSAgICAgICAgICAgICAgdGVzdCAtbiAiJF9H X3Byb2dwYXRoIiB8fCBfR19maW5kX3Rvb2xfcmVzPSRfR19wcm9ncGF0aAotICAgICAgICAgICAg ICA7OwotICAgICAgICAgICAgLCopCi0JICAgICAgIyBmaXJzdCAtLXZlcnNpb24gcmVzcG9uc2l2 ZSBwcm9nIGJlYXRzIG5vbi0tdmVyc2lvbiByZXNwb25zaXZlIQotCSAgICAgIF9HX2ZpbmRfdG9v bF9yZXM9JF9HX3Byb2dwYXRoCi0JICAgICAgX0dfYmVzdHZlcj0kX0dfY3VydmVyCi0JICAgICAg OzsKLQkgICAgKiwqKQotCSAgICAgICMgYW5vdGhlciAtLXZlcnNpb24gcmVzcG9uc2l2ZSBwcm9n IG11c3QgYmUgbmV3ZXIgdG8gYmVhdCBwcmV2aW91cyBvbmUhCi0JICAgICAgdGVzdCAieCRfR19j dXJ2ZXIiID0gIngkX0dfYmVzdHZlciIgXAotCQl8fCBmdW5jX2x0X3ZlciAiJF9HX2N1cnZlciIg IiRfR19iZXN0dmVyIiBcCi0JCXx8IHsKLQkJICAgICBfR19maW5kX3Rvb2xfcmVzPSRfR19wcm9n cGF0aAotCQkgICAgIF9HX2Jlc3R2ZXI9JF9HX2N1cnZlcgotCSAgICAgICAgICAgfQotCSAgICAg IDs7Ci0JICAgIGVzYWMKLSAgICAgICAgICB9Ci0JZG9uZQotCUlGUz0kX0dfZmluZF90b29sX3Nh dmVfSUZTCi0gICAgICBkb25lCi0gICAgZmkKLSAgICBpZiB0ZXN0IC1uICIkX0dfZmluZF90b29s X3JlcyI7IHRoZW4KLSAgICAgIGZ1bmNfdG9vbF92ZXJzaW9uX251bWJlciA+L2Rldi9udWxsICRf R19maW5kX3Rvb2xfcmVzICJcCi0ke19HX2ZpbmRfdG9vbF9lcnJvcl9wcmVmaXh9Q2Fubm90IHJ1 biAnJF9HX2ZpbmRfdG9vbF9yZXMgLS12ZXJzaW9uJyIKLQotICAgICAgIyBNYWtlIHN1cmUgdGhl IHJlc3VsdCBpcyBleHBvcnRlZCB0byB0aGUgZW52aXJvbm1lbnQgZm9yIGNoaWxkcmVuCi0gICAg ICAjIHRvIHVzZS4KLSAgICAgIGV2YWwgIiRfR19maW5kX3Rvb2xfZW52dmFyPVwkX0dfZmluZF90 b29sX3JlcyIKLSAgICAgIGV2YWwgImV4cG9ydCAkX0dfZmluZF90b29sX2VudnZhciIKLSAgICBl bHNlCi0gICAgICBmdW5jX2Vycm9yICJcCi1PbmUgb2YgdGhlc2UgaXMgcmVxdWlyZWQ6Ci0gICAg ICAgJF9HX2ZpbmRfdG9vbF9uYW1lcyIKLSAgICBmaQotfQotCi0KLQotIyMgLS0tLS0tLS0tLS0t LS0tLS0tLS0gIyMKLSMjIFJlc291cmNlIG1hbmFnZW1lbnQuICMjCi0jIyAtLS0tLS0tLS0tLS0t LS0tLS0tLSAjIwotCi0jIFRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZnVu Y3Rpb25zIHRoYXQgZWFjaCBlbnN1cmUgYQotIyBwYXJ0aWN1bGFyIHJlc291cmNlIChhIGZpbGUs IG9yIGEgbm9uLWVtcHR5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yCi0jIGV4YW1wbGUpIGlz IGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJvcHJpYXRlIHRvIGV4dHJhY3QgZGVmYXVsdCB2YWx1ZXMK LSMgZnJvbSBwZXJ0aW5lbnQgcGFja2FnZSBmaWxlcy4gIFdoZXJlIGEgdmFyaWFibGUgYWxyZWFk eSBoYXMgYSBub24tCi0jIGVtcHR5IHZhbHVlIChhcyBzZXQgYnkgdGhlIHBhY2thZ2UncyAnYm9v dHN0cmFwLmNvbmYnKSwgdGhhdCB2YWx1ZSBpcwotIyB1c2VkIGluIHByZWZlcmVuY2UgdG8gZGVy aXZpbmcgdGhlIGRlZmF1bHQuIENhbGwgdGhlbSB1c2luZyB0aGVpcgotIyBhc3NvY2lhdGVkICdy ZXF1aXJlXyonIHZhcmlhYmxlIHRvIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGV4ZWN1dGVkLCBhdAot IyBtb3N0LCBvbmNlLgotIwotIyBJdCdzIGVudGlyZWx5IGRlbGliZXJhdGUgdGhhdCBjYWxsaW5n IHRoZXNlIGZ1bmN0aW9ucyBjYW4gc2V0Ci0jIHZhcmlhYmxlcyB0aGF0IGRvbid0IG9iZXkgdGhl IG5hbWVzcGFjZSBsaW1pdGF0aW9ucyBvYmV5ZWQgYnkgdGhlIHJlc3QKLSMgb2YgdGhpcyBmaWxl LCBpbiBvcmRlciB0aGF0IHRoYXQgdGhleSBiZSBhcyB1c2VmdWwgYXMgcG9zc2libGUgdG8KLSMg Y2FsbGVycy4KLQotCi0jIHJlcXVpcmVfY29uZmlndXJlX2FjCi0jIC0tLS0tLS0tLS0tLS0tLS0t LS0tCi0jIEVuc3VyZSB0aGF0IHRoZXJlIGlzIGEgJ2NvbmZpZ3VyZS5hYycgb3IgJ2NvbmZpZ3Vy ZS5pbicgZmlsZSBpbiB0aGUKLSMgY3VycmVudCBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBhbiB1 bmNvbW1lbnRlZCBjYWxsIHRvIEFDX0lOSVQsIGFuZAotIyB0aGF0ICckY29uZmlndXJlX2FjJyBj b250YWlucyBpdHMgbmFtZS4KLXJlcXVpcmVfY29uZmlndXJlX2FjPWZ1bmNfcmVxdWlyZV9jb25m aWd1cmVfYWMKLWZ1bmNfcmVxdWlyZV9jb25maWd1cmVfYWMgKCkKLXsKLSAgICAkZGVidWdfY21k Ci0KLSAgICB0ZXN0IC16ICIkY29uZmlndXJlX2FjIiBcCi0gICAgICAmJiBmdW5jX2F1dG9jb25m X2NvbmZpZ3VyZSBjb25maWd1cmUuYWMgJiYgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5hYwotICAg IHRlc3QgLXogIiRjb25maWd1cmVfYWMiIFwKLSAgICAgICYmIGZ1bmNfYXV0b2NvbmZfY29uZmln dXJlIGNvbmZpZ3VyZS5pbiAmJiBjb25maWd1cmVfYWM9Y29uZmlndXJlLmluCi0gICAgdGVzdCAt eiAiJGNvbmZpZ3VyZV9hYyIgXAotICAgICAgfHwgZnVuY192ZXJib3NlICJmb3VuZCAnJGNvbmZp Z3VyZV9hYyciCi0KLSAgICByZXF1aXJlX2NvbmZpZ3VyZV9hYz06Ci19Ci0KLQotIyByZXF1aXJl X2dudV9tNAotIyAtLS0tLS0tLS0tLS0tLQotIyBTZWFyY2ggZm9yIEdOVSBNNCwgYW5kIGV4cG9y dCBpdCBpbiAkTTQuCi1yZXF1aXJlX2dudV9tND1mdW5jX3JlcXVpcmVfZ251X200Ci1mdW5jX3Jl cXVpcmVfZ251X200ICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgdGVzdCAtbiAiJE00IiB8 fCB7Ci0gICAgICAjIEZpbmQgdGhlIGZpcnN0IG00IGJpbmFyeSB0aGF0IHJlc3BvbmRzIHRvIC0t dmVyc2lvbi4KLSAgICAgIGZ1bmNfZmluZF90b29sIE00IGdtNCBnbnVtNCBtNAotICAgIH0KLQot ICAgIHRlc3QgLW4gIiRNNCIgfHwgZnVuY19mYXRhbF9lcnJvciAiXAotUGxlYXNlIGluc3RhbGwg R05VIE00LCBvciAnZXhwb3J0IE00PS9wYXRoL3RvL2dudS9tNCcuIgotCi0gICAgZnVuY192ZXJi b3NlICJleHBvcnQgTTQ9JyRNNCciCi0KLSAgICAjIE1ha2Ugc3VyZSB0aGUgc2VhcmNoIHJlc3Vs dCBpcyB2aXNpYmxlIHRvIHN1YnNoZWxscwotICAgIGV4cG9ydCBNNAotCi0gICAgcmVxdWlyZV9n bnVfbTQ9OgotfQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLSAjIwotIyMgQ29yZSBmdW5jdGlvbnMu ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgdGhl IGhpZ2ggbGV2ZWwgZnVuY3Rpb25zIHVzZWQgd2hlbiBjYWxsaW5nIHRoaXMKLSMgZmlsZSBhcyBh IHNjcmlwdC4gJ2Z1bmNfZXh0cmFjdF90cmFjZScgaXMgcHJvYmFibHkgdGhlIG9ubHkgb25lIHRo YXQgeW91Ci0jIHdvbid0IHdhbnQgdG8gcmVwbGFjZSBpZiB5b3Ugc291cmNlIHRoaXMgZmlsZSBp bnRvIHlvdXIgb3duIHNjcmlwdC4KLQotCi0jIGZ1bmNfZXh0cmFjdF90cmFjZSBNQUNST19OQU1F UyBbRklMRU5BTUVdLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0jIHNldCAnJGZ1bmNfZXh0cmFjdF90cmFjZV9yZXN1bHQnIHRvIGEgY29sb24gZGVs aW1pdGVkIGxpc3Qgb2YgYXJndW1lbnRzCi0jIHRvIGFueSBvZiB0aGUgY29tbWEgc2VwYXJhdGVk IGxpc3Qgb2YgTUFDUk9fTkFNRVMgaW4gRklMRU5BTUUuIElmIG5vCi0jIEZJTEVOQU1FIGlzIGdp dmVuLCB0aGVuICckY29uZmlndXJlX2FjJyBpcyBhc3N1bWVkLgotZnVuY19leHRyYWN0X3RyYWNl ICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfY29uZmlndXJlX2FjCi0gICAg JHJlcXVpcmVfZ251X200Ci0KLSAgICBfR19tNF90cmFjZXM9YCRFQ0hPICItLXRyYWNlPSQxIiB8 JFNFRCAncyUsJSAtLXRyYWNlPSVnJ2AKLSAgICBfR19yZV9tYWNyb3M9YCRFQ0hPICIoJDEpIiB8 JFNFRCAncyUsJXwlZydgCi0gICAgX0dfbWFjcm9zPSIkMSI7IHNoaWZ0Ci0gICAgdGVzdCAkIyAt Z3QgMCB8fCB7Ci0gICAgICBzZXQgZHVtbXkgJGNvbmZpZ3VyZV9hYwotICAgICAgc2hpZnQKLSAg ICB9Ci0KLSAgICAjIEdlbmVyYXRlIGFuIGVycm9yIGlmIHRoZSBmaXJzdCBmaWxlIGlzIG1pc3Np bmcKLSAgICA8IiQxIgotCi0gICAgIyBTYWRseSwgd2UgY2FuJ3QgdXNlICdhdXRvbTR0ZScgdHJh Y2luZyB0byBleHRyYWN0IG1hY3JvIGFyZ3VtZW50cywKLSAgICAjIGJlY2F1c2UgaXQgY29tcGxh aW5zIGFib3V0IHRoaW5ncyB3ZSB3YW50IHRvIGlnbm9yZSBhdCBib290c3RyYXAKLSAgICAjIHRp bWUgLSBsaWtlIG1pc3NpbmcgbTRfaW5jbHVkZSBmaWxlczsgQUNfUFJFUkVRIGJlaW5nIG5ld2Vy IHRoYW4KLSAgICAjIHRoZSBpbnN0YWxsZWQgYXV0b2NvbmY7IGFuZCByZXR1cm5zIG5vdGhpbmcg d2hlbiB0cmFjaW5nCi0gICAgIyAnQU1fSU5JVF9BVVRPTUFLRScgd2hlbiBhY2xvY2FsIGhhc24n dCBiZWVuIGdlbmVyYXRlZCB5ZXQuCi0gICAgIwotICAgICMgVGhlIGZvbGxvd2luZyB0cmllcyB0 byBlbXVsYXRlIGEgbGVzcyBwZXJzbmlja2V0eSB2ZXJzaW9uIG9mIChhbmQKLSAgICAjIGR1ZSB0 byBub3QgaGF2aW5nIHRvIHdhaXQgZm9yIFBlcmwgc3RhcnR1cCBvbiBldmVyeSBpbnZvY2F0aW9u LAotICAgICMgaXQncyBwcm9iYWJseSBmYXN0ZXIgdG9vKToKLSAgICAjCi0gICAgIyAgICBhdXRv bTR0ZSAtLWxhbmd1YWdlPUF1dG9jb25mIC0tdHJhY2U9JG15X21hY3JvOlwkJSAiJEAiCi0gICAg IwotICAgICMgRmlyc3Qgd2UgZ2l2ZSBhIG1pbmltYWwgc2V0IG9mIG1hY3JvIGRlY2xhcmF0aW9u cyB0byBNNCB0byBwcmltZQotICAgICMgaXQgZm9yIHJlYWRpbmcgQXV0b2NvbmYgbWFjcm9zLCB3 aGlsZSBzdGlsbCBwcm92aWRpbmcgc29tZSBvZiB0aGUKLSAgICAjIGZ1bmN0aW9uYWxpdHkgZ2Vu ZXJhbGx5IHVzZWQgYXQgbTQtdGltZSB0byBzdXBwbHkgZHluYW1pYwotICAgICMgYXJndW1lbnRz IHRvIEF1dG9jb2YgZnVuY3Rpb25zLCBidXQgd2l0aG91dCBmb2xsb3dpbmcKLSAgICAjICdtNF9z P2luY2x1ZGUnIGZpbGVzLgotICAgIF9HX21pbmk9JwotICAgICAgICBkbmwgIEluaXRpYWxpc2F0 aW9uLgotICAgICAgICBtNF9jaGFuZ2VxdW90ZShbLF0pCi0gICAgICAgIG00X2RlZmluZShbbTRf Y29weV0sICAgW200X2RlZmluZShbJDJdLCBtNF9kZWZuKFskMV0pKV0pCi0gICAgICAgIG00X2Rl ZmluZShbbTRfcmVuYW1lXSwgW200X2NvcHkoWyQxXSwgWyQyXSltNF91bmRlZmluZShbJDFdKV0p Ci0KLSAgICAgICAgZG5sICBSZXBsYWNlIG1hY3JvcyB3aGljaCBtYXkgYWJvcnQgbTQgd2l0aCBh IG5vLW9wIHZhcmlhbnQuCi0gICAgICAgIG00X3B1c2hkZWYoW200X2Fzc2VydF0pCi0gICAgICAg IG00X3B1c2hkZWYoW200X2V4aXRdKQotICAgICAgICBtNF9wdXNoZGVmKFttNF9mYXRhbF0pCi0g ICAgICAgIG00X3B1c2hkZWYoW200X200ZXhpdF0pCi0KLSAgICAgICAgZG5sICBSZXBsYWNlIG1h Y3JvcyB0aGF0IG1pZ2h0IGJyZWFrIHN0ZGVyciBvZiBtNC4KLSAgICAgICAgbTRfcHVzaGRlZihb bTRfZXJycHJpbnRdKQotICAgICAgICBtNF9wdXNoZGVmKFttNF9lcnJwcmludG5dKQotICAgICAg ICBtNF9wdXNoZGVmKFttNF9pbmNsdWRlXSkKLSAgICAgICAgbTRfcHVzaGRlZihbbTRfd2Fybl0p Ci0KLSAgICAgICAgZG5sICBBdm9pZCBzaWRlLWVmZmVjdHMgb2YgdHJhY2luZyBieSBleHRyYWN0 LXRyYWNlLgotICAgICAgICBtNF9wdXNoZGVmKFttNF9tYWtldGVtcF0pCi0gICAgICAgIG00X3B1 c2hkZWYoW200X21rc3RlbXBdKQotCi0gICAgICAgIGRubCAgVE9ETzogcmVhc29ucyBmb3IgdGhp cwotICAgICAgICBtNF9wdXNoZGVmKFttNF9kbmxdKQotICAgICAgICBtNF9wdXNoZGVmKFttNF9t NHdyYXBdKQotCi0gICAgICAgIGRubCAgQ29weSBhbmQgcmVuYW1lIG1hY3JvcyBub3QgaGFuZGxl ZCBieSAibTQgLS1wcmVmaXgiLgotICAgICAgICBtNF9kZWZpbmUoW2RubF0sICAgICAgICAgW200 X2J1aWx0aW4oW2RubF0pXSkKLSAgICAgICAgbTRfY29weShbbTRfZGVmaW5lXSwgICAgIFttNF9k ZWZ1bl0pCi0gICAgICAgIG00X3JlbmFtZShbbTRfaWZlbHNlXSwgICBbbTRfaWZdKQotICAgICAg ICBtNF9yZW5hbWUoW200X3BhdHN1YnN0XSwgW200X2JwYXRzdWJzdF0pCi0gICAgICAgIG00X3Jl bmFtZShbbTRfcmVnZXhwXSwgICBbbTRfYnJlZ2V4cF0pCi0KLSAgICAgICAgZG5sICAibTRzdWdh ci5taW5pIiAtIHVzZWZ1bCBtNC10aW1lIG1hY3JvcyBmb3IgZHluYW1pYyBhcmd1bWVudHMuCi0g ICAgICAgIGRubCAgSWYgd2UgZGlzY292ZXIgcGFja2FnZXMgdGhhdCBuZWVkIG1vcmUgbTQgbWFj cm9zIGRlZmluZWQgaW4KLSAgICAgICAgZG5sICBvcmRlciB0byBib290c3RyYXAgY29ycmVjdGx5 LCBhZGQgdGhlbSBoZXJlOgotICAgICAgICBtNF9kZWZpbmUoW200X2JtYXRjaF0sCi0gICAgICAg ICAgICBbbTRfaWYoWyQjXSwgMCwgW10sIFskI10sIDEsIFtdLCBbJCNdLCAyLCBbJDJdLAotICAg ICAgICAgICAgICAgICAgIFttNF9pZihtNF9icmVnZXhwKFskMV0sIFskMl0pLCAtMSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgWyQwKFskMV0sIG00X3NoaWZ0MygkQCkpXSwgWyQzXSldKV0p Ci0gICAgICAgIG00X2RlZmluZShbbTRfaWZuZGVmXSwgW200X2lmZGVmKFskMV0sIFskM10sIFsk Ml0pXSkKLSAgICAgICAgbTRfZGVmaW5lKFttNF9pZnNldF0sCi0gICAgICAgICAgICBbbTRfaWZk ZWYoWyQxXSwgW200X2lmdmFsKG00X2RlZm4oWyQxXSksIFskMl0sIFskM10pXSwgWyQzXSldKQot ICAgICAgICBtNF9kZWZpbmUoW200X3JlcXVpcmVdLCBbJDFdKQotICAgICAgICBtNF9kZWZpbmUo W200X3NoaWZ0M10sIFttNF9zaGlmdChtNHNoaWZ0KG00c2hpZnQoJEApKSldKQotCi0gICAgICAg IGRubCAgImF1dG9jb25mLm1pbmkiIC0gdGhpbmdzIGZyb20gYXV0b2NvbmYgbWFjcm9zIHdlIGNh cmUgYWJvdXQuCi0gICAgICAgIG00X2NvcHkoW200X2RlZnVuXSwgW0FDX0RFRlVOXSkKLQotICAg ICAgICBkbmwgIER1bW15IGRlZmluaXRpb25zIGZvciB0aGUgbWFjcm9zIHdlIHdhbnQgdG8gdHJh Y2UuCi0gICAgICAgIGRubCAgQU1fSU5JVF9BVVRPTUFLRSBhdCBsZWFzdCBwcm9kdWNlcyBubyB0 cmFjZSB3aXRob3V0IHRoaXMuCi0gICAgJwotCi0gICAgX0dfc2F2ZT0kSUZTCi0gICAgSUZTPSwK LSAgICBmb3IgX0dfbWFjcm8gaW4gJF9HX21hY3JvczsgZG8KLSAgICAgIElGUz0kX0dfc2F2ZQot ICAgICAgZnVuY19hcHBlbmQgX0dfbWluaSAiQUNfREVGVU4oWyRfR19tYWNyb10pJG5sIgotICAg IGRvbmUKLSAgICBJRlM9JF9HX3NhdmUKLQotICAgICMgV2UgZGlzY2FyZCBNNCdzIHN0ZG91dCwg YnV0IHRoZSBNNCB0cmFjZSBvdXRwdXQgZnJvbSByZWFkaW5nIG91cgotICAgICMgImF1dG9jb25m Lm1pbmkiIGZvbGxvd2VkIGJ5IGFueSBvdGhlciBmaWxlcyBwYXNzZWQgdG8gdGhpcwotICAgICMg ZnVuY3Rpb24gaXMgdGhlbiBzY2FubmVkIGJ5IHNlZCB0byB0cmFuc2Zvcm0gaXQgaW50byBhIGNv bG9uCi0gICAgIyBkZWxpbWl0ZWQgYXJndW1lbnQgbGlzdCBhc3NpZ25lZCB0byBhIHNoZWxsIHZh cmlhYmxlLgotICAgIF9HX3RyYW5zZm9ybT0nc3wjLiokfHw7IHN8XmRubCAuKiR8fDsgc3wgZG5s IC4qJHx8OycKLQotICAgICMgVW5mb3J0dW5hdGVseSwgYWx0ZXJuYXRpb24gaW4gcmVnZXhwIGFk ZHJlc3NlcyBkb2Vzbid0IHdvcmsgaW4gYXQKLSAgICAjIGxlYXN0IEJTRCAoYW5kIGhlbmNlIE1h YyBPUyBYKSBzZWQsIHNvIHdlIGhhdmUgdG8gYXBwZW5kIGEgY2FwdHVyZQotICAgICMgYW5kIHBy aW50IGJsb2NrIGZvciBlYWNoIHRyYWNlZCBtYWNybyB0byB0aGUgc2VkIHRyYW5zZm9ybSBzY3Jp cHQuCi0gICAgX0dfc2F2ZT0kSUZTCi0gICAgSUZTPSwKLSAgICBmb3IgX0dfbWFjcm8gaW4gJF9H X21hY3JvczsgZG8KLSAgICAgIElGUz0kX0dfc2F2ZQotICAgICAgZnVuY19hcHBlbmQgX0dfdHJh bnNmb3JtICcKLSAgICAgICAgL15tNHRyYWNlOiAtMS0gJyIkX0dfbWFjcm8iJy8gewotICAgICAg ICAgIHN8Xm00dHJhY2U6IC0xLSAnIiRfR19tYWNybyInWyhbXSp8fAotICAgICAgICAgIHN8XSwg W1tdfDp8ZwotICAgICAgICAgIHN8W10pXSokfDp8Ci0gICAgICAgICAgc3xcKC5cKTokfFwxfAot ICAgICAgICAgIHAKLSAgICAgICAgfScKLSAgICBkb25lCi0gICAgSUZTPSRfR19zYXZlCi0KLSAg ICAjIFNhdmUgdGhlIGNvbW1hbmQgcGlwZWxpbmUgcmVzdWx0cyBmb3IgZnVydGhlciB1c2UgYnkg Y2FsbGVycyBvZgotICAgICMgdGhpcyBmdW5jdGlvbi4KLSAgICBmdW5jX2V4dHJhY3RfdHJhY2Vf cmVzdWx0PWAkRUNITyAiJF9HX21pbmkiIFwKLSAgICAgIHwkTTQgLWRhcSAtLXByZWZpeCAkX0df bTRfdHJhY2VzIC0gIiRAIiAyPiYxIDE+L2Rldi9udWxsIFwKLSAgICAgIHwkU0VEIC1uIC1lICIk X0dfdHJhbnNmb3JtImAKLX0KLQotCi0jIGZ1bmNfZXh0cmFjdF90cmFjZV9maXJzdCBNQUNST19O QU1FUyBbRklMRU5BTUVdLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0jIEV4YWN0bHkgbGlrZSBmdW5jX2V4dHJhY3RfdHJhY2UsIGV4Y2Vw dCB0aGF0IG9ubHkgdGhlIGZpcnN0IGFyZ3VtZW50Ci0jIHRvIHRoZSBmaXJzdCBpbnZvY2F0aW9u IG9mIG9uZSBvZiB0aGUgY29tbWEgc2VwYXJhdGVkIE1BQ1JPX05BTUVTIGlzCi0jIHJldHVybmVk IGluICckZnVuY19leHRyYWN0X3RyYWNlX2ZpcnN0X3Jlc3VsdCcuCi1mdW5jX2V4dHJhY3RfdHJh Y2VfZmlyc3QgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2V4dHJhY3RfdHJhY2Ug JHsxKyIkQCJ9Ci0gICAgZnVuY19leHRyYWN0X3RyYWNlX2ZpcnN0X3Jlc3VsdD1gJEVDSE8gIiRm dW5jX2V4dHJhY3RfdHJhY2VfcmVzdWx0IiBcCi0gICAgICB8JFNFRCAtZSAnc3w6LiokfHxnJyAt ZSAxcWAKLX0KLQotCi0jIGZ1bmNfbWFpbiBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0K LWZ1bmNfbWFpbiAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICMgQ29uZmlndXJhdGlvbi4K LSAgICB1c2FnZT0nJHByb2duYW1lIE1BQ1JPX05BTUUgRklMRSBbLi4uXScKLQotICAgIGxvbmdf aGVscF9tZXNzYWdlPScKLVRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGlzIHByb2dyYW0gaXMgdGhl IG5hbWUgb2YgYW4gYXV0b3Rvb2xzIG1hY3JvCi13aG9zZSBhcmd1bWVudHMgeW91IHdhbnQgdG8g ZXh0cmFjdCBieSBleGFtaW5pbmcgdGhlIGZpbGVzIGxpc3RlZCBpbiB0aGUKLXJlbWFpbmluZyBh cmd1bWVudHMgdXNpbmcgdGhlIHNhbWUgdG9vbCB0aGF0IEF1dG9jb25mIGFuZCBBdXRvbWFrZSB1 c2UsCi1HTlUgTTQuCi0KLVRoZSBhcmd1bWVudHMgYXJlIHJldHVybmVkIHNlcGFyYXRlZCBieSBj b2xvbnMsIHdpdGggZWFjaCB0cmFjZWQgY2FsbAotb24gYSBzZXBhcmF0ZSBsaW5lLicKLQotICAg ICMgT3B0aW9uIHByb2Nlc3NpbmcuCi0gICAgZnVuY19vcHRpb25zICIkQCIKLSAgICBldmFsIHNl dCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAotCi0gICAgIyBWYWxpZGF0ZSBy ZW1haW5pbmcgbm9uLW9wdGlvbiBhcmd1bWVudHMuCi0gICAgdGVzdCAkIyAtZ3QgMSBcCi0gICAg ICAgIHx8IGZ1bmNfZmF0YWxfaGVscCAibm90IGVub3VnaCBhcmd1bWVudHMiCi0KLSAgICAjIFBh c3Mgbm9uLW9wdGlvbiBhcmd1bWVudHMgdG8gZXh0cmFjdGlvbiBmdW5jdGlvbi4KLSAgICBmdW5j X2V4dHJhY3RfdHJhY2UgIiRAIgotCi0gICAgIyBEaXNwbGF5IHJlc3VsdHMuCi0gICAgdGVzdCAt biAiJGZ1bmNfZXh0cmFjdF90cmFjZV9yZXN1bHQiIFwKLSAgICAgICAgJiYgJEVDSE8gIiRmdW5j X2V4dHJhY3RfdHJhY2VfcmVzdWx0IgotCi0gICAgIyBUaGUgRW5kLgotICAgIGV4aXQgJEVYSVRf U1VDQ0VTUwotfQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgQWN0 dWFsbHkgcGVyZm9ybSB0aGUgdHJhY2UuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0gIyMKLQotIyBPbmx5IGNhbGwgJ2Z1bmNfbWFpbicgaWYgdGhpcyBzY3JpcHQgd2FzIGNhbGxl ZCBkaXJlY3RseS4KLXRlc3QgZXh0cmFjdC10cmFjZSA9ICIkcHJvZ25hbWUiICYmIGZ1bmNfbWFp biAiJEAiCi0KLSMgTG9jYWwgdmFyaWFibGVzOgotIyBtb2RlOiBzaGVsbC1zY3JpcHQKLSMgc2gt aW5kZW50YXRpb246IDIKLSMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1l LXN0YW1wKQotIyB0aW1lLXN0YW1wLXBhdHRlcm46ICI1MC9zY3JpcHR2ZXJzaW9uPSU6eS0lMDJt LSUwMmQuJTAySDsgIyBVVEMiCi0jIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgotIyBFbmQ6 CmRpZmYgLS1naXQgYS9nbC9idWlsZC1hdXgvZnVuY2xpYi5zaCBiL2dsL2J1aWxkLWF1eC9mdW5j bGliLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODg0ZWMxYS4uMDAwMDAwMDAK LS0tIGEvZ2wvYnVpbGQtYXV4L2Z1bmNsaWIuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxNDY1ICsw LDAgQEAKLSMgU2V0IGEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgc2NyaXB0Lgotc2NyaXB0dmVy c2lvbj0yMDE5LTAyLTE5LjE1OyAjIFVUQwotCi0jIEdlbmVyYWwgc2hlbGwgc2NyaXB0IGJvaWxl ciBwbGF0ZSwgYW5kIGhlbHBlciBmdW5jdGlvbnMuCi0jIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVn aGFuLCAyMDA0Ci0KLSMgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLiAgVGhlcmUgaXMgTk8gd2FycmFu dHk7IG5vdCBldmVuIGZvcgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuCi0jCi0jIENvcHlyaWdodCAoQykgMjAwNC0yMDE5LCAyMDIxLCAyMDIz IEJvb3RzdHJhcCBBdXRob3JzCi0jCi0jIFRoaXMgZmlsZSBpcyBkdWFsIGxpY2Vuc2VkIHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgTUlUIGxpY2Vuc2UKLSMgPGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcv bGljZW5zZXMvTUlUPiwgYW5kIEdQTCB2ZXJzaW9uIDIgb3IgbGF0ZXIKLSMgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWw+LiAgWW91IG11c3QgYXBwbHkgb25lIG9mCi0j IHRoZXNlIGxpY2Vuc2VzIHdoZW4gdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhpcyBzb2Z0d2Fy ZSBvciBhbnkgb2YKLSMgdGhlIGZpbGVzIHdpdGhpbiBpdC4gIFNlZSB0aGUgVVJMcyBhYm92ZSwg b3IgdGhlIGZpbGUgYExJQ0VOU0VgCi0jIGluY2x1ZGVkIGluIHRoZSBCb290c3RyYXAgZGlzdHJp YnV0aW9uIGZvciB0aGUgZnVsbCBsaWNlbnNlIHRleHRzLgotCi0jIFBsZWFzZSByZXBvcnQgYnVn cyBvciBwcm9wb3NlIHBhdGNoZXMgdG86Ci0jIDxodHRwczovL2dpdGh1Yi5jb20vZ251bGliLW1v ZHVsZXMvYm9vdHN0cmFwL2lzc3Vlcz4KLQotCi0jIyAtLS0tLS0gIyMKLSMjIFVzYWdlLiAjIwot IyMgLS0tLS0tICMjCi0KLSMgRXZhbHVhdGUgdGhpcyBmaWxlIG5lYXIgdGhlIHRvcCBvZiB5b3Vy IHNjcmlwdCB0byBnYWluIGFjY2VzcyB0bwotIyB0aGUgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMg ZGVmaW5lZCBoZXJlOgotIwotIyAgIC4gYGVjaG8gIiQwIiB8ICR7U0VELXNlZH0gJ3N8W14vXSok fHwnYC9idWlsZC1hdXgvZnVuY2xpYi5zaAotIwotIyBJZiB5b3UgbmVlZCB0byBvdmVycmlkZSBh bnkgb2YgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGUKLSMgc2V0dGluZ3MsIGRvIHRo YXQgYmVmb3JlIGV2YWx1YXRpbmcgdGhpcyBmaWxlLgotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0t LS0tICMjCi0jIyBTaGVsbCBub3JtYWxpc2F0aW9uLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0t LS0gIyMKLQotIyBTb21lIHNoZWxscyBuZWVkIGEgbGl0dGxlIGhlbHAgdG8gYmUgYXMgQm91cm5l IGNvbXBhdGlibGUgYXMgcG9zc2libGUuCi0jIEJlZm9yZSBkb2luZyBhbnl0aGluZyBlbHNlLCBt YWtlIHN1cmUgYWxsIHRoYXQgaGVscCBoYXMgYmVlbiBwcm92aWRlZCEKLQotRFVBTENBU0U9MTsg ZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitz ZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLSAgZW11bGF0ZSBz aAotICBOVUxMQ01EPToKLSAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0 dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCi0gICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAg RGlzYWJsZSB0aGlzIGZlYXR1cmUuCi0gIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotICBz ZXRvcHQgTk9fR0xPQl9TVUJTVAotZWxzZQotICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAg aW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7IGVzYWMKLWZpCi0KLSMgTkxTIG51aXNhbmNlczog V2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyBpbiBjYXNlIHRoZXkgYXJlIHJlcXVpcmVkIGxhdGVyLgot X0dfdXNlcl9sb2NhbGU9Ci1fR19zYWZlX2xvY2FsZT0KLWZvciBfR192YXIgaW4gTEFORyBMQU5H VUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUwotZG8KLSAgZXZhbCAi aWYgdGVzdCBzZXQgPSBcIlwkeyRfR192YXIrc2V0fVwiOyB0aGVuCi0gICAgICAgICAgc2F2ZV8k X0dfdmFyPVwkJF9HX3ZhcgotICAgICAgICAgICRfR192YXI9QwotCSAgZXhwb3J0ICRfR192YXIK LQkgIF9HX3VzZXJfbG9jYWxlPVwiJF9HX3Zhcj1cXFwkc2F2ZV9cJF9HX3ZhcjsgXCRfR191c2Vy X2xvY2FsZVwiCi0JICBfR19zYWZlX2xvY2FsZT1cIiRfR192YXI9QzsgXCRfR19zYWZlX2xvY2Fs ZVwiCi0JZmkiCi1kb25lCi0jIFRoZXNlIE5MUyB2YXJzIGFyZSBzZXQgdW5jb25kaXRpb25hbGx5 IChib290c3RyYXAgaXNzdWUgIzI0KS4gIFVuc2V0IHRob3NlCi0jIGluIGNhc2UgdGhlIGVudmly b25tZW50IHJlc2V0IGlzIG5lZWRlZCBsYXRlciBhbmQgdGhlICRzYXZlXyogdmFyaWFudCBpcyBu b3QKLSMgZGVmaW5lZCAoc2VlIHRoZSBjb2RlIGFib3ZlKS4KLUxDX0FMTD1DCi1MQU5HVUFHRT1D Ci1leHBvcnQgTEFOR1VBR0UgTENfQUxMCi0KLSMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJs ZSBkZWZhdWx0Ci1zcD0nICcKLW5sPScKLScKLUlGUz0iJHNwCSRubCIKLQotIyBUaGVyZSBhcmUg YXBwYXJlbnRseSBzb21lIHN5c3RlbXMgdGhhdCB1c2UgJzsnIGFzIGEgUEFUSCBzZXBhcmF0b3Ih Ci1pZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgotICBQQVRIX1NF UEFSQVRPUj06Ci0gIChQQVRIPScvYmluOy9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9k ZXYvbnVsbCAyPiYxICYmIHsKLSAgICAoUEFUSD0nL2JpbjovYmluJzsgRlBBVEg9JFBBVEg7IHNo IC1jIDopID4vZGV2L251bGwgMj4mMSB8fAotICAgICAgUEFUSF9TRVBBUkFUT1I9JzsnCi0gIH0K LWZpCi0KLQotIyBmdW5jX3Vuc2V0IFZBUgotIyAtLS0tLS0tLS0tLS0tLQotIyBQb3J0YWJseSB1 bnNldCBWQVIuCi0jIEluIHNvbWUgc2hlbGxzLCBhbiAndW5zZXQgVkFSJyBzdGF0ZW1lbnQgbGVh dmVzIGEgbm9uLXplcm8gcmV0dXJuCi0jIHN0YXR1cyBpZiBWQVIgaXMgYWxyZWFkeSB1bnNldCwg d2hpY2ggbWlnaHQgYmUgcHJvYmxlbWF0aWMgaWYgdGhlCi0jIHN0YXRlbWVudCBpcyB1c2VkIGF0 IHRoZSBlbmQgb2YgYSBmdW5jdGlvbiAodGh1cyBwb2lzb25pbmcgaXRzIHJldHVybgotIyB2YWx1 ZSkgb3Igd2hlbiAnc2V0IC1lJyBpcyBhY3RpdmUgKGNhdXNpbmcgZXZlbiBhIHNwdXJpb3VzIGFi b3J0IG9mCi0jIHRoZSBzY3JpcHQgaW4gdGhpcyBjYXNlKS4KLWZ1bmNfdW5zZXQgKCkKLXsKLSAg ICB7IGV2YWwgJDE9OyAoZXZhbCB1bnNldCAkMSkgPi9kZXYvbnVsbCAyPiYxICYmIGV2YWwgdW5z ZXQgJDEgfHwgOiA7IH0KLX0KLQotCi0jIE1ha2Ugc3VyZSBDRFBBVEggZG9lc24ndCBjYXVzZSBg Y2RgIGNvbW1hbmRzIHRvIG91dHB1dCB0aGUgdGFyZ2V0IGRpci4KLWZ1bmNfdW5zZXQgQ0RQQVRI Ci0KLSMgTWFrZSBzdXJlICR7LEUsRn1HUkVQIGJlaGF2ZSBzYW5lbHkuCi1mdW5jX3Vuc2V0IEdS RVBfT1BUSU9OUwotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIExvY2F0 ZSBjb21tYW5kIHV0aWxpdGllcy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMK LQotCi0jIGZ1bmNfZXhlY3V0YWJsZV9wIEZJTEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot IyBDaGVjayB0aGF0IEZJTEUgaXMgYW4gZXhlY3V0YWJsZSByZWd1bGFyIGZpbGUuCi1mdW5jX2V4 ZWN1dGFibGVfcCAoKQotewotICAgIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC14ICIkMSIKLX0KLQot Ci0jIGZ1bmNfcGF0aF9wcm9ncyBQUk9HU19MSVNUIENIRUNLX0ZVTkMgW1BBVEhdCi0jIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlYXJjaCBmb3IgZWl0 aGVyIGEgcHJvZ3JhbSB0aGF0IHJlc3BvbmRzIHRvIC0tdmVyc2lvbiB3aXRoIG91dHB1dAotIyBj b250YWluaW5nICJHTlUiLCBvciBlbHNlIHJldHVybmVkIGJ5IENIRUNLX0ZVTkMgb3RoZXJ3aXNl LCBieQotIyB0cnlpbmcgYWxsIHRoZSBkaXJlY3RvcmllcyBpbiBQQVRIIHdpdGggZWFjaCBvZiB0 aGUgZWxlbWVudHMgb2YKLSMgUFJPR1NfTElTVC4KLSMKLSMgQ0hFQ0tfRlVOQyBzaG91bGQgYWNj ZXB0IHRoZSBwYXRoIHRvIGEgY2FuZGlkYXRlIHByb2dyYW0sIGFuZAotIyBzZXQgJGZ1bmNfY2hl Y2tfcHJvZ19yZXN1bHQgaWYgaXQgdHJ1bmNhdGVzIGl0cyBvdXRwdXQgbGVzcyB0aGFuCi0jICRf R19wYXRoX3Byb2dfbWF4IGNoYXJhY3RlcnMuCi1mdW5jX3BhdGhfcHJvZ3MgKCkKLXsKLSAgICBf R19wcm9nc19saXN0PSQxCi0gICAgX0dfY2hlY2tfZnVuYz0kMgotICAgIF9HX1BBVEg9JHszLSIk UEFUSCJ9Ci0KLSAgICBfR19wYXRoX3Byb2dfbWF4PTAKLSAgICBfR19wYXRoX3Byb2dfZm91bmQ9 ZmFsc2UKLSAgICBfR19zYXZlX0lGUz0kSUZTOyBJRlM9JHtQQVRIX1NFUEFSQVRPUi06fQotICAg IGZvciBfR19kaXIgaW4gJF9HX1BBVEg7IGRvCi0gICAgICBJRlM9JF9HX3NhdmVfSUZTCi0gICAg ICB0ZXN0IC16ICIkX0dfZGlyIiAmJiBfR19kaXI9LgotICAgICAgZm9yIF9HX3Byb2dfbmFtZSBp biAkX0dfcHJvZ3NfbGlzdDsgZG8KLSAgICAgICAgZm9yIF9leGVleHQgaW4gJycgLkVYRTsgZG8K LSAgICAgICAgICBfR19wYXRoX3Byb2c9JF9HX2Rpci8kX0dfcHJvZ19uYW1lJF9leGVleHQKLSAg ICAgICAgICBmdW5jX2V4ZWN1dGFibGVfcCAiJF9HX3BhdGhfcHJvZyIgfHwgY29udGludWUKLSAg ICAgICAgICBjYXNlIGAiJF9HX3BhdGhfcHJvZyIgLS12ZXJzaW9uIDI+JjFgIGluCi0gICAgICAg ICAgICAqR05VKikgZnVuY19wYXRoX3Byb2dzX3Jlc3VsdD0kX0dfcGF0aF9wcm9nIF9HX3BhdGhf cHJvZ19mb3VuZD06IDs7Ci0gICAgICAgICAgICAqKSAgICAgJF9HX2NoZWNrX2Z1bmMgJF9HX3Bh dGhfcHJvZwotCQkgICBmdW5jX3BhdGhfcHJvZ3NfcmVzdWx0PSRmdW5jX2NoZWNrX3Byb2dfcmVz dWx0Ci0JCSAgIDs7Ci0gICAgICAgICAgZXNhYwotICAgICAgICAgICRfR19wYXRoX3Byb2dfZm91 bmQgJiYgYnJlYWsgMwotICAgICAgICBkb25lCi0gICAgICBkb25lCi0gICAgZG9uZQotICAgIElG Uz0kX0dfc2F2ZV9JRlMKLSAgICB0ZXN0IC16ICIkZnVuY19wYXRoX3Byb2dzX3Jlc3VsdCIgJiYg ewotICAgICAgZWNobyAibm8gYWNjZXB0YWJsZSBzZWQgY291bGQgYmUgZm91bmQgaW4gXCRQQVRI IiA+JjIKLSAgICAgIGV4aXQgMQotICAgIH0KLX0KLQotCi0jIFdlIHdhbnQgdG8gYmUgYWJsZSB0 byB1c2UgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGZpbGUgYmVmb3JlIGNvbmZpZ3VyZQotIyBoYXMg ZmlndXJlZCBvdXQgd2hlcmUgdGhlIGJlc3QgYmluYXJpZXMgYXJlIGtlcHQsIHdoaWNoIG1lYW5z IHdlIGhhdmUKLSMgdG8gc2VhcmNoIGZvciB0aGVtIG91cnNlbHZlcyAtIGV4Y2VwdCB3aGVuIHRo ZSByZXN1bHRzIGFyZSBhbHJlYWR5IHNldAotIyB3aGVyZSB3ZSBza2lwIHRoZSBzZWFyY2hlcy4K LQotIyBVbmxlc3MgdGhlIHVzZXIgb3ZlcnJpZGVzIGJ5IHNldHRpbmcgU0VELCBzZWFyY2ggdGhl IHBhdGggZm9yIGVpdGhlciBHTlUKLSMgc2VkLCBvciB0aGUgc2VkIHRoYXQgdHJ1bmNhdGVzIGl0 cyBvdXRwdXQgdGhlIGxlYXN0LgotdGVzdCAteiAiJFNFRCIgJiYgewotICBfR19zZWRfc2NyaXB0 PXMvYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWEvYmJiYmJiYmJiYmJiYmJiYmJi YmJiYmJiYmJiYmJiYmJiLwotICBmb3IgX0dfaSBpbiAxIDIgMyA0IDUgNiA3OyBkbwotICAgIF9H X3NlZF9zY3JpcHQ9JF9HX3NlZF9zY3JpcHQkbmwkX0dfc2VkX3NjcmlwdAotICBkb25lCi0gIGVj aG8gIiRfR19zZWRfc2NyaXB0IiAyPi9kZXYvbnVsbCB8IHNlZCA5OXEgPmNvbmZ0ZXN0LnNlZAot ICBfR19zZWRfc2NyaXB0PQotCi0gIGZ1bmNfY2hlY2tfcHJvZ19zZWQgKCkKLSAgewotICAgIF9H X3BhdGhfcHJvZz0kMQotCi0gICAgX0dfY291bnQ9MAotICAgIHByaW50ZiAwMTIzNDU2Nzg5ID5j b25mdGVzdC5pbgotICAgIHdoaWxlIDoKLSAgICBkbwotICAgICAgY2F0IGNvbmZ0ZXN0LmluIGNv bmZ0ZXN0LmluID5jb25mdGVzdC50bXAKLSAgICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5p bgotICAgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKLSAgICAgIGVjaG8gJycgPj4gY29u ZnRlc3QubmwKLSAgICAgICIkX0dfcGF0aF9wcm9nIiAtZiBjb25mdGVzdC5zZWQgPGNvbmZ0ZXN0 Lm5sID5jb25mdGVzdC5vdXQgMj4vZGV2L251bGwgfHwgYnJlYWsKLSAgICAgIGRpZmYgY29uZnRl c3Qub3V0IGNvbmZ0ZXN0Lm5sID4vZGV2L251bGwgMj4mMSB8fCBicmVhawotICAgICAgX0dfY291 bnQ9YGV4cHIgJF9HX2NvdW50ICsgMWAKLSAgICAgIGlmIHRlc3QgIiRfR19jb3VudCIgLWd0ICIk X0dfcGF0aF9wcm9nX21heCI7IHRoZW4KLSAgICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUg aXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCi0gICAgICAgIGZ1bmNfY2hlY2tf cHJvZ19yZXN1bHQ9JF9HX3BhdGhfcHJvZwotICAgICAgICBfR19wYXRoX3Byb2dfbWF4PSRfR19j b3VudAotICAgICAgZmkKLSAgICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1v cmUgdGhhbiBlbm91Z2gKLSAgICAgIHRlc3QgMTAgLWx0ICIkX0dfY291bnQiICYmIGJyZWFrCi0g ICAgZG9uZQotICAgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBj b25mdGVzdC5vdXQKLSAgfQotCi0gIGZ1bmNfcGF0aF9wcm9ncyAic2VkIGdzZWQiIGZ1bmNfY2hl Y2tfcHJvZ19zZWQgIiRQQVRIOi91c3IveHBnNC9iaW4iCi0gIHJtIC1mIGNvbmZ0ZXN0LnNlZAot ICBTRUQ9JGZ1bmNfcGF0aF9wcm9nc19yZXN1bHQKLX0KLQotCi0jIFVubGVzcyB0aGUgdXNlciBv dmVycmlkZXMgYnkgc2V0dGluZyBHUkVQLCBzZWFyY2ggdGhlIHBhdGggZm9yIGVpdGhlciBHTlUK LSMgZ3JlcCwgb3IgdGhlIGdyZXAgdGhhdCB0cnVuY2F0ZXMgaXRzIG91dHB1dCB0aGUgbGVhc3Qu Ci10ZXN0IC16ICIkR1JFUCIgJiYgewotICBmdW5jX2NoZWNrX3Byb2dfZ3JlcCAoKQotICB7Ci0g ICAgX0dfcGF0aF9wcm9nPSQxCi0KLSAgICBfR19jb3VudD0wCi0gICAgX0dfcGF0aF9wcm9nX21h eD0wCi0gICAgcHJpbnRmIDAxMjM0NTY3ODkgPmNvbmZ0ZXN0LmluCi0gICAgd2hpbGUgOgotICAg IGRvCi0gICAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAotICAg ICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCi0gICAgICBjcCBjb25mdGVzdC5pbiBjb25m dGVzdC5ubAotICAgICAgZWNobyAnR1JFUCcgPj4gY29uZnRlc3QubmwKLSAgICAgICIkX0dfcGF0 aF9wcm9nIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8Y29uZnRlc3QubmwgPmNv bmZ0ZXN0Lm91dCAyPi9kZXYvbnVsbCB8fCBicmVhawotICAgICAgZGlmZiBjb25mdGVzdC5vdXQg Y29uZnRlc3QubmwgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCi0gICAgICBfR19jb3VudD1gZXhw ciAkX0dfY291bnQgKyAxYAotICAgICAgaWYgdGVzdCAiJF9HX2NvdW50IiAtZ3QgIiRfR19wYXRo X3Byb2dfbWF4IjsgdGhlbgotICAgICAgICAjIEJlc3Qgb25lIHNvIGZhciwgc2F2ZSBpdCBidXQg a2VlcCBsb29raW5nIGZvciBhIGJldHRlciBvbmUKLSAgICAgICAgZnVuY19jaGVja19wcm9nX3Jl c3VsdD0kX0dfcGF0aF9wcm9nCi0gICAgICAgIF9HX3BhdGhfcHJvZ19tYXg9JF9HX2NvdW50Ci0g ICAgICBmaQotICAgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFu IGVub3VnaAotICAgICAgdGVzdCAxMCAtbHQgIiRfR19jb3VudCIgJiYgYnJlYWsKLSAgICBkb25l Ci0gICAgcm0gLWYgY29uZnRlc3QuaW4gY29uZnRlc3QudG1wIGNvbmZ0ZXN0Lm5sIGNvbmZ0ZXN0 Lm91dAotICB9Ci0KLSAgZnVuY19wYXRoX3Byb2dzICJncmVwIGdncmVwIiBmdW5jX2NoZWNrX3By b2dfZ3JlcCAiJFBBVEg6L3Vzci94cGc0L2JpbiIKLSAgR1JFUD0kZnVuY19wYXRoX3Byb2dzX3Jl c3VsdAotfQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFVz ZXIgb3ZlcnJpZGFibGUgY29tbWFuZCBwYXRocy4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0gIyMKLQotIyBBbGwgdXBwZXJjYXNlIHZhcmlhYmxlIG5hbWVzIGFyZSB1c2Vk IGZvciBlbnZpcm9ubWVudCB2YXJpYWJsZXMuICBUaGVzZQotIyB2YXJpYWJsZXMgY2FuIGJlIG92 ZXJyaWRkZW4gYnkgdGhlIHVzZXIgYmVmb3JlIGNhbGxpbmcgYSBzY3JpcHQgdGhhdAotIyB1c2Vz IHRoZW0gaWYgYSBzdWl0YWJsZSBjb21tYW5kIG9mIHRoYXQgbmFtZSBpcyBub3QgYWxyZWFkeSBh dmFpbGFibGUKLSMgaW4gdGhlIGNvbW1hbmQgc2VhcmNoIFBBVEguCi0KLTogJHtDUD0iY3AgLWYi fQotOiAke0VDSE89InByaW50ZiAlc1xuIn0KLTogJHtFR1JFUD0iJEdSRVAgLUUifQotOiAke0ZH UkVQPSIkR1JFUCAtRiJ9Ci06ICR7TE5fUz0ibG4gLXMifQotOiAke01BS0U9Im1ha2UifQotOiAk e01LRElSPSJta2RpciJ9Ci06ICR7TVY9Im12IC1mIn0KLTogJHtSTT0icm0gLWYifQotOiAke1NI RUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Ci0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0t LS0gIyMKLSMjIFVzZWZ1bCBzZWQgc25pcHBldHMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0t LSAjIwotCi1zZWRfZGlybmFtZT0nc3wvW14vXSokfHwnCi1zZWRfYmFzZW5hbWU9J3N8Xi4qL3x8 JwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4g IEl0IGJhY2tzbGFzaGlmaWVzCi0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2 ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotc2VkX3F1b3RlX3N1YnN0PSdzfFwoW2Ai JFxcXVwpfFxcXDF8ZycKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlh YmxlIHJlZmVyZW5jZXMuCi1zZWRfZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxc MS9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCB0dXJucyBhIHN0cmluZyBpbnRvIGEgcmVn ZXggbWF0Y2hpbmcgZm9yIHRoZQotIyBzdHJpbmcgbGl0ZXJhbGx5Lgotc2VkX21ha2VfbGl0ZXJh bF9yZWdleD0nc3xbXS5bXiRcXCpcL118XFwmfGcnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0 IGNvbnZlcnRzIGEgdzMyIGZpbGUgbmFtZSBvciBwYXRoCi0jIHRoYXQgY29udGFpbnMgZm9yd2Fy ZCBzbGFzaGVzLCBpbnRvIG9uZSB0aGF0IGNvbnRhaW5zCi0jIChlc2NhcGVkKSBiYWNrc2xhc2hl cy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KLXNlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9 J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKLQotIyBSZS0nXCcgcGFyYW1ldGVy IGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIHNlZF9kb3VibGVfcXVvdGVfc3Vic3QgdGhhdAotIyB3 ZXJlICdcJy1lZCBpbiBpbnB1dCB0byB0aGUgc2FtZS4gIElmIGFuIG9kZCBudW1iZXIgb2YgJ1wn IHByZWNlZGVkIGEKLSMgJyQnIGluIGlucHV0IHRvIHNlZF9kb3VibGVfcXVvdGVfc3Vic3QsIHRo YXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbQotIyBleHBhbnNpb24uICBTaW5jZSBlYWNoIGlucHV0 ICdcJyBpcyBub3cgdHdvICdcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIKLSMgb2YgcnVucyBvZiBm b3VyICdcJ3MgZm9sbG93ZWQgYnkgdHdvICdcJ3MgYW5kIHRoZW4gYSAnJCcuICAnXCcgdGhhdCAn JCcuCi1fR19icz0nXFwnCi1fR19iczI9J1xcXFwnCi1fR19iczQ9J1xcXFxcXFxcJwotX0dfZG9s bGFyPSdcJCcKLXNlZF9kb3VibGVfYmFja3NsYXNoPSJcCi0gIHMvJF9HX2JzNC8mXFwKLS9nCi0g IHMvXiRfR19iczIkX0dfZG9sbGFyLyRfR19icyYvCi0gIHMvXFwoW14kX0dfYnNdXFwpJF9HX2Jz MiRfR19kb2xsYXIvXFwxJF9HX2JzMiRfR19icyRfR19kb2xsYXIvZwotICBzL1xuLy9nIgotCi0j IHJlcXVpcmVfY2hlY2tfaWZzX2JhY2tzbGFzaAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KLSMgQ2hlY2sgaWYgd2UgY2FuIHVzZSBiYWNrc2xhc2ggYXMgSUZTPSdcJyBzZXBhcmF0b3Is IGFuZCBzZXQKLSMgJGNoZWNrX2lmc19iYWNrc2hsYXNoX2Jyb2tlbiB0byAnOicgb3IgJ2ZhbHNl Jy4KLXJlcXVpcmVfY2hlY2tfaWZzX2JhY2tzbGFzaD1mdW5jX3JlcXVpcmVfY2hlY2tfaWZzX2Jh Y2tzbGFzaAotZnVuY19yZXF1aXJlX2NoZWNrX2lmc19iYWNrc2xhc2ggKCkKLXsKLSAgX0dfc2F2 ZV9JRlM9JElGUwotICBJRlM9J1wnCi0gIF9HX2NoZWNrX2lmc19iYWNrc2hsYXNoPSdhXFxiJwot ICBmb3IgX0dfaSBpbiAkX0dfY2hlY2tfaWZzX2JhY2tzaGxhc2gKLSAgZG8KLSAgY2FzZSAkX0df aSBpbgotICBhKQotICAgIGNoZWNrX2lmc19iYWNrc2hsYXNoX2Jyb2tlbj1mYWxzZQotICAgIDs7 Ci0gICcnKQotICAgIGJyZWFrCi0gICAgOzsKLSAgKikKLSAgICBjaGVja19pZnNfYmFja3NobGFz aF9icm9rZW49OgotICAgIGJyZWFrCi0gICAgOzsKLSAgZXNhYwotICBkb25lCi0gIElGUz0kX0df c2F2ZV9JRlMKLSAgcmVxdWlyZV9jaGVja19pZnNfYmFja3NsYXNoPToKLX0KLQotCi0jIyAtLS0t LS0tLS0tLS0tLS0tLSAjIwotIyMgR2xvYmFsIHZhcmlhYmxlcy4gIyMKLSMjIC0tLS0tLS0tLS0t LS0tLS0tICMjCi0KLSMgRXhjZXB0IGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBleHBsaWNpdGx5 IGxpc3RlZCBiZWxvdywgdGhlIGZvbGxvd2luZwotIyBmdW5jdGlvbnMgaW4gdGhlICdeZnVuY18n IG5hbWVzcGFjZSwgYW5kIHRoZSAnXnJlcXVpcmVfJyBuYW1lc3BhY2UKLSMgdmFyaWFibGVzIGlu aXRpYWxpc2VkIGluIHRoZSAnUmVzb3VyY2UgbWFuYWdlbWVudCcgc2VjdGlvbiwgc291cmNpbmcK LSMgdGhpcyBmaWxlIHdpbGwgbm90IHBvbGx1dGUgeW91ciBnbG9iYWwgbmFtZXNwYWNlIHdpdGgg YW55dGhpbmcKLSMgZWxzZS4gVGhlcmUncyBubyBwb3J0YWJsZSB3YXkgdG8gc2NvcGUgdmFyaWFi bGVzIGluIEJvdXJuZSBzaGVsbAotIyB0aG91Z2gsIHNvIGFjdHVhbGx5IHJ1bm5pbmcgdGhlc2Ug ZnVuY3Rpb25zIHdpbGwgc29tZXRpbWVzIHBsYWNlCi0jIHJlc3VsdHMgaW50byBhIHZhcmlhYmxl IG5hbWVkIGFmdGVyIHRoZSBmdW5jdGlvbiwgYW5kIG9mdGVuIHVzZQotIyB0ZW1wb3JhcnkgdmFy aWFibGVzIGluIHRoZSAnXl9HXycgbmFtZXNwYWNlLiBJZiB5b3UgYXJlIGNhcmVmdWwgdG8KLSMg YXZvaWQgdXNpbmcgdGhvc2UgbmFtZXNwYWNlcyBjYXN1YWxseSBpbiB5b3VyIHNvdXJjaW5nIHNj cmlwdCwgdGhpbmdzCi0jIHNob3VsZCBjb250aW51ZSB0byB3b3JrIGFzIHlvdSBleHBlY3QuIEFu ZCwgb2YgY291cnNlLCB5b3UgY2FuIGZyZWVseQotIyBvdmVyd3JpdGUgYW55IG9mIHRoZSBmdW5j dGlvbnMgb3IgdmFyaWFibGVzIGRlZmluZWQgaGVyZSBiZWZvcmUKLSMgY2FsbGluZyBhbnl0aGlu ZyB0byBjdXN0b21pemUgdGhlbS4KLQotRVhJVF9TVUNDRVNTPTAKLUVYSVRfRkFJTFVSRT0xCi1F WElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1p c21hdGNoIHRvIG1pc3NpbmcuCi1FWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBp bmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KLQotIyBBbGxvdyBvdmVycmlkaW5n LCBlZyBhc3N1bWluZyB0aGF0IHlvdSBmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YKLSMgcHV0dGlu ZyAnJGRlYnVnX2NtZCcgYXQgdGhlIHN0YXJ0IG9mIGFsbCB5b3VyIGZ1bmN0aW9ucywgeW91IGNh biBnZXQKLSMgYmFzaCB0byBzaG93IGZ1bmN0aW9uIGNhbGwgdHJhY2Ugd2l0aDoKLSMKLSMgICAg ZGVidWdfY21kPSdldmFsIGVjaG8gIiR7RlVOQ05BTUVbMF19ICQqIiA+JjInIGJhc2ggeW91ci1z Y3JpcHQtbmFtZQotZGVidWdfY21kPSR7ZGVidWdfY21kLSI6In0KLWV4aXRfY21kPToKLQotIyBC eSBjb252ZW50aW9uLCBmaW5pc2ggeW91ciBzY3JpcHQgd2l0aDoKLSMKLSMgICAgZXhpdCAkZXhp dF9zdGF0dXMKLSMKLSMgc28gdGhhdCB5b3UgY2FuIHNldCBleGl0X3N0YXR1cyB0byBub24temVy byBpZiB5b3Ugd2FudCB0byBpbmRpY2F0ZQotIyBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcg ZXhlY3V0aW9uIHdpdGhvdXQgYWN0dWFsbHkgYmFpbGluZyBvdXQgYXQKLSMgdGhlIHBvaW50IG9m IGZhaWx1cmUuCi1leGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCi0KLSMgV29yayBhcm91bmQgYmFj a3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAot IyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1 cnJlbnQgdmFsdWUgb2YKLSMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVx dWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCi0jIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3 aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKLSMgZnVuY3Rpb24uCi1w cm9ncGF0aD0kMAotCi0jIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbS4KLXByb2duYW1lPWAkRUNI TyAiJHByb2dwYXRoIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgCi0KLSMgTWFrZSBzdXJlIHdlIGhh dmUgYW4gYWJzb2x1dGUgcHJvZ3BhdGggZm9yIHJlZXhlY3V0aW9uOgotY2FzZSAkcHJvZ3BhdGgg aW4KLSAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKLSAgKltcXC9dKikKLSAgICAgcHJvZ2Rpcj1g JEVDSE8gIiRwcm9ncGF0aCIgfCRTRUQgIiRzZWRfZGlybmFtZSJgCi0gICAgIHByb2dkaXI9YGNk ICIkcHJvZ2RpciIgJiYgcHdkYAotICAgICBwcm9ncGF0aD0kcHJvZ2Rpci8kcHJvZ25hbWUKLSAg ICAgOzsKLSAgKikKLSAgICAgX0dfSUZTPSRJRlMKLSAgICAgSUZTPSR7UEFUSF9TRVBBUkFUT1It On0KLSAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCi0gICAgICAgSUZTPSRfR19JRlMKLSAg ICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCi0gICAgIGRvbmUKLSAg ICAgSUZTPSRfR19JRlMKLSAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAK LSAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHByb2duYW1lCi0gICAgIDs7Ci1lc2FjCi0KLQotIyMg LS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFN0YW5kYXJkIG9wdGlvbnMuICMjCi0jIyAtLS0tLS0t LS0tLS0tLS0tLSAjIwotCi0jIFRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhZmZlY3QgdGhlIG9wZXJh dGlvbiBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQKLSMgYmVsb3csIGFuZCBzaG91bGQgYmUgc2V0 IGFwcHJvcHJpYXRlbHkgZGVwZW5kaW5nIG9uIHJ1bi10aW1lIHBhcmEtCi0jIG1ldGVycyBwYXNz ZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KLQotb3B0X2RyeV9ydW49ZmFsc2UKLW9wdF9xdWlldD1m YWxzZQotb3B0X3ZlcmJvc2U9ZmFsc2UKLQotIyBDYXRlZ29yaWVzICdhbGwnIGFuZCAnbm9uZScg YXJlIGFsd2F5cyBhdmFpbGFibGUuICBBcHBlbmQgYW55IG90aGVycwotIyB5b3Ugd2lsbCBwYXNz IGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmdW5jX3dhcm5pbmcgZnJvbSB5b3VyIG93bgotIyBj b2RlLgotd2FybmluZ19jYXRlZ29yaWVzPQotCi0jIEJ5IGRlZmF1bHQsIGRpc3BsYXkgd2Fybmlu Z3MgYWNjb3JkaW5nIHRvICdvcHRfd2FybmluZ190eXBlcycuICBTZXQKLSMgJ3dhcm5pbmdfZnVu YycgIHRvICc6JyB0byBlbGlkZSBhbGwgd2FybmluZ3MsIG9yIGZ1bmNfZmF0YWxfZXJyb3IgdG8K LSMgdHJlYXQgdGhlIG5leHQgZGlzcGxheWVkIHdhcm5pbmcgYXMgYSBmYXRhbCBlcnJvci4KLXdh cm5pbmdfZnVuYz1mdW5jX3dhcm5fYW5kX2NvbnRpbnVlCi0KLSMgU2V0IHRvICdhbGwnIHRvIGRp c3BsYXkgYWxsIHdhcm5pbmdzLCAnbm9uZScgdG8gc3VwcHJlc3MgYWxsCi0jIHdhcm5pbmdzLCBv ciBhIHNwYWNlIGRlbGltaXRlZCBsaXN0IG9mIHNvbWUgc3Vic2V0IG9mCi0jICd3YXJuaW5nX2Nh dGVnb3JpZXMnIHRvIGRpc3BsYXkgb25seSB0aGUgbGlzdGVkIHdhcm5pbmdzLgotb3B0X3dhcm5p bmdfdHlwZXM9YWxsCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlc291cmNl IG1hbmFnZW1lbnQuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotCi0jIFRoaXMgc2Vj dGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgZWFjaCBlbnN1cmUg YQotIyBwYXJ0aWN1bGFyIHJlc291cmNlIChhIGZpbGUsIG9yIGEgbm9uLWVtcHR5IGNvbmZpZ3Vy YXRpb24gdmFyaWFibGUgZm9yCi0jIGV4YW1wbGUpIGlzIGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJv cHJpYXRlIHRvIGV4dHJhY3QgZGVmYXVsdCB2YWx1ZXMKLSMgZnJvbSBwZXJ0aW5lbnQgcGFja2Fn ZSBmaWxlcy4gQ2FsbCB0aGVtIHVzaW5nIHRoZWlyIGFzc29jaWF0ZWQKLSMgJ3JlcXVpcmVfKicg dmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgZXhlY3V0ZWQsIGF0IG1vc3QsIG9uY2Uu Ci0jCi0jIEl0J3MgZW50aXJlbHkgZGVsaWJlcmF0ZSB0aGF0IGNhbGxpbmcgdGhlc2UgZnVuY3Rp b25zIGNhbiBzZXQKLSMgdmFyaWFibGVzIHRoYXQgZG9uJ3Qgb2JleSB0aGUgbmFtZXNwYWNlIGxp bWl0YXRpb25zIG9iZXllZCBieSB0aGUgcmVzdAotIyBvZiB0aGlzIGZpbGUsIGluIG9yZGVyIHRo YXQgdGhhdCB0aGV5IGJlIGFzIHVzZWZ1bCBhcyBwb3NzaWJsZSB0bwotIyBjYWxsZXJzLgotCi0K LSMgcmVxdWlyZV90ZXJtX2NvbG9ycwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFsbG93IGRp c3BsYXkgb2YgYm9sZCB0ZXh0IG9uIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgaXQuCi1yZXF1aXJl X3Rlcm1fY29sb3JzPWZ1bmNfcmVxdWlyZV90ZXJtX2NvbG9ycwotZnVuY19yZXF1aXJlX3Rlcm1f Y29sb3JzICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgdGVzdCAtdCAxICYmIHsKLSAgICAg ICMgQ09MT1JURVJNIGFuZCBVU0VfQU5TSV9DT0xPUlMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRh a2UKLSAgICAgICMgcHJlY2VkZW5jZSwgYmVjYXVzZSBtb3N0IHRlcm1pbmZvIGRhdGFiYXNlcyBu ZWdsZWN0IHRvIGRlc2NyaWJlCi0gICAgICAjIHdoZXRoZXIgY29sb3Igc2VxdWVuY2VzIGFyZSBz dXBwb3J0ZWQuCi0gICAgICB0ZXN0IC1uICIke0NPTE9SVEVSTStzZXR9IiAmJiA6ICR7VVNFX0FO U0lfQ09MT1JTPSIxIn0KLQotICAgICAgaWYgdGVzdCAxID0gIiRVU0VfQU5TSV9DT0xPUlMiOyB0 aGVuCi0gICAgICAgICMgU3RhbmRhcmQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzCi0gICAgICAgIHRj X3Jlc2V0PScbWzBtJwotICAgICAgICB0Y19ib2xkPScbWzFtJzsgICB0Y19zdGFuZG91dD0nG1s3 bScKLSAgICAgICAgdGNfcmVkPScbWzMxbSc7ICAgdGNfZ3JlZW49JxtbMzJtJwotICAgICAgICB0 Y19ibHVlPScbWzM0bSc7ICB0Y19jeWFuPScbWzM2bScKLSAgICAgIGVsc2UKLSAgICAgICAgIyBP dGhlcndpc2UgdHJ1c3QgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGFmdGVyIGFsbC4KLSAgICAgICAg dGVzdCAtbiAiYHRwdXQgc2dyMCAyPi9kZXYvbnVsbGAiICYmIHsKLSAgICAgICAgICB0Y19yZXNl dD1gdHB1dCBzZ3IwYAotICAgICAgICAgIHRlc3QgLW4gImB0cHV0IGJvbGQgMj4vZGV2L251bGxg IiAmJiB0Y19ib2xkPWB0cHV0IGJvbGRgCi0gICAgICAgICAgdGNfc3RhbmRvdXQ9JHRjX2JvbGQK LSAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzbXNvIDI+L2Rldi9udWxsYCIgJiYgdGNfc3RhbmRv dXQ9YHRwdXQgc21zb2AKLSAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiAxIDI+L2Rldi9u dWxsYCIgJiYgdGNfcmVkPWB0cHV0IHNldGFmIDFgCi0gICAgICAgICAgdGVzdCAtbiAiYHRwdXQg c2V0YWYgMiAyPi9kZXYvbnVsbGAiICYmIHRjX2dyZWVuPWB0cHV0IHNldGFmIDJgCi0gICAgICAg ICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgNCAyPi9kZXYvbnVsbGAiICYmIHRjX2JsdWU9YHRwdXQg c2V0YWYgNGAKLSAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiA1IDI+L2Rldi9udWxsYCIg JiYgdGNfY3lhbj1gdHB1dCBzZXRhZiA1YAotICAgICAgICB9Ci0gICAgICBmaQotICAgIH0KLQot ICAgIHJlcXVpcmVfdGVybV9jb2xvcnM9OgotfQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMj Ci0jIyBGdW5jdGlvbiBsaWJyYXJ5LiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBU aGlzIHNlY3Rpb24gY29udGFpbnMgYSB2YXJpZXR5IG9mIHVzZWZ1bCBmdW5jdGlvbnMgdG8gY2Fs bCBpbiB5b3VyCi0jIHNjcmlwdHMuIFRha2Ugbm90ZSBvZiB0aGUgcG9ydGFibGUgd3JhcHBlcnMg Zm9yIGZlYXR1cmVzIHByb3ZpZGVkIGJ5Ci0jIHNvbWUgbW9kZXJuIHNoZWxscywgd2hpY2ggd2ls bCBmYWxsIGJhY2sgdG8gc2xvd2VyIGVxdWl2YWxlbnRzIG9uCi0jIGxlc3MgZmVhdHVyZWZ1bCBz aGVsbHMuCi0KLQotIyBmdW5jX2FwcGVuZCBWQVIgVkFMVUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0jIEFwcGVuZCBWQUxVRSBvbnRvIHRoZSBleGlzdGluZyBjb250ZW50cyBvZiBWQVIuCi0K LSAgIyBXZSBzaG91bGQgdHJ5IHRvIG1pbmltaXNlIGZvcmtzLCBlc3BlY2lhbGx5IG9uIFdpbmRv d3Mgd2hlcmUgdGhleSBhcmUKLSAgIyB1bnJlYXNvbmFibHkgc2xvdywgc28gc2tpcCB0aGUgZmVh dHVyZSBwcm9iZXMgd2hlbiBiYXNoIG9yIHpzaCBhcmUKLSAgIyBiZWluZyB1c2VkOgotICBpZiB0 ZXN0IHNldCA9ICIke0JBU0hfVkVSU0lPTitzZXR9JHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgot ICAgIDogJHtfR19IQVZFX0FSSVRIX09QPSJ5ZXMifQotICAgIDogJHtfR19IQVZFX1hTSV9PUFM9 InllcyJ9Ci0gICAgIyBUaGUgKz0gb3BlcmF0b3Igd2FzIGludHJvZHVjZWQgaW4gYmFzaCAzLjEK LSAgICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KLSAgICAgIFsxMl0uKiB8IDMuMCB8IDMuMCopIDs7 Ci0gICAgICAqKQotICAgICAgICA6ICR7X0dfSEFWRV9QTFVTRVFfT1A9InllcyJ9Ci0gICAgICAg IDs7Ci0gICAgZXNhYwotICBmaQotCi0gICMgX0dfSEFWRV9QTFVTRVFfT1AKLSAgIyBDYW4gYmUg ZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlIHNoZWxsIGlzIHByb2JlZCwgInllcyIgaWYgKz0gaXMK LSAgIyB1c2VhYmxlIG9yIGFueXRoaW5nIGVsc2UgaWYgaXQgZG9lcyBub3Qgd29yay4KLSAgdGVz dCAteiAiJF9HX0hBVkVfUExVU0VRX09QIiBcCi0gICAgJiYgKGV2YWwgJ3g9YTsgeCs9IiBiIjsg dGVzdCAiYSBiIiA9ICIkeCInKSAyPi9kZXYvbnVsbCBcCi0gICAgJiYgX0dfSEFWRV9QTFVTRVFf T1A9eWVzCi0KLWlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1BMVVNFUV9PUCIKLXRoZW4KLSAgIyBU aGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1l bnRhdGlvbi4uLgotICBldmFsICdmdW5jX2FwcGVuZCAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAot Ci0gICAgZXZhbCAiJDErPVwkMiIKLSAgfScKLWVsc2UKLSAgIyAuLi5vdGhlcndpc2UgZmFsbCBi YWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KLSAgZnVu Y19hcHBlbmQgKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGV2YWwgIiQxPVwkJDFcJDIi Ci0gIH0KLWZpCi0KLQotIyBmdW5jX2FwcGVuZF9xdW90ZWQgVkFSIFZBTFVFCi0jIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5k IG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCi0jIGJ5IGEgc3BhY2UuCi1pZiB0ZXN0 IHllcyA9ICIkX0dfSEFWRV9QTFVTRVFfT1AiOyB0aGVuCi0gIGV2YWwgJ2Z1bmNfYXBwZW5kX3F1 b3RlZCAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZnVuY19xdW90ZV9hcmcgcHJldHR5 ICIkMiIKLSAgICBldmFsICIkMSs9XFwgXCRmdW5jX3F1b3RlX2FyZ19yZXN1bHQiCi0gIH0nCi1l bHNlCi0gIGZ1bmNfYXBwZW5kX3F1b3RlZCAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAotCi0gICAg ZnVuY19xdW90ZV9hcmcgcHJldHR5ICIkMiIKLSAgICBldmFsICIkMT1cJCQxXFwgXCRmdW5jX3F1 b3RlX2FyZ19yZXN1bHQiCi0gIH0KLWZpCi0KLQotIyBmdW5jX2FwcGVuZF91bmlxIFZBUiBWQUxV RQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBBcHBlbmQgdW5pcXVlIFZBTFVFIG9u dG8gdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUiwgYXNzdW1pbmcKLSMgZW50cmllcyBhcmUg ZGVsaW1pdGVkIGJ5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgVkFMVUUuICBGb3IgZXhhbXBsZToK LSMKLSMgICBmdW5jX2FwcGVuZF91bmlxIG9wdGlvbnMgIiAtLWFub3RoZXItb3B0aW9uIG9wdGlv bi1hcmd1bWVudCIKLSMKLSMgd2lsbCBvbmx5IGFwcGVuZCB0byAkb3B0aW9ucyBpZiAiIC0tYW5v dGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50ICIKLSMgaXMgbm90IGFscmVhZHkgcHJlc2VudCBz b21ld2hlcmUgaW4gJG9wdGlvbnMgYWxyZWFkeSAobm90ZSBzcGFjZXMgYXQKLSMgZWFjaCBlbmQg aW1wbGllZCBieSBsZWFkaW5nIHNwYWNlIGluIHNlY29uZCBhcmd1bWVudCkuCi1mdW5jX2FwcGVu ZF91bmlxICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgZXZhbCBfR19jdXJyZW50X3ZhbHVl PSdgJEVDSE8gJCckMSdgJwotICAgIF9HX2RlbGltPWBleHByICIkMiIgOiAnXCguXCknYAotCi0g ICAgY2FzZSAkX0dfZGVsaW0kX0dfY3VycmVudF92YWx1ZSRfR19kZWxpbSBpbgotICAgICAgKiIk MiRfR19kZWxpbSIqKSA7OwotICAgICAgKikgZnVuY19hcHBlbmQgIiRAIiA7OwotICAgIGVzYWMK LX0KLQotCi0jIGZ1bmNfYXJpdGggVEVSTS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0 IGZ1bmNfYXJpdGhfcmVzdWx0IHRvIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBURVJNcy4KLSAg dGVzdCAteiAiJF9HX0hBVkVfQVJJVEhfT1AiIFwKLSAgICAmJiAoZXZhbCAndGVzdCAyID0gJCgo IDEgKyAxICkpJykgMj4vZGV2L251bGwgXAotICAgICYmIF9HX0hBVkVfQVJJVEhfT1A9eWVzCi0K LWlmIHRlc3QgeWVzID0gIiRfR19IQVZFX0FSSVRIX09QIjsgdGhlbgotICBldmFsICdmdW5jX2Fy aXRoICgpCi0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCgg JCogKSkKLSAgfScKLWVsc2UKLSAgZnVuY19hcml0aCAoKQotICB7Ci0gICAgJGRlYnVnX2NtZAot Ci0gICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKLSAgfQotZmkKLQotCi0jIGZ1bmNf YmFzZW5hbWUgRklMRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgU2V0IGZ1bmNfYmFzZW5hbWVf cmVzdWx0IHRvIEZJTEUgd2l0aCBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcKLSMgdGhl IGxhc3QgLyBzdHJpcHBlZC4KLWlmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVu Ci0gICMgSWYgdGhpcyBzaGVsbCBzdXBwb3J0cyBzdWZmaXggcGF0dGVybiByZW1vdmFsLCB0aGVu IHVzZSBpdCB0byBhdm9pZAotICAjIGZvcmtpbmcuIEhpZGUgdGhlIGRlZmluaXRpb25zIHNpbmds ZSBxdW90ZXMgaW4gY2FzZSB0aGUgc2hlbGwgY2hva2VzCi0gICMgb24gdW5zdXBwb3J0ZWQgc3lu dGF4Li4uCi0gIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0kezEjIyovfScKLSAgX2Q9J2Nhc2Ug JDEgaW4KLSAgICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSR7MSUvKn0kMiA7OwotICAg ICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JDMgICAgICAgIDs7Ci0gICAgICBlc2FjJwot Ci1lbHNlCi0gICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBzZWQuCi0gIF9iPSdm dW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgJwot ICBfZD0nZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiAgfCRTRUQgIiRzZWRfZGlybmFt ZSJgCi0gICAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkMSI7IHRoZW4K LSAgICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMwotICAgICAgZWxzZQotICAgICAgICBmdW5j X2FwcGVuZCBmdW5jX2Rpcm5hbWVfcmVzdWx0ICIkMiIKLSAgICAgIGZpJwotZmkKLQotZXZhbCAn ZnVuY19iYXNlbmFtZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICciJF9iIicKLX0nCi0K LQotIyBmdW5jX2Rpcm5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCi0jIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQ29tcHV0ZSB0aGUgZGly bmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKLSMg b3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotZXZhbCAnZnVuY19k aXJuYW1lICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJyIkX2QiJwotfScKLQotCi0jIGZ1 bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCi0j IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ci0jIFBlcmZvcm0gZnVuY19iYXNlbmFtZSBhbmQgZnVuY19kaXJuYW1lIGluIGEgc2luZ2xlIGZ1 bmN0aW9uCi0jIGNhbGw6Ci0jICAgZGlybmFtZTogIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklM RS4gIElmIG5vbmVtcHR5LAotIyAgICAgICAgICAgICBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQs IG90aGVyd2lzZSBzZXQgcmVzdWx0Ci0jICAgICAgICAgICAgIHRvIE5PTkRJUl9SRVBMQUNFTUVO VC4KLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0 IgotIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCi0jICAgICAgICAgICAg IHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLSMgRm9yIGVmZmljaWVu Y3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0byB0aGUgZnVuY3Rpb25zIGFib3ZlIGJ1dCBpbnN0ZWFk Ci0jIGR1cGxpY2F0ZSB0aGUgZnVuY3Rpb25hbGl0eSBoZXJlLgotZXZhbCAnZnVuY19kaXJuYW1l X2FuZF9iYXNlbmFtZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgICciJF9iIicKLSAgICAn IiRfZCInCi19JwotCi0KLSMgZnVuY19lY2hvIEFSRy4uLgotIyAtLS0tLS0tLS0tLS0tLS0tCi0j IEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UuCi1mdW5jX2VjaG8gKCkKLXsKLSAg ICAkZGVidWdfY21kCi0KLSAgICBfR19tZXNzYWdlPSQqCi0KLSAgICBmdW5jX2VjaG9fSUZTPSRJ RlMKLSAgICBJRlM9JG5sCi0gICAgZm9yIF9HX2xpbmUgaW4gJF9HX21lc3NhZ2U7IGRvCi0gICAg ICBJRlM9JGZ1bmNfZWNob19JRlMKLSAgICAgICRFQ0hPICIkcHJvZ25hbWU6ICRfR19saW5lIgot ICAgIGRvbmUKLSAgICBJRlM9JGZ1bmNfZWNob19JRlMKLX0KLQotCi0jIGZ1bmNfZWNob19hbGwg QVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEludm9rZSAkRUNITyB3aXRoIGFsbCBh cmdzLCBzcGFjZS1zZXBhcmF0ZWQuCi1mdW5jX2VjaG9fYWxsICgpCi17Ci0gICAgJEVDSE8gIiQq IgotfQotCi0KLSMgZnVuY19lY2hvX2luZml4XzEgSU5GSVggQVJHLi4uCi0jIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSwgZm9sbG93ZWQgYnkgSU5G SVggb24gdGhlIGZpcnN0IGxpbmUsIHdpdGggYW55Ci0jIGFkZGl0aW9uYWwgbGluZXMgbm90IHNo b3dpbmcgSU5GSVguCi1mdW5jX2VjaG9faW5maXhfMSAoKQotewotICAgICRkZWJ1Z19jbWQKLQot ICAgICRyZXF1aXJlX3Rlcm1fY29sb3JzCi0KLSAgICBfR19pbmZpeD0kMTsgc2hpZnQKLSAgICBf R19pbmRlbnQ9JF9HX2luZml4Ci0gICAgX0dfcHJlZml4PSIkcHJvZ25hbWU6ICRfR19pbmZpeDog IgotICAgIF9HX21lc3NhZ2U9JCoKLQotICAgICMgU3RyaXAgY29sb3IgZXNjYXBlIHNlcXVlbmNl cyBiZWZvcmUgY291bnRpbmcgcHJpbnRhYmxlIGxlbmd0aAotICAgIGZvciBfR190YyBpbiAiJHRj X3Jlc2V0IiAiJHRjX2JvbGQiICIkdGNfc3RhbmRvdXQiICIkdGNfcmVkIiAiJHRjX2dyZWVuIiAi JHRjX2JsdWUiICIkdGNfY3lhbiIKLSAgICBkbwotICAgICAgdGVzdCAtbiAiJF9HX3RjIiAmJiB7 Ci0gICAgICAgIF9HX2VzY190Yz1gJEVDSE8gIiRfR190YyIgfCAkU0VEICIkc2VkX21ha2VfbGl0 ZXJhbF9yZWdleCJgCi0gICAgICAgIF9HX2luZGVudD1gJEVDSE8gIiRfR19pbmRlbnQiIHwgJFNF RCAic3wkX0dfZXNjX3RjfHxnImAKLSAgICAgIH0KLSAgICBkb25lCi0gICAgX0dfaW5kZW50PSIk cHJvZ25hbWU6ICJgZWNobyAiJF9HX2luZGVudCIgfCAkU0VEICdzfC58IHxnJ2AiICAiICMjIGV4 Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCi0KLSAgICBmdW5jX2VjaG9faW5m aXhfMV9JRlM9JElGUwotICAgIElGUz0kbmwKLSAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2Fn ZTsgZG8KLSAgICAgIElGUz0kZnVuY19lY2hvX2luZml4XzFfSUZTCi0gICAgICAkRUNITyAiJF9H X3ByZWZpeCR0Y19ib2xkJF9HX2xpbmUkdGNfcmVzZXQiID4mMgotICAgICAgX0dfcHJlZml4PSRf R19pbmRlbnQKLSAgICBkb25lCi0gICAgSUZTPSRmdW5jX2VjaG9faW5maXhfMV9JRlMKLX0KLQot Ci0jIGZ1bmNfZXJyb3IgQVJHLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3Jh bSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCi1mdW5jX2Vycm9yICgp Ci17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKLQotICAgIGZ1 bmNfZWNob19pbmZpeF8xICIgICR0Y19zdGFuZG91dCR7dGNfcmVkfWVycm9yJHRjX3Jlc2V0IiAi JCoiID4mMgotfQotCi0KLSMgZnVuY19mYXRhbF9lcnJvciBBUkcuLi4KLSMgLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFu ZGFyZCBlcnJvciwgYW5kIGV4aXQuCi1mdW5jX2ZhdGFsX2Vycm9yICgpCi17Ci0gICAgJGRlYnVn X2NtZAotCi0gICAgZnVuY19lcnJvciAiJCoiCi0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi19Ci0K LQotIyBmdW5jX2dyZXAgRVhQUkVTU0lPTiBGSUxFTkFNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotIyBDaGVjayB3aGV0aGVyIEVYUFJFU1NJT04gbWF0Y2hlcyBhbnkgbGluZSBv ZiBGSUxFTkFNRSwgd2l0aG91dCBvdXRwdXQuCi1mdW5jX2dyZXAgKCkKLXsKLSAgICAkZGVidWdf Y21kCi0KLSAgICAkR1JFUCAiJDEiICIkMiIgPi9kZXYvbnVsbCAyPiYxCi19Ci0KLQotIyBmdW5j X2xlbiBTVFJJTkcKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBmdW5jX2xlbl9yZXN1bHQgdG8g dGhlIGxlbmd0aCBvZiBTVFJJTkcuIFNUUklORyBtYXkgbm90Ci0jIHN0YXJ0IHdpdGggYSBoeXBo ZW4uCi0gIHRlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKLSAgICAmJiAoZXZhbCAneD1hL2Iv YzsKLSAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7 eCMjKi99IicpIDI+L2Rldi9udWxsIFwKLSAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCi0KLWlm IHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCi0gIGV2YWwgJ2Z1bmNfbGVuICgp Ci0gIHsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX0KLSAgfScK LWVsc2UKLSAgZnVuY19sZW4gKCkKLSAgewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfbGVu X3Jlc3VsdD1gZXhwciAiJDEiIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xl bmAKLSAgfQotZmkKLQotCi0jIGZ1bmNfbWtkaXJfcCBESVJFQ1RPUlktUEFUSAotIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgTWFrZSBzdXJlIHRoZSBlbnRpcmUgcGF0aCB0byBESVJF Q1RPUlktUEFUSCBpcyBhdmFpbGFibGUuCi1mdW5jX21rZGlyX3AgKCkKLXsKLSAgICAkZGVidWdf Y21kCi0KLSAgICBfR19kaXJlY3RvcnlfcGF0aD0kMQotICAgIF9HX2Rpcl9saXN0PQotCi0gICAg aWYgdGVzdCAtbiAiJF9HX2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0IDogIT0gIiRvcHRfZHJ5X3J1 biI7IHRoZW4KLQotICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRo ICctJwotICAgICAgY2FzZSAkX0dfZGlyZWN0b3J5X3BhdGggaW4KLSAgICAgICAgLSopIF9HX2Rp cmVjdG9yeV9wYXRoPS4vJF9HX2RpcmVjdG9yeV9wYXRoIDs7Ci0gICAgICBlc2FjCi0KLSAgICAg ICMgV2hpbGUgc29tZSBwb3J0aW9uIG9mIERJUiBkb2VzIG5vdCB5ZXQgZXhpc3QuLi4KLSAgICAg IHdoaWxlIHRlc3QgISAtZCAiJF9HX2RpcmVjdG9yeV9wYXRoIjsgZG8KLSAgICAgICAgIyAuLi5t YWtlIGEgbGlzdCBpbiB0b3Btb3N0IGZpcnN0IG9yZGVyLiAgVXNlIGEgY29sb24gZGVsaW1pdGVk Ci0JIyBsaXN0IGluY2FzZSBzb21lIHBvcnRpb24gb2YgcGF0aCBjb250YWlucyB3aGl0ZXNwYWNl LgotICAgICAgICBfR19kaXJfbGlzdD0kX0dfZGlyZWN0b3J5X3BhdGg6JF9HX2Rpcl9saXN0Ci0K LSAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwg dGhlIGxpc3QgaXMgZG9uZQotICAgICAgICBjYXNlICRfR19kaXJlY3RvcnlfcGF0aCBpbiAqLyop IDs7ICopIGJyZWFrIDs7IGVzYWMKLQotICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5 IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKLSAgICAgICAgX0dfZGlyZWN0b3J5X3BhdGg9 YCRFQ0hPICIkX0dfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJHNlZF9kaXJuYW1lImAKLSAg ICAgIGRvbmUKLSAgICAgIF9HX2Rpcl9saXN0PWAkRUNITyAiJF9HX2Rpcl9saXN0IiB8ICRTRUQg J3N8OiokfHwnYAotCi0gICAgICBmdW5jX21rZGlyX3BfSUZTPSRJRlM7IElGUz06Ci0gICAgICBm b3IgX0dfZGlyIGluICRfR19kaXJfbGlzdDsgZG8KLQlJRlM9JGZ1bmNfbWtkaXJfcF9JRlMKLSAg ICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgJ0ZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBw cm9jZXNzZXMKLSAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMg Y29uY3VycmVudGx5LiAgRG9uJ3QKLSAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKLSAgICAg ICAgJE1LRElSICIkX0dfZGlyIiAyPi9kZXYvbnVsbCB8fCA6Ci0gICAgICBkb25lCi0gICAgICBJ RlM9JGZ1bmNfbWtkaXJfcF9JRlMKLQotICAgICAgIyBCYWlsIG91dCBpZiB3ZSAob3Igc29tZSBv dGhlciBwcm9jZXNzKSBmYWlsZWQgdG8gY3JlYXRlIGEgZGlyZWN0b3J5LgotICAgICAgdGVzdCAt ZCAiJF9HX2RpcmVjdG9yeV9wYXRoIiB8fCBcCi0gICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgIkZh aWxlZCB0byBjcmVhdGUgJyQxJyIKLSAgICBmaQotfQotCi0KLSMgZnVuY19ta3RlbXBkaXIgW0JB U0VOQU1FXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIE1ha2UgYSB0ZW1wb3Jhcnkg ZGlyZWN0b3J5IHRoYXQgd29uJ3QgY2xhc2ggd2l0aCBvdGhlciBydW5uaW5nCi0jIGxpYnRvb2wg cHJvY2Vzc2VzLCBhbmQgYXZvaWRzIHJhY2UgY29uZGl0aW9ucyBpZiBwb3NzaWJsZS4gIElmCi0j IGdpdmVuLCBCQVNFTkFNRSBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgotZnVu Y19ta3RlbXBkaXIgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR190ZW1wbGF0ZT0ke1RN UERJUi0vdG1wfS8kezEtJHByb2duYW1lfQotCi0gICAgaWYgdGVzdCA6ID0gIiRvcHRfZHJ5X3J1 biI7IHRoZW4KLSAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVh dGUgaXQgaW4gZHJ5LXJ1biBtb2RlCi0gICAgICBfR190bXBkaXI9JF9HX3RlbXBsYXRlLSQkCi0g ICAgZWxzZQotCi0gICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZv cmVtb3N0Ci0gICAgICBfR190bXBkaXI9YG1rdGVtcCAtZCAiJF9HX3RlbXBsYXRlLVhYWFhYWFhY IiAyPi9kZXYvbnVsbGAKLQotICAgICAgaWYgdGVzdCAhIC1kICIkX0dfdG1wZGlyIjsgdGhlbgot ICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBh dm9pZCBhIHJhY2UKLSAgICAgICAgX0dfdG1wZGlyPSRfR190ZW1wbGF0ZS0ke1JBTkRPTS0wfSQk Ci0KLSAgICAgICAgZnVuY19ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAotICAgICAgICB1bWFzayAw MDc3Ci0gICAgICAgICRNS0RJUiAiJF9HX3RtcGRpciIKLSAgICAgICAgdW1hc2sgJGZ1bmNfbWt0 ZW1wZGlyX3VtYXNrCi0gICAgICBmaQotCi0gICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVu IG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKLSAgICAgIHRlc3QgLWQgIiRfR190bXBkaXIiIHx8 IFwKLSAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGly ZWN0b3J5ICckX0dfdG1wZGlyJyIKLSAgICBmaQotCi0gICAgJEVDSE8gIiRfR190bXBkaXIiCi19 Ci0KLQotIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0jIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBj b21wb25lbnRzLAotIyBhbmQgY2FuY2VsIG91dCBhbnkgIi4uIiBwYXRoIGNvbXBvbmVudHMgaW4g UEFUSCBhZnRlciBtYWtpbmcKLSMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KLWZ1bmNfbm9ybWFsX2Fi c3BhdGggKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICAjIFRoZXNlIFNFRCBzY3JpcHRzIHBy ZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCi0gICAgX0df cGF0aGNhcj0nc3xeL1woW14vXSpcKS4qJHxcMXwnCi0gICAgX0dfcGF0aGNkcj0nc3xeL1teL10q fHwnCi0gICAgX0dfcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAotCQlzfC9cLi98L3xnCi0JCXQgZG90 c2wKLQkJc3wvXC4kfC98JwotICAgIF9HX2NvbGxhcHNlc2xhc2hlcz0nc3wvXHsxLFx9fC98ZycK LSAgICBfR19maW5hbHNsYXNoPSdzfC8qJHwvfCcKLQotICAgICMgU3RhcnQgZnJvbSByb290IGRp ciBhbmQgcmVhc3NlbWJsZSB0aGUgcGF0aC4KLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3Vs dD0KLSAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCi0gICAgZnVuY19ub3JtYWxfYWJz cGF0aF9hbHRuYW1lc3BhY2U9Ci0gICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBp bgotICAgICAgIiIpCi0gICAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2Qu Ci0gICAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCi0gICAgICAgIGZ1bmNfbm9y bWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICAgICAgcmV0dXJu Ci0gICAgICAgIDs7Ci0gICAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8g c3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKLSAgICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRo b3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7Ci0gICAgICAjIHdlIHRha2UgYWR2 YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCi0gICAgICAvLy8qKQotICAg ICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgotICAgICAg ICA7OwotICAgICAgLy8qKQotICAgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBw YXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKLSAgICAgICAgIyBhbmQgZm9yIGV4YW1w bGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcwotICAgICAgICAj IG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYg Zm91bmQuCi0gICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KLSAgICAg ICAgOzsKLSAgICAgIC8qKQotICAgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCi0g ICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3 ZC4KLSAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxf YWJzcGF0aF90cGF0aAotICAgICAgICA7OwotICAgIGVzYWMKLQotICAgICMgQ2FuY2VsIG91dCBh bGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKLSAg ICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28g bWFrZSBzdXJlCi0gICAgIyB0aGVyZSBpcyBvbmUgKGFuZCBvbmx5IG9uZSkgaGVyZS4KLSAgICBm dW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBh dGgiIHwgJFNFRCBcCi0gICAgICAgICAgLWUgIiRfR19yZW1vdmVkb3RwYXJ0cyIgLWUgIiRfR19j b2xsYXBzZXNsYXNoZXMiIC1lICIkX0dfZmluYWxzbGFzaCJgCi0gICAgd2hpbGUgOjsgZG8KLSAg ICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/Ci0gICAgICBpZiB0ZXN0IC8gPSAiJGZ1bmNfbm9y bWFsX2Fic3BhdGhfdHBhdGgiOyB0aGVuCi0gICAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhl IHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCi0gICAgICAgIGlm IHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCI7IHRoZW4KLSAgICAgICAgICBm dW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCi0gICAgICAgIGZpCi0gICAgICAgIGJyZWFrCi0g ICAgICBmaQotICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1 bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCi0gICAgICAgICAgLWUgIiRfR19wYXRo Y2FyImAKLSAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3Jt YWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKLSAgICAgICAgICAtZSAiJF9HX3BhdGhjZHIiYAot ICAgICAgIyBGaWd1cmUgb3V0IHdoYXQgdG8gZG8gd2l0aCBpdAotICAgICAgY2FzZSAkZnVuY19u b3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCi0gICAgICAgICIiKQotICAgICAgICAgICMgVHJh aWxpbmcgZW1wdHkgcGF0aCBjb21wb25lbnQsIGlnbm9yZSBpdC4KLSAgICAgICAgICA7OwotICAg ICAgICAuLikKLSAgICAgICAgICAjIFBhcmVudCBkaXI7IHN0cmlwIGxhc3QgYXNzZW1ibGVkIGNv bXBvbmVudCBmcm9tIHJlc3VsdC4KLSAgICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1h bF9hYnNwYXRoX3Jlc3VsdCIKLSAgICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0k ZnVuY19kaXJuYW1lX3Jlc3VsdAotICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAg IyBBY3R1YWwgcGF0aCBjb21wb25lbnQsIGFwcGVuZCBpdC4KLSAgICAgICAgICBmdW5jX2FwcGVu ZCBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCAiLyRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21w b25lbnQiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0gICAgIyBSZXN0b3Jl IGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCi0gICAgZnVu Y19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNl JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Ci19Ci0KLQotIyBmdW5jX25vdHF1aWV0IEFSRy4u LgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBt ZXNzYWdlIG9ubHkgd2hlbiBub3QgaW4gcXVpZXQgbW9kZS4KLWZ1bmNfbm90cXVpZXQgKCkKLXsK LSAgICAkZGVidWdfY21kCi0KLSAgICAkb3B0X3F1aWV0IHx8IGZ1bmNfZWNobyAkezErIiRAIn0K LQotICAgICMgQSBidWcgaW4gYmFzaCBoYWx0cyB0aGUgc2NyaXB0IGlmIHRoZSBsYXN0IGxpbmUg b2YgYSBmdW5jdGlvbgotICAgICMgZmFpbHMgd2hlbiBzZXQgLWUgaXMgaW4gZm9yY2UsIHNvIHdl IG5lZWQgYW5vdGhlciBjb21tYW5kIHRvCi0gICAgIyB3b3JrIGFyb3VuZCB0aGF0OgotICAgIDoK LX0KLQotCi0jIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCi0jIC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNldCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IHRv IHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUi4KLWZ1bmNfcmVsYXRpdmVf cGF0aCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1 bHQ9Ci0gICAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDEiCi0gICAgZnVuY19yZWxhdGl2ZV9wYXRo X3RsaWJkaXI9JGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0Ci0gICAgZnVuY19ub3JtYWxfYWJz cGF0aCAiJDIiCi0gICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXI9JGZ1bmNfbm9ybWFsX2Fi c3BhdGhfcmVzdWx0Ci0KLSAgICAjIEFzY2VuZCB0aGUgdHJlZSBzdGFydGluZyBmcm9tIGxpYmRp cgotICAgIHdoaWxlIDo7IGRvCi0gICAgICAjIGNoZWNrIGlmIHdlIGhhdmUgZm91bmQgYSBwcmVm aXggb2YgYmluZGlyCi0gICAgICBjYXNlICRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpciBpbgot ICAgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCi0gICAgICAgICAgIyBmb3VuZCBh biBleGFjdCBtYXRjaAotICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPQot ICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgOzsKLSAgICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0 aF90bGliZGlyKikKLSAgICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4Ci0gICAgICAg ICAgZnVuY19zdHJpcG5hbWUgIiRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgJycgIiRmdW5j X3JlbGF0aXZlX3BhdGhfdGJpbmRpciIKLSAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNh bmNlbGxlZD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgICAgICAgaWYgdGVzdCAteiAiJGZ1 bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCi0gICAgICAgICAgICBmdW5jX3JlbGF0aXZl X3BhdGhfcmVzdWx0PS4KLSAgICAgICAgICBmaQotICAgICAgICAgIGJyZWFrCi0gICAgICAgICAg OzsKLSAgICAgICAgKikKLSAgICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0 aF90bGliZGlyCi0gICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXI9JGZ1bmNfZGly bmFtZV9yZXN1bHQKLSAgICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Rs aWJkaXIiOyB0aGVuCi0gICAgICAgICAgICAjIEhhdmUgdG8gZGVzY2VuZCBhbGwgdGhlIHdheSB0 byB0aGUgcm9vdCEKLSAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1 bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKLSAgICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90 Y2FuY2VsbGVkPSRmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcgotICAgICAgICAgICAgYnJlYWsK LSAgICAgICAgICBmaQotICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1 bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGRv bmUKLQotICAgICMgTm93IGNhbGN1bGF0ZSBwYXRoOyB0YWtlIGNhcmUgdG8gYXZvaWQgZG91Ymxp bmctdXAgc2xhc2hlcy4KLSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZl X3BhdGhfcmVzdWx0IgotICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBu YW1lX3Jlc3VsdAotICAgIGZ1bmNfc3RyaXBuYW1lICcvJyAnLycgIiRmdW5jX3JlbGF0aXZlX3Bh dGhfdGNhbmNlbGxlZCIKLSAgICBpZiB0ZXN0IC1uICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0Ijsg dGhlbgotICAgICAgZnVuY19hcHBlbmQgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCAiLyRmdW5j X3N0cmlwbmFtZV9yZXN1bHQiCi0gICAgZmkKLQotICAgICMgTm9ybWFsaXNhdGlvbi4gSWYgYmlu ZGlyIGlzIGxpYmRpciwgcmV0dXJuICcuJyBlbHNlIHJlbGF0aXZlIHBhdGguCi0gICAgaWYgdGVz dCAtbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCi0gICAgICBmdW5jX3N0cmlw bmFtZSAnLi8nICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKLSAgICAgIGZ1bmNfcmVs YXRpdmVfcGF0aF9yZXN1bHQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotICAgIGZpCi0KLSAgICB0 ZXN0IC1uICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIgfHwgZnVuY19yZWxhdGl2ZV9wYXRo X3Jlc3VsdD0uCi0KLSAgICA6Ci19Ci0KLQotIyBmdW5jX3F1b3RlX3BvcnRhYmxlIEVWQUwgQVJH Ci0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSW50ZXJuYWwgZnVuY3Rpb24gdG8g cG9ydGFibHkgaW1wbGVtZW50IGZ1bmNfcXVvdGVfYXJnLiAgTm90ZSB0aGF0IHdlIHN0aWxsCi0j IGtlZXAgYXR0ZW50aW9uIHRvIHBlcmZvcm1hbmNlIGhlcmUgc28gd2UgYXMgbXVjaCBhcyBwb3Nz aWJsZSB0cnkgdG8gYXZvaWQKLSMgY2FsbGluZyBzZWQgYmluYXJ5IChzbyBmYXIgTyhOKSBjb21w bGV4aXR5IGFzIGxvbmcgYXMgZnVuY19hcHBlbmQgaXMgTygxKSkuCi1mdW5jX3F1b3RlX3BvcnRh YmxlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfY2hlY2tfaWZzX2JhY2tz bGFzaAotCi0gICAgZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQ9JDIKLQotICAgICMgb25lLXRp bWUtbG9vcCAoZWFzeSBicmVhaykKLSAgICB3aGlsZSB0cnVlCi0gICAgZG8KLSAgICAgIGlmICQx OyB0aGVuCi0gICAgICAgIGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0PWAkRUNITyAiJDIiIHwg JFNFRCBcCi0gICAgICAgICAgLWUgIiRzZWRfZG91YmxlX3F1b3RlX3N1YnN0IiAtZSAiJHNlZF9k b3VibGVfYmFja3NsYXNoImAKLSAgICAgICAgYnJlYWsKLSAgICAgIGZpCi0KLSAgICAgICMgUXVv dGUgZm9yIGV2YWwuCi0gICAgICBjYXNlICRmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdCBpbgot ICAgICAgICAqW1xcXGBcIlwkXSopCi0gICAgICAgICAgIyBGYWxsYmFjayB0byBzZWQgZm9yICRm dW5jX2NoZWNrX2JzX2lmc19icm9rZW49Oiwgb3Igd2hlbiB0aGUgc3RyaW5nCi0gICAgICAgICAg IyBjb250YWlucyB0aGUgc2hlbGwgd2lsZGNhcmQgY2hhcmFjdGVycy4KLSAgICAgICAgICBjYXNl ICRjaGVja19pZnNfYmFja3NobGFzaF9icm9rZW4kZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQg aW4KLSAgICAgICAgICAgIDoqfCpbXFtcKlw/XSopCi0gICAgICAgICAgICAgIGZ1bmNfcXVvdGVf cG9ydGFibGVfcmVzdWx0PWAkRUNITyAiJGZ1bmNfcXVvdGVfcG9ydGFibGVfcmVzdWx0IiBcCi0g ICAgICAgICAgICAgICAgICB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgICAgICAg ICBicmVhawotICAgICAgICAgICAgICA7OwotICAgICAgICAgIGVzYWMKLQotICAgICAgICAgIGZ1 bmNfcXVvdGVfcG9ydGFibGVfb2xkX0lGUz0kSUZTCi0gICAgICAgICAgZm9yIF9HX2NoYXIgaW4g J1wnICdgJyAnIicgJyQnCi0gICAgICAgICAgZG8KLSAgICAgICAgICAgICMgU1RBVEUoJDEpIFBS RVYoJDIpIFNFUEFSQVRPUigkMykKLSAgICAgICAgICAgIHNldCBzdGFydCAiIiAiIgotICAgICAg ICAgICAgZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQ9ZHVtbXkiJF9HX2NoYXIkZnVuY19xdW90 ZV9wb3J0YWJsZV9yZXN1bHQkX0dfY2hhciJkdW1teQotICAgICAgICAgICAgSUZTPSRfR19jaGFy Ci0gICAgICAgICAgICBmb3IgX0dfcGFydCBpbiAkZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQK LSAgICAgICAgICAgIGRvCi0gICAgICAgICAgICAgIGNhc2UgJDEgaW4KLSAgICAgICAgICAgICAg cXVvdGUpCi0gICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19xdW90ZV9wb3J0YWJsZV9y ZXN1bHQgIiQzJDIiCi0gICAgICAgICAgICAgICAgc2V0IHF1b3RlICIkX0dfcGFydCIgIlxcJF9H X2NoYXIiCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgc3RhcnQpCi0gICAgICAg ICAgICAgICAgc2V0IGZpcnN0ICIiICIiCi0gICAgICAgICAgICAgICAgZnVuY19xdW90ZV9wb3J0 YWJsZV9yZXN1bHQ9Ci0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgZmlyc3QpCi0g ICAgICAgICAgICAgICAgc2V0IHF1b3RlICIkX0dfcGFydCIgIiIKLSAgICAgICAgICAgICAgICA7 OwotICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICBkb25lCi0gICAgICAgICAgZG9uZQot ICAgICAgICAgIElGUz0kZnVuY19xdW90ZV9wb3J0YWJsZV9vbGRfSUZTCi0gICAgICAgICAgOzsK LSAgICAgICAgKikgOzsKLSAgICAgIGVzYWMKLSAgICAgIGJyZWFrCi0gICAgZG9uZQotCi0gICAg ZnVuY19xdW90ZV9wb3J0YWJsZV91bnF1b3RlZF9yZXN1bHQ9JGZ1bmNfcXVvdGVfcG9ydGFibGVf cmVzdWx0Ci0gICAgY2FzZSAkZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQgaW4KLSAgICAgICMg ZG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxh eQotICAgICAgIyB3b3JkIHNwbGl0dGluZywgY29tbWFuZCBzdWJzdGl0dXRpb24gYW5kIHZhcmlh YmxlIGV4cGFuc2lvbgotICAgICAgIyBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCi0gICAgICAjIG1h bnkgYm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQot ICAgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KLSAgICAg ICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotICAgICAg ICBmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3VsdD1cIiRmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3Vs dFwiCi0gICAgICAgIDs7Ci0gICAgZXNhYwotfQotCi0KLSMgZnVuY19xdW90ZWZhc3RfZXZhbCBB UkcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUXVvdGUgb25lIEFSRyAoaW50ZXJuYWwp LiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvICdmdW5jX3F1b3RlX2FyZyBldmFsIEFSRycsCi0jIGJ1 dCBvcHRpbWl6ZWQgZm9yIHNwZWVkLiAgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY19xdW90ZWZh c3RfZXZhbC4KLWlmIHRlc3QgeHllcyA9IGAoeD07IHByaW50ZiAtdiB4ICVxIHllczsgZWNobyB4 IiR4IikgMj4vZGV2L251bGxgOyB0aGVuCi0gIHByaW50ZiAtdiBfR0xfdGVzdF9wcmludGZfdGls ZGUgJXEgJ34nCi0gIGlmIHRlc3QgJ1x+JyA9ICIkX0dMX3Rlc3RfcHJpbnRmX3RpbGRlIjsgdGhl bgotICAgIGZ1bmNfcXVvdGVmYXN0X2V2YWwgKCkKLSAgICB7Ci0gICAgICBwcmludGYgLXYgZnVu Y19xdW90ZWZhc3RfZXZhbF9yZXN1bHQgJXEgIiQxIgotICAgIH0KLSAgZWxzZQotICAgICMgQnJv a2VuIG9sZGVyIEJhc2ggaW1wbGVtZW50YXRpb25zLiAgTWFrZSB0aG9zZSBmYXN0ZXIgdG9vIGlm IHBvc3NpYmxlLgotICAgIGZ1bmNfcXVvdGVmYXN0X2V2YWwgKCkKLSAgICB7Ci0gICAgICBjYXNl ICQxIGluCi0gICAgICAgICd+JyopCi0gICAgICAgICAgZnVuY19xdW90ZV9wb3J0YWJsZSBmYWxz ZSAiJDEiCi0gICAgICAgICAgZnVuY19xdW90ZWZhc3RfZXZhbF9yZXN1bHQ9JGZ1bmNfcXVvdGVf cG9ydGFibGVfcmVzdWx0Ci0gICAgICAgICAgOzsKLSAgICAgICAgKikKLSAgICAgICAgICBwcmlu dGYgLXYgZnVuY19xdW90ZWZhc3RfZXZhbF9yZXN1bHQgJXEgIiQxIgotICAgICAgICAgIDs7Ci0g ICAgICBlc2FjCi0gICAgfQotICBmaQotZWxzZQotICBmdW5jX3F1b3RlZmFzdF9ldmFsICgpCi0g IHsKLSAgICBmdW5jX3F1b3RlX3BvcnRhYmxlIGZhbHNlICIkMSIKLSAgICBmdW5jX3F1b3RlZmFz dF9ldmFsX3Jlc3VsdD0kZnVuY19xdW90ZV9wb3J0YWJsZV9yZXN1bHQKLSAgfQotZmkKLQotCi0j IGZ1bmNfcXVvdGVfYXJnIE1PREVzIEFSRwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMg UXVvdGUgb25lIEFSRyB0byBiZSBldmFsZWQgbGF0ZXIuICBNT0RFcyBhcmd1bWVudCBtYXkgY29u dGFpbiB6ZXJvIG9yIG1vcmUKLSMgc3BlY2lmaWVycyBsaXN0ZWQgYmVsb3cgc2VwYXJhdGVkIGJ5 ICcsJyBjaGFyYWN0ZXIuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvCi0jIHZhbHVlczoKLSMg ICBpKSBmdW5jX3F1b3RlX2FyZ19yZXN1bHQKLSMgICAgICBkb3VibGUtcXVvdGVkICh3aGVuIG5l ZWRlZCksIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbAotIyAgaWkpIGZ1bmNfcXVvdGVf YXJnX3VucXVvdGVkX3Jlc3VsdAotIyAgICAgIGhhcyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBz dGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZQotIyAgICAgIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4g IEF2YWlsYWJsZSBvbmx5IGlmICd1bnF1b3RlZCcgaXMgc3BlY2lmaWVkLgotIwotIyBBdmFpbGFi bGUgbW9kZXM6Ci0jIC0tLS0tLS0tLS0tLS0tLS0KLSMgJ2V2YWwnIChkZWZhdWx0KQotIyAgICAg ICAtIGVzY2FwZSBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMKLSMgJ2V4cGFuZCcKLSMgICAgICAg LSB0aGUgc2FtZSBhcyAnZXZhbCc7ICBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5j ZXMKLSMgJ3ByZXR0eScKLSMgICAgICAgLSByZXF1ZXN0IGFlc3RoZXRpYyBvdXRwdXQsIGkuZS4g JyJhIGIiJyBpbnN0ZWFkIG9mICdhXCBiJy4gIFRoaXMgbWlnaHQKLSMgICAgICAgICBiZSB1c2Vk IGxhdGVyIGluIGZ1bmNfcXVvdGUgdG8gZ2V0IG91dHB1dCBsaWtlOiAnZWNobyAiYSBiIicgaW5z dGVhZAotIyAgICAgICAgIG9mICdlY2hvIGFcIGInLiAgVGhpcyBpcyBzbG93ZXIgdGhhbiBkZWZh dWx0IG9uIHNvbWUgc2hlbGxzLgotIyAndW5xdW90ZWQnCi0jICAgICAgIC0gcHJvZHVjZSBhbHNv ICRmdW5jX3F1b3RlX2FyZ191bnF1b3RlZF9yZXN1bHQgd2hpY2ggZG9lcyBub3QgY29udGFpbgot IyAgICAgICAgIHdyYXBwaW5nIGRvdWJsZS1xdW90ZXMuCi0jCi0jIEV4YW1wbGVzIGZvciAnZnVu Y19xdW90ZV9hcmcgcHJldHR5LHVucXVvdGVkIHN0cmluZyc6Ci0jCi0jICAgc3RyaW5nICAgICAg fCAqX3Jlc3VsdCAgICAgICAgICAgICAgfCAqX3VucXVvdGVkX3Jlc3VsdAotIyAgIC0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tCi0jICAgIiAg ICAgICAgICAgfCBcIiAgICAgICAgICAgICAgICAgICAgfCBcIgotIyAgIGEgYiAgICAgICAgIHwg ImEgYiIgICAgICAgICAgICAgICAgIHwgYSBiCi0jICAgImEgYiIgICAgICAgfCAiXCJhIGJcIiIg ICAgICAgICAgICAgfCBcImEgYlwiCi0jICAgKiAgICAgICAgICAgfCAiKiIgICAgICAgICAgICAg ICAgICAgfCAqCi0jICAgej0iJHt4LSR5fSIgfCAiej1cIlwke3gtXCR5fVwiIiAgICAgfCB6PVwi XCR7eC1cJHl9XCIKLSMKLSMgRXhhbXBsZXMgZm9yICdmdW5jX3F1b3RlX2FyZyBwcmV0dHksdW5x dW90ZWQsZXhwYW5kIHN0cmluZyc6Ci0jCi0jICAgc3RyaW5nICAgICAgICB8ICAgKl9yZXN1bHQg ICAgICAgICAgfCAgKl91bnF1b3RlZF9yZXN1bHQKLSMgICAtLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgICB6PSIke3gtJHl9IiAgIHwg Ino9XCIke3gtJHl9XCIiICAgICB8IHo9XCIke3gtJHl9XCIKLWZ1bmNfcXVvdGVfYXJnICgpCi17 Ci0gICAgX0dfcXVvdGVfZXhwYW5kPWZhbHNlCi0gICAgY2FzZSAsJDEsIGluCi0gICAgICAqLGV4 cGFuZCwqKQotICAgICAgICBfR19xdW90ZV9leHBhbmQ9OgotICAgICAgICA7OwotICAgIGVzYWMK LQotICAgIGNhc2UgLCQxLCBpbgotICAgICAgKixwcmV0dHksKnwqLGV4cGFuZCwqfCosdW5xdW90 ZWQsKikKLSAgICAgICAgZnVuY19xdW90ZV9wb3J0YWJsZSAkX0dfcXVvdGVfZXhwYW5kICIkMiIK LSAgICAgICAgZnVuY19xdW90ZV9hcmdfcmVzdWx0PSRmdW5jX3F1b3RlX3BvcnRhYmxlX3Jlc3Vs dAotICAgICAgICBmdW5jX3F1b3RlX2FyZ191bnF1b3RlZF9yZXN1bHQ9JGZ1bmNfcXVvdGVfcG9y dGFibGVfdW5xdW90ZWRfcmVzdWx0Ci0gICAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICAjIEZh c3RlciBxdW90ZS1mb3ItZXZhbCBmb3Igc29tZSBzaGVsbHMuCi0gICAgICAgIGZ1bmNfcXVvdGVm YXN0X2V2YWwgIiQyIgotICAgICAgICBmdW5jX3F1b3RlX2FyZ19yZXN1bHQ9JGZ1bmNfcXVvdGVm YXN0X2V2YWxfcmVzdWx0Ci0gICAgICAgIDs7Ci0gICAgZXNhYwotfQotCi0KLSMgZnVuY19xdW90 ZSBNT0RFcyBBUkdzLi4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBRdW90ZSBhbGwg QVJHcyB0byBiZSBldmFsZWQgbGF0ZXIgYW5kIGpvaW4gdGhlbSBpbnRvIHNpbmdsZSBjb21tYW5k LiAgU2VlCi0jIGZ1bmNfcXVvdGVfYXJnJ3MgZGVzY3JpcHRpb24gZm9yIG1vcmUgaW5mby4KLWZ1 bmNfcXVvdGUgKCkKLXsKLSAgICAkZGVidWdfY21kCi0gICAgX0dfZnVuY19xdW90ZV9tb2RlPSQx IDsgc2hpZnQKLSAgICBmdW5jX3F1b3RlX3Jlc3VsdD0KLSAgICB3aGlsZSB0ZXN0IDAgLWx0ICQj OyBkbwotICAgICAgZnVuY19xdW90ZV9hcmcgIiRfR19mdW5jX3F1b3RlX21vZGUiICIkMSIKLSAg ICAgIGlmIHRlc3QgLW4gIiRmdW5jX3F1b3RlX3Jlc3VsdCI7IHRoZW4KLSAgICAgICAgZnVuY19h cHBlbmQgZnVuY19xdW90ZV9yZXN1bHQgIiAkZnVuY19xdW90ZV9hcmdfcmVzdWx0IgotICAgICAg ZWxzZQotICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX3F1b3RlX3Jlc3VsdCAiJGZ1bmNfcXVvdGVf YXJnX3Jlc3VsdCIKLSAgICAgIGZpCi0gICAgICBzaGlmdAotICAgIGRvbmUKLX0KLQotCi0jIGZ1 bmNfc3RyaXBuYW1lIFBSRUZJWCBTVUZGSVggTkFNRQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KLSMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggZnJvbSBOQU1FLCBhbmQgc3Rv cmUgaW4gZnVuY19zdHJpcG5hbWVfcmVzdWx0LgotIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5v dCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKLSMgY2hhcmFjdGVycywgaGFzaGVz LCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZwotIyBkb3Qg KGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgotaWYgdGVzdCB5ZXMgPSAi JF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KLSAgZXZhbCAnZnVuY19zdHJpcG5hbWUgKCkKLSAgewot ICAgICRkZWJ1Z19jbWQKLQotICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0g Y29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLSAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVy cywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSB2YXJpYWJsZSBmaXJzdC4KLSAgICBmdW5jX3N0 cmlwbmFtZV9yZXN1bHQ9JDMKLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlw bmFtZV9yZXN1bHQjIiQxIn0KLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlw bmFtZV9yZXN1bHQlIiQyIn0KLSAgfScKLWVsc2UKLSAgZnVuY19zdHJpcG5hbWUgKCkKLSAgewot ICAgICRkZWJ1Z19jbWQKLQotICAgIGNhc2UgJDIgaW4KLSAgICAgIC4qKSBmdW5jX3N0cmlwbmFt ZV9yZXN1bHQ9YCRFQ0hPICIkMyIgfCAkU0VEIC1lICJzJV4kMSUlIiAtZSAicyVcXFxcJDJcJCUl ImA7OwotICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQg LWUgInMlXiQxJSUiIC1lICJzJSQyXCQlJSJgOzsKLSAgICBlc2FjCi0gIH0KLWZpCi0KLQotIyBm dW5jX3Nob3dfZXZhbCBDTUQgW0ZBSUxfRVhQXQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQotIyBVbmxlc3Mgb3B0X3F1aWV0IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4s IGlmIG9wdF9kcnlydW4gaXMKLSMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFs dWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCi0jIGlzIGdpdmVuLCB0aGVuIGV2YWx1 YXRlIGl0LgotZnVuY19zaG93X2V2YWwgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBfR19j bWQ9JDEKLSAgICBfR19mYWlsX2V4cD0kezItJzonfQotCi0gICAgZnVuY19xdW90ZV9hcmcgcHJl dHR5LGV4cGFuZCAiJF9HX2NtZCIKLSAgICBldmFsICJmdW5jX25vdHF1aWV0ICRmdW5jX3F1b3Rl X2FyZ19yZXN1bHQiCi0KLSAgICAkb3B0X2RyeV9ydW4gfHwgewotICAgICAgZXZhbCAiJF9HX2Nt ZCIKLSAgICAgIF9HX3N0YXR1cz0kPwotICAgICAgaWYgdGVzdCAwIC1uZSAiJF9HX3N0YXR1cyI7 IHRoZW4KLQlldmFsICIoZXhpdCAkX0dfc3RhdHVzKTsgJF9HX2ZhaWxfZXhwIgotICAgICAgZmkK LSAgICB9Ci19Ci0KLQotIyBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgQ01EIFtGQUlMX0VYUF0KLSMg LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFVubGVzcyBvcHRfcXVpZXQg aXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcwotIyBub3Qg dHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQg RkFJTF9FWFAKLSMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuICBVc2UgdGhlIHNhdmVkIGxv Y2FsZSBmb3IgZXZhbHVhdGlvbi4KLWZ1bmNfc2hvd19ldmFsX2xvY2FsZSAoKQotewotICAgICRk ZWJ1Z19jbWQKLQotICAgIF9HX2NtZD0kMQotICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9Ci0KLSAg ICAkb3B0X3F1aWV0IHx8IHsKLSAgICAgIGZ1bmNfcXVvdGVfYXJnIGV4cGFuZCxwcmV0dHkgIiRf R19jbWQiCi0gICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfYXJnX3Jlc3VsdCIKLSAg ICB9Ci0KLSAgICAkb3B0X2RyeV9ydW4gfHwgewotICAgICAgZXZhbCAiJF9HX3VzZXJfbG9jYWxl Ci0JICAgICRfR19jbWQiCi0gICAgICBfR19zdGF0dXM9JD8KLSAgICAgIGV2YWwgIiRfR19zYWZl X2xvY2FsZSIKLSAgICAgIGlmIHRlc3QgMCAtbmUgIiRfR19zdGF0dXMiOyB0aGVuCi0JZXZhbCAi KGV4aXQgJF9HX3N0YXR1cyk7ICRfR19mYWlsX2V4cCIKLSAgICAgIGZpCi0gICAgfQotfQotCi0K LSMgZnVuY190cl9zaAotIyAtLS0tLS0tLS0tCi0jIFR1cm4gJDEgaW50byBhIHN0cmluZyBzdWl0 YWJsZSBmb3IgYSBzaGVsbCB2YXJpYWJsZSBuYW1lLgotIyBSZXN1bHQgaXMgc3RvcmVkIGluICRm dW5jX3RyX3NoX3Jlc3VsdC4gIEFsbCBjaGFyYWN0ZXJzCi0jIG5vdCBpbiB0aGUgc2V0IGEtekEt WjAtOV8gYXJlIHJlcGxhY2VkIHdpdGggJ18nLiBGdXJ0aGVyLAotIyBpZiAkMSBiZWdpbnMgd2l0 aCBhIGRpZ2l0LCBhICdfJyBpcyBwcmVwZW5kZWQgYXMgd2VsbC4KLWZ1bmNfdHJfc2ggKCkKLXsK LSAgICAkZGVidWdfY21kCi0KLSAgICBjYXNlICQxIGluCi0gICAgWzAtOV0qIHwgKlshYS16QS1a MC05X10qKQotICAgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEIC1lICdz L15cKFswLTldXCkvX1wxLycgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnYAotICAgICAgOzsKLSAg ICAqICkKLSAgICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCi0gICAgICA7OwotICAgIGVzYWMKLX0K LQotCi0jIGZ1bmNfdmVyYm9zZSBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hv IHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIGluIHZlcmJvc2UgbW9kZSBvbmx5LgotZnVu Y192ZXJib3NlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJG9wdF92ZXJib3NlICYmIGZ1 bmNfZWNobyAiJCoiCi0KLSAgICA6Ci19Ci0KLQotIyBmdW5jX3dhcm5fYW5kX2NvbnRpbnVlIEFS Ry4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hvIHByb2dyYW0gbmFt ZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCi1mdW5jX3dhcm5f YW5kX2NvbnRpbnVlICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgJHJlcXVpcmVfdGVybV9j b2xvcnMKLQotICAgIGZ1bmNfZWNob19pbmZpeF8xICIke3RjX3JlZH13YXJuaW5nJHRjX3Jlc2V0 IiAiJCoiID4mMgotfQotCi0KLSMgZnVuY193YXJuaW5nIENBVEVHT1JZIEFSRy4uLgotIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIHdh cm5pbmcgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4gV2FybmluZwotIyBtZXNzYWdlcyBjYW4g YmUgZmlsdGVyZWQgYWNjb3JkaW5nIHRvIENBVEVHT1JZLCB3aGVyZSB0aGlzIGZ1bmN0aW9uCi0j IGVsaWRlcyBtZXNzYWdlcyB3aGVyZSBDQVRFR09SWSBpcyBub3QgbGlzdGVkIGluIHRoZSBnbG9i YWwgdmFyaWFibGUKLSMgJ29wdF93YXJuaW5nX3R5cGVzJy4KLWZ1bmNfd2FybmluZyAoKQotewot ICAgICRkZWJ1Z19jbWQKLQotICAgICMgQ0FURUdPUlkgbXVzdCBiZSBpbiB0aGUgd2FybmluZ19j YXRlZ29yaWVzIGxpc3QhCi0gICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgIiBpbgotICAg ICAgKiIgJDEgIiopIDs7Ci0gICAgICAqKSBmdW5jX2ludGVybmFsX2Vycm9yICJpbnZhbGlkIHdh cm5pbmcgY2F0ZWdvcnkgJyQxJyIgOzsKLSAgICBlc2FjCi0KLSAgICBfR19jYXRlZ29yeT0kMQot ICAgIHNoaWZ0Ci0KLSAgICBjYXNlICIgJG9wdF93YXJuaW5nX3R5cGVzICIgaW4KLSAgICAgICoi ICRfR19jYXRlZ29yeSAiKikgJHdhcm5pbmdfZnVuYyAkezErIiRAIn0gOzsKLSAgICBlc2FjCi19 Ci0KLQotIyBmdW5jX3NvcnRfdmVyIFZFUjEgVkVSMgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQotIyAnc29ydCAtVicgaXMgbm90IGdlbmVyYWxseSBhdmFpbGFibGUuCi0jIE5vdGUgdGhpcyBk ZXZpYXRlcyBmcm9tIHRoZSB2ZXJzaW9uIGNvbXBhcmlzb24gaW4gYXV0b21ha2UKLSMgaW4gdGhh dCBpdCB0cmVhdHMgMS41IDwgMS41LjAsIGFuZCB0cmVhdHMgMS40LjRhIDwgMS40LXAzYQotIyBi dXQgdGhpcyBzaG91bGQgc3VmZmljZSBhcyB3ZSB3b24ndCBiZSBzcGVjaWZ5aW5nIG9sZAotIyB2 ZXJzaW9uIGZvcm1hdHMgb3IgcmVkdW5kYW50IHRyYWlsaW5nIC4wIGluIGJvb3RzdHJhcC5jb25m LgotIyBJZiB3ZSBkaWQgd2FudCBmdWxsIGNvbXBhdGliaWxpdHkgdGhlbiB3ZSBzaG91bGQgcHJv YmFibHkKLSMgdXNlIG00X3ZlcnNpb25fY29tcGFyZSBmcm9tIGF1dG9jb25mLgotZnVuY19zb3J0 X3ZlciAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIHByaW50ZiAnJXNcbiVzXG4nICIkMSIg IiQyIiBcCi0gICAgICB8IHNvcnQgLXQuIC1rIDEsMW4gLWsgMiwybiAtayAzLDNuIC1rIDQsNG4g LWsgNSw1biAtayA2LDZuIC1rIDcsN24gLWsgOCw4biAtayA5LDluCi19Ci0KLSMgZnVuY19sdF92 ZXIgUFJFViBDVVJSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZXR1cm4gdHJ1ZSBpZiBQ UkVWIGFuZCBDVVJSIGFyZSBpbiB0aGUgY29ycmVjdCBvcmRlciBhY2NvcmRpbmcgdG8KLSMgZnVu Y19zb3J0X3Zlciwgb3RoZXJ3aXNlIGZhbHNlLiAgVXNlIGl0IGxpa2UgdGhpczoKLSMKLSMgIGZ1 bmNfbHRfdmVyICIkcHJldl92ZXIiICIkcHJvcG9zZWRfdmVyIiB8fCBmdW5jX2ZhdGFsX2Vycm9y ICIuLi4iCi1mdW5jX2x0X3ZlciAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIHRlc3QgIngk MSIgPSB4YGZ1bmNfc29ydF92ZXIgIiQxIiAiJDIiIHwgJFNFRCAxcWAKLX0KLQotCi0jIExvY2Fs IHZhcmlhYmxlczoKLSMgbW9kZTogc2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOiAyCi0j IGV2YWw6IChhZGQtaG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCkKLSMgdGltZS1z dGFtcC1wYXR0ZXJuOiAiMTAvc2NyaXB0dmVyc2lvbj0lOnktJTAybS0lMDJkLiUwMkg7ICMgVVRD IgotIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvZ2wv YnVpbGQtYXV4L2lubGluZS1zb3VyY2UgYi9nbC9idWlsZC1hdXgvaW5saW5lLXNvdXJjZQpkZWxl dGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggYTY0NmNjNDkuLjAwMDAwMDAwCi0tLSBhL2dsL2J1 aWxkLWF1eC9pbmxpbmUtc291cmNlCisrKyAvZGV2L251bGwKQEAgLTEsMTU5ICswLDAgQEAKLSMh IC9iaW4vc2gKLQotIyBPdXRwdXQgdGhlIGNvbnRlbnRzIG9mIGEgc2hlbGwgc2NyaXB0IHdpdGgg c291cmNlZCBmaWxlcyBpbmxpbmVkLgotIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAx MgotCi0jIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZS4gIFRoZXJlIGlzIE5PIHdhcnJhbnR5OyBub3Qg ZXZlbiBmb3IKLSMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLgotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTItMjAxOSwgMjAyMSwgMjAyMyBCb290c3Ry YXAgQXV0aG9ycwotIwotIyBUaGlzIGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIE1JVCBsaWNlbnNlCi0jIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2Vz L01JVD4sIGFuZCBHUEwgdmVyc2lvbiAyIG9yIGxhdGVyCi0jIDxodHRwOi8vd3d3LmdudS5vcmcv bGljZW5zZXMvZ3BsLTIuMC5odG1sPi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBvZgotIyB0aGVzZSBs aWNlbnNlcyB3aGVuIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoaXMgc29mdHdhcmUgb3IgYW55 IG9mCi0jIHRoZSBmaWxlcyB3aXRoaW4gaXQuICBTZWUgdGhlIFVSTHMgYWJvdmUsIG9yIHRoZSBm aWxlIGBMSUNFTlNFYAotIyBpbmNsdWRlZCBpbiB0aGUgQm9vdHN0cmFwIGRpc3RyaWJ1dGlvbiBm b3IgdGhlIGZ1bGwgbGljZW5zZSB0ZXh0cy4KLQotIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJv cG9zZSBwYXRjaGVzIHRvOgotIyA8aHR0cHM6Ly9naXRodWIuY29tL2dudWxpYi1tb2R1bGVzL2Jv b3RzdHJhcC9pc3N1ZXM+Ci0KLSMgU291cmNlIHJlcXVpcmVkIGV4dGVybmFsIGxpYnJhcmllczoK LS4gYGVjaG8gIiQwIiB8JHtTRUQtc2VkfSAnc3xbXi9dKiR8fCdgImZ1bmNsaWIuc2giCi0uIGBl Y2hvICIkMCIgfCR7U0VELXNlZH0gJ3N8W14vXSokfHwnYCJvcHRpb25zLXBhcnNlciIKLQotIyBT ZXQgYSB2ZXJzaW9uIHN0cmluZyBmb3IgKnRoaXMqIHNjcmlwdC4KLXNjcmlwdHZlcnNpb249MjAx OS0wMi0xOS4xNTsgIyBVVEMKLQotCi0jIyAtLS0tLS0gIyMKLSMjIFVzYWdlLiAjIwotIyMgLS0t LS0tICMjCi0KLSMgUnVuICdidWlsZC1hdXgvaW5saW5lLXNvdXJjZSAtLWhlbHAnIGZvciBoZWxw IHdpdGggdXNpbmcgdGhpcyBzY3JpcHQKLSMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgotCi0jIFJl Y3Vyc2l2ZWx5IHNjYW4gdGhyb3VnaCBhIEZJTEUgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUs IHJlcGxhY2luZwotIyBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZzoKLSMgICAuICJyZWxhdGl2ZS9m aWxlIgotIyAgIC4gYGVjaG8gIiQwIiB8ZWRpdGAicmVsYXRpdmUvZmlsZSIKLSMgd2l0aCB0aGUg Y29udGVudHMgb2YgdGhlIHJlZmVyZW5jZWQgZmlsZXMuCi0KLQotIyMgLS0tLS0tLS0tLS0tLS0t LSAjIwotIyMgT3B0aW9ucyBwYXJzaW5nLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIwotCi11 c2FnZT0nJHByb2dwYXRoIFtPUFRJT05dLi4uIEZJTEUnCi0KLSMgU2hvcnQgaGVscCBtZXNzYWdl IGluIHJlc3BvbnNlIHRvICctaCcuCi11c2FnZV9tZXNzYWdlPSdPcHRpb25zOgotICAgICAgIC0t ZGVidWcgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKLSAgICAgICAtLXZlcnNp b24gICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gICAtaCwgLS1oZWxw ICAgICAgICAgcHJpbnQgaGVscCBtZXNzYWdlIGFuZCBleGl0Ci0nCi0KLWxvbmdfaGVscF9tZXNz YWdlPSJcCi1SZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4KLUdlbmVyYWwgaGVs cCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LiIKLQot ZnVuY19vcHRpb25zICR7MSsiJEAifQotZXZhbCBzZXQgZHVtbXkgIiRmdW5jX29wdGlvbnNfcmVz dWx0Ijsgc2hpZnQKLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVzb3VyY2Ug bWFuYWdlbWVudC4gIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgcmVxdWlyZV9B V0sKLSMgLS0tLS0tLS0tLS0KLSMgU2VhcmNoIGZvciBhICJub3QgaG9wZWxlc3MiIGF3ay4KLXJl cXVpcmVfQVdLPWZ1bmNfcmVxdWlyZV9BV0sKLWZ1bmNfcmVxdWlyZV9BV0sgKCkKLXsKLSAgICAk ZGVidWdfY21kCi0KLSAgICB0ZXN0IC1uICIkQVdLIiB8fCB7Ci0gICAgICAjIEZpbmQgdGhlIGZp cnN0IGV4ZWN1dGFibGUgaW4gdGhlIGxpc3QuCi0gICAgICBmb3IgX0dfcHJvZyBpbiBnYXdrIG1h d2sgbmF3ayBhd2sKLSAgICAgIGRvCi0gICAgICAgIHJlcXVpcmVfQVdLX0lGUz0kSUZTCi0JSUZT PSR7UEFUSF9TRVBBUkFUT1ItOn0KLQlmb3IgX0dfZGlyIGluICRQQVRICi0gICAgICAgIGRvCi0J ICBJRlM9JHJlcXVpcmVfQVdLX0lGUwotICAgICAgICAgIGlmIHRlc3QgLWYgIiRfR19kaXIvJF9H X3Byb2ciICYmIHRlc3QgLXggIiRfR19kaXIvJF9HX3Byb2ciCi0JICB0aGVuCi0JICAgIEFXSz0k X0dfZGlyLyRfR19wcm9nCi0gICAgICAgICAgICBicmVhayAyCi0gICAgICAgICAgZmkKLSAgICAg ICAgZG9uZQotCUlGUz0kcmVxdWlyZV9BV0tfSUZTCi0gICAgICBkb25lCi0gICAgfQotCi0gICAg dGVzdCAtbiAiJEFXSyIgfHwgZnVuY19mYXRhbF9lcnJvciAiXAotUGxlYXNlIGluc3RhbGwgR05V IEF3aywgb3IgJ2V4cG9ydCBBV0s9L3BhdGgvdG8vZ251L2F3aycuIgotCi0gICAgZnVuY192ZXJi b3NlICJmb3VuZCAnJEFXSycuIgotCi0gICAgcmVxdWlyZV9BV0s9OgotfQotCi0KLSMjIC0tLS0t LS0tLS0tLS0tLSAjIwotIyMgQ29yZSBmdW5jdGlvbnMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0g IyMKLQotIyBmdW5jX2luY2x1ZGUgTElORQotIyAtLS0tLS0tLS0tLS0tLS0tLQotIyBPdXRwdXQg dGhlIGNvbnRlbnRzIG9mIGZpbGUgaW5jbHVkZWQgYnkgTElORS4KLWZ1bmNfaW5jbHVkZSAoKQot ewotICAgICRyZXF1aXJlX0FXSwotCi0gICAgdGVzdCAtZiAiJDEiIFwKLSAgICAgICAgfHwgZnVu Y19mYXRhbF9lcnJvciAiZmlsZSAnJDEnIG5vdCBmb3VuZCIKLQotICAgIF9HX3NjcmlwdGRpcj1g ZWNobyAiJDEiIHwkU0VEICdzfFteL10qJHx8J2AKLSAgICB0ZXN0IC1uICIkX0dfc2NyaXB0ZGly IiB8fCBfR19zY3JpcHRkaXI9Ii4vIgotCi0gICAgJEFXSyAnCi0gICAgICAgIEJFR0lOIHsgbWFn aWMgPSAnJHtfUkVDVVJTRV9NQUdJQy0wfSc7IH0KLQotICAgICAgICAvXiMhLyAmJiBtYWdpYyA9 PSAwIHsKLSAgICAgICAgICAgIHByaW50ICQwOwotICAgICAgICAgICAgcHJpbnQgIiMjIERPIE5P VCBFRElUIC0gVGhpcyBmaWxlIGdlbmVyYXRlZCBmcm9tICckMSciOwotICAgICAgICAgICAgcHJp bnQgIiMjICAgICAgICAgICAgICAgYnkgJyRwcm9nbmFtZScgdickc2NyaXB0dmVyc2lvbiciOwot ICAgICAgICAgICAgbWFnaWMrKzsKLSAgICAgICAgICAgIG5leHQ7Ci0gICAgICAgIH0KLQotICAg ICAgICAvXlwuIFsnXCcnIl0uKlsnXCcnIl0kLyB7Ci0gICAgICAgICAgICBmaWxlID0gc3Vic3Ry ICgkMiwgMiwgbGVuZ3RoICgkMikgLTIpOwotCSAgICBzeXN0ZW0gKHNwcmludGYgKCJlbnYgX1JF Q1VSU0VfTUFHSUM9JWQgJyRwcm9ncGF0aCcgJXMiLCBtYWdpYywgZmlsZSkpOwotICAgICAgICAg ICAgbmV4dDsKLSAgICAgICAgfQotCi0gICAgICAgIC9eXC4gYGVjaG8gW15gXSpgWydcJyciXVte J1wnJyJdKlsnXCcnIl0kLyB7Ci0gICAgICAgICAgICB0YWlsID0gc3Vic3RyICgkMCwgbWF0Y2gg KCQwLCAvYFsnXCcnIl0vKSk7Ci0JICAgIGZpbGUgPSBzdWJzdHIgKHRhaWwsIDMsIGxlbmd0aCAo dGFpbCkgLTMpOwotCSAgICBzeXN0ZW0gKHNwcmludGYgKCJlbnYgX1JFQ1VSU0VfTUFHSUM9JWQg JyRwcm9ncGF0aCcgJyIkX0dfc2NyaXB0ZGlyIiclcyIsIG1hZ2ljLCBmaWxlKSk7Ci0gICAgICAg ICAgICBuZXh0OwotICAgICAgICB9Ci0KLSAgICAgICAgeyBwcmludDsgfQotICAgICcgPCAiJDEi Ci19Ci0KLWZ1bmNfaW5jbHVkZSAiJDEiCi0KLWV4aXQgMAotCi0jIExvY2FsIHZhcmlhYmxlczoK LSMgbW9kZTogc2hlbGwtc2NyaXB0Ci0jIHNoLWluZGVudGF0aW9uOiAyCi0jIGV2YWw6IChhZGQt aG9vayAnYmVmb3JlLXNhdmUtaG9vayAndGltZS1zdGFtcCkKLSMgdGltZS1zdGFtcC1wYXR0ZXJu OiAiMzAvc2NyaXB0dmVyc2lvbj0lOnktJTAybS0lMDJkLiUwMkg7ICMgVVRDIgotIyB0aW1lLXN0 YW1wLXRpbWUtem9uZTogIlVUQyIKLSMgRW5kOgpkaWZmIC0tZ2l0IGEvZ2wvYnVpbGQtYXV4L29w dGlvbnMtcGFyc2VyIGIvZ2wvYnVpbGQtYXV4L29wdGlvbnMtcGFyc2VyCmRlbGV0ZWQgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAyMGRiZjU3NS4uMDAwMDAwMDAKLS0tIGEvZ2wvYnVpbGQtYXV4L29w dGlvbnMtcGFyc2VyCisrKyAvZGV2L251bGwKQEAgLTEsNjg1ICswLDAgQEAKLSMhIC9iaW4vc2gK LQotIyBBIHBvcnRhYmxlLCBwbHVnZ2FibGUgb3B0aW9uIHBhcnNlciBmb3IgQm91cm5lIHNoZWxs LgotIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAxMAotCi0jIFRoaXMgaXMgZnJlZSBz b2Z0d2FyZS4gIFRoZXJlIGlzIE5PIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IKLSMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgotIwotIyBDb3B5cmln aHQgKEMpIDIwMTAtMjAxOSwgMjAyMSwgMjAyMyBCb290c3RyYXAgQXV0aG9ycwotIwotIyBUaGlz IGZpbGUgaXMgZHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIE1JVCBsaWNlbnNl Ci0jIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD4sIGFuZCBHUEwgdmVyc2lv biAyIG9yIGxhdGVyCi0jIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1s Pi4gIFlvdSBtdXN0IGFwcGx5IG9uZSBvZgotIyB0aGVzZSBsaWNlbnNlcyB3aGVuIHVzaW5nIG9y IHJlZGlzdHJpYnV0aW5nIHRoaXMgc29mdHdhcmUgb3IgYW55IG9mCi0jIHRoZSBmaWxlcyB3aXRo aW4gaXQuICBTZWUgdGhlIFVSTHMgYWJvdmUsIG9yIHRoZSBmaWxlIGBMSUNFTlNFYAotIyBpbmNs dWRlZCBpbiB0aGUgQm9vdHN0cmFwIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIGZ1bGwgbGljZW5zZSB0 ZXh0cy4KLQotIyBQbGVhc2UgcmVwb3J0IGJ1Z3Mgb3IgcHJvcG9zZSBwYXRjaGVzIHRvOgotIyA8 aHR0cHM6Ly9naXRodWIuY29tL2dudWxpYi1tb2R1bGVzL2Jvb3RzdHJhcC9pc3N1ZXM+Ci0KLSMg U2V0IGEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgc2NyaXB0Lgotc2NyaXB0dmVyc2lvbj0yMDE5 LTAyLTE5LjE1OyAjIFVUQwotCi0KLSMjIC0tLS0tLSAjIwotIyMgVXNhZ2UuICMjCi0jIyAtLS0t LS0gIyMKLQotIyBUaGlzIGZpbGUgaXMgYSBsaWJyYXJ5IGZvciBwYXJzaW5nIG9wdGlvbnMgaW4g eW91ciBzaGVsbCBzY3JpcHRzIGFsb25nCi0jIHdpdGggYXNzb3J0ZWQgb3RoZXIgdXNlZnVsIHN1 cHBvcnRpbmcgZmVhdHVyZXMgdGhhdCB5b3UgY2FuIG1ha2UgdXNlCi0jIG9mIHRvby4KLSMKLSMg Rm9yIHRoZSBzaW1wbGVzdCBzY3JpcHRzIHlvdSBtaWdodCBuZWVkIG9ubHk6Ci0jCi0jICAgIyEv YmluL3NoCi0jICAgLiByZWxhdGl2ZS9wYXRoL3RvL2Z1bmNsaWIuc2gKLSMgICAuIHJlbGF0aXZl L3BhdGgvdG8vb3B0aW9ucy1wYXJzZXIKLSMgICBzY3JpcHR2ZXJzaW9uPTEuMAotIyAgIGZ1bmNf b3B0aW9ucyAkezErIiRAIn0KLSMgICBldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1 bHQiOyBzaGlmdAotIyAgIC4uLnJlc3Qgb2YgeW91ciBzY3JpcHQuLi4KLSMKLSMgSW4gb3JkZXIg Zm9yIHRoZSAnLS12ZXJzaW9uJyBvcHRpb24gdG8gd29yaywgeW91IHdpbGwgbmVlZCB0byBoYXZl IGEKLSMgc3VpdGFibHkgZm9ybWF0dGVkIGNvbW1lbnQgbGlrZSB0aGUgb25lIGF0IHRoZSB0b3Ag b2YgdGhpcyBmaWxlCi0jIHN0YXJ0aW5nIHdpdGggJyMgV3JpdHRlbiBieSAnIGFuZCBlbmRpbmcg d2l0aCAnIyBDb3B5cmlnaHQnLgotIwotIyBGb3IgJy1oJyBhbmQgJy0taGVscCcgdG8gd29yaywg eW91IHdpbGwgYWxzbyBuZWVkIGEgb25lIGxpbmUKLSMgZGVzY3JpcHRpb24gb2YgeW91ciBzY3Jp cHQncyBwdXJwb3NlIGluIGEgY29tbWVudCBkaXJlY3RseSBhYm92ZSB0aGUKLSMgJyMgV3JpdHRl biBieSAnIGxpbmUsIGxpa2UgdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KLSMKLSMg VGhlIGRlZmF1bHQgb3B0aW9ucyBhbHNvIHN1cHBvcnQgJy0tZGVidWcnLCB3aGljaCB3aWxsIHR1 cm4gb24gc2hlbGwKLSMgZXhlY3V0aW9uIHRyYWNpbmcgKHNlZSB0aGUgY29tbWVudCBhYm92ZSBk ZWJ1Z19jbWQgYmVsb3cgZm9yIGFub3RoZXIKLSMgdXNlKSwgYW5kICctLXZlcmJvc2UnIGFuZCB0 aGUgZnVuY192ZXJib3NlIGZ1bmN0aW9uIHRvIGFsbG93IHlvdXIgc2NyaXB0Ci0jIHRvIGRpc3Bs YXkgdmVyYm9zZSBtZXNzYWdlcyBvbmx5IHdoZW4geW91ciB1c2VyIGhhcyBzcGVjaWZpZWQKLSMg Jy0tdmVyYm9zZScuCi0jCi0jIEFmdGVyIHNvdXJjaW5nIHRoaXMgZmlsZSwgeW91IGNhbiBwbHVn IGluIHByb2Nlc3NpbmcgZm9yIGFkZGl0aW9uYWwKLSMgb3B0aW9ucyBieSBhbWVuZGluZyB0aGUg dmFyaWFibGVzIGZyb20gdGhlICdDb25maWd1cmF0aW9uJyBzZWN0aW9uCi0jIGJlbG93LCBhbmQg Zm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlICdPcHRpb24gcGFyc2luZycKLSMgc2Vj dGlvbiBmdXJ0aGVyIGRvd24uCi0KLSMjIC0tLS0tLS0tLS0tLS0tICMjCi0jIyBDb25maWd1cmF0 aW9uLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBZb3Ugc2hvdWxkIG92ZXJyaWRlIHRo ZXNlIHZhcmlhYmxlcyBpbiB5b3VyIHNjcmlwdCBhZnRlciBzb3VyY2luZyB0aGlzCi0jIGZpbGUg c28gdGhhdCB0aGV5IHJlZmxlY3QgdGhlIGN1c3RvbWlzYXRpb25zIHlvdSBoYXZlIGFkZGVkIHRv IHRoZQotIyBvcHRpb24gcGFyc2VyLgotCi0jIFRoZSB1c2FnZSBsaW5lIGZvciBvcHRpb24gcGFy c2luZyBlcnJvcnMgYW5kIHRoZSBzdGFydCBvZiAnLWgnIGFuZAotIyAnLS1oZWxwJyBvdXRwdXQg bWVzc2FnZXMuIFlvdSBjYW4gZW1iZWQgc2hlbGwgdmFyaWFibGVzIGZvciBkZWxheWVkCi0jIGV4 cGFuc2lvbiBhdCB0aGUgdGltZSB0aGUgbWVzc2FnZSBpcyBkaXNwbGF5ZWQsIGJ1dCB5b3Ugd2ls bCBuZWVkIHRvCi0jIHF1b3RlIG90aGVyIHNoZWxsIG1ldGEtY2hhcmFjdGVycyBjYXJlZnVsbHkg dG8gcHJldmVudCB0aGVtIGJlaW5nCi0jIGV4cGFuZGVkIHdoZW4gdGhlIGNvbnRlbnRzIGFyZSBl dmFsZWQuCi11c2FnZT0nJHByb2dwYXRoIFtPUFRJT05dLi4uJwotCi0jIFNob3J0IGhlbHAgbWVz c2FnZSBpbiByZXNwb25zZSB0byAnLWgnIGFuZCAnLS1oZWxwJy4gIEFkZCB0byB0aGlzIG9yCi0j IG92ZXJyaWRlIGl0IGFmdGVyIHNvdXJjaW5nIHRoaXMgbGlicmFyeSB0byByZWZsZWN0IHRoZSBm dWxsIHNldCBvZgotIyBvcHRpb25zIHlvdXIgc2NyaXB0IGFjY2VwdHMuCi11c2FnZV9tZXNzYWdl PSJcCi0gICAgICAgLS1kZWJ1ZyAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZwot ICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkKLSAgICAgICAgICAgICAgICAgICAgICByZXBvcnQg dGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW2FsbF0KLSAgIC12LCAtLXZlcmJvc2Ug ICAgICB2ZXJib3NlbHkgcmVwb3J0IHByb2Nlc3NpbmcKLSAgICAgICAtLXZlcnNpb24gICAgICBw cmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gICAtaCwgLS1oZWxwICAgICAgICAg cHJpbnQgc2hvcnQgb3IgbG9uZyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKLSIKLQotIyBBZGRpdGlv bmFsIHRleHQgYXBwZW5kZWQgdG8gJ3VzYWdlX21lc3NhZ2UnIGluIHJlc3BvbnNlIHRvICctLWhl bHAnLgotbG9uZ19oZWxwX21lc3NhZ2U9IgotV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6Ci0g ICAgICAgJ2FsbCcgICAgICAgICAgc2hvdyBhbGwgd2FybmluZ3MKLSAgICAgICAnbm9uZScgICAg ICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzCi0gICAgICAgJ2Vycm9yJyAgICAgICAgd2Fy bmluZ3MgYXJlIHRyZWF0ZWQgYXMgZmF0YWwgZXJyb3JzIgotCi0jIEhlbHAgbWVzc2FnZSBwcmlu dGVkIGJlZm9yZSBmYXRhbCBvcHRpb24gcGFyc2luZyBlcnJvcnMuCi1mYXRhbF9oZWxwPSJUcnkg J1wkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0KLQotCi0jIyAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBIb29rIGZ1bmN0aW9uIG1hbmFnZW1lbnQuICMj Ci0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgVGhpcyBzZWN0aW9uIGNvbnRh aW5zIGZ1bmN0aW9ucyBmb3IgYWRkaW5nLCByZW1vdmluZywgYW5kIHJ1bm5pbmcgaG9va3MKLSMg aW4gdGhlIG1haW4gY29kZS4gIEEgaG9vayBpcyBqdXN0IGEgbGlzdCBvZiBmdW5jdGlvbiBuYW1l cyB0aGF0IGNhbiBiZQotIyBydW4gaW4gb3JkZXIgbGF0ZXIgb24uCi0KLSMgZnVuY19ob29rYWJs ZSBGVU5DX05BTUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVjbGFyZSB0aGF0IEZV TkNfTkFNRSB3aWxsIHJ1biBob29rcyBhZGRlZCB3aXRoCi0jICdmdW5jX2FkZF9ob29rIEZVTkNf TkFNRSAuLi4nLgotZnVuY19ob29rYWJsZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1 bmNfYXBwZW5kIGhvb2thYmxlX2ZucyAiICQxIgotfQotCi0KLSMgZnVuY19hZGRfaG9vayBGVU5D X05BTUUgSE9PS19GVU5DCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBS ZXF1ZXN0IHRoYXQgRlVOQ19OQU1FIGNhbGwgSE9PS19GVU5DIGJlZm9yZSBpdCByZXR1cm5zLiAg RlVOQ19OQU1FIG11c3QKLSMgZmlyc3QgaGF2ZSBiZWVuIGRlY2xhcmVkICJob29rYWJsZSIgYnkg YSBjYWxsIHRvICdmdW5jX2hvb2thYmxlJy4KLWZ1bmNfYWRkX2hvb2sgKCkKLXsKLSAgICAkZGVi dWdfY21kCi0KLSAgICBjYXNlICIgJGhvb2thYmxlX2ZucyAiIGluCi0gICAgICAqIiAkMSAiKikg OzsKLSAgICAgICopIGZ1bmNfZmF0YWxfZXJyb3IgIickMScgZG9lcyBub3QgYWNjZXB0IGhvb2sg ZnVuY3Rpb25zLiIgOzsKLSAgICBlc2FjCi0KLSAgICBldmFsIGZ1bmNfYXBwZW5kICR7MX1faG9v a3MgJyIgJDIiJwotfQotCi0KLSMgZnVuY19yZW1vdmVfaG9vayBGVU5DX05BTUUgSE9PS19GVU5D Ci0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZW1vdmUgSE9PS19G VU5DIGZyb20gdGhlIGxpc3Qgb2YgaG9vayBmdW5jdGlvbnMgdG8gYmUgY2FsbGVkIGJ5Ci0jIEZV TkNfTkFNRS4KLWZ1bmNfcmVtb3ZlX2hvb2sgKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBl dmFsICR7MX1faG9va3M9J2AkRUNITyAiXCQnJDEnX2hvb2tzIiB8JFNFRCAic3wgJyQyJ3x8ImAn Ci19Ci0KLQotIyBmdW5jX3Byb3BhZ2F0ZV9yZXN1bHQgRlVOQ19OQU1FX0EgRlVOQ19OQU1FX0IK LSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIElmIHRo ZSAqX3Jlc3VsdCB2YXJpYWJsZSBvZiBGVU5DX05BTUVfQSBfaXMgc2V0XywgYXNzaWduIGl0cyB2 YWx1ZSB0bwotIyAqX3Jlc3VsdCB2YXJpYWJsZSBvZiBGVU5DX05BTUVfQi4KLWZ1bmNfcHJvcGFn YXRlX3Jlc3VsdCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfcHJvcGFnYXRlX3Jl c3VsdF9yZXN1bHQ9OgotICAgIGlmIGV2YWwgInRlc3QgXCJcJHskezF9X3Jlc3VsdCtzZXR9XCIg PSBzZXQiCi0gICAgdGhlbgotICAgICAgZXZhbCAiJHsyfV9yZXN1bHQ9XCQkezF9X3Jlc3VsdCIK LSAgICBlbHNlCi0gICAgICBmdW5jX3Byb3BhZ2F0ZV9yZXN1bHRfcmVzdWx0PWZhbHNlCi0gICAg ZmkKLX0KLQotCi0jIGZ1bmNfcnVuX2hvb2tzIEZVTkNfTkFNRSBbQVJHXS4uLgotIyAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgUnVuIGFsbCBob29rIGZ1bmN0aW9ucyByZWdp c3RlcmVkIHRvIEZVTkNfTkFNRS4KLSMgSXQncyBhc3N1bWVkIHRoYXQgdGhlIGxpc3Qgb2YgaG9v ayBmdW5jdGlvbnMgY29udGFpbnMgbm90aGluZyBtb3JlCi0jIHRoYW4gYSB3aGl0ZXNwYWNlLWRl bGltaXRlZCBsaXN0IG9mIGxlZ2FsIHNoZWxsIGZ1bmN0aW9uIG5hbWVzLCBhbmQKLSMgbm8gZWZm b3J0IGlzIHdhc3RlZCB0cnlpbmcgdG8gY2F0Y2ggc2hlbGwgbWV0YS1jaGFyYWN0ZXJzIG9yIHBy ZXNlcnZlCi0jIHdoaXRlc3BhY2UuCi1mdW5jX3J1bl9ob29rcyAoKQotewotICAgICRkZWJ1Z19j bWQKLQotICAgIGNhc2UgIiAkaG9va2FibGVfZm5zICIgaW4KLSAgICAgICoiICQxICIqKSA7Owot ICAgICAgKikgZnVuY19mYXRhbF9lcnJvciAiJyQxJyBkb2VzIG5vdCBzdXBwb3J0IGhvb2sgZnVu Y3Rpb25zLiIgOzsKLSAgICBlc2FjCi0KLSAgICBldmFsIF9HX2hvb2tfZm5zPVwkJDFfaG9va3M7 IHNoaWZ0Ci0KLSAgICBmb3IgX0dfaG9vayBpbiAkX0dfaG9va19mbnM7IGRvCi0gICAgICBmdW5j X3Vuc2V0ICIke19HX2hvb2t9X3Jlc3VsdCIKLSAgICAgIGV2YWwgJF9HX2hvb2sgJyR7MSsiJEAi fScKLSAgICAgIGZ1bmNfcHJvcGFnYXRlX3Jlc3VsdCAkX0dfaG9vayBmdW5jX3J1bl9ob29rcwot ICAgICAgaWYgJGZ1bmNfcHJvcGFnYXRlX3Jlc3VsdF9yZXN1bHQ7IHRoZW4KLSAgICAgICAgZXZh bCBzZXQgZHVtbXkgIiRmdW5jX3J1bl9ob29rc19yZXN1bHQiOyBzaGlmdAotICAgICAgZmkKLSAg ICBkb25lCi19Ci0KLQotCi0jIyAtLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE9wdGlvbiBwYXJzaW5n LiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgSW4gb3JkZXIgdG8gYWRkIHlvdXIgb3du IG9wdGlvbiBwYXJzaW5nIGhvb2tzLCB5b3UgbXVzdCBhY2NlcHQgdGhlCi0jIGZ1bGwgcG9zaXRp b25hbCBwYXJhbWV0ZXIgbGlzdCBmcm9tIHlvdXIgaG9vayBmdW5jdGlvbi4gIFlvdSBtYXkgcmVt b3ZlCi0jIG9yIGVkaXQgYW55IG9wdGlvbnMgdGhhdCB5b3UgYWN0aW9uLCBhbmQgdGhlbiBwYXNz IGJhY2sgdGhlIHJlbWFpbmluZwotIyB1bnByb2Nlc3NlZCBvcHRpb25zIGluICc8aG9va2VkX2Z1 bmN0aW9uX25hbWU+X3Jlc3VsdCcsIGVzY2FwZWQKLSMgc3VpdGFibHkgZm9yICdldmFsJy4KLSMK LSMgVGhlICc8aG9va2VkX2Z1bmN0aW9uX25hbWU+X3Jlc3VsdCcgdmFyaWFibGUgaXMgYXV0b21h dGljYWxseSB1bnNldAotIyBiZWZvcmUgeW91ciBob29rIGdldHMgY2FsbGVkOyBmb3IgYmVzdCBw ZXJmb3JtYW5jZSwgb25seSBzZXQgdGhlCi0jICpfcmVzdWx0IHZhcmlhYmxlIHdoZW4gbmVjZXNz YXJ5IChpLmUuIGRvbid0IGNhbGwgdGhlICdmdW5jX3F1b3RlJwotIyBmdW5jdGlvbiB1bm5lY2Vz c2FyaWx5IGJlY2F1c2UgaXQgY2FuIGJlIGFuIGV4cGVuc2l2ZSBvcGVyYXRpb24gb24gc29tZQot IyBtYWNoaW5lcykuCi0jCi0jIExpa2UgdGhpczoKLSMKLSMgICAgbXlfb3B0aW9uc19wcmVwICgp Ci0jICAgIHsKLSMgICAgICAgICRkZWJ1Z19jbWQKLSMKLSMgICAgICAgICMgRXh0ZW5kIHRoZSBl eGlzdGluZyB1c2FnZSBtZXNzYWdlLgotIyAgICAgICAgdXNhZ2VfbWVzc2FnZT0kdXNhZ2VfbWVz c2FnZScKLSMgICAgICAtcywgLS1zaWxlbnQgICAgICAgZG9uJ1wnJ3QgcHJpbnQgaW5mb3JtYXRp b25hbCBtZXNzYWdlcwotIyAgICAnCi0jICAgICAgICAjIE5vIGNoYW5nZSBpbiAnJEAnIChpZ25v cmVkIGNvbXBsZXRlbHkgYnkgdGhpcyBob29rKS4gIExlYXZlCi0jICAgICAgICAjIG15X29wdGlv bnNfcHJlcF9yZXN1bHQgdmFyaWFibGUgaW50YWN0LgotIyAgICB9Ci0jICAgIGZ1bmNfYWRkX2hv b2sgZnVuY19vcHRpb25zX3ByZXAgbXlfb3B0aW9uc19wcmVwCi0jCi0jCi0jICAgIG15X3NpbGVu dF9vcHRpb24gKCkKLSMgICAgewotIyAgICAgICAgJGRlYnVnX2NtZAotIwotIyAgICAgICAgYXJn c19jaGFuZ2VkPWZhbHNlCi0jCi0jICAgICAgICAjIE5vdGUgdGhhdCwgZm9yIGVmZmljaWVuY3ks IHdlIHBhcnNlIGFzIG1hbnkgb3B0aW9ucyBhcyB3ZSBjYW4KLSMgICAgICAgICMgcmVjb2duaXNl IGluIGEgbG9vcCBiZWZvcmUgcGFzc2luZyB0aGUgcmVtYWluZGVyIGJhY2sgdG8gdGhlCi0jICAg ICAgICAjIGNhbGxlciBvbiB0aGUgZmlyc3QgdW5yZWNvZ25pc2VkIGFyZ3VtZW50IHdlIGVuY291 bnRlci4KLSMgICAgICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0jICAgICAgICAgIG9wdD0k MTsgc2hpZnQKLSMgICAgICAgICAgY2FzZSAkb3B0IGluCi0jICAgICAgICAgICAgLS1zaWxlbnR8 LXMpIG9wdF9zaWxlbnQ9OgotIyAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzX2NoYW5nZWQ9 OgotIyAgICAgICAgICAgICAgICAgICAgICAgICA7OwotIyAgICAgICAgICAgICMgU2VwYXJhdGUg bm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6Ci0jICAgICAgICAgICAgLXMqKSAgICAgICAgIGZ1 bmNfc3BsaXRfc2hvcnRfb3B0ICIkX0dfb3B0IgotIyAgICAgICAgICAgICAgICAgICAgICAgICBz ZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCi0jICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQotIyAg ICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAotIyAgICAgICAgICAgICAgICAgICAgICAgICBh cmdzX2NoYW5nZWQ9OgotIyAgICAgICAgICAgICAgICAgICAgICAgICA7OwotIyAgICAgICAgICAg ICopICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZmlyc3QgdW5yZWNvZ25pc2VkIG9wdGlvbiAi JF9HX29wdCIKLSMgICAgICAgICAgICAgICAgICAgICAgICAgIyBpcyBhZGRlZCBiYWNrIHRvICIk QCIgaW4gY2FzZSB3ZSBuZWVkIGl0IGxhdGVyLAotIyAgICAgICAgICAgICAgICAgICAgICAgICAj IGlmICRhcmdzX2NoYW5nZWQgd2FzIHNldCB0byAndHJ1ZScuCi0jICAgICAgICAgICAgICAgICAg ICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIkQCJ9OyBzaGlmdDsgYnJlYWsgOzsKLSMg ICAgICAgICAgZXNhYwotIyAgICAgICAgZG9uZQotIwotIyAgICAgICAgIyBPbmx5IGNhbGwgJ2Z1 bmNfcXVvdGUnIGhlcmUgaWYgd2UgcHJvY2Vzc2VkIGF0IGxlYXN0IG9uZSBhcmd1bWVudC4KLSMg ICAgICAgIGlmICRhcmdzX2NoYW5nZWQ7IHRoZW4KLSMgICAgICAgICAgZnVuY19xdW90ZSBldmFs ICR7MSsiJEAifQotIyAgICAgICAgICBteV9zaWxlbnRfb3B0aW9uX3Jlc3VsdD0kZnVuY19xdW90 ZV9yZXN1bHQKLSMgICAgICAgIGZpCi0jICAgIH0KLSMgICAgZnVuY19hZGRfaG9vayBmdW5jX3Bh cnNlX29wdGlvbnMgbXlfc2lsZW50X29wdGlvbgotIwotIwotIyAgICBteV9vcHRpb25fdmFsaWRh dGlvbiAoKQotIyAgICB7Ci0jICAgICAgICAkZGVidWdfY21kCi0jCi0jICAgICAgICAkb3B0X3Np bGVudCAmJiAkb3B0X3ZlcmJvc2UgJiYgZnVuY19mYXRhbF9oZWxwICJcCi0jICAgICctLXNpbGVu dCcgYW5kICctLXZlcmJvc2UnIG9wdGlvbnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4iCi0jICAg IH0KLSMgICAgZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbXlfb3B0aW9uX3Zh bGlkYXRpb24KLSMKLSMgWW91J2xsIGFsc28gbmVlZCB0byBtYW51YWxseSBhbWVuZCAkdXNhZ2Vf bWVzc2FnZSB0byByZWZsZWN0IHRoZSBleHRyYQotIyBvcHRpb25zIHlvdSBwYXJzZS4gIEl0J3Mg cHJlZmVyYWJsZSB0byBhcHBlbmQgaWYgeW91IGNhbiwgc28gdGhhdAotIyBtdWx0aXBsZSBvcHRp b24gcGFyc2luZyBob29rcyBjYW4gYmUgYWRkZWQgc2FmZWx5LgotCi0KLSMgZnVuY19vcHRpb25z X2ZpbmlzaCBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEZpbmlz aGluZyB0aGUgb3B0aW9uIHBhcnNlIGxvb3AgKGNhbGwgJ2Z1bmNfb3B0aW9ucycgaG9va3MgQVRN KS4KLWZ1bmNfb3B0aW9uc19maW5pc2ggKCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBmdW5j X3J1bl9ob29rcyBmdW5jX29wdGlvbnMgJHsxKyIkQCJ9Ci0gICAgZnVuY19wcm9wYWdhdGVfcmVz dWx0IGZ1bmNfcnVuX2hvb2tzIGZ1bmNfb3B0aW9uc19maW5pc2gKLX0KLQotCi0jIGZ1bmNfb3B0 aW9ucyBbQVJHXS4uLgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQWxsIHRoZSBmdW5jdGlv bnMgY2FsbGVkIGluc2lkZSBmdW5jX29wdGlvbnMgYXJlIGhvb2thYmxlLiBTZWUgdGhlCi0jIGlu ZGl2aWR1YWwgaW1wbGVtZW50YXRpb25zIGZvciBkZXRhaWxzLgotZnVuY19ob29rYWJsZSBmdW5j X29wdGlvbnMKLWZ1bmNfb3B0aW9ucyAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIF9HX29w dGlvbnNfcXVvdGVkPWZhbHNlCi0KLSAgICBmb3IgbXlfZnVuYyBpbiBvcHRpb25zX3ByZXAgcGFy c2Vfb3B0aW9ucyB2YWxpZGF0ZV9vcHRpb25zIG9wdGlvbnNfZmluaXNoCi0gICAgZG8KLSAgICAg IGZ1bmNfdW5zZXQgZnVuY18ke215X2Z1bmN9X3Jlc3VsdAotICAgICAgZnVuY191bnNldCBmdW5j X3J1bl9ob29rc19yZXN1bHQKLSAgICAgIGV2YWwgZnVuY18kbXlfZnVuYyAnJHsxKyIkQCJ9Jwot ICAgICAgZnVuY19wcm9wYWdhdGVfcmVzdWx0IGZ1bmNfJG15X2Z1bmMgZnVuY19vcHRpb25zCi0g ICAgICBpZiAkZnVuY19wcm9wYWdhdGVfcmVzdWx0X3Jlc3VsdDsgdGhlbgotICAgICAgICBldmFs IHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAotICAgICAgICBfR19vcHRp b25zX3F1b3RlZD06Ci0gICAgICBmaQotICAgIGRvbmUKLQotICAgICRfR19vcHRpb25zX3F1b3Rl ZCB8fCB7Ci0gICAgICAjIEFzIHdlIChmdW5jX29wdGlvbnMpIGFyZSB0b3AtbGV2ZWwgb3B0aW9u cy1wYXJzZXIgZnVuY3Rpb24gYW5kCi0gICAgICAjIG5vYm9keSBxdW90ZWQgIiRAIiBmb3IgdXMg eWV0LCB3ZSBuZWVkIHRvIGRvIGl0IGV4cGxpY2l0bHkgZm9yCi0gICAgICAjIGNhbGxlci4KLSAg ICAgIGZ1bmNfcXVvdGUgZXZhbCAkezErIiRAIn0KLSAgICAgIGZ1bmNfb3B0aW9uc19yZXN1bHQ9 JGZ1bmNfcXVvdGVfcmVzdWx0Ci0gICAgfQotfQotCi0KLSMgZnVuY19vcHRpb25zX3ByZXAgW0FS R10uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQWxsIGluaXRpYWxpc2F0aW9u cyByZXF1aXJlZCBiZWZvcmUgc3RhcnRpbmcgdGhlIG9wdGlvbiBwYXJzZSBsb29wLgotIyBOb3Rl IHRoYXQgd2hlbiBjYWxsaW5nIGhvb2sgZnVuY3Rpb25zLCB3ZSBwYXNzIHRocm91Z2ggdGhlIGxp c3Qgb2YKLSMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLiAgSWYgYSBob29rIGZ1bmN0aW9uIG1vZGlm aWVzIHRoYXQgbGlzdCwgYW5kCi0jIG5lZWRzIHRvIHByb3BhZ2F0ZSB0aGF0IGJhY2sgdG8gcmVz dCBvZiB0aGlzIHNjcmlwdCwgdGhlbiB0aGUgY29tcGxldGUKLSMgbW9kaWZpZWQgbGlzdCBtdXN0 IGJlIHB1dCBpbiAnZnVuY19ydW5faG9va3NfcmVzdWx0JyBiZWZvcmUgcmV0dXJuaW5nLgotZnVu Y19ob29rYWJsZSBmdW5jX29wdGlvbnNfcHJlcAotZnVuY19vcHRpb25zX3ByZXAgKCkKLXsKLSAg ICAkZGVidWdfY21kCi0KLSAgICAjIE9wdGlvbiBkZWZhdWx0czoKLSAgICBvcHRfdmVyYm9zZT1m YWxzZQotICAgIG9wdF93YXJuaW5nX3R5cGVzPQotCi0gICAgZnVuY19ydW5faG9va3MgZnVuY19v cHRpb25zX3ByZXAgJHsxKyIkQCJ9Ci0gICAgZnVuY19wcm9wYWdhdGVfcmVzdWx0IGZ1bmNfcnVu X2hvb2tzIGZ1bmNfb3B0aW9uc19wcmVwCi19Ci0KLQotIyBmdW5jX3BhcnNlX29wdGlvbnMgW0FS R10uLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFRoZSBtYWluIG9wdGlvbiBw YXJzaW5nIGxvb3AuCi1mdW5jX2hvb2thYmxlIGZ1bmNfcGFyc2Vfb3B0aW9ucwotZnVuY19wYXJz ZV9vcHRpb25zICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgX0dfcGFyc2Vfb3B0aW9uc19y ZXF1b3RlPWZhbHNlCi0gICAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZwotICAgIHdo aWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gICAgICAjIERlZmVyIHRvIGhvb2sgZnVuY3Rpb25zIGZv ciBpbml0aWFsIG9wdGlvbiBwYXJzaW5nLCBzbyB0aGV5Ci0gICAgICAjIGdldCBwcmlvcml0eSBp biB0aGUgZXZlbnQgb2YgcmV1c2luZyBhbiBvcHRpb24gbmFtZS4KLSAgICAgIGZ1bmNfcnVuX2hv b2tzIGZ1bmNfcGFyc2Vfb3B0aW9ucyAkezErIiRAIn0KLSAgICAgIGZ1bmNfcHJvcGFnYXRlX3Jl c3VsdCBmdW5jX3J1bl9ob29rcyBmdW5jX3BhcnNlX29wdGlvbnMKLSAgICAgIGlmICRmdW5jX3By b3BhZ2F0ZV9yZXN1bHRfcmVzdWx0OyB0aGVuCi0gICAgICAgIGV2YWwgc2V0IGR1bW15ICIkZnVu Y19wYXJzZV9vcHRpb25zX3Jlc3VsdCI7IHNoaWZ0Ci0gICAgICAgICMgRXZlbiB0aG91Z2ggd2Ug bWF5IGhhdmUgY2hhbmdlZCAiJEAiLCB3ZSBwYXNzZWQgdGhlICIkQCIgYXJyYXkKLSAgICAgICAg IyBkb3duIGludG8gdGhlIGhvb2sgYW5kIGl0IHF1b3RlZCBpdCBmb3IgdXMgKGJlY2F1c2Ugd2Ug YXJlIGluCi0gICAgICAgICMgdGhpcyBpZi1icmFuY2gpLiAgTm8gbmVlZCB0byBxdW90ZSBpdCBh Z2Fpbi4KLSAgICAgICAgX0dfcGFyc2Vfb3B0aW9uc19yZXF1b3RlPWZhbHNlCi0gICAgICBmaQot Ci0gICAgICAjIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBhbHJlYWR5IHBhcnNlZCBldmVy eSBvcHRpb24uCi0gICAgICB0ZXN0ICQjIC1ndCAwIHx8IGJyZWFrCi0KLSAgICAgICMgV2UgZXhw ZWN0IHRoYXQgb25lIG9mIHRoZSBvcHRpb25zIHBhcnNlZCBpbiB0aGlzIGZ1bmN0aW9uIG1hdGNo ZXMKLSAgICAgICMgYW5kIHRodXMgd2UgcmVtb3ZlIF9HX29wdCBmcm9tICIkQCIgYW5kIG5lZWQg dG8gcmUtcXVvdGUuCi0gICAgICBfR19tYXRjaF9wYXJzZV9vcHRpb25zPToKLSAgICAgIF9HX29w dD0kMQotICAgICAgc2hpZnQKLSAgICAgIGNhc2UgJF9HX29wdCBpbgotICAgICAgICAtLWRlYnVn fC14KSAgIGRlYnVnX2NtZD0nc2V0IC14JwotICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZWNo byAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIgPiYyCi0gICAgICAgICAgICAgICAgICAgICAg JGRlYnVnX2NtZAotICAgICAgICAgICAgICAgICAgICAgIDs7Ci0KLSAgICAgICAgLS1uby13YXJu aW5nc3wtLW5vLXdhcm5pbmd8LS1uby13YXJuKQotICAgICAgICAgICAgICAgICAgICAgIHNldCBk dW1teSAtLXdhcm5pbmdzIG5vbmUgJHsxKyIkQCJ9Ci0gICAgICAgICAgICAgICAgICAgICAgc2hp ZnQKLQkJICAgICAgOzsKLQotICAgICAgICAtLXdhcm5pbmdzfC0td2FybmluZ3wtVykKLSAgICAg ICAgICAgICAgICAgICAgICBpZiB0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRfR19v cHQ7IHRoZW4KLSAgICAgICAgICAgICAgICAgICAgICAgIF9HX3BhcnNlX29wdGlvbnNfcmVxdW90 ZT06Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAg IGZpCi0gICAgICAgICAgICAgICAgICAgICAgY2FzZSAiICR3YXJuaW5nX2NhdGVnb3JpZXMgJDEi IGluCi0gICAgICAgICAgICAgICAgICAgICAgICAqIiAkMSAiKikKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgIyB0cmFpbGluZyBzcGFjZSBwcmV2ZW50cyBtYXRjaGluZyBsYXN0ICQxIGFib3Zl Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kX3VuaXEgb3B0X3dhcm5pbmdf dHlwZXMgIiAkMSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAg ICAgICAgICAgICphbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5 cGVzPSR3YXJuaW5nX2NhdGVnb3JpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAg ICAgICAgICAgICAgICAgICAgICAgICpub25lKQotICAgICAgICAgICAgICAgICAgICAgICAgICBv cHRfd2FybmluZ190eXBlcz1ub25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdf ZnVuYz06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAqZXJyb3IpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nX3R5cGVz PSR3YXJuaW5nX2NhdGVnb3JpZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ19m dW5jPWZ1bmNfZmF0YWxfZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAg ICAgICAgICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZmF0 YWxfZXJyb3IgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgd2Fy bmluZyBjYXRlZ29yeTogJyQxJyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKLSAgICAg ICAgICAgICAgICAgICAgICBlc2FjCi0gICAgICAgICAgICAgICAgICAgICAgc2hpZnQKLSAgICAg ICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgIC0tdmVyYm9zZXwtdikgb3B0X3ZlcmJvc2U9 OiA7OwotICAgICAgICAtLXZlcnNpb24pICAgIGZ1bmNfdmVyc2lvbiA7OwotICAgICAgICAtXD98 LWgpICAgICAgIGZ1bmNfdXNhZ2UgOzsKLSAgICAgICAgLS1oZWxwKSAgICAgICBmdW5jX2hlbHAg OzsKLQotCSMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnMgKHBsdWdpbnMgbWF5IG5l ZWQgdGhpcyk6Ci0JLS0qPSopICAgICAgICBmdW5jX3NwbGl0X2VxdWFscyAiJF9HX29wdCIKLQkg ICAgICAgICAgICAgIHNldCBkdW1teSAiJGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgXAotICAgICAg ICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfZXF1YWxzX3JocyIgJHsxKyIkQCJ9Ci0g ICAgICAgICAgICAgICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICA7OwotCi0g ICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIHNob3J0IG9wdGlvbnM6Ci0gICAgICAgIC1XKikK LSAgICAgICAgICAgICAgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKLSAg ICAgICAgICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1l IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJn IiAkezErIiRAIn0KLSAgICAgICAgICAgICAgICAgICAgICBzaGlmdAotICAgICAgICAgICAgICAg ICAgICAgIDs7Ci0KLSAgICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9u czoKLSAgICAgICAgLVw/KnwtaCp8LXYqfC14KikKLSAgICAgICAgICAgICAgICAgICAgICBmdW5j X3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKLSAgICAgICAgICAgICAgICAgICAgICBzZXQgZHVt bXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiBcCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9Ci0gICAgICAgICAgICAg ICAgICAgICAgc2hpZnQKLSAgICAgICAgICAgICAgICAgICAgICA7OwotCi0gICAgICAgIC0tKSAg ICAgICAgICAgX0dfcGFyc2Vfb3B0aW9uc19yZXF1b3RlPTogOyBicmVhayA7OwotICAgICAgICAt KikgICAgICAgICAgIGZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pc2VkIG9wdGlvbjogJyRfR19v cHQnIiA7OwotICAgICAgICAqKSAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgJHsxKyIk QCJ9OyBzaGlmdAotICAgICAgICAgICAgICAgICAgICAgIF9HX21hdGNoX3BhcnNlX29wdGlvbnM9 ZmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgICAgICAg IDs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGlmICRfR19tYXRjaF9wYXJzZV9vcHRpb25zOyB0aGVu Ci0gICAgICAgIF9HX3BhcnNlX29wdGlvbnNfcmVxdW90ZT06Ci0gICAgICBmaQotICAgIGRvbmUK LQotICAgIGlmICRfR19wYXJzZV9vcHRpb25zX3JlcXVvdGU7IHRoZW4KLSAgICAgICMgc2F2ZSBt b2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgotICAgICAgZnVuY19xdW90 ZSBldmFsICR7MSsiJEAifQotICAgICAgZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19x dW90ZV9yZXN1bHQKLSAgICBmaQotfQotCi0KLSMgZnVuY192YWxpZGF0ZV9vcHRpb25zIFtBUkdd Li4uCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQZXJmb3JtIGFueSBzYW5p dHkgY2hlY2tzIG9uIG9wdGlvbiBzZXR0aW5ncyBhbmQvb3IgdW5jb25zdW1lZAotIyBhcmd1bWVu dHMuCi1mdW5jX2hvb2thYmxlIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucwotZnVuY192YWxpZGF0ZV9v cHRpb25zICgpCi17Ci0gICAgJGRlYnVnX2NtZAotCi0gICAgIyBEaXNwbGF5IGFsbCB3YXJuaW5n cyBpZiAtVyB3YXMgbm90IGdpdmVuLgotICAgIHRlc3QgLW4gIiRvcHRfd2FybmluZ190eXBlcyIg fHwgb3B0X3dhcm5pbmdfdHlwZXM9IiAkd2FybmluZ19jYXRlZ29yaWVzIgotCi0gICAgZnVuY19y dW5faG9va3MgZnVuY192YWxpZGF0ZV9vcHRpb25zICR7MSsiJEAifQotICAgIGZ1bmNfcHJvcGFn YXRlX3Jlc3VsdCBmdW5jX3J1bl9ob29rcyBmdW5jX3ZhbGlkYXRlX29wdGlvbnMKLQotICAgICMg QmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQhCi0gICAgJGV4aXRfY21kICRFWElUX0ZB SUxVUkUKLX0KLQotCi0KLSMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBIZWxwZXIgZnVuY3Rp b25zLiAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKLQotIyBUaGlzIHNlY3Rpb24gY29udGFp bnMgdGhlIGhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSB0aGUgcmVzdCBvZiB0aGUKLSMgaG9va2Fi bGUgb3B0aW9uIHBhcnNlciBmcmFtZXdvcmsgaW4gYXNjaWktYmV0aWNhbCBvcmRlci4KLQotCi0j IGZ1bmNfZmF0YWxfaGVscCBBUkcuLi4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBFY2hv IHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dl ZCBieQotIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCi1mdW5jX2ZhdGFsX2hlbHAgKCkKLXsKLSAg ICAkZGVidWdfY21kCi0KLSAgICBldmFsIFwkRUNITyBcIiJVc2FnZTogJHVzYWdlIlwiCi0gICAg ZXZhbCBcJEVDSE8gXCIiJGZhdGFsX2hlbHAiXCIKLSAgICBmdW5jX2Vycm9yICR7MSsiJEAifQot ICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotfQotCi0KLSMgZnVuY19oZWxwCi0jIC0tLS0tLS0tLQot IyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KLWZ1 bmNfaGVscCAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGZ1bmNfdXNhZ2VfbWVzc2FnZQot ICAgICRFQ0hPICIkbG9uZ19oZWxwX21lc3NhZ2UiCi0gICAgZXhpdCAwCi19Ci0KLQotIyBmdW5j X21pc3NpbmdfYXJnIEFSR05BTUUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8g cHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBn bG9iYWwKLSMgZXhpdF9jbWQuCi1mdW5jX21pc3NpbmdfYXJnICgpCi17Ci0gICAgJGRlYnVnX2Nt ZAotCi0gICAgZnVuY19lcnJvciAiTWlzc2luZyBhcmd1bWVudCBmb3IgJyQxJy4iCi0gICAgZXhp dF9jbWQ9ZXhpdAotfQotCi0KLSMgZnVuY19zcGxpdF9lcXVhbHMgU1RSSU5HCi0jIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgZnVuY19zcGxpdF9lcXVhbHNfbGhzIGFuZCBmdW5jX3Nw bGl0X2VxdWFsc19yaHMgc2hlbGwgdmFyaWFibGVzCi0jIGFmdGVyIHNwbGl0dGluZyBTVFJJTkcg YXQgdGhlICc9JyBzaWduLgotdGVzdCAteiAiJF9HX0hBVkVfWFNJX09QUyIgXAotICAgICYmIChl dmFsICd4PWEvYi9jOwotICAgICAgdGVzdCA1YWEvYmIvY2MgPSAiJHsjeH0ke3glJS8qfSR7eCUv Kn0ke3gjKi99JHt4IyMqL30iJykgMj4vZGV2L251bGwgXAotICAgICYmIF9HX0hBVkVfWFNJX09Q Uz15ZXMKLQotaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyIKLXRoZW4KLSAgIyBUaGlz IGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRh dGlvbi4uLgotICBldmFsICdmdW5jX3NwbGl0X2VxdWFscyAoKQotICB7Ci0gICAgICAkZGVidWdf Y21kCi0KLSAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX2xocz0kezElJT0qfQotICAgICAgZnVuY19z cGxpdF9lcXVhbHNfcmhzPSR7MSMqPX0KLSAgICAgIGlmIHRlc3QgIngkZnVuY19zcGxpdF9lcXVh bHNfbGhzIiA9ICJ4JDEiOyB0aGVuCi0gICAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0KLSAg ICAgIGZpCi0gIH0nCi1lbHNlCi0gICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBl eHByLCB3aGljaCBpcyBvZnRlbiBhIHNoZWxsIGJ1aWx0aW4uCi0gIGZ1bmNfc3BsaXRfZXF1YWxz ICgpCi0gIHsKLSAgICAgICRkZWJ1Z19jbWQKLQotICAgICAgZnVuY19zcGxpdF9lcXVhbHNfbGhz PWBleHByICJ4JDEiIDogJ3hcKFtePV0qXCknYAotICAgICAgZnVuY19zcGxpdF9lcXVhbHNfcmhz PQotICAgICAgdGVzdCAieCRmdW5jX3NwbGl0X2VxdWFsc19saHM9IiA9ICJ4JDEiIFwKLSAgICAg ICAgfHwgZnVuY19zcGxpdF9lcXVhbHNfcmhzPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCkk J2AKLSAgfQotZmkgI2Z1bmNfc3BsaXRfZXF1YWxzCi0KLQotIyBmdW5jX3NwbGl0X3Nob3J0X29w dCBTSE9SVE9QVAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBTZXQgZnVuY19z cGxpdF9zaG9ydF9vcHRfbmFtZSBhbmQgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIHNoZWxsCi0j IHZhcmlhYmxlcyBhZnRlciBzcGxpdHRpbmcgU0hPUlRPUFQgYWZ0ZXIgdGhlIDJuZCBjaGFyYWN0 ZXIuCi1pZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIgotdGhlbgotICAjIFRoaXMgaXMg YW4gWFNJIGNvbXBhdGlibGUgc2hlbGwsIGFsbG93aW5nIGEgZmFzdGVyIGltcGxlbWVudGF0aW9u Li4uCi0gIGV2YWwgJ2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCi0gIHsKLSAgICAgICRkZWJ1Z19j bWQKLQotICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P30KLSAgICAgIGZ1bmNf c3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn0KLSAg fScKLWVsc2UKLSAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNo IGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KLSAgZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKLSAg ewotICAgICAgJGRlYnVnX2NtZAotCi0gICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPWBl eHByICJ4JDEiIDogJ3hcKC0uXCknYAotICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWBl eHByICJ4JDEiIDogJ3gtLlwoLipcKSQnYAotICB9Ci1maSAjZnVuY19zcGxpdF9zaG9ydF9vcHQK LQotCi0jIGZ1bmNfdXNhZ2UKLSMgLS0tLS0tLS0tLQotIyBFY2hvIHNob3J0IGhlbHAgbWVzc2Fn ZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCi1mdW5jX3VzYWdlICgpCi17Ci0gICAgJGRl YnVnX2NtZAotCi0gICAgZnVuY191c2FnZV9tZXNzYWdlCi0gICAgJEVDSE8gIlJ1biAnJHByb2du YW1lIC0taGVscCB8JHtQQUdFUi1tb3JlfScgZm9yIGZ1bGwgdXNhZ2UiCi0gICAgZXhpdCAwCi19 Ci0KLQotIyBmdW5jX3VzYWdlX21lc3NhZ2UKLSMgLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVjaG8g c2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dC4KLWZ1bmNfdXNhZ2VfbWVzc2Fn ZSAoKQotewotICAgICRkZWJ1Z19jbWQKLQotICAgIGV2YWwgXCRFQ0hPIFwiIlVzYWdlOiAkdXNh Z2UiXCIKLSAgICBlY2hvCi0gICAgJFNFRCAtbiAnc3xeIyB8fAotICAgICAgICAvXldyaXR0ZW4g YnkvewotICAgICAgICAgIHg7cDt4Ci0gICAgICAgIH0KLQloCi0JL15Xcml0dGVuIGJ5L3EnIDwg IiRwcm9ncGF0aCIKLSAgICBlY2hvCi0gICAgZXZhbCBcJEVDSE8gXCIiJHVzYWdlX21lc3NhZ2Ui XCIKLX0KLQotCi0jIGZ1bmNfdmVyc2lvbgotIyAtLS0tLS0tLS0tLS0KLSMgRWNobyB2ZXJzaW9u IG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgotIyBUaGUgdmVyc2lvbiBtZXNz YWdlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBjYWxsaW5nIGZpbGUncyBoZWFkZXIKLSMgY29tbWVu dHMsIHdpdGggbGVhZGluZyAnIyAnIHN0cmlwcGVkOgotIyAgIDEuIEZpcnN0IGRpc3BsYXkgdGhl IHByb2duYW1lIGFuZCB2ZXJzaW9uCi0jICAgMi4gRm9sbG93ZWQgYnkgdGhlIGhlYWRlciBjb21t ZW50IGxpbmUgbWF0Y2hpbmcgIC9eIyBXcml0dGVuIGJ5IC8KLSMgICAzLiBUaGVuIGEgYmxhbmsg bGluZSBmb2xsb3dlZCBieSB0aGUgZmlyc3QgZm9sbG93aW5nIGxpbmUgbWF0Y2hpbmcKLSMgICAg ICAvXiMgQ29weXJpZ2h0IC8KLSMgICA0LiBJbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhbnkgbGlu ZXMgYmV0d2VlbiB0aGUgcHJldmlvdXMgbWF0Y2hlcywKLSMgICAgICBleGNlcHQgbGluZXMgcHJl Y2VkaW5nIHRoZSBpbnRlcnZlbmluZyBjb21wbGV0ZWx5IGJsYW5rIGxpbmUuCi0jIEZvciBleGFt cGxlLCBzZWUgdGhlIGhlYWRlciBjb21tZW50cyBvZiB0aGlzIGZpbGUuCi1mdW5jX3ZlcnNpb24g KCkKLXsKLSAgICAkZGVidWdfY21kCi0KLSAgICBwcmludGYgJyVzXG4nICIkcHJvZ25hbWUgJHNj cmlwdHZlcnNpb24iCi0gICAgJFNFRCAtbiAnCi0gICAgICAgIC9eIyBXcml0dGVuIGJ5IC8hYgot ICAgICAgICBzfF4jIHx8OyBwOyBuCi0KLSAgICAgICAgOmZ3ZDJibG5rCi0gICAgICAgIC8uLyB7 Ci0gICAgICAgICAgbgotICAgICAgICAgIGIgZndkMmJsbmsKLSAgICAgICAgfQotICAgICAgICBw OyBuCi0KLSAgICAgICAgOmhvbGR3cm50Ci0gICAgICAgIHN8XiMgfHwKLSAgICAgICAgc3xeIyAq JHx8Ci0gICAgICAgIC9eQ29weXJpZ2h0IC8hewotICAgICAgICAgIC8uL0gKLSAgICAgICAgICBu Ci0gICAgICAgICAgYiBob2xkd3JudAotICAgICAgICB9Ci0KLSAgICAgICAgc3xcKChDKVwpWyAw LTksLV0qWyAsLV1cKFsxLTldWzAtOV0qIFwpfFwxIFwyfAotICAgICAgICBHCi0gICAgICAgIHN8 XChcblwpXG4qfFwxfGcKLSAgICAgICAgcDsgcScgPCAiJHByb2dwYXRoIgotCi0gICAgZXhpdCAk PwotfQotCi0KLSMgTG9jYWwgdmFyaWFibGVzOgotIyBtb2RlOiBzaGVsbC1zY3JpcHQKLSMgc2gt aW5kZW50YXRpb246IDIKLSMgZXZhbDogKGFkZC1ob29rICdiZWZvcmUtc2F2ZS1ob29rICd0aW1l LXN0YW1wKQotIyB0aW1lLXN0YW1wLXBhdHRlcm46ICIzMC9zY3JpcHR2ZXJzaW9uPSU6eS0lMDJt LSUwMmQuJTAySDsgIyBVVEMiCi0jIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgotIyBFbmQ6 CmRpZmYgLS1naXQgYS9nbC9kb2MvYm9vdHN0cmFwLnRleGkgYi9nbC9kb2MvYm9vdHN0cmFwLnRl eGkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGRjODI0ZmExLi4wMDAwMDAwMAotLS0g YS9nbC9kb2MvYm9vdHN0cmFwLnRleGkKKysrIC9kZXYvbnVsbApAQCAtMSw0ODIgKzAsMCBAQAot QG5vZGUgQm9vdHN0cmFwCi1AY2hhcHRlciBCb290c3RyYXAKLQotVGhlIHByb2Nlc3Mgb2YgZXhl Y3V0aW5nIHRoZSB2YXJpb3VzIHRvb2xzIHJlcXVpcmVkIHRvIGJyaW5nIGFsbCB0aGUKLWdlbmVy YXRlZCBmaWxlcyB1cCB0byBkYXRlIGluIGEgZGlyZWN0b3J5IGZyZXNobHkgY2hlY2tlZCBvdXQg ZnJvbQotc291cmNlIGNvbnRyb2wgY2FuIGJlIHF1aXRlIGludm9sdmVkLiAgTWFueSBHTlUgcHJv amVjdHMgdXNlCi1AY29tbWFuZHtib290c3RyYXB9IHNjcmlwdCB0byBleGVjdXRlIHNvbWUgb3Ig YWxsIG9mIHRoZSBmb2xsb3dpbmcgaW4gdGhlCi1jb3JyZWN0IG9yZGVyOiBAY29tbWFuZHtnbnVs aWItdG9vbH0sIEBjb21tYW5ke2F1dG9wb2ludH0sCi1AY29tbWFuZHtsaWJ0b29saXplfSwgQGNv bW1hbmR7YXV0b3JlY29uZn0uIE9mdGVuIHRoZXJlJ3MgYWxzbwotYWRkaXRpb25hbCBmaWxlLXBy b2Nlc3NpbmcgYW5kIGFzc29ydGVkIGJvb2sta2VlcGluZyB0aGF0IGFsc28gZmFsbHMKLXVuZGVy IHRoZSBjb250cm9sIG9mIEBjb21tYW5ke2Jvb3RzdHJhcH0sIGJ1dCBpdCdzIHdhc3RlZnVsIGZv ciB0aGUKLW1haW50YWluZXJzIG9mIGFsbCB0aGVzZSBwcm9qZWN0cyB0byBtYW51YWxseSByZWlu dmVudCBhIGN1c3RvbSBzY3JpcHQKLW9uIGEgY2FzZS1ieS1jYXNlIGJhc2lzLgotCi1HbnVsaWIg aXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGNlbnRyYWwgbGlicmFyeSBvZiBleGVtcGxhcgotaW1w bGVtZW50YXRpb25zIHRvIHByb21vdGUgdGhlIHNoYXJpbmcgb2YgdXNlZnVsIGNvbW1vbiBjb2Rl IGFtb25nCi1HTlUgcHJvamVjdCBtYWludGFpbmVycy4gSG93ZXZlciwgdGhlIGJvb3RzdHJhcHBp bmcgbmVlZHMgb2YgdGhlc2UKLXByb2plY3RzIHZhcnkgZW5vcm1vdXNseSwgc28gR251bGliJ3Mg QGNvbW1hbmR7Ym9vdHN0cmFwfSBuZWVkcyB0byBiZQotZXh0cmVtZWx5IEBzdHJvbmd7Y3VzdG9t aXNhYmxlfSBhbmQgZXh0ZW5zaWJsZSwgd2l0aCBsZXNzIGVmZm9ydCB0aGFuCi13b3VsZCBiZSBv dGhlcndpc2UgcmVxdWlyZWQgdG8gaW52ZW50IGFuIGFkLWhvYyBzb2x1dGlvbi4KLQotQG1lbnUK LSogQ3VzdG9taXNhdGlvbjo6Ci0qIFVzYWdlIFBhdHRlcm5zOjoKLSogS25vd24gQnVnczo6Ci1A ZW5kIG1lbnUKLQotCi1Abm9kZSBDdXN0b21pc2F0aW9uCi1Ac2VjdGlvbiBDdXN0b21pc2F0aW9u Ci0KLVRoZXJlIGFyZSBmb3VyIGRpc3RpbmN0IHdheXMgdG8gY3VzdG9taXplIHRoZSBmdW5jdGlv bmFsaXR5IG9mCi1AY29tbWFuZHtib290c3RyYXB9LCBhbGwgcmVxdWlyaW5nIGNyZWF0aW9uIG9m IGEgQGZpbGV7Ym9vdHN0cmFwLmNvbmZ9Ci1maWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0 aGUgaW1wb3J0ZWQgQGNvbW1hbmR7Ym9vdHN0cmFwfSBzY3JpcHQKLWl0c2VsZi4KLQotQG1lbnUK LSogQ29uZmlndXJhdGlvbiBWYXJpYWJsZXM6OgotKiBSZXF1aXJlIFZhcmlhYmxlczo6Ci0qIEhv b2sgRnVuY3Rpb25zOjoKLSogRnVuY3Rpb24gUmVwbGFjZW1lbnQ6OgotQGVuZCBtZW51Ci0KLQot QG5vZGUgQ29uZmlndXJhdGlvbiBWYXJpYWJsZXMKLUBzdWJzZWN0aW9uIENvbmZpZ3VyYXRpb24g VmFyaWFibGVzCi0KLUZvciBhbGwgYnV0IHRoZSBtb3JlIGNvbXBsZXggY3VzdG9taXNhdGlvbnMs IHlvdSBuZWVkIG9ubHkgY2hhbmdlCi10aGUgdmFsdWUgb2YgYSBzZWxlY3Rpb24gb2YgdGhlIGZv bGxvd2luZyBzaGVsbCB2YXJpYWJsZXMgaW4KLUBmaWxle2Jvb3RzdHJhcC5jb25mfSwgdG8gcmVm bGVjdCB3aGF0ZXZlciBpcyBhcHByb3ByaWF0ZSB0byB5b3VyCi1wYWNrYWdlLgotCi1AZXhhbXBs ZQotICAgIHZjX2lnbm9yZT0uZ2l0aWdub3JlCi1AZW5kIGV4YW1wbGUKLQotQHRhYmxlIEBjb2Rl Ci0KLUBjbmluZGV4IGJ1aWxkcmVxCi1AaXRlbSBidWlsZHJlcQotQSBuZXdsaW5lLWRlbGltaXRl ZCBsaXN0IG9mIHRyaXBsZXMgb2YgQHN0cm9uZ3twcm9ncmFtc30gKHdoaWNoIG11c3QKLWFjY2Vw dCB0aGUgb3B0aW9uIEBvcHRpb257LS12ZXJzaW9ufSB3aXRob3V0IGhhbmdpbmcgb3IgZmFpbGlu ZyksIHRoZQotQHN0cm9uZ3ttaW5pbXVtIHZlcnNpb24gcmVxdWlyZWR9IChvciBqdXN0IGAtJyBp biB0aGUgdmVyc2lvbiBmaWVsZCBpZgotYW55IHZlcnNpb24gd2lsbCBiZSBzdWZmaWNpZW50KSBh bmQgQHN0cm9uZ3tob21lcGFnZSBVUkwgKHRvCi1oZWxwIHVzZXJzIGxvY2F0ZSBtaXNzaW5nIHBh Y2thZ2VzKQotCi1Ac21hbGxleGFtcGxlCi1idWlsZHJlcT0nCi0gICAgICAgIGdpdCAgICAgICAg MS41LjUgICBodHRwOi8vZ2l0LXNjbS5jb20KLSAgICAgICAgaGVscDJtYW4gICAxLjI5ICAgIGh0 dHA6Ly93d3cuZ251Lm9yZy9zL2hlbHAybWFuCi0nCi1AZW5kIHNtYWxsZXhhbXBsZQotCi1JZiB5 b3Ugc3BlY2lmeSBhIG1pbmltdW0gdmVyc2lvbiBvZiBBdXRvY29uZiB3aXRoIEBjb2Rle0FDX1BS RVJFUX0sCi10aGF0IHZlcnNpb24gd2lsbCBiZSBjaGVja2VkIGF1dG9tYXRpY2FsbHkgd2l0aG91 dCBuZWVkaW5nIHRvIGJlCi1saXN0ZWQgaW4gQGNvZGV7YnVpbGRyZXF9LiAgU2ltaWxhcmx5IGZv ciBhIG1pbmltdW0gQXV0b21ha2UgdmVyc2lvbgotZGVjbGFyZWQgd2l0aCBAY29kZXtBTV9JTklU X0FVVE9NQUtFfSwgTGlidG9vbCB2ZXJzaW9uIHdpdGgKLUBjb2Rle0xUX1BSRVJFUX0sIG9yIEF1 dG9wb2ludCB2ZXJzaW9uIHdpdGggQGNvZGV7QU1fR05VX0dFVFRFWFRfVkVSU0lPTn0uCi0KLUlm IEBjb2Rle0FCX0lOSVR9IGlzIGRlY2xhcmVkIGluIEBmaWxle2NvbmZpZ3VyZS5hY30sIHRoZW4g YSB2ZXJzaW9ubGVzcwotcmVxdWlyZW1lbnQgZm9yIEF1dG9idWlsZCBpcyBhZGRlZCBhdXRvbWF0 aWNhbGx5LCBhbmQgZmluYWxseSBpZiB0aGVyZQotYXJlIGFueSBkaWZmIGZpbGVzIHVuZGVyIEBj b2Rle2xvY2FsX2dsX2Rpcn0sIHRoZW4gYSB2ZXJzaW9ubGVzcwotcmVxdWlyZW1lbnQgZm9yIHBh dGNoIGlzIGFsc28gYWRkZWQuCi0KLVdoZW4gQGNvbW1hbmR7Ym9vdHN0cmFwfSBpcyBpbnZva2Vk LCBpdCB3aWxsIGNoZWNrIHRoYXQgYWxsIHRoZSBsaXN0ZWQKLWFuZCBhdXRvbWF0aWNhbGx5IGFk ZGVkIHRvb2xzIGFyZSBhdmFpbGFibGUgYXQgdGhlIGdpdmVuIG1pbmltdW0gdmVyc2lvbiwKLW9y IGVsc2UgYmFpbCBvdXQgd2l0aCBhIGRpYWdub3N0aWMuCi0KLQotQGNuaW5kZXggYnVpbGRyZXFf cmVhZG1lCi1AaXRlbSBidWlsZHJlcV9yZWFkbWUKLU5hbWUgb2YgYSBmaWxlIGNvbnRhaW5pbmcg aW5zdHJ1Y3Rpb25zIG9uIGluc3RhbGxpbmcgbWlzc2luZyBwYWNrYWdlcwotcmVxdWlyZWQgaW4g QGNvZGV7YnVpbGRyZXF9LiBVc3VhbGx5LCB0aGUgaW5zdHJ1Y3Rpb25zIGF0IHRoZSBnaXZlbgot VVJMIHNob3VsZCBiZSBzdWZmaWNpZW50LCB0aG91Z2ggc29tZSBwcm9qZWN0cyBhZGQgYWRkaXRp b25hbCBub3RlcwotaW4gQGZpbGV7SEFDS0lOR30uCi0KLUBzbWFsbGV4YW1wbGUKLWJ1aWxkcmVx X3JlYWRtZT1SRUFETUUtaGFja2luZwotQGVuZCBzbWFsbGV4YW1wbGUKLQotCi1AY25pbmRleCBi dWlsZF9hdXgKLUBpdGVtIGJ1aWxkX2F1eAotVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGV4dHJhY3Rl ZCBmcm9tIHRoZSBAY29kZXtBQ19DT05GSUdfQVVYX0RJUn0KLWRlY2xhcmF0aW9uIGluIEBmaWxl e2NvbmZpZ3VyZS5hY30sIHRob3VnaCB5b3UgY2FuIHNwZWNpZnkgaXQgaW4KLUBmaWxle2Jvb3Rz dHJhcC5jb25mfSBpZiB5b3UgZG9uJ3Qgb3RoZXJ3aXNlIHdhbnQgdG8gZGVjbGFyZQotQGNvZGV7 QUNfQ09ORklHX0FVWF9ESVJ9IGluIEBmaWxle2NvbmZpZ3VyZS5hY30uCi0KLUBjbmluZGV4IG1h Y3JvX2RpcgotQGl0ZW0gbWFjcm9fZGlyCi1UaGlzIGlzIGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVk IGZyb20gQGZpbGV7Y29uZmlndXJlLmFjfSwgb3IgaWYKLW5laXRoZXIgQGNvZGV7QUNfQ09ORklH X01BQ1JPX0RJUlN9IG5vciBAY29kZXtBQ19DT05GSUdfTUFDUk9fRElSfSBpcwotZGVjbGFyZWQg dGhlcmUsIHRoZSBvcHRpb24gaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBmaXJzdCBAc2FtcHst SX0KLWZyb20gQGNvZGV7QUNMT0NBTF9BTUZMQUdTfSBpbiBAZmlsZXtNYWtlZmlsZS5hbX0gaXMg dXNlZCBhcyBhIGxhc3QKLXJlc29ydC4gSWYgeW91IGRvbid0IHdhbnQgdG8gZGVjbGFyZSB0aGUg bWFjcm8gZGlyZWN0b3J5IGluIGFueSBvZgotdGhvc2UgcGxhY2VzLCB0aGVuIHlvdSBjYW4gc3Bl Y2lmeSBpdCBpbiBAZmlsZXtib290c3RyYXAuY29uZn0gYnkKLXVzaW5nIHRoZSBAY29kZXttYWNy b19kaXJ9IHZhcmlhYmxlLgotCi1Ac21hbGxleGFtcGxlCi1tYWNyb19kaXI9YWNtNAotQGVuZCBz bWFsbGV4YW1wbGUKLQotCi1AY25pbmRleCBwYWNrYWdlCi1AaXRlbSBwYWNrYWdlCi1UaGlzIGlz IGF1dG9tYXRpY2FsbHkgZXh0cmFjdGVkIGJ5IGRvd25jYXNpbmcgdGhlIGZpcnN0IGFyZ3VtZW50 IHRvCi1AY29kZXtBQ19JTklUfSBpbiBAZmlsZXtjb25maWd1cmUuYWN9LCB0aG91Z2ggeW91IGNh biBvdmVycmlkZSBpdCBoZXJlCi1pZiB5b3UgcHJlZmVyLgotCi1AY25pbmRleCBwYWNrYWdlX25h bWUKLUBpdGVtIHBhY2thZ2VfbmFtZQotVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBm cm9tIHRoZSBmaXJzdCBhcmd1bWVudCB0bwotQGNvZGV7QUNfSU5JVH0gaW4gQGZpbGV7Y29uZmln dXJlLmFjfSwgdGhvdWdoIHlvdSBjYW4gb3ZlcnJpZGUgaXQgaGVyZQotaWYgeW91IHByZWZlci4K LQotQGNuaW5kZXggcGFja2FnZV92ZXJzaW9uCi1AaXRlbSBwYWNrYWdlX3ZlcnNpb24KLVRoaXMg aXMgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgZnJvbSB0aGUgc2Vjb25kIGFyZ3VtZW50IHRvCi1A Y29kZXtBQ19JTklUfSBpbiBAZmlsZXtjb25maWd1cmUuYWN9LCB0aG91Z2ggeW91IGNhbiBvdmVy cmlkZSBpdCBoZXJlCi1pZiB5b3UgcHJlZmVyLgotCi1AY25pbmRleCBwYWNrYWdlX2J1Z3JlcG9y dAotQGl0ZW0gcGFja2FnZV9idWdyZXBvcnQKLVRoaXMgaXMgYXV0b21hdGljYWxseSBleHRyYWN0 ZWQgZnJvbSB0aGUgdGhpcmQgYXJndW1lbnQgdG8KLUBjb2Rle0FDX0lOSVR9IGluIEBmaWxle2Nv bmZpZ3VyZS5hY30gaWYgZ2l2ZW4sIHRob3VnaCB5b3UgY2FuIG92ZXJyaWRlCi1pdCBoZXJlIGlm IHlvdSBwcmVmZXIuCi0KLQotQGNuaW5kZXggZG9jX2Jhc2UKLUBjbmluZGV4IGdudWxpYl9tawot QGNuaW5kZXggZ251bGliX25hbWUKLUBjbmluZGV4IGxvY2FsX2dsX2RpcgotQGNuaW5kZXggc291 cmNlX2Jhc2UKLUBjbmluZGV4IHRlc3RzX2Jhc2UKLUBpdGVtIGRvY19iYXNlCi1AaXRlbXggZ251 bGliX21rCi1AaXRlbXggZ251bGliX25hbWUKLUBpdGVteCBsb2NhbF9nbF9kaXIKLUBpdGVteCBz b3VyY2VfYmFzZQotQGl0ZW14IHRlc3RzX2Jhc2UKLVRoZXNlIGFyZSBub3JtYWxseSBleHRyYWN0 ZWQgZnJvbSBAZmlsZXtnbnVsaWItY2FjaGUubTR9LCByZWdhcmRsZXNzIG9mCi10aGVpciB2YWx1 ZXMgaW4gQGZpbGV7Ym9vdHN0cmFwLmNvbmZ9LgotCi1XaGVuIHRoYXQgZmlsZSBpcyBub3QgeWV0 IGNyZWF0ZWQsIHRoZW4gQGNvbW1hbmR7Ym9vdHN0cmFwfSB3aWxsCi1mYWxsLWJhY2sgYXV0b21h dGljYWxseSB0byB0aGUgZ251bGliIGRlZmF1bHRzOyB1bmxlc3MgeW91IHNldAotYWx0ZXJuYXRp dmUgdmFsdWVzIGhlcmUgaW4gQGZpbGV7Ym9vdHN0cmFwLmNvbmZ9LgotCi1JZiB5b3UgY2hlY2sg QGZpbGV7Z251bGliLWNhY2hlLm00fSBpbnRvIHlvdXIgcmVwb3NpdG9yeSwgdGhlbiB0aGVzZQot dmFsdWVzIHdpbGwgYmUgZXh0cmFjdGVkIGF1dG9tYXRpY2FsbHkuIEB4cmVme1VzYWdlIFBhdHRl cm5zfSwgZm9yIG1vcmUKLWRldGFpbHMuCi0KLQotQGNuaW5kZXggZ251bGliX21vZHVsZXMKLUBp dGVtIGdudWxpYl9tb2R1bGVzCi1UaGUgbGlzdCBvZiBnbnVsaWIgbW9kdWxlcyByZXF1aXJlZCBh dCBAY29tbWFuZHtnbnVsaWItdG9vbH0gdGltZS4KLQotSWYgeW91IGNoZWNrIEBmaWxle2dudWxp Yi1jYWNoZS5tNH0gaW50byB5b3VyIHJlcG9zaXRvcnksIHRoZW4gdGhpcyBsaXN0Ci13aWxsIGJl IGV4dHJhY3RlZCBhdXRvbWF0aWNhbGx5LiBAeHJlZntVc2FnZSBQYXR0ZXJuc30sIGZvciBtb3Jl Ci1kZXRhaWxzLgotCi0KLUBjbmluZGV4IGdudWxpYl9ub25fbW9kdWxlX2ZpbGVzCi1AaXRlbSBn bnVsaWJfbm9uX21vZHVsZV9maWxlcwotRXh0cmEgZ251bGliIGZpbGVzIHRoYXQgYXJlIG5vdCBw YXJ0IG9mIGEgZ251bGliIG1vZHVsZSwgYnV0IHdoaWNoCi1vdmVycmlkZSBmaWxlcyBvZiB0aGUg c2FtZSBuYW1lIGluc3RhbGxlZCBieSBvdGhlciBib290c3RyYXAgdG9vbHMsIHN1Y2gKLWFzIEBj b21tYW5ke2F1dG9tYWtlfS4KLQotQHNtYWxsZXhhbXBsZQotZ251bGliX25vbl9tb2R1bGVfZmls ZXM9IiRnbnVsaWJfbm9uX21vZHVsZV9maWxlcyInCi0gICAgICAgIGRvYy9DT1BZSU5HdjMKLScK LUBlbmQgc21hbGxleGFtcGxlCi0KLQotQGNuaW5kZXggZ251bGliX3BhdGgKLUBjbmluZGV4IGdu dWxpYl91cmwKLUBpdGVtIGdudWxpYl9wYXRoCi1AaXRlbXggZ251bGliX3VybAotUmVsYXRpdmUg cGF0aCB0byB0aGUgbG9jYWwgZ251bGliIHN1Ym1vZHVsZSwgYW5kIHVybCB0byB0aGUgdXBzdHJl YW0KLWdpdCByZXBvc2l0b3J5IGZvciBnbnVsaWIuIFRoZXNlIGFyZSBvbmx5IHVzZWQgaWYgYSBu ZXcgZ251bGliIHN1Ym1vZHVsZQotbmVlZHMgdG8gYmUgY3JlYXRlZCwgb3RoZXJ3aXNlIHRoZXkg YXJlIGlnbm9yZWQgYW5kIHRoZSB2YWx1ZXMgc3RvcmVkIGluCi1AZmlsZXsuZ2l0bW9kdWxlc30g YXJlIHVzZWQgaW5zdGVhZC4KLQotTm9ybWFsbHksIHlvdSBjYW4gbGVhdmUgdGhlc2UgdW50b3Vj aGVkLCBhbmQgQGNvbW1hbmR7Ym9vdHN0cmFwfSB3aWxsCi1jb3JyZWN0bHkgY2hlY2sgb3V0IGEg Z251bGliIHN1Ym1vZHVsZSBmcm9tIHRoZSBkaXJlY3RvcnkgcGFzc2VkIHdpdGgKLUBvcHRpb257 LS1nbnVsaWItc3JjZGlyfSwgb3IgZWxzZSBmcm9tIHRoZSB1cHN0cmVhbSByZXBvc2l0b3J5IGF0 IEdOVQotc2F2YW5uYWguCi0KLQotQGNuaW5kZXggZ251bGliX3Rvb2xfb3B0aW9ucwotQGl0ZW0g Z251bGliX3Rvb2xfb3B0aW9ucwotQWRkaXRpb25hbCBvcHRpb25zIHRvIHBhc3MgdG8gQGNvbW1h bmR7Z251bGliLXRvb2x9IHdoZW4gaXQgaXMgY2FsbGVkLgotCi1Ac21hbGxleGFtcGxlCi1nbnVs aWJfdG9vbF9vcHRpb25zPScKLSAgICAgICAgLS1uby1jaGFuZ2Vsb2cKLSAgICAgICAgLS1saWJ0 b29sCi0nCi1AZW5kIHNtYWxsZXhhbXBsZQotCi0KLUBjbmluZGV4IGdudWxpYl9wcmVjaW91cwot QGl0ZW0gZ251bGliX3ByZWNpb3VzCi1Ob3JtYWxseSwgQGNvbW1hbmR7Ym9vdHN0cmFwfSByZW1v dmVzIGFueSBtYWNyby1maWxlcyB0aGF0IGFyZSBub3QKLWluY2x1ZGVkIGJ5IEBmaWxle2FjbG9j YWwubTR9IGJlZm9yZSBpdCByZXR1cm5zLCBleGNlcHQgZm9yIGZpbGVzIGxpc3RlZAotaW4gdGhp cyB2YXJpYWJsZSB3aGljaCBhcmUgYWx3YXlzIGtlcHQuCi0KLUBzbWFsbGV4YW1wbGUKLWdudWxp Yl9wcmVjaW91cz0nCi0gICAgICAgIGdudWxpYi1jYWNoZS5tNAotJwotQGVuZCBzbWFsbGV4YW1w bGUKLQotCi1AY25pbmRleCBtaW5fY21kX2xlbgotQGl0ZW0gbWluX2NtZF9sZW4KLVdoZW4gdHJ1 bmNhdGluZyBsb25nIGNvbW1hbmRzIGZvciBkaXNwbGF5IGF0IHJ1bnRpbWUsIGFsd2F5cyBhbGxv dyBhdAotbGVhc3QgdGhpcyBtYW55IGNoYXJhY3RlcnMgYmVmb3JlIHRydW5jYXRpbmcuCi0KLQot QGNuaW5kZXggcG9fZG93bmxvYWRfY29tbWFuZF9mb3JtYXQKLUBpdGVtIHBvX2Rvd25sb2FkX2Nv bW1hbmRfZm9ybWF0Ci1UaGUgY29tbWFuZCB0byBkb3dubG9hZCBhbGwgQHNhbXB7LnBvfSBmaWxl cyBmb3IgYSBzcGVjaWZpZWQgZG9tYWluIGludG8KLWEgc3BlY2lmaWVkIGRpcmVjdG9yeSwgd2hl cmUgdGhlIGZpcnN0ICVzIGlzIGZpbGxlZCBpbiB3aXRoIHRoZQotQGVtcGh7ZG9tYWluIG5hbWV9 LCBhbmQgdGhlIHNlY29uZCB3aXRoIHRoZSBAZW1waHtkZXN0aW5hdGlvbgotZGlyZWN0b3J5fS4g IFVzZSBAY29tbWFuZHtyc3luY30ncyBAb3B0aW9uey1MfSBhbmQgQG9wdGlvbnstcn0gb3B0aW9u cwotYmVjYXVzZSB0aGUgbGF0ZXN0IEBzYW1wey8lc30gZGlyZWN0b3J5IGFuZCB0aGUgQHNhbXB7 LnBvfSBmaWxlcyB3aXRoaW4KLWFyZSBhbGwgc3ltbGlua3MuCi0KLUBzbWFsbGV4YW1wbGUKLXBv X2Rvd25sb2FkX2NvbW1hbmRfZm9ybWF0PVwKLSJyc3luYyAtLWRlbGV0ZSAtLWV4Y2x1ZGUgJyou czEnIC1McnR2eiBcCi0ndHJhbnNsYXRpb25wcm9qZWN0Lm9yZzo6dHAvbGF0ZXN0LyVzLycgJyVz JyIKLUBlbmQgc21hbGxleGFtcGxlCi0KLVRoaXMgdmFyaWFibGUgaXMgb25seSBpbnRlcmVzdGlu ZyB0byBwcm9qZWN0cyB3aXRoIE5MUyBzdXBwb3J0LCBhbmQgZXZlbgotdGhlbiwgVXN1YWxseSwg dGhlIGRlZmF1bHQgc2V0dGluZyB3aWxsIGJlIHN1ZmZpY2llbnQuCi0KLQotQGNuaW5kZXggZXh0 cmFfbG9jYWxlX2NhdGVnb3JpZXMKLUBpdGVtIGV4dHJhX2xvY2FsZV9jYXRlZ29yaWVzCi1PdGhl ciBsb2NhbGUgY2F0ZWdvcmllcyB0aGF0IG5lZWQgbWVzc2FnZSBjYXRhbG9ncy4gIFRoaXMgdmFy aWFibGUgaXMKLW9ubHkgaW50ZXJlc3RpbmcgdG8gcHJvamVjdHMgd2l0aCBOTFMgc3VwcG9ydC4K LQotCi1AY25pbmRleCB4Z2V0dGV4dF9vcHRpb25zCi1AaXRlbSB4Z2V0dGV4dF9vcHRpb25zCi1B ZGRpdGlvbmFsIEBjb21tYW5ke3hnZXR0ZXh0fSBvcHRpb25zIHRvIHVzZS4gIEdudWxpYiBtaWdo dCBwcm92aWRlIHlvdQotd2l0aCBhbiBleHRlbnNpdmUgbGlzdCBvZiBhZGRpdGlvbmFsIG9wdGlv bnMgdG8gYXBwZW5kIHRvIHRoaXMsIGJ1dAotZ2V0dGV4dCAwLjE2LjEgYW5kIG5ld2VyIGFscmVh ZHkgYXBwZW5kcyB0aG9zZSBhdXRvbWF0aWNhbHksIHNvIHlvdSBjYW4KLXNhZmVseSBpZ25vcmUg dGhlIGNvbXBsYWludHMgZnJvbSBAY29tbWFuZHtnbnVsaWItdG9vbH0gYXMgbG9uZyBhcyB5b3Vy Ci1AZmlsZXtjb25maWd1cmUuYWN9IGRlY2xhcmVzIEBjb2Rle0FNX0dOVV9HRVRURVhUX1ZFUlNJ T04oWzAuMTYuMV0pfS4KLQotQHNtYWxsZXhhbXBsZQoteGdldHRleHRfb3B0aW9ucz0nCi0gICAg ICAgIC0tZmxhZz1fOjE6cGFzcy1jLWZvcm1hdAotICAgICAgICAtLWZsYWc9Tl86MTpwYXNzLWMt Zm9ybWF0Ci0nCi1AZW5kIHNtYWxsZXhhbXBsZQotCi1BcyB3aXRoIHRoZSBwcmV2aW91cyB0d28g dmFyaWFibGVzLCB5b3UgY2FuIHNhZmVseSBpZ25vcmUgdGhpcyBvbmUgaWYKLXlvdXIgcHJvamVj dCBkb2VzIG5vdCBoYXZlIE5MUyBzdXBwb3J0LgotCi0KLUBjbmluZGV4IGNvcHlyaWdodF9ob2xk ZXIKLUBpdGVtIGNvcHlyaWdodF9ob2xkZXIKLVBhY2thZ2UgY29weXJpZ2h0IGhvbGRlciBmb3Ig Z2V0dGV4dCBmaWxlcy4gIERlZmF1bHRzIHRvIEBzYW1we0ZTRn0gaWYKLXVuc2V0LgotCi1AY25p bmRleCBjaGVja291dF9vbmx5X2ZpbGUKLUBpdGVtIGNoZWNrb3V0X29ubHlfZmlsZQotSWYgeW91 IHdhbnQgQGNvbW1hbmR7Ym9vdHN0cmFwfSB0byBhYm9ydCBpZiBpdCBpcyBleGVjdXRlZCBvdXRz aWRlIG9mCi1hIHZlcnNpb24gY29udHJvbGxlZCB0cmVlLCB0aGlzIHZhcmlhYmxlIG11c3QgaG9s ZCB0aGUgbmFtZSBvZiBzb21lIGZpbGUKLXRoYXQgaXMgcHJlc2VudCBvbmx5IGluIGEgY2hlY2tl ZCBvdXQgdHJlZSwgYW5kIGlzIG5vdCBpbiBhIGRpc3RyaWJ1dGlvbgotdGFyYmFsbC4KLQotQHNt YWxsZXhhbXBsZQotY2hlY2tvdXRfb25seV9maWxlPUhBQ0tJTkcKLUBlbmQgc21hbGxleGFtcGxl Ci0KLUBjbmluZGV4IGNvcHkKLUBpdGVtIGNvcHkKLUlmIHNldCB0byBAc2FtcHt0cnVlfSwgdGhl biBtYWtlIGNvcGllcyB3aGVuIGFkZGluZyBmaWxlcyB0byB0aGlzCi1wYWNrYWdlLCBvdGhlcndp c2UgbWFrZSBzeW1saW5rcyBieSBkZWZhdWx0LiBJZiBzZXQgdG8gQHNhbXB7dHJ1ZX0sCi10aGVu IHRoZSBAb3B0aW9uey0tY29weX0gb3B0aW9uIHRvIEBjb21tYW5ke2Jvb3RzdHJhcH0gd2lsbCBo YXZlIG5vCi1mdXJ0aGVyIGVmZmVjdC4KLQotCi1AY25pbmRleCB2Y19pZ25vcmUKLUBpdGVtIHZj X2lnbm9yZQotU2V0IHRoaXMgdG8gQHNhbXB7LmN2c2lnbm9yZSAuZ2l0aWdub3JlfSBpZiB5b3Ug d2FudCBib3RoIG9mIHRob3NlIGZpbGVzCi10byBiZSBnZW5lcmF0ZWQgaW4gZGlyZWN0b3JpZXMg c3VjaCBhcyBAZmlsZXtsaWIvfSwgQGZpbGV7bTQvfSwgYW5kCi1AZmlsZXtwby99LCBvciBzZXQg aXQgdG8gQHNhbXB7YXV0b30gdG8gbWFrZSBAY29tbWFuZHtib290c3RyYXB9IHNlbGVjdAotd2hp Y2ggdG8gdXNlIGJhc2VkIG9uIHdoaWNoIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gKGlmIGFueSkg aXMgdXNlZCBpbgotdGhlIHNvdXJjZSBkaXJlY3RvcnkuICBPciBzZXQgaXQgdG8gQHNhbXB7bm9u ZX0gdG8gZGlzcmVnYXJkIFZDUyBpZ25vcmUKLWZpbGVzIGVudGlyZWx5LiAgRGVmYXVsdCBpcyBA c2FtcHthdXRvfS4KLQotQHNtYWxsZXhhbXBsZQotdmNfaWdub3JlPScuY3ZzaWdub3JlIC5naXRp Z25vcmUnCi1AZW5kIHNtYWxsZXhhbXBsZQotCi1AZW5kIGl0ZW1pemUKLQotCi1Abm9kZSBSZXF1 aXJlIFZhcmlhYmxlcwotQHN1YnNlY3Rpb24gUmVxdWlyZSBWYXJpYWJsZXMKLQotTWFueSBvZiB0 aGUgZnVuY3Rpb25zIGluIEBjb21tYW5ke2Jvb3RzdHJhcH0gc2hvdWxkIG5vdCBiZSBleGVjdXRl ZCBtb3JlCi10aGFuIG9uY2UsIHdoaWNoIGlzIGFjaGlldmVkIGJ5IHN0b3JpbmcgdGhlIG5hbWUg b2YgdGhhdCBmdW5jdGlvbiBpbiBhCi12YXJpYWJsZSBhbmQgdGhlbiBjYWxsaW5nIGl0IHdpdGg6 Ci0KLUBzbWFsbGV4YW1wbGUKLSRyZXF1aXJlX2dudWxpYl90b29sCi1AZW5kIHNtYWxsZXhhbXBs ZQotCi1BdCB0aGlzIHN0YWdlLCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGlzIGludGVycHJl dGVkIGFzIGEgZnVuY3Rpb24KLWNhbGwgYnkgdGhlIHNoZWxsLCBhbmQgdGhlIG5hbWVkIGZ1bmN0 aW9uIHRoZW4gcnVucy4gIFVuZGVyIG5vcm1hbAotY2lyY3Vtc3RhbmNlcywgZnVuY3Rpb25zIHRo YXQgYXJlIGNhbGxlZCBpbiB0aGlzIHdheSBhbHdheXMgc2V0IHRoZWlyCi1hc3NvY2lhdGVkIHZh cmlhYmxlIG5hbWUgdG8gc2ltcGx5IEBzYW1wezp9IHNvIHRoYXQgc3Vic2VxdWVudAotb2NjdXJy ZW5jZXMgb2YsIGluIHRoaXMgaW5zdGFuY2UsIEBjb2RleyRyZXF1aXJlX2dudWxpYl90b29sfSBo YXZlIG5vCi1mdXJ0aGVyIGVmZmVjdC4KLQotVGhhdCBtZWFucyB5b3UgY2FuIGVhc2lseSBza2lw IGFueSBmdW5jdGlvbnMgdGhhdCBhcmUgY2FsbGVkIGxpa2UgdGhpcwotYnkgdW5jb25kaXRpb25h bGx5IHNldHRpbmcgdGhlIHJlcXVpcmUgdmFyaWFibGUgdG8gQHNhbXB7On0gaW4geW91cgotQGZp bGV7Ym9vdHN0cmFwLmNvbmZ9LiBTbywgZm9yIGV4YW1wbGUsIGlmIHlvdXIgcGFja2FnZSBtYWtl cyBubyB1c2Ugb2YKLUBjb21tYW5ke2dudWxpYi10b29sfSwgeW91IGNhbiBhZGQgdGhlIGZvbGxv d2luZyB0byB5b3VyCi1AZmlsZXtib290c3RyYXAuY29uZn06Ci0KLUBzbWFsbGV4YW1wbGUKLXJl cXVpcmVfZ251bGliX3Rvb2w9OgotQGVuZCBzbWFsbGV4YW1wbGUKLQotWW91IHNob3VsZCBiZSBh d2FyZSwgaG93ZXZlciwgdGhhdCB0aGUgZnVuY3Rpb24gY2FsbHMgbWFuYWdlZCBieSB0aGlzCi1t ZWNoYW5pc20gYXJlIGRlc2lnbmVkIHRvIGJlIGNhbGxlZCBvbmUgdGltZSB0byBlbnN1cmUgdGhh dCBzb21lCi1yZXNvdXJjZSBpcyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUgcmVzdCBvZiBhbnkg ZnVuY3Rpb24gdGhhdCB1c2VzIGEKLUBjb2RleyRyZXF1aXJlX3NvbWVfcmVzb3VyY2V9IGNhbGwu ICBCZSBjYXJlZnVsIHRvIGVuc3VyZSB0aGF0IHlvdQotcmVtb3ZlIGFueSBjb2RlIHBhdGhzIHRo YXQgdHJ5IHRvIHVzZSB0aGF0IHJlc291cmNlIGlmIHlvdSBoYXZlCi1lZmZlY3RpdmVseSBkaXNh YmxlZCBpdCBieSBzZXR0aW5nIGl0cyB2YXJpYWJsZSB0byBAc2FtcHs6fSBlYXJseSBvbi4KLQot Ci1Abm9kZSBIb29rIEZ1bmN0aW9ucwotQHN1YnNlY3Rpb24gSG9vayBGdW5jdGlvbnMKLQotTWFu eSBvZiB0aGUga2V5IGZ1bmN0aW9ucyBpbiBAY29tbWFuZHtib290c3RyYXB9IHdpbGwgcnVuIG9u ZSBvciBtb3JlIGhvb2sKLWZ1bmN0aW9ucyBiZWZvcmUgdGhleSByZXR1cm4uICBFc3NlbnRpYWxs eSwgYWxsIHRoYXQgdGhlIGVudGlyZSBzY3JpcHQKLWRvZXMgaXMgdG8gZGVmaW5lIGEgbG90IG9m IGZ1bmN0aW9ucyAoc29tZSBvZiB3aGljaCB3aWxsIHJ1biBob29rcyksCi10aGVuIHNvdXJjZSB0 aGUgY29udGVudHMgb2YgeW91ciBAZmlsZXtib290c3RyYXAuY29uZn0gY3VzdG9taXNhdGlvbnMs Ci1hbmQgdGhlbiBmaW5hbGx5IHJ1biB0aGUgQGNvZGV7ZnVuY19ib290c3RyYXB9IGZ1bmN0aW9u LiAgUmVhZCB0aGUKLWRvYy1jb21tZW50cyBhYm92ZSBAY29kZXtmdW5jX2Jvb3RzdHJhcH0gaW4g dGhlIEBjb21tYW5ke2Jvb3RzdHJhcH0gZmlsZSwKLWFzIHdlbGwgYXMgdGhlIGZ1bmN0aW9ucyB0 aGF0IGl0IGNhbGxzIHRvIGZpbmQgd2hlcmUgeW91IGNhbiBob29rIHlvdXIKLW93biBmdW5jdGlv bnMsIGluIG9yZGVyIHRvIGJlIGNhbGxlZCBkdXJpbmcgeW91ciBjdXN0b21pc2VkIGV4ZWN1dGlv biBvZgotQGNvbW1hbmR7Ym9vdHN0cmFwfS4KLQotT25lIG9mIHRoZSB0cmlja2llciBob29rIGZ1 bmN0aW9ucyBpcyBzZXQgdXAgdG8gYWxsb3cgeW91IHRvIGFkZAotYWRkaXRpb25hbCBhcmd1bWVu dHMgdG8gdGhlIG9wdGlvbiBwYXJzZXIgZm9yIEBjb21tYW5ke2Jvb3RzdHJhcH0gd2l0aG91dAot aGF2aW5nIHRvIHJlcGxhY2UgQGNvZGV7ZnVuY19wYXJzZV9vcHRpb25zfSBpbiBpdHMgZW50aXJl dHk6Ci0KLUBzbWFsbGV4YW1wbGUKLW15X3NpbGVudF9vcHRpb24gKCkKLUB7Ci0gICAgJGRlYnVn X2NtZAotCi0gICAgY2FzZSAkMSBpbgotICAgICAgLS1zaWxlbnR8LXMpIG9wdF9zaWxlbnQ9Ojsg c2hpZnQgOzsKLSAgICBlc2FjCi0KLSAgICAjIHJldHVybiBtb2RpZmllZCBvcHRpb24gbGlzdAot ICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJEB7MSsiJEBAIkB9Ci0gICAgZnVuY19ydW5faG9va3Nf cmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAotQH0KLWZ1bmNfYWRkX2hvb2sgZnVu Y19wYXJzZV9vcHRpb25zIG15X3NpbGVudF9vcHRpb24KLUBlbmQgc21hbGxleGFtcGxlCi0KLQot QG5vZGUgRnVuY3Rpb24gUmVwbGFjZW1lbnQKLUBzdWJzZWN0aW9uIEZ1bmN0aW9uIFJlcGxhY2Vt ZW50Ci0KLUluIGEgZmV3IGNvbXBsZXggcGFja2FnZXMsIHlvdSBtaWdodCBmaW5kIHRoYXQgc29t ZSBzZWxlY3Rpb24gb2YKLWZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHRoZSBub3JtYWwgZXhlY3V0 aW9uIG9mIEBjb21tYW5ke2Jvb3RzdHJhcH0gYXJlCi13aG9sbHkgaW5hcHByb3ByaWF0ZSBmb3Ig eW91ciBwcm9qZWN0LCB3aGVyZSBzaW1wbHkgZGlzYWJsaW5nCi1AY29kZXskcmVxdWlyZV9zb21l X3Jlc291cmNlfSBmdW5jdGlvbnMgYW5kIGhvb2tpbmcgaW4gYWRkaXRpb25hbCBjb2RlCi1pcyBu b3QgcG93ZXJmdWwgZW5vdWdoIHRvIGF2b2lkIG9yIHJhZGljYWxseSBhbHRlciB0aGUgcGFydHMg b2YKLUBjb21tYW5ke2Jvb3RzdHJhcH0geW91IGRvIG5vdCB3YW50LgotCi1JbiB0aGF0IGNhc2Ug eW91IGNhbiBzaW1wbHkgd3JpdGUgYW4gZW50aXJlbHkgY3VzdG9tIGltcGxlbWVudGF0aW9uIG9m Ci13aGF0ZXZlciBmdW5jdGlvbihzKSB5b3Ugd2FudCB0byByZXBsYWNlIGluc2lkZSB5b3VyCi1A ZmlsZXtib290c3RyYXAuY29uZn0sIHNvIHRoYXQgYnkgdGhlIHRpbWUgQGNvZGV7ZnVuY19ib290 c3RyYXB9IGlzCi1jYWxsZWQgYXQgdGhlIGVuZCBvZiBAY29tbWFuZHtib290c3RyYXB9LCB5b3Vy IG5ldyBpbXBsZW1lbnRhdGlvbiBpcwotYWxyZWFkeSBpbiBwbGFjZS4KLQotQGV4YW1wbGUKLWZ1 bmNfZWNobyAoKQotQHsKLSAgICAjIHJlc3BlY3QgbmV3IC0tc2lsZW50IG9wdGlvbgotICAgICRv cHRfc2lsZW50IHx8IGVjaG8gIiRwcm9nbmFtZTogJCoiCi1AfQotQGVuZCBleGFtcGxlCi0KLQot QG5vZGUgVXNhZ2UgUGF0dGVybnMKLUBzZWN0aW9uIFVzYWdlIFBhdHRlcm5zCi0KLVRoZXJlIGFy ZSB0d28gd2F5cyB0byBpbmNvcnBvcmF0ZSBnbnVsaWIgaW50byB5b3VyIHBhY2thZ2UsIHdoaWNo IGFyZQotYm90aCBzdXBwb3J0ZWQgYnkgdGhlIEBjb21tYW5ke2Jvb3RzdHJhcH0gc2NyaXB0LiAg QmUgc3VyZSB0aGF0IGV2ZXJ5b25lCi13b3JraW5nIG9uIHlvdXIgcGFja2FnZSBpcyBlbXBsb3lp bmcgdGhlIHNhbWUgdXNhZ2UgcGF0dGVybiwgb3IgdGhpbmdzCi13aWxsIHR1cm4gYmFkIQotCi1A bWVudQotKiBDb25maWd1cmF0aW9uIGFsbCBrZXB0IGluIEBmaWxle2Jvb3RzdHJhcC5jb25mfQot KiBHbnVsaWIgY29uZmlndXJhdGlvbiBzdG9yZWQgaW4gQGZpbGV7Z251bGliLWNhY2hlLm00fQot QGVuZCBtZW51Ci0KLQotQG5vZGUgQ29uZmlndXJhdGlvbiBhbGwga2VwdCBpbiBAZmlsZXtib290 c3RyYXAuY29uZn0KLUBzdWJzZWN0aW9uIENvbmZpZ3VyYXRpb24gYWxsIGtlcHQgaW4gQGZpbGV7 Ym9vdHN0cmFwLmNvbmZ9Ci0KLUFsbCB0aGUgcGFyYW1ldGVycyBmb3IgcnVubmluZyBAY29tbWFu ZHtnbnVsaWItdG9vbH0gYW5kIG90aGVyIGJvb3RzdHJhcC0KLXRpbWUgY29tbWFuZHMgYXJlIG1h aW50YWluZWQgaW4gQGZpbGV7Ym9vdHN0cmFwLmNvbmZ9LiBUaGlzIGlzIHRoZQotZGVmYXVsdCB1 c2FnZSBwYXR0ZXJuLgotCi1JbiBvcmRlciBmb3IgdGhpcyB0byB3b3JrLCB3aGVuIHlvdSB3aXNo IHRvIGFkZCBvciByZW1vdmUgYSBnbnVsaWIKLW1vZHVsZSBmcm9tIHlvdXIgcGFja2FnZSwgYW1l bmQgdGhlIHZhbHVlIG9mIEB2YXJ7Z251bGliX21vZHVsZXN9IGluCi1AZmlsZXtib290c3RyYXAu Y29uZn0gKGFuZCBzaW1pbGFybHkgZm9yIGFueSBvdGhlciBwYXJhbWV0ZXJzKSBhbmQgcmVydW4K LUBjb21tYW5ke2Jvb3RzdHJhcH0gdG8gaW1wb3J0IGV2ZXJ5dGhpbmcgYW5ldy4KLQotVG8gYXZv aWQgdGhpbmdzIGdldHRpbmcgb3V0IG9mIHN5bmMsIHlvdSBzaG91bGQgbmV2ZXIgcnVuCi1AY29t bWFuZHtnbnVsaWItdG9vbH0gZGlyZWN0bHkuCi0KLQotQG5vZGUgR251bGliIGNvbmZpZ3VyYXRp b24gc3RvcmVkIGluIEBmaWxle2dudWxpYi1jYWNoZS5tNH0KLUBzdWJzZWN0aW9uIEdudWxpYiBj b25maWd1cmF0aW9uIHN0b3JlZCBpbiBAZmlsZXtnbnVsaWItY2FjaGUubTR9Ci0KLVRvIGltcGxl bWVudCB0aGlzIHVzYWdlIHBhdHRlcm4sIGxlYXZlIHRoZSB2YWx1ZSBvZiBAdmFye2dudWxpYl9t b2R1bGVzfQotYW5kIHRoZSB2YXJpb3VzIEB2YXJ7Z2xfeHh4fSB2YXJpYWJsZXMgZW1wdHkgaW4g QGZpbGV7Ym9vdHN0cmFwLmNvbmZ9Ci1hbmQgY2FsbCBAY29tbWFuZHtnbnVsaWItdG9vbCAtLWlt cG9ydCAuLi59IGZyb20geW91ciBzaGVsbCwgY2hlY2tpbmcKLXRoYXQgQGZpbGV7Z251bGliLWNh Y2hlLm00fSByZWZsZWN0cyB0aGUgdmFsdWVzIHlvdSB3YW50ZWQuICBGcm9tIG5vdyBvbgoteW91 IGNhbiBlaXRoZXIgY2FsbCBAY29tbWFuZHtnbnVsaWItdG9vbCAtLXVwZGF0ZX0gb3IgcmVydW4K LUBjb21tYW5ke2Jvb3RzdHJhcH0gd2hlbmV2ZXIgeW91IHdhbnQgdG8gcmVzeW5jIHRoZSBwYWNr YWdlIG1vZHVsZXMgd2l0aAoteW91ciBsb2NhbCBnbnVsaWIgY2hlY2tvdXQuCi0KLUlmIHlvdSB3 aXNoIHRvIGFkZCBvciByZW1vdmUgYSBnbnVsaWIgbW9kdWxlIGZyb20geW91ciBwYWNrYWdlLCBj YWxsCi1AY29tbWFuZHtnbnVsaWItdG9vbCAtLWltcG9ydC1hZGQgLi4ufSBvciBAY29tbWFuZHtn bnVsaWItdG9vbCAtLWltcG9ydC0KLXJlbW92ZX0gcmVzcGVjdGl2ZWx5LgotCi1Abm9kZSBLbm93 biBCdWdzCi1Ac2VjdGlvbiBLbm93biBCdWdzCi0KLUBpdGVtaXplIEBidWxsZXQKLUBpdGVtCi1n bnVsaWItdG9vbCBoYXMgbm8gQG9wdGlvbnstLWZvcmNlfSBvcHRpb24sIHNvIHNvbWV0aW1lcyBz eW1saW5rcyBhcmUKLWxlZnQgcG9pbnRpbmcgdG8gYW4gb2xkIGdudWxpYiB0cmVlIChldmVuIHdp dGggQGNvbW1hbmR7Li9ib290c3RyYXAKLS0tZm9yY2V9KToKLQotQHNtYWxsZXhhbXBsZQotJCAu L2Jvb3RzdHJhcCAtLXNraXAtZ2l0IC0tZ251bGliLXNyY2Rpcj0uLi9nbnVsaWIKLSQgLi9ib290 c3RyYXAgLS1nbnVsaWItc3JjZGlyPS4uL2dudWxpYiAtLWZvcmNlCi1AZW5kIHNtYWxsZXhhbXBs ZQotCi1Ob3RlIHRoYXQgbm93LCBwbGVudHkgb2Ygc3ltbGlua3Mgc3RpbGwgcG9pbnQgdG8gQGZp bGV7Li4vZ251bGlifQotaW5zdGVhZCBvZiBoYXZpbmcgYmVpbmcgcmV0YXJnZXRlZCB0byB0aGUg c3VibW9kdWxlIGluIEBmaWxley4vZ251bGlifS4KLUBlbmQgaXRlbQotQGVuZCBpdGVtaXplCmRp ZmYgLS1naXQgYS9nbC9tb2R1bGVzL2Jvb3RzdHJhcCBiL2dsL21vZHVsZXMvYm9vdHN0cmFwCmRl bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzRjMDE4Zi4uMDAwMDAwMDAKLS0tIGEvZ2wv bW9kdWxlcy9ib290c3RyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1EZXNjcmlw dGlvbjoKLUJvb3RzdHJhcCBhbiBBdXRvdG9vbGVkIHBhY2thZ2UgZnJvbSBjaGVja2VkLW91dCBz b3VyY2VzLgotCi1GaWxlczoKLWJ1aWxkLWF1eC9ib290c3RyYXAuaW4KLQotRGVwZW5kcy1vbjoK LWV4dHJhY3QtdHJhY2UKLWZ1bmNsaWIuc2gKLWlubGluZS1zb3VyY2UKLW9wdGlvbnMtcGFyc2Vy Ci0KLWNvbmZpZ3VyZS5hYzoKLQotTWFrZWZpbGUuYW06Ci0KLUluY2x1ZGU6Ci0KLUxpY2Vuc2U6 Ci1HUExlZCBidWlsZCB0b29sCi0KLU1haW50YWluZXI6Ci1HYXJ5IFYuIFZhdWdoYW4gPGdhcnlA Z251Lm9yZz4KZGlmZiAtLWdpdCBhL2dsL21vZHVsZXMvZXh0cmFjdC10cmFjZSBiL2dsL21vZHVs ZXMvZXh0cmFjdC10cmFjZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTY5Nzk1OWYu LjAwMDAwMDAwCi0tLSBhL2dsL21vZHVsZXMvZXh0cmFjdC10cmFjZQorKysgL2Rldi9udWxsCkBA IC0xLDIxICswLDAgQEAKLURlc2NyaXB0aW9uOgotRXh0cmFjdCBtYWNybyBhcmd1bWVudHMgZnJv bSBhdXRvdG9vbHMgaW5wdXQgd2l0aCBHTlUgTTQuCi0KLUZpbGVzOgotYnVpbGQtYXV4L2V4dHJh Y3QtdHJhY2UKLQotRGVwZW5kcy1vbjoKLW9wdGlvbnMtcGFyc2VyCi1mdW5jbGliLnNoCi0KLWNv bmZpZ3VyZS5hYzoKLQotTWFrZWZpbGUuYW06Ci0KLUluY2x1ZGU6Ci0KLUxpY2Vuc2U6Ci1HUExl ZCBidWlsZCB0b29sCi0KLU1haW50YWluZXI6Ci1HYXJ5IFYuIFZhdWdoYW4gPGdhcnlAZ251Lm9y Zz4KZGlmZiAtLWdpdCBhL2dsL21vZHVsZXMvZnVuY2xpYi5zaCBiL2dsL21vZHVsZXMvZnVuY2xp Yi5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmUyM2UyNzUuLjAwMDAwMDAwCi0t LSBhL2dsL21vZHVsZXMvZnVuY2xpYi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAK LURlc2NyaXB0aW9uOgotR2VuZXJhbCBzaGVsbCBzY3JpcHQgYm9pbGVyIHBsYXRlLCBhbmQgaGVs cGVyIGZ1bmN0aW9ucy4KLQotRmlsZXM6Ci1idWlsZC1hdXgvZnVuY2xpYi5zaAotCi1EZXBlbmRz LW9uOgotCi1jb25maWd1cmUuYWM6Ci0KLU1ha2VmaWxlLmFtOgotCi1JbmNsdWRlOgotCi1MaWNl bnNlOgotR1BMdjIrCi0KLU1haW50YWluZXI6Ci1HYXJ5IFYuIFZhdWdoYW4gPGdhcnlAZ251Lm9y Zz4KZGlmZiAtLWdpdCBhL2dsL21vZHVsZXMvaW5saW5lLXNvdXJjZSBiL2dsL21vZHVsZXMvaW5s aW5lLXNvdXJjZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY4ZGJiZDcuLjAwMDAw MDAwCi0tLSBhL2dsL21vZHVsZXMvaW5saW5lLXNvdXJjZQorKysgL2Rldi9udWxsCkBAIC0xLDIx ICswLDAgQEAKLURlc2NyaXB0aW9uOgotT3V0cHV0IHRoZSBjb250ZW50cyBvZiBhIHNoZWxsIHNj cmlwdCB3aXRoIHNvdXJjZWQgZmlsZXMgaW5saW5lZC4KLQotRmlsZXM6Ci1idWlsZC1hdXgvaW5s aW5lLXNvdXJjZQotCi1EZXBlbmRzLW9uOgotb3B0aW9ucy1wYXJzZXIKLWZ1bmNsaWIuc2gKLQot Y29uZmlndXJlLmFjOgotCi1NYWtlZmlsZS5hbToKLQotSW5jbHVkZToKLQotTGljZW5zZToKLUdQ TGVkIGJ1aWxkIHRvb2wKLQotTWFpbnRhaW5lcjoKLUdhcnkgVi4gVmF1Z2hhbiA8Z2FyeUBnbnUu b3JnPgpkaWZmIC0tZ2l0IGEvZ2wvbW9kdWxlcy9vcHRpb25zLXBhcnNlciBiL2dsL21vZHVsZXMv b3B0aW9ucy1wYXJzZXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3MTEzNDc2Li4w MDAwMDAwMAotLS0gYS9nbC9tb2R1bGVzL29wdGlvbnMtcGFyc2VyCisrKyAvZGV2L251bGwKQEAg LTEsMjAgKzAsMCBAQAotRGVzY3JpcHRpb246Ci1BIHBvcnRhYmxlLCBwbHVnZ2FibGUgb3B0aW9u IHBhcnNlciBmb3IgQm91cm5lIHNoZWxsLgotCi1GaWxlczoKLWJ1aWxkLWF1eC9vcHRpb25zLXBh cnNlcgotCi1EZXBlbmRzLW9uOgotZnVuY2xpYi5zaAotCi1jb25maWd1cmUuYWM6Ci0KLU1ha2Vm aWxlLmFtOgotCi1JbmNsdWRlOgotCi1MaWNlbnNlOgotR1BMZWQgYnVpbGQgdG9vbAotCi1NYWlu dGFpbmVyOgotR2FyeSBWLiBWYXVnaGFuIDxnYXJ5QGdudS5vcmc+CmRpZmYgLS1naXQgYS9tNC9n bnVsaWItY2FjaGUubTQgYi9tNC9nbnVsaWItY2FjaGUubTQKaW5kZXggYWNlYmM4M2YuLmZhMGM0 ZGEzIDEwMDY0NAotLS0gYS9tNC9nbnVsaWItY2FjaGUubTQKKysrIGIvbTQvZ251bGliLWNhY2hl Lm00CkBAIC0yOCw2ICsyOCw3IEBACgogIyBTcGVjaWZpY2F0aW9uIGluIHRoZSBmb3JtIG9mIGEg Y29tbWFuZC1saW5lIGludm9jYXRpb246CiAjIGdudWxpYi10b29sIC0taW1wb3J0IFwKKyMgIC0t bG9jYWwtZGlyPWdsLW1vZC9ib290c3RyYXAgXAogIyAgLS1sb2NhbC1kaXI9Z2wgXAogIyAgLS1s aWI9bGlibTQgXAogIyAgLS1zb3VyY2UtYmFzZT1saWIgXApAQCAtNTEsNiArNTIsNyBAQAogIyAg YXZsdHJlZS1vc2V0IFwKICMgIGJpbmFyeS1pbyBcCiAjICBib29sIFwKKyMgIGJvb3RzdHJhcCBc CiAjICBjLWN0eXBlIFwKICMgIGMtc3RhY2sgXAogIyAgY2xlYW4tdGVtcCBcCkBAIC0xMTEsNyAr MTEzLDcgQEAKICMgIHh2YXNwcmludGYtcG9zaXgKCiAjIFNwZWNpZmljYXRpb24gaW4gdGhlIGZv cm0gb2YgYSBmZXcgZ251bGliLXRvb2wubTQgbWFjcm8gaW52b2NhdGlvbnM6Ci1nbF9MT0NBTF9E SVIoW2dsXSkKK2dsX0xPQ0FMX0RJUihbZ2wtbW9kL2Jvb3RzdHJhcDpnbF0pCiBnbF9NT0RVTEVT KFsKICAgYW5ub3VuY2UtZ2VuCiAgIGFzc2VydApAQCAtMTIwLDYgKzEyMiw3IEBAIGdsX01PRFVM RVMoWwogICBhdmx0cmVlLW9zZXQKICAgYmluYXJ5LWlvCiAgIGJvb2wKKyAgYm9vdHN0cmFwCiAg IGMtY3R5cGUKICAgYy1zdGFjawogICBjbGVhbi10ZW1wCi0tIAoyLjQ5LjAKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpNNC1wYXRjaGVzIG1haWxpbmcg bGlzdApNNC1wYXRjaGVzQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlz dGluZm8vbTQtcGF0Y2hlcwo=