@getopenpay/openpay-js 0.2.2-alpha.60a8026 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +2 -2
- package/dist/index.umd.js +1 -1
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -3120,7 +3120,7 @@ const gi = (t, r, e) => {
|
|
|
3120
3120
|
window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
|
|
3121
3121
|
}, this.updateCallbacks = (e) => {
|
|
3122
3122
|
this.formCallbacks.setCallbacks(e);
|
|
3123
|
-
}, V.assignAsSingleton(this), this.ojsVersion = "0.2.2", this.ojsReleaseVersion = "0.2.2
|
|
3123
|
+
}, V.assignAsSingleton(this), this.ojsVersion = "0.2.2", this.ojsReleaseVersion = "0.2.2", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = Fe.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${$t()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new wi(), this.eventHandler = new hi(this.formId, this.baseUrl, this.formCallbacks, {
|
|
3124
3124
|
setFormHeight: this.setFormHeight,
|
|
3125
3125
|
onCdeLoaded: this.onCdeLoaded,
|
|
3126
3126
|
onCdeLoadError: this.onCdeLoadError
|
|
@@ -3148,4 +3148,4 @@ export {
|
|
|
3148
3148
|
d as FieldName,
|
|
3149
3149
|
st as OpenPayForm
|
|
3150
3150
|
};
|
|
3151
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG5jb25zdCBFbGVtZW50VHlwZSA9IHoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInRva2VuXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IGlucHV0LnZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogei5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKVxufSk7XG56LnJlY29yZCh6LmFueSgpKTtcblxuY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbnZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzJDEoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufShFcnJvcik7XG5cbmNsYXNzIENkZUVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIGNvbnN0IGZyaWVuZGx5TWVzc2FnZSA9IGAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihmcmllbmRseU1lc3NhZ2UpO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcXVlcnlDREUgPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgcmVzcG9uc2VTY2hlbWEpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IENkZUVycm9yKHJlc3BvbnNlKTtcbiAgfVxuICBpZiAoIWNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hKHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UocmVzcG9uc2UpO1xuICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICBjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByZXNwb25zZVNjaGVtYSwgXCJBY3R1YWw6XCIsIHJlc3BvbnNlKTtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgcmV0dXJuIHNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3M7XG59O1xuY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIHJldHVybiBDREVSZXNwb25zZUVycm9yLnNhZmVQYXJzZShyZXNwb25zZSkuc3VjY2Vzcztcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHJlcXVlc3QgfSwgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFBheW1lbnRGb3JtUHJlZmlsbCk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvclBSID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBjb25maXJtUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSwgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UpO1xufTtcbmNvbnN0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQgfSxcbiAgICBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZXJyb3IsIEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3IzZHNTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbikgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIFBpbmczRFNTdGF0dXNSZXNwb25zZSk7XG4gIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5cbmNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdGFydGVkPy4oKTtcbiAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBhd2FpdCBzaW1wbGVPanNGbG93KHBhcmFtcyk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBlcnJfXyhlcnJvcik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRjLCBlcnJfXzogZXJyX18kYiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb25cIik7XG5jb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7cmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogcmVzcG9uc2UucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59O1xuY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICBjb25zdCBjcG0gPSBhbGxDUE1zLmZpbmQoKGNwbTIpID0+IHpvZE1vZGVsLnNhZmVQYXJzZShjcG0yKS5zdWNjZXNzKTtcbiAgaWYgKCFjcG0pIHtcbiAgICBlcnJfXyRiKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsYCk7XG4gIH1cbiAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG59O1xuY29uc3QgY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybSA9IChmaWVsZHMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgemlwX2NvZGU6IGZpZWxkcy56aXBDb2RlLFxuICAgICAgY291bnRyeTogZmllbGRzLmNvdW50cnlcbiAgICB9LFxuICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBmaWVsZHMuZmlyc3ROYW1lLFxuICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGZpZWxkcy5sYXN0TmFtZVxuICB9O1xufTtcbmNvbnN0IHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAgPSBhc3luYyAobG9nUHJlZml4LCBhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFBheW1lbnRNZXRob2QsIHJlcXVpcmVkRm9ybUZpZWxkcywgY29uZmlybVJlc3VsdCkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBsb2dfXzIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKGxvZ1ByZWZpeCk7XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGxvZ19fMihgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLmApO1xuICAgIGNvbnN0IHNldHVwUmVzdWx0ID0gYXdhaXQgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHNldHVwUmVzdWx0IH07XG4gIH0gZWxzZSB7XG4gICAgbG9nX18yKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IHJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IHJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgY3VzdG9tZXJfY291bnRyeTogcmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiByZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGIsIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICBpZiAoIXBheWxvYWQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBheWxvYWQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBlcnJvcnNdIG9mIE9iamVjdC5lbnRyaWVzKGlzc3VlcykpIHtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRhKGBHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc2AsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQuZGF0YTtcbn07XG5jb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBmb3IgKGNvbnN0IHRva2VuaXplUmVzdWx0IG9mIHRva2VuaXplUmVzdWx0cykge1xuICAgIGlmICh0b2tlbml6ZVJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEFsbEZpZWxkTmFtZXMuc2FmZVBhcnNlKGVycm9yLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgICAgIGVycl9fJGEoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGIoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHRva2VuaXplUmVzdWx0LmVycm9ycyl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kYSwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kYShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kYShgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyRhKGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJGEoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kYShgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRhKGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJGEoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyRhKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kYShcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kOShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyRhKFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBsb2dfXyRhKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyRhKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRhKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJGEoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgZ2V0RWxlbWVudEJ5SWRBc3luYyA9IChpZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgY29uc3QgZ2V0RWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNvbHZlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9O1xuICBnZXRFbGVtZW50KCk7XG59KTtcblxuY29uc3Qgc3R5bGVzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIjtcblxuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvcjNkc1N0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luKTtcbiAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKSB7XG4gIGNvbnN0IHsgdXJsLCBiYXNlVXJsIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoZWxlbWVudHMuaWZyYW1lLCBvblN1Y2Nlc3MsIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHMsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3Qgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcyk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaHJlZjogcmVzdWx0LmhyZWZcbiAgfTtcbn07XG5jb25zdCBvcGVuUG9wdXBXaW5kb3cgPSAocG9wdXBOYW1lLCB1cmwpID0+IHtcbiAgY29uc3QgcG9wdXBXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xuICBpZiAoIXBvcHVwV2luZG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgfVxuICByZXR1cm4gcG9wdXBXaW5kb3c7XG59O1xuY29uc3Qgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwb3B1cE5hbWUsIGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4sIHVybCkgPT4ge1xuICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwb3B1cFdpbmRvdyA9IG9wZW5Qb3B1cFdpbmRvdyhwb3B1cE5hbWUsIHVybCk7XG4gICAgY29uc3QgcG9sbGluZyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVJlc3VsdCA9IGF3YWl0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkKGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4pO1xuICAgICAgICBpZiAodmVyaWZ5UmVzdWx0LnByZXNlbnQpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICAgIHBvcHVwV2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGhyZWY6IHZlcmlmeVJlc3VsdC5ocmVmIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBvcHVwV2luZG93LmNsb3NlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICByZWplY3QoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ5LCBlcnJfXzogZXJyX18kOCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMSA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IFBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YDtcbiAgICBlcnJfXyQ4KGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiA9IChocmVmKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmF1bHRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXZhdWx0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyQ5KGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt2YXVsdElkfV1gKTtcbiAgICByZXR1cm4gdmF1bHRJZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJNc2cgPSBgRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kOChlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuUG9ja3l0M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0ID0ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogdmF1bHRJZCxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG4gIHJldHVybiBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ4LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhaXJ3YWxsZXgtY2NcIik7XG5jb25zdCBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kNyhkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyQ3KGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyQ3KGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDcsIGVycl9fOiBlcnJfXyQ2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgcnVuQ29tbW9uQ2NGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNyhg4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDcoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHt9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kNyhg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDcoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQ3KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDcoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDcoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyQ3KGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kNyhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCByZXF1aXJlc1BvY2t5dDNkcyA9IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJDcoYOKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1blBvY2t5dDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wicG9ja3l0XCJdID0gcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWlyd2FsbGV4M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQ3KGDilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFpcndhbGxleFwiXSA9IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0YXJ0UGZSZXN1bHQgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICAgIGxvZ19fJDcoYOKUnCBQYXltZW50IGZsb3cgcmVzdWx0OmAsIHN0YXJ0UGZSZXN1bHQpO1xuICAgICAgICAgIGNvbnN0IHByZVN0YXJ0M2RzQ29tcGxldGUgPSByZXF1aXJlc1BvY2t5dDNkcyB8fCByZXF1aXJlc0FpcndhbGxleDNkcztcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VTdHJpcGVGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgICAgaWYgKCFwcmVTdGFydDNkc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlU3RyaXBlRmxvdykge1xuICAgICAgICAgICAgICBsb2dfXyQ3KGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZ19fJDcoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dgKTtcbiAgICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDcoYOKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNjUG1JZCA9IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQ7XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQ3KGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2NjUG1JZH1dYCk7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJDcoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgbG9nX18kNyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyQ3KGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAkeyFzaG91bGRVc2VTdHJpcGVGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tvdXRDYXJkRWxlbWVudHMoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICAuLi5jb21tb25DaGVja291dFBhcmFtcyxcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZCxcbiAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogc2hvdWxkVXNlU3RyaXBlRmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQ3KGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQ2KGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDYoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDcoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICBsb2dfXyQ3KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG59O1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIHN0cmlwZUxvZ19fKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke25leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCk7XG4gIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgc3RyaXBlTG9nX18oXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCB9KSA9PiB7XG4gICAgbG9nX18kNihgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDYoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ2KGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQ2KGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kNShgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDYoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQ2KGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDYoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgb3ZlcnJpZGUuc3RyaXBlQXBwbGVQYXkpO1xuICAgIH1cbiAgICBsb2dfXyQ2KGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgIHByLnNob3coKTtcbiAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgbG9nX18kNihgU3RyaXBlIFBNIGFkZGVkIGV2ZW50OmAsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgbG9nX18kNihgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kNihgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDYoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ2KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDYoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQucGF5bWVudE1ldGhvZD8uYmlsbGluZ19kZXRhaWxzPy5hZGRyZXNzO1xuICBjb25zdCBzaGlwcGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBzaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcz8uY291bnRyeSB8fCBzaGlwcGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBsb2dfXyQ2KGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcsIHN0cmlwZUFwcGxlUGF5KSA9PiB7XG4gIHByLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogaXNQZW5kaW5nXG4gICAgfSxcbiAgICBjdXJyZW5jeTogYW1vdW50LmN1cnJlbmN5LFxuICAgIGFwcGxlUGF5OiBzdHJpcGVBcHBsZVBheVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtcGF5cGFsXCIpO1xuY29uc3QgUG9ja3l0UGF5cGFsQ3BtID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbmNvbnN0IFBvY2t5dFBheXBhbFJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1blBvY2t5dFBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ1KGBSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgIGNvbnN0IGNwbSA9IFBvY2t5dFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzKTtcbiAgICBsb2dfXyQ1KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBQb2NreXRQYXlwYWxSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdO1xuICAgIGxvZ19fJDUoYE9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLmApO1xuICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBuZXh0QWN0aW9uTWV0YWRhdGEudmVyaWZ5X3Rva2VuLFxuICAgICAgbmV4dEFjdGlvbk1ldGFkYXRhLnBheXBhbF9pZnJhbWVfdXJsXG4gICAgKTtcbiAgICBsb2dfXyQ1KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGxvZ19fJDUoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dmF1bHRJZH1gKTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiB2YXVsdElkXG4gICAgfSk7XG4gICAgbG9nX18kNShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBjb25maXJtUmVzdWx0KTtcbiAgICByZXR1cm4gYXdhaXQgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cChcInBvY2t5dC1wYXlwYWxcIiwgYW55Q2RlQ29ubmVjdGlvbiwgY3BtLCBub25DZGVGb3JtRmllbGRzLCBjb25maXJtUmVzdWx0KTtcbiAgfVxuKTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXdcbn0pID0+IHtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBUT0RPOiBhc2FwIGZvciBwcm9kIC0gYWlyd2FsbGV4IGhhcyBubyBkb2NzIGZvciB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZCxcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH1cbiAgfTtcbiAgaWYgKCFpbml0aWFsUHJldmlldykge1xuICAgIHJldHVybiBiYXNlUmVxdWVzdDtcbiAgfVxuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVJlcXVlc3QsXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBpbml0aWFsUHJldmlldy5jdXJyZW5jeT8udG9VcHBlckNhc2UoKSA/PyBcIlVTRFwiLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogdG90YWxQcmljZS50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCI7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEdvb2dsZSBQYXkgU0RLXCIpKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH0pO1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW2ZpcnN0TmFtZSwgLi4ubGFzdE5hbWVQYXJ0c10gPSBiaWxsaW5nQWRkcmVzcy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gICAgY29uc3QgbGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5BRERSRVNTXSA9IGlucHV0c1tGaWVsZE5hbWUuQUREUkVTU10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSB8fCBiaWxsaW5nQWRkcmVzcy5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBmaXJzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBsYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDQsIGVycl9fOiBlcnJfXyQ0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImdwYXlcIik7XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGJhc2VVcmwgPT09IEZSQU1FX0JBU0VfVVJMID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIjtcbiAgaWYgKHBheW1lbnRzQ2xpZW50ID09PSBudWxsKSB7XG4gICAgcGF5bWVudHNDbGllbnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBtZXJjaGFudEluZm86IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBcIlwiLFxuICAgICAgICBtZXJjaGFudE5hbWU6IFwiXCJcbiAgICAgIH0pLm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBHb29nbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBpZiAoIWdvb2dsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlIH07XG4gICAgfVxuICAgIGxvZ19fJDQoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyQ0KFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSB9O1xuICAgIH1cbiAgICBsb2dfXyQ0KGBMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uYCk7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kNChcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UgfTtcbiAgICB9XG4gICAgbG9nX18kNChcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsKS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICBtZXJjaGFudElkOiBcIlwiLFxuICAgICAgICAgIC8vIFRPRE86IGZvciBwcm9kIG1vZGVcbiAgICAgICAgICBpbml0aWFsUHJldmlldzogdm9pZCAwXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kNChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDQoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlIH07XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogdm9pZCAwLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyQ0KFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7IGNvbnRleHQsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCwgbm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNChcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBjbGllbnQgPSBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IFwiXCIsXG4gICAgICAvLyBUT0RPOiBmb3IgcHJvZCBtb2RlXG4gICAgICBpbml0aWFsUHJldmlldzogYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIixcbiAgICAgICAgdm9pZCAwXG4gICAgICApXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kNChcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICBwb3N0YWxfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBsb2dfXyQ0KFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgc3RhcnRGbG93TmV4dEFjdGlvbnMpO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDQoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJDQoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJDQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdDIgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQyKTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQyLnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogeyBwYXltZW50X21ldGhvZF9pZDogb3VyUG1JZCB9IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ0KGBTdGFydGluZyBvbmUtdGltZSBwYXltZW50IGZsb3cuLi5gKTtcbiAgICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHRydWUsXG4gICAgICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogb3VyUG1JZCxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ0KFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IGxvYWRBcHBsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIHNjcmlwdC5zcmMgPSBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCI7XG4gICAgc2NyaXB0LmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiKSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9KTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5ID0gKGZvcm1JbnB1dHMsIGJpbGxpbmdDb250YWN0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBpZiAoYmlsbGluZ0NvbnRhY3QpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IGJpbGxpbmdDb250YWN0LmVtYWlsQWRkcmVzcyB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0NvbnRhY3QuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQUREUkVTU10gPSBpbnB1dHNbRmllbGROYW1lLkFERFJFU1NdIHx8IGJpbGxpbmdDb250YWN0LmFkZHJlc3NMaW5lcz8uWzBdIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0NvbnRhY3QubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdDb250YWN0LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0NvbnRhY3QuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgYmlsbGluZ0NvbnRhY3QuZ2l2ZW5OYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgYmlsbGluZ0NvbnRhY3QuZmFtaWx5TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXBwbGVwYXktc2Vzc2lvblwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNvbnRleHQubm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNvbnRleHQubm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRVc2VyQWN0aW9ucyA9IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF07XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IHJlcXVpcmVkVXNlckFjdGlvbnMucGF5bWVudF9zZXNzaW9uO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHJlcXVpcmVkVXNlckFjdGlvbnMuY29uc2VudF9pZDtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgaWYgKCFjb25zZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICByZXR1cm4gY29uc2VudElkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpIHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB9XG4gIGxvZ19fJDMoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgfSk7XG4gIGxvZ19fJDMoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIGxvZ19fJDMoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xufVxuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUNoZWNrb3V0V2l0aFBtSWQob3VyUG1JZCwgbm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dCkge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgcHJvdmlkZXJfdHlwZTogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9LFxuICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHRydWUsXG4gICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogb3VyUG1JZCxcbiAgICBsaW5lX2l0ZW1zOiBjb250ZXh0LnByZWZpbGwubGluZV9pdGVtcyxcbiAgICB0b3RhbF9hbW91bnRfYXRvbTogY29udGV4dC5wcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICB9KTtcbiAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBjb250ZXh0LCBjb25zZW50SWQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YS5iaWxsaW5nQ29udGFjdCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKGZvcm1JbnB1dHMsIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kMyhcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGE/LnJlZGlyZWN0X3VybCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQpIHtcbiAgICAgIG91clBtSWQgPSBhd2FpdCBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gY29udGV4dC5pc1NldHVwTW9kZSA/IHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHsgcGF5bWVudF9tZXRob2RfaWQ6IG91clBtSWQgfSB9IDogYXdhaXQgcGVyZm9ybUNoZWNrb3V0V2l0aFBtSWQob3VyUG1JZCwgbm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFwcGxlcGF5XCIpO1xuY29uc3QgQXBwbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSB9O1xuICAgIH1cbiAgICBsb2dfXyQyKGBMb2FkaW5nIEFwcGxlIFBheSBTREsuLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgICBsb2dfXyQyKFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kMyhcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgZXJyKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kMihcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UgfTtcbiAgICB9XG4gICAgbG9nX18kMihcIkFwcGxlIFBheSBMb2FkZWRcIik7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyQyKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlIH07XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgbG9nX18kMihcInByb2Nlc3NvckFjY291bnRcIiwgcHJvY2Vzc29yQWNjb3VudCk7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICAgICAgICBwcmVmaWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kMyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBpc1NldHVwTW9kZSwgcHJlZmlsbCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHRvdGFsID0ge1xuICAgICAgbGFiZWw6IGlzU2V0dXBNb2RlID8gXCJTZXR1cCBQYXltZW50XCIgOiBcIlBheW1lbnQgVG90YWxcIixcbiAgICAgIGFtb3VudDogaXNTZXR1cE1vZGUgPyBcIjAuMDBcIiA6IChpbml0aWFsUHJldmlldy5hbW91bnRBdG9tIC8gMTAwKS50b0ZpeGVkKDIpLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfTtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5Py50b1VwcGVyQ2FzZSgpID8/IFwiVVNEXCIsXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgICAgXSxcbiAgICAgIHRvdGFsXG4gICAgfTtcbiAgICBsb2dfXyQyKFwiUGF5bWVudCBSZXF1ZXN0XCIsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgbG9nX18kMihcIkFwcGxlUGF5U2Vzc2lvblwiLCBzZXNzaW9uKTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzXG4gICAgfTtcbiAgICBsZXQgY29uc2VudElkO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyQyKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc2VudElkID0gYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25zaGlwcGluZ21ldGhvZHNlbGVjdGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGxvZ19fJDIoXCJTaGlwcGluZyBtZXRob2Qgc2VsZWN0ZWRcIiwgZXZlbnQuc2hpcHBpbmdNZXRob2QpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25zaGlwcGluZ21ldGhvZHNlbGVjdGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGxvZ19fJDIoXCJTaGlwcGluZyBtZXRob2Qgc2VsZWN0ZWRcIiwgZXZlbnQuc2hpcHBpbmdNZXRob2QpO1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7fTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnNoaXBwaW5nY29udGFjdHNlbGVjdGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGxvZ19fJDIoXCJTaGlwcGluZyBjb250YWN0IHNlbGVjdGVkXCIsIGV2ZW50LnNoaXBwaW5nQ29udGFjdCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHt9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IChldmVudCkgPT4ge1xuICAgICAgICBsb2dfXyQyKFwiUGF5bWVudCBtZXRob2Qgc2VsZWN0ZWRcIiwgZXZlbnQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIHNlc3Npb25Db250ZXh0LCBjb25zZW50SWQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kMyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICB9XG4gIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59O1xuY29uc3QgT2pzRmxvd3MgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQ29tbW9uQ2NGbG93XG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVQckZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVQckZsb3ckMVxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUxpbmtGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlTGlua0Zsb3dcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogcnVuUG9ja3l0UGF5cGFsRmxvd1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEFwcGxlUGF5Rmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKGluaXRQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCBpbml0Rmxvdyhpbml0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMShg4pyUICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaW5pdFJlc3VsdCk7XG4gICAgICAgIHB1Ymxpc2hlci5zZXQoaW5pdFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQyKGDwnZmtICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBcIkRldGFpbHM6XCIsIGVycm9yKTtcbiAgICAgICAgcHVibGlzaGVyLnRocm93KGVycm9yLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBbGxJbml0Rmxvd3MgPSBhc3luYyAoZmxvd3MsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhmbG93cykubWFwKChmbG93KSA9PiBmbG93LmluaXRpYWxpemUoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pKSk7XG59O1xuY29uc3QgY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIFBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQpLFxuICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgc3RyaXBlTGluazogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgTGlua1wiLCBPanNGbG93cy5zdHJpcGVMaW5rLmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWlyd2FsbGV4IEdQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH07XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18kMSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBmb3VuZGApO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZXZlbnREYXRhID0gcGFyc2VFdmVudFBheWxvYWQoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBldmVudC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycywgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoZXZlbnREYXRhKSA9PiB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWV2ZW50RGF0YS5lbGVtZW50SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGV2ZW50RGF0YS5mb3JtSWQpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm9uY2VzLmhhcyhldmVudERhdGEubm9uY2UpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm9uY2VzLmFkZChldmVudERhdGEubm9uY2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLmZvcm1JZCA9IGZvcm1JZDtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGZvcm1DYWxsYmFja3M7XG4gICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGludGVybmFsQ2FsbGJhY2tzO1xuICB9XG59XG5jb25zdCBnZXRDbGVhbk9yaWdpbiA9ICh1cmwpID0+IHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsKS5vcmlnaW47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKGlmcmFtZSwgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCBpc1ZhbGlkT2JqZWN0ID0gYXdhaXQgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdChjb25uZWN0aW9uT2JqKTtcbiAgaWYgKCFpc1Jlc3VsdFZhbGlkKGNvbm5lY3Rpb25PYmosIGlzVmFsaWRPYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgfVxuICByZXR1cm4gY29ubmVjdGlvbk9iajtcbn1cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihpZCwgY29ubmVjdGlvbikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuXG5jb25zdCBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMgPSAoaW5pdFByRmxvd3MsIGNvbnRleHQsIGNhbGxiYWNrcykgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSIH0gPSBpbml0UHJGbG93cztcbiAgc3RyaXBlUFIucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSByZXN1bHQubG9hZGVkVmFsdWU7XG4gICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICBjb25zdCBjYW5Hb29nbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5Hb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNhbGxiYWNrcy5nZXQub25QYXltZW50UmVxdWVzdExvYWQoZmluYWxTdGF0dXMpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuU3RyaXBlUHJGbG93ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgIGluaXRSZXN1bHRcbiAgfSk7XG59O1xuXG5jb25zdCBHRU5FUklDX0NPTk5fRVJSID0gYFRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLmA7XG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1mb3JtXCIpO1xuY2xhc3MgT3BlblBheUZvcm0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ19fKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIik7XG4gICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBjZGVMb2FkZWQgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgYW55Q2RlQ29ubiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgY2RlTG9hZGVkLFxuICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICBsb2dfXyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKTtcbiAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICBsb2dfXyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGhlaWdodCkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRWYWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSlcbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5vZGU6IGVsZW1lbnQubm9kZSB9KTtcbiAgICAgIGlmICghdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpLnRoZW4oKGNvbm4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgIGlmICghdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmFsU3VibWl0ID0gKG1ldGhvZCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJwb2NreXQtcGF5cGFsXCI6XG4gICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHZvaWQgMCxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5sb2FkZWRWYWx1ZS5zdGFydEZsb3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LmxvYWRlZFZhbHVlLnN0YXJ0RmxvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMlwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuMi4yLWFscGhhLjYwYTgwMjZcIjtcbiAgICB0aGlzLmJhc2VVcmwgPSBjb25maWcuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCI7XG4gICAgdGhpcy5jb25maWcgPSB7IC4uLmNvbmZpZywgYmFzZVVybDogdGhpcy5iYXNlVXJsIH07XG4gICAgdGhpcy5mb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YDtcbiAgICB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICB0aGlzLmZvcm1UYXJnZXQgPSBjb25maWcuZm9ybVRhcmdldCA/PyBcImJvZHlcIjtcbiAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfTtcbiAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IENvbm5lY3Rpb25NYW5hZ2VyKCk7XG4gICAgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgT3BlblBheUZvcm1FdmVudEhhbmRsZXIodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5vanNGbG93cyA9IE9qc0Zsb3dzO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChmb3JtKSA9PiB7XG4gICAgICBpZiAoT3BlblBheUZvcm0uZ2V0SW5zdGFuY2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgICAgIH1cbiAgICAgIHdpbmRvd1tcIm9qc1wiXSA9IGZvcm07XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZ2V0SW5zdGFuY2UgPSAoKSA9PiB7XG4gICAgICByZXR1cm4gd2luZG93W1wib2pzXCJdID8/IG51bGw7XG4gICAgfTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYnVpbGRPanNGbG93Q29udGV4dCA9IChjb25maWcsIGNkZUxvYWRlZFBheWxvYWQsIGFueUNkZUNvbm5lY3Rpb24sIGZvcm1EaXYpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IGNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgICBiYXNlVXJsOiBuZXcgVVJMKGNvbmZpZy5iYXNlVXJsID8/IEZSQU1FX0JBU0VfVVJMKS5vcmlnaW4sXG4gICAgICAgIGZvcm1EaXYsXG4gICAgICAgIGVsZW1lbnRzU2Vzc2lvbklkOiBjZGVMb2FkZWRQYXlsb2FkLnNlc3Npb25JZCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogY2RlTG9hZGVkUGF5bG9hZC5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBjdXN0b21Jbml0UGFyYW1zOiBjb25maWcuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxuICAgICAgfTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCB7IEZpZWxkTmFtZSwgT3BlblBheUZvcm0gfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLEtBQUFBLFNBQVM7QUFDbEIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLFFBQVc7QUFFbEIsTUFBTUMsS0FBaUIsOEJBRWpCQyxLQUE0QkwsRUFBRSxPQUFPO0FBQUEsRUFDekMsTUFBTUEsRUFBRSxPQUFPO0FBQUEsRUFDZixLQUFLQSxFQUFFLE1BQU1BLEVBQUUsT0FBTyxDQUFDO0FBQUEsRUFDdkIsS0FBS0EsRUFBRSxPQUFPO0FBQUEsRUFDZCxLQUFLQSxFQUFFLE9BQU87QUFDaEIsQ0FBQyxHQUNLTSxLQUFrQ04sRUFBRSxNQUFNSyxFQUF5QixHQUNuRUUsS0FBZ0JQLEVBQUUsT0FBTztBQUFBLEVBQzdCLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsU0FBU0EsRUFBRSxPQUFPO0FBQUEsRUFDbEIsTUFBTUEsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUMxQixDQUFDLEdBQ0tRLEtBQWlCUixFQUFFLE1BQU1PLEVBQWEsR0FDdENFLEtB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QixTQUFTLElBQUksSUFBSUEsRUFBTyxXQUFXZ1EsRUFBYyxFQUFFO0FBQUEsRUFDbkQsU0FBQUQ7QUFBQSxFQUNBLG1CQUFtQkYsRUFBaUI7QUFBQSxFQUNwQyx3QkFBd0JBLEVBQWlCO0FBQUEsRUFDekMsa0JBQUFDO0FBQUEsRUFDQSxrQkFBa0I5UCxFQUFPLG9CQUFvQixDQUFDO0FBQ2hEO0FBaE9OLElBQU1pUSxLQUFOekI7IiwKICAibmFtZXMiOiBbInoiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAiRlJBTUVfQkFTRV9VUkwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJlIiwgIm9iaiIsICJlMiIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJmbiIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJFbGVtZW50VHlwZSIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkVsZW1lbnRFdmVudCIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgIlRocmVlRFNTdGF0dXMiLCAiVGhyZWVEU1N0YXR1czIiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAidmFsdWUiLCAiZmllbGROYW1lIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpIiwgImlzU3RyaXBlSnNQcmVzZW50IiwgInNsZWVwIiwgImNyZWF0ZVN0cmlwZUVsZW1lbnRzIiwgInN0cmlwZVB1YktleSIsICJlbGVtZW50c09wdGlvbnMiLCAic3RyaXBlIiwgImNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsQW1vdW50QXRvbSIsICJjdXJyZW5jeSIsICJpc0Ftb3VudFBlbmRpbmciLCAiaXNMaW5rT25seSIsICJzdHJpcGVDdXJyZW5jeSIsICJ0aW1lb3V0TXMiLCAicmVzb2x2ZSIsICJ3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCIsICJwYXltZW50UmVxdWVzdCIsICJyZWplY3QiLCAiZXZ0IiwgImNvbmZpcm1TdHJpcGVQclBNIiwgIm5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbSIsICJjb25maXJtUmVzdWx0IiwgImxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3ciLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAicmVzdWx0U3RhdHVzIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAiaW5wdXQiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJyZXN1bHQiLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgInN1bSIsICJhcnIiLCAiYSIsICJiIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJwIiwgIl9fIiwgIkN1c3RvbUVycm9yIiwgIl9zdXBlciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJDZGVFcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAiY2RlQ29ubiIsICJkYXRhIiwgInJlc3BvbnNlU2NoZW1hIiwgImlzQ0RFUmVzcG9uc2VFcnJvciIsICJjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSIsICJzY2hlbWEiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiZ2V0UHJlZmlsbCIsICJzdGFydFBheW1lbnRGbG93IiwgInBheWxvYWQiLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QiLCAiY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQiLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvcjNkc1N0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAiY29ubmVjdGlvbk9iaiIsICJhc3NlcnROZXZlciIsICJhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyIsICJzaW1wbGVPanNGbG93IiwgInBhcmFtcyIsICJmbG93UmVzdWx0IiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImxvZ19fJGMiLCAiZXJyX18kYiIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgImZpZWxkcyIsICJwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwIiwgImxvZ1ByZWZpeCIsICJhbnlDZGVDb25uZWN0aW9uIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJyZXF1aXJlZEZvcm1GaWVsZHMiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgImxvZ19fJGIiLCAiZXJyX18kYSIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyRhIiwgImVycl9fJDkiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiY29udGV4dCIsICJmb3JtQ2FsbGJhY2tzIiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJpbml0aWFsUHJldmlldyIsICJlbGVtZW50cyIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImV2ZW50IiwgIk9qc0Zsb3dzIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiY3VzdG9tUGFyYW1zIiwgIm1lcmdlZElucHV0cyIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNIiwgIm5vbkNkZUZvcm1GaWVsZHMiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIm91ckV4aXN0aW5nUG1JZCIsICJmb3JtSW5wdXRzIiwgIl9lIiwgImlucHV0cyIsICJwYXllckZpcnN0TmFtZSIsICJwYXllckxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJpZCIsICJnZXRFbGVtZW50IiwgImVsZW1lbnQiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJoYW5kbGVDYW5jZWwiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAiYmFzZVVybCIsICJjbGVhbnVwRXZlbnRMaXN0ZW5lcnMiLCAic3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QiLCAib3BlblBvcHVwV2luZG93IiwgInBvcHVwTmFtZSIsICJwb3B1cFdpbmRvdyIsICJzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0IiwgImV4cGVjdGVkVmVyaWZ5VG9rZW4iLCAicG9sbGluZyIsICJ2ZXJpZnlSZXN1bHQiLCAibG9nX18kOSIsICJlcnJfXyQ4IiwgIlBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDEiLCAiZXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXN1bHQiLCAiZnJpZW5kbHlFcnIiLCAiZGV2RXJyIiwgInBhcnNlVmF1bHRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAidmF1bHRJZCIsICJlcnJNc2ciLCAiY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzIiwgInJ1blBvY2t5dDNkc0Zsb3ciLCAiaGVhZGVycyIsICJsb2dfXyQ4IiwgImVycl9fJDciLCAiQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMiLCAiY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzIiwgInBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZiIsICJpbnRlbnRJZCIsICJydW5BaXJ3YWxsZXgzZHNGbG93IiwgImluaXRpYWxJbnRlbnRJZCIsICJsb2dfXyQ3IiwgImVycl9fJDYiLCAic3RyaXBlTG9nX18iLCAicnVuQ29tbW9uQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAicmVxdWlyZXNQb2NreXQzZHMiLCAicG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCIsICJyZXF1aXJlc0FpcndhbGxleDNkcyIsICJhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0IiwgInN0YXJ0UGZSZXN1bHQiLCAicHJlU3RhcnQzZHNDb21wbGV0ZSIsICJzaG91bGRVc2VTdHJpcGVGbG93IiwgInN0cmlwZUNDM0RTRmxvdyIsICJjb21tb25DQzNEU0Zsb3ciLCAiY2NQbUlkIiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZUFjdGlvbiIsICJhY3Rpb24iLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29tbW9uQWN0aW9uIiwgImxvZ19fJDYiLCAiZXJyX18kNSIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdyQxIiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiYmlsbGluZ0FkZHJlc3MiLCAic2hpcHBpbmdBZGRyZXNzIiwgImFtb3VudCIsICJpc1BlbmRpbmciLCAic3RyaXBlQXBwbGVQYXkiLCAibG9nX18kNSIsICJQb2NreXRQYXlwYWxDcG0iLCAiUG9ja3l0UGF5cGFsUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgIm5ld0N1c3RvbWVyRmllbGRzIiwgInBheXBhbEZsb3dSZXN1bHQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAiYmFzZVJlcXVlc3QiLCAidG90YWxQcmljZSIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInNjcmlwdCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSIsICJwYXltZW50RGF0YSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWVQYXJ0cyIsICJsYXN0TmFtZSIsICJsb2dfXyQ0IiwgImVycl9fJDQiLCAicGF5bWVudHNDbGllbnQiLCAiZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQiLCAiZW52aXJvbm1lbnQiLCAiR29vZ2xlUGF5Q3BtIiwgImluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImlzUmVhZHlUb1BheSIsICJydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgIl9mIiwgIl9nIiwgImNsaWVudCIsICJwYXltZW50RGF0YVJlcXVlc3QiLCAiZW5jcnlwdGVkUGF5bWVudFRva2VuIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgIm91clBtSWQiLCAiY29uZmlybVJlc3VsdDIiLCAibG9hZEFwcGxlUGF5U2NyaXB0IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkiLCAiYmlsbGluZ0NvbnRhY3QiLCAibG9nX18kMyIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50IiwgInJlcXVpcmVkVXNlckFjdGlvbnMiLCAicGF5bWVudFNlc3Npb25SZXNwb25zZSIsICJjb25zZW50SWQiLCAiaGFuZGxlM0RTIiwgInBlcmZvcm1DaGVja291dFdpdGhQbUlkIiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkIiwgImxvZ19fJDIiLCAiZXJyX18kMyIsICJBcHBsZVBheUNwbSIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgImFwcGxlUGF5Q3BtIiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJ0b3RhbCIsICJzZXNzaW9uIiwgInNlc3Npb25Db250ZXh0IiwgInVwZGF0ZSIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgInJlamVjdGVkIiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgImxvZ19fJDEiLCAiZXJyX18kMiIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJwdWJsaXNoZXIiLCAiaW5pdFBhcmFtcyIsICJpbml0UmVzdWx0IiwgImdldEVycm9yTWVzc2FnZSIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJjb250ZXh0IiwgImZvcm1DYWxsYmFja3MiLCAiZmxvdyIsICJjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzIiwgIk9qc0Zsb3dzIiwgImVycl9fJDEiLCAiT3B0aW9uYWxGbiIsICJ6IiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JZCIsICJiYXNlVXJsIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImV2ZW50IiwgImdldENsZWFuT3JpZ2luIiwgImV2ZW50RGF0YSIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJlbGVtZW50SWQiLCAicGF5bG9hZCIsICJldmVudFR5cGUiLCAidXJsIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgImNvbm5lY3Rpb25PYmoiLCAiY29ubmVjdFRvQ2hpbGQiLCAiaXNWYWxpZE9iamVjdCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgImlzUmVzdWx0VmFsaWQiLCAiQ29ubmVjdGlvbk1hbmFnZXIiLCAiY29ubmVjdGlvbiIsICJzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMiLCAiaW5pdFByRmxvd3MiLCAiY2FsbGJhY2tzIiwgInN0cmlwZVBSIiwgInJlc3VsdCIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAicHJvdmlkZXIiLCAicGFyYW1zIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiZXJyX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUxvYWRlZCIsICJhbnlDZGVDb25uIiwgIm9qc0NvbnRleHQiLCAiZXJyb3JNZXNzYWdlIiwgImhlaWdodCIsICJlbGVtZW50IiwgImVsZW1lbnRWYWx1ZSIsICJvcHRpb25zIiwgInR5cGUiLCAiRWxlbWVudFR5cGUiLCAiZnJhbWUiLCAicXVlcnlTdHJpbmciLCAic2VsZWN0b3IiLCAiRWxlbWVudFR5cGVFbnVtIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImNvbm4iLCAibWV0aG9kIiwgIm5ld0NhbGxiYWNrcyIsICJ2NCIsICJmb3JtIiwgImNkZUxvYWRlZFBheWxvYWQiLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJmb3JtRGl2IiwgIkZSQU1FX0JBU0VfVVJMIiwgIk9wZW5QYXlGb3JtIl0KfQo=
|
|
3151
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguZXMuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IHogfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEZSQU1FX0JBU0VfVVJMID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LnN0cmluZygpLFxuICBsb2M6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIG1zZzogei5zdHJpbmcoKSxcbiAgdXJsOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yUmVzcG9uc2UgPSB6LmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHoub2JqZWN0KHtcbiAgY29kZTogei5zdHJpbmcoKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgcGF0aDogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBab2RGaWVsZEVycm9ycyA9IHouYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBNQVBfVE9fSFVNQU5fRlJJRU5ETFlfTE9XRVJDQVNFID0ge1xuICBcImZhaWxlZCB0byBmZXRjaFwiOiBgQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluYFxufTtcbmNvbnN0IGdldEh1bWFuRnJpZW5kbHlNZXNzYWdlID0gKG9nRXJyb3JNZXNzYWdlKSA9PiB7XG4gIGNvbnN0IGtleSA9IG9nRXJyb3JNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICByZXR1cm4gTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRVtrZXldID8/IG9nRXJyb3JNZXNzYWdlO1xufTtcbmNvbnN0IGlzU3RyaW5naWZpZWRKc29uT2JqZWN0ID0gKHN0cikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2Uoc3RyKTtcbiAgICByZXR1cm4gdHlwZW9mIHBhcnNlZCA9PT0gXCJvYmplY3RcIjtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcbmNvbnN0IGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSAocmVzcG9uc2UpID0+IHtcbiAgaWYgKHJlc3BvbnNlLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShyZXNwb25zZVswXS5tc2cpO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGJ1bGxldGVkID0gcmVzcG9uc2UubWFwKChlcnIpID0+IGDigKIgJHtnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlcnIubXNnKX1gKS5qb2luKFwiXFxuXCIpO1xuICAgIHJldHVybiBgJHtgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpgfVxuJHtidWxsZXRlZH1gO1xuICB9XG59O1xuY29uc3QgY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyA9IChlcnJvcnMpID0+IHtcbiAgY29uc3QgbGlzdE9mRXJyb3JzID0gZXJyb3JzLm1hcCgoZXJyKSA9PiBgLSAke2Vyci5wYXRoLmpvaW4oXCIvXCIpfTogJHtlcnIubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xuICByZXR1cm4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHtsaXN0T2ZFcnJvcnN9YDtcbn07XG5jb25zdCBnZXRFcnJvck1lc3NhZ2UgPSAoZSkgPT4ge1xuICBpZiAoZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgaWYgKGlzU3RyaW5naWZpZWRKc29uT2JqZWN0KGUubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IG9iaiA9IEpTT04ucGFyc2UoZS5tZXNzYWdlKTtcbiAgICAgIGlmIChQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlLnNhZmVQYXJzZShvYmopLnN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3Iob2JqKTtcbiAgICAgIH0gZWxzZSBpZiAoWm9kRmllbGRFcnJvcnMuc2FmZVBhcnNlKG9iaikuc3VjY2Vzcykge1xuICAgICAgICByZXR1cm4gY3JlYXRlTWVzc2FnZUZyb21ab2RGaWVsZEVycm9ycyhvYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHtlLm1lc3NhZ2V9YCk7XG4gICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZShlLm1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGUpO1xuICAgIH0gY2F0Y2ggKGUyKSB7XG4gICAgICByZXR1cm4gZTIgKyBcIlwiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZSArIFwiXCI7XG4gIH1cbn07XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0gei5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHouc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHoubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0gei5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHoudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG5jb25zdCBFbGVtZW50VHlwZSA9IHoubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56Lm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6LmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHsgdHlwZTogR2VuZXJpY0V2ZW50VHlwZSB9KTtcbmNvbnN0IElucHV0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiQkxVUlwiLCBcIkZPQ1VTXCIsIFwiQ0hBTkdFXCJdKTtcbmNvbnN0IElucHV0RXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHouYXJyYXkoei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBFcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKTtcbmNvbnN0IEVycm9yRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHoucmVjb3JkKHouc3RyaW5nKCksIHouc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbmNvbnN0IExvYWRlZEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHoubnVtYmVyKCksXG4gIGN1cnJlbmN5OiBPcHRpb25hbFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogei5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uUEFZTUVOVF9GTE9XX1NUQVJURUQpLFxuICBuZXh0QWN0aW9uTWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogei5vcHRpb25hbCh6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHoubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHoub2JqZWN0KHtcbiAgW1wiZmlyc3ROYW1lXCIgLyogRklSU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJsYXN0TmFtZVwiIC8qIExBU1RfTkFNRSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBQUkZvcm1GaWVsZHMgPSB6Lm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHoub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6LmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogei5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0gei5vYmplY3Qoe1xuICB0eXBlOiB6LmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHouYXJyYXkoei5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbmNvbnN0IEVsZW1lbnRFdmVudCA9IHoub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xuei5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHoub2JqZWN0KHtcbiAgZWxlbWVudFR5cGU6IHouc3RyaW5nKCksXG4gIGVycm9yczogei5hcnJheSh6LnN0cmluZygpKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgc3VjY2Vzczogei5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogei5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6LmFycmF5KEZpZWxkVmFsaWRhdGlvbkVycm9yKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRSZXNwb25zZSA9IHouZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHoub2JqZWN0KHsgc3VjY2Vzczogei5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSlcbn0pO1xuei5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6LnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpLm9wdGlvbmFsKClcbn0pO1xudmFyIFRocmVlRFNTdGF0dXMgPSAvKiBAX19QVVJFX18gKi8gKChUaHJlZURTU3RhdHVzMikgPT4ge1xuICBUaHJlZURTU3RhdHVzMltcIlNVQ0NFU1NcIl0gPSBcInN1Y2Nlc3NcIjtcbiAgVGhyZWVEU1N0YXR1czJbXCJGQUlMVVJFXCJdID0gXCJmYWlsdXJlXCI7XG4gIFRocmVlRFNTdGF0dXMyW1wiQ0FOQ0VMTEVEXCJdID0gXCJjYW5jZWxsZWRcIjtcbiAgcmV0dXJuIFRocmVlRFNTdGF0dXMyO1xufSkoVGhyZWVEU1N0YXR1cyB8fCB7fSk7XG5jb25zdCBQaW5nM0RTU3RhdHVzUmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6LnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56Lm9iamVjdCh7XG4gIGhyZWY6IHouc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbmNvbnN0IENvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6LnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogei5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogei5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHouc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoei5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG5jb25zdCBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgei5vYmplY3QoeyBwcmVzZW50OiB6LmxpdGVyYWwodHJ1ZSksIGhyZWY6IHouc3RyaW5nKCkgfSksXG4gIHoub2JqZWN0KHsgcHJlc2VudDogei5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG5jb25zdCBDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6LmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoei5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbmNvbnN0IGV4dHJhY3RJc3N1ZXNQZXJGaWVsZCA9IChlcnJvcikgPT4ge1xuICBjb25zdCBpc3N1ZXNQZXJGaWVsZCA9IHt9O1xuICBPYmplY3QuZW50cmllcyhlcnJvcikuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IEZpZWxkTmFtZUVudW0ucGFyc2Uoa2V5KTtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICBpc3N1ZXNQZXJGaWVsZFtmaWVsZE5hbWVdID0gdmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUuX2Vycm9ycykpIHtcbiAgICAgICAgaXNzdWVzUGVyRmllbGRbZmllbGROYW1lXSA9IHZhbHVlLl9lcnJvcnM7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzc3Vlc1BlckZpZWxkO1xufTtcblxuY29uc3QgU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHouc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHouc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogei5zdHJpbmcoKVxufSk7XG5jb25zdCBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgdHlwZTogei5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogei5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IG91ckN1cnJlbmN5VG9UaGVpcnMgPSB7XG4gIHVzZDogXCJ1c2RcIixcbiAgYnJsOiBcImJybFwiXG59O1xuY29uc3QgZ2V0TG9hZGVkU3RyaXBlID0gYXN5bmMgKHB1Ymxpc2hhYmxlS2V5KSA9PiB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTA7IGkrKykge1xuICAgIGlmICghaXNTdHJpcGVKc1ByZXNlbnQoKSkge1xuICAgICAgYXdhaXQgc2xlZXAoNTAwKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFpc1N0cmlwZUpzUHJlc2VudCgpKSB7XG4gICAgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmlwZSBKUyBub3QgZm91bmQuYCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gbmV3IFN0cmlwZShwdWJsaXNoYWJsZUtleSk7XG4gIHJldHVybiBzdHJpcGU7XG59O1xuY29uc3QgY3JlYXRlU3RyaXBlRWxlbWVudHMgPSBhc3luYyAoc3RyaXBlUHViS2V5LCBlbGVtZW50c09wdGlvbnMpID0+IHtcbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKHN0cmlwZVB1YktleSk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IHN0cmlwZS5lbGVtZW50cyhlbGVtZW50c09wdGlvbnMpLFxuICAgIHN0cmlwZVxuICB9O1xufTtcbmNvbnN0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0ID0gYXN5bmMgKHN0cmlwZVB1YktleSwgdG90YWxBbW91bnRBdG9tLCBjdXJyZW5jeSwgaXNBbW91bnRQZW5kaW5nLCBpc0xpbmtPbmx5KSA9PiB7XG4gIGNvbnN0IHN0cmlwZSA9IGF3YWl0IGdldExvYWRlZFN0cmlwZShzdHJpcGVQdWJLZXkpO1xuICBjb25zdCBzdHJpcGVDdXJyZW5jeSA9IG91ckN1cnJlbmN5VG9UaGVpcnNbY3VycmVuY3kudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHN0cmlwZS5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IHN0cmlwZUN1cnJlbmN5LFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiB0b3RhbEFtb3VudEF0b20sXG4gICAgICBwZW5kaW5nOiBpc0Ftb3VudFBlbmRpbmdcbiAgICB9LFxuICAgIC8vIHJlcXVlc3RTaGlwcGluZzogdHJ1ZSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiB0cnVlLFxuICAgIGRpc2FibGVXYWxsZXRzOiBbXSBcbiAgfSk7XG4gIHJldHVybiBwYXltZW50UmVxdWVzdDtcbn07XG5jb25zdCBzbGVlcCA9ICh0aW1lb3V0TXMpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCB0aW1lb3V0TXMpO1xuICB9KTtcbn07XG5jb25zdCBpc1N0cmlwZUpzUHJlc2VudCA9ICgpID0+IHtcbiAgcmV0dXJuIFwiU3RyaXBlXCIgaW4gd2luZG93O1xufTtcbmNvbnN0IHdhaXRGb3JVc2VyVG9BZGRQYXltZW50TWV0aG9kID0gYXN5bmMgKHBheW1lbnRSZXF1ZXN0KSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHBheW1lbnRSZXF1ZXN0Lm9uKFwicGF5bWVudG1ldGhvZFwiLCBhc3luYyAoZXZ0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgICAgcmVzb2x2ZShldnQpO1xuICAgICAgfSk7XG4gICAgICBwYXltZW50UmVxdWVzdC5vbihcInRva2VuXCIsIGFzeW5jIChldnQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgZXZ0KTtcbiAgICAgIH0pO1xuICAgICAgcGF5bWVudFJlcXVlc3Qub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKSk7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZWplY3QoZSk7XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBjb25maXJtU3RyaXBlUHJQTSA9IGFzeW5jIChuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtKSA9PiB7XG4gIGlmICghbmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayB8fCAhbmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KG5leHRBY3Rpb25NZXRhZGF0YSl9YCk7XG4gIH1cbiAgY29uc3Qgc3RyaXBlID0gYXdhaXQgZ2V0TG9hZGVkU3RyaXBlKG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcGspO1xuICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNvbmZpcm1DYXJkU2V0dXAobmV4dEFjdGlvbk1ldGFkYXRhLmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogc3RyaXBlUG0ucGF5bWVudE1ldGhvZC5pZFxuICB9KTtcbiAgaWYgKGNvbmZpcm1SZXN1bHQuZXJyb3IpIHtcbiAgICBzdHJpcGVQbS5jb21wbGV0ZShcImZhaWxcIik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtjb25maXJtUmVzdWx0LmVycm9yLm1lc3NhZ2UgPz8gYHVua25vd25gfWApO1xuICB9IGVsc2Uge1xuICAgIHN0cmlwZVBtLmNvbXBsZXRlKFwic3VjY2Vzc1wiKTtcbiAgfVxuICByZXR1cm4gY29uZmlybVJlc3VsdDtcbn07XG5jb25zdCBsYXVuY2hTdHJpcGUzRFNEaWFsb2dGbG93ID0gYXN5bmMgKG5leHRBY3Rpb25NZXRhZGF0YSkgPT4ge1xuICBjb25zdCBzdHJpcGUgPSBhd2FpdCBnZXRMb2FkZWRTdHJpcGUobmV4dEFjdGlvbk1ldGFkYXRhLnN0cmlwZV9wayk7XG4gIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBzdHJpcGUuY29uZmlybUNhcmRTZXR1cChuZXh0QWN0aW9uTWV0YWRhdGEuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuZXh0QWN0aW9uTWV0YWRhdGEuc3RyaXBlX3BtX2lkXG4gIH0pO1xuICBjb25zdCByZXN1bHRTdGF0dXMgPSBjb25maXJtUmVzdWx0LnNldHVwSW50ZW50Py5zdGF0dXM7XG4gIGlmIChyZXN1bHRTdGF0dXMgPT09IFwic3VjY2VlZGVkXCIpIHtcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIG5leHRBY3Rpb25NZXRhZGF0YS5zdHJpcGVfcG1faWQpO1xuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gU2V0dXAgaW50ZW50IGNyZWF0ZWQ6XCIsIGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQpO1xuICB9IGVsc2UgaWYgKHJlc3VsdFN0YXR1cyA9PT0gXCJjYW5jZWxlZFwiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlgKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHtjb25maXJtUmVzdWx0LmVycm9yPy5tZXNzYWdlID8/IGNvbmZpcm1SZXN1bHQuc2V0dXBJbnRlbnQ/Lmxhc3Rfc2V0dXBfZXJyb3I/Lm1lc3NhZ2UgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0gPSAoZm9ybURpdiwgaW5pdGlhbERpY3QpID0+IHtcbiAgY29uc3QgaW5jbHVkZWRJbnB1dHMgPSBBcnJheS5mcm9tKGZvcm1EaXYucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKTtcbiAgY29uc3QgZXh0cmFEYXRhID0gaW5jbHVkZWRJbnB1dHMucmVkdWNlKChhY2MsIGlucHV0KSA9PiB7XG4gICAgY29uc3Qga2V5ID0gaW5wdXQuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICAgIGlmICgha2V5KSByZXR1cm4gYWNjO1xuICAgIHJldHVybiB7IC4uLmFjYywgW2tleV06IGlucHV0LnZhbHVlIH07XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGV4dHJhRGF0YTtcbn07XG5jb25zdCBwYXJzZUV2ZW50UGF5bG9hZCA9IChldmVudERhdGEpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gRWxlbWVudEV2ZW50LnBhcnNlKGV2ZW50RGF0YSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgZXZlbnREYXRhLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QgPSBhc3luYyAob2JqKSA9PiB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8ICFvYmopIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaW5nID0geyB0eXBlOiBcInBpbmdcIiB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9iai5zZW5kKHBpbmcpO1xuICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KHJlc3VsdCl9YCk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpgLCBlKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5jb25zdCBpc1Jlc3VsdFZhbGlkID0gKG9iaiwgaXNWYWxpZCkgPT4ge1xuICByZXR1cm4gISFvYmogJiYgaXNWYWxpZDtcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHoubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56LnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IENERVJlc3BvbnNlRXJyb3IgPSB6Lm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6LmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogei5zdHJpbmcoKSxcbiAgaGVhZGVyczogei5yZWNvcmQoei5zdHJpbmcoKSwgei5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56LmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHouc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogei5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHoubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0gei5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHouc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3Ioei5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6Lm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKTtcbmNvbnN0IEJyYW5kID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3Ioei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0gei5vYmplY3Qoe1xuICBxdWFudGl0eTogei5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0gei5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6Lm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6LmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6Lm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6Lm51bWJlcigpLFxuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6LnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHoub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjdXJyZW5jeTogei5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6LmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKSxcbiAgbGluZXM6IHouYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogei5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6LmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0gei5vYmplY3Qoe1xuICBjcmVhdGVkOiB6LmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogei5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHouYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHoub2JqZWN0KHtcbiAgc3RhdHVzOiB6LmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogei5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3Ioei5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHouYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogei5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHoubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6LmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0gei5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHoubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6Lm51bGxhYmxlKHoudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgei5vYmplY3Qoe1xuICAgIG1vZGU6IHouZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogei5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6Lm9iamVjdCh7XG4gIHN0YXR1czogei5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHoubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xuei51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56Lm9iamVjdCh7XG4gIGxvZ286IHouc3RyaW5nKCksXG4gIGljb246IHouc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHouc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogei5zdHJpbmcoKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6LmFycmF5KHouc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogei5zdHJpbmcoKVxufSk7XG56Lm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogei5zdHJpbmcoKSxcbiAgcG1faWQ6IHouc3RyaW5nKClcbn0pO1xuei5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHouc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHouYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGN1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogei5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogei5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogei5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6Lm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6LmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6LnN0cmluZygpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0UmVzcG9uc2UgPSB6Lm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6LnN0cmluZygpXG59KTtcbnoub2JqZWN0KHtcbiAgaWQ6IHouc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6Lm9iamVjdCh7XG4gIHR5cGU6IHouc3RyaW5nKCksXG4gIGxvYzogei5hcnJheSh6LnN0cmluZygpKSxcbiAgbXNnOiB6LnN0cmluZygpLFxuICB1cmw6IHouc3RyaW5nKClcbn0pO1xuei5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG5jb25zdCBOZXdDdXN0b21lckZpZWxkcyA9IHoub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6LnJlY29yZCh6LnN0cmluZygpLCB6LmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSA9IHoub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHoucmVjb3JkKHouc3RyaW5nKCksIHouYW55KCkpKVxufSk7XG56Lm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHouc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xuY29uc3QgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpXG59KTtcbnoub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnoub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogei5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbmNvbnN0IFN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlID0gei5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHouYXJyYXkoei5yZWNvcmQoei5zdHJpbmcoKSwgei5hbnkoKSkpLFxuICBjY19wbV9pZDogei5zdHJpbmcoKVxufSk7XG56LnJlY29yZCh6LmFueSgpKTtcblxuY29uc3Qgc3VtID0gKGFycikgPT4ge1xuICByZXR1cm4gYXJyLnJlZHVjZSgoYSwgYikgPT4gYSArIGIsIDApO1xufTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMkMSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbnZhciBDdXN0b21FcnJvciA9IGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzJDEoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufShFcnJvcik7XG5cbmNsYXNzIENkZUVycm9yIGV4dGVuZHMgQ3VzdG9tRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIGNvbnN0IGZyaWVuZGx5TWVzc2FnZSA9IGAke3Jlc3BvbnNlLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihmcmllbmRseU1lc3NhZ2UpO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgcXVlcnlDREUgPSBhc3luYyAoY2RlQ29ubiwgZGF0YSwgcmVzcG9uc2VTY2hlbWEpID0+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjZGVDb25uLnNlbmQoZGF0YSk7XG4gIGlmIChpc0NERVJlc3BvbnNlRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgdGhyb3cgbmV3IENkZUVycm9yKHJlc3BvbnNlKTtcbiAgfVxuICBpZiAoIWNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hKHJlc3BvbnNlLCByZXNwb25zZVNjaGVtYSkpIHtcbiAgICBjb25zdCByZXN1bHQgPSByZXNwb25zZVNjaGVtYS5zYWZlUGFyc2UocmVzcG9uc2UpO1xuICAgIGlmIChyZXN1bHQuc3VjY2VzcykgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKTtcbiAgICBjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCByZXNwb25zZVNjaGVtYSwgXCJBY3R1YWw6XCIsIHJlc3BvbnNlKTtcbiAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlO1xufTtcbmNvbnN0IGNoZWNrSWZDb25mb3Jtc1RvU2NoZW1hID0gKHZhbHVlLCBzY2hlbWEpID0+IHtcbiAgcmV0dXJuIHNjaGVtYS5zYWZlUGFyc2UodmFsdWUpLnN1Y2Nlc3M7XG59O1xuY29uc3QgaXNDREVSZXNwb25zZUVycm9yID0gKHJlc3BvbnNlKSA9PiB7XG4gIHJldHVybiBDREVSZXNwb25zZUVycm9yLnNhZmVQYXJzZShyZXNwb25zZSkuc3VjY2Vzcztcbn07XG5jb25zdCBnZXRDaGVja291dFByZXZpZXcgPSBhc3luYyAoY2RlQ29ubiwgcmVxdWVzdCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IHJlcXVlc3QgfSwgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpO1xufTtcbmNvbnN0IGdldFByZWZpbGwgPSBhc3luYyAoY2RlQ29ubikgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFBheW1lbnRGb3JtUHJlZmlsbCk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50RmxvdyA9IGFzeW5jIChjZGVDb25uLCBwYXlsb2FkKSA9PiB7XG4gIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInN0YXJ0X3BheW1lbnRfZmxvd19mb3JfY2NcIiwgcGF5bG9hZCB9LCBTdGFydFBheW1lbnRGbG93Rm9yQ0NSZXNwb25zZSk7XG59O1xuY29uc3Qgc3RhcnRQYXltZW50Rmxvd0ZvclBSID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQgfSwgU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbn07XG5jb25zdCBjb25maXJtUGF5bWVudEZsb3cgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQgfSwgQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UpO1xufTtcbmNvbnN0IGZpbmFsaXplU2V0dXBQYXltZW50TWV0aG9kID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICByZXR1cm4gYXdhaXQgcXVlcnlDREUoXG4gICAgY2RlQ29ubixcbiAgICB7IHR5cGU6IFwiY2hlY2tfaWZfcG9wdXBfd2luZG93X3ZlcmlmaWVkXCIsIHBheWxvYWQgfSxcbiAgICBDaGVja0lmUG9wdXBXaW5kb3dWZXJpZmllZFJlc3BvbnNlXG4gICk7XG59O1xuY29uc3QgZ2V0Q2hlY2tvdXRWYWx1ZSA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKSA9PiB7XG4gIGNvbnN0IGNoZWNrb3V0UHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlldyhjZGVDb25uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBzZWN1cmVUb2tlbixcbiAgICBwcm9tb3Rpb25fY29kZTogcHJvbW9Db2RlXG4gIH0pO1xuICBjb25zdCBjdXJyZW5jaWVzID0gbmV3IFNldChjaGVja291dFByZXZpZXcucHJldmlldy5pbnZvaWNlcy5tYXAoKGludikgPT4gaW52LmN1cnJlbmN5KSk7XG4gIGlmIChjdXJyZW5jaWVzLnNpemUgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtjdXJyZW5jaWVzLnNpemV9YCk7XG4gIH1cbiAgY29uc3QgY3VycmVuY3kgPSBjdXJyZW5jaWVzLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiO1xuICBjb25zdCBhbW91bnRBdG9tID0gc3VtKGNoZWNrb3V0UHJldmlldy5wcmV2aWV3Lmludm9pY2VzLm1hcCgoaW52KSA9PiBpbnYucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3ksXG4gICAgYW1vdW50QXRvbVxuICB9O1xufTtcbmNvbnN0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudCA9IGFzeW5jIChjZGVDb25uLCBzZWN1cmVUb2tlbiwgaXNTZXR1cE1vZGUsIHByb21vQ29kZSkgPT4ge1xuICBpZiAoaXNTZXR1cE1vZGUpIHtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB9IGVsc2Uge1xuICAgIHByb21vQ29kZSA9ICFwcm9tb0NvZGUgPyB2b2lkIDAgOiBwcm9tb0NvZGU7XG4gICAgY29uc3QgY2hlY2tvdXRQcmV2aWV3ID0gYXdhaXQgZ2V0Q2hlY2tvdXRWYWx1ZShjZGVDb25uLCBzZWN1cmVUb2tlbiwgcHJvbW9Db2RlKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBjaGVja291dFByZXZpZXcuYW1vdW50QXRvbSwgY3VycmVuY3k6IGNoZWNrb3V0UHJldmlldy5jdXJyZW5jeSB9O1xuICB9XG59O1xuY29uc3QgdG9rZW5pemVDYXJkT25BbGxDb25uZWN0aW9ucyA9IGFzeW5jIChhbGxDZGVDb25uZWN0aW9ucywgcGF5bG9hZCkgPT4ge1xuICBpZiAoYWxsQ2RlQ29ubmVjdGlvbnMuc2l6ZSA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgfVxuICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGFsbENkZUNvbm5lY3Rpb25zLnZhbHVlcygpKS5tYXAoXG4gICAgICAoY2RlQ29ubikgPT4gcXVlcnlDREUoY2RlQ29ubiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZCB9LCBUb2tlbml6ZUNhcmRSZXNwb25zZSlcbiAgICApXG4gICk7XG4gIHJldHVybiByZXNwb25zZXM7XG59O1xuY29uc3QgY2hlY2tvdXRDYXJkRWxlbWVudHMgPSBhc3luYyAoY2RlQ29ubiwgcGF5bG9hZCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBxdWVyeUNERShjZGVDb25uLCB7IHR5cGU6IFwiY2hlY2tvdXRfY2FyZF9lbGVtZW50c1wiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZXJyb3IsIEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5jb25zdCBzZXR1cENoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkIH0sIFNldHVwQ2hlY2tvdXRSZXNwb25zZSk7XG59O1xuY29uc3QgcGVyZm9ybUNoZWNrb3V0ID0gYXN5bmMgKGNkZUNvbm4sIHBheWxvYWQpID0+IHtcbiAgcmV0dXJuIGF3YWl0IHF1ZXJ5Q0RFKGNkZUNvbm4sIHsgdHlwZTogXCJjaGVja291dFwiLCBwYXlsb2FkIH0sIENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKTtcbn07XG5jb25zdCBDREVfUE9MTElOR19JTlRFUlZBTCA9IDFlMztcbmNvbnN0IHBpbmdDZGVGb3IzZHNTdGF0dXMgPSBhc3luYyAoaWZyYW1lLCBjaGlsZE9yaWdpbikgPT4ge1xuICBjb25zb2xlLmxvZyhjaGlsZE9yaWdpbik7XG4gIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lLFxuICAgIGRlYnVnOiB0cnVlLFxuICAgIHRpbWVvdXQ6IENERV9QT0xMSU5HX0lOVEVSVkFMLFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KTtcbiAgY29uc3QgY29ubmVjdGlvbk9iaiA9IGF3YWl0IGNvbm5lY3Rpb24ucHJvbWlzZTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcXVlcnlDREUoY29ubmVjdGlvbk9iaiwgeyB0eXBlOiBcInBpbmctM2RzLXN0YXR1c1wiIH0sIFBpbmczRFNTdGF0dXNSZXNwb25zZSk7XG4gIGNvbnNvbGUubG9nKFwi8J+foiBDREUgY29ubmVjdGlvbiBzdWNjZXNzZnVsISBTdG9wcGluZyBwb2xsaW5nLi4uIFJlc3VsdDpcIiwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmZ1bmN0aW9uIGFzc2VydE5ldmVyKHZhbHVlKSB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIGNhc2U6ICR7dmFsdWV9YCk7XG59XG5cbmNvbnN0IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzID0gKHNpbXBsZU9qc0Zsb3cpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdGFydGVkPy4oKTtcbiAgICAgIGNvbnN0IGZsb3dSZXN1bHQgPSBhd2FpdCBzaW1wbGVPanNGbG93KHBhcmFtcyk7XG4gICAgICBpZiAoZmxvd1Jlc3VsdC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgcGFyYW1zLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhmbG93UmVzdWx0LnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgICB9IGVsc2UgaWYgKGZsb3dSZXN1bHQubW9kZSA9PT0gXCJjaGVja291dFwiKSB7XG4gICAgICAgIHBhcmFtcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0U3VjY2VzcyhcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgICAgZmxvd1Jlc3VsdC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgICBmbG93UmVzdWx0LnJlc3VsdC5jdXN0b21lcl9pZFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtmbG93UmVzdWx0fWApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBwYXJhbXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBhZGRFcnJvckNhdGNoZXJGb3JJbml0ID0gKGluaXQpID0+IHtcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXMpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IGluaXQocGFyYW1zKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJpbml0LWVycm9yLWNhdGNoZXJcIik7XG4gICAgICBlcnJfXyhlcnJvcik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UsIHJlYXNvbjogZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSB9O1xuICAgIH1cbiAgfTtcbn07XG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtjaGFsay5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke2NoYWxrLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7Y2hhbGsucmVkLmJvbGQoXCJvanMvXCIpfSR7Y2hhbGsuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyRjLCBlcnJfXzogZXJyX18kYiB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJjb21tb25cIik7XG5jb25zdCBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBwYXltZW50IG1ldGhvZCwgZ290ICR7cmVzcG9uc2UucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4geyBwYXltZW50X21ldGhvZF9pZDogcmVzcG9uc2UucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59O1xuY29uc3QgZmluZENwbU1hdGNoaW5nVHlwZSA9IChhbGxDUE1zLCB6b2RNb2RlbCkgPT4ge1xuICBjb25zdCBjcG0gPSBhbGxDUE1zLmZpbmQoKGNwbTIpID0+IHpvZE1vZGVsLnNhZmVQYXJzZShjcG0yKS5zdWNjZXNzKTtcbiAgaWYgKCFjcG0pIHtcbiAgICBlcnJfXyRiKGBObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpgLCBhbGxDUE1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgZm9yIG1vZGVsYCk7XG4gIH1cbiAgcmV0dXJuIHpvZE1vZGVsLnBhcnNlKGNwbSk7XG59O1xuY29uc3QgY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybSA9IChmaWVsZHMpID0+IHtcbiAgcmV0dXJuIHtcbiAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGZpZWxkcy5lbWFpbCxcbiAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgemlwX2NvZGU6IGZpZWxkcy56aXBDb2RlLFxuICAgICAgY291bnRyeTogZmllbGRzLmNvdW50cnlcbiAgICB9LFxuICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBmaWVsZHMuZmlyc3ROYW1lLFxuICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGZpZWxkcy5sYXN0TmFtZVxuICB9O1xufTtcbmNvbnN0IHBlcmZvcm1TaW1wbGVDaGVja291dE9yU2V0dXAgPSBhc3luYyAobG9nUHJlZml4LCBhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFBheW1lbnRNZXRob2QsIHJlcXVpcmVkRm9ybUZpZWxkcywgY29uZmlybVJlc3VsdCkgPT4ge1xuICBjb25zdCB7IGxvZ19fOiBsb2dfXzIgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKGxvZ1ByZWZpeCk7XG4gIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICBjb25zdCBjcmVhdGVkUGF5bWVudE1ldGhvZCA9IHBhcnNlQ29uZmlybVBheW1lbnRGbG93UmVzcG9uc2UoY29uZmlybVJlc3VsdCk7XG4gIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgIGxvZ19fMihgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLmApO1xuICAgIGNvbnN0IHNldHVwUmVzdWx0ID0gYXdhaXQgZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgcG1faWQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkXG4gICAgfSk7XG4gICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHNldHVwUmVzdWx0IH07XG4gIH0gZWxzZSB7XG4gICAgbG9nX18yKGBEb2luZyBjaGVja291dC4uLmApO1xuICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICB9LFxuICAgICAgY3VzdG9tZXJfZW1haWw6IHJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IHJlcXVpcmVkRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgY3VzdG9tZXJfY291bnRyeTogcmVxdWlyZWRGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgIHByb21vdGlvbl9jb2RlOiByZXF1aXJlZEZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgIGxpbmVfaXRlbXM6IHByZWZpbGwubGluZV9pdGVtcyxcbiAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogY3JlYXRlZFBheW1lbnRNZXRob2QucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gIH1cbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJGIsIGVycl9fOiBlcnJfXyRhIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDID0gKG5vbkNkZUZvcm1JbnB1dHMsIG9uVmFsaWRhdGlvbkVycm9yKSA9PiB7XG4gIGNvbnN0IHBheWxvYWQgPSBSZXF1aXJlZEZvcm1GaWVsZHMuc2FmZVBhcnNlKG5vbkNkZUZvcm1JbnB1dHMpO1xuICBpZiAoIXBheWxvYWQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZvcm1hdHRlZCA9IHBheWxvYWQuZXJyb3IuZm9ybWF0KCk7XG4gICAgY29uc3QgaXNzdWVzID0gZXh0cmFjdElzc3Vlc1BlckZpZWxkKGZvcm1hdHRlZCk7XG4gICAgZm9yIChjb25zdCBbZmllbGROYW1lLCBlcnJvcnNdIG9mIE9iamVjdC5lbnRyaWVzKGlzc3VlcykpIHtcbiAgICAgIG9uVmFsaWRhdGlvbkVycm9yKGZpZWxkTmFtZSwgZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgIH1cbiAgICBlcnJfXyRhKGBHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc2AsIGlzc3Vlcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gIH1cbiAgcmV0dXJuIHBheWxvYWQuZGF0YTtcbn07XG5jb25zdCB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHMgPSAodG9rZW5pemVSZXN1bHRzLCBvblZhbGlkYXRpb25FcnJvcikgPT4ge1xuICBmb3IgKGNvbnN0IHRva2VuaXplUmVzdWx0IG9mIHRva2VuaXplUmVzdWx0cykge1xuICAgIGlmICh0b2tlbml6ZVJlc3VsdC5zdWNjZXNzID09PSBmYWxzZSkge1xuICAgICAgdG9rZW5pemVSZXN1bHQuZXJyb3JzLmZvckVhY2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEFsbEZpZWxkTmFtZXMuc2FmZVBhcnNlKGVycm9yLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFwYXJzZWQuc3VjY2Vzcykge1xuICAgICAgICAgIGVycl9fJGEoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtlcnJvci5lbGVtZW50VHlwZX0uIEVycm9yIG9iamVjdDpgLCBlcnJvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmllbGROYW1lID0gcGFyc2VkLmRhdGE7XG4gICAgICAgICAgb25WYWxpZGF0aW9uRXJyb3IoZmllbGROYW1lLCBlcnJvci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJGIoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KHRva2VuaXplUmVzdWx0LmVycm9ycyl9YCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgT0pTX1NUUklQRV9MSU5LX0JUTl9JRCA9IFwib2pzLXN0cmlwZS1saW5rLWJ0blwiO1xuY29uc3QgeyBsb2dfXzogbG9nX18kYSwgZXJyX186IGVycl9fJDkgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwic3RyaXBlLWxpbmtcIik7XG5jb25zdCBTdHJpcGVMaW5rQ3BtID0gei5vYmplY3Qoe1xuICBwcm92aWRlcjogei5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6LnN0cmluZygpXG4gIH0pXG59KTtcbmNvbnN0IFN0cmlwZUxpbmtSZXF1aXJlZFVzZXJBY3Rpb25zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogei5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBpbml0U3RyaXBlTGlua0Zsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBpbml0UGFyYW1zID0gY29udGV4dC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgbG9nX18kYShgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLmApO1xuICAgIGNvbnN0IHN0cmlwZUxpbmtDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlTGlua0NwbSk7XG4gICAgbG9nX18kYShgU3RhcnRpbmcgc3RyaXBlIGxpbmsgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyRhKGBDcmVhdGluZyBzdHJpcGUgZWxlbWVudHMuLi5gKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCB7IGVsZW1lbnRzLCBzdHJpcGUgfSA9IGF3YWl0IGNyZWF0ZVN0cmlwZUVsZW1lbnRzKHN0cmlwZUxpbmtDcG0ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogaW5pdGlhbFByZXZpZXcuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIGxvZ19fJGEoYENyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5gKTtcbiAgICBjb25zdCBleHByZXNzQ2hlY2tvdXRFbGVtZW50ID0gZWxlbWVudHMuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogaW5pdFBhcmFtcz8uYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG1vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC5tb3VudChgIyR7T0pTX1NUUklQRV9MSU5LX0JUTl9JRH1gKTtcbiAgICB9O1xuICAgIGNvbnN0IGRpc21vdW50QnV0dG9uID0gKCkgPT4ge1xuICAgICAgZXhwcmVzc0NoZWNrb3V0RWxlbWVudC51bm1vdW50KCk7XG4gICAgfTtcbiAgICBpZiAoaW5pdFBhcmFtcz8uZG9Ob3RNb3VudE9uSW5pdCkge1xuICAgICAgbG9nX18kYShgTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2dfXyRhKGBNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5gKTtcbiAgICAgIG1vdW50QnV0dG9uKCk7XG4gICAgfVxuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjbGlja1wiLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgIGxvZ19fJGEoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKTtcbiAgICAgIGlmIChpbml0UGFyYW1zPy5vdmVycmlkZUxpbmtTdWJtaXQpIHtcbiAgICAgICAgY29uc3Qgc2hvdWxkU3VibWl0ID0gYXdhaXQgaW5pdFBhcmFtcy5vdmVycmlkZUxpbmtTdWJtaXQoKTtcbiAgICAgICAgaWYgKCFzaG91bGRTdWJtaXQpIHtcbiAgICAgICAgICBsb2dfXyRhKFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQucmVzb2x2ZSgpO1xuICAgIH0pO1xuICAgIGV4cHJlc3NDaGVja291dEVsZW1lbnQub24oXCJjb25maXJtXCIsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgbG9nX18kYShcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3RyaXBlLmNyZWF0ZVBheW1lbnRNZXRob2Qoe1xuICAgICAgICBlbGVtZW50cyxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgYmlsbGluZ19kZXRhaWxzOiBldmVudC5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChyZXN1bHQuZXJyb3IpIHtcbiAgICAgICAgZXJyX18kOShcImVycm9yXCIsIHJlc3VsdC5lcnJvcik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihyZXN1bHQuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyRhKFwicGF5bWVudE1ldGhvZFwiLCByZXN1bHQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIE9qc0Zsb3dzLnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogc3RyaXBlTGlua0NwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcmVzdWx0LnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiB0cnVlIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbixcbiAgICAgICAgZGlzbW91bnRCdXR0b24sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBnZXRFbGVtZW50QnlJZEFzeW5jKE9KU19TVFJJUEVfTElOS19CVE5fSUQpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZUxpbmtGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kYShgUnVubmluZyBTdHJpcGUgTGluayBmbG93Li4uYCk7XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBsb2dfXyRhKGBNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uYCk7XG4gICAgY29uc3QgbWVyZ2VkSW5wdXRzID0gZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTShub25DZGVGb3JtSW5wdXRzLCBjdXN0b21QYXJhbXMuc3RyaXBlUE0pO1xuICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBsb2dfXyRhKGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogY3VzdG9tUGFyYW1zLnN0cmlwZVBNLmlkLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBsb2dfXyRhKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gU3RyaXBlTGlua1JlcXVpcmVkVXNlckFjdGlvbnMucGFyc2Uoc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucyk7XG4gICAgY29uc3Qgb3VyRXhpc3RpbmdQbUlkID0gbmV4dEFjdGlvbk1ldGFkYXRhWzBdLm91cl9leGlzdGluZ19wbV9pZDtcbiAgICBjb25zdCBwcmVmaWxsID0gYXdhaXQgZ2V0UHJlZmlsbChhbnlDZGVDb25uZWN0aW9uKTtcbiAgICBpZiAocHJlZmlsbC5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIHBheW1lbnQgc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBvdXJFeGlzdGluZ1BtSWRcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJGEoYERvaW5nIGNoZWNrb3V0Li4uYCk7XG4gICAgICBjb25zdCBjaGVja291dFJlcXVlc3QgPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogcHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogcHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2RcbiAgICAgIH07XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY2hlY2tvdXRSZXF1ZXN0KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgfVxuICB9XG4pO1xuY29uc3QgZmlsbEVtcHR5Rm9ybUlucHV0c1dpdGhTdHJpcGVQTSA9IChmb3JtSW5wdXRzLCBzdHJpcGVQbSkgPT4ge1xuICBjb25zdCBpbnB1dHMgPSB7IC4uLmZvcm1JbnB1dHMgfTtcbiAgY29uc3QgW3BheWVyRmlyc3ROYW1lLCAuLi5wYXllckxhc3ROYW1lUGFydHNdID0gc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLm5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHN0cmlwZVBtW1wibGlua1wiXT8uZW1haWwgfHwgc3RyaXBlUG0uYmlsbGluZ19kZXRhaWxzLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gPSBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8ucG9zdGFsX2NvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBzdHJpcGVQbS5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcz8uY291bnRyeSB8fCBcIlVTXCI7XG4gIGxvZ19fJGEoYEZpbmFsIGZvcm0gaW5wdXRzOmAsIGlucHV0cyk7XG4gIHJldHVybiBpbnB1dHM7XG59O1xuY29uc3QgZ2V0RWxlbWVudEJ5SWRBc3luYyA9IChpZCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgY29uc3QgZ2V0RWxlbWVudCA9ICgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXNvbHZlKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZ2V0RWxlbWVudCk7XG4gICAgfVxuICB9O1xuICBnZXRFbGVtZW50KCk7XG59KTtcblxuY29uc3Qgc3R5bGVzID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIjtcblxuY29uc3QgY3JlYXRlQW5kT3BlbkZyYW1lID0gKHVybCkgPT4ge1xuICBjb25zdCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgdGVtcGxhdGUuaW5uZXJIVE1MID0gYFxuICAgIDxzdHlsZT5cbiAgICAgICR7c3R5bGVzfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3VybH1cIiBjbGFzcz1cImZyYW1lXCIgaWQ9XCJ0aHJlZS1kcy1pZnJhbWVcIiB0aXRsZT1cIjNEIFNlY3VyZSB2ZXJpZmljYXRpb25cIiBhbGxvdz1cInBheW1lbnRcIj48L2lmcmFtZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICBgO1xuICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSk7XG4gIHNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQodGVtcGxhdGUuY29udGVudC5jbG9uZU5vZGUodHJ1ZSkpO1xuICBjb25zdCBpZnJhbWUgPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpO1xuICBjb25zdCBjYW5jZWxCdXR0b24gPSBzaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTtcbiAgcmV0dXJuIHsgaG9zdCwgaWZyYW1lLCBjYW5jZWxCdXR0b24gfTtcbn07XG5cbmZ1bmN0aW9uIHN0YXJ0UG9sbGluZyhpZnJhbWUsIG9uU3VjY2VzcywgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgaGFuZGxlUG9sbGluZyA9IGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHVzID0gYXdhaXQgcGluZ0NkZUZvcjNkc1N0YXR1cyhpZnJhbWUsIGNoaWxkT3JpZ2luKTtcbiAgICAgIGlmIChzdGF0dXMpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChwb2xsaW5nSW50ZXJ2YWwpO1xuICAgICAgICBvblN1Y2Nlc3Moc3RhdHVzKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfTtcbiAgaGFuZGxlUG9sbGluZygpO1xuICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChoYW5kbGVQb2xsaW5nLCBDREVfUE9MTElOR19JTlRFUlZBTCk7XG4gIHJldHVybiBwb2xsaW5nSW50ZXJ2YWw7XG59XG5mdW5jdGlvbiBoYW5kbGVFdmVudHMoe1xuICBlbGVtZW50cyxcbiAgcG9sbGluZ0ludGVydmFsLFxuICByZXNvbHZlXG59KSB7XG4gIGNvbnN0IGhhbmRsZUNhbmNlbCA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHBvbGxpbmdJbnRlcnZhbCk7XG4gICAgZWxlbWVudHMuaG9zdC5yZW1vdmUoKTtcbiAgICByZXNvbHZlKHsgc3RhdHVzOiBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCB9KTtcbiAgfTtcbiAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSAoKSA9PiB7XG4gICAgZWxlbWVudHMuY2FuY2VsQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoYW5kbGVDYW5jZWwpO1xuICB9O1xuICByZXR1cm4gY2xlYW51cEV2ZW50TGlzdGVuZXJzO1xufVxuYXN5bmMgZnVuY3Rpb24gc3RhcnQzZHNWZXJpZmljYXRpb24ocGFyYW1zKSB7XG4gIGNvbnN0IHsgdXJsLCBiYXNlVXJsIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVsZW1lbnRzID0gY3JlYXRlQW5kT3BlbkZyYW1lKHVybCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IG9uU3VjY2VzcyA9IChzdGF0dXMpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlbGVtZW50cy5ob3N0LnJlbW92ZSgpO1xuICAgICAgfSwgMWUzKTtcbiAgICAgIHJlc29sdmUoc3RhdHVzKTtcbiAgICAgIGNsZWFudXBFdmVudExpc3RlbmVycz8uKCk7XG4gICAgfTtcbiAgICBjb25zdCBwb2xsaW5nSW50ZXJ2YWwgPSBzdGFydFBvbGxpbmcoZWxlbWVudHMuaWZyYW1lLCBvblN1Y2Nlc3MsIG5ldyBVUkwoYmFzZVVybCkub3JpZ2luKTtcbiAgICBjb25zdCBjbGVhbnVwRXZlbnRMaXN0ZW5lcnMgPSBoYW5kbGVFdmVudHMoe1xuICAgICAgZWxlbWVudHMsXG4gICAgICBwb2xsaW5nSW50ZXJ2YWwsXG4gICAgICByZXNvbHZlXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3Qgc3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QgPSBhc3luYyAocGFyYW1zKSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHBhcmFtcyk7XG4gIGlmIChyZXN1bHQuc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9IGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgIT09IFRocmVlRFNTdGF0dXMuU1VDQ0VTUykge1xuICAgIGFzc2VydE5ldmVyKHJlc3VsdC5zdGF0dXMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgaHJlZjogcmVzdWx0LmhyZWZcbiAgfTtcbn07XG5jb25zdCBvcGVuUG9wdXBXaW5kb3cgPSAocG9wdXBOYW1lLCB1cmwpID0+IHtcbiAgY29uc3QgcG9wdXBXaW5kb3cgPSB3aW5kb3cub3Blbih1cmwsIFwiX2JsYW5rXCIpO1xuICBpZiAoIXBvcHVwV2luZG93KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3BvcHVwTmFtZX0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgfVxuICByZXR1cm4gcG9wdXBXaW5kb3c7XG59O1xuY29uc3Qgc3RhcnRQb3B1cFdpbmRvd1ZlcmlmaWNhdGlvblN0cmljdCA9IGFzeW5jIChwb3B1cE5hbWUsIGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4sIHVybCkgPT4ge1xuICBjb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInBvcHVwLXZlcmlmeVwiKTtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBwb3B1cFdpbmRvdyA9IG9wZW5Qb3B1cFdpbmRvdyhwb3B1cE5hbWUsIHVybCk7XG4gICAgY29uc3QgcG9sbGluZyA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZlcmlmeVJlc3VsdCA9IGF3YWl0IGNoZWNrSWZQb3B1cFdpbmRvd1ZlcmlmaWVkKGNkZUNvbm4sIGV4cGVjdGVkVmVyaWZ5VG9rZW4pO1xuICAgICAgICBpZiAodmVyaWZ5UmVzdWx0LnByZXNlbnQpIHtcbiAgICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICAgIHBvcHVwV2luZG93LmNsb3NlKCk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGhyZWY6IHZlcmlmeVJlc3VsdC5ocmVmIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBvcHVwV2luZG93LmNsb3NlZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtwb3B1cE5hbWV9IHBheW1lbnQgY2FuY2VsbGVkYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycl9fKGdldEVycm9yTWVzc2FnZShlcnJvcikpO1xuICAgICAgICBjbGVhckludGVydmFsKHBvbGxpbmcpO1xuICAgICAgICByZWplY3QoZ2V0RXJyb3JNZXNzYWdlKGVycm9yKSk7XG4gICAgICB9XG4gICAgfSwgMWUzKTtcbiAgfSk7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ5LCBlcnJfXzogZXJyX18kOCB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtY2NcIik7XG5jb25zdCBQb2NreXQzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogei5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMkMSA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBwYXJzZVJlc3VsdCA9IFBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzLnNhZmVQYXJzZShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGlmICghcGFyc2VSZXN1bHQuc3VjY2Vzcykge1xuICAgIGNvbnN0IGZyaWVuZGx5RXJyID0gXCJVbmFibGUgdG8gcHJvY2VzcyB5b3VyIGNyZWRpdCBjYXJkLiBQbGVhc2UgY29udGFjdCBzdXBwb3J0IGZvciBhc3Npc3RhbmNlLlwiO1xuICAgIGNvbnN0IGRldkVyciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeShlcnJvclJlc3BvbnNlSGVhZGVycyl9YDtcbiAgICBlcnJfXyQ4KGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICByZXR1cm4gcGFyc2VSZXN1bHQuZGF0YTtcbn07XG5jb25zdCBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZiA9IChocmVmKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmF1bHRJZCA9IG5ldyBVUkwoaHJlZiA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXZhdWx0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyQ5KGAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtWYXVsdCBJRDogJHt2YXVsdElkfV1gKTtcbiAgICByZXR1cm4gdmF1bHRJZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zdCBlcnJNc2cgPSBgRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LmA7XG4gICAgZXJyX18kOChlcnJNc2csIGBSZXN1bHRpbmcgVVJMOiAke2hyZWZ9LlxuRXJyb3I6ICR7Z2V0RXJyb3JNZXNzYWdlKGVycm9yKX1gKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXJyTXNnKTtcbiAgfVxufTtcbmNvbnN0IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyA9IChlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICByZXR1cm4gZXJyb3JSZXNwb25zZUhlYWRlcnM/LltcIm9wLXBvY2t5dC0zZHMtdXJsXCJdICE9PSB2b2lkIDA7XG59O1xuY29uc3QgcnVuUG9ja3l0M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMkMShlcnJvclJlc3BvbnNlSGVhZGVycyk7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uU3RyaWN0KHsgdXJsOiBoZWFkZXJzW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmwgfSk7XG4gIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgZXh0cmFNZXRhZGF0YUZvckNoZWNrb3V0ID0ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogdmF1bHRJZCxcbiAgICAgIHRyYW5zYWN0aW9uX25vOiBoZWFkZXJzW1wib3AtcG9ja3l0LXR4bi1ub1wiXSxcbiAgICAgIHJlZmVyZW5jZV9ubzogaGVhZGVyc1tcIm9wLXBvY2t5dC1yZWYtbm9cIl1cbiAgICB9XG4gIH07XG4gIHJldHVybiBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ4LCBlcnJfXzogZXJyX18kNyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJhaXJ3YWxsZXgtY2NcIik7XG5jb25zdCBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycyA9IHoub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6LnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHouc3RyaW5nKClcbn0pO1xuY29uc3QgcGFyc2VSZXNwb25zZUhlYWRlcnMgPSAoZXJyb3JSZXNwb25zZUhlYWRlcnMpID0+IHtcbiAgY29uc3QgcGFyc2VSZXN1bHQgPSBBaXJ3YWxsZXgzZHNFcnJvclJlc3BvbnNlSGVhZGVycy5zYWZlUGFyc2UoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBpZiAoIXBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3JSZXNwb25zZUhlYWRlcnMpfWA7XG4gICAgZXJyX18kNyhkZXZFcnIpO1xuICAgIHRocm93IG5ldyBFcnJvcihmcmllbmRseUVycik7XG4gIH1cbiAgcmV0dXJuIHBhcnNlUmVzdWx0LmRhdGE7XG59O1xuY29uc3QgY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzID0gKGVycm9yUmVzcG9uc2VIZWFkZXJzKSA9PiB7XG4gIHJldHVybiBlcnJvclJlc3BvbnNlSGVhZGVycz8uW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0gIT09IHZvaWQgMDtcbn07XG5jb25zdCBwYXJzZUludGVudElkRnJvbTNkc0hyZWYgPSAoaHJlZikgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IGludGVudElkID0gbmV3IFVSTChocmVmID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIWludGVudElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIH1cbiAgICBsb2dfXyQ4KGBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbSW50ZW50IElEOiAke2ludGVudElkfV1gKTtcbiAgICByZXR1cm4gaW50ZW50SWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc3QgZXJyTXNnID0gYEVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuYDtcbiAgICBlcnJfXyQ3KGVyck1zZywgYFJlc3VsdGluZyBVUkw6ICR7aHJlZn0uXG5FcnJvcjogJHtnZXRFcnJvck1lc3NhZ2UoZXJyb3IpfWApO1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJNc2cpO1xuICB9XG59O1xuY29uc3QgcnVuQWlyd2FsbGV4M2RzRmxvdyA9IGFzeW5jIChiYXNlVXJsLCBlcnJvclJlc3BvbnNlSGVhZGVycykgPT4ge1xuICBjb25zdCBoZWFkZXJzID0gcGFyc2VSZXNwb25zZUhlYWRlcnMoZXJyb3JSZXNwb25zZUhlYWRlcnMpO1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBzdGFydDNkc1ZlcmlmaWNhdGlvblN0cmljdCh7IHVybDogaGVhZGVyc1tcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdLCBiYXNlVXJsIH0pO1xuICBjb25zdCBpbnRlbnRJZCA9IHBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZihyZXN1bHQuaHJlZiA/PyBcIlwiKTtcbiAgY29uc3QgaW5pdGlhbEludGVudElkID0gaGVhZGVyc1tcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiXTtcbiAgaWYgKGluaXRpYWxJbnRlbnRJZCAhPT0gaW50ZW50SWQpIHtcbiAgICBjb25zdCBmcmllbmRseUVyciA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIjtcbiAgICBjb25zdCBkZXZFcnIgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7aW50ZW50SWR9KSBkb2VzIG5vdCBtYXRjaCB0aGUgaW5pdGlhbCBpbnRlbnQgSUQgKCR7aW5pdGlhbEludGVudElkfSkuYDtcbiAgICBlcnJfXyQ3KGRldkVycik7XG4gICAgdGhyb3cgbmV3IEVycm9yKGZyaWVuZGx5RXJyKTtcbiAgfVxuICBjb25zdCBleHRyYU1ldGFkYXRhRm9yQ2hlY2tvdXQgPSB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBpbnRlbnRJZCxcbiAgICAgIGNvbnNlbnRfaWQ6IGhlYWRlcnNbXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiXVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGV4dHJhTWV0YWRhdGFGb3JDaGVja291dDtcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDcsIGVycl9fOiBlcnJfXyQ2IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImNvbW1vbi1jY1wiKTtcbmNvbnN0IHsgbG9nX186IHN0cmlwZUxvZ19fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcInN0cmlwZS1jY1wiKTtcbnouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHouc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuY29uc3QgcnVuQ29tbW9uQ2NGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtc1xuICB9KSA9PiB7XG4gICAgbG9nX18kNyhg4pScIFJ1bm5pbmcgY29tbW9uIENDIGZsb3cuLi5gLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZCB9KTtcbiAgICBjb25zdCBhbnlDZGVDb25uZWN0aW9uID0gY29udGV4dC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIGNvbnN0IHByZWZpbGwgPSBhd2FpdCBnZXRQcmVmaWxsKGFueUNkZUNvbm5lY3Rpb24pO1xuICAgIGxvZ19fJDcoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cHJlZmlsbC5tb2RlfV1gKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGNvbW1vbkNoZWNrb3V0UGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25fY2RlX2Zvcm1fZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgZXh0cmFfbWV0YWRhdGE6IHt9XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgbG9nX18kNyhg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHtjb250ZXh0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgIGNvbnN0IHRva2VuaXplQ2FyZFJlc3VsdHMgPSBhd2FpdCB0b2tlbml6ZUNhcmRPbkFsbENvbm5lY3Rpb25zKGN1c3RvbVBhcmFtcy5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogY29udGV4dC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICB2YWxpZGF0ZVRva2VuaXplQ2FyZFJlc3VsdHModG9rZW5pemVDYXJkUmVzdWx0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgIGxvZ19fJDcoYOKUnCBTZXR0aW5nIHVwIHBheW1lbnQgbWV0aG9kIGluIENERSBbVG9rZW46ICR7cHJlZmlsbC50b2tlbn1dYCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNldHVwQ2hlY2tvdXQoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICBsb2dfXyQ3KGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7cmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxvZ19fJDcoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke2NvbnRleHQuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja291dENhcmRFbGVtZW50cyhhbnlDZGVDb25uZWN0aW9uLCBjb21tb25DaGVja291dFBhcmFtcyk7XG4gICAgICAgIGxvZ19fJDcoYOKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LmApO1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdCB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBDZGVFcnJvcikge1xuICAgICAgICBpZiAoZXJyb3Iub3JpZ2luYWxFcnJvck1lc3NhZ2UuaW5jbHVkZXMoXCIzRFNfUkVRVUlSRURcIikpIHtcbiAgICAgICAgICBsb2dfXyQ3KGDilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93YCk7XG4gICAgICAgICAgbG9nX18kNyhcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBjb25zdCByZXF1aXJlc1BvY2t5dDNkcyA9IGNoZWNrSWZSZXF1aXJlc1BvY2t5dDNkcyhlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBpZiAocmVxdWlyZXNQb2NreXQzZHMpIHtcbiAgICAgICAgICAgIGxvZ19fJDcoYOKUnCBQb2NreXQgM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggUG9ja3l0IDNEUyBmbG93LmApO1xuICAgICAgICAgICAgY29uc3QgcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCA9IGF3YWl0IHJ1blBvY2t5dDNkc0Zsb3coY29udGV4dC5iYXNlVXJsLCBlcnJvci5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICAgIGNvbW1vbkNoZWNrb3V0UGFyYW1zLmV4dHJhX21ldGFkYXRhW1wicG9ja3l0XCJdID0gcG9ja3l0TWV0YWRhdGFGb3JDaGVja291dDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgcmVxdWlyZXNBaXJ3YWxsZXgzZHMgPSBjaGVja0lmUmVxdWlyZXNBaXJ3YWxsZXgzZHMoZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgaWYgKHJlcXVpcmVzQWlyd2FsbGV4M2RzKSB7XG4gICAgICAgICAgICBsb2dfXyQ3KGDilJwgQWlyd2FsbGV4IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIEFpcndhbGxleCAzRFMgZmxvdy5gKTtcbiAgICAgICAgICAgIGNvbnN0IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQgPSBhd2FpdCBydW5BaXJ3YWxsZXgzZHNGbG93KGNvbnRleHQuYmFzZVVybCwgZXJyb3IucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgICBjb21tb25DaGVja291dFBhcmFtcy5leHRyYV9tZXRhZGF0YVtcImFpcndhbGxleFwiXSA9IGFpcndhbGxleE1ldGFkYXRhRm9yQ2hlY2tvdXQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IHN0YXJ0UGZSZXN1bHQgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yQ0MoYW55Q2RlQ29ubmVjdGlvbiwgY29tbW9uQ2hlY2tvdXRQYXJhbXMpO1xuICAgICAgICAgIGxvZ19fJDcoYOKUnCBQYXltZW50IGZsb3cgcmVzdWx0OmAsIHN0YXJ0UGZSZXN1bHQpO1xuICAgICAgICAgIGNvbnN0IHByZVN0YXJ0M2RzQ29tcGxldGUgPSByZXF1aXJlc1BvY2t5dDNkcyB8fCByZXF1aXJlc0FpcndhbGxleDNkcztcbiAgICAgICAgICBjb25zdCBzaG91bGRVc2VTdHJpcGVGbG93ID0gZXJyb3IucmVzcG9uc2UuaGVhZGVycz8uW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgICAgaWYgKCFwcmVTdGFydDNkc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkVXNlU3RyaXBlRmxvdykge1xuICAgICAgICAgICAgICBsb2dfXyQ3KGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93YCk7XG4gICAgICAgICAgICAgIGF3YWl0IHN0cmlwZUNDM0RTRmxvdyhzdGFydFBmUmVzdWx0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxvZ19fJDcoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dgKTtcbiAgICAgICAgICAgICAgYXdhaXQgY29tbW9uQ0MzRFNGbG93KHN0YXJ0UGZSZXN1bHQsIGNvbnRleHQuYmFzZVVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxvZ19fJDcoYOKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuYCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNjUG1JZCA9IHN0YXJ0UGZSZXN1bHQuY2NfcG1faWQ7XG4gICAgICAgICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgICBsb2dfXyQ3KGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2NjUG1JZH1dYCk7XG4gICAgICAgICAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogY2NQbUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGxvZ19fJDcoYOKUnCBDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHQgcmVjZWl2ZWQgUmVzdWx0OmAsIGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgICAgICAgbG9nX18kNyhg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2NyZWF0ZWRQYXltZW50TWV0aG9kLnBheW1lbnRfbWV0aG9kX2lkfV1gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBjcmVhdGVkUGF5bWVudE1ldGhvZCB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsb2dfXyQ3KGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAkeyFzaG91bGRVc2VTdHJpcGVGbG93ID8gXCJuZXdcIiA6IFwibGVnYWN5XCJ9XWApO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tvdXRDYXJkRWxlbWVudHMoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgICAgICAuLi5jb21tb25DaGVja291dFBhcmFtcyxcbiAgICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGNjUG1JZCxcbiAgICAgICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogc2hvdWxkVXNlU3RyaXBlRmxvd1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsb2dfXyQ3KGDilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5gKTtcbiAgICAgICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlcnJfXyQ2KGDilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVgKTtcbiAgICAgIGVycl9fJDYoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4pO1xuY29uc3QgcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3Qgc3RyaXBlQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFzdHJpcGVBY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKHN0cmlwZUFjdGlvbik7XG59O1xuY29uc3QgcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEgPSAocmVzcG9uc2UpID0+IHtcbiAgY29uc3QgY29tbW9uQWN0aW9uID0gcmVzcG9uc2UucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmZpbmQoKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgaWYgKCFjb21tb25BY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgfVxuICByZXR1cm4gQ29tbW9uM0RTTmV4dEFjdGlvbk1ldGFkYXRhLnBhcnNlKGNvbW1vbkFjdGlvbik7XG59O1xuY29uc3QgY29tbW9uQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQsIGJhc2VVcmwpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIGxvZ19fJDcoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXMgfSA9IGF3YWl0IHN0YXJ0M2RzVmVyaWZpY2F0aW9uKHsgdXJsOiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsLCBiYXNlVXJsIH0pO1xuICBsb2dfXyQ3KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtzdGF0dXN9XWApO1xuICBpZiAoc3RhdHVzID09PSBUaHJlZURTU3RhdHVzLkNBTkNFTExFRCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuRkFJTFVSRSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICB9XG59O1xuY29uc3Qgc3RyaXBlQ0MzRFNGbG93ID0gYXN5bmMgKHN0YXJ0UGZSZXN1bHQpID0+IHtcbiAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VTdHJpcGUzRFNOZXh0QWN0aW9uTWV0YWRhdGEoc3RhcnRQZlJlc3VsdCk7XG4gIHN0cmlwZUxvZ19fKGDilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93IFtDbGllbnQgU2VjcmV0OiAke25leHRBY3Rpb25NZXRhZGF0YS5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCk7XG4gIGF3YWl0IGxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3cobmV4dEFjdGlvbk1ldGFkYXRhKTtcbiAgc3RyaXBlTG9nX18oXCLilbAgU3RyaXBlIDNEUyBmbG93IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHlcIik7XG59O1xuXG5jb25zdCB7IGxvZ19fOiBsb2dfXyQ2LCBlcnJfXzogZXJyX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJzdHJpcGUtcHJcIik7XG5jb25zdCBTdHJpcGVQckNwbSA9IHoub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHoudW5pb24oW3oubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgei5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0U3RyaXBlUHJGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCB9KSA9PiB7XG4gICAgbG9nX18kNihgQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5gKTtcbiAgICBjb25zdCBjaGVja291dFBheW1lbnRNZXRob2QgPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgU3RyaXBlUHJDcG0pO1xuICAgIGxvZ19fJDYoYEluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBsb2dfXyQ2KGBHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRgKTtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwciA9IGF3YWl0IGNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0KFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLm1ldGFkYXRhLnN0cmlwZV9wayxcbiAgICAgIGluaXRpYWxQcmV2aWV3LmFtb3VudEF0b20sXG4gICAgICBpbml0aWFsUHJldmlldy5jdXJyZW5jeSxcbiAgICAgIGlzU2V0dXBNb2RlXG4gICAgKTtcbiAgICBsb2dfXyQ2KGBDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50YCk7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnQgPSBhd2FpdCBwci5jYW5NYWtlUGF5bWVudCgpO1xuICAgIGlmIChjYW5NYWtlUGF5bWVudCA9PT0gbnVsbCkge1xuICAgICAgZXJyX18kNShgY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbGApO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgfVxuICAgIGxvZ19fJDYoYFN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudGAsIGNhbk1ha2VQYXltZW50KTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6IHRydWUsXG4gICAgICBwcixcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogY2FuTWFrZVBheW1lbnQuYXBwbGVQYXksXG4gICAgICAgIGdvb2dsZVBheTogY2FuTWFrZVBheW1lbnQuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1blN0cmlwZVByRmxvdyQxID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgbm9uQ2RlRm9ybUlucHV0cyxcbiAgICBmb3JtQ2FsbGJhY2tzLFxuICAgIGN1c3RvbVBhcmFtcyxcbiAgICBpbml0UmVzdWx0XG4gIH0pID0+IHtcbiAgICBsb2dfXyQ2KGBSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uYCk7XG4gICAgaWYgKGN1c3RvbVBhcmFtcy5wcm92aWRlciAhPT0gY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2N1c3RvbVBhcmFtcy5wcm92aWRlcn0sIGdvdCAke2NoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcn1gKTtcbiAgICB9XG4gICAgY29uc3QgYW55Q2RlQ29ubmVjdGlvbiA9IGNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBjb25zdCBwciA9IGluaXRSZXN1bHQucHI7XG4gICAgaWYgKGN1c3RvbVBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3Qgb3ZlcnJpZGUgPSBjdXN0b21QYXJhbXMub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIGxvZ19fJDYoYE92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhgLCBvdmVycmlkZSk7XG4gICAgICB1cGRhdGVQcldpdGhBbW91bnQocHIsIG92ZXJyaWRlLmFtb3VudCwgb3ZlcnJpZGUucGVuZGluZywgb3ZlcnJpZGUuc3RyaXBlQXBwbGVQYXkpO1xuICAgIH1cbiAgICBsb2dfXyQ2KGBTaG93aW5nIFBSIGRpYWxvZy4uLmApO1xuICAgIHByLnNob3coKTtcbiAgICBjb25zdCBzdHJpcGVQbUFkZGVkRXZlbnQgPSBhd2FpdCB3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZChwcik7XG4gICAgbG9nX18kNihgU3RyaXBlIFBNIGFkZGVkIGV2ZW50OmAsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgbG9nX18kNihgTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLmApO1xuICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoU3RyaXBlUG0obm9uQ2RlRm9ybUlucHV0cywgc3RyaXBlUG1BZGRlZEV2ZW50KTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0MobWVyZ2VkSW5wdXRzLCBmb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgbG9nX18kNihgUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gLCBub25DZGVGb3JtRmllbGRzKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93Rm9yUFIoYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgZmllbGRzOiBub25DZGVGb3JtRmllbGRzLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kXG4gICAgfSk7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gcGFyc2VQUk5leHRBY3Rpb25NZXRhZGF0YShzdGFydFBheW1lbnRGbG93UmVzcG9uc2UpO1xuICAgIGxvZ19fJDYoYENvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5gKTtcbiAgICBhd2FpdCBjb25maXJtU3RyaXBlUHJQTShuZXh0QWN0aW9uTWV0YWRhdGEsIHN0cmlwZVBtQWRkZWRFdmVudCk7XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgaWYgKHByZWZpbGwubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBsb2dfXyQ2KGBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5gKTtcbiAgICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHByZWZpbGwudG9rZW5cbiAgICAgIH0pO1xuICAgICAgY29uc3QgY3JlYXRlZFBheW1lbnRNZXRob2QgPSBwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlKGNvbmZpcm1SZXN1bHQpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGNyZWF0ZWRQYXltZW50TWV0aG9kIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ19fJDYoYFBlcmZvcm1pbmcgY2hlY2tvdXQuLi5gKTtcbiAgICAgIGNvbnN0IGNoZWNrb3V0UmVxdWVzdCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBwcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgICAgICBjYW5jZWxfYXRfZW5kOiBmYWxzZSxcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHBlcmZvcm1DaGVja291dChhbnlDZGVDb25uZWN0aW9uLCBjaGVja291dFJlcXVlc3QpO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbiAgICB9XG4gIH1cbik7XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtID0gKGZvcm1JbnB1dHMsIHN0cmlwZVBtRXZ0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBbcGF5ZXJGaXJzdE5hbWUsIC4uLnBheWVyTGFzdE5hbWVQYXJ0c10gPSBzdHJpcGVQbUV2dC5wYXllck5hbWU/LnRyaW0oKT8uc3BsaXQoL1xccysvKSA/PyBbXTtcbiAgY29uc3QgcGF5ZXJMYXN0TmFtZSA9IHBheWVyTGFzdE5hbWVQYXJ0cy5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIGNvbnN0IGJpbGxpbmdBZGRyZXNzID0gc3RyaXBlUG1FdnQucGF5bWVudE1ldGhvZD8uYmlsbGluZ19kZXRhaWxzPy5hZGRyZXNzO1xuICBjb25zdCBzaGlwcGluZ0FkZHJlc3MgPSBzdHJpcGVQbUV2dC5zaGlwcGluZ0FkZHJlc3M7XG4gIGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdIHx8IHBheWVyRmlyc3ROYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5MQVNUX05BTUVdIHx8IHBheWVyTGFzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHN0cmlwZVBtRXZ0LnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiO1xuICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdBZGRyZXNzPy5wb3N0YWxfY29kZSB8fCBzaGlwcGluZ0FkZHJlc3M/LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcz8uY291bnRyeSB8fCBzaGlwcGluZ0FkZHJlc3M/LmNvdW50cnkgfHwgXCJVU1wiO1xuICBsb2dfXyQ2KGBGaW5hbCBmb3JtIGlucHV0czpgLCBpbnB1dHMpO1xuICByZXR1cm4gaW5wdXRzO1xufTtcbmNvbnN0IHVwZGF0ZVByV2l0aEFtb3VudCA9IChwciwgYW1vdW50LCBpc1BlbmRpbmcsIHN0cmlwZUFwcGxlUGF5KSA9PiB7XG4gIHByLnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogYW1vdW50LmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogaXNQZW5kaW5nXG4gICAgfSxcbiAgICBjdXJyZW5jeTogYW1vdW50LmN1cnJlbmN5LFxuICAgIGFwcGxlUGF5OiBzdHJpcGVBcHBsZVBheVxuICB9KTtcbn07XG5jb25zdCBwYXJzZVBSTmV4dEFjdGlvbk1ldGFkYXRhID0gKHJlc3BvbnNlKSA9PiB7XG4gIGlmIChyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3Jlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICB9XG4gIHJldHVybiBQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShyZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufTtcblxuY29uc3QgeyBsb2dfXzogbG9nX18kNSB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJwb2NreXQtcGF5cGFsXCIpO1xuY29uc3QgUG9ja3l0UGF5cGFsQ3BtID0gei5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogei5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbmNvbnN0IFBvY2t5dFBheXBhbFJlcXVpcmVkVXNlckFjdGlvbnMgPSB6LmFycmF5KFxuICB6Lm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHouc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6LnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IHJ1blBvY2t5dFBheXBhbEZsb3cgPSBhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyhcbiAgYXN5bmMgKHsgY29udGV4dCwgY2hlY2tvdXRQYXltZW50TWV0aG9kLCBub25DZGVGb3JtSW5wdXRzLCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBsb2dfXyQ1KGBSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLmApO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbG9nX18kNShgVmVyaWZ5aW5nIENQTS4uLmApO1xuICAgIGNvbnN0IGNwbSA9IFBvY2t5dFBheXBhbENwbS5wYXJzZShjaGVja291dFBheW1lbnRNZXRob2QpO1xuICAgIGxvZ19fJDUoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNgKTtcbiAgICBjb25zdCBub25DZGVGb3JtRmllbGRzID0gdmFsaWRhdGVOb25DZGVGb3JtRmllbGRzRm9yQ0Mobm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IG5ld0N1c3RvbWVyRmllbGRzID0gY3JlYXRlQ3VzdG9tZXJGaWVsZHNGcm9tRm9ybShub25DZGVGb3JtRmllbGRzKTtcbiAgICBsb2dfXyQ1KGBTdGFydGluZyBwYXltZW50IGZsb3cuLi5gKTtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNwbS5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjcG0sXG4gICAgICAuLi5uZXdDdXN0b21lckZpZWxkc1xuICAgIH0pO1xuICAgIGxvZ19fJDUoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKTtcbiAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBQb2NreXRQYXlwYWxSZXF1aXJlZFVzZXJBY3Rpb25zLnBhcnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdO1xuICAgIGxvZ19fJDUoYE9wZW5pbmcgcGF5cGFsIGlmcmFtZS4uLmApO1xuICAgIGNvbnN0IHBheXBhbEZsb3dSZXN1bHQgPSBhd2FpdCBzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0KFxuICAgICAgXCJQYXlQYWxcIixcbiAgICAgIGFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBuZXh0QWN0aW9uTWV0YWRhdGEudmVyaWZ5X3Rva2VuLFxuICAgICAgbmV4dEFjdGlvbk1ldGFkYXRhLnBheXBhbF9pZnJhbWVfdXJsXG4gICAgKTtcbiAgICBsb2dfXyQ1KFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHBheXBhbEZsb3dSZXN1bHQpO1xuICAgIGNvbnN0IHZhdWx0SWQgPSBwYXJzZVZhdWx0SWRGcm9tM2RzSHJlZihwYXlwYWxGbG93UmVzdWx0LmhyZWYpO1xuICAgIGxvZ19fJDUoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7dmF1bHRJZH1gKTtcbiAgICBjb25zdCBjb25maXJtUmVzdWx0ID0gYXdhaXQgY29uZmlybVBheW1lbnRGbG93KGFueUNkZUNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgIHRoZWlyX3BtX2lkOiB2YXVsdElkXG4gICAgfSk7XG4gICAgbG9nX18kNShcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBjb25maXJtUmVzdWx0KTtcbiAgICByZXR1cm4gYXdhaXQgcGVyZm9ybVNpbXBsZUNoZWNrb3V0T3JTZXR1cChcInBvY2t5dC1wYXlwYWxcIiwgYW55Q2RlQ29ubmVjdGlvbiwgY3BtLCBub25DZGVGb3JtRmllbGRzLCBjb25maXJtUmVzdWx0KTtcbiAgfVxuKTtcblxuY29uc3QgZ2V0UGF5bWVudERhdGFSZXF1ZXN0ID0gKHtcbiAgZ2F0ZXdheSxcbiAgZ2F0ZXdheU1lcmNoYW50SWQsXG4gIG1lcmNoYW50TmFtZSxcbiAgbWVyY2hhbnRJZCxcbiAgaW5pdGlhbFByZXZpZXdcbn0pID0+IHtcbiAgY29uc3QgYmFzZVJlcXVlc3QgPSB7XG4gICAgYXBpVmVyc2lvbjogMixcbiAgICBhcGlWZXJzaW9uTWlub3I6IDAsXG4gICAgYWxsb3dlZFBheW1lbnRNZXRob2RzOiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiQ0FSRFwiLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgYWxsb3dlZEF1dGhNZXRob2RzOiBbXCJQQU5fT05MWVwiLCBcIkNSWVBUT0dSQU1fM0RTXCJdLFxuICAgICAgICAgIGFsbG93ZWRDYXJkTmV0d29ya3M6IFtcIkFNRVhcIiwgXCJESVNDT1ZFUlwiLCBcIklOVEVSQUNcIiwgXCJKQ0JcIiwgXCJNQVNURVJDQVJEXCIsIFwiVklTQVwiXSxcbiAgICAgICAgICBiaWxsaW5nQWRkcmVzc1JlcXVpcmVkOiB0cnVlLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB0b2tlbml6YXRpb25TcGVjaWZpY2F0aW9uOiB7XG4gICAgICAgICAgdHlwZTogXCJQQVlNRU5UX0dBVEVXQVlcIixcbiAgICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBnYXRld2F5LFxuICAgICAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdLFxuICAgIGVtYWlsUmVxdWlyZWQ6IHRydWUsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBUT0RPOiBhc2FwIGZvciBwcm9kIC0gYWlyd2FsbGV4IGhhcyBubyBkb2NzIGZvciB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZCxcbiAgICAgIG1lcmNoYW50TmFtZVxuICAgIH1cbiAgfTtcbiAgaWYgKCFpbml0aWFsUHJldmlldykge1xuICAgIHJldHVybiBiYXNlUmVxdWVzdDtcbiAgfVxuICBjb25zdCB0b3RhbFByaWNlID0gTWF0aC5tYXgoaW5pdGlhbFByZXZpZXcuYW1vdW50QXRvbSAvIDEwMCwgMCk7XG4gIHJldHVybiB7XG4gICAgLi4uYmFzZVJlcXVlc3QsXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBpbml0aWFsUHJldmlldy5jdXJyZW5jeT8udG9VcHBlckNhc2UoKSA/PyBcIlVTRFwiLFxuICAgICAgdG90YWxQcmljZVN0YXR1czogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogdG90YWxQcmljZS50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xufTtcbmNvbnN0IGxvYWRHb29nbGVQYXlTY3JpcHQgPSAoKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgICBzY3JpcHQuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCI7XG4gICAgc2NyaXB0LmFzeW5jID0gdHJ1ZTtcbiAgICBzY3JpcHQub25sb2FkID0gKCkgPT4gcmVzb2x2ZSgpO1xuICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEdvb2dsZSBQYXkgU0RLXCIpKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gIH0pO1xufTtcbmNvbnN0IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gIGNvbnN0IGNvbW1vbkFjdGlvbiA9IHJlc3BvbnNlLnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChhY3Rpb24pID0+IGFjdGlvbi50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghY29tbW9uQWN0aW9uKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YS5wYXJzZShjb21tb25BY3Rpb24pO1xufTtcbmNvbnN0IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5ID0gKGZvcm1JbnB1dHMsIHBheW1lbnREYXRhKSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBjb25zdCBiaWxsaW5nQWRkcmVzcyA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy5pbmZvPy5iaWxsaW5nQWRkcmVzcztcbiAgaWYgKGJpbGxpbmdBZGRyZXNzKSB7XG4gICAgY29uc3QgW2ZpcnN0TmFtZSwgLi4ubGFzdE5hbWVQYXJ0c10gPSBiaWxsaW5nQWRkcmVzcy5uYW1lPy50cmltKCk/LnNwbGl0KC9cXHMrLykgPz8gW107XG4gICAgY29uc3QgbGFzdE5hbWUgPSBsYXN0TmFtZVBhcnRzLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IHBheW1lbnREYXRhLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNPVU5UUlldID0gaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSB8fCBiaWxsaW5nQWRkcmVzcy5jb3VudHJ5Q29kZSB8fCBcIlVTXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5BRERSRVNTXSA9IGlucHV0c1tGaWVsZE5hbWUuQUREUkVTU10gfHwgYmlsbGluZ0FkZHJlc3MuYWRkcmVzczEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkNJVFldID0gaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSB8fCBiaWxsaW5nQWRkcmVzcy5sb2NhbGl0eSB8fCBcIlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdID0gaW5wdXRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0gfHwgYmlsbGluZ0FkZHJlc3MucG9zdGFsQ29kZSB8fCBcIjAwMDAwXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gPSBpbnB1dHNbRmllbGROYW1lLlNUQVRFXSB8fCBiaWxsaW5nQWRkcmVzcy5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkZJUlNUX05BTUVdID0gaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSB8fCBmaXJzdE5hbWUgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuTEFTVF9OQU1FXSB8fCBsYXN0TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDQsIGVycl9fOiBlcnJfXyQ0IH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImdwYXlcIik7XG5sZXQgcGF5bWVudHNDbGllbnQgPSBudWxsO1xuY29uc3QgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQgPSAoYmFzZVVybCkgPT4ge1xuICBjb25zdCBlbnZpcm9ubWVudCA9IGJhc2VVcmwgPT09IEZSQU1FX0JBU0VfVVJMID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIjtcbiAgaWYgKHBheW1lbnRzQ2xpZW50ID09PSBudWxsKSB7XG4gICAgcGF5bWVudHNDbGllbnQgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICBtZXJjaGFudEluZm86IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBcIlwiLFxuICAgICAgICBtZXJjaGFudE5hbWU6IFwiXCJcbiAgICAgIH0pLm1lcmNoYW50SW5mb1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBwYXltZW50c0NsaWVudDtcbn07XG5jb25zdCBHb29nbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogei5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogei5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6LnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHouc3RyaW5nKClcbiAgfSlcbn0pO1xuY29uc3QgaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3cgPSBhZGRFcnJvckNhdGNoZXJGb3JJbml0KFxuICBhc3luYyAoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pID0+IHtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBpZiAoIWdvb2dsZVBheUNwbSkge1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlIH07XG4gICAgfVxuICAgIGxvZ19fJDQoXCJHb29nbGUgUGF5IENQTVwiLCBnb29nbGVQYXlDcG0pO1xuICAgIGNvbnN0IHByb2Nlc3NvckFjY291bnQgPSBnb29nbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICBlcnJfXyQ0KFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSB9O1xuICAgIH1cbiAgICBsb2dfXyQ0KGBMb2FkaW5nIEdvb2dsZSBQYXkgU0RLLi4uYCk7XG4gICAgYXdhaXQgbG9hZEdvb2dsZVBheVNjcmlwdCgpO1xuICAgIGlmICghd2luZG93Lmdvb2dsZT8ucGF5bWVudHM/LmFwaSkge1xuICAgICAgZXJyX18kNChcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UgfTtcbiAgICB9XG4gICAgbG9nX18kNChcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyByZXN1bHQ6IGlzUmVhZHlUb1BheSB9ID0gYXdhaXQgZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQoY29udGV4dC5iYXNlVXJsKS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICAgICAgZ2F0ZXdheTogXCJhaXJ3YWxsZXhcIixcbiAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogcHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgICBtZXJjaGFudElkOiBcIlwiLFxuICAgICAgICAgIC8vIFRPRE86IGZvciBwcm9kIG1vZGVcbiAgICAgICAgICBpbml0aWFsUHJldmlldzogdm9pZCAwXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgaWYgKCFpc1JlYWR5VG9QYXkpIHtcbiAgICAgICAgbG9nX18kNChcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpO1xuICAgICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGVycl9fJDQoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCBlcnIpO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlIH07XG4gICAgfVxuICAgIGNvbnN0IG9uR29vZ2xlUGF5U3RhcnRGbG93ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGdvb2dsZVBheUNwbSxcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0oY29udGV4dC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczogdm9pZCAwLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBlcnJfXyQ0KFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgc3RhcnRGbG93OiBvbkdvb2dsZVBheVN0YXJ0Rmxvd1xuICAgIH07XG4gIH1cbik7XG5jb25zdCBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93ID0gYWRkQmFzaWNDaGVja291dENhbGxiYWNrSGFuZGxlcnMoXG4gIGFzeW5jICh7IGNvbnRleHQsIGNoZWNrb3V0UGF5bWVudE1ldGhvZCwgbm9uQ2RlRm9ybUlucHV0cywgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgbG9nX18kNChcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBnb29nbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgR29vZ2xlUGF5Q3BtKTtcbiAgICBjb25zdCBjbGllbnQgPSBnZXRHb29nbGVQYXltZW50c0NsaWVudChjb250ZXh0LmJhc2VVcmwpO1xuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgcHJvY2Vzc29yQWNjb3VudCA9IGdvb2dsZVBheUNwbS5tZXRhZGF0YTtcbiAgICBpZiAoIXByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgfVxuICAgIGNvbnN0IHBheW1lbnREYXRhUmVxdWVzdCA9IGdldFBheW1lbnREYXRhUmVxdWVzdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IFwiXCIsXG4gICAgICAvLyBUT0RPOiBmb3IgcHJvZCBtb2RlXG4gICAgICBpbml0aWFsUHJldmlldzogYXdhaXQgZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50KFxuICAgICAgICBhbnlDZGVDb25uZWN0aW9uLFxuICAgICAgICBwcmVmaWxsLnRva2VuLFxuICAgICAgICBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIixcbiAgICAgICAgdm9pZCAwXG4gICAgICApXG4gICAgfSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBheW1lbnREYXRhID0gYXdhaXQgY2xpZW50LmxvYWRQYXltZW50RGF0YShwYXltZW50RGF0YVJlcXVlc3QpO1xuICAgICAgbG9nX18kNChcIkdvb2dsZSBQYXkgUGF5bWVudCBkYXRhXCIsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG1lcmdlZElucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoR29vZ2xlUGF5KG5vbkNkZUZvcm1JbnB1dHMsIHBheW1lbnREYXRhKTtcbiAgICAgIGNvbnN0IG5vbkNkZUZvcm1GaWVsZHMgPSB2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyhtZXJnZWRJbnB1dHMsIGZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZFBheW1lbnRUb2tlbiA9IHBheW1lbnREYXRhLnBheW1lbnRNZXRob2REYXRhPy50b2tlbml6YXRpb25EYXRhPy50b2tlbjtcbiAgICAgIGlmICghZW5jcnlwdGVkUGF5bWVudFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlID0gYXdhaXQgc3RhcnRQYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICBwb3N0YWxfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnlfY29kZTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb25zdCBzdGFydEZsb3dOZXh0QWN0aW9ucyA9IHBhcnNlQWlyd2FsbGV4U3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlKHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSk7XG4gICAgICBsb2dfXyQ0KFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgc3RhcnRGbG93TmV4dEFjdGlvbnMpO1xuICAgICAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50RmxvdyhhbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgIC8vIEdvb2dsZVBheSdzIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuIHByb3ZpZGVkIHRvIHZlcmlmeSB0aGUgY29uc2VudCBmaXJzdFxuICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBzdGFydEZsb3dOZXh0QWN0aW9ucz8uY29uc2VudF9pZCxcbiAgICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgICAgdHlwZTogXCJnb29nbGVwYXlcIixcbiAgICAgICAgICAgIGdvb2dsZXBheToge1xuICAgICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogZW5jcnlwdGVkUGF5bWVudFRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGxvZ19fJDQoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgICBjb25zdCBuZXh0QWN0aW9uTWV0YWRhdGEgPSBjb25maXJtUmVzdWx0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucz8uZmluZChcbiAgICAgICAgKGFjdGlvbikgPT4gYWN0aW9uLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG5leHRBY3Rpb25NZXRhZGF0YSAmJiBuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIGxvZ19fJDQoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICAgICAgICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgICAgICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fJDQoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGEgJiYgIW91clBtSWQpIHtcbiAgICAgICAgY29uc3QgY29uZmlybVJlc3VsdDIgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coYW55Q2RlQ29ubmVjdGlvbiwge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICB0aGVpcl9wbV9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IG5leHRBY3Rpb25NZXRhZGF0YS5jb25zZW50X2lkXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbG9nX18kNChcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQyKTtcbiAgICAgICAgb3VyUG1JZCA9IGNvbmZpcm1SZXN1bHQyLnBheW1lbnRfbWV0aG9kcz8uWzBdPy5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghb3VyUG1JZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogeyBwYXltZW50X21ldGhvZF9pZDogb3VyUG1JZCB9IH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2dfXyQ0KGBTdGFydGluZyBvbmUtdGltZSBwYXltZW50IGZsb3cuLi5gKTtcbiAgICAgICAgY29uc3QgY2hlY2tvdXRSZXF1ZXN0ID0ge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogcHJlZmlsbC50b2tlbixcbiAgICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgICBwcm92aWRlcl90eXBlOiBjaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgICAgICB9LFxuICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHRydWUsXG4gICAgICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogb3VyUG1JZCxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBwcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogZmFsc2UsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgICAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgICAgICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSxcbiAgICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLkxBU1RfTkFNRV1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcGVyZm9ybUNoZWNrb3V0KGFueUNkZUNvbm5lY3Rpb24sIGNoZWNrb3V0UmVxdWVzdCk7XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0IH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBlcnJfXyQ0KFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoZXJyPy5tZXNzYWdlID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbik7XG5cbmNvbnN0IGxvYWRBcHBsZVBheVNjcmlwdCA9ICgpID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICAgIHNjcmlwdC5zcmMgPSBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCI7XG4gICAgc2NyaXB0LmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIjtcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xuICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgc2NyaXB0Lm9uZXJyb3IgPSAoKSA9PiByZWplY3QobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiKSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzY3JpcHQpO1xuICB9KTtcbn07XG5jb25zdCBmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEFwcGxlUGF5ID0gKGZvcm1JbnB1dHMsIGJpbGxpbmdDb250YWN0KSA9PiB7XG4gIGNvbnN0IGlucHV0cyA9IHsgLi4uZm9ybUlucHV0cyB9O1xuICBpZiAoYmlsbGluZ0NvbnRhY3QpIHtcbiAgICBpbnB1dHNbRmllbGROYW1lLkVNQUlMXSA9IGlucHV0c1tGaWVsZE5hbWUuRU1BSUxdIHx8IGJpbGxpbmdDb250YWN0LmVtYWlsQWRkcmVzcyB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DT1VOVFJZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ09VTlRSWV0gfHwgYmlsbGluZ0NvbnRhY3QuY291bnRyeUNvZGUgfHwgXCJVU1wiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuQUREUkVTU10gPSBpbnB1dHNbRmllbGROYW1lLkFERFJFU1NdIHx8IGJpbGxpbmdDb250YWN0LmFkZHJlc3NMaW5lcz8uWzBdIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5DSVRZXSA9IGlucHV0c1tGaWVsZE5hbWUuQ0lUWV0gfHwgYmlsbGluZ0NvbnRhY3QubG9jYWxpdHkgfHwgXCJcIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLlpJUF9DT0RFXSA9IGlucHV0c1tGaWVsZE5hbWUuWklQX0NPREVdIHx8IGJpbGxpbmdDb250YWN0LnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiO1xuICAgIGlucHV0c1tGaWVsZE5hbWUuU1RBVEVdID0gaW5wdXRzW0ZpZWxkTmFtZS5TVEFURV0gfHwgYmlsbGluZ0NvbnRhY3QuYWRtaW5pc3RyYXRpdmVBcmVhIHx8IFwiXCI7XG4gICAgaW5wdXRzW0ZpZWxkTmFtZS5GSVJTVF9OQU1FXSA9IGlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0gfHwgYmlsbGluZ0NvbnRhY3QuZ2l2ZW5OYW1lIHx8IFwiX09QX1VOS05PV05cIjtcbiAgICBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gPSBpbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0gfHwgYmlsbGluZ0NvbnRhY3QuZmFtaWx5TmFtZSB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGlucHV0cztcbn07XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDMgfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiYXBwbGVwYXktc2Vzc2lvblwiKTtcbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVZhbGlkYXRlTWVyY2hhbnQoZXZlbnQsIGNvbnRleHQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBzdGFydFBheW1lbnRGbG93UmVzcG9uc2UgPSBhd2FpdCBzdGFydFBheW1lbnRGbG93KGNvbnRleHQuY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNvbnRleHQubm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IGNvbnRleHQubm9uQ2RlRm9ybUlucHV0c1tGaWVsZE5hbWUuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBjb250ZXh0Lm5vbkNkZUZvcm1JbnB1dHNbRmllbGROYW1lLkxBU1RfTkFNRV0sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiBldmVudC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IGNvbnRleHQucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgcmVxdWlyZWRVc2VyQWN0aW9ucyA9IHN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF07XG4gICAgY29uc3QgcGF5bWVudFNlc3Npb25SZXNwb25zZSA9IHJlcXVpcmVkVXNlckFjdGlvbnMucGF5bWVudF9zZXNzaW9uO1xuICAgIGNvbnN0IGNvbnNlbnRJZCA9IHJlcXVpcmVkVXNlckFjdGlvbnMuY29uc2VudF9pZDtcbiAgICBpZiAoIXBheW1lbnRTZXNzaW9uUmVzcG9uc2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICB9XG4gICAgaWYgKCFjb25zZW50SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgfVxuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihwYXltZW50U2Vzc2lvblJlc3BvbnNlKTtcbiAgICByZXR1cm4gY29uc2VudElkO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb250ZXh0LnNlc3Npb24uYWJvcnQoKTtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZTNEUyhuZXh0QWN0aW9uTWV0YWRhdGEsIGNvbnRleHQpIHtcbiAgaWYgKCFuZXh0QWN0aW9uTWV0YWRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICB9XG4gIGxvZ19fJDMoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBuZXh0QWN0aW9uTWV0YWRhdGEpO1xuICBjb25zdCB7IHN0YXR1cyB9ID0gYXdhaXQgc3RhcnQzZHNWZXJpZmljYXRpb24oe1xuICAgIHVybDogbmV4dEFjdGlvbk1ldGFkYXRhLnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmxcbiAgfSk7XG4gIGxvZ19fJDMoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3N0YXR1c31dYCk7XG4gIGlmIChzdGF0dXMgPT09IFRocmVlRFNTdGF0dXMuQ0FOQ0VMTEVEKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gVGhyZWVEU1N0YXR1cy5GQUlMVVJFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIH1cbiAgY29uc3QgY29uZmlybVJlc3VsdCA9IGF3YWl0IGNvbmZpcm1QYXltZW50Rmxvdyhjb250ZXh0LmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogbmV4dEFjdGlvbk1ldGFkYXRhLmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIGxvZ19fJDMoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBjb25maXJtUmVzdWx0KTtcbiAgcmV0dXJuIGNvbmZpcm1SZXN1bHQucGF5bWVudF9tZXRob2RzPy5bMF0/LmlkO1xufVxuYXN5bmMgZnVuY3Rpb24gcGVyZm9ybUNoZWNrb3V0V2l0aFBtSWQob3VyUG1JZCwgbm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dCkge1xuICBjb25zdCByZXN1bHQgPSBhd2FpdCBwZXJmb3JtQ2hlY2tvdXQoY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBjb250ZXh0LnByZWZpbGwudG9rZW4sXG4gICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgcHJvdmlkZXJfdHlwZTogY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9LFxuICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHRydWUsXG4gICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogb3VyUG1JZCxcbiAgICBsaW5lX2l0ZW1zOiBjb250ZXh0LnByZWZpbGwubGluZV9pdGVtcyxcbiAgICB0b3RhbF9hbW91bnRfYXRvbTogY29udGV4dC5wcmVmaWxsLmFtb3VudF90b3RhbF9hdG9tLFxuICAgIGNhbmNlbF9hdF9lbmQ6IGZhbHNlLFxuICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICBjdXN0b21lcl9lbWFpbDogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuRU1BSUxdLFxuICAgIGN1c3RvbWVyX3ppcF9jb2RlOiBub25DZGVGb3JtRmllbGRzW0ZpZWxkTmFtZS5aSVBfQ09ERV0sXG4gICAgY3VzdG9tZXJfY291bnRyeTogbm9uQ2RlRm9ybUZpZWxkc1tGaWVsZE5hbWUuQ09VTlRSWV0sXG4gICAgcHJvbW90aW9uX2NvZGU6IG5vbkNkZUZvcm1GaWVsZHNbRmllbGROYW1lLlBST01PVElPTl9DT0RFXVxuICB9KTtcbiAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZVBheW1lbnRBdXRob3JpemVkKGV2ZW50LCBjb250ZXh0LCBjb25zZW50SWQpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXltZW50RGF0YSA9IGV2ZW50LnBheW1lbnQ7XG4gICAgY29uc3QgZm9ybUlucHV0cyA9IGZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkoY29udGV4dC5ub25DZGVGb3JtSW5wdXRzLCBwYXltZW50RGF0YS5iaWxsaW5nQ29udGFjdCk7XG4gICAgY29uc3Qgbm9uQ2RlRm9ybUZpZWxkcyA9IHZhbGlkYXRlTm9uQ2RlRm9ybUZpZWxkc0ZvckNDKGZvcm1JbnB1dHMsIGNvbnRleHQuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIGNvbnN0IGNvbmZpcm1SZXN1bHQgPSBhd2FpdCBjb25maXJtUGF5bWVudEZsb3coY29udGV4dC5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGNvbnRleHQucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGNvbnNlbnRJZCxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkocGF5bWVudERhdGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgbG9nX18kMyhcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGNvbmZpcm1SZXN1bHQpO1xuICAgIGxldCBvdXJQbUlkID0gY29uZmlybVJlc3VsdC5wYXltZW50X21ldGhvZHM/LlswXT8uaWQ7XG4gICAgY29uc3QgbmV4dEFjdGlvbk1ldGFkYXRhID0gY29uZmlybVJlc3VsdC5yZXF1aXJlZF91c2VyX2FjdGlvbnM/LmZpbmQoXG4gICAgICAoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChuZXh0QWN0aW9uTWV0YWRhdGE/LnJlZGlyZWN0X3VybCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEuY29uc2VudF9pZCAmJiBuZXh0QWN0aW9uTWV0YWRhdGEudGhlaXJfcG1faWQpIHtcbiAgICAgIG91clBtSWQgPSBhd2FpdCBoYW5kbGUzRFMobmV4dEFjdGlvbk1ldGFkYXRhLCBjb250ZXh0KTtcbiAgICB9XG4gICAgaWYgKCFvdXJQbUlkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIGNvbnRleHQuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQocmVzdWx0KTtcbiAgICByZXR1cm4gY29udGV4dC5pc1NldHVwTW9kZSA/IHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHsgcGF5bWVudF9tZXRob2RfaWQ6IG91clBtSWQgfSB9IDogYXdhaXQgcGVyZm9ybUNoZWNrb3V0V2l0aFBtSWQob3VyUG1JZCwgbm9uQ2RlRm9ybUZpZWxkcywgY29udGV4dCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19GQUlMVVJFXG4gICAgfTtcbiAgICBjb250ZXh0LnNlc3Npb24uY29tcGxldGVQYXltZW50KHJlc3VsdCk7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDIsIGVycl9fOiBlcnJfXyQzIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImFwcGxlcGF5XCIpO1xuY29uc3QgQXBwbGVQYXlDcG0gPSB6Lm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6LmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6LmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6Lm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHouc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogei5zdHJpbmcoKVxuICB9KVxufSk7XG5jb25zdCBpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93ID0gYWRkRXJyb3JDYXRjaGVyRm9ySW5pdChcbiAgYXN5bmMgKHsgY29udGV4dCwgZm9ybUNhbGxiYWNrcyB9KSA9PiB7XG4gICAgY29uc3QgYXBwbGVQYXlDcG0gPSBmaW5kQ3BtTWF0Y2hpbmdUeXBlKGNvbnRleHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgQXBwbGVQYXlDcG0pO1xuICAgIGlmICghYXBwbGVQYXlDcG0pIHtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSB9O1xuICAgIH1cbiAgICBsb2dfXyQyKGBMb2FkaW5nIEFwcGxlIFBheSBTREsuLi5gKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbG9hZEFwcGxlUGF5U2NyaXB0KCk7XG4gICAgICBsb2dfXyQyKFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgZXJyX18kMyhcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgZXJyKTtcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiBmYWxzZSB9O1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSkge1xuICAgICAgbG9nX18kMihcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIik7XG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogZmFsc2UgfTtcbiAgICB9XG4gICAgbG9nX18kMihcIkFwcGxlIFBheSBMb2FkZWRcIik7XG4gICAgY29uc3QgY2FuTWFrZVBheW1lbnRzID0gYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpO1xuICAgIGlmICghY2FuTWFrZVBheW1lbnRzKSB7XG4gICAgICBsb2dfXyQyKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpO1xuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6IGZhbHNlIH07XG4gICAgfVxuICAgIGNvbnN0IGFueUNkZUNvbm5lY3Rpb24gPSBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgY29uc3QgcHJlZmlsbCA9IGF3YWl0IGdldFByZWZpbGwoYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgY29uc3QgaXNTZXR1cE1vZGUgPSBwcmVmaWxsLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBjb25zdCBpbml0aWFsUHJldmlldyA9IGF3YWl0IGdldENoZWNrb3V0UHJldmlld0Ftb3VudChhbnlDZGVDb25uZWN0aW9uLCBwcmVmaWxsLnRva2VuLCBpc1NldHVwTW9kZSwgdm9pZCAwKTtcbiAgICBjb25zdCBwcm9jZXNzb3JBY2NvdW50ID0gYXBwbGVQYXlDcG0ubWV0YWRhdGE7XG4gICAgbG9nX18kMihcInByb2Nlc3NvckFjY291bnRcIiwgcHJvY2Vzc29yQWNjb3VudCk7XG4gICAgaWYgKCFwcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIH1cbiAgICBjb25zdCBvbkFwcGxlUGF5U3RhcnRGbG93ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgT2pzRmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogYXBwbGVQYXlDcG0sXG4gICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3LFxuICAgICAgICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICAgICAgICBwcmVmaWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgZXJyX18kMyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICAgIGZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihlcnI/Lm1lc3NhZ2UgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzQXZhaWxhYmxlOiB0cnVlLFxuICAgICAgc3RhcnRGbG93OiBvbkFwcGxlUGF5U3RhcnRGbG93XG4gICAgfTtcbiAgfVxuKTtcbmNvbnN0IHJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyA9IGFkZEJhc2ljQ2hlY2tvdXRDYWxsYmFja0hhbmRsZXJzKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIG5vbkNkZUZvcm1JbnB1dHMsXG4gICAgY3VzdG9tUGFyYW1zLFxuICAgIGZvcm1DYWxsYmFja3NcbiAgfSkgPT4ge1xuICAgIGNvbnN0IGFwcGxlUGF5Q3BtID0gZmluZENwbU1hdGNoaW5nVHlwZShjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEFwcGxlUGF5Q3BtKTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3LCBpc1NldHVwTW9kZSwgcHJlZmlsbCB9ID0gY3VzdG9tUGFyYW1zO1xuICAgIGNvbnN0IHRvdGFsID0ge1xuICAgICAgbGFiZWw6IGlzU2V0dXBNb2RlID8gXCJTZXR1cCBQYXltZW50XCIgOiBcIlBheW1lbnQgVG90YWxcIixcbiAgICAgIGFtb3VudDogaXNTZXR1cE1vZGUgPyBcIjAuMDBcIiA6IChpbml0aWFsUHJldmlldy5hbW91bnRBdG9tIC8gMTAwKS50b0ZpeGVkKDIpLFxuICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgfTtcbiAgICBjb25zdCBwYXltZW50UmVxdWVzdCA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IGluaXRpYWxQcmV2aWV3LmN1cnJlbmN5Py50b1VwcGVyQ2FzZSgpID8/IFwiVVNEXCIsXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgICAgXSxcbiAgICAgIHRvdGFsXG4gICAgfTtcbiAgICBsb2dfXyQyKFwiUGF5bWVudCBSZXF1ZXN0XCIsIHBheW1lbnRSZXF1ZXN0KTtcbiAgICBjb25zdCBzZXNzaW9uID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCBwYXltZW50UmVxdWVzdCk7XG4gICAgbG9nX18kMihcIkFwcGxlUGF5U2Vzc2lvblwiLCBzZXNzaW9uKTtcbiAgICBjb25zdCBzZXNzaW9uQ29udGV4dCA9IHtcbiAgICAgIHNlc3Npb24sXG4gICAgICBjb25uZWN0aW9uOiBjb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBub25DZGVGb3JtSW5wdXRzLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogYXBwbGVQYXlDcG0ubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsLFxuICAgICAgaXNTZXR1cE1vZGUsXG4gICAgICBiYXNlVXJsOiBjb250ZXh0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzXG4gICAgfTtcbiAgICBsZXQgY29uc2VudElkO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBzZXNzaW9uLm9uY2FuY2VsID0gKCkgPT4ge1xuICAgICAgICBsb2dfXyQyKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKTtcbiAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc2VudElkID0gYXdhaXQgaGFuZGxlVmFsaWRhdGVNZXJjaGFudChldmVudCwgc2Vzc2lvbkNvbnRleHQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25zaGlwcGluZ21ldGhvZHNlbGVjdGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGxvZ19fJDIoXCJTaGlwcGluZyBtZXRob2Qgc2VsZWN0ZWRcIiwgZXZlbnQuc2hpcHBpbmdNZXRob2QpO1xuICAgICAgfTtcbiAgICAgIHNlc3Npb24ub25zaGlwcGluZ21ldGhvZHNlbGVjdGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGxvZ19fJDIoXCJTaGlwcGluZyBtZXRob2Qgc2VsZWN0ZWRcIiwgZXZlbnQuc2hpcHBpbmdNZXRob2QpO1xuICAgICAgICBjb25zdCB1cGRhdGUgPSB7fTtcbiAgICAgICAgc2Vzc2lvbi5jb21wbGV0ZVNoaXBwaW5nTWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnNoaXBwaW5nY29udGFjdHNlbGVjdGVkID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGxvZ19fJDIoXCJTaGlwcGluZyBjb250YWN0IHNlbGVjdGVkXCIsIGV2ZW50LnNoaXBwaW5nQ29udGFjdCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHt9O1xuICAgICAgICBzZXNzaW9uLmNvbXBsZXRlU2hpcHBpbmdDb250YWN0U2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9IChldmVudCkgPT4ge1xuICAgICAgICBsb2dfXyQyKFwiUGF5bWVudCBtZXRob2Qgc2VsZWN0ZWRcIiwgZXZlbnQucGF5bWVudE1ldGhvZCk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi50b3RhbCB9XG4gICAgICAgIH07XG4gICAgICAgIHNlc3Npb24uY29tcGxldGVQYXltZW50TWV0aG9kU2VsZWN0aW9uKHVwZGF0ZSk7XG4gICAgICB9O1xuICAgICAgc2Vzc2lvbi5vbnBheW1lbnRhdXRob3JpemVkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlUGF5bWVudEF1dGhvcml6ZWQoZXZlbnQsIHNlc3Npb25Db250ZXh0LCBjb25zZW50SWQpO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBzZXNzaW9uLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgZXJyX18kMyhcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbik7XG5cbmNvbnN0IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QgPSAoY3Btcywgd2l0aFByb3ZpZGVyLCB3aXRoUHJvY2Vzc29yKSA9PiB7XG4gIGNvbnN0IG1hdGNoZXMgPSBjcG1zLmZpbHRlcigoY3BtKSA9PiB7XG4gICAgY29uc3QgbWF0Y2hlc1Byb2Nlc3NvciA9IHdpdGhQcm9jZXNzb3IgPT09IHZvaWQgMCA/IHRydWUgOiBjcG0ucHJvY2Vzc29yX25hbWUgPT09IHdpdGhQcm9jZXNzb3I7XG4gICAgY29uc3QgbWF0Y2hlc1Byb3ZpZGVyID0gY3BtLnByb3ZpZGVyID09PSB3aXRoUHJvdmlkZXI7XG4gICAgcmV0dXJuIG1hdGNoZXNQcm9jZXNzb3IgJiYgbWF0Y2hlc1Byb3ZpZGVyO1xuICB9KTtcbiAgaWYgKG1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCBjcG1zKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHt3aXRoUHJvdmlkZXJ9JyBhbmQgcHJvY2Vzc29yICcke3dpdGhQcm9jZXNzb3J9J2ApO1xuICB9XG4gIGlmIChtYXRjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgY3Btcyk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNb3JlIHRoYW4gb25lIENQTSBmb3VuZCB3aXRoIHByb3ZpZGVyICcke3dpdGhQcm92aWRlcn0nIGFuZCBwcm9jZXNzb3IgJyR7d2l0aFByb2Nlc3Nvcn0nYCk7XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXNbMF07XG59O1xuY29uc3QgT2pzRmxvd3MgPSB7XG4gIC8vIOKciyBOb3RlOiBGb3IgZmxvd3MgdGhhdCByZXF1aXJlIGluaXRpYWxpemF0aW9uLCBwbGVhc2UgYWRkIHRoZW0gdG8gYGluaXQtZmxvd3MudHNgXG4gIC8vIENvbW1vblxuICBjb21tb25DQzoge1xuICAgIGluaXQ6IGFzeW5jICgpID0+IHtcbiAgICB9LFxuICAgIHJ1bjogcnVuQ29tbW9uQ2NGbG93XG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGluaXRTdHJpcGVQckZsb3csXG4gICAgcnVuOiBydW5TdHJpcGVQckZsb3ckMVxuICB9LFxuICBzdHJpcGVMaW5rOiB7XG4gICAgaW5pdDogaW5pdFN0cmlwZUxpbmtGbG93LFxuICAgIHJ1bjogcnVuU3RyaXBlTGlua0Zsb3dcbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogcnVuUG9ja3l0UGF5cGFsRmxvd1xuICB9LFxuICAvLyBBaXJ3YWxsZXhcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEdvb2dsZVBheUZsb3csXG4gICAgcnVuOiBydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93XG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDogaW5pdEFpcndhbGxleEFwcGxlUGF5RmxvdyxcbiAgICBydW46IHJ1bkFpcndhbGxleEFwcGxlUGF5Rmxvd1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5mdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xuICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcbiAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBnLm5leHQgPSB2ZXJiKDApLCBnW1widGhyb3dcIl0gPSB2ZXJiKDEpLCBnW1wicmV0dXJuXCJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcbiAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcbiAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuXG5mdW5jdGlvbiBfX3JlYWQobywgbikge1xuICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghbSkgcmV0dXJuIG87XG4gIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICB0cnkge1xuICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gIH1cbiAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gIGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgIH1cbiAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICB9XG4gIHJldHVybiBhcjtcbn1cblxuZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xuICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xuICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufVxuXG5mdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiwgYXdhaXRSZXR1cm4pLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XG4gIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGYpIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBQcm9taXNlLnJlc29sdmUodikudGhlbihmLCByZWplY3QpOyB9OyB9XG4gIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpZiAoZ1tuXSkgeyBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyBpZiAoZikgaVtuXSA9IGYoaVtuXSk7IH0gfVxuICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XG4gIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxuICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cbiAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxufVxuXG5mdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcbiAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xuICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XG4gIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cbn1cblxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XG4gIHZhciBlID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICByZXR1cm4gZS5uYW1lID0gXCJTdXBwcmVzc2VkRXJyb3JcIiwgZS5lcnJvciA9IGVycm9yLCBlLnN1cHByZXNzZWQgPSBzdXBwcmVzc2VkLCBlO1xufTtcblxuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkge1xuICAgIHZhciBfc3VwZXIgPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgICAgICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7XG4gICAgICAgIGluc3RhbmNlLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgfTtcbiAgICB2YXIgY3RvckZ1bmMgPSBjcmVhdGVJbXBsKF9zdXBlcik7XG4gICAgY3RvckZ1bmMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3JGdW5jO1xuICAgIHJldHVybiBjdG9yRnVuYztcbn1cblxudmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcblxuZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkge1xuICAgIGlmIChhcnIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gYXJyLmluZGV4T2YoaXRlbSk7XG4gICAgICAgIDAgPD0gaW5kZXggJiYgYXJyLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxufVxuXG52YXIgU3Vic2NyaXB0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb24oaW5pdGlhbFRlYXJkb3duKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gaW5pdGlhbFRlYXJkb3duO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICB9XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVfMSwgX2EsIGVfMiwgX2I7XG4gICAgICAgIHZhciBlcnJvcnM7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfcGFyZW50YWdlXzEgPSBfX3ZhbHVlcyhfcGFyZW50YWdlKSwgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpOyAhX3BhcmVudGFnZV8xXzEuZG9uZTsgX3BhcmVudGFnZV8xXzEgPSBfcGFyZW50YWdlXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcmVudF8xID0gX3BhcmVudGFnZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hID0gX3BhcmVudGFnZV8xLnJldHVybikpIF9hLmNhbGwoX3BhcmVudGFnZV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudGFnZS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGluaXRpYWxGaW5hbGl6ZXIgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGluaXRpYWxGaW5hbGl6ZXIpKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbEZpbmFsaXplcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvciA/IGUuZXJyb3JzIDogW2VdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfZmluYWxpemVyc18xID0gX192YWx1ZXMoX2ZpbmFsaXplcnMpLCBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKTsgIV9maW5hbGl6ZXJzXzFfMS5kb25lOyBfZmluYWxpemVyc18xXzEgPSBfZmluYWxpemVyc18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbmFsaXplciA9IF9maW5hbGl6ZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IGVycm9ycyAhPT0gbnVsbCAmJiBlcnJvcnMgIT09IHZvaWQgMCA/IGVycm9ycyA6IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGVycm9ycykpLCBfX3JlYWQoZXJyLmVycm9ycykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVfMl8xKSB7IGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07IH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfZmluYWxpemVyc18xXzEgJiYgIV9maW5hbGl6ZXJzXzFfMS5kb25lICYmIChfYiA9IF9maW5hbGl6ZXJzXzEucmV0dXJuKSkgX2IuY2FsbChfZmluYWxpemVyc18xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24uY2xvc2VkIHx8IHRlYXJkb3duLl9oYXNQYXJlbnQodGhpcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bi5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAodGhpcy5fZmluYWxpemVycyA9IChfYSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKS5wdXNoKHRlYXJkb3duKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSAmJiBfcGFyZW50YWdlLmluY2x1ZGVzKHBhcmVudCkpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSA/IChfcGFyZW50YWdlLnB1c2gocGFyZW50KSwgX3BhcmVudGFnZSkgOiBfcGFyZW50YWdlID8gW19wYXJlbnRhZ2UsIHBhcmVudF0gOiBwYXJlbnQ7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbiAocGFyZW50KSB7XG4gICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgICBpZiAoX3BhcmVudGFnZSA9PT0gcGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHtcbiAgICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICBfZmluYWxpemVycyAmJiBhcnJSZW1vdmUoX2ZpbmFsaXplcnMsIHRlYXJkb3duKTtcbiAgICAgICAgaWYgKHRlYXJkb3duIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0ZWFyZG93bi5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24uRU1QVFkgPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZW1wdHkgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGVtcHR5LmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBlbXB0eTtcbiAgICB9KSgpO1xuICAgIHJldHVybiBTdWJzY3JpcHRpb247XG59KCkpO1xudmFyIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbiB8fFxuICAgICAgICAodmFsdWUgJiYgJ2Nsb3NlZCcgaW4gdmFsdWUgJiYgaXNGdW5jdGlvbih2YWx1ZS5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUuYWRkKSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnVuc3Vic2NyaWJlKSkpO1xufVxuZnVuY3Rpb24gZXhlY0ZpbmFsaXplcihmaW5hbGl6ZXIpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihmaW5hbGl6ZXIpKSB7XG4gICAgICAgIGZpbmFsaXplcigpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZmluYWxpemVyLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxufVxuXG52YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcblxudmFyIHRpbWVvdXRQcm92aWRlciA9IHtcbiAgICBzZXRUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFyVGltZW91dDogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jbGVhclRpbWVvdXQpIHx8IGNsZWFyVGltZW91dCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG5mdW5jdGlvbiByZXBvcnRVbmhhbmRsZWRFcnJvcihlcnIpIHtcbiAgICB0aW1lb3V0UHJvdmlkZXIuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyB9XG5cbmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikge1xuICAgIHtcbiAgICAgICAgY2IoKTtcbiAgICB9XG59XG5cbnZhciBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24pIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpYmVyLmNyZWF0ZSA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0LCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZXI7XG59KFN1YnNjcmlwdGlvbikpO1xudmFyIF9iaW5kID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBiaW5kKGZuLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIF9iaW5kLmNhbGwoZm4sIHRoaXNBcmcpO1xufVxudmFyIENvbnN1bWVyT2JzZXJ2ZXIgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKSB7XG4gICAgICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcGFydGlhbE9ic2VydmVyO1xuICAgIH1cbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5lcnJvcikge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhhbmRsZVVuaGFuZGxlZEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25zdW1lck9ic2VydmVyO1xufSgpKTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFNhZmVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNhZmVTdWJzY3JpYmVyKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpIHx8ICFvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0ge1xuICAgICAgICAgICAgICAgIG5leHQ6IChvYnNlcnZlck9yTmV4dCAhPT0gbnVsbCAmJiBvYnNlcnZlck9yTmV4dCAhPT0gdm9pZCAwID8gb2JzZXJ2ZXJPck5leHQgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8xO1xuICAgICAgICAgICAgaWYgKF90aGlzICYmIGNvbmZpZy51c2VEZXByZWNhdGVkTmV4dENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEgPSBPYmplY3QuY3JlYXRlKG9ic2VydmVyT3JOZXh0KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogb2JzZXJ2ZXJPck5leHQubmV4dCAmJiBiaW5kKG9ic2VydmVyT3JOZXh0Lm5leHQsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogb2JzZXJ2ZXJPck5leHQuY29tcGxldGUgJiYgYmluZChvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBTYWZlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHtcbiAgICB7XG4gICAgICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JIYW5kbGVyKGVycikge1xuICAgIHRocm93IGVycjtcbn1cbnZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG5cbnZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcblxuZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuXG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBvcGVyYXRpb25zID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBvcGVyYXRpb25zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiAodmFsdWUgPSB4KTsgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gcmVqZWN0KGVycik7IH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlc29sdmUodmFsdWUpOyB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2YWJsZTtcbn0oKSk7XG5mdW5jdGlvbiBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcikge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gcHJvbWlzZUN0b3IgIT09IG51bGwgJiYgcHJvbWlzZUN0b3IgIT09IHZvaWQgMCA/IHByb21pc2VDdG9yIDogY29uZmlnLlByb21pc2UpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBpc09ic2VydmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUubmV4dCkgJiYgaXNGdW5jdGlvbih2YWx1ZS5lcnJvcikgJiYgaXNGdW5jdGlvbih2YWx1ZS5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBpc1N1YnNjcmliZXIodmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlICYmIHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaWJlcikgfHwgKGlzT2JzZXJ2ZXIodmFsdWUpICYmIGlzU3Vic2NyaXB0aW9uKHZhbHVlKSk7XG59XG5cbmZ1bmN0aW9uIGhhc0xpZnQoc291cmNlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oc291cmNlID09PSBudWxsIHx8IHNvdXJjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlLmxpZnQpO1xufVxuZnVuY3Rpb24gb3BlcmF0ZShpbml0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgaWYgKGhhc0xpZnQoc291cmNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KGZ1bmN0aW9uIChsaWZ0ZWRTb3VyY2UpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5pdChsaWZ0ZWRTb3VyY2UsIHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZScpO1xuICAgIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7XG59XG52YXIgT3BlcmF0b3JTdWJzY3JpYmVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoT3BlcmF0b3JTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplLCBzaG91bGRVbnN1YnNjcmliZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7XG4gICAgICAgIF90aGlzLnNob3VsZFVuc3Vic2NyaWJlID0gc2hvdWxkVW5zdWJzY3JpYmU7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gb25OZXh0XG4gICAgICAgICAgICA/IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uTmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX25leHQ7XG4gICAgICAgIF90aGlzLl9lcnJvciA9IG9uRXJyb3JcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IG9uQ29tcGxldGVcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT3BlcmF0b3JTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICAgICAgICB2YXIgY2xvc2VkXzEgPSB0aGlzLmNsb3NlZDtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgICFjbG9zZWRfMSAmJiAoKF9hID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPcGVyYXRvclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcblxudmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuXG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcblxudmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlciA9IHtcbiAgICBub3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChEYXRlKS5ub3coKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgcmV0dXJuIEFjdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG5cbnZhciBpbnRlcnZhbFByb3ZpZGVyID0ge1xuICAgIHNldEludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlciwgdGltZW91dCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2V0SW50ZXJ2YWwuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtoYW5kbGVyLCB0aW1lb3V0XSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHJldHVybiAoY2xlYXJJbnRlcnZhbCkoaGFuZGxlKTtcbiAgICB9LFxuICAgIGRlbGVnYXRlOiB1bmRlZmluZWQsXG59O1xuXG52YXIgQXN5bmNBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgdmFyIGlkID0gdGhpcy5pZDtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5pZCA9IChfYSA9IHRoaXMuaWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgX2lkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkpO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKF9zY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnRlcnZhbFByb3ZpZGVyLmNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5wZW5kaW5nID09PSBmYWxzZSAmJiB0aGlzLmlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBfZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSBlID8gZSA6IG5ldyBFcnJvcignU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvcicpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcmVkKSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB2YXIgX2EgPSB0aGlzLCBpZCA9IF9hLmlkLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXI7XG4gICAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zO1xuICAgICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVsYXkgPSBudWxsO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuXG52YXIgU2NoZWR1bGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTY2hlZHVsZXIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHNjaGVkdWxlckFjdGlvbkN0b3I7XG4gICAgICAgIHRoaXMubm93ID0gbm93O1xuICAgIH1cbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgd29yaykuc2NoZWR1bGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFNjaGVkdWxlci5ub3cgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXIubm93O1xuICAgIHJldHVybiBTY2hlZHVsZXI7XG59KCkpO1xuXG52YXIgQXN5bmNTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdO1xuICAgICAgICBfdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjtcbn0oU2NoZWR1bGVyKSk7XG5cbnZhciBhc3luY1NjaGVkdWxlciA9IG5ldyBBc3luY1NjaGVkdWxlcihBc3luY0FjdGlvbik7XG5cbnZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKHZhbHVlKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24odmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZhbHVlLnRoZW4pO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXRbb2JzZXJ2YWJsZV0pO1xufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAnb2JqZWN0JyA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIGlucHV0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5cbmZ1bmN0aW9uIGdldFN5bWJvbEl0ZXJhdG9yKCkge1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8ICFTeW1ib2wuaXRlcmF0b3IpIHtcbiAgICAgICAgcmV0dXJuICdAQGl0ZXJhdG9yJztcbiAgICB9XG4gICAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBpdGVyYXRvciA9IGdldFN5bWJvbEl0ZXJhdG9yKCk7XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbaXRlcmF0b3JdKTtcbn1cblxuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkge1xuICAgICAgICB2YXIgcmVhZGVyLCBfYSwgdmFsdWUsIGRvbmU7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IHJlYWRhYmxlU3RyZWFtLmdldFJlYWRlcigpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZShvYmopIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmouZ2V0UmVhZGVyKTtcbn1cblxuZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmZ1bmN0aW9uIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtvYnNlcnZhYmxlXSgpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnMuc3Vic2NyaWJlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUnKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVByb21pc2UocHJvbWlzZSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBwcm9taXNlXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVwb3J0VW5oYW5kbGVkRXJyb3IpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbUl0ZXJhYmxlKGl0ZXJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBlXzEsIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgaXRlcmFibGVfMSA9IF9fdmFsdWVzKGl0ZXJhYmxlKSwgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCk7ICFpdGVyYWJsZV8xXzEuZG9uZTsgaXRlcmFibGVfMV8xID0gaXRlcmFibGVfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBpdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhYmxlXzFfMSAmJiAhaXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYS5jYWxsKGl0ZXJhYmxlXzEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShyZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiBmcm9tQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKHJlYWRhYmxlU3RyZWFtKSk7XG59XG5mdW5jdGlvbiBwcm9jZXNzKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTtcbiAgICB2YXIgZV8yLCBfYTtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB2YWx1ZSwgZV8yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTtcbiAgICAgICAgICAgICAgICAgICAgYXN5bmNJdGVyYWJsZV8xID0gX19hc3luY1ZhbHVlcyhhc3luY0l0ZXJhYmxlKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xID0gX2Iuc2VudCgpLCAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSkpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICBlXzJfMSA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzYsICwgOSwgMTBdKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoYXN5bmNJdGVyYWJsZV8xXzEgJiYgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUgJiYgKF9hID0gYXN5bmNJdGVyYWJsZV8xLnJldHVybikpKSByZXR1cm4gWzMsIDhdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9hLmNhbGwoYXN5bmNJdGVyYWJsZV8xKV07XG4gICAgICAgICAgICAgICAgY2FzZSA3OlxuICAgICAgICAgICAgICAgICAgICBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gODtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVNjaGVkdWxlKHBhcmVudFN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCB3b3JrLCBkZWxheSwgcmVwZWF0KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgaWYgKHJlcGVhdCA9PT0gdm9pZCAwKSB7IHJlcGVhdCA9IGZhbHNlOyB9XG4gICAgdmFyIHNjaGVkdWxlU3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd29yaygpO1xuICAgICAgICBpZiAocmVwZWF0KSB7XG4gICAgICAgICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH0sIGRlbGF5KTtcbiAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTtcbiAgICBpZiAoIXJlcGVhdCkge1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVTdWJzY3JpcHRpb247XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGluaXQpO1xufVxuXG52YXIgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikgeyByZXR1cm4gZnVuY3Rpb24gRW1wdHlFcnJvckltcGwoKSB7XG4gICAgX3N1cGVyKHRoaXMpO1xuICAgIHRoaXMubmFtZSA9ICdFbXB0eUVycm9yJztcbiAgICB0aGlzLm1lc3NhZ2UgPSAnbm8gZWxlbWVudHMgaW4gc2VxdWVuY2UnO1xufTsgfSk7XG5cbmZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgX2hhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBfdmFsdWU7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoX2hhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoX3ZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRW1wdHlFcnJvcigpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gaXNWYWxpZERhdGUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZSk7XG59XG5cbnZhciBUaW1lb3V0RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbChpbmZvKSB7XG4gICAgICAgIGlmIChpbmZvID09PSB2b2lkIDApIHsgaW5mbyA9IG51bGw7IH1cbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnVGltZW91dCBoYXMgb2NjdXJyZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVGltZW91dEVycm9yJztcbiAgICAgICAgdGhpcy5pbmZvID0gaW5mbztcbiAgICB9O1xufSk7XG5mdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuXG5jbGFzcyBMb2FkZWRPbmNlUHVibGlzaGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAodmFsdWUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6IHRydWUsIGxvYWRlZFZhbHVlOiB2YWx1ZSB9O1xuICAgICAgdGhpcy5fc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHRoaXMudGhyb3cgPSAoZXJyb3IsIGVyck1zZykgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6IGZhbHNlLCBlcnJvciwgZXJyTXNnIH07XG4gICAgICB0aGlzLl9zdWJqZWN0LmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAodmFsdWVJZk5vdExvYWRlZCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWU7XG4gICAgICByZXR1cm4gdmFsdWVJZk5vdExvYWRlZDtcbiAgICB9O1xuICAgIHRoaXMuc3Vic2NyaWJlID0gKGZuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikge1xuICAgICAgICBmbih0aGlzLl9jdXJyZW50KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy53YWl0Rm9yTG9hZCA9ICh0aW1lb3V0Q29uZmlnKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIpIGFzc2VydE5ldmVyKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgdGltZW91dFBhcmFtcyA9IHtcbiAgICAgICAgZmlyc3Q6IHRpbWVvdXRDb25maWcudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IodGltZW91dENvbmZpZy50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbSh0aGlzLl9zdWJqZWN0LnBpcGUodGltZW91dCh0aW1lb3V0UGFyYW1zKSkpO1xuICAgIH07XG4gICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiBmYWxzZSB9O1xuICAgIHRoaXMuX3N1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5cbmNvbnN0IHsgbG9nX186IGxvZ19fJDEsIGVycl9fOiBlcnJfXyQyIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImluaXQtZmxvd3NcIik7XG5jb25zdCBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciA9IChmbG93TmFtZSwgaW5pdEZsb3cpID0+IHtcbiAgY29uc3QgcHVibGlzaGVyID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXIsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKGluaXRQYXJhbXMpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChwdWJsaXNoZXIuY3VycmVudC5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSBhd2FpdCBpbml0Rmxvdyhpbml0UGFyYW1zKTtcbiAgICAgICAgbG9nX18kMShg4pyUICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaW5pdFJlc3VsdCk7XG4gICAgICAgIHB1Ymxpc2hlci5zZXQoaW5pdFJlc3VsdCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBlcnJfXyQyKGDwnZmtICR7Zmxvd05hbWV9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCBcIkRldGFpbHM6XCIsIGVycm9yKTtcbiAgICAgICAgcHVibGlzaGVyLnRocm93KGVycm9yLCBnZXRFcnJvck1lc3NhZ2UoZXJyb3IpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3Qgc3RhcnRBbGxJbml0Rmxvd3MgPSBhc3luYyAoZmxvd3MsIGNvbnRleHQsIGZvcm1DYWxsYmFja3MpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyhmbG93cykubWFwKChmbG93KSA9PiBmbG93LmluaXRpYWxpemUoeyBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzIH0pKSk7XG59O1xuY29uc3QgY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycyA9ICgpID0+IHtcbiAgcmV0dXJuIHtcbiAgICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gICAgLy8gU3RyaXBlIFBSXG4gICAgc3RyaXBlUFI6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiU3RyaXBlIFBSXCIsIE9qc0Zsb3dzLnN0cmlwZVBSLmluaXQpLFxuICAgIC8vIFN0cmlwZSBMaW5rXG4gICAgc3RyaXBlTGluazogY3JlYXRlSW5pdEZsb3dQdWJsaXNoZXIoXCJTdHJpcGUgTGlua1wiLCBPanNGbG93cy5zdHJpcGVMaW5rLmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgICBhaXJ3YWxsZXhHb29nbGVQYXk6IGNyZWF0ZUluaXRGbG93UHVibGlzaGVyKFwiQWlyd2FsbGV4IEdQYXlcIiwgT2pzRmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAgIC8vIEFpcndhbGxleCBBcHBsZVBheVxuICAgIGFpcndhbGxleEFwcGxlUGF5OiBjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlcihcIkFpcndhbGxleCBBcHBsZVBheVwiLCBPanNGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5pbml0KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIH07XG59O1xuXG5jb25zdCB7IGVycl9fOiBlcnJfXyQxIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHouZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHoub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18kMSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY2xhc3MgT3BlblBheUZvcm1FdmVudEhhbmRsZXIge1xuICBjb25zdHJ1Y3Rvcihmb3JtSWQsIGJhc2VVcmwsIGZvcm1DYWxsYmFja3MsIGludGVybmFsQ2FsbGJhY2tzKSB7XG4gICAgdGhpcy5oYW5kbGVNZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnNvdXJjZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIHNvdXJjZSBmb3VuZGApO1xuICAgICAgfVxuICAgICAgaWYgKGdldENsZWFuT3JpZ2luKGV2ZW50Lm9yaWdpbikgIT09IGdldENsZWFuT3JpZ2luKHRoaXMuYmFzZVVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBldmVudC5kYXRhID09PSBcIm9iamVjdFwiICYmIGV2ZW50LmRhdGFbXCJwZW5wYWxcIl0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZXZlbnREYXRhID0gcGFyc2VFdmVudFBheWxvYWQoSlNPTi5wYXJzZShldmVudC5kYXRhKSk7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdGhpcy52YWxpZGF0ZUV2ZW50KGV2ZW50RGF0YSk7XG4gICAgICBpZiAoIWlzVmFsaWQpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkLCBwYXlsb2FkIH0gPSBldmVudERhdGE7XG4gICAgICBjb25zdCBldmVudFR5cGUgPSBwYXlsb2FkLnR5cGU7XG4gICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHBheWxvYWQuaGVpZ2h0ID8gYCR7cGF5bG9hZC5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMoZWxlbWVudElkLCBwYXlsb2FkLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cihlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShlbGVtZW50SWQsIHBheWxvYWQuZWxlbWVudFR5cGUsIHBheWxvYWQuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2VsZW1lbnRJZF0gPSBldmVudC5zb3VyY2U7XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChwYXlsb2FkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHBheWxvYWQubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihwYXlsb2FkLmVsZW1lbnRUeXBlLCBwYXlsb2FkLmVycm9ycywgZWxlbWVudElkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGV2ZW50VHlwZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnZhbGlkYXRlRXZlbnQgPSAoZXZlbnREYXRhKSA9PiB7XG4gICAgICBpZiAoZXZlbnREYXRhLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWV2ZW50RGF0YS5lbGVtZW50SWQpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGV2ZW50RGF0YS5mb3JtSWQpO1xuICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgZXZlbnREYXRhKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubm9uY2VzLmhhcyhldmVudERhdGEubm9uY2UpKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGV2ZW50RGF0YSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMubm9uY2VzLmFkZChldmVudERhdGEubm9uY2UpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgICB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9O1xuICAgIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLmZvcm1JZCA9IGZvcm1JZDtcbiAgICB0aGlzLmJhc2VVcmwgPSBiYXNlVXJsO1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGZvcm1DYWxsYmFja3M7XG4gICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGludGVybmFsQ2FsbGJhY2tzO1xuICB9XG59XG5jb25zdCBnZXRDbGVhbk9yaWdpbiA9ICh1cmwpID0+IHtcbiAgcmV0dXJuIG5ldyBVUkwodXJsKS5vcmlnaW47XG59O1xuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVDb25uZWN0aW9uKGlmcmFtZSwgY2hpbGRPcmlnaW4pIHtcbiAgY29uc3QgY29ubmVjdGlvbiA9IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWUsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGNoaWxkT3JpZ2luXG4gIH0pO1xuICBjb25zdCBjb25uZWN0aW9uT2JqID0gYXdhaXQgY29ubmVjdGlvbi5wcm9taXNlO1xuICBjb25zdCBpc1ZhbGlkT2JqZWN0ID0gYXdhaXQgY2hlY2tJZlZhbGlkQ2RlQ29ubmVjdGlvbk9iamVjdChjb25uZWN0aW9uT2JqKTtcbiAgaWYgKCFpc1Jlc3VsdFZhbGlkKGNvbm5lY3Rpb25PYmosIGlzVmFsaWRPYmplY3QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RgKTtcbiAgfVxuICByZXR1cm4gY29ubmVjdGlvbk9iajtcbn1cbmNsYXNzIENvbm5lY3Rpb25NYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihpZCwgY29ubmVjdGlvbikge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KGlkLCBjb25uZWN0aW9uKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIH1cbiAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuXG5jb25zdCBzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMgPSAoaW5pdFByRmxvd3MsIGNvbnRleHQsIGNhbGxiYWNrcykgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSIH0gPSBpbml0UHJGbG93cztcbiAgc3RyaXBlUFIucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGluaXRSZXN1bHQgPSByZXN1bHQubG9hZGVkVmFsdWU7XG4gICAgICBjb25zdCBjYW5BcHBsZVBheSA9IGluaXRSZXN1bHQuaXNBdmFpbGFibGUgJiYgaW5pdFJlc3VsdC5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXk7XG4gICAgICBjb25zdCBjYW5Hb29nbGVQYXkgPSBpbml0UmVzdWx0LmlzQXZhaWxhYmxlICYmIGluaXRSZXN1bHQuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheTtcbiAgICAgIGNvbnN0IGZpbmFsU3RhdHVzID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjYW5BcHBsZVBheSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1c2VyUGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2FuQXBwbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiYXBwbGVfcGF5XCIsIGluaXRSZXN1bHQsIGNvbnRleHQsIGNhbGxiYWNrcywgdXNlclBhcmFtcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogY2FuR29vZ2xlUGF5LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHVzZXJQYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmIChjYW5Hb29nbGVQYXkpIHtcbiAgICAgICAgICAgICAgcnVuU3RyaXBlUHJGbG93KFwiZ29vZ2xlX3BheVwiLCBpbml0UmVzdWx0LCBjb250ZXh0LCBjYWxsYmFja3MsIHVzZXJQYXJhbXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNhbGxiYWNrcy5nZXQub25QYXltZW50UmVxdWVzdExvYWQoZmluYWxTdGF0dXMpO1xuICAgIH1cbiAgfSk7XG59O1xuY29uc3QgcnVuU3RyaXBlUHJGbG93ID0gKHByb3ZpZGVyLCBpbml0UmVzdWx0LCBjb250ZXh0LCBmb3JtQ2FsbGJhY2tzLCBwYXJhbXMpID0+IHtcbiAgcmV0dXJuIE9qc0Zsb3dzLnN0cmlwZVBSLnJ1bih7XG4gICAgY29udGV4dCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QoY29udGV4dC5jaGVja291dFBheW1lbnRNZXRob2RzLCBwcm92aWRlciksXG4gICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgZm9ybUNhbGxiYWNrcyxcbiAgICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXIsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHBhcmFtcz8ub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICAgIGluaXRSZXN1bHRcbiAgfSk7XG59O1xuXG5jb25zdCBHRU5FUklDX0NPTk5fRVJSID0gYFRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLmA7XG5jb25zdCB7IGxvZ19fLCBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJvcC1mb3JtXCIpO1xuY2xhc3MgT3BlblBheUZvcm0ge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBMb2FkZWRPbmNlUHVibGlzaGVyKCk7XG4gICAgdGhpcy5hbnlDZGVDb25uID0gbmV3IExvYWRlZE9uY2VQdWJsaXNoZXIoKTtcbiAgICB0aGlzLmNvbnRleHQgPSBuZXcgTG9hZGVkT25jZVB1Ymxpc2hlcigpO1xuICAgIHRoaXMuaW5pdEZsb3dzID0gY3JlYXRlSW5pdEZsb3dzUHVibGlzaGVycygpO1xuICAgIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGxvZ19fKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIik7XG4gICAgICAgIGxvZ19fKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBjZGVMb2FkZWQgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgYW55Q2RlQ29ubiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEdFTkVSSUNfQ09OTl9FUlJcbiAgICAgICAgfSk7XG4gICAgICAgIGxvZ19fKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpO1xuICAgICAgICBsb2dfXyhcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3Qgb2pzQ29udGV4dCA9IE9wZW5QYXlGb3JtLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgY2RlTG9hZGVkLFxuICAgICAgICAgIGFueUNkZUNvbm4sXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChvanNDb250ZXh0KTtcbiAgICAgICAgc2V0dXBQYXltZW50UmVxdWVzdEhhbmRsZXJzKHRoaXMuaW5pdEZsb3dzLCBvanNDb250ZXh0LCB0aGlzLmZvcm1DYWxsYmFja3MpO1xuICAgICAgICBsb2dfXyhcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKTtcbiAgICAgICAgYXdhaXQgc3RhcnRBbGxJbml0Rmxvd3ModGhpcy5pbml0Rmxvd3MsIG9qc0NvbnRleHQsIHRoaXMuZm9ybUNhbGxiYWNrcyk7XG4gICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGNkZUxvYWRlZC50b3RhbEFtb3VudEF0b21zLCBjZGVMb2FkZWQuY3VycmVuY3kpO1xuICAgICAgICBsb2dfXyhcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEVycm9yTWVzc2FnZShlcnIpO1xuICAgICAgICBlcnJfXyhcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihlcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGhlaWdodCkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICBpZiAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuO1xuICAgICAgICAgIGVsZW1lbnQubm9kZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5vbkNkZUxvYWRlZCA9IChwYXlsb2FkKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnNldChwYXlsb2FkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZXJyTXNnKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlcnJNc2cpLCBlcnJNc2cpO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGVsZW1lbnRWYWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgdHlwZSA9IEVsZW1lbnRUeXBlLnBhcnNlKGVsZW1lbnRWYWx1ZSk7XG4gICAgICBjb25zdCBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhvcHRpb25zKTtcbiAgICAgIGZyYW1lLm5hbWUgPSBgJHt0eXBlfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwoYC9hcHAvdjEvJHtmcmFtZS5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHVybC5zZWFyY2ggPSBxdWVyeVN0cmluZy50b1N0cmluZygpO1xuICAgICAgZnJhbWUuc3JjID0gdXJsLmhyZWY7XG4gICAgICBmcmFtZS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIjtcbiAgICAgIGZyYW1lLnN0eWxlLndpZHRoID0gXCIxMDAlXCI7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHRoaXMucmVnaXN0ZXJJZnJhbWUodHlwZSwgZnJhbWUpO1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWRFbGVtZW50O1xuICAgIH07XG4gICAgdGhpcy5yZWdpc3RlcklmcmFtZSA9ICh0eXBlLCBmcmFtZSkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudCA9IHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgbm9kZTogZnJhbWUsXG4gICAgICAgIG1vdW50OiAoc2VsZWN0b3IpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpPy5hcHBlbmRDaGlsZChmcmFtZSlcbiAgICAgIH07XG4gICAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBlbGVtZW50LnR5cGUsIG5vZGU6IGVsZW1lbnQubm9kZSB9KTtcbiAgICAgIGlmICghdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpIHtcbiAgICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEXTogdm9pZCAwLFxuICAgICAgICAgIFtFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgICAgW0VsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgICBbRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1t0eXBlXSA9IGVsZW1lbnQ7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9O1xuICAgIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChvcHRpb25zKSA9PiB7XG4gICAgICBjb25zdCBxdWVyeVN0cmluZyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlcik7XG4gICAgICBxdWVyeVN0cmluZy5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpO1xuICAgICAgaWYgKG9wdGlvbnMuc3R5bGVzKSB7XG4gICAgICAgIHF1ZXJ5U3RyaW5nLmFwcGVuZChcInN0eWxlc1wiLCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhvcHRpb25zLnN0eWxlcykpO1xuICAgICAgfVxuICAgICAgcXVlcnlTdHJpbmcuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgICByZXR1cm4gcXVlcnlTdHJpbmc7XG4gICAgfTtcbiAgICB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZWxlbWVudCkgPT4ge1xuICAgICAgY3JlYXRlQ29ubmVjdGlvbihlbGVtZW50Lm5vZGUpLnRoZW4oKGNvbm4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGVsZW1lbnQudHlwZSwgY29ubik7XG4gICAgICAgIGlmICghdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5hbnlDZGVDb25uLnNldChjb25uKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKGVycikgPT4gZXJyX18oXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIGVycikpO1xuICAgIH07XG4gICAgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIH07XG4gICAgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIE9qc0Zsb3dzLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGNyZWF0ZUlucHV0c0RpY3RGcm9tRm9ybShjb250ZXh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmFsU3VibWl0ID0gKG1ldGhvZCkgPT4ge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICBlcnJfXyhcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAobWV0aG9kKSB7XG4gICAgICAgIGNhc2UgXCJwb2NreXQtcGF5cGFsXCI6XG4gICAgICAgICAgcmV0dXJuIE9qc0Zsb3dzLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZmluZENoZWNrb3V0UGF5bWVudE1ldGhvZFN0cmljdChjb250ZXh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtKGNvbnRleHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHZvaWQgMCxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5sb2FkZWRWYWx1ZS5zdGFydEZsb3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LmxvYWRlZFZhbHVlLnN0YXJ0RmxvdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGFzc2VydE5ldmVyKG1ldGhvZCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZDtcbiAgICB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpIHtcbiAgICAgICAgaWYgKCFlbGVtZW50KSBjb250aW51ZTtcbiAgICAgICAgZWxlbWVudC5ub2RlLnJlbW92ZSgpO1xuICAgICAgfVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgICAgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsO1xuICAgICAgZGVsZXRlIHdpbmRvd1tcIm9qc1wiXTtcbiAgICB9O1xuICAgIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKG5ld0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhuZXdDYWxsYmFja3MpO1xuICAgIH07XG4gICAgT3BlblBheUZvcm0uYXNzaWduQXNTaW5nbGV0b24odGhpcyk7XG4gICAgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuMlwiO1xuICAgIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcIjAuMi4yXCI7XG4gICAgdGhpcy5iYXNlVXJsID0gY29uZmlnLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiO1xuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9O1xuICAgIHRoaXMuZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdChjb25maWcpO1xuICAgIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbDtcbiAgICB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWA7XG4gICAgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgdGhpcy5mb3JtVGFyZ2V0ID0gY29uZmlnLmZvcm1UYXJnZXQgPz8gXCJib2R5XCI7XG4gICAgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH07XG4gICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBDb25uZWN0aW9uTWFuYWdlcigpO1xuICAgIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IE9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMub2pzRmxvd3MgPSBPanNGbG93cztcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuYXNzaWduQXNTaW5nbGV0b24gPSAoZm9ybSkgPT4ge1xuICAgICAgaWYgKE9wZW5QYXlGb3JtLmdldEluc3RhbmNlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gICAgICB9XG4gICAgICB3aW5kb3dbXCJvanNcIl0gPSBmb3JtO1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmdldEluc3RhbmNlID0gKCkgPT4ge1xuICAgICAgcmV0dXJuIHdpbmRvd1tcIm9qc1wiXSA/PyBudWxsO1xuICAgIH07XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAoY29uZmlnLCBjZGVMb2FkZWRQYXlsb2FkLCBhbnlDZGVDb25uZWN0aW9uLCBmb3JtRGl2KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjaGVja291dFNlY3VyZVRva2VuOiBjb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgICAgYmFzZVVybDogbmV3IFVSTChjb25maWcuYmFzZVVybCA/PyBGUkFNRV9CQVNFX1VSTCkub3JpZ2luLFxuICAgICAgICBmb3JtRGl2LFxuICAgICAgICBlbGVtZW50c1Nlc3Npb25JZDogY2RlTG9hZGVkUGF5bG9hZC5zZXNzaW9uSWQsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGNkZUxvYWRlZFBheWxvYWQuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgICAgY3VzdG9tSW5pdFBhcmFtczogY29uZmlnLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbiAgICAgIH07XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgeyBGaWVsZE5hbWUsIE9wZW5QYXlGb3JtIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFBQSxTQUFTO0FBQ2xCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxRQUFXO0FBRWxCLE1BQU1DLEtBQWlCLDhCQUVqQkMsS0FBNEJMLEVBQUUsT0FBTztBQUFBLEVBQ3pDLE1BQU1BLEVBQUUsT0FBTztBQUFBLEVBQ2YsS0FBS0EsRUFBRSxNQUFNQSxFQUFFLE9BQU8sQ0FBQztBQUFBLEVBQ3ZCLEtBQUtBLEVBQUUsT0FBTztBQUFBLEVBQ2QsS0FBS0EsRUFBRSxPQUFPO0FBQ2hCLENBQUMsR0FDS00sS0FBa0NOLEVBQUUsTUFBTUssRUFBeUIsR0FDbkVFLEtBQWdCUCxFQUFFLE9BQU87QUFBQSxFQUM3QixNQUFNQSxFQUFFLE9BQU87QUFBQSxFQUNmLFNBQVNBLEVBQUUsT0FBTztBQUFBLEVBQ2xCLE1BQU1BLEVBQUUsTUFBTUEsRUFBRSxPQUFPLENBQUM7QUFDMUIsQ0FBQyxHQUNLUSxLQUFpQlIsRUFBRSxNQUFNTyxFQUFhLEdBQ3RDRSxLQUFrQztBQUFBLEVBQ3RD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SUEsRUFBTyxXQUFXZ1EsRUFBYyxFQUFFO0FBQUEsRUFDbkQsU0FBQUQ7QUFBQSxFQUNBLG1CQUFtQkYsRUFBaUI7QUFBQSxFQUNwQyx3QkFBd0JBLEVBQWlCO0FBQUEsRUFDekMsa0JBQUFDO0FBQUEsRUFDQSxrQkFBa0I5UCxFQUFPLG9CQUFvQixDQUFDO0FBQ2hEO0FBaE9OLElBQU1pUSxLQUFOekI7IiwKICAibmFtZXMiOiBbInoiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiY2hhbGsiLCAiRlJBTUVfQkFTRV9VUkwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvclJlc3BvbnNlIiwgIlpvZEZpZWxkRXJyb3IiLCAiWm9kRmllbGRFcnJvcnMiLCAiTUFQX1RPX0hVTUFOX0ZSSUVORExZX0xPV0VSQ0FTRSIsICJnZXRIdW1hbkZyaWVuZGx5TWVzc2FnZSIsICJvZ0Vycm9yTWVzc2FnZSIsICJrZXkiLCAiaXNTdHJpbmdpZmllZEpzb25PYmplY3QiLCAic3RyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAicmVzcG9uc2UiLCAiZXJyIiwgImNyZWF0ZU1lc3NhZ2VGcm9tWm9kRmllbGRFcnJvcnMiLCAiZXJyb3JzIiwgImdldEVycm9yTWVzc2FnZSIsICJlIiwgIm9iaiIsICJlMiIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJmbiIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJFbGVtZW50VHlwZSIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkVsZW1lbnRFdmVudCIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIlRva2VuaXplQ2FyZFJlc3BvbnNlIiwgIlRocmVlRFNTdGF0dXMiLCAiVGhyZWVEU1N0YXR1czIiLCAiUGluZzNEU1N0YXR1c1Jlc3BvbnNlIiwgIkNvbW1vbjNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEiLCAiQ2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWRSZXNwb25zZSIsICJDb25maXJtUGF5bWVudEZsb3dSZXNwb25zZSIsICJleHRyYWN0SXNzdWVzUGVyRmllbGQiLCAiaXNzdWVzUGVyRmllbGQiLCAidmFsdWUiLCAiZmllbGROYW1lIiwgIlN0cmlwZTNEU05leHRBY3Rpb25NZXRhZGF0YSIsICJQYXltZW50UmVxdWVzdE5leHRBY3Rpb25NZXRhZGF0YSIsICJvdXJDdXJyZW5jeVRvVGhlaXJzIiwgImdldExvYWRlZFN0cmlwZSIsICJwdWJsaXNoYWJsZUtleSIsICJpIiwgImlzU3RyaXBlSnNQcmVzZW50IiwgInNsZWVwIiwgImNyZWF0ZVN0cmlwZUVsZW1lbnRzIiwgInN0cmlwZVB1YktleSIsICJlbGVtZW50c09wdGlvbnMiLCAic3RyaXBlIiwgImNyZWF0ZVN0cmlwZVBheW1lbnRSZXF1ZXN0IiwgInRvdGFsQW1vdW50QXRvbSIsICJjdXJyZW5jeSIsICJpc0Ftb3VudFBlbmRpbmciLCAiaXNMaW5rT25seSIsICJzdHJpcGVDdXJyZW5jeSIsICJ0aW1lb3V0TXMiLCAicmVzb2x2ZSIsICJ3YWl0Rm9yVXNlclRvQWRkUGF5bWVudE1ldGhvZCIsICJwYXltZW50UmVxdWVzdCIsICJyZWplY3QiLCAiZXZ0IiwgImNvbmZpcm1TdHJpcGVQclBNIiwgIm5leHRBY3Rpb25NZXRhZGF0YSIsICJzdHJpcGVQbSIsICJjb25maXJtUmVzdWx0IiwgImxhdW5jaFN0cmlwZTNEU0RpYWxvZ0Zsb3ciLCAiX2EiLCAiX2IiLCAiX2MiLCAiX2QiLCAicmVzdWx0U3RhdHVzIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJjcmVhdGVJbnB1dHNEaWN0RnJvbUZvcm0iLCAiZm9ybURpdiIsICJpbml0aWFsRGljdCIsICJhY2MiLCAiaW5wdXQiLCAicGFyc2VFdmVudFBheWxvYWQiLCAiZXZlbnREYXRhIiwgImNoZWNrSWZWYWxpZENkZUNvbm5lY3Rpb25PYmplY3QiLCAicGluZyIsICJyZXN1bHQiLCAiaXNSZXN1bHRWYWxpZCIsICJpc1ZhbGlkIiwgIm51bGxPclVuZGVmT3IiLCAiQ0RFUmVzcG9uc2VFcnJvciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UiLCAiU2V0dXBDaGVja291dFJlc3BvbnNlIiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yIiwgIk5ld0N1c3RvbWVyRmllbGRzIiwgIlByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEiLCAiU3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIlN0YXJ0UGF5bWVudEZsb3dGb3JDQ1Jlc3BvbnNlIiwgInN1bSIsICJhcnIiLCAiYSIsICJiIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzJDEiLCAiX2V4dGVuZFN0YXRpY3MiLCAiZCIsICJwIiwgIl9fIiwgIkN1c3RvbUVycm9yIiwgIl9zdXBlciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJDZGVFcnJvciIsICJmcmllbmRseU1lc3NhZ2UiLCAicXVlcnlDREUiLCAiY2RlQ29ubiIsICJkYXRhIiwgInJlc3BvbnNlU2NoZW1hIiwgImlzQ0RFUmVzcG9uc2VFcnJvciIsICJjaGVja0lmQ29uZm9ybXNUb1NjaGVtYSIsICJzY2hlbWEiLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3IiwgInJlcXVlc3QiLCAiZ2V0UHJlZmlsbCIsICJzdGFydFBheW1lbnRGbG93IiwgInBheWxvYWQiLCAic3RhcnRQYXltZW50Rmxvd0ZvckNDIiwgInN0YXJ0UGF5bWVudEZsb3dGb3JQUiIsICJjb25maXJtUGF5bWVudEZsb3ciLCAiZmluYWxpemVTZXR1cFBheW1lbnRNZXRob2QiLCAiY2hlY2tJZlBvcHVwV2luZG93VmVyaWZpZWQiLCAiZ2V0Q2hlY2tvdXRWYWx1ZSIsICJzZWN1cmVUb2tlbiIsICJwcm9tb0NvZGUiLCAiY2hlY2tvdXRQcmV2aWV3IiwgImN1cnJlbmNpZXMiLCAiaW52IiwgImFtb3VudEF0b20iLCAiZ2V0Q2hlY2tvdXRQcmV2aWV3QW1vdW50IiwgImlzU2V0dXBNb2RlIiwgInRva2VuaXplQ2FyZE9uQWxsQ29ubmVjdGlvbnMiLCAiYWxsQ2RlQ29ubmVjdGlvbnMiLCAiY2hlY2tvdXRDYXJkRWxlbWVudHMiLCAic2V0dXBDaGVja291dCIsICJwZXJmb3JtQ2hlY2tvdXQiLCAiQ0RFX1BPTExJTkdfSU5URVJWQUwiLCAicGluZ0NkZUZvcjNkc1N0YXR1cyIsICJpZnJhbWUiLCAiY2hpbGRPcmlnaW4iLCAiY29ubmVjdGlvbk9iaiIsICJhc3NlcnROZXZlciIsICJhZGRCYXNpY0NoZWNrb3V0Q2FsbGJhY2tIYW5kbGVycyIsICJzaW1wbGVPanNGbG93IiwgInBhcmFtcyIsICJmbG93UmVzdWx0IiwgImFkZEVycm9yQ2F0Y2hlckZvckluaXQiLCAiaW5pdCIsICJlcnJfXyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImxvZ19fJGMiLCAiZXJyX18kYiIsICJwYXJzZUNvbmZpcm1QYXltZW50Rmxvd1Jlc3BvbnNlIiwgImZpbmRDcG1NYXRjaGluZ1R5cGUiLCAiYWxsQ1BNcyIsICJ6b2RNb2RlbCIsICJjcG0iLCAiY3BtMiIsICJjcmVhdGVDdXN0b21lckZpZWxkc0Zyb21Gb3JtIiwgImZpZWxkcyIsICJwZXJmb3JtU2ltcGxlQ2hlY2tvdXRPclNldHVwIiwgImxvZ1ByZWZpeCIsICJhbnlDZGVDb25uZWN0aW9uIiwgImNoZWNrb3V0UGF5bWVudE1ldGhvZCIsICJyZXF1aXJlZEZvcm1GaWVsZHMiLCAibG9nX18yIiwgInByZWZpbGwiLCAiY3JlYXRlZFBheW1lbnRNZXRob2QiLCAiY2hlY2tvdXRSZXF1ZXN0IiwgImxvZ19fJGIiLCAiZXJyX18kYSIsICJ2YWxpZGF0ZU5vbkNkZUZvcm1GaWVsZHNGb3JDQyIsICJub25DZGVGb3JtSW5wdXRzIiwgIm9uVmFsaWRhdGlvbkVycm9yIiwgImZvcm1hdHRlZCIsICJpc3N1ZXMiLCAidmFsaWRhdGVUb2tlbml6ZUNhcmRSZXN1bHRzIiwgInRva2VuaXplUmVzdWx0cyIsICJ0b2tlbml6ZVJlc3VsdCIsICJwYXJzZWQiLCAiT0pTX1NUUklQRV9MSU5LX0JUTl9JRCIsICJsb2dfXyRhIiwgImVycl9fJDkiLCAiU3RyaXBlTGlua0NwbSIsICJTdHJpcGVMaW5rUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJpbml0U3RyaXBlTGlua0Zsb3ciLCAiY29udGV4dCIsICJmb3JtQ2FsbGJhY2tzIiwgImluaXRQYXJhbXMiLCAic3RyaXBlTGlua0NwbSIsICJpbml0aWFsUHJldmlldyIsICJlbGVtZW50cyIsICJleHByZXNzQ2hlY2tvdXRFbGVtZW50IiwgIm1vdW50QnV0dG9uIiwgImRpc21vdW50QnV0dG9uIiwgImV2ZW50IiwgIk9qc0Zsb3dzIiwgImdldEVsZW1lbnRCeUlkQXN5bmMiLCAicnVuU3RyaXBlTGlua0Zsb3ciLCAiY3VzdG9tUGFyYW1zIiwgIm1lcmdlZElucHV0cyIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBNIiwgIm5vbkNkZUZvcm1GaWVsZHMiLCAic3RhcnRQYXltZW50Rmxvd1Jlc3BvbnNlIiwgIm91ckV4aXN0aW5nUG1JZCIsICJmb3JtSW5wdXRzIiwgIl9lIiwgImlucHV0cyIsICJwYXllckZpcnN0TmFtZSIsICJwYXllckxhc3ROYW1lUGFydHMiLCAicGF5ZXJMYXN0TmFtZSIsICJpZCIsICJnZXRFbGVtZW50IiwgImVsZW1lbnQiLCAiY3JlYXRlQW5kT3BlbkZyYW1lIiwgInVybCIsICJ0ZW1wbGF0ZSIsICJob3N0IiwgInNoYWRvd1Jvb3QiLCAiY2FuY2VsQnV0dG9uIiwgInN0YXJ0UG9sbGluZyIsICJvblN1Y2Nlc3MiLCAiaGFuZGxlUG9sbGluZyIsICJzdGF0dXMiLCAicG9sbGluZ0ludGVydmFsIiwgImhhbmRsZUV2ZW50cyIsICJoYW5kbGVDYW5jZWwiLCAic3RhcnQzZHNWZXJpZmljYXRpb24iLCAiYmFzZVVybCIsICJjbGVhbnVwRXZlbnRMaXN0ZW5lcnMiLCAic3RhcnQzZHNWZXJpZmljYXRpb25TdHJpY3QiLCAib3BlblBvcHVwV2luZG93IiwgInBvcHVwTmFtZSIsICJwb3B1cFdpbmRvdyIsICJzdGFydFBvcHVwV2luZG93VmVyaWZpY2F0aW9uU3RyaWN0IiwgImV4cGVjdGVkVmVyaWZ5VG9rZW4iLCAicG9sbGluZyIsICJ2ZXJpZnlSZXN1bHQiLCAibG9nX18kOSIsICJlcnJfXyQ4IiwgIlBvY2t5dDNkc0Vycm9yUmVzcG9uc2VIZWFkZXJzIiwgInBhcnNlUmVzcG9uc2VIZWFkZXJzJDEiLCAiZXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXN1bHQiLCAiZnJpZW5kbHlFcnIiLCAiZGV2RXJyIiwgInBhcnNlVmF1bHRJZEZyb20zZHNIcmVmIiwgImhyZWYiLCAidmF1bHRJZCIsICJlcnJNc2ciLCAiY2hlY2tJZlJlcXVpcmVzUG9ja3l0M2RzIiwgInJ1blBvY2t5dDNkc0Zsb3ciLCAiaGVhZGVycyIsICJsb2dfXyQ4IiwgImVycl9fJDciLCAiQWlyd2FsbGV4M2RzRXJyb3JSZXNwb25zZUhlYWRlcnMiLCAicGFyc2VSZXNwb25zZUhlYWRlcnMiLCAiY2hlY2tJZlJlcXVpcmVzQWlyd2FsbGV4M2RzIiwgInBhcnNlSW50ZW50SWRGcm9tM2RzSHJlZiIsICJpbnRlbnRJZCIsICJydW5BaXJ3YWxsZXgzZHNGbG93IiwgImluaXRpYWxJbnRlbnRJZCIsICJsb2dfXyQ3IiwgImVycl9fJDYiLCAic3RyaXBlTG9nX18iLCAicnVuQ29tbW9uQ2NGbG93IiwgImNvbW1vbkNoZWNrb3V0UGFyYW1zIiwgInRva2VuaXplQ2FyZFJlc3VsdHMiLCAicmVxdWlyZXNQb2NreXQzZHMiLCAicG9ja3l0TWV0YWRhdGFGb3JDaGVja291dCIsICJyZXF1aXJlc0FpcndhbGxleDNkcyIsICJhaXJ3YWxsZXhNZXRhZGF0YUZvckNoZWNrb3V0IiwgInN0YXJ0UGZSZXN1bHQiLCAicHJlU3RhcnQzZHNDb21wbGV0ZSIsICJzaG91bGRVc2VTdHJpcGVGbG93IiwgInN0cmlwZUNDM0RTRmxvdyIsICJjb21tb25DQzNEU0Zsb3ciLCAiY2NQbUlkIiwgInBhcnNlU3RyaXBlM0RTTmV4dEFjdGlvbk1ldGFkYXRhIiwgInN0cmlwZUFjdGlvbiIsICJhY3Rpb24iLCAicGFyc2VDb21tb24zRFNOZXh0QWN0aW9uTWV0YWRhdGEiLCAiY29tbW9uQWN0aW9uIiwgImxvZ19fJDYiLCAiZXJyX18kNSIsICJTdHJpcGVQckNwbSIsICJpbml0U3RyaXBlUHJGbG93IiwgInByIiwgImNhbk1ha2VQYXltZW50IiwgInJ1blN0cmlwZVByRmxvdyQxIiwgImluaXRSZXN1bHQiLCAib3ZlcnJpZGUiLCAidXBkYXRlUHJXaXRoQW1vdW50IiwgInN0cmlwZVBtQWRkZWRFdmVudCIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aFN0cmlwZVBtIiwgInBhcnNlUFJOZXh0QWN0aW9uTWV0YWRhdGEiLCAic3RyaXBlUG1FdnQiLCAiYmlsbGluZ0FkZHJlc3MiLCAic2hpcHBpbmdBZGRyZXNzIiwgImFtb3VudCIsICJpc1BlbmRpbmciLCAic3RyaXBlQXBwbGVQYXkiLCAibG9nX18kNSIsICJQb2NreXRQYXlwYWxDcG0iLCAiUG9ja3l0UGF5cGFsUmVxdWlyZWRVc2VyQWN0aW9ucyIsICJydW5Qb2NreXRQYXlwYWxGbG93IiwgIm5ld0N1c3RvbWVyRmllbGRzIiwgInBheXBhbEZsb3dSZXN1bHQiLCAiZ2V0UGF5bWVudERhdGFSZXF1ZXN0IiwgImdhdGV3YXkiLCAiZ2F0ZXdheU1lcmNoYW50SWQiLCAibWVyY2hhbnROYW1lIiwgIm1lcmNoYW50SWQiLCAiYmFzZVJlcXVlc3QiLCAidG90YWxQcmljZSIsICJsb2FkR29vZ2xlUGF5U2NyaXB0IiwgInNjcmlwdCIsICJwYXJzZUFpcndhbGxleFN0YXJ0UGF5bWVudEZsb3dSZXNwb25zZSIsICJmaWxsRW1wdHlGb3JtSW5wdXRzV2l0aEdvb2dsZVBheSIsICJwYXltZW50RGF0YSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWVQYXJ0cyIsICJsYXN0TmFtZSIsICJsb2dfXyQ0IiwgImVycl9fJDQiLCAicGF5bWVudHNDbGllbnQiLCAiZ2V0R29vZ2xlUGF5bWVudHNDbGllbnQiLCAiZW52aXJvbm1lbnQiLCAiR29vZ2xlUGF5Q3BtIiwgImluaXRBaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgImdvb2dsZVBheUNwbSIsICJwcm9jZXNzb3JBY2NvdW50IiwgImlzUmVhZHlUb1BheSIsICJydW5BaXJ3YWxsZXhHb29nbGVQYXlGbG93IiwgIl9mIiwgIl9nIiwgImNsaWVudCIsICJwYXltZW50RGF0YVJlcXVlc3QiLCAiZW5jcnlwdGVkUGF5bWVudFRva2VuIiwgInN0YXJ0Rmxvd05leHRBY3Rpb25zIiwgIm91clBtSWQiLCAiY29uZmlybVJlc3VsdDIiLCAibG9hZEFwcGxlUGF5U2NyaXB0IiwgImZpbGxFbXB0eUZvcm1JbnB1dHNXaXRoQXBwbGVQYXkiLCAiYmlsbGluZ0NvbnRhY3QiLCAibG9nX18kMyIsICJoYW5kbGVWYWxpZGF0ZU1lcmNoYW50IiwgInJlcXVpcmVkVXNlckFjdGlvbnMiLCAicGF5bWVudFNlc3Npb25SZXNwb25zZSIsICJjb25zZW50SWQiLCAiaGFuZGxlM0RTIiwgInBlcmZvcm1DaGVja291dFdpdGhQbUlkIiwgImhhbmRsZVBheW1lbnRBdXRob3JpemVkIiwgImxvZ19fJDIiLCAiZXJyX18kMyIsICJBcHBsZVBheUNwbSIsICJpbml0QWlyd2FsbGV4QXBwbGVQYXlGbG93IiwgImFwcGxlUGF5Q3BtIiwgInJ1bkFpcndhbGxleEFwcGxlUGF5RmxvdyIsICJ0b3RhbCIsICJzZXNzaW9uIiwgInNlc3Npb25Db250ZXh0IiwgInVwZGF0ZSIsICJmaW5kQ2hlY2tvdXRQYXltZW50TWV0aG9kU3RyaWN0IiwgImNwbXMiLCAid2l0aFByb3ZpZGVyIiwgIndpdGhQcm9jZXNzb3IiLCAibWF0Y2hlcyIsICJtYXRjaGVzUHJvY2Vzc29yIiwgIm1hdGNoZXNQcm92aWRlciIsICJleHRlbmRTdGF0aWNzIiwgIl9fZXh0ZW5kcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgInJlamVjdGVkIiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJ0IiwgImYiLCAieSIsICJnIiwgInZlcmIiLCAibiIsICJ2IiwgIm9wIiwgIl9fdmFsdWVzIiwgIm8iLCAicyIsICJtIiwgIl9fcmVhZCIsICJyIiwgImFyIiwgIl9fc3ByZWFkQXJyYXkiLCAidG8iLCAiZnJvbSIsICJwYWNrIiwgImwiLCAiX19hd2FpdCIsICJfX2FzeW5jR2VuZXJhdG9yIiwgInEiLCAiYXdhaXRSZXR1cm4iLCAicmVzdW1lIiwgInNldHRsZSIsICJmdWxmaWxsIiwgIl9fYXN5bmNWYWx1ZXMiLCAiaXNGdW5jdGlvbiIsICJ2YWx1ZSIsICJjcmVhdGVFcnJvckNsYXNzIiwgImNyZWF0ZUltcGwiLCAiX3N1cGVyIiwgImluc3RhbmNlIiwgImN0b3JGdW5jIiwgIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCAiZXJyb3JzIiwgImVyciIsICJhcnJSZW1vdmUiLCAiYXJyIiwgIml0ZW0iLCAiaW5kZXgiLCAiU3Vic2NyaXB0aW9uIiwgImluaXRpYWxUZWFyZG93biIsICJlXzEiLCAiX2EiLCAiZV8yIiwgIl9iIiwgIl9wYXJlbnRhZ2UiLCAiX3BhcmVudGFnZV8xIiwgIl9fdmFsdWVzIiwgIl9wYXJlbnRhZ2VfMV8xIiwgInBhcmVudF8xIiwgImVfMV8xIiwgImluaXRpYWxGaW5hbGl6ZXIiLCAiZSIsICJfZmluYWxpemVycyIsICJfZmluYWxpemVyc18xIiwgIl9maW5hbGl6ZXJzXzFfMSIsICJmaW5hbGl6ZXIiLCAiZXhlY0ZpbmFsaXplciIsICJfX3NwcmVhZEFycmF5IiwgIl9fcmVhZCIsICJlXzJfMSIsICJ0ZWFyZG93biIsICJwYXJlbnQiLCAiZW1wdHkiLCAiRU1QVFlfU1VCU0NSSVBUSU9OIiwgImlzU3Vic2NyaXB0aW9uIiwgImNvbmZpZyIsICJ0aW1lb3V0UHJvdmlkZXIiLCAiaGFuZGxlciIsICJ0aW1lb3V0IiwgImFyZ3MiLCAiX2kiLCAiaGFuZGxlIiwgImRlbGVnYXRlIiwgInJlcG9ydFVuaGFuZGxlZEVycm9yIiwgIm5vb3AiLCAiZXJyb3JDb250ZXh0IiwgImNiIiwgIlN1YnNjcmliZXIiLCAiX19leHRlbmRzIiwgImRlc3RpbmF0aW9uIiwgIl90aGlzIiwgIkVNUFRZX09CU0VSVkVSIiwgIm5leHQiLCAiZXJyb3IiLCAiY29tcGxldGUiLCAiU2FmZVN1YnNjcmliZXIiLCAiX2JpbmQiLCAiYmluZCIsICJmbiIsICJ0aGlzQXJnIiwgIkNvbnN1bWVyT2JzZXJ2ZXIiLCAicGFydGlhbE9ic2VydmVyIiwgImhhbmRsZVVuaGFuZGxlZEVycm9yIiwgIm9ic2VydmVyT3JOZXh0IiwgImNvbnRleHRfMSIsICJkZWZhdWx0RXJyb3JIYW5kbGVyIiwgIm9ic2VydmFibGUiLCAiaWRlbnRpdHkiLCAieCIsICJwaXBlRnJvbUFycmF5IiwgImZucyIsICJpbnB1dCIsICJwcmV2IiwgIk9ic2VydmFibGUiLCAic3Vic2NyaWJlIiwgIm9wZXJhdG9yIiwgInN1YnNjcmliZXIiLCAiaXNTdWJzY3JpYmVyIiwgInNvdXJjZSIsICJzaW5rIiwgInByb21pc2VDdG9yIiwgImdldFByb21pc2VDdG9yIiwgInJlc29sdmUiLCAicmVqZWN0IiwgIm9wZXJhdGlvbnMiLCAiaXNPYnNlcnZlciIsICJoYXNMaWZ0IiwgIm9wZXJhdGUiLCAiaW5pdCIsICJsaWZ0ZWRTb3VyY2UiLCAiY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIiwgIm9uTmV4dCIsICJvbkNvbXBsZXRlIiwgIm9uRXJyb3IiLCAib25GaW5hbGl6ZSIsICJPcGVyYXRvclN1YnNjcmliZXIiLCAic2hvdWxkVW5zdWJzY3JpYmUiLCAiY2xvc2VkXzEiLCAiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCAiU3ViamVjdCIsICJzdWJqZWN0IiwgIkFub255bW91c1N1YmplY3QiLCAiX2MiLCAib2JzZXJ2ZXIiLCAib2JzZXJ2ZXJzIiwgImhhc0Vycm9yIiwgImlzU3RvcHBlZCIsICJ0aHJvd25FcnJvciIsICJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCAiQWN0aW9uIiwgInNjaGVkdWxlciIsICJ3b3JrIiwgInN0YXRlIiwgImRlbGF5IiwgImludGVydmFsUHJvdmlkZXIiLCAiQXN5bmNBY3Rpb24iLCAiaWQiLCAiX2lkIiwgIl9zY2hlZHVsZXIiLCAiX2RlbGF5IiwgImVycm9yZWQiLCAiZXJyb3JWYWx1ZSIsICJhY3Rpb25zIiwgIlNjaGVkdWxlciIsICJzY2hlZHVsZXJBY3Rpb25DdG9yIiwgIm5vdyIsICJBc3luY1NjaGVkdWxlciIsICJTY2hlZHVsZXJBY3Rpb24iLCAiYWN0aW9uIiwgImFzeW5jU2NoZWR1bGVyIiwgImlzQXJyYXlMaWtlIiwgImlzUHJvbWlzZSIsICJpc0ludGVyb3BPYnNlcnZhYmxlIiwgImlzQXN5bmNJdGVyYWJsZSIsICJvYmoiLCAiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCAiZ2V0U3ltYm9sSXRlcmF0b3IiLCAiaXRlcmF0b3IiLCAiaXNJdGVyYWJsZSIsICJyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIiwgInJlYWRhYmxlU3RyZWFtIiwgIl9fYXN5bmNHZW5lcmF0b3IiLCAicmVhZGVyIiwgImRvbmUiLCAiX19nZW5lcmF0b3IiLCAiX19hd2FpdCIsICJpc1JlYWRhYmxlU3RyZWFtTGlrZSIsICJpbm5lckZyb20iLCAiZnJvbUludGVyb3BPYnNlcnZhYmxlIiwgImZyb21BcnJheUxpa2UiLCAiZnJvbVByb21pc2UiLCAiZnJvbUFzeW5jSXRlcmFibGUiLCAiZnJvbUl0ZXJhYmxlIiwgImZyb21SZWFkYWJsZVN0cmVhbUxpa2UiLCAib2JzIiwgImFycmF5IiwgImkiLCAicHJvbWlzZSIsICJpdGVyYWJsZSIsICJpdGVyYWJsZV8xIiwgIml0ZXJhYmxlXzFfMSIsICJhc3luY0l0ZXJhYmxlIiwgInByb2Nlc3MiLCAiYXN5bmNJdGVyYWJsZV8xIiwgImFzeW5jSXRlcmFibGVfMV8xIiwgIl9fYXdhaXRlciIsICJfX2FzeW5jVmFsdWVzIiwgImV4ZWN1dGVTY2hlZHVsZSIsICJwYXJlbnRTdWJzY3JpcHRpb24iLCAicmVwZWF0IiwgInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwgInRocm93RXJyb3IiLCAiZXJyb3JPckVycm9yRmFjdG9yeSIsICJlcnJvckZhY3RvcnkiLCAiRW1wdHlFcnJvciIsICJsYXN0VmFsdWVGcm9tIiwgIl9oYXNWYWx1ZSIsICJfdmFsdWUiLCAiaXNWYWxpZERhdGUiLCAiVGltZW91dEVycm9yIiwgImluZm8iLCAic2NoZWR1bGVyQXJnIiwgImZpcnN0IiwgImVhY2giLCAiX3dpdGgiLCAidGltZW91dEVycm9yRmFjdG9yeSIsICJfZCIsICJtZXRhIiwgIm9yaWdpbmFsU291cmNlU3Vic2NyaXB0aW9uIiwgInRpbWVyU3Vic2NyaXB0aW9uIiwgImxhc3RWYWx1ZSIsICJzZWVuIiwgInN0YXJ0VGltZXIiLCAiTG9hZGVkT25jZVB1Ymxpc2hlciIsICJlcnJNc2ciLCAidmFsdWVJZk5vdExvYWRlZCIsICJzdWJzY3JpcHRpb24iLCAidGltZW91dENvbmZpZyIsICJhc3NlcnROZXZlciIsICJ0aW1lb3V0UGFyYW1zIiwgImxvZ19fJDEiLCAiZXJyX18kMiIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJjcmVhdGVJbml0Rmxvd1B1Ymxpc2hlciIsICJmbG93TmFtZSIsICJpbml0RmxvdyIsICJwdWJsaXNoZXIiLCAiaW5pdFBhcmFtcyIsICJpbml0UmVzdWx0IiwgImdldEVycm9yTWVzc2FnZSIsICJzdGFydEFsbEluaXRGbG93cyIsICJmbG93cyIsICJjb250ZXh0IiwgImZvcm1DYWxsYmFja3MiLCAiZmxvdyIsICJjcmVhdGVJbml0Rmxvd3NQdWJsaXNoZXJzIiwgIk9qc0Zsb3dzIiwgImVycl9fJDEiLCAiT3B0aW9uYWxGbiIsICJ6IiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAibWFrZUNhbGxiYWNrU2FmZSIsICJGb3JtQ2FsbGJhY2tzIiwgIk9wZW5QYXlGb3JtRXZlbnRIYW5kbGVyIiwgImZvcm1JZCIsICJiYXNlVXJsIiwgImludGVybmFsQ2FsbGJhY2tzIiwgImV2ZW50IiwgImdldENsZWFuT3JpZ2luIiwgImV2ZW50RGF0YSIsICJwYXJzZUV2ZW50UGF5bG9hZCIsICJlbGVtZW50SWQiLCAicGF5bG9hZCIsICJldmVudFR5cGUiLCAidXJsIiwgImNyZWF0ZUNvbm5lY3Rpb24iLCAiaWZyYW1lIiwgImNoaWxkT3JpZ2luIiwgImNvbm5lY3Rpb25PYmoiLCAiY29ubmVjdFRvQ2hpbGQiLCAiaXNWYWxpZE9iamVjdCIsICJjaGVja0lmVmFsaWRDZGVDb25uZWN0aW9uT2JqZWN0IiwgImlzUmVzdWx0VmFsaWQiLCAiQ29ubmVjdGlvbk1hbmFnZXIiLCAiY29ubmVjdGlvbiIsICJzZXR1cFBheW1lbnRSZXF1ZXN0SGFuZGxlcnMiLCAiaW5pdFByRmxvd3MiLCAiY2FsbGJhY2tzIiwgInN0cmlwZVBSIiwgInJlc3VsdCIsICJjYW5BcHBsZVBheSIsICJjYW5Hb29nbGVQYXkiLCAiZmluYWxTdGF0dXMiLCAidXNlclBhcmFtcyIsICJydW5TdHJpcGVQckZsb3ciLCAicHJvdmlkZXIiLCAicGFyYW1zIiwgImZpbmRDaGVja291dFBheW1lbnRNZXRob2RTdHJpY3QiLCAiY3JlYXRlSW5wdXRzRGljdEZyb21Gb3JtIiwgIkdFTkVSSUNfQ09OTl9FUlIiLCAibG9nX18iLCAiZXJyX18iLCAiX09wZW5QYXlGb3JtIiwgImNkZUxvYWRlZCIsICJhbnlDZGVDb25uIiwgIm9qc0NvbnRleHQiLCAiZXJyb3JNZXNzYWdlIiwgImhlaWdodCIsICJlbGVtZW50IiwgImVsZW1lbnRWYWx1ZSIsICJvcHRpb25zIiwgInR5cGUiLCAiRWxlbWVudFR5cGUiLCAiZnJhbWUiLCAicXVlcnlTdHJpbmciLCAic2VsZWN0b3IiLCAiRWxlbWVudFR5cGVFbnVtIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgImNvbm4iLCAibWV0aG9kIiwgIm5ld0NhbGxiYWNrcyIsICJ2NCIsICJmb3JtIiwgImNkZUxvYWRlZFBheWxvYWQiLCAiYW55Q2RlQ29ubmVjdGlvbiIsICJmb3JtRGl2IiwgIkZSQU1FX0JBU0VfVVJMIiwgIk9wZW5QYXlGb3JtIl0KfQo=
|