ZGlmZiAtLWdpdCBhL3RjdXRpbHMvYW1hc3Nwcm90b2NvbC5weSBiL3RjdXRpbHMvYW1hc3Nwcm90b2NvbC5weQppbmRleCA1ZjU2ZmVlLi42ZGIyYjU2IDEwMDY0NAotLS0gYS90Y3V0aWxzL2FtYXNzcHJvdG9jb2wucHkKKysrIGIvdGN1dGlscy9hbWFzc3Byb3RvY29sLnB5CkBAIC0xLDUgKzEsNCBAQAotIyEvdXNyL2Jpbi9weXRob24NCi0jIC0qLSBjb2Rpbmc6IGdiayAtKi0gDQorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0gDQogDQogaW1wb3J0IHN5cyxjb2RlY3Msc3RydWN0DQogDQpAQCAtMTIsNyArMTEsNyBAQAogSUZUX1NUUklORz02DQogSUZUX0xPTkc9Nw0KIA0KLSMgKDAsMCwxLElGVF9CWVRFLDAsIm1zZ3R5cGUiLCLP+8+iwusiKSwNCisjICgwLDAsMSxJRlRfQllURSwwLCJtc2d0eXBlIiwi5raI5oGv56CBIiksDQogDQogRkxEX05PX0lEWD0wDQogRkxEX0xFTkdUSF9JRFg9Mg0KQEAgLTIyLDM0ICsyMSwzNCBAQAogRkxEX0RFU0NfSURYPTYNCiANCiBIREZpZWxkc0RlZiA9IFsNCi0oMSwwLDAsSUZUX05VTEwsMCwiZXh0ZW5kIiwiwKnVudPyt/EiKSwNCi0oMiwwLDQsSUZUX1VMT05HLDAsInRlcm1pbmFsc24iLCIg1tW2y9DywdC6xSIpLA0KLSgzLDAsMixJRlRfVVNIT1JULDAsImFkZHJlc3MiLCJDQU612Na3IiksDQotKDQsMCw0LElGVF9VTE9ORywwLCJjYXJkbnVtYmVyIiwiv6i6xSIpLA0KLSg1LDAsMSxJRlRfQllURSwwLCJpbmRleG9mZXciLCIgx66w/Mv30v0iKSwNCi0oNiwwLDIsSUZUX1VTSE9SVCwwLCJ0cmFjZW9mZXciLCIgx66w/MH3y666xSIpLA0KLSg3LDAsNCxJRlRfTE9ORywwLCJhbW91bnQiLCIgvbvS173wtu4iKSwNCi0oOCwwLDQsSUZUX0xPTkcsMCwiYWRkaXRpb25hbGFtb3VudDEiLCK4vbzTvfC27iIpLA0KLSg5LDAsNCxJRlRfVUxPTkcsMCwidHJhY2VvZnBvcyIsIlBPU8H3y666xSIpLA0KLSgxMCwwLDQsSUZUX1VMT05HLDAsIm9yZ3RyYW5zdHJhY2UiLCLUrb270tfB98uuusUiKSwNCi0oMTEsMCw3LElGVF9EQVRFVElNRSwwLCJkYXRldGltZSIsIr270tfI1cbaus3KsbzkIiksDQotKDEyLDAsMSxJRlRfQllURSwwLCJyZXNwb25zZWNvZGUiLCLP7NOmwusiKSwNCi0oMTMsMCwyLElGVF9VU0hPUlQsMCwidGVybWluYWxpZCIsItbVtsu6xSIpLA0KLSgxNCwwLDIsSUZUX1VTSE9SVCwwLCJ0ZXJtaW5hbHR5cGUiLCLW1bbLwODQzSIpLA0KLSgxNSwwLDIsSUZUX1VTSE9SVCwwLCJtZXJjaGFudGlkIiwiycy7pyjN+LXjKbrFIiksDQotKDE2LDAsNCxJRlRfVUxPTkcsMCwib3BlcmF0b3JpZCIsIrLZ1/fUsbrFIiksDQotKDE3LDAsOCxJRlRfQlVGRkVSLDAsInBpbiIsIrj2yMvKtrHwwutQSU4iKSwNCi0oMTgsMCw0LElGVF9VTE9ORywwLCJ2ZXJvZmxpc3QiLCK62sP7taWw5rG+IiksDQotKDE5LDAsNCxJRlRfVUxPTkcsMCwibWFuYWdlZmVlIiwivbvS18X6tM66xSjU3bK708MpIiksDQotKDIwLDAsMzYwLElGVF9CVUZGRVIsMiwiYWRkaXRpb25hbGRhdGExIiwiuL2809DFz6IxIiksDQotKDIxLDAsNTI4LElGVF9CVUZGRVIsMiwiYWRkaXRpb25hbGRhdGEyIiwiuL2809DFz6IyIiksDQotKDIyLDAsNTI4LElGVF9TVFJJTkcsMiwiYWRkaXRpb25hbGRhdGEzIiwiuL2809DFz6IzIiksDQotKDIzLDAsNTI4LElGVF9TVFJJTkcsMiwiYWRkaXRpb25hbGRhdGE0IiwiuL2809DFz6I0IiksDQotKDI0LDAsMixJRlRfVVNIT1JULDAsIm1hYyIsIs/7z6LIz9akwusiKQ0KKygxLDAsMCxJRlRfTlVMTCwwLCJleHRlbmQiLHUi5omp5bGV5Z+f5ZCmIiksDQorKDIsMCw0LElGVF9VTE9ORywwLCJ0ZXJtaW5hbHNuIix1IiDnu4jnq6/luo/liJflj7ciKSwNCisoMywwLDIsSUZUX1VTSE9SVCwwLCJhZGRyZXNzIix1IkNBTuWcsOWdgCIpLA0KKyg0LDAsNCxJRlRfVUxPTkcsMCwiY2FyZG51bWJlciIsdSLljaHlj7ciKSwNCisoNSwwLDEsSUZUX0JZVEUsMCwiaW5kZXhvZmV3Iix1IiDpkrHljIXntKLlvJUiKSwNCisoNiwwLDIsSUZUX1VTSE9SVCwwLCJ0cmFjZW9mZXciLHUiIOmSseWMhea1geawtOWPtyIpLA0KKyg3LDAsNCxJRlRfTE9ORywwLCJhbW91bnQiLHUiIOS6pOaYk+mHkeminSIpLA0KKyg4LDAsNCxJRlRfTE9ORywwLCJhZGRpdGlvbmFsYW1vdW50MSIsdSLpmYTliqDph5Hpop0iKSwNCisoOSwwLDQsSUZUX1VMT05HLDAsInRyYWNlb2Zwb3MiLHUiUE9T5rWB5rC05Y+3IiksDQorKDEwLDAsNCxJRlRfVUxPTkcsMCwib3JndHJhbnN0cmFjZSIsdSLljp/kuqTmmJPmtYHmsLTlj7ciKSwNCisoMTEsMCw3LElGVF9EQVRFVElNRSwwLCJkYXRldGltZSIsdSLkuqTmmJPml6XmnJ/lkozml7bpl7QiKSwNCisoMTIsMCwxLElGVF9CWVRFLDAsInJlc3BvbnNlY29kZSIsdSLlk43lupTnoIEiKSwNCisoMTMsMCwyLElGVF9VU0hPUlQsMCwidGVybWluYWxpZCIsdSLnu4jnq6/lj7ciKSwNCisoMTQsMCwyLElGVF9VU0hPUlQsMCwidGVybWluYWx0eXBlIix1Iue7iOerr+exu+WeiyIpLA0KKygxNSwwLDIsSUZUX1VTSE9SVCwwLCJtZXJjaGFudGlkIix1IuWVhuaItyjnvZHngrkp5Y+3IiksDQorKDE2LDAsNCxJRlRfVUxPTkcsMCwib3BlcmF0b3JpZCIsdSLmk43kvZzlkZjlj7ciKSwNCisoMTcsMCw4LElGVF9CVUZGRVIsMCwicGluIix1IuS4quS6uuivhuWIq+eggVBJTiIpLA0KKygxOCwwLDQsSUZUX1VMT05HLDAsInZlcm9mbGlzdCIsdSLpu5HlkI3ljZXniYjmnKwiKSwNCisoMTksMCw0LElGVF9VTE9ORywwLCJtYW5hZ2VmZWUiLHUi5Lqk5piT5om55qyh5Y+3KOaaguS4jeeUqCkiKSwNCisoMjAsMCwzNjAsSUZUX0JVRkZFUiwyLCJhZGRpdGlvbmFsZGF0YTEiLHUi6ZmE5Yqg5L+h5oGvMSIpLA0KKygyMSwwLDUyOCxJRlRfQlVGRkVSLDIsImFkZGl0aW9uYWxkYXRhMiIsdSLpmYTliqDkv6Hmga8yIiksDQorKDIyLDAsNTI4LElGVF9TVFJJTkcsMiwiYWRkaXRpb25hbGRhdGEzIix1IumZhOWKoOS/oeaBrzMiKSwNCisoMjMsMCw1MjgsSUZUX1NUUklORywyLCJhZGRpdGlvbmFsZGF0YTQiLHUi6ZmE5Yqg5L+h5oGvNCIpLA0KKygyNCwwLDIsSUZUX1VTSE9SVCwwLCJtYWMiLHUi5raI5oGv6K6k6K+B56CBIikNCiBdDQogDQogY2xhc3MgSERQYWNrOg0KLSAgICAnJycgu+O24CA4NTgzINCt0umw/CAnJycNCisgICAgJycnIOaxh+WkmiA4NTgzIOWNj+iuruWMhSAnJycNCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOg0KICAgICAgICAgc2VsZi5tc2dfdHlwZSA9IDANCiAgICAgICAgIHNlbGYudmFsdWU9e30NCkBAIC0zMTQsNyArMzEzLDcgQEAKICAgICAgICAgICAgIGZmbGFnID0gZmllbGRbRkxEX0ZMQUdfSURYXQ0KICAgICAgICAgICAgIGZuYW1lID0gZmllbGRbRkxEX05BTUVfSURYXQ0KICAgICAgICAgICAgICNwcmludCAicGFyc2UgZmllbGRbJXNdIFslZF1vZmZbJWRdWyVzXSIgJSAoZm5hbWUsZmZsYWcsb2Zmc2V0LGNvZGVjcy5lbmNvZGUoZGF0YVtvZmZzZXQ6b2Zmc2V0KzJdLCdoZXgnKSkNCi0gICAgICAgICAgICBpZiBmZmxhZyA9PSAyOiAjILHks6TK/b7dDQorICAgICAgICAgICAgaWYgZmZsYWcgPT0gMjogIyDlj5jplb/mlbDmja4NCiAgICAgICAgICAgICAgICAgI3ByaW50ICJsZW4gWyVzXSIgJSBjb2RlY3MuZW5jb2RlKGRhdGFbb2Zmc2V0Om9mZnNldCsyXSwnaGV4JykNCiAgICAgICAgICAgICAgICAgZW5kcG9zID0gc2VsZi5idWZmZXJfMl9pbnQoZGF0YVtvZmZzZXQ6b2Zmc2V0KzJdLElGVF9VU0hPUlQpDQogICAgICAgICAgICAgICAgIG9mZnNldCArPSAyDQpkaWZmIC0tZ2l0IGEvdGN1dGlscy9weURlY2FyZC5weSBiL3RjdXRpbHMvcHlEZWNhcmQucHkKaW5kZXggMjJlOWRhZi4uMTg4ZTlhMiAxMDA2NDQKLS0tIGEvdGN1dGlscy9weURlY2FyZC5weQorKysgYi90Y3V0aWxzL3B5RGVjYXJkLnB5CkBAIC0xLDcgKzEsNyBAQAogIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0NCiAnJycNCiBDcmVhdGVkIG9uIDIwMTEtOS0yOQ0KLQ0KK+ivu+WNoeW6k+eoi+W6jw0KIEBhdXRob3I6IGNoZW5nLnRhbmcNCiAnJycNCiBmcm9tIGN0eXBlcyBpbXBvcnQgKg0KZGlmZiAtLWdpdCBhL3RjdXRpbHMvcHliY2NjbHQucHkgYi90Y3V0aWxzL3B5YmNjY2x0LnB5CmluZGV4IGNlMTA2MzAuLjJjMzUzMTcgMTAwNjQ0Ci0tLSBhL3RjdXRpbHMvcHliY2NjbHQucHkKKysrIGIvdGN1dGlscy9weWJjY2NsdC5weQpAQCAtMSw1ICsxLDQgQEAKLSMhL3Vzci9iaW4vcHl0aG9uDQotIyAtKi0gY29kaW5nOiBnYmsgLSotDQorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0NCiANCiBmcm9tIGN0eXBlcyBpbXBvcnQgKg0KIA0KQEAgLTE4MiwxNyArMTgxLDE3IEBACiAgICAgZHJ0cF9ubyA9IC0xDQogICAgIA0KICAgICBkZWYgc2V0dXAoaXAscG9ydCx4cGFjaz0nY3BhY2suZGF0JyxkZWJ1Zz0wKToNCi0gICAgICAgICcnJyCz9cq8u68gJycnDQorICAgICAgICAnJycg5Yid5aeL5YyWICcnJw0KICAgICAgICAgZ2xvYmFsIHhwYWNrX3BhdGgNCiAgICAgICAgIHhwYWNrX3BhdGggPSB4cGFjaw0KICAgICAgICAgYmNjY2x0X2RsbC5TZXREZWJ1Z1N3aXRjaCggZGVidWcgKQ0KICAgICAgICAgciA9IGJjY2NsdF9kbGwuQkNDQ0xUSW5pdCgxKQ0KICAgICAgICAgaWYgbm90IHI6DQotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCKz9cq8u6/BrL3Tyqew3CIpDQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHUi5Yid5aeL5YyW6L+e5o6l5aSx6LSlIikNCiAgICAgICAgIG5vID0gYmNjY2x0X2RsbC5BZGREcnRwTm9kZShpcCxwb3J0KQ0KICAgICAgICAgcHlCY2NjbHQuZHJ0cF9ubyA9IG5vDQogICAgICAgICBpZiBweUJjY2NsdC5kcnRwX25vIDwgMDoNCi0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ7P1yry7r82o0bbGvcyoway908qnsNwnKQ0KKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcih1J+WIneWni+WMlumAmuiur+W5s+WPsOi/nuaOpeWksei0pScpDQogICAgICAgICAgICAgDQogICAgICAgICANCiAgICAgICAgIA0KQEAgLTIyNyw3ICsyMjYsNyBAQAogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0DQogICAgICAgICBmb3Igayx2IGluIHJlcXVlc3QuaXRlcml0ZW1zKCk6DQogICAgICAgICAgICAgaWYgayBub3QgaW4gY3BhY2tfZmllbGRzOg0KLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCLX1rbOICVzILK7tObU2iIgJSBrKQ0KKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHUi5a2X5q61ICVzIOS4jeWtmOWcqCIgJSBrKQ0KICAgICAgICAgICAgIA0KICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodixpbnQpOg0KICAgICAgICAgICAgICAgICBiY2NjbHRfZGxsLlNldEludEZpZWxkQnlOYW1lKHNlbGYuaGFuZGxlLHNlbGYucmVxdWVzdF9yb3csayx2KQ0KQEAgLTIzNiw3ICsyMzUsNyBAQAogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHYsc3RyKToNCiAgICAgICAgICAgICAgICAgYmNjY2x0X2RsbC5TZXRTdHJpbmdGaWVsZEJ5TmFtZShzZWxmLmhhbmRsZSxzZWxmLnJlcXVlc3Rfcm93LGssdikNCiAgICAgICAgICAgICBlbHNlOg0KLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCLX1rbOICVzIMr9vt3A4NDNtO3O8yIgJSBrKQ0KKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHUi5a2X5q61ICVzIOaVsOaNruexu+Wei+mUmeivryIgJSBrKQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgYmNjY2x0X2RsbC5TZXRSZXF1ZXN0VHlwZShzZWxmLmhhbmRsZSxmdW5jKQ0KICAgICAgICAgI3ByaW50ICJDYWxsUmVxdWVzdCAlZDolZCIgJSAoc2VsZi5tYWluZnVuYyxmdW5jKQ0KQEAgLTI1Nyw3ICsyNTYsNyBAQAogICAgIGRlZiBnZXRfcmV0dXJuX2Vycm9yKHNlbGYpOg0KICAgICAgICAgciA9IGJjY2NsdF9kbGwuR2V0UmV0Q29kZShzZWxmLmhhbmRsZSxieXJlZihzZWxmLnJldHVybl9jb2RlKSkNCiAgICAgICAgIGlmIG5vdCByOg0KLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignyKG3tbvYwuu07c7zJykNCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IodSflj5bov5Tlm57noIHplJnor68nKQ0KICAgICAgICAgaWYgc2VsZi5nZXRfcmV0Y29kZSgpIDw+IDA6DQogICAgICAgICAgICAgYmNjY2x0X2RsbC5HZXRTdHJpbmdGaWVsZEJ5TmFtZShzZWxmLmhhbmRsZSwwLCJ2c21lc3MiLHNlbGYuZXJyb3JfbXNnKQ0KICAgICAgICAgcmV0dXJuIHNlbGYucmV0dXJuX2NvZGUudmFsdWUNCkBAIC0yNjksMTMgKzI2OCwxMyBAQAogICAgICAgICBlbGlmIG5vdCBiY2NjbHRfZGxsLkhhdmVOZXh0UGFjayggc2VsZi5oYW5kbGUgKToNCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UNCiAgICAgICAgIGVsaWYgbm90IGJjY2NsdF9kbGwuQ2FsbE5leHQoc2VsZi5oYW5kbGUsc2VsZi50aW1lb3V0LGJ5cmVmKHNlbGYuZXJyb3JfY29kZSksc2VsZi5lcnJvcl9tc2cpOg0KLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignu/HIobrz0PjK/b7dsPzS7LOjJykNCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IodSfojrflj5blkI7nu63mlbDmja7ljIXlvILluLgnKQ0KICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICBzZWxmLnJlc3BvbnNlX3JvdyA9IDANCiAgICAgICAgICAgICBzZWxmLnJlY29yZF9jb3VudCA9IDANCiAgICAgICAgICAgICBzZWxmLmdldF9yZXR1cm5fZXJyb3IoKQ0KICAgICAgICAgICAgIGlmIHNlbGYuZ2V0X3JldGNvZGUoKSA8PiAwOg0KLSAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ8ihuvPQ+Mr9vt23tbvYtO3O86OscmV0PSVkJyAlIHNlbGYuZ2V0X3JldGNvZGUoKSkNCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKHUn5Y+W5ZCO57ut5pWw5o2u6L+U5Zue6ZSZ6K+v77yMcmV0PSVkJyAlIHNlbGYuZ2V0X3JldGNvZGUoKSkNCiAgICAgICAgICAgICBjbnQgPSBjX2ludCgwKQ0KICAgICAgICAgICAgIGJjY2NsdF9kbGwuR2V0UmVjb3JkQ291bnQoc2VsZi5oYW5kbGUsYnlyZWYoY250KSkNCiAgICAgICAgICAgICBzZWxmLnJlY29yZF9jb3VudCA9IGNudC52YWx1ZQ0KQEAgLTI5OCw0NiArMjk3LDQ2IEBACiAgICAgICAgIA0KICAgICBkZWYgbmV4dF9yZWNvcmQoc2VsZixmaWVsZHMpOg0KICAgICAgICAgaWYgc2VsZi5yZXNwb25zZV9yb3cgPj0gc2VsZi5yZWNvcmRfY291bnQ6DQotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignzt6/ydPDvMfCvCcpDQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih1J+aXoOWPr+eUqOiusOW9lScpDQogICAgICAgICANCiAgICAgICAgIHNlbGYucmVjb3JkID0ge30NCiAgICAgICAgIGZvciBmIGluIGZpZWxkczoNCi0gICAgICAgICAgICAjcHJpbnQgIrvxyKHX1rbOICIsZg0KKyAgICAgICAgICAgICNwcmludCAi6I635Y+W5a2X5q61ICIsZg0KICAgICAgICAgICAgIGlmIGYgbm90IGluIGNwYWNrX2ZpZWxkczoNCi0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi19a2ziAlcyCyu7Tm1NoiICUgZikNCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih1IuWtl+autSAlcyDkuI3lrZjlnKgiICUgZikNCiAgICAgICAgICAgICANCiAgICAgICAgICAgICBjdHlwZV9maWVsZCA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGYpDQogICAgICAgICAgICAgaWYgZlswXSA9PSAnbCc6DQogICAgICAgICAgICAgICAgIHYgPSBjX2ludCgwKQ0KICAgICAgICAgICAgICAgICByID0gYmNjY2x0X2RsbC5HZXRJbnRGaWVsZEJ5TmFtZShzZWxmLmhhbmRsZSxzZWxmLnJlc3BvbnNlX3JvdyxjdHlwZV9maWVsZCxieXJlZih2KSkNCiAgICAgICAgICAgICAgICAgaWYgbm90IHI6DQotICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCLX1rbOICVzIM60t7W72CIgJSBmKQ0KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih1IuWtl+autSAlcyDmnKrov5Tlm54iICUgZikNCiAgICAgICAgICAgICAgICAgc2VsZi5yZWNvcmRbZl0gPSB2LnZhbHVlDQogICAgICAgICAgICAgZWxpZiBmWzBdID09ICdzJzoNCiAgICAgICAgICAgICAgICAgdiA9IGNyZWF0ZV9zdHJpbmdfYnVmZmVyKCdcMDAwJyAqIDUxMikNCiAgICAgICAgICAgICAgICAgciA9IGJjY2NsdF9kbGwuR2V0U3RyaW5nRmllbGRCeU5hbWUoc2VsZi5oYW5kbGUsc2VsZi5yZXNwb25zZV9yb3csY3R5cGVfZmllbGQsdiw1MTEpDQogICAgICAgICAgICAgICAgIGlmIG5vdCByOg0KLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi19a2ziAlcyDOtLe1u9giICUgZikNCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IodSLlrZfmrrUgJXMg5pyq6L+U5ZueIiAlIGYpDQogICAgICAgICAgICAgICAgICNwcmludCAiJXM6ICVzIiAlIChmLHYudmFsdWUpDQogICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkW2ZdID0gdi52YWx1ZQ0KICAgICAgICAgICAgIGVsaWYgZlswXSA9PSAnZCc6DQogICAgICAgICAgICAgICAgIHYgPSBjX2RvdWJsZSgwLjApDQogICAgICAgICAgICAgICAgIHIgPSBiY2NjbHRfZGxsLkdldERvdWJsZUZpZWxkQnlOYW1lKHNlbGYuaGFuZGxlLHNlbGYucmVzcG9uc2Vfcm93LGN0eXBlX2ZpZWxkLGJ5cmVmKHYpKQ0KICAgICAgICAgICAgICAgICBpZiBub3QgcjoNCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoItfWts4gJXMgzrS3tbvYIiAlIGYpDQorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHUi5a2X5q61ICVzIOacqui/lOWbniIgJSBmKQ0KICAgICAgICAgICAgICAgICBzZWxmLnJlY29yZFtmXSA9IHYudmFsdWUNCiAgICAgICAgICAgICBlbGlmIGZbMF0gPT0gJ3UnOg0KICAgICAgICAgICAgICAgICB2ID0gY3JlYXRlX3N0cmluZ19idWZmZXIoJ1wwMDAnICogMTAyNCkNCiAgICAgICAgICAgICAgICAgciA9IGJjY2NsdF9kbGwuR2V0U3RyaW5nRmllbGRCeU5hbWUoc2VsZi5oYW5kbGUsc2VsZi5yZXNwb25zZV9yb3csY3R5cGVfZmllbGQsdiwxMDIzKQ0KICAgICAgICAgICAgICAgICBpZiBub3QgcjoNCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoItfWts4gJXMgzrS3tbvYIiAlIGYpDQorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHUi5a2X5q61ICVzIOacqui/lOWbniIgJSBmKQ0KICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgIGRhdGEgPSB2LnZhbHVlDQogICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhWzI6XQ0KICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5jb252ZXJ0X2FzY2lpKGRhdGEpDQogICAgICAgICAgICAgICAgIHNlbGYucmVjb3JkW2ZdID0gZGF0YQ0KICAgICAgICAgICAgIGVsc2U6DQotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ9fWts7A4NDNtO3O8yAlcycgJSBmKQ0KKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHUn5a2X5q6157G75Z6L6ZSZ6K+vICVzJyAlIGYpDQogICAgICAgICBzZWxmLnJlc3BvbnNlX3JvdyArPSAxDQogICAgICAgICAjcHJpbnQgImZldGNoIG9uZSByZWNvcmQgLCAiICxzZWxmLnJlY29yZA0KICAgICAgICAgcmV0dXJuIHNlbGYucmVjb3JkDQo=