qms-angular 1.1.89 → 1.1.90
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/bundles/qms-angular.umd.js +11 -1
- package/bundles/qms-angular.umd.js.map +1 -1
- package/esm2015/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.js +2 -1
- package/esm2015/lib/services/qms-bpmn.service.js +10 -1
- package/fesm2015/qms-angular.js +11 -1
- package/fesm2015/qms-angular.js.map +1 -1
- package/lib/qms-ckeditor-components/common/constants/ckeditorFlowchart.const.d.ts +1 -0
- package/package.json +1 -1
- package/qms-angular.metadata.json +1 -1
- package/src/assets/qms-ckeditor-plugin/src/plugins/ckeditor5-special-characters/src/index.js +61 -61
@@ -805,6 +805,14 @@ export class BpmnService {
|
|
805
805
|
window[FlowChartConst.SELECTED_SHAPE_ID] = cellView.model.attributes.id;
|
806
806
|
window[FlowChartConst.SHAPE_TYPE] = cellView.model.attributes.type;
|
807
807
|
window[FlowChartConst.SHAPE_FLOWCHART_LOADING] = true;
|
808
|
+
if (window[FlowChartConst.ADD_SHAPE_CONNECTION_IN_PROGRESS] == true) {
|
809
|
+
window[FlowChartConst.SELECTED_SHAPE_ID] = '';
|
810
|
+
window[FlowChartConst.SHAPE_TYPE] = '';
|
811
|
+
window[FlowChartConst.MY_CELL_VIEW] = null;
|
812
|
+
window[FlowChartConst.ADD_SHAPE_CONNECTION_IN_PROGRESS] = false;
|
813
|
+
closeTools();
|
814
|
+
selection.cancelSelection();
|
815
|
+
}
|
808
816
|
}
|
809
817
|
/* QMS-1404: Customization */
|
810
818
|
window[FlowChartConst.PAPER] = paper;
|
@@ -847,6 +855,7 @@ export class BpmnService {
|
|
847
855
|
link.remove({ replaceLink: true });
|
848
856
|
link2.set('z', -1);
|
849
857
|
link2.addTo(graph);
|
858
|
+
window[FlowChartConst.ADD_SHAPE_CONNECTION_IN_PROGRESS] = true;
|
850
859
|
}
|
851
860
|
graph.on('change', (cell, opt) => {
|
852
861
|
this.onChangeTextInside(cell);
|
@@ -1465,4 +1474,4 @@ function createPoolTools(poolView, coordinates) {
|
|
1465
1474
|
poolView.addTools(elementToolsView);
|
1466
1475
|
joint.ui.FreeTransform.clear(paper);
|
1467
1476
|
}
|
1468
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvcW1zLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLGlCQUFpQixNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sZUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNyRyxPQUFPLFVBQVUsTUFBTSxxREFBcUQsQ0FBQztBQUU3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQy9GLE9BQU8sa0JBQWtCLE1BQU0sNkNBQTZDLENBQUM7OztBQUs3RSxJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksS0FBVSxDQUFDO0FBQ2YsSUFBSSxTQUFjLENBQUM7QUFDbkIsSUFBSSxhQUFrQixDQUFDO0FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FB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LEdBQUcsSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1FBQzNELE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFLEVBQUU7UUFDWCxPQUFPLEVBQUUsQ0FBQztLQUNYLENBQUMsQ0FBQztJQUNILElBQUksZ0JBQWdCLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQztRQUM3QyxLQUFLLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDO0tBQ3JDLENBQUMsQ0FBQztJQUNILFFBQVEsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwQyxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVzZS1iZWZvcmUtZGVmaW5lICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11c2UtYmVmb3JlLWRlZmluZSAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgJCBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21tb24vZW51bXMvc2hhcGUtZmxvdy1jaGFydC1jb25uZWN0aW9uLXR5cGUnO1xyXG5pbXBvcnQgSW5zcGVjdG9yRnVuY3Rpb24gZnJvbSAnLi4vY29tbW9uL2pvaW50SlMvYnBtbi9pbnNwZWN0b3IuZnVuY3Rpb24nO1xyXG5pbXBvcnQgVG9vbGJhckZ1bmN0aW9uIGZyb20gJy4uL2NvbW1vbi9qb2ludEpTL2JwbW4vdG9vbGJhci5mdW5jdGlvbic7XHJcbmltcG9ydCB7IEZsb3dDaGFydENvbnN0IH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2NvbnN0YW50cy9ja2VkaXRvckZsb3djaGFydC5jb25zdCc7XHJcbmltcG9ydCB7IEZsb3djaGFydFZpZXdNb2RlIH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2VudW1zL2Zsb3djaGFydC12aWV3LW1vZGUuZW51bSc7XHJcbmltcG9ydCBndWlkSGVscGVyIGZyb20gJy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9oZWxwZXIvZ3VpZEhlbHBlcic7XHJcbmltcG9ydCB7IERpYWdyYW1UZW1wbGF0ZXMgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9tb2RlbHMvZGlhZ3JhbS10ZW1wbGF0ZS5tb2RlbCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvaW50ZXJuYWwvU3ViamVjdCc7XHJcbmltcG9ydCB7IFJlbGF0ZWRJdGVtVHlwZSB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9lbnVtcy9yZWxhdGVkLXRvLWl0ZW0tdHlwZSc7XHJcbmltcG9ydCBCUE1OQ3VzdG9tRnVuY3Rpb24gZnJvbSAnLi4vY29tbW9uL2pvaW50SlMvYnBtbi9icG1uLmN1c3RvbS5mdW5jdGlvbic7XHJcblxyXG4vKiBEZWNsYXJlIGpvaW50anMgb2JqZWN0ICovXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby12YXJcclxuZGVjbGFyZSB2YXIgam9pbnQ6IGFueTtcclxubGV0IGdyYXBoOiBhbnk7XHJcbmxldCBwYXBlcjogYW55O1xyXG5sZXQgc2VsZWN0aW9uOiBhbnk7XHJcbmxldCB0b29sYmFyQ29uZmlnOiBhbnk7XHJcbmNvbnN0IGJwbW4yID0gam9pbnQuc2hhcGVzLmJwbW4yO1xyXG5jb25zdCBzdGFuZGFyZCA9IGpvaW50LnNoYXBlcy5zdGFuZGFyZDtcclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQnBtblNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIHB1YmxpYyBpc1NhdmVBc1RlbXBsYXRlID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRGVsZXRlVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEaXNhYmxlVG9vbGJhciA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1RlbXAgPSB0cnVlO1xyXG4gIHB1YmxpYyBqc29uVGVtcENvbnRlbnQgPSAnJztcclxuICBwdWJsaWMgaXNSZXNldCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc1NlbGVjdGVkVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMganNvbk9yaWdpbmFsQ29udGVudCA9ICcnO1xyXG4gIHB1YmxpYyBpc0Z1bGxTY3JlZW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBpc0V4cGFuZGVkUGFuZWwgPSB0cnVlO1xyXG4gIExBTkc6IGFueTtcclxuICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZUxpYnJhcnlTZXJ2aWNlLFxyXG4gICkge1xyXG5cclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBidWlsZERpYWdyYW0oXHJcbiAgICBkaWFncmFtVGVtcGxhdGVzOiBhbnksXHJcbiAgICBkaWFncmFtVGVtcGxhdGU6IGFueSxcclxuICAgIGJwbW5UaGVtZTogc3RyaW5nLFxyXG4gICAganNvbkNvbnRlbnQ6IGFueSxcclxuICAgIGVkaXRNb2RlOiBhbnksXHJcbiAgICBzaGFwZUltYWdlcz86IGFueSxcclxuICAgIHRvb2xiYXJDb25maWd1cmF0aW9uPzogYW55LFxyXG4gICAgbGFuZ3VhZ2U/OiBzdHJpbmdcclxuICApIHtcclxuICAgIGlmICghbGFuZ3VhZ2UpIHtcclxuICAgICAgdGhpcy5MQU5HID0gdGhpcy50cmFuc2xhdGUuZ2V0T2JqZWN0TGFuZygnZW4nKTtcclxuICAgIH1cclxuICAgIGVsc2UgeyB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKGxhbmd1YWdlKSB9XHJcbiAgICB0aGlzLmV4Y3V0ZWRCdWlsZERpYWdyYW0oXHJcbiAgICAgIGRpYWdyYW1UZW1wbGF0ZXMsXHJcbiAgICAgIGRpYWdyYW1UZW1wbGF0ZSxcclxuICAgICAgYnBtblRoZW1lLFxyXG4gICAgICBqc29uQ29udGVudCxcclxuICAgICAgZWRpdE1vZGUsXHJcbiAgICAgIHRoaXMuTEFORyxcclxuICAgICAgc2hhcGVJbWFnZXMsXHJcbiAgICAgIHRvb2xiYXJDb25maWd1cmF0aW9uXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZXhjdXRlZEJ1aWxkRGlhZ3JhbShcclxuICAgIGRpYWdyYW1UZW1wbGF0ZXM6IGFueSxcclxuICAgIGRpYWdyYW1UZW1wbGF0ZTogYW55LFxyXG4gICAgYnBtblRoZW1lOiBzdHJpbmcsXHJcbiAgICBqc29uQ29udGVudDogYW55LFxyXG4gICAgZWRpdE1vZGU6IGFueSxcclxuICAgIExBTkc6IGFueSxcclxuICAgIHNoYXBlSW1hZ2VzPzogYW55LFxyXG4gICAgdG9vbGJhckNvbmZpZ3VyYXRpb24/OiBhbnlcclxuICApIHtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0gPSBmYWxzZTtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5FRElUX01PREVdID0gZWRpdE1vZGU7XHJcbiAgICBqb2ludC5zZXRUaGVtZShicG1uVGhlbWUpO1xyXG5cclxuICAgIGpzb25Db250ZW50ID8ganNvbkNvbnRlbnQgPSBKU09OLnBhcnNlKGpzb25Db250ZW50KSA6IGpzb25Db250ZW50ID0gJyc7XHJcblxyXG4gICAgY29uc3QgZ2RBdXRoID0gd2luZG93W2BnZEF1dGhgXTtcclxuICAgIGNvbnN0IGdkTG9hZCA9IHdpbmRvd1tgZ2RMb2FkYF07XHJcbiAgICBjb25zdCBnZFNhdmUgPSB3aW5kb3dbYGdkU2F2ZWBdO1xyXG4gICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORywgc2hhcGVJbWFnZXMpO1xyXG5cclxuICAgIGxldCBmcmVlVHJhbnNmb3JtID0gbnVsbDtcclxuXHJcbiAgICBpZiAoIXRvb2xiYXJDb25maWd1cmF0aW9uKVxyXG4gICAgICB0b29sYmFyQ29uZmlnID0gVG9vbGJhckZ1bmN0aW9uLmdldFRvb2xiYXJDb25maWd1cmF0aW9uKExBTkcpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0b29sYmFyQ29uZmlnID0gdG9vbGJhckNvbmZpZ3VyYXRpb247XHJcbiAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbjogQWRkIHRlbXBsYXRlIGxpc3QgKi9cclxuICAgIGlmICh0b29sYmFyQ29uZmlnLnRvb2xzICYmIGRpYWdyYW1UZW1wbGF0ZXMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgICAgIGluZGV4OiBpdGVtLmluZGV4LFxyXG4gICAgICAgICAgICBjb250ZW50OiBpdGVtLnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IGl0ZW0uZmxvd0NoYXJ0SWQsXHJcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IGl0ZW0uanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB4LmluZGV4ID09PSBvcHRpb24uaW5kZXg7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ3JhcGggPSBuZXcgam9pbnQuZGlhLkdyYXBoKHsgdHlwZTogJ2JwbW4nIH0pO1xyXG5cclxuICAgIC8vIG92ZXJ3cml0ZSBjdXN0b20gZnVuY3Rpb25cclxuICAgIEJQTU5DdXN0b21GdW5jdGlvbi5jdXN0b21Kb2ludEpTQlBNTigpO1xyXG5cclxuICAgIGNvbnN0IGNvbW1hbmRNYW5hZ2VyID0gbmV3IGpvaW50LmRpYS5Db21tYW5kTWFuYWdlcih7IGdyYXBoIH0pO1xyXG4gICAgY29uc3Qga2V5Ym9hcmQgPSBuZXcgam9pbnQudWkuS2V5Ym9hcmQoKTtcclxuICAgIGNvbnN0IGNsaXBib2FyZCA9IG5ldyBqb2ludC51aS5DbGlwYm9hcmQoKTtcclxuXHJcbiAgICBwYXBlciA9IG5ldyBqb2ludC5kaWEuUGFwZXIoe1xyXG4gICAgICB3aWR0aDogODAwLFxyXG4gICAgICBoZWlnaHQ6IDYwMCxcclxuICAgICAgbW9kZWw6IGdyYXBoLFxyXG4gICAgICBncmlkU2l6ZTogZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcgPyA1IDogMTAsXHJcbiAgICAgIGRyYXdHcmlkOiBlZGl0TW9kZSAhPT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldyxcclxuICAgICAgYXN5bmM6IHRydWUsXHJcbiAgICAgIHNvcnRpbmc6IGpvaW50LmRpYS5QYXBlci5zb3J0aW5nLkFQUFJPWCxcclxuICAgICAgaW50ZXJhY3RpdmU6IHsgbGlua01vdmU6IGZhbHNlIH0sXHJcbiAgICAgIHNuYXBMYWJlbHM6IHRydWUsXHJcbiAgICAgIC8vIENvbm5lY3Rpb25zXHJcbiAgICAgIGRlZmF1bHRMaW5rKGVsZW1lbnRWaWV3KSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBicG1uMi5GbG93KHtcclxuICAgICAgICAgIHo6IGVsZW1lbnRWaWV3Lm1vZGVsLmdldCgneicpIC0gMSxcclxuICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgIGxpbmU6IHtcclxuICAgICAgICAgICAgICBmbG93VHlwZTogJ3NlcXVlbmNlJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHZhbGlkYXRlQ29ubmVjdGlvbihjZWxsVmlld1MsIG1hZ25ldFMsIGNlbGxWaWV3VCwgbWFnbmV0VCwgZW5kKSB7XHJcbiAgICAgICAgY29uc3Qgc291cmNlID0gY2VsbFZpZXdTLm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGNlbGxWaWV3VC5tb2RlbDtcclxuICAgICAgICAvLyBkb24ndCBhbGxvdyBsb29wIGxpbmtzXHJcbiAgICAgICAgaWYgKHNvdXJjZSA9PT0gdGFyZ2V0KSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRvbid0IGFsbG93IGxpbmsgdG8gbGluayBjb25uZWN0aW9uXHJcbiAgICAgICAgaWYgKHNvdXJjZS5pc0xpbmsoKSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFyZ2V0LmlzTGluaygpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGRvbid0IGFsbG93IGdyb3VwIGNvbm5lY3Rpb25zXHJcbiAgICAgICAgY29uc3Qgc291cmNlVHlwZSA9IHNvdXJjZS5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBjb25zdCB0YXJnZXRUeXBlID0gdGFyZ2V0LmdldCgndHlwZScpO1xyXG4gICAgICAgIGlmIChzb3VyY2VUeXBlID09PSAnYnBtbjIuR3JvdXAnIHx8IHRhcmdldFR5cGUgPT09ICdicG1uMi5Hcm91cCcpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGRlZmF1bHRBbmNob3I6IHtcclxuICAgICAgICBuYW1lOiAncGVycGVuZGljdWxhcidcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdENvbm5lY3Rpb25Qb2ludDoge1xyXG4gICAgICAgIG5hbWU6ICdib3VuZGFyeScsXHJcbiAgICAgICAgYXJnczogeyBzdHJva2U6IHRydWUgfVxyXG4gICAgICB9LFxyXG4gICAgICAvLyBFbWJlZGRpbmdcclxuICAgICAgZW1iZWRkaW5nTW9kZTogdHJ1ZSxcclxuICAgICAgZnJvbnRQYXJlbnRPbmx5OiB0cnVlLFxyXG4gICAgICB2YWxpZGF0ZUVtYmVkZGluZyhjaGlsZFZpZXcsIHBhcmVudFZpZXcpIHtcclxuICAgICAgICBjb25zdCBwYXJlbnRUeXBlID0gcGFyZW50Vmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBjb25zdCBjaGlsZFR5cGUgPSBjaGlsZFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgaWYgKHBhcmVudFR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnICYmIGNoaWxkVHlwZSAhPT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkFjdGl2aXR5JyAmJiBjaGlsZFR5cGUgPT09ICdicG1uMi5FdmVudCcpIHtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIEhpZ2hsaWdodGluZ1xyXG4gICAgICBoaWdobGlnaHRpbmc6IHtcclxuICAgICAgICBkZWZhdWx0OiB7XHJcbiAgICAgICAgICBuYW1lOiAnbWFzaycsXHJcbiAgICAgICAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICAgICAgc3Ryb2tlOiAnIzM0OThkYicsXHJcbiAgICAgICAgICAgICAgJ3N0cm9rZS13aWR0aCc6IDMsXHJcbiAgICAgICAgICAgICAgJ3N0cm9rZS1saW5lam9pbic6ICdyb3VuZCdcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkub24oe1xyXG4gICAgICAnYmxhbms6cG9pbnRlcmRvd24nOiAoZXZ0LCB4LCB5KSA9PiB7XHJcbiAgICAgICAgY2xvc2VUb29scygpO1xyXG4gICAgICAgIHRoaXMucmVzZXRDZWxsVmlldygpO1xyXG4gICAgICAgIC8vIHNlbGVjdGlvbi5zdGFydFNlbGVjdGluZyhldnQsIHgsIHkpO1xyXG4gICAgICAgIGlmIChrZXlib2FyZC5pc0FjdGl2ZSgnc2hpZnQnLCBldnQpKSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uc3RhcnRTZWxlY3RpbmcoZXZ0LCB4LCB5KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgICdibGFuazpjb250ZXh0bWVudSc6IChldnQsIHgsIHkpID0+IHtcclxuICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2NlbGw6cG9pbnRlcnVwJzogKGNlbGxWaWV3KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2VsbCA9IGNlbGxWaWV3Lm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHsgY29sbGVjdGlvbiB9ID0gc2VsZWN0aW9uO1xyXG4gICAgICAgIGlmIChjb2xsZWN0aW9uLmluY2x1ZGVzKGNlbGwpKSB7IHJldHVybjsgfVxyXG4gICAgICAgIGNvbGxlY3Rpb24ucmVzZXQoW2NlbGxdKTtcclxuICAgICAgICBvcGVuVG9vbHMoY2VsbFZpZXcsIG51bGwpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2xpbms6bW91c2VlbnRlcic6IChsaW5rVmlldykgPT4ge1xyXG4gICAgICAgIC8vIE9wZW4gdG9vbCBvbmx5IGlmIHRoZXJlIGlzIG5vbmUgeWV0XHJcbiAgICAgICAgaWYgKGxpbmtWaWV3Lmhhc1Rvb2xzKCkpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5zID0gam9pbnQubGlua1Rvb2xzO1xyXG4gICAgICAgIGNvbnN0IHRvb2xzVmlldyA9IG5ldyBqb2ludC5kaWEuVG9vbHNWaWV3KHtcclxuICAgICAgICAgIG5hbWU6ICdsaW5rLWhvdmVyJyxcclxuICAgICAgICAgIHRvb2xzOiBbXHJcbiAgICAgICAgICAgIG5ldyBucy5WZXJ0aWNlcyh7IHZlcnRleEFkZGluZzogZmFsc2UgfSksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGxpbmtWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnbGluazptb3VzZWxlYXZlJzogKGxpbmtWaWV3KSA9PiB7XHJcbiAgICAgICAgLy8gUmVtb3ZlIG9ubHkgdGhlIGhvdmVyIHRvb2wsIG5vdCB0aGUgcG9pbnRlcmRvd24gdG9vbFxyXG4gICAgICAgIGlmIChsaW5rVmlldy5oYXNUb29scygnbGluay1ob3ZlcicpKSB7XHJcbiAgICAgICAgICBsaW5rVmlldy5yZW1vdmVUb29scygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgICdsaW5rOmNvbm5lY3QnOiAobGlua1ZpZXcpID0+IHtcclxuICAgICAgICAvLyBDaGFuZ2UgdGhlIGxpbmsgdHlwZSBiYXNlZCBvbiB0aGUgY29ubmVjdGVkIGVsZW1lbnRzXHJcbiAgICAgICAgY29uc3QgbGluayA9IGxpbmtWaWV3Lm1vZGVsO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGxpbmsuZ2V0U291cmNlQ2VsbCgpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGxpbmsuZ2V0VGFyZ2V0Q2VsbCgpO1xyXG4gICAgICAgIGlmICghc291cmNlIHx8ICF0YXJnZXQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdHlwZXMgPSBbc291cmNlLmdldCgndHlwZScpLCB0YXJnZXQuZ2V0KCd0eXBlJyldO1xyXG4gICAgICAgIGNvbnN0IGxpbmtUeXBlID0gbGluay5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQW5ub3RhdGlvbicpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkFubm90YXRpb25MaW5rJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQW5ub3RhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuQ29udmVyc2F0aW9uJykgPiAtMSkge1xyXG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQ29udmVyc2F0aW9uTGluaycpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkNvbnZlcnNhdGlvbkxpbmspO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZXMuaW5kZXhPZignYnBtbjIuRGF0YU9iamVjdCcpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhU3RvcmUnKSA+IC0xKSB7XHJcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5EYXRhQXNzb2NpYXRpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5EYXRhQXNzb2NpYXRpb24pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobGlua1R5cGUgIT09ICdicG1uMi5GbG93Jykge1xyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkZsb3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgJ2VsZW1lbnQ6bW91c2VvdmVyJzogKGNlbGxWaWV3KSA9PiB7XHJcbiAgICAgICAgaWYgKGVkaXRNb2RlICE9PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG9wZW5Ub29scyhjZWxsVmlldywgbnVsbCk7XHJcbiAgICAgIH0sXHJcbiAgICAgICdlbGVtZW50Om1vdXNlb3V0JzogKGNlbGxWaWV3KSA9PiB7XHJcbiAgICAgICAgaWYgKGVkaXRNb2RlICE9PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG9wZW5Ub29scyhjZWxsVmlldywgbnVsbCk7XHJcbiAgICAgIH0sXHJcbiAgICAgICdlbGVtZW50OnBvaW50ZXJkb3duJzogKGNlbGxWaWV3LCBldnQsIHgsIHkpID0+IHtcclxuICAgICAgICBpZiAoZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgICAgIGlmIChrZXlib2FyZC5pc0FjdGl2ZSgnY3RybCBtZXRhJywgZXZ0KSkge1xyXG4gICAgICAgICAgICBpZiAoc2VsZWN0aW9uLmNvbGxlY3Rpb24uZmluZChmdW5jdGlvbiAoY2VsbCkgeyByZXR1cm4gY2VsbC5pc0xpbmsoKSB9KSkge1xyXG4gICAgICAgICAgICAgIC8vIERvIG5vdCBhbGxvdyBtaXhpbmcgbGlua3MgYW5kIGVsZW1lbnRzIGluIHRoZSBzZWxlY3Rpb25cclxuICAgICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChbY2VsbFZpZXcubW9kZWxdKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5hZGQoY2VsbFZpZXcubW9kZWwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgY2xvc2VUb29scygpO1xyXG4gICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgcGFwZXJTY3JvbGxlci5zdGFydFBhbm5pbmcoZXZ0LCB4LCB5KTtcclxuICAgICAgICAgIHBhcGVyLnNldEludGVyYWN0aXZpdHkoeyBlbGVtZW50TW92ZTogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAnY2VsbDpwb2ludGVyY2xpY2snOiBmdW5jdGlvbiAoY2VsbFZpZXcsIGV2dCwgeCwgeSkge1xyXG4gICAgICAgIG9wZW5Ub29scyhjZWxsVmlldywgZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcgPyBqb2ludC5nLlBvaW50KHgsIHkpIDogbnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHNuYXBsaW5lcyA9IG5ldyBqb2ludC51aS5TbmFwbGluZXMoeyBwYXBlciB9KTtcclxuXHJcbiAgICBjb25zdCBwYXBlclNjcm9sbGVyID0gbmV3IGpvaW50LnVpLlBhcGVyU2Nyb2xsZXIoe1xyXG4gICAgICBwYXBlcixcclxuICAgICAgYXV0b1Jlc2l6ZVBhcGVyOiB0cnVlLFxyXG4gICAgICBzY3JvbGxXaGlsZURyYWdnaW5nOiB0cnVlLFxyXG4gICAgICBjdXJzb3I6ICdncmFiJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgJCgnI3BhcGVyLWNvbnRhaW5lcicpLmh0bWwoJycpO1xyXG4gICAgcGFwZXJTY3JvbGxlci4kZWwuYXBwZW5kVG8oJyNwYXBlci1jb250YWluZXInKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XHJcbiAgICBwYXBlclNjcm9sbGVyLnJlbmRlcigpLmNlbnRlcigpO1xyXG5cclxuICAgIHBhcGVyLm9uKCdibGFuazptb3VzZXdoZWVsJywgXy5wYXJ0aWFsKG9uTW91c2V3aGVlbCwgbnVsbCksIHRoaXMpO1xyXG4gICAgcGFwZXIub24oJ2NlbGw6bW91c2V3aGVlbCcsIG9uTW91c2V3aGVlbCwgdGhpcyk7XHJcbiAgICBmdW5jdGlvbiBvbk1vdXNld2hlZWwoY2VsbFZpZXcsIGV2dCwgeCwgeSwgZGVsdGEpIHtcclxuICAgICAgcGFwZXJTY3JvbGxlci56b29tKGRlbHRhICogMC4xLCB7IG1pbjogMC4yLCBtYXg6IDUsIGdyaWQ6IDAuMSwgb3g6IHgsIG95OiB5IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIFNFTEVDVElPTiAqL1xyXG4gICAgc2VsZWN0aW9uID0gbmV3IGpvaW50LnVpLlNlbGVjdGlvbih7XHJcbiAgICAgIHBhcGVyLFxyXG4gICAgICBncmFwaCxcclxuICAgICAgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSxcclxuICAgICAgZmlsdGVyOiBbJ2JwbW4yLkhlYWRlcmVkUG9vbCddIC8vIGRvbid0IGFsbG93IHRvIHNlbGVjdCBhIHBvb2xcclxuICAgIH0pO1xyXG5cclxuICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLm9uKCdyZXNldCBhZGQgcmVtb3ZlJywgb25TZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSk7XHJcbiAgICBzZWxlY3Rpb24ub24oJ3NlbGVjdGlvbi1ib3g6cG9pbnRlcmRvd24nLCAoY2VsbFZpZXc6IGFueSwgZXZ0OiBhbnkpID0+IHtcclxuICAgICAgLy8gVW5zZWxlY3QgYW4gZWxlbWVudCBpZiB0aGUgQ1RSTC9NZXRhIGtleSBpcyBwcmVzc2VkIHdoaWxlIGEgc2VsZWN0ZWQgZWxlbWVudCBpcyBjbGlja2VkLlxyXG4gICAgICBpZiAoa2V5Ym9hcmQuaXNBY3RpdmUoJ2N0cmwgbWV0YScsIGV2dCkpIHtcclxuICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZW1vdmUoY2VsbFZpZXcubW9kZWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIC8qIFNURU5DSUwgKi9cclxuXHJcbiAgICBjb25zdCBzdGVuY2lsID0gbmV3IGpvaW50LnVpLlN0ZW5jaWwoe1xyXG4gICAgICBncmFwaCxcclxuICAgICAgcGFwZXIsXHJcbiAgICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgICBkcmFnRW5kQ2xvbmUoY2VsbCkge1xyXG4gICAgICAgIGNvbnN0IGNsb25lID0gY2VsbC5jbG9uZSgpO1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjbG9uZS5nZXQoJ3R5cGUnKTtcclxuXHJcbiAgICAgICAgLy8gc29tZSB0eXBlcyBvZiB0aGUgZWxlbWVudHMgbmVlZCByZXNpemluZyBhZnRlciB0aGV5IGFyZSBkcm9wcGVkXHJcbiAgICAgICAgY29uc3Qgc2l6ZU11bHRpcGxpZXIgPSB7ICdicG1uMi5IZWFkZXJlZFBvb2wnOiA4LCAnYnBtbi5DaG9yZW9ncmFwaHknOiAyIH1bdHlwZV07XHJcbiAgICAgICAgaWYgKHNpemVNdWx0aXBsaWVyKSB7XHJcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbFNpemUgPSBjbG9uZS5nZXQoJ3NpemUnKTtcclxuICAgICAgICAgIGNsb25lLnNldCgnc2l6ZScsIHtcclxuICAgICAgICAgICAgd2lkdGg6IG9yaWdpbmFsU2l6ZS53aWR0aCAqIHNpemVNdWx0aXBsaWVyLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IG9yaWdpbmFsU2l6ZS5oZWlnaHQgKiBzaXplTXVsdGlwbGllclxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgICAgY2xvbmUuc2V0KCdwYWRkaW5nJywgeyB0b3A6IDAsIGxlZnQ6IDMwLCByaWdodDogMCwgYm90dG9tOiAwIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2xvbmU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHN0ZW5jaWwucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjc3RlbmNpbC1jb250YWluZXInKTtcclxuXHJcbiAgICB2YXIgc3RlbmNpbFNoYXBlcyA9IFtcclxuICAgICAgbmV3IGJwbW4yLkFjdGl2aXR5KHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuR2F0ZXdheSh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkV2ZW50KHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuQ29udmVyc2F0aW9uKHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuRGF0YU9iamVjdCh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkRhdGFTdG9yZSh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkFubm90YXRpb24oe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgIGZpbGw6ICcjZmZmZmZmJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IGJwbW4yLkdyb3VwKHtcclxuICAgICAgICBzaXplOiB7XHJcbiAgICAgICAgICB3aWR0aDogODAsXHJcbiAgICAgICAgICBoZWlnaHQ6IDgwXHJcbiAgICAgICAgfSxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgdGV4dDogJ0dyb3VwJyxcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICAvLyBMZWdhY3kgQlBNTiBTaGFwZXNcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6ICdicG1uMi5IZWFkZXJlZFBvb2wnLFxyXG4gICAgICAgIHBhZGRpbmc6IHsgdG9wOiAwLCBsZWZ0OiAxNSwgcmlnaHQ6IDAsIGJvdHRvbTogMCB9LFxyXG4gICAgICAgIHNpemU6IHsgd2lkdGg6IDkwLCBoZWlnaHQ6IDUwIH0sXHJcbiAgICAgICAgbGFuZXM6IFt7XHJcbiAgICAgICAgICBsYWJlbDogJ0xhbmUgMSdcclxuICAgICAgICB9LCB7XHJcbiAgICAgICAgICBsYWJlbDogJ0xhbmUgMidcclxuICAgICAgICB9XSxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgYm9keTogeyBmaWxsOiAnI2ZmZmZmZicgfSxcclxuICAgICAgICAgIGhlYWRlckxhYmVsOiB7IHRleHQ6ICdIZWFkZXInIH0sXHJcbiAgICAgICAgICBsYW5lTGFiZWxzOiB7IGZvbnRTaXplOiAxMyB9LFxyXG4gICAgICAgICAgbWlsZXN0b25lTGFiZWxzOiB7IGZvbnRTaXplOiAxMyB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCBuZXcgam9pbnQuc2hhcGVzLmJwbW4uQ2hvcmVvZ3JhcGh5KHtcclxuICAgICAgICBwYXJ0aWNpcGFudHM6IFsnUGFydGljaXBhbnQgMScsICdQYXJ0aWNpcGFudCAyJ10sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGxhYmVsOiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KSwgbmV3IGpvaW50LnNoYXBlcy5icG1uLk1lc3NhZ2Uoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICB0ZXh0OiB7XHJcbiAgICAgICAgICAgIHN0cm9rZTogJ3doaXRlJyxcclxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDIsXHJcbiAgICAgICAgICAgIHBhaW50T3JkZXI6ICdzdHJva2UnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KV07XHJcbiAgICAvLyBMb2FkIHNoYXBlIGltYWdlIG9yIG5vdFxyXG4gICAgaWYgKHNoYXBlSW1hZ2VzICYmIHNoYXBlSW1hZ2VzLmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBpZHggPSBzaGFwZUltYWdlcy5maW5kSW5kZXgoKGltZykgPT4ge1xyXG4gICAgICAgIHJldHVybiBpbWdbJ2lzRGVmYXVsdCddID09PSB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgaW1hZ2UgPSBzaGFwZUltYWdlc1tpZHhdO1xyXG4gICAgICBzdGVuY2lsU2hhcGVzLnB1c2gobmV3IHN0YW5kYXJkLkltYWdlKHtcclxuICAgICAgICB0eXBlOiAnc3RhbmRhcmQuSW1hZ2UnLFxyXG4gICAgICAgIHNpemU6IHsgd2lkdGg6IDgwLCBoZWlnaHQ6IDgwIH0sXHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGltYWdlOiB7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxyXG4gICAgICAgICAgICB4bGlua0hyZWY6IGltYWdlXHJcbiAgICAgICAgICAgICAgPyBpbWFnZVsnaW1hZ2VUeXBlJ10gPT09ICdzdmcnXHJcbiAgICAgICAgICAgICAgICA/IGBkYXRhOmltYWdlLyR7aW1hZ2VbJ2ltYWdlVHlwZSddfSt4bWw7YmFzZTY0LCR7aW1hZ2VbJ2ltYWdlU3RyaW5nJ119YFxyXG4gICAgICAgICAgICAgICAgOiBgZGF0YTppbWFnZS8ke2ltYWdlWydpbWFnZVR5cGUnXX07YmFzZTY0LCR7aW1hZ2VbJ2ltYWdlU3RyaW5nJ119YFxyXG4gICAgICAgICAgICAgIDogJ2RhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0OElVUlBRMVJaVUVVZ2MzWm5JRkJWUWt4SlF5QWlMUzh2VnpOREx5OUVWRVFnVTFaSElERXVNUzh2UlU0aUlDSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OUhjbUZ3YUdsamN5OVRWa2N2TVM0eEwwUlVSQzl6ZG1jeE1TNWtkR1FpUGp4emRtY2dkbVZ5YzJsdmJqMGlNUzR4SWlCcFpEMGlUR0Y1WlhKZk1pSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklpQjRiV3h1Y3pwNGJHbHVhejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOTRiR2x1YXlJZ2VEMGlNSEI0SWlCNVBTSXdjSGdpSUhkcFpIUm9QU0kxTTNCNElpQm9aV2xuYUhROUlqUXljSGdpSUhacFpYZENiM2c5SWpBZ01DQTFNeUEwTWlJZ1pXNWhZbXhsTFdKaFkydG5jbTkxYm1ROUltNWxkeUF3SURBZ05UTWdORElpSUhodGJEcHpjR0ZqWlQwaWNISmxjMlZ5ZG1VaVBqeG5QanhuSUc5d1lXTnBkSGs5SWpBdU5Ea2lQanh3WVhSb0lHWnBiR3c5SWlNeU1qSXhNemdpSUdROUlrMDBPUzR6TkRRc00yTXdMalUwTWl3d0xERXVNalV0TUM0d05ESXNNUzR5TlN3d0xqVjJNelJqTUN3d0xqVTBNaTB3TGpjd09Dd3hMalV0TVM0eU5Td3hMalZvTFRRMll5MHdMalUwTWl3d0xUQXVOelV0TUM0NU5UZ3RNQzQzTlMweExqVWdkaTB6TkdNd0xUQXVOVFF5TERBdU1qQTRMVEF1TlN3d0xqYzFMVEF1TldnME5pNHlOU0JOTkRrdU16UTBMREZvTFRRMll5MHhMalkxTERBdE1pNDNOU3d3TGpnMUxUSXVOelVzTWk0MWRqTTBZekFzTVM0Mk5Td3hMakVzTXk0MUxESXVOelVzTXk0MWFEUTJJR014TGpZMUxEQXNNeTR5TlMweExqZzFMRE11TWpVdE15NDFkaTB6TkVNMU1pNDFPVFFzTVM0NE5TdzFNQzQ1T1RRc01TdzBPUzR6TkRRc01VdzBPUzR6TkRRc01Yb2lMejQ4WTJseVkyeGxJR1pwYkd3OUlpTXlNakl4TXpnaUlHTjRQU0l6T0M0d09UUWlJR041UFNJeE1pNDFNRElpSUhJOUlqUXVNems0SWk4K1BIQmhkR2dnWm1sc2JEMGlJekl5TWpFek9DSWdaRDBpVFRVd0xqVTVOQ3d5Tmk0NU56SnNMVGN1TVRNMUxUVXVPVEU0WXkweExqQTNOaTB3TGpnNE9DMHlMamN5Tmkwd0xqZzFOQzB6TGpjME9Td3dMakE0Tkd3dE55NHlNalFzTmk0MU9ESk1NVGd1TWpVeExERXlMakl4SUdNdE1TNHdOek10TVM0eE56TXRNaTQ0TWpZdE1TNHhPRFl0TXk0NU1UY3RNQzR3TWpSTU1TNDFPVFFzTWpVdU9USXlWalF3YURRNExqazVNMk13TGpFeE5Td3dMREF1TURBM0xUQXVNREl4TERBdU1EQTNMVEF1TURJNVZqSTJMamszTW5vaUx6NDhMMmMrUEdjK1BHYytQR2MrUEhCaGRHZ2dabWxzYkQwaUl6TXhSREJETmlJZ1pEMGlUVFE1TGpNME5Dd3lZekF1TlRReUxEQXNNUzR5TlMwd0xqQTBNaXd4TGpJMUxEQXVOWFl6TkdNd0xEQXVOVFF5TFRBdU56QTRMREV1TlMweExqSTFMREV1TldndE5EWmpMVEF1TlRReUxEQXRNQzQzTlMwd0xqazFPQzB3TGpjMUxURXVOU0IyTFRNMFl6QXRNQzQxTkRJc01DNHlNRGd0TUM0MUxEQXVOelV0TUM0MWFEUTJMakkxSUUwME9TNHpORFFzTUdndE5EWmpMVEV1TmpVc01DMHlMamMxTERBdU9EVXRNaTQzTlN3eUxqVjJNelJqTUN3eExqWTFMREV1TVN3ekxqVXNNaTQzTlN3ekxqVm9ORFlnWXpFdU5qVXNNQ3d6TGpJMUxURXVPRFVzTXk0eU5TMHpMalYyTFRNMFF6VXlMalU1TkN3d0xqZzFMRFV3TGprNU5Dd3dMRFE1TGpNME5Dd3dURFE1TGpNME5Dd3dlaUl2UGp3dlp6NDhZMmx5WTJ4bElHWnBiR3c5SWlNek1VUXdRellpSUdONFBTSXpPQzR3T1RRaUlHTjVQU0l4TVM0MU1ESWlJSEk5SWpRdU16azRJaTgrUEhCaGRHZ2dabWxzYkQwaUl6TXhSREJETmlJZ1pEMGlUVFV3TGpVNU5Dd3lOUzQ1TnpKc0xUY3VNVE0xTFRVdU9URTRZeTB4TGpBM05pMHdMamc0T0MweUxqY3lOaTB3TGpnMU5DMHpMamMwT1N3d0xqQTROR3d0Tnk0eU1qUXNOaTQxT0RKTU1UZ3VNalV4TERFeExqSXhJR010TVM0d056TXRNUzR4TnpNdE1pNDRNall0TVM0eE9EWXRNeTQ1TVRjdE1DNHdNalJNTVM0MU9UUXNNalF1T1RJeVZqTTVhRFE0TGprNU0yTXdMakV4TlN3d0xEQXVNREEzTFRBdU1ESXhMREF1TURBM0xUQXVNREk1VmpJMUxqazNNbm9pTHo0OEwyYytQQzluUGp3dlp6NDhMM04yWno0ZydcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBib2R5OiB7XHJcbiAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgICAgICAgIHN0cm9rZTogJyMzMWQwYzYnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiAnMCdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGVuY2lsLmxvYWQoc3RlbmNpbFNoYXBlcyk7XHJcblxyXG4gICAgam9pbnQubGF5b3V0LkdyaWRMYXlvdXQubGF5b3V0KHN0ZW5jaWwuZ2V0R3JhcGgoKSwge1xyXG4gICAgICBjb2x1bW5zOiAxMDAsXHJcbiAgICAgIGNvbHVtbldpZHRoOiAnY29tcGFjdCcsXHJcbiAgICAgIG1hcmdpblg6IDIwLFxyXG4gICAgICBtYXJnaW5ZOiAyMCxcclxuICAgICAgY29sdW1uR2FwOiA0MCxcclxuICAgICAgdmVydGljYWxHYXA6IDIwLFxyXG4gICAgICByZXNpemVUb0ZpdDogZmFsc2VcclxuICAgIH0pO1xyXG4gICAgY29uc3QgcmVzZXRDZWxsVmlldyA9IHRoaXMucmVzZXRDZWxsVmlldztcclxuICAgIC8vIENyZWF0ZSB0b29sdGlwcyBmb3IgYWxsIHRoZSBzaGFwZXMgaW4gc3RlbmNpbC5cclxuICAgIHN0ZW5jaWwub24oJ2VsZW1lbnQ6ZHJvcCcsIChlbGVtZW50VmlldykgPT4ge1xyXG4gICAgICAvLyBvcGVuIGluc3BlY3RvciBhZnRlciBhIG5ldyBlbGVtZW50IGRyb3BwZWQgZnJvbSBzdGVuY2lsXHJcbiAgICAgIG9wZW5Ub29scyhlbGVtZW50VmlldywgbnVsbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvKiBLRVlCT0FSRCAqL1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XHJcbiAgICAgIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGluaXRpYWxpemVLZXlib2FyZFNob3J0Y3V0cygpIHtcclxuICAgICAga2V5Ym9hcmQub24oXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgJ2N0cmwrYyc6ICgpID0+IHtcclxuICAgICAgICAgICAgLy8gQ29weSBhbGwgc2VsZWN0ZWQgZWxlbWVudHMgYW5kIHRoZWlyIGFzc29jaWF0ZWQgbGlua3MuXHJcbiAgICAgICAgICAgIGNsaXBib2FyZC5jb3B5RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrdic6ICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcGFzdGVkQ2VsbHMgPSBjbGlwYm9hcmQucGFzdGVDZWxscyhncmFwaCwge1xyXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZTogeyBkeDogMjAsIGR5OiAyMCB9LFxyXG4gICAgICAgICAgICAgIHVzZUxvY2FsU3RvcmFnZTogdHJ1ZVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gXy5maWx0ZXIocGFzdGVkQ2VsbHMsIChjZWxsKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGNlbGwuaXNFbGVtZW50KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHBhc3RlZCBlbGVtZW50cyBnZXQgc2VsZWN0ZWQgaW1tZWRpYXRlbHkuIFRoaXMgbWFrZXMgdGhlIFVYIGJldHRlciBhc1xyXG4gICAgICAgICAgICAvLyB0aGUgdXNlciBjYW4gaW1tZWRpYXRlbHkgbWFuaXB1bGF0ZSB0aGUgcGFzdGVkIGVsZW1lbnRzLlxyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChlbGVtZW50cyk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3ggc2hpZnQrZGVsZXRlJzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjbGlwYm9hcmQuY3V0RWxlbWVudHMoc2VsZWN0aW9uLmNvbGxlY3Rpb24sIGdyYXBoKTtcclxuICAgICAgICAgICAgcmVzZXRDZWxsVmlldygpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnZGVsZXRlIGJhY2tzcGFjZSc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgY2VsbHMgPSBzZWxlY3Rpb24uY29sbGVjdGlvbi50b0FycmF5KCk7XHJcbiAgICAgICAgICAgIGxldCBhbGxvd0RlbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfRkxPV0NIQVJUXSkge1xyXG4gICAgICAgICAgICAgIHZhciBzaGFwZUZsb3dDaGFydCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9GTE9XQ0hBUlRdO1xyXG4gICAgICAgICAgICAgIC8vIENsZWFyIGFsbCBieSBjbGljayByZW1vdmUgYnV0dG9uXHJcbiAgICAgICAgICAgICAgaWYgKGNlbGxzKSB7XHJcbiAgICAgICAgICAgICAgICBjZWxscy5ldmVyeShmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgICAgICB2YXIgc2hhcGVJZCA9IGUuYXR0cmlidXRlcy5pZDtcclxuICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gc2hhcGVGbG93Q2hhcnQuZmluZEluZGV4KGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHguc2hhcGVJZCA9PT0gc2hhcGVJZDtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dEZWxldGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICghYWxsb3dEZWxldGUpIHtcclxuICAgICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuRVhJU1RfREFUQSwgbnVsbCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBncmFwaC5yZW1vdmVDZWxscyhzZWxlY3Rpb24uY29sbGVjdGlvbi50b0FycmF5KCkpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCt6JzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICBjb21tYW5kTWFuYWdlci51bmRvKCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xyXG4gICAgICAgICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCt5JzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBub3RpZnkgPSBpc1NlbGVjdGVkQ2VsbFZpZXdJblNlbGVjdGlvbihzZWxlY3Rpb24pO1xyXG4gICAgICAgICAgICBjb21tYW5kTWFuYWdlci5yZWRvKCk7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jYW5jZWxTZWxlY3Rpb24oKTtcclxuICAgICAgICAgICAgaWYgKG5vdGlmeSkge1xyXG4gICAgICAgICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCthJzogKCkgPT4ge1xyXG4gICAgICAgICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChncmFwaC5nZXRFbGVtZW50cygpKTtcclxuICAgICAgICAgICAgcmVzZXRDZWxsVmlldygpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCtwbHVzJzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci56b29tKDAuMiwgeyBtYXg6IDUsIGdyaWQ6IDAuMiB9KTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwrbWludXMnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oLTAuMiwgeyBtaW46IDAuMiwgZ3JpZDogMC4yIH0pO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAna2V5ZG93bjpzaGlmdCc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2Nyb3NzaGFpcicpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAna2V5dXA6c2hpZnQnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuc2V0Q3Vyc29yKCdncmFiJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0aGlzXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gb25TZWxlY3Rpb25DaGFuZ2UoKSB7XHJcbiAgICAgIGNvbnN0IHsgY29sbGVjdGlvbiB9ID0gc2VsZWN0aW9uO1xyXG5cclxuICAgICAgaWYgKGNvbGxlY3Rpb24ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgY29uc3QgcHJpbWFyeUNlbGw6IGFueSA9IGNvbGxlY3Rpb24uZmlyc3QoKTtcclxuICAgICAgICBzZWxlY3Rpb24uZGVzdHJveVNlbGVjdGlvbkJveChwcmltYXJ5Q2VsbCk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29sbGVjdGlvbi5sZW5ndGggPj0gMikge1xyXG4gICAgICAgIHJlc2V0Q2VsbFZpZXcoKTtcclxuICAgICAgICBjbG9zZVRvb2xzKCk7XHJcblxyXG4gICAgICAgIGNvbGxlY3Rpb24uZWFjaChmdW5jdGlvbiAoY2VsbDogYW55KSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uY3JlYXRlU2VsZWN0aW9uQm94KGNlbGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gb3BlblRvb2xzKGNlbGxWaWV3LCBjb29yZGluYXRlcykge1xyXG4gICAgICBpZiAoIWNlbGxWaWV3KSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNsb3NlVG9vbHMoKTtcclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBjZWxsVmlldztcclxuICAgICAgY29uc3QgY2VsbCA9IGNlbGxWaWV3Lm1vZGVsO1xyXG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcclxuXHJcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jcmVhdGUoJyNpbnNwZWN0b3ItY29udGFpbmVyJywge1xyXG4gICAgICAgIGNlbGwsXHJcbiAgICAgICAgaW5wdXRzOiBpbnB1dHNbdHlwZV0sXHJcbiAgICAgICAgZ3JvdXBzOiB7XHJcbiAgICAgICAgICBnZW5lcmFsOiB7IGxhYmVsOiB0eXBlLCBpbmRleDogMSB9LFxyXG4gICAgICAgICAgZGVmYXVsdHM6IHsgbGFiZWw6IExBTkcuQlBNTi5ERUZBVUxUUywgaW5kZXg6IDIgfSxcclxuICAgICAgICAgIGZvbnRzaXplOiB7IGxhYmVsOiBMQU5HLkJQTU4uRk9OVF9TSVpFLCBpbmRleDogMyB9LFxyXG4gICAgICAgICAgYXBwZWFyYW5jZTogeyBsYWJlbDogTEFORy5CUE1OLkFQUEVBUkFOQ0UsIGluZGV4OiA0IH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ucmVzZXQoW10pO1xyXG4gICAgICAvLyBBZGQgdGhlIGNlbGwgaW50byB0aGUgc2VsZWN0aW9uIGNvbGxlY3Rpb24gc2lsZW50bHlcclxuICAgICAgLy8gc28gbm8gc2VsZWN0aW9uIGJveCBpcyByZW5kZXJlZCBhYm92ZSB0aGUgY2VsbFZpZXcuXHJcbiAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLmFkZChjZWxsLCB7IHNpbGVudDogdHJ1ZSB9KTtcclxuXHJcbiAgICAgIGlmIChjZWxsLmlzRWxlbWVudCgpKSB7XHJcbiAgICAgICAgbGV0IG1pblNpemU7XHJcblxyXG4gICAgICAgIGlmIChjZWxsIGluc3RhbmNlb2YgYnBtbjIuSGVhZGVyZWRQb29sKSB7XHJcbiAgICAgICAgICBtaW5TaXplID0gY2VsbC5nZXRNaW5pbWFsU2l6ZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBtaW5TaXplID0geyB3aWR0aDogMzAsIGhlaWdodDogMzAgfTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBcImJwbW4yLkhlYWRlcmVkUG9vbFwiICYmIGNvb3JkaW5hdGVzKSB7XHJcbiAgICAgICAgICBjcmVhdGVQb29sVG9vbHMoY2VsbFZpZXcsIGNvb3JkaW5hdGVzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZyZWVUcmFuc2Zvcm0gPSBuZXcgam9pbnQudWkuRnJlZVRyYW5zZm9ybSh7XHJcbiAgICAgICAgICBjZWxsVmlldyxcclxuICAgICAgICAgIGFsbG93T3J0aG9nb25hbFJlc2l6ZTogZmFsc2UsXHJcbiAgICAgICAgICBhbGxvd1JvdGF0aW9uOiBmYWxzZSxcclxuICAgICAgICAgIG1pbldpZHRoOiBtaW5TaXplLndpZHRoLFxyXG4gICAgICAgICAgbWluSGVpZ2h0OiBtaW5TaXplLmhlaWdodFxyXG4gICAgICAgIH0pLnJlbmRlcigpO1xyXG5cclxuICAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xyXG4gICAgICAgICAgY2VsbFZpZXcsXHJcbiAgICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgdHlwZTogJ3Rvb2xiYXInLFxyXG4gICAgICAgICAgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSxcclxuICAgICAgICAgIGJveENvbnRlbnQ6IChjZWxsVmlldykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gY2VsbFZpZXcubW9kZWwuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5FZGl0KSB7XHJcbiAgICAgICAgICBpZiAodHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaGFsby5yZW5kZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjZWxsLmlzTGluaygpKSB7XHJcbiAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XHJcbiAgICAgICAgY29uc3QgdG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xyXG4gICAgICAgICAgbmFtZTogJ2xpbmstcG9pbnRlcmRvd24nLFxyXG4gICAgICAgICAgdG9vbHM6IFtcclxuICAgICAgICAgICAgbmV3IG5zLlZlcnRpY2VzKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBbmNob3IoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFuY2hvcigpLFxyXG4gICAgICAgICAgICBuZXcgbnMuU291cmNlQXJyb3doZWFkKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5UYXJnZXRBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlNlZ21lbnRzKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5Cb3VuZGFyeSh7IHBhZGRpbmc6IDE1IH0pLFxyXG4gICAgICAgICAgICBuZXcgbnMuUmVtb3ZlKHsgb2Zmc2V0OiAtMjAsIGRpc3RhbmNlOiA0MCB9KVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjZWxsVmlldy5hZGRUb29scyh0b29sc1ZpZXcpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBRTVMtMjM2NDogc2hvdyBsaW5rIGFuZCBwb2l0ZXIgY2hhbmdlIHRvIGhhbmQgKi9cclxuICAgICAgaWYgKHdpbmRvd1tgZXZlbnRgXVtgdHlwZWBdID09PSAnbW91c2VvdmVyJyAmJiBlZGl0TW9kZSA9PT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBqb2ludC1lbGVtZW50YCk7XHJcbiAgICAgICAgaWYgKGxpc3QgJiYgbGlzdC5sZW5ndGgpIHtcclxuICAgICAgICAgIGNvbnN0IHNoYXBlSWQgPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnByZWZlci1mb3Itb2ZcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAobGlzdFtpXS5hdHRyaWJ1dGVzWzBdLm5vZGVWYWx1ZSAhPT0gc2hhcGVJZCkge1xyXG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsTW9kZWwgPSB3aW5kb3dbYFNIQVBFX0RFVEFJTF9NT0RFTGBdO1xyXG4gICAgICAgICAgICBpZiAoIXNoYXBlRGV0YWlsTW9kZWwpIHtcclxuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHNoYXBlRGV0YWlsTW9kZWwuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHguc2hhcGVJZCA9PT0gc2hhcGVJZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHtcclxuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdtb3ZlJztcclxuICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzaGFwZURldGFpbCA9IHNoYXBlRGV0YWlsTW9kZWxbaW5kZXhdO1xyXG4gICAgICAgICAgICBsZXQgY29ubmVjdGlvbk5hbWUgPSAnJztcclxuICAgICAgICAgICAgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0FDVElWSVRZO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuTGluaykge1xyXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTks7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5Eb2N1bWVudE9yUHJvY2Vzcykge1xyXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcclxuICAgICAgICAgICAgICBzd2l0Y2ggKHNoYXBlRGV0YWlsLmRvY3VtZW50TW9kZWwucmVsYXRlZEl0ZW1zWzBdLml0ZW1UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5kb2N1bWVudDpcclxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19ET0NVTUVOVDtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5wcm9jZXNzOlxyXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX1BST0NFU1M7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuYXJlYTpcclxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19BUkVBO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmhhbmRib29rOlxyXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0ZPTERFUjtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5wcm9jZXNzSW50ZXJjb25uZWN0ZWQ6XHJcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fSU5URVJDT05ORUNURURfUFJPQ0VTUztcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuRGV2aWF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19ERVZJQVRJT047XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5DaGVja2xpc3QpIHtcclxuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0NIRUNLTElTVDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNvbXBsaWFuY2UpIHtcclxuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0NPTVBMSUFOQ0VfUkVRVUlSRU1FTlQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkICE9PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkFjdGl2aXR5KSB7XHJcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAncG9pbnRlcic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcclxuICAgICAgICAgICAgICBjZWxsVmlldyxcclxuICAgICAgICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgICAgIGJveENvbnRlbnQ6IGNvbm5lY3Rpb25OYW1lXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBoYWxvLnJlbmRlcigpO1xyXG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XHJcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZXNpemUnKTtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2Nsb25lJyk7XHJcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XHJcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdmb3JrJyk7XHJcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc2hhcGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tcm90YXRpb24nKTtcclxuICAgICAgICBpZiAoc2hhcGVFbGVtZW50ICYmIHNoYXBlRWxlbWVudC5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICghc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5jb250YWlucygnam9pbnQtZnJlZS10cmFuc2Zvcm0nKSkge1xyXG4gICAgICAgICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QuYWRkKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHdpbmRvd1tgZXZlbnRgXVtgdHlwZWBdID09PSAnbW91c2VvdXQnICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgICAgY29uc3QgaGFsbyA9IG5ldyBqb2ludC51aS5IYWxvKHtcclxuICAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAgICAgdGhlbWU6ICdkZWZhdWx0JyxcclxuICAgICAgICAgIGJveENvbnRlbnQ6ICcnXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaGFsby5yZW5kZXIoKTtcclxuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVtb3ZlJyk7XHJcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3Jlc2l6ZScpO1xyXG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdjbG9uZScpO1xyXG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdsaW5rJyk7XHJcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XHJcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3JvdGF0ZScpO1xyXG4gICAgICAgIGNvbnN0IHNoYXBlRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ25vLXJvdGF0aW9uJyk7XHJcbiAgICAgICAgaWYgKHNoYXBlRWxlbWVudCAmJiBzaGFwZUVsZW1lbnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNoYXBlRWxlbWVudC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LnJlbW92ZSgnam9pbnQtZnJlZS10cmFuc2Zvcm0nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLyogUU1TLTIxMjU6IFNob3cgcHJvY2VzcyBjb25uZWN0IHR5cGUgKi9cclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0hPV19DT05ORUNUWVBFXSA9IHRydWU7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXSA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX1RZUEVdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy50eXBlO1xyXG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9GTE9XQ0hBUlRfTE9BRElOR10gPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvKiBRTVMtMTQwNDogQ3VzdG9taXphdGlvbiAqL1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJdID0gcGFwZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY2xvc2VUb29scygpIHtcclxuICAgICAgcGFwZXIucmVtb3ZlVG9vbHMoKTtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNsb3NlKCk7XHJcbiAgICAgIGpvaW50LnVpLkZyZWVUcmFuc2Zvcm0uY2xlYXIocGFwZXIpO1xyXG4gICAgICBmcmVlVHJhbnNmb3JtID0gbnVsbDtcclxuICAgICAgam9pbnQudWkuSGFsby5jbGVhcihwYXBlcik7XHJcblxyXG4gICAgICBjb25zdCBjZWxscyA9IGdyYXBoLmdldENlbGxzKCk7XHJcbiAgICAgIGNlbGxzLmZvckVhY2goKGNlbGwpID0+IHtcclxuICAgICAgICBpZiAoY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcpIHtcclxuICAgICAgICAgIGNlbGwuc2V0KCd6JywgLTEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaXNTZWxlY3RlZENlbGxWaWV3SW5TZWxlY3Rpb24oc2VsZWN0aW9uKSB7XHJcbiAgICAgIGNvbnN0IG1vZGVscyA9IHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSB8fCBbXTtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRTaGFwZUlkID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNFTEVDVEVEX1NIQVBFX0lEXTtcclxuICAgICAgcmV0dXJuICEhc2VsZWN0ZWRTaGFwZUlkICYmIG1vZGVscy5maWx0ZXIobW9kZWwgPT4gbW9kZWwuYXR0cmlidXRlcy5pZCA9PSBzZWxlY3RlZFNoYXBlSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHNob3dTdGF0dXMobWVzc2FnZSwgdHlwZSkge1xyXG4gICAgICAkKCcuc3RhdHVzJykucmVtb3ZlQ2xhc3MoJ2luZm8gZXJyb3Igc3VjY2VzcycpLmFkZENsYXNzKHR5cGUpLmh0bWwobWVzc2FnZSk7XHJcbiAgICAgICQoJyNzdGF0dXNiYXItY29udGFpbmVyJylcclxuICAgICAgICAuZGVxdWV1ZSgpXHJcbiAgICAgICAgLmFkZENsYXNzKCdhY3RpdmUnKVxyXG4gICAgICAgIC5kZWxheSgzMDAwKVxyXG4gICAgICAgIC5xdWV1ZSgoKSA9PiB7XHJcbiAgICAgICAgICAkKHRoaXMpLnJlbW92ZUNsYXNzKCdhY3RpdmUnKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiByZXBsYWNlTGluayhncmFwaCwgbGluaywgbGlua0NvbnN0cnVjdG9yKSB7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXHJcbiAgICAgIGNvbnN0IGxpbmsyID0gbmV3IGxpbmtDb25zdHJ1Y3Rvcih7XHJcbiAgICAgICAgc291cmNlOiBsaW5rLnNvdXJjZSgpLFxyXG4gICAgICAgIHRhcmdldDogbGluay50YXJnZXQoKSxcclxuICAgICAgICB2ZXJ0aWNlczogbGluay52ZXJ0aWNlcygpXHJcbiAgICAgIH0pO1xyXG4gICAgICBsaW5rLnJlbW92ZSh7IHJlcGxhY2VMaW5rOiB0cnVlIH0pO1xyXG4gICAgICBsaW5rMi5zZXQoJ3onLCAtMSk7XHJcbiAgICAgIGxpbmsyLmFkZFRvKGdyYXBoKTtcclxuICAgIH1cclxuXHJcbiAgICBncmFwaC5vbignY2hhbmdlJywgKGNlbGwsIG9wdCkgPT4ge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlVGV4dEluc2lkZShjZWxsKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZUxpbmtMYWJlbChjZWxsLCAxMik7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VBbGxpZ21lbnQoY2VsbCwgb3B0KTtcclxuICAgICAgaWYgKCFvcHQuaW5zcGVjdG9yIHx8ICFmcmVlVHJhbnNmb3JtIHx8IGNlbGwuZ2V0KCd0eXBlJykgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1pblNpemUgPSBjZWxsLmdldE1pbmltYWxTaXplKCk7XHJcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5XaWR0aCA9IG1pblNpemUud2lkdGg7XHJcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5IZWlnaHQgPSBtaW5TaXplLmhlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qIFRPT0xCQVIgKi9cclxuICAgIGNvbnN0IHRvb2xiYXIgPSBuZXcgam9pbnQudWkuVG9vbGJhcih7XHJcbiAgICAgIHRvb2xzOiB0b29sYmFyQ29uZmlnLnRvb2xzLFxyXG4gICAgICByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgcGFwZXJTY3JvbGxlcixcclxuICAgICAgICBjb21tYW5kTWFuYWdlclxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b29sYmFyQ29tbWFuZHMgPSB7XHJcbiAgICAgIHRvSlNPTjogKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd0ZlYXR1cmVzID0gJ21lbnViYXI9bm8sbG9jYXRpb249bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9bm8nO1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd05hbWUgPSBfLnVuaXF1ZUlkKCdqc29uX291dHB1dCcpO1xyXG4gICAgICAgIGNvbnN0IGpzb25XaW5kb3cgPSB3aW5kb3cub3BlbignJywgd2luZG93TmFtZSwgd2luZG93RmVhdHVyZXMpO1xyXG5cclxuICAgICAgICBqc29uV2luZG93LmRvY3VtZW50LndyaXRlKEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGxvYWRHcmFwaDogKCkgPT4ge1xyXG4gICAgICAgIGdkQXV0aCgoKSA9PiB7XHJcbiAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkaW5nLi4nLCAnaW5mbycpO1xyXG4gICAgICAgICAgZ2RMb2FkKChuYW1lLCBjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgZ3JhcGguZnJvbUpTT04oanNvbik7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxGaWxlTmFtZSA9IDxIVE1MQnV0dG9uRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKTtcclxuICAgICAgICAgICAgICBlbEZpbGVOYW1lLnZhbHVlID0gbmFtZS5yZXBsYWNlKC8uanNvbiQvLCAnJyk7XHJcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnbG9hZGVkLicsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdmYWlsZWQuJywgJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIHRydWUpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2F2ZUdyYXBoOiAoKSA9PiB7XHJcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcclxuICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmluZy4uJywgJ2luZm8nKTtcclxuICAgICAgICAgIC8vIGxldCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJykudmFsdWU7XHJcbiAgICAgICAgICBjb25zdCBuYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xyXG4gICAgICAgICAgZ2RTYXZlKG5hbWUudmFsdWUsIEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKSwgKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdzYXZlZC4nLCAnc3VjY2VzcycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uU2VsZWN0ZWQ6IChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGVtcCkge1xyXG4gICAgICAgICAgdGhpcy5qc29uVGVtcENvbnRlbnQgPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICB0aGlzLmlzVGVtcCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZlbnQuanNvbkNvbnRlbnQpIHtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9GTE9XQ0hBUlRfSURdID0gZXZlbnQuZmxvd0NoYXJ0SWQ7XHJcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXSA9IGV2ZW50Lmpzb25Db250ZW50O1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNTaG93Q29uZmlybU1lc3NhZ2UoKSkge1xyXG4gICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuQ0hBTkdJTkdfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ORVhUX0NIQU5HSU5HX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc2V0Q2VsbFZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkID0gZXZlbnQuZmxvd0NoYXJ0SWQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2xlYXI6ICgpID0+IHtcclxuICAgICAgICBncmFwaC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMucmVzZXRDZWxsVmlldygpO1xyXG4gICAgICB9LFxyXG4gICAgICBvbkRlbGV0ZVRlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkICYmXHJcbiAgICAgICAgICBkaWFncmFtVGVtcGxhdGUuZmxvd0NoYXJ0SWQgIT09ICcnICYmXHJcbiAgICAgICAgICBkaWFncmFtVGVtcGxhdGUuZmxvd0NoYXJ0SWQgIT09IGd1aWRIZWxwZXIuZW1wdHlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaXNEZWxldGVUZW1wbGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSB0cnVlO1xyXG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRFTEVURV9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvblNhdmVBc1RlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmVBc1RlbXBsYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGVtcCkge1xyXG4gICAgICAgICAgdGhpcy5qc29uVGVtcENvbnRlbnQgPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICB0aGlzLmlzVGVtcCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuU0FWRV9BU19URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25SZXNldFRvVGVtcFRlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IHRydWU7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuUkVTRVRfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjaGFuZ2VTbmFwTGluZXMoY2hlY2tlZCkge1xyXG4gICAgICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgICBzbmFwbGluZXMuc3RhcnRMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSB0aGlzLnNuYXBsaW5lcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc25hcGxpbmVzLnN0b3BMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIGFwcGx5T25TZWxlY3Rpb24obWV0aG9kKSB7XHJcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3RvRnJvbnQnKSB7XHJcbiAgICAgICAgICBjb25zdCB0eXBlID0gc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzWzBdLmdldCgndHlwZScpO1xyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JhcGguc3RhcnRCYXRjaCgnc2VsZWN0aW9uJyk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBtb2RlbFttZXRob2RdKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZ3JhcGguc3RvcEJhdGNoKCdzZWxlY3Rpb24nKTtcclxuICAgICAgfSxcclxuICAgICAgdG9nZ2xlRnVsbHNjcmVlbjogKCkgPT4ge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImNkay1vdmVybGF5LVwiXScpWzBdKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gIXRoaXMuaXNGdWxsU2NyZWVuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJjZGstb3ZlcmxheS1cIl0nKVswXT8uY2xhc3NMaXN0LnJlbW92ZSgnY2xvc2UtZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfY2RrLW92ZXJsYXknKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyJylbMF0/LmNsYXNzTGlzdC5yZW1vdmUoJ2p1c3RpZnktY29udGVudF9jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlZnRwYW5lbCcpPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYW5lbCcpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JpZ2h0cGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkUGFuZWwpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbC1leHBhbmRwYW5lbCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRePVwiY2RrLW92ZXJsYXktXCJdJylbMF0/LmNsYXNzTGlzdC5hZGQoJ2Nsb3NlLWZ1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX2Nkay1vdmVybGF5Jyk7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpWzBdPy5jbGFzc0xpc3QuYWRkKCdqdXN0aWZ5LWNvbnRlbnRfY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsZWZ0cGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyaWdodHBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZFBhbmVsKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwnKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKS5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbC1leHBhbmRwYW5lbCcpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpLnN0eWxlLmhlaWdodCA9ICc1MDBweCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdG9vbGJhci5vbih7XHJcbiAgICAgICd0by1qc29uOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b0pTT04sXHJcbiAgICAgICdsb2FkOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5sb2FkR3JhcGgsXHJcbiAgICAgICdzYXZlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5zYXZlR3JhcGgsXHJcbiAgICAgICdjbGVhcjpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25DbGVhcixcclxuICAgICAgJ3ByaW50OnBvaW50ZXJjbGljayc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgam9pbnRUb29sc0VsID0gcGFwZXIuc3ZnPy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqb2ludC10b29scycpO1xyXG4gICAgICAgIGlmIChqb2ludFRvb2xzRWwpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRUb29sc0VsLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgIGpvaW50VG9vbHNFbFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBqb2ludC5mb3JtYXQucHJpbnQocGFwZXIpO1xyXG4gICAgICB9LFxyXG4gICAgICAnc2F2ZUFzVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uU2F2ZUFzVGVtcGxhdGUsXHJcbiAgICAgICdzZWxlY3RUZW1wbGF0ZTpvcHRpb246c2VsZWN0JzogdG9vbGJhckNvbW1hbmRzLm9uU2VsZWN0ZWQsXHJcbiAgICAgICdkZWxldGVUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25EZWxldGVUZW1wbGF0ZSxcclxuICAgICAgJ3Jlc2V0VG9UZW1wVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uUmVzZXRUb1RlbXBUZW1wbGF0ZSxcclxuICAgICAgJ3RvLWZyb250OnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5hcHBseU9uU2VsZWN0aW9uLmJpbmQodGhpcywgJ3RvRnJvbnQnKSxcclxuICAgICAgJ3RvLWJhY2s6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9CYWNrJyksXHJcbiAgICAgICdzbmFwbGluZTpjaGFuZ2UnOiB0b29sYmFyQ29tbWFuZHMuY2hhbmdlU25hcExpbmVzLmJpbmQodGhpcyksXHJcbiAgICAgICdncmlkLXNpemU6Y2hhbmdlJzogcGFwZXIuc2V0R3JpZFNpemUuYmluZChwYXBlciksXHJcbiAgICAgICdmdWxsc2NyZWVuOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b2dnbGVGdWxsc2NyZWVuXHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCcjdG9vbGJhci1jb250YWluZXInKS5odG1sKCcnKTtcclxuICAgIHRvb2xiYXIucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjdG9vbGJhci1jb250YWluZXInKTtcclxuXHJcbiAgICBjb25zdCB6b29tVG9vbCA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcclxuICAgICAgLy8gaW5pdGkgYWxpemUgdG9vbHMgd2l0aCBkZWZhdWx0IHNldHRpbmdzXHJcbiAgICAgIHRvb2xzOiBbJ3pvb21Ub0ZpdCcsICd6b29tSW4nLCAnem9vbU91dCddLFxyXG4gICAgICByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgcGFwZXJTY3JvbGxlcixcclxuICAgICAgICBjb21tYW5kTWFuYWdlclxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB6b29tVG9vbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN6b29tVG9vbGJhcicpO1xyXG5cclxuICAgIG5ldyBqb2ludC51aS5Ub29sdGlwKHtcclxuICAgICAgdGFyZ2V0OiAnW2RhdGEtdG9vbHRpcF0nLFxyXG4gICAgICBjb250ZW50KGVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsLmRhdGFzZXQudG9vbHRpcDtcclxuICAgICAgfSxcclxuICAgICAgdG9wOiAnLmpvaW50LXRvb2xiYXInLFxyXG4gICAgICBwYWRkaW5nOiAxMCxcclxuICAgICAgZGlyZWN0aW9uOiAndG9wJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxyXG4gICAgc3RlbmNpbFxyXG4gICAgICAuZ2V0R3JhcGgoKVxyXG4gICAgICAuZ2V0KCdjZWxscycpXHJcbiAgICAgIC5lYWNoKChjZWxsKSA9PiB7XHJcbiAgICAgICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xyXG4gICAgICAgICAgdGFyZ2V0OiBgLmpvaW50LXN0ZW5jaWwgW21vZGVsLWlkPVwiJHtjZWxsLmlkfVwiXWAsXHJcbiAgICAgICAgICBjb250ZW50OiBjZWxsLmdldCgndHlwZScpLnNwbGl0KCcuJylbMV0sXHJcbiAgICAgICAgICBib3R0b206ICcuam9pbnQtc3RlbmNpbCcsXHJcbiAgICAgICAgICBkaXJlY3Rpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgcGFkZGluZzogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvKiBMb2FkICBwcm9jZXNzIGRpZ3JhbSAqL1xyXG4gICAgdGhpcy5sb2FkUHJvY2Vzc0RpYWdyYW0oanNvbkNvbnRlbnQpO1xyXG4gICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5wb3NpdGlvbkNvbnRlbnQoJ3RvcC1sZWZ0JywgeyBwYWRkaW5nOiA1MCwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcclxuXHJcbiAgICAvKiBTZXQgZyByYXBoIG9iamVjdCAqL1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkpPSU5UXSA9IGpvaW50O1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXSA9IGdyYXBoO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSXSA9IHBhcGVyO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXSA9IHBhcGVyU2Nyb2xsZXI7XHJcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuRElBR1JBTV9MT0FERUQsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICB9XHJcblxyXG4gIGxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudD86IHN0cmluZykge1xyXG4gICAgaWYgKCFqc29uQ29udGVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBncmFwaC5mcm9tSlNPTihqc29uQ29udGVudCk7XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVGVtcGxhdGUoZmxvd0NoYXJ0SWQ/OiBzdHJpbmcsIGRpYWdyYW1UZW1wbGF0ZT86IGFueSkge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgICAgaW5kZXg6IDEsXHJcbiAgICAgICAgICBjb250ZW50OiBkaWFncmFtVGVtcGxhdGUudGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgZmxvd0NoYXJ0SWQsXHJcbiAgICAgICAgICBuYW1lOiBkaWFncmFtVGVtcGxhdGUubmFtZSxcclxuICAgICAgICAgIGpzb25Db250ZW50OiBkaWFncmFtVGVtcGxhdGUuanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geC5jb250ZW50ID09PSBvcHRpb24uY29udGVudDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RJdGVtKGZsb3dDaGFydElkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5zcGxpY2UoXHJcbiAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGkuZmxvd0NoYXJ0SWQgPT09IGZsb3dDaGFydElkO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcEdyYXBoKCkge1xyXG4gICAgaWYgKHRoaXMuanNvblRlbXBDb250ZW50KSB7XHJcbiAgICAgIHRoaXMubG9hZFByb2Nlc3NEaWFncmFtKEpTT04ucGFyc2UodGhpcy5qc29uVGVtcENvbnRlbnQpKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNUZW1wID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRPcmlnaW5Gb3JTZWxmKCkge1xyXG4gICAgcmV0dXJuICcqJztcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCkge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LXNlbGVjdGlvbmApWzBdO1xyXG4gICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IEZsb3dDaGFydENvbnN0LlNFTEVDVF9URU1QTEFURTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SXRlbUZsb3dDaGFydElkKGZsb3dDaGFydElkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QgJiYgYXJyU2VsZWN0WzBdLm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuZm9yRWFjaCgoeCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGlmICh4LmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZCkge1xyXG4gICAgICAgICAgICB4LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtc2VsZWN0aW9uYClbMF07XHJcbiAgICAgICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IHguY29udGVudDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNTaG93Q29uZmlybU1lc3NhZ2UoKSB7XHJcbiAgICBjb25zdCBteUdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgIGNvbnN0IGpzb24gPSBteUdyYXBoLnRvSlNPTigpO1xyXG4gICAgaWYgKGpzb24uY2VsbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0gPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJhbnNpdGlvblBvaW50KGpzb25Db250ZW50OiBvYmplY3QsIHBhcGVyU2Nyb2xsZXI6IGFueSkge1xyXG4gICAgaWYgKGpzb25Db250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGNlbGxzID0ganNvbkNvbnRlbnRbYGNlbGxzYF07XHJcbiAgICAgIGlmIChjZWxscykge1xyXG4gICAgICAgIGxldCB4ID0gMDtcclxuICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGUucG9zaXRpb24gJiYgZS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgICB5ID0gZS5wb3NpdGlvbi55O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnggPCB4KSB7XHJcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZS5wb3NpdGlvbi55IDwgeSkge1xyXG4gICAgICAgICAgICAgIHkgPSBlLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHggIT09IDAgJiYgeSAhPT0gMCkge1xyXG4gICAgICAgICAgeCA9IHggPiAyMCA/IHggLSAyMCA6IHg7XHJcbiAgICAgICAgICB5ID0geSA+IDIwID8geSAtIDIwIDogeTtcclxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIudHJhbnNpdGlvblRvUG9pbnQoeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuU2hhcGVGdW5jdGlvbmFsaXR5KExBTkc6IGFueSkge1xyXG4gICAgY29uc3QgbXlDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgaWYgKCEhbXlDZWxsVmlldykge1xyXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcclxuICAgICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORywgbnVsbCk7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBteUNlbGxWaWV3Lm1vZGVsO1xyXG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgICAgY2VsbCxcclxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxyXG4gICAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRab29tVG9GaXQoZWRpdE1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb21Ub0ZpdCh7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQYXBlckNlbnRlcihlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvQ2VudGVyKHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBhcGVyVG9wTGVmdChlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvVG9wTGVmdCh7IHBhZGRpbmc6IDUwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTY3JvbGxUb0NvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tgZ3JhcGhgXTtcclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgaWYgKGdyYXBoICYmIHBhcGVyU2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QganNvbkNvbnRlbnRPYmogPSBncmFwaC50b0pTT04oKTtcclxuICAgICAgaWYgKGpzb25Db250ZW50T2JqICYmIGpzb25Db250ZW50T2JqLmNlbGxzLmxlbmd0aCkge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc2Nyb2xsVG9Db250ZW50KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFwZXJTY3JvbGxlci5jZW50ZXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VUZXh0SW5zaWRlKGNlbGw6IGFueSkge1xyXG4gICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5FdmVudCcpIHtcclxuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZldpZHRoID0gJzIwJSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmSGVpZ2h0ID0gJzIwJSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0ge1xyXG4gICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICBoZWlnaHQ6IDAsXHJcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICd0b3AnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZldpZHRoID0gJzcwJSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmSGVpZ2h0ID0gJzcwJSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkdhdGV3YXknIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5Db252ZXJzYXRpb24nIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhT2JqZWN0JyB8fFxyXG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRGF0YVN0b3JlJ1xyXG4gICAgKSB7XHJcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWxbJ3RleHRXcmFwJ10gPSB7XHJcbiAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgIGhlaWdodDogMCxcclxuICAgICAgICAgIGVsbGlwc2lzOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ3RvcCc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VMaW5rTGFiZWwoY2VsbDogYW55LCBkZWZTaXplOiBudW1iZXIpIHtcclxuICAgIGlmIChjZWxsLmlzTGluaygpKSB7XHJcbiAgICAgIGxldCBzaXplID0gZGVmU2l6ZTtcclxuICAgICAgbGV0IHJlZlBvcyA9IDA7XHJcbiAgICAgIGNvbnN0IGxpbmtJZCA9IGNlbGwuaWQ7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXHJcbiAgICAgIGdyYXBoLmdldExpbmtzKCkuZXZlcnkoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAobGlua0lkID09PSBlLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZlBvcyArPSAxO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXT8uYXR0cmlidXRlcy5hdHRycy50ZXh0ICYmXHJcbiAgICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdPy5hdHRyaWJ1dGVzLmF0dHJzLnRleHRbJ2ZvbnQtc2l6ZSddXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNpemUgPSBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10/LmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ107XHJcbiAgICAgIH1cclxuICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdPy5wcm9wKCdsYWJlbHMvMC9hdHRycy9sYWJlbC9mb250U2l6ZScsIHNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VBbGxpZ21lbnQoY2VsbDogYW55LCBvcHQ6IGFueSkge1xyXG4gICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIG9wdC5kaXJlY3Rpb24gJiZcclxuICAgICAgKG9wdC5kaXJlY3Rpb24gPT09ICd0b3AtcmlnaHQnIHx8XHJcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcclxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAnYm90dG9tLXJpZ2h0JyB8fFxyXG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tbGVmdCcpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xyXG4gICAgICBjb25zdCBoZWFkZXJMYWJlbEFuY2hvciA9IGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbFsndGV4dC1hbmNob3InXTtcclxuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgaGVhZGVyTGFiZWxBbmNob3IsIGhlaWdodCk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgbGFzdCBsYW5lIHZhbHVlXHJcbiAgICAgIGlmICghdGhpcy5pc1VuZGVmaW5lZFNpemUoY2VsbC5hdHRyaWJ1dGVzKSkge1xyXG4gICAgICAgIGNvbnN0IGggPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuZ2V0VG90YWxMYW5lSGVpZ2h0KGNlbGwuYXR0cmlidXRlcyk7XHJcbiAgICAgICAgY29uc3QgYiA9IGggLSB0O1xyXG4gICAgICAgIGlmIChiID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcclxuXHJcbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHMgPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMuc2xpY2UoLTEpWzBdLnNpemUgKyBiO1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgIGNlbGwuYXR0cmlidXRlcy5sYW5lc1tpbmRleF0uc2l6ZSA9IHM7XHJcblxyXG4gICAgICAgICAgY29uc3QgbGFuZSA9IGBsYW5lc18ke2luZGV4fWA7XHJcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0uc2l6ZSA9IHM7XHJcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0udGFrZW5VcFNwYWNlQnlMYW5lQW5kU3VibGFuZXMgPSBzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcHQucHJvcGVydHlQYXRoICYmIG9wdC5wcm9wZXJ0eVBhdGggPT09ICdhdHRycy9oZWFkZXJMYWJlbC90ZXh0LWFuY2hvcicpIHtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xyXG4gICAgICBjb25zdCB0ZXh0QW5jaG9yID0gb3B0LnByb3BlcnR5VmFsdWU7XHJcbiAgICAgIHRoaXMuc2V0SGVhZGVyQXR0cmlidXRlKGNlbGwsIHRleHRBbmNob3IsIGhlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbDogYW55LCB0ZXh0QW5jaG9yOiBzdHJpbmcsIGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICBzd2l0Y2ggKHRleHRBbmNob3IpIHtcclxuICAgICAgY2FzZSAnZW5kJzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IDg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21pZGRsZSc6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdzdGFydCc6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLSA4O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gaGVpZ2h0IC8gMjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVW5kZWZpbmVkU2l6ZShhdHRyaWJ1dGVzKSB7XHJcbiAgICBsZXQgYlJlc3VsdCA9IGZhbHNlO1xyXG4gICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGgpIHtcclxuICAgICAgYXR0cmlidXRlcy5sYW5lcy5ldmVyeSgoZSkgPT4ge1xyXG4gICAgICAgIGlmICghZS5zaXplKSB7XHJcbiAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcykge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgIGlmIChlLnNpemUpIHtcclxuICAgICAgICAgIHRvdGFsICs9IGUuc2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvdGFsO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlhZ3JhbVRlbXBsYXRlcyhkaWFncmFtVGVtcGxhdGVzOiBEaWFncmFtVGVtcGxhdGVzW10pIHtcclxuICAgIGlmICh0b29sYmFyQ29uZmlnICYmIHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgICAgIGluZGV4OiAxLFxyXG4gICAgICAgICAgICBjb250ZW50OiB4LnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IHguZmxvd0NoYXJ0SWQsXHJcbiAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IHguanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB4LmNvbnRlbnQudG9Mb3dlckNhc2UoKSA9PT0gb3B0aW9uLmNvbnRlbnQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRDZWxsVmlldygpIHtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVBvb2xUb29scyhwb29sVmlldywgY29vcmRpbmF0ZXMpIHtcclxuICB2YXIgcG9vbCA9IHBvb2xWaWV3Lm1vZGVsO1xyXG5cclxuICAvLyBJZiB0aGVyZSBpcyBhIGxhbmUgdW5kZXIgdGhlIHBvaW50ZXIgKG1vdXNlL3RvdWNoKSxcclxuICAvLyBhZGQgdGhlIHN3aW1sYW5lIHRvb2xzIGFuZCByZW1vdmUgdGhlIEZyZWVUcmFuc2Zvcm0gZnJvbSB0aGUgY2VsbFxyXG4gIHZhciBsYW5lc0lkcyA9IHBvb2wuZ2V0TGFuZXNGcm9tUG9pbnQoY29vcmRpbmF0ZXMpO1xyXG4gIGlmIChsYW5lc0lkcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICB2YXIgbGFuZUlkID0gbGFuZXNJZHNbMF07XHJcblxyXG4gIHZhciBib3VuZGFyeVRvb2wgPSBuZXcgam9pbnQuZWxlbWVudFRvb2xzLlN3aW1sYW5lQm91bmRhcnkoe1xyXG4gICAgbGFuZUlkOiBsYW5lSWQsXHJcbiAgICBwYWRkaW5nOiAwLFxyXG4gICAgYXR0cmlidXRlczoge1xyXG4gICAgICAnZmlsbCc6ICdub25lJyxcclxuICAgICAgJ3N0cm9rZS13aWR0aCc6IDMsXHJcbiAgICAgICdzdHJva2UnOiAnIzM0OThkYidcclxuICAgIH1cclxuICB9KTtcclxuICB2YXIgdHJhbnNmb3JtVG9vbCA9IG5ldyBqb2ludC5lbGVtZW50VG9vbHMuU3dpbWxhbmVUcmFuc2Zvcm0oe1xyXG4gICAgbGFuZUlkOiBsYW5lSWQsXHJcbiAgICBtaW5TaXplOiA2MCxcclxuICAgIHBhZGRpbmc6IDAsXHJcbiAgfSk7XHJcbiAgdmFyIGVsZW1lbnRUb29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICB0b29sczogW2JvdW5kYXJ5VG9vbCwgdHJhbnNmb3JtVG9vbF1cclxuICB9KTtcclxuICBwb29sVmlldy5hZGRUb29scyhlbGVtZW50VG9vbHNWaWV3KTtcclxuICBqb2ludC51aS5GcmVlVHJhbnNmb3JtLmNsZWFyKHBhcGVyKTtcclxufVxyXG4iXX0=
|
1477
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicW1zLWJwbW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvc2VydmljZXMvcW1zLWJwbW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx5Q0FBeUM7QUFDekMsNERBQTREO0FBQzVELHNDQUFzQztBQUN0Qyx1REFBdUQ7QUFDdkQsaURBQWlEO0FBQ2pELHNEQUFzRDtBQUN0RCwyQkFBMkI7QUFDM0IsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN0RCxPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQztBQUM1QixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLGlCQUFpQixNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sZUFBZSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUNyRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUNyRyxPQUFPLFVBQVUsTUFBTSxxREFBcUQsQ0FBQztBQUU3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQy9GLE9BQU8sa0JBQWtCLE1BQU0sNkNBQTZDLENBQUM7OztBQUs3RSxJQUFJLEtBQVUsQ0FBQztBQUNmLElBQUksS0FBVSxDQUFDO0FBQ2YsSUFBSSxTQUFjLENBQUM7QUFDbkIsSUFBSSxhQUFrQixDQUFDO0FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FB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MUIsc0RBQXNEO0lBQ3RELG9FQUFvRTtJQUNwRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbkQsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPO0lBQ2xDLElBQUksTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV6QixJQUFJLFlBQVksR0FBRyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7UUFDekQsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsQ0FBQztRQUNWLFVBQVUsRUFBRTtZQUNWLE1BQU0sRUFBRSxNQUFNO1lBQ2QsY0FBYyxFQUFFLENBQUM7WUFDakIsUUFBUSxFQUFFLFNBQVM7U0FDcEI7S0FDRixDQUFDLENBQUM7SUFDSCxJQUFJLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFDM0QsTUFBTSxFQUFFLE1BQU07UUFDZCxPQUFPLEVBQUUsRUFBRTtRQUNYLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQyxDQUFDO0lBQ0gsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBQzdDLEtBQUssRUFBRSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUM7S0FDckMsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3BDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXHJcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cclxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXHJcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZSB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9lbnVtcy9zaGFwZS1mbG93LWNoYXJ0LWNvbm5lY3Rpb24tdHlwZSc7XHJcbmltcG9ydCBJbnNwZWN0b3JGdW5jdGlvbiBmcm9tICcuLi9jb21tb24vam9pbnRKUy9icG1uL2luc3BlY3Rvci5mdW5jdGlvbic7XHJcbmltcG9ydCBUb29sYmFyRnVuY3Rpb24gZnJvbSAnLi4vY29tbW9uL2pvaW50SlMvYnBtbi90b29sYmFyLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgRmxvd0NoYXJ0Q29uc3QgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21tb24vY29uc3RhbnRzL2NrZWRpdG9yRmxvd2NoYXJ0LmNvbnN0JztcclxuaW1wb3J0IHsgRmxvd2NoYXJ0Vmlld01vZGUgfSBmcm9tICcuLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9jb21tb24vZW51bXMvZmxvd2NoYXJ0LXZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IGd1aWRIZWxwZXIgZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2hlbHBlci9ndWlkSGVscGVyJztcclxuaW1wb3J0IHsgRGlhZ3JhbVRlbXBsYXRlcyB9IGZyb20gJy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL21vZGVscy9kaWFncmFtLXRlbXBsYXRlLm1vZGVsJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuL3RyYW5zbGF0aW9uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcy9pbnRlcm5hbC9TdWJqZWN0JztcclxuaW1wb3J0IHsgUmVsYXRlZEl0ZW1UeXBlIH0gZnJvbSAnLi4vcW1zLWNrZWRpdG9yLWNvbXBvbmVudHMvY29tbW9uL2VudW1zL3JlbGF0ZWQtdG8taXRlbS10eXBlJztcclxuaW1wb3J0IEJQTU5DdXN0b21GdW5jdGlvbiBmcm9tICcuLi9jb21tb24vam9pbnRKUy9icG1uL2JwbW4uY3VzdG9tLmZ1bmN0aW9uJztcclxuXHJcbi8qIERlY2xhcmUgam9pbnRqcyBvYmplY3QgKi9cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXZhclxyXG5kZWNsYXJlIHZhciBqb2ludDogYW55O1xyXG5sZXQgZ3JhcGg6IGFueTtcclxubGV0IHBhcGVyOiBhbnk7XHJcbmxldCBzZWxlY3Rpb246IGFueTtcclxubGV0IHRvb2xiYXJDb25maWc6IGFueTtcclxuY29uc3QgYnBtbjIgPSBqb2ludC5zaGFwZXMuYnBtbjI7XHJcbmNvbnN0IHN0YW5kYXJkID0gam9pbnQuc2hhcGVzLnN0YW5kYXJkO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcG1uU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIGlzU2F2ZUFzVGVtcGxhdGUgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNEZWxldGVUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBpc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XHJcbiAgcHVibGljIGlzVGVtcCA9IHRydWU7XHJcbiAgcHVibGljIGpzb25UZW1wQ29udGVudCA9ICcnO1xyXG4gIHB1YmxpYyBpc1Jlc2V0ID0gZmFsc2U7XHJcbiAgcHVibGljIGlzU2VsZWN0ZWRUZW1wbGF0ZSA9IGZhbHNlO1xyXG4gIHB1YmxpYyBqc29uT3JpZ2luYWxDb250ZW50ID0gJyc7XHJcbiAgcHVibGljIGlzRnVsbFNjcmVlbiA9IHRydWU7XHJcbiAgcHVibGljIGlzRXhwYW5kZWRQYW5lbCA9IHRydWU7XHJcbiAgTEFORzogYW55O1xyXG4gIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UsXHJcbiAgKSB7XHJcblxyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkRGlhZ3JhbShcclxuICAgIGRpYWdyYW1UZW1wbGF0ZXM6IGFueSxcclxuICAgIGRpYWdyYW1UZW1wbGF0ZTogYW55LFxyXG4gICAgYnBtblRoZW1lOiBzdHJpbmcsXHJcbiAgICBqc29uQ29udGVudDogYW55LFxyXG4gICAgZWRpdE1vZGU6IGFueSxcclxuICAgIHNoYXBlSW1hZ2VzPzogYW55LFxyXG4gICAgdG9vbGJhckNvbmZpZ3VyYXRpb24/OiBhbnksXHJcbiAgICBsYW5ndWFnZT86IHN0cmluZ1xyXG4gICkge1xyXG4gICAgaWYgKCFsYW5ndWFnZSkge1xyXG4gICAgICB0aGlzLkxBTkcgPSB0aGlzLnRyYW5zbGF0ZS5nZXRPYmplY3RMYW5nKCdlbicpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7IHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcobGFuZ3VhZ2UpIH1cclxuICAgIHRoaXMuZXhjdXRlZEJ1aWxkRGlhZ3JhbShcclxuICAgICAgZGlhZ3JhbVRlbXBsYXRlcyxcclxuICAgICAgZGlhZ3JhbVRlbXBsYXRlLFxyXG4gICAgICBicG1uVGhlbWUsXHJcbiAgICAgIGpzb25Db250ZW50LFxyXG4gICAgICBlZGl0TW9kZSxcclxuICAgICAgdGhpcy5MQU5HLFxyXG4gICAgICBzaGFwZUltYWdlcyxcclxuICAgICAgdG9vbGJhckNvbmZpZ3VyYXRpb25cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBleGN1dGVkQnVpbGREaWFncmFtKFxyXG4gICAgZGlhZ3JhbVRlbXBsYXRlczogYW55LFxyXG4gICAgZGlhZ3JhbVRlbXBsYXRlOiBhbnksXHJcbiAgICBicG1uVGhlbWU6IHN0cmluZyxcclxuICAgIGpzb25Db250ZW50OiBhbnksXHJcbiAgICBlZGl0TW9kZTogYW55LFxyXG4gICAgTEFORzogYW55LFxyXG4gICAgc2hhcGVJbWFnZXM/OiBhbnksXHJcbiAgICB0b29sYmFyQ29uZmlndXJhdGlvbj86IGFueVxyXG4gICkge1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LklTX05PVF9TSE9XX0FHQUlOXSA9IGZhbHNlO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkVESVRfTU9ERV0gPSBlZGl0TW9kZTtcclxuICAgIGpvaW50LnNldFRoZW1lKGJwbW5UaGVtZSk7XHJcblxyXG4gICAganNvbkNvbnRlbnQgPyBqc29uQ29udGVudCA9IEpTT04ucGFyc2UoanNvbkNvbnRlbnQpIDoganNvbkNvbnRlbnQgPSAnJztcclxuXHJcbiAgICBjb25zdCBnZEF1dGggPSB3aW5kb3dbYGdkQXV0aGBdO1xyXG4gICAgY29uc3QgZ2RMb2FkID0gd2luZG93W2BnZExvYWRgXTtcclxuICAgIGNvbnN0IGdkU2F2ZSA9IHdpbmRvd1tgZ2RTYXZlYF07XHJcbiAgICBjb25zdCBpbnB1dHMgPSBJbnNwZWN0b3JGdW5jdGlvbi5nZXRJbnNwZWN0b3JDb25maWd1cmF0aW9uKGJwbW4yLCBMQU5HLCBzaGFwZUltYWdlcyk7XHJcblxyXG4gICAgbGV0IGZyZWVUcmFuc2Zvcm0gPSBudWxsO1xyXG5cclxuICAgIGlmICghdG9vbGJhckNvbmZpZ3VyYXRpb24pXHJcbiAgICAgIHRvb2xiYXJDb25maWcgPSBUb29sYmFyRnVuY3Rpb24uZ2V0VG9vbGJhckNvbmZpZ3VyYXRpb24oTEFORyk7XHJcbiAgICBlbHNlXHJcbiAgICAgIHRvb2xiYXJDb25maWcgPSB0b29sYmFyQ29uZmlndXJhdGlvbjtcclxuICAgIC8qIFFNUy0xNDA0OiBDdXN0b21pemF0aW9uOiBBZGQgdGVtcGxhdGUgbGlzdCAqL1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMgJiYgZGlhZ3JhbVRlbXBsYXRlcykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICBkaWFncmFtVGVtcGxhdGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IHtcclxuICAgICAgICAgICAgaW5kZXg6IGl0ZW0uaW5kZXgsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0udGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgICBmbG93Q2hhcnRJZDogaXRlbS5mbG93Q2hhcnRJZCxcclxuICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgICAgICBqc29uQ29udGVudDogaXRlbS5qc29uQ29udGVudCxcclxuICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHguaW5kZXggPT09IG9wdGlvbi5pbmRleDtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBncmFwaCA9IG5ldyBqb2ludC5kaWEuR3JhcGgoeyB0eXBlOiAnYnBtbicgfSk7XHJcblxyXG4gICAgLy8gb3ZlcndyaXRlIGN1c3RvbSBmdW5jdGlvblxyXG4gICAgQlBNTkN1c3RvbUZ1bmN0aW9uLmN1c3RvbUpvaW50SlNCUE1OKCk7XHJcblxyXG4gICAgY29uc3QgY29tbWFuZE1hbmFnZXIgPSBuZXcgam9pbnQuZGlhLkNvbW1hbmRNYW5hZ2VyKHsgZ3JhcGggfSk7XHJcbiAgICBjb25zdCBrZXlib2FyZCA9IG5ldyBqb2ludC51aS5LZXlib2FyZCgpO1xyXG4gICAgY29uc3QgY2xpcGJvYXJkID0gbmV3IGpvaW50LnVpLkNsaXBib2FyZCgpO1xyXG5cclxuICAgIHBhcGVyID0gbmV3IGpvaW50LmRpYS5QYXBlcih7XHJcbiAgICAgIHdpZHRoOiA4MDAsXHJcbiAgICAgIGhlaWdodDogNjAwLFxyXG4gICAgICBtb2RlbDogZ3JhcGgsXHJcbiAgICAgIGdyaWRTaXplOiBlZGl0TW9kZSAhPT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldyA/IDUgOiAxMCxcclxuICAgICAgZHJhd0dyaWQ6IGVkaXRNb2RlICE9PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3LFxyXG4gICAgICBhc3luYzogdHJ1ZSxcclxuICAgICAgc29ydGluZzogam9pbnQuZGlhLlBhcGVyLnNvcnRpbmcuQVBQUk9YLFxyXG4gICAgICBpbnRlcmFjdGl2ZTogeyBsaW5rTW92ZTogZmFsc2UgfSxcclxuICAgICAgc25hcExhYmVsczogdHJ1ZSxcclxuICAgICAgLy8gQ29ubmVjdGlvbnNcclxuICAgICAgZGVmYXVsdExpbmsoZWxlbWVudFZpZXcpIHtcclxuICAgICAgICByZXR1cm4gbmV3IGJwbW4yLkZsb3coe1xyXG4gICAgICAgICAgejogZWxlbWVudFZpZXcubW9kZWwuZ2V0KCd6JykgLSAxLFxyXG4gICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgbGluZToge1xyXG4gICAgICAgICAgICAgIGZsb3dUeXBlOiAnc2VxdWVuY2UnXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSxcclxuICAgICAgdmFsaWRhdGVDb25uZWN0aW9uKGNlbGxWaWV3UywgbWFnbmV0UywgY2VsbFZpZXdULCBtYWduZXRULCBlbmQpIHtcclxuICAgICAgICBjb25zdCBzb3VyY2UgPSBjZWxsVmlld1MubW9kZWw7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gY2VsbFZpZXdULm1vZGVsO1xyXG4gICAgICAgIC8vIGRvbid0IGFsbG93IGxvb3AgbGlua3NcclxuICAgICAgICBpZiAoc291cmNlID09PSB0YXJnZXQpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgbGluayB0byBsaW5rIGNvbm5lY3Rpb25cclxuICAgICAgICBpZiAoc291cmNlLmlzTGluaygpKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0YXJnZXQuaXNMaW5rKCkpIHtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgZ3JvdXAgY29ubmVjdGlvbnNcclxuICAgICAgICBjb25zdCBzb3VyY2VUeXBlID0gc291cmNlLmdldCgndHlwZScpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldFR5cGUgPSB0YXJnZXQuZ2V0KCd0eXBlJyk7XHJcbiAgICAgICAgaWYgKHNvdXJjZVR5cGUgPT09ICdicG1uMi5Hcm91cCcgfHwgdGFyZ2V0VHlwZSA9PT0gJ2JwbW4yLkdyb3VwJykge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSxcclxuICAgICAgZGVmYXVsdEFuY2hvcjoge1xyXG4gICAgICAgIG5hbWU6ICdwZXJwZW5kaWN1bGFyJ1xyXG4gICAgICB9LFxyXG4gICAgICBkZWZhdWx0Q29ubmVjdGlvblBvaW50OiB7XHJcbiAgICAgICAgbmFtZTogJ2JvdW5kYXJ5JyxcclxuICAgICAgICBhcmdzOiB7IHN0cm9rZTogdHJ1ZSB9XHJcbiAgICAgIH0sXHJcbiAgICAgIC8vIEVtYmVkZGluZ1xyXG4gICAgICBlbWJlZGRpbmdNb2RlOiB0cnVlLFxyXG4gICAgICBmcm9udFBhcmVudE9ubHk6IHRydWUsXHJcbiAgICAgIHZhbGlkYXRlRW1iZWRkaW5nKGNoaWxkVmlldywgcGFyZW50Vmlldykge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFR5cGUgPSBwYXJlbnRWaWV3Lm1vZGVsLmdldCgndHlwZScpO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkVHlwZSA9IGNoaWxkVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICBpZiAocGFyZW50VHlwZSA9PT0gJ2JwbW4yLkhlYWRlcmVkUG9vbCcgJiYgY2hpbGRUeXBlICE9PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwYXJlbnRUeXBlID09PSAnYnBtbjIuQWN0aXZpdHknICYmIGNoaWxkVHlwZSA9PT0gJ2JwbW4yLkV2ZW50Jykge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfSxcclxuICAgICAgLy8gSGlnaGxpZ2h0aW5nXHJcbiAgICAgIGhpZ2hsaWdodGluZzoge1xyXG4gICAgICAgIGRlZmF1bHQ6IHtcclxuICAgICAgICAgIG5hbWU6ICdtYXNrJyxcclxuICAgICAgICAgIG9wdGlvbnM6IHtcclxuICAgICAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgICAgICBzdHJva2U6ICcjMzQ5OGRiJyxcclxuICAgICAgICAgICAgICAnc3Ryb2tlLXdpZHRoJzogMyxcclxuICAgICAgICAgICAgICAnc3Ryb2tlLWxpbmVqb2luJzogJ3JvdW5kJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KS5vbih7XHJcbiAgICAgICdibGFuazpwb2ludGVyZG93bic6IChldnQsIHgsIHkpID0+IHtcclxuICAgICAgICBjbG9zZVRvb2xzKCk7XHJcbiAgICAgICAgdGhpcy5yZXNldENlbGxWaWV3KCk7XHJcbiAgICAgICAgLy8gc2VsZWN0aW9uLnN0YXJ0U2VsZWN0aW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgICAgaWYgKGtleWJvYXJkLmlzQWN0aXZlKCdzaGlmdCcsIGV2dCkpIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5zdGFydFNlbGVjdGluZyhldnQsIHgsIHkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgJ2JsYW5rOmNvbnRleHRtZW51JzogKGV2dCwgeCwgeSkgPT4ge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc3RhcnRQYW5uaW5nKGV2dCwgeCwgeSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnY2VsbDpwb2ludGVydXAnOiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICBjb25zdCBjZWxsID0gY2VsbFZpZXcubW9kZWw7XHJcbiAgICAgICAgY29uc3QgeyBjb2xsZWN0aW9uIH0gPSBzZWxlY3Rpb247XHJcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24uaW5jbHVkZXMoY2VsbCkpIHsgcmV0dXJuOyB9XHJcbiAgICAgICAgY29sbGVjdGlvbi5yZXNldChbY2VsbF0pO1xyXG4gICAgICAgIG9wZW5Ub29scyhjZWxsVmlldywgbnVsbCk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAnbGluazptb3VzZWVudGVyJzogKGxpbmtWaWV3KSA9PiB7XHJcbiAgICAgICAgLy8gT3BlbiB0b29sIG9ubHkgaWYgdGhlcmUgaXMgbm9uZSB5ZXRcclxuICAgICAgICBpZiAobGlua1ZpZXcuaGFzVG9vbHMoKSkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbnMgPSBqb2ludC5saW5rVG9vbHM7XHJcbiAgICAgICAgY29uc3QgdG9vbHNWaWV3ID0gbmV3IGpvaW50LmRpYS5Ub29sc1ZpZXcoe1xyXG4gICAgICAgICAgbmFtZTogJ2xpbmstaG92ZXInLFxyXG4gICAgICAgICAgdG9vbHM6IFtcclxuICAgICAgICAgICAgbmV3IG5zLlZlcnRpY2VzKHsgdmVydGV4QWRkaW5nOiBmYWxzZSB9KSxcclxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFycm93aGVhZCgpLFxyXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QXJyb3doZWFkKClcclxuICAgICAgICAgIF1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgbGlua1ZpZXcuYWRkVG9vbHModG9vbHNWaWV3KTtcclxuICAgICAgfSxcclxuXHJcbiAgICAgICdsaW5rOm1vdXNlbGVhdmUnOiAobGlua1ZpZXcpID0+IHtcclxuICAgICAgICAvLyBSZW1vdmUgb25seSB0aGUgaG92ZXIgdG9vbCwgbm90IHRoZSBwb2ludGVyZG93biB0b29sXHJcbiAgICAgICAgaWYgKGxpbmtWaWV3Lmhhc1Rvb2xzKCdsaW5rLWhvdmVyJykpIHtcclxuICAgICAgICAgIGxpbmtWaWV3LnJlbW92ZVRvb2xzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG5cclxuICAgICAgJ2xpbms6Y29ubmVjdCc6IChsaW5rVmlldykgPT4ge1xyXG4gICAgICAgIC8vIENoYW5nZSB0aGUgbGluayB0eXBlIGJhc2VkIG9uIHRoZSBjb25uZWN0ZWQgZWxlbWVudHNcclxuICAgICAgICBjb25zdCBsaW5rID0gbGlua1ZpZXcubW9kZWw7XHJcbiAgICAgICAgY29uc3Qgc291cmNlID0gbGluay5nZXRTb3VyY2VDZWxsKCk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gbGluay5nZXRUYXJnZXRDZWxsKCk7XHJcbiAgICAgICAgaWYgKCFzb3VyY2UgfHwgIXRhcmdldCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0eXBlcyA9IFtzb3VyY2UuZ2V0KCd0eXBlJyksIHRhcmdldC5nZXQoJ3R5cGUnKV07XHJcbiAgICAgICAgY29uc3QgbGlua1R5cGUgPSBsaW5rLmdldCgndHlwZScpO1xyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Bbm5vdGF0aW9uJykgPiAtMSkge1xyXG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuQW5ub3RhdGlvbkxpbmsnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlcGxhY2VMaW5rKGdyYXBoLCBsaW5rLCBicG1uMi5Bbm5vdGF0aW9uTGluayk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5Db252ZXJzYXRpb24nKSA+IC0xKSB7XHJcbiAgICAgICAgICBpZiAobGlua1R5cGUgPT09ICdicG1uMi5Db252ZXJzYXRpb25MaW5rJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuQ29udmVyc2F0aW9uTGluayk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlcy5pbmRleE9mKCdicG1uMi5EYXRhT2JqZWN0JykgPiAtMSkge1xyXG4gICAgICAgICAgaWYgKGxpbmtUeXBlID09PSAnYnBtbjIuRGF0YUFzc29jaWF0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRGF0YUFzc29jaWF0aW9uKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVzLmluZGV4T2YoJ2JwbW4yLkRhdGFTdG9yZScpID4gLTEpIHtcclxuICAgICAgICAgIGlmIChsaW5rVHlwZSA9PT0gJ2JwbW4yLkRhdGFBc3NvY2lhdGlvbicpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGJwbW4yLkRhdGFBc3NvY2lhdGlvbik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsaW5rVHlwZSAhPT0gJ2JwbW4yLkZsb3cnKSB7XHJcbiAgICAgICAgICByZXBsYWNlTGluayhncmFwaCwgbGluaywgYnBtbjIuRmxvdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAnZWxlbWVudDptb3VzZW92ZXInOiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICBpZiAoZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgb3BlblRvb2xzKGNlbGxWaWV3LCBudWxsKTtcclxuICAgICAgfSxcclxuICAgICAgJ2VsZW1lbnQ6bW91c2VvdXQnOiAoY2VsbFZpZXcpID0+IHtcclxuICAgICAgICBpZiAoZWRpdE1vZGUgIT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgb3BlblRvb2xzKGNlbGxWaWV3LCBudWxsKTtcclxuICAgICAgfSxcclxuICAgICAgJ2VsZW1lbnQ6cG9pbnRlcmRvd24nOiAoY2VsbFZpZXcsIGV2dCwgeCwgeSkgPT4ge1xyXG4gICAgICAgIGlmIChlZGl0TW9kZSAhPT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldykge1xyXG4gICAgICAgICAgaWYgKGtleWJvYXJkLmlzQWN0aXZlKCdjdHJsIG1ldGEnLCBldnQpKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxlY3Rpb24uY29sbGVjdGlvbi5maW5kKGZ1bmN0aW9uIChjZWxsKSB7IHJldHVybiBjZWxsLmlzTGluaygpIH0pKSB7XHJcbiAgICAgICAgICAgICAgLy8gRG8gbm90IGFsbG93IG1peGluZyBsaW5rcyBhbmQgZWxlbWVudHMgaW4gdGhlIHNlbGVjdGlvblxyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KFtjZWxsVmlldy5tb2RlbF0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLmFkZChjZWxsVmlldy5tb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjbG9zZVRvb2xzKCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb24uY2FuY2VsU2VsZWN0aW9uKCk7XHJcbiAgICAgICAgICBwYXBlclNjcm9sbGVyLnN0YXJ0UGFubmluZyhldnQsIHgsIHkpO1xyXG4gICAgICAgICAgcGFwZXIuc2V0SW50ZXJhY3Rpdml0eSh7IGVsZW1lbnRNb3ZlOiBmYWxzZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgICdjZWxsOnBvaW50ZXJjbGljayc6IGZ1bmN0aW9uIChjZWxsVmlldywgZXZ0LCB4LCB5KSB7XHJcbiAgICAgICAgb3BlblRvb2xzKGNlbGxWaWV3LCBlZGl0TW9kZSAhPT0gRmxvd2NoYXJ0Vmlld01vZGUuVmlldyA/IGpvaW50LmcuUG9pbnQoeCwgeSkgOiBudWxsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgY29uc3Qgc25hcGxpbmVzID0gbmV3IGpvaW50LnVpLlNuYXBsaW5lcyh7IHBhcGVyIH0pO1xyXG5cclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSBuZXcgam9pbnQudWkuUGFwZXJTY3JvbGxlcih7XHJcbiAgICAgIHBhcGVyLFxyXG4gICAgICBhdXRvUmVzaXplUGFwZXI6IHRydWUsXHJcbiAgICAgIHNjcm9sbFdoaWxlRHJhZ2dpbmc6IHRydWUsXHJcbiAgICAgIGN1cnNvcjogJ2dyYWInXHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCcjcGFwZXItY29udGFpbmVyJykuaHRtbCgnJyk7XHJcbiAgICBwYXBlclNjcm9sbGVyLiRlbC5hcHBlbmRUbygnI3BhcGVyLWNvbnRhaW5lcicpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgIHBhcGVyU2Nyb2xsZXIucmVuZGVyKCkuY2VudGVyKCk7XHJcblxyXG4gICAgcGFwZXIub24oJ2JsYW5rOm1vdXNld2hlZWwnLCBfLnBhcnRpYWwob25Nb3VzZXdoZWVsLCBudWxsKSwgdGhpcyk7XHJcbiAgICBwYXBlci5vbignY2VsbDptb3VzZXdoZWVsJywgb25Nb3VzZXdoZWVsLCB0aGlzKTtcclxuICAgIGZ1bmN0aW9uIG9uTW91c2V3aGVlbChjZWxsVmlldywgZXZ0LCB4LCB5LCBkZWx0YSkge1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb20oZGVsdGEgKiAwLjEsIHsgbWluOiAwLjIsIG1heDogNSwgZ3JpZDogMC4xLCBveDogeCwgb3k6IHkgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogU0VMRUNUSU9OICovXHJcbiAgICBzZWxlY3Rpb24gPSBuZXcgam9pbnQudWkuU2VsZWN0aW9uKHtcclxuICAgICAgcGFwZXIsXHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxyXG4gICAgICBmaWx0ZXI6IFsnYnBtbjIuSGVhZGVyZWRQb29sJ10gLy8gZG9uJ3QgYWxsb3cgdG8gc2VsZWN0IGEgcG9vbFxyXG4gICAgfSk7XHJcblxyXG4gICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ub24oJ3Jlc2V0IGFkZCByZW1vdmUnLCBvblNlbGVjdGlvbkNoYW5nZS5iaW5kKHRoaXMpKTtcclxuICAgIHNlbGVjdGlvbi5vbignc2VsZWN0aW9uLWJveDpwb2ludGVyZG93bicsIChjZWxsVmlldzogYW55LCBldnQ6IGFueSkgPT4ge1xyXG4gICAgICAvLyBVbnNlbGVjdCBhbiBlbGVtZW50IGlmIHRoZSBDVFJML01ldGEga2V5IGlzIHByZXNzZWQgd2hpbGUgYSBzZWxlY3RlZCBlbGVtZW50IGlzIGNsaWNrZWQuXHJcbiAgICAgIGlmIChrZXlib2FyZC5pc0FjdGl2ZSgnY3RybCBtZXRhJywgZXZ0KSkge1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlbW92ZShjZWxsVmlldy5tb2RlbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLyogU1RFTkNJTCAqL1xyXG5cclxuICAgIGNvbnN0IHN0ZW5jaWwgPSBuZXcgam9pbnQudWkuU3RlbmNpbCh7XHJcbiAgICAgIGdyYXBoLFxyXG4gICAgICBwYXBlcixcclxuICAgICAgd2lkdGg6ICcxMDAlJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICAgIGRyYWdFbmRDbG9uZShjZWxsKSB7XHJcbiAgICAgICAgY29uc3QgY2xvbmUgPSBjZWxsLmNsb25lKCk7XHJcbiAgICAgICAgY29uc3QgdHlwZSA9IGNsb25lLmdldCgndHlwZScpO1xyXG5cclxuICAgICAgICAvLyBzb21lIHR5cGVzIG9mIHRoZSBlbGVtZW50cyBuZWVkIHJlc2l6aW5nIGFmdGVyIHRoZXkgYXJlIGRyb3BwZWRcclxuICAgICAgICBjb25zdCBzaXplTXVsdGlwbGllciA9IHsgJ2JwbW4yLkhlYWRlcmVkUG9vbCc6IDgsICdicG1uLkNob3Jlb2dyYXBoeSc6IDIgfVt0eXBlXTtcclxuICAgICAgICBpZiAoc2l6ZU11bHRpcGxpZXIpIHtcclxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsU2l6ZSA9IGNsb25lLmdldCgnc2l6ZScpO1xyXG4gICAgICAgICAgY2xvbmUuc2V0KCdzaXplJywge1xyXG4gICAgICAgICAgICB3aWR0aDogb3JpZ2luYWxTaXplLndpZHRoICogc2l6ZU11bHRpcGxpZXIsXHJcbiAgICAgICAgICAgIGhlaWdodDogb3JpZ2luYWxTaXplLmhlaWdodCAqIHNpemVNdWx0aXBsaWVyXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgICBjbG9uZS5zZXQoJ3BhZGRpbmcnLCB7IHRvcDogMCwgbGVmdDogMzAsIHJpZ2h0OiAwLCBib3R0b206IDAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjbG9uZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgc3RlbmNpbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyNzdGVuY2lsLWNvbnRhaW5lcicpO1xyXG5cclxuICAgIHZhciBzdGVuY2lsU2hhcGVzID0gW1xyXG4gICAgICBuZXcgYnBtbjIuQWN0aXZpdHkoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5HYXRld2F5KHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuRXZlbnQoe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5Db252ZXJzYXRpb24oe1xyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIG5ldyBicG1uMi5EYXRhT2JqZWN0KHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuRGF0YVN0b3JlKHtcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuQW5ub3RhdGlvbih7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgZmlsbDogJyNmZmZmZmYnXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgYnBtbjIuR3JvdXAoe1xyXG4gICAgICAgIHNpemU6IHtcclxuICAgICAgICAgIHdpZHRoOiA4MCxcclxuICAgICAgICAgIGhlaWdodDogODBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBsYWJlbDoge1xyXG4gICAgICAgICAgICB0ZXh0OiAnR3JvdXAnLFxyXG4gICAgICAgICAgICBzdHJva2U6ICd3aGl0ZScsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBwYWludE9yZGVyOiAnc3Ryb2tlJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSksXHJcbiAgICAgIC8vIExlZ2FjeSBCUE1OIFNoYXBlc1xyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogJ2JwbW4yLkhlYWRlcmVkUG9vbCcsXHJcbiAgICAgICAgcGFkZGluZzogeyB0b3A6IDAsIGxlZnQ6IDE1LCByaWdodDogMCwgYm90dG9tOiAwIH0sXHJcbiAgICAgICAgc2l6ZTogeyB3aWR0aDogOTAsIGhlaWdodDogNTAgfSxcclxuICAgICAgICBsYW5lczogW3tcclxuICAgICAgICAgIGxhYmVsOiAnTGFuZSAxJ1xyXG4gICAgICAgIH0sIHtcclxuICAgICAgICAgIGxhYmVsOiAnTGFuZSAyJ1xyXG4gICAgICAgIH1dLFxyXG4gICAgICAgIGF0dHJzOiB7XHJcbiAgICAgICAgICBib2R5OiB7IGZpbGw6ICcjZmZmZmZmJyB9LFxyXG4gICAgICAgICAgaGVhZGVyTGFiZWw6IHsgdGV4dDogJ0hlYWRlcicgfSxcclxuICAgICAgICAgIGxhbmVMYWJlbHM6IHsgZm9udFNpemU6IDEzIH0sXHJcbiAgICAgICAgICBtaWxlc3RvbmVMYWJlbHM6IHsgZm9udFNpemU6IDEzIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sIG5ldyBqb2ludC5zaGFwZXMuYnBtbi5DaG9yZW9ncmFwaHkoe1xyXG4gICAgICAgIHBhcnRpY2lwYW50czogWydQYXJ0aWNpcGFudCAxJywgJ1BhcnRpY2lwYW50IDInXSxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgbGFiZWw6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pLCBuZXcgam9pbnQuc2hhcGVzLmJwbW4uTWVzc2FnZSh7XHJcbiAgICAgICAgYXR0cnM6IHtcclxuICAgICAgICAgIHRleHQ6IHtcclxuICAgICAgICAgICAgc3Ryb2tlOiAnd2hpdGUnLFxyXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMixcclxuICAgICAgICAgICAgcGFpbnRPcmRlcjogJ3N0cm9rZSdcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXTtcclxuICAgIC8vIExvYWQgc2hhcGUgaW1hZ2Ugb3Igbm90XHJcbiAgICBpZiAoc2hhcGVJbWFnZXMgJiYgc2hhcGVJbWFnZXMubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IGlkeCA9IHNoYXBlSW1hZ2VzLmZpbmRJbmRleCgoaW1nKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGltZ1snaXNEZWZhdWx0J10gPT09IHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBpbWFnZSA9IHNoYXBlSW1hZ2VzW2lkeF07XHJcbiAgICAgIHN0ZW5jaWxTaGFwZXMucHVzaChuZXcgc3RhbmRhcmQuSW1hZ2Uoe1xyXG4gICAgICAgIHR5cGU6ICdzdGFuZGFyZC5JbWFnZScsXHJcbiAgICAgICAgc2l6ZTogeyB3aWR0aDogODAsIGhlaWdodDogODAgfSxcclxuICAgICAgICBhdHRyczoge1xyXG4gICAgICAgICAgaW1hZ2U6IHtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XHJcbiAgICAgICAgICAgIHhsaW5rSHJlZjogaW1hZ2VcclxuICAgICAgICAgICAgICA/IGltYWdlWydpbWFnZVR5cGUnXSA9PT0gJ3N2ZydcclxuICAgICAgICAgICAgICAgID8gYGRhdGE6aW1hZ2UvJHtpbWFnZVsnaW1hZ2VUeXBlJ119K3htbDtiYXNlNjQsJHtpbWFnZVsnaW1hZ2VTdHJpbmcnXX1gXHJcbiAgICAgICAgICAgICAgICA6IGBkYXRhOmltYWdlLyR7aW1hZ2VbJ2ltYWdlVHlwZSddfTtiYXNlNjQsJHtpbWFnZVsnaW1hZ2VTdHJpbmcnXX1gXHJcbiAgICAgICAgICAgICAgOiAnZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejQ4SVVSUFExUlpVRVVnYzNabklGQlZRa3hKUXlBaUxTOHZWek5ETHk5RVZFUWdVMVpISURFdU1TOHZSVTRpSUNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk5SGNtRndhR2xqY3k5VFZrY3ZNUzR4TDBSVVJDOXpkbWN4TVM1a2RHUWlQanh6ZG1jZ2RtVnljMmx2YmowaU1TNHhJaUJwWkQwaVRHRjVaWEpmTWlJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWlCNGJXeHVjenA0YkdsdWF6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNVGs1T1M5NGJHbHVheUlnZUQwaU1IQjRJaUI1UFNJd2NIZ2lJSGRwWkhSb1BTSTFNM0I0SWlCb1pXbG5hSFE5SWpReWNIZ2lJSFpwWlhkQ2IzZzlJakFnTUNBMU15QTBNaUlnWlc1aFlteGxMV0poWTJ0bmNtOTFibVE5SW01bGR5QXdJREFnTlRNZ05ESWlJSGh0YkRwemNHRmpaVDBpY0hKbGMyVnlkbVVpUGp4blBqeG5JRzl3WVdOcGRIazlJakF1TkRraVBqeHdZWFJvSUdacGJHdzlJaU15TWpJeE16Z2lJR1E5SWswME9TNHpORFFzTTJNd0xqVTBNaXd3TERFdU1qVXRNQzR3TkRJc01TNHlOU3d3TGpWMk16UmpNQ3d3TGpVME1pMHdMamN3T0N3eExqVXRNUzR5TlN3eExqVm9MVFEyWXkwd0xqVTBNaXd3TFRBdU56VXRNQzQ1TlRndE1DNDNOUzB4TGpVZ2RpMHpOR013TFRBdU5UUXlMREF1TWpBNExUQXVOU3d3TGpjMUxUQXVOV2cwTmk0eU5TQk5ORGt1TXpRMExERm9MVFEyWXkweExqWTFMREF0TWk0M05Td3dMamcxTFRJdU56VXNNaTQxZGpNMFl6QXNNUzQyTlN3eExqRXNNeTQxTERJdU56VXNNeTQxYURRMklHTXhMalkxTERBc015NHlOUzB4TGpnMUxETXVNalV0TXk0MWRpMHpORU0xTWk0MU9UUXNNUzQ0TlN3MU1DNDVPVFFzTVN3ME9TNHpORFFzTVV3ME9TNHpORFFzTVhvaUx6NDhZMmx5WTJ4bElHWnBiR3c5SWlNeU1qSXhNemdpSUdONFBTSXpPQzR3T1RRaUlHTjVQU0l4TWk0MU1ESWlJSEk5SWpRdU16azRJaTgrUEhCaGRHZ2dabWxzYkQwaUl6SXlNakV6T0NJZ1pEMGlUVFV3TGpVNU5Dd3lOaTQ1TnpKc0xUY3VNVE0xTFRVdU9URTRZeTB4TGpBM05pMHdMamc0T0MweUxqY3lOaTB3TGpnMU5DMHpMamMwT1N3d0xqQTROR3d0Tnk0eU1qUXNOaTQxT0RKTU1UZ3VNalV4TERFeUxqSXhJR010TVM0d056TXRNUzR4TnpNdE1pNDRNall0TVM0eE9EWXRNeTQ1TVRjdE1DNHdNalJNTVM0MU9UUXNNalV1T1RJeVZqUXdhRFE0TGprNU0yTXdMakV4TlN3d0xEQXVNREEzTFRBdU1ESXhMREF1TURBM0xUQXVNREk1VmpJMkxqazNNbm9pTHo0OEwyYytQR2MrUEdjK1BHYytQSEJoZEdnZ1ptbHNiRDBpSXpNeFJEQkROaUlnWkQwaVRUUTVMak0wTkN3eVl6QXVOVFF5TERBc01TNHlOUzB3TGpBME1pd3hMakkxTERBdU5YWXpOR013TERBdU5UUXlMVEF1TnpBNExERXVOUzB4TGpJMUxERXVOV2d0TkRaakxUQXVOVFF5TERBdE1DNDNOUzB3TGprMU9DMHdMamMxTFRFdU5TQjJMVE0wWXpBdE1DNDFORElzTUM0eU1EZ3RNQzQxTERBdU56VXRNQzQxYURRMkxqSTFJRTAwT1M0ek5EUXNNR2d0TkRaakxURXVOalVzTUMweUxqYzFMREF1T0RVdE1pNDNOU3d5TGpWMk16UmpNQ3d4TGpZMUxERXVNU3d6TGpVc01pNDNOU3d6TGpWb05EWWdZekV1TmpVc01Dd3pMakkxTFRFdU9EVXNNeTR5TlMwekxqVjJMVE0wUXpVeUxqVTVOQ3d3TGpnMUxEVXdMams1TkN3d0xEUTVMak0wTkN3d1REUTVMak0wTkN3d2VpSXZQand2Wno0OFkybHlZMnhsSUdacGJHdzlJaU16TVVRd1F6WWlJR040UFNJek9DNHdPVFFpSUdONVBTSXhNUzQxTURJaUlISTlJalF1TXprNElpOCtQSEJoZEdnZ1ptbHNiRDBpSXpNeFJEQkROaUlnWkQwaVRUVXdMalU1TkN3eU5TNDVOekpzTFRjdU1UTTFMVFV1T1RFNFl5MHhMakEzTmkwd0xqZzRPQzB5TGpjeU5pMHdMamcxTkMwekxqYzBPU3d3TGpBNE5Hd3ROeTR5TWpRc05pNDFPREpNTVRndU1qVXhMREV4TGpJeElHTXRNUzR3TnpNdE1TNHhOek10TWk0NE1qWXRNUzR4T0RZdE15NDVNVGN0TUM0d01qUk1NUzQxT1RRc01qUXVPVEl5VmpNNWFEUTRMams1TTJNd0xqRXhOU3d3TERBdU1EQTNMVEF1TURJeExEQXVNREEzTFRBdU1ESTVWakkxTGprM01ub2lMejQ4TDJjK1BDOW5Qand2Wno0OEwzTjJaejRnJ1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICAgICAgc3Ryb2tlOiAnIzMxZDBjNicsXHJcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAyLFxyXG4gICAgICAgICAgICBzdHJva2VEYXNoYXJyYXk6ICcwJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0ZW5jaWwubG9hZChzdGVuY2lsU2hhcGVzKTtcclxuXHJcbiAgICBqb2ludC5sYXlvdXQuR3JpZExheW91dC5sYXlvdXQoc3RlbmNpbC5nZXRHcmFwaCgpLCB7XHJcbiAgICAgIGNvbHVtbnM6IDEwMCxcclxuICAgICAgY29sdW1uV2lkdGg6ICdjb21wYWN0JyxcclxuICAgICAgbWFyZ2luWDogMjAsXHJcbiAgICAgIG1hcmdpblk6IDIwLFxyXG4gICAgICBjb2x1bW5HYXA6IDQwLFxyXG4gICAgICB2ZXJ0aWNhbEdhcDogMjAsXHJcbiAgICAgIHJlc2l6ZVRvRml0OiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCByZXNldENlbGxWaWV3ID0gdGhpcy5yZXNldENlbGxWaWV3O1xyXG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxyXG4gICAgc3RlbmNpbC5vbignZWxlbWVudDpkcm9wJywgKGVsZW1lbnRWaWV3KSA9PiB7XHJcbiAgICAgIC8vIG9wZW4gaW5zcGVjdG9yIGFmdGVyIGEgbmV3IGVsZW1lbnQgZHJvcHBlZCBmcm9tIHN0ZW5jaWxcclxuICAgICAgb3BlblRvb2xzKGVsZW1lbnRWaWV3LCBudWxsKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qIEtFWUJPQVJEICovXHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLkVkaXQpIHtcclxuICAgICAgaW5pdGlhbGl6ZUtleWJvYXJkU2hvcnRjdXRzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUtleWJvYXJkU2hvcnRjdXRzKCkge1xyXG4gICAgICBrZXlib2FyZC5vbihcclxuICAgICAgICB7XHJcbiAgICAgICAgICAnY3RybCtjJzogKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBDb3B5IGFsbCBzZWxlY3RlZCBlbGVtZW50cyBhbmQgdGhlaXIgYXNzb2NpYXRlZCBsaW5rcy5cclxuICAgICAgICAgICAgY2xpcGJvYXJkLmNvcHlFbGVtZW50cyhzZWxlY3Rpb24uY29sbGVjdGlvbiwgZ3JhcGgpO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCt2JzogKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwYXN0ZWRDZWxscyA9IGNsaXBib2FyZC5wYXN0ZUNlbGxzKGdyYXBoLCB7XHJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlOiB7IGR4OiAyMCwgZHk6IDIwIH0sXHJcbiAgICAgICAgICAgICAgdXNlTG9jYWxTdG9yYWdlOiB0cnVlXHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBfLmZpbHRlcihwYXN0ZWRDZWxscywgKGNlbGwpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gY2VsbC5pc0VsZW1lbnQoKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvLyBNYWtlIHN1cmUgcGFzdGVkIGVsZW1lbnRzIGdldCBzZWxlY3RlZCBpbW1lZGlhdGVseS4gVGhpcyBtYWtlcyB0aGUgVVggYmV0dGVyIGFzXHJcbiAgICAgICAgICAgIC8vIHRoZSB1c2VyIGNhbiBpbW1lZGlhdGVseSBtYW5pcHVsYXRlIHRoZSBwYXN0ZWQgZWxlbWVudHMuXHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGVsZW1lbnRzKTtcclxuICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgJ2N0cmwreCBzaGlmdCtkZWxldGUnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNsaXBib2FyZC5jdXRFbGVtZW50cyhzZWxlY3Rpb24uY29sbGVjdGlvbiwgZ3JhcGgpO1xyXG4gICAgICAgICAgICByZXNldENlbGxWaWV3KCk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdkZWxldGUgYmFja3NwYWNlJzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgIHZhciBjZWxscyA9IHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKTtcclxuICAgICAgICAgICAgbGV0IGFsbG93RGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9GTE9XQ0hBUlRdKSB7XHJcbiAgICAgICAgICAgICAgdmFyIHNoYXBlRmxvd0NoYXJ0ID0gd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF07XHJcbiAgICAgICAgICAgICAgLy8gQ2xlYXIgYWxsIGJ5IGNsaWNrIHJlbW92ZSBidXR0b25cclxuICAgICAgICAgICAgICBpZiAoY2VsbHMpIHtcclxuICAgICAgICAgICAgICAgIGNlbGxzLmV2ZXJ5KGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICAgIHZhciBzaGFwZUlkID0gZS5hdHRyaWJ1dGVzLmlkO1xyXG4gICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzaGFwZUZsb3dDaGFydC5maW5kSW5kZXgoZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geC5zaGFwZUlkID09PSBzaGFwZUlkO1xyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd0RlbGV0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFhbGxvd0RlbGV0ZSkge1xyXG4gICAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5FWElTVF9EQVRBLCBudWxsKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGdyYXBoLnJlbW92ZUNlbGxzKHNlbGVjdGlvbi5jb2xsZWN0aW9uLnRvQXJyYXkoKSk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3onOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnVuZG8oKTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XHJcbiAgICAgICAgICAgICAgcmVzZXRDZWxsVmlldygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3knOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vdGlmeSA9IGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIGNvbW1hbmRNYW5hZ2VyLnJlZG8oKTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XHJcbiAgICAgICAgICAgICAgcmVzZXRDZWxsVmlldygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK2EnOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHNlbGVjdGlvbi5jb2xsZWN0aW9uLnJlc2V0KGdyYXBoLmdldEVsZW1lbnRzKCkpO1xyXG4gICAgICAgICAgICByZXNldENlbGxWaWV3KCk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdjdHJsK3BsdXMnOiAoZXZ0KSA9PiB7XHJcbiAgICAgICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnpvb20oMC4yLCB7IG1heDogNSwgZ3JpZDogMC4yIH0pO1xyXG4gICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAnY3RybCttaW51cyc6IChldnQpID0+IHtcclxuICAgICAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHBhcGVyU2Nyb2xsZXIuem9vbSgtMC4yLCB7IG1pbjogMC4yLCBncmlkOiAwLjIgfSk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdrZXlkb3duOnNoaWZ0JzogKGV2dCkgPT4ge1xyXG4gICAgICAgICAgICBwYXBlclNjcm9sbGVyLnNldEN1cnNvcignY3Jvc3NoYWlyJyk7XHJcbiAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICdrZXl1cDpzaGlmdCc6ICgpID0+IHtcclxuICAgICAgICAgICAgcGFwZXJTY3JvbGxlci5zZXRDdXJzb3IoJ2dyYWInKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHRoaXNcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBvblNlbGVjdGlvbkNoYW5nZSgpIHtcclxuICAgICAgY29uc3QgeyBjb2xsZWN0aW9uIH0gPSBzZWxlY3Rpb247XHJcblxyXG4gICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBjb25zdCBwcmltYXJ5Q2VsbDogYW55ID0gY29sbGVjdGlvbi5maXJzdCgpO1xyXG4gICAgICAgIHNlbGVjdGlvbi5kZXN0cm95U2VsZWN0aW9uQm94KHByaW1hcnlDZWxsKTtcclxuICAgICAgfSBlbHNlIGlmIChjb2xsZWN0aW9uLmxlbmd0aCA+PSAyKSB7XHJcbiAgICAgICAgcmVzZXRDZWxsVmlldygpO1xyXG4gICAgICAgIGNsb3NlVG9vbHMoKTtcclxuXHJcbiAgICAgICAgY29sbGVjdGlvbi5lYWNoKGZ1bmN0aW9uIChjZWxsOiBhbnkpIHtcclxuICAgICAgICAgIHNlbGVjdGlvbi5jcmVhdGVTZWxlY3Rpb25Cb3goY2VsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBvcGVuVG9vbHMoY2VsbFZpZXcsIGNvb3JkaW5hdGVzKSB7XHJcbiAgICAgIGlmICghY2VsbFZpZXcpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY2xvc2VUb29scygpO1xyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuTVlfQ0VMTF9WSUVXXSA9IGNlbGxWaWV3O1xyXG4gICAgICBjb25zdCBjZWxsID0gY2VsbFZpZXcubW9kZWw7XHJcbiAgICAgIGNvbnN0IHR5cGUgPSBjZWxsLmdldCgndHlwZScpO1xyXG5cclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgICAgY2VsbCxcclxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgICAgICBkZWZhdWx0czogeyBsYWJlbDogTEFORy5CUE1OLkRFRkFVTFRTLCBpbmRleDogMiB9LFxyXG4gICAgICAgICAgZm9udHNpemU6IHsgbGFiZWw6IExBTkcuQlBNTi5GT05UX1NJWkUsIGluZGV4OiAzIH0sXHJcbiAgICAgICAgICBhcHBlYXJhbmNlOiB7IGxhYmVsOiBMQU5HLkJQTU4uQVBQRUFSQU5DRSwgaW5kZXg6IDQgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzZWxlY3Rpb24uY29sbGVjdGlvbi5yZXNldChbXSk7XHJcbiAgICAgIC8vIEFkZCB0aGUgY2VsbCBpbnRvIHRoZSBzZWxlY3Rpb24gY29sbGVjdGlvbiBzaWxlbnRseVxyXG4gICAgICAvLyBzbyBubyBzZWxlY3Rpb24gYm94IGlzIHJlbmRlcmVkIGFib3ZlIHRoZSBjZWxsVmlldy5cclxuICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24uYWRkKGNlbGwsIHsgc2lsZW50OiB0cnVlIH0pO1xyXG5cclxuICAgICAgaWYgKGNlbGwuaXNFbGVtZW50KCkpIHtcclxuICAgICAgICBsZXQgbWluU2l6ZTtcclxuXHJcbiAgICAgICAgaWYgKGNlbGwgaW5zdGFuY2VvZiBicG1uMi5IZWFkZXJlZFBvb2wpIHtcclxuICAgICAgICAgIG1pblNpemUgPSBjZWxsLmdldE1pbmltYWxTaXplKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1pblNpemUgPSB7IHdpZHRoOiAzMCwgaGVpZ2h0OiAzMCB9O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IFwiYnBtbjIuSGVhZGVyZWRQb29sXCIgJiYgY29vcmRpbmF0ZXMpIHtcclxuICAgICAgICAgIGNyZWF0ZVBvb2xUb29scyhjZWxsVmlldywgY29vcmRpbmF0ZXMpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnJlZVRyYW5zZm9ybSA9IG5ldyBqb2ludC51aS5GcmVlVHJhbnNmb3JtKHtcclxuICAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAgICAgYWxsb3dPcnRob2dvbmFsUmVzaXplOiBmYWxzZSxcclxuICAgICAgICAgIGFsbG93Um90YXRpb246IGZhbHNlLFxyXG4gICAgICAgICAgbWluV2lkdGg6IG1pblNpemUud2lkdGgsXHJcbiAgICAgICAgICBtaW5IZWlnaHQ6IG1pblNpemUuaGVpZ2h0XHJcbiAgICAgICAgfSkucmVuZGVyKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGhhbG8gPSBuZXcgam9pbnQudWkuSGFsbyh7XHJcbiAgICAgICAgICBjZWxsVmlldyxcclxuICAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICB0eXBlOiAndG9vbGJhcicsXHJcbiAgICAgICAgICB1c2VNb2RlbEdlb21ldHJ5OiB0cnVlLFxyXG4gICAgICAgICAgYm94Q29udGVudDogKGNlbGxWaWV3KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBjZWxsVmlldy5tb2RlbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLkVkaXQpIHtcclxuICAgICAgICAgIGlmICh0eXBlID09PSAnYnBtbjIuSGVhZGVyZWRQb29sJykge1xyXG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnbGluaycpO1xyXG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xyXG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgndW5saW5rJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBoYWxvLnJlbmRlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNlbGwuaXNMaW5rKCkpIHtcclxuICAgICAgICBjb25zdCBucyA9IGpvaW50LmxpbmtUb29scztcclxuICAgICAgICBjb25zdCB0b29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICAgICAgICBuYW1lOiAnbGluay1wb2ludGVyZG93bicsXHJcbiAgICAgICAgICB0b29sczogW1xyXG4gICAgICAgICAgICBuZXcgbnMuVmVydGljZXMoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlNvdXJjZUFuY2hvcigpLFxyXG4gICAgICAgICAgICBuZXcgbnMuVGFyZ2V0QW5jaG9yKCksXHJcbiAgICAgICAgICAgIG5ldyBucy5Tb3VyY2VBcnJvd2hlYWQoKSxcclxuICAgICAgICAgICAgbmV3IG5zLlRhcmdldEFycm93aGVhZCgpLFxyXG4gICAgICAgICAgICBuZXcgbnMuU2VnbWVudHMoKSxcclxuICAgICAgICAgICAgbmV3IG5zLkJvdW5kYXJ5KHsgcGFkZGluZzogMTUgfSksXHJcbiAgICAgICAgICAgIG5ldyBucy5SZW1vdmUoeyBvZmZzZXQ6IC0yMCwgZGlzdGFuY2U6IDQwIH0pXHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNlbGxWaWV3LmFkZFRvb2xzKHRvb2xzVmlldyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qIFFNUy0yMzY0OiBzaG93IGxpbmsgYW5kIHBvaXRlciBjaGFuZ2UgdG8gaGFuZCAqL1xyXG4gICAgICBpZiAod2luZG93W2BldmVudGBdW2B0eXBlYF0gPT09ICdtb3VzZW92ZXInICYmIGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYGpvaW50LWVsZW1lbnRgKTtcclxuICAgICAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgY29uc3Qgc2hhcGVJZCA9IGNlbGxWaWV3Lm1vZGVsLmF0dHJpYnV0ZXMuaWQ7XHJcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6cHJlZmVyLWZvci1vZlxyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChsaXN0W2ldLmF0dHJpYnV0ZXNbMF0ubm9kZVZhbHVlICE9PSBzaGFwZUlkKSB7XHJcbiAgICAgICAgICAgICAgbGlzdFtpXVtgc3R5bGVgXS5jdXJzb3IgPSAnbW92ZSc7XHJcbiAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2hhcGVEZXRhaWxNb2RlbCA9IHdpbmRvd1tgU0hBUEVfREVUQUlMX01PREVMYF07XHJcbiAgICAgICAgICAgIGlmICghc2hhcGVEZXRhaWxNb2RlbCkge1xyXG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gc2hhcGVEZXRhaWxNb2RlbC5maW5kSW5kZXgoKHgpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4geC5zaGFwZUlkID09PSBzaGFwZUlkO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xyXG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ21vdmUnO1xyXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNoYXBlRGV0YWlsID0gc2hhcGVEZXRhaWxNb2RlbFtpbmRleF07XHJcbiAgICAgICAgICAgIGxldCBjb25uZWN0aW9uTmFtZSA9ICcnO1xyXG4gICAgICAgICAgICBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5BY3Rpdml0eSkge1xyXG4gICAgICAgICAgICAgIGxpc3RbaV1bYHN0eWxlYF0uY3Vyc29yID0gJ3BvaW50ZXInO1xyXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fQUNUSVZJVFk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5MaW5rKSB7XHJcbiAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOSztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkRvY3VtZW50T3JQcm9jZXNzKSB7XHJcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxyXG4gICAgICAgICAgICAgIHN3aXRjaCAoc2hhcGVEZXRhaWwuZG9jdW1lbnRNb2RlbC5yZWxhdGVkSXRlbXNbMF0uaXRlbVR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLmRvY3VtZW50OlxyXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0RPQ1VNRU5UO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLnByb2Nlc3M6XHJcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fUFJPQ0VTUztcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlbGF0ZWRJdGVtVHlwZS5hcmVhOlxyXG4gICAgICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0FSRUE7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZWxhdGVkSXRlbVR5cGUuaGFuZGJvb2s6XHJcbiAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fRk9MREVSO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVsYXRlZEl0ZW1UeXBlLnByb2Nlc3NJbnRlcmNvbm5lY3RlZDpcclxuICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbk5hbWUgPSBMQU5HLkJQTU4uTElOS19UT19JTlRFUkNPTk5FQ1RFRF9QUk9DRVNTO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hhcGVEZXRhaWwuY29ubmVjdGlvblR5cGVJZCA9PT0gU2hhcGVGbG93Q2hhcnRDb25uZWN0aW9uVHlwZS5EZXZpYXRpb24pIHtcclxuICAgICAgICAgICAgICBjb25uZWN0aW9uTmFtZSA9IExBTkcuQlBNTi5MSU5LX1RPX0RFVklBVElPTjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGFwZURldGFpbC5jb25uZWN0aW9uVHlwZUlkID09PSBTaGFwZUZsb3dDaGFydENvbm5lY3Rpb25UeXBlLkNoZWNrbGlzdCkge1xyXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fQ0hFQ0tMSVNUO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgPT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQ29tcGxpYW5jZSkge1xyXG4gICAgICAgICAgICAgIGNvbm5lY3Rpb25OYW1lID0gTEFORy5CUE1OLkxJTktfVE9fQ09NUExJQU5DRV9SRVFVSVJFTUVOVDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNoYXBlRGV0YWlsLmNvbm5lY3Rpb25UeXBlSWQgIT09IFNoYXBlRmxvd0NoYXJ0Q29ubmVjdGlvblR5cGUuQWN0aXZpdHkpIHtcclxuICAgICAgICAgICAgICBsaXN0W2ldW2BzdHlsZWBdLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xyXG4gICAgICAgICAgICAgIGNlbGxWaWV3LFxyXG4gICAgICAgICAgICAgIHRoZW1lOiAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgYm94Q29udGVudDogY29ubmVjdGlvbk5hbWVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGhhbG8ucmVuZGVyKCk7XHJcbiAgICAgICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZW1vdmUnKTtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3Jlc2l6ZScpO1xyXG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnY2xvbmUnKTtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2ZvcmsnKTtcclxuICAgICAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ3VubGluaycpO1xyXG4gICAgICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncm90YXRlJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzaGFwZUVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCduby1yb3RhdGlvbicpO1xyXG4gICAgICAgIGlmIChzaGFwZUVsZW1lbnQgJiYgc2hhcGVFbGVtZW50Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaGFwZUVsZW1lbnQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKCFzaGFwZUVsZW1lbnRbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpKSB7XHJcbiAgICAgICAgICAgICAgc2hhcGVFbGVtZW50W2ldLmNsYXNzTGlzdC5hZGQoJ2pvaW50LWZyZWUtdHJhbnNmb3JtJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAod2luZG93W2BldmVudGBdW2B0eXBlYF0gPT09ICdtb3VzZW91dCcgJiYgZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgICBjb25zdCBoYWxvID0gbmV3IGpvaW50LnVpLkhhbG8oe1xyXG4gICAgICAgICAgY2VsbFZpZXcsXHJcbiAgICAgICAgICB0aGVtZTogJ2RlZmF1bHQnLFxyXG4gICAgICAgICAgYm94Q29udGVudDogJydcclxuICAgICAgICB9KTtcclxuICAgICAgICBoYWxvLnJlbmRlcigpO1xyXG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCdyZW1vdmUnKTtcclxuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncmVzaXplJyk7XHJcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2Nsb25lJyk7XHJcbiAgICAgICAgaGFsby5yZW1vdmVIYW5kbGUoJ2xpbmsnKTtcclxuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgnZm9yaycpO1xyXG4gICAgICAgIGhhbG8ucmVtb3ZlSGFuZGxlKCd1bmxpbmsnKTtcclxuICAgICAgICBoYWxvLnJlbW92ZUhhbmRsZSgncm90YXRlJyk7XHJcbiAgICAgICAgY29uc3Qgc2hhcGVFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnbm8tcm90YXRpb24nKTtcclxuICAgICAgICBpZiAoc2hhcGVFbGVtZW50ICYmIHNoYXBlRWxlbWVudC5sZW5ndGgpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2hhcGVFbGVtZW50Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHNoYXBlRWxlbWVudFtpXS5jbGFzc0xpc3QucmVtb3ZlKCdqb2ludC1mcmVlLXRyYW5zZm9ybScpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvKiBRTVMtMjEyNTogU2hvdyBwcm9jZXNzIGNvbm5lY3QgdHlwZSAqL1xyXG4gICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19TSE9XX0NPTk5FQ1RZUEVdID0gdHJ1ZTtcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfU0hBUEVfSURdID0gY2VsbFZpZXcubW9kZWwuYXR0cmlidXRlcy5pZDtcclxuICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0hBUEVfVFlQRV0gPSBjZWxsVmlldy5tb2RlbC5hdHRyaWJ1dGVzLnR5cGU7XHJcbiAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlNIQVBFX0ZMT1dDSEFSVF9MT0FESU5HXSA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmICh3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuQUREX1NIQVBFX0NPTk5FQ1RJT05fSU5fUFJPR1JFU1NdID09IHRydWUpIFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0Lk1ZX0NFTExfVklFV10gPSBudWxsO1xyXG4gICAgICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkFERF9TSEFQRV9DT05ORUNUSU9OX0lOX1BST0dSRVNTXSA9IGZhbHNlO1xyXG4gICAgICAgICAgY2xvc2VUb29scygpO1xyXG4gICAgICAgICAgc2VsZWN0aW9uLmNhbmNlbFNlbGVjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLyogUU1TLTE0MDQ6IEN1c3RvbWl6YXRpb24gKi9cclxuICAgICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSXSA9IHBhcGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNsb3NlVG9vbHMoKSB7XHJcbiAgICAgIHBhcGVyLnJlbW92ZVRvb2xzKCk7XHJcbiAgICAgIGpvaW50LnVpLkluc3BlY3Rvci5jbG9zZSgpO1xyXG4gICAgICBqb2ludC51aS5GcmVlVHJhbnNmb3JtLmNsZWFyKHBhcGVyKTtcclxuICAgICAgZnJlZVRyYW5zZm9ybSA9IG51bGw7XHJcbiAgICAgIGpvaW50LnVpLkhhbG8uY2xlYXIocGFwZXIpO1xyXG5cclxuICAgICAgY29uc3QgY2VsbHMgPSBncmFwaC5nZXRDZWxscygpO1xyXG4gICAgICBjZWxscy5mb3JFYWNoKChjZWxsKSA9PiB7XHJcbiAgICAgICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICBjZWxsLnNldCgneicsIC0xKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGlzU2VsZWN0ZWRDZWxsVmlld0luU2VsZWN0aW9uKHNlbGVjdGlvbikge1xyXG4gICAgICBjb25zdCBtb2RlbHMgPSBzZWxlY3Rpb24uY29sbGVjdGlvbi50b0FycmF5KCkgfHwgW107XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkU2hhcGVJZCA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF07XHJcbiAgICAgIHJldHVybiAhIXNlbGVjdGVkU2hhcGVJZCAmJiBtb2RlbHMuZmlsdGVyKG1vZGVsID0+IG1vZGVsLmF0dHJpYnV0ZXMuaWQgPT0gc2VsZWN0ZWRTaGFwZUlkKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzaG93U3RhdHVzKG1lc3NhZ2UsIHR5cGUpIHtcclxuICAgICAgJCgnLnN0YXR1cycpLnJlbW92ZUNsYXNzKCdpbmZvIGVycm9yIHN1Y2Nlc3MnKS5hZGRDbGFzcyh0eXBlKS5odG1sKG1lc3NhZ2UpO1xyXG4gICAgICAkKCcjc3RhdHVzYmFyLWNvbnRhaW5lcicpXHJcbiAgICAgICAgLmRlcXVldWUoKVxyXG4gICAgICAgIC5hZGRDbGFzcygnYWN0aXZlJylcclxuICAgICAgICAuZGVsYXkoMzAwMClcclxuICAgICAgICAucXVldWUoKCkgPT4ge1xyXG4gICAgICAgICAgJCh0aGlzKS5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gcmVwbGFjZUxpbmsoZ3JhcGgsIGxpbmssIGxpbmtDb25zdHJ1Y3Rvcikge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbmV3LWNhcFxyXG4gICAgICBjb25zdCBsaW5rMiA9IG5ldyBsaW5rQ29uc3RydWN0b3Ioe1xyXG4gICAgICAgIHNvdXJjZTogbGluay5zb3VyY2UoKSxcclxuICAgICAgICB0YXJnZXQ6IGxpbmsudGFyZ2V0KCksXHJcbiAgICAgICAgdmVydGljZXM6IGxpbmsudmVydGljZXMoKVxyXG4gICAgICB9KTtcclxuICAgICAgbGluay5yZW1vdmUoeyByZXBsYWNlTGluazogdHJ1ZSB9KTtcclxuICAgICAgbGluazIuc2V0KCd6JywgLTEpO1xyXG4gICAgICBsaW5rMi5hZGRUbyhncmFwaCk7XHJcblxyXG4gICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuQUREX1NIQVBFX0NPTk5FQ1RJT05fSU5fUFJPR1JFU1NdID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBncmFwaC5vbignY2hhbmdlJywgKGNlbGwsIG9wdCkgPT4ge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlVGV4dEluc2lkZShjZWxsKTtcclxuICAgICAgdGhpcy5vbkNoYW5nZUxpbmtMYWJlbChjZWxsLCAxMik7XHJcbiAgICAgIHRoaXMub25DaGFuZ2VBbGxpZ21lbnQoY2VsbCwgb3B0KTtcclxuICAgICAgaWYgKCFvcHQuaW5zcGVjdG9yIHx8ICFmcmVlVHJhbnNmb3JtIHx8IGNlbGwuZ2V0KCd0eXBlJykgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1pblNpemUgPSBjZWxsLmdldE1pbmltYWxTaXplKCk7XHJcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5XaWR0aCA9IG1pblNpemUud2lkdGg7XHJcbiAgICAgIGZyZWVUcmFuc2Zvcm0ub3B0aW9ucy5taW5IZWlnaHQgPSBtaW5TaXplLmhlaWdodDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8qIFRPT0xCQVIgKi9cclxuICAgIGNvbnN0IHRvb2xiYXIgPSBuZXcgam9pbnQudWkuVG9vbGJhcih7XHJcbiAgICAgIHRvb2xzOiB0b29sYmFyQ29uZmlnLnRvb2xzLFxyXG4gICAgICByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgcGFwZXJTY3JvbGxlcixcclxuICAgICAgICBjb21tYW5kTWFuYWdlclxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCB0b29sYmFyQ29tbWFuZHMgPSB7XHJcbiAgICAgIHRvSlNPTjogKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd0ZlYXR1cmVzID0gJ21lbnViYXI9bm8sbG9jYXRpb249bm8scmVzaXphYmxlPXllcyxzY3JvbGxiYXJzPXllcyxzdGF0dXM9bm8nO1xyXG4gICAgICAgIGNvbnN0IHdpbmRvd05hbWUgPSBfLnVuaXF1ZUlkKCdqc29uX291dHB1dCcpO1xyXG4gICAgICAgIGNvbnN0IGpzb25XaW5kb3cgPSB3aW5kb3cub3BlbignJywgd2luZG93TmFtZSwgd2luZG93RmVhdHVyZXMpO1xyXG5cclxuICAgICAgICBqc29uV2luZG93LmRvY3VtZW50LndyaXRlKEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGxvYWRHcmFwaDogKCkgPT4ge1xyXG4gICAgICAgIGdkQXV0aCgoKSA9PiB7XHJcbiAgICAgICAgICBzaG93U3RhdHVzKCdsb2FkaW5nLi4nLCAnaW5mbycpO1xyXG4gICAgICAgICAgZ2RMb2FkKChuYW1lLCBjb250ZW50KSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QganNvbiA9IEpTT04ucGFyc2UoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgZ3JhcGguZnJvbUpTT04oanNvbik7XHJcbiAgICAgICAgICAgICAgY29uc3QgZWxGaWxlTmFtZSA9IDxIVE1MQnV0dG9uRWxlbWVudD5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZmlsZU5hbWUnKTtcclxuICAgICAgICAgICAgICBlbEZpbGVOYW1lLnZhbHVlID0gbmFtZS5yZXBsYWNlKC8uanNvbiQvLCAnJyk7XHJcbiAgICAgICAgICAgICAgc2hvd1N0YXR1cygnbG9hZGVkLicsICdzdWNjZXNzJyk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdmYWlsZWQuJywgJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIHRydWUpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgc2F2ZUdyYXBoOiAoKSA9PiB7XHJcbiAgICAgICAgZ2RBdXRoKCgpID0+IHtcclxuICAgICAgICAgIHNob3dTdGF0dXMoJ3NhdmluZy4uJywgJ2luZm8nKTtcclxuICAgICAgICAgIC8vIGxldCBuYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVOYW1lJykudmFsdWU7XHJcbiAgICAgICAgICBjb25zdCBuYW1lID0gPEhUTUxCdXR0b25FbGVtZW50PmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaWxlTmFtZScpO1xyXG4gICAgICAgICAgZ2RTYXZlKG5hbWUudmFsdWUsIEpTT04uc3RyaW5naWZ5KGdyYXBoLnRvSlNPTigpKSwgKGZpbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgICBzaG93U3RhdHVzKCdzYXZlZC4nLCAnc3VjY2VzcycpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHNob3dTdGF0dXMoJ2ZhaWxlZC4nLCAnZXJyb3InKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSwgdHJ1ZSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uU2VsZWN0ZWQ6IChldmVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGVtcCkge1xyXG4gICAgICAgICAgdGhpcy5qc29uVGVtcENvbnRlbnQgPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICB0aGlzLmlzVGVtcCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXZlbnQuanNvbkNvbnRlbnQpIHtcclxuICAgICAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9GTE9XQ0hBUlRfSURdID0gZXZlbnQuZmxvd0NoYXJ0SWQ7XHJcbiAgICAgICAgICB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuU0VMRUNURURfSlNPTl9DT05URU5UXSA9IGV2ZW50Lmpzb25Db250ZW50O1xyXG4gICAgICAgICAgaWYgKHRoaXMuaXNTaG93Q29uZmlybU1lc3NhZ2UoKSkge1xyXG4gICAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuQ0hBTkdJTkdfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZShGbG93Q2hhcnRDb25zdC5ORVhUX0NIQU5HSU5HX1RFTVBMQVRFLCB0aGlzLmdldE9yaWdpbkZvclNlbGYoKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlc2V0Q2VsbFZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkID0gZXZlbnQuZmxvd0NoYXJ0SWQ7XHJcbiAgICAgIH0sXHJcbiAgICAgIG9uQ2xlYXI6ICgpID0+IHtcclxuICAgICAgICBncmFwaC5jbGVhcigpO1xyXG4gICAgICAgIHRoaXMucmVzZXRDZWxsVmlldygpO1xyXG4gICAgICB9LFxyXG4gICAgICBvbkRlbGV0ZVRlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZGlhZ3JhbVRlbXBsYXRlLmZsb3dDaGFydElkICYmXHJcbiAgICAgICAgICBkaWFncmFtVGVtcGxhdGUuZmxvd0NoYXJ0SWQgIT09ICcnICYmXHJcbiAgICAgICAgICBkaWFncmFtVGVtcGxhdGUuZmxvd0NoYXJ0SWQgIT09IGd1aWRIZWxwZXIuZW1wdHlcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuaXNEZWxldGVUZW1wbGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSB0cnVlO1xyXG4gICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKEZsb3dDaGFydENvbnN0LkRFTEVURV9URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuTVVTVF9TRUxFQ1RfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBvblNhdmVBc1RlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NhdmVBc1RlbXBsYXRlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmlzRGlzYWJsZVRvb2xiYXIgPSB0cnVlO1xyXG4gICAgICAgIGlmICh0aGlzLmlzVGVtcCkge1xyXG4gICAgICAgICAgdGhpcy5qc29uVGVtcENvbnRlbnQgPSB0aGlzLmpzb25PcmlnaW5hbENvbnRlbnQ7XHJcbiAgICAgICAgICB0aGlzLmlzVGVtcCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuU0FWRV9BU19URU1QTEFURSwgdGhpcy5nZXRPcmlnaW5Gb3JTZWxmKCkpO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgb25SZXNldFRvVGVtcFRlbXBsYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1NlbGVjdGVkVGVtcGxhdGUgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuSVNfU0VMRUNURURfVEVNUExBVEVdO1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWRUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5pc1Jlc2V0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuaXNEaXNhYmxlVG9vbGJhciA9IHRydWU7XHJcbiAgICAgICAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuUkVTRVRfVEVNUExBVEUsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICBjaGFuZ2VTbmFwTGluZXMoY2hlY2tlZCkge1xyXG4gICAgICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgICAgICBzbmFwbGluZXMuc3RhcnRMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSB0aGlzLnNuYXBsaW5lcztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc25hcGxpbmVzLnN0b3BMaXN0ZW5pbmcoKTtcclxuICAgICAgICAgIHN0ZW5jaWwub3B0aW9ucy5zbmFwbGluZXMgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIGFwcGx5T25TZWxlY3Rpb24obWV0aG9kKSB7XHJcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gJ3RvRnJvbnQnKSB7XHJcbiAgICAgICAgICBjb25zdCB0eXBlID0gc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzWzBdLmdldCgndHlwZScpO1xyXG4gICAgICAgICAgaWYgKHR5cGUgPT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JhcGguc3RhcnRCYXRjaCgnc2VsZWN0aW9uJyk7XHJcbiAgICAgICAgc2VsZWN0aW9uLmNvbGxlY3Rpb24ubW9kZWxzLmZvckVhY2goKG1vZGVsKSA9PiB7XHJcbiAgICAgICAgICBtb2RlbFttZXRob2RdKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZ3JhcGguc3RvcEJhdGNoKCdzZWxlY3Rpb24nKTtcclxuICAgICAgfSxcclxuICAgICAgdG9nZ2xlRnVsbHNjcmVlbjogKCkgPT4ge1xyXG4gICAgICAgIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnW2lkXj1cImNkay1vdmVybGF5LVwiXScpWzBdKVxyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaXNGdWxsU2NyZWVuID0gIXRoaXMuaXNGdWxsU2NyZWVuO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5pc0Z1bGxTY3JlZW4pIHtcclxuICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49XCJjZGstb3ZlcmxheS1cIl0nKVswXT8uY2xhc3NMaXN0LnJlbW92ZSgnY2xvc2UtZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfY2RrLW92ZXJsYXknKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2Nkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVyJylbMF0/LmNsYXNzTGlzdC5yZW1vdmUoJ2p1c3RpZnktY29udGVudF9jZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xlZnRwYW5lbCcpPy5jbGFzc0xpc3QuYWRkKCdmdWxsLXNjcmVlbi1icG1uLWVkaXRvcl9wYW5lbCcpO1xyXG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JpZ2h0cGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5pc0V4cGFuZGVkUGFuZWwpIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbCcpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LmFkZCgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbC1leHBhbmRwYW5lbCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRePVwiY2RrLW92ZXJsYXktXCJdJylbMF0/LmNsYXNzTGlzdC5hZGQoJ2Nsb3NlLWZ1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX2Nkay1vdmVybGF5Jyk7XHJcbiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstZ2xvYmFsLW92ZXJsYXktd3JhcHBlcicpWzBdPy5jbGFzc0xpc3QuYWRkKCdqdXN0aWZ5LWNvbnRlbnRfY2RrLWdsb2JhbC1vdmVybGF5LXdyYXBwZXInKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsZWZ0cGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFuZWwnKTtcclxuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyaWdodHBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhbmVsJyk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZFBhbmVsKSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXBlcnBhbmVsJyk/LmNsYXNzTGlzdC5yZW1vdmUoJ2Z1bGwtc2NyZWVuLWJwbW4tZWRpdG9yX3BhcGVycGFuZWwnKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKS5zdHlsZS5oZWlnaHQgPSAnNDAwcHgnO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhcGVycGFuZWwnKT8uY2xhc3NMaXN0LnJlbW92ZSgnZnVsbC1zY3JlZW4tYnBtbi1lZGl0b3JfcGFwZXJwYW5lbC1leHBhbmRwYW5lbCcpO1xyXG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGFwZXJwYW5lbCcpLnN0eWxlLmhlaWdodCA9ICc1MDBweCc7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdG9vbGJhci5vbih7XHJcbiAgICAgICd0by1qc29uOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b0pTT04sXHJcbiAgICAgICdsb2FkOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5sb2FkR3JhcGgsXHJcbiAgICAgICdzYXZlOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5zYXZlR3JhcGgsXHJcbiAgICAgICdjbGVhcjpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25DbGVhcixcclxuICAgICAgJ3ByaW50OnBvaW50ZXJjbGljayc6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgam9pbnRUb29sc0VsID0gcGFwZXIuc3ZnPy5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdqb2ludC10b29scycpO1xyXG4gICAgICAgIGlmIChqb2ludFRvb2xzRWwpIHtcclxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgam9pbnRUb29sc0VsLmxlbmd0aDsgaSArPSAxKSB7XHJcbiAgICAgICAgICAgIGpvaW50VG9vbHNFbFtpXS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBqb2ludC5mb3JtYXQucHJpbnQocGFwZXIpO1xyXG4gICAgICB9LFxyXG4gICAgICAnc2F2ZUFzVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uU2F2ZUFzVGVtcGxhdGUsXHJcbiAgICAgICdzZWxlY3RUZW1wbGF0ZTpvcHRpb246c2VsZWN0JzogdG9vbGJhckNvbW1hbmRzLm9uU2VsZWN0ZWQsXHJcbiAgICAgICdkZWxldGVUZW1wbGF0ZTpwb2ludGVyY2xpY2snOiB0b29sYmFyQ29tbWFuZHMub25EZWxldGVUZW1wbGF0ZSxcclxuICAgICAgJ3Jlc2V0VG9UZW1wVGVtcGxhdGU6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLm9uUmVzZXRUb1RlbXBUZW1wbGF0ZSxcclxuICAgICAgJ3RvLWZyb250OnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy5hcHBseU9uU2VsZWN0aW9uLmJpbmQodGhpcywgJ3RvRnJvbnQnKSxcclxuICAgICAgJ3RvLWJhY2s6cG9pbnRlcmNsaWNrJzogdG9vbGJhckNvbW1hbmRzLmFwcGx5T25TZWxlY3Rpb24uYmluZCh0aGlzLCAndG9CYWNrJyksXHJcbiAgICAgICdzbmFwbGluZTpjaGFuZ2UnOiB0b29sYmFyQ29tbWFuZHMuY2hhbmdlU25hcExpbmVzLmJpbmQodGhpcyksXHJcbiAgICAgICdncmlkLXNpemU6Y2hhbmdlJzogcGFwZXIuc2V0R3JpZFNpemUuYmluZChwYXBlciksXHJcbiAgICAgICdmdWxsc2NyZWVuOnBvaW50ZXJjbGljayc6IHRvb2xiYXJDb21tYW5kcy50b2dnbGVGdWxsc2NyZWVuXHJcbiAgICB9KTtcclxuXHJcbiAgICAkKCcjdG9vbGJhci1jb250YWluZXInKS5odG1sKCcnKTtcclxuICAgIHRvb2xiYXIucmVuZGVyKCkuJGVsLmFwcGVuZFRvKCcjdG9vbGJhci1jb250YWluZXInKTtcclxuXHJcbiAgICBjb25zdCB6b29tVG9vbCA9IG5ldyBqb2ludC51aS5Ub29sYmFyKHtcclxuICAgICAgLy8gaW5pdGkgYWxpemUgdG9vbHMgd2l0aCBkZWZhdWx0IHNldHRpbmdzXHJcbiAgICAgIHRvb2xzOiBbJ3pvb21Ub0ZpdCcsICd6b29tSW4nLCAnem9vbU91dCddLFxyXG4gICAgICByZWZlcmVuY2VzOiB7XHJcbiAgICAgICAgcGFwZXJTY3JvbGxlcixcclxuICAgICAgICBjb21tYW5kTWFuYWdlclxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB6b29tVG9vbC5yZW5kZXIoKS4kZWwuYXBwZW5kVG8oJyN6b29tVG9vbGJhcicpO1xyXG5cclxuICAgIG5ldyBqb2ludC51aS5Ub29sdGlwKHtcclxuICAgICAgdGFyZ2V0OiAnW2RhdGEtdG9vbHRpcF0nLFxyXG4gICAgICBjb250ZW50KGVsKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsLmRhdGFzZXQudG9vbHRpcDtcclxuICAgICAgfSxcclxuICAgICAgdG9wOiAnLmpvaW50LXRvb2xiYXInLFxyXG4gICAgICBwYWRkaW5nOiAxMCxcclxuICAgICAgZGlyZWN0aW9uOiAndG9wJ1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHRvb2x0aXBzIGZvciBhbGwgdGhlIHNoYXBlcyBpbiBzdGVuY2lsLlxyXG4gICAgc3RlbmNpbFxyXG4gICAgICAuZ2V0R3JhcGgoKVxyXG4gICAgICAuZ2V0KCdjZWxscycpXHJcbiAgICAgIC5lYWNoKChjZWxsKSA9PiB7XHJcbiAgICAgICAgbmV3IGpvaW50LnVpLlRvb2x0aXAoe1xyXG4gICAgICAgICAgdGFyZ2V0OiBgLmpvaW50LXN0ZW5jaWwgW21vZGVsLWlkPVwiJHtjZWxsLmlkfVwiXWAsXHJcbiAgICAgICAgICBjb250ZW50OiBjZWxsLmdldCgndHlwZScpLnNwbGl0KCcuJylbMV0sXHJcbiAgICAgICAgICBib3R0b206ICcuam9pbnQtc3RlbmNpbCcsXHJcbiAgICAgICAgICBkaXJlY3Rpb246ICdib3R0b20nLFxyXG4gICAgICAgICAgcGFkZGluZzogMFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvKiBMb2FkICBwcm9jZXNzIGRpZ3JhbSAqL1xyXG4gICAgdGhpcy5sb2FkUHJvY2Vzc0RpYWdyYW0oanNvbkNvbnRlbnQpO1xyXG4gICAgdGhpcy5qc29uT3JpZ2luYWxDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZ3JhcGgudG9KU09OKCkpO1xyXG4gICAgcGFwZXJTY3JvbGxlci5wb3NpdGlvbkNvbnRlbnQoJ3RvcC1sZWZ0JywgeyBwYWRkaW5nOiA1MCwgdXNlTW9kZWxHZW9tZXRyeTogdHJ1ZSB9KTtcclxuXHJcbiAgICAvKiBTZXQgZyByYXBoIG9iamVjdCAqL1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkpPSU5UXSA9IGpvaW50O1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXSA9IGdyYXBoO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSXSA9IHBhcGVyO1xyXG4gICAgd2luZG93W0Zsb3dDaGFydENvbnN0LlBBUEVSX1NDUk9MTEVSXSA9IHBhcGVyU2Nyb2xsZXI7XHJcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoRmxvd0NoYXJ0Q29uc3QuRElBR1JBTV9MT0FERUQsIHRoaXMuZ2V0T3JpZ2luRm9yU2VsZigpKTtcclxuICB9XHJcblxyXG4gIGxvYWRQcm9jZXNzRGlhZ3JhbShqc29uQ29udGVudD86IHN0cmluZykge1xyXG4gICAgaWYgKCFqc29uQ29udGVudCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBncmFwaC5mcm9tSlNPTihqc29uQ29udGVudCk7XHJcbiAgfVxyXG5cclxuICBhZGRJdGVtVGVtcGxhdGUoZmxvd0NoYXJ0SWQ/OiBzdHJpbmcsIGRpYWdyYW1UZW1wbGF0ZT86IGFueSkge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uID0ge1xyXG4gICAgICAgICAgaW5kZXg6IDEsXHJcbiAgICAgICAgICBjb250ZW50OiBkaWFncmFtVGVtcGxhdGUudGVtcGxhdGVOYW1lLFxyXG4gICAgICAgICAgZmxvd0NoYXJ0SWQsXHJcbiAgICAgICAgICBuYW1lOiBkaWFncmFtVGVtcGxhdGUubmFtZSxcclxuICAgICAgICAgIGpzb25Db250ZW50OiBkaWFncmFtVGVtcGxhdGUuanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICBzZWxlY3RlZDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geC5jb250ZW50ID09PSBvcHRpb24uY29udGVudDtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMucHVzaChvcHRpb24pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWxlY3RJdGVtKGZsb3dDaGFydElkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QpIHtcclxuICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5zcGxpY2UoXHJcbiAgICAgICAgICBhcnJTZWxlY3RbMF0ub3B0aW9ucy5maW5kSW5kZXgoKGkpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGkuZmxvd0NoYXJ0SWQgPT09IGZsb3dDaGFydElkO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICAxXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VGVtcEdyYXBoKCkge1xyXG4gICAgaWYgKHRoaXMuanNvblRlbXBDb250ZW50KSB7XHJcbiAgICAgIHRoaXMubG9hZFByb2Nlc3NEaWFncmFtKEpTT04ucGFyc2UodGhpcy5qc29uVGVtcENvbnRlbnQpKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNUZW1wID0gdHJ1ZTtcclxuICAgIHRoaXMuaXNSZXNldCA9IGZhbHNlO1xyXG4gICAgdGhpcy5pc0Rpc2FibGVUb29sYmFyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRPcmlnaW5Gb3JTZWxmKCkge1xyXG4gICAgcmV0dXJuICcqJztcclxuICB9XHJcblxyXG4gIHNldERlZmF1bHRTZWxlY3RlZFZhbHVlKCkge1xyXG4gICAgaWYgKHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnNbMF0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGBzZWxlY3QtYm94LXNlbGVjdGlvbmApWzBdO1xyXG4gICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IEZsb3dDaGFydENvbnN0LlNFTEVDVF9URU1QTEFURTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0SXRlbUZsb3dDaGFydElkKGZsb3dDaGFydElkPzogc3RyaW5nKSB7XHJcbiAgICBpZiAodG9vbGJhckNvbmZpZy50b29scykge1xyXG4gICAgICBjb25zdCBhcnJTZWxlY3QgPSB0b29sYmFyQ29uZmlnLnRvb2xzLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtLnR5cGUgPT09ICdzZWxlY3QtYm94JztcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChhcnJTZWxlY3QgJiYgYXJyU2VsZWN0WzBdLm9wdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuZm9yRWFjaCgoeCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGlmICh4LmZsb3dDaGFydElkID09PSBmbG93Q2hhcnRJZCkge1xyXG4gICAgICAgICAgICB4LnNlbGVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgbGlzdCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYHNlbGVjdC1ib3gtc2VsZWN0aW9uYClbMF07XHJcbiAgICAgICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmNsYXNzTGlzdC5hZGQoJ3NlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgIGxpc3QuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgc2VsZWN0LWJveC1vcHRpb24tY29udGVudGApWzBdLmlubmVySFRNTCA9IHguY29udGVudDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaXNTaG93Q29uZmlybU1lc3NhZ2UoKSB7XHJcbiAgICBjb25zdCBteUdyYXBoID0gd2luZG93W0Zsb3dDaGFydENvbnN0LkdSQVBIXTtcclxuICAgIGNvbnN0IGpzb24gPSBteUdyYXBoLnRvSlNPTigpO1xyXG4gICAgaWYgKGpzb24uY2VsbHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0gPSB0cnVlO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZiAoIXdpbmRvd1tGbG93Q2hhcnRDb25zdC5JU19OT1RfU0hPV19BR0FJTl0pIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0VHJhbnNpdGlvblBvaW50KGpzb25Db250ZW50OiBvYmplY3QsIHBhcGVyU2Nyb2xsZXI6IGFueSkge1xyXG4gICAgaWYgKGpzb25Db250ZW50KSB7XHJcbiAgICAgIGNvbnN0IGNlbGxzID0ganNvbkNvbnRlbnRbYGNlbGxzYF07XHJcbiAgICAgIGlmIChjZWxscykge1xyXG4gICAgICAgIGxldCB4ID0gMDtcclxuICAgICAgICBsZXQgeSA9IDA7XHJcbiAgICAgICAgY2VsbHMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGUucG9zaXRpb24gJiYgZS5wb3NpdGlvbikge1xyXG4gICAgICAgICAgICBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgICB5ID0gZS5wb3NpdGlvbi55O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlLnBvc2l0aW9uLnggPCB4KSB7XHJcbiAgICAgICAgICAgICAgeCA9IGUucG9zaXRpb24ueDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZS5wb3NpdGlvbi55IDwgeSkge1xyXG4gICAgICAgICAgICAgIHkgPSBlLnBvc2l0aW9uLnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHggIT09IDAgJiYgeSAhPT0gMCkge1xyXG4gICAgICAgICAgeCA9IHggPiAyMCA/IHggLSAyMCA6IHg7XHJcbiAgICAgICAgICB5ID0geSA+IDIwID8geSAtIDIwIDogeTtcclxuICAgICAgICAgIHBhcGVyU2Nyb2xsZXIudHJhbnNpdGlvblRvUG9pbnQoeCwgeSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuU2hhcGVGdW5jdGlvbmFsaXR5KExBTkc6IGFueSkge1xyXG4gICAgY29uc3QgbXlDZWxsVmlldyA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddO1xyXG4gICAgaWYgKCEhbXlDZWxsVmlldykge1xyXG4gICAgICBqb2ludC51aS5JbnNwZWN0b3IuY2xvc2UoKTtcclxuICAgICAgY29uc3QgaW5wdXRzID0gSW5zcGVjdG9yRnVuY3Rpb24uZ2V0SW5zcGVjdG9yQ29uZmlndXJhdGlvbihicG1uMiwgTEFORywgbnVsbCk7XHJcbiAgICAgIGNvbnN0IGNlbGwgPSBteUNlbGxWaWV3Lm1vZGVsO1xyXG4gICAgICBjb25zdCB0eXBlID0gY2VsbC5nZXQoJ3R5cGUnKTtcclxuICAgICAgam9pbnQudWkuSW5zcGVjdG9yLmNyZWF0ZSgnI2luc3BlY3Rvci1jb250YWluZXInLCB7XHJcbiAgICAgICAgY2VsbCxcclxuICAgICAgICBpbnB1dHM6IGlucHV0c1t0eXBlXSxcclxuICAgICAgICBncm91cHM6IHtcclxuICAgICAgICAgIGdlbmVyYWw6IHsgbGFiZWw6IHR5cGUsIGluZGV4OiAxIH0sXHJcbiAgICAgICAgICBkZWZhdWx0czogeyBpbmRleDogMiB9LFxyXG4gICAgICAgICAgZm9udHNpemU6IHsgaW5kZXg6IDMgfSxcclxuICAgICAgICAgIGFwcGVhcmFuY2U6IHsgaW5kZXg6IDQgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRab29tVG9GaXQoZWRpdE1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGVkaXRNb2RlID09PSBGbG93Y2hhcnRWaWV3TW9kZS5WaWV3KSB7XHJcbiAgICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgICBwYXBlclNjcm9sbGVyLnpvb21Ub0ZpdCh7IHBhZGRpbmc6IDIwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRQYXBlckNlbnRlcihlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvQ2VudGVyKHsgcGFkZGluZzogMjAsIHNjYWxlR3JpZDogMC4yLCBtaW5TY2FsZTogMC4yLCBtYXhTY2FsZTogNSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFBhcGVyVG9wTGVmdChlZGl0TW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoZWRpdE1vZGUgPT09IEZsb3djaGFydFZpZXdNb2RlLlZpZXcpIHtcclxuICAgICAgY29uc3QgcGFwZXJTY3JvbGxlciA9IHdpbmRvd1tGbG93Q2hhcnRDb25zdC5QQVBFUl9TQ1JPTExFUl07XHJcbiAgICAgIHBhcGVyU2Nyb2xsZXIuY29udGVudFRvVG9wTGVmdCh7IHBhZGRpbmc6IDUwLCBzY2FsZUdyaWQ6IDAuMiwgbWluU2NhbGU6IDAuMiwgbWF4U2NhbGU6IDUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTY3JvbGxUb0NvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBncmFwaCA9IHdpbmRvd1tgZ3JhcGhgXTtcclxuICAgIGNvbnN0IHBhcGVyU2Nyb2xsZXIgPSB3aW5kb3dbRmxvd0NoYXJ0Q29uc3QuUEFQRVJfU0NST0xMRVJdO1xyXG4gICAgaWYgKGdyYXBoICYmIHBhcGVyU2Nyb2xsZXIpIHtcclxuICAgICAgY29uc3QganNvbkNvbnRlbnRPYmogPSBncmFwaC50b0pTT04oKTtcclxuICAgICAgaWYgKGpzb25Db250ZW50T2JqICYmIGpzb25Db250ZW50T2JqLmNlbGxzLmxlbmd0aCkge1xyXG4gICAgICAgIHBhcGVyU2Nyb2xsZXIuc2Nyb2xsVG9Db250ZW50KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFwZXJTY3JvbGxlci5jZW50ZXIoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VUZXh0SW5zaWRlKGNlbGw6IGFueSkge1xyXG4gICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5FdmVudCcpIHtcclxuICAgICAgaWYgKGNlbGwuYXR0cmlidXRlcy5hdHRycy50ZXh0LnN0eWxlWyd0ZXh0LWluc2lkZSddKSB7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICdtaWRkbGUnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZldpZHRoID0gJzIwJSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmSGVpZ2h0ID0gJzIwJSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0ge1xyXG4gICAgICAgICAgd2lkdGg6IDAsXHJcbiAgICAgICAgICBoZWlnaHQ6IDAsXHJcbiAgICAgICAgICBlbGxpcHNpczogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsLnRleHRWZXJ0aWNhbEFuY2hvciA9ICd0b3AnO1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5pY29uLnJlZldpZHRoID0gJzcwJSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmljb24ucmVmSGVpZ2h0ID0gJzcwJSc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChcclxuICAgICAgY2VsbC5nZXQoJ3R5cGUnKSA9PT0gJ2JwbW4yLkdhdGV3YXknIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5Db252ZXJzYXRpb24nIHx8XHJcbiAgICAgIGNlbGwuZ2V0KCd0eXBlJykgPT09ICdicG1uMi5EYXRhT2JqZWN0JyB8fFxyXG4gICAgICBjZWxsLmdldCgndHlwZScpID09PSAnYnBtbjIuRGF0YVN0b3JlJ1xyXG4gICAgKSB7XHJcbiAgICAgIGlmIChjZWxsLmF0dHJpYnV0ZXMuYXR0cnMudGV4dC5zdHlsZVsndGV4dC1pbnNpZGUnXSkge1xyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5sYWJlbC50ZXh0VmVydGljYWxBbmNob3IgPSAnbWlkZGxlJztcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWxbJ3RleHRXcmFwJ10gPSB7XHJcbiAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgIGhlaWdodDogMCxcclxuICAgICAgICAgIGVsbGlwc2lzOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMubGFiZWwudGV4dFZlcnRpY2FsQW5jaG9yID0gJ3RvcCc7XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmxhYmVsWyd0ZXh0V3JhcCddID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VMaW5rTGFiZWwoY2VsbDogYW55LCBkZWZTaXplOiBudW1iZXIpIHtcclxuICAgIGlmIChjZWxsLmlzTGluaygpKSB7XHJcbiAgICAgIGxldCBzaXplID0gZGVmU2l6ZTtcclxuICAgICAgbGV0IHJlZlBvcyA9IDA7XHJcbiAgICAgIGNvbnN0IGxpbmtJZCA9IGNlbGwuaWQ7XHJcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXHJcbiAgICAgIGdyYXBoLmdldExpbmtzKCkuZXZlcnkoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICBpZiAobGlua0lkID09PSBlLmlkKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlZlBvcyArPSAxO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIGdyYXBoLmdldExpbmtzKClbcmVmUG9zXT8uYXR0cmlidXRlcy5hdHRycy50ZXh0ICYmXHJcbiAgICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdPy5hdHRyaWJ1dGVzLmF0dHJzLnRleHRbJ2ZvbnQtc2l6ZSddXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNpemUgPSBncmFwaC5nZXRMaW5rcygpW3JlZlBvc10/LmF0dHJpYnV0ZXMuYXR0cnMudGV4dFsnZm9udC1zaXplJ107XHJcbiAgICAgIH1cclxuICAgICAgZ3JhcGguZ2V0TGlua3MoKVtyZWZQb3NdPy5wcm9wKCdsYWJlbHMvMC9hdHRycy9sYWJlbC9mb250U2l6ZScsIHNpemUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DaGFuZ2VBbGxpZ21lbnQoY2VsbDogYW55LCBvcHQ6IGFueSkge1xyXG4gICAgaWYgKGNlbGwuZ2V0KCd0eXBlJykgIT09ICdicG1uMi5IZWFkZXJlZFBvb2wnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIG9wdC5kaXJlY3Rpb24gJiZcclxuICAgICAgKG9wdC5kaXJlY3Rpb24gPT09ICd0b3AtcmlnaHQnIHx8XHJcbiAgICAgICAgb3B0LmRpcmVjdGlvbiA9PT0gJ3RvcC1yaWdodCcgfHxcclxuICAgICAgICBvcHQuZGlyZWN0aW9uID09PSAnYm90dG9tLXJpZ2h0JyB8fFxyXG4gICAgICAgIG9wdC5kaXJlY3Rpb24gPT09ICdib3R0b20tbGVmdCcpXHJcbiAgICApIHtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xyXG4gICAgICBjb25zdCBoZWFkZXJMYWJlbEFuY2hvciA9IGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbFsndGV4dC1hbmNob3InXTtcclxuICAgICAgdGhpcy5zZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbCwgaGVhZGVyTGFiZWxBbmNob3IsIGhlaWdodCk7XHJcblxyXG4gICAgICAvLyB1cGRhdGUgbGFzdCBsYW5lIHZhbHVlXHJcbiAgICAgIGlmICghdGhpcy5pc1VuZGVmaW5lZFNpemUoY2VsbC5hdHRyaWJ1dGVzKSkge1xyXG4gICAgICAgIGNvbnN0IGggPSBjZWxsLmF0dHJpYnV0ZXMuc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgY29uc3QgdCA9IHRoaXMuZ2V0VG90YWxMYW5lSGVpZ2h0KGNlbGwuYXR0cmlidXRlcyk7XHJcbiAgICAgICAgY29uc3QgYiA9IGggLSB0O1xyXG4gICAgICAgIGlmIChiID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgcyA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5zbGljZSgtMSlbMF0uc2l6ZSArIGI7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGNlbGwuYXR0cmlidXRlcy5sYW5lcy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmxhbmVzW2luZGV4XS5zaXplID0gcztcclxuXHJcbiAgICAgICAgICBjb25zdCBsYW5lID0gYGxhbmVzXyR7aW5kZXh9YDtcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS5zaXplID0gcztcclxuICAgICAgICAgIGNlbGwubWV0cmljcy5sYW5lc1tsYW5lXS50YWtlblVwU3BhY2VCeUxhbmVBbmRTdWJsYW5lcyA9IHM7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHMgPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMuc2xpY2UoLTEpWzBdLnNpemUgKyBiO1xyXG4gICAgICAgICAgY29uc3QgaW5kZXggPSBjZWxsLmF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgIGNlbGwuYXR0cmlidXRlcy5sYW5lc1tpbmRleF0uc2l6ZSA9IHM7XHJcblxyXG4gICAgICAgICAgY29uc3QgbGFuZSA9IGBsYW5lc18ke2luZGV4fWA7XHJcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0uc2l6ZSA9IHM7XHJcbiAgICAgICAgICBjZWxsLm1ldHJpY3MubGFuZXNbbGFuZV0udGFrZW5VcFNwYWNlQnlMYW5lQW5kU3VibGFuZXMgPSBzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcHQucHJvcGVydHlQYXRoICYmIG9wdC5wcm9wZXJ0eVBhdGggPT09ICdhdHRycy9oZWFkZXJMYWJlbC90ZXh0LWFuY2hvcicpIHtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gY2VsbC5hdHRyaWJ1dGVzLnNpemUuaGVpZ2h0O1xyXG4gICAgICBjb25zdCB0ZXh0QW5jaG9yID0gb3B0LnByb3BlcnR5VmFsdWU7XHJcbiAgICAgIHRoaXMuc2V0SGVhZGVyQXR0cmlidXRlKGNlbGwsIHRleHRBbmNob3IsIGhlaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRIZWFkZXJBdHRyaWJ1dGUoY2VsbDogYW55LCB0ZXh0QW5jaG9yOiBzdHJpbmcsIGhlaWdodDogbnVtYmVyKSB7XHJcbiAgICBzd2l0Y2ggKHRleHRBbmNob3IpIHtcclxuICAgICAgY2FzZSAnZW5kJzpcclxuICAgICAgICBjZWxsLmF0dHJpYnV0ZXMuYXR0cnMuaGVhZGVyTGFiZWwucmVmWSA9IDg7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ21pZGRsZSc6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLyAyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdzdGFydCc6XHJcbiAgICAgICAgY2VsbC5hdHRyaWJ1dGVzLmF0dHJzLmhlYWRlckxhYmVsLnJlZlkgPSBoZWlnaHQgLSA4O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNlbGwuYXR0cmlidXRlcy5hdHRycy5oZWFkZXJMYWJlbC5yZWZZID0gaGVpZ2h0IC8gMjtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzVW5kZWZpbmVkU2l6ZShhdHRyaWJ1dGVzKSB7XHJcbiAgICBsZXQgYlJlc3VsdCA9IGZhbHNlO1xyXG4gICAgaWYgKGF0dHJpYnV0ZXMgJiYgYXR0cmlidXRlcy5sYW5lcy5sZW5ndGgpIHtcclxuICAgICAgYXR0cmlidXRlcy5sYW5lcy5ldmVyeSgoZSkgPT4ge1xyXG4gICAgICAgIGlmICghZS5zaXplKSB7XHJcbiAgICAgICAgICBiUmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJSZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBnZXRUb3RhbExhbmVIZWlnaHQoYXR0cmlidXRlcykge1xyXG4gICAgbGV0IHRvdGFsID0gMDtcclxuICAgIGlmIChhdHRyaWJ1dGVzICYmIGF0dHJpYnV0ZXMubGFuZXMubGVuZ3RoKSB7XHJcbiAgICAgIGF0dHJpYnV0ZXMubGFuZXMuZm9yRWFjaCgoZSkgPT4ge1xyXG4gICAgICAgIGlmIChlLnNpemUpIHtcclxuICAgICAgICAgIHRvdGFsICs9IGUuc2l6ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvdGFsO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlhZ3JhbVRlbXBsYXRlcyhkaWFncmFtVGVtcGxhdGVzOiBEaWFncmFtVGVtcGxhdGVzW10pIHtcclxuICAgIGlmICh0b29sYmFyQ29uZmlnICYmIHRvb2xiYXJDb25maWcudG9vbHMpIHtcclxuICAgICAgY29uc3QgYXJyU2VsZWN0ID0gdG9vbGJhckNvbmZpZy50b29scy5maWx0ZXIoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gaXRlbS50eXBlID09PSAnc2VsZWN0LWJveCc7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoYXJyU2VsZWN0KSB7XHJcbiAgICAgICAgZGlhZ3JhbVRlbXBsYXRlcy5mb3JFYWNoKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSB7XHJcbiAgICAgICAgICAgIGluZGV4OiAxLFxyXG4gICAgICAgICAgICBjb250ZW50OiB4LnRlbXBsYXRlTmFtZSxcclxuICAgICAgICAgICAgZmxvd0NoYXJ0SWQ6IHguZmxvd0NoYXJ0SWQsXHJcbiAgICAgICAgICAgIG5hbWU6IHgubmFtZSxcclxuICAgICAgICAgICAganNvbkNvbnRlbnQ6IHguanNvbkNvbnRlbnQsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gYXJyU2VsZWN0WzBdLm9wdGlvbnMuZmluZEluZGV4KCh4KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB4LmNvbnRlbnQudG9Mb3dlckNhc2UoKSA9PT0gb3B0aW9uLmNvbnRlbnQudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgYXJyU2VsZWN0WzBdLm9wdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGFyclNlbGVjdFswXS5vcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRDZWxsVmlldygpIHtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5NWV9DRUxMX1ZJRVddID0gbnVsbDtcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TRUxFQ1RFRF9TSEFQRV9JRF0gPSAnJztcclxuICAgIHdpbmRvd1tGbG93Q2hhcnRDb25zdC5TSEFQRV9UWVBFXSA9ICcnO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZVBvb2xUb29scyhwb29sVmlldywgY29vcmRpbmF0ZXMpIHtcclxuICB2YXIgcG9vbCA9IHBvb2xWaWV3Lm1vZGVsO1xyXG5cclxuICAvLyBJZiB0aGVyZSBpcyBhIGxhbmUgdW5kZXIgdGhlIHBvaW50ZXIgKG1vdXNlL3RvdWNoKSxcclxuICAvLyBhZGQgdGhlIHN3aW1sYW5lIHRvb2xzIGFuZCByZW1vdmUgdGhlIEZyZWVUcmFuc2Zvcm0gZnJvbSB0aGUgY2VsbFxyXG4gIHZhciBsYW5lc0lkcyA9IHBvb2wuZ2V0TGFuZXNGcm9tUG9pbnQoY29vcmRpbmF0ZXMpO1xyXG4gIGlmIChsYW5lc0lkcy5sZW5ndGggPT09IDApIHJldHVybjtcclxuICB2YXIgbGFuZUlkID0gbGFuZXNJZHNbMF07XHJcblxyXG4gIHZhciBib3VuZGFyeVRvb2wgPSBuZXcgam9pbnQuZWxlbWVudFRvb2xzLlN3aW1sYW5lQm91bmRhcnkoe1xyXG4gICAgbGFuZUlkOiBsYW5lSWQsXHJcbiAgICBwYWRkaW5nOiAwLFxyXG4gICAgYXR0cmlidXRlczoge1xyXG4gICAgICAnZmlsbCc6ICdub25lJyxcclxuICAgICAgJ3N0cm9rZS13aWR0aCc6IDMsXHJcbiAgICAgICdzdHJva2UnOiAnIzM0OThkYidcclxuICAgIH1cclxuICB9KTtcclxuICB2YXIgdHJhbnNmb3JtVG9vbCA9IG5ldyBqb2ludC5lbGVtZW50VG9vbHMuU3dpbWxhbmVUcmFuc2Zvcm0oe1xyXG4gICAgbGFuZUlkOiBsYW5lSWQsXHJcbiAgICBtaW5TaXplOiA2MCxcclxuICAgIHBhZGRpbmc6IDAsXHJcbiAgfSk7XHJcbiAgdmFyIGVsZW1lbnRUb29sc1ZpZXcgPSBuZXcgam9pbnQuZGlhLlRvb2xzVmlldyh7XHJcbiAgICB0b29sczogW2JvdW5kYXJ5VG9vbCwgdHJhbnNmb3JtVG9vbF1cclxuICB9KTtcclxuICBwb29sVmlldy5hZGRUb29scyhlbGVtZW50VG9vbHNWaWV3KTtcclxuICBqb2ludC51aS5GcmVlVHJhbnNmb3JtLmNsZWFyKHBhcGVyKTtcclxufVxyXG4iXX0=
|