@po-ui/ng-components 16.4.1 → 16.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/po-field/po-combo/interfaces/po-combo-literals-default.interface.mjs +9 -5
- package/esm2022/lib/components/po-field/po-combo/interfaces/po-combo-literals.interface.mjs +1 -1
- package/esm2022/lib/components/po-field/po-combo/po-combo-base.component.mjs +4 -1
- package/esm2022/lib/components/po-field/po-combo/po-combo.component.mjs +90 -41
- package/esm2022/lib/components/po-field/po-field.module.mjs +17 -13
- package/esm2022/lib/components/po-field/po-lookup/po-lookup-modal/po-lookup-modal.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-base.component.mjs +30 -7
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-dropdown/po-multiselect-dropdown.component.mjs +4 -4
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-literals.interface.mjs +1 -1
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect.component.mjs +220 -51
- package/esm2022/lib/components/po-field/po-rich-text/po-rich-text-toolbar/po-rich-text-toolbar.component.mjs +3 -3
- package/esm2022/lib/components/po-listbox/po-item-list/po-item-list.component.mjs +2 -2
- package/esm2022/lib/components/po-listbox/po-listbox.component.mjs +5 -4
- package/esm2022/lib/components/po-table/po-table-base.component.mjs +5 -5
- package/esm2022/lib/components/po-tag/index.mjs +2 -1
- package/esm2022/lib/components/po-tag/interfaces/po-tag-literals.interface.mjs +2 -0
- package/esm2022/lib/components/po-tag/po-tag-base.component.mjs +70 -4
- package/esm2022/lib/components/po-tag/po-tag.component.mjs +52 -44
- package/esm2022/lib/enums/po-key-code.enum.mjs +5 -1
- package/fesm2022/po-ui-ng-components.mjs +801 -574
- package/fesm2022/po-ui-ng-components.mjs.map +1 -1
- package/lib/components/po-field/po-combo/interfaces/po-combo-literals.interface.d.ts +2 -0
- package/lib/components/po-field/po-combo/po-combo.component.d.ts +8 -5
- package/lib/components/po-field/po-field.module.d.ts +44 -44
- package/lib/components/po-field/po-multiselect/po-multiselect-base.component.d.ts +21 -2
- package/lib/components/po-field/po-multiselect/po-multiselect-literals.interface.d.ts +2 -0
- package/lib/components/po-field/po-multiselect/po-multiselect.component.d.ts +18 -6
- package/lib/components/po-table/po-table-base.component.d.ts +2 -2
- package/lib/components/po-tag/index.d.ts +1 -0
- package/lib/components/po-tag/interfaces/po-tag-literals.interface.d.ts +11 -0
- package/lib/components/po-tag/po-tag-base.component.d.ts +50 -2
- package/lib/components/po-tag/po-tag.component.d.ts +6 -6
- package/lib/enums/po-key-code.enum.d.ts +5 -1
- package/package.json +4 -4
- package/po-ui-ng-components-16.6.0.tgz +0 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-update/v14/index.js +1 -1
- package/schematics/ng-update/v15/index.js +1 -1
- package/schematics/ng-update/v16/index.js +1 -1
- package/schematics/ng-update/v2/index.js +1 -1
- package/schematics/ng-update/v3/index.js +1 -1
- package/schematics/ng-update/v4/index.js +1 -1
- package/schematics/ng-update/v5/index.js +1 -1
- package/schematics/ng-update/v6/index.js +1 -1
- package/esm2022/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.mjs +0 -91
- package/esm2022/lib/components/po-tag/po-tag.literals.mjs +0 -15
- package/lib/components/po-field/po-multiselect/po-multiselect-search/po-multiselect-search.component.d.ts +0 -40
- package/lib/components/po-tag/po-tag.literals.d.ts +0 -14
- package/po-ui-ng-components-16.4.1.tgz +0 -0
package/esm2022/lib/components/po-field/po-combo/interfaces/po-combo-literals-default.interface.mjs
CHANGED
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
export const poComboLiteralsDefault = {
|
|
2
2
|
en: {
|
|
3
3
|
noData: 'No data found',
|
|
4
|
-
chooseOption: 'Choose an option'
|
|
4
|
+
chooseOption: 'Choose an option',
|
|
5
|
+
clear: 'Clear'
|
|
5
6
|
},
|
|
6
7
|
es: {
|
|
7
8
|
noData: 'Datos no encontrados',
|
|
8
|
-
chooseOption: 'Elija una opción'
|
|
9
|
+
chooseOption: 'Elija una opción',
|
|
10
|
+
clear: 'limpia'
|
|
9
11
|
},
|
|
10
12
|
pt: {
|
|
11
13
|
noData: 'Nenhum dado encontrado',
|
|
12
|
-
chooseOption: 'Escolha uma opção'
|
|
14
|
+
chooseOption: 'Escolha uma opção',
|
|
15
|
+
clear: 'Apagar'
|
|
13
16
|
},
|
|
14
17
|
ru: {
|
|
15
18
|
noData: 'Данные не найдены',
|
|
16
|
-
chooseOption: 'Выберите опцию'
|
|
19
|
+
chooseOption: 'Выберите опцию',
|
|
20
|
+
clear: 'чистый'
|
|
17
21
|
}
|
|
18
22
|
};
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tbGl0ZXJhbHMtZGVmYXVsdC5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY29tYm8vaW50ZXJmYWNlcy9wby1jb21iby1saXRlcmFscy1kZWZhdWx0LmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRztJQUNwQyxFQUFFLEVBQW1CO1FBQ25CLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLFlBQVksRUFBRSxrQkFBa0I7UUFDaEMsS0FBSyxFQUFFLE9BQU87S0FDZjtJQUNELEVBQUUsRUFBbUI7UUFDbkIsTUFBTSxFQUFFLHNCQUFzQjtRQUM5QixZQUFZLEVBQUUsa0JBQWtCO1FBQ2hDLEtBQUssRUFBRSxRQUFRO0tBQ2hCO0lBQ0QsRUFBRSxFQUFtQjtRQUNuQixNQUFNLEVBQUUsd0JBQXdCO1FBQ2hDLFlBQVksRUFBRSxtQkFBbUI7UUFDakMsS0FBSyxFQUFFLFFBQVE7S0FDaEI7SUFDRCxFQUFFLEVBQW1CO1FBQ25CLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsWUFBWSxFQUFFLGdCQUFnQjtRQUM5QixLQUFLLEVBQUUsUUFBUTtLQUNoQjtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb0NvbWJvTGl0ZXJhbHMgfSBmcm9tICcuL3BvLWNvbWJvLWxpdGVyYWxzLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjb25zdCBwb0NvbWJvTGl0ZXJhbHNEZWZhdWx0ID0ge1xuICBlbjogPFBvQ29tYm9MaXRlcmFscz57XG4gICAgbm9EYXRhOiAnTm8gZGF0YSBmb3VuZCcsXG4gICAgY2hvb3NlT3B0aW9uOiAnQ2hvb3NlIGFuIG9wdGlvbicsXG4gICAgY2xlYXI6ICdDbGVhcidcbiAgfSxcbiAgZXM6IDxQb0NvbWJvTGl0ZXJhbHM+e1xuICAgIG5vRGF0YTogJ0RhdG9zIG5vIGVuY29udHJhZG9zJyxcbiAgICBjaG9vc2VPcHRpb246ICdFbGlqYSB1bmEgb3BjacOzbicsXG4gICAgY2xlYXI6ICdsaW1waWEnXG4gIH0sXG4gIHB0OiA8UG9Db21ib0xpdGVyYWxzPntcbiAgICBub0RhdGE6ICdOZW5odW0gZGFkbyBlbmNvbnRyYWRvJyxcbiAgICBjaG9vc2VPcHRpb246ICdFc2NvbGhhIHVtYSBvcMOnw6NvJyxcbiAgICBjbGVhcjogJ0FwYWdhcidcbiAgfSxcbiAgcnU6IDxQb0NvbWJvTGl0ZXJhbHM+e1xuICAgIG5vRGF0YTogJ9CU0LDQvdC90YvQtSDQvdC1INC90LDQudC00LXQvdGLJyxcbiAgICBjaG9vc2VPcHRpb246ICfQktGL0LHQtdGA0LjRgtC1INC+0L/RhtC40Y4nLFxuICAgIGNsZWFyOiAn0YfQuNGB0YLRi9C5J1xuICB9XG59O1xuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tbGl0ZXJhbHMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNvbWJvL2ludGVyZmFjZXMvcG8tY29tYm8tbGl0ZXJhbHMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB1c2VkQnkgUG9Db21ib0NvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEludGVyZmFjZSBwYXJhIGRlZmluacOnw6NvIGRhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLWNvbWJvYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb0NvbWJvTGl0ZXJhbHMge1xuICAvKiogVGV4dG8gZXhpYmlkbyBxdWFuZG8gbsOjbyBob3V2ZXIgaXRlbnMgbmEgbGlzdGEgb3Ugc2UsIGEgcGVzcXVpc2EgZG8gZmlsdHJvIG7Do28gcmV0b3JuYXIgbmVuaHVtIGl0ZW0uICovXG4gIG5vRGF0YT86IHN0cmluZztcblxuICAvKiogVGV4dG8gZXhpYmlkbyBxdWFuZG8gbyBjb21ibyBlc3RpdmVyIHZhemlvLiAqL1xuICBjaG9vc2VPcHRpb24/
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tbGl0ZXJhbHMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNvbWJvL2ludGVyZmFjZXMvcG8tY29tYm8tbGl0ZXJhbHMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEB1c2VkQnkgUG9Db21ib0NvbXBvbmVudFxuICpcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIEludGVyZmFjZSBwYXJhIGRlZmluacOnw6NvIGRhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLWNvbWJvYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQb0NvbWJvTGl0ZXJhbHMge1xuICAvKiogVGV4dG8gZXhpYmlkbyBxdWFuZG8gbsOjbyBob3V2ZXIgaXRlbnMgbmEgbGlzdGEgb3Ugc2UsIGEgcGVzcXVpc2EgZG8gZmlsdHJvIG7Do28gcmV0b3JuYXIgbmVuaHVtIGl0ZW0uICovXG4gIG5vRGF0YT86IHN0cmluZztcblxuICAvKiogVGV4dG8gZXhpYmlkbyBxdWFuZG8gbyBjb21ibyBlc3RpdmVyIHZhemlvLiAqL1xuICBjaG9vc2VPcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRvIGFyaWEtbGFiZWwgZG8gYm90w6NvIGRlIGxpbXBhciAqL1xuICBjbGVhbj86IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -767,6 +767,9 @@ export class PoComboBaseComponent {
|
|
|
767
767
|
this.updateComboList();
|
|
768
768
|
this.initInputObservable();
|
|
769
769
|
this.updateHasNext();
|
|
770
|
+
if (this.service || this.filterService) {
|
|
771
|
+
this.keyupSubscribe.unsubscribe();
|
|
772
|
+
}
|
|
770
773
|
}
|
|
771
774
|
configAfterSetFilterService(service) {
|
|
772
775
|
if (service) {
|
|
@@ -1018,4 +1021,4 @@ export class PoComboBaseComponent {
|
|
|
1018
1021
|
type: Input,
|
|
1019
1022
|
args: [{ alias: 'p-append-in-body', transform: convertToBoolean }]
|
|
1020
1023
|
}] }); })();
|
|
1021
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY29tYm8vcG8tY29tYm8tYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUc1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBSTFGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFHaEUsTUFBTSw4QkFBOEIsR0FBRyxHQUFHLENBQUM7QUFDM0MsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLENBQUM7QUFDN0MsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxNQUFNLE9BQWdCLG9CQUFvQjtJQUN4Qzs7Ozs7Ozs7OztPQVVHO0lBQzRELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFMUYsMkJBQTJCO0lBQ1QsS0FBSyxDQUFVO0lBRWpDLG1DQUFtQztJQUNsQixJQUFJLENBQVU7SUFFL0IsMEJBQTBCO0lBQ1gsSUFBSSxDQUFTO0lBRTVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ3dCLGFBQWEsQ0FBeUI7SUFFakU7Ozs7Ozs7O09BUUc7SUFDSCxJQUFnQyxjQUFjLENBQUMsS0FBYztRQUMzRCxJQUFJLENBQUMs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QUFlO1lBaUJRLFlBQVk7a0JBQXpDLEtBQUs7bUJBQUMsaUJBQWlCO1lBbUJhLGtCQUFrQjtrQkFBdEQsS0FBSzttQkFBQyx3QkFBd0I7WUFvQkgsVUFBVTtrQkFBckMsS0FBSzttQkFBQyxlQUFlO1lBNEJNLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQXdCVyxlQUFlO2tCQUEvQyxLQUFLO21CQUFDLG9CQUFvQjtZQWtCRixRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFnQk8sWUFBWTtrQkFBckMsS0FBSzttQkFBQyxpQkFBaUI7WUFVUSxhQUFhO2tCQUE1QyxLQUFLO21CQUFDLG1CQUFtQjtZQWdCRCxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUFXRSxJQUFJO2tCQUF4QixLQUFLO21CQUFDLFFBQVE7WUF3QlMsT0FBTztrQkFBOUIsS0FBSzttQkFBQyxXQUFXO1lBcUJVLFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQTRCUSxZQUFZO2tCQUF6QyxLQUFLO21CQUFDLGlCQUFpQjtZQWtDQyxRQUFRO2tCQUFoQyxLQUFLO21CQUFDLFlBQVk7WUEyQnVDLEtBQUs7a0JBQTlELEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtZQWNXLFNBQVM7a0JBQTNFLEtBQUs7bUJBQUMsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgUG9MYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbnZlcnRUb0Jvb2xlYW4sIGlzVHlwZW9mLCB2YWxpZFZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyByZXF1aXJlZEZhaWxlZCB9IGZyb20gJy4uL3ZhbGlkYXRvcnMnO1xuXG5pbXBvcnQgeyBQb0NvbWJvRmlsdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLWZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib0dyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLWdyb3VwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBwb0NvbWJvTGl0ZXJhbHNEZWZhdWx0IH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLWxpdGVyYWxzLWRlZmF1bHQuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9MaXRlcmFscyB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1saXRlcmFscy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbkdyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLW9wdGlvbi1ncm91cC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9GaWx0ZXJNb2RlIH0gZnJvbSAnLi9wby1jb21iby1maWx0ZXItbW9kZS5lbnVtJztcbmltcG9ydCB7IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9wby1jb21iby1maWx0ZXIuc2VydmljZSc7XG5cbmNvbnN0IFBPX0NPTUJPX0RFQk9VTkNFX1RJTUVfREVGQVVMVCA9IDQwMDtcbmNvbnN0IFBPX0NPTUJPX0ZJRUxEX0xBQkVMX0RFRkFVTFQgPSAnbGFiZWwnO1xuY29uc3QgUE9fQ09NQk9fRklFTERfVkFMVUVfREVGQVVMVCA9ICd2YWx1ZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogTyBgcG8tY29tYm9gIGV4aWJlIHVtYSBsaXN0YSBkZSBvcMOnw7VlcyBjb20gZsOhY2lsIHNlbGXDp8OjbyBlIGZpbHRyYWdlbS5cbiAqXG4gKiBBbMOpbSBkYSBleGliacOnw6NvIHBhZHLDo28sIG5lbGUgw6kgcG9zc8OtdmVsIGxpc3RhciBhcyBvcMO1ZXMgZW0gYWdydXBhbWVudG9zLlxuICpcbiAqIMOJIHBvc3PDrXZlbCBzZWxlY2lvbmFyIGUgbmF2ZWdhciBlbnRyZSBhcyBvcMOnw7VlcyBkYSBsaXN0YSB0YW50byBhdHJhdsOpcyBkbyAqbW91c2UqIHF1YW50byBkbyB0ZWNsYWRvLiBObyB0ZWNsYWRvIG5hdmVndWUgY29tXG4gKiBhcyBzZXRhcyBlIHByZXNzaW9uZSAqRW50ZXIqIG5hIG9ww6fDo28gcXVlIGRlc2VqYXIuXG4gKlxuICogQ29tIGVsZSB0YW1iw6ltIMOpIHBvc3PDrXZlbCBkZWZpbmlyIHVtYSBsaXN0YSDDoCBwYXJ0aXIgZGEgcmVxdWlzacOnw6NvIGRlIHVtIHNlcnZpw6dvIGRlZmluaWRvIGVtIGBwLWZpbHRlci1zZXJ2aWNlYC5cbiAqXG4gKiBFbSBgcC1maWx0ZXItbW9kZWAsIG8gZmlsdHJvIHBvZGVyw6Egc2VyIGNvbmZpZ3VyYWRvIHBhcmEgYnVzY2FyIG9ww7VlcyBxdWUgY29ycmVzcG9uZGFtIGFvIGluw61jaW8sIGZpbSBvdSBxdWUgY29udGVuaGEgbyB2YWxvciBkaWdpdGFkby5cbiAqXG4gKiBPIGBwby1jb21ib2AgZ3VhcmRhIG8gw7psdGltbyB2YWxvciBjYXNvIG8gdXN1w6FyaW8gZGVzaXN0YSBkZSB1bWEgYnVzY2EsIGRlaXhhbmRvIG8gY2FtcG8gb3UgcHJlc3Npb25hbmRvICpFc2MqLiBDYXNvIHNlamEgZGlnaXRhZG8gbm9cbiAqIGNhbXBvIGRlIGJ1c2NhIGEgZGVzY3Jpw6fDo28gY29tcGxldGEgZGUgdW0gaXRlbSwgZW50w6NvIGEgc2VsZcOnw6NvIHNlcsOhIGF1dG9tYXRpY2FtZW50ZSBlZmV0dWFkYSBhbyBkZWl4YXIgbyBjYW1wbyBvdSBwcmVzc2lvbmFuZG8gKkVudGVyKi5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUG9Db21ib0Jhc2VDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0LCBWYWxpZGF0b3Ige1xuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBBcGxpY2EgZm9jbyBubyBlbGVtZW50byBhbyBzZXIgaW5pY2lhZG8uXG4gICAqXG4gICAqID4gQ2FzbyBtYWlzIGRlIHVtIGVsZW1lbnRvIHNlamEgY29uZmlndXJhZG8gY29tIGVzc2EgcHJvcHJpZWRhZGUsIGFwZW5hcyBvIMO6bHRpbW8gZWxlbWVudG8gZGVjbGFyYWRvIGNvbSBlbGEgdGVyw6EgbyBmb2NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtYXV0by1mb2N1cycsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBhdXRvRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTGFiZWwgbm8gY29tcG9uZW50ZS4gKi9cbiAgQElucHV0KCdwLWxhYmVsJykgbGFiZWw/OiBzdHJpbmc7XG5cbiAgLyoqIFRleHRvIGRlIGFwb2lvIHBhcmEgbyBjYW1wby4gKi9cbiAgQElucHV0KCdwLWhlbHAnKSBoZWxwPzogc3RyaW5nO1xuXG4gIC8qKiBOb21lIGRvIGNvbXBvbmVudGUuICovXG4gIEBJbnB1dCgnbmFtZScpIG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZXZlIHNlciBpbmZvcm1hZGEgYSBVUkwgZG8gc2VydmnDp28gZW0gcXVlIHNlcsOhIHJlYWxpemFkbyBvIGZpbHRybyBwYXJhIGNhcnJlZ2FtZW50byBkYSBsaXN0YSBkZVxuICAgKiBpdGVucyBubyBjb21wb25lbnRlLlxuICAgKiBDYXNvIGhhamEgYSBuZWNlc3NpZGFkZSBkZSBjdXN0b21pemHDp8OjbywgZW50w6NvIHBvZGUgc2VyIGluZm9ybWFkbyB1bSBzZXJ2acOnbyBpbXBsZW1lbnRhbmRvIGEgaW50ZXJmYWNlIFBvQ29tYm9GaWx0ZXIuXG4gICAqXG4gICAqIENhc28gdXRpbGl6YWRvIHVtYSBVUkwsIG8gc2VydmnDp28gZGV2ZSBzZXIgcmV0b3JuYWRvIG5vIHBhZHLDo28gQVBJIFRPVFZTIGUgdXRpbGl6YSBhcyBwcm9wcmllZGFkZXNcbiAgICogYHAtZmllbGQtbGFiZWxgIGUgYHAtZmllbGQtdmFsdWVgIHBhcmEgYSBjb25zdHJ1w6fDo28gZGEgbGlzdGEgZGUgaXRlbnMuXG4gICAqXG4gICAqIFF1YW5kbyB1dGlsaXphZGEgdW1hIFVSTCBkZSBzZXJ2acOnbywgZW50w6NvIHNlcsOhIGNvbmNhdGVuYWRhIG5lc3RhIFVSTCBvIHZhbG9yIHF1ZSBkZXNlamEtc2UgZmlsdHJhciBkYSBzZWd1aW50ZSBmb3JtYTpcbiAgICogYGBgXG4gICAqIHVybCArID9maWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqXG4gICAqIFNlIGZvciBkZWZpbmlkYSBhIHByb3ByaWVkYWRlIGBwLWZpbHRlci1wYXJhbXNgLCBhIG1lc21hIHRhbWLDqW0gc2Vyw6EgY29uY2F0ZW5hZGEuIFBvciBleGVtcGxvLCBwYXJhIG9cbiAgICogcGFyw6JtZXRybyBgeyBhZ2U6IDIzIH1gIGEgVVJMIGZpY2FyaWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiB1cmwgKyA/cGFnZT0xJnBhZ2VTaXplPTIwJmFnZT0yMyZmaWx0ZXI9UGV0ZXJcbiAgICogYGBgXG4gICAqL1xuICBASW5wdXQoJ3AtZmlsdGVyLXNlcnZpY2UnKSBmaWx0ZXJTZXJ2aWNlOiBQb0NvbWJvRmlsdGVyIHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8gYXRpdmEgYSBmdW5jaW9uYWxpZGFkZSBkZSBzY3JvbGwgaW5maW5pdG8gcGFyYSBvIGNvbWJvLCBBbyBjaGVnYXIgYW8gZmltIGRhIHRhYmVsYSBleGVjdXRhcsOhIG5vdmEgYnVzY2EgZG9zIGRhZG9zIGNvbmZvcm1lIHBhZ2luYcOnw6NvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsJykgc2V0IGluZmluaXRlU2Nyb2xsKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5maW5pdGVTY3JvbGwgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBpbmZpbml0ZVNjcm9sbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faW5maW5pdGVTY3JvbGw7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyBwZXJjZW50dWFsIG5lY2Vzc8OhcmlvIHBhcmEgZGlzcGFyYXIgbyBldmVudG8gYHNob3ctbW9yZWAsIHF1ZSDDqSByZXNwb25zw6F2ZWwgcG9yIGNhcnJlZ2FyIG1haXMgZGFkb3Mgbm8gY29tYm8uIENhc28gbyB2YWxvciBzZWphIG1haW9yIHF1ZSAxMDAgb3UgbWVub3IgcXVlIDAsIG8gdmFsb3IgcGFkcsOjbyBzZXLDoSAxMDAlLlxuICAgKlxuICAgKiAqKkV4ZW1wbG9zKipcbiAgICogLSBwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZSA9IDgwOiBRdWFuZG8gYXRpbmdpciA4MCUgZG8gc2Nyb2xsIGRvIGNvbWJvLCBvIGBzaG93LW1vcmVgIHNlcsOhIGRpc3BhcmFkby5cbiAgICovXG4gIEBJbnB1dCgncC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2UnKSBzZXQgaW5maW5pdGVTY3JvbGxEaXN0YW5jZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5faW5maW5pdGVTY3JvbGxEaXN0YW5jZSA9IHZhbHVlID4gMTAwIHx8IHZhbHVlIDwgMCA/IDEwMCA6IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGluZmluaXRlU2Nyb2xsRGlzdGFuY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXRlU2Nyb2xsRGlzdGFuY2U7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgbyDDrWNvbmUgcXVlIHNlcsOhIGV4aWJpZG8gbm8gaW7DrWNpbyBkbyBjYW1wby5cbiAgICpcbiAgICogw4kgcG9zc8OtdmVsIHVzYXIgcXVhbHF1ZXIgdW0gZG9zIMOtY29uZXMgZGEgW0JpYmxpb3RlY2EgZGUgw61jb25lc10oL2d1aWRlcy9pY29ucykuIGNvbmZvcm1lIGV4ZW1wbG8gYWJhaXhvOlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIHAtaWNvbj1cInBvLWljb24tdXNlclwiIHAtbGFiZWw9XCJQTyBjb21ib1wiPjwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKiBUYW1iw6ltIMOpIHBvc3PDrXZlbCB1dGlsaXphciBvdXRyYXMgZm9udGVzIGRlIMOtY29uZXMsIHBvciBleGVtcGxvIGEgYmlibGlvdGVjYSAqRm9udCBBd2Vzb21lKiwgZGEgc2VndWludGUgZm9ybWE6XG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gcC1pY29uPVwiZmEgZmEtcG9kY2FzdFwiIHAtbGFiZWw9XCJQTyBjb21ib1wiPjwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKiBPdXRyYSBvcMOnw6NvIHNlcmlhIGEgY3VzdG9taXphw6fDo28gZG8gw61jb25lIGF0cmF2w6lzIGRvIGBUZW1wbGF0ZVJlZmAsIGNvbmZvcm1lIGV4ZW1wbG8gYWJhaXhvOlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIFtwLWljb25dPVwidGVtcGxhdGVcIiBwLWxhYmVsPVwiY29tYm8gdGVtcGxhdGUgaW9uaWNcIj48L3BvLWNvbWJvPlxuICAgKlxuICAgKiA8bmctdGVtcGxhdGUgI3RlbXBsYXRlPlxuICAgKiAgPGlvbi1pY29uIHN0eWxlPVwiZm9udC1zaXplOiBpbmhlcml0XCIgbmFtZT1cImhlYXJ0XCI+PC9pb24taWNvbj5cbiAgICogPC9uZy10ZW1wbGF0ZT5cbiAgICogYGBgXG4gICAqID4gUGFyYSBvIMOtY29uZSBlbnF1YWRyYXIgY29ycmV0YW1lbnRlLCBkZXZlLXNlIHV0aWxpemFyIGBmb250LXNpemU6IGluaGVyaXRgIGNhc28gbyDDrWNvbmUgdXRpbGl6YWRvIG7Do28gYXBsaXF1ZS1vLlxuICAgKi9cbiAgQElucHV0KCdwLWljb24nKSBpY29uPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8dm9pZD47XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb3BjaW9uYWwgc2Vyw6EgZXhpYmlkYS5cbiAgICpcbiAgICogPiBOw6NvIHNlcsOhIGV4aWJpZGEgYSBpbmRpY2HDp8OjbyBzZTpcbiAgICogLSBPIGNhbXBvIGNvbnRlciBgcC1yZXF1aXJlZGA7XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3Atb3B0aW9uYWwnKSBvcHRpb25hbDogYm9vbGVhbjtcblxuICAvKiogU2UgdmVyZGFkZWlybywgbyBjYW1wbyByZWNlYmVyw6EgdW0gYm90w6NvIHBhcmEgc2VyIGxpbXBvLiAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtY2xlYW4nLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgY2xlYW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIG8gZXZlbnRvIGBwLWNoYW5nZWAgcmVjZWJlcsOhIGNvbW8gYXJndW1lbnRvIG8gYFBvQ29tYm9PcHRpb25gIHJlZmVyZW50ZSDDoCBvcMOnw6NvIHNlbGVjaW9uYWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoeyBhbGlhczogJ3AtZW1pdC1vYmplY3QtdmFsdWUnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgZW1pdE9iamVjdFZhbHVlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogU2UgdmVyZGFkZWlybywgZGVzYWJpbGl0YXLDoSBhIGJ1c2NhIGRlIHVtIGl0ZW0gdmlhIFRBQi5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWRpc2FibGVkLXRhYi1maWx0ZXInLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgZGlzYWJsZWRUYWJGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIG8gZmlsdHJvIG5vIHByaW1laXJvIGNsaXF1ZSBzZXLDoSByZW1vdmlkby5cbiAgICpcbiAgICogPiBDYXNvIG8gY29tYm8gdGVuaGEgdW0gdmFsb3IgcGFkcsOjbyBkZSBpbmljaWFsaXphw6fDo28sIG8gcHJpbWVpcm8gY2xpcXVlXG4gICAqIG5vIGNvbXBvbmVudGUgcmV0b3JuYXLDoSB0b2RvcyBvcyBpdGVucyBkYSBsaXN0YSBlIG7Do28gYXBlbmFzIG8gaXRlbSBpbmljaWFsaWF6YWRvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVtb3ZlLWluaXRpYWwtZmlsdGVyJykgcmVtb3ZlSW5pdGlhbEZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERldmUgc2VyIGluZm9ybWFkYSB1bWEgZnVuw6fDo28gcXVlIHNlcsOhIGRpc3BhcmFkYSBxdWFuZG8gaG91dmVyIGFsdGVyYcOnw7VlcyBubyBuZ01vZGVsLiBBIGZ1bsOnw6NvIHJlY2ViZXLDoSBjb21vIGFyZ3VtZW50byBvIG1vZGVsIG1vZGlmaWNhZG8uXG4gICAqXG4gICAqID4gUG9kZS1zZSBvcHRhciBwZWxvIHJlY2ViaW1lbnRvIGRvIG9iamV0byBzZWxlY2lvbmFkbyBhbyBpbnbDqXMgZG8gbW9kZWwgYXRyYXbDqXMgZGEgcHJvcHJpZWRhZGUgYHAtZW1pdC1vYmplY3QtdmFsdWVgLlxuICAgKi9cbiAgQE91dHB1dCgncC1jaGFuZ2UnKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRnVuw6fDo28gcGFyYSBhdHVhbGl6YXIgbyBuZ01vZGVsIGRvIGNvbXBvbmVudGUsIG5lY2Vzc8OhcmlvIHF1YW5kbyBuw6NvIGZvciB1dGlsaXphZG8gZGVudHJvIGRhIHRhZyBmb3JtLlxuICAgKlxuICAgKiBOYSB2ZXJzw6NvIDEyLjIuMCBkbyBBbmd1bGFyIGEgdmVyaWZpY2HDp8OjbyBgc3RyaWN0VGVtcGxhdGVzYCB2ZW0gdHJ1ZSBjb21vIGRlZmF1bHQuIFBvcnRhbnRvLCBwYXJhIHV0aWxpemFyXG4gICAqIHR3by13YXkgYmluZGluZyBubyBjb21wb25lbnRlIGRldmUgc2UgdXRpbGl6YXIgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gLi4uIFtuZ01vZGVsXT1cImNvbWJvTW9kZWxcIiAobmdNb2RlbENoYW5nZSk9XCJjb21ib01vZGVsID0gJGV2ZW50XCI+IDwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKlxuICAgKi9cbiAgQE91dHB1dCgnbmdNb2RlbENoYW5nZScpIG5nTW9kZWxDaGFuZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRhIHVtYSBmdW7Dp8OjbyBxdWUgc2Vyw6EgZGlzcGFyYWRhIHF1YW5kbyBob3V2ZXIgYWx0ZXJhw6fDtWVzIG5vIFNlYXJjaCBpbnB1dC4gQSBmdW7Dp8OjbyByZWNlYmVyw6EgY29tbyBhcmd1bWVudG8gbyBpbnB1dCBtb2RpZmljYWRvLlxuICAgKlxuICAgKi9cbiAgQE91dHB1dCgncC1pbnB1dC1jaGFuZ2UnKSBpbnB1dENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBjYWNoZU9wdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcbiAgZGVmYXVsdFNlcnZpY2U6IFBvQ29tYm9GaWx0ZXJTZXJ2aWNlO1xuICBmaXJzdEluV3JpdGVWYWx1ZTogYm9vbGVhbiA9IHRydWU7XG4gIGlzRmlyc3RGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0ZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBrZXl1cFN1YnNjcmliZTogYW55O1xuICBvbk1vZGVsQ2hhbmdlOiBhbnk7XG4gIHByZXZpb3VzU2VhcmNoVmFsdWU6IHN0cmluZyA9ICcnO1xuICBzZWxlY3RlZE9wdGlvbjogYW55O1xuICBzZWxlY3RlZFZhbHVlOiBhbnk7XG4gIHNlbGVjdGVkVmlldzogYW55O1xuICBzZXJ2aWNlOiBQb0NvbWJvRmlsdGVyU2VydmljZTtcbiAgdmlzaWJsZU9wdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcbiAgcGFnZTogbnVtYmVyID0gMTtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGR5bmFtaWNMYWJlbDogc3RyaW5nID0gJ2xhYmVsJztcbiAgZHluYW1pY1ZhbHVlOiBzdHJpbmcgPSAndmFsdWUnO1xuXG4gIHByb3RlY3RlZCBjYWNoZVN0YXRpY09wdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJvdGVjdGVkIGNvbWJvT3B0aW9uc0xpc3Q6IEFycmF5PGFueT4gPSBbXTtcbiAgcHJvdGVjdGVkIG9uTW9kZWxUb3VjaGVkOiBhbnkgPSBudWxsO1xuXG4gIHByaXZhdGUgX2NoYW5nZU9uRW50ZXI/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2RlYm91bmNlVGltZT86IG51bWJlciA9IDQwMDtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc2FibGVkSW5pdEZpbHRlcj86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfZmllbGRMYWJlbD86IHN0cmluZyA9ICdsYWJlbCc7XG4gIHByaXZhdGUgX2ZpZWxkVmFsdWU/OiBzdHJpbmcgPSAndmFsdWUnO1xuICBwcml2YXRlIF9maWx0ZXJNaW5sZW5ndGg/OiBudW1iZXIgPSAwO1xuICBwcml2YXRlIF9maWx0ZXJNb2RlPzogUG9Db21ib0ZpbHRlck1vZGUgPSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICBwcml2YXRlIF9maWx0ZXJQYXJhbXM/OiBhbnk7XG4gIHByaXZhdGUgX2xpdGVyYWxzPzogUG9Db21ib0xpdGVyYWxzO1xuICBwcml2YXRlIF9vcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwIHwgYW55PiA9IFtdO1xuICBwcml2YXRlIF9wbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3JlcXVpcmVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9zb3J0PzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGxhbmd1YWdlOiBzdHJpbmc7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsRGlzdGFuY2U/OiBudW1iZXIgPSAxMDA7XG4gIHByaXZhdGUgX2luZmluaXRlU2Nyb2xsPzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIHV0aWxpemFkbyBwYXJhIGZhemVyIG8gY29udHJvbGUgZGUgYXR1YWxpemFyIG8gbW9kZWwuXG4gIC8vIG7Do28gZGV2ZSBmb3LDp2FyIGEgYXR1YWxpemHDp8OjbyBzZSBvIGdhdGlsaG8gZm9yIG8gd3JpdGVWYWx1ZSBwYXJhIG7Do28gZGVpeGFyIG8gY2FtcG8gZGlydHkuXG4gIHByaXZhdGUgZnJvbVdyaXRlVmFsdWU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHZhbGlkYXRvckNoYW5nZTogYW55O1xuXG4gIC8qKiBNZW5zYWdlbSBhcHJlc2VudGFkYSBlbnF1YW50byBvIGNhbXBvIGVzdGl2ZXIgdmF6aW8uICovXG4gIEBJbnB1dCgncC1wbGFjZWhvbGRlcicpIHNldCBwbGFjZWhvbGRlcih2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZSB8fCB0aGlzLmxpdGVyYWxzLmNob29zZU9wdGlvbjtcbiAgfVxuXG4gIGdldCBwbGFjZWhvbGRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBFc3RhIHByb3ByaWVkYWRlIGRlZmluZSBlbSBxdWFudG8gdGVtcG8gKGVtIG1pbGlzc2VndW5kb3MpLCBhZ3VhcmRhIHBhcmEgYWNpb25hciBvIGV2ZW50byBkZSBmaWx0cm8gYXDDs3MgY2FkYSBwcmVzc2lvbmFtZW50byBkZSB0ZWNsYS5cbiAgICogU2Vyw6EgdXRpbGl6YWRhIGFwZW5hcyBxdWFuZG8gaG91dmVyIHNlcnZpw6dvIChgcC1maWx0ZXItc2VydmljZWApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNDAwYFxuICAgKi9cbiAgQElucHV0KCdwLWRlYm91bmNlLXRpbWUnKSBzZXQgZGVib3VuY2VUaW1lKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHBhcnNlSW50KDxhbnk+dmFsdWUsIDEwKTtcblxuICAgIHRoaXMuX2RlYm91bmNlVGltZSA9ICFpc05hTihwYXJzZWRWYWx1ZSkgJiYgcGFyc2VkVmFsdWUgPiAwID8gcGFyc2VkVmFsdWUgOiBQT19DT01CT19ERUJPVU5DRV9USU1FX0RFRkFVTFQ7XG4gIH1cblxuICBnZXQgZGVib3VuY2VUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2RlYm91bmNlVGltZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERlc2FiaWxpdGEgbyBmaWx0cm8gaW5pY2lhbCBubyBzZXJ2acOnbywgcXVlIMOpIGV4ZWN1dGFkbyBubyBwcmltZWlybyBjbGlxdWUgbm8gY2FtcG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICpcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZC1pbml0LWZpbHRlcicpIHNldCBkaXNhYmxlZEluaXRGaWx0ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZEluaXRGaWx0ZXIgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZEluaXRGaWx0ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkSW5pdEZpbHRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERldmUgc2VyIGluZm9ybWFkbyBvIG5vbWUgZGEgcHJvcHJpZWRhZGUgZG8gb2JqZXRvIHF1ZSBzZXLDoSB1dGlsaXphZG8gcGFyYSBhIGNvbnZlcnPDo28gZG9zIGl0ZW5zIGFwcmVzZW50YWRvcyBuYSBsaXN0YSBkbyBjb21wb25lbnRlXG4gICAqIChgcC1vcHRpb25zYCksIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgcmVzcG9uc8OhdmVsIHBlbG8gdmFsb3IgZGUgY2FkYSBpdGVtIGRhIGxpc3RhLlxuICAgKlxuICAgKiBOZWNlc3PDoXJpbyBxdWFuZG8gaW5mb3JtYXIgbyBzZXJ2acOnbyBjb21vIFVSTCBlIG8gbWVzbW8gbsOjbyBlc3RpdmVyIHJldG9ybmFuZG8gdW1hIGxpc3RhIGRlIG9iamV0b3Mgbm8gcGFkcsOjbyBkYSBpbnRlcmZhY2VcbiAgICogUG9Db21ib09wdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgYHZhbHVlYFxuICAgKi9cbiAgQElucHV0KCdwLWZpZWxkLXZhbHVlJykgc2V0IGZpZWxkVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5zZXJ2aWNlICYmICF0aGlzLmZpbHRlclNlcnZpY2UpIHtcbiAgICAgIHRoaXMuZHluYW1pY1ZhbHVlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5fZmllbGRWYWx1ZSA9IHZhbHVlIHx8IFBPX0NPTUJPX0ZJRUxEX1ZBTFVFX0RFRkFVTFQ7XG5cbiAgICBpZiAoaXNUeXBlb2YodGhpcy5maWx0ZXJTZXJ2aWNlLCAnc3RyaW5nJykgJiYgdGhpcy5zZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNlcnZpY2UuZmllbGRWYWx1ZSA9IHRoaXMuX2ZpZWxkVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGZpZWxkVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkVmFsdWU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHRleHRvIGRlIGFwcmVzZW50YcOnw6NvIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogTmVjZXNzw6FyaW8gcXVhbmRvIGluZm9ybWFyIG8gc2VydmnDp28gY29tbyBVUkwgZSBvIG1lc21vIG7Do28gZXN0aXZlciByZXRvcm5hbmRvIHVtYSBsaXN0YSBkZSBvYmpldG9zIG5vIHBhZHLDo28gZGEgaW50ZXJmYWNlXG4gICAqIFBvQ29tYm9PcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBsYWJlbGBcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC1sYWJlbCcpIHNldCBmaWVsZExhYmVsKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc2VydmljZSAmJiAhdGhpcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmR5bmFtaWNMYWJlbCA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpZWxkTGFiZWwgPSB2YWx1ZSB8fCBQT19DT01CT19GSUVMRF9MQUJFTF9ERUZBVUxUO1xuXG4gICAgaWYgKGlzVHlwZW9mKHRoaXMuZmlsdGVyU2VydmljZSwgJ3N0cmluZycpICYmIHRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmZpZWxkTGFiZWwgPSB0aGlzLl9maWVsZExhYmVsO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWVsZExhYmVsKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZExhYmVsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogVmFsb3IgbcOtbmltbyBkZSBjYXJhY3RlcmVzIHBhcmEgcmVhbGl6YXIgbyBmaWx0cm8gbm8gc2VydmnDp28uXG4gICAqXG4gICAqIEBkZWZhdWx0IGAwYFxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1taW5sZW5ndGgnKSBzZXQgZmlsdGVyTWlubGVuZ3RoKHZhbHVlOiBudW1iZXIpIHtcbiAgICBjb25zdCBwYXJzZVZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHBhcnNlSW50KHZhbHVlLCAxMCkgOiB2YWx1ZTtcblxuICAgIHRoaXMuX2ZpbHRlck1pbmxlbmd0aCA9IE51bWJlci5pc0ludGVnZXIocGFyc2VWYWx1ZSkgPyBwYXJzZVZhbHVlIDogMDtcbiAgfVxuXG4gIGdldCBmaWx0ZXJNaW5sZW5ndGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlck1pbmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIERlZmluZSBxdWUgbyBjYW1wbyBzZXLDoSBvYnJpZ2F0w7NyaW8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1yZXF1aXJlZCcpIHNldCByZXF1aXJlZChyZXF1aXJlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX3JlcXVpcmVkID0gY29udmVydFRvQm9vbGVhbihyZXF1aXJlZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgfVxuXG4gIGdldCByZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVxdWlyZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIHNlIGEgaW5kaWNhw6fDo28gZGUgY2FtcG8gb2JyaWdhdMOzcmlvIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTsOjbyBwb3NzdWlyIGBwLWhlbHBgIGUvb3UgYHAtbGFiZWxgLlxuICAgKi9cbiAgQElucHV0KCdwLXNob3ctcmVxdWlyZWQnKSBzaG93UmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBJbmRpY2EgcXVlIG8gZXZlbnRvIGBwLWNoYW5nZWAgc8OzIHNlcsOhIGRpc3BhcmFkbyBhbyBjbGljYXIgb3UgcHJlc3Npb25hciBhIHRlY2xhIFwiRW50ZXJcIiBzb2JyZSB1bWEgb3DDp8OjbyBzZWxlY2lvbmFkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWNoYW5nZS1vbi1lbnRlcicpIHNldCBjaGFuZ2VPbkVudGVyKGNoYW5nZU9uRW50ZXI6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jaGFuZ2VPbkVudGVyID0gY29udmVydFRvQm9vbGVhbihjaGFuZ2VPbkVudGVyKTtcbiAgfVxuXG4gIGdldCBjaGFuZ2VPbkVudGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9jaGFuZ2VPbkVudGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhIHF1ZSBvIGNhbXBvIHNlcsOhIGRlc2FiaWxpdGFkby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWRpc2FibGVkJykgc2V0IGRpc2FibGVkKGRpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKGRpc2FibGVkKTtcblxuICAgIHRoaXMudmFsaWRhdGVNb2RlbCh0aGlzLnNlbGVjdGVkVmFsdWUpO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIC8qKiBJbmRpY2EgcXVlIGEgbGlzdGEgZGVmaW5pZGEgbmEgcHJvcHJpZWRhZGUgcC1vcHRpb25zIHNlcsOhIG9yZGVuYWRhIHBlbGEgZGVzY3Jpw6fDo28uICovXG4gIEBJbnB1dCgncC1zb3J0Jykgc2V0IHNvcnQoc29ydDogYm9vbGVhbikge1xuICAgIHRoaXMuX3NvcnQgPSBjb252ZXJ0VG9Cb29sZWFuKHNvcnQpO1xuICAgIHRoaXMuY29tYm9MaXN0RGVmaW5pdGlvbnMoKTtcbiAgfVxuXG4gIGdldCBzb3J0KCkge1xuICAgIHJldHVybiB0aGlzLl9zb3J0O1xuICB9XG5cbiAgLyoqXG4gICAqIE5lc3RhIHByb3ByaWVkYWRlIGRlZmluZSBhIGxpc3RhIGRlIG9ww6fDtWVzIGRvIGBwby1jb21ib2AuXG4gICAqXG4gICAqID4gQSBsaXN0YSBwb2RlIHNlciBkZWZpbmlkYSB1dGlsaXphbmRvIHVtIGFycmF5IGNvbSBvIHZhbG9yIHJlcHJlc2VudGFuZG8gbyBgdmFsdWVgIGUgbyBgbGFiZWxgIGRhcyBzZWd1aW50ZXMgZm9ybWFzOlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIG5hbWU9XCJjb21ib1wiIHAtbGFiZWw9XCJQTyBDb21ib1wiIFtwLW9wdGlvbnNdPVwiW3t2YWx1ZTogMSwgbGFiZWw6ICdPbmUnfSwge3ZhbHVlOiAyLCBsYWJlbDogJ3R3byd9XVwiPiA8L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyBuYW1lPVwiY29tYm9cIiBwLWxhYmVsPVwiUE8gQ29tYm9cIiBbcC1vcHRpb25zXT1cIlt7bmFtZTogJ1JvZ2VyJywgYWdlOiAyOH0sIHtuYW1lOiAnQW5uZScsIGFnZTogMzV9XVwiIHAtZmllbGQtbGFiZWw9XCJuYW1lXCIgcC1maWVsZC12YWx1ZT1cImFnZVwiPiA8L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICpcbiAgICogLSBBY29uc2VsaGEtc2UgdXRpbGl6YXIgdmFsb3JlcyBkaXN0aW50b3Mgbm8gYGxhYmVsYCBlIGB2YWx1ZWAgZG9zIGl0ZW5zLlxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbnMnKSBzZXQgb3B0aW9ucyhvcHRpb25zOiBBcnJheTxQb0NvbWJvT3B0aW9uIHwgUG9Db21ib09wdGlvbkdyb3VwIHwgYW55Pikge1xuICAgIHRoaXMuX29wdGlvbnMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpID8gb3B0aW9ucyA6IFtdO1xuXG4gICAgdGhpcy5jb21ib0xpc3REZWZpbml0aW9ucygpO1xuICB9XG5cbiAgZ2V0IG9wdGlvbnMoKTogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9PcHRpb25Hcm91cCB8IGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gbW9kbyBkZSBwZXNxdWlzYSB1dGlsaXphZG8gbm8gZmlsdHJvIGRhIGxpc3RhIGRlIHNlbGXDp8OjbzogYHN0YXJ0c1dpdGhgLCBgY29udGFpbnNgIG91IGBlbmRzV2l0aGAuXG4gICAqXG4gICAqID4gUXVhbmRvIHV0aWxpemFyIGEgcHJvcHJpZWRhZGUgYHAtZmlsdGVyLXNlcnZpY2VgIGVzdGEgcHJvcHJpZWRhZGUgc2Vyw6EgaWdub3JhZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBzdGFydHNXaXRoYFxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1tb2RlJykgc2V0IGZpbHRlck1vZGUoZmlsdGVyTW9kZTogUG9Db21ib0ZpbHRlck1vZGUpIHtcbiAgICB0aGlzLl9maWx0ZXJNb2RlID0gZmlsdGVyTW9kZSBpbiBQb0NvbWJvRmlsdGVyTW9kZSA/IGZpbHRlck1vZGUgOiBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICAgIHN3aXRjaCAodGhpcy5fZmlsdGVyTW9kZS50b1N0cmluZygpKSB7XG4gICAgICBjYXNlICdzdGFydHNXaXRoJzpcbiAgICAgICAgdGhpcy5fZmlsdGVyTW9kZSA9IFBvQ29tYm9GaWx0ZXJNb2RlLnN0YXJ0c1dpdGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29udGFpbnMnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9Db21ib0ZpbHRlck1vZGUuY29udGFpbnM7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZW5kc1dpdGgnOlxuICAgICAgICB0aGlzLl9maWx0ZXJNb2RlID0gUG9Db21ib0ZpbHRlck1vZGUuZW5kc1dpdGg7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWx0ZXJNb2RlKCk6IFBvQ29tYm9GaWx0ZXJNb2RlIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyTW9kZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFZhbG9yIHF1ZSBzZXLDoSByZXBhc3NhZG8gY29tbyBwYXLDom1ldHJvIHBhcmEgYSBVUkwgb3UgYW9zIG3DqXRvZG9zIGRvIHNlcnZpw6dvIHF1ZSBpbXBsZW1lbnRhbSBhIGludGVyZmFjZSAqUG9Db21ib0ZpbHRlciouXG4gICAqXG4gICAqID4gQ2FzbyBhIGxpc3RhIGNvbnRlbmhhIGFncnVwYW1lbnRvcywgb3MgbWVzbW9zIHPDsyBzZXLDo28gZXhpYmlkb3Mgc2UgaG91dmVyIG5vIG3DrW5pbW8gdW1hIG9ww6fDo28gcXVlIGNvcnJlc3BvbmRhIMOgIHBlc3F1aXNhLlxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1wYXJhbXMnKSBzZXQgZmlsdGVyUGFyYW1zKGZpbHRlclBhcmFtczogYW55KSB7XG4gICAgdGhpcy5fZmlsdGVyUGFyYW1zID0gZmlsdGVyUGFyYW1zIHx8IGZpbHRlclBhcmFtcyA9PT0gMCB8fCBmaWx0ZXJQYXJhbXMgPT09IGZhbHNlID8gZmlsdGVyUGFyYW1zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGZpbHRlclBhcmFtcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyUGFyYW1zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogT2JqZXRvIGNvbSBhcyBsaXRlcmFpcyB1c2FkYXMgbm8gYHBvLWNvbWJvYC5cbiAgICpcbiAgICogUGFyYSB1dGlsaXphciBiYXN0YSBwYXNzYXIgYSBsaXRlcmFsIHF1ZSBkZXNlamEgY3VzdG9taXphcjpcbiAgICpcbiAgICogYGBgXG4gICAqICBjb25zdCBjdXN0b21MaXRlcmFsczogUG9Db21ib0xpdGVyYWxzID0ge1xuICAgKiAgICBub0RhdGE6ICdOZW5odW0gdmFsb3InXG4gICAqICB9O1xuICAgKiBgYGBcbiAgICpcbiAgICogRSBwYXJhIGNhcnJlZ2FyIGEgbGl0ZXJhbCBjdXN0b21pemFkYSwgYmFzdGEgYXBlbmFzIHBhc3NhciBvIG9iamV0byBwYXJhIG8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1jb21ib1xuICAgKiAgIFtwLWxpdGVyYWxzXT1cImN1c3RvbUxpdGVyYWxzXCI+XG4gICAqIDwvcG8tY29tYm8+XG4gICAqIGBgYFxuICAgKlxuICAgKiA+IE8gb2JqZXRvIHBhZHLDo28gZGUgbGl0ZXJhaXMgc2Vyw6EgdHJhZHV6aWRvIGRlIGFjb3JkbyBjb20gbyBpZGlvbWEgZG9cbiAgICogW2BQb0kxOG5TZXJ2aWNlYF0oL2RvY3VtZW50YXRpb24vcG8taTE4bikgb3UgZG8gYnJvd3Nlci5cbiAgICovXG4gIEBJbnB1dCgncC1saXRlcmFscycpIHNldCBsaXRlcmFscyh2YWx1ZTogUG9Db21ib0xpdGVyYWxzKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0ICYmICEodmFsdWUgaW5zdGFuY2VvZiBBcnJheSkpIHtcbiAgICAgIHRoaXMuX2xpdGVyYWxzID0ge1xuICAgICAgICAuLi5wb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3BvTG9jYWxlRGVmYXVsdF0sXG4gICAgICAgIC4uLnBvQ29tYm9MaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV0sXG4gICAgICAgIC4uLnZhbHVlXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHBvQ29tYm9MaXRlcmFsc0RlZmF1bHRbdGhpcy5sYW5ndWFnZV07XG4gICAgfVxuICB9XG5cbiAgZ2V0IGxpdGVyYWxzKCkge1xuICAgIHJldHVybiB0aGlzLl9saXRlcmFscyB8fCBwb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHNlIG8gY29tcG9uZW50ZSBpcsOhIGd1YXJkYXIgbyB2YWxvciBkbyBtb2RlbCBwYXJhIGV2aXRhciByZXF1aXNpw6fDtWVzIHJlcGV0aWRhcy5cbiAgICpcbiAgICogPiBDYXNvIG8gdmFsb3Igc2VqYSBgZmFsc2VgLCBvIGNvbXBvbmVudGUgZmFyw6EgdW1hIG5vdmEgcmVxdWlzacOnw6NvIG1lc21vIHF1ZSBvIHZhbG9yIHByb2N1cmFkbyBzZWphIG8gbWVzbW8gZG8gbW9kZWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWNhY2hlJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGNhY2hlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZWZpbmUgcXVlIG8gZHJvcGRvd24gZG8gY29tYm8gc2Vyw6EgaW5jbHVpZG8gbm8gYm9keSBkYSBww6FnaW5hIGUgbsOjbyBzdXNwZW5zbyBjb20gYSBjYWl4YSBkZSB0ZXh0byBkbyBjb21wb25lbnRlLlxuICAgKiBPcMOnw6NvIG5lY2Vzc8OhcmlhIHBhcmEgbyBjYXNvIGRlIHVzbyBkbyBjb21wb25lbnRlIGVtIHDDoWdpbmFzIHF1ZSBuZWNlc3NpdGFtIHJlbmRlcml6YXIgbyBjb21ibyBmb3JhIGRvIGNvbnRlw7pkbyBwcmluY2lwYWwuXG4gICAqXG4gICAqID4gT2JzOiBPIHVzbyBkZXNzYSBwcm9wcmllZGFkZSBwb2RlIGFjYXJyZXRhciBuYSBwZXJkYSBzZXF1ZW5jaWFsIGRhIHRhYnVsYcOnw6NvIGRhIHDDoWdpbmFcbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWFwcGVuZC1pbi1ib2R5JywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGFwcGVuZEJveD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlKSB7XG4gICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlU2VydmljZS5nZXRTaG9ydExhbmd1YWdlKCk7XG4gIH1cblxuICBnZXQgaXNPcHRpb25Hcm91cExpc3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMubGVuZ3RoICYmIHRoaXMuX29wdGlvbnNbMF0uaGFzT3duUHJvcGVydHkoJ29wdGlvbnMnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZHluYW1pY1ZhbHVlID0gdGhpcy5jaGVja0lmU2VydmljZSgndmFsdWUnKTtcbiAgICB0aGlzLmR5bmFtaWNMYWJlbCA9IHRoaXMuY2hlY2tJZlNlcnZpY2UoJ2xhYmVsJyk7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICB9XG5cbiAgb25Jbml0U2VydmljZSgpIHtcbiAgICBpZiAodGhpcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgICAgIHRoaXMuaW5pdElucHV0T2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlcnZpY2Uoc2VydmljZTogUG9Db21ib0ZpbHRlciB8IHN0cmluZykge1xuICAgIGlmIChzZXJ2aWNlKSB7XG4gICAgICBpZiAoaXNUeXBlb2Yoc2VydmljZSwgJ29iamVjdCcpKSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IDxQb0NvbWJvRmlsdGVyU2VydmljZT5zZXJ2aWNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gdGhpcy5kZWZhdWx0U2VydmljZTtcbiAgICAgICAgdGhpcy5zZXJ2aWNlLmNvbmZpZ1Byb3BlcnRpZXMoPHN0cmluZz5zZXJ2aWNlLCB0aGlzLmZpZWxkTGFiZWwsIHRoaXMuZmllbGRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29tcGFyZU1ldGhvZChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwLCBmaWx0ZXJNb2RlOiBQb0NvbWJvRmlsdGVyTW9kZSkge1xuICAgIHN3aXRjaCAoZmlsdGVyTW9kZSkge1xuICAgICAgY2FzZSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9Db21ib0ZpbHRlck1vZGUuY29udGFpbnM6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5zKHNlYXJjaCwgb3B0aW9uKTtcbiAgICAgIGNhc2UgUG9Db21ib0ZpbHRlck1vZGUuZW5kc1dpdGg6XG4gICAgICAgIHJldHVybiB0aGlzLmVuZHNXaXRoKHNlYXJjaCwgb3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBzdGFydHNXaXRoKHNlYXJjaDogc3RyaW5nLCBvcHRpb246IGFueSkge1xuICAgIHJldHVybiBvcHRpb25bdGhpcy5keW5hbWljTGFiZWxdLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChzZWFyY2gudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBjb250YWlucyhzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoLnRvTG93ZXJDYXNlKCkpID4gLTE7XG4gIH1cblxuICBlbmRzV2l0aChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKHNlYXJjaC50b0xvd2VyQ2FzZSgpKTtcbiAgfVxuXG4gIGdldE9wdGlvbkZyb21WYWx1ZSh2YWx1ZTogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA/IG9wdGlvbnMuZmluZCgob3B0aW9uOiBhbnkpID0+IHRoaXMuaXNFcXVhbChvcHRpb25bdGhpcy5keW5hbWljVmFsdWVdLCB2YWx1ZSkpIDogbnVsbDtcbiAgfVxuXG4gIGdldE9wdGlvbkZyb21MYWJlbChsYWJlbDogYW55LCBvcHRpb25zOiBhbnkpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZmluZChcbiAgICAgICAgKG9wdGlvbjogYW55KSA9PiBvcHRpb25bdGhpcy5keW5hbWljTGFiZWxdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gbGFiZWwudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVTZWxlY3RlZFZhbHVlKG9wdGlvbjogYW55LCBpc1VwZGF0ZU1vZGVsOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IG9wdGlvbkxhYmVsID0gKG9wdGlvbiAmJiBvcHRpb25bdGhpcy5keW5hbWljTGFiZWxdKSB8fCAnJztcblxuICAgIHRoaXMudXBkYXRlSW50ZXJuYWxWYXJpYWJsZXMob3B0aW9uKTtcblxuICAgIC8vIGF0dWFsaXphIG8gdmFsb3IgZG8gaW5wdXQgcXVhbmRvIGZvciBjaGFuZ2VPbkVudGVyIGFwZW5hcyBzZSBmb3IgcGFyYSBhdHVhbGl6YXIgbyBtb2RlbC5cbiAgICBpZiAodGhpcy5jaGFuZ2VPbkVudGVyICYmIGlzVXBkYXRlTW9kZWwpIHtcbiAgICAgIHRoaXMuc2V0SW5wdXRWYWx1ZShvcHRpb25MYWJlbCk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5jaGFuZ2VPbkVudGVyKSB7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUob3B0aW9uTGFiZWwpO1xuICAgIH1cblxuICAgIGlmIChpc1VwZGF0ZU1vZGVsKSB7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IG9wdGlvbj8uW3RoaXMuZHluYW1pY1ZhbHVlXSAhPT0gdW5kZWZpbmVkID8gb3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSA6IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy51cGRhdGVNb2RlbChvcHRpb25WYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2FsbE1vZGVsQ2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAvLyBDYXNvIG8gY29tcG9uZW50ZSBlc3RpdmVyIGRlbnRybyBkZSB1bSBmb3JtLCB0ZXLDoSBhY2Vzc28gYW8gbcOpdG9kbyBvbk1vZGVsQ2hhbmdlLlxuICAgIHJldHVybiB0aGlzLm9uTW9kZWxDaGFuZ2UgPyB0aGlzLm9uTW9kZWxDaGFuZ2UodmFsdWUpIDogdGhpcy5uZ01vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgaXNFcXVhbCh2YWx1ZTogYW55LCBpbnB1dFZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoKHZhbHVlIHx8IHZhbHVlID09PSAwKSAmJiBpbnB1dFZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKSA9PT0gaW5wdXRWYWx1ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICgodmFsdWUgPT09IG51bGwgJiYgaW5wdXRWYWx1ZSAhPT0gbnVsbCkgfHwgKHZhbHVlID09PSB1bmRlZmluZWQgJiYgaW5wdXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgdmFsdWUgPSBgJHt2YWx1ZX1gOyAvLyBUcmFuc2Zvcm1hbmRvIGVtIHN0cmluZ1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSA9PT0gaW5wdXRWYWx1ZTtcbiAgfVxuXG4gIHNlYXJjaEZvckxhYmVsKHNlYXJjaDogc3RyaW5nLCBvcHRpb25zOiBBcnJheTxhbnk+LCBmaWx0ZXJNb2RlOiBQb0NvbWJvRmlsdGVyTW9kZSkge1xuICAgIGlmIChzZWFyY2ggJiYgb3B0aW9ucyAmJiBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgY29uc3QgbmV3T3B0aW9uczogQXJyYXk8YW55PiA9IFtdO1xuICAgICAgbGV0IGFkZGVkT3B0aW9uc0dyb3VwVGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGxldCBvcHRpb25zR3JvdXBUaXRsZTogUG9Db21ib0dyb3VwO1xuXG4gICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgaWYgKCdvcHRpb25zJyBpbiBvcHRpb24pIHtcbiAgICAgICAgICBhZGRlZE9wdGlvbnNHcm91cFRpdGxlID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIChvcHRpb25zR3JvdXBUaXRsZSA9IG9wdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSAmJiAodGhpcy5jb21wYXJlTWV0aG9kKHNlYXJjaCwgb3B0aW9uLCBmaWx0ZXJNb2RlKSB8fCB0aGlzLnNlcnZpY2UpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNPcHRpb25Hcm91cExpc3QgJiYgIWFkZGVkT3B0aW9uc0dyb3VwVGl0bGUpIHtcbiAgICAgICAgICAgIG5ld09wdGlvbnMucHVzaChvcHRpb25zR3JvdXBUaXRsZSk7XG4gICAgICAgICAgICBhZGRlZE9wdGlvbnNHcm91cFRpdGxlID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBuZXdPcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gbmV3T3B0aW9uc1t0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ID8gMSA6IDBdO1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QobmV3T3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ29tYm9MaXN0KG9wdGlvbnM/OiBBcnJheTxhbnk+KSB7XG4gICAgY29uc3QgY29weU9wdGlvbnMgPSBvcHRpb25zIHx8IFsuLi50aGlzLmNvbWJvT3B0aW9uc0xpc3RdO1xuXG4gICAgbGV0IG5ld09wdGlvbnM7XG4gICAgaWYgKHRoaXMucmVtb3ZlSW5pdGlhbEZpbHRlcikge1xuICAgICAgbmV3T3B0aW9ucyA9IGNvcHlPcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdPcHRpb25zID0gIW9wdGlvbnMgJiYgIXRoaXMuaW5maW5pdGVTY3JvbGwgJiYgdGhpcy5zZWxlY3RlZFZhbHVlID8gW3sgLi4udGhpcy5zZWxlY3RlZE9wdGlvbiB9XSA6IGNvcHlPcHRpb25zO1xuICAgIH1cblxuICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgPSBuZXdPcHRpb25zO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVmlldyAmJiB0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBjb3B5T3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb25bdGhpcy5keW5hbWljVmFsdWVdICE9PSB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldE5leHRPcHRpb24odmFsdWU6IGFueSwgb3B0aW9uczogQXJyYXk8YW55PiwgcmV2ZXJzZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgb3B0aW9uc0xpc3QgPSByZXZlcnNlID8gb3B0aW9ucy5zbGljZSgwKS5yZXZlcnNlKCkgOiBvcHRpb25zLnNsaWNlKDApO1xuICAgIGxldCBvcHRpb25Gb3VuZCA9IG51bGw7XG4gICAgbGV0IGZvdW5kID0gZmFsc2U7XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zTGlzdCkge1xuICAgICAgaWYgKG9wdGlvblt0aGlzLmR5bmFtaWNWYWx1ZV0gJiYgIW9wdGlvbkZvdW5kKSB7XG4gICAgICAgIG9wdGlvbkZvdW5kID0gb3B0aW9uO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvblt0aGlzLmR5bmFtaWNWYWx1ZV0gJiYgZm91bmQpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzRXF1YWwob3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSwgdmFsdWUpKSB7XG4gICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9uRm91bmQ7XG4gIH1cblxuICBnZXRJbmRleFNlbGVjdGVkVmlldygpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLmNvbXBhcmVPYmplY3RzKHRoaXMudmlzaWJsZU9wdGlvbnNbaV0sIHRoaXMuc2VsZWN0ZWRWaWV3KSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb21wYXJlT2JqZWN0cyhvYmoxOiBhbnksIG9iajI6IGFueSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShvYmoxKSA9PT0gSlNPTi5zdHJpbmdpZnkob2JqMik7XG4gIH1cblxuICB2ZXJpZnlWYWxpZE9wdGlvbigpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5nZXRJbnB1dFZhbHVlKCk7XG5cbiAgICBjb25zdCBvcHRpb25Gb3VuZCA9IHRoaXMuZ2V0T3B0aW9uRnJvbUxhYmVsKGlucHV0VmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoWy4uLnRoaXMuY2FjaGVTdGF0aWNPcHRpb25zXSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbkZvdW5kICYmIG9wdGlvbkZvdW5kW3RoaXMuZHluYW1pY1ZhbHVlXSAhPT0gdGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uRm91bmQpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSBvcHRpb25Gb3VuZFt0aGlzLmR5bmFtaWNMYWJlbF07XG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbiAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSAhPT0gaW5wdXRWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlV2l0aE9sZE9wdGlvbigpO1xuXG4gICAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSB0aGlzLnNlbGVjdGVkT3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGlucHV0VmFsdWUgJiYgIW9wdGlvbkZvdW5kKSB7XG4gICAgICBjb25zdCBpc0lucHV0VmFsdWVEaWZmU2VsZWN0ZWRMYWJlbCA9ICEhKFxuICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uICYmIHRoaXMuc2VsZWN0ZWRPcHRpb25bdGhpcy5keW5hbWljTGFiZWxdICE9PSBpbnB1dFZhbHVlXG4gICAgICApO1xuXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCwgaXNJbnB1dFZhbHVlRGlmZlNlbGVjdGVkTGFiZWwgfHwgdGhpcy5jaGFuZ2VPbkVudGVyKTtcblxuICAgICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gJyc7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgLy8gUmVjZWJlIGFzIGFsdGVyYcOnw7VlcyBkbyBtb2RlbFxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpIHtcbiAgICB0aGlzLmZyb21Xcml0ZVZhbHVlID0gdHJ1ZTtcblxuICAgIGlmICh2YWxpZFZhbHVlKHZhbHVlKSAmJiAhdGhpcy5zZXJ2aWNlICYmIHRoaXMuY29tYm9PcHRpb25zTGlzdCAmJiB0aGlzLmNvbWJvT3B0aW9uc0xpc3QubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmdldE9wdGlvbkZyb21WYWx1ZSh2YWx1ZSwgdGhpcy5jb21ib09wdGlvbnNMaXN0KTtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb24pO1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICAgIHRoaXMucmVtb3ZlSW5pdGlhbEZpbHRlciA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFNlIGhvdXZlciBzZXJ2acOnbyBidXNjYSBwZWxvIG1vZGVsLlxuICAgIGlmICh2YWx1ZSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdEJ5VmFsdWUodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICAgICAgdGhpcy51cGRhdGVIYXNOZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgLy8gRnVuw6fDo28gaW1wbGVtZW50YWRhIGRvIENvbnRyb2xWYWx1ZUFjY2Vzc29yXG4gIC8vIFVzYWRhIHBhcmEgaW50ZXJjZXB0YXIgb3MgZXN0YWRvcyBkZSBoYWJpbGl0YWRvIHZpYSBmb3JtcyBhcGlcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKSB7XG4gICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGFic3RyYWN0Q29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XG4gICAgaWYgKHJlcXVpcmVkRmFpbGVkKHRoaXMucmVxdWlyZWQsIHRoaXMuZGlzYWJsZWQsIGFic3RyYWN0Q29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlcXVpcmVkOiB7XG4gICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgY2xlYXIodmFsdWUpIHtcbiAgICB0aGlzLmNhbGxNb2RlbENoYW5nZSh2YWx1ZSk7XG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgdGhpcy5pbml0SW5wdXRPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy51cGRhdGVIYXNOZXh0KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlnQWZ0ZXJTZXRGaWx0ZXJTZXJ2aWNlKHNlcnZpY2U6IFBvQ29tYm9GaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoc2VydmljZSkge1xuICAgICAgdGhpcy5jb21ib09wdGlvbnNMaXN0ID0gW107XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlS2V5dXBPYnNlcnZhYmxlKCk7XG4gICAgICB0aGlzLm9uSW5pdFNlcnZpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXJ2aWNlID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5jb21ib09wdGlvbnNMaXN0ID0gdGhpcy5jYWNoZVN0YXRpY09wdGlvbnM7XG4gICAgfVxuXG4gICAgdGhpcy52aXNpYmxlT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuaXNGaXJzdEZpbHRlciA9IHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgdW5zdWJzY3JpYmVLZXl1cE9ic2VydmFibGUoKSB7XG4gICAgaWYgKHRoaXMua2V5dXBTdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMua2V5dXBTdWJzY3JpYmUudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgdmFsaWRhdGVNb2RlbChtb2RlbDogYW55KSB7XG4gICAgaWYgKHRoaXMudmFsaWRhdG9yQ2hhbmdlKSB7XG4gICAgICB0aGlzLnZhbGlkYXRvckNoYW5nZShtb2RlbCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb21ib0xpc3REZWZpbml0aW9ucygpIHtcbiAgICB0aGlzLmNvbWJvT3B0aW9uc0xpc3QgPSB0aGlzLm9wdGlvbnMubGVuZ3RoID4gMCA/IHRoaXMubGlzdGluZ0NvbWJvT3B0aW9ucyh0aGlzLm9wdGlvbnMpIDogdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuY2FjaGVTdGF0aWNPcHRpb25zID0gdGhpcy5jb21ib09wdGlvbnNMaXN0O1xuXG4gICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZlNlcnZpY2UoZHluYW1pY1ZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoKHRoaXMuc2VydmljZSB8fCB0aGlzLmZpbHRlclNlcnZpY2UpICYmIGR5bmFtaWNWYWx1ZSA9PT0gJ2xhYmVsJykge1xuICAgICAgcmV0dXJuIFBPX0NPTUJPX0ZJRUxEX0xBQkVMX0RFRkFVTFQ7XG4gICAgfVxuICAgIGlmICgodGhpcy5zZXJ2aWNlIHx8IHRoaXMuZmlsdGVyU2VydmljZSkgJiYgZHluYW1pY1ZhbHVlID09PSAndmFsdWUnKSB7XG4gICAgICByZXR1cm4gUE9fQ09NQk9fRklFTERfVkFMVUVfREVGQVVMVDtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuc2VydmljZSAmJiBkeW5hbWljVmFsdWUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkTGFiZWw7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlcnZpY2UgJiYgZHluYW1pY1ZhbHVlID09PSAndmFsdWUnKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWVsZFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcGFyZU9wdGlvbnMoZHluYW1pY0xhYmVsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG9wdGlvbkE6IGFueSwgb3B0aW9uQjogYW55KSB7XG4gICAgICBjb25zdCBsYWJlbEEgPSBvcHRpb25BW2R5bmFtaWNMYWJlbF0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgbGFiZWxCID0gb3B0aW9uQltkeW5hbWljTGFiZWxdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcblxuICAgICAgcmV0dXJuIGxhYmVsQSA8IGxhYmVsQiA/IC0xIDogbGFiZWxBID4gbGFiZWxCID8gMSA6IDA7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzRHVwbGljYXRlZE9wdGlvbihvcHRpb25zOiBBcnJheTxhbnk+LCBjdXJyZW50T3B0aW9uOiBzdHJpbmcsIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zPzogQXJyYXk8YW55Pikge1xuICAgIGlmIChhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucykge1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zLnNvbWUob3B0aW9uID0+IG9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0gPT09IGN1cnJlbnRPcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5zb21lKG9wdGlvbiA9PiBvcHRpb25bdGhpcy5keW5hbWljVmFsdWVdID09PSBjdXJyZW50T3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RpbmdDb21ib09wdGlvbnMoY29tYm9PcHRpb25zOiBBcnJheTxhbnk+KSB7XG4gICAgY29uc3QgY29tYm9PcHRpb25zTGlzdCA9IGNvbWJvT3B0aW9ucy5jb25jYXQoKTtcbiAgICBjb25zdCB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QgPSB0aGlzLnZlcmlmeUNvbWJvT3B0aW9ucyhjb21ib09wdGlvbnNMaXN0KTtcblxuICAgIHRoaXMuc29ydE9wdGlvbnModmVyaWZpZWRDb21ib09wdGlvbnNMaXN0KTtcblxuICAgIGlmICh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmIHZlcmlmaWVkQ29tYm9PcHRpb25zTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlDb21ib09wdGlvbnNHcm91cCh2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QpO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3Q7XG4gIH1cblxuICBwcml2YXRlIHNvcnRPcHRpb25zKGNvbWJvT3B0aW9uc0xpc3Q6IEFycmF5PGFueT4pIHtcbiAgICBpZiAoY29tYm9PcHRpb25zTGlzdC5sZW5ndGggPiAwICYmIHRoaXMuc29ydCkge1xuICAgICAgcmV0dXJuIGNvbWJvT3B0aW9uc0xpc3Quc29ydCh0aGlzLmNvbXBhcmVPcHRpb25zKHRoaXMuZHluYW1pY0xhYmVsKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZVZhbHVlKGN1cnJlbnRPcHRpb246IGFueSwgdmVyaWZ5aW5nT3B0aW9uc0dyb3VwOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zdCB7IG9wdGlvbnMgfSA9IGN1cnJlbnRPcHRpb247XG5cbiAgICBpZiAodGhpcy5pc09wdGlvbkdyb3VwTGlzdCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHZhbGlkVmFsdWUoY3VycmVudE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0pICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGggPiAwKSB8fFxuICAgICAgICAodmVyaWZ5aW5nT3B0aW9uc0dyb3VwID09PSB0cnVlICYmIHZhbGlkVmFsdWUoY3VycmVudE9wdGlvblt0aGlzLmR5bmFtaWNWYWx1ZV0pKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRWYWx1ZShjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSkgJiYgIW9wdGlvbnM7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNvbWJvT3B0aW9ucyhcbiAgICBjb21ib09wdGlvbnM6IEFycmF5PGFueT4sXG4gICAgdmVyaWZ5aW5nT3B0aW9uc0dyb3VwOiBib29sZWFuID0gZmFsc2UsXG4gICAgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnM/OiBBcnJheTxhbnk+XG4gICkge1xuICAgIHJldHVybiBjb21ib09wdGlvbnMucmVkdWNlKChhY2N1bXVsYXRlZE9wdGlvbnMsIGN1cnJlbnRPcHRpb24pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgIXRoaXMudmVyaWZ5SWZIYXNMYWJlbChjdXJyZW50T3B0aW9uKSB8fFxuICAgICAgICB0aGlzLmhhc0R1cGxpY2F0ZWRPcHRpb24oXG4gICAgICAgICAgYWNjdW11bGF0ZWRPcHRpb25zLFxuICAgICAgICAgIGN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljVmFsdWVdIHx8IGN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljTGFiZWxdLFxuICAgICAgICAgIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zXG4gICAgICAgICkgfHxcbiAgICAgICAgIXRoaXMudmFsaWRhdGVWYWx1ZShjdXJyZW50T3B0aW9uLCB2ZXJpZnlpbmdPcHRpb25zR3JvdXApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkT3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgYWNjdW11bGF0ZWRPcHRpb25zLnB1c2goY3VycmVudE9wdGlvbik7XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRPcHRpb25zO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5Q29tYm9PcHRpb25zR3JvdXAoY29tYm9PcHRpb25zTGlzdDogQXJyYXk8YW55Pikge1xuICAgIHJldHVybiBjb21ib09wdGlvbnNMaXN0LnJlZHVjZSgoYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMsIGN1cnJlbnRPcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gY3VycmVudE9wdGlvbjtcbiAgICAgIGNvbnN0IHZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0ID0gdGhpcy52ZXJpZnlDb21ib09wdGlvbnMob3B0aW9ucywgdHJ1ZSwgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMpO1xuXG4gICAgICBpZiAodmVyaWZpZWRDb21ib09wdGlvbnNHcm91cExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnNvcnRPcHRpb25zKHZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0KTtcblxuICAgICAgICBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucy5wdXNoKFxuICAgICAgICAgIHsgbGFiZWw6IGN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljTGFiZWxdLCBvcHRpb25zOiB0cnVlIH0sXG4gICAgICAgICAgLi4udmVyaWZpZWRDb21ib09wdGlvbnNHcm91cExpc3RcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zO1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgdmVyaWZ5SWZIYXNMYWJlbChjdXJyZW50T3B0aW9uOiBQb0NvbWJvR3JvdXAgPSB7fSkge1xuICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gY3VycmVudE9wdGlvbjtcblxuICAgIGlmIChcbiAgICAgICh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmIG9wdGlvbnMgJiYgIWN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljTGFiZWxdKSB8fFxuICAgICAgKCFjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSAmJiAhY3VycmVudE9wdGlvblt0aGlzLmR5bmFtaWNWYWx1ZV0pIHx8XG4gICAgICAoIXRoaXMuaXNPcHRpb25Hcm91cExpc3QgJiYgb3B0aW9ucylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIWN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljTGFiZWxdKSB7XG4gICAgICBjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSA9IGN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljVmFsdWVdLnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlSW50ZXJuYWxWYXJpYWJsZXMob3B0aW9uOiBhbnkpIHtcbiAgICBpZiAob3B0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IG9wdGlvbjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBvcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1vZGVsKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLmZyb21Xcml0ZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2FsbE1vZGVsQ2hhbmdlKHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jaGFuZ2UuZW1pdCh0aGlzLmVtaXRPYmplY3RWYWx1ZSA/IHRoaXMuc2VsZWN0ZWRPcHRpb24gOiB2YWx1ZSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5mcm9tV3JpdGVWYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFZhbHVlV2l0aE9sZE9wdGlvbigpIHtcbiAgICBjb25zdCBvbGRPcHRpb24gPSB0aGlzLmdldE9wdGlvbkZyb21WYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAob2xkT3B0aW9uICYmIG9sZE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0pIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob2xkT3B0aW9uKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUhhc05leHQoKSB7XG4gICAgaWYgKHRoaXMuc2VydmljZSAmJiB0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFic3RyYWN0IHNldElucHV0VmFsdWUodmFsdWU6IGFueSk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZDtcblxuICBhYnN0cmFjdCBnZXRJbnB1dFZhbHVlKCk6IHN0cmluZztcblxuICBhYnN0cmFjdCBpbml0SW5wdXRPYnNlcnZhYmxlKCk6IHZvaWQ7XG59XG4iXX0=
|
|
1024
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8tYmFzZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL2NvbXBvbmVudHMvcG8tZmllbGQvcG8tY29tYm8vcG8tY29tYm8tYmFzZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUc1RixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFFckYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSS9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBSTFGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7QUFHaEUsTUFBTSw4QkFBOEIsR0FBRyxHQUFHLENBQUM7QUFDM0MsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLENBQUM7QUFDN0MsTUFBTSw0QkFBNEIsR0FBRyxPQUFPLENBQUM7QUFFN0M7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFFSCxNQUFNLE9BQWdCLG9CQUFvQjtJQUN4Qzs7Ozs7Ozs7OztPQVVHO0lBQzRELFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFMUYsMkJBQTJCO0lBQ1QsS0FBSyxDQUFVO0lBRWpDLG1DQUFtQztJQUNsQixJQUFJLENBQVU7SUFFL0IsMEJBQTBCO0lBQ1gsSUFBSSxDQUFTO0lBRTVCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Bc0JHO0lBQ3dCLGFBQWEsQ0FBeUI7SUFFakU7Ozs7Ozs7O09BUUc7SUFDSCxJQUFnQyxjQUFjLENBQUMsS0FBYztRQUMzRCxJQUFJLENBQUMs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aUJPLGFBQWE7a0JBQXJDLE1BQU07bUJBQUMsZUFBZTtZQVVHLFdBQVc7a0JBQXBDLE1BQU07bUJBQUMsZ0JBQWdCO1lBa0RJLFdBQVc7a0JBQXRDLEtBQUs7bUJBQUMsZUFBZTtZQWlCUSxZQUFZO2tCQUF6QyxLQUFLO21CQUFDLGlCQUFpQjtZQW1CYSxrQkFBa0I7a0JBQXRELEtBQUs7bUJBQUMsd0JBQXdCO1lBb0JILFVBQVU7a0JBQXJDLEtBQUs7bUJBQUMsZUFBZTtZQTRCTSxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUF3QlcsZUFBZTtrQkFBL0MsS0FBSzttQkFBQyxvQkFBb0I7WUFrQkYsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBZ0JPLFlBQVk7a0JBQXJDLEtBQUs7bUJBQUMsaUJBQWlCO1lBVVEsYUFBYTtrQkFBNUMsS0FBSzttQkFBQyxtQkFBbUI7WUFnQkQsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBV0UsSUFBSTtrQkFBeEIsS0FBSzttQkFBQyxRQUFRO1lBd0JTLE9BQU87a0JBQTlCLEtBQUs7bUJBQUMsV0FBVztZQXFCVSxVQUFVO2tCQUFyQyxLQUFLO21CQUFDLGVBQWU7WUE0QlEsWUFBWTtrQkFBekMsS0FBSzttQkFBQyxpQkFBaUI7WUFrQ0MsUUFBUTtrQkFBaEMsS0FBSzttQkFBQyxZQUFZO1lBMkJ1QyxLQUFLO2tCQUE5RCxLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7WUFjVyxTQUFTO2tCQUEzRSxLQUFLO21CQUFDLEVBQUUsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IHBvTG9jYWxlRGVmYXVsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLmNvbnN0YW50JztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBjb252ZXJ0VG9Cb29sZWFuLCBpc1R5cGVvZiwgdmFsaWRWYWx1ZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgcmVxdWlyZWRGYWlsZWQgfSBmcm9tICcuLi92YWxpZGF0b3JzJztcblxuaW1wb3J0IHsgUG9Db21ib0ZpbHRlciB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1maWx0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1ncm91cC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgcG9Db21ib0xpdGVyYWxzRGVmYXVsdCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1saXRlcmFscy1kZWZhdWx0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0NvbWJvTGl0ZXJhbHMgfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29tYm8tbGl0ZXJhbHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb25Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24tZ3JvdXAuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvcG8tY29tYm8tb3B0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0NvbWJvRmlsdGVyTW9kZSB9IGZyb20gJy4vcG8tY29tYm8tZmlsdGVyLW1vZGUuZW51bSc7XG5pbXBvcnQgeyBQb0NvbWJvRmlsdGVyU2VydmljZSB9IGZyb20gJy4vcG8tY29tYm8tZmlsdGVyLnNlcnZpY2UnO1xuXG5jb25zdCBQT19DT01CT19ERUJPVU5DRV9USU1FX0RFRkFVTFQgPSA0MDA7XG5jb25zdCBQT19DT01CT19GSUVMRF9MQUJFTF9ERUZBVUxUID0gJ2xhYmVsJztcbmNvbnN0IFBPX0NPTUJPX0ZJRUxEX1ZBTFVFX0RFRkFVTFQgPSAndmFsdWUnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICpcbiAqIE8gYHBvLWNvbWJvYCBleGliZSB1bWEgbGlzdGEgZGUgb3DDp8O1ZXMgY29tIGbDoWNpbCBzZWxlw6fDo28gZSBmaWx0cmFnZW0uXG4gKlxuICogQWzDqW0gZGEgZXhpYmnDp8OjbyBwYWRyw6NvLCBuZWxlIMOpIHBvc3PDrXZlbCBsaXN0YXIgYXMgb3DDtWVzIGVtIGFncnVwYW1lbnRvcy5cbiAqXG4gKiDDiSBwb3Nzw612ZWwgc2VsZWNpb25hciBlIG5hdmVnYXIgZW50cmUgYXMgb3DDp8O1ZXMgZGEgbGlzdGEgdGFudG8gYXRyYXbDqXMgZG8gKm1vdXNlKiBxdWFudG8gZG8gdGVjbGFkby4gTm8gdGVjbGFkbyBuYXZlZ3VlIGNvbVxuICogYXMgc2V0YXMgZSBwcmVzc2lvbmUgKkVudGVyKiBuYSBvcMOnw6NvIHF1ZSBkZXNlamFyLlxuICpcbiAqIENvbSBlbGUgdGFtYsOpbSDDqSBwb3Nzw612ZWwgZGVmaW5pciB1bWEgbGlzdGEgw6AgcGFydGlyIGRhIHJlcXVpc2nDp8OjbyBkZSB1bSBzZXJ2acOnbyBkZWZpbmlkbyBlbSBgcC1maWx0ZXItc2VydmljZWAuXG4gKlxuICogRW0gYHAtZmlsdGVyLW1vZGVgLCBvIGZpbHRybyBwb2RlcsOhIHNlciBjb25maWd1cmFkbyBwYXJhIGJ1c2NhciBvcMO1ZXMgcXVlIGNvcnJlc3BvbmRhbSBhbyBpbsOtY2lvLCBmaW0gb3UgcXVlIGNvbnRlbmhhIG8gdmFsb3IgZGlnaXRhZG8uXG4gKlxuICogTyBgcG8tY29tYm9gIGd1YXJkYSBvIMO6bHRpbW8gdmFsb3IgY2FzbyBvIHVzdcOhcmlvIGRlc2lzdGEgZGUgdW1hIGJ1c2NhLCBkZWl4YW5kbyBvIGNhbXBvIG91IHByZXNzaW9uYW5kbyAqRXNjKi4gQ2FzbyBzZWphIGRpZ2l0YWRvIG5vXG4gKiBjYW1wbyBkZSBidXNjYSBhIGRlc2NyacOnw6NvIGNvbXBsZXRhIGRlIHVtIGl0ZW0sIGVudMOjbyBhIHNlbGXDp8OjbyBzZXLDoSBhdXRvbWF0aWNhbWVudGUgZWZldHVhZGEgYW8gZGVpeGFyIG8gY2FtcG8gb3UgcHJlc3Npb25hbmRvICpFbnRlciouXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFBvQ29tYm9CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgVmFsaWRhdG9yIHtcbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogQXBsaWNhIGZvY28gbm8gZWxlbWVudG8gYW8gc2VyIGluaWNpYWRvLlxuICAgKlxuICAgKiA+IENhc28gbWFpcyBkZSB1bSBlbGVtZW50byBzZWphIGNvbmZpZ3VyYWRvIGNvbSBlc3NhIHByb3ByaWVkYWRlLCBhcGVuYXMgbyDDumx0aW1vIGVsZW1lbnRvIGRlY2xhcmFkbyBjb20gZWxhIHRlcsOhIG8gZm9jby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWF1dG8tZm9jdXMnLCB0cmFuc2Zvcm06IGNvbnZlcnRUb0Jvb2xlYW4gfSkgYXV0b0ZvY3VzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIExhYmVsIG5vIGNvbXBvbmVudGUuICovXG4gIEBJbnB1dCgncC1sYWJlbCcpIGxhYmVsPzogc3RyaW5nO1xuXG4gIC8qKiBUZXh0byBkZSBhcG9pbyBwYXJhIG8gY2FtcG8uICovXG4gIEBJbnB1dCgncC1oZWxwJykgaGVscD86IHN0cmluZztcblxuICAvKiogTm9tZSBkbyBjb21wb25lbnRlLiAqL1xuICBASW5wdXQoJ25hbWUnKSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogTmVzdGEgcHJvcHJpZWRhZGUgZGV2ZSBzZXIgaW5mb3JtYWRhIGEgVVJMIGRvIHNlcnZpw6dvIGVtIHF1ZSBzZXLDoSByZWFsaXphZG8gbyBmaWx0cm8gcGFyYSBjYXJyZWdhbWVudG8gZGEgbGlzdGEgZGVcbiAgICogaXRlbnMgbm8gY29tcG9uZW50ZS5cbiAgICogQ2FzbyBoYWphIGEgbmVjZXNzaWRhZGUgZGUgY3VzdG9taXphw6fDo28sIGVudMOjbyBwb2RlIHNlciBpbmZvcm1hZG8gdW0gc2VydmnDp28gaW1wbGVtZW50YW5kbyBhIGludGVyZmFjZSBQb0NvbWJvRmlsdGVyLlxuICAgKlxuICAgKiBDYXNvIHV0aWxpemFkbyB1bWEgVVJMLCBvIHNlcnZpw6dvIGRldmUgc2VyIHJldG9ybmFkbyBubyBwYWRyw6NvIEFQSSBUT1RWUyBlIHV0aWxpemEgYXMgcHJvcHJpZWRhZGVzXG4gICAqIGBwLWZpZWxkLWxhYmVsYCBlIGBwLWZpZWxkLXZhbHVlYCBwYXJhIGEgY29uc3RydcOnw6NvIGRhIGxpc3RhIGRlIGl0ZW5zLlxuICAgKlxuICAgKiBRdWFuZG8gdXRpbGl6YWRhIHVtYSBVUkwgZGUgc2VydmnDp28sIGVudMOjbyBzZXLDoSBjb25jYXRlbmFkYSBuZXN0YSBVUkwgbyB2YWxvciBxdWUgZGVzZWphLXNlIGZpbHRyYXIgZGEgc2VndWludGUgZm9ybWE6XG4gICAqIGBgYFxuICAgKiB1cmwgKyA/ZmlsdGVyPVBldGVyXG4gICAqIGBgYFxuICAgKlxuICAgKiBTZSBmb3IgZGVmaW5pZGEgYSBwcm9wcmllZGFkZSBgcC1maWx0ZXItcGFyYW1zYCwgYSBtZXNtYSB0YW1iw6ltIHNlcsOhIGNvbmNhdGVuYWRhLiBQb3IgZXhlbXBsbywgcGFyYSBvXG4gICAqIHBhcsOibWV0cm8gYHsgYWdlOiAyMyB9YCBhIFVSTCBmaWNhcmlhOlxuICAgKlxuICAgKiBgYGBcbiAgICogdXJsICsgP3BhZ2U9MSZwYWdlU2l6ZT0yMCZhZ2U9MjMmZmlsdGVyPVBldGVyXG4gICAqIGBgYFxuICAgKi9cbiAgQElucHV0KCdwLWZpbHRlci1zZXJ2aWNlJykgZmlsdGVyU2VydmljZTogUG9Db21ib0ZpbHRlciB8IHN0cmluZztcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvIGF0aXZhIGEgZnVuY2lvbmFsaWRhZGUgZGUgc2Nyb2xsIGluZmluaXRvIHBhcmEgbyBjb21ibywgQW8gY2hlZ2FyIGFvIGZpbSBkYSB0YWJlbGEgZXhlY3V0YXLDoSBub3ZhIGJ1c2NhIGRvcyBkYWRvcyBjb25mb3JtZSBwYWdpbmHDp8Ojby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLWluZmluaXRlLXNjcm9sbCcpIHNldCBpbmZpbml0ZVNjcm9sbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2luZmluaXRlU2Nyb2xsID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgaW5maW5pdGVTY3JvbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2luZmluaXRlU2Nyb2xsO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gcGVyY2VudHVhbCBuZWNlc3PDoXJpbyBwYXJhIGRpc3BhcmFyIG8gZXZlbnRvIGBzaG93LW1vcmVgLCBxdWUgw6kgcmVzcG9uc8OhdmVsIHBvciBjYXJyZWdhciBtYWlzIGRhZG9zIG5vIGNvbWJvLiBDYXNvIG8gdmFsb3Igc2VqYSBtYWlvciBxdWUgMTAwIG91IG1lbm9yIHF1ZSAwLCBvIHZhbG9yIHBhZHLDo28gc2Vyw6EgMTAwJS5cbiAgICpcbiAgICogKipFeGVtcGxvcyoqXG4gICAqIC0gcC1pbmZpbml0ZS1zY3JvbGwtZGlzdGFuY2UgPSA4MDogUXVhbmRvIGF0aW5naXIgODAlIGRvIHNjcm9sbCBkbyBjb21ibywgbyBgc2hvdy1tb3JlYCBzZXLDoSBkaXNwYXJhZG8uXG4gICAqL1xuICBASW5wdXQoJ3AtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlJykgc2V0IGluZmluaXRlU2Nyb2xsRGlzdGFuY2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2luZmluaXRlU2Nyb2xsRGlzdGFuY2UgPSB2YWx1ZSA+IDEwMCB8fCB2YWx1ZSA8IDAgPyAxMDAgOiB2YWx1ZTtcbiAgfVxuXG4gIGdldCBpbmZpbml0ZVNjcm9sbERpc3RhbmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9pbmZpbml0ZVNjcm9sbERpc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIG8gw61jb25lIHF1ZSBzZXLDoSBleGliaWRvIG5vIGluw61jaW8gZG8gY2FtcG8uXG4gICAqXG4gICAqIMOJIHBvc3PDrXZlbCB1c2FyIHF1YWxxdWVyIHVtIGRvcyDDrWNvbmVzIGRhIFtCaWJsaW90ZWNhIGRlIMOtY29uZXNdKC9ndWlkZXMvaWNvbnMpLiBjb25mb3JtZSBleGVtcGxvIGFiYWl4bzpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyBwLWljb249XCJwby1pY29uLXVzZXJcIiBwLWxhYmVsPVwiUE8gY29tYm9cIj48L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICogVGFtYsOpbSDDqSBwb3Nzw612ZWwgdXRpbGl6YXIgb3V0cmFzIGZvbnRlcyBkZSDDrWNvbmVzLCBwb3IgZXhlbXBsbyBhIGJpYmxpb3RlY2EgKkZvbnQgQXdlc29tZSosIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIHAtaWNvbj1cImZhIGZhLXBvZGNhc3RcIiBwLWxhYmVsPVwiUE8gY29tYm9cIj48L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICogT3V0cmEgb3DDp8OjbyBzZXJpYSBhIGN1c3RvbWl6YcOnw6NvIGRvIMOtY29uZSBhdHJhdsOpcyBkbyBgVGVtcGxhdGVSZWZgLCBjb25mb3JtZSBleGVtcGxvIGFiYWl4bzpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyBbcC1pY29uXT1cInRlbXBsYXRlXCIgcC1sYWJlbD1cImNvbWJvIHRlbXBsYXRlIGlvbmljXCI+PC9wby1jb21ibz5cbiAgICpcbiAgICogPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZT5cbiAgICogIDxpb24taWNvbiBzdHlsZT1cImZvbnQtc2l6ZTogaW5oZXJpdFwiIG5hbWU9XCJoZWFydFwiPjwvaW9uLWljb24+XG4gICAqIDwvbmctdGVtcGxhdGU+XG4gICAqIGBgYFxuICAgKiA+IFBhcmEgbyDDrWNvbmUgZW5xdWFkcmFyIGNvcnJldGFtZW50ZSwgZGV2ZS1zZSB1dGlsaXphciBgZm9udC1zaXplOiBpbmhlcml0YCBjYXNvIG8gw61jb25lIHV0aWxpemFkbyBuw6NvIGFwbGlxdWUtby5cbiAgICovXG4gIEBJbnB1dCgncC1pY29uJykgaWNvbj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9wY2lvbmFsIHNlcsOhIGV4aWJpZGEuXG4gICAqXG4gICAqID4gTsOjbyBzZXLDoSBleGliaWRhIGEgaW5kaWNhw6fDo28gc2U6XG4gICAqIC0gTyBjYW1wbyBjb250ZXIgYHAtcmVxdWlyZWRgO1xuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLW9wdGlvbmFsJykgb3B0aW9uYWw6IGJvb2xlYW47XG5cbiAgLyoqIFNlIHZlcmRhZGVpcm8sIG8gY2FtcG8gcmVjZWJlcsOhIHVtIGJvdMOjbyBwYXJhIHNlciBsaW1wby4gKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWNsZWFuJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGNsZWFuPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBTZSB2ZXJkYWRlaXJvLCBvIGV2ZW50byBgcC1jaGFuZ2VgIHJlY2ViZXLDoSBjb21vIGFyZ3VtZW50byBvIGBQb0NvbWJvT3B0aW9uYCByZWZlcmVudGUgw6Agb3DDp8OjbyBzZWxlY2lvbmFkYS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KHsgYWxpYXM6ICdwLWVtaXQtb2JqZWN0LXZhbHVlJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGVtaXRPYmplY3RWYWx1ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIFNlIHZlcmRhZGVpcm8sIGRlc2FiaWxpdGFyw6EgYSBidXNjYSBkZSB1bSBpdGVtIHZpYSBUQUIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1kaXNhYmxlZC10YWItZmlsdGVyJywgdHJhbnNmb3JtOiBjb252ZXJ0VG9Cb29sZWFuIH0pIGRpc2FibGVkVGFiRmlsdGVyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBvIGZpbHRybyBubyBwcmltZWlybyBjbGlxdWUgc2Vyw6EgcmVtb3ZpZG8uXG4gICAqXG4gICAqID4gQ2FzbyBvIGNvbWJvIHRlbmhhIHVtIHZhbG9yIHBhZHLDo28gZGUgaW5pY2lhbGl6YcOnw6NvLCBvIHByaW1laXJvIGNsaXF1ZVxuICAgKiBubyBjb21wb25lbnRlIHJldG9ybmFyw6EgdG9kb3Mgb3MgaXRlbnMgZGEgbGlzdGEgZSBuw6NvIGFwZW5hcyBvIGl0ZW0gaW5pY2lhbGlhemFkby5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgQElucHV0KCdwLXJlbW92ZS1pbml0aWFsLWZpbHRlcicpIHJlbW92ZUluaXRpYWxGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBEZXZlIHNlciBpbmZvcm1hZGEgdW1hIGZ1bsOnw6NvIHF1ZSBzZXLDoSBkaXNwYXJhZGEgcXVhbmRvIGhvdXZlciBhbHRlcmHDp8O1ZXMgbm8gbmdNb2RlbC4gQSBmdW7Dp8OjbyByZWNlYmVyw6EgY29tbyBhcmd1bWVudG8gbyBtb2RlbCBtb2RpZmljYWRvLlxuICAgKlxuICAgKiA+IFBvZGUtc2Ugb3B0YXIgcGVsbyByZWNlYmltZW50byBkbyBvYmpldG8gc2VsZWNpb25hZG8gYW8gaW52w6lzIGRvIG1vZGVsIGF0cmF2w6lzIGRhIHByb3ByaWVkYWRlIGBwLWVtaXQtb2JqZWN0LXZhbHVlYC5cbiAgICovXG4gIEBPdXRwdXQoJ3AtY2hhbmdlJykgY2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIEZ1bsOnw6NvIHBhcmEgYXR1YWxpemFyIG8gbmdNb2RlbCBkbyBjb21wb25lbnRlLCBuZWNlc3PDoXJpbyBxdWFuZG8gbsOjbyBmb3IgdXRpbGl6YWRvIGRlbnRybyBkYSB0YWcgZm9ybS5cbiAgICpcbiAgICogTmEgdmVyc8OjbyAxMi4yLjAgZG8gQW5ndWxhciBhIHZlcmlmaWNhw6fDo28gYHN0cmljdFRlbXBsYXRlc2AgdmVtIHRydWUgY29tbyBkZWZhdWx0LiBQb3J0YW50bywgcGFyYSB1dGlsaXphclxuICAgKiB0d28td2F5IGJpbmRpbmcgbm8gY29tcG9uZW50ZSBkZXZlIHNlIHV0aWxpemFyIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogPHBvLWNvbWJvIC4uLiBbbmdNb2RlbF09XCJjb21ib01vZGVsXCIgKG5nTW9kZWxDaGFuZ2UpPVwiY29tYm9Nb2RlbCA9ICRldmVudFwiPiA8L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICpcbiAgICovXG4gIEBPdXRwdXQoJ25nTW9kZWxDaGFuZ2UnKSBuZ01vZGVsQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERldmUgc2VyIGluZm9ybWFkYSB1bWEgZnVuw6fDo28gcXVlIHNlcsOhIGRpc3BhcmFkYSBxdWFuZG8gaG91dmVyIGFsdGVyYcOnw7VlcyBubyBTZWFyY2ggaW5wdXQuIEEgZnVuw6fDo28gcmVjZWJlcsOhIGNvbW8gYXJndW1lbnRvIG8gaW5wdXQgbW9kaWZpY2Fkby5cbiAgICpcbiAgICovXG4gIEBPdXRwdXQoJ3AtaW5wdXQtY2hhbmdlJykgaW5wdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgY2FjaGVPcHRpb25zOiBBcnJheTxhbnk+ID0gW107XG4gIGRlZmF1bHRTZXJ2aWNlOiBQb0NvbWJvRmlsdGVyU2VydmljZTtcbiAgZmlyc3RJbldyaXRlVmFsdWU6IGJvb2xlYW4gPSB0cnVlO1xuICBpc0ZpcnN0RmlsdGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAga2V5dXBTdWJzY3JpYmU6IGFueTtcbiAgb25Nb2RlbENoYW5nZTogYW55O1xuICBwcmV2aW91c1NlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWRPcHRpb246IGFueTtcbiAgc2VsZWN0ZWRWYWx1ZTogYW55O1xuICBzZWxlY3RlZFZpZXc6IGFueTtcbiAgc2VydmljZTogUG9Db21ib0ZpbHRlclNlcnZpY2U7XG4gIHZpc2libGVPcHRpb25zOiBBcnJheTxhbnk+ID0gW107XG4gIHBhZ2U6IG51bWJlciA9IDE7XG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBkeW5hbWljTGFiZWw6IHN0cmluZyA9ICdsYWJlbCc7XG4gIGR5bmFtaWNWYWx1ZTogc3RyaW5nID0gJ3ZhbHVlJztcblxuICBwcm90ZWN0ZWQgY2FjaGVTdGF0aWNPcHRpb25zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBjb21ib09wdGlvbnNMaXN0OiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBvbk1vZGVsVG91Y2hlZDogYW55ID0gbnVsbDtcblxuICBwcml2YXRlIF9jaGFuZ2VPbkVudGVyPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kZWJvdW5jZVRpbWU/OiBudW1iZXIgPSA0MDA7XG4gIHByaXZhdGUgX2Rpc2FibGVkPzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9kaXNhYmxlZEluaXRGaWx0ZXI/OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZpZWxkTGFiZWw/OiBzdHJpbmcgPSAnbGFiZWwnO1xuICBwcml2YXRlIF9maWVsZFZhbHVlPzogc3RyaW5nID0gJ3ZhbHVlJztcbiAgcHJpdmF0ZSBfZmlsdGVyTWlubGVuZ3RoPzogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfZmlsdGVyTW9kZT86IFBvQ29tYm9GaWx0ZXJNb2RlID0gUG9Db21ib0ZpbHRlck1vZGUuc3RhcnRzV2l0aDtcbiAgcHJpdmF0ZSBfZmlsdGVyUGFyYW1zPzogYW55O1xuICBwcml2YXRlIF9saXRlcmFscz86IFBvQ29tYm9MaXRlcmFscztcbiAgcHJpdmF0ZSBfb3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9PcHRpb25Hcm91cCB8IGFueT4gPSBbXTtcbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9yZXF1aXJlZD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfc29ydD86IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBsYW5ndWFnZTogc3RyaW5nO1xuICBwcml2YXRlIF9pbmZpbml0ZVNjcm9sbERpc3RhbmNlPzogbnVtYmVyID0gMTAwO1xuICBwcml2YXRlIF9pbmZpbml0ZVNjcm9sbD86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyB1dGlsaXphZG8gcGFyYSBmYXplciBvIGNvbnRyb2xlIGRlIGF0dWFsaXphciBvIG1vZGVsLlxuICAvLyBuw6NvIGRldmUgZm9yw6dhciBhIGF0dWFsaXphw6fDo28gc2UgbyBnYXRpbGhvIGZvciBvIHdyaXRlVmFsdWUgcGFyYSBuw6NvIGRlaXhhciBvIGNhbXBvIGRpcnR5LlxuICBwcml2YXRlIGZyb21Xcml0ZVZhbHVlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSB2YWxpZGF0b3JDaGFuZ2U6IGFueTtcblxuICAvKiogTWVuc2FnZW0gYXByZXNlbnRhZGEgZW5xdWFudG8gbyBjYW1wbyBlc3RpdmVyIHZhemlvLiAqL1xuICBASW5wdXQoJ3AtcGxhY2Vob2xkZXInKSBzZXQgcGxhY2Vob2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3BsYWNlaG9sZGVyID0gdmFsdWUgfHwgdGhpcy5saXRlcmFscy5jaG9vc2VPcHRpb247XG4gIH1cblxuICBnZXQgcGxhY2Vob2xkZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRXN0YSBwcm9wcmllZGFkZSBkZWZpbmUgZW0gcXVhbnRvIHRlbXBvIChlbSBtaWxpc3NlZ3VuZG9zKSwgYWd1YXJkYSBwYXJhIGFjaW9uYXIgbyBldmVudG8gZGUgZmlsdHJvIGFww7NzIGNhZGEgcHJlc3Npb25hbWVudG8gZGUgdGVjbGEuXG4gICAqIFNlcsOhIHV0aWxpemFkYSBhcGVuYXMgcXVhbmRvIGhvdXZlciBzZXJ2acOnbyAoYHAtZmlsdGVyLXNlcnZpY2VgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYDQwMGBcbiAgICovXG4gIEBJbnB1dCgncC1kZWJvdW5jZS10aW1lJykgc2V0IGRlYm91bmNlVGltZSh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUludCg8YW55PnZhbHVlLCAxMCk7XG5cbiAgICB0aGlzLl9kZWJvdW5jZVRpbWUgPSAhaXNOYU4ocGFyc2VkVmFsdWUpICYmIHBhcnNlZFZhbHVlID4gMCA/IHBhcnNlZFZhbHVlIDogUE9fQ09NQk9fREVCT1VOQ0VfVElNRV9ERUZBVUxUO1xuICB9XG5cbiAgZ2V0IGRlYm91bmNlVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9kZWJvdW5jZVRpbWU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXNhYmlsaXRhIG8gZmlsdHJvIGluaWNpYWwgbm8gc2VydmnDp28sIHF1ZSDDqSBleGVjdXRhZG8gbm8gcHJpbWVpcm8gY2xpcXVlIG5vIGNhbXBvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqXG4gICAqL1xuICBASW5wdXQoJ3AtZGlzYWJsZWQtaW5pdC1maWx0ZXInKSBzZXQgZGlzYWJsZWRJbml0RmlsdGVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWRJbml0RmlsdGVyID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XG4gIH1cblxuICBnZXQgZGlzYWJsZWRJbml0RmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEluaXRGaWx0ZXI7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZXZlIHNlciBpbmZvcm1hZG8gbyBub21lIGRhIHByb3ByaWVkYWRlIGRvIG9iamV0byBxdWUgc2Vyw6EgdXRpbGl6YWRvIHBhcmEgYSBjb252ZXJzw6NvIGRvcyBpdGVucyBhcHJlc2VudGFkb3MgbmEgbGlzdGEgZG8gY29tcG9uZW50ZVxuICAgKiAoYHAtb3B0aW9uc2ApLCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIHJlc3BvbnPDoXZlbCBwZWxvIHZhbG9yIGRlIGNhZGEgaXRlbSBkYSBsaXN0YS5cbiAgICpcbiAgICogTmVjZXNzw6FyaW8gcXVhbmRvIGluZm9ybWFyIG8gc2VydmnDp28gY29tbyBVUkwgZSBvIG1lc21vIG7Do28gZXN0aXZlciByZXRvcm5hbmRvIHVtYSBsaXN0YSBkZSBvYmpldG9zIG5vIHBhZHLDo28gZGEgaW50ZXJmYWNlXG4gICAqIFBvQ29tYm9PcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IGB2YWx1ZWBcbiAgICovXG4gIEBJbnB1dCgncC1maWVsZC12YWx1ZScpIHNldCBmaWVsZFZhbHVlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuc2VydmljZSAmJiAhdGhpcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmR5bmFtaWNWYWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuX2ZpZWxkVmFsdWUgPSB2YWx1ZSB8fCBQT19DT01CT19GSUVMRF9WQUxVRV9ERUZBVUxUO1xuXG4gICAgaWYgKGlzVHlwZW9mKHRoaXMuZmlsdGVyU2VydmljZSwgJ3N0cmluZycpICYmIHRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmZpZWxkVmFsdWUgPSB0aGlzLl9maWVsZFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBmaWVsZFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLl9maWVsZFZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogRGV2ZSBzZXIgaW5mb3JtYWRvIG8gbm9tZSBkYSBwcm9wcmllZGFkZSBkbyBvYmpldG8gcXVlIHNlcsOhIHV0aWxpemFkbyBwYXJhIGEgY29udmVyc8OjbyBkb3MgaXRlbnMgYXByZXNlbnRhZG9zIG5hIGxpc3RhIGRvIGNvbXBvbmVudGVcbiAgICogKGBwLW9wdGlvbnNgKSwgZXN0YSBwcm9wcmllZGFkZSBzZXLDoSByZXNwb25zw6F2ZWwgcGVsbyB0ZXh0byBkZSBhcHJlc2VudGHDp8OjbyBkZSBjYWRhIGl0ZW0gZGEgbGlzdGEuXG4gICAqXG4gICAqIE5lY2Vzc8OhcmlvIHF1YW5kbyBpbmZvcm1hciBvIHNlcnZpw6dvIGNvbW8gVVJMIGUgbyBtZXNtbyBuw6NvIGVzdGl2ZXIgcmV0b3JuYW5kbyB1bWEgbGlzdGEgZGUgb2JqZXRvcyBubyBwYWRyw6NvIGRhIGludGVyZmFjZVxuICAgKiBQb0NvbWJvT3B0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgbGFiZWxgXG4gICAqL1xuICBASW5wdXQoJ3AtZmllbGQtbGFiZWwnKSBzZXQgZmllbGRMYWJlbCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UgJiYgIXRoaXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5keW5hbWljTGFiZWwgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9maWVsZExhYmVsID0gdmFsdWUgfHwgUE9fQ09NQk9fRklFTERfTEFCRUxfREVGQVVMVDtcblxuICAgIGlmIChpc1R5cGVvZih0aGlzLmZpbHRlclNlcnZpY2UsICdzdHJpbmcnKSAmJiB0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5maWVsZExhYmVsID0gdGhpcy5fZmllbGRMYWJlbDtcbiAgICB9XG4gIH1cblxuICBnZXQgZmllbGRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmllbGRMYWJlbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIFZhbG9yIG3DrW5pbW8gZGUgY2FyYWN0ZXJlcyBwYXJhIHJlYWxpemFyIG8gZmlsdHJvIG5vIHNlcnZpw6dvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItbWlubGVuZ3RoJykgc2V0IGZpbHRlck1pbmxlbmd0aCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgY29uc3QgcGFyc2VWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh2YWx1ZSwgMTApIDogdmFsdWU7XG5cbiAgICB0aGlzLl9maWx0ZXJNaW5sZW5ndGggPSBOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlVmFsdWUpID8gcGFyc2VWYWx1ZSA6IDA7XG4gIH1cblxuICBnZXQgZmlsdGVyTWlubGVuZ3RoKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJNaW5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBEZWZpbmUgcXVlIG8gY2FtcG8gc2Vyw6Egb2JyaWdhdMOzcmlvLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICBASW5wdXQoJ3AtcmVxdWlyZWQnKSBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvbnZlcnRUb0Jvb2xlYW4ocmVxdWlyZWQpO1xuXG4gICAgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuc2VsZWN0ZWRWYWx1ZSk7XG4gIH1cblxuICBnZXQgcmVxdWlyZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBzZSBhIGluZGljYcOnw6NvIGRlIGNhbXBvIG9icmlnYXTDs3JpbyBzZXLDoSBleGliaWRhLlxuICAgKlxuICAgKiA+IE7Do28gc2Vyw6EgZXhpYmlkYSBhIGluZGljYcOnw6NvIHNlOlxuICAgKiAtIE7Do28gcG9zc3VpciBgcC1oZWxwYCBlL291IGBwLWxhYmVsYC5cbiAgICovXG4gIEBJbnB1dCgncC1zaG93LXJlcXVpcmVkJykgc2hvd1JlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICogSW5kaWNhIHF1ZSBvIGV2ZW50byBgcC1jaGFuZ2VgIHPDsyBzZXLDoSBkaXNwYXJhZG8gYW8gY2xpY2FyIG91IHByZXNzaW9uYXIgYSB0ZWNsYSBcIkVudGVyXCIgc29icmUgdW1hIG9ww6fDo28gc2VsZWNpb25hZGEuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1jaGFuZ2Utb24tZW50ZXInKSBzZXQgY2hhbmdlT25FbnRlcihjaGFuZ2VPbkVudGVyOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2hhbmdlT25FbnRlciA9IGNvbnZlcnRUb0Jvb2xlYW4oY2hhbmdlT25FbnRlcik7XG4gIH1cblxuICBnZXQgY2hhbmdlT25FbnRlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbmdlT25FbnRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEluZGljYSBxdWUgbyBjYW1wbyBzZXLDoSBkZXNhYmlsaXRhZG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCgncC1kaXNhYmxlZCcpIHNldCBkaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29udmVydFRvQm9vbGVhbihkaXNhYmxlZCk7XG5cbiAgICB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5zZWxlY3RlZFZhbHVlKTtcbiAgfVxuXG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XG4gIH1cblxuICAvKiogSW5kaWNhIHF1ZSBhIGxpc3RhIGRlZmluaWRhIG5hIHByb3ByaWVkYWRlIHAtb3B0aW9ucyBzZXLDoSBvcmRlbmFkYSBwZWxhIGRlc2NyacOnw6NvLiAqL1xuICBASW5wdXQoJ3Atc29ydCcpIHNldCBzb3J0KHNvcnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9zb3J0ID0gY29udmVydFRvQm9vbGVhbihzb3J0KTtcbiAgICB0aGlzLmNvbWJvTGlzdERlZmluaXRpb25zKCk7XG4gIH1cblxuICBnZXQgc29ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOZXN0YSBwcm9wcmllZGFkZSBkZWZpbmUgYSBsaXN0YSBkZSBvcMOnw7VlcyBkbyBgcG8tY29tYm9gLlxuICAgKlxuICAgKiA+IEEgbGlzdGEgcG9kZSBzZXIgZGVmaW5pZGEgdXRpbGl6YW5kbyB1bSBhcnJheSBjb20gbyB2YWxvciByZXByZXNlbnRhbmRvIG8gYHZhbHVlYCBlIG8gYGxhYmVsYCBkYXMgc2VndWludGVzIGZvcm1hczpcbiAgICpcbiAgICogYGBgXG4gICAqIDxwby1jb21ibyBuYW1lPVwiY29tYm9cIiBwLWxhYmVsPVwiUE8gQ29tYm9cIiBbcC1vcHRpb25zXT1cIlt7dmFsdWU6IDEsIGxhYmVsOiAnT25lJ30sIHt2YWx1ZTogMiwgbGFiZWw6ICd0d28nfV1cIj4gPC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm8gbmFtZT1cImNvbWJvXCIgcC1sYWJlbD1cIlBPIENvbWJvXCIgW3Atb3B0aW9uc109XCJbe25hbWU6ICdSb2dlcicsIGFnZTogMjh9LCB7bmFtZTogJ0FubmUnLCBhZ2U6IDM1fV1cIiBwLWZpZWxkLWxhYmVsPVwibmFtZVwiIHAtZmllbGQtdmFsdWU9XCJhZ2VcIj4gPC9wby1jb21ibz5cbiAgICogYGBgXG4gICAqXG4gICAqIC0gQWNvbnNlbGhhLXNlIHV0aWxpemFyIHZhbG9yZXMgZGlzdGludG9zIG5vIGBsYWJlbGAgZSBgdmFsdWVgIGRvcyBpdGVucy5cbiAgICovXG4gIEBJbnB1dCgncC1vcHRpb25zJykgc2V0IG9wdGlvbnMob3B0aW9uczogQXJyYXk8UG9Db21ib09wdGlvbiB8IFBvQ29tYm9PcHRpb25Hcm91cCB8IGFueT4pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gQXJyYXkuaXNBcnJheShvcHRpb25zKSA/IG9wdGlvbnMgOiBbXTtcblxuICAgIHRoaXMuY29tYm9MaXN0RGVmaW5pdGlvbnMoKTtcbiAgfVxuXG4gIGdldCBvcHRpb25zKCk6IEFycmF5PFBvQ29tYm9PcHRpb24gfCBQb0NvbWJvT3B0aW9uR3JvdXAgfCBhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBvIG1vZG8gZGUgcGVzcXVpc2EgdXRpbGl6YWRvIG5vIGZpbHRybyBkYSBsaXN0YSBkZSBzZWxlw6fDo286IGBzdGFydHNXaXRoYCwgYGNvbnRhaW5zYCBvdSBgZW5kc1dpdGhgLlxuICAgKlxuICAgKiA+IFF1YW5kbyB1dGlsaXphciBhIHByb3ByaWVkYWRlIGBwLWZpbHRlci1zZXJ2aWNlYCBlc3RhIHByb3ByaWVkYWRlIHNlcsOhIGlnbm9yYWRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgc3RhcnRzV2l0aGBcbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItbW9kZScpIHNldCBmaWx0ZXJNb2RlKGZpbHRlck1vZGU6IFBvQ29tYm9GaWx0ZXJNb2RlKSB7XG4gICAgdGhpcy5fZmlsdGVyTW9kZSA9IGZpbHRlck1vZGUgaW4gUG9Db21ib0ZpbHRlck1vZGUgPyBmaWx0ZXJNb2RlIDogUG9Db21ib0ZpbHRlck1vZGUuc3RhcnRzV2l0aDtcbiAgICBzd2l0Y2ggKHRoaXMuX2ZpbHRlck1vZGUudG9TdHJpbmcoKSkge1xuICAgICAgY2FzZSAnc3RhcnRzV2l0aCc6XG4gICAgICAgIHRoaXMuX2ZpbHRlck1vZGUgPSBQb0NvbWJvRmlsdGVyTW9kZS5zdGFydHNXaXRoO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvbnRhaW5zJzpcbiAgICAgICAgdGhpcy5fZmlsdGVyTW9kZSA9IFBvQ29tYm9GaWx0ZXJNb2RlLmNvbnRhaW5zO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VuZHNXaXRoJzpcbiAgICAgICAgdGhpcy5fZmlsdGVyTW9kZSA9IFBvQ29tYm9GaWx0ZXJNb2RlLmVuZHNXaXRoO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyTW9kZSgpOiBQb0NvbWJvRmlsdGVyTW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlck1vZGU7XG4gIH1cblxuICAvKipcbiAgICogQG9wdGlvbmFsXG4gICAqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBWYWxvciBxdWUgc2Vyw6EgcmVwYXNzYWRvIGNvbW8gcGFyw6JtZXRybyBwYXJhIGEgVVJMIG91IGFvcyBtw6l0b2RvcyBkbyBzZXJ2acOnbyBxdWUgaW1wbGVtZW50YW0gYSBpbnRlcmZhY2UgKlBvQ29tYm9GaWx0ZXIqLlxuICAgKlxuICAgKiA+IENhc28gYSBsaXN0YSBjb250ZW5oYSBhZ3J1cGFtZW50b3MsIG9zIG1lc21vcyBzw7Mgc2Vyw6NvIGV4aWJpZG9zIHNlIGhvdXZlciBubyBtw61uaW1vIHVtYSBvcMOnw6NvIHF1ZSBjb3JyZXNwb25kYSDDoCBwZXNxdWlzYS5cbiAgICovXG4gIEBJbnB1dCgncC1maWx0ZXItcGFyYW1zJykgc2V0IGZpbHRlclBhcmFtcyhmaWx0ZXJQYXJhbXM6IGFueSkge1xuICAgIHRoaXMuX2ZpbHRlclBhcmFtcyA9IGZpbHRlclBhcmFtcyB8fCBmaWx0ZXJQYXJhbXMgPT09IDAgfHwgZmlsdGVyUGFyYW1zID09PSBmYWxzZSA/IGZpbHRlclBhcmFtcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBmaWx0ZXJQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlclBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIE9iamV0byBjb20gYXMgbGl0ZXJhaXMgdXNhZGFzIG5vIGBwby1jb21ib2AuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6YXIgYmFzdGEgcGFzc2FyIGEgbGl0ZXJhbCBxdWUgZGVzZWphIGN1c3RvbWl6YXI6XG4gICAqXG4gICAqIGBgYFxuICAgKiAgY29uc3QgY3VzdG9tTGl0ZXJhbHM6IFBvQ29tYm9MaXRlcmFscyA9IHtcbiAgICogICAgbm9EYXRhOiAnTmVuaHVtIHZhbG9yJ1xuICAgKiAgfTtcbiAgICogYGBgXG4gICAqXG4gICAqIEUgcGFyYSBjYXJyZWdhciBhIGxpdGVyYWwgY3VzdG9taXphZGEsIGJhc3RhIGFwZW5hcyBwYXNzYXIgbyBvYmpldG8gcGFyYSBvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIGBgYFxuICAgKiA8cG8tY29tYm9cbiAgICogICBbcC1saXRlcmFsc109XCJjdXN0b21MaXRlcmFsc1wiPlxuICAgKiA8L3BvLWNvbWJvPlxuICAgKiBgYGBcbiAgICpcbiAgICogPiBPIG9iamV0byBwYWRyw6NvIGRlIGxpdGVyYWlzIHNlcsOhIHRyYWR1emlkbyBkZSBhY29yZG8gY29tIG8gaWRpb21hIGRvXG4gICAqIFtgUG9JMThuU2VydmljZWBdKC9kb2N1bWVudGF0aW9uL3BvLWkxOG4pIG91IGRvIGJyb3dzZXIuXG4gICAqL1xuICBASW5wdXQoJ3AtbGl0ZXJhbHMnKSBzZXQgbGl0ZXJhbHModmFsdWU6IFBvQ29tYm9MaXRlcmFscykge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpKSB7XG4gICAgICB0aGlzLl9saXRlcmFscyA9IHtcbiAgICAgICAgLi4ucG9Db21ib0xpdGVyYWxzRGVmYXVsdFtwb0xvY2FsZURlZmF1bHRdLFxuICAgICAgICAuLi5wb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdLFxuICAgICAgICAuLi52YWx1ZVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGl0ZXJhbHMgPSBwb0NvbWJvTGl0ZXJhbHNEZWZhdWx0W3RoaXMubGFuZ3VhZ2VdO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsaXRlcmFscygpIHtcbiAgICByZXR1cm4gdGhpcy5fbGl0ZXJhbHMgfHwgcG9Db21ib0xpdGVyYWxzRGVmYXVsdFt0aGlzLmxhbmd1YWdlXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAb3B0aW9uYWxcbiAgICpcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqXG4gICAqIERlZmluZSBzZSBvIGNvbXBvbmVudGUgaXLDoSBndWFyZGFyIG8gdmFsb3IgZG8gbW9kZWwgcGFyYSBldml0YXIgcmVxdWlzacOnw7VlcyByZXBldGlkYXMuXG4gICAqXG4gICAqID4gQ2FzbyBvIHZhbG9yIHNlamEgYGZhbHNlYCwgbyBjb21wb25lbnRlIGZhcsOhIHVtYSBub3ZhIHJlcXVpc2nDp8OjbyBtZXNtbyBxdWUgbyB2YWxvciBwcm9jdXJhZG8gc2VqYSBvIG1lc21vIGRvIG1vZGVsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1jYWNoZScsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBjYWNoZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEBvcHRpb25hbFxuICAgKlxuICAgKiBAZGVzY3JpcHRpb25cbiAgICpcbiAgICogRGVmaW5lIHF1ZSBvIGRyb3Bkb3duIGRvIGNvbWJvIHNlcsOhIGluY2x1aWRvIG5vIGJvZHkgZGEgcMOhZ2luYSBlIG7Do28gc3VzcGVuc28gY29tIGEgY2FpeGEgZGUgdGV4dG8gZG8gY29tcG9uZW50ZS5cbiAgICogT3DDp8OjbyBuZWNlc3PDoXJpYSBwYXJhIG8gY2FzbyBkZSB1c28gZG8gY29tcG9uZW50ZSBlbSBww6FnaW5hcyBxdWUgbmVjZXNzaXRhbSByZW5kZXJpemFyIG8gY29tYm8gZm9yYSBkbyBjb250ZcO6ZG8gcHJpbmNpcGFsLlxuICAgKlxuICAgKiA+IE9iczogTyB1c28gZGVzc2EgcHJvcHJpZWRhZGUgcG9kZSBhY2FycmV0YXIgbmEgcGVyZGEgc2VxdWVuY2lhbCBkYSB0YWJ1bGHDp8OjbyBkYSBww6FnaW5hXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIEBJbnB1dCh7IGFsaWFzOiAncC1hcHBlbmQtaW4tYm9keScsIHRyYW5zZm9ybTogY29udmVydFRvQm9vbGVhbiB9KSBhcHBlbmRCb3g/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IobGFuZ3VhZ2VTZXJ2aWNlOiBQb0xhbmd1YWdlU2VydmljZSkge1xuICAgIHRoaXMubGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICB9XG5cbiAgZ2V0IGlzT3B0aW9uR3JvdXBMaXN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zLmxlbmd0aCAmJiB0aGlzLl9vcHRpb25zWzBdLmhhc093blByb3BlcnR5KCdvcHRpb25zJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmR5bmFtaWNWYWx1ZSA9IHRoaXMuY2hlY2tJZlNlcnZpY2UoJ3ZhbHVlJyk7XG4gICAgdGhpcy5keW5hbWljTGFiZWwgPSB0aGlzLmNoZWNrSWZTZXJ2aWNlKCdsYWJlbCcpO1xuXG4gICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgfVxuXG4gIG9uSW5pdFNlcnZpY2UoKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VydmljZSkge1xuICAgICAgdGhpcy5zZXRTZXJ2aWNlKHRoaXMuZmlsdGVyU2VydmljZSk7XG4gICAgICB0aGlzLmluaXRJbnB1dE9ic2VydmFibGUoKTtcbiAgICB9XG4gIH1cblxuICBzZXRTZXJ2aWNlKHNlcnZpY2U6IFBvQ29tYm9GaWx0ZXIgfCBzdHJpbmcpIHtcbiAgICBpZiAoc2VydmljZSkge1xuICAgICAgaWYgKGlzVHlwZW9mKHNlcnZpY2UsICdvYmplY3QnKSkge1xuICAgICAgICB0aGlzLnNlcnZpY2UgPSA8UG9Db21ib0ZpbHRlclNlcnZpY2U+c2VydmljZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VydmljZSA9IHRoaXMuZGVmYXVsdFNlcnZpY2U7XG4gICAgICAgIHRoaXMuc2VydmljZS5jb25maWdQcm9wZXJ0aWVzKDxzdHJpbmc+c2VydmljZSwgdGhpcy5maWVsZExhYmVsLCB0aGlzLmZpZWxkVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbXBhcmVNZXRob2Qoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCwgZmlsdGVyTW9kZTogUG9Db21ib0ZpbHRlck1vZGUpIHtcbiAgICBzd2l0Y2ggKGZpbHRlck1vZGUpIHtcbiAgICAgIGNhc2UgUG9Db21ib0ZpbHRlck1vZGUuc3RhcnRzV2l0aDpcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRzV2l0aChzZWFyY2gsIG9wdGlvbik7XG4gICAgICBjYXNlIFBvQ29tYm9GaWx0ZXJNb2RlLmNvbnRhaW5zOlxuICAgICAgICByZXR1cm4gdGhpcy5jb250YWlucyhzZWFyY2gsIG9wdGlvbik7XG4gICAgICBjYXNlIFBvQ29tYm9GaWx0ZXJNb2RlLmVuZHNXaXRoOlxuICAgICAgICByZXR1cm4gdGhpcy5lbmRzV2l0aChzZWFyY2gsIG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgc3RhcnRzV2l0aChzZWFyY2g6IHN0cmluZywgb3B0aW9uOiBhbnkpIHtcbiAgICByZXR1cm4gb3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoc2VhcmNoLnRvTG93ZXJDYXNlKCkpO1xuICB9XG5cbiAgY29udGFpbnMoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogYW55KSB7XG4gICAgcmV0dXJuIG9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0udG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaC50b0xvd2VyQ2FzZSgpKSA+IC0xO1xuICB9XG5cbiAgZW5kc1dpdGgoc2VhcmNoOiBzdHJpbmcsIG9wdGlvbjogYW55KSB7XG4gICAgcmV0dXJuIG9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0udG9Mb3dlckNhc2UoKS5lbmRzV2l0aChzZWFyY2gudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICBnZXRPcHRpb25Gcm9tVmFsdWUodmFsdWU6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPyBvcHRpb25zLmZpbmQoKG9wdGlvbjogYW55KSA9PiB0aGlzLmlzRXF1YWwob3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSwgdmFsdWUpKSA6IG51bGw7XG4gIH1cblxuICBnZXRPcHRpb25Gcm9tTGFiZWwobGFiZWw6IGFueSwgb3B0aW9uczogYW55KSB7XG4gICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZpbmQoXG4gICAgICAgIChvcHRpb246IGFueSkgPT4gb3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09IGxhYmVsLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb246IGFueSwgaXNVcGRhdGVNb2RlbDogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBvcHRpb25MYWJlbCA9IChvcHRpb24gJiYgb3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSkgfHwgJyc7XG5cbiAgICB0aGlzLnVwZGF0ZUludGVybmFsVmFyaWFibGVzKG9wdGlvbik7XG5cbiAgICAvLyBhdHVhbGl6YSBvIHZhbG9yIGRvIGlucHV0IHF1YW5kbyBmb3IgY2hhbmdlT25FbnRlciBhcGVuYXMgc2UgZm9yIHBhcmEgYXR1YWxpemFyIG8gbW9kZWwuXG4gICAgaWYgKHRoaXMuY2hhbmdlT25FbnRlciAmJiBpc1VwZGF0ZU1vZGVsKSB7XG4gICAgICB0aGlzLnNldElucHV0VmFsdWUob3B0aW9uTGFiZWwpO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuY2hhbmdlT25FbnRlcikge1xuICAgICAgdGhpcy5zZXRJbnB1dFZhbHVlKG9wdGlvbkxhYmVsKTtcbiAgICB9XG5cbiAgICBpZiAoaXNVcGRhdGVNb2RlbCkge1xuICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSBvcHRpb24/Llt0aGlzLmR5bmFtaWNWYWx1ZV0gIT09IHVuZGVmaW5lZCA/IG9wdGlvblt0aGlzLmR5bmFtaWNWYWx1ZV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIHRoaXMudXBkYXRlTW9kZWwob3B0aW9uVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxNb2RlbENoYW5nZSh2YWx1ZTogYW55KSB7XG4gICAgLy8gQ2FzbyBvIGNvbXBvbmVudGUgZXN0aXZlciBkZW50cm8gZGUgdW0gZm9ybSwgdGVyw6EgYWNlc3NvIGFvIG3DqXRvZG8gb25Nb2RlbENoYW5nZS5cbiAgICByZXR1cm4gdGhpcy5vbk1vZGVsQ2hhbmdlID8gdGhpcy5vbk1vZGVsQ2hhbmdlKHZhbHVlKSA6IHRoaXMubmdNb2RlbENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIGlzRXF1YWwodmFsdWU6IGFueSwgaW5wdXRWYWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCh2YWx1ZSB8fCB2YWx1ZSA9PT0gMCkgJiYgaW5wdXRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkgPT09IGlucHV0VmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoKHZhbHVlID09PSBudWxsICYmIGlucHV0VmFsdWUgIT09IG51bGwpIHx8ICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGlucHV0VmFsdWUgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgIHZhbHVlID0gYCR7dmFsdWV9YDsgLy8gVHJhbnNmb3JtYW5kbyBlbSBzdHJpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUgPT09IGlucHV0VmFsdWU7XG4gIH1cblxuICBzZWFyY2hGb3JMYWJlbChzZWFyY2g6IHN0cmluZywgb3B0aW9uczogQXJyYXk8YW55PiwgZmlsdGVyTW9kZTogUG9Db21ib0ZpbHRlck1vZGUpIHtcbiAgICBpZiAoc2VhcmNoICYmIG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5ld09wdGlvbnM6IEFycmF5PGFueT4gPSBbXTtcbiAgICAgIGxldCBhZGRlZE9wdGlvbnNHcm91cFRpdGxlOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBsZXQgb3B0aW9uc0dyb3VwVGl0bGU6IFBvQ29tYm9Hcm91cDtcblxuICAgICAgb3B0aW9ucy5mb3JFYWNoKG9wdGlvbiA9PiB7XG4gICAgICAgIGlmICgnb3B0aW9ucycgaW4gb3B0aW9uKSB7XG4gICAgICAgICAgYWRkZWRPcHRpb25zR3JvdXBUaXRsZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiAob3B0aW9uc0dyb3VwVGl0bGUgPSBvcHRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0gJiYgKHRoaXMuY29tcGFyZU1ldGhvZChzZWFyY2gsIG9wdGlvbiwgZmlsdGVyTW9kZSkgfHwgdGhpcy5zZXJ2aWNlKSkge1xuICAgICAgICAgIGlmICh0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmICFhZGRlZE9wdGlvbnNHcm91cFRpdGxlKSB7XG4gICAgICAgICAgICBuZXdPcHRpb25zLnB1c2gob3B0aW9uc0dyb3VwVGl0bGUpO1xuICAgICAgICAgICAgYWRkZWRPcHRpb25zR3JvdXBUaXRsZSA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV3T3B0aW9ucy5wdXNoKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IG5ld09wdGlvbnNbdGhpcy5pc09wdGlvbkdyb3VwTGlzdCA/IDEgOiAwXTtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KG5ld09wdGlvbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbWJvTGlzdChvcHRpb25zPzogQXJyYXk8YW55Pikge1xuICAgIGNvbnN0IGNvcHlPcHRpb25zID0gb3B0aW9ucyB8fCBbLi4udGhpcy5jb21ib09wdGlvbnNMaXN0XTtcblxuICAgIGxldCBuZXdPcHRpb25zO1xuICAgIGlmICh0aGlzLnJlbW92ZUluaXRpYWxGaWx0ZXIpIHtcbiAgICAgIG5ld09wdGlvbnMgPSBjb3B5T3B0aW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3T3B0aW9ucyA9ICFvcHRpb25zICYmICF0aGlzLmluZmluaXRlU2Nyb2xsICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZSA/IFt7IC4uLnRoaXMuc2VsZWN0ZWRPcHRpb24gfV0gOiBjb3B5T3B0aW9ucztcbiAgICB9XG5cbiAgICB0aGlzLnZpc2libGVPcHRpb25zID0gbmV3T3B0aW9ucztcblxuICAgIGlmICghdGhpcy5zZWxlY3RlZFZpZXcgJiYgdGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWaWV3ID0gY29weU9wdGlvbnMuZmluZChvcHRpb24gPT4gb3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSAhPT0gdW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBnZXROZXh0T3B0aW9uKHZhbHVlOiBhbnksIG9wdGlvbnM6IEFycmF5PGFueT4sIHJldmVyc2U6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IG9wdGlvbnNMaXN0ID0gcmV2ZXJzZSA/IG9wdGlvbnMuc2xpY2UoMCkucmV2ZXJzZSgpIDogb3B0aW9ucy5zbGljZSgwKTtcbiAgICBsZXQgb3B0aW9uRm91bmQgPSBudWxsO1xuICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9uc0xpc3QpIHtcbiAgICAgIGlmIChvcHRpb25bdGhpcy5keW5hbWljVmFsdWVdICYmICFvcHRpb25Gb3VuZCkge1xuICAgICAgICBvcHRpb25Gb3VuZCA9IG9wdGlvbjtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25bdGhpcy5keW5hbWljVmFsdWVdICYmIGZvdW5kKSB7XG4gICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0VxdWFsKG9wdGlvblt0aGlzLmR5bmFtaWNWYWx1ZV0sIHZhbHVlKSkge1xuICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbkZvdW5kO1xuICB9XG5cbiAgZ2V0SW5kZXhTZWxlY3RlZFZpZXcoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZpc2libGVPcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5jb21wYXJlT2JqZWN0cyh0aGlzLnZpc2libGVPcHRpb25zW2ldLCB0aGlzLnNlbGVjdGVkVmlldykpIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29tcGFyZU9iamVjdHMob2JqMTogYW55LCBvYmoyOiBhbnkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqMSkgPT09IEpTT04uc3RyaW5naWZ5KG9iajIpO1xuICB9XG5cbiAgdmVyaWZ5VmFsaWRPcHRpb24oKSB7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IHRoaXMuZ2V0SW5wdXRWYWx1ZSgpO1xuXG4gICAgY29uc3Qgb3B0aW9uRm91bmQgPSB0aGlzLmdldE9wdGlvbkZyb21MYWJlbChpbnB1dFZhbHVlLCB0aGlzLmNvbWJvT3B0aW9uc0xpc3QpO1xuXG4gICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFsuLi50aGlzLmNhY2hlU3RhdGljT3B0aW9uc10pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25Gb3VuZCAmJiBvcHRpb25Gb3VuZFt0aGlzLmR5bmFtaWNWYWx1ZV0gIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG9wdGlvbkZvdW5kKTtcblxuICAgICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gb3B0aW9uRm91bmRbdGhpcy5keW5hbWljTGFiZWxdO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZFZhbHVlICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5zZWxlY3RlZE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0gIT09IGlucHV0VmFsdWUpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZVdpdGhPbGRPcHRpb24oKTtcblxuICAgICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gdGhpcy5zZWxlY3RlZE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF07XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIGlmIChpbnB1dFZhbHVlICYmICFvcHRpb25Gb3VuZCkge1xuICAgICAgY29uc3QgaXNJbnB1dFZhbHVlRGlmZlNlbGVjdGVkTGFiZWwgPSAhIShcbiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSAhPT0gaW5wdXRWYWx1ZVxuICAgICAgKTtcblxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwsIGlzSW5wdXRWYWx1ZURpZmZTZWxlY3RlZExhYmVsIHx8IHRoaXMuY2hhbmdlT25FbnRlcik7XG5cbiAgICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9ICcnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJlY2ViZSBhcyBhbHRlcmHDp8O1ZXMgZG8gbW9kZWxcbiAgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgdGhpcy5mcm9tV3JpdGVWYWx1ZSA9IHRydWU7XG5cbiAgICBpZiAodmFsaWRWYWx1ZSh2YWx1ZSkgJiYgIXRoaXMuc2VydmljZSAmJiB0aGlzLmNvbWJvT3B0aW9uc0xpc3QgJiYgdGhpcy5jb21ib09wdGlvbnNMaXN0Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5nZXRPcHRpb25Gcm9tVmFsdWUodmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCk7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUob3B0aW9uKTtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgICB0aGlzLnJlbW92ZUluaXRpYWxGaWx0ZXIgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTZSBob3V2ZXIgc2VydmnDp28gYnVzY2EgcGVsbyBtb2RlbC5cbiAgICBpZiAodmFsdWUgJiYgdGhpcy5zZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RCeVZhbHVlKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoKTtcbiAgICAgIHRoaXMudXBkYXRlSGFzTmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZ1bsOnw6NvIGltcGxlbWVudGFkYSBkbyBDb250cm9sVmFsdWVBY2Nlc3NvclxuICAvLyBVc2FkYSBwYXJhIGludGVyY2VwdGFyIG9zIGVzdGFkb3MgZGUgaGFiaWxpdGFkbyB2aWEgZm9ybXMgYXBpXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsQ2hhbmdlID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vbk1vZGVsVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShmbjogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMudmFsaWRhdG9yQ2hhbmdlID0gZm47XG4gIH1cblxuICB2YWxpZGF0ZShhYnN0cmFjdENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgIGlmIChyZXF1aXJlZEZhaWxlZCh0aGlzLnJlcXVpcmVkLCB0aGlzLmRpc2FibGVkLCBhYnN0cmFjdENvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXF1aXJlZDoge1xuICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyKHZhbHVlKSB7XG4gICAgdGhpcy5jYWxsTW9kZWxDaGFuZ2UodmFsdWUpO1xuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShudWxsKTtcbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICAgIHRoaXMuaW5pdElucHV0T2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudXBkYXRlSGFzTmV4dCgpO1xuICAgIGlmICh0aGlzLnNlcnZpY2UgfHwgdGhpcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmtleXVwU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ0FmdGVyU2V0RmlsdGVyU2VydmljZShzZXJ2aWNlOiBQb0NvbWJvRmlsdGVyIHwgc3RyaW5nKSB7XG4gICAgaWYgKHNlcnZpY2UpIHtcbiAgICAgIHRoaXMuY29tYm9PcHRpb25zTGlzdCA9IFtdO1xuICAgICAgdGhpcy51bnN1YnNjcmliZUtleXVwT2JzZXJ2YWJsZSgpO1xuICAgICAgdGhpcy5vbkluaXRTZXJ2aWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VydmljZSA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuY29tYm9PcHRpb25zTGlzdCA9IHRoaXMuY2FjaGVTdGF0aWNPcHRpb25zO1xuICAgIH1cblxuICAgIHRoaXMudmlzaWJsZU9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmlzRmlyc3RGaWx0ZXIgPSB0cnVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVuc3Vic2NyaWJlS2V5dXBPYnNlcnZhYmxlKCkge1xuICAgIGlmICh0aGlzLmtleXVwU3Vic2NyaWJlKSB7XG4gICAgICB0aGlzLmtleXVwU3Vic2NyaWJlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHZhbGlkYXRlTW9kZWwobW9kZWw6IGFueSkge1xuICAgIGlmICh0aGlzLnZhbGlkYXRvckNoYW5nZSkge1xuICAgICAgdGhpcy52YWxpZGF0b3JDaGFuZ2UobW9kZWwpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tYm9MaXN0RGVmaW5pdGlvbnMoKSB7XG4gICAgdGhpcy5jb21ib09wdGlvbnNMaXN0ID0gdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgPyB0aGlzLmxpc3RpbmdDb21ib09wdGlvbnModGhpcy5vcHRpb25zKSA6IHRoaXMub3B0aW9ucztcbiAgICB0aGlzLmNhY2hlU3RhdGljT3B0aW9ucyA9IHRoaXMuY29tYm9PcHRpb25zTGlzdDtcblxuICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gIH1cblxuICBwcml2YXRlIGNoZWNrSWZTZXJ2aWNlKGR5bmFtaWNWYWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCh0aGlzLnNlcnZpY2UgfHwgdGhpcy5maWx0ZXJTZXJ2aWNlKSAmJiBkeW5hbWljVmFsdWUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybiBQT19DT01CT19GSUVMRF9MQUJFTF9ERUZBVUxUO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuc2VydmljZSB8fCB0aGlzLmZpbHRlclNlcnZpY2UpICYmIGR5bmFtaWNWYWx1ZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgcmV0dXJuIFBPX0NPTUJPX0ZJRUxEX1ZBTFVFX0RFRkFVTFQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLnNlcnZpY2UgJiYgZHluYW1pY1ZhbHVlID09PSAnbGFiZWwnKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWVsZExhYmVsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZXJ2aWNlICYmIGR5bmFtaWNWYWx1ZSA9PT0gJ3ZhbHVlJykge1xuICAgICAgcmV0dXJuIHRoaXMuZmllbGRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbXBhcmVPcHRpb25zKGR5bmFtaWNMYWJlbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChvcHRpb25BOiBhbnksIG9wdGlvbkI6IGFueSkge1xuICAgICAgY29uc3QgbGFiZWxBID0gb3B0aW9uQVtkeW5hbWljTGFiZWxdLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGxhYmVsQiA9IG9wdGlvbkJbZHluYW1pY0xhYmVsXS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIHJldHVybiBsYWJlbEEgPCBsYWJlbEIgPyAtMSA6IGxhYmVsQSA+IGxhYmVsQiA/IDEgOiAwO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGhhc0R1cGxpY2F0ZWRPcHRpb24ob3B0aW9uczogQXJyYXk8YW55PiwgY3VycmVudE9wdGlvbjogc3RyaW5nLCBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucz86IEFycmF5PGFueT4pIHtcbiAgICBpZiAoYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucy5zb21lKG9wdGlvbiA9PiBvcHRpb25bdGhpcy5keW5hbWljTGFiZWxdID09PSBjdXJyZW50T3B0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuc29tZShvcHRpb24gPT4gb3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSA9PT0gY3VycmVudE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsaXN0aW5nQ29tYm9PcHRpb25zKGNvbWJvT3B0aW9uczogQXJyYXk8YW55Pikge1xuICAgIGNvbnN0IGNvbWJvT3B0aW9uc0xpc3QgPSBjb21ib09wdGlvbnMuY29uY2F0KCk7XG4gICAgY29uc3QgdmVyaWZpZWRDb21ib09wdGlvbnNMaXN0ID0gdGhpcy52ZXJpZnlDb21ib09wdGlvbnMoY29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICB0aGlzLnNvcnRPcHRpb25zKHZlcmlmaWVkQ29tYm9PcHRpb25zTGlzdCk7XG5cbiAgICBpZiAodGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiB2ZXJpZmllZENvbWJvT3B0aW9uc0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMudmVyaWZ5Q29tYm9PcHRpb25zR3JvdXAodmVyaWZpZWRDb21ib09wdGlvbnNMaXN0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWRDb21ib09wdGlvbnNMaXN0O1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0T3B0aW9ucyhjb21ib09wdGlvbnNMaXN0OiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKGNvbWJvT3B0aW9uc0xpc3QubGVuZ3RoID4gMCAmJiB0aGlzLnNvcnQpIHtcbiAgICAgIHJldHVybiBjb21ib09wdGlvbnNMaXN0LnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyh0aGlzLmR5bmFtaWNMYWJlbCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVWYWx1ZShjdXJyZW50T3B0aW9uOiBhbnksIHZlcmlmeWluZ09wdGlvbnNHcm91cDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc3QgeyBvcHRpb25zIH0gPSBjdXJyZW50T3B0aW9uO1xuXG4gICAgaWYgKHRoaXMuaXNPcHRpb25Hcm91cExpc3QpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh2YWxpZFZhbHVlKGN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljTGFiZWxdKSAmJiBvcHRpb25zICYmIG9wdGlvbnMubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgKHZlcmlmeWluZ09wdGlvbnNHcm91cCA9PT0gdHJ1ZSAmJiB2YWxpZFZhbHVlKGN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljVmFsdWVdKSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkVmFsdWUoY3VycmVudE9wdGlvblt0aGlzLmR5bmFtaWNWYWx1ZV0pICYmICFvcHRpb25zO1xuICB9XG5cbiAgcHJpdmF0ZSB2ZXJpZnlDb21ib09wdGlvbnMoXG4gICAgY29tYm9PcHRpb25zOiBBcnJheTxhbnk+LFxuICAgIHZlcmlmeWluZ09wdGlvbnNHcm91cDogYm9vbGVhbiA9IGZhbHNlLFxuICAgIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zPzogQXJyYXk8YW55PlxuICApIHtcbiAgICByZXR1cm4gY29tYm9PcHRpb25zLnJlZHVjZSgoYWNjdW11bGF0ZWRPcHRpb25zLCBjdXJyZW50T3B0aW9uKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICF0aGlzLnZlcmlmeUlmSGFzTGFiZWwoY3VycmVudE9wdGlvbikgfHxcbiAgICAgICAgdGhpcy5oYXNEdXBsaWNhdGVkT3B0aW9uKFxuICAgICAgICAgIGFjY3VtdWxhdGVkT3B0aW9ucyxcbiAgICAgICAgICBjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXSB8fCBjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSxcbiAgICAgICAgICBhY2N1bXVsYXRlZEdyb3VwT3B0aW9uc1xuICAgICAgICApIHx8XG4gICAgICAgICF0aGlzLnZhbGlkYXRlVmFsdWUoY3VycmVudE9wdGlvbiwgdmVyaWZ5aW5nT3B0aW9uc0dyb3VwKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBhY2N1bXVsYXRlZE9wdGlvbnM7XG4gICAgICB9XG5cbiAgICAgIGFjY3VtdWxhdGVkT3B0aW9ucy5wdXNoKGN1cnJlbnRPcHRpb24pO1xuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkT3B0aW9ucztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNvbWJvT3B0aW9uc0dyb3VwKGNvbWJvT3B0aW9uc0xpc3Q6IEFycmF5PGFueT4pIHtcbiAgICByZXR1cm4gY29tYm9PcHRpb25zTGlzdC5yZWR1Y2UoKGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zLCBjdXJyZW50T3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCB7IG9wdGlvbnMgfSA9IGN1cnJlbnRPcHRpb247XG4gICAgICBjb25zdCB2ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdCA9IHRoaXMudmVyaWZ5Q29tYm9PcHRpb25zKG9wdGlvbnMsIHRydWUsIGFjY3VtdWxhdGVkR3JvdXBPcHRpb25zKTtcblxuICAgICAgaWYgKHZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyh2ZXJpZmllZENvbWJvT3B0aW9uc0dyb3VwTGlzdCk7XG5cbiAgICAgICAgYWNjdW11bGF0ZWRHcm91cE9wdGlvbnMucHVzaChcbiAgICAgICAgICB7IGxhYmVsOiBjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSwgb3B0aW9uczogdHJ1ZSB9LFxuICAgICAgICAgIC4uLnZlcmlmaWVkQ29tYm9PcHRpb25zR3JvdXBMaXN0XG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZEdyb3VwT3B0aW9ucztcbiAgICB9LCBbXSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUlmSGFzTGFiZWwoY3VycmVudE9wdGlvbjogUG9Db21ib0dyb3VwID0ge30pIHtcbiAgICBjb25zdCB7IG9wdGlvbnMgfSA9IGN1cnJlbnRPcHRpb247XG5cbiAgICBpZiAoXG4gICAgICAodGhpcy5pc09wdGlvbkdyb3VwTGlzdCAmJiBvcHRpb25zICYmICFjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSkgfHxcbiAgICAgICghY3VycmVudE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0gJiYgIWN1cnJlbnRPcHRpb25bdGhpcy5keW5hbWljVmFsdWVdKSB8fFxuICAgICAgKCF0aGlzLmlzT3B0aW9uR3JvdXBMaXN0ICYmIG9wdGlvbnMpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSkge1xuICAgICAgY3VycmVudE9wdGlvblt0aGlzLmR5bmFtaWNMYWJlbF0gPSBjdXJyZW50T3B0aW9uW3RoaXMuZHluYW1pY1ZhbHVlXS50b1N0cmluZygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUludGVybmFsVmFyaWFibGVzKG9wdGlvbjogYW55KSB7XG4gICAgaWYgKG9wdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSBvcHRpb247XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gb3B0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbCh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5mcm9tV3JpdGVWYWx1ZSkge1xuICAgICAgICB0aGlzLmNhbGxNb2RlbENoYW5nZSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY2hhbmdlLmVtaXQodGhpcy5lbWl0T2JqZWN0VmFsdWUgPyB0aGlzLnNlbGVjdGVkT3B0aW9uIDogdmFsdWUpO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZnJvbVdyaXRlVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VsZWN0ZWRWYWx1ZVdpdGhPbGRPcHRpb24oKSB7XG4gICAgY29uc3Qgb2xkT3B0aW9uID0gdGhpcy5nZXRPcHRpb25Gcm9tVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlLCB0aGlzLmNvbWJvT3B0aW9uc0xpc3QpO1xuXG4gICAgaWYgKG9sZE9wdGlvbiAmJiBvbGRPcHRpb25bdGhpcy5keW5hbWljTGFiZWxdKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG9sZE9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVIYXNOZXh0KCkge1xuICAgIGlmICh0aGlzLnNlcnZpY2UgJiYgdGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgdGhpcy5kZWZhdWx0U2VydmljZS5oYXNOZXh0ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBhYnN0cmFjdCBzZXRJbnB1dFZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkO1xuXG4gIGFic3RyYWN0IGFwcGx5RmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuXG4gIGFic3RyYWN0IGdldE9iamVjdEJ5VmFsdWUodmFsdWU6IHN0cmluZyk6IHZvaWQ7XG5cbiAgYWJzdHJhY3QgZ2V0SW5wdXRWYWx1ZSgpOiBzdHJpbmc7XG5cbiAgYWJzdHJhY3QgaW5pdElucHV0T2JzZXJ2YWJsZSgpOiB2b2lkO1xufVxuIl19
|