ato-water-lib 0.0.26 → 0.0.28
Sign up to get free protection for your applications and to get access to all the features.
- package/esm2020/lib/ato-water-lib.module.mjs +2 -2
- package/esm2020/lib/components/asset-flow/asset-flow.component.mjs +3 -5
- package/esm2020/lib/models/default-gojs-editor.model.mjs +24 -19
- package/fesm2015/ato-water-lib.mjs +29 -22
- package/fesm2015/ato-water-lib.mjs.map +1 -1
- package/fesm2020/ato-water-lib.mjs +26 -23
- package/fesm2020/ato-water-lib.mjs.map +1 -1
- package/lib/components/asset-flow/asset-flow.component.d.ts +908 -0
- package/lib/models/default-gojs-editor.model.d.ts +1 -0
- package/package.json +1 -1
@@ -1527,6 +1527,10 @@ export class AtoDefaultGojsEditor {
|
|
1527
1527
|
e === AtoDefaultGojsEditor.ENUM_ACTIONS.INSIGHT) {
|
1528
1528
|
return AtoDefaultGojsEditor.ENUM_ACTIONS.DATA_MAPPING;
|
1529
1529
|
}
|
1530
|
+
if (e === AtoDefaultGojsEditor.ENUM_ACTIONS.FLOW_DETAILS &&
|
1531
|
+
obj?.part?.['ob']?.systemType === AtoGojsEditorModel.ENUM_TYPES.COOLING_TOWER) {
|
1532
|
+
return AtoDefaultGojsEditor.ENUM_ACTIONS.FLOW_DETAILS_AND_WIZARD;
|
1533
|
+
}
|
1530
1534
|
return e;
|
1531
1535
|
});
|
1532
1536
|
self.actions = filteredActions.map((action) => {
|
@@ -1542,6 +1546,7 @@ export class AtoDefaultGojsEditor {
|
|
1542
1546
|
break;
|
1543
1547
|
case AtoDefaultGojsEditor.ENUM_ACTIONS.DETAILS:
|
1544
1548
|
case AtoDefaultGojsEditor.ENUM_ACTIONS.FLOW_DETAILS:
|
1549
|
+
case AtoDefaultGojsEditor.ENUM_ACTIONS.FLOW_DETAILS_AND_WIZARD:
|
1545
1550
|
onClickFn = () => {
|
1546
1551
|
self.onOpenDetail.emit({
|
1547
1552
|
node: obj.part,
|
@@ -2146,7 +2151,18 @@ export class AtoDefaultGojsEditor {
|
|
2146
2151
|
// }),
|
2147
2152
|
// ),
|
2148
2153
|
// ),
|
2149
|
-
itemTemplate: this.$(go.Panel, 'TableRow',
|
2154
|
+
itemTemplate: this.$(go.Panel, 'TableRow', {
|
2155
|
+
cursor: 'pointer',
|
2156
|
+
click: (e, obj) => {
|
2157
|
+
if (obj.panel.part.data?.dataTable[obj.row]?.isEditable === false) {
|
2158
|
+
return;
|
2159
|
+
}
|
2160
|
+
self.onClikParamOfTable.emit({
|
2161
|
+
...obj.panel.part.data?.dataTable[obj.row],
|
2162
|
+
});
|
2163
|
+
},
|
2164
|
+
background: 'transparent',
|
2165
|
+
}, this.$(go.TextBlock, '', { column: 0, margin: 2, textAlign: 'left', alignment: go.Spot.Left }, new go.Binding('text', '', (data, panel) => {
|
2150
2166
|
return data?.name;
|
2151
2167
|
})), this.$(go.Panel, 'Table', {
|
2152
2168
|
column: 1,
|
@@ -2175,13 +2191,6 @@ export class AtoDefaultGojsEditor {
|
|
2175
2191
|
}
|
2176
2192
|
return !!data?.value;
|
2177
2193
|
}))),
|
2178
|
-
}, {
|
2179
|
-
click: (e, obj) => {
|
2180
|
-
self.onClikParamOfTable.emit({
|
2181
|
-
pramTable: obj.panel.part.data,
|
2182
|
-
...obj.panel.part.data?.dataTable[obj?.panel.row],
|
2183
|
-
});
|
2184
|
-
},
|
2185
2194
|
}, new go.Binding('text', '', (data, panel) => {
|
2186
2195
|
return data?.value;
|
2187
2196
|
}), new go.Binding('stroke', '', (data) => {
|
@@ -2205,16 +2214,6 @@ export class AtoDefaultGojsEditor {
|
|
2205
2214
|
})), new go.Binding('visible', '', (data) => !!data?.toolTipAction)),
|
2206
2215
|
height: 14,
|
2207
2216
|
width: 14,
|
2208
|
-
}, {
|
2209
|
-
click: (e, obj) => {
|
2210
|
-
if (obj.panel.part.data?.dataTable[obj?.panel.row]?.isEditable === false) {
|
2211
|
-
return;
|
2212
|
-
}
|
2213
|
-
self.onClikParamOfTable.emit({
|
2214
|
-
pramTable: obj.panel.part.data,
|
2215
|
-
...obj.panel.part.data?.dataTable[obj?.panel.row],
|
2216
|
-
});
|
2217
|
-
},
|
2218
2217
|
}, new go.Binding('visible', '', (data, panel) => {
|
2219
2218
|
return !this._initialOptions.isReadOnly;
|
2220
2219
|
}), new go.Binding('opacity', '', (data, panel) => {
|
@@ -3142,6 +3141,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
3142
3141
|
ENUM_ACTIONS["DATA_MAPPING"] = "Data Mapping";
|
3143
3142
|
ENUM_ACTIONS["MORE"] = "More";
|
3144
3143
|
ENUM_ACTIONS["FLOW_DETAILS"] = "Flow details";
|
3144
|
+
ENUM_ACTIONS["FLOW_DETAILS_AND_WIZARD"] = "Flow details & wizard";
|
3145
3145
|
ENUM_ACTIONS["ASSET_PARAMETERS"] = "Asset parameters";
|
3146
3146
|
ENUM_ACTIONS["CHANGE_ICON"] = "Change icon";
|
3147
3147
|
})(ENUM_ACTIONS = AtoDefaultGojsEditor.ENUM_ACTIONS || (AtoDefaultGojsEditor.ENUM_ACTIONS = {}));
|
@@ -3156,6 +3156,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
3156
3156
|
iconClassName: 'far fa-arrow-progress',
|
3157
3157
|
onClick: () => { },
|
3158
3158
|
},
|
3159
|
+
[ENUM_ACTIONS.FLOW_DETAILS_AND_WIZARD]: {
|
3160
|
+
name: ENUM_ACTIONS.FLOW_DETAILS_AND_WIZARD,
|
3161
|
+
iconClassName: 'far fa-arrow-progress',
|
3162
|
+
onClick: () => { },
|
3163
|
+
},
|
3159
3164
|
[ENUM_ACTIONS.ASSET_PARAMETERS]: {
|
3160
3165
|
name: ENUM_ACTIONS.ASSET_PARAMETERS,
|
3161
3166
|
iconClassName: 'far fa-box-archive',
|
@@ -3204,4 +3209,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
3204
3209
|
};
|
3205
3210
|
AtoDefaultGojsEditor.DISTANCE_2_OUTPUT = 60;
|
3206
3211
|
})(AtoDefaultGojsEditor || (AtoDefaultGojsEditor = {}));
|
3207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1nb2pzLWVkaXRvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0by13YXRlci1saWIvc3JjL2xpYi9tb2RlbHMvZGVmYXVsdC1nb2pzLWVkaXRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUcsdUJBQXVCLEVBQUUseUJBQXlCLEVBQ3hELE9BQU8sRUFDUCxZQUFZLEVBQ1osUUFBUSxHQUFHLE1BQU0sMEJBQTBCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQU45RCxNQUFNLFVBQVUsR0FBRyxrQ0FBa0MsQ0FBQztBQUN0RCxNQUFNLEtBQUssR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvQyxNQUFNLFVBQVUsR0FBRyxxQ0FBcUMsQ0FBQztBQUN6RCxNQUFNLGFBQWEsR0FBRyx3Q0FBd0MsQ0FBQztBQUMvRCxNQUFNLGtCQUFr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dUI7WUFDdEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7U0FDcEI7UUFDRCxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQixJQUFJLEVBQUUsWUFBWSxDQUFDLE1BQU07WUFDekIsYUFBYSxFQUFFLGtCQUFrQjtZQUNqQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztTQUNwQjtRQUNELENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3BCLElBQUksRUFBRSxZQUFZLENBQUMsT0FBTztZQUMxQixhQUFhLEVBQUUsWUFBWTtZQUMzQixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztTQUNwQjtRQUNELENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ3pCLElBQUksRUFBRSxZQUFZLENBQUMsWUFBWTtZQUMvQixhQUFhLEVBQUUsWUFBWTtZQUMzQixPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztTQUNwQjtRQUNELENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pCLElBQUksRUFBRSxZQUFZLENBQUMsSUFBSTtZQUN2QixhQUFhLEVBQUUseUJBQXlCO1lBQ3hDLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1NBQ3BCO1FBQ0QsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxFQUFFLFlBQVksQ0FBQyxXQUFXO1lBQzlCLGFBQWEsRUFBRSxjQUFjO1lBQzdCLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO1NBQ3BCO0tBQ0osQ0FBQztJQUVXLHNDQUFpQixHQUFHLEVBQUUsQ0FBQztBQUN4QyxDQUFDLEVBMUVnQixvQkFBb0IsS0FBcEIsb0JBQW9CLFFBMEVwQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXRvR29qc0VkaXRvck1vZGVsIH0gZnJvbSAnLi9nb2pzLWVkaXRvci5tb2RlbCc7XG5pbXBvcnQgKiBhcyBnbyBmcm9tICdnb2pzJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQgeyBHT19MSUNFTlNFX0tFWSB9IGZyb20gJy4uL2NvbnN0YW50cy9rZXkuY29uc3QnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdXRpbHMvdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyAgQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04sIEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUsXG4gICAgTk9fREFUQSxcbiAgICBURVhUX1VOS05PV04sXG4gICAgVkFMVUVfTkEsIH0gZnJvbSAnLi4vY29uc3RhbnRzL3ZhbHVlLmNvbnN0JztcbmltcG9ydCB7IEFUT19FUGxhbnRUeXBlIH0gZnJvbSAnLi4vY29uc3RhbnRzL3BsYW50LmNvbnN0YW50JztcblxuY29uc3QgSUNPTl9BTEVSVCA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9TdGF0aW9uLnN2Zyc7XG5jb25zdCBBUlJPVyA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9hcnJvdy5zdmcnO1xuY29uc3QgQVJST1dfR1JBWSA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9hcnJvdy1ncmF5LnN2Zyc7XG5jb25zdCBST19MSU5FX0RJUlRZID0gJy9hc3NldHMvaW1hZ2VzL2ljb25zL3JvX2xpbmVfZGlydHkuc3ZnJztcbmNvbnN0IE9VVEZMT1dfTElORV9ESVJUWSA9ICcvYXNzZXRzL2ltYWdlcy9pY29ucy9vdXRmbG93X2xpbmVfZGlydHkucG5nJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgSUNPTlNfQkFTRTY0IH0gZnJvbSAnLi4vY29uc3RhbnRzL2ljb24tYmFzZTY0LmNvbnN0JztcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgQXRvRGVmYXVsdEdvanNFZGl0b3IgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBWaWV3Q2hpbGQoJ21lbnVUcmlnZ2VyJykgbWVudVRyaWdnZXI6IGFueTtcbiAgICBASW5wdXQoKSBsaW5rVmFsaWRhdGlvbjogKFxuICAgICAgICBmcm9tTm9kZTogZ28uTm9kZSxcbiAgICAgICAgZnJvbVBvcnQ6IGdvLkdyYXBoT2JqZWN0LFxuICAgICAgICB0b05vZGU6IGdvLk5vZGUsXG4gICAgICAgIHRvUG9ydDogZ28uR3JhcGhPYmplY3QsXG4gICAgICAgIGxpbms6IGdvLkxpbmssXG4gICAgKSA9PiBib29sZWFuO1xuXG4gICAgYWN0aW9uczogYW55W10gPSBbXTtcbiAgICBhY3Rpb25NZW51SWQ6IHN0cmluZyA9ICdhY3Rpb25NZW51SWQnO1xuXG4gICAgbXlEaWFncmFtRGl2OiBhbnkgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWUgKyAnLScgKyBtb21lbnQoKS52YWx1ZU9mKCk7XG4gICAgbXlEaWFncmFtOiBhbnk7XG4gICAgJCA9IGdvLkdyYXBoT2JqZWN0Lm1ha2U7XG4gICAgYW5pbWF0aW9uSW50ZXJ2YWw6IGFueTtcbiAgICBkZWZhdWx0U2NhbGVab29tVG9GaXQ/OiBudW1iZXI7XG5cbiAgICBwcml2YXRlIF9pbml0aWFsT3B0aW9uczogYW55ID0ge1xuICAgICAgICAndG9vbE1hbmFnZXIuaG92ZXJEZWxheSc6IDIwMCxcbiAgICAgICAgLy8gJ2RyYWdnaW5nVG9vbC5pc0VuYWJsZWQnOiBmYWxzZSxcbiAgICAgICAgLy8gaW5pdGlhbEF1dG9TY2FsZTogZ28uRGlhZ3JhbS5Vbmlmb3JtVG9GaWxsLFxuICAgICAgICAvLyBhdXRvU2Nyb2xsUmVnaW9uOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSxcbiAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHsgZGlyZWN0aW9uOiAwIH0pLFxuICAgICAgICBpbml0aWFsQ29udGVudEFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgIGluaXRpYWxBdXRvU2NhbGU6IGdvLkRpYWdyYW0uVW5pZm9ybSxcbiAgICAgICAgLy8gY29udGVudEFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgIC8vIHRoaXMuJChnby5Gb3JjZURpcmVjdGVkTGF5b3V0KSxcbiAgICAgICAgJ3VuZG9NYW5hZ2VyLmlzRW5hYmxlZCc6IHRydWUsIC8vIGVuYWJsZSB1bmRvICYgcmVkb1xuICAgICAgICAvLyBcImFuaW1hdGlvbk1hbmFnZXIuaXNJbml0aWFsXCI6IGZhbHNlLFxuICAgICAgICAvLyBcImFuaW1hdGlvbk1hbmFnZXIuaXNFbmFibGVkXCI6IGZhbHNlLFxuICAgICAgICAvLyBcImRyYWdnaW5nVG9vbC5pc0dyaWRTbmFwRW5hYmxlZFwiOiB0cnVlXG4gICAgICAgIGRyYWdTZWxlY3RpbmdUb29sOiB0aGlzLiQoXG4gICAgICAgICAgICBnby5EcmFnU2VsZWN0aW5nVG9vbCxcbiAgICAgICAgICAgIHsgaXNQYXJ0aWFsSW5jbHVzaW9uOiB0cnVlLCBkZWxheTogNTAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBib3g6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFydCwgLy8gcmVwbGFjZSB0aGUgbWFnZW50YSBib3ggd2l0aCBhIHJlZCBvbmVcbiAgICAgICAgICAgICAgICAgICAgeyBsYXllck5hbWU6ICdUb29sJywgc2VsZWN0YWJsZTogZmFsc2UgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0hBUEUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3JnYmEoMjU1LDAsMCwwKScsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjRTk1RjQ3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICAgJ2xpbmtpbmdUb29sLmxpbmtWYWxpZGF0aW9uJzogdGhpcy5jaGVja0xpbmtDb25kaXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgJ2RyYWdnaW5nVG9vbC5kb01vdXNlTW92ZSc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIGRvIHRoZSBzdGFuZGFyZCBiZWhhdmlvciBieSBjYWxsaW5nIHRoZSBzdXBlciBtZXRob2RcbiAgICAgICAgICAgIGdvLkRyYWdnaW5nVG9vbC5wcm90b3R5cGUuZG9Nb3VzZU1vdmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIC8vIGlmIGRyYWdnaW5nLW91dCBmcm9tIHRoZSBkaWFncmFtIGlzIG5vdCBhbGxvd2VkLCBhbmRcbiAgICAgICAgICAgIC8vIGlmIG1vdXNlIGlzIG91dHNpZGUgb2Ygdmlld3BvcnRcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5kaWFncmFtLmFsbG93RHJhZ091dCAmJlxuICAgICAgICAgICAgICAgICF0aGlzLmRpYWdyYW0udmlld3BvcnRCb3VuZHMuY29udGFpbnNQb2ludCh0aGlzLmRpYWdyYW0ubGFzdElucHV0LmRvY3VtZW50UG9pbnQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWdyYW0uZW5zdXJlQm91bmRzKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdnAgPSB0aGlzLmRpYWdyYW0ubGFzdElucHV0LnZpZXdQb2ludDtcbiAgICAgICAgICAgICAgICBjb25zdCBkcCA9IHRoaXMuZGlhZ3JhbS5wb3NpdGlvbi5jb3B5KCk7XG4gICAgICAgICAgICAgICAgaWYgKHZwLnggPCAwKSBkcC54IC09IDEwO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZwLnggPiAwKSBkcC54ICs9IDEwO1xuICAgICAgICAgICAgICAgIGlmICh2cC55IDwgMCkgZHAueSAtPSAxMDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh2cC55ID4gMCkgZHAueSArPSAxMDtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWdyYW0ucG9zaXRpb24gPSBkcDsgLy8gc2Nyb2xsIGluIHRoZSBkaXJlY3Rpb24gb2YgdGhlIG1vdXNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIExheW91dENvbXBsZXRlZDogKCkgPT4ge1xuICAgICAgICAvLyAgICAgdGhpcy5teURpYWdyYW0uem9vbVRvRml0KCk7XG4gICAgICAgIC8vICAgICB0aGlzLmRlZmF1bHRTY2FsZVpvb21Ub0ZpdCA9IHRoaXMubXlEaWFncmFtLnNjYWxlO1xuICAgICAgICAvLyAgICAgaWYgKCF0aGlzLmluaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBzaXplTWFyZ2luID0gQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDE1O1xuICAgICAgICAvLyAgICAgICAgIHRoaXMubXlEaWFncmFtLnBhZGRpbmcgPSBuZXcgZ28uTWFyZ2luKHNpemVNYXJnaW4pO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgIH07XG5cbiAgICBjaGVja0xpbmtDb25kaXRpb24oXG4gICAgICAgIGZyb21Ob2RlOiBnby5Ob2RlLFxuICAgICAgICBmcm9tUG9ydDogZ28uR3JhcGhPYmplY3QsXG4gICAgICAgIHRvTm9kZTogZ28uTm9kZSxcbiAgICAgICAgdG9Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICAgICAgbGluazogZ28uTGluayxcbiAgICApOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMubGlua1ZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxpbmtWYWxpZGF0aW9uKGZyb21Ob2RlLCBmcm9tUG9ydCwgdG9Ob2RlLCB0b1BvcnQsIGxpbmspO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlOyAvLyBN4bq3YyDEkeG7i25oIGNobyB0csaw4budbmcgaOG7o3Aga2jDtG5nIGPDsyBow6BtIGxpbmtWYWxpZGF0aW9uIMSRxrDhu6NjIHRydXnhu4FuIHbDoG9cbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgaW5pdGlhbE9wdGlvbnModjogYW55KSB7XG4gICAgICAgIHRoaXMuX2luaXRpYWxPcHRpb25zID0gXy5tZXJnZSh0aGlzLl9pbml0aWFsT3B0aW9ucywgdik7XG4gICAgICAgIC8vIF8uZXh0ZW5kKHYsIHRoaXMuX2luaXRpYWxPcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXQgaW5pdGlhbE9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0aWFsT3B0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIF9lZGl0b3I6IEF0b0dvanNFZGl0b3JNb2RlbDtcbiAgICBASW5wdXQoKSBzZXQgZWRpdG9yKHY6IEF0b0dvanNFZGl0b3JNb2RlbCkge1xuICAgICAgICB0aGlzLl9lZGl0b3IgPSB2O1xuICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbml0RGlhZ3JhbSgpO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBlZGl0b3IoKTogQXRvR29qc0VkaXRvck1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvcjtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBpc1Nob3dOb2RlSW5mbzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHBsYW50U2F0dXM6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbFJlZjogRWxlbWVudFJlZixcbiAgICApIHtcbiAgICAgICAgZ28uRGlhZ3JhbS5saWNlbnNlS2V5ID0gR09fTElDRU5TRV9LRVk7XG4gICAgfVxuXG4gICAgQE91dHB1dCgpIG9uTW9kZWxDaGFuZ2VMaXN0ZW5lckV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNsaWNrSW5mb0J1dHRvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25PcGVuV2l6YXJkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbk9wZW5EZXRhaWw6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uT3BlbkFzc2V0UGFyYW1ldGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbk9wZW5JbnNpZ2h0TWFwcGluZzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Ib3ZlckluZm9CdXR0b246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uSG92ZXJBbGVydDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Eb3VibGVDbGlja05vZGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uT3BlbkNoYW5nZUljb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgLy8gQ2xpY2sgY29tcG9uZW50XG4gICAgQE91dHB1dCgpIG9uQ2xpY2tDb21wb2VudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgY2FsbGJhY2tJbWFnZVRvcG9sb2d5OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgLy8gQ2xpY2sgcGFyYW0gb24gUGFyYW1UYWJsZVxuICAgIEBPdXRwdXQoKSBvbkNsaWtQYXJhbU9mVGFibGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvLyBEZWxldGUgTm9kZVxuICAgIEBPdXRwdXQoKSBvbkRlbGV0ZU5vZGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uVW5kbzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvLyBSZW5hbWVcbiAgICBAT3V0cHV0KCkgb25SZW5hbWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICBpc0FkZGVkTW9kZWxDaGFuZ2VkTGlzdGVuZXJzOiBib29sZWFuO1xuICAgIGNvbW1pdHRlZFRyYW5zYWN0aW9uU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcblxuICAgIC8vIEFkZFN1YiBhbmQgVW5TdWJcbiAgICBfc3Vic2NyaXB0aW9uTGlzdDogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmVBbGwoKTtcbiAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW9uKCk7XG4gICAgICAgIC8vIHRoaXMubXlEaWFncmFtPy5jbGVhcigpO1xuICAgICAgICBpZiAoISF0aGlzLm15RGlhZ3JhbT8uZGl2KSB7XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5kaXYgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm15RGlhZ3JhbSkge1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5teURpYWdyYW0gIT0gbnVsbCAmJiB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5teURpYWdyYW0gIT0gbnVsbCAmJiB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5teURpYWdyYW0gIT0gbnVsbCAmJiB0aGlzLm15RGlhZ3JhbS5saW5rVGVtcGxhdGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubXlEaWFncmFtLmxpbmtUZW1wbGF0ZU1hcC50b0FycmF5KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5saW5rVGVtcGxhdGVNYXAucmVtb3ZlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5teURpYWdyYW0gPSBudWxsO1xuICAgIH1cblxuICAgIGFkZE9yUmVtb3ZlQ29tcG9lbnRUZW1wbGF0ZSgpIHtcbiAgICAgICAgLy8gQWRkIE5vZGUgYW5kIE5vZGUgR3JvdXBcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMuZWRpdG9yLmRhdGE/Lm5vZGVEYXRhQXJyYXksIChub2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFkZFRlbXBsYXRlKG5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmVtb3ZlIE5vZGUgYW5kIE5vZGUgR3JvdXBcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcD8uSGIsICh0ZW1wKSA9PiB7XG4gICAgICAgICAgICBpZiAodGVtcD8ua2V5ICYmICF0aGlzLmVkaXRvci5kYXRhPy5ub2RlRGF0YUFycmF5Py5zb21lKChub2RlKSA9PiBub2RlPy50eXBlID09PSB0ZW1wPy5rZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnJlbW92ZSh0ZW1wPy5rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgXy5mb3JFYWNoKHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXA/LkhiLCAodGVtcCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRlbXA/LmtleSAmJiAhdGhpcy5lZGl0b3IuZGF0YT8ubm9kZURhdGFBcnJheT8uc29tZSgobm9kZSkgPT4gbm9kZT8udHlwZSA9PT0gdGVtcD8ua2V5KSkge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAucmVtb3ZlKHRlbXA/LmtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZFRlbXBsYXRlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5hZGROb2RlVGVtcGxhdGUobm9kZSk7XG4gICAgICAgIHRoaXMuYWRkR3JvdXBUZW1wbGF0ZShub2RlKTtcbiAgICB9XG5cbiAgICBhZGRHcm91cFRlbXBsYXRlKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXA/LkhiPy5bbm9kZT8udHlwZV0gfHwgIW5vZGU/LmlzR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBHcm91cFxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlJPX1dBVEVSX1RSRUFUTUVOVCkge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBST1BsYW50VGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CT0lMRVIpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwQm9pbGVyVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT09MSU5HX1RPV0VSKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VHcm91cENvb2xpbmdUb3dlclRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuWk9ORSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBab25lVGVtcGxhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTCAmJiBub2RlPy5pc0dyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwUGxhbnRDZWxsVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTF9JTlBVVF9HUk9VUCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cFBDSW5wdXRPck91dFRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgICAgIG5ldyBnby5NYXJnaW4oMCwgNTAsIDAsIDApLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBMQU5UX0NFTExfT1VUUFVUX0dST1VQKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwUENJbnB1dE9yT3V0VGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICAgICAgbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1MCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR1JPVVBfQkFTSUNfQ09NUE9ORU5UKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VHcm91cEJhc2ljQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGFkZE5vZGVUZW1wbGF0ZShub2RlKSB7XG4gICAgICAgIGlmICh0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXA/LkhiW25vZGU/LnR5cGVdIHx8IG5vZGU/LmlzR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3QgR3JvdXBcbiAgICAgICAgLy8gQ29tcG9uZW50IFdhdGVyIE5vcm1hbFxuICAgICAgICBpZiAoQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfV0FURVJfTk9STUFMPy5pbmNsdWRlcyhub2RlPy50eXBlKSAmJiAhbm9kZT8uaXNHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5tYWtlRW50aXR5VGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24gPz8gJycsXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUgPz8gJycsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIENvbXBvbmVudCBXYXRlciBXaXRoZHJhdyBPciBEaXNjaGFyZ2VcbiAgICAgICAgaWYgKEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX1dBVEVSX1dJVEhEUkFXX09SX0RJU0NIQVJHRT8uaW5jbHVkZXMobm9kZT8udHlwZSkgJiYgIW5vZGU/LmlzR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVdpdGhkcmF3T3JEaXNjaGFyZ2UoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24gPz8gJycsXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUgPz8gJycsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29tcG9uZW50IEVuZXJneSBOb3JtYWxcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX0VMRUNUUklDSVRZPy5pbmNsdWRlcyhub2RlPy50eXBlKSB8fFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX05BVFVSQUxfR0FTPy5pbmNsdWRlcyhub2RlPy50eXBlKSB8fFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX0ZVRUw/LmluY2x1ZGVzKG5vZGU/LnR5cGUpIHx8XG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfU1RFQU0/LmluY2x1ZGVzKG5vZGU/LnR5cGUpKSAmJlxuICAgICAgICAgICAgIW5vZGU/LmlzR3JvdXBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbiA/PyAnJyxcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSA/PyAnJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklNQUdFX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VJbWFnZVRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QQVJBTV9UQUJMRSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlUGFyYW1UYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTUFTU19CQUxBTkNFKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VNYXNzQmFsYW5jZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRleHQgTm9kZVxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlVGV4dFRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVmFsdWUgTm9kZVxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBTFVFX05PREUpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZVZhbHVlTm9kZVRlbXBsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBOb2RlXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRU1QVFkpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUVtcHR5Tm9kZVRlbXBsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBWYWx1ZSBMYWJlbFxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBTFVFX0xBQkVMKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VWYWx1ZUxhYmVsVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAgLy8gTGFiZWxcbiAgICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9MQUJFTCkge1xuICAgICAgICAgICAgdGhpcy5tYWtlVGV4dExhYmVsVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBab25lIGl0ZW1cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5aT05FX0VORVJHWV9JVEVNKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2Vab25lSXRlbVRlbXBsYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGF0YSBib3hcbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5EQVRBX0JPWCkge1xuICAgICAgICAgICAgdGhpcy5tYWtlRGF0YUJveFRlbXBsYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTcGVjaWFsIHRlbXBsYXRlXG4gICAgICAgIGlmIChBdG9Hb2pzRWRpdG9yTW9kZWwuVFlQRV9URU1QTEFURV9TUEVDSUFMPy5pbmNsdWRlcyhub2RlPy50eXBlKSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlU3BlY2lhbFRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBsYW50IENlbGxcbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QTEFOVF9DRUxMICYmICFub2RlPy5pc0dyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLnBsYW50Q2VsbFRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXREaWFncmFtKCkge1xuICAgICAgICBpZiAoISF0aGlzLm15RGlhZ3JhbT8uZGl2KSB7XG4gICAgICAgICAgICAvLyB0aGlzLm15RGlhZ3JhbS5kaXYgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LmdyaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbVsnZ3JpZCddID0gdGhpcy5pbml0aWFsT3B0aW9ucz8uZ3JpZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW1bJ2dyaWQnXSA9IHRoaXMuJChnby5QYW5lbCwgJ0dyaWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5MYXlvdXRDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5hZGREaWFncmFtTGlzdGVuZXIoJ0xheW91dENvbXBsZXRlZCcsIHRoaXMuaW5pdGlhbE9wdGlvbnM/LkxheW91dENvbXBsZXRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uTGlua1Jlc2hhcGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uYWRkRGlhZ3JhbUxpc3RlbmVyKCdMaW5rUmVzaGFwZWQnLCB0aGlzLmluaXRpYWxPcHRpb25zPy5MaW5rUmVzaGFwZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LlNlbGVjdGlvbk1vdmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uYWRkRGlhZ3JhbUxpc3RlbmVyKCdTZWxlY3Rpb25Nb3ZlZCcsIHRoaXMuaW5pdGlhbE9wdGlvbnM/LlNlbGVjdGlvbk1vdmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5DaGFuZ2VkU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uYWRkRGlhZ3JhbUxpc3RlbmVyKCdDaGFuZ2VkU2VsZWN0aW9uJywgdGhpcy5pbml0aWFsT3B0aW9ucz8uQ2hhbmdlZFNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5kcmFnU2VsZWN0aW5nVG9vbCA9IHRoaXMuaW5pdGlhbE9wdGlvbnM/LmRyYWdTZWxlY3RpbmdUb29sO1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0udG9vbE1hbmFnZXIuZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5pc0dyaWRTbmFwRW5hYmxlZCddID8/IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRoaXMubXlEaWFncmFtLnRvb2xNYW5hZ2VyICYmIHRoaXMubXlEaWFncmFtLnRvb2xNYW5hZ2VyLmRyYWdnaW5nVG9vbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5ncmlkU25hcENlbGxTaXplJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0udG9vbE1hbmFnZXIuZHJhZ2dpbmdUb29sLmdyaWRTbmFwQ2VsbFNpemUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuZ3JpZFNuYXBDZWxsU2l6ZSddO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuaXNHcmlkU25hcEVuYWJsZWQnXSkge1xuICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2wuaXNHcmlkU25hcEVuYWJsZWQgPVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuaXNHcmlkU25hcEVuYWJsZWQnXTtcbiAgICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmRvTW91c2VNb3ZlJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0udG9vbE1hbmFnZXIuZHJhZ2dpbmdUb29sLmRvTW91c2VNb3ZlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmRvTW91c2VNb3ZlJ107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnbGlua2luZ1Rvb2wubGlua1ZhbGlkYXRpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5saW5raW5nVG9vbC5saW5rVmFsaWRhdGlvbiA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2xpbmtpbmdUb29sLmxpbmtWYWxpZGF0aW9uJ107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uY29udGVudEFsaWdubWVudCA9IHRoaXMuaW5pdGlhbE9wdGlvbnM/LmNvbnRlbnRBbGlnbm1lbnQgPz8gZ28uU3BvdC5DZW50ZXI7XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5sYXlvdXQgPSB0aGlzLmluaXRpYWxPcHRpb25zPy5sYXlvdXQ7XG4gICAgICAgICAgICAvLyB0aGlzLm15RGlhZ3JhbS5taW5WaWV3cG9ydEJvdW5kcyA9IG5ldyBnby5SZWN0KDAsIDAsIDEyMDAsIDEyMDApO1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5lZGl0b3I/LmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE9yUmVtb3ZlQ29tcG9lbnRUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLm1vZGVsID0gZ28uTW9kZWwuZnJvbUpzb24odGhpcy5lZGl0b3IuZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25JbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmFuaW1hdGlvbkludGVydmFsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRpYWdyYW1EaXYgPSB0aGlzLl9lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke3RoaXMubXlEaWFncmFtRGl2fWApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbSA9IHRoaXMuJChnby5EaWFncmFtLCBkaWFncmFtRGl2LCB0aGlzLmluaXRpYWxPcHRpb25zKTtcbiAgICAgICAgLy8gdGhpcy5teURpYWdyYW0uaW5pdGlhbFBvc2l0aW9uID0gbmV3IGdvLlBvaW50KDAsIDApO1xuICAgICAgICB0aGlzLmFkZE9yUmVtb3ZlQ29tcG9lbnRUZW1wbGF0ZSgpO1xuXG4gICAgICAgIHRoaXMubWFrZUxpbmtUZW1wbGF0ZSgpO1xuICAgICAgICAvLyBhbmltYXRpb25cbiAgICAgICAgdGhpcy5zdGFydEFuaW1hdGlvbigpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgICAgICAvLyBpZiAoIXRoaXMuaXNBZGRlZE1vZGVsQ2hhbmdlZExpc3RlbmVycykge1xuICAgICAgICAgICAgdGhpcy5pc0FkZGVkTW9kZWxDaGFuZ2VkTGlzdGVuZXJzID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmFkZE1vZGVsQ2hhbmdlZExpc3RlbmVyKGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGUuY2hhbmdlID09PSBnby5DaGFuZ2VkRXZlbnQuUmVtb3ZlICYmIGUucHJvcGVydHlOYW1lID09PSAnbm9kZURhdGFBcnJheScpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YSA9IGUub2xkVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub25EZWxldGVOb2RlLmVtaXQoZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlLmlzVHJhbnNhY3Rpb25GaW5pc2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbW1pdHRlZFRyYW5zYWN0aW9uU3ViamVjdD8ubmV4dChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmNvbW1hbmRIYW5kbGVyLnVuZG8gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5vblVuZG8uZW1pdCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCEhdGhpcy5lZGl0b3IpIHtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLm1vZGVsID0gZ28uTW9kZWwuZnJvbUpzb24odGhpcy5lZGl0b3IuZGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0R3JvdXBUZW1wbGF0ZUVuZXJneSgpIHtcbiAgICAgICAgLy8gZm9yIHdhdGVyXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIFNUT1JBR0UsXG4gICAgICAgICAgICBXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBERU1JTl9XQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICAvLyBST19XQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBQUk9DRVNTLFxuICAgICAgICAgICAgV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBEQUZfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBFVFBfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBNQlJfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBaTERfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBDT09MSU5HX1RPV0VSLFxuICAgICAgICAgICAgQk9JTEVSLFxuICAgICAgICAgICAgT1RIRVIsXG4gICAgICAgICAgICBMQU5EU0NBUElOR19JUlJJR0FUSU9OLFxuICAgICAgICB9ID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTO1xuICAgICAgICBjb25zdCB3YXRlckdyb3VwcyA9IFtcbiAgICAgICAgICAgIFNUT1JBR0UsXG4gICAgICAgICAgICBXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBERU1JTl9XQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICAvLyBST19XQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBQUk9DRVNTLFxuICAgICAgICAgICAgV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBEQUZfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBFVFBfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBNQlJfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBaTERfV0FTVEVXQVRFUl9UUkVBVE1FTlQsXG4gICAgICAgICAgICBDT09MSU5HX1RPV0VSLFxuICAgICAgICAgICAgQk9JTEVSLFxuICAgICAgICAgICAgT1RIRVIsXG4gICAgICAgICAgICBMQU5EU0NBUElOR19JUlJJR0FUSU9OLFxuICAgICAgICBdO1xuICAgICAgICB3YXRlckdyb3Vwcy5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLmljb24sIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gZWxlY3RyaWNhbFxuICAgICAgICB0aGlzLmluaXRFbGVjdHJpY0dyb3VwVGVtcGxhdGUoKTtcblxuICAgICAgICAvLyBGdWVsXG4gICAgICAgIHRoaXMuaW5pdEZ1ZWxHcm91cFRlbXBsYXRlKCk7XG5cbiAgICAgICAgLy8gR2FzXG4gICAgICAgIHRoaXMuaW5pdEdhc0dyb3VwVGVtcGxhdGUoKTtcbiAgICB9XG5cbiAgICBpbml0RWxlY3RyaWNEaWFncmFtKCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBHUklELFxuICAgICAgICAgICAgRElFU0VMX0dFTkVSQVRPUlMsXG4gICAgICAgICAgICBCQVRURVJZX0VORVJHWV9TVE9SQUdFLFxuICAgICAgICAgICAgTElHSFRJTkdfU1lTVEVNUyxcbiAgICAgICAgICAgIExJR0hUSU5HUyxcbiAgICAgICAgICAgIEVMRUNUUklDX01FVEVSUyxcbiAgICAgICAgICAgIFRSQU5TRk9STUVSUyxcbiAgICAgICAgICAgIEVMRUNUUklDX0ZMWVdIRUVMX0VORVJHWV9TVE9SQUdFLFxuICAgICAgICAgICAgUFVNUEVEX0hZRFJPX1NUT1JBR0UsXG4gICAgICAgICAgICBUSEVSTUFMX0VORVJHWV9TVE9SQUdFLFxuICAgICAgICAgICAgU1VQRVJfQ0FQQUNJVE9SX0VORVJHWV9TVE9SQUdFLFxuICAgICAgICAgICAgU1dJVENIX0dFQVJTLFxuICAgICAgICAgICAgUFJPQ0VTU19DT05UUk9MX0FVVE9NQVRJT05fU1lTVEVNUyxcbiAgICAgICAgICAgIFBST0NFU1NfRVFVSVBNRU5UX01BQ0hJTkVTLFxuICAgICAgICAgICAgT0ZGSUNFX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIFBPV0VSX0RJU1RSSUJVVElPTl9DT05UUk9MX1NZU1RFTVMsXG4gICAgICAgICAgICBQT1dFUl9ESVNUUklCVVRJT05fU1lTVEVNUyxcbiAgICAgICAgICAgIE5BVFVSQUxfR0FTX0dFTkVSQVRPUlMsXG4gICAgICAgICAgICBNT1RPUl9DT05UUk9MUyxcbiAgICAgICAgICAgIFZBUklBQkxFX0ZSRVFVRU5DWV9EUklWRVJTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfSFZBQyxcbiAgICAgICAgICAgIENPTVBSRVNTRURfQUlSX1NZU1RFTVMsXG4gICAgICAgICAgICBSRUZSSUdFUkFUSU9OX0NPT0xJTkdfU1lTVEVNUyxcbiAgICAgICAgICAgIE1BVEVSSUFMX0hBTkRMSU5HX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIFdJTkRfUE9XRVIsXG4gICAgICAgICAgICBFTEVDVFJJQ19JTkRVU1RSSUFMX01PVE9SUyxcbiAgICAgICAgICAgIEdST1VORElORyxcbiAgICAgICAgfSA9IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUztcbiAgICAgICAgY29uc3QgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUgPSBbXG4gICAgICAgICAgICBHUklELFxuICAgICAgICAgICAgRElFU0VMX0dFTkVSQVRPUlMsXG4gICAgICAgICAgICBCQVRURVJZX0VORVJHWV9TVE9SQUdFLFxuICAgICAgICAgICAgTElHSFRJTkdfU1lTVEVNUyxcbiAgICAgICAgICAgIExJR0hUSU5HUyxcbiAgICAgICAgICAgIEVMRUNUUklDX01FVEVSUyxcbiAgICAgICAgICAgIFRSQU5TRk9STUVSUyxcbiAgICAgICAgICAgIEVMRUNUUklDX0ZMWVdIRUVMX0VORVJHWV9TVE9SQUdFLFxuICAgICAgICAgICAgUFVNUEVEX0hZRFJPX1NUT1JBR0UsXG4gICAgICAgICAgICBUSEVSTUFMX0VORVJHWV9TVE9SQUdFLFxuICAgICAgICAgICAgU1VQRVJfQ0FQQUNJVE9SX0VORVJHWV9TVE9SQUdFLFxuICAgICAgICAgICAgU1dJVENIX0dFQVJTLFxuICAgICAgICAgICAgUFJPQ0VTU19DT05UUk9MX0FVVE9NQVRJT05fU1lTVEVNUyxcbiAgICAgICAgICAgIFBST0NFU1NfRVFVSVBNRU5UX01BQ0hJTkVTLFxuICAgICAgICAgICAgT0ZGSUNFX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIFBPV0VSX0RJU1RSSUJVVElPTl9DT05UUk9MX1NZU1RFTVMsXG4gICAgICAgICAgICBQT1dFUl9ESVNUUklCVVRJT05fU1lTVEVNUyxcbiAgICAgICAgICAgIE5BVFVSQUxfR0FTX0dFTkVSQVRPUlMsXG4gICAgICAgICAgICBNT1RPUl9DT05UUk9MUyxcbiAgICAgICAgICAgIFZBUklBQkxFX0ZSRVFVRU5DWV9EUklWRVJTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfSFZBQyxcbiAgICAgICAgICAgIENPTVBSRVNTRURfQUlSX1NZU1RFTVMsXG4gICAgICAgICAgICBSRUZSSUdFUkFUSU9OX0NPT0xJTkdfU1lTVEVNUyxcbiAgICAgICAgICAgIE1BVEVSSUFMX0hBTkRMSU5HX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIFdJTkRfUE9XRVIsXG4gICAgICAgICAgICBFTEVDVFJJQ19JTkRVU1RSSUFMX01PVE9SUyxcbiAgICAgICAgICAgIEdST1VORElORyxcbiAgICAgICAgXTtcbiAgICAgICAgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUubWFwKChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISFBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLmljb24sXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRFbGVjdHJpY0dyb3VwVGVtcGxhdGUoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IFtcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQkFUVEVSWV9FTkVSR1lfU1RPUkFHRV0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRSQU5TRk9STUVSU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkVMRUNUUklDX01FVEVSU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkxJR0hUSU5HU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBPV0VSX0RJU1RSSUJVVElPTl9TWVNURU1TXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1dJVENIX0dFQVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRUxFQ1RSSUNfSU5EVVNUUklBTF9NT1RPUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5HUk9VTkRJTkddLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5NT1RPUl9DT05UUk9MU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkxJR0hUSU5HX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTEVDVFJJQ19IVkFDXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUkVGUklHRVJBVElPTl9DT09MSU5HX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUk9DRVNTX0NPTlRST0xfQVVUT01BVElPTl9TWVNURU1TXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuT0ZGSUNFX0VRVUlQTUVOVF0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkNPTVBSRVNTRURfQUlSX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUk9DRVNTX0VRVUlQTUVOVF9NQUNISU5FU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLk1BVEVSSUFMX0hBTkRMSU5HX0VRVUlQTUVOVF0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBPV0VSX0RJU1RSSUJVVElPTl9DT05UUk9MX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CQVRURVJJRVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5WQVJJQUJMRV9GUkVRVUVOQ1lfRFJJVkVSU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkVMRUNUUklDX0ZMWVdIRUVMX0VORVJHWV9TVE9SQUdFXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUFVNUEVEX0hZRFJPX1NUT1JBR0VdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5USEVSTUFMX0VORVJHWV9TVE9SQUdFXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1VQRVJfQ0FQQUNJVE9SX0VORVJHWV9TVE9SQUdFXSxcbiAgICAgICAgXTtcbiAgICAgICAgbGlzdEl0ZW1zLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoZT8uaWNvbiwgZS5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdEZ1ZWxHcm91cFRlbXBsYXRlKCkge1xuICAgICAgICBjb25zdCBsaXN0SXRlbXMgPSBbXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkRJRVNFTF9GVUVMU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdBU09OX0xJTkVTXSxcblxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CSU9ESUVTRUxTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuS0VST1NFTlNFXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUFJPUEFORVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5UQU5LRVJfVFJVQ0tTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUElQRUxJTkVdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5JTkRVU1RSSUFMX0JPSUxFUlNdLFxuXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdFTkVSQVRPUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5JTkRVU1RSSUFMX0ZVUk5BQ0VTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU5EVVNUUklBTF9PVkVOU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklORFVTVFJJQUxfVkVISUNMRVNfQU5EX0VRVUlQTUVOVF0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfTUVURVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9ESVNQRU5TRVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkVMRUNUUklDX0hWQUNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0ZJTFRSQVRJT05TXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU10sXG4gICAgICAgIF07XG5cbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9ESVNQRU5TRVJTXS5pY29uLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0RJU1BFTlNFUlNdLm5hbWUsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfU1RST1JBR0VfVEFOS1NdLmljb24sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfU1RST1JBR0VfVEFOS1NdLm5hbWUsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRklMVFJBVElPTlNdLmljb24sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRklMVFJBVElPTlNdLm5hbWUsXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfTUFOQUdFTUVOVFNdLmljb24sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfTUFOQUdFTUVOVFNdLm5hbWUsXG4gICAgICAgICk7XG4gICAgICAgIGxpc3RJdGVtcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKGU/Lmljb24sIGUubmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRHYXNHcm91cFRlbXBsYXRlKCkge1xuICAgICAgICBjb25zdCBsaXN0SXRlbXMgPSBbXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkNPTVBSRVNTRURfTkFUVVJBTF9HQVNfUElQRUxJTkVdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CT0lMRVJTX0FORF9IRUFURVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVSTkFDRVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QT1dFUl9HRU5FUkFUSU9OXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09HRU5FUkFUSU9OXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09NQklORURfQ1lDTEVfUE9XRVJfUExBTlRTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GT1JfVkVISUNMRVNfQU5EX0VRVUlQTUVOVF0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdBU19NRVRFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CVVJORVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRkxVRV9HQVNfQU5BTFlaRVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09NQlVTVElPTl9DT05UUk9MX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5HQVNfU1RPUkFHRV9UQU5LU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdBU19QUkVTU1VSRV9SRUdVTEFUT1JTXSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0RJU1BFTlNFUlNdLmljb24sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRElTUEVOU0VSU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgbGlzdEl0ZW1zLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoZT8uaWNvbiwgZS5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdEdhc0RpYWdyYW0oKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIE5BVFVSQUxfR0FTX1BJUEVMSU5FUyxcbiAgICAgICAgICAgIExJUVVFRklFRF9OQVRVUkFMX0dBUyxcbiAgICAgICAgICAgIENPTVBSRVNTRURfTkFUVVJBTF9HQVNfUElQRUxJTkUsXG4gICAgICAgICAgICBDT01QUkVTU0VEX05BVFVSQUxfR0FTX1BST0RVQ1RJT04sXG4gICAgICAgICAgICBCT0lMRVJTX0FORF9IRUFURVJTLFxuICAgICAgICAgICAgRlVSTkFDRVMsXG4gICAgICAgICAgICBQT1dFUl9HRU5FUkFUSU9OLFxuICAgICAgICAgICAgQ09HRU5FUkFUSU9OLFxuICAgICAgICAgICAgQ09NQklORURfQ1lDTEVfUE9XRVJfUExBTlRTLFxuICAgICAgICAgICAgRlVFTF9GT1JfVkVISUNMRVNfQU5EX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIEdBU19NRVRFUlMsXG4gICAgICAgICAgICBCVVJORVJTLFxuICAgICAgICAgICAgRkxVRV9HQVNfQU5BTFlaRVJTLFxuICAgICAgICAgICAgQ09NQlVTVElPTl9DT05UUk9MX1NZU1RFTVMsXG4gICAgICAgICAgICBHQVNfU1RPUkFHRV9UQU5LUyxcbiAgICAgICAgICAgIEdBU19QUkVTU1VSRV9SRUdVTEFUT1JTLFxuICAgICAgICAgICAgTkFUVVJBTF9HQVMsXG4gICAgICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1xuICAgICAgICAgICAgTkFUVVJBTF9HQVNfUElQRUxJTkVTLFxuICAgICAgICAgICAgTElRVUVGSUVEX05BVFVSQUxfR0FTLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QSVBFTElORSxcbiAgICAgICAgICAgIENPTVBSRVNTRURfTkFUVVJBTF9HQVNfUFJPRFVDVElPTixcbiAgICAgICAgICAgIEJPSUxFUlNfQU5EX0hFQVRFUlMsXG4gICAgICAgICAgICBGVVJOQUNFUyxcbiAgICAgICAgICAgIFBPV0VSX0dFTkVSQVRJT04sXG4gICAgICAgICAgICBDT0dFTkVSQVRJT04sXG4gICAgICAgICAgICBDT01CSU5FRF9DWUNMRV9QT1dFUl9QTEFOVFMsXG4gICAgICAgICAgICBGVUVMX0ZPUl9WRUhJQ0xFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgICAgICAgR0FTX01FVEVSUyxcbiAgICAgICAgICAgIEJVUk5FUlMsXG4gICAgICAgICAgICBGTFVFX0dBU19BTkFMWVpFUlMsXG4gICAgICAgICAgICBDT01CVVNUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgICAgICAgIEdBU19TVE9SQUdFX1RBTktTLFxuICAgICAgICAgICAgR0FTX1BSRVNTVVJFX1JFR1VMQVRPUlMsXG4gICAgICAgICAgICBOQVRVUkFMX0dBUyxcbiAgICAgICAgXTtcbiAgICAgICAgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUubWFwKChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISFBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLmljb24sXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRGdWVsRGlhZ3JhbSgpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgRElFU0VMX0ZVRUxTLFxuICAgICAgICAgICAgR0FTT05fTElORVMsXG4gICAgICAgICAgICBCSU9ESUVTRUxTLFxuICAgICAgICAgICAgS0VST1NFTlNFLFxuICAgICAgICAgICAgUFJPUEFORVMsXG4gICAgICAgICAgICBUQU5LRVJfVFJVQ0tTLFxuICAgICAgICAgICAgUElQRUxJTkUsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX0JPSUxFUlMsXG4gICAgICAgICAgICBHRU5FUkFUT1JTLFxuICAgICAgICAgICAgSU5EVVNUUklBTF9GVVJOQUNFUyxcbiAgICAgICAgICAgIElORFVTVFJJQUxfT1ZFTlMsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX1ZFSElDTEVTX0FORF9FUVVJUE1FTlQsXG4gICAgICAgICAgICBGVUVMX01FVEVSUyxcbiAgICAgICAgICAgIEZVRUxfRElTUEVOU0VSUyxcbiAgICAgICAgICAgIEZVRUxfU1RST1JBR0VfVEFOS1MsXG4gICAgICAgICAgICBGVUVMX0ZJTFRSQVRJT05TLFxuICAgICAgICAgICAgRlVFTF9NQU5BR0VNRU5UUyxcbiAgICAgICAgICAgIEZVRUxTLFxuICAgICAgICB9ID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTO1xuICAgICAgICBjb25zdCBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZSA9IFtcbiAgICAgICAgICAgIERJRVNFTF9GVUVMUyxcbiAgICAgICAgICAgIEdBU09OX0xJTkVTLFxuICAgICAgICAgICAgQklPRElFU0VMUyxcbiAgICAgICAgICAgIEtFUk9TRU5TRSxcbiAgICAgICAgICAgIFBST1BBTkVTLFxuICAgICAgICAgICAgVEFOS0VSX1RSVUNLUyxcbiAgICAgICAgICAgIFBJUEVMSU5FLFxuICAgICAgICAgICAgSU5EVVNUUklBTF9CT0lMRVJTLFxuICAgICAgICAgICAgR0VORVJBVE9SUyxcbiAgICAgICAgICAgIElORFVTVFJJQUxfRlVSTkFDRVMsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX09WRU5TLFxuICAgICAgICAgICAgSU5EVVNUUklBTF9WRUhJQ0xFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgICAgICAgRlVFTF9NRVRFUlMsXG4gICAgICAgICAgICBGVUVMX0RJU1BFTlNFUlMsXG4gICAgICAgICAgICBGVUVMX1NUUk9SQUdFX1RBTktTLFxuICAgICAgICAgICAgRlVFTF9GSUxUUkFUSU9OUyxcbiAgICAgICAgICAgIEZVRUxfTUFOQUdFTUVOVFMsXG4gICAgICAgICAgICBGVUVMUyxcbiAgICAgICAgXTtcbiAgICAgICAgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUubWFwKChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISFBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLmljb24sXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRTb2xhckRpYWdyYW0oKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIFNPTEFSX1BPV0VSLFxuICAgICAgICAgICAgUE9XRVJfQ09ORElUSU9OSU5HX1VOSVQsXG4gICAgICAgICAgICBCQVRURVJJRVM6IEJBVFRFUlksXG4gICAgICAgICAgICBJTlZFUlRFUlM6IElOVkVSVEVSLFxuICAgICAgICB9ID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTO1xuICAgICAgICBjb25zdCBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZSA9IFtTT0xBUl9QT1dFUiwgUE9XRVJfQ09ORElUSU9OSU5HX1VOSVQsIEJBVFRFUlksIElOVkVSVEVSXTtcbiAgICAgICAgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUubWFwKChlKSA9PiB7XG4gICAgICAgICAgICBpZiAoISFBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLmljb24sXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5uYW1lLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluaXRTdGVhbURpYWdyYW0oKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIFZBTFVFUyxcbiAgICAgICAgICAgIFNURUFNX1RSQVBTLFxuICAgICAgICAgICAgUFJFU1NVUkVfUkVHVUxBVE9SUyxcbiAgICAgICAgICAgIFNBRkVUWV9WQUxVRVNfQU5EX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIENPTkRFTlNBVEVfUkVUVVJOX1NZU1RFTSxcbiAgICAgICAgICAgIERFQUVSQVRPUlMsXG4gICAgICAgICAgICBGRUVEV0FURVJfUFVNUFMsXG4gICAgICAgICAgICBCTE9XRE9XTl9UQU5LUyxcbiAgICAgICAgICAgIEVYUEFOU0lPTl9UQU5LUyxcbiAgICAgICAgICAgIEhFQVRfRVhDSEFOR0VSUyxcbiAgICAgICAgICAgIFRVUkJJTkVTLFxuICAgICAgICB9ID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTO1xuICAgICAgICBjb25zdCBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZSA9IFtcbiAgICAgICAgICAgIFZBTFVFUyxcbiAgICAgICAgICAgIFNURUFNX1RSQVBTLFxuICAgICAgICAgICAgUFJFU1NVUkVfUkVHVUxBVE9SUyxcbiAgICAgICAgICAgIFNBRkVUWV9WQUxVRVNfQU5EX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIENPTkRFTlNBVEVfUkVUVVJOX1NZU1RFTSxcbiAgICAgICAgICAgIERFQUVSQVRPUlMsXG4gICAgICAgICAgICBGRUVEV0FURVJfUFVNUFMsXG4gICAgICAgICAgICBCTE9XRE9XTl9UQU5LUyxcbiAgICAgICAgICAgIEVYUEFOU0lPTl9UQU5LUyxcbiAgICAgICAgICAgIEhFQVRfRVhDSEFOR0VSUyxcbiAgICAgICAgICAgIFRVUkJJTkVTLFxuICAgICAgICBdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25Nb2RlbENoYW5nZUxpc3RlbmVyKGU6IGdvLkNoYW5nZWRFdmVudCkge1xuICAgICAgICAvLyB0aGlzLm9uTW9kZWxDaGFuZ2VMaXN0ZW5lckV2ZW50LmVtaXQoZSk7XG4gICAgfVxuXG4gICAgbWFrZUxpbmtUZW1wbGF0ZSgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHM6IGFueVtdID0gW107XG4gICAgICAgIC8vIGxpbmVcbiAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5TaGFwZSxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlzUGFuZWxNYWluOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5HUkFZLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogQXRvR29qc0VkaXRvck1vZGVsLkxJTktfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuU0lNUExFXT8uc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZVdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlV2lkdGgnLCAndHlwZScsICh4KSA9PiBBdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbeF0/LnN0cm9rZVdpZHRoKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gYW5pbWF0aW9uXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgICAgICAgICAuLi5BdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5QSVBFX0FOSU1BVElPTl0/LmFuaW1hdGlvbixcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcblxuICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdUb3AnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAzOCxcbiAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoTmFOLCAzNiksXG4gICAgICAgICAgICAgICAgICAgIC8vIHdpZHRoOiAxMDAsXG4gICAgICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDEwMCwgNSksIC8vIMSQ4bq3dCBrw61jaCB0aMaw4bubYyB04buRaSB0aGnhu4N1IGzDoCAxMDB4NTBcbiAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gbGF5ZXJOYW1lOiAnQmFja2dyb3VuZExheWVyJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDUwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICd0ZXh0Q29tcG9uZW50JywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGhlaWdodDogMzAsXG4gICAgICAgICAgICAgICAgLy8gICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgLy8gICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgNTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnbGVmdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBnby5TcG90LkNlbnRlciwgLy8gxJDhuqNtIGLhuqNvIHbEg24gYuG6o24gbuG6sW0g4bufIHRydW5nIHTDom0gY+G7p2EgbsO6dFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQ2VudGVyLCAvLyDEkOG6o20gYuG6o28gdsSDbiBi4bqjbiBraMO0bmcgYuG7iyBk4buLY2ggY2h1eeG7g24gcmEga2jhu49pIHRydW5nIHTDom1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LCAvLyBDaHV54buDbiBkw7JuZyDEkeG7gyB2xINuIGLhuqNuIGtow7RuZyB2xrDhu6N0IHJhIG5nb8OgaVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAndGV4dENvbXBvbmVudCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICd0ZXh0Q29tcG9uZW50JyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdiYWNrZ3JvdW5kJywgJ3RleHRDb21wb25lbnQnLCAoeCkgPT4gKHggPyAnd2hpdGUnIDogJ3RyYW5zcGFyZW50JykpLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgbmV3IGdvLkJpbmRpbmcoJ21hcmdpbicsICdpc0Zvcm1hdCcsICh4KSA9PlxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgeCA/IG5ldyBnby5NYXJnaW4oNSwgMCwgNSwgNSkgOiBuZXcgZ28uTWFyZ2luKDUsIDUsIDUsIDUpLFxuICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGFycm93XG4gICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uU2hhcGUsIC8vIHRoZSBcImZyb21cIiBhcnJvd2hlYWRcbiAgICAgICAgICAgICAgICB7IC4uLkF0b0dvanNFZGl0b3JNb2RlbC5MSU5LX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlNJTVBMRV0/LmFycm93IH0sXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoXG4gICAgICAgICAgICAgICAgICAgICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5QSVBFX0FOSU1BVElPTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlBJUEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5QSVBFX0hJRERFTixcbiAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXMoeCksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gVE9ETyBmaXggbGluayBjYW5ub3Qgc2VsZWN0ZWQgaW5zaWRlIGdyb3VwIHRlbXBsYXRlXG4gICAgICAgIHRoaXMubXlEaWFncmFtLmxpbmtUZW1wbGF0ZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkxpbmssXG4gICAgICAgICAgICBnby5MaW5rLk9ydGhvZ29uYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbGF5ZXJOYW1lOiAnQmFja2dyb3VuZCcsIC8vIGxpbmsgY2Fubm90IHNlbGVjdCBpbnNpZGUgZ3JvdXAgdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAvLyBjdXJ2aW5lc3M6IDIwLFxuICAgICAgICAgICAgICAgIC8vIGNvcm5lcjogNSxcbiAgICAgICAgICAgICAgICByb3V0aW5nOiBnby5MaW5rLkF2b2lkc05vZGVzLFxuICAgICAgICAgICAgICAgIHJlc2hhcGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVzZWdtZW50YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWxpbmthYmxlRnJvbTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWxpbmthYmxlVG86IHRydWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b1Nob3J0TGVuZ3RoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5TSU1QTEVdLnRvU2hvcnRMZW5ndGgsIC8vIGFzc3VtZSBhcnJvd2hlYWQgYXQgXCJ0b1wiIGVuZCwgbmVlZCB0byBhdm9pZCBiYWQgYXBwZWFyYW5jZSB3aGVuIHBhdGggaXMgdGhpY2tcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbGF5ZXJOYW1lJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnRleHRDb21wb25lbnQgPyAnQmFja2dyb3VuZCcgOiAnJztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3pPcmRlcicsICd0eXBlJywgKHgpID0+ICh4ID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlBJUEVfQU5JTUFUSU9OID8gMTEgOiAxMCkpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RvU2hvcnRMZW5ndGgnLCAndHlwZScsICh4KSA9PiBBdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbeF0udG9TaG9ydExlbmd0aCB8fCAwKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3Zpc2libGUnKSxcblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGxpbmtzIGNvbWUgaW4gZnJvbSB0aGUgcHJvcGVyIGRpcmVjdGlvbiBhbmQgZ28gb3V0IGFwcHJvcHJpYXRlbHlcbiAgICAgICAgICAgIC4uLmVsZW1lbnRzLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1ha2VWYWx1ZU5vZGVUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgyLCBoOiAzNiB9KSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgeyBtaW5TaXplOiBuZXcgZ28uU2l6ZShzaXplLncsIHNpemUuaCkgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDE0cHggQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQ0VSVUxFQU4sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2VkaXRhYmxlJywgJ2lzRWRpdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3Nob3J0ZW5lZE51bWJlcicpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtYXJnaW4nLCAnaXNGb3JtYXQnLCAoeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID8gbmV3IGdvLk1hcmdpbig1LCAwLCA1LCA1KSA6IG5ldyBnby5NYXJnaW4oNSwgNSwgNSwgNSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSAhPT0gVkFMVUVfTkE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gSWNvbiBFcnIgd2hlbiBsYWNrIG9mIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDEwLCAxMCwgMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IFZBTFVFX05BLCAvLyBPbGQgdmVyc2lvbjogVEVYVF9FUlJPUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5TQUxNT04sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGlsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlID09PSBWQUxVRV9OQTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5WQUxVRV9OT0RFLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlRW1wdHlOb2RlVGVtcGxhdGUoc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiAwLCBoOiAwIH0pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTVBUWSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZVZhbHVlTGFiZWxUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgyLCBoOiAzNiB9KSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7IG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudywgc2l6ZS5oKSB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDEwLCAwLCAxMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTVweCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5DRVJVTEVBTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5TaXplOiBuZXcgZ28uU2l6ZSgxNTAsIDMwKSwgLy8gU2V0IHRoZSB3aWR0aCBvZiB0aGUgdGV4dCBibG9ja1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ2RhdGEnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgeD8ucXVhbnRpdHkgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkOiBhbnkgPSBVdGlsc1NlcnZpY2UuY29udmVydFByZWZpeGVzRGF0YSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4Py5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdDogVXRpbHNTZXJ2aWNlLmNvbnZlcnRTcGVjaWFsVW5pdCh4Py51bml0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZC5zaG9ydGVuZWROdW1iZXIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZC51bml0UHJlZml4ZXMgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXRpbHNTZXJ2aWNlLmNvbnZlcnRTcGVjaWFsVW5pdCh4Py51bml0KSA/PyAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeD8ucGVyY2VudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRWYWx1ZSArPSBgICgke3g/LnBlcmNlbnR9JSlgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2RhdGEnLCAoeCkgPT4gdHlwZW9mIHg/LnF1YW50aXR5ID09PSAnbnVtYmVyJyksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBTFVFX0xBQkVMLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlVGV4dExhYmVsVGVtcGxhdGUoc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiBOYU4sIGg6IDIwIH0pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDE2cHggQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkNFUlVMRUFOLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3Zpc2libGUnKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9MQUJFTCwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZVRleHRUZW1wbGF0ZShcbiAgICAgICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSwgaDogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDIgfSxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IGNvbnRleHRNZW51ID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgICAgICAgIHRoaXMuJCgnQ29udGV4dE1lbnVCdXR0b24nLCB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnT3B0aW9uIDEnKSwge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdPcHRpb24gMSBjbGlja2VkIScpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJCgnQ29udGV4dE1lbnVCdXR0b24nLCB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnT3B0aW9uIDInKSwge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCdPcHRpb24gMiBjbGlja2VkIScpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIC4uLiBhZGQgbW9yZSBvcHRpb25zIGFzIG5lZWRlZCAuLi5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gZnJvbVNwb3Q6IGdvLlNwb3QuUmlnaHRTaWRlLFxuICAgICAgICAgICAgICAgIC8vIHRvU3BvdDogZ28uU3BvdC5MZWZ0U2lkZSxcbiAgICAgICAgICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIC8vIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmIChlPy5kYXRhLm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGU/LmRhdGEub25TZWxlY3RlZChlPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgLy8gbW91c2VIb3ZlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgLy8gbW91c2VMZWF2ZTogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy52YWx1ZSA9PT0gVkFMVUVfTkEpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlPy5vYj8uaXNUeXBlSW5mbG93T2ZQbGFudENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9iaj8uZGF0YT8ub25TZWxlY3RlZChub2RlPy5vYj8ubm9kZVBsYW50Q2VsbFBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxmLm9uQ2xpY2tDb21wb2VudC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBvYjogbm9kZT8ub2I/Lm5vZGVQbGFudENlbGxQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBjb21wb25lbnQ6IG5vZGU/Lm9iPy5ub2RlUGxhbnRDZWxsUGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLm9uQ2xpY2tJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGRvdWJsZUNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZT8ub2I/LmlzVHlwZUluZmxvd09mUGxhbnRDZWxsICYmICF0aGlzLl9pbml0aWFsT3B0aW9ucz8uaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2JqPy5kYXRhPy5vblNlbGVjdGVkKG5vZGU/Lm9iPy5ub2RlUGxhbnRDZWxsUGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuaXNTaG93Tm9kZUluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICA/IHNlbGYub25Eb3VibGVDbGlja05vZGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIG5vZGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgb2I6IG5vZGU/Lm9iPy5ub2RlUGxhbnRDZWxsUGFyZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLm9uQ2xpY2tJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgaGVpZ2h0OiA2MiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7IGZpbGw6IG51bGwsIHN0cm9rZTogJ2RvZGdlcmJsdWUnLCBzdHJva2VXaWR0aDogNCB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oOCwgMywgMCwgMykgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygncGFkZGluZycsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geD8uaXNUeXBlSW5mbG93T2ZQbGFudENlbGxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8geD8uZmxvd09mUGxhbnRDZWxsID09PSBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTi5JTkZMT1dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMjApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgZ28uTWFyZ2luKDAsIDIwLCAwLCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiAzIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4Py5pc1R5cGVJbmZsb3dPZlBsYW50Q2VsbCA/IHg/LmhlaWdodCArIDEwIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3dpZHRoJywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVHlwZUluZmxvd09mUGxhbnRDZWxsID8geD8ud2lkdGggKyAxMiA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLklOU0lHSFQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2Zyb21TcG90JywgJ2Zyb21TcG90JyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndG9TcG90JywgJ3RvU3BvdCcpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21vdmFibGUnLCAnbW92YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnYWxpZ25tZW50JywgJ2FsaWdubWVudCcsIGZ1bmN0aW9uKGxvYykge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiBuZXcgZ28uU3BvdCgwLCAwLCBsb2MueCwgMCk7XG4gICAgICAgICAgICAvLyB9KS5vZk9iamVjdCgpLFxuXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VsZi5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/Lm5hbWUgPz8gVkFMVUVfTkE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGE/LnZhbHVlID09PSBWQUxVRV9OQSB8fCBfLmlzTmlsKGRhdGE/LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5PX0RBVEE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gVEVYVF9VTktOT1dOO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfLnJvdW5kKGRhdGE/LnZhbHVlLCAyKS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFycm93Rm9yUGxhbnRDZWxsKHNpemUsIEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLk9VVEZMT1cpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShzaXplLncsIHNpemUuaCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBzaXplLmgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncsIHNpemUuaCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnd2lkdGgnLCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdoZWlnaHQnLCAnaGVpZ2h0JyksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5TaGFwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUm91bmRlZFJlY3RhbmdsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElHSFRfQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3RleHROb2RlU2hhcGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZpbGwnLCAnZmlsbCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnc3Ryb2tlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWZXJ0aWNhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWxlcnRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAncmVjb21tZW5kYXRpb24nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ0NpcmNsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI0U5NUY0NycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnI0U5NUY0NycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDE1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnXFx1ZjY0OScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEuNSwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJzhweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Bvc2l0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25Ib3ZlckFsZXJ0LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54ICsgOCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZUFsZXJ0OiAob2JqIGFzIGFueSkucGFydD8ub2I/Lm1lc3NhZ2VBbGVydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25Ib3ZlckFsZXJ0LmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdhbGVydCcpLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgSUNPTl9BTEVSVCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoMzAsIDMwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3RleHRCbG9ja1ZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSA4LCAxOCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMjJweCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5HUkFZLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnZWRpdGFibGUnLCAnaXNFZGl0YWJsZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2FuZ2xlJywgJ2FuZ2xlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWFyZ2luJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGE/LmFsZXJ0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRUZXh0RGF0YUJveChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiAhZGF0YT8uaXNIaWRkZW5WYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJyb3dGb3JQbGFudENlbGwoc2l6ZSwgQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04uSU5GTE9XKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFLCBub2RlKTtcbiAgICB9XG5cbiAgICBhcnJvd0ZvclBsYW50Q2VsbChzaXplLCBmbG93RGlyZWN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiQoXG4gICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplLmgsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICdoZWlnaHQnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiBkYXRhPy5mbG93T2ZQbGFudENlbGwgPT09IGZsb3dEaXJlY3Rpb24pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbHVtbjogZmxvd0RpcmVjdGlvbiA9PT0gQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04uT1VURkxPVyA/IDAgOiAyLFxuICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnaXRlbUFycmF5JywgJ2RhdGFMaW5rQXJyYXknKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpdGVtVGVtcGxhdGU6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdyb3cnLCAnaW5kZXhSb3cnKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICdoZWlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFSUk9XLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoMjAsIDQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NvdXJjZScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYW5lbC5wYXJ0Py5kYXRhPy5pZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy5pc0NyZWF0ZWQgPyBwYW5lbD8uJHAgOiBBUlJPV19HUkFZO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0VGV4dERhdGFCb3goZGF0YSkge1xuICAgICAgICBpZiAoZGF0YT8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAgICAgICByZXR1cm4gVEVYVF9VTktOT1dOO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtkYXRhPy5zaG9ydGVuZWROdW1iZXJ9JHtkYXRhPy51bml0UHJlZml4ZXMgPyAnICcgKyBkYXRhPy51bml0UHJlZml4ZXMgOiAnJ31gO1xuICAgIH1cblxuICAgIG1ha2VEYXRhQm94VGVtcGxhdGUoXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1IH0sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHt9LFxuICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlSG92ZXI6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy52YWx1ZSA9PT0gVkFMVUVfTkEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChvYmogYXMgYW55KS5wYXJ0Py5vYj8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyByb3c6IDAsIHN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0Lkhvcml6b250YWwgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5TaGFwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVjdGFuZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMTAsIDUsIDEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBOYU4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNpbmdCZWxvdzogNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcm93OiAxLCBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5Ib3Jpem9udGFsIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJR0hUX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDEwLCA0MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAxMCwgc2l6ZS5oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbig1LCAwLCA1LCA1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEycHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkdSQVksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdlZGl0YWJsZScsICdpc0VkaXRhYmxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3Nob3J0ZW5lZE51bWJlcicpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUgIT09IFZBTFVFX05BO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDEwLCA0MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAxMCwgc2l6ZS5oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbig1LCA1LCA1LCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEycHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkdSQVksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSAhPT0gVkFMVUVfTkE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICd1bml0UHJlZml4ZXMnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWNvbiBFcnIgd2hlbiBsYWNrIG9mIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMTAsIDEwLCAxMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBWQUxVRV9OQSwgLy8gT2xkIHZlcnNpb246IFRFWFRfRVJST1JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuU0FMTU9OLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc011bHRpbGluZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSA9PT0gVkFMVUVfTkE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIGZvdXIgbmFtZWQgcG9ydHMsIG9uZSBvbiBlYWNoIHNpZGU6XG5cbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5EQVRBX0JPWCwgbm9kZSk7XG4gICAgfVxuXG4gICAgc2hvd1BvaW50KGxvYykge1xuICAgICAgICBjb25zdCBkb2NMb2MgPSB0aGlzLm15RGlhZ3JhbS50cmFuc2Zvcm1Eb2NUb1ZpZXcobG9jKTtcbiAgICB9XG5cbiAgICBtYWtlRW50aXR5VGVtcGxhdGUoXG4gICAgICAgIGljb24sXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LCBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGYuc2hvd1BvaW50KG9iaj8ucGFydD8ubG9jYXRpb24pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGlja0NvbXBvZW50LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogb2JqPy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dCbHVyOiA2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93T2Zmc2V0OiBuZXcgZ28uUG9pbnQoMCwgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogJyMwMDAwMDAyOScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7IGZpbGw6IG51bGwsIHN0cm9rZTogJ2RvZGdlcmJsdWUnLCBzdHJva2VXaWR0aDogNCB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiAzIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2VuZXJhdGVBY3Rpb25Hcm91cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5ST19XQVRFUl9UUkVBVE1FTlRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkNPT0xJTkdfVE9XRVJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKHRpdGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkFTU0VUX1BBUkFNRVRFUlMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVUQUlMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21vdmFibGUnLCAnbW92YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAxLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoNjAsIDYwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAwLCAzLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwRDQyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgeyBtYXJnaW46IDQgfSwgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZWRpdGFibGUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfQ09NUE9ORU5UX1dBVEVSPy5pbmNsdWRlcyhkYXRhPy5zeXN0ZW1UeXBlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPy50b3BvbG9neVR5cGUgIT09IEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuV0FURVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT8udG9wb2xvZ3lUeXBlICE9PSBBVE9fRUNPTVBPTkVOVF9QTEFOVF9UWVBFLldBVEVSX1BMQU5UX0NFTExcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLjUsIDgsIDApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDEsIDAuNSwgLTgsIDApLFxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VFbnRpdHlUZW1wbGF0ZUVuZXJneShcbiAgICAgICAgaWNvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1IH0sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dWaXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd09mZnNldDogbmV3IGdvLlBvaW50KDAsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Q29sb3I6ICcjMDAwMDAwMjknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgeyBmaWxsOiBudWxsLCBzdHJva2U6ICdkb2RnZXJibHVlJywgc3Ryb2tlV2lkdGg6IDQgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBY3Rpb25Hcm91cChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21vdmFibGUnLCAnbW92YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDEwLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCAxNSksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIHNpemUuaCAtIDY1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAzLCAzLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMyQzJDMkMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIGZvdXIgbmFtZWQgcG9ydHMsIG9uZSBvbiBlYWNoIHNpZGU6XG5cbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIC8vIFBsYW50IENlbGxcbiAgICBwbGFudENlbGxUZW1wbGF0ZShpY29uLCB0aXRsZSwgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiAyNjAsIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5QTEFOVF9DRUxMX0hFSUdIVCB9KSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkdyb3VwLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGYuc2hvd1BvaW50KG9iaj8ucGFydD8ubG9jYXRpb24pO1xuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBtb3VzZUVudGVyOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGYub25Ib3ZlckFsZXJ0LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgbGVmdDogZT8uWydXciddPy54ICsgOCxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgbWVzc2FnZUFsZXJ0OiAob2JqIGFzIGFueSkucGFydD8ub2I/Lm1lc3NhZ2VBbGVydCxcbiAgICAgICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaGFwZSA9IChub2RlIGFzIGFueSk/LmZpbmRPYmplY3QoJ1NIQVBFX0tFWScpOyAvLyBUaGF5ICdTSEFQRV9LRVknIGLhurFuZyBraMOzYSBi4bqhbiDEkeG6t3QgY2hvIGjDrG5oIFNoYXBlXG4gICAgICAgICAgICAgICAgICAgIC8vIGRlYnVnZ2VyO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hhcGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlLnN0cm9rZSA9ICdibHVlJzsgLy8gVGhheSDEkeG7lWkgbcOgdSBzdHJva2UgdGjDoG5oIGJsdWVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbW91c2VMZWF2ZTogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGYub25Ib3ZlckFsZXJ0LmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpY2tDb21wb2VudC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IG9iaj8uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIGRvdWJsZUNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsT3B0aW9ucz8uaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1Nob3dOb2RlSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5vbkRvdWJsZUNsaWNrTm9kZS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIC8vIFRvZG9cblxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0JsdXI6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQ6IG5ldyBnby5Qb2ludCgwLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9yOiAnIzAwMDAwMDI5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiAxNzAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgeyBmaWxsOiBudWxsLCBzdHJva2U6ICdkb2RnZXJibHVlJywgc3Ryb2tlV2lkdGg6IDQgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuQ0hBTkdFX0lDT04sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PTkxZX0RFVEFJTFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBEZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2lzTm90QWN0aW9uJywgKHgpID0+ICF4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgeyBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PTkxZX0RFVEFJTFNdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB4Py5pc09ubHlEZXRhaWxzICYmICF4Py5pc05vdEFjdGlvbiA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAvLyAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgLy8gfSksXG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksIHZpc2libGU6IGZhbHNlIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUwLCAwLCA1MCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgdGl0bGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIHNpemUuaCAtIDY1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb3VyY2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGF0aEltYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID8/IEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTF0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMCwgMywgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJDMkMyQycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgLy8gdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIC8vIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIC8vIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgLy8gdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUVudGl0eVdpdGhkcmF3T3JEaXNjaGFyZ2UoXG4gICAgICAgIGljb24sXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LCBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgbW91c2VPdmVyOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNlbGYuc2hvd1BvaW50KG9iaj8ucGFydD8ubG9jYXRpb24pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHsgZmlsbDogbnVsbCwgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsIHN0cm9rZVdpZHRoOiA0IH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IDMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFVEFJTFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21vdmFibGUnLCAnbW92YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJChnby5UZXh0QmxvY2ssIHRpdGxlLCB7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIHNpemUuaCAtIDUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAwLCAzLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpcmVkU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwRDQyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAvLyBkZWZpbmUgYSB0b29sdGlwIGZvciBlYWNoIG5vZGUgdGhhdCBkaXNwbGF5cyB0aGUgY29sb3IgYXMgdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7IG1hcmdpbjogNCB9LCBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICksIC8vIGVuZCBvZiBBZG9ybm1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gZm91ciBuYW1lZCBwb3J0cywgb25lIG9uIGVhY2ggc2lkZTpcblxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgZWRpdFRleHRHcm91cFpvbmUoZSwgYnV0dG9uKSB7XG4gICAgICAgIGNvbnN0IG5vZGVHcm91cCA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgICAgICBjb25zdCBkaWFncmFtID0gbm9kZUdyb3VwLmRpYWdyYW07XG4gICAgICAgIGUuZGlhZ3JhbS5jb21tYW5kSGFuZGxlci5lZGl0VGV4dEJsb2NrKG5vZGVHcm91cC5maW5kT2JqZWN0KCdURVhUQkxPQ0snKSk7XG4gICAgfVxuXG4gICAgZWRpdFRleHQoZSwgYnV0dG9uKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBidXR0b24ucGFydC5hZG9ybmVkUGFydDtcbiAgICAgICAgZS5kaWFncmFtLmNvbW1hbmRIYW5kbGVyLmVkaXRUZXh0QmxvY2sobm9kZS5maW5kT2JqZWN0KCdURVhUQkxPQ0snKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZHJhZ05ld05vZGUoZSwgYnV0dG9uKSB7XG4gICAgICAgIGNvbnN0IHRvb2wgPSBlLmRpYWdyYW0udG9vbE1hbmFnZXIuZHJhZ2dpbmdUb29sO1xuXG4gICAgICAgIGlmICh0b29sLmlzQmV5b25kRHJhZ1NpemUoKSkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGJ1dHRvbi5fZHJhZ0RhdGE7XG4gICAgICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcbiAgICAgICAgICAgIGUuZGlhZ3JhbS5zdGFydFRyYW5zYWN0aW9uKCdidXR0b24gZHJhZycpOyAvLyBzZWUgZG9EZWFjdGl2YXRlLCBiZWxvd1xuXG4gICAgICAgICAgICBjb25zdCBmcm9tbm9kZSA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgICAgICAgICAgY29uc3QgZGlhZ3JhbSA9IGZyb21ub2RlLmRpYWdyYW07XG4gICAgICAgICAgICBjb25zdCBtb2RlbCA9IGRpYWdyYW0ubW9kZWw7XG4gICAgICAgICAgICBjb25zdCBub2RlZGF0YSA9IHsgLi4ubW9kZWwuY29weU5vZGVEYXRhKGRhdGEpLCBrZXk6IFV0aWxzU2VydmljZS5nZW5lcmF0ZVVVSUQoKSB9O1xuICAgICAgICAgICAgbW9kZWwuYWRkTm9kZURhdGEobm9kZWRhdGEpO1xuICAgICAgICAgICAgY29uc3QgbmV3bm9kZSA9IGRpYWdyYW0uZmluZE5vZGVGb3JEYXRhKG5vZGVkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtkYXRhID0gbW9kZWwuY29weUxpbmtEYXRhKHt9KTtcbiAgICAgICAgICAgIG1vZGVsLnNldEZyb21LZXlGb3JMaW5rRGF0YShsaW5rZGF0YSwgbW9kZWwuZ2V0S2V5Rm9yTm9kZURhdGEoZnJvbW5vZGUuZGF0YSkpO1xuICAgICAgICAgICAgbW9kZWwuc2V0VG9LZXlGb3JMaW5rRGF0YShsaW5rZGF0YSwgbW9kZWwuZ2V0S2V5Rm9yTm9kZURhdGEobmV3bm9kZS5kYXRhKSk7XG4gICAgICAgICAgICBtb2RlbC5hZGRMaW5rRGF0YShsaW5rZGF0YSk7XG4gICAgICAgICAgICBkaWFncmFtLnNlbGVjdChuZXdub2RlKTtcbiAgICAgICAgICAgIC8vICAgdGhpcy5jcmVhdGVOb2RlQW5kTGluayhkYXRhLCBidXR0b24ucGFydC5hZG9ybmVkUGFydCk7XG5cbiAgICAgICAgICAgIG5ld25vZGUubG9jYXRpb24gPSBlLmRpYWdyYW0ubGFzdElucHV0LmRvY3VtZW50UG9pbnQ7XG4gICAgICAgICAgICAvLyBkb24ndCBjb21taXRUcmFuc2FjdGlvbiBoZXJlLCBidXQgaW4gdG9vbC5kb0RlYWN0aXZhdGUsIGFmdGVyIGRyYWcgb3BlcmF0aW9uIGZpbmlzaGVkXG4gICAgICAgICAgICAvLyBzZXQgdG9vbC5jdXJyZW50UGFydCB0byBhIHNlbGVjdGVkIG1vdmFibGUgUGFydCBhbmQgdGhlbiBhY3RpdmF0ZSB0aGUgRHJhZ2dpbmdUb29sXG4gICAgICAgICAgICB0b29sLmN1cnJlbnRQYXJ0ID0gbmV3bm9kZTtcbiAgICAgICAgICAgIGUuZGlhZ3JhbS5jdXJyZW50VG9vbCA9IHRvb2w7XG4gICAgICAgICAgICB0b29sLmRvQWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZEl0ZW1Pbkdyb3VwWm9uZShlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IGJ1dHRvbi5fZHJhZ0RhdGE7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgICAgICBlLmRpYWdyYW0uc3RhcnRUcmFuc2FjdGlvbignQWRkIEl0ZW0gT24gR3JvdXAgWm9uZScpO1xuICAgICAgICBjb25zdCBmcm9tbm9kZSA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgICAgICBjb25zdCBkcmFnRGF0YSA9IGJ1dHRvbi5fZHJhZ0RhdGE7XG4gICAgICAgIGNvbnN0IGRpYWdyYW0gPSBmcm9tbm9kZS5kaWFncmFtO1xuICAgICAgICBjb25zdCBtb2RlbCA9IGRpYWdyYW0ubW9kZWw7XG4gICAgICAgIGNvbnN0IG5vZGVkYXRhID0gbW9kZWwuY29weU5vZGVEYXRhKGRyYWdEYXRhKTtcbiAgICAgICAgbW9kZWwuYWRkTm9kZURhdGEoe1xuICAgICAgICAgICAgLi4ubm9kZWRhdGEsXG4gICAgICAgICAgICB0eXBlOiAnU3ViU3lzdGVtJyxcbiAgICAgICAgICAgIG5hbWU6ICdbVGl0bGUuLi5dJyxcbiAgICAgICAgICAgIG5hbWVJdGVtOiAnW05hbWUuLi5dJyxcbiAgICAgICAgICAgIGdyb3VwOiBmcm9tbm9kZT8ub2I/LmtleSxcbiAgICAgICAgfSk7XG4gICAgICAgIGUuZGlhZ3JhbS5jb21taXRUcmFuc2FjdGlvbignQWRkIEl0ZW0gT24gR3JvdXAgWm9uZScpO1xuICAgICAgICAvLyBjb25zdCBuZXdub2RlID0gZGlhZ3JhbS5maW5kTm9kZUZvckRhdGEobm9kZWRhdGEpO1xuICAgICAgICAvLyBjb25zdCBsaW5rZGF0YSA9IG1vZGVsLmNvcHlMaW5rRGF0YSh7fSk7XG4gICAgICAgIC8vIG1vZGVsLnNldEZyb21LZXlGb3JMaW5rRGF0YShsaW5rZGF0YSwgbW9kZWwuZ2V0S2V5Rm9yTm9kZURhdGEoZnJvbW5vZGUuZGF0YSkpO1xuICAgICAgICAvLyBtb2RlbC5zZXRUb0tleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShuZXdub2RlLmRhdGEpKTtcbiAgICAgICAgLy8gbW9kZWwuYWRkTGlua0RhdGEobGlua2RhdGEpO1xuICAgICAgICAvLyBkaWFncmFtLnNlbGVjdChuZXdub2RlKTtcblxuICAgICAgICAvLyBuZXdub2RlLmxvY2F0aW9uID0gbmV3IGdvLlBvaW50KGZyb21ub2RlLmxvY2F0aW9uLnggKyAyMDAsIGZyb21ub2RlLmxvY2F0aW9uLnkpO1xuICAgICAgICAvLyBlLmRpYWdyYW0uY29tbWl0VHJhbnNhY3Rpb24oJ0NyZWF0ZSBOb2RlIGFuZCBMaW5rJyk7XG4gICAgfVxuXG4gICAgZ2VuZXJhdGVBY3Rpb25Hcm91cChhY3Rpb25zOiBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlNbXSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHRoaXMuJChcbiAgICAgICAgICAgICdCdXR0b24nLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiAoZSwgb2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub3BlbkFjdGlvbk1lbnUoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRBY3Rpb25zID0gXy5maWx0ZXIob2JqLnBhcnQ/Llsnb2InXT8uYWN0aW9ucyA/PyBhY3Rpb25zLCAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBGaWx0ZXIgSW5zaWdodCBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24gPT09IEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5JTlNJR0hUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhb2JqLnBhcnQ/Llsnb2InXT8uaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uID09PSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLnBhcnQ/Llsnb2InXT8udHlwZSAhPT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX0NPTVBPTkVOVF9XQVRFUj8uaW5jbHVkZXMob2JqLnBhcnQ/Llsnb2InXT8uc3lzdGVtVHlwZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoucGFydD8uWydvYiddPy50b3BvbG9neVR5cGUgIT09IEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuV0FURVIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoucGFydD8uWydvYiddPy50b3BvbG9neVR5cGUgIT09IEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuV0FURVJfUExBTlRfQ0VMTFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH0pLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuU1RFQU0gPT09IG9iai5wYXJ0Py5bJ29iJ10/LnRvcG9sb2d5VHlwZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPT09IEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5JTlNJR0hUXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRBVEFfTUFQUElORztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5hY3Rpb25zID0gZmlsdGVyZWRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb25DbGlja0ZuID0gKCkgPT4ge307XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLklOU0lHSFQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREFUQV9NQVBQSU5HOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uT3Blbkluc2lnaHRNYXBwaW5nLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG9iai5wYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFVEFJTFM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uT3BlbkRldGFpbC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBvYmoucGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PTkxZX0RFVEFJTFM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuRGV0YWlsLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG9iai5wYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkFTU0VUX1BBUkFNRVRFUlM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuQXNzZXRQYXJhbWV0ZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogb2JqLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqLnBhcnQ/LmRhdGE/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uUmVuYW1lLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggLSA1MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9iai5wYXJ0Py5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTGF5b3V0U2VydmljZS5zZXRUb29sVGlwQ29tcG9uZW50RGF0YVN0YXRpYyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbXBvbmVudDogUmVuYW1lQm94Q29tcG9uZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggLSA1MCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgLi4ub2JqLnBhcnQ/LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWRpdFRleHQoZSwgb2JqKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuT1VURkxPVzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbGlja05ld05vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLm1lcmdlKG9iaiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Nb3ZlOiBzZWxmLmRyYWdOZXdOb2RlLCAvLyBkZWZpbmVkIGJlbG93LCB0byBzdXBwb3J0IGRyYWdnaW5nIGZyb20gdGhlIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZHJhZ0RhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuQUNUSU9OX1JJR0hUX01FTlVfR1JPVVAuREFUQV9CT1hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1fJHttb21lbnQoKS52YWx1ZU9mKCl9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmFibGU6IHNlbGYucGxhbnRTYXR1cyA9PT0gQVRPX0VQbGFudFR5cGUuQkFTSUNfUExBTlQgPyBmYWxzZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc05vdEFsbG93Q29ubmVjdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBsYW50U2F0dXMgPT09IEFUT19FUGxhbnRUeXBlLkJBU0lDX1BMQU5UID8gdHJ1ZSA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlTm9kZShlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuQ0hBTkdFX0lDT046XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuQ2hhbmdlSWNvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBvYmoucGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uQXRvRGVmYXVsdEdvanNFZGl0b3IuQUNUSU9OU1thY3Rpb25dLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgJ0J1dHRvbkJvcmRlci5zdHJva2VXaWR0aCc6IDAsXG4gICAgICAgICAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdpc05vdERyYWdOZXdOb2RlJywgKHgpID0+ICF4KSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2lzTm90RGVsZXRlJywgKHgpID0+ICF4KSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2lzTm90QWN0aW9uJywgKHgpID0+ICF4KSxcbiAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgdGV4dDogJ1xcdWU0ODknLFxuICAgICAgICAgICAgICAgIGZvbnQ6ICcyMHB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2xpY2tOZXdOb2RlKGUsIGJ1dHRvbikge1xuICAgICAgICBjb25zdCBkYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgICAgIGUuZGlhZ3JhbS5zdGFydFRyYW5zYWN0aW9uKCdDcmVhdGUgTm9kZSBhbmQgTGluaycpO1xuICAgICAgICBjb25zdCBmcm9tbm9kZSA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuXG4gICAgICAgIC8vIHRoaXMuY3JlYXRlTm9kZUFuZExpbmsoYnV0dG9uLl9kcmFnRGF0YSwgZnJvbW5vZGUpO1xuICAgICAgICBjb25zdCBkcmFnRGF0YSA9IGJ1dHRvbi5fZHJhZ0RhdGE7XG4gICAgICAgIGNvbnN0IGRpYWdyYW0gPSBmcm9tbm9kZS5kaWFncmFtO1xuICAgICAgICBjb25zdCBtb2RlbCA9IGRpYWdyYW0ubW9kZWw7XG4gICAgICAgIGNvbnN0IG5vZGVkYXRhID0geyAuLi5tb2RlbC5jb3B5Tm9kZURhdGEoZHJhZ0RhdGEpLCBrZXk6IFV0aWxzU2VydmljZS5nZW5lcmF0ZVVVSUQoKSB9O1xuICAgICAgICBtb2RlbC5hZGROb2RlRGF0YSh7XG4gICAgICAgICAgICAuLi5ub2RlZGF0YSxcbiAgICAgICAgICAgIGlzRWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICBzaG9ydGVuZWROdW1iZXI6IDAsXG4gICAgICAgICAgICBpc0Zvcm1hdDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhQ29sbGVjdGlvbk1ldGhvZDogQXRvR29qc0VkaXRvck1vZGVsLkRBVEFfQ09MTEVDVElPTl9NRVRIT0QuTUFOVUFMLFxuICAgICAgICAgICAgY29sb3I6IEF0b0dvanNFZGl0b3JNb2RlbC5DT0xPUl9DT0xMRUNUSU9OX01FVEhPRFtBdG9Hb2pzRWRpdG9yTW9kZWwuREFUQV9DT0xMRUNUSU9OX01FVEhPRC5NQU5VQUxdLmNvbG9yLFxuICAgICAgICAgICAgZ3JvdXA6IGZyb21ub2RlPy5vYj8uZ3JvdXAsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG5ld25vZGUgPSBkaWFncmFtLmZpbmROb2RlRm9yRGF0YShub2RlZGF0YSk7XG5cbiAgICAgICAgY29uc3QgbGlua2RhdGEgPSBtb2RlbC5jb3B5TGlua0RhdGEoe30pO1xuICAgICAgICBtb2RlbC5zZXRGcm9tS2V5Rm9yTGlua0RhdGEobGlua2RhdGEsIG1vZGVsLmdldEtleUZvck5vZGVEYXRhKGZyb21ub2RlLmRhdGEpKTtcbiAgICAgICAgbW9kZWwuc2V0VG9LZXlGb3JMaW5rRGF0YShsaW5rZGF0YSwgbW9kZWwuZ2V0S2V5Rm9yTm9kZURhdGEobmV3bm9kZS5kYXRhKSk7XG4gICAgICAgIG1vZGVsLmFkZExpbmtEYXRhKGxpbmtkYXRhKTtcbiAgICAgICAgZGlhZ3JhbS5zZWxlY3QobmV3bm9kZSk7XG4gICAgICAgIGlmIChub2RlZGF0YT8ubW92YWJsZSAhPT0gdW5kZWZpbmVkICYmIG5vZGVkYXRhPy5tb3ZhYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBuZXdub2RlLm1vdmFibGUgPSBub2RlZGF0YT8ubW92YWJsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIG5ld25vZGUubG9jYXRpb24gPSBuZXcgZ28uUG9pbnQoXG4gICAgICAgICAgICBmcm9tbm9kZS5sb2NhdGlvbi54ICsgMTYwLFxuICAgICAgICAgICAgZnJvbW5vZGUubG9jYXRpb24ueSArIHRoaXMuZmluZExvY1lGcm9tbm9kZShmcm9tbm9kZSkgKiBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCxcbiAgICAgICAgKTtcbiAgICAgICAgZS5kaWFncmFtLmNvbW1pdFRyYW5zYWN0aW9uKCdDcmVhdGUgTm9kZSBhbmQgTGluaycpO1xuICAgIH1cblxuICAgIGZpbmRMb2NZRnJvbW5vZGUoZnJvbW5vZGUpIHtcbiAgICAgICAgLy8gRmluZCBsb2NhdGlvbiBhdXRvIHJpZ2h0XG4gICAgICAgIGNvbnN0IGxvY1lGcm9tbm9kZSA9IGZyb21ub2RlLmRhdGE/LmxvYz8uc3BsaXQoJyAnKT8uWzFdO1xuICAgICAgICBjb25zdCBsb2NZQWxyZWFkeUV4aXN0OiBhbnkgPSBbXTtcbiAgICAgICAgZnJvbW5vZGUuZmluZExpbmtzT3V0T2YoKS5lYWNoKGZ1bmN0aW9uIChsaW5rKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXROb2RlID0gbGluay50b05vZGU7XG4gICAgICAgICAgICBpZiAodGFyZ2V0Tm9kZSkge1xuICAgICAgICAgICAgICAgIGxvY1lBbHJlYWR5RXhpc3QucHVzaCh0YXJnZXROb2RlLmRhdGE/LmxvYz8uc3BsaXQoJyAnKT8uWzFdIC0gbG9jWUZyb21ub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICB3aGlsZSAodGhpcy5pc0VtcHR5WUxvYyhsb2NZQWxyZWFkeUV4aXN0LCBpKSA9PT0gbnVsbCAmJiBpIDwgMTAwKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNFbXB0eVlMb2MobG9jWUFscmVhZHlFeGlzdCwgaSk7XG4gICAgfVxuXG4gICAgaXNFbXB0eVlMb2MobG9jWUFscmVhZHlFeGlzdCwgaSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhXy5zb21lKFxuICAgICAgICAgICAgICAgIGxvY1lBbHJlYWR5RXhpc3QsXG4gICAgICAgICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAgICAgICAgIHggPCBpICogQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgKyBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAvIDIgJiZcbiAgICAgICAgICAgICAgICAgICAgeCA+IGkgKiBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAtIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUIC8gMixcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhXy5zb21lKFxuICAgICAgICAgICAgICAgIGxvY1lBbHJlYWR5RXhpc3QsXG4gICAgICAgICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICAgICAgICAgIHggPCAtaSAqIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUICsgQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLyAyICYmXG4gICAgICAgICAgICAgICAgICAgIHggPiAtaSAqIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUIC0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLyAyLFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiAtaTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjcmVhdGVOZXdOb2RlKG5ld25vZGUpIHtcbiAgICAgICAgdGhpcy5hZGRUZW1wbGF0ZShuZXdub2RlKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uc3RhcnRUcmFuc2FjdGlvbignYWRkIGdyb3VwIG5vZGUnKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubW9kZWwuYWRkTm9kZURhdGEobmV3bm9kZSk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLmNvbW1pdFRyYW5zYWN0aW9uKCdhZGQgZ3JvdXAgbm9kZScpO1xuICAgIH1cblxuICAgIGRlbGV0ZU5vZGUoZSkge1xuICAgICAgICBlLmRpYWdyYW0uc3RhcnRUcmFuc2FjdGlvbignRGVsZXRlIGdyb3VwIG5vZGUnKTtcbiAgICAgICAgZS5kaWFncmFtLnJlbW92ZVBhcnRzKGUuZGlhZ3JhbS5zZWxlY3Rpb24pO1xuICAgICAgICBlLmRpYWdyYW0uY29tbWl0VHJhbnNhY3Rpb24oJ0RlbGV0ZSBncm91cCBub2RlJyk7XG4gICAgfVxuXG4gICAgZGVsZXRlTm9kZU9uRGlhZ3JhbShlKSB7XG4gICAgICAgIGUuc3RhcnRUcmFuc2FjdGlvbignRGVsZXRlIGdyb3VwIG5vZGUnKTtcbiAgICAgICAgZS5yZW1vdmVQYXJ0cyhlLnNlbGVjdGlvbik7XG4gICAgICAgIGUuY29tbWl0VHJhbnNhY3Rpb24oJ0RlbGV0ZSBncm91cCBub2RlJyk7XG4gICAgfVxuXG4gICAgaW5zaWdodE5vZGUoZSkge31cblxuICAgIGRyYXdMaW5rKGUsIGJ1dHRvbikge1xuICAgICAgICBjb25zdCBub2RlID0gYnV0dG9uLnBhcnQuYWRvcm5lZFBhcnQ7XG4gICAgICAgIGNvbnN0IHRvb2wgPSBlLmRpYWdyYW0udG9vbE1hbmFnZXIubGlua2luZ1Rvb2w7XG4gICAgICAgIHRvb2wuc3RhcnRPYmplY3QgPSBub2RlLnBvcnQ7XG4gICAgICAgIGUuZGlhZ3JhbS5jdXJyZW50VG9vbCA9IHRvb2w7XG4gICAgICAgIHRvb2wuZG9BY3RpdmF0ZSgpO1xuICAgIH1cblxuICAgIG1ha2VQb3J0R3JvdXAobmFtZSwgYWxpZ24sIHNwb3QsIG91dHB1dCwgaW5wdXQpIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IGFsaWduLmVxdWFscyhnby5TcG90LlRvcCkgfHwgYWxpZ24uZXF1YWxzKGdvLlNwb3QuQm90dG9tKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAnIzkxOUNBNScsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogNDAsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBhbGlnbixcbiAgICAgICAgICAgICAgICBzdHJldGNoOiBob3Jpem9udGFsID8gZ28uR3JhcGhPYmplY3QuSG9yaXpvbnRhbCA6IGdvLkdyYXBoT2JqZWN0LlZlcnRpY2FsLFxuICAgICAgICAgICAgICAgIHBvcnRJZDogbmFtZSxcbiAgICAgICAgICAgICAgICBmcm9tU3BvdDogc3BvdCxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IG91dHB1dCxcbiAgICAgICAgICAgICAgICB0b1Nwb3Q6IHNwb3QsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogaW5wdXQsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQ2VudGVyLCAvLyB04bqtcCB0cnVuZyB2w6BvIHRydW5nIHTDom0gY+G7p2EgUGFuZWxcbiAgICAgICAgICAgICAgICAvLyBtb3VzZUVudGVyOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgLy8gICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIC8vICAgICA6IChlLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBjb25zdCB0ZXh0QmxvY2sgPSAocGFuZWwgYXMgYW55KT8uZmluZE9iamVjdCgndGV4dEJsb2NrJykgYXMgZ28uVGV4dEJsb2NrIHwgbnVsbDtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgaWYgKHRleHRCbG9jaykge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgLy8gJiYgb3V0cHV0XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICB0ZXh0QmxvY2sudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBjYXNlICdSJzoge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3JnYigyNDMgMTQ0IDE3MSknO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICdyZ2IoMTAzLDE1MSwyMDcpJztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICdyZ2IoMjQzIDE0NCAxNzEpJztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8gbW91c2VMZWF2ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgIC8vICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAvLyAgICAgOiAoZSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgY29uc3QgdGV4dEJsb2NrID0gKHBhbmVsIGFzIGFueSkuZmluZE9iamVjdCgndGV4dEJsb2NrJykgYXMgZ28uVGV4dEJsb2NrIHwgbnVsbDtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgaWYgKHRleHRCbG9jaykge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGV4dEJsb2NrLnZpc2libGUgPSBmYWxzZTsgLy8g4bqobiBUZXh0QmxvY2sga2hpIHLhu51pIGto4buPaSBQYW5lbFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgICAgICAgIC8vICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdFbGxpcHNlJywge1xuICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsIC8vIEJhY2tncm91bmQgY29sb3Igb2YgdGhlIGNpcmNsZVxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogJyM5MTlDQTUnLCAvLyBCb3JkZXIgY29sb3Igb2YgdGhlIGNpcmNsZVxuICAgICAgICAgICAgICAgIHdpZHRoOiA0MCwgLy8gTWF0Y2ggdGhlIHBhbmVsJ3Mgd2lkdGhcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDQwLCAvLyBNYXRjaCB0aGUgcGFuZWwncyBoZWlnaHRcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgLy8gICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgbmFtZTogJ3RleHRCbG9jaycsXG4gICAgICAgICAgICAvLyAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgIC8vICAgICAgICAgdGV4dDogJ1xcdWYwZGEnLCAvLyBNw6MgVW5pY29kZSB0xrDGoW5nIOG7qW5nIHbhu5tpIGZhLWNhcmV0LWxlZnRcbiAgICAgICAgICAgIC8vICAgICAgICAgZm9udDogJzkwMCAxMnB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgLy8gICAgICAgICBzdHJva2U6ICd3aGl0ZScsIC8vIMSQ4bq3dCBtw6B1IGNo4buvIHRow6BuaCBtw6B1IHRy4bqvbmdcbiAgICAgICAgICAgIC8vICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAvLyAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScsIChfKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYXNlICdCJzoge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkNyc7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYXNlICdMJzpcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNhc2UgJ1InOiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHVmMGRhJztcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdWYwZDcnO1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgfSksXG4gICAgICAgICAgICAvLyApLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIG1ha2VQb3J0KG5hbWUsIGFsaWduLCBzcG90LCBvdXRwdXQsIGlucHV0KSB7XG4gICAgICAgIC8vIGlmICh0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5KSB7XG4gICAgICAgIC8vICAgICByZXR1cm4ge307XG4gICAgICAgIC8vIH1cbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbCA9IGFsaWduLmVxdWFscyhnby5TcG90LlRvcCkgfHwgYWxpZ24uZXF1YWxzKGdvLlNwb3QuQm90dG9tKTtcbiAgICAgICAgLy8gY29uc3QgdmVydGljYWwgPSBhbGlnbi5lcXVhbHMoZ28uU3BvdC5MZWZ0KSB8fCBhbGlnbi5lcXVhbHMoZ28uU3BvdC5SaWdodCk7XG4gICAgICAgIC8vIHRoZSBwb3J0IGlzIGJhc2ljYWxseSBqdXN0IGEgdHJhbnNwYXJlbnQgcmVjdGFuZ2xlIHRoYXQgc3RyZXRjaGVzIGFsb25nIHRoZSBzaWRlIG9mIHRoZSBub2RlLFxuICAgICAgICAvLyBhbmQgYmVjb21lcyBjb2xvcmVkIHdoZW4gdGhlIG1vdXNlIHBhc3NlcyBvdmVyIGl0XG4gICAgICAgIHJldHVybiB0aGlzLiQoXG4gICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICB3aWR0aDogaG9yaXpvbnRhbCA/IE5hTiA6IDgsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAhaG9yaXpvbnRhbCA/IE5hTiA6IDgsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBhbGlnbixcbiAgICAgICAgICAgICAgICBzdHJldGNoOiBob3Jpem9udGFsID8gZ28uR3JhcGhPYmplY3QuSG9yaXpvbnRhbCA6IGdvLkdyYXBoT2JqZWN0LlZlcnRpY2FsLFxuICAgICAgICAgICAgICAgIHBvcnRJZDogbmFtZSxcbiAgICAgICAgICAgICAgICBmcm9tU3BvdDogc3BvdCxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IG91dHB1dCxcbiAgICAgICAgICAgICAgICB0b1Nwb3Q6IHNwb3QsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogaW5wdXQsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQ2VudGVyLCAvLyB04bqtcCB0cnVuZyB2w6BvIHRydW5nIHTDom0gY+G7p2EgUGFuZWxcbiAgICAgICAgICAgICAgICBtb3VzZUVudGVyOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IChlLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0QmxvY2sgPSAocGFuZWwgYXMgYW55KT8uZmluZE9iamVjdCgndGV4dEJsb2NrJykgYXMgZ28uVGV4dEJsb2NrIHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRCbG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJiYgb3V0cHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QmxvY2sudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3JnYigyNDMgMTQ0IDE3MSknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICdyZ2IoMTAzLDE1MSwyMDcpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICdyZ2IoMjQzIDE0NCAxNzEpJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgbW91c2VMZWF2ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiAoZSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGV4dEJsb2NrID0gKHBhbmVsIGFzIGFueSkuZmluZE9iamVjdCgndGV4dEJsb2NrJykgYXMgZ28uVGV4dEJsb2NrIHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRCbG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEJsb2NrLnZpc2libGUgPSBmYWxzZTsgLy8g4bqobiBUZXh0QmxvY2sga2hpIHLhu51pIGto4buPaSBQYW5lbFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhPy5pc05vdEFsbG93Q29ubmVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkYXRhPy5zZWxlY3RhYmxlID09PSBmYWxzZSAmJiAhZGF0YT8uaXNBbGxvd0Nvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF0YT8uZmxvd09mUGxhbnRDZWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhPy5mbG93T2ZQbGFudENlbGwgPT09IEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLklORkxPVyAmJiBuYW1lID09PSAnTCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhPy5mbG93T2ZQbGFudENlbGwgPT09IEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLk9VVEZMT1cgJiYgbmFtZSA9PT0gJ1InKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdCJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhZGF0YT8uaXNOb3RTZWxlY3RPdXRwdXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0wnOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWRhdGE/LmlzTm90U2VsZWN0SW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICd0ZXh0QmxvY2snLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6ICdcXHVmMGRhJywgLy8gTcOjIFVuaWNvZGUgdMawxqFuZyDhu6luZyB24bubaSBmYS1jYXJldC1sZWZ0XG4gICAgICAgICAgICAgICAgICAgIGZvbnQ6ICc5MDAgMTJweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLCAvLyDEkOG6t3QgbcOgdSBjaOG7ryB0aMOgbmggbcOgdSB0cuG6r25nXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnLCAoXykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnQic6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdWYwZDcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdSJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkYSc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHVmMGQ3JztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyByZXR1cm4gdGhpcy4kKGdvLlNoYXBlLCB7XG4gICAgICAgIC8vICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLCAvLyBjaGFuZ2VkIHRvIGEgY29sb3IgaW4gdGhlIG1vdXNlRW50ZXIgZXZlbnQgaGFuZGxlclxuICAgICAgICAvLyAgICAgc3Ryb2tlV2lkdGg6IDAsIC8vIG5vIHN0cm9rZVxuICAgICAgICAvLyAgICAgd2lkdGg6IGhvcml6b250YWwgPyBOYU4gOiA4LCAvLyBpZiBub3Qgc3RyZXRjaGluZyBob3Jpem9udGFsbHksIGp1c3QgOCB3aWRlXG4gICAgICAgIC8vICAgICBoZWlnaHQ6ICFob3Jpem9udGFsID8gTmFOIDogOCwgLy8gaWYgbm90IHN0cmV0Y2hpbmcgdmVydGljYWxseSwganVzdCA4IHRhbGxcbiAgICAgICAgLy8gICAgIGFsaWdubWVudDogYWxpZ24sIC8vIGFsaWduIHRoZSBwb3J0IG9uIHRoZSBtYWluIFNoYXBlXG4gICAgICAgIC8vICAgICBzdHJldGNoOiBob3Jpem9udGFsID8gZ28uR3JhcGhPYmplY3QuSG9yaXpvbnRhbCA6IGdvLkdyYXBoT2JqZWN0LlZlcnRpY2FsLFxuICAgICAgICAvLyAgICAgcG9ydElkOiBuYW1lLCAvLyBkZWNsYXJlIHRoaXMgb2JqZWN0IHRvIGJlIGEgXCJwb3J0XCJcbiAgICAgICAgLy8gICAgIGZyb21TcG90OiBzcG90LCAvLyBkZWNsYXJlIHdoZXJlIGxpbmtzIG1heSBjb25uZWN0IGF0IHRoaXMgcG9ydFxuICAgICAgICAvLyAgICAgZnJvbUxpbmthYmxlOiBvdXRwdXQsIC8vIGRlY2xhcmUgd2hldGhlciB0aGUgdXNlciBtYXkgZHJhdyBsaW5rcyBmcm9tIGhlcmVcbiAgICAgICAgLy8gICAgIHRvU3BvdDogc3BvdCwgLy8gZGVjbGFyZSB3aGVyZSBsaW5rcyBtYXkgY29ubmVjdCBhdCB0aGlzIHBvcnRcbiAgICAgICAgLy8gICAgIHRvTGlua2FibGU6IGlucHV0LCAvLyBkZWNsYXJlIHdoZXRoZXIgdGhlIHVzZXIgbWF5IGRyYXcgbGlua3MgdG8gaGVyZVxuICAgICAgICAvLyAgICAgY3Vyc29yOiAncG9pbnRlcicsIC8vIHNob3cgYSBkaWZmZXJlbnQgY3Vyc29yIHRvIGluZGljYXRlIHBvdGVudGlhbCBsaW5rIHBvaW50XG4gICAgICAgIC8vICAgICBtb3VzZUVudGVyOiAoZSwgcG9ydCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIC8vIHRoZSBQT1JUIGFyZ3VtZW50IHdpbGwgYmUgdGhpcyBTaGFwZVxuICAgICAgICAvLyAgICAgICAgIGlmICghZS5kaWFncmFtLmlzUmVhZE9ubHkgJiYgb3V0cHV0KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHBvcnQuZmlsbCA9ICdyZ2JhKDI1NSwwLDI1NSwwLjUpJ1xuICAgICAgICAvLyAgICAgICAgIH07XG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgICAgbW91c2VMZWF2ZTogKGUsIHBvcnQpID0+IHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gKHBvcnQuZmlsbCA9ICd0cmFuc3BhcmVudCcpO1xuICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgLy8gfSk7XG4gICAgfVxuXG4gICAgbWFrZUdyb3VwQmFzaWNDb21wb25lbnQoaWNvbiwgdGl0bGUsIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH0pIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Hcm91cCxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSksXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5MYXlvdXQpLFxuICAgICAgICAgICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIG1vdmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBkcmFnQ29tcHV0YXRpb246IChub2RlLCBwdCwgZ3JpZHB0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHB0LnggPVxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5yb3VuZChwdC54IC8gQXRvR29qc0VkaXRvck1vZGVsLkJBU0lDX0dSSURfU0laRV9XSURUSCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkJBU0lDX0dSSURfU0laRV9XSURUSDtcbiAgICAgICAgICAgICAgICAgICAgcHQueSA9XG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHB0LnkgLyBBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX0hFSUdIVCkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkJBU0lDX0dSSURfU0laRV9IRUlHSFQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwdDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX1dJRFRILCBBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX0hFSUdIVCksXG4gICAgICAgICAgICAgICAgbWluU2l6ZTogbmV3IGdvLlNpemUoMSwgMSksXG4gICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoMSwgMSksXG4gICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoMTAwLCAxMDApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIHRoaXMuJChnby5QbGFjZWhvbGRlciksXG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCkgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlRleHRCbG9jaywgdGl0bGUsIHtcbiAgICAgICAgICAgIC8vICAgICByb3c6IDAsXG4gICAgICAgICAgICAvLyAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgLy8gICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgLy8gICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAvLyAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgIC8vICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygndGV4dCcsICdrZXknKS5tYWtlVHdvV2F5KCksKSxcblxuICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgLy8gICAgICdUYWJsZScsXG4gICAgICAgICAgICAvLyAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wTGVmdCxcbiAgICAgICAgICAgIC8vICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIC0xMCwgLTEwKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCA1MCwgMCksXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgLy8gICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgLy8gICAgICAgICB9LFxuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNDAsIDQwKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgZGVmYXVsdEFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAyMCksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgdGl0bGUsIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDUsIDEwKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAzLCAzLCAxMCksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgNDApLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMDAwRDQyJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lIGEgdG9vbHRpcCBmb3IgZWFjaCBub2RlIHRoYXQgZGlzcGxheXMgdGhlIGNvbG9yIGFzIHRleHRcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgeyBtYXJnaW46IDQgfSwgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgKSwgLy8gZW5kIG9mIEFkb3JubWVudFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICApLFxuICAgICAgICAgICAgLy8gICAgICAgICApLFxuICAgICAgICAgICAgLy8gICAgICksXG4gICAgICAgICAgICAvLyApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUdyb3VwVGVtcGxhdGUoaWNvbiwgdGl0bGUsIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH0pIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Hcm91cCxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gbGF5b3V0OiB0aGlzLiQoZ28uRm9yY2VEaXJlY3RlZExheW91dCAsIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gICAgIGRpcmVjdGlvbjogMCxcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gICAgIHNldHNQb3J0U3BvdHM6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vICAgICAvLyB9KSxcblxuICAgICAgICAgICAgICAgIC8vIGxheW91dDogdGhpcy4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGRpcmVjdGlvbjogMCxcbiAgICAgICAgICAgICAgICAvLyAgICAgc2V0c1BvcnRTcG90czogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gfSksXG5cbiAgICAgICAgICAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5MYXlvdXQpLFxuXG4gICAgICAgICAgICAgICAgLy8gLy8gICAgIC8vIGFkb3JubWVudCB3aGVuIGEgZ3JvdXAgaXMgc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAvLyAvLyAgICAgLy8gc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAvLyAvLyAgICAgLy8gICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAvLyAvLyAgICAgLy8gICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAvLyAvLyAgICAgLy8gICAgIHRoaXMuJChnby5TaGFwZSwgJ1JlY3RhbmdsZScsIHsgZmlsbDogbnVsbCwgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsIHN0cm9rZVdpZHRoOiA4IH0pLFxuICAgICAgICAgICAgICAgIC8vIC8vICAgICAvLyAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyKSxcbiAgICAgICAgICAgICAgICAvLyAvLyAgICAgLy8gKSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdsYXlvdXQnLCAnbGF5b3V0JywgKHgpID0+XG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIHRoaXMuJChnby5Gb3JjZURpcmVjdGVkTGF5b3V0ICwge1xuICAgICAgICAgICAgLy8gICAgICAgICBkaXJlY3Rpb246IDAsXG4gICAgICAgICAgICAvLyAgICAgICAgIHNldHNQb3J0U3BvdHM6IGZhbHNlLFxuICAgICAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtaW5TaXplOiBuZXcgZ28uU2l6ZSg0MDAsIDQwMCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDYwLCAyMCwgMjAsIDIwKSB9KSxcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIC8vIHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgIC8vICAgICAnVGFibGUnLFxuICAgICAgICAgICAgLy8gICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcExlZnQsXG4gICAgICAgICAgICAvLyAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLCAtMTAsIC0xMCksXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgICAgICAgLy8gICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAvLyAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCA1LCAzKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAvLyAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgLy8gICAgICAgICBmb250OiAnbm9ybWFsIDhwdCBBcmlhbCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAvLyAgICAgfSksXG4gICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgLy8gICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgLy8gICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg0MCwgNDApLFxuICAgICAgICAgICAgLy8gICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAvLyAgICAgfSksXG4gICAgICAgICAgICAvLyAgICAgdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMywgMywgMyksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCA0MCksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBzdHJva2U6ICcjMDAwRDQyJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDhwdCBBcmlhbCcsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAvLyAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGRlZmluZSBhIHRvb2x0aXAgZm9yIGVhY2ggbm9kZSB0aGF0IGRpc3BsYXlzIHRoZSBjb2xvciBhcyB0ZXh0XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoJ1Rvb2xUaXAnLCB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7IG1hcmdpbjogNCB9LCBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykpKSwgLy8gZW5kIG9mIEFkb3JubWVudFxuICAgICAgICAgICAgLy8gICAgICAgICB9LFxuICAgICAgICAgICAgLy8gICAgICksXG4gICAgICAgICAgICAvLyAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAvLyApLFxuXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BMZWZ0LFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMCwgLTEwLCAtMTApLFxuICAgICAgICAgICAgICAgICAgICAvLyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDUwLCAwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg0MCwgNDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0QWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIDAsIDIwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgNSwgMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDMsIDMsIDEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCA0MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbmUgYSB0b29sdGlwIGZvciBlYWNoIG5vZGUgdGhhdCBkaXNwbGF5cyB0aGUgY29sb3IgYXMgdGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7IG1hcmdpbjogNCB9LCBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAvLyBlbmQgb2YgQWRvcm5tZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VJbWFnZVRlbXBsYXRlKCkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB6T3JkZXI6IDEsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5JTUFHRV9ST19XQVRFUl9UUkVBVE1FTlRfUEFUSCxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKDUwMCwgNTAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMzAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWFyZ2luJywgJ21hcmdpbicpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnd2lkdGgnLCAnd2lkdGgnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICdoZWlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NvdXJjZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnNvdXJjZSA/IGRhdGE/LnNvdXJjZSA6IEF0b0dvanNFZGl0b3JNb2RlbC5JTUFHRV9ST19XQVRFUl9UUkVBVE1FTlRfUEFUSDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklNQUdFX1RFTVBMQVRFLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlUGFyYW1UYWJsZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5QYXJ0LFxuICAgICAgICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgICAgICAgIC8vIHRoaXMuJChnby5TaGFwZSwgeyBmaWxsOiAnI0U2RjBGNycsIHN0cm9rZTogJyMwMDYzQTknLCBzdHJva2VXaWR0aDogMywgZ2VvbWV0cnlTdHJpbmc6ICdNIDUgMCBMIDk1IDAgUSAxMDAgMCAxMDAgNSBMIDEwMCA5NSBRIDEwMCAxMDAgOTUgMTAwIEwgNSAxMDAgUSAwIDEwMCAwIDk1IEwgMCA1IFEgMCAwIDUgMCcgIH0pLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHpPcmRlcjogMixcbiAgICAgICAgICAgICAgICAvLyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDIwMCksXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygncGFkZGluZycsICdwYWRkaW5nJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhPy52aXNpYmxlID09PSAnYm9vbGVhbicgPyBkYXRhPy52aXNpYmxlIDogdHJ1ZTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gSGVhZGVyXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluU2l6ZTogbmV3IGdvLlNpemUoMTUwLCAyNyksXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAtNiwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSkgPT4gISFkYXRhPy50aXRsZSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5TaGFwZSxcbiAgICAgICAgICAgICAgICAgICAgJ1JvdW5kZWRSZWN0YW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIxOiA1LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LkZpbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICcxNHB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICd0aXRsZScpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICAgICAgICdSZWN0YW5nbGUnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiA2LFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgLTYsIDApLFxuICAgICAgICAgICAgICAgICAgICBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5GaWxsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2ZpbGwnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmNvbG9yO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmNvbG9yO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiAhIWRhdGE/LnRpdGxlKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uU2hhcGUsXG4gICAgICAgICAgICAgICAgICAgICdSb3VuZGVkUmVjdGFuZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgeyBmaWxsOiAnI0U2RjBGNycsIHN0cm9rZTogJyMwMDYzQTknLCBzdHJva2VXaWR0aDogNCwgcGFyYW1ldGVyMTogNSB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICdiZ0NvbG9yJyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnYm9yZGVyVGFibGUnKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBkZWZhdWx0cyBmb3IgYWxsIHJvd3MgYW5kIGNvbHVtbnM6XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEuNSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2U6ICcjMDA2MkE5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5TZXBhcmF0b3JTdHJva2U6ICcjMDA2MkE5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTZXBhcmF0b3JQYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDUsIDEwLCA1LCAxMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdkZWZhdWx0Um93U2VwYXJhdG9yU3Ryb2tlJywgJ2JvcmRlclRhYmxlJyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdkZWZhdWx0Q29sdW1uU2VwYXJhdG9yU3Ryb2tlJywgJ2JvcmRlclRhYmxlJyksXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgJ1RhYmxlUm93JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHsgcm93OiAwIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAncm93IDEgY29sIDEnLCB7IGNvbHVtbjogMCwgbWFyZ2luOiAyIH0pLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgJ3JvdyAxIGNvbCAyJywgeyBjb2x1bW46IDEsIG1hcmdpbjogMiB9KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAnVGFibGVSb3cnLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgeyByb3c6IDEgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdyb3cgMiBjb2wgMScsIHsgY29sdW1uOiAwLCBtYXJnaW46IDIgfSksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAncm93IDIgY29sIDInLCB7IGNvbHVtbjogMSwgbWFyZ2luOiAyIH0pLFxuICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnaXRlbUFycmF5JywgJ2RhdGFUYWJsZScpLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVtVGVtcGxhdGU6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBuZXcgZ28uQmluZGluZygncm93JywgJ2luZGV4Um93JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICdoZWlnaHQnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIEFSUk9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoMjAsIDQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NvdXJjZScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIC8vIHBhbmVsLnBhcnQ/LmRhdGE/LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gZGF0YT8uaXNDcmVhdGVkID8gcGFuZWw/LiRwIDogQVJST1dfR1JBWTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1UZW1wbGF0ZTogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZVJvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGNvbHVtbjogMCwgbWFyZ2luOiAyLCB0ZXh0QWxpZ246ICdsZWZ0JywgYWxpZ25tZW50OiBnby5TcG90LkxlZnQgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNlcGFyYXRvclBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5GaWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWluU2l6ZScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBwYW5lbC5wYXJ0Py5kYXRhPy5taW5TaXplVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGdvLlNpemUocGFuZWwucGFydD8uZGF0YT8ubWluU2l6ZVZhbHVlPy53aWR0aCwgTmFOKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISF0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGAke2RhdGE/LnRhZ05hbWUgfHwgJyd9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9JHtkYXRhPy52YWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgJiYgZGF0YT8udGFnTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFkYXRhPy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWtQYXJhbU9mVGFibGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmFtVGFibGU6IG9iai5wYW5lbC5wYXJ0LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5vYmoucGFuZWwucGFydC5kYXRhPy5kYXRhVGFibGVbb2JqPy5wYW5lbC5yb3ddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEuY29sb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtYXhTaXplJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBnby5TaXplKGRhdGE/Lm1heFNpemVWYWx1ZSB8fCAxOTAsIDE0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogSUNPTlNfQkFTRTY0W1widWYwNDRcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnRvb2xUaXBBY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEpID0+ICEhZGF0YT8udG9vbFRpcEFjdGlvbiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5wYW5lbC5wYXJ0LmRhdGE/LmRhdGFUYWJsZVtvYmo/LnBhbmVsLnJvd10/LmlzRWRpdGFibGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWtQYXJhbU9mVGFibGUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmFtVGFibGU6IG9iai5wYW5lbC5wYXJ0LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5vYmoucGFuZWwucGFydC5kYXRhPy5kYXRhVGFibGVbb2JqPy5wYW5lbC5yb3ddLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ29wYWNpdHknLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmlzRWRpdGFibGUgPT09IGZhbHNlID8gMC42IDogMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJylcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUEFSQU1fVEFCTEUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VNYXNzQmFsYW5jZSgpIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5QYXJ0LFxuICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgLy8gU2V0IGRlZmF1bHRzIGZvciBhbGwgcm93cyBhbmQgY29sdW1uczpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDQsXG4gICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDQ1MCwgMzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAndG9vbHRpcCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJ01hc3MgQmFsYW5jZTonLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZm9udCcsICdmb250JyksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkFMSVpBUklOLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZm9udCcsICdmb250JyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2UnLCAnY29sb3JWYWx1ZScpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLk1BU1NfQkFMQU5DRSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUdyb3VwUk9QbGFudFRlbXBsYXRlKGljb24sIHRpdGxlLCBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9KSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoTmFOLCA2MDApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdUYWJsZScsXG5cbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjRkNGQ0ZEJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDE1LCAwLCAwLCAwKSB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgUk9fTElORV9ESVJUWSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0RmxvdyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1RhYmxlJywge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDAsIDE4MyksXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAvLyBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5WZXJ0aWNhbCxcbiAgICAgICAgICAgICAgICBwb3J0SWQ6ICdJbmZsb3cnLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIC8vIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAxNTApLFxuICAgICAgICAgICAgICAgIGZyb21TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgdG9TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1RhYmxlJywge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDk3MCwgMzE1KSxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgcG9ydElkOiAnT3V0Rmxvd19DbGVhbicsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgIHRvU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCA0ODAsIDUyNSksXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgNDc1LCA1NTIpLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIHBvcnRJZDogJ091dEZsb3dfRGlydHknLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnYWxpZ25tZW50JywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB4Py5pc1ZpZXdHZW5lcmFsICYmIHg/Lmhhc091dEZsb3dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IGdvLlNwb3QoMCwgMCwgNDc1LCA1NTIpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBnby5TcG90KDAsIDAsIDQ4MCwgNTI1KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VHcm91cEJvaWxlclRlbXBsYXRlKGljb24sIHRpdGxlLCBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9KSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKE5hTiwgNjAwKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTSEFQRV9LRVknLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAnI0ZDRkNGRCcsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgICAgICAgICAgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApIH0sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1Nwb3QnLCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMC41LCAwLCA4MyksXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBwb3J0SWQ6ICdJbmZsb3cnLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIGZyb21TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgdG9TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMSwgMSwgLTIxNSwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgIE9VVEZMT1dfTElORV9ESVJUWSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4Py5pc1ZpZXdHZW5lcmFsICYmIHg/Lmhhc091dEZsb3cgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Cb3R0b21MZWZ0LFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIHBvcnRJZDogJ091dEZsb3cnLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlR3JvdXBDb29saW5nVG93ZXJUZW1wbGF0ZShpY29uLCB0aXRsZSwgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiA4MCwgaDogODAgfSkge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkdyb3VwLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAzMCwgMCwgMCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NIQVBFX0tFWScsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjRkNGQ0ZEJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdUYWJsZScsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCA1MzMpLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICBwb3J0SWQ6ICdJbmZsb3cnLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgIGZyb21TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgdG9TcG90OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMC41LCAxLCAyMywgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBpY3R1cmUsXG4gICAgICAgICAgICAgICAgICAgIE9VVEZMT1dfTElORV9ESVJUWSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDEwLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAyMCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4Py5pc1ZpZXdHZW5lcmFsICYmIHg/Lmhhc091dEZsb3cgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMTgpLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgIHBvcnRJZDogJ091dEZsb3cnLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIGdyb3VwUGxhbnRDZWxsVGVtcGxhdGUoaWNvbiwgdGl0bGUsIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH0pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgICAgICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSksXG4gICAgICAgICAgICAgICAgLy8gaXNTdWJHcmFwaEV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIC8vIGxheWVyTmFtZTogJ0ZvcmVncm91bmQnLFxuICAgICAgICAgICAgICAgIC8vIHdhc1N1YkdyYXBoRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGF2b2lkYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gcmVzaXphYmxlOiB0cnVlLFxuXG4gICAgICAgICAgICAgICAgLy8gcmVzaXphYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyB3aWR0aDogZGF0YT8ub2I/Lm1pbldpdGggPz8gNTAsXG4gICAgICAgICAgICAgICAgLy8gaGVpZ2h0OiA1MDAsXG5cbiAgICAgICAgICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IHRydWUsIC8vIGVuc3VyZSB0aGUgZ3JvdXAgaXMgYWx3YXlzIGV4cGFuZGVkXG4gICAgICAgICAgICAgICAgLy8gY29tcHV0ZXNCb3VuZHNBZnRlckRyYWc6IHRydWUsXG4gICAgICAgICAgICAgICAgLy8gaGFuZGxlc0RyYWdEcm9wRm9yTWVtYmVyczogdHJ1ZSwgLy8gaGFuZGxlIGRyYWctYW5kLWRyb3AgZXZlbnRzIGZvciBpdHMgbWVtYmVyIG5vZGVzXG5cbiAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZSg1MDAsIDUwMCksXG4gICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoNTAwLCA1MDApLFxuXG4gICAgICAgICAgICAgICAgLy8gaXNTdWJHcmFwaEV4cGFuZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIGxheWVyTmFtZTogRElBR1JBTS5MQVlFUlMuQkFDS0dST1VORCxcblxuICAgICAgICAgICAgICAgIC8vIG1vdXNlRHJvcDogZnVuY3Rpb24gKGUsIGdycCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyBkaXNhbGxvdyBkcm9wcGluZyBhbnl0aGluZyBvbnRvIGFuIEFkb3JubWVudFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoZ3JwIGluc3RhbmNlb2YgZ28uQWRvcm5tZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAvLyBkcmFnQ29tcHV0YXRpb246IGZ1bmN0aW9uIChub2RlLCBwdCwgZ3JpZFB0KSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBncnAgPSBub2RlLmNvbnRhaW5pbmdHcm91cDtcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGdycCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgbGV0IHJlY3QgPSBncnAuYWN0dWFsQm91bmRzO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcHQueCA9IE1hdGgubWF4KHJlY3QubGVmdCwgTWF0aC5taW4ocHQueCwgcmVjdC5yaWdodCkpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcHQueSA9IE1hdGgubWF4KHJlY3QudG9wLCBNYXRoLm1pbihwdC55LCByZWN0LmJvdHRvbSkpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBwdDtcbiAgICAgICAgICAgICAgICAvLyB9LFxuXG4gICAgICAgICAgICAgICAgLy8gZHJvcENvbXB1dGF0aW9uOiBmdW5jdGlvbiAobm9kZSwgcHQsIGdyaWRQdCkge1xuICAgICAgICAgICAgICAgIC8vICAgICBsZXQgZ3JwID0gbm9kZS5jb250YWluaW5nR3JvdXA7XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmIChncnAgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGxldCByZWN0ID0gZ3JwLmFjdHVhbEJvdW5kcztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHB0LnggPSBNYXRoLm1heChyZWN0LmxlZnQsIE1hdGgubWluKHB0LngsIHJlY3QucmlnaHQpKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHB0LnkgPSBNYXRoLm1heChyZWN0LnRvcCwgTWF0aC5taW4ocHQueSwgcmVjdC5ib3R0b20pKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gcHQ7XG4gICAgICAgICAgICAgICAgLy8gfSxcblxuICAgICAgICAgICAgICAgIC8vIGRyYWdDb21wdXRhdGlvbjogZnVuY3Rpb24gKHBhcnQsIHB0LCBncmlkcHQpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gR2V0IHRoZSBjdXJyZW50IGdyb3VwJ3MgYWN0dWFsIGJvdW5kc1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBncnAgPSBwYXJ0LmNvbnRhaW5pbmdHcm91cDtcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGdycCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgYm5kcyA9IGdycC5hY3R1YWxCb3VuZHM7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBsb2MgPSBwYXJ0LmxvY2F0aW9uO1xuXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAvLyBTZWUgaWYgdGhlIHBhcnQncyBuZXcgbG9jYXRpb24gd291bGQgYmUgb3V0IG9mIGJvdW5kc1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgbmV3eCA9IE1hdGgubWF4KGJuZHMueCwgTWF0aC5taW4ocHQueCwgYm5kcy5yaWdodCAtIHBhcnQuYWN0dWFsQm91bmRzLndpZHRoIC8gMikpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgY29uc3QgbmV3eSA9IE1hdGgubWF4KGJuZHMueSwgTWF0aC5taW4ocHQueSwgYm5kcy5ib3R0b20gLSBwYXJ0LmFjdHVhbEJvdW5kcy5oZWlnaHQgLyAyKSk7XG5cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIC8vIE1vZGlmeSB0aGUgcmVzdWx0IHBvaW50IHRvIGtlZXAgdGhlIFBhcnQgaW5zaWRlIHRoZSBHcm91cFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcmV0dXJuIG5ldyBnby5Qb2ludChuZXd4LCBuZXd5KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gcHQ7XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubXlEaWFncmFtPy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG1vdXNlRHJhZ0VudGVyOiAoZSwgIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgLy8gbW91c2VEcm9wOiAoZSwgIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAgICAgLy8gbW91c2VFbnRlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgLy8gICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdCh7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gbGV0IHNoYXBlID0gKG5vZGUgYXMgYW55KT8uZmluZE9iamVjdCgnU0hBUEVfS0VZJyk7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIGlmIChzaGFwZSkge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyAgICAgc2hhcGUuc3Ryb2tlID0gJ2JsdWUnO1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyB9XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAvLyBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gbGV0IHNoYXBlID0gKG5vZGUgYXMgYW55KT8uZmluZE9iamVjdCgnU0hBUEVfS0VZJyk7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIGlmIChzaGFwZSkge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyAgICAgc2hhcGUuc3Ryb2tlID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLldISVRFO1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyB9XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbGF5b3V0JywgJycsIGZ1bmN0aW9uIChkYXRhLCBub2RlKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGE/LmxheW91dFZhbHVlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MQVlPVVRfRURJVE9SLkFVVE9cbiAgICAgICAgICAgICAgICAvLyAgICAgPyBzZWxmLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHsgZGlyZWN0aW9uOiAwIH0pXG4gICAgICAgICAgICAgICAgLy8gICAgIDogbm9kZT8ubGF5b3V0O1xuICAgICAgICAgICAgICAgIGlmIChkYXRhPy5sYXlvdXRWYWx1ZSAhPT0gZGF0YT8ubGF5b3V0VmFsdWVDbG9uZSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhLmxheW91dFZhbHVlQ2xvbmUgPSBkYXRhPy5sYXlvdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmxheW91dFZhbHVlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MQVlPVVRfRURJVE9SLkFVVE9cbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLiQoZ28uTGF5b3V0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbm9kZT8ubGF5b3V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyA6IHNlbGYuJChnby5MYXlvdXQpO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBkYXRhPy5sYXlvdXQ7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGE/LnByZXZpb3VzTGF5b3V0IHx8IHNlbGYuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSk7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHNlbGYuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdncmlkJywgJ2dyaWQnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCd3aWR0aCcsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiBkYXRhPy5vYj8ubWluV2l0aCA/PyA1MDtcbiAgICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21pblNpemUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IGdvLlNpemUoZGF0YT8ub2I/Lm1pbldpdGggPz8gNTAsIGRhdGE/Lm9iPy5taW5IZWlnaHQgPz8gNTApOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICAgICAgICB9KS5vZk9iamVjdCgpLFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ3dpZHRoJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIGRhdGE/Lm9iPy5taW5XaXRoID8/IDUwOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICAgICAgICAvLyB9KS5vZk9iamVjdCgpLFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgLy8gICAgIHJldHVybiBkYXRhPy5vYj8ubWluSGVpZ2h0ID8/IDUwOyAvLyBDdXN0b21pemUgbWluU2l6ZSBiYXNlZCBvbiBkYXRhXG4gICAgICAgICAgICAvLyB9KS5vZk9iamVjdCgpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnaXNTdWJHcmFwaEV4cGFuZGVkJywgJ2V4cGFuZGVkJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbjpuZXcgZ28uTWFyZ2luKDAsIDUwLCAwLCA1MCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCkgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIG5vZGUubWVtYmVyVmFsaWRhdGlvbiA9IGZ1bmN0aW9uIChub2RlLCBncm91cCkge1xuICAgICAgICAvLyAgICAgaWYgKCFncm91cCkgcmV0dXJuIHRydWU7IC8vIGFsbG93IHVuZ3JvdXBpbmdcbiAgICAgICAgLy8gICAgIGNvbnN0IGdyb3VwQm91bmRzID0gZ3JvdXAuYWN0dWFsQm91bmRzO1xuICAgICAgICAvLyAgICAgY29uc3Qgbm9kZUJvdW5kcyA9IG5vZGUuYWN0dWFsQm91bmRzO1xuICAgICAgICAvLyAgICAgcmV0dXJuIGdyb3VwQm91bmRzLmNvbnRhaW5zUmVjdChub2RlQm91bmRzKTtcbiAgICAgICAgLy8gfTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIGdyb3VwUENJbnB1dE9yT3V0VGVtcGxhdGUoaWNvbiwgdGl0bGUsIHBhZGRpbmc6IGdvLk1hcmdpbikge1xuICAgICAgICAvLyBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgLy8gICAgIGdvLkdyb3VwLFxuICAgICAgICAvLyAgICAgJ1Nwb3QnLFxuICAgICAgICAvLyAgICAge1xuICAgICAgICAvLyAgICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgICAgIC8vICAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgIC8vICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyAgICAgLy8ge1xuICAgICAgICAvLyAgICAgLy8gICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKDUwMCwgNTAwKSxcbiAgICAgICAgLy8gICAgIC8vICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gICAgIC8vICAgICBhcmlhUmVhZE9ubHk6IHRydWUsXG4gICAgICAgIC8vICAgICAvLyB9LFxuICAgICAgICAvLyAgICAgdGhpcy4kKFxuICAgICAgICAvLyAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAvLyAgICAgICAgICdBdXRvJyxcbiAgICAgICAgLy8gICAgICAgICB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgLy8gICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAvLyAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAvLyAgICAgICAgICAgICAvLyBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgIC8vICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLldISVRFLFxuICAgICAgICAvLyAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgLy8gICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgIC8vICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgIC8vICAgICAgICAgfSksXG4gICAgICAgIC8vICAgICApLFxuICAgICAgICAvLyApO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkdyb3VwLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KSxcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBhdm9pZGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIGlzU3ViR3JhcGhFeHBhbmRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gaXNTdWJHcmFwaEV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyBsYXllck5hbWU6ICdGb3JlZ3JvdW5kJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBwYWRkaW5nID8/IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5XSElURSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQUxJWkFSSU4sXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlR3JvdXBab25lVGVtcGxhdGUoXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDE0LCBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Hcm91cCxcbiAgICAgICAgICAgICdWZXJ0aWNhbCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uR3JpZExheW91dCwgeyB3cmFwcGluZ0NvbHVtbjogMSwgc3BhY2luZzogbmV3IGdvLlNpemUoMCwgMCkgfSksXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dCbHVyOiA2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93T2Zmc2V0OiBuZXcgZ28uUG9pbnQoMCwgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogJyMwMDAwMDAyOScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7IGZpbGw6IG51bGwsIHN0cm9rZTogJ2RvZGdlcmJsdWUnLCBzdHJva2VXaWR0aDogNCB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiAzIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCdXR0b24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RyYWdEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IHNlbGYuYWRkSXRlbU9uR3JvdXBab25lLCAvLyBkZWZpbmVkIGJlbG93LCB0byBzdXBwb3J0IGEgY2xpY2sgb24gdGhlIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnXFx1ZjA1NScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICcyMHB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJjMmMyYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFVEFJTFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgLy8gRWRpdCBUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBjbGljazogc2VsZi5lZGl0VGV4dEdyb3VwWm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ0J1dHRvbkJvcmRlci5zdHJva2VXaWR0aCc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICdCdXR0b25Cb3JkZXIuZmlsbCc6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGV4dDogJ1xcdWUxYmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBmb250OiAnMjBweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHN0cm9rZTogJyMyYzJjMmMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAvLyBPcGVuIERldGFpbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICdCdXR0b24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgc2VsZi5vbk9wZW5EZXRhaWwuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGV4dDogJ1xcdWU0OWEnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBmb250OiAnMjBweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIXRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICA/IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAnQnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIGFjdGlvbk1vdmU6IHNlbGYuZHJhZ05ld05vZGUsIC8vIGRlZmluZWQgYmVsb3csIHRvIHN1cHBvcnQgZHJhZ2dpbmcgZnJvbSB0aGUgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIF9kcmFnRGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgdHlwZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIG5hbWU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBjb2xvcjogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkJMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIGNsaWNrOiBzZWxmLmNsaWNrTmV3Tm9kZSwgLy8gZGVmaW5lZCBiZWxvdywgdG8gc3VwcG9ydCBhIGNsaWNrIG9uIHRoZSBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgJ0J1dHRvbkJvcmRlci5zdHJva2VXaWR0aCc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICdCdXR0b25Cb3JkZXIuZmlsbCc6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgdGV4dDogJ1xcdWUxNTcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBmb250OiAnMjBweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHN0cm9rZTogJyMyYzJjMmMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIDoge30sXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAnQnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNsaWNrOiBzZWxmLmRlbGV0ZU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICdCdXR0b25Cb3JkZXIuc3Ryb2tlV2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRleHQ6ICdcXHVmMmVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBOYU4pLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3AsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDE3LCAxMCwgMTYsIDEwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oNSwgMCwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMjUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLk5JR0hUX1JJREVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDE2cHggQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuWk9ORSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZVpvbmVJdGVtVGVtcGxhdGUoXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDEyLCBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMiB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAvLyB7XG4gICAgICAgICAgICAvLyAgICAgbW91c2VIb3ZlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAvLyAgICAgICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG5vZGU6IG5vZGVcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KG51bGwpO1xuICAgICAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy5pc1Nob3dOb2RlSW5mbyA/IHNlbGYub25DbGlja0luZm9CdXR0b24uZW1pdCh7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIG5vZGU6IG5vZGVcbiAgICAgICAgICAgIC8vICAgICAgICAgfSkgOiBudWxsO1xuICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBzaXplLncsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogc2l6ZS5oLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBmaWxsOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElHSFRfQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnVmVydGljYWwnLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMCwgNSwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTJweCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5OSUdIVF9SSURFUixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ25hbWUnLCAoeCkgPT4gISF4KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMTAsIDAsIDEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJzEycHggc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLk5JR0hUX1JJREVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGlsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMTAwLCAxNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWVJdGVtJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWVJdGVtJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ25hbWVJdGVtJywgKHgpID0+ICEheCksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1LCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICcxMnB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5DRVJVTEVBTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICc8ICcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2RhdGEnLCAoeCkgPT4gdHlwZW9mIHg/LnF1YW50aXR5ID09PSAnbnVtYmVyJyksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1LCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICcxMnB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5DRVJVTEVBTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICdkYXRhJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB4Py5xdWFudGl0eSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQ6IGFueSA9IFV0aWxzU2VydmljZS5jb252ZXJ0UHJlZml4ZXNEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4Py5xdWFudGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXQ6IHg/LnVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkLnNob3J0ZW5lZE51bWJlciArICcgJyArIGZvcm1hdHRlZC51bml0UHJlZml4ZXMgKyB4Py51bml0ID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2RhdGEnLCAoeCkgPT4gdHlwZW9mIHg/LnF1YW50aXR5ID09PSAnbnVtYmVyJyksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJzEycHggc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkNFUlVMRUFOLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJyA+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2RhdGEnLCAoeCkgPT4gdHlwZW9mIHg/LnF1YW50aXR5ID09PSAnbnVtYmVyJyksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5aT05FX0VORVJHWV9JVEVNLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlU3BlY2lhbFRlbXBsYXRlKFxuICAgICAgICBpY29uLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSwgaDogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUgfSxcbiAgICApIHtcbiAgICAgICAgbGV0IG5vZGU6IGFueSA9IG51bGw7XG4gICAgICAgIHN3aXRjaCAodGl0bGUpIHtcbiAgICAgICAgICAgIGNhc2UgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlNQRUNJQUxfUFJPQ0VTUzpcbiAgICAgICAgICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGZyb21TcG90OiBnby5TcG90LlJpZ2h0LCAgLy8gY29taW5nIG91dCBmcm9tIG1pZGRsZS1yaWdodFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdG9TcG90OiBnby5TcG90LkxlZnRcbiAgICAgICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ0NpcmNsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMyRDNCNzcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUFJPQ0VTUywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDYwLCA2MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLjUsIDgsIDApLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvLyBmb3VyIG5hbWVkIHBvcnRzLCBvbmUgb24gZWFjaCBzaWRlOlxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TUEVDSUFMX1NUT1JBR0U6XG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJEM0I3NycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TVE9SQUdFLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDEwLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5TaXplOiBuZXcgZ28uU2l6ZSg0MCwgNDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNTAsIDUwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NvdXJjZScsICdpY29uJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDEsIDAuNSwgLTgsIDApLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gZm91ciBuYW1lZCBwb3J0cywgb25lIG9uIGVhY2ggc2lkZTpcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1BFQ0lBTF9TVE9SRTpcbiAgICAgICAgICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdDaXJjbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgJ1N0b3JlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDYwLCA2MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1BFQ0lBTF9ESVNDSEFSR0U6XG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJEM0I3NycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdEaXNjaGFyZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDEwLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNjAsIDYwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TUEVDSUFMX09USEVSOlxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ0NpcmNsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMyRDNCNzcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnT3RoZXInLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDEwLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNjAsIDYwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhcnRBbmltYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGRpYWdyYW0gPSB0aGlzLm15RGlhZ3JhbTtcbiAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICBkaWFncmFtLmxpbmtzLmVhY2goKGxpbmspID0+IHtcbiAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkc2tpcHMgPSBkaWFncmFtLnNraXBzVW5kb01hbmFnZXI7XG4gICAgICAgICAgICAgICAgZGlhZ3JhbS5za2lwc1VuZG9NYW5hZ2VyID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgIGRpYWdyYW0ubGlua3MuZWFjaCgobGluaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaGFwZSA9IGxpbmsuZmluZE9iamVjdCgnUElQRScpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISFzaGFwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3Qgb2ZmID0gc2hhcGU/LnN0cm9rZURhc2hPZmZzZXQgLSAzO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2ZmID0gc2hhcGU/LnN0cm9rZURhc2hPZmZzZXQgLSA5O1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0ZSAobW92ZSkgdGhlIHN0cm9rZSBkYXNoXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFwZS5zdHJva2VEYXNoT2Zmc2V0ID0gb2ZmIDw9IDAgPyA2MCA6IG9mZjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRpYWdyYW0uc2tpcHNVbmRvTWFuYWdlciA9IG9sZHNraXBzO1xuICAgICAgICAgICAgfSwgNjAwKTtcbiAgICAgICAgICAgIC8vIDYwXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgfVxuXG4gICAgc3RvcEFuaW1hdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hbmltYXRpb25JbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b0RhdGFVUkwodXJsLCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlYWRlci5yZXN1bHQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKHhoci5yZXNwb25zZSk7XG4gICAgICAgIH07XG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwpO1xuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2Jsb2InO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH1cblxuICAgIGdldEJhc2U2NERpYWdyYW1XaXRoRW1wdHlEYXRhKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgLy8gVGVzdFxuICAgICAgICAvLyBjb25zdCBuZXdXaW5kb3cgPSB3aW5kb3cub3BlbignJywgJ25ld1dpbmRvdycpO1xuICAgICAgICAvLyBpZiAoIW5ld1dpbmRvdykge1xuICAgICAgICAvLyAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIGNvbnN0IG5ld0RvY3VtZW50ID0gbmV3V2luZG93Py5kb2N1bWVudDtcbiAgICAgICAgaWYgKCF0aGlzLm15RGlhZ3JhbT8ubW9kZWw/Lm5vZGVEYXRhQXJyYXk/Lmxlbmd0aCAmJiAhdGhpcy5teURpYWdyYW0/Lm1vZGVsPy5saW5rRGF0YUFycmF5Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN2ZyA9IHRoaXMubXlEaWFncmFtLm1ha2VTdmcoe1xuICAgICAgICAgICAgc2NhbGU6IHRoaXMuZGVmYXVsdFNjYWxlWm9vbVRvRml0LFxuICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoMTIwMCwgTmFOKSxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICAgICAgICBwYWRkaW5nOiAyMCxcbiAgICAgICAgICAgIGVsZW1lbnRGaW5pc2hlZDogZnVuY3Rpb24gKGdyYXBoT2JqZWN0LCBzdmdFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgc3ZnRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2NsaXAtcGF0aCcpO1xuICAgICAgICAgICAgICAgIC8vIFJlcGxhY2UgSW1hZ2UgVVJMIHRvIGJhc2U2NCAtPiBGb3Igc2hvd2luZyBQaWN0dXJlIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBpZiAoZ3JhcGhPYmplY3QgaW5zdGFuY2VvZiBnby5QaWN0dXJlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYudG9EYXRhVVJMKHN2Z0VsZW1lbnQuaHJlZi5iYXNlVmFsLCBmdW5jdGlvbiAoZGF0YVVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBkYXRhVXJsKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE1ha2UgVGV4dCBOb2RlIFNoYXBlIEJvcmRlclxuICAgICAgICAgICAgICAgIGlmIChncmFwaE9iamVjdD8ubmFtZSA9PT0gJ3RleHROb2RlU2hhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN2Z0VsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHJva2UnLCAncmdiYSg2NCwgMTgxLCAyMDYsIDAuNiknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRW1wdHkgVmFsdWVcbiAgICAgICAgICAgICAgICBpZiAoZ3JhcGhPYmplY3Q/Lm5hbWUgPT09ICd0ZXh0QmxvY2tWYWx1ZScgfHwgZ3JhcGhPYmplY3Q/Lm5hbWUgPT09ICd0ZXh0QmxvY2tVbml0UHJlZml4ZXMnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN2Z0VsZW1lbnQudGV4dENvbnRlbnQgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN2Z0VsZW1lbnQuY2xpcFBhdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ZnRWxlbWVudC5jbGlwUGF0aCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoc3ZnKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2Z1N0ciA9IG5ldyBYTUxTZXJpYWxpemVyKCkuc2VyaWFsaXplVG9TdHJpbmcoc3ZnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIFRlc3RcbiAgICAgICAgICAgICAgICAgICAgLy8gbmV3RG9jdW1lbnQ/LmJvZHk/LmFwcGVuZENoaWxkKHN2Zyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0U3ZnID0gYGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsJHt3aW5kb3cuYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3ZnU3RyKSkpfWA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltZyA9IG5ldyBJbWFnZSgpO1xuICAgICAgICAgICAgICAgICAgICBpbWcuc3JjID0gYmFzZTY0U3ZnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGNhbnZhcyBjb250ZXh0IGZvciBkcmF3aW5nIG9uIGNhbnZhc1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgICAgICAgICAgICAgIGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdmdXaWR0aCA9IGltZy53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2Z0hlaWdodCA9IGltZy5oZWlnaHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHN2Z1dpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHN2Z0hlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmRyYXdJbWFnZShpbWcsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJhc2U2NFBORyA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVtaXRJbWFnZVRvcG9sb2d5KGJhc2U2NFBORy5yZXBsYWNlKCdkYXRhOmltYWdlL2pwZWc7YmFzZTY0LCcsICcnKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbWl0SW1hZ2VUb3BvbG9neShiYXNlNjQpIHtcbiAgICAgICAgdGhpcy5jYWxsYmFja0ltYWdlVG9wb2xvZ3kuZW1pdChiYXNlNjQpO1xuICAgIH1cblxuICAgIG9wZW5BY3Rpb25NZW51KCkge1xuICAgICAgICAvLyBXaGVuIHRoaXMgbm9kZSBpcyBjbGlja2VkLCBhZGp1c3QgdGhlIG1lbnUgcG9zaXRpb25cbiAgICAgICAgY29uc3QgbW91c2VQdCA9IHRoaXMubXlEaWFncmFtLmxhc3RJbnB1dC52aWV3UG9pbnQ7XG5cbiAgICAgICAgLy8gLy8gV2hlbiB0aGlzIG5vZGUgaXMgY2xpY2tlZCwgZGlzcGxheSB0aGUgZHJvcGRvd24gbWVudVxuICAgICAgICBjb25zdCBtZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hY3Rpb25NZW51SWQpO1xuICAgICAgICBpZiAobWVudSkge1xuICAgICAgICAgICAgbWVudS5zdHlsZS5kaXNwbGF5ID0gJyc7XG4gICAgICAgICAgICBtZW51LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgICAgIG1lbnUuc3R5bGUubGVmdCA9IG1vdXNlUHQueCArICdweCc7XG4gICAgICAgICAgICBtZW51LnN0eWxlLnRvcCA9IG1vdXNlUHQueSArICdweCc7XG5cbiAgICAgICAgICAgIHRoaXMubWVudVRyaWdnZXIub3Blbk1lbnUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuc3Vic2NyaWJlQWxsKCkge1xuICAgICAgICBpZiAodGhpcy5fc3Vic2NyaXB0aW9uTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uTGlzdC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbkxpc3QgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIFxuICAgICAgYWRkU3Vic2NyaWJlcyguLi5zdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSkge1xuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2goKGVsKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25MaXN0LmFkZChlbCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBdG9EZWZhdWx0R29qc0VkaXRvciB7XG4gICAgZXhwb3J0IGVudW0gRU5VTV9BQ1RJT05TIHtcbiAgICAgICAgREVUQUlMUyA9ICdPcGVuIGRldGFpbHMgJiB3aXphcmQnLFxuICAgICAgICBPTkxZX0RFVEFJTFMgPSAnT3BlbiBkZXRhaWxzJyxcbiAgICAgICAgUkVOQU1FID0gJ1JlbmFtZSB0aGlzIGJveCcsXG4gICAgICAgIE9VVEZMT1cgPSAnQ3JlYXRlIGFuIG91dGZsb3cnLFxuICAgICAgICBERUxFVEUgPSAnRGVsZXRlJyxcbiAgICAgICAgSU5TSUdIVCA9ICdJbnNpZ2h0IHRhZyBtYXBwaW5nJyxcbiAgICAgICAgREFUQV9NQVBQSU5HID0gJ0RhdGEgTWFwcGluZycsXG4gICAgICAgIE1PUkUgPSAnTW9yZScsXG4gICAgICAgIEZMT1dfREVUQUlMUyA9ICdGbG93IGRldGFpbHMnLFxuICAgICAgICBBU1NFVF9QQVJBTUVURVJTID0gJ0Fzc2V0IHBhcmFtZXRlcnMnLFxuICAgICAgICBDSEFOR0VfSUNPTiA9ICdDaGFuZ2UgaWNvbicsXG4gICAgfVxuXG4gICAgZXhwb3J0IGNvbnN0IEFDVElPTlM6IGFueSA9IHtcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5ERVRBSUxTXToge1xuICAgICAgICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkRFVEFJTFMsXG4gICAgICAgICAgICBpY29uQ2xhc3NOYW1lOiAnZmFyIGZhLW1lbW8tY2lyY2xlLWluZm8nLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTXToge1xuICAgICAgICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMUyxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtYXJyb3ctcHJvZ3Jlc3MnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSU106IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5BU1NFVF9QQVJBTUVURVJTLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1ib3gtYXJjaGl2ZScsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5PTkxZX0RFVEFJTFNdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuT05MWV9ERVRBSUxTLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1tZW1vLWNpcmNsZS1pbmZvJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgICBbRU5VTV9BQ1RJT05TLlJFTkFNRV06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICBpY29uQ2xhc3NOYW1lOiAnZmFyIGZhLWlucHV0LXRleHQnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuT1VURkxPV106IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1kaWFncmFtLW5lc3RlZCcsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5ERUxFVEVdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhbCBmYS10cmFzaC1jYW4nLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuSU5TSUdIVF06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5JTlNJR0hULFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS10YWcnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuREFUQV9NQVBQSU5HXToge1xuICAgICAgICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkRBVEFfTUFQUElORyxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtdGFnJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgICBbRU5VTV9BQ1RJT05TLk1PUkVdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuTU9SRSxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYWwgZmEtbWVtby1jaXJjbGUtaW5mbycsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTl06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTixcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtaW1hZ2UnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBESVNUQU5DRV8yX09VVFBVVCA9IDYwO1xufVxuIl19
|
3212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1nb2pzLWVkaXRvci5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2F0by13YXRlci1saWIvc3JjL2xpYi9tb2RlbHMvZGVmYXVsdC1nb2pzLWVkaXRvci5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMzQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUM7QUFDdkIsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMvRCxPQUFPLEVBQUcsdUJBQXVCLEVBQUUseUJBQXlCLEVBQ3hELE9BQU8sRUFDUCxZQUFZLEVBQ1osUUFBUSxHQUFHLE1BQU0sMEJBQTBCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTzdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdDQUFnQyxDQUFDOztBQU45RCxNQUFNLFVBQVUsR0FBRyxrQ0FBa0MsQ0FBQztBQUN0RCxNQUFNLEtBQUssR0FBRyxnQ0FBZ0MsQ0FBQztBQUMvQyxNQUFNLFVBQVUsR0FBRyxxQ0FBcUMsQ0FBQztBQUN6RCxNQUFNLGFBQWEsR0FBRyx3Q0FBd0MsQ0FBQztBQUMvRCxNQUFNLGtCQUFr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RGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdG9Hb2pzRWRpdG9yTW9kZWwgfSBmcm9tICcuL2dvanMtZWRpdG9yLm1vZGVsJztcbmltcG9ydCAqIGFzIGdvIGZyb20gJ2dvanMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IEdPX0xJQ0VOU0VfS0VZIH0gZnJvbSAnLi4vY29uc3RhbnRzL2tleS5jb25zdCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy91dGlscy91dGlscy5zZXJ2aWNlJztcbmltcG9ydCB7ICBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTiwgQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRSxcbiAgICBOT19EQVRBLFxuICAgIFRFWFRfVU5LTk9XTixcbiAgICBWQUxVRV9OQSwgfSBmcm9tICcuLi9jb25zdGFudHMvdmFsdWUuY29uc3QnO1xuaW1wb3J0IHsgQVRPX0VQbGFudFR5cGUgfSBmcm9tICcuLi9jb25zdGFudHMvcGxhbnQuY29uc3RhbnQnO1xuXG5jb25zdCBJQ09OX0FMRVJUID0gJy9hc3NldHMvaW1hZ2VzL2ljb25zL1N0YXRpb24uc3ZnJztcbmNvbnN0IEFSUk9XID0gJy9hc3NldHMvaW1hZ2VzL2ljb25zL2Fycm93LnN2Zyc7XG5jb25zdCBBUlJPV19HUkFZID0gJy9hc3NldHMvaW1hZ2VzL2ljb25zL2Fycm93LWdyYXkuc3ZnJztcbmNvbnN0IFJPX0xJTkVfRElSVFkgPSAnL2Fzc2V0cy9pbWFnZXMvaWNvbnMvcm9fbGluZV9kaXJ0eS5zdmcnO1xuY29uc3QgT1VURkxPV19MSU5FX0RJUlRZID0gJy9hc3NldHMvaW1hZ2VzL2ljb25zL291dGZsb3dfbGluZV9kaXJ0eS5wbmcnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJQ09OU19CQVNFNjQgfSBmcm9tICcuLi9jb25zdGFudHMvaWNvbi1iYXNlNjQuY29uc3QnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBBdG9EZWZhdWx0R29qc0VkaXRvciBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgQFZpZXdDaGlsZCgnbWVudVRyaWdnZXInKSBtZW51VHJpZ2dlcjogYW55O1xuICAgIEBJbnB1dCgpIGxpbmtWYWxpZGF0aW9uOiAoXG4gICAgICAgIGZyb21Ob2RlOiBnby5Ob2RlLFxuICAgICAgICBmcm9tUG9ydDogZ28uR3JhcGhPYmplY3QsXG4gICAgICAgIHRvTm9kZTogZ28uTm9kZSxcbiAgICAgICAgdG9Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICAgICAgbGluazogZ28uTGluayxcbiAgICApID0+IGJvb2xlYW47XG5cbiAgICBhY3Rpb25zOiBhbnlbXSA9IFtdO1xuICAgIGFjdGlvbk1lbnVJZDogc3RyaW5nID0gJ2FjdGlvbk1lbnVJZCc7XG5cbiAgICBteURpYWdyYW1EaXY6IGFueSA9IHRoaXMuY29uc3RydWN0b3IubmFtZSArICctJyArIG1vbWVudCgpLnZhbHVlT2YoKTtcbiAgICBteURpYWdyYW06IGFueTtcbiAgICAkID0gZ28uR3JhcGhPYmplY3QubWFrZTtcbiAgICBhbmltYXRpb25JbnRlcnZhbDogYW55O1xuICAgIGRlZmF1bHRTY2FsZVpvb21Ub0ZpdD86IG51bWJlcjtcblxuICAgIHByaXZhdGUgX2luaXRpYWxPcHRpb25zOiBhbnkgPSB7XG4gICAgICAgICd0b29sTWFuYWdlci5ob3ZlckRlbGF5JzogMjAwLFxuICAgICAgICAvLyAnZHJhZ2dpbmdUb29sLmlzRW5hYmxlZCc6IGZhbHNlLFxuICAgICAgICAvLyBpbml0aWFsQXV0b1NjYWxlOiBnby5EaWFncmFtLlVuaWZvcm1Ub0ZpbGwsXG4gICAgICAgIC8vIGF1dG9TY3JvbGxSZWdpb246IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LFxuICAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSksXG4gICAgICAgIGluaXRpYWxDb250ZW50QWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgaW5pdGlhbEF1dG9TY2FsZTogZ28uRGlhZ3JhbS5Vbmlmb3JtLFxuICAgICAgICAvLyBjb250ZW50QWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgLy8gdGhpcy4kKGdvLkZvcmNlRGlyZWN0ZWRMYXlvdXQpLFxuICAgICAgICAndW5kb01hbmFnZXIuaXNFbmFibGVkJzogdHJ1ZSwgLy8gZW5hYmxlIHVuZG8gJiByZWRvXG4gICAgICAgIC8vIFwiYW5pbWF0aW9uTWFuYWdlci5pc0luaXRpYWxcIjogZmFsc2UsXG4gICAgICAgIC8vIFwiYW5pbWF0aW9uTWFuYWdlci5pc0VuYWJsZWRcIjogZmFsc2UsXG4gICAgICAgIC8vIFwiZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkXCI6IHRydWVcbiAgICAgICAgZHJhZ1NlbGVjdGluZ1Rvb2w6IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkRyYWdTZWxlY3RpbmdUb29sLFxuICAgICAgICAgICAgeyBpc1BhcnRpYWxJbmNsdXNpb246IHRydWUsIGRlbGF5OiA1MCB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJveDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYXJ0LCAvLyByZXBsYWNlIHRoZSBtYWdlbnRhIGJveCB3aXRoIGEgcmVkIG9uZVxuICAgICAgICAgICAgICAgICAgICB7IGxheWVyTmFtZTogJ1Rvb2wnLCBzZWxlY3RhYmxlOiBmYWxzZSB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTSEFQRScsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAncmdiYSgyNTUsMCwwLDApJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyNFOTVGNDcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgICAnbGlua2luZ1Rvb2wubGlua1ZhbGlkYXRpb24nOiB0aGlzLmNoZWNrTGlua0NvbmRpdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAnZHJhZ2dpbmdUb29sLmRvTW91c2VNb3ZlJzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgLy8gZG8gdGhlIHN0YW5kYXJkIGJlaGF2aW9yIGJ5IGNhbGxpbmcgdGhlIHN1cGVyIG1ldGhvZFxuICAgICAgICAgICAgZ28uRHJhZ2dpbmdUb29sLnByb3RvdHlwZS5kb01vdXNlTW92ZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgLy8gaWYgZHJhZ2dpbmctb3V0IGZyb20gdGhlIGRpYWdyYW0gaXMgbm90IGFsbG93ZWQsIGFuZFxuICAgICAgICAgICAgLy8gaWYgbW91c2UgaXMgb3V0c2lkZSBvZiB2aWV3cG9ydFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICF0aGlzLmRpYWdyYW0uYWxsb3dEcmFnT3V0ICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuZGlhZ3JhbS52aWV3cG9ydEJvdW5kcy5jb250YWluc1BvaW50KHRoaXMuZGlhZ3JhbS5sYXN0SW5wdXQuZG9jdW1lbnRQb2ludClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5lbnN1cmVCb3VuZHMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2cCA9IHRoaXMuZGlhZ3JhbS5sYXN0SW5wdXQudmlld1BvaW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGRwID0gdGhpcy5kaWFncmFtLnBvc2l0aW9uLmNvcHkoKTtcbiAgICAgICAgICAgICAgICBpZiAodnAueCA8IDApIGRwLnggLT0gMTA7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodnAueCA+IDApIGRwLnggKz0gMTA7XG4gICAgICAgICAgICAgICAgaWYgKHZwLnkgPCAwKSBkcC55IC09IDEwO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZwLnkgPiAwKSBkcC55ICs9IDEwO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5wb3NpdGlvbiA9IGRwOyAvLyBzY3JvbGwgaW4gdGhlIGRpcmVjdGlvbiBvZiB0aGUgbW91c2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gTGF5b3V0Q29tcGxldGVkOiAoKSA9PiB7XG4gICAgICAgIC8vICAgICB0aGlzLm15RGlhZ3JhbS56b29tVG9GaXQoKTtcbiAgICAgICAgLy8gICAgIHRoaXMuZGVmYXVsdFNjYWxlWm9vbVRvRml0ID0gdGhpcy5teURpYWdyYW0uc2NhbGU7XG4gICAgICAgIC8vICAgICBpZiAoIXRoaXMuaW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSkge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHNpemVNYXJnaW4gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMTU7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5teURpYWdyYW0ucGFkZGluZyA9IG5ldyBnby5NYXJnaW4oc2l6ZU1hcmdpbik7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgfTtcblxuICAgIGNoZWNrTGlua0NvbmRpdGlvbihcbiAgICAgICAgZnJvbU5vZGU6IGdvLk5vZGUsXG4gICAgICAgIGZyb21Qb3J0OiBnby5HcmFwaE9iamVjdCxcbiAgICAgICAgdG9Ob2RlOiBnby5Ob2RlLFxuICAgICAgICB0b1BvcnQ6IGdvLkdyYXBoT2JqZWN0LFxuICAgICAgICBsaW5rOiBnby5MaW5rLFxuICAgICk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5saW5rVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlua1ZhbGlkYXRpb24oZnJvbU5vZGUsIGZyb21Qb3J0LCB0b05vZGUsIHRvUG9ydCwgbGluayk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7IC8vIE3hurdjIMSR4buLbmggY2hvIHRyxrDhu51uZyBo4bujcCBraMO0bmcgY8OzIGjDoG0gbGlua1ZhbGlkYXRpb24gxJHGsOG7o2MgdHJ1eeG7gW4gdsOgb1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBpbml0aWFsT3B0aW9ucyh2OiBhbnkpIHtcbiAgICAgICAgdGhpcy5faW5pdGlhbE9wdGlvbnMgPSBfLm1lcmdlKHRoaXMuX2luaXRpYWxPcHRpb25zLCB2KTtcbiAgICAgICAgLy8gXy5leHRlbmQodiwgdGhpcy5faW5pdGlhbE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldCBpbml0aWFsT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRpYWxPcHRpb25zO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2VkaXRvcjogQXRvR29qc0VkaXRvck1vZGVsO1xuICAgIEBJbnB1dCgpIHNldCBlZGl0b3IodjogQXRvR29qc0VkaXRvck1vZGVsKSB7XG4gICAgICAgIHRoaXMuX2VkaXRvciA9IHY7XG4gICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluaXREaWFncmFtKCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IGVkaXRvcigpOiBBdG9Hb2pzRWRpdG9yTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGlzU2hvd05vZGVJbmZvOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgcGxhbnRTYXR1czogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2VsUmVmOiBFbGVtZW50UmVmLFxuICAgICkge1xuICAgICAgICBnby5EaWFncmFtLmxpY2Vuc2VLZXkgPSBHT19MSUNFTlNFX0tFWTtcbiAgICB9XG5cbiAgICBAT3V0cHV0KCkgb25Nb2RlbENoYW5nZUxpc3RlbmVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uQ2xpY2tJbmZvQnV0dG9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbk9wZW5XaXphcmQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uT3BlbkRldGFpbDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25PcGVuQXNzZXRQYXJhbWV0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uT3Blbkluc2lnaHRNYXBwaW5nOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkhvdmVySW5mb0J1dHRvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Ib3ZlckFsZXJ0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkRvdWJsZUNsaWNrTm9kZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25PcGVuQ2hhbmdlSWNvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICAvLyBDbGljayBjb21wb25lbnRcbiAgICBAT3V0cHV0KCkgb25DbGlja0NvbXBvZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBjYWxsYmFja0ltYWdlVG9wb2xvZ3k6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvLyBDbGljayBwYXJhbSBvbiBQYXJhbVRhYmxlXG4gICAgQE91dHB1dCgpIG9uQ2xpa1BhcmFtT2ZUYWJsZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8vIERlbGV0ZSBOb2RlXG4gICAgQE91dHB1dCgpIG9uRGVsZXRlTm9kZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25VbmRvOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIC8vIFJlbmFtZVxuICAgIEBPdXRwdXQoKSBvblJlbmFtZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIGlzQWRkZWRNb2RlbENoYW5nZWRMaXN0ZW5lcnM6IGJvb2xlYW47XG4gICAgY29tbWl0dGVkVHJhbnNhY3Rpb25TdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gICAgLy8gQWRkU3ViIGFuZCBVblN1YlxuICAgIF9zdWJzY3JpcHRpb25MaXN0OiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUFsbCgpO1xuICAgICAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICAgICAgLy8gdGhpcy5teURpYWdyYW0/LmNsZWFyKCk7XG4gICAgICAgIGlmICghIXRoaXMubXlEaWFncmFtPy5kaXYpIHtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmRpdiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubXlEaWFncmFtKSB7XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm15RGlhZ3JhbSAhPSBudWxsICYmIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuY2xlYXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLm15RGlhZ3JhbSAhPSBudWxsICYmIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm15RGlhZ3JhbSAhPSBudWxsICYmIHRoaXMubXlEaWFncmFtLmxpbmtUZW1wbGF0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5teURpYWdyYW0ubGlua1RlbXBsYXRlTWFwLnRvQXJyYXkoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmxpbmtUZW1wbGF0ZU1hcC5yZW1vdmUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLm15RGlhZ3JhbSA9IG51bGw7XG4gICAgfVxuXG4gICAgYWRkT3JSZW1vdmVDb21wb2VudFRlbXBsYXRlKCkge1xuICAgICAgICAvLyBBZGQgTm9kZSBhbmQgTm9kZSBHcm91cFxuICAgICAgICBfLmZvckVhY2godGhpcy5lZGl0b3IuZGF0YT8ubm9kZURhdGFBcnJheSwgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkVGVtcGxhdGUobm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZW1vdmUgTm9kZSBhbmQgTm9kZSBHcm91cFxuICAgICAgICBfLmZvckVhY2godGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwPy5IYiwgKHRlbXApID0+IHtcbiAgICAgICAgICAgIGlmICh0ZW1wPy5rZXkgJiYgIXRoaXMuZWRpdG9yLmRhdGE/Lm5vZGVEYXRhQXJyYXk/LnNvbWUoKG5vZGUpID0+IG5vZGU/LnR5cGUgPT09IHRlbXA/LmtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAucmVtb3ZlKHRlbXA/LmtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBfLmZvckVhY2godGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcD8uSGIsICh0ZW1wKSA9PiB7XG4gICAgICAgICAgICBpZiAodGVtcD8ua2V5ICYmICF0aGlzLmVkaXRvci5kYXRhPy5ub2RlRGF0YUFycmF5Py5zb21lKChub2RlKSA9PiBub2RlPy50eXBlID09PSB0ZW1wPy5rZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5yZW1vdmUodGVtcD8ua2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYWRkVGVtcGxhdGUobm9kZSkge1xuICAgICAgICB0aGlzLmFkZE5vZGVUZW1wbGF0ZShub2RlKTtcbiAgICAgICAgdGhpcy5hZGRHcm91cFRlbXBsYXRlKG5vZGUpO1xuICAgIH1cblxuICAgIGFkZEdyb3VwVGVtcGxhdGUobm9kZSkge1xuICAgICAgICBpZiAodGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcD8uSGI/Lltub2RlPy50eXBlXSB8fCAhbm9kZT8uaXNHcm91cCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEdyb3VwXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUk9fV0FURVJfVFJFQVRNRU5UKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VHcm91cFJPUGxhbnRUZW1wbGF0ZShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJPSUxFUikge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBCb2lsZXJUZW1wbGF0ZShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkNPT0xJTkdfVE9XRVIpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwQ29vbGluZ1Rvd2VyVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5aT05FKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VHcm91cFpvbmVUZW1wbGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QTEFOVF9DRUxMICYmIG5vZGU/LmlzR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBQbGFudENlbGxUZW1wbGF0ZShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QTEFOVF9DRUxMX0lOUFVUX0dST1VQKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwUENJbnB1dE9yT3V0VGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICAgICAgbmV3IGdvLk1hcmdpbigwLCA1MCwgMCwgMCksXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUExBTlRfQ0VMTF9PVVRQVVRfR1JPVVApIHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBQQ0lucHV0T3JPdXRUZW1wbGF0ZShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbixcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDUwKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5HUk9VUF9CQVNJQ19DT01QT05FTlQpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwQmFzaWNDb21wb25lbnQoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYWRkTm9kZVRlbXBsYXRlKG5vZGUpIHtcbiAgICAgICAgaWYgKHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcD8uSGJbbm9kZT8udHlwZV0gfHwgbm9kZT8uaXNHcm91cCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vdCBHcm91cFxuICAgICAgICAvLyBDb21wb25lbnQgV2F0ZXIgTm9ybWFsXG4gICAgICAgIGlmIChBdG9Hb2pzRWRpdG9yTW9kZWwuVFlQRV9URU1QTEFURV9XQVRFUl9OT1JNQUw/LmluY2x1ZGVzKG5vZGU/LnR5cGUpICYmICFub2RlPy5pc0dyb3VwKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VFbnRpdHlUZW1wbGF0ZShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbiA/PyAnJyxcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSA/PyAnJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ29tcG9uZW50IFdhdGVyIFdpdGhkcmF3IE9yIERpc2NoYXJnZVxuICAgICAgICBpZiAoQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfV0FURVJfV0lUSERSQVdfT1JfRElTQ0hBUkdFPy5pbmNsdWRlcyhub2RlPy50eXBlKSAmJiAhbm9kZT8uaXNHcm91cCkge1xuICAgICAgICAgICAgdGhpcy5tYWtlRW50aXR5V2l0aGRyYXdPckRpc2NoYXJnZShcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0uaWNvbiA/PyAnJyxcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbbm9kZT8udHlwZV0ubmFtZSA/PyAnJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb21wb25lbnQgRW5lcmd5IE5vcm1hbFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfRUxFQ1RSSUNJVFk/LmluY2x1ZGVzKG5vZGU/LnR5cGUpIHx8XG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfTkFUVVJBTF9HQVM/LmluY2x1ZGVzKG5vZGU/LnR5cGUpIHx8XG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfVEVNUExBVEVfRlVFTD8uaW5jbHVkZXMobm9kZT8udHlwZSkgfHxcbiAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuVFlQRV9URU1QTEFURV9TVEVBTT8uaW5jbHVkZXMobm9kZT8udHlwZSkpICYmXG4gICAgICAgICAgICAhbm9kZT8uaXNHcm91cFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5pY29uID8/ICcnLFxuICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tub2RlPy50eXBlXS5uYW1lID8/ICcnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU1BR0VfVEVNUExBVEUpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZUltYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBBUkFNX1RBQkxFKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VQYXJhbVRhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5NQVNTX0JBTEFOQ0UpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZU1hc3NCYWxhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVGV4dCBOb2RlXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VUZXh0VGVtcGxhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBWYWx1ZSBOb2RlXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVkFMVUVfTk9ERSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlVmFsdWVOb2RlVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIE5vZGVcbiAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTVBUWSkge1xuICAgICAgICAgICAgdGhpcy5tYWtlRW1wdHlOb2RlVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFZhbHVlIExhYmVsXG4gICAgICAgIGlmIChub2RlPy50eXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVkFMVUVfTEFCRUwpIHtcbiAgICAgICAgICAgIHRoaXMubWFrZVZhbHVlTGFiZWxUZW1wbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgICAvLyBMYWJlbFxuICAgICAgICAgaWYgKG5vZGU/LnR5cGUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX0xBQkVMKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VUZXh0TGFiZWxUZW1wbGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFpvbmUgaXRlbVxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlpPTkVfRU5FUkdZX0lURU0pIHtcbiAgICAgICAgICAgIHRoaXMubWFrZVpvbmVJdGVtVGVtcGxhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkYXRhIGJveFxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkRBVEFfQk9YKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VEYXRhQm94VGVtcGxhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFNwZWNpYWwgdGVtcGxhdGVcbiAgICAgICAgaWYgKEF0b0dvanNFZGl0b3JNb2RlbC5UWVBFX1RFTVBMQVRFX1NQRUNJQUw/LmluY2x1ZGVzKG5vZGU/LnR5cGUpKSB7XG4gICAgICAgICAgICB0aGlzLm1ha2VTcGVjaWFsVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUGxhbnQgQ2VsbFxuICAgICAgICBpZiAobm9kZT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBMQU5UX0NFTEwgJiYgIW5vZGU/LmlzR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMucGxhbnRDZWxsVGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLmljb24sXG4gICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW25vZGU/LnR5cGVdLm5hbWUsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5pdERpYWdyYW0oKSB7XG4gICAgICAgIGlmICghIXRoaXMubXlEaWFncmFtPy5kaXYpIHtcbiAgICAgICAgICAgIC8vIHRoaXMubXlEaWFncmFtLmRpdiA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uZ3JpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtWydncmlkJ10gPSB0aGlzLmluaXRpYWxPcHRpb25zPy5ncmlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbVsnZ3JpZCddID0gdGhpcy4kKGdvLlBhbmVsLCAnR3JpZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LkxheW91dENvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmFkZERpYWdyYW1MaXN0ZW5lcignTGF5b3V0Q29tcGxldGVkJywgdGhpcy5pbml0aWFsT3B0aW9ucz8uTGF5b3V0Q29tcGxldGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5MaW5rUmVzaGFwZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5hZGREaWFncmFtTGlzdGVuZXIoJ0xpbmtSZXNoYXBlZCcsIHRoaXMuaW5pdGlhbE9wdGlvbnM/LkxpbmtSZXNoYXBlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uU2VsZWN0aW9uTW92ZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5hZGREaWFncmFtTGlzdGVuZXIoJ1NlbGVjdGlvbk1vdmVkJywgdGhpcy5pbml0aWFsT3B0aW9ucz8uU2VsZWN0aW9uTW92ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LkNoYW5nZWRTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5hZGREaWFncmFtTGlzdGVuZXIoJ0NoYW5nZWRTZWxlY3Rpb24nLCB0aGlzLmluaXRpYWxPcHRpb25zPy5DaGFuZ2VkU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmRyYWdTZWxlY3RpbmdUb29sID0gdGhpcy5pbml0aWFsT3B0aW9ucz8uZHJhZ1NlbGVjdGluZ1Rvb2w7XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2wuaXNHcmlkU25hcEVuYWJsZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmlzR3JpZFNuYXBFbmFibGVkJ10gPz8gZmFsc2U7XG4gICAgICAgICAgICBpZiAodGhpcy5teURpYWdyYW0udG9vbE1hbmFnZXIgJiYgdGhpcy5teURpYWdyYW0udG9vbE1hbmFnZXIuZHJhZ2dpbmdUb29sKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnZHJhZ2dpbmdUb29sLmdyaWRTbmFwQ2VsbFNpemUnXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2wuZ3JpZFNuYXBDZWxsU2l6ZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5ncmlkU25hcENlbGxTaXplJ107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmICh0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5pc0dyaWRTbmFwRW5hYmxlZCddKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIHRoaXMubXlEaWFncmFtLnRvb2xNYW5hZ2VyLmRyYWdnaW5nVG9vbC5pc0dyaWRTbmFwRW5hYmxlZCA9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmluaXRpYWxPcHRpb25zPy5bJ2RyYWdnaW5nVG9vbC5pc0dyaWRTbmFwRW5hYmxlZCddO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuZG9Nb3VzZU1vdmUnXSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2wuZG9Nb3VzZU1vdmUgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsT3B0aW9ucz8uWydkcmFnZ2luZ1Rvb2wuZG9Nb3VzZU1vdmUnXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbml0aWFsT3B0aW9ucz8uWydsaW5raW5nVG9vbC5saW5rVmFsaWRhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLnRvb2xNYW5hZ2VyLmxpbmtpbmdUb29sLmxpbmtWYWxpZGF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdGlhbE9wdGlvbnM/LlsnbGlua2luZ1Rvb2wubGlua1ZhbGlkYXRpb24nXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm15RGlhZ3JhbS5jb250ZW50QWxpZ25tZW50ID0gdGhpcy5pbml0aWFsT3B0aW9ucz8uY29udGVudEFsaWdubWVudCA/PyBnby5TcG90LkNlbnRlcjtcbiAgICAgICAgICAgIHRoaXMubXlEaWFncmFtLmxheW91dCA9IHRoaXMuaW5pdGlhbE9wdGlvbnM/LmxheW91dDtcbiAgICAgICAgICAgIC8vIHRoaXMubXlEaWFncmFtLm1pblZpZXdwb3J0Qm91bmRzID0gbmV3IGdvLlJlY3QoMCwgMCwgMTIwMCwgMTIwMCk7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmVkaXRvcj8uZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDb21wb2VudFRlbXBsYXRlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubW9kZWwgPSBnby5Nb2RlbC5mcm9tSnNvbih0aGlzLmVkaXRvci5kYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFuaW1hdGlvbkludGVydmFsKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuYW5pbWF0aW9uSW50ZXJ2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlhZ3JhbURpdiA9IHRoaXMuX2VsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgIyR7dGhpcy5teURpYWdyYW1EaXZ9YCk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtID0gdGhpcy4kKGdvLkRpYWdyYW0sIGRpYWdyYW1EaXYsIHRoaXMuaW5pdGlhbE9wdGlvbnMpO1xuICAgICAgICAvLyB0aGlzLm15RGlhZ3JhbS5pbml0aWFsUG9zaXRpb24gPSBuZXcgZ28uUG9pbnQoMCwgMCk7XG4gICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDb21wb2VudFRlbXBsYXRlKCk7XG5cbiAgICAgICAgdGhpcy5tYWtlTGlua1RlbXBsYXRlKCk7XG4gICAgICAgIC8vIGFuaW1hdGlvblxuICAgICAgICB0aGlzLnN0YXJ0QW5pbWF0aW9uKCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgICAgIC8vIGlmICghdGhpcy5pc0FkZGVkTW9kZWxDaGFuZ2VkTGlzdGVuZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmlzQWRkZWRNb2RlbENoYW5nZWRMaXN0ZW5lcnMgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uYWRkTW9kZWxDaGFuZ2VkTGlzdGVuZXIoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoZS5jaGFuZ2UgPT09IGdvLkNoYW5nZWRFdmVudC5SZW1vdmUgJiYgZS5wcm9wZXJ0eU5hbWUgPT09ICdub2RlRGF0YUFycmF5Jykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gZS5vbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkRlbGV0ZU5vZGUuZW1pdChkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGUuaXNUcmFuc2FjdGlvbkZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29tbWl0dGVkVHJhbnNhY3Rpb25TdWJqZWN0Py5uZXh0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0uY29tbWFuZEhhbmRsZXIudW5kbyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm9uVW5kby5lbWl0KCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoISF0aGlzLmVkaXRvcikge1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubW9kZWwgPSBnby5Nb2RlbC5mcm9tSnNvbih0aGlzLmVkaXRvci5kYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRHcm91cFRlbXBsYXRlRW5lcmd5KCkge1xuICAgICAgICAvLyBmb3Igd2F0ZXJcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgU1RPUkFHRSxcbiAgICAgICAgICAgIFdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIERFTUlOX1dBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIC8vIFJPX1dBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIFBST0NFU1MsXG4gICAgICAgICAgICBXQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIERBRl9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIEVUUF9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIE1CUl9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIFpMRF9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIENPT0xJTkdfVE9XRVIsXG4gICAgICAgICAgICBCT0lMRVIsXG4gICAgICAgICAgICBPVEhFUixcbiAgICAgICAgICAgIExBTkRTQ0FQSU5HX0lSUklHQVRJT04sXG4gICAgICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgICAgIGNvbnN0IHdhdGVyR3JvdXBzID0gW1xuICAgICAgICAgICAgU1RPUkFHRSxcbiAgICAgICAgICAgIFdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIERFTUlOX1dBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIC8vIFJPX1dBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIFBST0NFU1MsXG4gICAgICAgICAgICBXQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIERBRl9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIEVUUF9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIE1CUl9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIFpMRF9XQVNURVdBVEVSX1RSRUFUTUVOVCxcbiAgICAgICAgICAgIENPT0xJTkdfVE9XRVIsXG4gICAgICAgICAgICBCT0lMRVIsXG4gICAgICAgICAgICBPVEhFUixcbiAgICAgICAgICAgIExBTkRTQ0FQSU5HX0lSUklHQVRJT04sXG4gICAgICAgIF07XG4gICAgICAgIHdhdGVyR3JvdXBzLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEhQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbiwgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBlbGVjdHJpY2FsXG4gICAgICAgIHRoaXMuaW5pdEVsZWN0cmljR3JvdXBUZW1wbGF0ZSgpO1xuXG4gICAgICAgIC8vIEZ1ZWxcbiAgICAgICAgdGhpcy5pbml0RnVlbEdyb3VwVGVtcGxhdGUoKTtcblxuICAgICAgICAvLyBHYXNcbiAgICAgICAgdGhpcy5pbml0R2FzR3JvdXBUZW1wbGF0ZSgpO1xuICAgIH1cblxuICAgIGluaXRFbGVjdHJpY0RpYWdyYW0oKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIEdSSUQsXG4gICAgICAgICAgICBESUVTRUxfR0VORVJBVE9SUyxcbiAgICAgICAgICAgIEJBVFRFUllfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBMSUdIVElOR19TWVNURU1TLFxuICAgICAgICAgICAgTElHSFRJTkdTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfTUVURVJTLFxuICAgICAgICAgICAgVFJBTlNGT1JNRVJTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfRkxZV0hFRUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBQVU1QRURfSFlEUk9fU1RPUkFHRSxcbiAgICAgICAgICAgIFRIRVJNQUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBTVVBFUl9DQVBBQ0lUT1JfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBTV0lUQ0hfR0VBUlMsXG4gICAgICAgICAgICBQUk9DRVNTX0NPTlRST0xfQVVUT01BVElPTl9TWVNURU1TLFxuICAgICAgICAgICAgUFJPQ0VTU19FUVVJUE1FTlRfTUFDSElORVMsXG4gICAgICAgICAgICBPRkZJQ0VfRVFVSVBNRU5ULFxuICAgICAgICAgICAgUE9XRVJfRElTVFJJQlVUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgICAgICAgIFBPV0VSX0RJU1RSSUJVVElPTl9TWVNURU1TLFxuICAgICAgICAgICAgTkFUVVJBTF9HQVNfR0VORVJBVE9SUyxcbiAgICAgICAgICAgIE1PVE9SX0NPTlRST0xTLFxuICAgICAgICAgICAgVkFSSUFCTEVfRlJFUVVFTkNZX0RSSVZFUlMsXG4gICAgICAgICAgICBFTEVDVFJJQ19IVkFDLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9BSVJfU1lTVEVNUyxcbiAgICAgICAgICAgIFJFRlJJR0VSQVRJT05fQ09PTElOR19TWVNURU1TLFxuICAgICAgICAgICAgTUFURVJJQUxfSEFORExJTkdfRVFVSVBNRU5ULFxuICAgICAgICAgICAgV0lORF9QT1dFUixcbiAgICAgICAgICAgIEVMRUNUUklDX0lORFVTVFJJQUxfTU9UT1JTLFxuICAgICAgICAgICAgR1JPVU5ESU5HLFxuICAgICAgICB9ID0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTO1xuICAgICAgICBjb25zdCBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZSA9IFtcbiAgICAgICAgICAgIEdSSUQsXG4gICAgICAgICAgICBESUVTRUxfR0VORVJBVE9SUyxcbiAgICAgICAgICAgIEJBVFRFUllfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBMSUdIVElOR19TWVNURU1TLFxuICAgICAgICAgICAgTElHSFRJTkdTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfTUVURVJTLFxuICAgICAgICAgICAgVFJBTlNGT1JNRVJTLFxuICAgICAgICAgICAgRUxFQ1RSSUNfRkxZV0hFRUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBQVU1QRURfSFlEUk9fU1RPUkFHRSxcbiAgICAgICAgICAgIFRIRVJNQUxfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBTVVBFUl9DQVBBQ0lUT1JfRU5FUkdZX1NUT1JBR0UsXG4gICAgICAgICAgICBTV0lUQ0hfR0VBUlMsXG4gICAgICAgICAgICBQUk9DRVNTX0NPTlRST0xfQVVUT01BVElPTl9TWVNURU1TLFxuICAgICAgICAgICAgUFJPQ0VTU19FUVVJUE1FTlRfTUFDSElORVMsXG4gICAgICAgICAgICBPRkZJQ0VfRVFVSVBNRU5ULFxuICAgICAgICAgICAgUE9XRVJfRElTVFJJQlVUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgICAgICAgIFBPV0VSX0RJU1RSSUJVVElPTl9TWVNURU1TLFxuICAgICAgICAgICAgTkFUVVJBTF9HQVNfR0VORVJBVE9SUyxcbiAgICAgICAgICAgIE1PVE9SX0NPTlRST0xTLFxuICAgICAgICAgICAgVkFSSUFCTEVfRlJFUVVFTkNZX0RSSVZFUlMsXG4gICAgICAgICAgICBFTEVDVFJJQ19IVkFDLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9BSVJfU1lTVEVNUyxcbiAgICAgICAgICAgIFJFRlJJR0VSQVRJT05fQ09PTElOR19TWVNURU1TLFxuICAgICAgICAgICAgTUFURVJJQUxfSEFORExJTkdfRVFVSVBNRU5ULFxuICAgICAgICAgICAgV0lORF9QT1dFUixcbiAgICAgICAgICAgIEVMRUNUUklDX0lORFVTVFJJQUxfTU9UT1JTLFxuICAgICAgICAgICAgR1JPVU5ESU5HLFxuICAgICAgICBdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdEVsZWN0cmljR3JvdXBUZW1wbGF0ZSgpIHtcbiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gW1xuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5CQVRURVJZX0VORVJHWV9TVE9SQUdFXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVFJBTlNGT1JNRVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRUxFQ1RSSUNfTUVURVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTElHSFRJTkdTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUE9XRVJfRElTVFJJQlVUSU9OX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TV0lUQ0hfR0VBUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5FTEVDVFJJQ19JTkRVU1RSSUFMX01PVE9SU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdST1VORElOR10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLk1PVE9SX0NPTlRST0xTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTElHSFRJTkdfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkVMRUNUUklDX0hWQUNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5SRUZSSUdFUkFUSU9OX0NPT0xJTkdfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBST0NFU1NfQ09OVFJPTF9BVVRPTUFUSU9OX1NZU1RFTVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5PRkZJQ0VfRVFVSVBNRU5UXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09NUFJFU1NFRF9BSVJfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBST0NFU1NfRVFVSVBNRU5UX01BQ0hJTkVTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTUFURVJJQUxfSEFORExJTkdfRVFVSVBNRU5UXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuUE9XRVJfRElTVFJJQlVUSU9OX0NPTlRST0xfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJBVFRFUklFU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBUklBQkxFX0ZSRVFVRU5DWV9EUklWRVJTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRUxFQ1RSSUNfRkxZV0hFRUxfRU5FUkdZX1NUT1JBR0VdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QVU1QRURfSFlEUk9fU1RPUkFHRV0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRIRVJNQUxfRU5FUkdZX1NUT1JBR0VdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TVVBFUl9DQVBBQ0lUT1JfRU5FUkdZX1NUT1JBR0VdLFxuICAgICAgICBdO1xuICAgICAgICBsaXN0SXRlbXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShlPy5pY29uLCBlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0RnVlbEdyb3VwVGVtcGxhdGUoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IFtcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRElFU0VMX0ZVRUxTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0FTT05fTElORVNdLFxuXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJJT0RJRVNFTFNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5LRVJPU0VOU0VdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUk9QQU5FU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRBTktFUl9UUlVDS1NdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QSVBFTElORV0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklORFVTVFJJQUxfQk9JTEVSU10sXG5cbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0VORVJBVE9SU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLklORFVTVFJJQUxfRlVSTkFDRVNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5JTkRVU1RSSUFMX09WRU5TXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU5EVVNUUklBTF9WRUhJQ0xFU19BTkRfRVFVSVBNRU5UXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NRVRFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0RJU1BFTlNFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX1NUUk9SQUdFX1RBTktTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRUxFQ1RSSUNfSFZBQ10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRklMVFJBVElPTlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX01BTkFHRU1FTlRTXSxcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0RJU1BFTlNFUlNdLmljb24sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRElTUEVOU0VSU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9TVFJPUkFHRV9UQU5LU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9GSUxUUkFUSU9OU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9NQU5BR0VNRU5UU10ubmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgbGlzdEl0ZW1zLmZvckVhY2goKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoZT8uaWNvbiwgZS5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdEdhc0dyb3VwVGVtcGxhdGUoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RJdGVtcyA9IFtcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QSVBFTElORV0sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJPSUxFUlNfQU5EX0hFQVRFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVVJOQUNFU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlBPV0VSX0dFTkVSQVRJT05dLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT0dFTkVSQVRJT05dLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT01CSU5FRF9DWUNMRV9QT1dFUl9QTEFOVFNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0ZPUl9WRUhJQ0xFU19BTkRfRVFVSVBNRU5UXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0FTX01FVEVSU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkJVUk5FUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GTFVFX0dBU19BTkFMWVpFUlNdLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5DT01CVVNUSU9OX0NPTlRST0xfU1lTVEVNU10sXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkdBU19TVE9SQUdFX1RBTktTXSxcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuR0FTX1BSRVNTVVJFX1JFR1VMQVRPUlNdLFxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMubWFrZUdyb3VwVGVtcGxhdGUoXG4gICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkZVRUxfRElTUEVOU0VSU10uaWNvbixcbiAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuRlVFTF9ESVNQRU5TRVJTXS5uYW1lLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX1NUUk9SQUdFX1RBTktTXS5pY29uLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX1NUUk9SQUdFX1RBTktTXS5uYW1lLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0ZJTFRSQVRJT05TXS5pY29uLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX0ZJTFRSQVRJT05TXS5uYW1lLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm1ha2VHcm91cFRlbXBsYXRlKFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX01BTkFHRU1FTlRTXS5pY29uLFxuICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5GVUVMX01BTkFHRU1FTlRTXS5uYW1lLFxuICAgICAgICApO1xuICAgICAgICBsaXN0SXRlbXMuZm9yRWFjaCgoZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYWtlR3JvdXBUZW1wbGF0ZShlPy5pY29uLCBlLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbml0R2FzRGlhZ3JhbSgpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgTkFUVVJBTF9HQVNfUElQRUxJTkVTLFxuICAgICAgICAgICAgTElRVUVGSUVEX05BVFVSQUxfR0FTLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QSVBFTElORSxcbiAgICAgICAgICAgIENPTVBSRVNTRURfTkFUVVJBTF9HQVNfUFJPRFVDVElPTixcbiAgICAgICAgICAgIEJPSUxFUlNfQU5EX0hFQVRFUlMsXG4gICAgICAgICAgICBGVVJOQUNFUyxcbiAgICAgICAgICAgIFBPV0VSX0dFTkVSQVRJT04sXG4gICAgICAgICAgICBDT0dFTkVSQVRJT04sXG4gICAgICAgICAgICBDT01CSU5FRF9DWUNMRV9QT1dFUl9QTEFOVFMsXG4gICAgICAgICAgICBGVUVMX0ZPUl9WRUhJQ0xFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgICAgICAgR0FTX01FVEVSUyxcbiAgICAgICAgICAgIEJVUk5FUlMsXG4gICAgICAgICAgICBGTFVFX0dBU19BTkFMWVpFUlMsXG4gICAgICAgICAgICBDT01CVVNUSU9OX0NPTlRST0xfU1lTVEVNUyxcbiAgICAgICAgICAgIEdBU19TVE9SQUdFX1RBTktTLFxuICAgICAgICAgICAgR0FTX1BSRVNTVVJFX1JFR1VMQVRPUlMsXG4gICAgICAgICAgICBOQVRVUkFMX0dBUyxcbiAgICAgICAgfSA9IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUztcbiAgICAgICAgY29uc3QgTGlzdEl0ZW1zQ3JlYXRlRW50aXR5VGVtcGxhdGUgPSBbXG4gICAgICAgICAgICBOQVRVUkFMX0dBU19QSVBFTElORVMsXG4gICAgICAgICAgICBMSVFVRUZJRURfTkFUVVJBTF9HQVMsXG4gICAgICAgICAgICBDT01QUkVTU0VEX05BVFVSQUxfR0FTX1BJUEVMSU5FLFxuICAgICAgICAgICAgQ09NUFJFU1NFRF9OQVRVUkFMX0dBU19QUk9EVUNUSU9OLFxuICAgICAgICAgICAgQk9JTEVSU19BTkRfSEVBVEVSUyxcbiAgICAgICAgICAgIEZVUk5BQ0VTLFxuICAgICAgICAgICAgUE9XRVJfR0VORVJBVElPTixcbiAgICAgICAgICAgIENPR0VORVJBVElPTixcbiAgICAgICAgICAgIENPTUJJTkVEX0NZQ0xFX1BPV0VSX1BMQU5UUyxcbiAgICAgICAgICAgIEZVRUxfRk9SX1ZFSElDTEVTX0FORF9FUVVJUE1FTlQsXG4gICAgICAgICAgICBHQVNfTUVURVJTLFxuICAgICAgICAgICAgQlVSTkVSUyxcbiAgICAgICAgICAgIEZMVUVfR0FTX0FOQUxZWkVSUyxcbiAgICAgICAgICAgIENPTUJVU1RJT05fQ09OVFJPTF9TWVNURU1TLFxuICAgICAgICAgICAgR0FTX1NUT1JBR0VfVEFOS1MsXG4gICAgICAgICAgICBHQVNfUFJFU1NVUkVfUkVHVUxBVE9SUyxcbiAgICAgICAgICAgIE5BVFVSQUxfR0FTLFxuICAgICAgICBdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdEZ1ZWxEaWFncmFtKCkge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBESUVTRUxfRlVFTFMsXG4gICAgICAgICAgICBHQVNPTl9MSU5FUyxcbiAgICAgICAgICAgIEJJT0RJRVNFTFMsXG4gICAgICAgICAgICBLRVJPU0VOU0UsXG4gICAgICAgICAgICBQUk9QQU5FUyxcbiAgICAgICAgICAgIFRBTktFUl9UUlVDS1MsXG4gICAgICAgICAgICBQSVBFTElORSxcbiAgICAgICAgICAgIElORFVTVFJJQUxfQk9JTEVSUyxcbiAgICAgICAgICAgIEdFTkVSQVRPUlMsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX0ZVUk5BQ0VTLFxuICAgICAgICAgICAgSU5EVVNUUklBTF9PVkVOUyxcbiAgICAgICAgICAgIElORFVTVFJJQUxfVkVISUNMRVNfQU5EX0VRVUlQTUVOVCxcbiAgICAgICAgICAgIEZVRUxfTUVURVJTLFxuICAgICAgICAgICAgRlVFTF9ESVNQRU5TRVJTLFxuICAgICAgICAgICAgRlVFTF9TVFJPUkFHRV9UQU5LUyxcbiAgICAgICAgICAgIEZVRUxfRklMVFJBVElPTlMsXG4gICAgICAgICAgICBGVUVMX01BTkFHRU1FTlRTLFxuICAgICAgICAgICAgRlVFTFMsXG4gICAgICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1xuICAgICAgICAgICAgRElFU0VMX0ZVRUxTLFxuICAgICAgICAgICAgR0FTT05fTElORVMsXG4gICAgICAgICAgICBCSU9ESUVTRUxTLFxuICAgICAgICAgICAgS0VST1NFTlNFLFxuICAgICAgICAgICAgUFJPUEFORVMsXG4gICAgICAgICAgICBUQU5LRVJfVFJVQ0tTLFxuICAgICAgICAgICAgUElQRUxJTkUsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX0JPSUxFUlMsXG4gICAgICAgICAgICBHRU5FUkFUT1JTLFxuICAgICAgICAgICAgSU5EVVNUUklBTF9GVVJOQUNFUyxcbiAgICAgICAgICAgIElORFVTVFJJQUxfT1ZFTlMsXG4gICAgICAgICAgICBJTkRVU1RSSUFMX1ZFSElDTEVTX0FORF9FUVVJUE1FTlQsXG4gICAgICAgICAgICBGVUVMX01FVEVSUyxcbiAgICAgICAgICAgIEZVRUxfRElTUEVOU0VSUyxcbiAgICAgICAgICAgIEZVRUxfU1RST1JBR0VfVEFOS1MsXG4gICAgICAgICAgICBGVUVMX0ZJTFRSQVRJT05TLFxuICAgICAgICAgICAgRlVFTF9NQU5BR0VNRU5UUyxcbiAgICAgICAgICAgIEZVRUxTLFxuICAgICAgICBdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdFNvbGFyRGlhZ3JhbSgpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgU09MQVJfUE9XRVIsXG4gICAgICAgICAgICBQT1dFUl9DT05ESVRJT05JTkdfVU5JVCxcbiAgICAgICAgICAgIEJBVFRFUklFUzogQkFUVEVSWSxcbiAgICAgICAgICAgIElOVkVSVEVSUzogSU5WRVJURVIsXG4gICAgICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1NPTEFSX1BPV0VSLCBQT1dFUl9DT05ESVRJT05JTkdfVU5JVCwgQkFUVEVSWSwgSU5WRVJURVJdO1xuICAgICAgICBMaXN0SXRlbXNDcmVhdGVFbnRpdHlUZW1wbGF0ZS5tYXAoKGUpID0+IHtcbiAgICAgICAgICAgIGlmICghIUF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXSkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0uaWNvbixcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdLm5hbWUsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5pdFN0ZWFtRGlhZ3JhbSgpIHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgVkFMVUVTLFxuICAgICAgICAgICAgU1RFQU1fVFJBUFMsXG4gICAgICAgICAgICBQUkVTU1VSRV9SRUdVTEFUT1JTLFxuICAgICAgICAgICAgU0FGRVRZX1ZBTFVFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgICAgICAgQ09OREVOU0FURV9SRVRVUk5fU1lTVEVNLFxuICAgICAgICAgICAgREVBRVJBVE9SUyxcbiAgICAgICAgICAgIEZFRURXQVRFUl9QVU1QUyxcbiAgICAgICAgICAgIEJMT1dET1dOX1RBTktTLFxuICAgICAgICAgICAgRVhQQU5TSU9OX1RBTktTLFxuICAgICAgICAgICAgSEVBVF9FWENIQU5HRVJTLFxuICAgICAgICAgICAgVFVSQklORVMsXG4gICAgICAgIH0gPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVM7XG4gICAgICAgIGNvbnN0IExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlID0gW1xuICAgICAgICAgICAgVkFMVUVTLFxuICAgICAgICAgICAgU1RFQU1fVFJBUFMsXG4gICAgICAgICAgICBQUkVTU1VSRV9SRUdVTEFUT1JTLFxuICAgICAgICAgICAgU0FGRVRZX1ZBTFVFU19BTkRfRVFVSVBNRU5ULFxuICAgICAgICAgICAgQ09OREVOU0FURV9SRVRVUk5fU1lTVEVNLFxuICAgICAgICAgICAgREVBRVJBVE9SUyxcbiAgICAgICAgICAgIEZFRURXQVRFUl9QVU1QUyxcbiAgICAgICAgICAgIEJMT1dET1dOX1RBTktTLFxuICAgICAgICAgICAgRVhQQU5TSU9OX1RBTktTLFxuICAgICAgICAgICAgSEVBVF9FWENIQU5HRVJTLFxuICAgICAgICAgICAgVFVSQklORVMsXG4gICAgICAgIF07XG4gICAgICAgIExpc3RJdGVtc0NyZWF0ZUVudGl0eVRlbXBsYXRlLm1hcCgoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKCEhQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW2VdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlRW50aXR5VGVtcGxhdGVFbmVyZ3koXG4gICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tlXS5pY29uLFxuICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuTk9ERV9URU1QTEFURVNbZV0ubmFtZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlTGlzdGVuZXIoZTogZ28uQ2hhbmdlZEV2ZW50KSB7XG4gICAgICAgIC8vIHRoaXMub25Nb2RlbENoYW5nZUxpc3RlbmVyRXZlbnQuZW1pdChlKTtcbiAgICB9XG5cbiAgICBtYWtlTGlua1RlbXBsYXRlKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50czogYW55W10gPSBbXTtcbiAgICAgICAgLy8gbGluZVxuICAgICAgICBlbGVtZW50cy5wdXNoKFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaXNQYW5lbE1haW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkdSQVksXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuTElOS19URU1QTEFURVNbQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fTElOS19UWVBFUy5TSU1QTEVdPy5zdHJva2VXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ2NvbG9yJyksXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzdHJva2VXaWR0aCcsICd0eXBlJywgKHgpID0+IEF0b0dvanNFZGl0b3JNb2RlbC5MSU5LX1RFTVBMQVRFU1t4XT8uc3Ryb2tlV2lkdGgpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBhbmltYXRpb25cbiAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwge1xuICAgICAgICAgICAgICAgIC4uLkF0b0dvanNFZGl0b3JNb2RlbC5MSU5LX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlBJUEVfQU5JTUFUSU9OXT8uYW5pbWF0aW9uLFxuICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGVsZW1lbnRzLnB1c2goXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ1RvcCcsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDM4LFxuICAgICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShOYU4sIDM2KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2lkdGg6IDEwMCxcbiAgICAgICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoMTAwLCA1KSwgLy8gxJDhurd0IGvDrWNoIHRoxrDhu5tjIHThu5FpIHRoaeG7g3UgbMOgIDEwMHg1MFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAvLyBsYXllck5hbWU6ICdCYWNrZ3JvdW5kTGF5ZXInLFxuICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wLFxuICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICAvLyBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgNTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ3RleHRDb21wb25lbnQnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgaGVpZ2h0OiAzMCxcbiAgICAgICAgICAgICAgICAvLyAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAvLyAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCA1MCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjNDQ0NDQ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLCAvLyDEkOG6o20gYuG6o28gdsSDbiBi4bqjbiBu4bqxbSDhu58gdHJ1bmcgdMOibSBj4bunYSBuw7p0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5DZW50ZXIsIC8vIMSQ4bqjbSBi4bqjbyB2xINuIGLhuqNuIGtow7RuZyBi4buLIGThu4tjaCBjaHV54buDbiByYSBraOG7j2kgdHJ1bmcgdMOibVxuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsIC8vIENodXnhu4NuIGTDsm5nIMSR4buDIHbEg24gYuG6o24ga2jDtG5nIHbGsOG7o3QgcmEgbmdvw6BpXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICd0ZXh0Q29tcG9uZW50JyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3RleHRDb21wb25lbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2JhY2tncm91bmQnLCAndGV4dENvbXBvbmVudCcsICh4KSA9PiAoeCA/ICd3aGl0ZScgOiAndHJhbnNwYXJlbnQnKSksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBuZXcgZ28uQmluZGluZygnbWFyZ2luJywgJ2lzRm9ybWF0JywgKHgpID0+XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB4ID8gbmV3IGdvLk1hcmdpbig1LCAwLCA1LCA1KSA6IG5ldyBnby5NYXJnaW4oNSwgNSwgNSwgNSksXG4gICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gYXJyb3dcbiAgICAgICAgZWxlbWVudHMucHVzaChcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5TaGFwZSwgLy8gdGhlIFwiZnJvbVwiIGFycm93aGVhZFxuICAgICAgICAgICAgICAgIHsgLi4uQXRvR29qc0VkaXRvck1vZGVsLkxJTktfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuU0lNUExFXT8uYXJyb3cgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZyhcbiAgICAgICAgICAgICAgICAgICAgJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAndHlwZScsXG4gICAgICAgICAgICAgICAgICAgICh4KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgIVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlBJUEVfQU5JTUFUSU9OLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuUElQRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlBJUEVfSElEREVOLFxuICAgICAgICAgICAgICAgICAgICAgICAgXS5pbmNsdWRlcyh4KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmaWxsJywgJ2NvbG9yJyksXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBUT0RPIGZpeCBsaW5rIGNhbm5vdCBzZWxlY3RlZCBpbnNpZGUgZ3JvdXAgdGVtcGxhdGVcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubGlua1RlbXBsYXRlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTGluayxcbiAgICAgICAgICAgIGdvLkxpbmsuT3J0aG9nb25hbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBsYXllck5hbWU6ICdCYWNrZ3JvdW5kJywgLy8gbGluayBjYW5ub3Qgc2VsZWN0IGluc2lkZSBncm91cCB0ZW1wbGF0ZVxuICAgICAgICAgICAgICAgIC8vIGN1cnZpbmVzczogMjAsXG4gICAgICAgICAgICAgICAgLy8gY29ybmVyOiA1LFxuICAgICAgICAgICAgICAgIHJvdXRpbmc6IGdvLkxpbmsuQXZvaWRzTm9kZXMsXG4gICAgICAgICAgICAgICAgcmVzaGFwYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZXNlZ21lbnRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlbGlua2FibGVGcm9tOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJlbGlua2FibGVUbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvU2hvcnRMZW5ndGg6IEF0b0dvanNFZGl0b3JNb2RlbC5MSU5LX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9MSU5LX1RZUEVTLlNJTVBMRV0udG9TaG9ydExlbmd0aCwgLy8gYXNzdW1lIGFycm93aGVhZCBhdCBcInRvXCIgZW5kLCBuZWVkIHRvIGF2b2lkIGJhZCBhcHBlYXJhbmNlIHdoZW4gcGF0aCBpcyB0aGlja1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsYXllck5hbWUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8udGV4dENvbXBvbmVudCA/ICdCYWNrZ3JvdW5kJyA6ICcnO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnek9yZGVyJywgJ3R5cGUnLCAoeCkgPT4gKHggPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xJTktfVFlQRVMuUElQRV9BTklNQVRJT04gPyAxMSA6IDEwKSksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygndG9TaG9ydExlbmd0aCcsICd0eXBlJywgKHgpID0+IEF0b0dvanNFZGl0b3JNb2RlbC5MSU5LX1RFTVBMQVRFU1t4XS50b1Nob3J0TGVuZ3RoIHx8IDApLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAndmlzaWJsZScpLFxuXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgbGlua3MgY29tZSBpbiBmcm9tIHRoZSBwcm9wZXIgZGlyZWN0aW9uIGFuZCBnbyBvdXQgYXBwcm9wcmlhdGVseVxuICAgICAgICAgICAgLi4uZWxlbWVudHMsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbWFrZVZhbHVlTm9kZVRlbXBsYXRlKHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODIsIGg6IDM2IH0pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcblxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7IG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudywgc2l6ZS5oKSB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJR0hUX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTRweCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5DRVJVTEVBTixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZWRpdGFibGUnLCAnaXNFZGl0YWJsZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnc2hvcnRlbmVkTnVtYmVyJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21hcmdpbicsICdpc0Zvcm1hdCcsICh4KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPyBuZXcgZ28uTWFyZ2luKDUsIDAsIDUsIDUpIDogbmV3IGdvLk1hcmdpbig1LCA1LCA1LCA1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlICE9PSBWQUxVRV9OQTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAvLyBJY29uIEVyciB3aGVuIGxhY2sgb2YgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigxMCwgMTAsIDEwLCAxMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogVkFMVUVfTkEsIC8vIE9sZCB2ZXJzaW9uOiBURVhUX0VSUk9SXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlNBTE1PTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNdWx0aWxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEudmFsdWUgPT09IFZBTFVFX05BO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlZBTFVFX05PREUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VFbXB0eU5vZGVUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDAsIGg6IDAgfSkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkVNUFRZLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlVmFsdWVMYWJlbFRlbXBsYXRlKHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODIsIGg6IDM2IH0pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHsgbWluU2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53LCBzaXplLmgpIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMTAsIDAsIDEwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCA1LCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxNXB4IHNhbnMtc2VyaWYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkNFUlVMRUFOLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblNpemU6IG5ldyBnby5TaXplKDE1MCwgMzApLCAvLyBTZXQgdGhlIHdpZHRoIG9mIHRoZSB0ZXh0IGJsb2NrXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnZGF0YScsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB4Py5xdWFudGl0eSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQ6IGFueSA9IFV0aWxzU2VydmljZS5jb252ZXJ0UHJlZml4ZXNEYXRhKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHg/LnF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0OiBVdGlsc1NlcnZpY2UuY29udmVydFNwZWNpYWxVbml0KHg/LnVuaXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkLnNob3J0ZW5lZE51bWJlciArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkLnVuaXRQcmVmaXhlcyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVdGlsc1NlcnZpY2UuY29udmVydFNwZWNpYWxVbml0KHg/LnVuaXQpID8/ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Py5wZXJjZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldFZhbHVlICs9IGAgKCR7eD8ucGVyY2VudH0lKWA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnZGF0YScsICh4KSA9PiB0eXBlb2YgeD8ucXVhbnRpdHkgPT09ICdudW1iZXInKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVkFMVUVfTEFCRUwsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VUZXh0TGFiZWxUZW1wbGF0ZShzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IE5hTiwgaDogMjAgfSkge1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTZweCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLldyYXBGaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQ0VSVUxFQU4sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvcicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAndmlzaWJsZScpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX0xBQkVMLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlVGV4dFRlbXBsYXRlKFxuICAgICAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LCBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMiB9LFxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3QgY29udGV4dE1lbnUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAnVmVydGljYWwnLFxuICAgICAgICAgICAgdGhpcy4kKCdDb250ZXh0TWVudUJ1dHRvbicsIHRoaXMuJChnby5UZXh0QmxvY2ssICdPcHRpb24gMScpLCB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ09wdGlvbiAxIGNsaWNrZWQhJyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKCdDb250ZXh0TWVudUJ1dHRvbicsIHRoaXMuJChnby5UZXh0QmxvY2ssICdPcHRpb24gMicpLCB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJ09wdGlvbiAyIGNsaWNrZWQhJyk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gLi4uIGFkZCBtb3JlIG9wdGlvbnMgYXMgbmVlZGVkIC4uLlxuICAgICAgICApO1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBmcm9tU3BvdDogZ28uU3BvdC5SaWdodFNpZGUsXG4gICAgICAgICAgICAgICAgLy8gdG9TcG90OiBnby5TcG90LkxlZnRTaWRlLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGU/LmRhdGEub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgZT8uZGF0YS5vblNlbGVjdGVkKGU/LmRhdGEpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAvLyBtb3VzZUhvdmVyOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKChvYmogYXMgYW55KS5wYXJ0Py5vYj8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAvLyBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KG51bGwpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGU/Lm9iPy5pc1R5cGVJbmZsb3dPZlBsYW50Q2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2JqPy5kYXRhPy5vblNlbGVjdGVkKG5vZGU/Lm9iPy5ub2RlUGxhbnRDZWxsUGFyZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlbGYub25DbGlja0NvbXBvZW50LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBub2RlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIG9iOiBub2RlPy5vYj8ubm9kZVBsYW50Q2VsbFBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNvbXBvbmVudDogbm9kZT8ub2I/Lm5vZGVQbGFudENlbGxQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5faW5pdGlhbE9wdGlvbnM/LmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93Tm9kZUluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYub25DbGlja0luZm9CdXR0b24uZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZG91YmxlQ2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlPy5vYj8uaXNUeXBlSW5mbG93T2ZQbGFudENlbGwgJiYgIXRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQobm9kZT8ub2I/Lm5vZGVQbGFudENlbGxQYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5pc1Nob3dOb2RlSW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID8gc2VsZi5vbkRvdWJsZUNsaWNrTm9kZS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LngsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgbm9kZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBvYjogbm9kZT8ub2I/Lm5vZGVQbGFudENlbGxQYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbE9wdGlvbnM/LmlzUmVhZE9ubHkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNTaG93Tm9kZUluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYub25DbGlja0luZm9CdXR0b24uZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8geyBoZWlnaHQ6IDYyIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHsgZmlsbDogbnVsbCwgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsIHN0cm9rZVdpZHRoOiA0IH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbig4LCAzLCAwLCAzKSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdwYWRkaW5nJywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB4Py5pc1R5cGVJbmZsb3dPZlBsYW50Q2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB4Py5mbG93T2ZQbGFudENlbGwgPT09IEFUT19FTlVNX0ZMT1dfRElSRUNUSU9OLklORkxPV1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAyMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldyBnby5NYXJnaW4oMCwgMjAsIDAsIDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IDMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVHlwZUluZmxvd09mUGxhbnRDZWxsID8geD8uaGVpZ2h0ICsgMTAgOiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnd2lkdGgnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geD8uaXNUeXBlSW5mbG93T2ZQbGFudENlbGwgPyB4Py53aWR0aCArIDEyIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LCBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuSU5TSUdIVCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZnJvbVNwb3QnLCAnZnJvbVNwb3QnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0b1Nwb3QnLCAndG9TcG90JyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbW92YWJsZScsICdtb3ZhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdhbGlnbm1lbnQnLCAnYWxpZ25tZW50JywgZnVuY3Rpb24obG9jKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIG5ldyBnby5TcG90KDAsIDAsIGxvYy54LCAwKTtcbiAgICAgICAgICAgIC8vIH0pLm9mT2JqZWN0KCksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxmLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8ubmFtZSA/PyBWQUxVRV9OQTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YT8udmFsdWUgPT09IFZBTFVFX05BIHx8IF8uaXNOaWwoZGF0YT8udmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTk9fREFUQTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiBURVhUX1VOS05PV047XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF8ucm91bmQoZGF0YT8udmFsdWUsIDIpLnRvRml4ZWQoMik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXJyb3dGb3JQbGFudENlbGwoc2l6ZSwgQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04uT1VURkxPVyksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8geyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudywgc2l6ZS5oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncsIHNpemUuaCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKHNpemUudywgc2l6ZS5oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd3aWR0aCcsICd3aWR0aCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2hlaWdodCcsICdoZWlnaHQnKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSb3VuZGVkUmVjdGFuZ2xlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndGV4dE5vZGVTaGFwZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICdmaWxsJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdzdHJva2UnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlciB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBbGVydFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICdyZWNvbW1lbmRhdGlvbicpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjRTk1RjQ3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjRTk1RjQ3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdcXHVmNjQ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMS41LCAwLCAwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnOHB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyNmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUG9zaXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxOCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDE1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXI6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkhvdmVyQWxlcnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlQWxlcnQ6IChvYmogYXMgYW55KS5wYXJ0Py5vYj8ubWVzc2FnZUFsZXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlTGVhdmU6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkhvdmVyQWxlcnQuZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2FsZXJ0JyksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBJQ09OX0FMRVJULCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSgzMCwgMzApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAndGV4dEJsb2NrVmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDgsIDE4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAyMnB4IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkdSQVksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdlZGl0YWJsZScsICdpc0VkaXRhYmxlJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnYW5nbGUnLCAnYW5nbGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtYXJnaW4nLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YT8uYWxlcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ2NvbG9yJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldFRleHREYXRhQm94KGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEpID0+ICFkYXRhPy5pc0hpZGRlblZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcnJvd0ZvclBsYW50Q2VsbChzaXplLCBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTi5JTkZMT1cpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREUsIG5vZGUpO1xuICAgIH1cblxuICAgIGFycm93Rm9yUGxhbnRDZWxsKHNpemUsIGZsb3dEaXJlY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHNpemUuaCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJ2hlaWdodCcpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEpID0+IGRhdGE/LmZsb3dPZlBsYW50Q2VsbCA9PT0gZmxvd0RpcmVjdGlvbiksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29sdW1uOiBmbG93RGlyZWN0aW9uID09PSBBVE9fRU5VTV9GTE9XX0RJUkVDVElPTi5PVVRGTE9XID8gMCA6IDIsXG4gICAgICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdpdGVtQXJyYXknLCAnZGF0YUxpbmtBcnJheScpLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGl0ZW1UZW1wbGF0ZTogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3JvdycsICdpbmRleFJvdycpLFxuICAgICAgICAgICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJ2hlaWdodCcpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgQVJST1csXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSgyMCwgNDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc291cmNlJywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHBhbmVsLnBhcnQ/LmRhdGE/LmlkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LmlzQ3JlYXRlZCA/IHBhbmVsPy4kcCA6IEFSUk9XX0dSQVk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRUZXh0RGF0YUJveChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhPy52YWx1ZSA9PT0gVkFMVUVfTkEpIHtcbiAgICAgICAgICAgIHJldHVybiBURVhUX1VOS05PV047XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke2RhdGE/LnNob3J0ZW5lZE51bWJlcn0ke2RhdGE/LnVuaXRQcmVmaXhlcyA/ICcgJyArIGRhdGE/LnVuaXRQcmVmaXhlcyA6ICcnfWA7XG4gICAgfVxuXG4gICAgbWFrZURhdGFCb3hUZW1wbGF0ZShcbiAgICAgICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSwgaDogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUgfSxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIG1vdXNlT3ZlcjogZnVuY3Rpb24gKGUsIG9iaikge30sXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VIb3ZlcjogKGUsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgob2JqIGFzIGFueSkucGFydD8ub2I/LnZhbHVlID09PSBWQUxVRV9OQSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54ICsgOCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlTGVhdmU6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG9iaiBhcyBhbnkpLnBhcnQ/Lm9iPy52YWx1ZSA9PT0gVkFMVUVfTkEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHJvdzogMCwgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuSG9yaXpvbnRhbCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdSZWN0YW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJR0hUX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmaWxsJywgJ2NvbG9yJyksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAxMCwgNSwgMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncsIE5hTiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZ0JlbG93OiA1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyByb3c6IDEsIHN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0Lkhvcml6b250YWwgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElHSFRfQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMTAsIDQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDEwLCBzaXplLmgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDUsIDAsIDUsIDUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTJwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuR1JBWSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2VkaXRhYmxlJywgJ2lzRWRpdGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnc2hvcnRlbmVkTnVtYmVyJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ2NvbG9yJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS52YWx1ZSAhPT0gVkFMVUVfTkE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMTAsIDQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDEwLCBzaXplLmgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDUsIDUsIDUsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTJwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuR1JBWSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlICE9PSBWQUxVRV9OQTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3VuaXRQcmVmaXhlcycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJ2NvbG9yJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJY29uIEVyciB3aGVuIGxhY2sgb2YgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAxMCwgMTAsIDEwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IFZBTFVFX05BLCAvLyBPbGQgdmVyc2lvbjogVEVYVF9FUlJPUlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5TQUxNT04sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTXVsdGlsaW5lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnZhbHVlID09PSBWQUxVRV9OQTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gZm91ciBuYW1lZCBwb3J0cywgb25lIG9uIGVhY2ggc2lkZTpcblxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLkRBVEFfQk9YLCBub2RlKTtcbiAgICB9XG5cbiAgICBzaG93UG9pbnQobG9jKSB7XG4gICAgICAgIGNvbnN0IGRvY0xvYyA9IHRoaXMubXlEaWFncmFtLnRyYW5zZm9ybURvY1RvVmlldyhsb2MpO1xuICAgIH1cblxuICAgIG1ha2VFbnRpdHlUZW1wbGF0ZShcbiAgICAgICAgaWNvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1IH0sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbkNsaWNrQ29tcG9lbnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBvYmo/LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0JsdXI6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQ6IG5ldyBnby5Qb2ludCgwLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9yOiAnIzAwMDAwMDI5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHsgZmlsbDogbnVsbCwgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsIHN0cm9rZVdpZHRoOiA0IH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IDMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlJPX1dBVEVSX1RSRUFUTUVOVFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5OT0RFX1RFTVBMQVRFU1tBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuQ09PTElOR19UT1dFUl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uaW5jbHVkZXModGl0bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERVRBSUxTLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbW92YWJsZScsICdtb3ZhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcblxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBzaXplLmggLSA1MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXhTaXplOiBuZXcgZ28uU2l6ZSg2MCwgNjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDAsIDMsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7IG1hcmdpbjogNCB9LCBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdlZGl0YWJsZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuVFlQRV9DT01QT05FTlRfV0FURVI/LmluY2x1ZGVzKGRhdGE/LnN5c3RlbVR5cGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE/LnRvcG9sb2d5VHlwZSAhPT0gQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRS5XQVRFUiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPy50b3BvbG9neVR5cGUgIT09IEFUT19FQ09NUE9ORU5UX1BMQU5UX1RZUEUuV0FURVJfUExBTlRfQ0VMTFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUVudGl0eVRlbXBsYXRlRW5lcmd5KFxuICAgICAgICBpY29uLFxuICAgICAgICB0aXRsZSxcbiAgICAgICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSwgaDogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUgfSxcbiAgICApIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIG1vdXNlT3ZlcjogZnVuY3Rpb24gKGUsIG9iaikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZWxmLnNob3dQb2ludChvYmo/LnBhcnQ/LmxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkFkb3JubWVudFRlbXBsYXRlOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Zpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dCbHVyOiA2LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93T2Zmc2V0OiBuZXcgZ28uUG9pbnQoMCwgMiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogJyMwMDAwMDAyOScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7IGZpbGw6IG51bGwsIHN0cm9rZTogJ2RvZGdlcmJsdWUnLCBzdHJva2VXaWR0aDogNCB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiAzIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUFjdGlvbkdyb3VwKFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLlJFTkFNRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFVEFJTFMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbW92YWJsZScsICdtb3ZhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkxJTktfV0FURVIsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHRpdGxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDE1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNjUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDMsIDMsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCAxNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJDMkMyQycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gZm91ciBuYW1lZCBwb3J0cywgb25lIG9uIGVhY2ggc2lkZTpcblxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnQicsIGdvLlNwb3QuQm90dG9tLCBnby5TcG90LkJvdHRvbVNpZGUsIHRydWUsIGZhbHNlKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgLy8gUGxhbnQgQ2VsbFxuICAgIHBsYW50Q2VsbFRlbXBsYXRlKGljb24sIHRpdGxlLCBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDI2MCwgaDogQXRvR29qc0VkaXRvck1vZGVsLlBMQU5UX0NFTExfSEVJR0hUIH0pIHtcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgICAgIG1vdXNlRW50ZXI6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5vbkhvdmVyQWxlcnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBsZWZ0OiBlPy5bJ1dyJ10/LnggKyA4LFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBtZXNzYWdlQWxlcnQ6IChvYmogYXMgYW55KS5wYXJ0Py5vYj8ubWVzc2FnZUFsZXJ0LFxuICAgICAgICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogZT8uWydXciddPy54ICsgOCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgbGV0IHNoYXBlID0gKG5vZGUgYXMgYW55KT8uZmluZE9iamVjdCgnU0hBUEVfS0VZJyk7IC8vIFRoYXkgJ1NIQVBFX0tFWScgYuG6sW5nIGtow7NhIGLhuqFuIMSR4bq3dCBjaG8gaMOsbmggU2hhcGVcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaGFwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2hhcGUuc3Ryb2tlID0gJ2JsdWUnOyAvLyBUaGF5IMSR4buVaSBtw6B1IHN0cm9rZSB0aMOgbmggYmx1ZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBtb3VzZUxlYXZlOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYub25Ib3ZlckluZm9CdXR0b24uZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5vbkhvdmVyQWxlcnQuZW1pdChudWxsKTtcbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25DbGlja0NvbXBvZW50LmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogb2JqPy5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgZG91YmxlQ2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX2luaXRpYWxPcHRpb25zPy5pc1JlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLm9uRG91YmxlQ2xpY2tOb2RlLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgLy8gVG9kb1xuXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dWaXNpYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Qmx1cjogNixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd09mZnNldDogbmV3IGdvLlBvaW50KDAsIDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93Q29sb3I6ICcjMDAwMDAwMjknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IDE3MCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCB7IGZpbGw6IG51bGwsIHN0cm9rZTogJ2RvZGdlcmJsdWUnLCBzdHJva2VXaWR0aDogNCB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiAzIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYWxpZ25tZW50OiBnby5TcG90LlRvcFJpZ2h0LCBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVBY3Rpb25Hcm91cChbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9OTFlfREVUQUlMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIERlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnaXNOb3RBY3Rpb24nLCAoeCkgPT4gIXgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICB7IGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIHRoaXMuZ2VuZXJhdGVBY3Rpb25Hcm91cChbRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9OTFlfREVUQUlMU10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgcmV0dXJuIHg/LmlzT25seURldGFpbHMgJiYgIXg/LmlzTm90QWN0aW9uID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICApLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgIC8vICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgIC8vICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgIC8vICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAvLyB9KSxcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSwgdmlzaWJsZTogZmFsc2UgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNTAsIDAsIDUwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMCwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogdGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNjUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoSW1hZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPz8gQXRvR29qc0VkaXRvck1vZGVsLk5PREVfVEVNUExBVEVTW0F0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QTEFOVF9DRUxMXS5pY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAwLCAzLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMkMyQzJDJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdyYXA6IGdvLlRleHRCbG9jay5Ob25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMC41LCA4LCAwKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlJpZ2h0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICAvLyB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgLy8gdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgLy8gdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICAvLyB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlRW50aXR5V2l0aGRyYXdPckRpc2NoYXJnZShcbiAgICAgICAgaWNvbixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogQXRvR29qc0VkaXRvck1vZGVsLkdSSURfU0laRSAqIDUsIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1IH0sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb25TcG90OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICBtb3VzZU92ZXI6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VsZi5zaG93UG9pbnQob2JqPy5wYXJ0Py5sb2NhdGlvbik7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGdvLkFkb3JubWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgeyBmaWxsOiBudWxsLCBzdHJva2U6ICdkb2RnZXJibHVlJywgc3Ryb2tlV2lkdGg6IDQgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogMyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSG9yaXpvbnRhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCwgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVUQUlMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbW92YWJsZScsICdtb3ZhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcblxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTElOS19XQVRFUixcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlRleHRCbG9jaywgdGl0bGUsIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCAxMCwgMyksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIC8vIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgc2l6ZS5oIC0gNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMTAsIDAsIDMsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lyZWRTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgMTUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIGRlZmluZSBhIHRvb2x0aXAgZm9yIGVhY2ggbm9kZSB0aGF0IGRpc3BsYXlzIHRoZSBjb2xvciBhcyB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHsgbWFyZ2luOiA0IH0sIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgKSwgLy8gZW5kIG9mIEFkb3JubWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLjUsIDgsIDApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDEsIDAuNSwgLTgsIDApLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBmb3VyIG5hbWVkIHBvcnRzLCBvbmUgb24gZWFjaCBzaWRlOlxuXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdUJywgZ28uU3BvdC5Ub3AsIGdvLlNwb3QuVG9wU2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgZmFsc2UsIHRydWUpLFxuICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnUicsIGdvLlNwb3QuUmlnaHQsIGdvLlNwb3QuUmlnaHRTaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBlZGl0VGV4dEdyb3VwWm9uZShlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3Qgbm9kZUdyb3VwID0gYnV0dG9uLnBhcnQuYWRvcm5lZFBhcnQ7XG4gICAgICAgIGNvbnN0IGRpYWdyYW0gPSBub2RlR3JvdXAuZGlhZ3JhbTtcbiAgICAgICAgZS5kaWFncmFtLmNvbW1hbmRIYW5kbGVyLmVkaXRUZXh0QmxvY2sobm9kZUdyb3VwLmZpbmRPYmplY3QoJ1RFWFRCTE9DSycpKTtcbiAgICB9XG5cbiAgICBlZGl0VGV4dChlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3Qgbm9kZSA9IGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0O1xuICAgICAgICBlLmRpYWdyYW0uY29tbWFuZEhhbmRsZXIuZWRpdFRleHRCbG9jayhub2RlLmZpbmRPYmplY3QoJ1RFWFRCTE9DSycpKTtcbiAgICB9XG5cbiAgICBhc3luYyBkcmFnTmV3Tm9kZShlLCBidXR0b24pIHtcbiAgICAgICAgY29uc3QgdG9vbCA9IGUuZGlhZ3JhbS50b29sTWFuYWdlci5kcmFnZ2luZ1Rvb2w7XG5cbiAgICAgICAgaWYgKHRvb2wuaXNCZXlvbmREcmFnU2l6ZSgpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICAgICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuICAgICAgICAgICAgZS5kaWFncmFtLnN0YXJ0VHJhbnNhY3Rpb24oJ2J1dHRvbiBkcmFnJyk7IC8vIHNlZSBkb0RlYWN0aXZhdGUsIGJlbG93XG5cbiAgICAgICAgICAgIGNvbnN0IGZyb21ub2RlID0gYnV0dG9uLnBhcnQuYWRvcm5lZFBhcnQ7XG4gICAgICAgICAgICBjb25zdCBkaWFncmFtID0gZnJvbW5vZGUuZGlhZ3JhbTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gZGlhZ3JhbS5tb2RlbDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVkYXRhID0geyAuLi5tb2RlbC5jb3B5Tm9kZURhdGEoZGF0YSksIGtleTogVXRpbHNTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpIH07XG4gICAgICAgICAgICBtb2RlbC5hZGROb2RlRGF0YShub2RlZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBuZXdub2RlID0gZGlhZ3JhbS5maW5kTm9kZUZvckRhdGEobm9kZWRhdGEpO1xuICAgICAgICAgICAgY29uc3QgbGlua2RhdGEgPSBtb2RlbC5jb3B5TGlua0RhdGEoe30pO1xuICAgICAgICAgICAgbW9kZWwuc2V0RnJvbUtleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShmcm9tbm9kZS5kYXRhKSk7XG4gICAgICAgICAgICBtb2RlbC5zZXRUb0tleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShuZXdub2RlLmRhdGEpKTtcbiAgICAgICAgICAgIG1vZGVsLmFkZExpbmtEYXRhKGxpbmtkYXRhKTtcbiAgICAgICAgICAgIGRpYWdyYW0uc2VsZWN0KG5ld25vZGUpO1xuICAgICAgICAgICAgLy8gICB0aGlzLmNyZWF0ZU5vZGVBbmRMaW5rKGRhdGEsIGJ1dHRvbi5wYXJ0LmFkb3JuZWRQYXJ0KTtcblxuICAgICAgICAgICAgbmV3bm9kZS5sb2NhdGlvbiA9IGUuZGlhZ3JhbS5sYXN0SW5wdXQuZG9jdW1lbnRQb2ludDtcbiAgICAgICAgICAgIC8vIGRvbid0IGNvbW1pdFRyYW5zYWN0aW9uIGhlcmUsIGJ1dCBpbiB0b29sLmRvRGVhY3RpdmF0ZSwgYWZ0ZXIgZHJhZyBvcGVyYXRpb24gZmluaXNoZWRcbiAgICAgICAgICAgIC8vIHNldCB0b29sLmN1cnJlbnRQYXJ0IHRvIGEgc2VsZWN0ZWQgbW92YWJsZSBQYXJ0IGFuZCB0aGVuIGFjdGl2YXRlIHRoZSBEcmFnZ2luZ1Rvb2xcbiAgICAgICAgICAgIHRvb2wuY3VycmVudFBhcnQgPSBuZXdub2RlO1xuICAgICAgICAgICAgZS5kaWFncmFtLmN1cnJlbnRUb29sID0gdG9vbDtcbiAgICAgICAgICAgIHRvb2wuZG9BY3RpdmF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkSXRlbU9uR3JvdXBab25lKGUsIGJ1dHRvbikge1xuICAgICAgICBjb25zdCBkYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG4gICAgICAgIGUuZGlhZ3JhbS5zdGFydFRyYW5zYWN0aW9uKCdBZGQgSXRlbSBPbiBHcm91cCBab25lJyk7XG4gICAgICAgIGNvbnN0IGZyb21ub2RlID0gYnV0dG9uLnBhcnQuYWRvcm5lZFBhcnQ7XG4gICAgICAgIGNvbnN0IGRyYWdEYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICAgICAgY29uc3QgZGlhZ3JhbSA9IGZyb21ub2RlLmRpYWdyYW07XG4gICAgICAgIGNvbnN0IG1vZGVsID0gZGlhZ3JhbS5tb2RlbDtcbiAgICAgICAgY29uc3Qgbm9kZWRhdGEgPSBtb2RlbC5jb3B5Tm9kZURhdGEoZHJhZ0RhdGEpO1xuICAgICAgICBtb2RlbC5hZGROb2RlRGF0YSh7XG4gICAgICAgICAgICAuLi5ub2RlZGF0YSxcbiAgICAgICAgICAgIHR5cGU6ICdTdWJTeXN0ZW0nLFxuICAgICAgICAgICAgbmFtZTogJ1tUaXRsZS4uLl0nLFxuICAgICAgICAgICAgbmFtZUl0ZW06ICdbTmFtZS4uLl0nLFxuICAgICAgICAgICAgZ3JvdXA6IGZyb21ub2RlPy5vYj8ua2V5LFxuICAgICAgICB9KTtcbiAgICAgICAgZS5kaWFncmFtLmNvbW1pdFRyYW5zYWN0aW9uKCdBZGQgSXRlbSBPbiBHcm91cCBab25lJyk7XG4gICAgICAgIC8vIGNvbnN0IG5ld25vZGUgPSBkaWFncmFtLmZpbmROb2RlRm9yRGF0YShub2RlZGF0YSk7XG4gICAgICAgIC8vIGNvbnN0IGxpbmtkYXRhID0gbW9kZWwuY29weUxpbmtEYXRhKHt9KTtcbiAgICAgICAgLy8gbW9kZWwuc2V0RnJvbUtleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShmcm9tbm9kZS5kYXRhKSk7XG4gICAgICAgIC8vIG1vZGVsLnNldFRvS2V5Rm9yTGlua0RhdGEobGlua2RhdGEsIG1vZGVsLmdldEtleUZvck5vZGVEYXRhKG5ld25vZGUuZGF0YSkpO1xuICAgICAgICAvLyBtb2RlbC5hZGRMaW5rRGF0YShsaW5rZGF0YSk7XG4gICAgICAgIC8vIGRpYWdyYW0uc2VsZWN0KG5ld25vZGUpO1xuXG4gICAgICAgIC8vIG5ld25vZGUubG9jYXRpb24gPSBuZXcgZ28uUG9pbnQoZnJvbW5vZGUubG9jYXRpb24ueCArIDIwMCwgZnJvbW5vZGUubG9jYXRpb24ueSk7XG4gICAgICAgIC8vIGUuZGlhZ3JhbS5jb21taXRUcmFuc2FjdGlvbignQ3JlYXRlIE5vZGUgYW5kIExpbmsnKTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZUFjdGlvbkdyb3VwKGFjdGlvbnM6IEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OU1tdKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICByZXR1cm4gdGhpcy4kKFxuICAgICAgICAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY2xpY2s6IGZ1bmN0aW9uIChlLCBvYmopIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5vcGVuQWN0aW9uTWVudSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFjdGlvbnMgPSBfLmZpbHRlcihvYmoucGFydD8uWydvYiddPy5hY3Rpb25zID8/IGFjdGlvbnMsIChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbHRlciBJbnNpZ2h0IGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLklOU0lHSFQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gISFvYmoucGFydD8uWydvYiddPy5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPT09IEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmoucGFydD8uWydvYiddPy50eXBlICE9PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLlRZUEVfQ09NUE9ORU5UX1dBVEVSPy5pbmNsdWRlcyhvYmoucGFydD8uWydvYiddPy5zeXN0ZW1UeXBlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5wYXJ0Py5bJ29iJ10/LnRvcG9sb2d5VHlwZSAhPT0gQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRS5XQVRFUiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iai5wYXJ0Py5bJ29iJ10/LnRvcG9sb2d5VHlwZSAhPT0gQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRS5XQVRFUl9QTEFOVF9DRUxMXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSkubWFwKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPX0VDT01QT05FTlRfUExBTlRfVFlQRS5TVEVBTSA9PT0gb2JqLnBhcnQ/Llsnb2InXT8udG9wb2xvZ3lUeXBlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9PT0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLklOU0lHSFRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREFUQV9NQVBQSU5HO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZSA9PT0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMUyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8ucGFydD8uWydvYiddPy5zeXN0ZW1UeXBlID09PSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9UWVBFUy5DT09MSU5HX1RPV0VSXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMU19BTkRfV0laQVJEO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmFjdGlvbnMgPSBmaWx0ZXJlZEFjdGlvbnMubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvbkNsaWNrRm4gPSAoKSA9PiB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuSU5TSUdIVDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5EQVRBX01BUFBJTkc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuSW5zaWdodE1hcHBpbmcuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogb2JqLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVUQUlMUzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFM6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuRkxPV19ERVRBSUxTX0FORF9XSVpBUkQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25PcGVuRGV0YWlsLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG9iai5wYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9OTFlfREVUQUlMUzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbk9wZW5EZXRhaWwuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZTogb2JqLnBhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSUzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbk9wZW5Bc3NldFBhcmFtZXRlci5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlOiBvYmoucGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5SRU5BTUU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tGbiA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmoucGFydD8uZGF0YT8udHlwZSA9PT0gQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub25SZW5hbWUuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCAtIDUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ub2JqLnBhcnQ/LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBMYXlvdXRTZXJ2aWNlLnNldFRvb2xUaXBDb21wb25lbnREYXRhU3RhdGljKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgY29tcG9uZW50OiBSZW5hbWVCb3hDb21wb25lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCAtIDUwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAuLi5vYmoucGFydD8uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lZGl0VGV4dChlLCBvYmopO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5PVVRGTE9XOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrRm4gPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWNrTmV3Tm9kZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8ubWVyZ2Uob2JqLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbk1vdmU6IHNlbGYuZHJhZ05ld05vZGUsIC8vIGRlZmluZWQgYmVsb3csIHRvIHN1cHBvcnQgZHJhZ2dpbmcgZnJvbSB0aGUgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9kcmFnRGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlRFWFRfTk9ERSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0dvanNFZGl0b3JNb2RlbC5BQ1RJT05fUklHSFRfTUVOVV9HUk9VUC5EQVRBX0JPWFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfV8ke21vbWVudCgpLnZhbHVlT2YoKX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW92YWJsZTogc2VsZi5wbGFudFNhdHVzID09PSBBVE9fRVBsYW50VHlwZS5CQVNJQ19QTEFOVCA/IGZhbHNlIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTm90QWxsb3dDb25uZWN0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGxhbnRTYXR1cyA9PT0gQVRPX0VQbGFudFR5cGUuQkFTSUNfUExBTlQgPyB0cnVlIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLkRFTEVURTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVOb2RlKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja0ZuID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5vbk9wZW5DaGFuZ2VJY29uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGU6IG9iai5wYXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5BdG9EZWZhdWx0R29qc0VkaXRvci5BQ1RJT05TW2FjdGlvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrRm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJ2lzTm90RHJhZ05ld05vZGUnLCAoeCkgPT4gIXgpLFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnaXNOb3REZWxldGUnLCAoeCkgPT4gIXgpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnaXNOb3RBY3Rpb24nLCAoeCkgPT4gIXgpLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICB0ZXh0OiAnXFx1ZTQ4OScsXG4gICAgICAgICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBhc3luYyBjbGlja05ld05vZGUoZSwgYnV0dG9uKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBidXR0b24uX2RyYWdEYXRhO1xuICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcbiAgICAgICAgZS5kaWFncmFtLnN0YXJ0VHJhbnNhY3Rpb24oJ0NyZWF0ZSBOb2RlIGFuZCBMaW5rJyk7XG4gICAgICAgIGNvbnN0IGZyb21ub2RlID0gYnV0dG9uLnBhcnQuYWRvcm5lZFBhcnQ7XG5cbiAgICAgICAgLy8gdGhpcy5jcmVhdGVOb2RlQW5kTGluayhidXR0b24uX2RyYWdEYXRhLCBmcm9tbm9kZSk7XG4gICAgICAgIGNvbnN0IGRyYWdEYXRhID0gYnV0dG9uLl9kcmFnRGF0YTtcbiAgICAgICAgY29uc3QgZGlhZ3JhbSA9IGZyb21ub2RlLmRpYWdyYW07XG4gICAgICAgIGNvbnN0IG1vZGVsID0gZGlhZ3JhbS5tb2RlbDtcbiAgICAgICAgY29uc3Qgbm9kZWRhdGEgPSB7IC4uLm1vZGVsLmNvcHlOb2RlRGF0YShkcmFnRGF0YSksIGtleTogVXRpbHNTZXJ2aWNlLmdlbmVyYXRlVVVJRCgpIH07XG4gICAgICAgIG1vZGVsLmFkZE5vZGVEYXRhKHtcbiAgICAgICAgICAgIC4uLm5vZGVkYXRhLFxuICAgICAgICAgICAgaXNFZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHNob3J0ZW5lZE51bWJlcjogMCxcbiAgICAgICAgICAgIGlzRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIGRhdGFDb2xsZWN0aW9uTWV0aG9kOiBBdG9Hb2pzRWRpdG9yTW9kZWwuREFUQV9DT0xMRUNUSU9OX01FVEhPRC5NQU5VQUwsXG4gICAgICAgICAgICBjb2xvcjogQXRvR29qc0VkaXRvck1vZGVsLkNPTE9SX0NPTExFQ1RJT05fTUVUSE9EW0F0b0dvanNFZGl0b3JNb2RlbC5EQVRBX0NPTExFQ1RJT05fTUVUSE9ELk1BTlVBTF0uY29sb3IsXG4gICAgICAgICAgICBncm91cDogZnJvbW5vZGU/Lm9iPy5ncm91cCxcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbmV3bm9kZSA9IGRpYWdyYW0uZmluZE5vZGVGb3JEYXRhKG5vZGVkYXRhKTtcblxuICAgICAgICBjb25zdCBsaW5rZGF0YSA9IG1vZGVsLmNvcHlMaW5rRGF0YSh7fSk7XG4gICAgICAgIG1vZGVsLnNldEZyb21LZXlGb3JMaW5rRGF0YShsaW5rZGF0YSwgbW9kZWwuZ2V0S2V5Rm9yTm9kZURhdGEoZnJvbW5vZGUuZGF0YSkpO1xuICAgICAgICBtb2RlbC5zZXRUb0tleUZvckxpbmtEYXRhKGxpbmtkYXRhLCBtb2RlbC5nZXRLZXlGb3JOb2RlRGF0YShuZXdub2RlLmRhdGEpKTtcbiAgICAgICAgbW9kZWwuYWRkTGlua0RhdGEobGlua2RhdGEpO1xuICAgICAgICBkaWFncmFtLnNlbGVjdChuZXdub2RlKTtcbiAgICAgICAgaWYgKG5vZGVkYXRhPy5tb3ZhYmxlICE9PSB1bmRlZmluZWQgJiYgbm9kZWRhdGE/Lm1vdmFibGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIG5ld25vZGUubW92YWJsZSA9IG5vZGVkYXRhPy5tb3ZhYmxlO1xuICAgICAgICB9XG5cbiAgICAgICAgbmV3bm9kZS5sb2NhdGlvbiA9IG5ldyBnby5Qb2ludChcbiAgICAgICAgICAgIGZyb21ub2RlLmxvY2F0aW9uLnggKyAxNjAsXG4gICAgICAgICAgICBmcm9tbm9kZS5sb2NhdGlvbi55ICsgdGhpcy5maW5kTG9jWUZyb21ub2RlKGZyb21ub2RlKSAqIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVULFxuICAgICAgICApO1xuICAgICAgICBlLmRpYWdyYW0uY29tbWl0VHJhbnNhY3Rpb24oJ0NyZWF0ZSBOb2RlIGFuZCBMaW5rJyk7XG4gICAgfVxuXG4gICAgZmluZExvY1lGcm9tbm9kZShmcm9tbm9kZSkge1xuICAgICAgICAvLyBGaW5kIGxvY2F0aW9uIGF1dG8gcmlnaHRcbiAgICAgICAgY29uc3QgbG9jWUZyb21ub2RlID0gZnJvbW5vZGUuZGF0YT8ubG9jPy5zcGxpdCgnICcpPy5bMV07XG4gICAgICAgIGNvbnN0IGxvY1lBbHJlYWR5RXhpc3Q6IGFueSA9IFtdO1xuICAgICAgICBmcm9tbm9kZS5maW5kTGlua3NPdXRPZigpLmVhY2goZnVuY3Rpb24gKGxpbmspIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldE5vZGUgPSBsaW5rLnRvTm9kZTtcbiAgICAgICAgICAgIGlmICh0YXJnZXROb2RlKSB7XG4gICAgICAgICAgICAgICAgbG9jWUFscmVhZHlFeGlzdC5wdXNoKHRhcmdldE5vZGUuZGF0YT8ubG9jPy5zcGxpdCgnICcpPy5bMV0gLSBsb2NZRnJvbW5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgIHdoaWxlICh0aGlzLmlzRW1wdHlZTG9jKGxvY1lBbHJlYWR5RXhpc3QsIGkpID09PSBudWxsICYmIGkgPCAxMDApIHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5pc0VtcHR5WUxvYyhsb2NZQWxyZWFkeUV4aXN0LCBpKTtcbiAgICB9XG5cbiAgICBpc0VtcHR5WUxvYyhsb2NZQWxyZWFkeUV4aXN0LCBpKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFfLnNvbWUoXG4gICAgICAgICAgICAgICAgbG9jWUFscmVhZHlFeGlzdCxcbiAgICAgICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgeCA8IGkgKiBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCArIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUIC8gMiAmJlxuICAgICAgICAgICAgICAgICAgICB4ID4gaSAqIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkRJU1RBTkNFXzJfT1VUUFVUIC0gQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLyAyLFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFfLnNvbWUoXG4gICAgICAgICAgICAgICAgbG9jWUFscmVhZHlFeGlzdCxcbiAgICAgICAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgICAgICAgICAgeCA8IC1pICogQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgKyBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAvIDIgJiZcbiAgICAgICAgICAgICAgICAgICAgeCA+IC1pICogQXRvRGVmYXVsdEdvanNFZGl0b3IuRElTVEFOQ0VfMl9PVVRQVVQgLSBBdG9EZWZhdWx0R29qc0VkaXRvci5ESVNUQU5DRV8yX09VVFBVVCAvIDIsXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIC1pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNyZWF0ZU5ld05vZGUobmV3bm9kZSkge1xuICAgICAgICB0aGlzLmFkZFRlbXBsYXRlKG5ld25vZGUpO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5zdGFydFRyYW5zYWN0aW9uKCdhZGQgZ3JvdXAgbm9kZScpO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5tb2RlbC5hZGROb2RlRGF0YShuZXdub2RlKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uY29tbWl0VHJhbnNhY3Rpb24oJ2FkZCBncm91cCBub2RlJyk7XG4gICAgfVxuXG4gICAgZGVsZXRlTm9kZShlKSB7XG4gICAgICAgIGUuZGlhZ3JhbS5zdGFydFRyYW5zYWN0aW9uKCdEZWxldGUgZ3JvdXAgbm9kZScpO1xuICAgICAgICBlLmRpYWdyYW0ucmVtb3ZlUGFydHMoZS5kaWFncmFtLnNlbGVjdGlvbik7XG4gICAgICAgIGUuZGlhZ3JhbS5jb21taXRUcmFuc2FjdGlvbignRGVsZXRlIGdyb3VwIG5vZGUnKTtcbiAgICB9XG5cbiAgICBkZWxldGVOb2RlT25EaWFncmFtKGUpIHtcbiAgICAgICAgZS5zdGFydFRyYW5zYWN0aW9uKCdEZWxldGUgZ3JvdXAgbm9kZScpO1xuICAgICAgICBlLnJlbW92ZVBhcnRzKGUuc2VsZWN0aW9uKTtcbiAgICAgICAgZS5jb21taXRUcmFuc2FjdGlvbignRGVsZXRlIGdyb3VwIG5vZGUnKTtcbiAgICB9XG5cbiAgICBpbnNpZ2h0Tm9kZShlKSB7fVxuXG4gICAgZHJhd0xpbmsoZSwgYnV0dG9uKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBidXR0b24ucGFydC5hZG9ybmVkUGFydDtcbiAgICAgICAgY29uc3QgdG9vbCA9IGUuZGlhZ3JhbS50b29sTWFuYWdlci5saW5raW5nVG9vbDtcbiAgICAgICAgdG9vbC5zdGFydE9iamVjdCA9IG5vZGUucG9ydDtcbiAgICAgICAgZS5kaWFncmFtLmN1cnJlbnRUb29sID0gdG9vbDtcbiAgICAgICAgdG9vbC5kb0FjdGl2YXRlKCk7XG4gICAgfVxuXG4gICAgbWFrZVBvcnRHcm91cChuYW1lLCBhbGlnbiwgc3BvdCwgb3V0cHV0LCBpbnB1dCkge1xuICAgICAgICBjb25zdCBob3Jpem9udGFsID0gYWxpZ24uZXF1YWxzKGdvLlNwb3QuVG9wKSB8fCBhbGlnbi5lcXVhbHMoZ28uU3BvdC5Cb3R0b20pO1xuICAgICAgICByZXR1cm4gdGhpcy4kKFxuICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjOTE5Q0E1JyxcbiAgICAgICAgICAgICAgICB3aWR0aDogNDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiA0MCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGFsaWduLFxuICAgICAgICAgICAgICAgIHN0cmV0Y2g6IGhvcml6b250YWwgPyBnby5HcmFwaE9iamVjdC5Ib3Jpem9udGFsIDogZ28uR3JhcGhPYmplY3QuVmVydGljYWwsXG4gICAgICAgICAgICAgICAgcG9ydElkOiBuYW1lLFxuICAgICAgICAgICAgICAgIGZyb21TcG90OiBzcG90LFxuICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogb3V0cHV0LFxuICAgICAgICAgICAgICAgIHRvU3BvdDogc3BvdCxcbiAgICAgICAgICAgICAgICB0b0xpbmthYmxlOiBpbnB1dCxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5DZW50ZXIsIC8vIHThuq1wIHRydW5nIHbDoG8gdHJ1bmcgdMOibSBj4bunYSBQYW5lbFxuICAgICAgICAgICAgICAgIC8vIG1vdXNlRW50ZXI6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAvLyAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgLy8gICAgIDogKGUsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIGNvbnN0IHRleHRCbG9jayA9IChwYW5lbCBhcyBhbnkpPy5maW5kT2JqZWN0KCd0ZXh0QmxvY2snKSBhcyBnby5UZXh0QmxvY2sgfCBudWxsO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBpZiAodGV4dEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAvLyAmJiBvdXRwdXRcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHRleHRCbG9jay52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGNhc2UgJ1InOiB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDI0MyAxNDQgMTcxKSc7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBjYXNlICdMJzoge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3JnYigxMDMsMTUxLDIwNyknO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3JnYigyNDMgMTQ0IDE3MSknO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICAvLyBtb3VzZUxlYXZlOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgLy8gICAgID8gbnVsbFxuICAgICAgICAgICAgICAgIC8vICAgICA6IChlLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBjb25zdCB0ZXh0QmxvY2sgPSAocGFuZWwgYXMgYW55KS5maW5kT2JqZWN0KCd0ZXh0QmxvY2snKSBhcyBnby5UZXh0QmxvY2sgfCBudWxsO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgICBpZiAodGV4dEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICB0ZXh0QmxvY2sudmlzaWJsZSA9IGZhbHNlOyAvLyDhuqhuIFRleHRCbG9jayBraGkgcuG7nWkga2jhu49pIFBhbmVsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ0VsbGlwc2UnLCB7XG4gICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJywgLy8gQmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY2lyY2xlXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzkxOUNBNScsIC8vIEJvcmRlciBjb2xvciBvZiB0aGUgY2lyY2xlXG4gICAgICAgICAgICAgICAgd2lkdGg6IDQwLCAvLyBNYXRjaCB0aGUgcGFuZWwncyB3aWR0aFxuICAgICAgICAgICAgICAgIGhlaWdodDogNDAsIC8vIE1hdGNoIHRoZSBwYW5lbCdzIGhlaWdodFxuICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgIC8vIHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAvLyAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICBuYW1lOiAndGV4dEJsb2NrJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgLy8gICAgICAgICB0ZXh0OiAnXFx1ZjBkYScsIC8vIE3DoyBVbmljb2RlIHTGsMahbmcg4bupbmcgduG7m2kgZmEtY2FyZXQtbGVmdFxuICAgICAgICAgICAgLy8gICAgICAgICBmb250OiAnOTAwIDEycHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAvLyAgICAgICAgIHN0cm9rZTogJ3doaXRlJywgLy8gxJDhurd0IG3DoHUgY2jhu68gdGjDoG5oIG3DoHUgdHLhuq9uZ1xuICAgICAgICAgICAgLy8gICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgdmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJywgKF8pID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNhc2UgJ0InOiB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHVmMGQ3JztcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGNhc2UgJ0wnOlxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgY2FzZSAnUic6IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdWYwZGEnO1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkNyc7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAgIC8vICksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgbWFrZVBvcnQobmFtZSwgYWxpZ24sIHNwb3QsIG91dHB1dCwgaW5wdXQpIHtcbiAgICAgICAgLy8gaWYgKHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkpIHtcbiAgICAgICAgLy8gICAgIHJldHVybiB7fTtcbiAgICAgICAgLy8gfVxuICAgICAgICBjb25zdCBob3Jpem9udGFsID0gYWxpZ24uZXF1YWxzKGdvLlNwb3QuVG9wKSB8fCBhbGlnbi5lcXVhbHMoZ28uU3BvdC5Cb3R0b20pO1xuICAgICAgICAvLyBjb25zdCB2ZXJ0aWNhbCA9IGFsaWduLmVxdWFscyhnby5TcG90LkxlZnQpIHx8IGFsaWduLmVxdWFscyhnby5TcG90LlJpZ2h0KTtcbiAgICAgICAgLy8gdGhlIHBvcnQgaXMgYmFzaWNhbGx5IGp1c3QgYSB0cmFuc3BhcmVudCByZWN0YW5nbGUgdGhhdCBzdHJldGNoZXMgYWxvbmcgdGhlIHNpZGUgb2YgdGhlIG5vZGUsXG4gICAgICAgIC8vIGFuZCBiZWNvbWVzIGNvbG9yZWQgd2hlbiB0aGUgbW91c2UgcGFzc2VzIG92ZXIgaXRcbiAgICAgICAgcmV0dXJuIHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBob3Jpem9udGFsID8gTmFOIDogOCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6ICFob3Jpem9udGFsID8gTmFOIDogOCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGFsaWduLFxuICAgICAgICAgICAgICAgIHN0cmV0Y2g6IGhvcml6b250YWwgPyBnby5HcmFwaE9iamVjdC5Ib3Jpem9udGFsIDogZ28uR3JhcGhPYmplY3QuVmVydGljYWwsXG4gICAgICAgICAgICAgICAgcG9ydElkOiBuYW1lLFxuICAgICAgICAgICAgICAgIGZyb21TcG90OiBzcG90LFxuICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogb3V0cHV0LFxuICAgICAgICAgICAgICAgIHRvU3BvdDogc3BvdCxcbiAgICAgICAgICAgICAgICB0b0xpbmthYmxlOiBpbnB1dCxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5DZW50ZXIsIC8vIHThuq1wIHRydW5nIHbDoG8gdHJ1bmcgdMOibSBj4bunYSBQYW5lbFxuICAgICAgICAgICAgICAgIG1vdXNlRW50ZXI6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogKGUsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRleHRCbG9jayA9IChwYW5lbCBhcyBhbnkpPy5maW5kT2JqZWN0KCd0ZXh0QmxvY2snKSBhcyBnby5UZXh0QmxvY2sgfCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAmJiBvdXRwdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRCbG9jay52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1InOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmVsLmJhY2tncm91bmQgPSAncmdiKDI0MyAxNDQgMTcxKSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3JnYigxMDMsMTUxLDIwNyknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYW5lbC5iYWNrZ3JvdW5kID0gJ3JnYigyNDMgMTQ0IDE3MSknO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgICAgICBtb3VzZUxlYXZlOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5XG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IChlLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZXh0QmxvY2sgPSAocGFuZWwgYXMgYW55KS5maW5kT2JqZWN0KCd0ZXh0QmxvY2snKSBhcyBnby5UZXh0QmxvY2sgfCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGV4dEJsb2NrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QmxvY2sudmlzaWJsZSA9IGZhbHNlOyAvLyDhuqhuIFRleHRCbG9jayBraGkgcuG7nWkga2jhu49pIFBhbmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGE/LmlzTm90QWxsb3dDb25uZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRhdGE/LnNlbGVjdGFibGUgPT09IGZhbHNlICYmICFkYXRhPy5pc0FsbG93Q29ubmVjdCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkYXRhPy5mbG93T2ZQbGFudENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGE/LmZsb3dPZlBsYW50Q2VsbCA9PT0gQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04uSU5GTE9XICYmIG5hbWUgPT09ICdMJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGE/LmZsb3dPZlBsYW50Q2VsbCA9PT0gQVRPX0VOVU1fRkxPV19ESVJFQ1RJT04uT1VURkxPVyAmJiBuYW1lID09PSAnUicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ0InOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdSJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFkYXRhPy5pc05vdFNlbGVjdE91dHB1dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXNlICdUJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTCc6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhZGF0YT8uaXNOb3RTZWxlY3RJbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLFxuXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ3RleHRCbG9jaycsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogJ1xcdWYwZGEnLCAvLyBNw6MgVW5pY29kZSB0xrDGoW5nIOG7qW5nIHbhu5tpIGZhLWNhcmV0LWxlZnRcbiAgICAgICAgICAgICAgICAgICAgZm9udDogJzkwMCAxMnB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsIC8vIMSQ4bq3dCBtw6B1IGNo4buvIHRow6BuaCBtw6B1IHRy4bqvbmdcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScsIChfKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdCJzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFx1ZjBkNyc7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdMJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ1InOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcXHVmMGRhJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdWYwZDcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHJldHVybiB0aGlzLiQoZ28uU2hhcGUsIHtcbiAgICAgICAgLy8gICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsIC8vIGNoYW5nZWQgdG8gYSBjb2xvciBpbiB0aGUgbW91c2VFbnRlciBldmVudCBoYW5kbGVyXG4gICAgICAgIC8vICAgICBzdHJva2VXaWR0aDogMCwgLy8gbm8gc3Ryb2tlXG4gICAgICAgIC8vICAgICB3aWR0aDogaG9yaXpvbnRhbCA/IE5hTiA6IDgsIC8vIGlmIG5vdCBzdHJldGNoaW5nIGhvcml6b250YWxseSwganVzdCA4IHdpZGVcbiAgICAgICAgLy8gICAgIGhlaWdodDogIWhvcml6b250YWwgPyBOYU4gOiA4LCAvLyBpZiBub3Qgc3RyZXRjaGluZyB2ZXJ0aWNhbGx5LCBqdXN0IDggdGFsbFxuICAgICAgICAvLyAgICAgYWxpZ25tZW50OiBhbGlnbiwgLy8gYWxpZ24gdGhlIHBvcnQgb24gdGhlIG1haW4gU2hhcGVcbiAgICAgICAgLy8gICAgIHN0cmV0Y2g6IGhvcml6b250YWwgPyBnby5HcmFwaE9iamVjdC5Ib3Jpem9udGFsIDogZ28uR3JhcGhPYmplY3QuVmVydGljYWwsXG4gICAgICAgIC8vICAgICBwb3J0SWQ6IG5hbWUsIC8vIGRlY2xhcmUgdGhpcyBvYmplY3QgdG8gYmUgYSBcInBvcnRcIlxuICAgICAgICAvLyAgICAgZnJvbVNwb3Q6IHNwb3QsIC8vIGRlY2xhcmUgd2hlcmUgbGlua3MgbWF5IGNvbm5lY3QgYXQgdGhpcyBwb3J0XG4gICAgICAgIC8vICAgICBmcm9tTGlua2FibGU6IG91dHB1dCwgLy8gZGVjbGFyZSB3aGV0aGVyIHRoZSB1c2VyIG1heSBkcmF3IGxpbmtzIGZyb20gaGVyZVxuICAgICAgICAvLyAgICAgdG9TcG90OiBzcG90LCAvLyBkZWNsYXJlIHdoZXJlIGxpbmtzIG1heSBjb25uZWN0IGF0IHRoaXMgcG9ydFxuICAgICAgICAvLyAgICAgdG9MaW5rYWJsZTogaW5wdXQsIC8vIGRlY2xhcmUgd2hldGhlciB0aGUgdXNlciBtYXkgZHJhdyBsaW5rcyB0byBoZXJlXG4gICAgICAgIC8vICAgICBjdXJzb3I6ICdwb2ludGVyJywgLy8gc2hvdyBhIGRpZmZlcmVudCBjdXJzb3IgdG8gaW5kaWNhdGUgcG90ZW50aWFsIGxpbmsgcG9pbnRcbiAgICAgICAgLy8gICAgIG1vdXNlRW50ZXI6IChlLCBwb3J0KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgLy8gdGhlIFBPUlQgYXJndW1lbnQgd2lsbCBiZSB0aGlzIFNoYXBlXG4gICAgICAgIC8vICAgICAgICAgaWYgKCFlLmRpYWdyYW0uaXNSZWFkT25seSAmJiBvdXRwdXQpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgcG9ydC5maWxsID0gJ3JnYmEoMjU1LDAsMjU1LDAuNSknXG4gICAgICAgIC8vICAgICAgICAgfTtcbiAgICAgICAgLy8gICAgIH0sXG4gICAgICAgIC8vICAgICBtb3VzZUxlYXZlOiAoZSwgcG9ydCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIHJldHVybiAocG9ydC5maWxsID0gJ3RyYW5zcGFyZW50Jyk7XG4gICAgICAgIC8vICAgICB9LFxuICAgICAgICAvLyB9KTtcbiAgICB9XG5cbiAgICBtYWtlR3JvdXBCYXNpY0NvbXBvbmVudChpY29uLCB0aXRsZSwgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiA4MCwgaDogODAgfSkge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkdyb3VwLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIGxheW91dDogdGhpcy4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KSxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG4gICAgICAgICAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gbW92YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3RhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGRyYWdDb21wdXRhdGlvbjogKG5vZGUsIHB0LCBncmlkcHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcHQueCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLnJvdW5kKHB0LnggLyBBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX1dJRFRIKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX1dJRFRIO1xuICAgICAgICAgICAgICAgICAgICBwdC55ID1cbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgucm91bmQocHQueSAvIEF0b0dvanNFZGl0b3JNb2RlbC5CQVNJQ19HUklEX1NJWkVfSEVJR0hUKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICBBdG9Hb2pzRWRpdG9yTW9kZWwuQkFTSUNfR1JJRF9TSVpFX0hFSUdIVDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHB0O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vIG1pblNpemU6IG5ldyBnby5TaXplKEF0b0dvanNFZGl0b3JNb2RlbC5CQVNJQ19HUklEX1NJWkVfV0lEVEgsIEF0b0dvanNFZGl0b3JNb2RlbC5CQVNJQ19HUklEX1NJWkVfSEVJR0hUKSxcbiAgICAgICAgICAgICAgICBtaW5TaXplOiBuZXcgZ28uU2l6ZSgxLCAxKSxcbiAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSgxLCAxKSxcbiAgICAgICAgICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZSgxMDAsIDEwMCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlBsYWNlaG9sZGVyKSxcbiAgICAgICAgICAgICAgICAvLyB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAvLyB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgICAgICAgLy8gICAgIHJvdzogMCxcbiAgICAgICAgICAgIC8vICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAvLyAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAvLyAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgIC8vICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgLy8gICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ2tleScpLm1ha2VUd29XYXkoKSwpLFxuXG4gICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAvLyAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgIC8vICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BMZWZ0LFxuICAgICAgICAgICAgLy8gICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMCwgLTEwLCAtMTApLFxuICAgICAgICAgICAgLy8gICAgICAgICAvLyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDUwLCAwKSxcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gICAgIHRoaXMuJChcbiAgICAgICAgICAgIC8vICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAvLyAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgIC8vICAgICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAvLyAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAvLyBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg0MCwgNDApLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAgIC8vICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGNvbHVtbjogMSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBkZWZhdWx0QWxpZ25tZW50OiBnby5TcG90LkxlZnQsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIDAsIDIwKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB0aXRsZSwge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgNSwgMTApLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCBOYU4pLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDMsIDMsIDEwKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCA0MCksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgd3JhcDogZ28uVGV4dEJsb2NrLk5vbmUsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbmUgYSB0b29sdGlwIGZvciBlYWNoIG5vZGUgdGhhdCBkaXNwbGF5cyB0aGUgY29sb3IgYXMgdGV4dFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7IG1hcmdpbjogNCB9LCBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykpLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICApLCAvLyBlbmQgb2YgQWRvcm5tZW50XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgICksXG4gICAgICAgICAgICAvLyAgICAgICAgICksXG4gICAgICAgICAgICAvLyAgICAgKSxcbiAgICAgICAgICAgIC8vICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KHRpdGxlLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlR3JvdXBUZW1wbGF0ZShpY29uLCB0aXRsZSwgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiA4MCwgaDogODAgfSkge1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkdyb3VwLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5Gb3JjZURpcmVjdGVkTGF5b3V0ICwge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyAgICAgZGlyZWN0aW9uOiAwLFxuICAgICAgICAgICAgICAgIC8vICAgICAvLyAgICAgc2V0c1BvcnRTcG90czogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIH0pLFxuXG4gICAgICAgICAgICAgICAgLy8gbGF5b3V0OiB0aGlzLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgZGlyZWN0aW9uOiAwLFxuICAgICAgICAgICAgICAgIC8vICAgICBzZXRzUG9ydFNwb3RzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyB9KSxcblxuICAgICAgICAgICAgICAgIGxheW91dDogdGhpcy4kKGdvLkxheW91dCksXG5cbiAgICAgICAgICAgICAgICAvLyAvLyAgICAgLy8gYWRvcm5tZW50IHdoZW4gYSBncm91cCBpcyBzZWxlY3RlZFxuICAgICAgICAgICAgICAgIC8vIC8vICAgICAvLyBzZWxlY3Rpb25BZG9ybm1lbnRUZW1wbGF0ZTogdGhpcy4kKFxuICAgICAgICAgICAgICAgIC8vIC8vICAgICAvLyAgICAgZ28uQWRvcm5tZW50LFxuICAgICAgICAgICAgICAgIC8vIC8vICAgICAvLyAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIC8vIC8vICAgICAvLyAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUmVjdGFuZ2xlJywgeyBmaWxsOiBudWxsLCBzdHJva2U6ICdkb2RnZXJibHVlJywgc3Ryb2tlV2lkdGg6IDggfSksXG4gICAgICAgICAgICAgICAgLy8gLy8gICAgIC8vICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIpLFxuICAgICAgICAgICAgICAgIC8vIC8vICAgICAvLyApLFxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2xheW91dCcsICdsYXlvdXQnLCAoeCkgPT5cbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gdGhpcy4kKGdvLkZvcmNlRGlyZWN0ZWRMYXlvdXQgLCB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGRpcmVjdGlvbjogMCxcbiAgICAgICAgICAgIC8vICAgICAgICAgc2V0c1BvcnRTcG90czogZmFsc2UsXG4gICAgICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1pblNpemU6IG5ldyBnby5TaXplKDQwMCwgNDAwKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oNjAsIDIwLCAyMCwgMjApIH0pLFxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgLy8gICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgLy8gICAgICdUYWJsZScsXG4gICAgICAgICAgICAvLyAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuVG9wTGVmdCxcbiAgICAgICAgICAgIC8vICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIC0xMCwgLTEwKSxcbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHRpdGxlLCB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgIC8vICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDUsIDMpLFxuICAgICAgICAgICAgLy8gICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAvLyAgICAgICAgIGZvbnQ6ICdub3JtYWwgOHB0IEFyaWFsJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uUGljdHVyZSwgaWNvbiwge1xuICAgICAgICAgICAgLy8gICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAvLyAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAvLyAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDQwLCA0MCksXG4gICAgICAgICAgICAvLyAgICAgICAgIGltYWdlU3RyZXRjaDogZ28uR3JhcGhPYmplY3QuVW5pZm9ybSxcbiAgICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAgIC8vICAgICB0aGlzLiQoXG4gICAgICAgICAgICAvLyAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgIC8vICAgICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgcm93OiAyLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAzLCAzLCAzKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDQwKSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHN0cm9rZTogJyMwMDBENDInLFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgZm9udDogJ2JvbGQgOHB0IEFyaWFsJyxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgIC8vICAgICAgICAgfSxcbiAgICAgICAgICAgIC8vICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgIC8vICAgICAgICAge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgLy8gZGVmaW5lIGEgdG9vbHRpcCBmb3IgZWFjaCBub2RlIHRoYXQgZGlzcGxheXMgdGhlIGNvbG9yIGFzIHRleHRcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJCgnVG9vbFRpcCcsIHRoaXMuJChnby5UZXh0QmxvY2ssIHsgbWFyZ2luOiA0IH0sIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSkpLCAvLyBlbmQgb2YgQWRvcm5tZW50XG4gICAgICAgICAgICAvLyAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyAgICAgKSxcbiAgICAgICAgICAgIC8vICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIC8vICksXG5cbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcExlZnQsXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLCAtMTAsIC0xMCksXG4gICAgICAgICAgICAgICAgICAgIC8vIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgNTAsIDApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFNpemU6IG5ldyBnby5TaXplKDQwLCA0MCksXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRBbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHRpdGxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigzLCAzLCA1LCAxMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ25vcm1hbCAxMHB0IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMywgMywgMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIDQwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzAwMEQ0MicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdib2xkIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlZmluZSBhIHRvb2x0aXAgZm9yIGVhY2ggbm9kZSB0aGF0IGRpc3BsYXlzIHRoZSBjb2xvciBhcyB0ZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHsgbWFyZ2luOiA0IH0sIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksIC8vIGVuZCBvZiBBZG9ybm1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUltYWdlVGVtcGxhdGUoKSB7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHpPcmRlcjogMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc2VsZWN0YWJsZScsICdzZWxlY3RhYmxlJyksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgQXRvR29qc0VkaXRvck1vZGVsLklNQUdFX1JPX1dBVEVSX1RSRUFUTUVOVF9QQVRILFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF4U2l6ZTogbmV3IGdvLlNpemUoNTAwLCA1MDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEzMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdtYXJnaW4nLCAnbWFyZ2luJyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd3aWR0aCcsICd3aWR0aCcpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJ2hlaWdodCcpLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc291cmNlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8uc291cmNlID8gZGF0YT8uc291cmNlIDogQXRvR29qc0VkaXRvck1vZGVsLklNQUdFX1JPX1dBVEVSX1RSRUFUTUVOVF9QQVRIO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuSU1BR0VfVEVNUExBVEUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VQYXJhbVRhYmxlKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhcnQsXG4gICAgICAgICAgICAnVmVydGljYWwnLFxuICAgICAgICAgICAgLy8gdGhpcy4kKGdvLlNoYXBlLCB7IGZpbGw6ICcjRTZGMEY3Jywgc3Ryb2tlOiAnIzAwNjNBOScsIHN0cm9rZVdpZHRoOiAzLCBnZW9tZXRyeVN0cmluZzogJ00gNSAwIEwgOTUgMCBRIDEwMCAwIDEwMCA1IEwgMTAwIDk1IFEgMTAwIDEwMCA5NSAxMDAgTCA1IDEwMCBRIDAgMTAwIDAgOTUgTCAwIDUgUSAwIDAgNSAwJyAgfSksXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgek9yZGVyOiAyLFxuICAgICAgICAgICAgICAgIC8vIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMjAwKSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdwYWRkaW5nJywgJ3BhZGRpbmcnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRhdGE/LnZpc2libGUgPT09ICdib29sZWFuJyA/IGRhdGE/LnZpc2libGUgOiB0cnVlO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAvLyBIZWFkZXJcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzdHJldGNoOiBnby5HcmFwaE9iamVjdC5GaWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5TaXplOiBuZXcgZ28uU2l6ZSgxNTAsIDI3KSxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIC02LCAwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiAhIWRhdGE/LnRpdGxlKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlNoYXBlLFxuICAgICAgICAgICAgICAgICAgICAnUm91bmRlZFJlY3RhbmdsZScsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcjE6IDUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmaWxsJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8uY29sb3I7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc3Ryb2tlJywgJycsIChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8uY29sb3I7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJzE0cHggc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ3RpdGxlJyksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uU2hhcGUsXG4gICAgICAgICAgICAgICAgJ1JlY3RhbmdsZScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDYsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAtNiwgMCksXG4gICAgICAgICAgICAgICAgICAgIHN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LkZpbGwsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnZmlsbCcsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8uY29sb3I7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8uY29sb3I7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEpID0+ICEhZGF0YT8udGl0bGUpLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5TaGFwZSxcbiAgICAgICAgICAgICAgICAgICAgJ1JvdW5kZWRSZWN0YW5nbGUnLFxuICAgICAgICAgICAgICAgICAgICB7IGZpbGw6ICcjRTZGMEY3Jywgc3Ryb2tlOiAnIzAwNjNBOScsIHN0cm9rZVdpZHRoOiA0LCBwYXJhbWV0ZXIxOiA1IH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmaWxsJywgJ2JnQ29sb3InKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdib3JkZXJUYWJsZScpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGRlZmF1bHRzIGZvciBhbGwgcm93cyBhbmQgY29sdW1uczpcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMS41LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFJvd1NlcGFyYXRvclN0cm9rZTogJyMwMDYyQTknLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbHVtblNlcGFyYXRvclN0cm9rZTogJyMwMDYyQTknLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFNlcGFyYXRvclBhZGRpbmc6IG5ldyBnby5NYXJnaW4oNSwgMTAsIDUsIDEwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2RlZmF1bHRSb3dTZXBhcmF0b3JTdHJva2UnLCAnYm9yZGVyVGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2RlZmF1bHRDb2x1bW5TZXBhcmF0b3JTdHJva2UnLCAnYm9yZGVyVGFibGUnKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICAnVGFibGVSb3cnLFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgeyByb3c6IDAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdyb3cgMSBjb2wgMScsIHsgY29sdW1uOiAwLCBtYXJnaW46IDIgfSksXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAncm93IDEgY29sIDInLCB7IGNvbHVtbjogMSwgbWFyZ2luOiAyIH0pLFxuICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICdUYWJsZVJvdycsXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB7IHJvdzogMSB9LFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgJ3JvdyAyIGNvbCAxJywgeyBjb2x1bW46IDAsIG1hcmdpbjogMiB9KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdyb3cgMiBjb2wgMicsIHsgY29sdW1uOiAxLCBtYXJnaW46IDIgfSksXG4gICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdpdGVtQXJyYXknLCAnZGF0YVRhYmxlJyksXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0ZW1UZW1wbGF0ZTogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIG5ldyBnby5CaW5kaW5nKCdyb3cnLCAnaW5kZXhSb3cnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAvLyBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJ2hlaWdodCcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgQVJST1csXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSgyMCwgNDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgLy8gaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBuZXcgZ28uQmluZGluZygnc291cmNlJywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgLy8gcGFuZWwucGFydD8uZGF0YT8uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIHJldHVybiBkYXRhPy5pc0NyZWF0ZWQgPyBwYW5lbD8uJHAgOiBBUlJPV19HUkFZO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gKSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVRlbXBsYXRlOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYmxlUm93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iai5wYW5lbC5wYXJ0LmRhdGE/LmRhdGFUYWJsZVtvYmoucm93XT8uaXNFZGl0YWJsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9uQ2xpa1BhcmFtT2ZUYWJsZS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5vYmoucGFuZWwucGFydC5kYXRhPy5kYXRhVGFibGVbb2JqLnJvd10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBjb2x1bW46IDAsIG1hcmdpbjogMiwgdGV4dEFsaWduOiAnbGVmdCcsIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0IH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/Lm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRTZXBhcmF0b3JQYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXRjaDogZ28uR3JhcGhPYmplY3QuRmlsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ21pblNpemUnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm4gcGFuZWwucGFydD8uZGF0YT8ubWluU2l6ZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBnby5TaXplKHBhbmVsLnBhcnQ/LmRhdGE/Lm1pblNpemVWYWx1ZT8ud2lkdGgsIE5hTik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiBnby5UZXh0QmxvY2suT3ZlcmZsb3dFbGxpcHNpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb29sVGlwJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgJHtkYXRhPy50YWdOYW1lIHx8ICcnfSBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSR7ZGF0YT8udmFsdWV9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISF0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ICYmIGRhdGE/LnRhZ05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEhZGF0YT8udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLmNvbG9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWF4U2l6ZScsICcnLCAoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZ28uU2l6ZShkYXRhPy5tYXhTaXplVmFsdWUgfHwgMTkwLCAxNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCA1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IElDT05TX0JBU0U2NFtcInVmMDQ0XCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhPy50b29sVGlwQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsIChkYXRhKSA9PiAhIWRhdGE/LnRvb2xUaXBBY3Rpb24pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnJywgKGRhdGEsIHBhbmVsKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnb3BhY2l0eScsICcnLCAoZGF0YSwgcGFuZWwpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8uaXNFZGl0YWJsZSA9PT0gZmFsc2UgPyAwLjYgOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ub2RlVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QQVJBTV9UQUJMRSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZU1hc3NCYWxhbmNlKCkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLlBhcnQsXG4gICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcbiAgICAgICAgICAgICAgICAvLyBTZXQgZGVmYXVsdHMgZm9yIGFsbCByb3dzIGFuZCBjb2x1bW5zOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogNCxcbiAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNDUwLCAzMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICd0b29sdGlwJyksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnTWFzcyBCYWxhbmNlOicsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmb250JywgJ2ZvbnQnKSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQUxJWkFSSU4sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdmb250JywgJ2ZvbnQnKSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3N0cm9rZScsICdjb2xvclZhbHVlJyksXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJycsIChkYXRhLCBwYW5lbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE/LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldChBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuTUFTU19CQUxBTkNFLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlR3JvdXBST1BsYW50VGVtcGxhdGUoaWNvbiwgdGl0bGUsIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH0pIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Hcm91cCxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5MYXlvdXQpLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZShOYU4sIDYwMCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ1RhYmxlJyxcblxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTSEFQRV9LRVknLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJyNGQ0ZDRkQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMTUsIDAsIDAsIDApIH0pLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgICAgICAgICBST19MSU5FX0RJUlRZLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd2aXNpYmxlJywgJycsICh4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geD8uaXNWaWV3R2VuZXJhbCAmJiB4Py5oYXNPdXRGbG93ID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVGFibGUnLCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgMCwgMTgzKSxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIC8vIHN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlZlcnRpY2FsLFxuICAgICAgICAgICAgICAgIHBvcnRJZDogJ0luZmxvdycsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAsIDAsIDE1MCksXG4gICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVGFibGUnLCB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudDogbmV3IGdvLlNwb3QoMCwgMCwgOTcwLCAzMTUpLFxuICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICBwb3J0SWQ6ICdPdXRGbG93X0NsZWFuJyxcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHkgPyAnJyA6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgdG9TcG90OiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgICAgICAvLyBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDQ4MCwgNTI1KSxcbiAgICAgICAgICAgICAgICAgICAgLy8gYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCA0NzUsIDU1MiksXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LkJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgcG9ydElkOiAnT3V0Rmxvd19EaXJ0eScsXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIHRvU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdhbGlnbm1lbnQnLCAnJywgKHgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0Rmxvd1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgZ28uU3BvdCgwLCAwLCA0NzUsIDU1MilcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IGdvLlNwb3QoMCwgMCwgNDgwLCA1MjUpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgbWFrZUdyb3VwQm9pbGVyVGVtcGxhdGUoaWNvbiwgdGl0bGUsIHNpemU6IHsgdzogbnVtYmVyOyBoOiBudW1iZXIgfSA9IHsgdzogODAsIGg6IDgwIH0pIHtcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Hcm91cCxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoTmFOLCA2MDApLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdzZWxlY3RhYmxlJywgJ3NlbGVjdGFibGUnKSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnUm91bmRlZFJlY3RhbmdsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NIQVBFX0tFWScsXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICcjRkNGQ0ZEJyxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuUkVTT0xVVElPTl9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgICAgICB7IHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCkgfSxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnU3BvdCcsIHtcbiAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLjUsIDAsIDgzKSxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgIHBvcnRJZDogJ0luZmxvdycsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgxLCAxLCAtMjE1LCAwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgT1VURkxPV19MSU5FX0RJUlRZLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0RmxvdyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkJvdHRvbUxlZnQsXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgcG9ydElkOiAnT3V0RmxvdycsXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGZyb21MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VHcm91cENvb2xpbmdUb3dlclRlbXBsYXRlKGljb24sIHRpdGxlLCBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IDgwLCBoOiA4MCB9KSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDMwLCAwLCAwKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICByb3c6IDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMCwgMCwgMCwgMCksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSb3VuZGVkUmVjdGFuZ2xlJywge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0hBUEVfS0VZJyxcbiAgICAgICAgICAgICAgICAgICAgZmlsbDogJyNGQ0ZDRkQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcblxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgeyBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRoaXMuJChnby5QYW5lbCwgJ1RhYmxlJywge1xuICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IG5ldyBnby5TcG90KDAsIDAsIDAsIDUzMyksXG4gICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IGdvLlNwb3QuQm90dG9tLFxuICAgICAgICAgICAgICAgIHBvcnRJZDogJ0luZmxvdycsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiB0aGlzLl9pbml0aWFsT3B0aW9ucy5pc1JlYWRPbmx5ID8gJycgOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICBmcm9tTGlua2FibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9MaW5rYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLjUsIDEsIDIzLCAwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGljdHVyZSxcbiAgICAgICAgICAgICAgICAgICAgT1VURkxPV19MSU5FX0RJUlRZLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndmlzaWJsZScsICcnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHg/LmlzVmlld0dlbmVyYWwgJiYgeD8uaGFzT3V0RmxvdyA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBuZXcgZ28uU3BvdCgwLCAwLCAwLCAxOCksXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgcG9ydElkOiAnT3V0RmxvdycsXG4gICAgICAgICAgICAgICAgICAgIGN1cnNvcjogdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seSA/ICcnIDogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICBmcm9tU3BvdDogZ28uU3BvdC5DZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIHRvU3BvdDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgZnJvbUxpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0b0xpbmthYmxlOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgZ3JvdXBQbGFudENlbGxUZW1wbGF0ZShpY29uLCB0aXRsZSwgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiA4MCwgaDogODAgfSkge1xuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgICAgbGV0IG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICBnby5Hcm91cCxcbiAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBsYXlvdXQ6IHRoaXMuJChnby5MYXlvdXQpLFxuICAgICAgICAgICAgICAgIC8vIGxheW91dDogdGhpcy4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KSxcbiAgICAgICAgICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgLy8gbGF5ZXJOYW1lOiAnRm9yZWdyb3VuZCcsXG4gICAgICAgICAgICAgICAgLy8gd2FzU3ViR3JhcGhFeHBhbmRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbW92YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2VsZWN0YWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgYXZvaWRhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyByZXNpemFibGU6IHRydWUsXG5cbiAgICAgICAgICAgICAgICAvLyByZXNpemFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIHdpZHRoOiBkYXRhPy5vYj8ubWluV2l0aCA/PyA1MCxcbiAgICAgICAgICAgICAgICAvLyBoZWlnaHQ6IDUwMCxcblxuICAgICAgICAgICAgICAgIC8vIGlzU3ViR3JhcGhFeHBhbmRlZDogdHJ1ZSwgLy8gZW5zdXJlIHRoZSBncm91cCBpcyBhbHdheXMgZXhwYW5kZWRcbiAgICAgICAgICAgICAgICAvLyBjb21wdXRlc0JvdW5kc0FmdGVyRHJhZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGVzRHJhZ0Ryb3BGb3JNZW1iZXJzOiB0cnVlLCAvLyBoYW5kbGUgZHJhZy1hbmQtZHJvcCBldmVudHMgZm9yIGl0cyBtZW1iZXIgbm9kZXNcblxuICAgICAgICAgICAgICAgIC8vIG1heFNpemU6IG5ldyBnby5TaXplKDUwMCwgNTAwKSxcbiAgICAgICAgICAgICAgICAvLyBtaW5TaXplOiBuZXcgZ28uU2l6ZSg1MDAsIDUwMCksXG5cbiAgICAgICAgICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgLy8gbGF5ZXJOYW1lOiBESUFHUkFNLkxBWUVSUy5CQUNLR1JPVU5ELFxuXG4gICAgICAgICAgICAgICAgLy8gbW91c2VEcm9wOiBmdW5jdGlvbiAoZSwgZ3JwKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIGRpc2FsbG93IGRyb3BwaW5nIGFueXRoaW5nIG9udG8gYW4gQWRvcm5tZW50XG4gICAgICAgICAgICAgICAgLy8gICAgIGlmIChncnAgaW5zdGFuY2VvZiBnby5BZG9ybm1lbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgICAgIC8vIGRyYWdDb21wdXRhdGlvbjogZnVuY3Rpb24gKG5vZGUsIHB0LCBncmlkUHQpIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgbGV0IGdycCA9IG5vZGUuY29udGFpbmluZ0dyb3VwO1xuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoZ3JwICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBsZXQgcmVjdCA9IGdycC5hY3R1YWxCb3VuZHM7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBwdC54ID0gTWF0aC5tYXgocmVjdC5sZWZ0LCBNYXRoLm1pbihwdC54LCByZWN0LnJpZ2h0KSk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBwdC55ID0gTWF0aC5tYXgocmVjdC50b3AsIE1hdGgubWluKHB0LnksIHJlY3QuYm90dG9tKSk7XG4gICAgICAgICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIHB0O1xuICAgICAgICAgICAgICAgIC8vIH0sXG5cbiAgICAgICAgICAgICAgICAvLyBkcm9wQ29tcHV0YXRpb246IGZ1bmN0aW9uIChub2RlLCBwdCwgZ3JpZFB0KSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGxldCBncnAgPSBub2RlLmNvbnRhaW5pbmdHcm91cDtcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKGdycCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgbGV0IHJlY3QgPSBncnAuYWN0dWFsQm91bmRzO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcHQueCA9IE1hdGgubWF4KHJlY3QubGVmdCwgTWF0aC5taW4ocHQueCwgcmVjdC5yaWdodCkpO1xuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcHQueSA9IE1hdGgubWF4KHJlY3QudG9wLCBNYXRoLm1pbihwdC55LCByZWN0LmJvdHRvbSkpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBwdDtcbiAgICAgICAgICAgICAgICAvLyB9LFxuXG4gICAgICAgICAgICAgICAgLy8gZHJhZ0NvbXB1dGF0aW9uOiBmdW5jdGlvbiAocGFydCwgcHQsIGdyaWRwdCkge1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyBHZXQgdGhlIGN1cnJlbnQgZ3JvdXAncyBhY3R1YWwgYm91bmRzXG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbnN0IGdycCA9IHBhcnQuY29udGFpbmluZ0dyb3VwO1xuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoZ3JwKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBibmRzID0gZ3JwLmFjdHVhbEJvdW5kcztcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGxvYyA9IHBhcnQubG9jYXRpb247XG5cbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIC8vIFNlZSBpZiB0aGUgcGFydCdzIG5ldyBsb2NhdGlvbiB3b3VsZCBiZSBvdXQgb2YgYm91bmRzXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBuZXd4ID0gTWF0aC5tYXgoYm5kcy54LCBNYXRoLm1pbihwdC54LCBibmRzLnJpZ2h0IC0gcGFydC5hY3R1YWxCb3VuZHMud2lkdGggLyAyKSk7XG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBjb25zdCBuZXd5ID0gTWF0aC5tYXgoYm5kcy55LCBNYXRoLm1pbihwdC55LCBibmRzLmJvdHRvbSAtIHBhcnQuYWN0dWFsQm91bmRzLmhlaWdodCAvIDIpKTtcblxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgLy8gTW9kaWZ5IHRoZSByZXN1bHQgcG9pbnQgdG8ga2VlcCB0aGUgUGFydCBpbnNpZGUgdGhlIEdyb3VwXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICByZXR1cm4gbmV3IGdvLlBvaW50KG5ld3gsIG5ld3kpO1xuICAgICAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBwdDtcbiAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5teURpYWdyYW0/LmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gbW91c2VEcmFnRW50ZXI6IChlLCAgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAvLyBtb3VzZURyb3A6IChlLCAgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gfSxcbiAgICAgICAgICAgICAgICAvLyBtb3VzZUVudGVyOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgICAgICAgICAvLyAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICB0b3A6IGU/LlsnV3InXT8ueSxcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgICAgICAgLy8gICAgIH0pO1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyBsZXQgc2hhcGUgPSAobm9kZSBhcyBhbnkpPy5maW5kT2JqZWN0KCdTSEFQRV9LRVknKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gaWYgKHNoYXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vICAgICBzaGFwZS5zdHJva2UgPSAnYmx1ZSc7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIH1cbiAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgICAgIC8vIG1vdXNlTGVhdmU6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgc2VsZi5vbkhvdmVySW5mb0J1dHRvbi5lbWl0KG51bGwpO1xuICAgICAgICAgICAgICAgIC8vICAgICAvLyBsZXQgc2hhcGUgPSAobm9kZSBhcyBhbnkpPy5maW5kT2JqZWN0KCdTSEFQRV9LRVknKTtcbiAgICAgICAgICAgICAgICAvLyAgICAgLy8gaWYgKHNoYXBlKSB7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vICAgICBzaGFwZS5zdHJva2UgPSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuV0hJVEU7XG4gICAgICAgICAgICAgICAgLy8gICAgIC8vIH1cbiAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsYXlvdXQnLCAnJywgZnVuY3Rpb24gKGRhdGEsIG5vZGUpIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YT8ubGF5b3V0VmFsdWUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xBWU9VVF9FRElUT1IuQVVUT1xuICAgICAgICAgICAgICAgIC8vICAgICA/IHNlbGYuJChnby5MYXllcmVkRGlncmFwaExheW91dCwgeyBkaXJlY3Rpb246IDAgfSlcbiAgICAgICAgICAgICAgICAvLyAgICAgOiBub2RlPy5sYXlvdXQ7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGE/LmxheW91dFZhbHVlICE9PSBkYXRhPy5sYXlvdXRWYWx1ZUNsb25lKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEubGF5b3V0VmFsdWVDbG9uZSA9IGRhdGE/LmxheW91dFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YT8ubGF5b3V0VmFsdWUgPT09IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0xBWU9VVF9FRElUT1IuQVVUT1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHsgZGlyZWN0aW9uOiAwIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHNlbGYuJChnby5MYXlvdXQpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlPy5sYXlvdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIDogc2VsZi4kKGdvLkxheW91dCk7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRhdGE/LmxheW91dDtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gZGF0YT8ucHJldmlvdXNMYXlvdXQgfHwgc2VsZi4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KTtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gc2VsZi4kKGdvLkxheWVyZWREaWdyYXBoTGF5b3V0LCB7IGRpcmVjdGlvbjogMCB9KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ2dyaWQnLCAnZ3JpZCcpLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3NlbGVjdGFibGUnLCAnc2VsZWN0YWJsZScpLFxuICAgICAgICAgICAgLy8gbmV3IGdvLkJpbmRpbmcoJ3dpZHRoJywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIGRhdGE/Lm9iPy5taW5XaXRoID8/IDUwO1xuICAgICAgICAgICAgLy8gfSksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbWluU2l6ZScsICcnLCBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgZ28uU2l6ZShkYXRhPy5vYj8ubWluV2l0aCA/PyA1MCwgZGF0YT8ub2I/Lm1pbkhlaWdodCA/PyA1MCk7IC8vIEN1c3RvbWl6ZSBtaW5TaXplIGJhc2VkIG9uIGRhdGFcbiAgICAgICAgICAgIH0pLm9mT2JqZWN0KCksXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnd2lkdGgnLCAnJywgZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gZGF0YT8ub2I/Lm1pbldpdGggPz8gNTA7IC8vIEN1c3RvbWl6ZSBtaW5TaXplIGJhc2VkIG9uIGRhdGFcbiAgICAgICAgICAgIC8vIH0pLm9mT2JqZWN0KCksXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnaGVpZ2h0JywgJycsIGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIGRhdGE/Lm9iPy5taW5IZWlnaHQgPz8gNTA7IC8vIEN1c3RvbWl6ZSBtaW5TaXplIGJhc2VkIG9uIGRhdGFcbiAgICAgICAgICAgIC8vIH0pLm9mT2JqZWN0KCksXG4gICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIC8vIG5ldyBnby5CaW5kaW5nKCdpc1N1YkdyYXBoRXhwYW5kZWQnLCAnZXhwYW5kZWQnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgLy8gbWFyZ2luOm5ldyBnby5NYXJnaW4oMCwgNTAsIDAsIDUwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTSEFQRV9LRVknLFxuICAgICAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5SRVNPTFVUSU9OX0JMVUUsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHsgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSB9KSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gbm9kZS5tZW1iZXJWYWxpZGF0aW9uID0gZnVuY3Rpb24gKG5vZGUsIGdyb3VwKSB7XG4gICAgICAgIC8vICAgICBpZiAoIWdyb3VwKSByZXR1cm4gdHJ1ZTsgLy8gYWxsb3cgdW5ncm91cGluZ1xuICAgICAgICAvLyAgICAgY29uc3QgZ3JvdXBCb3VuZHMgPSBncm91cC5hY3R1YWxCb3VuZHM7XG4gICAgICAgIC8vICAgICBjb25zdCBub2RlQm91bmRzID0gbm9kZS5hY3R1YWxCb3VuZHM7XG4gICAgICAgIC8vICAgICByZXR1cm4gZ3JvdXBCb3VuZHMuY29udGFpbnNSZWN0KG5vZGVCb3VuZHMpO1xuICAgICAgICAvLyB9O1xuICAgICAgICB0aGlzLm15RGlhZ3JhbS5ncm91cFRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgfVxuXG4gICAgZ3JvdXBQQ0lucHV0T3JPdXRUZW1wbGF0ZShpY29uLCB0aXRsZSwgcGFkZGluZzogZ28uTWFyZ2luKSB7XG4gICAgICAgIC8vIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAvLyAgICAgZ28uR3JvdXAsXG4gICAgICAgIC8vICAgICAnU3BvdCcsXG4gICAgICAgIC8vICAgICB7XG4gICAgICAgIC8vICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5b3V0KSxcbiAgICAgICAgLy8gICAgICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gICAgICAgICBzZWxlY3RhYmxlOiBmYWxzZSxcbiAgICAgICAgLy8gICAgIH0sXG4gICAgICAgIC8vICAgICAvLyB7XG4gICAgICAgIC8vICAgICAvLyAgICAgLy8gbWluU2l6ZTogbmV3IGdvLlNpemUoNTAwLCA1MDApLFxuICAgICAgICAvLyAgICAgLy8gICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICAvLyAgICAgLy8gICAgIGFyaWFSZWFkT25seTogdHJ1ZSxcbiAgICAgICAgLy8gICAgIC8vIH0sXG4gICAgICAgIC8vICAgICB0aGlzLiQoXG4gICAgICAgIC8vICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgIC8vICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAvLyAgICAgICAgIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgLy8gICAgICAgICB9LFxuICAgICAgICAvLyAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgIC8vICAgICAgICAgICAgIC8vIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgLy8gICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuV0hJVEUsXG4gICAgICAgIC8vICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAvLyAgICAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgLy8gICAgICAgICB0aGlzLiQoZ28uUGxhY2Vob2xkZXIsIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgcGFkZGluZzogbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgLy8gICAgICAgICB9KSxcbiAgICAgICAgLy8gICAgICksXG4gICAgICAgIC8vICk7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uR3JvdXAsXG4gICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGF5b3V0OiB0aGlzLiQoZ28uTGF5ZXJlZERpZ3JhcGhMYXlvdXQsIHsgZGlyZWN0aW9uOiAwIH0pLFxuICAgICAgICAgICAgICAgIG1vdmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGF2b2lkYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gaXNTdWJHcmFwaEV4cGFuZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyBpc1N1YkdyYXBoRXhwYW5kZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIGxheWVyTmFtZTogJ0ZvcmVncm91bmQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IHBhZGRpbmcgPz8gbmV3IGdvLk1hcmdpbigwLCAwLCAwLCAwKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLldISVRFLFxuICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5BTElaQVJJTixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwge1xuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDAsIDApLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5teURpYWdyYW0uZ3JvdXBUZW1wbGF0ZU1hcC5zZXQodGl0bGUsIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VHcm91cFpvbmVUZW1wbGF0ZShcbiAgICAgICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMTQsIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1IH0sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBsZXQgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgIGdvLkdyb3VwLFxuICAgICAgICAgICAgJ1ZlcnRpY2FsJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IHRoaXMuJChnby5HcmlkTGF5b3V0LCB7IHdyYXBwaW5nQ29sdW1uOiAxLCBzcGFjaW5nOiBuZXcgZ28uU2l6ZSgwLCAwKSB9KSxcbiAgICAgICAgICAgIH0sXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvblNwb3Q6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgIG1vdXNlT3ZlcjogZnVuY3Rpb24gKGUsIG9iaikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZWxmLnNob3dQb2ludChvYmo/LnBhcnQ/LmxvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgc2VsZWN0aW9uQWRvcm5tZW50VGVtcGxhdGU6IHRoaXMuX2luaXRpYWxPcHRpb25zLmlzUmVhZE9ubHlcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBnby5BZG9ybm1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0JsdXI6IDYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dPZmZzZXQ6IG5ldyBnby5Qb2ludCgwLCAyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9yOiAnIzAwMDAwMDI5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsIHsgZmlsbDogbnVsbCwgc3Ryb2tlOiAnZG9kZ2VyYmx1ZScsIHN0cm9rZVdpZHRoOiA0IH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBsYWNlaG9sZGVyLCB7IHBhZGRpbmc6IDMgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hvcml6b250YWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5Ub3BSaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogZ28uU3BvdC5Cb3R0b20sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfZHJhZ0RhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5URVhUX05PREUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5CTFVFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogc2VsZi5hZGRJdGVtT25Hcm91cFpvbmUsIC8vIGRlZmluZWQgYmVsb3csIHRvIHN1cHBvcnQgYSBjbGljayBvbiB0aGUgYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdCdXR0b25Cb3JkZXIuc3Ryb2tlV2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6ICdcXHVmMDU1JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJzIwcHggXCJGb250IEF3ZXNvbWUgNiBQcm9cIicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMmMyYzJjJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtb3JlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdlbmVyYXRlQWN0aW9uR3JvdXAoW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuUkVOQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdG9EZWZhdWx0R29qc0VkaXRvci5FTlVNX0FDVElPTlMuREVUQUlMUyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXRvRGVmYXVsdEdvanNFZGl0b3IuRU5VTV9BQ1RJT05TLk9VVEZMT1csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0b0RlZmF1bHRHb2pzRWRpdG9yLkVOVU1fQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAvLyBFZGl0IFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAnQnV0dG9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGNsaWNrOiBzZWxmLmVkaXRUZXh0R3JvdXBab25lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB0ZXh0OiAnXFx1ZTFiZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGZvbnQ6ICcyMHB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgc3Ryb2tlOiAnIzJjMmMyYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIC8vIE9wZW4gRGV0YWlsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgJ0J1dHRvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBub2RlID0gb2JqLnBhcnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICBzZWxmLm9uT3BlbkRldGFpbC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBub2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICdCdXR0b25Cb3JkZXIuc3Ryb2tlV2lkdGgnOiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAnQnV0dG9uQm9yZGVyLmZpbGwnOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICB0ZXh0OiAnXFx1ZTQ5YScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGZvbnQ6ICcyMHB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAhdGhpcy5faW5pdGlhbE9wdGlvbnMuaXNSZWFkT25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID8gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICdCdXR0b24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgYWN0aW9uTW92ZTogc2VsZi5kcmFnTmV3Tm9kZSwgLy8gZGVmaW5lZCBiZWxvdywgdG8gc3VwcG9ydCBkcmFnZ2luZyBmcm9tIHRoZSBidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgX2RyYWdEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB0eXBlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuVEVYVF9OT0RFLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgbmFtZTogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGNvbG9yOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgY2xpY2s6IHNlbGYuY2xpY2tOZXdOb2RlLCAvLyBkZWZpbmVkIGJlbG93LCB0byBzdXBwb3J0IGEgY2xpY2sgb24gdGhlIGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAnQnV0dG9uQm9yZGVyLnN0cm9rZVdpZHRoJzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgJ0J1dHRvbkJvcmRlci5maWxsJzogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICB0ZXh0OiAnXFx1ZTE1NycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgIGZvbnQ6ICcyMHB4IFwiRm9udCBBd2Vzb21lIDYgUHJvXCInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJjMmMyYycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgOiB7fSxcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICdCdXR0b24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgY2xpY2s6IHNlbGYuZGVsZXRlTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgJ0J1dHRvbkJvcmRlci5zdHJva2VXaWR0aCc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICdCdXR0b25Cb3JkZXIuZmlsbCc6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIG1hcmdpbjogNCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgdGV4dDogJ1xcdWYyZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBmb250OiAnMjBweCBcIkZvbnQgQXdlc29tZSA2IFByb1wiJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ1JvdW5kZWRSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLlJFU09MVVRJT05fQkxVRSxcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncsIE5hTiksXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LlRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IG5ldyBnby5NYXJnaW4oMTcsIDEwLCAxNiwgMTApLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbig1LCAwLCAxMCwgMCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaXJlZFNpemU6IG5ldyBnby5TaXplKHNpemUudyAtIDIwLCAyNSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTklHSFRfUklERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJ2JvbGQgMTZweCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suTm9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogZ28uVGV4dEJsb2NrLk92ZXJmbG93RWxsaXBzaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbFRpcDogdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZScpLm1ha2VUd29XYXkoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QbGFjZWhvbGRlciwgJ1ZlcnRpY2FsJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApLFxuXG4gICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdMJywgZ28uU3BvdC5MZWZ0LCBnby5TcG90LkxlZnRTaWRlLCB0cnVlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLmdyb3VwVGVtcGxhdGVNYXAuc2V0KEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5aT05FLCBub2RlKTtcbiAgICB9XG5cbiAgICBtYWtlWm9uZUl0ZW1UZW1wbGF0ZShcbiAgICAgICAgc2l6ZTogeyB3OiBudW1iZXI7IGg6IG51bWJlciB9ID0geyB3OiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogMTIsIGg6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiAyIH0sXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICBjb25zdCBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgIC8vICAgICBtb3VzZUhvdmVyOiAoZSwgb2JqKSA9PiB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IG5vZGUgPSBvYmoucGFydDtcbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKChvYmogYXMgYW55KS5wYXJ0Py5vYj8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQoe1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCArIDgsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgdG9wOiBlPy5bJ1dyJ10/LnksXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgbm9kZTogbm9kZVxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gICAgIG1vdXNlTGVhdmU6IChlLCBvYmopID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKChvYmogYXMgYW55KS5wYXJ0Py5vYj8udmFsdWUgPT09IFZBTFVFX05BKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgICAgICBzZWxmLm9uSG92ZXJJbmZvQnV0dG9uLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICB9LFxuICAgICAgICAgICAgLy8gICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgICAgICAgY29uc3Qgbm9kZSA9IG9iai5wYXJ0O1xuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmlzU2hvd05vZGVJbmZvID8gc2VsZi5vbkNsaWNrSW5mb0J1dHRvbi5lbWl0KHtcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIGxlZnQ6IGU/LlsnV3InXT8ueCxcbiAgICAgICAgICAgIC8vICAgICAgICAgICAgIHRvcDogZT8uWydXciddPy55LFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgbm9kZTogbm9kZVxuICAgICAgICAgICAgLy8gICAgICAgICB9KSA6IG51bGw7XG4gICAgICAgICAgICAvLyAgICAgfSxcbiAgICAgICAgICAgIC8vIH0sXG4gICAgICAgICAgICAvLyBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtb3ZhYmxlOiBmYWxzZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHNpemUudyxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBzaXplLmgsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdSZWN0YW5nbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGw6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSUdIVF9CTFVFLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2U6IEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX0NPTE9SUy5MSU5LX1dBVEVSLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICdWZXJ0aWNhbCcsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlRleHRCbG9jayxcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDEwLCAwLCA1LCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnYm9sZCAxMnB4IEFyaWFsJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLk5JR0hUX1JJREVSLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2xUaXA6IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Rvb2xUaXAnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ25hbWUnKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygndGV4dCcsICduYW1lJykubWFrZVR3b1dheSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnbmFtZScsICh4KSA9PiAhIXgpLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdIb3Jpem9udGFsJyxcblxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbjogbmV3IGdvLk1hcmdpbigwLCAxMCwgMCwgMTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnMTJweCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuTklHSFRfUklERVIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNdWx0aWxpbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAxMDAsIDE1KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6IGdvLlRleHRCbG9jay5PdmVyZmxvd0VsbGlwc2lzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sVGlwOiB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9vbFRpcCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiA0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZUl0ZW0nKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3RleHQnLCAnbmFtZUl0ZW0nKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnbmFtZUl0ZW0nLCAoeCkgPT4gISF4KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJzEycHggc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkNFUlVMRUFOLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogJzwgJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnZGF0YScsICh4KSA9PiB0eXBlb2YgeD8ucXVhbnRpdHkgPT09ICdudW1iZXInKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uVGV4dEJsb2NrLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDUsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udDogJzEycHggc2Fucy1zZXJpZicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fQ09MT1JTLkNFUlVMRUFOLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cmFwOiBnby5UZXh0QmxvY2suV3JhcEZpdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCd0ZXh0JywgJ2RhdGEnLCAoeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHg/LnF1YW50aXR5ICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZDogYW55ID0gVXRpbHNTZXJ2aWNlLmNvbnZlcnRQcmVmaXhlc0RhdGEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHg/LnF1YW50aXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdDogeD8udW5pdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWQuc2hvcnRlbmVkTnVtYmVyICsgJyAnICsgZm9ybWF0dGVkLnVuaXRQcmVmaXhlcyArIHg/LnVuaXQgPz8gJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnZGF0YScsICh4KSA9PiB0eXBlb2YgeD8ucXVhbnRpdHkgPT09ICdudW1iZXInKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5UZXh0QmxvY2ssXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgNSwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnMTJweCBzYW5zLXNlcmlmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9DT0xPUlMuQ0VSVUxFQU4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyYXA6IGdvLlRleHRCbG9jay5XcmFwRml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiAnID4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ3Zpc2libGUnLCAnZGF0YScsICh4KSA9PiB0eXBlb2YgeD8ucXVhbnRpdHkgPT09ICdudW1iZXInKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubXlEaWFncmFtLm5vZGVUZW1wbGF0ZU1hcC5zZXQoQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlpPTkVfRU5FUkdZX0lURU0sIG5vZGUpO1xuICAgIH1cblxuICAgIG1ha2VTcGVjaWFsVGVtcGxhdGUoXG4gICAgICAgIGljb24sXG4gICAgICAgIHRpdGxlLFxuICAgICAgICBzaXplOiB7IHc6IG51bWJlcjsgaDogbnVtYmVyIH0gPSB7IHc6IEF0b0dvanNFZGl0b3JNb2RlbC5HUklEX1NJWkUgKiA1LCBoOiBBdG9Hb2pzRWRpdG9yTW9kZWwuR1JJRF9TSVpFICogNSB9LFxuICAgICkge1xuICAgICAgICBsZXQgbm9kZTogYW55ID0gbnVsbDtcbiAgICAgICAgc3dpdGNoICh0aXRsZSkge1xuICAgICAgICAgICAgY2FzZSBBdG9Hb2pzRWRpdG9yTW9kZWwuRU5VTV9URU1QTEFURVMuU1BFQ0lBTF9QUk9DRVNTOlxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgICAgICAvLyAgICAgZnJvbVNwb3Q6IGdvLlNwb3QuUmlnaHQsICAvLyBjb21pbmcgb3V0IGZyb20gbWlkZGxlLXJpZ2h0XG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0b1Nwb3Q6IGdvLlNwb3QuTGVmdFxuICAgICAgICAgICAgICAgICAgICAvLyB9LFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJEM0I3NycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5QUk9DRVNTLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDEwLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNjAsIDYwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcblxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5MZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50Rm9jdXM6IG5ldyBnby5TcG90KDAsIDAuNSwgOCwgMCksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uUGFuZWwsICdWZXJ0aWNhbCcsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogZ28uU3BvdC5SaWdodCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgxLCAwLjUsIC04LCAwKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIC8vIGZvdXIgbmFtZWQgcG9ydHMsIG9uZSBvbiBlYWNoIHNpZGU6XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnVCcsIGdvLlNwb3QuVG9wLCBnby5TcG90LlRvcFNpZGUsIGZhbHNlLCB0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYWtlUG9ydCgnTCcsIGdvLlNwb3QuTGVmdCwgZ28uU3BvdC5MZWZ0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1InLCBnby5TcG90LlJpZ2h0LCBnby5TcG90LlJpZ2h0U2lkZSwgdHJ1ZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0InLCBnby5TcG90LkJvdHRvbSwgZ28uU3BvdC5Cb3R0b21TaWRlLCB0cnVlLCBmYWxzZSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlNQRUNJQUxfU1RPUkFHRTpcbiAgICAgICAgICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdDaXJjbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlNUT1JBR0UsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QaWN0dXJlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pblNpemU6IG5ldyBnby5TaXplKDQwLCA0MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg1MCwgNTApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnc291cmNlJywgJ2ljb24nKS5tYWtlVHdvV2F5KCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICksXG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuTGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudEZvY3VzOiBuZXcgZ28uU3BvdCgwLCAwLjUsIDgsIDApLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBhbmVsLCAnVmVydGljYWwnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuUmlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnRGb2N1czogbmV3IGdvLlNwb3QoMSwgMC41LCAtOCwgMCksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAvLyBmb3VyIG5hbWVkIHBvcnRzLCBvbmUgb24gZWFjaCBzaWRlOlxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ1QnLCBnby5TcG90LlRvcCwgZ28uU3BvdC5Ub3BTaWRlLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFrZVBvcnQoJ0wnLCBnby5TcG90LkxlZnQsIGdvLlNwb3QuTGVmdFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdSJywgZ28uU3BvdC5SaWdodCwgZ28uU3BvdC5SaWdodFNpZGUsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1ha2VQb3J0KCdCJywgZ28uU3BvdC5Cb3R0b20sIGdvLlNwb3QuQm90dG9tU2lkZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TUEVDSUFMX1NUT1JFOlxuICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgIGdvLk5vZGUsXG4gICAgICAgICAgICAgICAgICAgICdTcG90JyxcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IChlLCBvYmo6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqPy5kYXRhPy5vblNlbGVjdGVkKG9iaj8uZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNoYW5nZWQ6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmlzU2VsZWN0ZWQgJiYgZT8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlPy5kYXRhPy5vblNlbGVjdGVkKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5ldyBnby5CaW5kaW5nKCdsb2NhdGlvbicsICdsb2MnLCBnby5Qb2ludC5wYXJzZSkubWFrZVR3b1dheShnby5Qb2ludC5zdHJpbmdpZnkpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBdXRvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgd2lkdGg6IHNpemUudywgaGVpZ2h0OiBzaXplLmggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5TaGFwZSwgJ0NpcmNsZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyMyRDNCNzcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0cm9rZURhc2hBcnJheTogWzUsIDVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RhYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uVGV4dEJsb2NrLCAnU3RvcmUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDMsIDMsIDEwLCAzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoc2l6ZS53IC0gMjAsIE5hTiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZTogJyM0NDQ0NDQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250OiAnbm9ybWFsIDEwcHQgQXJpYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWxpZ246ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5QaWN0dXJlLCBpY29uLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdzogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luOiBuZXcgZ28uTWFyZ2luKDAsIDAsIDEwLCAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50OiBnby5TcG90LkNlbnRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4U2l6ZTogbmV3IGdvLlNpemUoNjAsIDYwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VTdHJldGNoOiBnby5HcmFwaE9iamVjdC5Vbmlmb3JtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEF0b0dvanNFZGl0b3JNb2RlbC5FTlVNX1RFTVBMQVRFUy5TUEVDSUFMX0RJU0NIQVJHRTpcbiAgICAgICAgICAgICAgICBub2RlID0gdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICBnby5Ob2RlLFxuICAgICAgICAgICAgICAgICAgICAnU3BvdCcsXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiAoZSwgb2JqOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaj8uZGF0YT8ub25TZWxlY3RlZChvYmo/LmRhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZS5pc1NlbGVjdGVkICYmIGU/LmRhdGE/Lm9uU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZT8uZGF0YT8ub25TZWxlY3RlZChudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBuZXcgZ28uQmluZGluZygnbG9jYXRpb24nLCAnbG9jJywgZ28uUG9pbnQucGFyc2UpLm1ha2VUd29XYXkoZ28uUG9pbnQuc3RyaW5naWZ5KSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgZ28uUGFuZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQXV0bycsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHdpZHRoOiBzaXplLncsIGhlaWdodDogc2l6ZS5oIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLiQoZ28uU2hhcGUsICdDaXJjbGUnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbDogJ3doaXRlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U6ICcjMkQzQjc3JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJva2VEYXNoQXJyYXk6IFs1LCA1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlRleHRCbG9jaywgJ0Rpc2NoYXJnZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg2MCwgNjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgQXRvR29qc0VkaXRvck1vZGVsLkVOVU1fVEVNUExBVEVTLlNQRUNJQUxfT1RIRVI6XG4gICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgZ28uTm9kZSxcbiAgICAgICAgICAgICAgICAgICAgJ1Nwb3QnLFxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGljazogKGUsIG9iajogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9iaj8uZGF0YT8ub25TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmo/LmRhdGE/Lm9uU2VsZWN0ZWQob2JqPy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZDogKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWUuaXNTZWxlY3RlZCAmJiBlPy5kYXRhPy5vblNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGU/LmRhdGE/Lm9uU2VsZWN0ZWQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmV3IGdvLkJpbmRpbmcoJ2xvY2F0aW9uJywgJ2xvYycsIGdvLlBvaW50LnBhcnNlKS5tYWtlVHdvV2F5KGdvLlBvaW50LnN0cmluZ2lmeSksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvLlBhbmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgeyB3aWR0aDogc2l6ZS53LCBoZWlnaHQ6IHNpemUuaCB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlNoYXBlLCAnQ2lyY2xlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6ICd3aGl0ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzJEM0I3NycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3Ryb2tlRGFzaEFycmF5OiBbNSwgNV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnby5QYW5lbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFibGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuJChnby5UZXh0QmxvY2ssICdPdGhlcicsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMywgMywgMTAsIDMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZShzaXplLncgLSAyMCwgTmFOKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ6ICdub3JtYWwgMTBwdCBBcmlhbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy4kKGdvLlBpY3R1cmUsIGljb24sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93OiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IG5ldyBnby5NYXJnaW4oMCwgMCwgMTAsIDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IGdvLlNwb3QuQ2VudGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSg2MCwgNjApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZVN0cmV0Y2g6IGdvLkdyYXBoT2JqZWN0LlVuaWZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZSkge1xuICAgICAgICAgICAgdGhpcy5teURpYWdyYW0ubm9kZVRlbXBsYXRlTWFwLnNldCh0aXRsZSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFydEFuaW1hdGlvbigpIHtcbiAgICAgICAgY29uc3QgZGlhZ3JhbSA9IHRoaXMubXlEaWFncmFtO1xuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICAgIGRpYWdyYW0ubGlua3MuZWFjaCgobGluaykgPT4ge1xuICAgICAgICAvLyAgICAgfSk7XG4gICAgICAgIC8vIH0pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5hbmltYXRpb25JbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRza2lwcyA9IGRpYWdyYW0uc2tpcHNVbmRvTWFuYWdlcjtcbiAgICAgICAgICAgICAgICBkaWFncmFtLnNraXBzVW5kb01hbmFnZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgZGlhZ3JhbS5saW5rcy5lYWNoKChsaW5rKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYXBlID0gbGluay5maW5kT2JqZWN0KCdQSVBFJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghIXNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBvZmYgPSBzaGFwZT8uc3Ryb2tlRGFzaE9mZnNldCAtIDM7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvZmYgPSBzaGFwZT8uc3Ryb2tlRGFzaE9mZnNldCAtIDk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRlIChtb3ZlKSB0aGUgc3Ryb2tlIGRhc2hcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXBlLnN0cm9rZURhc2hPZmZzZXQgPSBvZmYgPD0gMCA/IDYwIDogb2ZmO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGlhZ3JhbS5za2lwc1VuZG9NYW5hZ2VyID0gb2xkc2tpcHM7XG4gICAgICAgICAgICB9LCA2MDApO1xuICAgICAgICAgICAgLy8gNjBcbiAgICAgICAgfSBjYXRjaCAoZSkge31cbiAgICB9XG5cbiAgICBzdG9wQW5pbWF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5hbmltYXRpb25JbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmFuaW1hdGlvbkludGVydmFsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRvRGF0YVVSTCh1cmwsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2socmVhZGVyLnJlc3VsdCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoeGhyLnJlc3BvbnNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYmxvYic7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfVxuXG4gICAgZ2V0QmFzZTY0RGlhZ3JhbVdpdGhFbXB0eURhdGEoKSB7XG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgICAgICAvLyBUZXN0XG4gICAgICAgIC8vIGNvbnN0IG5ld1dpbmRvdyA9IHdpbmRvdy5vcGVuKCcnLCAnbmV3V2luZG93Jyk7XG4gICAgICAgIC8vIGlmICghbmV3V2luZG93KSB7XG4gICAgICAgIC8vICAgICByZXR1cm47XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc3QgbmV3RG9jdW1lbnQgPSBuZXdXaW5kb3c/LmRvY3VtZW50O1xuICAgICAgICBpZiAoIXRoaXMubXlEaWFncmFtPy5tb2RlbD8ubm9kZURhdGFBcnJheT8ubGVuZ3RoICYmICF0aGlzLm15RGlhZ3JhbT8ubW9kZWw/LmxpbmtEYXRhQXJyYXk/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ZnID0gdGhpcy5teURpYWdyYW0ubWFrZVN2Zyh7XG4gICAgICAgICAgICBzY2FsZTogdGhpcy5kZWZhdWx0U2NhbGVab29tVG9GaXQsXG4gICAgICAgICAgICBtYXhTaXplOiBuZXcgZ28uU2l6ZSgxMjAwLCBOYU4pLFxuICAgICAgICAgICAgYmFja2dyb3VuZDogJ3doaXRlJyxcbiAgICAgICAgICAgIHBhZGRpbmc6IDIwLFxuICAgICAgICAgICAgZWxlbWVudEZpbmlzaGVkOiBmdW5jdGlvbiAoZ3JhcGhPYmplY3QsIHN2Z0VsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBzdmdFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnY2xpcC1wYXRoJyk7XG4gICAgICAgICAgICAgICAgLy8gUmVwbGFjZSBJbWFnZSBVUkwgdG8gYmFzZTY0IC0+IEZvciBzaG93aW5nIFBpY3R1cmUgZWxlbWVudFxuICAgICAgICAgICAgICAgIGlmIChncmFwaE9iamVjdCBpbnN0YW5jZW9mIGdvLlBpY3R1cmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi50b0RhdGFVUkwoc3ZnRWxlbWVudC5ocmVmLmJhc2VWYWwsIGZ1bmN0aW9uIChkYXRhVXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgnaHJlZicsIGRhdGFVcmwpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTWFrZSBUZXh0IE5vZGUgU2hhcGUgQm9yZGVyXG4gICAgICAgICAgICAgICAgaWYgKGdyYXBoT2JqZWN0Py5uYW1lID09PSAndGV4dE5vZGVTaGFwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ZnRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICdyZ2JhKDY0LCAxODEsIDIwNiwgMC42KScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBFbXB0eSBWYWx1ZVxuICAgICAgICAgICAgICAgIGlmIChncmFwaE9iamVjdD8ubmFtZSA9PT0gJ3RleHRCbG9ja1ZhbHVlJyB8fCBncmFwaE9iamVjdD8ubmFtZSA9PT0gJ3RleHRCbG9ja1VuaXRQcmVmaXhlcycpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ZnRWxlbWVudC50ZXh0Q29udGVudCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc3ZnRWxlbWVudC5jbGlwUGF0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdmdFbGVtZW50LmNsaXBQYXRoID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY2FsbGJhY2s6IChzdmcpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZnU3RyID0gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhzdmcpO1xuICAgICAgICAgICAgICAgICAgICAvLyBGb3IgVGVzdFxuICAgICAgICAgICAgICAgICAgICAvLyBuZXdEb2N1bWVudD8uYm9keT8uYXBwZW5kQ2hpbGQoc3ZnKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBiYXNlNjRTdmcgPSBgZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwke3dpbmRvdy5idG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdmdTdHIpKSl9YDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgIGltZy5zcmMgPSBiYXNlNjRTdmc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgICAgICAgICAvLyBnZXQgY2FudmFzIGNvbnRleHQgZm9yIGRyYXdpbmcgb24gY2FudmFzXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICAgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN2Z1dpZHRoID0gaW1nLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZnSGVpZ2h0ID0gaW1nLmhlaWdodDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLndpZHRoID0gc3ZnV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gc3ZnSGVpZ2h0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKGltZywgMCwgMCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZTY0UE5HID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZW1pdEltYWdlVG9wb2xvZ3koYmFzZTY0UE5HLnJlcGxhY2UoJ2RhdGE6aW1hZ2UvanBlZztiYXNlNjQsJywgJycpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGVtaXRJbWFnZVRvcG9sb2d5KGJhc2U2NCkge1xuICAgICAgICB0aGlzLmNhbGxiYWNrSW1hZ2VUb3BvbG9neS5lbWl0KGJhc2U2NCk7XG4gICAgfVxuXG4gICAgb3BlbkFjdGlvbk1lbnUoKSB7XG4gICAgICAgIC8vIFdoZW4gdGhpcyBub2RlIGlzIGNsaWNrZWQsIGFkanVzdCB0aGUgbWVudSBwb3NpdGlvblxuICAgICAgICBjb25zdCBtb3VzZVB0ID0gdGhpcy5teURpYWdyYW0ubGFzdElucHV0LnZpZXdQb2ludDtcblxuICAgICAgICAvLyAvLyBXaGVuIHRoaXMgbm9kZSBpcyBjbGlja2VkLCBkaXNwbGF5IHRoZSBkcm9wZG93biBtZW51XG4gICAgICAgIGNvbnN0IG1lbnUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmFjdGlvbk1lbnVJZCk7XG4gICAgICAgIGlmIChtZW51KSB7XG4gICAgICAgICAgICBtZW51LnN0eWxlLmRpc3BsYXkgPSAnJztcbiAgICAgICAgICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgICAgbWVudS5zdHlsZS5sZWZ0ID0gbW91c2VQdC54ICsgJ3B4JztcbiAgICAgICAgICAgIG1lbnUuc3R5bGUudG9wID0gbW91c2VQdC55ICsgJ3B4JztcblxuICAgICAgICAgICAgdGhpcy5tZW51VHJpZ2dlci5vcGVuTWVudSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdW5zdWJzY3JpYmVBbGwoKSB7XG4gICAgICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb25MaXN0KSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25MaXN0LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uTGlzdCA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICB9XG5cbiAgICAgIGFkZFN1YnNjcmliZXMoLi4uc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10pIHtcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKChlbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9uTGlzdC5hZGQoZWwpO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQXRvRGVmYXVsdEdvanNFZGl0b3Ige1xuICAgIGV4cG9ydCBlbnVtIEVOVU1fQUNUSU9OUyB7XG4gICAgICAgIERFVEFJTFMgPSAnT3BlbiBkZXRhaWxzICYgd2l6YXJkJyxcbiAgICAgICAgT05MWV9ERVRBSUxTID0gJ09wZW4gZGV0YWlscycsXG4gICAgICAgIFJFTkFNRSA9ICdSZW5hbWUgdGhpcyBib3gnLFxuICAgICAgICBPVVRGTE9XID0gJ0NyZWF0ZSBhbiBvdXRmbG93JyxcbiAgICAgICAgREVMRVRFID0gJ0RlbGV0ZScsXG4gICAgICAgIElOU0lHSFQgPSAnSW5zaWdodCB0YWcgbWFwcGluZycsXG4gICAgICAgIERBVEFfTUFQUElORyA9ICdEYXRhIE1hcHBpbmcnLFxuICAgICAgICBNT1JFID0gJ01vcmUnLFxuICAgICAgICBGTE9XX0RFVEFJTFMgPSAnRmxvdyBkZXRhaWxzJyxcbiAgICAgICAgRkxPV19ERVRBSUxTX0FORF9XSVpBUkQgPSAnRmxvdyBkZXRhaWxzICYgd2l6YXJkJywgLy8gb25seSBub3cgZm9yIENvb2xpbmcgVG93ZXJcbiAgICAgICAgQVNTRVRfUEFSQU1FVEVSUyA9ICdBc3NldCBwYXJhbWV0ZXJzJyxcbiAgICAgICAgQ0hBTkdFX0lDT04gPSAnQ2hhbmdlIGljb24nLFxuICAgIH1cblxuICAgIGV4cG9ydCBjb25zdCBBQ1RJT05TOiBhbnkgPSB7XG4gICAgICAgIFtFTlVNX0FDVElPTlMuREVUQUlMU106IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5ERVRBSUxTLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1tZW1vLWNpcmNsZS1pbmZvJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgICBbRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMU106IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFMsXG4gICAgICAgICAgICBpY29uQ2xhc3NOYW1lOiAnZmFyIGZhLWFycm93LXByb2dyZXNzJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgICBbRU5VTV9BQ1RJT05TLkZMT1dfREVUQUlMU19BTkRfV0laQVJEXToge1xuICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5GTE9XX0RFVEFJTFNfQU5EX1dJWkFSRCxcbiAgICAgICAgICBpY29uQ2xhc3NOYW1lOiAnZmFyIGZhLWFycm93LXByb2dyZXNzJyxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuQVNTRVRfUEFSQU1FVEVSU106IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5BU1NFVF9QQVJBTUVURVJTLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1ib3gtYXJjaGl2ZScsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5PTkxZX0RFVEFJTFNdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuT05MWV9ERVRBSUxTLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1tZW1vLWNpcmNsZS1pbmZvJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgICBbRU5VTV9BQ1RJT05TLlJFTkFNRV06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5SRU5BTUUsXG4gICAgICAgICAgICBpY29uQ2xhc3NOYW1lOiAnZmFyIGZhLWlucHV0LXRleHQnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuT1VURkxPV106IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5PVVRGTE9XLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS1kaWFncmFtLW5lc3RlZCcsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5ERUxFVEVdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuREVMRVRFLFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhbCBmYS10cmFzaC1jYW4nLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuSU5TSUdIVF06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5JTlNJR0hULFxuICAgICAgICAgICAgaWNvbkNsYXNzTmFtZTogJ2ZhciBmYS10YWcnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgICAgIFtFTlVNX0FDVElPTlMuREFUQV9NQVBQSU5HXToge1xuICAgICAgICAgICAgbmFtZTogRU5VTV9BQ1RJT05TLkRBVEFfTUFQUElORyxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtdGFnJyxcbiAgICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHt9LFxuICAgICAgICB9LFxuICAgICAgICBbRU5VTV9BQ1RJT05TLk1PUkVdOiB7XG4gICAgICAgICAgICBuYW1lOiBFTlVNX0FDVElPTlMuTU9SRSxcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYWwgZmEtbWVtby1jaXJjbGUtaW5mbycsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgW0VOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTl06IHtcbiAgICAgICAgICAgIG5hbWU6IEVOVU1fQUNUSU9OUy5DSEFOR0VfSUNPTixcbiAgICAgICAgICAgIGljb25DbGFzc05hbWU6ICdmYXIgZmEtaW1hZ2UnLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4ge30sXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGV4cG9ydCBjb25zdCBESVNUQU5DRV8yX09VVFBVVCA9IDYwO1xufVxuIl19
|