@rivet-health/design-system 37.7.0 → 37.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/table/table/state.mjs +5 -1
- package/esm2020/lib/table/table/table/table.component.mjs +3 -3
- package/fesm2015/rivet-health-design-system.mjs +6 -6
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +6 -2
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/table/table/state.d.ts +8 -0
- package/package.json +1 -1
|
@@ -158,10 +158,12 @@ export var RivTable;
|
|
|
158
158
|
zeroStateMessage: getZeroStateMessage(s, pluralEntityName),
|
|
159
159
|
columnsAreFreezable: !!options?.columnsAreFreezable,
|
|
160
160
|
columnsAreHideable: !!options?.columnsAreHideable,
|
|
161
|
+
columnsAreReorderable: options?.columnsAreReorderable ?? true,
|
|
161
162
|
rowsAreGrayed: !!options?.rowsAreGrayed,
|
|
162
163
|
customSummaryRow: !!options?.customSummaryRow,
|
|
163
164
|
csvExportAllowed,
|
|
164
165
|
enabledCount: resolvedColumns.length,
|
|
166
|
+
hidePageSizeSelector: !!options?.hidePageSizeSelector,
|
|
165
167
|
cellRowSpan: (_i, _column) => 1,
|
|
166
168
|
needsRightBorder: () => false,
|
|
167
169
|
},
|
|
@@ -251,10 +253,12 @@ export var RivTable;
|
|
|
251
253
|
zeroStateMessage: getZeroStateMessage(s, pluralEntityName),
|
|
252
254
|
columnsAreFreezable: !!options?.columnsAreFreezable,
|
|
253
255
|
columnsAreHideable: !!options?.columnsAreHideable,
|
|
256
|
+
columnsAreReorderable: options?.columnsAreReorderable ?? true,
|
|
254
257
|
rowsAreGrayed: !!options?.rowsAreGrayed,
|
|
255
258
|
customSummaryRow: !!options?.customSummaryRow,
|
|
256
259
|
csvExportAllowed,
|
|
257
260
|
enabledCount: resolvedColumns.length,
|
|
261
|
+
hidePageSizeSelector: !!options?.hidePageSizeSelector,
|
|
258
262
|
cellRowSpan,
|
|
259
263
|
needsRightBorder: (rowIndex, column) => {
|
|
260
264
|
const i = resolvedColumnKeys.findIndex(key => key === column);
|
|
@@ -1354,4 +1358,4 @@ function isPageOutOfBounds(state, result) {
|
|
|
1354
1358
|
}
|
|
1355
1359
|
return false;
|
|
1356
1360
|
}
|
|
1357
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLFNBQVMsRUFDVCxLQUFLLEdBQ04sTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUVMLFdBQVcsRUFDWCxNQUFNLEVBQ04sSUFBSSxFQUNKLEdBQUcsRUFDSCxTQUFTLEVBRVQsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEVBQ0wsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxLQUFXLFFBQVEsQ0E0akN4QjtBQTVqQ0QsV0FBaUIsUUFBUTtJQTBDVixrQkFBUyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFVLENBQUM7SUFxUHJELG1EQUFtRDtJQUN0Qyx3QkFBZSxHQUFXLEVBQUUsQ0FBQztJQUM3Qix3QkFBZSxHQUFHO1FBQzdCLFVBQVU7UUFDVixVQUFVO1FBQ1YsTUFBTTtRQUNOLE1BQU07UUFDTixVQUFVO1FBQ1YsUUFBUTtRQUNSLFdBQVc7S0FDSCxDQUFDO0lBOEtYLFNBQWdCLGFBQWEsQ0FNM0IsTUFBMEIsRUFDMUIsT0FBK0IsRUFDL0IsZ0JBQXdCLEVBQ3hCLE9BQW9DO1FBRXBDLGtDQUFrQztRQUVsQyxNQUFNLG1CQUFtQixHQUEyQixJQUFJLEdBQUcsQ0FDekQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckQsR0FBRztZQUNILFFBQVEsQ0FBQyxV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ZGxpbmcgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IEZ1c2UsIHsgSUZ1c2VPcHRpb25zIH0gZnJvbSAnZnVzZS5qcyc7XG5pbXBvcnQge1xuICBkZWZhdWx0c0RlZXAsXG4gIGRpZmZlcmVuY2UsXG4gIGlzRXF1YWwsXG4gIG9yZGVyQnksXG4gIHJhbmdlLFxuICB0b0ludGVnZXIsXG4gIHVuaW9uLFxufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgQ29ubmVjdGFibGUsXG4gIGNvbm5lY3RhYmxlLFxuICBmaWx0ZXIsXG4gIGZyb20sXG4gIG1hcCxcbiAgbWVyZ2VTY2FuLFxuICBPYnNlcnZhYmxlLFxuICBSZXBsYXlTdWJqZWN0LFxuICBzY2FuLFxuICBzaGFyZSxcbiAgU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEZWVwUGFydGlhbCB9IGZyb20gJ3V0aWxpdHktdHlwZXMnO1xuXG5leHBvcnQgbmFtZXNwYWNlIFJpdlRhYmxlIHtcbiAgZXhwb3J0IHR5cGUgUm93ID0geyBpZDogc3RyaW5nIHwgbnVtYmVyIH07XG4gIGV4cG9ydCB0eXBlIENvbHVtbiA9IHN0cmluZztcbiAgZXhwb3J0IHR5cGUgRmlsdGVycyA9IGFueTtcbiAgZXhwb3J0IHR5cGUgR3JvdXAgPSB7IGtleTogc3RyaW5nIHwgbnVtYmVyIH07XG5cbiAgLyoqXG4gICAqIFJpdlRhYmxlJ3Mgc3RhdGUgYW5kIHVzZXIgYWN0aW9ucyBhcmUgZGl2aWRlZCBpbnRvIHRoZSBmb2xsb3dpbmcgY2h1bmtzOlxuICAgKlxuICAgKiAtIFF1ZXJ5IChmb3IgdGhpbmdzIGxpa2UgZmlsdGVycywgcGFnaW5hdGlvbiwgc2VhcmNoLCBldGMuKVxuICAgKiAtIExvYWRpbmcgKGZvciB3aGV0aGVyIG9yIG5vdCB0aGUgdGFibGUgaXMgbG9hZGluZyByb3cgZGF0YSlcbiAgICogLSBSZXN1bHQgKGZvciB0aGUgcm93IGRhdGEgaXRzZWxmKVxuICAgKiAtIERpc3BsYXkgKGZvciB0aGluZ3MgbGlrZSBjb2x1bW4gY29uZmlndXJhdGlvbilcbiAgICogLSBTZWxlY3Rpb24gKGZvciB0cmFja2luZyB0aGUgdXNlcidzIHJvdyBzZWxlY3Rpb25zKVxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIGRhdGEgZmxvdyBpcyB1bmlkaXJlY3Rpb25hbDogdGhlIFVJIGlzc3VlcyBhY3Rpb25zLCB3aGljaFxuICAgKiBhZmZlY3QgdGhlIHN0YXRlLCBhbmQgdGhlIHN0YXRlIGdldHMgcGFzc2VkIGJhY2sgdG8gdGhlIFVJIGZvciBkaXNwbGF5LlxuICAgKlxuICAgKiDilIzilIDilIDilIDilIDilIDilIDilJBcbiAgICog4pSCICBVSSAg4peE4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUmCAgICAgICAg4pSCXG4gICAqICAgIOKUgiAgICAgICAgICAgIOKUglxuICAgKiDilIzilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilJAgICDilIJcbiAgICog4pSCICBBY3Rpb25zICDilIIgICDilIJcbiAgICog4pSU4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAg4pSCXG4gICAqICAgIOKUgiAgICAgICAgICAgIOKUglxuICAgKiDilIzilIDilIDilrzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilLTilIDilJBcbiAgICog4pSCICBTdGF0ZSByZWR1Y2VyICDilIJcbiAgICog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gICAqXG4gICAqIEZyb20gdGhlIGNvcmUgc3RhdGUsIGNhbGN1bGF0ZWQgc3RhdGUgaXMgZGVyaXZlZCBhbmQgYWRkZWQgdG8gdGhlIGNvcmVcbiAgICogc3RhdGUgKGUuZy4sIGZyb20gdGhlIHJhdyBzZWxlY3Rpb24gc3RhdGUgd2UgY2FuIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdFxuICAgKiBhbGwgdGhlIHJvd3Mgb24gdGhlIGN1cnJlbnRseSBkaXNwbGF5ZWQgcGFnZSBhcmUgc2VsZWN0ZWQsIGV0Yy4pLlxuICAgKi9cblxuICAvLy8vLy8vLy8vL1xuICAvLyBRdWVyeSAvL1xuICAvLy8vLy8vLy8vL1xuXG4gIC8vIFF1ZXJ5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgT3JkZXJEaXJlY3Rpb24gPSAnYXNjJyB8ICdkZXNjJztcbiAgZXhwb3J0IGNvbnN0IHBhZ2VTaXplcyA9IFsyNSwgNTAsIDEwMCwgMjUwXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgUXVlcnk8QyBleHRlbmRzIENvbHVtbiwgRiBleHRlbmRzIEZpbHRlcnM+ID0ge1xuICAgIG9yZGVyOiB7XG4gICAgICBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uO1xuICAgICAgY29sdW1uOiBDO1xuICAgIH0gfCBudWxsO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIHNlYXJjaENvbHVtbnM6IE1hcDxDLCBib29sZWFuPjtcbiAgICBmaWx0ZXJzOiBGIHwgbnVsbDtcbiAgICBwYWdpbmF0aW9uOiB7XG4gICAgICBwYWdlOiBudW1iZXI7XG4gICAgICBwYWdlU2l6ZTogbnVtYmVyO1xuICAgIH07XG4gICAgZ3JvdXBpbmc6IHtcbiAgICAgIHZpZXdNb3JlS2V5OiBzdHJpbmcgfCBudWxsO1xuICAgICAgZ3JvdXBzUGVyUGFnZTogbnVtYmVyO1xuICAgICAgY291bnRQZXJHcm91cDogbnVtYmVyO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUXVlcnkgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIFF1ZXJ5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9XG4gICAgfCB7IHR5cGU6ICdsb2FkJyB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdvcmRlckNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydvcmRlciddO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudSc7XG4gICAgICB9XG4gICAgfCB7IHR5cGU6ICdvcmRlckNvbHVtblRvZ2dsZSc7IGNvbHVtbjogQyB9XG4gICAgfCB7IHR5cGU6ICdzZWFyY2hDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoJ10gfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ29sdW1uc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydzZWFyY2hDb2x1bW5zJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyc0NoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydmaWx0ZXJzJ10gfVxuICAgIHwgeyB0eXBlOiAnZmlsdGVyQWRkJzsgY29sdW1uS2V5OiBzdHJpbmcgfVxuICAgIHwgeyB0eXBlOiAncGFnaW5hdGlvbkNoYW5nZSc7IHBheWxvYWQ6IFF1ZXJ5PEMsIEY+WydwYWdpbmF0aW9uJ10gfVxuICAgIHwgeyB0eXBlOiAnZ3JvdXBpbmdDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnZ3JvdXBpbmcnXSB9XG4gICAgfCB7IHR5cGU6ICduZXh0UGFnZU5hdmlnYXRlJyB9XG4gICAgfCB7IHR5cGU6ICdwcmV2aW91c1BhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncGFnZUNoYW5nZSc7IHBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdwYWdlU2l6ZUNoYW5nZSc7IHNpemU6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdncm91cHNQZXJQYWdlQ2hhbmdlJzsgZ3JvdXBzUGVyUGFnZTogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ2NvdW50UGVyR3JvdXBDaGFuZ2UnOyBjb3VudFBlckdyb3VwOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAndmlld01vcmVLZXlDaGFuZ2UnOyB2aWV3TW9yZUtleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ3RvZ2dsZUFsbFNlYXJjaENvbHVtbnMnIH07XG5cbiAgLy8vLy8vLy8vL1xuICAvLyBMb2FkIC8vXG4gIC8vLy8vLy8vLy9cblxuICBleHBvcnQgdHlwZSBMb2FkID0ge1xuICAgIGxvYWRpbmc6IGJvb2xlYW47XG4gICAgZXJyb3I6IHVua25vd24gfCBudWxsO1xuICB9O1xuXG4gIC8vLy8vLy8vLy8vL1xuICAvLyBSZXN1bHQgLy9cbiAgLy8vLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgUmVzdWx0PFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZC5cbiAgICAgKi9cbiAgICBjdXJyZW50UGFnZURhdGE6IFJbXTtcbiAgICAvKipcbiAgICAgKiBUaGUgdG90YWwgbnVtYmVyIG9mIHJvd3MgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgU3ViR3JvdXBSZXN1bHQ8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IFJlc3VsdDxSPiAmIHtcbiAgICAvKipcbiAgICAgKiBBbnkgb3RoZXIgcmVsZXZhbnQgZ3JvdXAgZGF0YSwgdXNlZCBmb3IgdGhlIHN1YmhlYWRlclxuICAgICAqL1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBHcm91cFJlc3VsdDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIC8qKlxuICAgICAqIFRoZSBmdWxsIHJvdyBkYXRhIGZvciB0aGUgY3VycmVudCBwYWdlLCBhZnRlciBmaWx0ZXJzLCBzZWFyY2ggcXVlcnksIGFuZFxuICAgICAqIHJvdyBvcmRlcmluZyBhcmUgYXBwbGllZCwgc3BsaXQgaW50byBncm91cHNcbiAgICAgKi9cbiAgICBncm91cFJlc3VsdHM6IFN1Ykdyb3VwUmVzdWx0PFIsIEc+W107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiBncm91cHMgKHJlZ2FyZGxlc3Mgb2YgcGFnaW5hdGlvbikgdGhhdCBtYXRjaCB0aGVcbiAgICAgKiBmaWx0ZXJzIGFuZCBzZWFyY2ggcXVlcnkuXG4gICAgICovXG4gICAgdG90YWxHcm91cENvdW50OiBudW1iZXI7XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuICBleHBvcnQgdHlwZSBTb3VyY2U8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gKFxuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPixcbiAgICBtb3N0UmVjZW50QWN0aW9uOiBBY3Rpb248UiwgQywgRiwgRz4sXG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ8Uj4gfCBHcm91cFJlc3VsdDxSLCBHPj47XG5cbiAgLy8vLy8vLy8vLy8vL1xuICAvLyBEaXNwbGF5IC8vXG4gIC8vLy8vLy8vLy8vLy9cblxuICAvLyBEaXNwbGF5IHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29sdW1uU2V0dGluZ3M8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAga2V5OiBDO1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICBwaW5uZWQ6IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIERpc3BsYXk8QyBleHRlbmRzIENvbHVtbj4gPSB7XG4gICAgY29sdW1uU2V0dGluZ3M6IENvbHVtblNldHRpbmdzPEM+W107XG4gICAgY2VsbFJvd1NwYW46IChyb3dJbmRleDogbnVtYmVyLCBjb2x1bW46IEMpID0+IG51bWJlcjtcbiAgfTtcblxuICAvLyBEaXNwbGF5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBEaXNwbGF5QWN0aW9uPEMgZXh0ZW5kcyBDb2x1bW4+ID1cbiAgICB8IHsgdHlwZTogJ2NvbHVtblNldHRpbmdzQ2hhbmdlJzsgcGF5bG9hZDogRGlzcGxheTxDPlsnY29sdW1uU2V0dGluZ3MnXSB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5QaW5DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbnNGcmVlemVVcFRvQ2hhbmdlJztcbiAgICAgICAgaW5kZXg6IG51bWJlcjtcbiAgICAgICAgZnJlZXplOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudScgfCAnb3B0aW9uc01lbnUnIHwgJ2ZyZWV6ZURpdmlkZXInO1xuICAgICAgICBjb2x1bW4/OiBDO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uT3JkZXJDaGFuZ2UnO1xuICAgICAgICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gICAgICAgIG5ld0luZGV4OiBudW1iZXI7XG4gICAgICAgIHNvdXJjZT86ICd0YWJsZURyYWcnIHwgJ21lbnVEcmFnJztcbiAgICAgICAgY29sdW1uPzogQztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk1vdmVUb0NoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcG9zaXRpb246ICdzdGFydCcgfCAnZW5kJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbkVuYWJsZWRDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICAgIHNvdXJjZT86ICdoZWFkZXJNZW51JyB8ICdvcHRpb25zTWVudScgfCAnZHJhZ0Ryb3AnIHwgJ2V5ZUljb24nO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc7XG4gICAgICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5XaWR0aENoYW5nZSc7XG4gICAgICAgIGNvbHVtbjogQztcbiAgICAgICAgcHJlZmVycmVkV2lkdGg6IG51bWJlciB8ICdhdXRvJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucyc7XG4gICAgICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vL1xuICAvLyBTZWxlY3Rpb24gLy9cbiAgLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gU2VsZWN0aW9uIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uPFIgZXh0ZW5kcyBSb3c+ID0ge1xuICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBSWydpZCddIHwgbnVsbDtcbiAgfSAmIChcbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnO1xuICAgICAgICBpbmNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICBtb2RlOiAnZXhjbHVkZSc7XG4gICAgICAgIGV4Y2x1ZGVkOiBTZXQ8UlsnaWQnXT47XG4gICAgICB9XG4gICk7XG5cbiAgLy8gU2VsZWN0aW9uIGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBTZWxlY3Rpb25BY3Rpb248UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0+ID1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3NlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFNlbGVjdGlvbjxSPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2dyb3VwU2VsZWN0aW9uQ2hhbmdlJztcbiAgICAgICAgcGF5bG9hZDogUm93R3JvdXA8UiwgRz47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyb3dTZWxlY3RlZENoYW5nZSc7XG4gICAgICAgIGlkOiBSWydpZCddO1xuICAgICAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgICAgICAgY29udGlndW91czogYm9vbGVhbjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ3BhZ2VTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdhbGxTZWxlY3RlZENoYW5nZSc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DbGVhcic7XG4gICAgICB9O1xuXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFB1dHRpbmcgaXQgYWxsIHRvZ2V0aGVyIC8vXG4gIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgLy8gQ29tYmluZWQgc3RhdGUgLy9cblxuICBleHBvcnQgdHlwZSBDb3JlU3RhdGU8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0ge1xuICAgIHF1ZXJ5OiBRdWVyeTxDLCBGPjtcbiAgICBsb2FkOiBMb2FkO1xuICAgIHJlc3VsdDogUmVzdWx0PFI+IHwgR3JvdXBSZXN1bHQ8UiwgRz47XG4gICAgZGlzcGxheTogRGlzcGxheTxDPjtcbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbjxSPjtcbiAgfTtcblxuICAvLyBDb21iaW5lZCBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgQWN0aW9uPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IFF1ZXJ5QWN0aW9uPEMsIEY+IHwgRGlzcGxheUFjdGlvbjxDPiB8IFNlbGVjdGlvbkFjdGlvbjxSLCBHPjtcblxuICBleHBvcnQgdHlwZSBFZmZlY3QgPSAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJztcblxuICAvLyBGdWxsIHN0YXRlIChjb3JlIHN0YXRlIHBsdXMgcHVyZSBkZXJpdmF0aW9ucykgLy9cbiAgZXhwb3J0IGNvbnN0IENvbHVtbnNNYXhTaG93bjogbnVtYmVyID0gNTA7XG4gIGV4cG9ydCBjb25zdCBDb2x1bW5EYXRhVHlwZXMgPSBbXG4gICAgJ2FkdmFuY2VkJyxcbiAgICAnY3VycmVuY3knLFxuICAgICdkYXRlJyxcbiAgICAnaWNvbicsXG4gICAgJ2xvbmdUZXh0JyxcbiAgICAnbnVtYmVyJyxcbiAgICAnc2hvcnRUZXh0JyxcbiAgXSBhcyBjb25zdDtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uRGF0YVR5cGUgPSAodHlwZW9mIENvbHVtbkRhdGFUeXBlcylbbnVtYmVyXTtcbiAgZXhwb3J0IHR5cGUgQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnIHwgJ2NlbnRlcicgfCAncmlnaHQnO1xuICBleHBvcnQgdHlwZSBDb2x1bW5NZXRhZGF0YSA9IHtcbiAgICBvcmRlcmFibGU6IGJvb2xlYW47XG4gICAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZT86IGJvb2xlYW47XG4gICAgbWluV2lkdGg6IG51bWJlcjtcbiAgICBkYXRhVHlwZTogQ29sdW1uRGF0YVR5cGU7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgZGVmYXVsdFBpbm5lZD86IGJvb2xlYW47XG4gICAgY2xpY2tQcmV2ZW50RGVmYXVsdD86IGJvb2xlYW47XG4gICAgY2xpY2tTdG9wUHJvcGFnYXRpb24/OiBib29sZWFuO1xuICAgIGRpc3BsYXlOYW1lPzogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBFeHRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2V4dGVybmFsJztcbiAgICBocmVmOiBzdHJpbmc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEludGVybmFsUm93TGluayA9IHtcbiAgICB0eXBlOiAnaW50ZXJuYWwnO1xuICAgIHJvdXRlckxpbms6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIGFjdGl2ZT86IGJvb2xlYW47XG4gIH07XG4gIGV4cG9ydCB0eXBlIFJvd0xpbmsgPSBFeHRlcm5hbFJvd0xpbmsgfCBJbnRlcm5hbFJvd0xpbms7XG4gIGV4cG9ydCB0eXBlIEZ1bGxSb3c8UiBleHRlbmRzIFJvdz4gPSBSICYge1xuICAgIHJvd0xpbms6IFJvd0xpbmsgfCBudWxsO1xuICAgIHNlbGVjdGVkOiBib29sZWFuO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFJvd0dyb3VwPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSB7XG4gICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgIHNlbGVjdGVkOiBNdWx0aVNlbGVjdGlvblN0YXRlO1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICAgIGdyb3VwRGF0YTogRztcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRnVsbENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uPiA9IENvbHVtblNldHRpbmdzPEM+ICZcbiAgICBDb2x1bW5NZXRhZGF0YSAmIHtcbiAgICAgIHdpZHRoOiBudW1iZXI7XG4gICAgICBsZWZ0OiBudW1iZXIgfCBudWxsO1xuICAgICAgYWxpZ25tZW50OiBDb2x1bW5BbGlnbm1lbnQ7XG4gICAgfTtcbiAgZXhwb3J0IHR5cGUgTXVsdGlTZWxlY3Rpb25TdGF0ZSA9IGJvb2xlYW4gfCAnaW5kZXRlcm1pbmF0ZSc7XG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbkNvbmZpZ3VyYXRpb24gPSBib29sZWFuIHwgJ2luZGl2aWR1YWwnO1xuXG4gIGV4cG9ydCB0eXBlIFJvd1NwYW5HZXR0ZXI8QyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IEMsXG4gICkgPT4gbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcblxuICBleHBvcnQgdHlwZSBWYWxpZFJvd1NwYW5HZXR0ZXI8QyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBjb2x1bW46IEMsXG4gICkgPT4gbnVtYmVyO1xuXG4gIGV4cG9ydCB0eXBlIENzdkNlbGxGb3JtYXR0ZXI8UiBleHRlbmRzIFJvdywgQyBleHRlbmRzIENvbHVtbj4gPSAoXG4gICAgcm93OiBSLFxuICAgIGNvbHVtbjogRnVsbENvbHVtbjxDPixcbiAgKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIGV4cG9ydCB0eXBlIENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0gKFxuICAgIHJvdzogUixcbiAgICBncm91cDogRyxcbiAgKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIGV4cG9ydCB0eXBlIENzdlJvdyA9IHN0cmluZ1tdO1xuICBleHBvcnQgdHlwZSBDc3YgPSBDc3ZSb3dbXTtcbiAgZXhwb3J0IHR5cGUgQ3N2TW9kZSA9ICdmdWxsJyB8ICdzZWxlY3Rpb24nO1xuICBleHBvcnQgdHlwZSBDc3ZPdXRwdXQgPVxuICAgIHwgeyBsb2FkaW5nOiB0cnVlOyBkYXRhOiBudWxsIH1cbiAgICB8IHsgbG9hZGluZzogZmFsc2U7IGRhdGE6IENzdiB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtbk5hbWVNYXA8QyBleHRlbmRzIENvbHVtbj4gPSBNYXA8QywgQyB8IHN0cmluZz47XG5cbiAgZXhwb3J0IHR5cGUgU2VhcmNoYWJsZUNvbHVtbk1hcDxDIGV4dGVuZHMgQ29sdW1uPiA9IE1hcDxDLCBib29sZWFuPjtcblxuICBleHBvcnQgdHlwZSBGdWxsU3RhdGU8XG4gICAgUiBleHRlbmRzIFJvdyxcbiAgICBDIGV4dGVuZHMgQ29sdW1uLFxuICAgIEYgZXh0ZW5kcyBGaWx0ZXJzLFxuICAgIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9LFxuICA+ID0gQ29yZVN0YXRlPFIsIEMsIEYsIEc+ICYge1xuICAgIHF1ZXJ5OiB7XG4gICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgIHByZXZpb3VzOiBudW1iZXIgfCBudWxsO1xuICAgICAgICBwYWdlczogbnVtYmVyW107XG4gICAgICAgIG5leHQ6IG51bWJlciB8IG51bGw7XG4gICAgICAgIHBhZ2VDb3VudDogbnVtYmVyO1xuICAgICAgICBzaG93Q29udHJvbHM6IGJvb2xlYW47XG4gICAgICAgIHBhZ2VSb3dTdGFydDogbnVtYmVyO1xuICAgICAgICBwYWdlUm93RW5kOiBudW1iZXI7XG4gICAgICB9O1xuICAgICAgbm9TZWFyY2hDb2x1bW5zU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgfTtcbiAgICByZXN1bHQ6XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93c0FzR3JvdXA6IFJvd0dyb3VwPFIsIEc+O1xuICAgICAgICAgIGlzR3JvdXBlZDogZmFsc2U7XG4gICAgICAgICAgY3N2RGF0YTogKG1vZGU/OiBDc3ZNb2RlKSA9PiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+O1xuICAgICAgICAgIGNzdkZpbGVuYW1lOiBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgIHwge1xuICAgICAgICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICAgICAgICByb3dHcm91cHM6IFJvd0dyb3VwPFIsIEc+W107XG4gICAgICAgICAgaXNHcm91cGVkOiB0cnVlO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9O1xuICAgIGRpc3BsYXk6IHtcbiAgICAgIGNvbHVtbnM6IEZ1bGxDb2x1bW48Qz5bXTtcbiAgICAgIGFsbENvbHVtbnM6IENvbHVtblNldHRpbmdzPEM+W107XG4gICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+O1xuICAgICAgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPjtcbiAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZyB8IG51bGw7XG4gICAgICBjb2x1bW5zQXJlRnJlZXphYmxlOiBib29sZWFuO1xuICAgICAgY29sdW1uc0FyZUhpZGVhYmxlOiBib29sZWFuO1xuICAgICAgcm93c0FyZUdyYXllZDogYm9vbGVhbjtcbiAgICAgIGN1c3RvbVN1bW1hcnlSb3c6IGJvb2xlYW47XG4gICAgICBjc3ZFeHBvcnRBbGxvd2VkOiBib29sZWFuO1xuICAgICAgZW5hYmxlZENvdW50OiBudW1iZXI7XG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBib29sZWFuO1xuICAgIH07XG4gICAgc2VsZWN0aW9uOiB7XG4gICAgICBhbGxvd1NlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBzZWxlY3RlZENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZXIgaXMgd2hhdCBzZXRzIHVwIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB0cmFuc2xhdGVzIHVzZXIgYWN0aW9uc1xuICAgKiAobGlrZSBwYWdpbmF0aW9uIG9yIGZpbHRlciBjaGFuZ2VzLCBldGMuKSBpbnRvIG5ldyByb3cgZGF0YSBieSBjYWxsaW5nIHRoZVxuICAgKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCBhbHNvIGF1Z21lbnRzIHRoZSBjb3JlIHN0YXRlIHdpdGggYWRkaXRpb25hbCBkZXJpdmVkXG4gICAqIHN0YXRlLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICByb3dMaW5rPzogKHJvdzogUiwgZ3JvdXA/OiBHKSA9PiBSb3dMaW5rO1xuICAgIGNzdkNlbGxGb3JtYXR0ZXI/OiBDc3ZDZWxsRm9ybWF0dGVyPFIsIEM+O1xuICAgIGNzdkdyb3VwQ2VsbEZvcm1hdHRlcj86IENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSLCBHPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gICAgYWxsb3dTZWxlY3Rpb24/OiBTZWxlY3Rpb25Db25maWd1cmF0aW9uO1xuICAgIGNvbHVtbnNBcmVGcmVlemFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVIaWRlYWJsZT86IGJvb2xlYW47XG4gICAgZGVmYXVsdENvbHVtblN0YXRlPzogQ29sdW1uU2V0dGluZ3M8Qz5bXTtcbiAgICByb3dzQXJlR3JheWVkPzogYm9vbGVhbjtcbiAgICBjdXN0b21TdW1tYXJ5Um93PzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBQYXJlbnQtY29udHJvbGxlZCByb3cgc3Bhbm5pbmcuXG4gICAgICogUmV0dXJuIDAgdG8gc3VwcHJlc3MgdGhlIGNlbGwsID49MSBmb3IgYSByZWFsIHJvd3NwYW4uXG4gICAgICogSWYgb21pdHRlZCBvciBpbnZhbGlkLCBkZWZhdWx0cyB0byAxLlxuICAgICAqL1xuICAgIGdldFJvd1NwYW5Gb3JDZWxsPzogUm93U3BhbkdldHRlcjxDPjtcbiAgfTtcblxuICBleHBvcnQgZnVuY3Rpb24gY3JlYXRlTWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4oXG4gICAgc291cmNlOiBTb3VyY2U8UiwgQywgRiwgRz4sXG4gICAgY29sdW1uczogTWFwPEMsIENvbHVtbk1ldGFkYXRhPixcbiAgICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+LFxuICApOiBNYW5hZ2VyPFIsIEMsIEYsIEc+IHtcbiAgICAvLyBTZXQgdXAgdGhlIGluaXRpYWwgdGFibGUgc3RhdGUuXG5cbiAgICBjb25zdCBzZWFyY2hhYmxlQ29sdW1uTWFwOiBTZWFyY2hhYmxlQ29sdW1uTWFwPEM+ID0gbmV3IE1hcDxDLCBib29sZWFuPihcbiAgICAgIEFycmF5LmZyb20oY29sdW1ucy5lbnRyaWVzKCkpLm1hcCgoW2tleSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgbWV0YWRhdGEuc2VhcmNoYWJsZSA/PyB0cnVlLFxuICAgICAgXSksXG4gICAgKTtcbiAgICBjb25zdCBkZWZhdWx0U3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiA9IHtcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIG9yZGVyOiBudWxsLFxuICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICBzZWFyY2hDb2x1bW5zOiBuZXcgTWFwKFxuICAgICAgICAgIEFycmF5LmZyb20oY29sdW1ucy5rZXlzKCkpXG4gICAgICAgICAgICAuZmlsdGVyKGtleSA9PiBzZWFyY2hhYmxlQ29sdW1uTWFwLmdldChrZXkpKVxuICAgICAgICAgICAgLm1hcChrZXkgPT4gW2tleSwgdHJ1ZV0pLFxuICAgICAgICApLFxuICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICBwYWdlU2l6ZTogMjUsXG4gICAgICAgIH0sXG4gICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgdmlld01vcmVLZXk6IG51bGwsXG4gICAgICAgICAgZ3JvdXBzUGVyUGFnZTogNSxcbiAgICAgICAgICBjb3VudFBlckdyb3VwOiAxMCxcbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyczogbnVsbCxcbiAgICAgIH0sXG4gICAgICBsb2FkOiB7IGxvYWRpbmc6IGZhbHNlLCBlcnJvcjogbnVsbCB9LFxuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGN1cnJlbnRQYWdlRGF0YTogW10sXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogMCxcbiAgICAgIH0sXG4gICAgICBkaXNwbGF5OiB7XG4gICAgICAgIGNvbHVtblNldHRpbmdzOiBbXSxcbiAgICAgICAgY2VsbFJvd1NwYW46IChfaTogbnVtYmVyLCBfY29sdW1uOiBDKSA9PiAxLFxuICAgICAgfSxcbiAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogbnVsbCxcbiAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgfSxcbiAgICB9O1xuICAgIGNvbnN0IGRlZmF1bHRlZEluaXRpYWxTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0gZGVmYXVsdHNEZWVwKFxuICAgICAge30sXG4gICAgICBvcHRpb25zPy5pbml0aWFsU3RhdGUsXG4gICAgICBkZWZhdWx0U3RhdGUsXG4gICAgKTtcblxuICAgIGNvbnN0IGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz4gPSBuZXcgTWFwPEMsIEMgfCBzdHJpbmc+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBtZXRhZGF0YS5kaXNwbGF5TmFtZSA/PyBrZXksXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgY29uc3QgZGVmYXVsdENvbHVtblN0YXRlID1cbiAgICAgIG9wdGlvbnM/LmRlZmF1bHRDb2x1bW5TdGF0ZSA/P1xuICAgICAgZGVmYXVsdGVkSW5pdGlhbFN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3M7XG5cbiAgICAvLyBXaXJlIHVwIHJlZHVjZWQgc3RhdGUgZnJvbSBhY3Rpb25zIGFuZCBpbml0aWFsIHN0YXRlLlxuICAgIGNvbnN0IGFjdGlvbnM6IFN1YmplY3Q8QWN0aW9uPFIsIEMsIEYsIEc+PiA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgY29yZVN0YXRlOiBPYnNlcnZhYmxlPHtcbiAgICAgIHN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgICBlZmZlY3Q6IEVmZmVjdCB8IG51bGw7XG4gICAgfT4gPSBhY3Rpb25zLnBpcGUoXG4gICAgICBtZXJnZVNjYW48XG4gICAgICAgIEFjdGlvbjxSLCBDLCBGLCBHPixcbiAgICAgICAge1xuICAgICAgICAgIHN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz47XG4gICAgICAgICAgZWZmZWN0OiBFZmZlY3QgfCBudWxsO1xuICAgICAgICB9XG4gICAgICA+KFxuICAgICAgICAoeyBzdGF0ZSB9LCBhY3Rpb24pID0+XG4gICAgICAgICAgZnJvbShcbiAgICAgICAgICAgIHJlZHVjZShcbiAgICAgICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgc291cmNlLFxuICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICBkZWZhdWx0Q29sdW1uU3RhdGUsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICksXG4gICAgICAgIHsgc3RhdGU6IGRlZmF1bHRlZEluaXRpYWxTdGF0ZSwgZWZmZWN0OiBudWxsIH0sXG4gICAgICAgIDEsXG4gICAgICApLFxuICAgICAgc2hhcmUoe1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRXJyb3I6IGZhbHNlLFxuICAgICAgICByZXNldE9uQ29tcGxldGU6IGZhbHNlLFxuICAgICAgICByZXNldE9uUmVmQ291bnRaZXJvOiBmYWxzZSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBjc3ZFeHBvcnRBbGxvd2VkID0gIShcbiAgICAgIG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsIHx8IG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3dcbiAgICApO1xuXG4gICAgLy8gQXVnbWVudCBzdGF0ZSB3aXRoIGRlcml2ZWQgc3RhdGUsIGFuZCBzdWJzY3JpYmUuXG4gICAgY29uc3Qgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPj4gPSBjb25uZWN0YWJsZShcbiAgICAgIGNvcmVTdGF0ZS5waXBlKFxuICAgICAgICBtYXAoKHsgc3RhdGU6IHMgfSk6IEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPiA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRDb2x1bW5zID0gcmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAhIW9wdGlvbnM/LmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoaXNHcm91cFJlc3VsdChzLnJlc3VsdCkpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zPy5nZXRSb3dTcGFuRm9yQ2VsbCkge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gcm93IHNwYW5zIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmN1c3RvbVN1bW1hcnlSb3cpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICdIZWFkcyB1cCEgQ3VzdG9tIHN1bW1hcnkgcm93cyBhcmUgbm90IHN1cHBvcnRlZCBmb3IgZ3JvdXBlZCB0YWJsZXMuJyxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3Qgcm93R3JvdXBzID0gcy5yZXN1bHQuZ3JvdXBSZXN1bHRzLm1hcChncm91cCA9PiAoe1xuICAgICAgICAgICAgICByb3dzOiBncm91cC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnJvdyxcbiAgICAgICAgICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rXG4gICAgICAgICAgICAgICAgICA/IG9wdGlvbnMucm93TGluayhyb3csIGdyb3VwLmdyb3VwRGF0YSlcbiAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBpc0dyb3VwU2VsZWN0ZWQocywgZ3JvdXApLFxuICAgICAgICAgICAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IGdyb3VwLnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgICAgICAgICAgICAgZ3JvdXBEYXRhOiBncm91cC5ncm91cERhdGEsXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uKiBjc3ZEYXRhKFxuICAgICAgICAgICAgICBtb2RlOiBDc3ZNb2RlID0gJ2Z1bGwnLFxuICAgICAgICAgICAgKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZDZWxsRm9ybWF0dGVyO1xuICAgICAgICAgICAgICBjb25zdCBncm91cENlbGxGb3JtYXR0ZXIgPSBvcHRpb25zPy5jc3ZHcm91cENlbGxGb3JtYXR0ZXI7XG4gICAgICAgICAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogcy5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKCFpc0dyb3VwUmVzdWx0KGRhdGFTZXQpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdSZXR1cm5lZCBub24tZ3JvdXBlZCBDU1YgZGF0YSBmb3IgZ3JvdXBlZCB0YWJsZScsXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBjb25zdCBmdWxsQ29sdW1ucyA9IHJlc29sdmVDb2x1bW5zKFxuICAgICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICAgICEhb3B0aW9ucy5hbGxvd1NlbGVjdGlvbixcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YTogQ3N2ID0gW107XG4gICAgICAgICAgICAgIGRhdGEucHVzaChcbiAgICAgICAgICAgICAgICBmdWxsQ29sdW1ucy5tYXAoKHsga2V5IH0pID0+IGNvbHVtbk5hbWVNYXAuZ2V0KGtleSkgPz8ga2V5KSxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoZ3JvdXBDZWxsRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICAgICAgZGF0YVswXS5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAoY29uc3Qgcm93SXRlbSBvZiBkYXRhU2V0Lmdyb3VwUmVzdWx0cy5mbGF0TWFwKGdyb3VwcyA9PlxuICAgICAgICAgICAgICAgIGdyb3Vwcy5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgZ3JvdXA6IGdyb3Vwcy5ncm91cERhdGEsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICApKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gcm93SXRlbS5yb3c7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdzZWxlY3Rpb24nICYmICFpc1Jvd1NlbGVjdGVkKHMsIHJlY29yZC5pZCkpXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3c6IENzdlJvdyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChncm91cENlbGxGb3JtYXR0ZXIgJiYgcm93SXRlbS5ncm91cCkge1xuICAgICAgICAgICAgICAgICAgcm93LnB1c2goYXdhaXQgZ3JvdXBDZWxsRm9ybWF0dGVyKHJlY29yZCwgcm93SXRlbS5ncm91cCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhLnB1c2gocm93KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB5aWVsZCB7IGxvYWRpbmc6IGZhbHNlLCBkYXRhIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIC4uLnMsXG4gICAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5xdWVyeSxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LnBhZ2luYXRpb24sXG4gICAgICAgICAgICAgICAgICBwcmV2aW91czogZ2V0UHJldmlvdXNQYWdlKHMpLFxuICAgICAgICAgICAgICAgICAgcGFnZXM6IGdldFBhZ2VzKHMpLFxuICAgICAgICAgICAgICAgICAgbmV4dDogZ2V0TmV4dFBhZ2UocyksXG4gICAgICAgICAgICAgICAgICBwYWdlQ291bnQ6IGdldFBhZ2VDb3VudChzKSxcbiAgICAgICAgICAgICAgICAgIHNob3dDb250cm9sczogZ2V0U2hvd1BhZ2luYXRpb25Db250cm9scyhzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VSb3dTdGFydDogZ2V0UGFnZVJvd1N0YXJ0KHMpLFxuICAgICAgICAgICAgICAgICAgcGFnZVJvd0VuZDogZ2V0UGFnZVJvd0VuZChzKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG5vU2VhcmNoQ29sdW1uc1NlbGVjdGVkOiBnZXRTZWFyY2hDb2x1bW5zU2VsZWN0ZWRTdGF0ZShcbiAgICAgICAgICAgICAgICAgIHMsXG4gICAgICAgICAgICAgICAgICAnbm9uZScsXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgICAgIC4uLnMuZGlzcGxheSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zOiByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgICAgICAgICAgYWxsQ29sdW1uczogZ2V0QWxsQ29sdW1ucyhzLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKSxcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lTWFwOiBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgICAgICAgIHNlYXJjaGFibGVDb2x1bW5NYXA6IHNlYXJjaGFibGVDb2x1bW5NYXAsXG4gICAgICAgICAgICAgICAgemVyb1N0YXRlTWVzc2FnZTogZ2V0WmVyb1N0YXRlTWVzc2FnZShzLCBwbHVyYWxFbnRpdHlOYW1lKSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zQXJlRnJlZXphYmxlOiAhIW9wdGlvbnM/LmNvbHVtbnNBcmVGcmVlemFibGUsXG4gICAgICAgICAgICAgICAgY29sdW1uc0FyZUhpZGVhYmxlOiAhIW9wdGlvbnM/LmNvbHVtbnNBcmVIaWRlYWJsZSxcbiAgICAgICAgICAgICAgICByb3dzQXJlR3JheWVkOiAhIW9wdGlvbnM/LnJvd3NBcmVHcmF5ZWQsXG4gICAgICAgICAgICAgICAgY3VzdG9tU3VtbWFyeVJvdzogISFvcHRpb25zPy5jdXN0b21TdW1tYXJ5Um93LFxuICAgICAgICAgICAgICAgIGNzdkV4cG9ydEFsbG93ZWQsXG4gICAgICAgICAgICAgICAgZW5hYmxlZENvdW50OiByZXNvbHZlZENvbHVtbnMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGNlbGxSb3dTcGFuOiAoX2k6IG51bWJlciwgX2NvbHVtbjogQykgPT4gMSxcbiAgICAgICAgICAgICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAoKSA9PiBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4ucy5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgYWxsb3dTZWxlY3Rpb246IG9wdGlvbnM/LmFsbG93U2VsZWN0aW9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzQWxsU2VsZWN0ZWQ6IGlzQWxsU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgICAgaXNDdXJyZW50UGFnZVNlbGVjdGVkOiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3VudDogc2VsZWN0ZWRDb3VudChzKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5yZXN1bHQsXG4gICAgICAgICAgICAgICAgaXNHcm91cGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIHJvd0dyb3VwcyxcbiAgICAgICAgICAgICAgICByb3dzOiByb3dHcm91cHMuZmxhdE1hcChncm91cCA9PiBncm91cC5yb3dzKSxcbiAgICAgICAgICAgICAgICBjc3ZEYXRhLFxuICAgICAgICAgICAgICAgIGNzdkZpbGVuYW1lOiBnZXRDc3ZGaWxlbmFtZShwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBzLnJlc3VsdC5jdXJyZW50UGFnZURhdGEubWFwKHJvdyA9PiAoe1xuICAgICAgICAgICAgICAuLi5yb3csXG4gICAgICAgICAgICAgIHJvd0xpbms6IG9wdGlvbnM/LnJvd0xpbmsgPyBvcHRpb25zLnJvd0xpbmsocm93KSA6IG51bGwsXG4gICAgICAgICAgICAgIHNlbGVjdGVkOiBpc1Jvd1NlbGVjdGVkKHMsIHJvdy5pZCksXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNlbGxSb3dTcGFuQ2FjaGUgPSBtZW1vaXplZENlbGxSb3dTcGFuKFxuICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICByZXNvbHZlZENvbHVtbnMsXG4gICAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY2VsbFJvd1NwYW46IFZhbGlkUm93U3BhbkdldHRlcjxDPiA9IChyb3dJbmRleCwgY29sdW1uKSA9PlxuICAgICAgICAgICAgICBjZWxsUm93U3BhbkNhY2hlPy5nZXQoY29sdW1uKT8uW3Jvd0luZGV4XSA/PyAxO1xuICAgICAgICAgICAgY29uc3QgaGFzQW55Um93U3BhbnMgPSBjZWxsUm93U3BhbkNhY2hlXG4gICAgICAgICAgICAgID8gWy4uLmNlbGxSb3dTcGFuQ2FjaGUudmFsdWVzKCldLnNvbWUoc3BhbnMgPT5cbiAgICAgICAgICAgICAgICAgIHNwYW5zLnNvbWUoc3BhbiA9PiBzcGFuID4gMSksXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IGZhbHNlO1xuXG4gICAgICAgICAgICBjb25zdCByZXNvbHZlZENvbHVtbktleXMgPSByZXNvbHZlZENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBrZXkpO1xuXG4gICAgICAgICAgICBhc3luYyBmdW5jdGlvbiogY3N2RGF0YShtb2RlID0gJ2Z1bGwnKTogQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PiB7XG4gICAgICAgICAgICAgIGlmICghY3N2RXhwb3J0QWxsb3dlZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdDU1YgZXhwb3J0IGlzIG5vdCBzdXBwb3J0ZWQgd2hlbiByb3cgc3Bhbm5pbmcgb3IgYSBjdXN0b20gc3VtbWFyeSByb3cgaXMgZW5hYmxlZC4nLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjb25zdCBjZWxsRm9ybWF0dGVyID0gb3B0aW9ucz8uY3N2Q2VsbEZvcm1hdHRlcjtcbiAgICAgICAgICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBzLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoaXNHcm91cFJlc3VsdChkYXRhU2V0KSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnUmV0dXJuZWQgZ3JvdXBlZCBDU1YgZGF0YSBmb3Igbm9uLWdyb3VwZWQgdGFibGUnLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgY29uc3QgZnVsbENvbHVtbnMgPSByZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgICAhIW9wdGlvbnMuYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGNvbnN0IGRhdGE6IENzdiA9IFtdO1xuICAgICAgICAgICAgICBkYXRhLnB1c2goXG4gICAgICAgICAgICAgICAgZnVsbENvbHVtbnMubWFwKCh7IGtleSB9KSA9PiBjb2x1bW5OYW1lTWFwLmdldChrZXkpID8/IGtleSksXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2YgZGF0YVNldC5jdXJyZW50UGFnZURhdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3NlbGVjdGlvbicgJiYgIWlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKSlcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGNlbGxGb3JtYXR0ZXIocmVjb3JkLCBjb2x1bW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YS5wdXNoKHJvdyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgeWllbGQgeyBsb2FkaW5nOiBmYWxzZSwgZGF0YSB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5zLFxuICAgICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgICAgb3JkZXI6IGhhc0FueVJvd1NwYW5zID8gbnVsbCA6IHMucXVlcnkub3JkZXIsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgLi4ucy5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICAgICAgcHJldmlvdXM6IGdldFByZXZpb3VzUGFnZShzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VzOiBnZXRQYWdlcyhzKSxcbiAgICAgICAgICAgICAgICAgIG5leHQ6IGdldE5leHRQYWdlKHMpLFxuICAgICAgICAgICAgICAgICAgcGFnZUNvdW50OiBnZXRQYWdlQ291bnQocyksXG4gICAgICAgICAgICAgICAgICBzaG93Q29udHJvbHM6IGdldFNob3dQYWdpbmF0aW9uQ29udHJvbHMocyksXG4gICAgICAgICAgICAgICAgICBwYWdlUm93U3RhcnQ6IGdldFBhZ2VSb3dTdGFydChzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VSb3dFbmQ6IGdldFBhZ2VSb3dFbmQocyksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBub1NlYXJjaENvbHVtbnNTZWxlY3RlZDogZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGUoXG4gICAgICAgICAgICAgICAgICBzLFxuICAgICAgICAgICAgICAgICAgJ25vbmUnLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgICAgICAgICAuLi5zLmRpc3BsYXksXG4gICAgICAgICAgICAgICAgY29sdW1uczogcmVzb2x2ZWRDb2x1bW5zLm1hcChjb2x1bW4gPT5cbiAgICAgICAgICAgICAgICAgIGhhc0FueVJvd1NwYW5zID8geyAuLi5jb2x1bW4sIG9yZGVyYWJsZTogZmFsc2UgfSA6IGNvbHVtbixcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIGFsbENvbHVtbnM6IGdldEFsbENvbHVtbnMocywgY29sdW1ucywgY29sdW1uTmFtZU1hcCksXG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZU1hcDogY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICAgICBzZWFyY2hhYmxlQ29sdW1uTWFwOiBzZWFyY2hhYmxlQ29sdW1uTWFwLFxuICAgICAgICAgICAgICAgIHplcm9TdGF0ZU1lc3NhZ2U6IGdldFplcm9TdGF0ZU1lc3NhZ2UocywgcGx1cmFsRW50aXR5TmFtZSksXG4gICAgICAgICAgICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlRnJlZXphYmxlLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogISFvcHRpb25zPy5jb2x1bW5zQXJlSGlkZWFibGUsXG4gICAgICAgICAgICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgICAgICAgICAgIGN1c3RvbVN1bW1hcnlSb3c6ICEhb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdyxcbiAgICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBjZWxsUm93U3BhbixcbiAgICAgICAgICAgICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpID0gcmVzb2x2ZWRDb2x1bW5LZXlzLmZpbmRJbmRleChrZXkgPT4ga2V5ID09PSBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPT09IHJlc29sdmVkQ29sdW1uS2V5cy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sS2V5ID0gcmVzb2x2ZWRDb2x1bW5LZXlzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5PblJpZ2h0ID0gY2VsbFJvd1NwYW4ocm93SW5kZXgsIHJpZ2h0Q29sS2V5KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzcGFuT25SaWdodCA+IDEgfHwgc3Bhbk9uUmlnaHQgPT09IDA7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4ucy5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgYWxsb3dTZWxlY3Rpb246IG9wdGlvbnM/LmFsbG93U2VsZWN0aW9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzQWxsU2VsZWN0ZWQ6IGlzQWxsU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgICAgaXNDdXJyZW50UGFnZVNlbGVjdGVkOiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3VudDogc2VsZWN0ZWRDb3VudChzKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5yZXN1bHQsXG4gICAgICAgICAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgICAgIHJvd3NBc0dyb3VwOiB7XG4gICAgICAgICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiByb3dzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIGdyb3VwRGF0YTogeyBrZXk6ICcnIH0gYXMgRyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNzdkZpbGVuYW1lOiBnZXRDc3ZGaWxlbmFtZShwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBjc3ZEYXRhLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzY2FuKChzdGFibGUsIG5ld1N0YXRlKSA9PiBzdGFibGVTdGF0ZShzdGFibGUsIG5ld1N0YXRlKSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBlZmZlY3QgfSkgPT4gZWZmZWN0ICE9PSBudWxsKSxcbiAgICAgICAgbWFwKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgYXMgRWZmZWN0KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBlZmZlY3RzLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgaW5pdGlhbCB0YWJsZSByb3cgZGF0YS5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSwgZWZmZWN0cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3QgdGFibGVzIHVzZSByZW1vdGUgYmFja2VuZHMgdG8gZmV0Y2ggZGF0YSBhc3luY2hyb25vdXNseSwgYnV0IGFuXG4gICAqIGluLW1lbW9yeSBzb3VyY2UgaXMgdXNlZnVsIGZvciBzbWFsbCBkYXRhc2V0cywgd2hlbiBSaXZUYWJsZSBmZWF0dXJlcyBsaWtlXG4gICAqIG9yZGVyaW5nIGFuZCBwYWdpbmF0aW9uIGFyZSBkZXNpcmVkLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFIgZXh0ZW5kcyBSb3c+ID0gT21pdDxcbiAgICBDb2x1bW5NZXRhZGF0YSxcbiAgICAnb3JkZXJhYmxlJ1xuICA+ICYgeyBvcmRlcktleT86IGtleW9mIFIgfTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+ICYge1xuICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPFI+O1xuICAgIGZpbHRlcj86IChmaWx0ZXJzOiBGIHwgbnVsbCwgcm93OiBSKSA9PiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gYHF1ZXJ5Lm9yZGVyYCBpcyBudWxsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgc2VhcmNoLCByb3dzIGFyZSBvcmRlcmVkXG4gICAgICogYnkgdGhpcyBjb2x1bW4uIElmIG9taXR0ZWQsIHRoZSBmaXJzdCBjb2x1bW4gd2l0aCBhbiBgb3JkZXJLZXlgIGlzIHVzZWRcbiAgICAgKiAoYXNjZW5kaW5nKS5cbiAgICAgKi9cbiAgICBkZWZhdWx0U29ydD86IHsgY29sdW1uOiBDOyBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uIH07XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPFJbXT4gfCBSW10sXG4gICAgY29sdW1uczogTWFwPEMsIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICAvL0ZvciBpbk1lbW9yeU1hbmFnZXJzIHRoYXQgZG8gbm90IHV0aWxpemUgc2VhcmNoQ29sdW1ucyxcbiAgICAgIC8vd2UgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIGZ1c2VPcHRpb25zXG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgLy9QcmV2ZW50IHNlYXJjaGluZyBvbiBjb2x1bW5zIHRoYXQgYXJlIGluIGZ1c2Ugb3B0aW9ucyBidXQgbm90IHN1cHBvcnRlZCBieSBzZWFyY2guXG4gICAgICAgIGNvbnN0IG5vblNlYXJjaGFibGVDb2x1bW5zS2V5cyA9IG9wdGlvbnM/LmZ1c2VPcHRpb25zPy5rZXlzXG4gICAgICAgICAgPyBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5zZWFyY2hhYmxlID09IGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5vcmRlcktleT8udG9TdHJpbmcoKSB8fCBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZnVzZU9wdGlvbnMgPVxuICAgICAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zICYmIG5vblNlYXJjaGFibGVDb2x1bW5zS2V5c1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAga2V5czogb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIGsgPT4gIW5vblNlYXJjaGFibGVDb2x1bW5zS2V5cy5pbmNsdWRlcyhrLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogb3B0aW9ucz8uZnVzZU9wdGlvbnM7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIGZ1c2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnc2VhcmNoQ29sdW1uc0NoYW5nZScgfHxcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucydcbiAgICAgICkge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICBsZXQgb3JkZXJlZDogUltdO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcbiAgICAgICAgb3JkZXJlZCA9XG4gICAgICAgICAgaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyXG4gICAgICAgICAgICA/IG9yZGVyQnkobWF0Y2hlcywgb3JkZXJDb2x1bW4sIHF1ZXJ5Lm9yZGVyLmRpcmVjdGlvbilcbiAgICAgICAgICAgIDogbWF0Y2hlcztcbiAgICAgIH0gZWxzZSBpZiAoaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyKSB7XG4gICAgICAgIG9yZGVyZWQgPSBvcmRlckJ5KGRhdGEsIG9yZGVyQ29sdW1uLCBxdWVyeS5vcmRlci5kaXJlY3Rpb24pO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vcmRlciA9PSBudWxsICYmIGRlZmF1bHRTb3J0U3BlYykge1xuICAgICAgICBvcmRlcmVkID0gb3JkZXJCeShkYXRhLCBkZWZhdWx0U29ydFNwZWMua2V5LCBkZWZhdWx0U29ydFNwZWMuZGlyZWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9yZGVyZWQgPSBkYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJcbiAgICAgICAgPyBvcmRlcmVkLmZpbHRlcihyb3cgPT4gZmlsdGVyKHF1ZXJ5LmZpbHRlcnMsIHJvdykpXG4gICAgICAgIDogb3JkZXJlZDtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSAqIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IHN0YXJ0SWR4ICsgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IHBhZ2luYXRlZCA9IGZpbHRlcmVkLnNsaWNlKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBwYWdpbmF0ZWQsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZmlsdGVyZWQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID0gbmV3IE1hcChcbiAgICAgIFsuLi5jb2x1bW5zLmVudHJpZXMoKV0ubWFwKChbbmFtZSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBvcmRlcmFibGU6ICEhbWV0YWRhdGEub3JkZXJLZXksXG4gICAgICAgICAgZmlsdGVyYWJsZTogbWV0YWRhdGEuZmlsdGVyYWJsZSxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBtZXRhZGF0YS5zZWFyY2hhYmxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICBtaW5XaWR0aDogbWV0YWRhdGEubWluV2lkdGgsXG4gICAgICAgICAgZGF0YVR5cGU6IG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgICAgICAgIGRlZmF1bHRQaW5uZWQ6IG1ldGFkYXRhLmRlZmF1bHRQaW5uZWQsXG4gICAgICAgICAgY2xpY2tQcmV2ZW50RGVmYXVsdDogbWV0YWRhdGEuY2xpY2tQcmV2ZW50RGVmYXVsdCxcbiAgICAgICAgICBjbGlja1N0b3BQcm9wYWdhdGlvbjogbWV0YWRhdGEuY2xpY2tTdG9wUHJvcGFnYXRpb24sXG4gICAgICAgICAgZGlzcGxheU5hbWU6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgICAvLyBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgIC8vIHRhYmxlIGhlYWRlciBzaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgZnJvbSB0aGUgc3RhcnQuXG4gICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0ICYmICFvcHRpb25zPy5pbml0aWFsU3RhdGU/LnF1ZXJ5Py5vcmRlcikge1xuICAgICAgY29uc3Qgb3JkZXI6IFF1ZXJ5PEMsIEY+WydvcmRlciddID0gb3B0aW9ucy5kZWZhdWx0U29ydDtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIC4uLm9wdGlvbnMuaW5pdGlhbFN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLmluaXRpYWxTdGF0ZT8ucXVlcnksXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICB9IGFzIERlZXBQYXJ0aWFsPFF1ZXJ5PEMsIEY+PixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFV0aWxpdGllcyAvL1xuICAvLy8vLy8vLy8vLy8vLy9cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQWxpZ25tZW50KFxuICAgIGRhdGFUeXBlOiBDb2x1bW5EYXRhVHlwZSxcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICApOiBDb2x1bW5BbGlnbm1lbnQge1xuICAgIGlmIChpc0ZpcnN0KSByZXR1cm4gJ2xlZnQnO1xuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAnbG9uZ1RleHQnOlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgY2FzZSAnYWR2YW5jZWQnOlxuICAgICAgY2FzZSAnaWNvbic6XG4gICAgICBjYXNlICdzaG9ydFRleHQnOlxuICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGtlZXBzIHRoZSBzdGF0ZSBvYmplY3QgcmVmZXJlbmNlcyBhcyBzdGFibGUgYXMgcG9zc2libGUsIHdoaWNoXG4gKiBoZWxwcyBBbmd1bGFyIHJlZHVjZSB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLiBGb3Igbm93LCBzaW1wbGUgaXNFcXVhbCgpXG4gKiBjaGVja3MgYXQgdGhlIHN0YXRlJ3MgdG9wLWxldmVsIGtleXMgYXJlIHN1ZmZpY2llbnQgdG8gZHJhbWF0aWNhbGx5IHNwZWVkIHVwXG4gKiByZW5kZXJpbmcsIGJ1dCBpZiBvdGhlciBwZXJmb3JtYW5jZSBpc3N1ZXMgYXJpc2UsIHdlIGNvdWxkIGltcGxlbWVudCBtb3JlXG4gKiBncmFudWxhciBjaGVja3Mvc3VyZ2ljYWwgdXBkYXRlcyBhcyBuZWVkZWQgKHRoZSBzdGF0ZS5yZXN1bHQgYmVpbmcgdGhlIG1vc3RcbiAqIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIG1hbnkgdHlwZXMgb2Ygc3RhdGUgdXBkYXRlcyBhZmZlY3QgcGFydHMgb2YgdGhlXG4gKiByZXN1bHQgcm93cykuXG4gKi9cbmZ1bmN0aW9uIHN0YWJsZVN0YXRlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgdGFyZ2V0OiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4gIHNvdXJjZTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+LFxuKTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5xdWVyeSwgc291cmNlLnF1ZXJ5KSkge1xuICAgIHRhcmdldC5xdWVyeSA9IHNvdXJjZS5xdWVyeTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LmxvYWQsIHNvdXJjZS5sb2FkKSkge1xuICAgIHRhcmdldC5sb2FkID0gc291cmNlLmxvYWQ7XG4gIH1cblxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdC5jc3ZEYXRhLCBzb3VyY2UucmVzdWx0LmNzdkRhdGEpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC5jc3ZEYXRhID0gc291cmNlLnJlc3VsdC5jc3ZEYXRhO1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LmNzdkZpbGVuYW1lLCBzb3VyY2UucmVzdWx0LmNzdkZpbGVuYW1lKSkge1xuICAgIHRhcmdldC5yZXN1bHQuY3N2RmlsZW5hbWUgPSBzb3VyY2UucmVzdWx0LmNzdkZpbGVuYW1lO1xuICB9XG4gIGlmIChcbiAgICAhaXNFcXVhbChcbiAgICAgIHRhcmdldC5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgc291cmNlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgKVxuICApIHtcbiAgICB0YXJnZXQucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA9IHNvdXJjZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LCBzb3VyY2UucmVzdWx0KSkge1xuICAgIHRhcmdldC5yZXN1bHQgPSBzb3VyY2UucmVzdWx0O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuZGlzcGxheSwgc291cmNlLmRpc3BsYXkpKSB7XG4gICAgdGFyZ2V0LmRpc3BsYXkgPSBzb3VyY2UuZGlzcGxheTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnNlbGVjdGlvbiwgc291cmNlLnNlbGVjdGlvbikpIHtcbiAgICB0YXJnZXQuc2VsZWN0aW9uID0gc291cmNlLnNlbGVjdGlvbjtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBnZXRQYWdlQ291bnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIge1xuICBpZiAoaXNHcm91cFJlc3VsdChzdGF0ZS5yZXN1bHQpKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgTWF0aC5jZWlsKFxuICAgICAgICBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50IC8gc3RhdGUucXVlcnkuZ3JvdXBpbmcuZ3JvdXBzUGVyUGFnZSxcbiAgICAgICksXG4gICAgICAxLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIE1hdGgubWF4KFxuICAgIE1hdGguY2VpbChcbiAgICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgLyBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICksXG4gICAgMSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHwgbnVsbCB7XG4gIHJldHVybiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPT09IDBcbiAgICA/IG51bGxcbiAgICA6IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAtIDE7XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2VzPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyW10ge1xuICBjb25zdCBwYWRkaW5nID0gNDtcbiAgY29uc3QgbWluID0gMDtcbiAgY29uc3QgbWF4ID0gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDE7XG4gIGNvbnN0IGRlc2lyZWRTdGFydCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAtIHBhZGRpbmc7XG4gIGNvbnN0IGNsYW1wZWRTdGFydCA9IE1hdGgubWF4KG1pbiwgZGVzaXJlZFN0YXJ0KTtcbiAgY29uc3QgZGVzaXJlZEVuZCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIHBhZGRpbmc7XG4gIGNvbnN0IGNsYW1wZWRFbmQgPSBNYXRoLm1pbihtYXgsIGRlc2lyZWRFbmQpO1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KG1pbiwgY2xhbXBlZFN0YXJ0IC0gKGRlc2lyZWRFbmQgLSBjbGFtcGVkRW5kKSk7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKG1heCwgY2xhbXBlZEVuZCArIChjbGFtcGVkU3RhcnQgLSBkZXNpcmVkU3RhcnQpKTtcbiAgcmV0dXJuIHJhbmdlKHN0YXJ0LCBlbmQgKyAxKTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dFBhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgbWF4ID0gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDE7XG4gIGNvbnN0IG5leHQgPSBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKyAxO1xuICByZXR1cm4gbmV4dCA8PSBtYXggPyBuZXh0IDogbnVsbDtcbn1cblxuLy8gV2UgZG9uJ3Qgd2FudCB0byBzaG93IHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzIHdoZW4gdGhleSBhcmUgdW5uZWNlc3NhcnkuXG5mdW5jdGlvbiBnZXRTaG93UGFnaW5hdGlvbkNvbnRyb2xzPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSkge1xuICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50ID4gc3RhdGUucXVlcnkuZ3JvdXBpbmcuZ3JvdXBzUGVyUGFnZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiBNYXRoLm1pbiguLi5bLi4uUml2VGFibGUucGFnZVNpemVzXSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFnZVJvd1N0YXJ0PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAqIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUgKyAxO1xufVxuXG5mdW5jdGlvbiBnZXRQYWdlUm93RW5kPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWluKFxuICAgIChzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKyAxKSAqIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3N2RmlsZW5hbWU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBSaXZUYWJsZS5NYW5hZ2VyT3B0aW9uczxSLCBDLCBGLCBHPixcbik6IHN0cmluZyB7XG4gIHJldHVybiAob3B0aW9ucz8uY3N2RmlsZUJhc2VuYW1lPy5zbGljZSgwLCAyMDApID8/IHBsdXJhbEVudGl0eU5hbWUpICsgJy5jc3YnO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplZENlbGxSb3dTcGFuPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgczogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBmdWxsQ29sdW1uczogUml2VGFibGUuRnVsbENvbHVtbjxDPltdLFxuICBvcHRpb25zPzogUml2VGFibGUuTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4pOiBNYXA8QywgbnVtYmVyW10+IHwgbnVsbCB7XG4gIGNvbnN0IGdldFJvd1NwYW5Gb3JDZWxsID0gb3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGw7XG4gIGNvbnN0IHJlc3VsdCA9IHMucmVzdWx0O1xuXG4gIC8vIElmIHRoZSBkYXRhc2V0IGV4Y2VlZHMgdGhlIGN1cnJlbnQgcGFnZSBzaXplLCBza2lwIHNwYW4gY2FsY3VsYXRpb25zLlxuICBpZiAocy5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID4gcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplKSByZXR1cm4gbnVsbDtcblxuICAvLyBJZiB0aGUgdXNlciBoYXNuJ3QgcHJvdmlkZWQgdGhlIHJvdyBzcGFuIGNvbmZpZ3VyYXRpb24sIGRlZmF1bHQgdG8gbm8gc3Bhbm5pbmdcbiAgaWYgKCFnZXRSb3dTcGFuRm9yQ2VsbCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gUm93IHNwYW5uaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gZ3JvdXBlZCB0YWJsZXMuXG4gIGlmIChpc0dyb3VwUmVzdWx0KHJlc3VsdCkpIHJldHVybiBudWxsO1xuXG4gIC8vIE1lbW9pemUgdGhlIHVzZXIncyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VycmVudCBwYWdlLlxuICByZXR1cm4gbmV3IE1hcChcbiAgICBmdWxsQ29sdW1ucy5tYXAoY29sdW1uID0+IFtcbiAgICAgIGNvbHVtbi5rZXksXG4gICAgICByZXN1bHQuY3VycmVudFBhZ2VEYXRhLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSBnZXRSb3dTcGFuRm9yQ2VsbChpLCBjb2x1bW4ua2V5KTtcbiAgICAgICAgaWYgKHJhdyA9PT0gMCkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgcmV0dXJuIE1hdGgubWF4KDEsIHRvSW50ZWdlcihyYXcpKTtcbiAgICAgIH0pLFxuICAgIF0pLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc3VwcG9ydGVkQ29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbik6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10ge1xuICAvLyBJZiB0aGUgdGFibGUgb2ZmZXJzIG1vcmUgY29sdW1ucyB0aGFuIHRoZSB1c2VyIGhhcyBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4gIC8vIGZvciAob3IgaWYgdGhlIHVzZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgeWV0KSwgd2UnbGwgYXBwZW5kIHRoZW1cbiAgLy8gdG8gdGhlIGVuZCAodW5sZXNzIHRoZXkgc2hvdWxkIGJlIHBpbm5lZCBieSBkZWZhdWx0LCBpbiB3aGljaCBjYXNlIHdlJ2xsXG4gIC8vIGFwcGVuZCB0aGVtIGFmdGVyIHRoZSBvdGhlciBwaW5uZWQgY29sdW1ucykuIFRoaXMgZW5zdXJlcyB0aGF0IG5ldyBjb2x1bW5zXG4gIC8vIHdlIGFkZCB0byBleGlzdGluZyB0YWJsZXMgb3ZlciB0aW1lICgxKSBnZXQgZGlzcGxheWVkIGV2ZW4gdGhvdWdoIHRoZXlcbiAgLy8gZG9uJ3QgYXBwZWFyIGluIHRoZSB1c2VyJ3MgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB5ZXQsIGFuZCAoMikgZG9uJ3RcbiAgLy8gaW50ZXJydXB0IHRoZWlyIGV4aXN0aW5nIHNldHVwLlxuICBjb25zdCBjb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MgPSBkaWZmZXJlbmNlKFxuICAgIFsuLi5zdXBwb3J0ZWRDb2x1bW5zLmtleXMoKV0sXG4gICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5tYXAoKHsga2V5IH0pID0+IGtleSksXG4gICk7XG5cbiAgLy8gVGhyb3cgb3V0IHNldHRpbmdzIGZvciBjb2x1bW5zIG5vIGxvbmdlciBvZmZlcmVkIGJ5IHRoZSB0YWJsZS5cbiAgY29uc3QgY29sdW1uc1dpdGhVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPVxuICAgIHN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3MuZmlsdGVyKCh7IGtleSB9KSA9PiBzdXBwb3J0ZWRDb2x1bW5zLmhhcyhrZXkpKTtcblxuICBjb25zdCBjb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9IFtcbiAgICAuLi5jb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MsXG4gIF0ubWFwKChrZXk6IEMpID0+ICh7XG4gICAga2V5LFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcHJlZmVycmVkV2lkdGg6ICdhdXRvJyxcbiAgICBwaW5uZWQ6ICEhc3VwcG9ydGVkQ29sdW1ucy5nZXQoa2V5KT8uZGVmYXVsdFBpbm5lZCxcbiAgfSkpO1xuXG4gIHJldHVybiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgWy4uLmNvbHVtbnNXaXRoVXNlclNldHRpbmdzLCAuLi5jb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nc10sXG4gICAgY29sdW1uTmFtZU1hcCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gb3JkZXJJbnRlbnRpb25hbGx5PEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4+KFxuICBjb2x1bW5zOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuKTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSB7XG4gIHJldHVybiBbXG4gICAgLi4uY29sdW1ucy5maWx0ZXIodiA9PiB2LnBpbm5lZCksXG4gICAgLi4uY29sdW1ucy5maWx0ZXIodiA9PiB2LmVuYWJsZWQgJiYgIXYucGlubmVkKSxcbiAgICAuLi5jb2x1bW5zXG4gICAgICAuZmlsdGVyKHYgPT4gIXYuZW5hYmxlZCAmJiAhdi5waW5uZWQpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhTmFtZSA9IGNvbHVtbk5hbWVNYXAuZ2V0KGEua2V5KSA/PyBhLmtleTtcbiAgICAgICAgY29uc3QgYk5hbWUgPSBjb2x1bW5OYW1lTWFwLmdldChiLmtleSkgPz8gYi5rZXk7XG4gICAgICAgIHJldHVybiBhTmFtZS5sb2NhbGVDb21wYXJlKGJOYW1lKTtcbiAgICAgIH0pLFxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQoXG4gIG1ldGFkYXRhOiBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YSxcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxsb3dTZWxlY3Rpb24/OiBib29sZWFuLFxuKTogUml2VGFibGUuQ29sdW1uQWxpZ25tZW50IHtcbiAgcmV0dXJuIFJpdlRhYmxlLmdldENvbHVtbkFsaWdubWVudChcbiAgICBtZXRhZGF0YS5kYXRhVHlwZSxcbiAgICBpbmRleCA9PT0gMCAmJiAhYWxsb3dTZWxlY3Rpb24sXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc3VwcG9ydGVkQ29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgYWxsb3dTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgc3VwcG9ydGVkQ29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIHJldHVybiBhbGxDb2x1bW5zXG4gICAgLmZpbHRlcigoeyBlbmFibGVkIH0pID0+IGVuYWJsZWQpXG4gICAgLnJlZHVjZShcbiAgICAgIChcbiAgICAgICAgZnVsbENvbHVtbnM6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSxcbiAgICAgICAgc2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LFxuICAgICAgICBpOiBudW1iZXIsXG4gICAgICApOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10gPT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHN1cHBvcnRlZENvbHVtbnMuZ2V0KHNldHRpbmdzLmtleSkhO1xuICAgICAgICBjb25zdCByZXNvbHZlZFdpZHRoID1cbiAgICAgICAgICBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCA9PT0gJ2F1dG8nXG4gICAgICAgICAgICA/IG1ldGFkYXRhLm1pbldpZHRoXG4gICAgICAgICAgICA6IE1hdGgubWF4KG1ldGFkYXRhLm1pbldpZHRoLCBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ29sdW1uOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+IHwgdW5kZWZpbmVkID1cbiAgICAgICAgICBmdWxsQ29sdW1uc1tpIC0gMV07XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgLi4uZnVsbENvbHVtbnMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgICAgIHdpZHRoOiByZXNvbHZlZFdpZHRoLFxuICAgICAgICAgICAgbGVmdDogc2V0dGluZ3MucGlubmVkXG4gICAgICAgICAgICAgID8gcHJldmlvdXNDb2x1bW5cbiAgICAgICAgICAgICAgICA/IChwcmV2aW91c0NvbHVtbi5sZWZ0IHx8IDApICsgcHJldmlvdXNDb2x1bW4ud2lkdGhcbiAgICAgICAgICAgICAgICA6ICEhYWxsb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICA/IDQwXG4gICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGFsaWdubWVudDogZ2V0QWxpZ25tZW50KG1ldGFkYXRhLCBpLCAhIWFsbG93U2VsZWN0aW9uKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFtdLFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFplcm9TdGF0ZU1lc3NhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sIGVudGl0eTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChcbiAgICAoaXNHcm91cFJlc3VsdChzdGF0ZS5yZXN1bHQpICYmIHN0YXRlLnJlc3VsdC50b3RhbEdyb3VwQ291bnQgPiAwKSB8fFxuICAgICghaXNHcm91cFJlc3VsdChzdGF0ZS5yZXN1bHQpICYmIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiAwKVxuICApXG4gICAgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFsbFNlYXJjaENvbHVtbnNTZWxlY3RlZCA9IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHN0YXRlLCAnYWxsJyk7XG4gIGlmIChzdGF0ZS5xdWVyeS5zZWFyY2ggJiYgYWxsU2VhcmNoQ29sdW1uc1NlbGVjdGVkKVxuICAgIHJldHVybiBgTm8gJHtlbnRpdHl9IG1hdGNoIHlvdXIgY3VycmVudCBzZWFyY2gga2V5d29yZC5gO1xuICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoICYmICFhbGxTZWFyY2hDb2x1bW5zU2VsZWN0ZWQpXG4gICAgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IHNlYXJjaCBrZXl3b3JkIGluIHRoZSBzZWxlY3RlZCBzZWFyY2ggY29sdW1ucy5gO1xuICBpZiAoc3RhdGUucXVlcnkuZmlsdGVycykgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IGZpbHRlcnMuYDtcbiAgcmV0dXJuIGBObyAke2VudGl0eX0uYDtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uUGluPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgY29sdW1uOiBDLFxuICBwaW5uZWQ6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG5cbiAgaWYgKHBpbm5lZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGFsbENvbHVtbnMuZmluZChjID0+IGMua2V5ID09PSBjb2x1bW4pO1xuICAgIGNvbnN0IHdhc0VuYWJsZWQgPSAhIXRhcmdldD8uZW5hYmxlZDtcbiAgICBpZiAoIXdhc0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGVuYWJsZWRDb3VudCA9IGFsbENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZW5hYmxlZCkubGVuZ3RoO1xuICAgICAgaWYgKGVuYWJsZWRDb3VudCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd24pIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlOyAvLyByZWZ1c2UgdGhlIHBpbiBzaW5jZSBpdCB3b3VsZCBleGNlZWQgdGhlIG1heFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIHBpbm5lZDogYy5rZXkgPT09IGNvbHVtbiA/IHBpbm5lZCA6IGMucGlubmVkLFxuICAgICAgICAgIC8vIENoZWNrL2VuYWJsZSBpZiBiZWluZyBwaW5uZWRcbiAgICAgICAgICBlbmFibGVkOiBjLmtleSA9PT0gY29sdW1uICYmIHBpbm5lZCA/IHRydWUgOiBjLmVuYWJsZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uc0ZyZWV6ZVN0YXRlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgaW5kZXg6IG51bWJlcixcbiAgZnJlZXplOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBhbGxDb2x1bW5zLm1hcCgoYywgaSkgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5jLCBwaW5uZWQ6IGZyZWV6ZSAmJiBpIDw9IGluZGV4IH07XG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtb3ZlQ29sdW1uVG88XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCcsXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIGNvbnN0IHByZXZpb3VzSW5kZXggPSBhbGxDb2x1bW5zLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBjb2x1bW4pO1xuICBjb25zdCBsYXN0SW5kZXggPVxuICAgIHBvc2l0aW9uID09ICdlbmQnID8gYWxsQ29sdW1ucy5maW5kSW5kZXgoYyA9PiAhYy5lbmFibGVkKSA6IDA7XG4gIGNvbnN0IG5ld0luZGV4ID1cbiAgICBwb3NpdGlvbiA9PSAnc3RhcnQnXG4gICAgICA/IDBcbiAgICAgIDogbGFzdEluZGV4ID09IC0xXG4gICAgICA/IGFsbENvbHVtbnMubGVuZ3RoIC0gMVxuICAgICAgOiBsYXN0SW5kZXg7XG5cbiAgaWYgKFxuICAgICFhbGxDb2x1bW5zW3ByZXZpb3VzSW5kZXhdLmVuYWJsZWQgJiZcbiAgICBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmVuYWJsZWQpLmxlbmd0aCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd25cbiAgKVxuICAgIHJldHVybiBzdGF0ZTtcblxuICBjb25zdCBtb3ZlZFN0YXRlID0gY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgc3RhdGUsXG4gICAgY29sdW1ucyxcbiAgICBjb2x1bW5OYW1lTWFwLFxuICAgIHByZXZpb3VzSW5kZXgsXG4gICAgbmV3SW5kZXgsXG4gICk7XG4gIC8vTWFrZSBzdXJlIHRoZSBjb2x1bW4gaXMgZW5hYmxlZFxuICByZXR1cm4gY2hhbmdlQ29sdW1uRW5hYmxlZChtb3ZlZFN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwLCBjb2x1bW4sIHRydWUpO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VDb2x1bW5PcmRlcjxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcixcbiAgbmV3SW5kZXg6IG51bWJlcixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcblxuICAvLyBGaXJzdCwgcHV0IHRoZSBjb2x1bW5zIGluIHRoZSBkZXNpcmVkIG9yZGVyLlxuICBjb25zdCBpdGVtID0gYWxsQ29sdW1uc1twcmV2aW91c0luZGV4XTtcbiAgY29uc3Qgd2l0aG91dEl0ZW0gPSBhbGxDb2x1bW5zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gcHJldmlvdXNJbmRleCk7XG4gIGNvbnN0IHJlb3JkZXJlZCA9IFtcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZSgwLCBuZXdJbmRleCksXG4gICAgaXRlbSxcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZShuZXdJbmRleCksXG4gIF07XG5cbiAgLy8gVGhlbiwgd2UgbWF5IG5lZWQgdG8gZml4IHRoZSBwaW5zIChhbGwgcGlubmVkIGNvbHVtbnMgYXBwZWFyIGF0IHRoZVxuICAvLyBiZWdpbm5pbmcgb2YgdGhlIGNvbHVtbnMgYXJyYXkpIHNpbmNlIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZHJhZ1xuICAvLyBhbmQgZHJvcCBjb2x1bW5zIHRvIGFuZCBmcm9tIHRoZSBwaW5uZWQgYXJlYS4gSWYgdGhlIHVzZXIgZHJhZ3MgYVxuICAvLyBjb2x1bW4gYWNyb3NzIHRoYXQgdGhyZXNob2xkLCB1cGRhdGUgaXRzIHBpbm5lZCBzdGF0dXMuXG4gIGNvbnN0IHVwZGF0ZWQgPSByZW9yZGVyZWQubWFwKChzZXR0aW5ncywgaSwgYXJyKSA9PiB7XG4gICAgaWYgKG5ld0luZGV4ID09PSBpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgcGlubmVkOiBzZXR0aW5ncy5waW5uZWRcbiAgICAgICAgICA/IGFycltpIC0gMV0/LnBpbm5lZCA/PyB0cnVlXG4gICAgICAgICAgOiBhcnJbaSArIDFdPy5waW5uZWQgPz8gZmFsc2UsXG4gICAgICAgIGVuYWJsZWQ6IHNldHRpbmdzLmVuYWJsZWRcbiAgICAgICAgICA/IGFycltpIC0gMV0/LmVuYWJsZWQgPz8gdHJ1ZVxuICAgICAgICAgIDogYXJyW2kgKyAxXT8uZW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHJldHVybiBzZXR0aW5ncztcbiAgfSk7XG5cbiAgY29uc3Qgd2FzRGlzYWJsZWQgPSAhaXRlbS5lbmFibGVkO1xuICBjb25zdCBiZWNhbWVFbmFibGVkID0gdXBkYXRlZFtuZXdJbmRleF0uZW5hYmxlZDtcbiAgaWYgKHdhc0Rpc2FibGVkICYmIGJlY2FtZUVuYWJsZWQpIHtcbiAgICBjb25zdCBlbmFibGVkQ291bnQgPSBhbGxDb2x1bW5zLmZpbHRlcihjID0+IGMuZW5hYmxlZCkubGVuZ3RoO1xuICAgIGlmIChlbmFibGVkQ291bnQgPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duKSB7XG4gICAgICAvLyBSZWZ1c2UgdGhlIG1vdmU7IGtlZXAgc3RhdGUgYXMtaXNcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KHVwZGF0ZWQsIGNvbHVtbk5hbWVNYXApLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbkVuYWJsZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIGVuYWJsZWQ6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIGlmIChcbiAgICBlbmFibGVkICYmXG4gICAgYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5lbmFibGVkKS5sZW5ndGggPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGVuYWJsZWQ6IGMua2V5ID09PSBjb2x1bW4gPyBlbmFibGVkIDogYy5lbmFibGVkLFxuICAgICAgICAgIC8vIFVucGluIGlmIGJlaW5nIHVuY2hlY2tlZFxuICAgICAgICAgIHBpbm5lZDogYy5rZXkgPT09IGNvbHVtbiAmJiAhZW5hYmxlZCA/IGZhbHNlIDogYy5waW5uZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cbmZ1bmN0aW9uIGVuYWJsZUFsbENvbHVtbnM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBlbmFibGVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICBpZiAoZW5hYmxlZCAmJiBhbGxDb2x1bW5zLmxlbmd0aCA+IFJpdlRhYmxlLkNvbHVtbnNNYXhTaG93bikgcmV0dXJuIHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgICAgLy8gVW5waW4gaWYgYmVpbmcgdW5jaGVja2VkXG4gICAgICAgICAgcGlubmVkOiAhZW5hYmxlZCA/IGZhbHNlIDogYy5waW5uZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uV2lkdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIHByZWZlcnJlZFdpZHRoOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPlsncHJlZmVycmVkV2lkdGgnXSxcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uU2V0dGluZ3M6IGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgLi4uYyxcbiAgICAgICAgcHJlZmVycmVkV2lkdGg6IGMua2V5ID09PSBjb2x1bW4gPyBwcmVmZXJyZWRXaWR0aCA6IGMucHJlZmVycmVkV2lkdGgsXG4gICAgICB9KSksXG4gICAgfSxcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlc2V0VG9EZWZhdWx0Q29sdW1uczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoZGVmYXVsdENvbHVtblN0YXRlLCBjb2x1bW5OYW1lTWFwKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1Jvd1NlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LCBpZDogUlsnaWQnXSk6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgY2FzZSAnaW5jbHVkZSc6XG4gICAgICByZXR1cm4gc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkLmhhcyhpZCk7XG4gICAgY2FzZSAnZXhjbHVkZSc6XG4gICAgICByZXR1cm4gIXN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5oYXMoaWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXBTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGdyb3VwOiBSaXZUYWJsZS5TdWJHcm91cFJlc3VsdDxSLCBHPixcbik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgY2FzZSAnaW5jbHVkZSc6IHtcbiAgICAgIGxldCBhbGxGb3VuZCA9IHRydWU7XG4gICAgICBsZXQgYW55Rm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoIXN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5oYXMocm93LmlkKSkge1xuICAgICAgICAgIGFsbEZvdW5kID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYW55Rm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWxsRm91bmQgPyB0cnVlIDogYW55Rm91bmQgPyAnaW5kZXRlcm1pbmF0ZScgOiBmYWxzZTtcbiAgICB9XG4gICAgY2FzZSAnZXhjbHVkZSc6IHtcbiAgICAgIGxldCBhbGxGb3VuZCA9IHRydWU7XG4gICAgICBsZXQgYW55Rm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLmhhcyhyb3cuaWQpKSB7XG4gICAgICAgICAgYWxsRm91bmQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbnlGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbGxGb3VuZCA/IHRydWUgOiBhbnlGb3VuZCA/ICdpbmRldGVybWluYXRlJyA6IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FsbFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gIC8vIElmIHRoZXJlIGFyZSBubyByb3dzLCBcImFsbCBzZWxlY3RlZFwiIHNob3VsZCBiZSBmYWxzZVxuICBpZiAoc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAoc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdleGNsdWRlJyAmJlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemUgPT09IDApIHx8XG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5zaXplID09PSBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50KVxuICApXG4gICAgcmV0dXJuIHRydWU7XG4gIGlmIChcbiAgICAoc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdleGNsdWRlJyAmJlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemUgPT09IHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQpIHx8XG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZScgJiYgc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkLnNpemUgPT09IDApXG4gIClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAnaW5kZXRlcm1pbmF0ZSc7XG59XG5cbmZ1bmN0aW9uIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCBzZWxlY3RlZFN0YXRlcyA9IGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkubWFwKCh7IGlkIH0pID0+XG4gICAgaXNSb3dTZWxlY3RlZChzdGF0ZSwgaWQpLFxuICApO1xuICBpZiAoc2VsZWN0ZWRTdGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChzZWxlY3RlZFN0YXRlcy5ldmVyeSh2ID0+IHYpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoc2VsZWN0ZWRTdGF0ZXMuc29tZSh2ID0+IHYpKSByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0ZWRDb3VudDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB7XG4gIHN3aXRjaCAoc3RhdGUuc2VsZWN0aW9uLm1vZGUpIHtcbiAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZTtcbiAgICBjYXNlICdleGNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50IC0gc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZnJlc2hSZXN1bHRXaXRoPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIG1vc3RSZWNlbnRBY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICB5aWVsZCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZDoge1xuICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBlZmZlY3Q6IG51bGwsXG4gIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc291cmNlKHN0YXRlLnF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKTtcbiAgICBpZiAoaXNQYWdlT3V0T2ZCb3VuZHMoc3RhdGUsIHJlc3VsdCkpIHtcbiAgICAgIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSA9IDA7XG4gICAgfVxuICAgIHlpZWxkIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgIH0sXG4gICAgICBlZmZlY3Q6IG51bGwsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHlpZWxkIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Um93U2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBpZDogUlsnaWQnXSxcbiAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gIGNvbnRpZ3VvdXM6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBpZiAoc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgU2V0PFJbJ2lkJ10+KFtpZF0pO1xuICAgIGlmIChjb250aWd1b3VzICYmIHN0YXRlLnNlbGVjdGlvbi5tb3N0UmVjZW50bHlTZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc3RhcnRJZHggPSBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLmZpbmRJbmRleChcbiAgICAgICAgcm93ID0+IHJvdy5pZCA9PT0gc3RhdGUuc2VsZWN0aW9uLm1vc3RSZWNlbnRseVNlbGVjdGVkLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkuZmluZEluZGV4KFxuICAgICAgICByb3cgPT4gcm93LmlkID09PSBpZCxcbiAgICAgICk7XG4gICAgICBpZiAodHlwZW9mIHN0YXJ0SWR4ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgZW5kSWR4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIGxldCBpID0gTWF0aC5taW4oc3RhcnRJZHgsIGVuZElkeCk7XG4gICAgICAgICAgaSA8PSBNYXRoLm1heChzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgICAgICBpKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3U2VsZWN0aW9uLmFkZChnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpW2ldLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IGlkLFxuICAgICAgICAuLi4oc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIHVuaW9uKFsuLi5zdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWRdLCBbLi4ubmV3U2VsZWN0aW9uXSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG1vZGU6ICdleGNsdWRlJyxcbiAgICAgICAgICAgICAgZXhjbHVkZWQ6IG5ldyBTZXQoXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZShbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkXSwgWy4uLm5ld1NlbGVjdGlvbl0pLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAuLi4oc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UoWy4uLnN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZF0sIFtpZF0pLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBtb2RlOiAnZXhjbHVkZScsXG4gICAgICAgICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KHVuaW9uKFsuLi5zdGF0ZS5zZWxlY3Rpb24uZXhjbHVkZWRdLCBbaWRdKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2dnbGVHcm91cFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgZ3JvdXA6IFJpdlRhYmxlLlJvd0dyb3VwPFIsIEc+LFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgaXNHcm91cEZ1bGx5U2VsZWN0ZWQgPVxuICAgIGlzR3JvdXBTZWxlY3RlZChzdGF0ZSwgeyAuLi5ncm91cCwgY3VycmVudFBhZ2VEYXRhOiBncm91cC5yb3dzIH0pID09PSB0cnVlO1xuICByZXR1cm4gZ3JvdXAucm93cy5yZWR1Y2UoKGFjY3VtdWxhdGVkU3RhdGUsIHJvdykgPT4ge1xuICAgIHJldHVybiBzZXRSb3dTZWxlY3RlZChcbiAgICAgIGFjY3VtdWxhdGVkU3RhdGUsXG4gICAgICByb3cuaWQsXG4gICAgICAhaXNHcm91cEZ1bGx5U2VsZWN0ZWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9LCBzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZVBhZ2VTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGlzUGFnZUZ1bGx5U2VsZWN0ZWQgPSBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLmV2ZXJ5KFxuICAgICh7IGlkIH0pID0+IGlzUm93U2VsZWN0ZWQoc3RhdGUsIGlkKSxcbiAgKTtcbiAgcmV0dXJuIGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkucmVkdWNlKChhY2N1bXVsYXRlZFN0YXRlLCByb3cpID0+IHtcbiAgICByZXR1cm4gc2V0Um93U2VsZWN0ZWQoXG4gICAgICBhY2N1bXVsYXRlZFN0YXRlLFxuICAgICAgcm93LmlkLFxuICAgICAgIWlzUGFnZUZ1bGx5U2VsZWN0ZWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9LCBzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUFsbFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKGlzQWxsU2VsZWN0ZWQoc3RhdGUpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnZXhjbHVkZScsXG4gICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb248XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGlvbjoge1xuICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNvbHVtbk9yZGVyPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uOiBDLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKHN0YXRlLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICBvcmRlcjpcbiAgICAgICAgICBzdGF0ZS5xdWVyeS5vcmRlci5kaXJlY3Rpb24gPT09ICdhc2MnXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnZGVzYycsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHF1ZXJ5OiB7XG4gICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgZGlyZWN0aW9uOiAnYXNjJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBleHBlY3RlZFZhbHVlOiAnYWxsJyB8ICdub25lJyxcbik6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKGV4cGVjdGVkVmFsdWUpIHtcbiAgICBjYXNlICdhbGwnOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucy52YWx1ZXMoKSkuZXZlcnkoXG4gICAgICAgIHZhbHVlID0+IHZhbHVlLFxuICAgICAgKTtcblxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucy52YWx1ZXMoKSkuZXZlcnkoXG4gICAgICAgIHZhbHVlID0+ICF2YWx1ZSxcbiAgICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9nZ2xlQWxsU2VhcmNoQ29sdW1uczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IG5vbmVTZWxlY3RlZCA9IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHN0YXRlLCAnbm9uZScpO1xuICBjb25zdCBwYXlsb2FkID0gbmV3IE1hcChcbiAgICBBcnJheS5mcm9tKHN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMua2V5cygpKS5tYXAoa2V5ID0+IFtcbiAgICAgIGtleSxcbiAgICAgIG5vbmVTZWxlY3RlZCxcbiAgICBdKSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBxdWVyeToge1xuICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICBzZWFyY2hDb2x1bW5zOiBwYXlsb2FkLFxuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWR1Y2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbG9hZCc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoc3RhdGUsIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ29sdW1uVG9nZ2xlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgdG9nZ2xlQ29sdW1uT3JkZXIoc3RhdGUsIGFjdGlvbi5jb2x1bW4pLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoW1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLFxuICAgICAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBpbmdDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogZ2V0UHJldmlvdXNQYWdlKHN0YXRlKSA/PyAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICduZXh0UGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogZ2V0TmV4dFBhZ2Uoc3RhdGUpID8/IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogYWN0aW9uLnBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTaXplQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZVNpemU6IGFjdGlvbi5zaXplLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJzQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGZpbHRlcnM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbHRlckFkZCc6XG4gICAgICAvLyBQYXJlbnQgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciBzdWJzY3JpYmluZyBhbmQgYWRkaW5nIHRoZSBmaWx0ZXJcbiAgICAgIHlpZWxkIHsgc3RhdGU6IHsgLi4uc3RhdGUgfSwgZWZmZWN0OiBudWxsIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmdzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBkbyBub3Qgb3V0cHV0IGNoYW5nZXMgd2hlbiB0cmlnZ2VyZWQgZnJvbSB0aGUgb3V0c2lkZSB3b3JsZFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uUGluQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IGNoYW5nZUNvbHVtblBpbihcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24ucGlubmVkLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbnNGcmVlemVVcFRvQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IGNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZShcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmluZGV4LFxuICAgICAgICAgIGFjdGlvbi5mcmVlemUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5wcmV2aW91c0luZGV4LFxuICAgICAgICAgIGFjdGlvbi5uZXdJbmRleCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogbW92ZUNvbHVtblRvKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5wb3NpdGlvbixcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5FbmFibGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IGNoYW5nZUNvbHVtbkVuYWJsZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBlbmFibGVBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwLCBhY3Rpb24uZW5hYmxlZCksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogY2hhbmdlQ29sdW1uV2lkdGgoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnByZWZlcnJlZFdpZHRoLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucyc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiByZXNldFRvRGVmYXVsdENvbHVtbnMoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHNlbGVjdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIH0sXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb3dTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBzZXRSb3dTZWxlY3RlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgYWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgIGFjdGlvbi5jb250aWd1b3VzLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IHRvZ2dsZVBhZ2VTZWxlY3RlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhbGxTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB0b2dnbGVBbGxTZWxlY3RlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3Rpb25DbGVhcic6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBjbGVhclNlbGVjdGlvbihzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cFNlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB0b2dnbGVHcm91cFNlbGVjdGVkKHN0YXRlLCBhY3Rpb24ucGF5bG9hZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cHNQZXJQYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICBncm91cHNQZXJQYWdlOiBhY3Rpb24uZ3JvdXBzUGVyUGFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY291bnRQZXJHcm91cENoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgY291bnRQZXJHcm91cDogYWN0aW9uLmNvdW50UGVyR3JvdXAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZXdNb3JlS2V5Q2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICB2aWV3TW9yZUtleTogYWN0aW9uLnZpZXdNb3JlS2V5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aCh0b2dnbGVBbGxTZWFyY2hDb2x1bW5zKHN0YXRlKSwgc291cmNlLCBhY3Rpb24pO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNHcm91cFJlc3VsdDxSIGV4dGVuZHMgUml2VGFibGUuUm93LCBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXA+KFxuICByZXN1bHQ6IFJpdlRhYmxlLlJlc3VsdDxSPiB8IFJpdlRhYmxlLkdyb3VwUmVzdWx0PFIsIEc+LFxuKTogcmVzdWx0IGlzIFJpdlRhYmxlLkdyb3VwUmVzdWx0PFIsIEc+IHtcbiAgaWYgKCd0b3RhbEdyb3VwQ291bnQnIGluIHJlc3VsdCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxsUm93c0Zyb21SZXN1bHQ8UiBleHRlbmRzIFJpdlRhYmxlLlJvdywgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwPihcbiAgcmVzdWx0OiBSaXZUYWJsZS5SZXN1bHQ8Uj4gfCBSaXZUYWJsZS5Hcm91cFJlc3VsdDxSLCBHPixcbik6IFJbXSB7XG4gIGlmIChpc0dyb3VwUmVzdWx0KHJlc3VsdCkpIHtcbiAgICByZXR1cm4gcmVzdWx0Lmdyb3VwUmVzdWx0cy5mbGF0TWFwKGdyb3VwcyA9PiBncm91cHMuY3VycmVudFBhZ2VEYXRhKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzdWx0LmN1cnJlbnRQYWdlRGF0YTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BhZ2VPdXRPZkJvdW5kczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIHJlc3VsdDogUml2VGFibGUuUmVzdWx0PFI+IHwgUml2VGFibGUuR3JvdXBSZXN1bHQ8UiwgRz4sXG4pOiBib29sZWFuIHtcbiAgaWYgKGlzR3JvdXBSZXN1bHQocmVzdWx0KSkge1xuICAgIGNvbnN0IG1pbkdyb3VwVmFsVG9TaG93T25DdXJyZW50UGFnZSA9XG4gICAgICBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKiBzdGF0ZS5xdWVyeS5ncm91cGluZy5ncm91cHNQZXJQYWdlICsgMTtcbiAgICBpZiAocmVzdWx0LnRvdGFsR3JvdXBDb3VudCA8IG1pbkdyb3VwVmFsVG9TaG93T25DdXJyZW50UGFnZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1pblJvd1RvU2hvd09uQ3VycmVudFBhZ2UgPVxuICAgICAgc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlICogc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSArIDE7XG4gICAgaWYgKHJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPCBtaW5Sb3dUb1Nob3dPbkN1cnJlbnRQYWdlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
|
|
1361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLElBQXNCLE1BQU0sU0FBUyxDQUFDO0FBQzdDLE9BQU8sRUFDTCxZQUFZLEVBQ1osVUFBVSxFQUNWLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLFNBQVMsRUFDVCxLQUFLLEdBQ04sTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUVMLFdBQVcsRUFDWCxNQUFNLEVBQ04sSUFBSSxFQUNKLEdBQUcsRUFDSCxTQUFTLEVBRVQsYUFBYSxFQUNiLElBQUksRUFDSixLQUFLLEVBQ0wsT0FBTyxHQUNSLE1BQU0sTUFBTSxDQUFDO0FBR2QsTUFBTSxLQUFXLFFBQVEsQ0F3a0N4QjtBQXhrQ0QsV0FBaUIsUUFBUTtJQTBDVixrQkFBUyxHQUFHLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFVLENBQUM7SUFxUHJELG1EQUFtRDtJQUN0Qyx3QkFBZSxHQUFXLEVBQUUsQ0FBQztJQUM3Qix3QkFBZSxHQUFHO1FBQzdCLFVBQVU7UUFDVixVQUFVO1FBQ1YsTUFBTTtRQUNOLE1BQU07UUFDTixVQUFVO1FBQ1YsUUFBUTtRQUNSLFdBQVc7S0FDSCxDQUFDO0lBc0xYLFNBQWdCLGFBQWEsQ0FNM0IsTUFBMEIsRUFDMUIsT0FBK0IsRUFDL0IsZ0JBQXdCLEVBQ3hCLE9BQW9DO1FBRXBDLGtDQUFrQztRQUVsQyxNQUFNLG1CQUFtQixHQUEyQixJQUFJLEdBQUcsQ0FDekQsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDckQsR0FBRztZQUNILFFBQVEsQ0FBQyxV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QyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ3BFLElBQUksTUFBTSxDQUFDLHFCQUFxQixHQUFHLHlCQUF5QixFQUFFO1lBQzVELE9BQU8sSUFBSSxDQUFDO1NBQ2I7S0FDRjtJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGFyYW1zLCBRdWVyeVBhcmFtc0hhbmRsaW5nIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBGdXNlLCB7IElGdXNlT3B0aW9ucyB9IGZyb20gJ2Z1c2UuanMnO1xuaW1wb3J0IHtcbiAgZGVmYXVsdHNEZWVwLFxuICBkaWZmZXJlbmNlLFxuICBpc0VxdWFsLFxuICBvcmRlckJ5LFxuICByYW5nZSxcbiAgdG9JbnRlZ2VyLFxuICB1bmlvbixcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIENvbm5lY3RhYmxlLFxuICBjb25uZWN0YWJsZSxcbiAgZmlsdGVyLFxuICBmcm9tLFxuICBtYXAsXG4gIG1lcmdlU2NhbixcbiAgT2JzZXJ2YWJsZSxcbiAgUmVwbGF5U3ViamVjdCxcbiAgc2NhbixcbiAgc2hhcmUsXG4gIFN1YmplY3QsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRGVlcFBhcnRpYWwgfSBmcm9tICd1dGlsaXR5LXR5cGVzJztcblxuZXhwb3J0IG5hbWVzcGFjZSBSaXZUYWJsZSB7XG4gIGV4cG9ydCB0eXBlIFJvdyA9IHsgaWQ6IHN0cmluZyB8IG51bWJlciB9O1xuICBleHBvcnQgdHlwZSBDb2x1bW4gPSBzdHJpbmc7XG4gIGV4cG9ydCB0eXBlIEZpbHRlcnMgPSBhbnk7XG4gIGV4cG9ydCB0eXBlIEdyb3VwID0geyBrZXk6IHN0cmluZyB8IG51bWJlciB9O1xuXG4gIC8qKlxuICAgKiBSaXZUYWJsZSdzIHN0YXRlIGFuZCB1c2VyIGFjdGlvbnMgYXJlIGRpdmlkZWQgaW50byB0aGUgZm9sbG93aW5nIGNodW5rczpcbiAgICpcbiAgICogLSBRdWVyeSAoZm9yIHRoaW5ncyBsaWtlIGZpbHRlcnMsIHBhZ2luYXRpb24sIHNlYXJjaCwgZXRjLilcbiAgICogLSBMb2FkaW5nIChmb3Igd2hldGhlciBvciBub3QgdGhlIHRhYmxlIGlzIGxvYWRpbmcgcm93IGRhdGEpXG4gICAqIC0gUmVzdWx0IChmb3IgdGhlIHJvdyBkYXRhIGl0c2VsZilcbiAgICogLSBEaXNwbGF5IChmb3IgdGhpbmdzIGxpa2UgY29sdW1uIGNvbmZpZ3VyYXRpb24pXG4gICAqIC0gU2VsZWN0aW9uIChmb3IgdHJhY2tpbmcgdGhlIHVzZXIncyByb3cgc2VsZWN0aW9ucylcbiAgICpcbiAgICogTm90ZSB0aGF0IHRoZSBkYXRhIGZsb3cgaXMgdW5pZGlyZWN0aW9uYWw6IHRoZSBVSSBpc3N1ZXMgYWN0aW9ucywgd2hpY2hcbiAgICogYWZmZWN0IHRoZSBzdGF0ZSwgYW5kIHRoZSBzdGF0ZSBnZXRzIHBhc3NlZCBiYWNrIHRvIHRoZSBVSSBmb3IgZGlzcGxheS5cbiAgICpcbiAgICog4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gICAqIOKUgiAgVUkgIOKXhOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAgKiDilJTilIDilIDilKzilIDilIDilIDilJggICAgICAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQICAg4pSCXG4gICAqIOKUgiAgQWN0aW9ucyAg4pSCICAg4pSCXG4gICAqIOKUlOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgIOKUglxuICAgKiAgICDilIIgICAgICAgICAgICDilIJcbiAgICog4pSM4pSA4pSA4pa84pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSQXG4gICAqIOKUgiAgU3RhdGUgcmVkdWNlciAg4pSCXG4gICAqIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAgKlxuICAgKiBGcm9tIHRoZSBjb3JlIHN0YXRlLCBjYWxjdWxhdGVkIHN0YXRlIGlzIGRlcml2ZWQgYW5kIGFkZGVkIHRvIHRoZSBjb3JlXG4gICAqIHN0YXRlIChlLmcuLCBmcm9tIHRoZSByYXcgc2VsZWN0aW9uIHN0YXRlIHdlIGNhbiBkZXRlcm1pbmUgd2hldGhlciBvciBub3RcbiAgICogYWxsIHRoZSByb3dzIG9uIHRoZSBjdXJyZW50bHkgZGlzcGxheWVkIHBhZ2UgYXJlIHNlbGVjdGVkLCBldGMuKS5cbiAgICovXG5cbiAgLy8vLy8vLy8vLy9cbiAgLy8gUXVlcnkgLy9cbiAgLy8vLy8vLy8vLy9cblxuICAvLyBRdWVyeSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIE9yZGVyRGlyZWN0aW9uID0gJ2FzYycgfCAnZGVzYyc7XG4gIGV4cG9ydCBjb25zdCBwYWdlU2l6ZXMgPSBbMjUsIDUwLCAxMDAsIDI1MF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIFF1ZXJ5PEMgZXh0ZW5kcyBDb2x1bW4sIEYgZXh0ZW5kcyBGaWx0ZXJzPiA9IHtcbiAgICBvcmRlcjoge1xuICAgICAgZGlyZWN0aW9uOiBPcmRlckRpcmVjdGlvbjtcbiAgICAgIGNvbHVtbjogQztcbiAgICB9IHwgbnVsbDtcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBzZWFyY2hDb2x1bW5zOiBNYXA8QywgYm9vbGVhbj47XG4gICAgZmlsdGVyczogRiB8IG51bGw7XG4gICAgcGFnaW5hdGlvbjoge1xuICAgICAgcGFnZTogbnVtYmVyO1xuICAgICAgcGFnZVNpemU6IG51bWJlcjtcbiAgICB9O1xuICAgIGdyb3VwaW5nOiB7XG4gICAgICB2aWV3TW9yZUtleTogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGdyb3Vwc1BlclBhZ2U6IG51bWJlcjtcbiAgICAgIGNvdW50UGVyR3JvdXA6IG51bWJlcjtcbiAgICB9O1xuICB9O1xuXG4gIC8vIFF1ZXJ5IGFjdGlvbnMgLy9cblxuICBleHBvcnQgdHlwZSBRdWVyeUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uLCBGIGV4dGVuZHMgRmlsdGVycz4gPVxuICAgIHwgeyB0eXBlOiAnbG9hZCcgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnb3JkZXJDaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnb3JkZXInXTtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnO1xuICAgICAgfVxuICAgIHwgeyB0eXBlOiAnb3JkZXJDb2x1bW5Ub2dnbGUnOyBjb2x1bW46IEMgfVxuICAgIHwgeyB0eXBlOiAnc2VhcmNoQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ3NlYXJjaCddIH1cbiAgICB8IHsgdHlwZTogJ3NlYXJjaENvbHVtbnNDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnc2VhcmNoQ29sdW1ucyddIH1cbiAgICB8IHsgdHlwZTogJ2ZpbHRlcnNDaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsnZmlsdGVycyddIH1cbiAgICB8IHsgdHlwZTogJ2ZpbHRlckFkZCc7IGNvbHVtbktleTogc3RyaW5nIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2luYXRpb25DaGFuZ2UnOyBwYXlsb2FkOiBRdWVyeTxDLCBGPlsncGFnaW5hdGlvbiddIH1cbiAgICB8IHsgdHlwZTogJ2dyb3VwaW5nQ2hhbmdlJzsgcGF5bG9hZDogUXVlcnk8QywgRj5bJ2dyb3VwaW5nJ10gfVxuICAgIHwgeyB0eXBlOiAnbmV4dFBhZ2VOYXZpZ2F0ZScgfVxuICAgIHwgeyB0eXBlOiAncHJldmlvdXNQYWdlTmF2aWdhdGUnIH1cbiAgICB8IHsgdHlwZTogJ3BhZ2VDaGFuZ2UnOyBwYWdlOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAncGFnZVNpemVDaGFuZ2UnOyBzaXplOiBudW1iZXIgfVxuICAgIHwgeyB0eXBlOiAnZ3JvdXBzUGVyUGFnZUNoYW5nZSc7IGdyb3Vwc1BlclBhZ2U6IG51bWJlciB9XG4gICAgfCB7IHR5cGU6ICdjb3VudFBlckdyb3VwQ2hhbmdlJzsgY291bnRQZXJHcm91cDogbnVtYmVyIH1cbiAgICB8IHsgdHlwZTogJ3ZpZXdNb3JlS2V5Q2hhbmdlJzsgdmlld01vcmVLZXk6IHN0cmluZyB9XG4gICAgfCB7IHR5cGU6ICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJyB9O1xuXG4gIC8vLy8vLy8vLy9cbiAgLy8gTG9hZCAvL1xuICAvLy8vLy8vLy8vXG5cbiAgZXhwb3J0IHR5cGUgTG9hZCA9IHtcbiAgICBsb2FkaW5nOiBib29sZWFuO1xuICAgIGVycm9yOiB1bmtub3duIHwgbnVsbDtcbiAgfTtcblxuICAvLy8vLy8vLy8vLy9cbiAgLy8gUmVzdWx0IC8vXG4gIC8vLy8vLy8vLy8vL1xuXG4gIGV4cG9ydCB0eXBlIFJlc3VsdDxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQuXG4gICAgICovXG4gICAgY3VycmVudFBhZ2VEYXRhOiBSW107XG4gICAgLyoqXG4gICAgICogVGhlIHRvdGFsIG51bWJlciBvZiByb3dzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFN1Ykdyb3VwUmVzdWx0PFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cD4gPSBSZXN1bHQ8Uj4gJiB7XG4gICAgLyoqXG4gICAgICogQW55IG90aGVyIHJlbGV2YW50IGdyb3VwIGRhdGEsIHVzZWQgZm9yIHRoZSBzdWJoZWFkZXJcbiAgICAgKi9cbiAgICBncm91cERhdGE6IEc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgR3JvdXBSZXN1bHQ8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IHtcbiAgICAvKipcbiAgICAgKiBUaGUgZnVsbCByb3cgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSwgYWZ0ZXIgZmlsdGVycywgc2VhcmNoIHF1ZXJ5LCBhbmRcbiAgICAgKiByb3cgb3JkZXJpbmcgYXJlIGFwcGxpZWQsIHNwbGl0IGludG8gZ3JvdXBzXG4gICAgICovXG4gICAgZ3JvdXBSZXN1bHRzOiBTdWJHcm91cFJlc3VsdDxSLCBHPltdO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2YgZ3JvdXBzIChyZWdhcmRsZXNzIG9mIHBhZ2luYXRpb24pIHRoYXQgbWF0Y2ggdGhlXG4gICAgICogZmlsdGVycyBhbmQgc2VhcmNoIHF1ZXJ5LlxuICAgICAqL1xuICAgIHRvdGFsR3JvdXBDb3VudDogbnVtYmVyO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b3RhbCBudW1iZXIgb2Ygcm93cyAocmVnYXJkbGVzcyBvZiBwYWdpbmF0aW9uKSB0aGF0IG1hdGNoIHRoZVxuICAgICAqIGZpbHRlcnMgYW5kIHNlYXJjaCBxdWVyeS5cbiAgICAgKi9cbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgfTtcbiAgZXhwb3J0IHR5cGUgU291cmNlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IChcbiAgICBxdWVyeTogUXVlcnk8QywgRj4sXG4gICAgbW9zdFJlY2VudEFjdGlvbjogQWN0aW9uPFIsIEMsIEYsIEc+LFxuICApID0+IFByb21pc2U8UmVzdWx0PFI+IHwgR3JvdXBSZXN1bHQ8UiwgRz4+O1xuXG4gIC8vLy8vLy8vLy8vLy9cbiAgLy8gRGlzcGxheSAvL1xuICAvLy8vLy8vLy8vLy8vXG5cbiAgLy8gRGlzcGxheSBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIENvbHVtblNldHRpbmdzPEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGtleTogQztcbiAgICBlbmFibGVkOiBib29sZWFuO1xuICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgcGlubmVkOiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBEaXNwbGF5PEMgZXh0ZW5kcyBDb2x1bW4+ID0ge1xuICAgIGNvbHVtblNldHRpbmdzOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIGNlbGxSb3dTcGFuOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBudW1iZXI7XG4gIH07XG5cbiAgLy8gRGlzcGxheSBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgRGlzcGxheUFjdGlvbjxDIGV4dGVuZHMgQ29sdW1uPiA9XG4gICAgfCB7IHR5cGU6ICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc7IHBheWxvYWQ6IERpc3BsYXk8Qz5bJ2NvbHVtblNldHRpbmdzJ10gfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uUGluQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBwaW5uZWQ6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5zRnJlZXplVXBUb0NoYW5nZSc7XG4gICAgICAgIGluZGV4OiBudW1iZXI7XG4gICAgICAgIGZyZWV6ZTogYm9vbGVhbjtcbiAgICAgICAgc291cmNlPzogJ2hlYWRlck1lbnUnIHwgJ29wdGlvbnNNZW51JyB8ICdmcmVlemVEaXZpZGVyJztcbiAgICAgICAgY29sdW1uPzogQztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2NvbHVtbk9yZGVyQ2hhbmdlJztcbiAgICAgICAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICAgICAgICBuZXdJbmRleDogbnVtYmVyO1xuICAgICAgICBzb3VyY2U/OiAndGFibGVEcmFnJyB8ICdtZW51RHJhZyc7XG4gICAgICAgIGNvbHVtbj86IEM7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdjb2x1bW5FbmFibGVkQ2hhbmdlJztcbiAgICAgICAgY29sdW1uOiBDO1xuICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgICBzb3VyY2U/OiAnaGVhZGVyTWVudScgfCAnb3B0aW9uc01lbnUnIHwgJ2RyYWdEcm9wJyB8ICdleWVJY29uJztcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgdHlwZTogJ2VuYWJsZUFsbENvbHVtbnNDaGFuZ2UnO1xuICAgICAgICBlbmFibGVkOiBib29sZWFuO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnY29sdW1uV2lkdGhDaGFuZ2UnO1xuICAgICAgICBjb2x1bW46IEM7XG4gICAgICAgIHByZWZlcnJlZFdpZHRoOiBudW1iZXIgfCAnYXV0byc7XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdyZXNldFRvRGVmYXVsdENvbHVtbnMnO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy9cbiAgLy8gU2VsZWN0aW9uIC8vXG4gIC8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIFNlbGVjdGlvbiBzdGF0ZSAvL1xuXG4gIGV4cG9ydCB0eXBlIFNlbGVjdGlvbjxSIGV4dGVuZHMgUm93PiA9IHtcbiAgICBtb3N0UmVjZW50bHlTZWxlY3RlZDogUlsnaWQnXSB8IG51bGw7XG4gIH0gJiAoXG4gICAgfCB7XG4gICAgICAgIG1vZGU6ICdpbmNsdWRlJztcbiAgICAgICAgaW5jbHVkZWQ6IFNldDxSWydpZCddPjtcbiAgICAgIH1cbiAgICB8IHtcbiAgICAgICAgbW9kZTogJ2V4Y2x1ZGUnO1xuICAgICAgICBleGNsdWRlZDogU2V0PFJbJ2lkJ10+O1xuICAgICAgfVxuICApO1xuXG4gIC8vIFNlbGVjdGlvbiBhY3Rpb25zIC8vXG5cbiAgZXhwb3J0IHR5cGUgU2VsZWN0aW9uQWN0aW9uPFIgZXh0ZW5kcyBSb3csIEcgZXh0ZW5kcyBHcm91cCA9IHsga2V5OiAnJyB9PiA9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdzZWxlY3Rpb25DaGFuZ2UnO1xuICAgICAgICBwYXlsb2FkOiBTZWxlY3Rpb248Uj47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdncm91cFNlbGVjdGlvbkNoYW5nZSc7XG4gICAgICAgIHBheWxvYWQ6IFJvd0dyb3VwPFIsIEc+O1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAncm93U2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgICBpZDogUlsnaWQnXTtcbiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgICAgIGNvbnRpZ3VvdXM6IGJvb2xlYW47XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHR5cGU6ICdwYWdlU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnYWxsU2VsZWN0ZWRDaGFuZ2UnO1xuICAgICAgfVxuICAgIHwge1xuICAgICAgICB0eXBlOiAnc2VsZWN0aW9uQ2xlYXInO1xuICAgICAgfTtcblxuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAvLyBQdXR0aW5nIGl0IGFsbCB0b2dldGhlciAvL1xuICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gIC8vIENvbWJpbmVkIHN0YXRlIC8vXG5cbiAgZXhwb3J0IHR5cGUgQ29yZVN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBxdWVyeTogUXVlcnk8QywgRj47XG4gICAgbG9hZDogTG9hZDtcbiAgICByZXN1bHQ6IFJlc3VsdDxSPiB8IEdyb3VwUmVzdWx0PFIsIEc+O1xuICAgIGRpc3BsYXk6IERpc3BsYXk8Qz47XG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb248Uj47XG4gIH07XG5cbiAgLy8gQ29tYmluZWQgYWN0aW9ucyAvL1xuXG4gIGV4cG9ydCB0eXBlIEFjdGlvbjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSBRdWVyeUFjdGlvbjxDLCBGPiB8IERpc3BsYXlBY3Rpb248Qz4gfCBTZWxlY3Rpb25BY3Rpb248UiwgRz47XG5cbiAgZXhwb3J0IHR5cGUgRWZmZWN0ID0gJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcyc7XG5cbiAgLy8gRnVsbCBzdGF0ZSAoY29yZSBzdGF0ZSBwbHVzIHB1cmUgZGVyaXZhdGlvbnMpIC8vXG4gIGV4cG9ydCBjb25zdCBDb2x1bW5zTWF4U2hvd246IG51bWJlciA9IDUwO1xuICBleHBvcnQgY29uc3QgQ29sdW1uRGF0YVR5cGVzID0gW1xuICAgICdhZHZhbmNlZCcsXG4gICAgJ2N1cnJlbmN5JyxcbiAgICAnZGF0ZScsXG4gICAgJ2ljb24nLFxuICAgICdsb25nVGV4dCcsXG4gICAgJ251bWJlcicsXG4gICAgJ3Nob3J0VGV4dCcsXG4gIF0gYXMgY29uc3Q7XG4gIGV4cG9ydCB0eXBlIENvbHVtbkRhdGFUeXBlID0gKHR5cGVvZiBDb2x1bW5EYXRhVHlwZXMpW251bWJlcl07XG4gIGV4cG9ydCB0eXBlIENvbHVtbkFsaWdubWVudCA9ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcbiAgZXhwb3J0IHR5cGUgQ29sdW1uTWV0YWRhdGEgPSB7XG4gICAgb3JkZXJhYmxlOiBib29sZWFuO1xuICAgIGZpbHRlcmFibGU/OiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU/OiBib29sZWFuO1xuICAgIG1pbldpZHRoOiBudW1iZXI7XG4gICAgZGF0YVR5cGU6IENvbHVtbkRhdGFUeXBlO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIGRlZmF1bHRQaW5uZWQ/OiBib29sZWFuO1xuICAgIGNsaWNrUHJldmVudERlZmF1bHQ/OiBib29sZWFuO1xuICAgIGNsaWNrU3RvcFByb3BhZ2F0aW9uPzogYm9vbGVhbjtcbiAgICBkaXNwbGF5TmFtZT86IHN0cmluZztcbiAgfTtcbiAgZXhwb3J0IHR5cGUgRXh0ZXJuYWxSb3dMaW5rID0ge1xuICAgIHR5cGU6ICdleHRlcm5hbCc7XG4gICAgaHJlZjogc3RyaW5nO1xuICB9O1xuICBleHBvcnQgdHlwZSBJbnRlcm5hbFJvd0xpbmsgPSB7XG4gICAgdHlwZTogJ2ludGVybmFsJztcbiAgICByb3V0ZXJMaW5rOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICBxdWVyeVBhcmFtcz86IFBhcmFtcztcbiAgICBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZztcbiAgICBhY3RpdmU/OiBib29sZWFuO1xuICB9O1xuICBleHBvcnQgdHlwZSBSb3dMaW5rID0gRXh0ZXJuYWxSb3dMaW5rIHwgSW50ZXJuYWxSb3dMaW5rO1xuICBleHBvcnQgdHlwZSBGdWxsUm93PFIgZXh0ZW5kcyBSb3c+ID0gUiAmIHtcbiAgICByb3dMaW5rOiBSb3dMaW5rIHwgbnVsbDtcbiAgICBzZWxlY3RlZDogYm9vbGVhbjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBSb3dHcm91cDxSIGV4dGVuZHMgUm93LCBHIGV4dGVuZHMgR3JvdXA+ID0ge1xuICAgIHJvd3M6IEZ1bGxSb3c8Uj5bXTtcbiAgICBzZWxlY3RlZDogTXVsdGlTZWxlY3Rpb25TdGF0ZTtcbiAgICB0b3RhbE1hdGNoaW5nUm93Q291bnQ6IG51bWJlcjtcbiAgICBncm91cERhdGE6IEc7XG4gIH07XG4gIGV4cG9ydCB0eXBlIEZ1bGxDb2x1bW48QyBleHRlbmRzIENvbHVtbj4gPSBDb2x1bW5TZXR0aW5nczxDPiAmXG4gICAgQ29sdW1uTWV0YWRhdGEgJiB7XG4gICAgICB3aWR0aDogbnVtYmVyO1xuICAgICAgbGVmdDogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGFsaWdubWVudDogQ29sdW1uQWxpZ25tZW50O1xuICAgIH07XG4gIGV4cG9ydCB0eXBlIE11bHRpU2VsZWN0aW9uU3RhdGUgPSBib29sZWFuIHwgJ2luZGV0ZXJtaW5hdGUnO1xuICBleHBvcnQgdHlwZSBTZWxlY3Rpb25Db25maWd1cmF0aW9uID0gYm9vbGVhbiB8ICdpbmRpdmlkdWFsJztcblxuICBleHBvcnQgdHlwZSBSb3dTcGFuR2V0dGVyPEMgZXh0ZW5kcyBDb2x1bW4+ID0gKFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sdW1uOiBDLFxuICApID0+IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ7XG5cbiAgZXhwb3J0IHR5cGUgVmFsaWRSb3dTcGFuR2V0dGVyPEMgZXh0ZW5kcyBDb2x1bW4+ID0gKFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgY29sdW1uOiBDLFxuICApID0+IG51bWJlcjtcblxuICBleHBvcnQgdHlwZSBDc3ZDZWxsRm9ybWF0dGVyPFIgZXh0ZW5kcyBSb3csIEMgZXh0ZW5kcyBDb2x1bW4+ID0gKFxuICAgIHJvdzogUixcbiAgICBjb2x1bW46IEZ1bGxDb2x1bW48Qz4sXG4gICkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuICBleHBvcnQgdHlwZSBDc3ZHcm91cENlbGxGb3JtYXR0ZXI8UiBleHRlbmRzIFJvdywgRyBleHRlbmRzIEdyb3VwPiA9IChcbiAgICByb3c6IFIsXG4gICAgZ3JvdXA6IEcsXG4gICkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuICBleHBvcnQgdHlwZSBDc3ZSb3cgPSBzdHJpbmdbXTtcbiAgZXhwb3J0IHR5cGUgQ3N2ID0gQ3N2Um93W107XG4gIGV4cG9ydCB0eXBlIENzdk1vZGUgPSAnZnVsbCcgfCAnc2VsZWN0aW9uJztcbiAgZXhwb3J0IHR5cGUgQ3N2T3V0cHV0ID1cbiAgICB8IHsgbG9hZGluZzogdHJ1ZTsgZGF0YTogbnVsbCB9XG4gICAgfCB7IGxvYWRpbmc6IGZhbHNlOyBkYXRhOiBDc3YgfTtcblxuICBleHBvcnQgdHlwZSBDb2x1bW5OYW1lTWFwPEMgZXh0ZW5kcyBDb2x1bW4+ID0gTWFwPEMsIEMgfCBzdHJpbmc+O1xuXG4gIGV4cG9ydCB0eXBlIFNlYXJjaGFibGVDb2x1bW5NYXA8QyBleHRlbmRzIENvbHVtbj4gPSBNYXA8QywgYm9vbGVhbj47XG5cbiAgZXhwb3J0IHR5cGUgRnVsbFN0YXRlPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IENvcmVTdGF0ZTxSLCBDLCBGLCBHPiAmIHtcbiAgICBxdWVyeToge1xuICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICBwcmV2aW91czogbnVtYmVyIHwgbnVsbDtcbiAgICAgICAgcGFnZXM6IG51bWJlcltdO1xuICAgICAgICBuZXh0OiBudW1iZXIgfCBudWxsO1xuICAgICAgICBwYWdlQ291bnQ6IG51bWJlcjtcbiAgICAgICAgc2hvd0NvbnRyb2xzOiBib29sZWFuO1xuICAgICAgICBwYWdlUm93U3RhcnQ6IG51bWJlcjtcbiAgICAgICAgcGFnZVJvd0VuZDogbnVtYmVyO1xuICAgICAgfTtcbiAgICAgIG5vU2VhcmNoQ29sdW1uc1NlbGVjdGVkOiBib29sZWFuO1xuICAgIH07XG4gICAgcmVzdWx0OlxuICAgICAgfCB7XG4gICAgICAgICAgcm93czogRnVsbFJvdzxSPltdO1xuICAgICAgICAgIHJvd3NBc0dyb3VwOiBSb3dHcm91cDxSLCBHPjtcbiAgICAgICAgICBpc0dyb3VwZWQ6IGZhbHNlO1xuICAgICAgICAgIGNzdkRhdGE6IChtb2RlPzogQ3N2TW9kZSkgPT4gQXN5bmNHZW5lcmF0b3I8Q3N2T3V0cHV0PjtcbiAgICAgICAgICBjc3ZGaWxlbmFtZTogc3RyaW5nO1xuICAgICAgICB9XG4gICAgICB8IHtcbiAgICAgICAgICByb3dzOiBGdWxsUm93PFI+W107XG4gICAgICAgICAgcm93R3JvdXBzOiBSb3dHcm91cDxSLCBHPltdO1xuICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZTtcbiAgICAgICAgICBjc3ZEYXRhOiAobW9kZT86IENzdk1vZGUpID0+IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD47XG4gICAgICAgICAgY3N2RmlsZW5hbWU6IHN0cmluZztcbiAgICAgICAgfTtcbiAgICBkaXNwbGF5OiB7XG4gICAgICBjb2x1bW5zOiBGdWxsQ29sdW1uPEM+W107XG4gICAgICBhbGxDb2x1bW5zOiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogU2VhcmNoYWJsZUNvbHVtbk1hcDxDPjtcbiAgICAgIGNvbHVtbk5hbWVNYXA6IENvbHVtbk5hbWVNYXA8Qz47XG4gICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBzdHJpbmcgfCBudWxsO1xuICAgICAgY29sdW1uc0FyZUZyZWV6YWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVIaWRlYWJsZTogYm9vbGVhbjtcbiAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogYm9vbGVhbjtcbiAgICAgIHJvd3NBcmVHcmF5ZWQ6IGJvb2xlYW47XG4gICAgICBjdXN0b21TdW1tYXJ5Um93OiBib29sZWFuO1xuICAgICAgY3N2RXhwb3J0QWxsb3dlZDogYm9vbGVhbjtcbiAgICAgIGVuYWJsZWRDb3VudDogbnVtYmVyO1xuICAgICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I6IGJvb2xlYW47XG4gICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKSA9PiBib29sZWFuO1xuICAgIH07XG4gICAgc2VsZWN0aW9uOiB7XG4gICAgICBhbGxvd1NlbGVjdGlvbjogU2VsZWN0aW9uQ29uZmlndXJhdGlvbjtcbiAgICAgIGlzQWxsU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQ6IE11bHRpU2VsZWN0aW9uU3RhdGU7XG4gICAgICBzZWxlY3RlZENvdW50OiBudW1iZXI7XG4gICAgfTtcbiAgfTtcblxuICAvKipcbiAgICogVGhlIG1hbmFnZXIgaXMgd2hhdCBzZXRzIHVwIHRoZSBpbml0aWFsIHN0YXRlIGFuZCB0cmFuc2xhdGVzIHVzZXIgYWN0aW9uc1xuICAgKiAobGlrZSBwYWdpbmF0aW9uIG9yIGZpbHRlciBjaGFuZ2VzLCBldGMuKSBpbnRvIG5ldyByb3cgZGF0YSBieSBjYWxsaW5nIHRoZVxuICAgKiByZWR1Y2VyIGZ1bmN0aW9uLiBJdCBhbHNvIGF1Z21lbnRzIHRoZSBjb3JlIHN0YXRlIHdpdGggYWRkaXRpb25hbCBkZXJpdmVkXG4gICAqIHN0YXRlLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IHtcbiAgICBhY3Rpb25zOiBTdWJqZWN0PEFjdGlvbjxSLCBDLCBGLCBHPj47XG4gICAgc3RhdGU6IENvbm5lY3RhYmxlPEZ1bGxTdGF0ZTxSLCBDLCBGLCBHPj47XG4gICAgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBNYW5hZ2VyT3B0aW9uczxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gICAgRyBleHRlbmRzIEdyb3VwID0geyBrZXk6ICcnIH0sXG4gID4gPSB7XG4gICAgaW5pdGlhbFN0YXRlPzogRGVlcFBhcnRpYWw8Q29yZVN0YXRlPFIsIEMsIEYsIEc+PjtcbiAgICByb3dMaW5rPzogKHJvdzogUiwgZ3JvdXA/OiBHKSA9PiBSb3dMaW5rO1xuICAgIGNzdkNlbGxGb3JtYXR0ZXI/OiBDc3ZDZWxsRm9ybWF0dGVyPFIsIEM+O1xuICAgIGNzdkdyb3VwQ2VsbEZvcm1hdHRlcj86IENzdkdyb3VwQ2VsbEZvcm1hdHRlcjxSLCBHPjtcbiAgICBjc3ZGaWxlQmFzZW5hbWU/OiBzdHJpbmc7XG4gICAgYWxsb3dTZWxlY3Rpb24/OiBTZWxlY3Rpb25Db25maWd1cmF0aW9uO1xuICAgIGNvbHVtbnNBcmVGcmVlemFibGU/OiBib29sZWFuO1xuICAgIGNvbHVtbnNBcmVIaWRlYWJsZT86IGJvb2xlYW47XG4gICAgY29sdW1uc0FyZVJlb3JkZXJhYmxlPzogYm9vbGVhbjtcbiAgICBkZWZhdWx0Q29sdW1uU3RhdGU/OiBDb2x1bW5TZXR0aW5nczxDPltdO1xuICAgIHJvd3NBcmVHcmF5ZWQ/OiBib29sZWFuO1xuICAgIGN1c3RvbVN1bW1hcnlSb3c/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gdHJ1ZSwgdGhlIFwiUmVzdWx0cyBwZXIgcGFnZVwiIGxhYmVsIGFuZCBwYWdlLXNpemUgZHJvcGRvd24gYXJlXG4gICAgICogaGlkZGVuLiBQYWdlIG5hdmlnYXRpb24gYXJyb3dzIGFuZCBwYWdlIG51bWJlcnMgcmVtYWluIHZpc2libGUuXG4gICAgICovXG4gICAgaGlkZVBhZ2VTaXplU2VsZWN0b3I/OiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFBhcmVudC1jb250cm9sbGVkIHJvdyBzcGFubmluZy5cbiAgICAgKiBSZXR1cm4gMCB0byBzdXBwcmVzcyB0aGUgY2VsbCwgPj0xIGZvciBhIHJlYWwgcm93c3Bhbi5cbiAgICAgKiBJZiBvbWl0dGVkIG9yIGludmFsaWQsIGRlZmF1bHRzIHRvIDEuXG4gICAgICovXG4gICAgZ2V0Um93U3BhbkZvckNlbGw/OiBSb3dTcGFuR2V0dGVyPEM+O1xuICB9O1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjcmVhdGVNYW5hZ2VyPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPihcbiAgICBzb3VyY2U6IFNvdXJjZTxSLCBDLCBGLCBHPixcbiAgICBjb2x1bW5zOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4gICk6IE1hbmFnZXI8UiwgQywgRiwgRz4ge1xuICAgIC8vIFNldCB1cCB0aGUgaW5pdGlhbCB0YWJsZSBzdGF0ZS5cblxuICAgIGNvbnN0IHNlYXJjaGFibGVDb2x1bW5NYXA6IFNlYXJjaGFibGVDb2x1bW5NYXA8Qz4gPSBuZXcgTWFwPEMsIGJvb2xlYW4+KFxuICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmVudHJpZXMoKSkubWFwKChba2V5LCBtZXRhZGF0YV0pID0+IFtcbiAgICAgICAga2V5LFxuICAgICAgICBtZXRhZGF0YS5zZWFyY2hhYmxlID8/IHRydWUsXG4gICAgICBdKSxcbiAgICApO1xuICAgIGNvbnN0IGRlZmF1bHRTdGF0ZTogQ29yZVN0YXRlPFIsIEMsIEYsIEc+ID0ge1xuICAgICAgcXVlcnk6IHtcbiAgICAgICAgb3JkZXI6IG51bGwsXG4gICAgICAgIHNlYXJjaDogJycsXG4gICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoXG4gICAgICAgICAgQXJyYXkuZnJvbShjb2x1bW5zLmtleXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoa2V5ID0+IHNlYXJjaGFibGVDb2x1bW5NYXAuZ2V0KGtleSkpXG4gICAgICAgICAgICAubWFwKGtleSA9PiBba2V5LCB0cnVlXSksXG4gICAgICAgICksXG4gICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgIHBhZ2VTaXplOiAyNSxcbiAgICAgICAgfSxcbiAgICAgICAgZ3JvdXBpbmc6IHtcbiAgICAgICAgICB2aWV3TW9yZUtleTogbnVsbCxcbiAgICAgICAgICBncm91cHNQZXJQYWdlOiA1LFxuICAgICAgICAgIGNvdW50UGVyR3JvdXA6IDEwLFxuICAgICAgICB9LFxuICAgICAgICBmaWx0ZXJzOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGxvYWQ6IHsgbG9hZGluZzogZmFsc2UsIGVycm9yOiBudWxsIH0sXG4gICAgICByZXN1bHQ6IHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBbXSxcbiAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiAwLFxuICAgICAgfSxcbiAgICAgIGRpc3BsYXk6IHtcbiAgICAgICAgY29sdW1uU2V0dGluZ3M6IFtdLFxuICAgICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICB9LFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gICAgY29uc3QgZGVmYXVsdGVkSW5pdGlhbFN0YXRlOiBDb3JlU3RhdGU8UiwgQywgRiwgRz4gPSBkZWZhdWx0c0RlZXAoXG4gICAgICB7fSxcbiAgICAgIG9wdGlvbnM/LmluaXRpYWxTdGF0ZSxcbiAgICAgIGRlZmF1bHRTdGF0ZSxcbiAgICApO1xuXG4gICAgY29uc3QgY29sdW1uTmFtZU1hcDogQ29sdW1uTmFtZU1hcDxDPiA9IG5ldyBNYXA8QywgQyB8IHN0cmluZz4oXG4gICAgICBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKS5tYXAoKFtrZXksIG1ldGFkYXRhXSkgPT4gW1xuICAgICAgICBrZXksXG4gICAgICAgIG1ldGFkYXRhLmRpc3BsYXlOYW1lID8/IGtleSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICBjb25zdCBkZWZhdWx0Q29sdW1uU3RhdGUgPVxuICAgICAgb3B0aW9ucz8uZGVmYXVsdENvbHVtblN0YXRlID8/XG4gICAgICBkZWZhdWx0ZWRJbml0aWFsU3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncztcblxuICAgIC8vIFdpcmUgdXAgcmVkdWNlZCBzdGF0ZSBmcm9tIGFjdGlvbnMgYW5kIGluaXRpYWwgc3RhdGUuXG4gICAgY29uc3QgYWN0aW9uczogU3ViamVjdDxBY3Rpb248UiwgQywgRiwgRz4+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBjb3JlU3RhdGU6IE9ic2VydmFibGU8e1xuICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgIGVmZmVjdDogRWZmZWN0IHwgbnVsbDtcbiAgICB9PiA9IGFjdGlvbnMucGlwZShcbiAgICAgIG1lcmdlU2NhbjxcbiAgICAgICAgQWN0aW9uPFIsIEMsIEYsIEc+LFxuICAgICAgICB7XG4gICAgICAgICAgc3RhdGU6IENvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgICAgICAgICBlZmZlY3Q6IEVmZmVjdCB8IG51bGw7XG4gICAgICAgIH1cbiAgICAgID4oXG4gICAgICAgICh7IHN0YXRlIH0sIGFjdGlvbikgPT5cbiAgICAgICAgICBmcm9tKFxuICAgICAgICAgICAgcmVkdWNlKFxuICAgICAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICBzb3VyY2UsXG4gICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKSxcbiAgICAgICAgeyBzdGF0ZTogZGVmYXVsdGVkSW5pdGlhbFN0YXRlLCBlZmZlY3Q6IG51bGwgfSxcbiAgICAgICAgMSxcbiAgICAgICksXG4gICAgICBzaGFyZSh7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25FcnJvcjogZmFsc2UsXG4gICAgICAgIHJlc2V0T25Db21wbGV0ZTogZmFsc2UsXG4gICAgICAgIHJlc2V0T25SZWZDb3VudFplcm86IGZhbHNlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGNzdkV4cG9ydEFsbG93ZWQgPSAhKFxuICAgICAgb3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGwgfHwgb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvd1xuICAgICk7XG5cbiAgICAvLyBBdWdtZW50IHN0YXRlIHdpdGggZGVyaXZlZCBzdGF0ZSwgYW5kIHN1YnNjcmliZS5cbiAgICBjb25zdCBzdGF0ZTogQ29ubmVjdGFibGU8RnVsbFN0YXRlPFIsIEMsIEYsIEc+PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIG1hcCgoeyBzdGF0ZTogcyB9KTogRnVsbFN0YXRlPFIsIEMsIEYsIEc+ID0+IHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZENvbHVtbnMgPSByZXNvbHZlQ29sdW1ucyhcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICAgICEhb3B0aW9ucz8uYWxsb3dTZWxlY3Rpb24sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChpc0dyb3VwUmVzdWx0KHMucmVzdWx0KSkge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnM/LmdldFJvd1NwYW5Gb3JDZWxsKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAnSGVhZHMgdXAhIEN1c3RvbSByb3cgc3BhbnMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIGdyb3VwZWQgdGFibGVzLicsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdykge1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgJ0hlYWRzIHVwISBDdXN0b20gc3VtbWFyeSByb3dzIGFyZSBub3Qgc3VwcG9ydGVkIGZvciBncm91cGVkIHRhYmxlcy4nLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCByb3dHcm91cHMgPSBzLnJlc3VsdC5ncm91cFJlc3VsdHMubWFwKGdyb3VwID0+ICh7XG4gICAgICAgICAgICAgIHJvd3M6IGdyb3VwLmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICAgICAgIHJvd0xpbms6IG9wdGlvbnM/LnJvd0xpbmtcbiAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5yb3dMaW5rKHJvdywgZ3JvdXAuZ3JvdXBEYXRhKVxuICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBpc1Jvd1NlbGVjdGVkKHMsIHJvdy5pZCksXG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGlzR3JvdXBTZWxlY3RlZChzLCBncm91cCksXG4gICAgICAgICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZ3JvdXAudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgICAgICBncm91cERhdGE6IGdyb3VwLmdyb3VwRGF0YSxcbiAgICAgICAgICAgIH0pKTtcblxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24qIGNzdkRhdGEoXG4gICAgICAgICAgICAgIG1vZGU6IENzdk1vZGUgPSAnZnVsbCcsXG4gICAgICAgICAgICApOiBBc3luY0dlbmVyYXRvcjxDc3ZPdXRwdXQ+IHtcbiAgICAgICAgICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwQ2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkdyb3VwQ2VsbEZvcm1hdHRlcjtcbiAgICAgICAgICAgICAgaWYgKCFjZWxsRm9ybWF0dGVyKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICdvcHRpb25zLmNzdkNlbGxGb3JtYXR0ZXIgaXMgcmVxdWlyZWQgZm9yIENTViBleHBvcnQnLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogdHJ1ZSwgZGF0YTogbnVsbCB9O1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU2V0ID0gYXdhaXQgc291cmNlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnksXG4gICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBzLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeyB0eXBlOiAnbG9hZCcgfSxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoIWlzR3JvdXBSZXN1bHQoZGF0YVNldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgJ1JldHVybmVkIG5vbi1ncm91cGVkIENTViBkYXRhIGZvciBncm91cGVkIHRhYmxlJyxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gcmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBkYXRhOiBDc3YgPSBbXTtcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKFxuICAgICAgICAgICAgICAgIGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGlmIChncm91cENlbGxGb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBkYXRhWzBdLnB1c2goJycpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCByb3dJdGVtIG9mIGRhdGFTZXQuZ3JvdXBSZXN1bHRzLmZsYXRNYXAoZ3JvdXBzID0+XG4gICAgICAgICAgICAgICAgZ3JvdXBzLmN1cnJlbnRQYWdlRGF0YS5tYXAocm93ID0+ICh7XG4gICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICBncm91cDogZ3JvdXBzLmdyb3VwRGF0YSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZWNvcmQgPSByb3dJdGVtLnJvdztcbiAgICAgICAgICAgICAgICBpZiAobW9kZSA9PT0gJ3NlbGVjdGlvbicgJiYgIWlzUm93U2VsZWN0ZWQocywgcmVjb3JkLmlkKSlcbiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdzogQ3N2Um93ID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2x1bW4gb2YgZnVsbENvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgIHJvdy5wdXNoKGF3YWl0IGNlbGxGb3JtYXR0ZXIocmVjb3JkLCBjb2x1bW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwQ2VsbEZvcm1hdHRlciAmJiByb3dJdGVtLmdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICByb3cucHVzaChhd2FpdCBncm91cENlbGxGb3JtYXR0ZXIocmVjb3JkLCByb3dJdGVtLmdyb3VwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzOiBnZXRQcmV2aW91c1BhZ2UocyksXG4gICAgICAgICAgICAgICAgICBwYWdlczogZ2V0UGFnZXMocyksXG4gICAgICAgICAgICAgICAgICBuZXh0OiBnZXROZXh0UGFnZShzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogZ2V0UGFnZUNvdW50KHMpLFxuICAgICAgICAgICAgICAgICAgc2hvd0NvbnRyb2xzOiBnZXRTaG93UGFnaW5hdGlvbkNvbnRyb2xzKHMpLFxuICAgICAgICAgICAgICAgICAgcGFnZVJvd1N0YXJ0OiBnZXRQYWdlUm93U3RhcnQocyksXG4gICAgICAgICAgICAgICAgICBwYWdlUm93RW5kOiBnZXRQYWdlUm93RW5kKHMpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbm9TZWFyY2hDb2x1bW5zU2VsZWN0ZWQ6IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKFxuICAgICAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgICAgICdub25lJyxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucyxcbiAgICAgICAgICAgICAgICBhbGxDb2x1bW5zOiBnZXRBbGxDb2x1bW5zKHMsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBnZXRaZXJvU3RhdGVNZXNzYWdlKHMsIHBsdXJhbEVudGl0eU5hbWUpLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUZyZWV6YWJsZSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zQXJlSGlkZWFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUhpZGVhYmxlLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogb3B0aW9ucz8uY29sdW1uc0FyZVJlb3JkZXJhYmxlID8/IHRydWUsXG4gICAgICAgICAgICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgICAgICAgICAgIGN1c3RvbVN1bW1hcnlSb3c6ICEhb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdyxcbiAgICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBoaWRlUGFnZVNpemVTZWxlY3RvcjogISFvcHRpb25zPy5oaWRlUGFnZVNpemVTZWxlY3RvcixcbiAgICAgICAgICAgICAgICBjZWxsUm93U3BhbjogKF9pOiBudW1iZXIsIF9jb2x1bW46IEMpID0+IDEsXG4gICAgICAgICAgICAgICAgbmVlZHNSaWdodEJvcmRlcjogKCkgPT4gZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgICAgIC4uLnMuc2VsZWN0aW9uLFxuICAgICAgICAgICAgICAgIGFsbG93U2VsZWN0aW9uOiBvcHRpb25zPy5hbGxvd1NlbGVjdGlvbiA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgICBpc0FsbFNlbGVjdGVkOiBpc0FsbFNlbGVjdGVkKHMpLFxuICAgICAgICAgICAgICAgIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDogaXNDdXJyZW50UGFnZVNlbGVjdGVkKHMpLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkQ291bnQ6IHNlbGVjdGVkQ291bnQocyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIC4uLnMucmVzdWx0LFxuICAgICAgICAgICAgICAgIGlzR3JvdXBlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICByb3dHcm91cHMsXG4gICAgICAgICAgICAgICAgcm93czogcm93R3JvdXBzLmZsYXRNYXAoZ3JvdXAgPT4gZ3JvdXAucm93cyksXG4gICAgICAgICAgICAgICAgY3N2RGF0YSxcbiAgICAgICAgICAgICAgICBjc3ZGaWxlbmFtZTogZ2V0Q3N2RmlsZW5hbWUocGx1cmFsRW50aXR5TmFtZSwgb3B0aW9ucyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByb3dzID0gcy5yZXN1bHQuY3VycmVudFBhZ2VEYXRhLm1hcChyb3cgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucm93LFxuICAgICAgICAgICAgICByb3dMaW5rOiBvcHRpb25zPy5yb3dMaW5rID8gb3B0aW9ucy5yb3dMaW5rKHJvdykgOiBudWxsLFxuICAgICAgICAgICAgICBzZWxlY3RlZDogaXNSb3dTZWxlY3RlZChzLCByb3cuaWQpLFxuICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICBjb25zdCBjZWxsUm93U3BhbkNhY2hlID0gbWVtb2l6ZWRDZWxsUm93U3BhbihcbiAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgcmVzb2x2ZWRDb2x1bW5zLFxuICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGNlbGxSb3dTcGFuOiBWYWxpZFJvd1NwYW5HZXR0ZXI8Qz4gPSAocm93SW5kZXgsIGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgY2VsbFJvd1NwYW5DYWNoZT8uZ2V0KGNvbHVtbik/Lltyb3dJbmRleF0gPz8gMTtcbiAgICAgICAgICAgIGNvbnN0IGhhc0FueVJvd1NwYW5zID0gY2VsbFJvd1NwYW5DYWNoZVxuICAgICAgICAgICAgICA/IFsuLi5jZWxsUm93U3BhbkNhY2hlLnZhbHVlcygpXS5zb21lKHNwYW5zID0+XG4gICAgICAgICAgICAgICAgICBzcGFucy5zb21lKHNwYW4gPT4gc3BhbiA+IDEpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRDb2x1bW5LZXlzID0gcmVzb2x2ZWRDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4ga2V5KTtcblxuICAgICAgICAgICAgYXN5bmMgZnVuY3Rpb24qIGNzdkRhdGEobW9kZSA9ICdmdWxsJyk6IEFzeW5jR2VuZXJhdG9yPENzdk91dHB1dD4ge1xuICAgICAgICAgICAgICBpZiAoIWNzdkV4cG9ydEFsbG93ZWQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnQ1NWIGV4cG9ydCBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gcm93IHNwYW5uaW5nIG9yIGEgY3VzdG9tIHN1bW1hcnkgcm93IGlzIGVuYWJsZWQuJyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgY2VsbEZvcm1hdHRlciA9IG9wdGlvbnM/LmNzdkNlbGxGb3JtYXR0ZXI7XG4gICAgICAgICAgICAgIGlmICghY2VsbEZvcm1hdHRlcilcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAnb3B0aW9ucy5jc3ZDZWxsRm9ybWF0dGVyIGlzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB5aWVsZCB7IGxvYWRpbmc6IHRydWUsIGRhdGE6IG51bGwgfTtcbiAgICAgICAgICAgICAgY29uc3QgZGF0YVNldCA9IGF3YWl0IHNvdXJjZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogcy5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHsgdHlwZTogJ2xvYWQnIH0sXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKGlzR3JvdXBSZXN1bHQoZGF0YVNldCkpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgJ1JldHVybmVkIGdyb3VwZWQgQ1NWIGRhdGEgZm9yIG5vbi1ncm91cGVkIHRhYmxlJyxcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGNvbnN0IGZ1bGxDb2x1bW5zID0gcmVzb2x2ZUNvbHVtbnMoXG4gICAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgICAgISFvcHRpb25zLmFsbG93U2VsZWN0aW9uLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBkYXRhOiBDc3YgPSBbXTtcbiAgICAgICAgICAgICAgZGF0YS5wdXNoKFxuICAgICAgICAgICAgICAgIGZ1bGxDb2x1bW5zLm1hcCgoeyBrZXkgfSkgPT4gY29sdW1uTmFtZU1hcC5nZXQoa2V5KSA/PyBrZXkpLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGRhdGFTZXQuY3VycmVudFBhZ2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1vZGUgPT09ICdzZWxlY3Rpb24nICYmICFpc1Jvd1NlbGVjdGVkKHMsIHJlY29yZC5pZCkpXG4gICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3c6IENzdlJvdyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIGZ1bGxDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgICByb3cucHVzaChhd2FpdCBjZWxsRm9ybWF0dGVyKHJlY29yZCwgY29sdW1uKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEucHVzaChyb3cpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHlpZWxkIHsgbG9hZGluZzogZmFsc2UsIGRhdGEgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgLi4ucyxcbiAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAuLi5zLnF1ZXJ5LFxuICAgICAgICAgICAgICAgIG9yZGVyOiBoYXNBbnlSb3dTcGFucyA/IG51bGwgOiBzLnF1ZXJ5Lm9yZGVyLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgICAgIC4uLnMucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzOiBnZXRQcmV2aW91c1BhZ2UocyksXG4gICAgICAgICAgICAgICAgICBwYWdlczogZ2V0UGFnZXMocyksXG4gICAgICAgICAgICAgICAgICBuZXh0OiBnZXROZXh0UGFnZShzKSxcbiAgICAgICAgICAgICAgICAgIHBhZ2VDb3VudDogZ2V0UGFnZUNvdW50KHMpLFxuICAgICAgICAgICAgICAgICAgc2hvd0NvbnRyb2xzOiBnZXRTaG93UGFnaW5hdGlvbkNvbnRyb2xzKHMpLFxuICAgICAgICAgICAgICAgICAgcGFnZVJvd1N0YXJ0OiBnZXRQYWdlUm93U3RhcnQocyksXG4gICAgICAgICAgICAgICAgICBwYWdlUm93RW5kOiBnZXRQYWdlUm93RW5kKHMpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgbm9TZWFyY2hDb2x1bW5zU2VsZWN0ZWQ6IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKFxuICAgICAgICAgICAgICAgICAgcyxcbiAgICAgICAgICAgICAgICAgICdub25lJyxcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBkaXNwbGF5OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5kaXNwbGF5LFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IHJlc29sdmVkQ29sdW1ucy5tYXAoY29sdW1uID0+XG4gICAgICAgICAgICAgICAgICBoYXNBbnlSb3dTcGFucyA/IHsgLi4uY29sdW1uLCBvcmRlcmFibGU6IGZhbHNlIH0gOiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBhbGxDb2x1bW5zOiBnZXRBbGxDb2x1bW5zKHMsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWVNYXA6IGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgICAgICAgc2VhcmNoYWJsZUNvbHVtbk1hcDogc2VhcmNoYWJsZUNvbHVtbk1hcCxcbiAgICAgICAgICAgICAgICB6ZXJvU3RhdGVNZXNzYWdlOiBnZXRaZXJvU3RhdGVNZXNzYWdlKHMsIHBsdXJhbEVudGl0eU5hbWUpLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVGcmVlemFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUZyZWV6YWJsZSxcbiAgICAgICAgICAgICAgICBjb2x1bW5zQXJlSGlkZWFibGU6ICEhb3B0aW9ucz8uY29sdW1uc0FyZUhpZGVhYmxlLFxuICAgICAgICAgICAgICAgIGNvbHVtbnNBcmVSZW9yZGVyYWJsZTogb3B0aW9ucz8uY29sdW1uc0FyZVJlb3JkZXJhYmxlID8/IHRydWUsXG4gICAgICAgICAgICAgICAgcm93c0FyZUdyYXllZDogISFvcHRpb25zPy5yb3dzQXJlR3JheWVkLFxuICAgICAgICAgICAgICAgIGN1c3RvbVN1bW1hcnlSb3c6ICEhb3B0aW9ucz8uY3VzdG9tU3VtbWFyeVJvdyxcbiAgICAgICAgICAgICAgICBjc3ZFeHBvcnRBbGxvd2VkLFxuICAgICAgICAgICAgICAgIGVuYWJsZWRDb3VudDogcmVzb2x2ZWRDb2x1bW5zLmxlbmd0aCxcbiAgICAgICAgICAgICAgICBoaWRlUGFnZVNpemVTZWxlY3RvcjogISFvcHRpb25zPy5oaWRlUGFnZVNpemVTZWxlY3RvcixcbiAgICAgICAgICAgICAgICBjZWxsUm93U3BhbixcbiAgICAgICAgICAgICAgICBuZWVkc1JpZ2h0Qm9yZGVyOiAocm93SW5kZXg6IG51bWJlciwgY29sdW1uOiBDKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpID0gcmVzb2x2ZWRDb2x1bW5LZXlzLmZpbmRJbmRleChrZXkgPT4ga2V5ID09PSBjb2x1bW4pO1xuICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwIHx8IGkgPT09IHJlc29sdmVkQ29sdW1uS2V5cy5sZW5ndGggLSAxKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sS2V5ID0gcmVzb2x2ZWRDb2x1bW5LZXlzW2kgKyAxXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNwYW5PblJpZ2h0ID0gY2VsbFJvd1NwYW4ocm93SW5kZXgsIHJpZ2h0Q29sS2V5KTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBzcGFuT25SaWdodCA+IDEgfHwgc3Bhbk9uUmlnaHQgPT09IDA7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgLi4ucy5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgYWxsb3dTZWxlY3Rpb246IG9wdGlvbnM/LmFsbG93U2VsZWN0aW9uID8/IGZhbHNlLFxuICAgICAgICAgICAgICAgIGlzQWxsU2VsZWN0ZWQ6IGlzQWxsU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgICAgaXNDdXJyZW50UGFnZVNlbGVjdGVkOiBpc0N1cnJlbnRQYWdlU2VsZWN0ZWQocyksXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRDb3VudDogc2VsZWN0ZWRDb3VudChzKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgLi4ucy5yZXN1bHQsXG4gICAgICAgICAgICAgICAgaXNHcm91cGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgICAgIHJvd3NBc0dyb3VwOiB7XG4gICAgICAgICAgICAgICAgICByb3dzLFxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgdG90YWxNYXRjaGluZ1Jvd0NvdW50OiByb3dzLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgIGdyb3VwRGF0YTogeyBrZXk6ICcnIH0gYXMgRyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGNzdkZpbGVuYW1lOiBnZXRDc3ZGaWxlbmFtZShwbHVyYWxFbnRpdHlOYW1lLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBjc3ZEYXRhLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzY2FuKChzdGFibGUsIG5ld1N0YXRlKSA9PiBzdGFibGVTdGF0ZShzdGFibGUsIG5ld1N0YXRlKSksXG4gICAgICApLFxuICAgICAge1xuICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICByZXNldE9uRGlzY29ubmVjdDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG4gICAgc3RhdGUuY29ubmVjdCgpO1xuXG4gICAgY29uc3QgZWZmZWN0czogQ29ubmVjdGFibGU8RWZmZWN0PiA9IGNvbm5lY3RhYmxlKFxuICAgICAgY29yZVN0YXRlLnBpcGUoXG4gICAgICAgIGZpbHRlcigoeyBlZmZlY3QgfSkgPT4gZWZmZWN0ICE9PSBudWxsKSxcbiAgICAgICAgbWFwKCh7IGVmZmVjdCB9KSA9PiBlZmZlY3QgYXMgRWZmZWN0KSxcbiAgICAgICksXG4gICAgICB7XG4gICAgICAgIGNvbm5lY3RvcjogKCkgPT4gbmV3IFJlcGxheVN1YmplY3QoMSksXG4gICAgICAgIHJlc2V0T25EaXNjb25uZWN0OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICBlZmZlY3RzLmNvbm5lY3QoKTtcblxuICAgIC8vIExvYWQgaW5pdGlhbCB0YWJsZSByb3cgZGF0YS5cbiAgICBhY3Rpb25zLm5leHQoeyB0eXBlOiAnbG9hZCcgfSk7XG5cbiAgICByZXR1cm4geyBhY3Rpb25zLCBzdGF0ZSwgZWZmZWN0cyB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE1vc3QgdGFibGVzIHVzZSByZW1vdGUgYmFja2VuZHMgdG8gZmV0Y2ggZGF0YSBhc3luY2hyb25vdXNseSwgYnV0IGFuXG4gICAqIGluLW1lbW9yeSBzb3VyY2UgaXMgdXNlZnVsIGZvciBzbWFsbCBkYXRhc2V0cywgd2hlbiBSaXZUYWJsZSBmZWF0dXJlcyBsaWtlXG4gICAqIG9yZGVyaW5nIGFuZCBwYWdpbmF0aW9uIGFyZSBkZXNpcmVkLlxuICAgKi9cblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeUNvbHVtbk1ldGFkYXRhPFIgZXh0ZW5kcyBSb3c+ID0gT21pdDxcbiAgICBDb2x1bW5NZXRhZGF0YSxcbiAgICAnb3JkZXJhYmxlJ1xuICA+ICYgeyBvcmRlcktleT86IGtleW9mIFIgfTtcblxuICBleHBvcnQgdHlwZSBJbk1lbW9yeU1hbmFnZXJPcHRpb25zPFxuICAgIFIgZXh0ZW5kcyBSb3csXG4gICAgQyBleHRlbmRzIENvbHVtbixcbiAgICBGIGV4dGVuZHMgRmlsdGVycyxcbiAgICBHIGV4dGVuZHMgR3JvdXAgPSB7IGtleTogJycgfSxcbiAgPiA9IE1hbmFnZXJPcHRpb25zPFIsIEMsIEYsIEc+ICYge1xuICAgIGZ1c2VPcHRpb25zPzogSUZ1c2VPcHRpb25zPFI+O1xuICAgIGZpbHRlcj86IChmaWx0ZXJzOiBGIHwgbnVsbCwgcm93OiBSKSA9PiBib29sZWFuO1xuICAgIC8qKlxuICAgICAqIFdoZW4gYHF1ZXJ5Lm9yZGVyYCBpcyBudWxsIGFuZCB0aGVyZSBpcyBubyBhY3RpdmUgc2VhcmNoLCByb3dzIGFyZSBvcmRlcmVkXG4gICAgICogYnkgdGhpcyBjb2x1bW4uIElmIG9taXR0ZWQsIHRoZSBmaXJzdCBjb2x1bW4gd2l0aCBhbiBgb3JkZXJLZXlgIGlzIHVzZWRcbiAgICAgKiAoYXNjZW5kaW5nKS5cbiAgICAgKi9cbiAgICBkZWZhdWx0U29ydD86IHsgY29sdW1uOiBDOyBkaXJlY3Rpb246IE9yZGVyRGlyZWN0aW9uIH07XG4gIH07XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUluTWVtb3J5TWFuYWdlcjxcbiAgICBSIGV4dGVuZHMgUm93LFxuICAgIEMgZXh0ZW5kcyBDb2x1bW4sXG4gICAgRiBleHRlbmRzIEZpbHRlcnMsXG4gID4oXG4gICAgZmV0Y2hEYXRhc2V0OiAoKSA9PiBQcm9taXNlPFJbXT4gfCBSW10sXG4gICAgY29sdW1uczogTWFwPEMsIEluTWVtb3J5Q29sdW1uTWV0YWRhdGE8Uj4+LFxuICAgIHBsdXJhbEVudGl0eU5hbWU6IHN0cmluZyxcbiAgICBvcHRpb25zPzogSW5NZW1vcnlNYW5hZ2VyT3B0aW9uczxSLCBDLCBGPixcbiAgKTogTWFuYWdlcjxSLCBDLCBGPiB7XG4gICAgbGV0IGRhdGE6IFJbXTtcbiAgICBsZXQgZnVzZTogRnVzZTxSPjtcblxuICAgIGNvbnN0IHNvdXJjZTogU291cmNlPFIsIEMsIEY+ID0gYXN5bmMgKHF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKSA9PiB7XG4gICAgICAvL0ZvciBpbk1lbW9yeU1hbmFnZXJzIHRoYXQgZG8gbm90IHV0aWxpemUgc2VhcmNoQ29sdW1ucyxcbiAgICAgIC8vd2UgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIHRoZWlyIGZ1c2VPcHRpb25zXG4gICAgICBpZiAobW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnbG9hZCcpIHtcbiAgICAgICAgLy9QcmV2ZW50IHNlYXJjaGluZyBvbiBjb2x1bW5zIHRoYXQgYXJlIGluIGZ1c2Ugb3B0aW9ucyBidXQgbm90IHN1cHBvcnRlZCBieSBzZWFyY2guXG4gICAgICAgIGNvbnN0IG5vblNlYXJjaGFibGVDb2x1bW5zS2V5cyA9IG9wdGlvbnM/LmZ1c2VPcHRpb25zPy5rZXlzXG4gICAgICAgICAgPyBBcnJheS5mcm9tKGNvbHVtbnMuZW50cmllcygpKVxuICAgICAgICAgICAgICAuZmlsdGVyKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5zZWFyY2hhYmxlID09IGZhbHNlO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAubWFwKChba2V5LCBjb2x1bW5dKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbHVtbi5vcmRlcktleT8udG9TdHJpbmcoKSB8fCBrZXkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZnVzZU9wdGlvbnMgPVxuICAgICAgICAgIG9wdGlvbnM/LmZ1c2VPcHRpb25zICYmIG5vblNlYXJjaGFibGVDb2x1bW5zS2V5c1xuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAga2V5czogb3B0aW9ucz8uZnVzZU9wdGlvbnM/LmtleXM/LmZpbHRlcihcbiAgICAgICAgICAgICAgICAgIGsgPT4gIW5vblNlYXJjaGFibGVDb2x1bW5zS2V5cy5pbmNsdWRlcyhrLnRvU3RyaW5nKCkpLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogb3B0aW9ucz8uZnVzZU9wdGlvbnM7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBmZXRjaERhdGFzZXQoKTtcbiAgICAgICAgZnVzZSA9IG5ldyBGdXNlKGRhdGEsIGZ1c2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAnc2VhcmNoQ29sdW1uc0NoYW5nZScgfHxcbiAgICAgICAgbW9zdFJlY2VudEFjdGlvbi50eXBlID09PSAndG9nZ2xlQWxsU2VhcmNoQ29sdW1ucydcbiAgICAgICkge1xuICAgICAgICBkYXRhID0gYXdhaXQgZmV0Y2hEYXRhc2V0KCk7XG4gICAgICAgIGZ1c2UgPSBuZXcgRnVzZShkYXRhLCB7XG4gICAgICAgICAgLi4ub3B0aW9ucz8uZnVzZU9wdGlvbnMsXG4gICAgICAgICAga2V5czogQXJyYXkuZnJvbShxdWVyeS5zZWFyY2hDb2x1bW5zLmVudHJpZXMoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKFtfLCB2YWx1ZV0pID0+ICEhdmFsdWUpXG4gICAgICAgICAgICAubWFwKChba2V5LCBfXSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2x1bW5LZXkgPSBjb2x1bW5zLmdldChrZXkpO1xuICAgICAgICAgICAgICByZXR1cm4gKGNvbHVtbktleT8ub3JkZXJLZXkgYXMgQykgfHwga2V5O1xuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3JkZXJDb2x1bW46IGtleW9mIFIgfCB1bmRlZmluZWQgPSBxdWVyeS5vcmRlclxuICAgICAgICA/IGNvbHVtbnMuZ2V0KHF1ZXJ5Lm9yZGVyLmNvbHVtbik/Lm9yZGVyS2V5XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgaGFzRXhwbGljaXRTb3J0ID0gcXVlcnkub3JkZXIgIT0gbnVsbCAmJiBvcmRlckNvbHVtbiAhPT0gdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZGVmYXVsdFNvcnRTcGVjID0gKCgpID0+IHtcbiAgICAgICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0KSB7XG4gICAgICAgICAgY29uc3Qga2V5ID0gY29sdW1ucy5nZXQob3B0aW9ucy5kZWZhdWx0U29ydC5jb2x1bW4pPy5vcmRlcktleTtcbiAgICAgICAgICBpZiAoa2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGtleSwgZGlyZWN0aW9uOiBvcHRpb25zLmRlZmF1bHRTb3J0LmRpcmVjdGlvbiB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaXJzdE9yZGVyYWJsZSA9IFsuLi5jb2x1bW5zLmVudHJpZXMoKV0uZmluZChcbiAgICAgICAgICAoWywgbWV0YV0pID0+IG1ldGEub3JkZXJLZXkgIT0gbnVsbCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZmlyc3RPcmRlcmFibGU/LlsxXS5vcmRlcktleTtcbiAgICAgICAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8geyBrZXksIGRpcmVjdGlvbjogJ2FzYycgYXMgY29uc3QgfSA6IG51bGw7XG4gICAgICB9KSgpO1xuXG4gICAgICBsZXQgb3JkZXJlZDogUltdO1xuICAgICAgaWYgKHF1ZXJ5LnNlYXJjaCkge1xuICAgICAgICBjb25zdCBtYXRjaGVzID0gZnVzZS5zZWFyY2gocXVlcnkuc2VhcmNoKS5tYXAocmVzdWx0ID0+IHJlc3VsdC5pdGVtKTtcbiAgICAgICAgb3JkZXJlZCA9XG4gICAgICAgICAgaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyXG4gICAgICAgICAgICA/IG9yZGVyQnkobWF0Y2hlcywgb3JkZXJDb2x1bW4sIHF1ZXJ5Lm9yZGVyLmRpcmVjdGlvbilcbiAgICAgICAgICAgIDogbWF0Y2hlcztcbiAgICAgIH0gZWxzZSBpZiAoaGFzRXhwbGljaXRTb3J0ICYmIHF1ZXJ5Lm9yZGVyKSB7XG4gICAgICAgIG9yZGVyZWQgPSBvcmRlckJ5KGRhdGEsIG9yZGVyQ29sdW1uLCBxdWVyeS5vcmRlci5kaXJlY3Rpb24pO1xuICAgICAgfSBlbHNlIGlmIChxdWVyeS5vcmRlciA9PSBudWxsICYmIGRlZmF1bHRTb3J0U3BlYykge1xuICAgICAgICBvcmRlcmVkID0gb3JkZXJCeShkYXRhLCBkZWZhdWx0U29ydFNwZWMua2V5LCBkZWZhdWx0U29ydFNwZWMuZGlyZWN0aW9uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9yZGVyZWQgPSBkYXRhO1xuICAgICAgfVxuICAgICAgY29uc3QgZmlsdGVyID0gb3B0aW9ucz8uZmlsdGVyO1xuICAgICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJcbiAgICAgICAgPyBvcmRlcmVkLmZpbHRlcihyb3cgPT4gZmlsdGVyKHF1ZXJ5LmZpbHRlcnMsIHJvdykpXG4gICAgICAgIDogb3JkZXJlZDtcbiAgICAgIGNvbnN0IHN0YXJ0SWR4ID0gcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSAqIHF1ZXJ5LnBhZ2luYXRpb24ucGFnZTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IHN0YXJ0SWR4ICsgcXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICAgIGNvbnN0IHBhZ2luYXRlZCA9IGZpbHRlcmVkLnNsaWNlKHN0YXJ0SWR4LCBlbmRJZHgpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudFBhZ2VEYXRhOiBwYWdpbmF0ZWQsXG4gICAgICAgIHRvdGFsTWF0Y2hpbmdSb3dDb3VudDogZmlsdGVyZWQubGVuZ3RoLFxuICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IGNvbHVtbk1ldGFkYXRhOiBNYXA8QywgQ29sdW1uTWV0YWRhdGE+ID0gbmV3IE1hcChcbiAgICAgIFsuLi5jb2x1bW5zLmVudHJpZXMoKV0ubWFwKChbbmFtZSwgbWV0YWRhdGFdKSA9PiBbXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBvcmRlcmFibGU6ICEhbWV0YWRhdGEub3JkZXJLZXksXG4gICAgICAgICAgZmlsdGVyYWJsZTogbWV0YWRhdGEuZmlsdGVyYWJsZSxcbiAgICAgICAgICBzZWFyY2hhYmxlOiBtZXRhZGF0YS5zZWFyY2hhYmxlLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBtZXRhZGF0YS5kZXNjcmlwdGlvbixcbiAgICAgICAgICBtaW5XaWR0aDogbWV0YWRhdGEubWluV2lkdGgsXG4gICAgICAgICAgZGF0YVR5cGU6IG1ldGFkYXRhLmRhdGFUeXBlLFxuICAgICAgICAgIGRlZmF1bHRQaW5uZWQ6IG1ldGFkYXRhLmRlZmF1bHRQaW5uZWQsXG4gICAgICAgICAgY2xpY2tQcmV2ZW50RGVmYXVsdDogbWV0YWRhdGEuY2xpY2tQcmV2ZW50RGVmYXVsdCxcbiAgICAgICAgICBjbGlja1N0b3BQcm9wYWdhdGlvbjogbWV0YWRhdGEuY2xpY2tTdG9wUHJvcGFnYXRpb24sXG4gICAgICAgICAgZGlzcGxheU5hbWU6IG1ldGFkYXRhLmRpc3BsYXlOYW1lLFxuICAgICAgICB9LFxuICAgICAgXSksXG4gICAgKTtcbiAgICAvLyBXaGVuIGEgZGVmYXVsdFNvcnQgaXMgc3BlY2lmaWVkLCBzZWVkIHRoZSBpbml0aWFsIHF1ZXJ5Lm9yZGVyIHNvIHRoZVxuICAgIC8vIHRhYmxlIGhlYWRlciBzaG93cyB0aGUgc29ydCBpbmRpY2F0b3IgZnJvbSB0aGUgc3RhcnQuXG4gICAgaWYgKG9wdGlvbnM/LmRlZmF1bHRTb3J0ICYmICFvcHRpb25zPy5pbml0aWFsU3RhdGU/LnF1ZXJ5Py5vcmRlcikge1xuICAgICAgY29uc3Qgb3JkZXI6IFF1ZXJ5PEMsIEY+WydvcmRlciddID0gb3B0aW9ucy5kZWZhdWx0U29ydDtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGluaXRpYWxTdGF0ZToge1xuICAgICAgICAgIC4uLm9wdGlvbnMuaW5pdGlhbFN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5vcHRpb25zLmluaXRpYWxTdGF0ZT8ucXVlcnksXG4gICAgICAgICAgICBvcmRlcixcbiAgICAgICAgICB9IGFzIERlZXBQYXJ0aWFsPFF1ZXJ5PEMsIEY+PixcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVNYW5hZ2VyKHNvdXJjZSwgY29sdW1uTWV0YWRhdGEsIHBsdXJhbEVudGl0eU5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8vLy8vLy8vLy8vLy8vXG4gIC8vIFV0aWxpdGllcyAvL1xuICAvLy8vLy8vLy8vLy8vLy9cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0Q29sdW1uQWxpZ25tZW50KFxuICAgIGRhdGFUeXBlOiBDb2x1bW5EYXRhVHlwZSxcbiAgICBpc0ZpcnN0OiBib29sZWFuLFxuICApOiBDb2x1bW5BbGlnbm1lbnQge1xuICAgIGlmIChpc0ZpcnN0KSByZXR1cm4gJ2xlZnQnO1xuICAgIHN3aXRjaCAoZGF0YVR5cGUpIHtcbiAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgY2FzZSAnbG9uZ1RleHQnOlxuICAgICAgICByZXR1cm4gJ2xlZnQnO1xuICAgICAgY2FzZSAnYWR2YW5jZWQnOlxuICAgICAgY2FzZSAnaWNvbic6XG4gICAgICBjYXNlICdzaG9ydFRleHQnOlxuICAgICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGtlZXBzIHRoZSBzdGF0ZSBvYmplY3QgcmVmZXJlbmNlcyBhcyBzdGFibGUgYXMgcG9zc2libGUsIHdoaWNoXG4gKiBoZWxwcyBBbmd1bGFyIHJlZHVjZSB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLiBGb3Igbm93LCBzaW1wbGUgaXNFcXVhbCgpXG4gKiBjaGVja3MgYXQgdGhlIHN0YXRlJ3MgdG9wLWxldmVsIGtleXMgYXJlIHN1ZmZpY2llbnQgdG8gZHJhbWF0aWNhbGx5IHNwZWVkIHVwXG4gKiByZW5kZXJpbmcsIGJ1dCBpZiBvdGhlciBwZXJmb3JtYW5jZSBpc3N1ZXMgYXJpc2UsIHdlIGNvdWxkIGltcGxlbWVudCBtb3JlXG4gKiBncmFudWxhciBjaGVja3Mvc3VyZ2ljYWwgdXBkYXRlcyBhcyBuZWVkZWQgKHRoZSBzdGF0ZS5yZXN1bHQgYmVpbmcgdGhlIG1vc3RcbiAqIGxpa2VseSBjYW5kaWRhdGUsIHNpbmNlIG1hbnkgdHlwZXMgb2Ygc3RhdGUgdXBkYXRlcyBhZmZlY3QgcGFydHMgb2YgdGhlXG4gKiByZXN1bHQgcm93cykuXG4gKi9cbmZ1bmN0aW9uIHN0YWJsZVN0YXRlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgdGFyZ2V0OiBSaXZUYWJsZS5GdWxsU3RhdGU8UiwgQywgRiwgRz4sXG4gIHNvdXJjZTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+LFxuKTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKCFpc0VxdWFsKHRhcmdldC5xdWVyeSwgc291cmNlLnF1ZXJ5KSkge1xuICAgIHRhcmdldC5xdWVyeSA9IHNvdXJjZS5xdWVyeTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LmxvYWQsIHNvdXJjZS5sb2FkKSkge1xuICAgIHRhcmdldC5sb2FkID0gc291cmNlLmxvYWQ7XG4gIH1cblxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnJlc3VsdC5jc3ZEYXRhLCBzb3VyY2UucmVzdWx0LmNzdkRhdGEpKSB7XG4gICAgdGFyZ2V0LnJlc3VsdC5jc3ZEYXRhID0gc291cmNlLnJlc3VsdC5jc3ZEYXRhO1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LmNzdkZpbGVuYW1lLCBzb3VyY2UucmVzdWx0LmNzdkZpbGVuYW1lKSkge1xuICAgIHRhcmdldC5yZXN1bHQuY3N2RmlsZW5hbWUgPSBzb3VyY2UucmVzdWx0LmNzdkZpbGVuYW1lO1xuICB9XG4gIGlmIChcbiAgICAhaXNFcXVhbChcbiAgICAgIHRhcmdldC5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50LFxuICAgICAgc291cmNlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQsXG4gICAgKVxuICApIHtcbiAgICB0YXJnZXQucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA9IHNvdXJjZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQucmVzdWx0LCBzb3VyY2UucmVzdWx0KSkge1xuICAgIHRhcmdldC5yZXN1bHQgPSBzb3VyY2UucmVzdWx0O1xuICB9XG4gIGlmICghaXNFcXVhbCh0YXJnZXQuZGlzcGxheSwgc291cmNlLmRpc3BsYXkpKSB7XG4gICAgdGFyZ2V0LmRpc3BsYXkgPSBzb3VyY2UuZGlzcGxheTtcbiAgfVxuICBpZiAoIWlzRXF1YWwodGFyZ2V0LnNlbGVjdGlvbiwgc291cmNlLnNlbGVjdGlvbikpIHtcbiAgICB0YXJnZXQuc2VsZWN0aW9uID0gc291cmNlLnNlbGVjdGlvbjtcbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5mdW5jdGlvbiBnZXRQYWdlQ291bnQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIge1xuICBpZiAoaXNHcm91cFJlc3VsdChzdGF0ZS5yZXN1bHQpKSB7XG4gICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgTWF0aC5jZWlsKFxuICAgICAgICBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50IC8gc3RhdGUucXVlcnkuZ3JvdXBpbmcuZ3JvdXBzUGVyUGFnZSxcbiAgICAgICksXG4gICAgICAxLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIE1hdGgubWF4KFxuICAgIE1hdGguY2VpbChcbiAgICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgLyBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplLFxuICAgICksXG4gICAgMSxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJldmlvdXNQYWdlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHwgbnVsbCB7XG4gIHJldHVybiBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPT09IDBcbiAgICA/IG51bGxcbiAgICA6IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAtIDE7XG59XG5cbmZ1bmN0aW9uIGdldFBhZ2VzPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyW10ge1xuICBjb25zdCBwYWRkaW5nID0gNDtcbiAgY29uc3QgbWluID0gMDtcbiAgY29uc3QgbWF4ID0gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDE7XG4gIGNvbnN0IGRlc2lyZWRTdGFydCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAtIHBhZGRpbmc7XG4gIGNvbnN0IGNsYW1wZWRTdGFydCA9IE1hdGgubWF4KG1pbiwgZGVzaXJlZFN0YXJ0KTtcbiAgY29uc3QgZGVzaXJlZEVuZCA9IHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSArIHBhZGRpbmc7XG4gIGNvbnN0IGNsYW1wZWRFbmQgPSBNYXRoLm1pbihtYXgsIGRlc2lyZWRFbmQpO1xuICBjb25zdCBzdGFydCA9IE1hdGgubWF4KG1pbiwgY2xhbXBlZFN0YXJ0IC0gKGRlc2lyZWRFbmQgLSBjbGFtcGVkRW5kKSk7XG4gIGNvbnN0IGVuZCA9IE1hdGgubWluKG1heCwgY2xhbXBlZEVuZCArIChjbGFtcGVkU3RhcnQgLSBkZXNpcmVkU3RhcnQpKTtcbiAgcmV0dXJuIHJhbmdlKHN0YXJ0LCBlbmQgKyAxKTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dFBhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgbWF4ID0gZ2V0UGFnZUNvdW50KHN0YXRlKSAtIDE7XG4gIGNvbnN0IG5leHQgPSBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKyAxO1xuICByZXR1cm4gbmV4dCA8PSBtYXggPyBuZXh0IDogbnVsbDtcbn1cblxuLy8gV2UgZG9uJ3Qgd2FudCB0byBzaG93IHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzIHdoZW4gdGhleSBhcmUgdW5uZWNlc3NhcnkuXG5mdW5jdGlvbiBnZXRTaG93UGFnaW5hdGlvbkNvbnRyb2xzPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogYm9vbGVhbiB7XG4gIGlmIChzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgPiAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzR3JvdXBSZXN1bHQoc3RhdGUucmVzdWx0KSkge1xuICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxHcm91cENvdW50ID4gc3RhdGUucXVlcnkuZ3JvdXBpbmcuZ3JvdXBzUGVyUGFnZTtcbiAgfVxuICByZXR1cm4gKFxuICAgIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiBNYXRoLm1pbiguLi5bLi4uUml2VGFibGUucGFnZVNpemVzXSlcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFnZVJvd1N0YXJ0PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHtcbiAgcmV0dXJuIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSAqIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUgKyAxO1xufVxuXG5mdW5jdGlvbiBnZXRQYWdlUm93RW5kPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogbnVtYmVyIHtcbiAgcmV0dXJuIE1hdGgubWluKFxuICAgIChzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKyAxKSAqIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZVNpemUsXG4gICAgc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q3N2RmlsZW5hbWU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBwbHVyYWxFbnRpdHlOYW1lOiBzdHJpbmcsXG4gIG9wdGlvbnM/OiBSaXZUYWJsZS5NYW5hZ2VyT3B0aW9uczxSLCBDLCBGLCBHPixcbik6IHN0cmluZyB7XG4gIHJldHVybiAob3B0aW9ucz8uY3N2RmlsZUJhc2VuYW1lPy5zbGljZSgwLCAyMDApID8/IHBsdXJhbEVudGl0eU5hbWUpICsgJy5jc3YnO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplZENlbGxSb3dTcGFuPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgczogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBmdWxsQ29sdW1uczogUml2VGFibGUuRnVsbENvbHVtbjxDPltdLFxuICBvcHRpb25zPzogUml2VGFibGUuTWFuYWdlck9wdGlvbnM8UiwgQywgRiwgRz4sXG4pOiBNYXA8QywgbnVtYmVyW10+IHwgbnVsbCB7XG4gIGNvbnN0IGdldFJvd1NwYW5Gb3JDZWxsID0gb3B0aW9ucz8uZ2V0Um93U3BhbkZvckNlbGw7XG4gIGNvbnN0IHJlc3VsdCA9IHMucmVzdWx0O1xuXG4gIC8vIElmIHRoZSBkYXRhc2V0IGV4Y2VlZHMgdGhlIGN1cnJlbnQgcGFnZSBzaXplLCBza2lwIHNwYW4gY2FsY3VsYXRpb25zLlxuICBpZiAocy5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50ID4gcy5xdWVyeS5wYWdpbmF0aW9uLnBhZ2VTaXplKSByZXR1cm4gbnVsbDtcblxuICAvLyBJZiB0aGUgdXNlciBoYXNuJ3QgcHJvdmlkZWQgdGhlIHJvdyBzcGFuIGNvbmZpZ3VyYXRpb24sIGRlZmF1bHQgdG8gbm8gc3Bhbm5pbmdcbiAgaWYgKCFnZXRSb3dTcGFuRm9yQ2VsbCkgcmV0dXJuIG51bGw7XG5cbiAgLy8gUm93IHNwYW5uaW5nIGlzIG5vdCBzdXBwb3J0ZWQgb24gZ3JvdXBlZCB0YWJsZXMuXG4gIGlmIChpc0dyb3VwUmVzdWx0KHJlc3VsdCkpIHJldHVybiBudWxsO1xuXG4gIC8vIE1lbW9pemUgdGhlIHVzZXIncyBjb25maWd1cmF0aW9uIGZvciB0aGUgY3VycmVudCBwYWdlLlxuICByZXR1cm4gbmV3IE1hcChcbiAgICBmdWxsQ29sdW1ucy5tYXAoY29sdW1uID0+IFtcbiAgICAgIGNvbHVtbi5rZXksXG4gICAgICByZXN1bHQuY3VycmVudFBhZ2VEYXRhLm1hcCgoXywgaSkgPT4ge1xuICAgICAgICBjb25zdCByYXcgPSBnZXRSb3dTcGFuRm9yQ2VsbChpLCBjb2x1bW4ua2V5KTtcbiAgICAgICAgaWYgKHJhdyA9PT0gMCkgcmV0dXJuIDA7XG4gICAgICAgIGVsc2UgcmV0dXJuIE1hdGgubWF4KDEsIHRvSW50ZWdlcihyYXcpKTtcbiAgICAgIH0pLFxuICAgIF0pLFxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRBbGxDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc3VwcG9ydGVkQ29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbik6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10ge1xuICAvLyBJZiB0aGUgdGFibGUgb2ZmZXJzIG1vcmUgY29sdW1ucyB0aGFuIHRoZSB1c2VyIGhhcyBjb25maWd1cmF0aW9uIHNldHRpbmdzXG4gIC8vIGZvciAob3IgaWYgdGhlIHVzZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgeWV0KSwgd2UnbGwgYXBwZW5kIHRoZW1cbiAgLy8gdG8gdGhlIGVuZCAodW5sZXNzIHRoZXkgc2hvdWxkIGJlIHBpbm5lZCBieSBkZWZhdWx0LCBpbiB3aGljaCBjYXNlIHdlJ2xsXG4gIC8vIGFwcGVuZCB0aGVtIGFmdGVyIHRoZSBvdGhlciBwaW5uZWQgY29sdW1ucykuIFRoaXMgZW5zdXJlcyB0aGF0IG5ldyBjb2x1bW5zXG4gIC8vIHdlIGFkZCB0byBleGlzdGluZyB0YWJsZXMgb3ZlciB0aW1lICgxKSBnZXQgZGlzcGxheWVkIGV2ZW4gdGhvdWdoIHRoZXlcbiAgLy8gZG9uJ3QgYXBwZWFyIGluIHRoZSB1c2VyJ3MgY29uZmlndXJhdGlvbiBzZXR0aW5ncyB5ZXQsIGFuZCAoMikgZG9uJ3RcbiAgLy8gaW50ZXJydXB0IHRoZWlyIGV4aXN0aW5nIHNldHVwLlxuICBjb25zdCBjb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MgPSBkaWZmZXJlbmNlKFxuICAgIFsuLi5zdXBwb3J0ZWRDb2x1bW5zLmtleXMoKV0sXG4gICAgc3RhdGUuZGlzcGxheS5jb2x1bW5TZXR0aW5ncy5tYXAoKHsga2V5IH0pID0+IGtleSksXG4gICk7XG5cbiAgLy8gVGhyb3cgb3V0IHNldHRpbmdzIGZvciBjb2x1bW5zIG5vIGxvbmdlciBvZmZlcmVkIGJ5IHRoZSB0YWJsZS5cbiAgY29uc3QgY29sdW1uc1dpdGhVc2VyU2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+W10gPVxuICAgIHN0YXRlLmRpc3BsYXkuY29sdW1uU2V0dGluZ3MuZmlsdGVyKCh7IGtleSB9KSA9PiBzdXBwb3J0ZWRDb2x1bW5zLmhhcyhrZXkpKTtcblxuICBjb25zdCBjb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nczogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSA9IFtcbiAgICAuLi5jb2x1bW5OYW1lc1dpdGhvdXRVc2VyU2V0dGluZ3MsXG4gIF0ubWFwKChrZXk6IEMpID0+ICh7XG4gICAga2V5LFxuICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgcHJlZmVycmVkV2lkdGg6ICdhdXRvJyxcbiAgICBwaW5uZWQ6ICEhc3VwcG9ydGVkQ29sdW1ucy5nZXQoa2V5KT8uZGVmYXVsdFBpbm5lZCxcbiAgfSkpO1xuXG4gIHJldHVybiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgWy4uLmNvbHVtbnNXaXRoVXNlclNldHRpbmdzLCAuLi5jb2x1bW5zV2l0aG91dFVzZXJTZXR0aW5nc10sXG4gICAgY29sdW1uTmFtZU1hcCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gb3JkZXJJbnRlbnRpb25hbGx5PEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4+KFxuICBjb2x1bW5zOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPltdLFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuKTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSB7XG4gIHJldHVybiBbXG4gICAgLi4uY29sdW1ucy5maWx0ZXIodiA9PiB2LnBpbm5lZCksXG4gICAgLi4uY29sdW1ucy5maWx0ZXIodiA9PiB2LmVuYWJsZWQgJiYgIXYucGlubmVkKSxcbiAgICAuLi5jb2x1bW5zXG4gICAgICAuZmlsdGVyKHYgPT4gIXYuZW5hYmxlZCAmJiAhdi5waW5uZWQpXG4gICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICBjb25zdCBhTmFtZSA9IGNvbHVtbk5hbWVNYXAuZ2V0KGEua2V5KSA/PyBhLmtleTtcbiAgICAgICAgY29uc3QgYk5hbWUgPSBjb2x1bW5OYW1lTWFwLmdldChiLmtleSkgPz8gYi5rZXk7XG4gICAgICAgIHJldHVybiBhTmFtZS5sb2NhbGVDb21wYXJlKGJOYW1lKTtcbiAgICAgIH0pLFxuICBdO1xufVxuXG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQoXG4gIG1ldGFkYXRhOiBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YSxcbiAgaW5kZXg6IG51bWJlcixcbiAgYWxsb3dTZWxlY3Rpb24/OiBib29sZWFuLFxuKTogUml2VGFibGUuQ29sdW1uQWxpZ25tZW50IHtcbiAgcmV0dXJuIFJpdlRhYmxlLmdldENvbHVtbkFsaWdubWVudChcbiAgICBtZXRhZGF0YS5kYXRhVHlwZSxcbiAgICBpbmRleCA9PT0gMCAmJiAhYWxsb3dTZWxlY3Rpb24sXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVDb2x1bW5zPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc3VwcG9ydGVkQ29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgYWxsb3dTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4pOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgc3VwcG9ydGVkQ29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIHJldHVybiBhbGxDb2x1bW5zXG4gICAgLmZpbHRlcigoeyBlbmFibGVkIH0pID0+IGVuYWJsZWQpXG4gICAgLnJlZHVjZShcbiAgICAgIChcbiAgICAgICAgZnVsbENvbHVtbnM6IFJpdlRhYmxlLkZ1bGxDb2x1bW48Qz5bXSxcbiAgICAgICAgc2V0dGluZ3M6IFJpdlRhYmxlLkNvbHVtblNldHRpbmdzPEM+LFxuICAgICAgICBpOiBudW1iZXIsXG4gICAgICApOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+W10gPT4ge1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IHN1cHBvcnRlZENvbHVtbnMuZ2V0KHNldHRpbmdzLmtleSkhO1xuICAgICAgICBjb25zdCByZXNvbHZlZFdpZHRoID1cbiAgICAgICAgICBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCA9PT0gJ2F1dG8nXG4gICAgICAgICAgICA/IG1ldGFkYXRhLm1pbldpZHRoXG4gICAgICAgICAgICA6IE1hdGgubWF4KG1ldGFkYXRhLm1pbldpZHRoLCBzZXR0aW5ncy5wcmVmZXJyZWRXaWR0aCk7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzQ29sdW1uOiBSaXZUYWJsZS5GdWxsQ29sdW1uPEM+IHwgdW5kZWZpbmVkID1cbiAgICAgICAgICBmdWxsQ29sdW1uc1tpIC0gMV07XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgLi4uZnVsbENvbHVtbnMsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uc2V0dGluZ3MsXG4gICAgICAgICAgICAuLi5tZXRhZGF0YSxcbiAgICAgICAgICAgIHdpZHRoOiByZXNvbHZlZFdpZHRoLFxuICAgICAgICAgICAgbGVmdDogc2V0dGluZ3MucGlubmVkXG4gICAgICAgICAgICAgID8gcHJldmlvdXNDb2x1bW5cbiAgICAgICAgICAgICAgICA/IChwcmV2aW91c0NvbHVtbi5sZWZ0IHx8IDApICsgcHJldmlvdXNDb2x1bW4ud2lkdGhcbiAgICAgICAgICAgICAgICA6ICEhYWxsb3dTZWxlY3Rpb25cbiAgICAgICAgICAgICAgICA/IDQwXG4gICAgICAgICAgICAgICAgOiAwXG4gICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIGFsaWdubWVudDogZ2V0QWxpZ25tZW50KG1ldGFkYXRhLCBpLCAhIWFsbG93U2VsZWN0aW9uKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICAgIFtdLFxuICAgICk7XG59XG5cbmZ1bmN0aW9uIGdldFplcm9TdGF0ZU1lc3NhZ2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sIGVudGl0eTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGlmIChcbiAgICAoaXNHcm91cFJlc3VsdChzdGF0ZS5yZXN1bHQpICYmIHN0YXRlLnJlc3VsdC50b3RhbEdyb3VwQ291bnQgPiAwKSB8fFxuICAgICghaXNHcm91cFJlc3VsdChzdGF0ZS5yZXN1bHQpICYmIHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPiAwKVxuICApXG4gICAgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFsbFNlYXJjaENvbHVtbnNTZWxlY3RlZCA9IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHN0YXRlLCAnYWxsJyk7XG4gIGlmIChzdGF0ZS5xdWVyeS5zZWFyY2ggJiYgYWxsU2VhcmNoQ29sdW1uc1NlbGVjdGVkKVxuICAgIHJldHVybiBgTm8gJHtlbnRpdHl9IG1hdGNoIHlvdXIgY3VycmVudCBzZWFyY2gga2V5d29yZC5gO1xuICBpZiAoc3RhdGUucXVlcnkuc2VhcmNoICYmICFhbGxTZWFyY2hDb2x1bW5zU2VsZWN0ZWQpXG4gICAgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IHNlYXJjaCBrZXl3b3JkIGluIHRoZSBzZWxlY3RlZCBzZWFyY2ggY29sdW1ucy5gO1xuICBpZiAoc3RhdGUucXVlcnkuZmlsdGVycykgcmV0dXJuIGBObyAke2VudGl0eX0gbWF0Y2ggeW91ciBjdXJyZW50IGZpbHRlcnMuYDtcbiAgcmV0dXJuIGBObyAke2VudGl0eX0uYDtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uUGluPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgY29sdW1uOiBDLFxuICBwaW5uZWQ6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG5cbiAgaWYgKHBpbm5lZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGFsbENvbHVtbnMuZmluZChjID0+IGMua2V5ID09PSBjb2x1bW4pO1xuICAgIGNvbnN0IHdhc0VuYWJsZWQgPSAhIXRhcmdldD8uZW5hYmxlZDtcbiAgICBpZiAoIXdhc0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGVuYWJsZWRDb3VudCA9IGFsbENvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuZW5hYmxlZCkubGVuZ3RoO1xuICAgICAgaWYgKGVuYWJsZWRDb3VudCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd24pIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlOyAvLyByZWZ1c2UgdGhlIHBpbiBzaW5jZSBpdCB3b3VsZCBleGNlZWQgdGhlIG1heFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIHBpbm5lZDogYy5rZXkgPT09IGNvbHVtbiA/IHBpbm5lZCA6IGMucGlubmVkLFxuICAgICAgICAgIC8vIENoZWNrL2VuYWJsZSBpZiBiZWluZyBwaW5uZWRcbiAgICAgICAgICBlbmFibGVkOiBjLmtleSA9PT0gY29sdW1uICYmIHBpbm5lZCA/IHRydWUgOiBjLmVuYWJsZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uc0ZyZWV6ZVN0YXRlPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgY29sdW1uTmFtZU1hcDogUml2VGFibGUuQ29sdW1uTmFtZU1hcDxDPixcbiAgaW5kZXg6IG51bWJlcixcbiAgZnJlZXplOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBhbGxDb2x1bW5zLm1hcCgoYywgaSkgPT4ge1xuICAgICAgICByZXR1cm4geyAuLi5jLCBwaW5uZWQ6IGZyZWV6ZSAmJiBpIDw9IGluZGV4IH07XG4gICAgICB9KSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBtb3ZlQ29sdW1uVG88XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIHBvc2l0aW9uOiAnc3RhcnQnIHwgJ2VuZCcsXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIGNvbnN0IHByZXZpb3VzSW5kZXggPSBhbGxDb2x1bW5zLmZpbmRJbmRleChjID0+IGMua2V5ID09PSBjb2x1bW4pO1xuICBjb25zdCBsYXN0SW5kZXggPVxuICAgIHBvc2l0aW9uID09ICdlbmQnID8gYWxsQ29sdW1ucy5maW5kSW5kZXgoYyA9PiAhYy5lbmFibGVkKSA6IDA7XG4gIGNvbnN0IG5ld0luZGV4ID1cbiAgICBwb3NpdGlvbiA9PSAnc3RhcnQnXG4gICAgICA/IDBcbiAgICAgIDogbGFzdEluZGV4ID09IC0xXG4gICAgICA/IGFsbENvbHVtbnMubGVuZ3RoIC0gMVxuICAgICAgOiBsYXN0SW5kZXg7XG5cbiAgaWYgKFxuICAgICFhbGxDb2x1bW5zW3ByZXZpb3VzSW5kZXhdLmVuYWJsZWQgJiZcbiAgICBhbGxDb2x1bW5zLmZpbHRlcihjb2wgPT4gY29sLmVuYWJsZWQpLmxlbmd0aCA+PSBSaXZUYWJsZS5Db2x1bW5zTWF4U2hvd25cbiAgKVxuICAgIHJldHVybiBzdGF0ZTtcblxuICBjb25zdCBtb3ZlZFN0YXRlID0gY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgc3RhdGUsXG4gICAgY29sdW1ucyxcbiAgICBjb2x1bW5OYW1lTWFwLFxuICAgIHByZXZpb3VzSW5kZXgsXG4gICAgbmV3SW5kZXgsXG4gICk7XG4gIC8vTWFrZSBzdXJlIHRoZSBjb2x1bW4gaXMgZW5hYmxlZFxuICByZXR1cm4gY2hhbmdlQ29sdW1uRW5hYmxlZChtb3ZlZFN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwLCBjb2x1bW4sIHRydWUpO1xufVxuXG5mdW5jdGlvbiBjaGFuZ2VDb2x1bW5PcmRlcjxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIHByZXZpb3VzSW5kZXg6IG51bWJlcixcbiAgbmV3SW5kZXg6IG51bWJlcixcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcblxuICAvLyBGaXJzdCwgcHV0IHRoZSBjb2x1bW5zIGluIHRoZSBkZXNpcmVkIG9yZGVyLlxuICBjb25zdCBpdGVtID0gYWxsQ29sdW1uc1twcmV2aW91c0luZGV4XTtcbiAgY29uc3Qgd2l0aG91dEl0ZW0gPSBhbGxDb2x1bW5zLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gcHJldmlvdXNJbmRleCk7XG4gIGNvbnN0IHJlb3JkZXJlZCA9IFtcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZSgwLCBuZXdJbmRleCksXG4gICAgaXRlbSxcbiAgICAuLi53aXRob3V0SXRlbS5zbGljZShuZXdJbmRleCksXG4gIF07XG5cbiAgLy8gVGhlbiwgd2UgbWF5IG5lZWQgdG8gZml4IHRoZSBwaW5zIChhbGwgcGlubmVkIGNvbHVtbnMgYXBwZWFyIGF0IHRoZVxuICAvLyBiZWdpbm5pbmcgb2YgdGhlIGNvbHVtbnMgYXJyYXkpIHNpbmNlIHRoZSB1c2VyIGlzIGFsbG93ZWQgdG8gZHJhZ1xuICAvLyBhbmQgZHJvcCBjb2x1bW5zIHRvIGFuZCBmcm9tIHRoZSBwaW5uZWQgYXJlYS4gSWYgdGhlIHVzZXIgZHJhZ3MgYVxuICAvLyBjb2x1bW4gYWNyb3NzIHRoYXQgdGhyZXNob2xkLCB1cGRhdGUgaXRzIHBpbm5lZCBzdGF0dXMuXG4gIGNvbnN0IHVwZGF0ZWQgPSByZW9yZGVyZWQubWFwKChzZXR0aW5ncywgaSwgYXJyKSA9PiB7XG4gICAgaWYgKG5ld0luZGV4ID09PSBpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zZXR0aW5ncyxcbiAgICAgICAgcGlubmVkOiBzZXR0aW5ncy5waW5uZWRcbiAgICAgICAgICA/IGFycltpIC0gMV0/LnBpbm5lZCA/PyB0cnVlXG4gICAgICAgICAgOiBhcnJbaSArIDFdPy5waW5uZWQgPz8gZmFsc2UsXG4gICAgICAgIGVuYWJsZWQ6IHNldHRpbmdzLmVuYWJsZWRcbiAgICAgICAgICA/IGFycltpIC0gMV0/LmVuYWJsZWQgPz8gdHJ1ZVxuICAgICAgICAgIDogYXJyW2kgKyAxXT8uZW5hYmxlZCA/PyBmYWxzZSxcbiAgICAgIH07XG4gICAgfSBlbHNlIHJldHVybiBzZXR0aW5ncztcbiAgfSk7XG5cbiAgY29uc3Qgd2FzRGlzYWJsZWQgPSAhaXRlbS5lbmFibGVkO1xuICBjb25zdCBiZWNhbWVFbmFibGVkID0gdXBkYXRlZFtuZXdJbmRleF0uZW5hYmxlZDtcbiAgaWYgKHdhc0Rpc2FibGVkICYmIGJlY2FtZUVuYWJsZWQpIHtcbiAgICBjb25zdCBlbmFibGVkQ291bnQgPSBhbGxDb2x1bW5zLmZpbHRlcihjID0+IGMuZW5hYmxlZCkubGVuZ3RoO1xuICAgIGlmIChlbmFibGVkQ291bnQgPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duKSB7XG4gICAgICAvLyBSZWZ1c2UgdGhlIG1vdmU7IGtlZXAgc3RhdGUgYXMtaXNcbiAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIGRpc3BsYXk6IHtcbiAgICAgIC4uLnN0YXRlLmRpc3BsYXksXG4gICAgICBjb2x1bW5TZXR0aW5nczogb3JkZXJJbnRlbnRpb25hbGx5KHVwZGF0ZWQsIGNvbHVtbk5hbWVNYXApLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoYW5nZUNvbHVtbkVuYWJsZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIGVuYWJsZWQ6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBjb25zdCBhbGxDb2x1bW5zID0gZ2V0QWxsQ29sdW1ucyhzdGF0ZSwgY29sdW1ucywgY29sdW1uTmFtZU1hcCk7XG4gIGlmIChcbiAgICBlbmFibGVkICYmXG4gICAgYWxsQ29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC5lbmFibGVkKS5sZW5ndGggPj0gUml2VGFibGUuQ29sdW1uc01heFNob3duXG4gICkge1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGVuYWJsZWQ6IGMua2V5ID09PSBjb2x1bW4gPyBlbmFibGVkIDogYy5lbmFibGVkLFxuICAgICAgICAgIC8vIFVucGluIGlmIGJlaW5nIHVuY2hlY2tlZFxuICAgICAgICAgIHBpbm5lZDogYy5rZXkgPT09IGNvbHVtbiAmJiAhZW5hYmxlZCA/IGZhbHNlIDogYy5waW5uZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cbmZ1bmN0aW9uIGVuYWJsZUFsbENvbHVtbnM8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBlbmFibGVkOiBib29sZWFuLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgYWxsQ29sdW1ucyA9IGdldEFsbENvbHVtbnMoc3RhdGUsIGNvbHVtbnMsIGNvbHVtbk5hbWVNYXApO1xuICBpZiAoZW5hYmxlZCAmJiBhbGxDb2x1bW5zLmxlbmd0aCA+IFJpdlRhYmxlLkNvbHVtbnNNYXhTaG93bikgcmV0dXJuIHN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoXG4gICAgICAgIGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgICAuLi5jLFxuICAgICAgICAgIGVuYWJsZWQ6IGVuYWJsZWQsXG4gICAgICAgICAgLy8gVW5waW4gaWYgYmVpbmcgdW5jaGVja2VkXG4gICAgICAgICAgcGlubmVkOiAhZW5hYmxlZCA/IGZhbHNlIDogYy5waW5uZWQsXG4gICAgICAgIH0pKSxcbiAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICksXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY2hhbmdlQ29sdW1uV2lkdGg8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBjb2x1bW5zOiBNYXA8QywgUml2VGFibGUuQ29sdW1uTWV0YWRhdGE+LFxuICBjb2x1bW5OYW1lTWFwOiBSaXZUYWJsZS5Db2x1bW5OYW1lTWFwPEM+LFxuICBjb2x1bW46IEMsXG4gIHByZWZlcnJlZFdpZHRoOiBSaXZUYWJsZS5Db2x1bW5TZXR0aW5nczxDPlsncHJlZmVycmVkV2lkdGgnXSxcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGFsbENvbHVtbnMgPSBnZXRBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBkaXNwbGF5OiB7XG4gICAgICAuLi5zdGF0ZS5kaXNwbGF5LFxuICAgICAgY29sdW1uU2V0dGluZ3M6IGFsbENvbHVtbnMubWFwKGMgPT4gKHtcbiAgICAgICAgLi4uYyxcbiAgICAgICAgcHJlZmVycmVkV2lkdGg6IGMua2V5ID09PSBjb2x1bW4gPyBwcmVmZXJyZWRXaWR0aCA6IGMucHJlZmVycmVkV2lkdGgsXG4gICAgICB9KSksXG4gICAgfSxcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlc2V0VG9EZWZhdWx0Q29sdW1uczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGNvbHVtbnM6IE1hcDxDLCBSaXZUYWJsZS5Db2x1bW5NZXRhZGF0YT4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIHJldHVybiB7XG4gICAgLi4uc3RhdGUsXG4gICAgZGlzcGxheToge1xuICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgIGNvbHVtblNldHRpbmdzOiBvcmRlckludGVudGlvbmFsbHkoZGVmYXVsdENvbHVtblN0YXRlLCBjb2x1bW5OYW1lTWFwKSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1Jvd1NlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LCBpZDogUlsnaWQnXSk6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgY2FzZSAnaW5jbHVkZSc6XG4gICAgICByZXR1cm4gc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkLmhhcyhpZCk7XG4gICAgY2FzZSAnZXhjbHVkZSc6XG4gICAgICByZXR1cm4gIXN0YXRlLnNlbGVjdGlvbi5leGNsdWRlZC5oYXMoaWQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzR3JvdXBTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIGdyb3VwOiBSaXZUYWJsZS5TdWJHcm91cFJlc3VsdDxSLCBHPixcbik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICBzd2l0Y2ggKHN0YXRlLnNlbGVjdGlvbi5tb2RlKSB7XG4gICAgY2FzZSAnaW5jbHVkZSc6IHtcbiAgICAgIGxldCBhbGxGb3VuZCA9IHRydWU7XG4gICAgICBsZXQgYW55Rm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoIXN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5oYXMocm93LmlkKSkge1xuICAgICAgICAgIGFsbEZvdW5kID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYW55Rm91bmQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWxsRm91bmQgPyB0cnVlIDogYW55Rm91bmQgPyAnaW5kZXRlcm1pbmF0ZScgOiBmYWxzZTtcbiAgICB9XG4gICAgY2FzZSAnZXhjbHVkZSc6IHtcbiAgICAgIGxldCBhbGxGb3VuZCA9IHRydWU7XG4gICAgICBsZXQgYW55Rm91bmQgPSBmYWxzZTtcbiAgICAgIGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLmN1cnJlbnRQYWdlRGF0YSkge1xuICAgICAgICBpZiAoc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLmhhcyhyb3cuaWQpKSB7XG4gICAgICAgICAgYWxsRm91bmQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhbnlGb3VuZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhbGxGb3VuZCA/IHRydWUgOiBhbnlGb3VuZCA/ICdpbmRldGVybWluYXRlJyA6IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0FsbFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuTXVsdGlTZWxlY3Rpb25TdGF0ZSB7XG4gIC8vIElmIHRoZXJlIGFyZSBubyByb3dzLCBcImFsbCBzZWxlY3RlZFwiIHNob3VsZCBiZSBmYWxzZVxuICBpZiAoc3RhdGUucmVzdWx0LnRvdGFsTWF0Y2hpbmdSb3dDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAoc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdleGNsdWRlJyAmJlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemUgPT09IDApIHx8XG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZScgJiZcbiAgICAgIHN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZC5zaXplID09PSBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50KVxuICApXG4gICAgcmV0dXJuIHRydWU7XG4gIGlmIChcbiAgICAoc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdleGNsdWRlJyAmJlxuICAgICAgc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemUgPT09IHN0YXRlLnJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQpIHx8XG4gICAgKHN0YXRlLnNlbGVjdGlvbi5tb2RlID09PSAnaW5jbHVkZScgJiYgc3RhdGUuc2VsZWN0aW9uLmluY2x1ZGVkLnNpemUgPT09IDApXG4gIClcbiAgICByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAnaW5kZXRlcm1pbmF0ZSc7XG59XG5cbmZ1bmN0aW9uIGlzQ3VycmVudFBhZ2VTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLk11bHRpU2VsZWN0aW9uU3RhdGUge1xuICBjb25zdCBzZWxlY3RlZFN0YXRlcyA9IGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkubWFwKCh7IGlkIH0pID0+XG4gICAgaXNSb3dTZWxlY3RlZChzdGF0ZSwgaWQpLFxuICApO1xuICBpZiAoc2VsZWN0ZWRTdGF0ZXMubGVuZ3RoID4gMCkge1xuICAgIGlmIChzZWxlY3RlZFN0YXRlcy5ldmVyeSh2ID0+IHYpKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoc2VsZWN0ZWRTdGF0ZXMuc29tZSh2ID0+IHYpKSByZXR1cm4gJ2luZGV0ZXJtaW5hdGUnO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0ZWRDb3VudDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IG51bWJlciB7XG4gIHN3aXRjaCAoc3RhdGUuc2VsZWN0aW9uLm1vZGUpIHtcbiAgICBjYXNlICdpbmNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWQuc2l6ZTtcbiAgICBjYXNlICdleGNsdWRlJzpcbiAgICAgIHJldHVybiBzdGF0ZS5yZXN1bHQudG90YWxNYXRjaGluZ1Jvd0NvdW50IC0gc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkLnNpemU7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24qIHJlZnJlc2hSZXN1bHRXaXRoPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIG1vc3RSZWNlbnRBY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICB5aWVsZCB7XG4gICAgc3RhdGU6IHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgbG9hZDoge1xuICAgICAgICBsb2FkaW5nOiB0cnVlLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBlZmZlY3Q6IG51bGwsXG4gIH07XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc291cmNlKHN0YXRlLnF1ZXJ5LCBtb3N0UmVjZW50QWN0aW9uKTtcbiAgICBpZiAoaXNQYWdlT3V0T2ZCb3VuZHMoc3RhdGUsIHJlc3VsdCkpIHtcbiAgICAgIHN0YXRlLnF1ZXJ5LnBhZ2luYXRpb24ucGFnZSA9IDA7XG4gICAgfVxuICAgIHlpZWxkIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgIH0sXG4gICAgICBlZmZlY3Q6IG51bGwsXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgIHlpZWxkIHtcbiAgICAgIHN0YXRlOiB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBsb2FkOiB7XG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgZXJyb3IsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZWZmZWN0OiBudWxsLFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Um93U2VsZWN0ZWQ8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBpZDogUlsnaWQnXSxcbiAgc2VsZWN0ZWQ6IGJvb2xlYW4sXG4gIGNvbnRpZ3VvdXM6IGJvb2xlYW4sXG4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICBpZiAoc2VsZWN0ZWQpIHtcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgU2V0PFJbJ2lkJ10+KFtpZF0pO1xuICAgIGlmIChjb250aWd1b3VzICYmIHN0YXRlLnNlbGVjdGlvbi5tb3N0UmVjZW50bHlTZWxlY3RlZCkge1xuICAgICAgY29uc3Qgc3RhcnRJZHggPSBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLmZpbmRJbmRleChcbiAgICAgICAgcm93ID0+IHJvdy5pZCA9PT0gc3RhdGUuc2VsZWN0aW9uLm1vc3RSZWNlbnRseVNlbGVjdGVkLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGVuZElkeCA9IGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkuZmluZEluZGV4KFxuICAgICAgICByb3cgPT4gcm93LmlkID09PSBpZCxcbiAgICAgICk7XG4gICAgICBpZiAodHlwZW9mIHN0YXJ0SWR4ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgZW5kSWR4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBmb3IgKFxuICAgICAgICAgIGxldCBpID0gTWF0aC5taW4oc3RhcnRJZHgsIGVuZElkeCk7XG4gICAgICAgICAgaSA8PSBNYXRoLm1heChzdGFydElkeCwgZW5kSWR4KTtcbiAgICAgICAgICBpKytcbiAgICAgICAgKSB7XG4gICAgICAgICAgbmV3U2VsZWN0aW9uLmFkZChnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpW2ldLmlkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IGlkLFxuICAgICAgICAuLi4oc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIHVuaW9uKFsuLi5zdGF0ZS5zZWxlY3Rpb24uaW5jbHVkZWRdLCBbLi4ubmV3U2VsZWN0aW9uXSksXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG1vZGU6ICdleGNsdWRlJyxcbiAgICAgICAgICAgICAgZXhjbHVkZWQ6IG5ldyBTZXQoXG4gICAgICAgICAgICAgICAgZGlmZmVyZW5jZShbLi4uc3RhdGUuc2VsZWN0aW9uLmV4Y2x1ZGVkXSwgWy4uLm5ld1NlbGVjdGlvbl0pLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSksXG4gICAgICB9LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAuLi4oc3RhdGUuc2VsZWN0aW9uLm1vZGUgPT09ICdpbmNsdWRlJ1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KFxuICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UoWy4uLnN0YXRlLnNlbGVjdGlvbi5pbmNsdWRlZF0sIFtpZF0pLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBtb2RlOiAnZXhjbHVkZScsXG4gICAgICAgICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KHVuaW9uKFsuLi5zdGF0ZS5zZWxlY3Rpb24uZXhjbHVkZWRdLCBbaWRdKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b2dnbGVHcm91cFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgZ3JvdXA6IFJpdlRhYmxlLlJvd0dyb3VwPFIsIEc+LFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgY29uc3QgaXNHcm91cEZ1bGx5U2VsZWN0ZWQgPVxuICAgIGlzR3JvdXBTZWxlY3RlZChzdGF0ZSwgeyAuLi5ncm91cCwgY3VycmVudFBhZ2VEYXRhOiBncm91cC5yb3dzIH0pID09PSB0cnVlO1xuICByZXR1cm4gZ3JvdXAucm93cy5yZWR1Y2UoKGFjY3VtdWxhdGVkU3RhdGUsIHJvdykgPT4ge1xuICAgIHJldHVybiBzZXRSb3dTZWxlY3RlZChcbiAgICAgIGFjY3VtdWxhdGVkU3RhdGUsXG4gICAgICByb3cuaWQsXG4gICAgICAhaXNHcm91cEZ1bGx5U2VsZWN0ZWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9LCBzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZVBhZ2VTZWxlY3RlZDxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IGlzUGFnZUZ1bGx5U2VsZWN0ZWQgPSBnZXRBbGxSb3dzRnJvbVJlc3VsdChzdGF0ZS5yZXN1bHQpLmV2ZXJ5KFxuICAgICh7IGlkIH0pID0+IGlzUm93U2VsZWN0ZWQoc3RhdGUsIGlkKSxcbiAgKTtcbiAgcmV0dXJuIGdldEFsbFJvd3NGcm9tUmVzdWx0KHN0YXRlLnJlc3VsdCkucmVkdWNlKChhY2N1bXVsYXRlZFN0YXRlLCByb3cpID0+IHtcbiAgICByZXR1cm4gc2V0Um93U2VsZWN0ZWQoXG4gICAgICBhY2N1bXVsYXRlZFN0YXRlLFxuICAgICAgcm93LmlkLFxuICAgICAgIWlzUGFnZUZ1bGx5U2VsZWN0ZWQsXG4gICAgICBmYWxzZSxcbiAgICApO1xuICB9LCBzdGF0ZSk7XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUFsbFNlbGVjdGVkPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+KTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKGlzQWxsU2VsZWN0ZWQoc3RhdGUpID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgIGluY2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnN0YXRlLFxuICAgICAgc2VsZWN0aW9uOiB7XG4gICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICBtb2RlOiAnZXhjbHVkZScsXG4gICAgICAgIGV4Y2x1ZGVkOiBuZXcgU2V0KCksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb248XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4pOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4ge1xuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHNlbGVjdGlvbjoge1xuICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgIH0sXG4gIH07XG59XG5cbmZ1bmN0aW9uIHRvZ2dsZUNvbHVtbk9yZGVyPFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbiAgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwLFxuPihcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPixcbiAgY29sdW1uOiBDLFxuKTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+IHtcbiAgaWYgKHN0YXRlLnF1ZXJ5Lm9yZGVyPy5jb2x1bW4gPT09IGNvbHVtbikge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIHF1ZXJ5OiB7XG4gICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICBvcmRlcjpcbiAgICAgICAgICBzdGF0ZS5xdWVyeS5vcmRlci5kaXJlY3Rpb24gPT09ICdhc2MnXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnZGVzYycsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4ge1xuICAgIC4uLnN0YXRlLFxuICAgIHF1ZXJ5OiB7XG4gICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgIG9yZGVyOiB7XG4gICAgICAgIGNvbHVtbixcbiAgICAgICAgZGlyZWN0aW9uOiAnYXNjJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0U2VhcmNoQ29sdW1uc1NlbGVjdGVkU3RhdGU8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBleHBlY3RlZFZhbHVlOiAnYWxsJyB8ICdub25lJyxcbik6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKGV4cGVjdGVkVmFsdWUpIHtcbiAgICBjYXNlICdhbGwnOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucy52YWx1ZXMoKSkuZXZlcnkoXG4gICAgICAgIHZhbHVlID0+IHZhbHVlLFxuICAgICAgKTtcblxuICAgIGNhc2UgJ25vbmUnOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oc3RhdGUucXVlcnkuc2VhcmNoQ29sdW1ucy52YWx1ZXMoKSkuZXZlcnkoXG4gICAgICAgIHZhbHVlID0+ICF2YWx1ZSxcbiAgICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9nZ2xlQWxsU2VhcmNoQ29sdW1uczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPik6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPiB7XG4gIGNvbnN0IG5vbmVTZWxlY3RlZCA9IGdldFNlYXJjaENvbHVtbnNTZWxlY3RlZFN0YXRlKHN0YXRlLCAnbm9uZScpO1xuICBjb25zdCBwYXlsb2FkID0gbmV3IE1hcChcbiAgICBBcnJheS5mcm9tKHN0YXRlLnF1ZXJ5LnNlYXJjaENvbHVtbnMua2V5cygpKS5tYXAoa2V5ID0+IFtcbiAgICAgIGtleSxcbiAgICAgIG5vbmVTZWxlY3RlZCxcbiAgICBdKSxcbiAgKTtcbiAgcmV0dXJuIHtcbiAgICAuLi5zdGF0ZSxcbiAgICBxdWVyeToge1xuICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICBzZWFyY2hDb2x1bW5zOiBwYXlsb2FkLFxuICAgIH0sXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uKiByZWR1Y2U8XG4gIFIgZXh0ZW5kcyBSaXZUYWJsZS5Sb3csXG4gIEMgZXh0ZW5kcyBSaXZUYWJsZS5Db2x1bW4sXG4gIEYgZXh0ZW5kcyBSaXZUYWJsZS5GaWx0ZXJzLFxuICBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXAsXG4+KFxuICBzdGF0ZTogUml2VGFibGUuQ29yZVN0YXRlPFIsIEMsIEYsIEc+LFxuICBhY3Rpb246IFJpdlRhYmxlLkFjdGlvbjxSLCBDLCBGLCBHPixcbiAgY29sdW1uczogTWFwPEMsIFJpdlRhYmxlLkNvbHVtbk1ldGFkYXRhPixcbiAgc291cmNlOiBSaXZUYWJsZS5Tb3VyY2U8UiwgQywgRiwgRz4sXG4gIGNvbHVtbk5hbWVNYXA6IFJpdlRhYmxlLkNvbHVtbk5hbWVNYXA8Qz4sXG4gIGRlZmF1bHRDb2x1bW5TdGF0ZTogUml2VGFibGUuQ29sdW1uU2V0dGluZ3M8Qz5bXSxcbik6IEFzeW5jR2VuZXJhdG9yPHtcbiAgc3RhdGU6IFJpdlRhYmxlLkNvcmVTdGF0ZTxSLCBDLCBGLCBHPjtcbiAgZWZmZWN0OiBSaXZUYWJsZS5FZmZlY3QgfCBudWxsO1xufT4ge1xuICBzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG4gICAgY2FzZSAnbG9hZCc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoc3RhdGUsIHNvdXJjZSwgYWN0aW9uKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIG9yZGVyOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ29yZGVyQ29sdW1uVG9nZ2xlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAgdG9nZ2xlQ29sdW1uT3JkZXIoc3RhdGUsIGFjdGlvbi5jb2x1bW4pLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgc2VhcmNoOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogMCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWxlY3Rpb246IHtcbiAgICAgICAgICAgIG1vc3RSZWNlbnRseVNlbGVjdGVkOiBudWxsLFxuICAgICAgICAgICAgbW9kZTogJ2luY2x1ZGUnLFxuICAgICAgICAgICAgaW5jbHVkZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWFyY2hDb2x1bW5zQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHNlYXJjaENvbHVtbnM6IG5ldyBNYXAoW1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5zZWFyY2hDb2x1bW5zLFxuICAgICAgICAgICAgICAuLi5hY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2luYXRpb25DaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgcGFnaW5hdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZ3JvdXBpbmdDaGFuZ2UnOlxuICAgICAgeWllbGQqIHJlZnJlc2hSZXN1bHRXaXRoKFxuICAgICAgICB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5LFxuICAgICAgICAgICAgZ3JvdXBpbmc6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ByZXZpb3VzUGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogZ2V0UHJldmlvdXNQYWdlKHN0YXRlKSA/PyAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICduZXh0UGFnZU5hdmlnYXRlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogZ2V0TmV4dFBhZ2Uoc3RhdGUpID8/IGdldFBhZ2VDb3VudChzdGF0ZSkgLSAxLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdwYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZTogYWN0aW9uLnBhZ2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3BhZ2VTaXplQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIHBhZ2luYXRpb246IHtcbiAgICAgICAgICAgICAgLi4uc3RhdGUucXVlcnkucGFnaW5hdGlvbixcbiAgICAgICAgICAgICAgcGFnZVNpemU6IGFjdGlvbi5zaXplLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmaWx0ZXJzQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGZpbHRlcnM6IGFjdGlvbi5wYXlsb2FkLFxuICAgICAgICAgICAgcGFnaW5hdGlvbjoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLFxuICAgICAgICAgICAgICBwYWdlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlbGVjdGlvbjoge1xuICAgICAgICAgICAgbW9zdFJlY2VudGx5U2VsZWN0ZWQ6IG51bGwsXG4gICAgICAgICAgICBtb2RlOiAnaW5jbHVkZScsXG4gICAgICAgICAgICBpbmNsdWRlZDogbmV3IFNldCgpLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ZpbHRlckFkZCc6XG4gICAgICAvLyBQYXJlbnQgY29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciBzdWJzY3JpYmluZyBhbmQgYWRkaW5nIHRoZSBmaWx0ZXJcbiAgICAgIHlpZWxkIHsgc3RhdGU6IHsgLi4uc3RhdGUgfSwgZWZmZWN0OiBudWxsIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5TZXR0aW5nc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgZGlzcGxheToge1xuICAgICAgICAgICAgLi4uc3RhdGUuZGlzcGxheSxcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmdzOiBhY3Rpb24ucGF5bG9hZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICAvLyBkbyBub3Qgb3V0cHV0IGNoYW5nZXMgd2hlbiB0cmlnZ2VyZWQgZnJvbSB0aGUgb3V0c2lkZSB3b3JsZFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uUGluQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IGNoYW5nZUNvbHVtblBpbihcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmNvbHVtbixcbiAgICAgICAgICBhY3Rpb24ucGlubmVkLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2NvbHVtbnNGcmVlemVVcFRvQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IGNoYW5nZUNvbHVtbnNGcmVlemVTdGF0ZShcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgIGNvbHVtbk5hbWVNYXAsXG4gICAgICAgICAgYWN0aW9uLmluZGV4LFxuICAgICAgICAgIGFjdGlvbi5mcmVlemUsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uT3JkZXJDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogY2hhbmdlQ29sdW1uT3JkZXIoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5wcmV2aW91c0luZGV4LFxuICAgICAgICAgIGFjdGlvbi5uZXdJbmRleCxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5Nb3ZlVG9DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogbW92ZUNvbHVtblRvKFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgY29sdW1uTmFtZU1hcCxcbiAgICAgICAgICBhY3Rpb24uY29sdW1uLFxuICAgICAgICAgIGFjdGlvbi5wb3NpdGlvbixcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdjb2x1bW5FbmFibGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IGNoYW5nZUNvbHVtbkVuYWJsZWQoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLmVuYWJsZWQsXG4gICAgICAgICksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZW5hYmxlQWxsQ29sdW1uc0NoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBlbmFibGVBbGxDb2x1bW5zKHN0YXRlLCBjb2x1bW5zLCBjb2x1bW5OYW1lTWFwLCBhY3Rpb24uZW5hYmxlZCksXG4gICAgICAgIGVmZmVjdDogJ3NhdmVDb2x1bW5QcmVmZXJlbmNlcycsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY29sdW1uV2lkdGhDaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZTogY2hhbmdlQ29sdW1uV2lkdGgoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGFjdGlvbi5jb2x1bW4sXG4gICAgICAgICAgYWN0aW9uLnByZWZlcnJlZFdpZHRoLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6ICdzYXZlQ29sdW1uUHJlZmVyZW5jZXMnLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3Jlc2V0VG9EZWZhdWx0Q29sdW1ucyc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiByZXNldFRvRGVmYXVsdENvbHVtbnMoXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICBjb2x1bW5OYW1lTWFwLFxuICAgICAgICAgIGRlZmF1bHRDb2x1bW5TdGF0ZSxcbiAgICAgICAgKSxcbiAgICAgICAgZWZmZWN0OiAnc2F2ZUNvbHVtblByZWZlcmVuY2VzJyxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3Rpb25DaGFuZ2UnOlxuICAgICAgeWllbGQge1xuICAgICAgICBzdGF0ZToge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHNlbGVjdGlvbjogYWN0aW9uLnBheWxvYWQsXG4gICAgICAgIH0sXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyb3dTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBzZXRSb3dTZWxlY3RlZChcbiAgICAgICAgICBzdGF0ZSxcbiAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgYWN0aW9uLnNlbGVjdGVkLFxuICAgICAgICAgIGFjdGlvbi5jb250aWd1b3VzLFxuICAgICAgICApLFxuICAgICAgICBlZmZlY3Q6IG51bGwsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAncGFnZVNlbGVjdGVkQ2hhbmdlJzpcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgc3RhdGU6IHRvZ2dsZVBhZ2VTZWxlY3RlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdhbGxTZWxlY3RlZENoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB0b2dnbGVBbGxTZWxlY3RlZChzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdzZWxlY3Rpb25DbGVhcic6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiBjbGVhclNlbGVjdGlvbihzdGF0ZSksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cFNlbGVjdGlvbkNoYW5nZSc6XG4gICAgICB5aWVsZCB7XG4gICAgICAgIHN0YXRlOiB0b2dnbGVHcm91cFNlbGVjdGVkKHN0YXRlLCBhY3Rpb24ucGF5bG9hZCksXG4gICAgICAgIGVmZmVjdDogbnVsbCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdncm91cHNQZXJQYWdlQ2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICBncm91cHNQZXJQYWdlOiBhY3Rpb24uZ3JvdXBzUGVyUGFnZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc291cmNlLFxuICAgICAgICBhY3Rpb24sXG4gICAgICApO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY291bnRQZXJHcm91cENoYW5nZSc6XG4gICAgICB5aWVsZCogcmVmcmVzaFJlc3VsdFdpdGgoXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgLi4uc3RhdGUucXVlcnksXG4gICAgICAgICAgICBncm91cGluZzoge1xuICAgICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeS5ncm91cGluZyxcbiAgICAgICAgICAgICAgY291bnRQZXJHcm91cDogYWN0aW9uLmNvdW50UGVyR3JvdXAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZXdNb3JlS2V5Q2hhbmdlJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnN0YXRlLFxuICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAuLi5zdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgIGdyb3VwaW5nOiB7XG4gICAgICAgICAgICAgIC4uLnN0YXRlLnF1ZXJ5Lmdyb3VwaW5nLFxuICAgICAgICAgICAgICB2aWV3TW9yZUtleTogYWN0aW9uLnZpZXdNb3JlS2V5LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIGFjdGlvbixcbiAgICAgICk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd0b2dnbGVBbGxTZWFyY2hDb2x1bW5zJzpcbiAgICAgIHlpZWxkKiByZWZyZXNoUmVzdWx0V2l0aCh0b2dnbGVBbGxTZWFyY2hDb2x1bW5zKHN0YXRlKSwgc291cmNlLCBhY3Rpb24pO1xuICAgICAgYnJlYWs7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNHcm91cFJlc3VsdDxSIGV4dGVuZHMgUml2VGFibGUuUm93LCBHIGV4dGVuZHMgUml2VGFibGUuR3JvdXA+KFxuICByZXN1bHQ6IFJpdlRhYmxlLlJlc3VsdDxSPiB8IFJpdlRhYmxlLkdyb3VwUmVzdWx0PFIsIEc+LFxuKTogcmVzdWx0IGlzIFJpdlRhYmxlLkdyb3VwUmVzdWx0PFIsIEc+IHtcbiAgaWYgKCd0b3RhbEdyb3VwQ291bnQnIGluIHJlc3VsdCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0QWxsUm93c0Zyb21SZXN1bHQ8UiBleHRlbmRzIFJpdlRhYmxlLlJvdywgRyBleHRlbmRzIFJpdlRhYmxlLkdyb3VwPihcbiAgcmVzdWx0OiBSaXZUYWJsZS5SZXN1bHQ8Uj4gfCBSaXZUYWJsZS5Hcm91cFJlc3VsdDxSLCBHPixcbik6IFJbXSB7XG4gIGlmIChpc0dyb3VwUmVzdWx0KHJlc3VsdCkpIHtcbiAgICByZXR1cm4gcmVzdWx0Lmdyb3VwUmVzdWx0cy5mbGF0TWFwKGdyb3VwcyA9PiBncm91cHMuY3VycmVudFBhZ2VEYXRhKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzdWx0LmN1cnJlbnRQYWdlRGF0YTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1BhZ2VPdXRPZkJvdW5kczxcbiAgUiBleHRlbmRzIFJpdlRhYmxlLlJvdyxcbiAgQyBleHRlbmRzIFJpdlRhYmxlLkNvbHVtbixcbiAgRiBleHRlbmRzIFJpdlRhYmxlLkZpbHRlcnMsXG4gIEcgZXh0ZW5kcyBSaXZUYWJsZS5Hcm91cCxcbj4oXG4gIHN0YXRlOiBSaXZUYWJsZS5Db3JlU3RhdGU8UiwgQywgRiwgRz4sXG4gIHJlc3VsdDogUml2VGFibGUuUmVzdWx0PFI+IHwgUml2VGFibGUuR3JvdXBSZXN1bHQ8UiwgRz4sXG4pOiBib29sZWFuIHtcbiAgaWYgKGlzR3JvdXBSZXN1bHQocmVzdWx0KSkge1xuICAgIGNvbnN0IG1pbkdyb3VwVmFsVG9TaG93T25DdXJyZW50UGFnZSA9XG4gICAgICBzdGF0ZS5xdWVyeS5wYWdpbmF0aW9uLnBhZ2UgKiBzdGF0ZS5xdWVyeS5ncm91cGluZy5ncm91cHNQZXJQYWdlICsgMTtcbiAgICBpZiAocmVzdWx0LnRvdGFsR3JvdXBDb3VudCA8IG1pbkdyb3VwVmFsVG9TaG93T25DdXJyZW50UGFnZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1pblJvd1RvU2hvd09uQ3VycmVudFBhZ2UgPVxuICAgICAgc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlICogc3RhdGUucXVlcnkucGFnaW5hdGlvbi5wYWdlU2l6ZSArIDE7XG4gICAgaWYgKHJlc3VsdC50b3RhbE1hdGNoaW5nUm93Q291bnQgPCBtaW5Sb3dUb1Nob3dPbkN1cnJlbnRQYWdlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
|