valtech-components 4.0.20 → 4.0.22
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/organisms/invite-member-modal/invite-member-modal.component.mjs +8 -8
- package/esm2022/lib/components/organisms/member-detail-modal/member-detail-modal.component.mjs +3 -13
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +4 -31
- package/esm2022/lib/services/modal/modal.service.mjs +4 -2
- package/esm2022/lib/services/org/types.mjs +62 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +83 -59
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/invite-member-modal/invite-member-modal.component.d.ts +3 -2
- package/lib/services/org/types.d.ts +13 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -18,6 +18,7 @@ import { interpretError } from '../../../services/errors/interpret-error';
|
|
|
18
18
|
import { ModalService } from '../../../services/modal/modal.service';
|
|
19
19
|
import { NavigationService } from '../../../services/navigation/navigation.service';
|
|
20
20
|
import { OrgService } from '../../../services/org/org.service';
|
|
21
|
+
import { resolveRoleLabelFromList, SYSTEM_ROLE_DEFAULTS, } from '../../../services/org/types';
|
|
21
22
|
import { connectPageRefresh } from '../../../services/page-refresh/page-refresh.service';
|
|
22
23
|
import { ToastService } from '../../../services/toast.service';
|
|
23
24
|
import { ValtechErrorService } from '../../../services/errors/valtech-error.service';
|
|
@@ -142,11 +143,7 @@ export class OrganizationViewComponent {
|
|
|
142
143
|
this.showAllMembers = signal(false);
|
|
143
144
|
this.visibleMembers = computed(() => (this.showAllMembers() ? this.members() : this.members().slice(0, 3)));
|
|
144
145
|
this.transferring = signal(false);
|
|
145
|
-
this.availableRoles = signal(
|
|
146
|
-
{ id: 'viewer', name: 'viewer' },
|
|
147
|
-
{ id: 'editor', name: 'editor' },
|
|
148
|
-
{ id: 'admin', name: 'admin' },
|
|
149
|
-
]);
|
|
146
|
+
this.availableRoles = signal(SYSTEM_ROLE_DEFAULTS);
|
|
150
147
|
this.activeOrgId = computed(() => {
|
|
151
148
|
const u = this.auth.user();
|
|
152
149
|
return u?.activeOrgId ?? u?.activeOrg ?? '';
|
|
@@ -545,31 +542,7 @@ export class OrganizationViewComponent {
|
|
|
545
542
|
});
|
|
546
543
|
}
|
|
547
544
|
roleLabel(roleIdOrName) {
|
|
548
|
-
|
|
549
|
-
const found = this.availableRoles().find(r => r.id === roleIdOrName || r.name === roleIdOrName);
|
|
550
|
-
const name = found?.name ?? roleIdOrName;
|
|
551
|
-
const keyMap = {
|
|
552
|
-
viewer: 'roleViewer',
|
|
553
|
-
editor: 'roleEditor',
|
|
554
|
-
admin: 'roleAdmin',
|
|
555
|
-
super_admin: 'roleSuperAdmin',
|
|
556
|
-
};
|
|
557
|
-
// 1) Rol genérico conocido → label i18n. 2) displayName/descripción del backend.
|
|
558
|
-
// 3) Fallback: humanizar el nombre crudo (ej. "bingo_admin" → "Bingo Admin")
|
|
559
|
-
// para no mostrar el código técnico a app-specific roles.
|
|
560
|
-
const mapped = keyMap[name];
|
|
561
|
-
if (mapped) {
|
|
562
|
-
const label = this.tt(mapped);
|
|
563
|
-
if (label && !label.startsWith('['))
|
|
564
|
-
return label;
|
|
565
|
-
}
|
|
566
|
-
if (found?.description)
|
|
567
|
-
return found.description;
|
|
568
|
-
return name
|
|
569
|
-
.split(/[_-]/)
|
|
570
|
-
.filter(Boolean)
|
|
571
|
-
.map(w => w.charAt(0).toUpperCase() + w.slice(1))
|
|
572
|
-
.join(' ');
|
|
545
|
+
return resolveRoleLabelFromList(roleIdOrName, this.availableRoles(), this.i18n.lang());
|
|
573
546
|
}
|
|
574
547
|
onViewMember(member) {
|
|
575
548
|
void this.modalService.openAdaptive({
|
|
@@ -1185,4 +1158,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
1185
1158
|
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
1186
1159
|
type: Input
|
|
1187
1160
|
}] } });
|
|
1188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9vcmdhbml6YXRpb24tdmlldy9vcmdhbml6YXRpb24tdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUV4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV0RixP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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ1NUO3dEQXFMUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBlZmZlY3QsIGluamVjdCwgSW5wdXQsIGlzRGV2TW9kZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmlyZXN0b3JlLCBkb2MsIGdldERvYyB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvZmlyZXN0b3JlJztcblxuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGlzcGxheUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2Rpc3BsYXkvZGlzcGxheS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZUVycm9yU3RhdGVQcm9wcyB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9mYWN0b3J5JztcbmltcG9ydCB7IE1lbWJlckNhcmRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvbWVtYmVyLWNhcmQvbWVtYmVyLWNhcmQuY29tcG9uZW50JztcbmltcG9ydCB7IFNrZWxldG9uTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2tlbGV0b24tbGF5b3V0L3NrZWxldG9uLWxheW91dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgSGFzUGVybWlzc2lvbkRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvaGFzLXBlcm1pc3Npb24uZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgaW50ZXJwcmV0RXJyb3IgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvaW50ZXJwcmV0LWVycm9yJztcbmltcG9ydCB7IE1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21vZGFsL21vZGFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL29yZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9yZ01lbWJlciwgT3JnUm9sZSwgT3JnYW5pemF0aW9uIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL3R5cGVzJztcbmltcG9ydCB7IGNvbm5lY3RQYWdlUmVmcmVzaCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvdmFsdGVjaC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuc2VydmljZSc7XG5cbmltcG9ydCB7IEVkaXRPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2VkaXQtb3JnLW1vZGFsL2VkaXQtb3JnLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnZpdGVNZW1iZXJNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2ludml0ZS1tZW1iZXItbW9kYWwvaW52aXRlLW1lbWJlci1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVtYmVyRGV0YWlsTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9tZW1iZXItZGV0YWlsLW1vZGFsL21lbWJlci1kZXRhaWwtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbWJlckRldGFpbCB9IGZyb20gJy4uL21lbWJlci1kZXRhaWwtbW9kYWwvdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNmZXJPd25lcnNoaXBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3RyYW5zZmVyLW93bmVyc2hpcC1tb2RhbC90cmFuc2Zlci1vd25lcnNoaXAtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVtYmVyLWltcG9ydC1tb2RhbC9tZW1iZXItaW1wb3J0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdJbmZvU2hlZXRDb21wb25lbnQgfSBmcm9tICcuLi9vcmctaW5mby1zaGVldC9vcmctaW5mby1zaGVldC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBPcmdhbml6YXRpb25WaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBPUkdBTklaQVRJT05fVklFV19JMThOIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tdmlldy5pMThuJztcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuT3JnYW5pemF0aW9uJztcbmNvbnN0IERFRkFVTFRfVklFV19QRVJNSVNTSU9OU19ST1VURSA9ICcvYXBwL3NldHRpbmdzL3Blcm1pc3Npb25zJztcbmNvbnN0IERFRkFVTFRfQVBJX0tFWVNfUk9VVEUgPSAnL2FwcC9zZXR0aW5ncy9hcGkta2V5cyc7XG5jb25zdCBERUZBVUxUX0xFQVZFX1JFRElSRUNUX1JPVVRFID0gJy9hcHAvc2V0dGluZ3MvYWNjb3VudCc7XG5cbi8qKlxuICogYHZhbC1vcmdhbml6YXRpb24tdmlld2Ag4oCUIHZpc3RhIEdlc3Rpw7NuIGRlIG9yZ2FuaXphY2nDs24gZnVsbC1mZWF0dXJlXG4gKiBhdXRvY29udGVuaWRhIChvcmdhbmlzbSkuIFByb21vdmlkYSBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZVxuICogQURSLTAyMS4gUmXDum5lOlxuICogIC0gKipJbmZvcm1hY2nDs24qKiDigJQgbm9tYnJlLCBkZXNjcmlwY2nDs24sIHBsYW4geSB0aXBvIGRlIGxhIG9yZyBhY3RpdmE7IGVkaXRhclxuICogICAgdsOtYSBtb2RhbCBgdmFsLWVkaXQtb3JnLW1vZGFsYCAoc29sbyBzaSBgY2FuRWRpdE9yZygpYCkuXG4gKiAgLSAqKk1pZW1icm9zKiog4oCUIGxpc3RhIHBhZ2luYWRhIChgdmFsLW1lbWJlci1jYXJkYCkgZW5yaXF1ZWNpZGEgY29uIHBlcmZpbGVzXG4gKiAgICBww7pibGljb3MgKEZpcmVzdG9yZSk7IHZlciBkZXRhbGxlIHbDrWEgYHZhbC1tZW1iZXItZGV0YWlsLW1vZGFsYC5cbiAqICAtICoqUm9sZXMgeSBwZXJtaXNvcyoqIOKAlCBzZWNjacOzbiBleHBsaWNhdGl2YSBjb24gQ1RBIGEgbGEgcnV0YSBkZSBwZXJtaXNvcy5cbiAqICAtICoqSW52aXRhcioqIOKAlCBDVEEgcXVlIGFicmUgYHZhbC1pbnZpdGUtbWVtYmVyLW1vZGFsYCAoZ2F0ZWFkYSBwb3IgYHVzZXJzOipgKS5cbiAqICAtICoqVHJhbnNmZXJpciBwcm9waWVkYWQqKiDigJQgYHZhbC10cmFuc2Zlci1vd25lcnNoaXAtbW9kYWxgIChzb2xvIG93bmVyKS5cbiAqICAtICoqU2FsaXIgZGUgbGEgb3JnYW5pemFjacOzbioqIOKAlCBgT3JnU2VydmljZS5sZWF2ZU9yZ2AgY29uIGNvbmZpcm1hY2nDs25cbiAqICAgIGRlc3RydWN0aXZhLlxuICpcbiAqICoqUkJBQyBpbnRlcm5vKiogKGRlY2lzacOzbiBDVE8sIEFEUi0wMjEpOiBlbCBnYXRpbmcgZmlubyBzZSByZXN1ZWx2ZSBkZW50cm8gZGVcbiAqIGxhIHZpc3RhIHbDrWEgYEF1dGhTZXJ2aWNlLmhhc1Blcm1pc3Npb24oKWAgKyBgKnZhbEhhc1Blcm1pc3Npb25gICsgY29tcHV0ZWRzXG4gKiBgaXNPd25lcigpYC9gY2FuTWFuYWdlTWVtYmVycygpYC9gY2FuRWRpdE9yZygpYC4gTk8gc2UgZXhwb25lIGNvbW8gY29uZmlnLlxuICpcbiAqICoqQXV0by1yZWxvYWQgZW4gb3JnLXN3aXRjaCoqOiB1biBgZWZmZWN0YCByZWFjdGlvbmEgYSBgYWN0aXZlT3JnSWQoKWAgeSByZWNhcmdhXG4gKiBvcmcgKyBtaWVtYnJvcyBjdWFuZG8gZWwgdXN1YXJpbyBjYW1iaWEgZGUgb3JnYW5pemFjacOzbiBhY3RpdmEgbWllbnRyYXMgbGEgdmlzdGFcbiAqIGVzdMOhIG1vbnRhZGEuIEVsIGVmZmVjdCBjdWJyZSB0YW1iacOpbiBsYSBjYXJnYSBpbmljaWFsIChzaW4gZG9ibGUgY2FyZ2EpLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYEFjdGl2YXRlZFJvdXRlYCBzZVxuICogaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCBzb2xvIHBhcmEgbGVlciBlbCByb3V0ZSBkYXRhIGRlIGNvbmZpZyAobm8tb3BcbiAqIGVtYmViaWRvKS4gQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsXG4gKiBuYW1lc3BhY2UgKGRlZmF1bHQgYFNldHRpbmdzLk9yZ2FuaXphdGlvbmApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtb3JnYW5pemF0aW9uLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEhhc1Blcm1pc3Npb25EaXJlY3RpdmUsXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgTWVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50LFxuICAgIE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50LFxuICAgIE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicGFnZVwiPlxuICAgICAgPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiBwYWdlVGl0bGUoKSB9XCIgLz5cbiAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudDogcGFnZURlc2NyaXB0aW9uKCksXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICAgIDwhLS0gXCJBcHJlbmRlciBtw6FzIHNvYnJlIG9yZ2FuaXphY2lvbmVzXCIg4oCUIGJham8gZWwgdMOtdHVsbytzdWJ0w610dWxvXG4gICAgICAgICAgICAgcHJpbmNpcGFsIGRlIGxhIHZpc3RhIChhYnJlIGVsIGV4cGxhaW5lciBvcmctaW5mby1zaGVldCkuIC0tPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3JnLW1vcmUtaW5mby1saW5rXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbk9yZ0luZm8oKVwiPlxuICAgICAgICAgIHt7IHR0KCdvcmdzTW9yZUluZm8nKSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0luZm8pIHtcbiAgICAgICAgPCEtLSBPcmcgSW5mbyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW5mb1RpdGxlJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoY2FuRWRpdE9yZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJlZGl0QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbkVkaXQoKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogNCB9XCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKG9yZ0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJvcmdFcnJvclN0YXRlKCkhXCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKG9yZygpOyBhcyBvKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9OYW1lJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tdmFsdWVcIj57eyBvLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9EZXNjcmlwdGlvbicpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLXZhbHVlIG9yZy1pbmZvLXZhbHVlLS1tdXRlZFwiPnt7IG8uZGVzY3JpcHRpb24gfHwgJ+KAlCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9QbGFuJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhbi1iYWRnZSBwbGFuLWJhZGdlLS17eyBvLnBsYW4gfX1cIj57eyBwbGFuTGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tbGFiZWxcIj57eyB0dCgnaW5mb1R5cGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctaW5mby12YWx1ZVwiPnt7IG8udHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dNZW1iZXJzKSB7XG4gICAgICAgIDwhLS0gTWVtYmVycyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdtZW1iZXJzVGl0bGUnKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgQGlmIChtZW1iZXJzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24tbGF5b3V0IFtwcm9wc109XCJ7IHByZXNldDogJ2xpc3QnLCByb3dzOiAzIH1cIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAobWVtYmVyc0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJtZW1iZXJzRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChtZW1iZXJzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnbWVtYmVyc0VtcHR5JyksXG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVtYmVycy1saXN0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAobSBvZiB2aXNpYmxlTWVtYmVycygpOyB0cmFjayBtLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgPHZhbC1tZW1iZXItY2FyZFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInb3JnLW1lbWJlci0nICsgbS51c2VySWRcIlxuICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBtLnVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBtLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogbS5lbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJVcmw6IG0uYXZhdGFyLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGVMYWJlbDogbS5yb2xlc1swXSA/IHJvbGVMYWJlbChtLnJvbGVzWzBdKSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkFyaWFMYWJlbDogdHQoJ3ZpZXdNZW1iZXJDdGEnKSxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkFjdGlvbik9XCJvblZpZXdNZW1iZXIobSlcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKCFzaG93QWxsTWVtYmVycygpICYmIG1lbWJlcnMoKS5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgKGNsaWNrKT1cInNob3dBbGxNZW1iZXJzLnNldCh0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAge3sgdHQoJ21lbWJlcnNTaG93TW9yZScpIH19ICh7eyBtZW1iZXJzKCkubGVuZ3RoIC0gMyB9fSlcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNob3dBbGxNZW1iZXJzKCkgJiYgbWVtYmVyc05leHRUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdNb3JlTWVtYmVycygpXCIgKGNsaWNrKT1cImxvYWRNb3JlTWVtYmVycygpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBsb2FkaW5nTW9yZU1lbWJlcnMoKSA/ICfigKYnIDogdHQoJ21lbWJlcnNTaG93TW9yZScpIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd1JvbGVzKSB7XG4gICAgICAgIDwhLS0gUm9sZXMgeSBwZXJtaXNvczogc2VjY2lvbiBleHBsaWNhdGl2YSwgZGV0YWxsZSBlbiBsYSBydXRhIGRlIHBlcm1pc29zIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ3JvbGVzU2VjdGlvblRpdGxlJyksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdyb2xlc0hpbnQnKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInZpZXdQZXJtaXNzaW9uc0J1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25WaWV3UGVybWlzc2lvbnMoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0ludml0ZSkge1xuICAgICAgICA8IS0tIEludml0ZTogc29sbyBhZG1pbisgKGdhdGluZyBSQkFDIGludGVybm8pIC0tPlxuICAgICAgICA8c2VjdGlvbiAqdmFsSGFzUGVybWlzc2lvbj1cIid1c2VyczoqJ1wiIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLWludml0ZS1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX190ZXh0XCI+XG4gICAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdpbnZpdGVDdGFUaXRsZScpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW52aXRlQ3RhSGludCcpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YV9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwib3Blbkludml0ZUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuSW52aXRlKClcIiAvPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwib3BlbkltcG9ydEJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuSW1wb3J0KClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBBUEkgS2V5czogc2VjY2nDs24gcHJvcGlhLiBJbnRlZ3JhY2lvbmVzIE0yTSAoaW1wb3J0IGRlIG1pZW1icm9zLCBldGMuKS4gLS0+XG4gICAgICA8c2VjdGlvbiAqdmFsSGFzUGVybWlzc2lvbj1cIidhcGkta2V5czpyZWFkJ1wiIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLWFwaWtleXMtc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX190ZXh0XCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlLCBjb250ZW50OiB0dCgnYXBpS2V5c1NlY3Rpb25UaXRsZScpIH1cIiAvPlxuICAgICAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSwgY29udGVudDogdHQoJ2FwaUtleXNTZWN0aW9uSGludCcpIH1cIiAvPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9yZy1tb3JlLWluZm8tbGlua1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25BcGlLZXlzSW5mbygpXCI+XG4gICAgICAgICAgICAgIHt7IHR0KCdhcGlLZXlzTW9yZUluZm8nKSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJvcGVuQXBpS2V5c0J1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuQXBpS2V5cygpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93VHJhbnNmZXJPd25lcnNoaXAgJiYgaXNPd25lcigpKSB7XG4gICAgICAgIDwhLS0gVHJhbnNmZXIgb3duZXJzaGlwOiBzb2xvIG93bmVyIChnYXRpbmcgUkJBQyBpbnRlcm5vKSAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCIgZGF0YS10ZXN0aWQ9XCJvcmctdHJhbnNmZXItc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICBjb250ZW50OiB0dCgndHJhbnNmZXJUaXRsZScpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgndHJhbnNmZXJIaW50JyksXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQGlmICh0cmFuc2ZlcmFibGVNZW1iZXJzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwidHJhbnNmZXJCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlblRyYW5zZmVyKClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ21lbWJlcnNFbXB0eScpLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dMZWF2ZSkge1xuICAgICAgICA8IS0tIExlYXZlIG9yZyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdsZWF2ZVRpdGxlJyksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGlzT3duZXIoKSA/IHR0KCdsZWF2ZU93bmVySGludCcpIDogdHQoJ2xlYXZlSGludCcpLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwibGVhdmVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uTGVhdmUoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGlzRGVidWcpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uIHJiYWMtZGVidWdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXItcm93XCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ1JCQUMgKGxpdmUpJyxcbiAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYmFjLWRlYnVnX19ib2R5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmJhYy1kZWJ1Z19fcm93XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmJhYy1kZWJ1Z19fbGFiZWxcIj5Sb2xlczwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX192YWx1ZVwiPnt7IGF1dGgucm9sZXMoKS5qb2luKCcsICcpIHx8ICfigJQnIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmJhYy1kZWJ1Z19fcm93XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmJhYy1kZWJ1Z19fbGFiZWxcIj5QZXJtaXNvczwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX192YWx1ZSByYmFjLWRlYnVnX192YWx1ZS0tcGVybXNcIj57eyBhdXRoLnBlcm1pc3Npb25zKCkuam9pbignLCAnKSB8fCAn4oCUJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cbiAgICAgIC5vcmctbW9yZS1pbmZvLWxpbmsge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDRweCAwO1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuICAgICAgLnBhZ2UtaGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24gKyAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWhlYWRlci1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucy0tZ2FwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuaW52aXRlLWN0YSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgIH1cbiAgICAgIC5pbnZpdGUtY3RhX190ZXh0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICB9XG4gICAgICAuaW52aXRlLWN0YV9fYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLWNhcmQge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsICNmNGY1ZjgpO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5vcmctaW5mby1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5vcmctaW5mby1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAub3JnLWluZm8tY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tZmllbGQge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tZmllbGQ6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuNzRyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby12YWx1ZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby12YWx1ZS0tbXV0ZWQge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLnBsYW4tYmFkZ2UtLWZyZWUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQtc2hhZGUsICNkN2Q4ZGEpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLnBsYW4tYmFkZ2UtLXBybyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZS0tZW50ZXJwcmlzZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNWM1NDI7XG4gICAgICAgIGNvbG9yOiAjMjIyO1xuICAgICAgfVxuICAgICAgLm1lbWJlcnMtbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLm1lbWJlcnMtc2hvdy1tb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgcGFkZGluZzogOHB4IDA7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1ZyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX19ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX19yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fbGFiZWwge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIG1pbi13aWR0aDogNzJweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fdmFsdWUge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fdmFsdWUtLXBlcm1zIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvblZpZXdDb21wb25lbnQge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHJlYWRvbmx5IGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIG9yZ1NlcnZpY2UgPSBpbmplY3QoT3JnU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlcnJvcnMgPSBpbmplY3QoVmFsdGVjaEVycm9yU2VydmljZSk7XG4gIHByaXZhdGUgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG4gIHByaXZhdGUgZmlyZXN0b3JlID0gaW5qZWN0KEZpcmVzdG9yZSk7XG4gIHByaXZhdGUgY29uZmlybURpYWxvZyA9IGluamVjdChDb25maXJtYXRpb25EaWFsb2dTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBpc0RlYnVnID0gaXNEZXZNb2RlKCk7XG5cbiAgLyoqXG4gICAqIENvbmZpZyB2w61hIEBJbnB1dCAob2JqZWN0LWZpcnN0KS4gU2kgbm8gc2UgcGFzYSwgc2UgY2FlIGFsIHJvdXRlIGRhdGFcbiAgICogYG9yZ2FuaXphdGlvbkNvbmZpZ2AgKHBvYmxhZG8gcG9yIGBwcm92aWRlVmFsdGVjaE9yZ2FuaXphdGlvblJvdXRlc2ApLlxuICAgKiBgcmVzb2x2ZWRDb25maWdgIG1lcmdlYSBjb24gbG9zIGRlZmF1bHRzIOKAlCBgQElucHV0YCBnYW5hIHNvYnJlIHJvdXRlIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBPcmdhbml6YXRpb25WaWV3Q29uZmlnO1xuXG4gIHJlYWRvbmx5IHJlc29sdmVkQ29uZmlnID0gY29tcHV0ZWQ8XG4gICAgUmVxdWlyZWQ8T21pdDxPcmdhbml6YXRpb25WaWV3Q29uZmlnLCAnb25PcmdFZGl0ZWQnIHwgJ29uTWVtYmVySW52aXRlZCcgfCAnb25Pd25lcnNoaXBUcmFuc2ZlcnJlZCcgfCAnb25MZWZ0T3JnJz4+ICZcbiAgICAgIFBpY2s8T3JnYW5pemF0aW9uVmlld0NvbmZpZywgJ29uT3JnRWRpdGVkJyB8ICdvbk1lbWJlckludml0ZWQnIHwgJ29uT3duZXJzaGlwVHJhbnNmZXJyZWQnIHwgJ29uTGVmdE9yZyc+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydvcmdhbml6YXRpb25Db25maWcnXSA/PyB7fSkgYXMgT3JnYW5pemF0aW9uVmlld0NvbmZpZztcbiAgICBjb25zdCBtZXJnZWQ6IE9yZ2FuaXphdGlvblZpZXdDb25maWcgPSB7IC4uLmZyb21Sb3V0ZSwgLi4uKHRoaXMuY29uZmlnID8/IHt9KSB9O1xuICAgIHJldHVybiB7XG4gICAgICBzaG93SW5mbzogbWVyZ2VkLnNob3dJbmZvID8/IHRydWUsXG4gICAgICBzaG93TWVtYmVyczogbWVyZ2VkLnNob3dNZW1iZXJzID8/IHRydWUsXG4gICAgICBzaG93Um9sZXM6IG1lcmdlZC5zaG93Um9sZXMgPz8gdHJ1ZSxcbiAgICAgIHNob3dJbnZpdGU6IG1lcmdlZC5zaG93SW52aXRlID8/IHRydWUsXG4gICAgICBzaG93VHJhbnNmZXJPd25lcnNoaXA6IG1lcmdlZC5zaG93VHJhbnNmZXJPd25lcnNoaXAgPz8gdHJ1ZSxcbiAgICAgIHNob3dMZWF2ZTogbWVyZ2VkLnNob3dMZWF2ZSA/PyB0cnVlLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICB2aWV3UGVybWlzc2lvbnNSb3V0ZTogbWVyZ2VkLnZpZXdQZXJtaXNzaW9uc1JvdXRlID8/IERFRkFVTFRfVklFV19QRVJNSVNTSU9OU19ST1VURSxcbiAgICAgIGFwaUtleXNSb3V0ZTogbWVyZ2VkLmFwaUtleXNSb3V0ZSA/PyBERUZBVUxUX0FQSV9LRVlTX1JPVVRFLFxuICAgICAgbGVhdmVSZWRpcmVjdFJvdXRlOiBtZXJnZWQubGVhdmVSZWRpcmVjdFJvdXRlID8/IERFRkFVTFRfTEVBVkVfUkVESVJFQ1RfUk9VVEUsXG4gICAgICBvbk9yZ0VkaXRlZDogbWVyZ2VkLm9uT3JnRWRpdGVkLFxuICAgICAgb25NZW1iZXJJbnZpdGVkOiBtZXJnZWQub25NZW1iZXJJbnZpdGVkLFxuICAgICAgb25Pd25lcnNoaXBUcmFuc2ZlcnJlZDogbWVyZ2VkLm9uT3duZXJzaGlwVHJhbnNmZXJyZWQsXG4gICAgICBvbkxlZnRPcmc6IG1lcmdlZC5vbkxlZnRPcmcsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIHJlYWRvbmx5IG9yZyA9IHNpZ25hbDxPcmdhbml6YXRpb24gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGxlYXZpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ0xvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICByZWFkb25seSBvcmdFcnJvclN0YXRlID0gY29tcHV0ZWQ8RW1wdHlTdGF0ZU1ldGFkYXRhIHwgbnVsbD4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgZXJyID0gdGhpcy5vcmdMb2FkRXJyb3IoKTtcbiAgICBpZiAoIWVycikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIHtcbiAgICAgIHRpdGxlOiB7IG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVUaXRsZScpLCBlcnJvcjogdGhpcy50dCgnZXJyb3JUaXRsZScpIH0sXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnR0KCdvZmZsaW5lSGludCcpLFxuICAgICAgICBlcnJvcjogaW50ZXJwcmV0RXJyb3IoZXJyKS5tZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHJldHJ5TGFiZWw6IHRoaXMudHQoJ3JldHJ5JyksXG4gICAgICBvblJldHJ5OiAoKSA9PiB0aGlzLmxvYWRPcmcoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLmxvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWVtYmVycyA9IHNpZ25hbDxNZW1iZXJEZXRhaWxbXT4oW10pO1xuICByZWFkb25seSBtZW1iZXJzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVtYmVyc0xvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICByZWFkb25seSBtZW1iZXJzRXJyb3JTdGF0ZSA9IGNvbXB1dGVkPEVtcHR5U3RhdGVNZXRhZGF0YSB8IG51bGw+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IGVyciA9IHRoaXMubWVtYmVyc0xvYWRFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHsgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZVRpdGxlJyksIGVycm9yOiB0aGlzLnR0KCdlcnJvclRpdGxlJykgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVIaW50JyksXG4gICAgICAgIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgcmV0cnlMYWJlbDogdGhpcy50dCgncmV0cnknKSxcbiAgICAgIG9uUmV0cnk6ICgpID0+IHRoaXMubG9hZE1lbWJlcnMoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLm1lbWJlcnNMb2FkaW5nKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IG1lbWJlcnNOZXh0VG9rZW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGxvYWRpbmdNb3JlTWVtYmVycyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dBbGxNZW1iZXJzID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgdmlzaWJsZU1lbWJlcnMgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5zaG93QWxsTWVtYmVycygpID8gdGhpcy5tZW1iZXJzKCkgOiB0aGlzLm1lbWJlcnMoKS5zbGljZSgwLCAzKSkpO1xuICByZWFkb25seSB0cmFuc2ZlcnJpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBhdmFpbGFibGVSb2xlcyA9IHNpZ25hbDxPcmdSb2xlW10+KFtcbiAgICB7IGlkOiAndmlld2VyJywgbmFtZTogJ3ZpZXdlcicgfSxcbiAgICB7IGlkOiAnZWRpdG9yJywgbmFtZTogJ2VkaXRvcicgfSxcbiAgICB7IGlkOiAnYWRtaW4nLCBuYW1lOiAnYWRtaW4nIH0sXG4gIF0pO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZ0lkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHUgPSB0aGlzLmF1dGgudXNlcigpIGFzIHtcbiAgICAgIGFjdGl2ZU9yZ0lkPzogc3RyaW5nO1xuICAgICAgYWN0aXZlT3JnPzogc3RyaW5nO1xuICAgIH0gfCBudWxsO1xuICAgIHJldHVybiB1Py5hY3RpdmVPcmdJZCA/PyB1Py5hY3RpdmVPcmcgPz8gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHVzZXJJZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXV0aC51c2VyKCk/LnVzZXJJZCA/PyAnJyk7XG5cbiAgcmVhZG9ubHkgaXNPd25lciA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvID0gdGhpcy5vcmcoKTtcbiAgICBjb25zdCB1aWQgPSB0aGlzLnVzZXJJZCgpO1xuICAgIHJldHVybiAhIW8gJiYgISF1aWQgJiYgby5vd25lcklkID09PSB1aWQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNhbkVkaXRPcmcgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmlzT3duZXIoKSB8fCB0aGlzLmF1dGguaGFzUGVybWlzc2lvbignb3JnOm1hbmFnZScpKTtcblxuICByZWFkb25seSBjYW5NYW5hZ2VNZW1iZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICh0aGlzLmlzT3duZXIoKSkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgdWlkID0gdGhpcy51c2VySWQoKTtcbiAgICBjb25zdCBtZSA9IHRoaXMubWVtYmVycygpLmZpbmQobSA9PiBtLnVzZXJJZCA9PT0gdWlkKTtcbiAgICBpZiAoIW1lKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIG1lLnJvbGVzLnNvbWUociA9PiByID09PSAnYWRtaW4nIHx8IHIgPT09ICdzdXBlcl9hZG1pbicpO1xuICB9KTtcblxuICByZWFkb25seSBwYWdlVGl0bGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwYWdlVGl0bGUnKSk7XG4gIHJlYWRvbmx5IHBhZ2VEZXNjcmlwdGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMudHQoJ3BhZ2VEZXNjcmlwdGlvbicpKTtcblxuICByZWFkb25seSBwbGFuTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgcGxhbiA9IHRoaXMub3JnKCk/LnBsYW47XG4gICAgaWYgKHBsYW4gPT09ICdwcm8nKSByZXR1cm4gdGhpcy50dCgncGxhblBybycpO1xuICAgIGlmIChwbGFuID09PSAnZW50ZXJwcmlzZScpIHJldHVybiB0aGlzLnR0KCdwbGFuRW50ZXJwcmlzZScpO1xuICAgIHJldHVybiB0aGlzLnR0KCdwbGFuRnJlZScpO1xuICB9KTtcblxuICByZWFkb25seSBlZGl0QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdlZGl0Q3RhJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ3NtYWxsJyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGxlYXZlQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdsZWF2ZUN0YScpLFxuICAgIHRva2VuOiAnb3JnLWxlYXZlJyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMuaXNPd25lcigpIHx8IHRoaXMubGVhdmluZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSB0cmFuc2ZlcmFibGVNZW1iZXJzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tZW1iZXJzKCkuZmlsdGVyKG0gPT4gbS51c2VySWQgIT09IHRoaXMudXNlcklkKCkpKTtcblxuICByZWFkb25seSB2aWV3UGVybWlzc2lvbnNCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3JvbGVzVmlld1Blcm1zJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHRva2VuOiAnb3JnLXZpZXctcGVybWlzc2lvbnMnLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgdHJhbnNmZXJCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ3RyYW5zZmVyQ3RhJyksXG4gICAgdG9rZW46ICdvcmctdHJhbnNmZXItc3VibWl0JyxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMudHJhbnNmZXJyaW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5JbnZpdGVCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ2ludml0ZU9wZW4nKSxcbiAgICBjb2xvcjogJ3ByaW1hcnknLFxuICAgIGZpbGw6ICdzb2xpZCcsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgb3BlbkltcG9ydEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnaW1wb3J0T3BlbicpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5BcGlLZXlzQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdhcGlLZXlzT3BlbicpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ2NsZWFyJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gIH0pKTtcblxuICAvKiogR3VhcmRhIHBhcmEgZGV0ZWN0YXIgZWwgcHJpbWVyIGRpc3Bhcm8gZGVsIGVmZmVjdCAoZXZpdGEgZG9ibGUgY2FyZ2EpLiAqL1xuICBwcml2YXRlIGxhc3RMb2FkZWRPcmdJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgY29uc3QgbnMgPSB0aGlzLm5zO1xuICAgIGlmICghdGhpcy5pMThuLmhhc05hbWVzcGFjZShucykpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQobnMsIE9SR0FOSVpBVElPTl9WSUVXX0kxOE4pO1xuICAgIH1cbiAgICB0aGlzLm5hdi5zZXRCYWNrSGVhZGVyKCdwYWdlVGl0bGUnLCBucywgeyB3aXRoTWVudTogdHJ1ZSB9KTtcblxuICAgIC8vIEF1dG8tcmVsb2FkIGVuIG9yZy1zd2l0Y2g6IHJlYWNjaW9uYSBhIGFjdGl2ZU9yZ0lkKCkgeSByZWNhcmdhIG9yZyArIG1pZW1icm9zXG4gICAgLy8gY3VhbmRvIGVsIHVzdWFyaW8gY2FtYmlhIGRlIG9yZ2FuaXphY2nDs24gYWN0aXZhIG1pZW50cmFzIGxhIHZpc3RhIGVzdMOhXG4gICAgLy8gbW9udGFkYS4gQ3VicmUgdGFtYmnDqW4gbGEgY2FyZ2EgaW5pY2lhbCDigJQgYGxhc3RMb2FkZWRPcmdJZGAgZXZpdGEgcmVjYXJnYXJcbiAgICAvLyBkb3MgdmVjZXMgZWwgbWlzbW8gaWQgKHAuZWouIHNpIGVsIGVmZmVjdCByZS1jb3JyZSBwb3Igb3RyYSBkZXBlbmRlbmNpYSkuXG4gICAgLy8gYGFsbG93U2lnbmFsV3JpdGVzYCBwb3JxdWUgbGFzIGxvYWQgZm5zIGVzY3JpYmVuIHNpZ25hbHMgc8OtbmNyb25hbWVudGVcbiAgICAvLyAobG9hZGluZy9lcnJvci90b2tlbikg4oCUIEFuZ3VsYXIgMTggYmxvcXVlYSB3cml0ZXMgZW4gZWZmZWN0IHNpbiBlbCBmbGFnLlxuICAgIGVmZmVjdChcbiAgICAgICgpID0+IHtcbiAgICAgICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgICAgIGlmIChvcmdJZCA9PT0gdGhpcy5sYXN0TG9hZGVkT3JnSWQpIHJldHVybjtcbiAgICAgICAgdGhpcy5sYXN0TG9hZGVkT3JnSWQgPSBvcmdJZDtcbiAgICAgICAgdGhpcy5sb2FkT3JnKCk7XG4gICAgICAgIHRoaXMubG9hZE1lbWJlcnMoKTtcbiAgICAgICAgdGhpcy5sb2FkUm9sZXMoKTtcbiAgICAgIH0sXG4gICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICApO1xuXG4gICAgY29ubmVjdFBhZ2VSZWZyZXNoKGFzeW5jICgpID0+IHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFt0aGlzLmxvYWRPcmcoKSwgdGhpcy5sb2FkTWVtYmVycygpXSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkVkaXQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBFZGl0T3JnTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBvcmc6IHRoaXMub3JnKCksXG4gICAgICAgIG9uU3VjY2VzczogKHVwZGF0ZWQ6IE9yZ2FuaXphdGlvbikgPT4ge1xuICAgICAgICAgIHRoaXMub3JnLnNldCh1cGRhdGVkKTtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25PcmdFZGl0ZWQ/LigpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uTGVhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNPd25lcigpIHx8IHRoaXMubGVhdmluZygpKSByZXR1cm47XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jb25maXJtRGlhbG9nLmNvbmZpcm1EZXN0cnVjdGl2ZSh7XG4gICAgICB0aXRsZTogdGhpcy50dCgnbGVhdmVUaXRsZScpLFxuICAgICAgbWVzc2FnZTogdGhpcy50dCgnbGVhdmVDb25maXJtJyksXG4gICAgICBjb25maXJtQnV0dG9uOiB7IHRleHQ6IHRoaXMudHQoJ2xlYXZlQ3RhJykgfSxcbiAgICAgIGNhbmNlbEJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCdjYW5jZWxDdGEnKSB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0LmNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybjtcbiAgICB0aGlzLmxlYXZpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ1NlcnZpY2UubGVhdmVPcmcob3JnSWQpKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2xlYXZlU3VjY2VzcycpLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBkdXJhdGlvbjogMzUwMCxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY2ZnID0gdGhpcy5yZXNvbHZlZENvbmZpZygpO1xuICAgICAgdGhpcy5uYXYubmF2aWdhdGVCeVVybChjZmcubGVhdmVSZWRpcmVjdFJvdXRlKTtcbiAgICAgIGNmZy5vbkxlZnRPcmc/LigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnb3JnYW5pemF0aW9uLmxlYXZlJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICdsZWF2ZUVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxlYXZpbmcuc2V0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBvbk9wZW5JbnZpdGUoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBJbnZpdGVNZW1iZXJNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG9yZ0lkOiB0aGlzLmFjdGl2ZU9yZ0lkKCksXG4gICAgICAgIGV4aXN0aW5nTWVtYmVySWRzOiB0aGlzLm1lbWJlcnMoKS5tYXAobSA9PiBtLnVzZXJJZCksXG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZE1lbWJlcnMoKTtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25NZW1iZXJJbnZpdGVkPy4oKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbk9wZW5JbXBvcnQoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBNZW1iZXJJbXBvcnRNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG9yZ0lkOiB0aGlzLmFjdGl2ZU9yZ0lkKCksXG4gICAgICAgIGF2YWlsYWJsZVJvbGVzOiB0aGlzLmF2YWlsYWJsZVJvbGVzKCksXG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZE1lbWJlcnMoKTtcbiAgICAgICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25NZW1iZXJJbnZpdGVkPy4oKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvbk9wZW5BcGlLZXlzKCk6IHZvaWQge1xuICAgIC8vIExhcyBBUEkgS2V5cyBhaG9yYSB2aXZlbiBlbiBzdSBwcm9waWEgdmlzdGEgKGB2YWwtYXBpLWtleXMtdmlld2ApOiBjcmVhclxuICAgIC8vIGFycmliYSwgbGlzdGEgYWJham8gY29uIGNyZWFkb3IvZmVjaGEuIE5hdmVnYW1vcyBlbiB2ZXogZGUgYWJyaXIgdW4gbW9kYWwuXG4gICAgdGhpcy5uYXYubmF2aWdhdGVCeVVybCh0aGlzLnJlc29sdmVkQ29uZmlnKCkuYXBpS2V5c1JvdXRlKTtcbiAgfVxuXG4gIC8vIFwiTcOhcyBpbmZvcm1hY2nDs25cIiBzb2JyZSBvcmdhbml6YWNpb25lcyDigJQgbWlzbW8gc2hlZXQgZXhwbGljYXRpdm8gcXVlIG11ZXN0cmFcbiAgLy8gYWNjb3VudC12aWV3IHNpbiBvcmcsIHBlcm8gZGlzcG9uaWJsZSBzaWVtcHJlICh0b2RvIHVzZXIgdGllbmUgb3JnIHBvciBkZWZlY3RvKS5cbiAgb25PcmdJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdvcmdzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ29yZ3NJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdvcmdzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gXCJNw6FzIGluZm9ybWFjacOzblwiIGRlIGxhIHNlY2Npw7NuIEludGVncmFjaW9uZXMg4oCUIGFicmUgdW4gc2hlZXQgRVhQTElDQVRJVk9cbiAgLy8gKGFydGljbGUtc3R5bGUsIHNpbiBsYXMgZmVhdHVyZS1jYXJkcyBkZSBvcmcpLCBOTyBlbCBtb2RhbCBkZSBnZXN0acOzbiBkZSBBUElcbiAgLy8ga2V5cy4gTGEgZ2VzdGnDs24gc2UgYWJyZSBjb24gZWwgYm90w7NuIFwiR2VzdGlvbmFyXCIgKG9uT3BlbkFwaUtleXMpLlxuICBvbkFwaUtleXNJbmZvKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHNob3dGZWF0dXJlczogZmFsc2UsXG4gICAgICAgIHRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzSW5mb1RpdGxlJyksXG4gICAgICAgIHN1YnRpdGxlOiB0aGlzLnR0KCdhcGlLZXlzSW5mb1N1YnRpdGxlJyksXG4gICAgICAgIGJvZHk6IHRoaXMudHQoJ2FwaUtleXNJbmZvQ29udGVudCcpLFxuICAgICAgICBjbG9zZUxhYmVsOiB0aGlzLnR0KCdhcGlLZXlzSW5mb0Nsb3NlJyksXG4gICAgICAgIGNsb3NlUHJvcHM6IHtcbiAgICAgICAgICB0ZXh0OiB0aGlzLnR0KCdhcGlLZXlzSW5mb0Nsb3NlJyksXG4gICAgICAgICAgZmlsbDogJ291dGxpbmUnLFxuICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgIGV4cGFuZDogJ2Jsb2NrJyxcbiAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25WaWV3UGVybWlzc2lvbnMoKTogdm9pZCB7XG4gICAgdGhpcy5uYXYubmF2aWdhdGVCeVVybCh0aGlzLnJlc29sdmVkQ29uZmlnKCkudmlld1Blcm1pc3Npb25zUm91dGUpO1xuICB9XG5cbiAgb25PcGVuVHJhbnNmZXIoKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgbWVtYmVyczogdGhpcy50cmFuc2ZlcmFibGVNZW1iZXJzKCksXG4gICAgICAgIG9uQ29uZmlybTogKG5ld093bmVySWQ6IHN0cmluZykgPT4gdm9pZCB0aGlzLm9uVHJhbnNmZXIobmV3T3duZXJJZCksXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgb25UcmFuc2ZlcihuZXdPd25lcklkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIW5ld093bmVySWQgfHwgdGhpcy50cmFuc2ZlcnJpbmcoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybURpYWxvZy5jb25maXJtRGVzdHJ1Y3RpdmUoe1xuICAgICAgdGl0bGU6IHRoaXMudHQoJ3RyYW5zZmVyVGl0bGUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ3RyYW5zZmVyQ29uZmlybScpLFxuICAgICAgY29uZmlybUJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCd0cmFuc2ZlckN0YScpIH0sXG4gICAgICBjYW5jZWxCdXR0b246IHsgdGV4dDogdGhpcy50dCgnY2FuY2VsQ3RhJykgfSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdC5jb25maXJtZWQpIHJldHVybjtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy50cmFuc2ZlcnJpbmcuc2V0KHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLm9yZ1NlcnZpY2UudHJhbnNmZXJPd25lcnNoaXAob3JnSWQsIG5ld093bmVySWQpKTtcbiAgICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ3RyYW5zZmVyU3VjY2VzcycpLFxuICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICBkdXJhdGlvbjogMzUwMCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5sb2FkT3JnKCk7XG4gICAgICB0aGlzLmxvYWRNZW1iZXJzKCk7XG4gICAgICB0aGlzLnJlc29sdmVkQ29uZmlnKCkub25Pd25lcnNoaXBUcmFuc2ZlcnJlZD8uKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgIGNvbnRleHQ6ICdvcmdhbml6YXRpb24udHJhbnNmZXInLFxuICAgICAgICBmYWxsYmFja0tleTogJ3RyYW5zZmVyRXJyb3InLFxuICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudHJhbnNmZXJyaW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkT3JnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgIGlmICghb3JnSWQpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMub3JnTG9hZEVycm9yLnNldChudWxsKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UuZ2V0T3JnKG9yZ0lkKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBvcmcgPT4ge1xuICAgICAgICAgIHRoaXMub3JnLnNldChvcmcpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5vcmdMb2FkRXJyb3Iuc2V0KGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkTWVtYmVycygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGhpcy5tZW1iZXJzTG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5tZW1iZXJzTG9hZEVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KG51bGwpO1xuICAgIHRoaXMuc2hvd0FsbE1lbWJlcnMuc2V0KGZhbHNlKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiB7XG4gICAgICB0aGlzLm9yZ1NlcnZpY2UuZ2V0T3JnTWVtYmVycyhvcmdJZCwgeyBsaW1pdDogMjAgfSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogYXN5bmMgcmVzID0+IHtcbiAgICAgICAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZW5yaWNoV2l0aFByb2ZpbGVzKHJlcy5tZW1iZXJzKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnMuc2V0KGNhcmRzKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KHJlcy5uZXh0VG9rZW4gPz8gbnVsbCk7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTG9hZEVycm9yLnNldChlcnIpO1xuICAgICAgICAgIHRoaXMubWVtYmVyc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRNb3JlTWVtYmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMubWVtYmVyc05leHRUb2tlbigpO1xuICAgIGlmICghb3JnSWQgfHwgIXRva2VuIHx8IHRoaXMubG9hZGluZ01vcmVNZW1iZXJzKCkpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5vcmdTZXJ2aWNlLmdldE9yZ01lbWJlcnMob3JnSWQsIHsgbGltaXQ6IDIwLCBuZXh0VG9rZW46IHRva2VuIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhc3luYyByZXMgPT4ge1xuICAgICAgICBjb25zdCBjYXJkcyA9IGF3YWl0IHRoaXMuZW5yaWNoV2l0aFByb2ZpbGVzKHJlcy5tZW1iZXJzKTtcbiAgICAgICAgdGhpcy5tZW1iZXJzLnVwZGF0ZShwcmV2ID0+IFsuLi5wcmV2LCAuLi5jYXJkc10pO1xuICAgICAgICB0aGlzLm1lbWJlcnNOZXh0VG9rZW4uc2V0KHJlcy5uZXh0VG9rZW4gPz8gbnVsbCk7XG4gICAgICAgIHRoaXMubG9hZGluZ01vcmVNZW1iZXJzLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgICBjb250ZXh0OiAnb3JnYW5pemF0aW9uLmxvYWRNb3JlTWVtYmVycycsXG4gICAgICAgICAgZmFsbGJhY2tLZXk6ICdtZW1iZXJzRXJyb3InLFxuICAgICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5yaWNoV2l0aFByb2ZpbGVzKG1lbWJlcnM6IE9yZ01lbWJlcltdKTogUHJvbWlzZTxNZW1iZXJEZXRhaWxbXT4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBtZW1iZXJzLm1hcChhc3luYyBtID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzbmFwID0gYXdhaXQgZ2V0RG9jKGRvYyh0aGlzLmZpcmVzdG9yZSwgYHByb2ZpbGVzLyR7bS51c2VySWR9YCkpO1xuICAgICAgICAgIGNvbnN0IHAgPSBzbmFwLmV4aXN0cygpID8gc25hcC5kYXRhKCkgOiB7fTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4ubSxcbiAgICAgICAgICAgIGhhbmRsZTogcFsnaGFuZGxlJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXZhdGFyOiAocFsnYXZhdGFyVXJsJ10gPz8gcFsnYXZhdGFyJ10pIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIG5hbWU6IChwWyduYW1lJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSB8fCBtLm5hbWUsXG4gICAgICAgICAgfSBhcyBNZW1iZXJEZXRhaWw7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBtIGFzIE1lbWJlckRldGFpbDtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiByZXN1bHRzLm1hcChyID0+IChyLnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcgPyByLnZhbHVlIDogKHt9IGFzIE1lbWJlckRldGFpbCkpKTtcbiAgfVxuXG4gIGxvYWRSb2xlcygpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5vcmdTZXJ2aWNlLmxpc3RPcmdSb2xlcyhvcmdJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJvbGVzID0+IHtcbiAgICAgICAgaWYgKHJvbGVzLmxlbmd0aCkgdGhpcy5hdmFpbGFibGVSb2xlcy5zZXQocm9sZXMpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHJvbGVMYWJlbChyb2xlSWRPck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gVHJ5IHRvIGZpbmQgYnkgaWQgZmlyc3QgKFVVSUQpLCB0aGVuIGJ5IG5hbWVcbiAgICBjb25zdCBmb3VuZCA9IHRoaXMuYXZhaWxhYmxlUm9sZXMoKS5maW5kKHIgPT4gci5pZCA9PT0gcm9sZUlkT3JOYW1lIHx8IHIubmFtZSA9PT0gcm9sZUlkT3JOYW1lKTtcbiAgICBjb25zdCBuYW1lID0gZm91bmQ/Lm5hbWUgPz8gcm9sZUlkT3JOYW1lO1xuICAgIGNvbnN0IGtleU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIHZpZXdlcjogJ3JvbGVWaWV3ZXInLFxuICAgICAgZWRpdG9yOiAncm9sZUVkaXRvcicsXG4gICAgICBhZG1pbjogJ3JvbGVBZG1pbicsXG4gICAgICBzdXBlcl9hZG1pbjogJ3JvbGVTdXBlckFkbWluJyxcbiAgICB9O1xuICAgIC8vIDEpIFJvbCBnZW7DqXJpY28gY29ub2NpZG8g4oaSIGxhYmVsIGkxOG4uIDIpIGRpc3BsYXlOYW1lL2Rlc2NyaXBjacOzbiBkZWwgYmFja2VuZC5cbiAgICAvLyAzKSBGYWxsYmFjazogaHVtYW5pemFyIGVsIG5vbWJyZSBjcnVkbyAoZWouIFwiYmluZ29fYWRtaW5cIiDihpIgXCJCaW5nbyBBZG1pblwiKVxuICAgIC8vICAgIHBhcmEgbm8gbW9zdHJhciBlbCBjw7NkaWdvIHTDqWNuaWNvIGEgYXBwLXNwZWNpZmljIHJvbGVzLlxuICAgIGNvbnN0IG1hcHBlZCA9IGtleU1hcFtuYW1lXTtcbiAgICBpZiAobWFwcGVkKSB7XG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMudHQobWFwcGVkKTtcbiAgICAgIGlmIChsYWJlbCAmJiAhbGFiZWwuc3RhcnRzV2l0aCgnWycpKSByZXR1cm4gbGFiZWw7XG4gICAgfVxuICAgIGlmIChmb3VuZD8uZGVzY3JpcHRpb24pIHJldHVybiBmb3VuZC5kZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gbmFtZVxuICAgICAgLnNwbGl0KC9bXy1dLylcbiAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgIC5tYXAodyA9PiB3LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdy5zbGljZSgxKSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cblxuICBvblZpZXdNZW1iZXIobWVtYmVyOiBNZW1iZXJEZXRhaWwpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW5BZGFwdGl2ZSh7XG4gICAgICBjb21wb25lbnQ6IE1lbWJlckRldGFpbE1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgbWVtYmVyLFxuICAgICAgICBvcmdJZDogdGhpcy5hY3RpdmVPcmdJZCgpLFxuICAgICAgICBhdmFpbGFibGVSb2xlczogdGhpcy5hdmFpbGFibGVSb2xlcygpLFxuICAgICAgICBjYW5NYW5hZ2U6IHRoaXMuY2FuTWFuYWdlTWVtYmVycygpICYmIG1lbWJlci51c2VySWQgIT09IHRoaXMudXNlcklkKCksXG4gICAgICAgIGlzU2VsZjogbWVtYmVyLnVzZXJJZCA9PT0gdGhpcy51c2VySWQoKSxcbiAgICAgICAgb25DaGFuZ2VkOiAoKSA9PiB0aGlzLmxvYWRNZW1iZXJzKCksXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxufVxuIl19
|
|
1161
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pemF0aW9uLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9vcmdhbml6YXRpb24tdmlldy9vcmdhbml6YXRpb24tdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUV4RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUN4RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUN2RixPQUFPLEVBQWtCLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU5RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUV0RixP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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdTVDt3REFxTFEsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBpc0Rldk1vZGUsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlyc3RWYWx1ZUZyb20gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpcmVzdG9yZSwgZG9jLCBnZXREb2MgfSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZW1wdHktc3RhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS90eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVFcnJvclN0YXRlUHJvcHMgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZW1wdHktc3RhdGUvZmFjdG9yeSc7XG5pbXBvcnQgeyBNZW1iZXJDYXJkQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL21lbWJlci1jYXJkL21lbWJlci1jYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa2VsZXRvbkxheW91dENvbXBvbmVudCB9IGZyb20gJy4uL3NrZWxldG9uLWxheW91dC9za2VsZXRvbi1sYXlvdXQuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbk1ldGFkYXRhLCBDb21wb25lbnRTdGF0ZXMgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbmltcG9ydCB7IEhhc1Blcm1pc3Npb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL2hhcy1wZXJtaXNzaW9uLmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IGludGVycHJldEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL2ludGVycHJldC1lcnJvcic7XG5pbXBvcnQgeyBNb2RhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2RhbC9tb2RhbC5zZXJ2aWNlJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3JnU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL29yZy9vcmcuc2VydmljZSc7XG5pbXBvcnQge1xuICBPcmdNZW1iZXIsXG4gIE9yZ1JvbGUsXG4gIE9yZ2FuaXphdGlvbixcbiAgcmVzb2x2ZVJvbGVMYWJlbEZyb21MaXN0LFxuICBTWVNURU1fUk9MRV9ERUZBVUxUUyxcbn0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL3R5cGVzJztcbmltcG9ydCB7IGNvbm5lY3RQYWdlUmVmcmVzaCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IFZhbHRlY2hFcnJvclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lcnJvcnMvdmFsdGVjaC1lcnJvci5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuc2VydmljZSc7XG5cbmltcG9ydCB7IEVkaXRPcmdNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2VkaXQtb3JnLW1vZGFsL2VkaXQtb3JnLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbnZpdGVNZW1iZXJNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL2ludml0ZS1tZW1iZXItbW9kYWwvaW52aXRlLW1lbWJlci1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWVtYmVyRGV0YWlsTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9tZW1iZXItZGV0YWlsLW1vZGFsL21lbWJlci1kZXRhaWwtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbWJlckRldGFpbCB9IGZyb20gJy4uL21lbWJlci1kZXRhaWwtbW9kYWwvdHlwZXMnO1xuaW1wb3J0IHsgVHJhbnNmZXJPd25lcnNoaXBNb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3RyYW5zZmVyLW93bmVyc2hpcC1tb2RhbC90cmFuc2Zlci1vd25lcnNoaXAtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVtYmVyLWltcG9ydC1tb2RhbC9tZW1iZXItaW1wb3J0LW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPcmdJbmZvU2hlZXRDb21wb25lbnQgfSBmcm9tICcuLi9vcmctaW5mby1zaGVldC9vcmctaW5mby1zaGVldC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBPcmdhbml6YXRpb25WaWV3Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBPUkdBTklaQVRJT05fVklFV19JMThOIH0gZnJvbSAnLi9vcmdhbml6YXRpb24tdmlldy5pMThuJztcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuT3JnYW5pemF0aW9uJztcbmNvbnN0IERFRkFVTFRfVklFV19QRVJNSVNTSU9OU19ST1VURSA9ICcvYXBwL3NldHRpbmdzL3Blcm1pc3Npb25zJztcbmNvbnN0IERFRkFVTFRfQVBJX0tFWVNfUk9VVEUgPSAnL2FwcC9zZXR0aW5ncy9hcGkta2V5cyc7XG5jb25zdCBERUZBVUxUX0xFQVZFX1JFRElSRUNUX1JPVVRFID0gJy9hcHAvc2V0dGluZ3MvYWNjb3VudCc7XG5cbi8qKlxuICogYHZhbC1vcmdhbml6YXRpb24tdmlld2Ag4oCUIHZpc3RhIEdlc3Rpw7NuIGRlIG9yZ2FuaXphY2nDs24gZnVsbC1mZWF0dXJlXG4gKiBhdXRvY29udGVuaWRhIChvcmdhbmlzbSkuIFByb21vdmlkYSBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZVxuICogQURSLTAyMS4gUmXDum5lOlxuICogIC0gKipJbmZvcm1hY2nDs24qKiDigJQgbm9tYnJlLCBkZXNjcmlwY2nDs24sIHBsYW4geSB0aXBvIGRlIGxhIG9yZyBhY3RpdmE7IGVkaXRhclxuICogICAgdsOtYSBtb2RhbCBgdmFsLWVkaXQtb3JnLW1vZGFsYCAoc29sbyBzaSBgY2FuRWRpdE9yZygpYCkuXG4gKiAgLSAqKk1pZW1icm9zKiog4oCUIGxpc3RhIHBhZ2luYWRhIChgdmFsLW1lbWJlci1jYXJkYCkgZW5yaXF1ZWNpZGEgY29uIHBlcmZpbGVzXG4gKiAgICBww7pibGljb3MgKEZpcmVzdG9yZSk7IHZlciBkZXRhbGxlIHbDrWEgYHZhbC1tZW1iZXItZGV0YWlsLW1vZGFsYC5cbiAqICAtICoqUm9sZXMgeSBwZXJtaXNvcyoqIOKAlCBzZWNjacOzbiBleHBsaWNhdGl2YSBjb24gQ1RBIGEgbGEgcnV0YSBkZSBwZXJtaXNvcy5cbiAqICAtICoqSW52aXRhcioqIOKAlCBDVEEgcXVlIGFicmUgYHZhbC1pbnZpdGUtbWVtYmVyLW1vZGFsYCAoZ2F0ZWFkYSBwb3IgYHVzZXJzOipgKS5cbiAqICAtICoqVHJhbnNmZXJpciBwcm9waWVkYWQqKiDigJQgYHZhbC10cmFuc2Zlci1vd25lcnNoaXAtbW9kYWxgIChzb2xvIG93bmVyKS5cbiAqICAtICoqU2FsaXIgZGUgbGEgb3JnYW5pemFjacOzbioqIOKAlCBgT3JnU2VydmljZS5sZWF2ZU9yZ2AgY29uIGNvbmZpcm1hY2nDs25cbiAqICAgIGRlc3RydWN0aXZhLlxuICpcbiAqICoqUkJBQyBpbnRlcm5vKiogKGRlY2lzacOzbiBDVE8sIEFEUi0wMjEpOiBlbCBnYXRpbmcgZmlubyBzZSByZXN1ZWx2ZSBkZW50cm8gZGVcbiAqIGxhIHZpc3RhIHbDrWEgYEF1dGhTZXJ2aWNlLmhhc1Blcm1pc3Npb24oKWAgKyBgKnZhbEhhc1Blcm1pc3Npb25gICsgY29tcHV0ZWRzXG4gKiBgaXNPd25lcigpYC9gY2FuTWFuYWdlTWVtYmVycygpYC9gY2FuRWRpdE9yZygpYC4gTk8gc2UgZXhwb25lIGNvbW8gY29uZmlnLlxuICpcbiAqICoqQXV0by1yZWxvYWQgZW4gb3JnLXN3aXRjaCoqOiB1biBgZWZmZWN0YCByZWFjdGlvbmEgYSBgYWN0aXZlT3JnSWQoKWAgeSByZWNhcmdhXG4gKiBvcmcgKyBtaWVtYnJvcyBjdWFuZG8gZWwgdXN1YXJpbyBjYW1iaWEgZGUgb3JnYW5pemFjacOzbiBhY3RpdmEgbWllbnRyYXMgbGEgdmlzdGFcbiAqIGVzdMOhIG1vbnRhZGEuIEVsIGVmZmVjdCBjdWJyZSB0YW1iacOpbiBsYSBjYXJnYSBpbmljaWFsIChzaW4gZG9ibGUgY2FyZ2EpLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYEFjdGl2YXRlZFJvdXRlYCBzZVxuICogaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCBzb2xvIHBhcmEgbGVlciBlbCByb3V0ZSBkYXRhIGRlIGNvbmZpZyAobm8tb3BcbiAqIGVtYmViaWRvKS4gQXV0by1yZWdpc3RyYSBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsXG4gKiBuYW1lc3BhY2UgKGRlZmF1bHQgYFNldHRpbmdzLk9yZ2FuaXphdGlvbmApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtb3JnYW5pemF0aW9uLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBFbXB0eVN0YXRlQ29tcG9uZW50LFxuICAgIEhhc1Blcm1pc3Npb25EaXJlY3RpdmUsXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gICAgVGl0bGVDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBCdXR0b25Db21wb25lbnQsXG4gICAgTWVtYmVyQ2FyZENvbXBvbmVudCxcbiAgICBUcmFuc2Zlck93bmVyc2hpcE1vZGFsQ29tcG9uZW50LFxuICAgIE1lbWJlckltcG9ydE1vZGFsQ29tcG9uZW50LFxuICAgIE9yZ0luZm9TaGVldENvbXBvbmVudCxcbiAgXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicGFnZVwiPlxuICAgICAgPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiBwYWdlVGl0bGUoKSB9XCIgLz5cbiAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICBzaXplOiAnbGFyZ2UnLFxuICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgY29udGVudDogcGFnZURlc2NyaXB0aW9uKCksXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICAgIDwhLS0gXCJBcHJlbmRlciBtw6FzIHNvYnJlIG9yZ2FuaXphY2lvbmVzXCIg4oCUIGJham8gZWwgdMOtdHVsbytzdWJ0w610dWxvXG4gICAgICAgICAgICAgcHJpbmNpcGFsIGRlIGxhIHZpc3RhIChhYnJlIGVsIGV4cGxhaW5lciBvcmctaW5mby1zaGVldCkuIC0tPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwib3JnLW1vcmUtaW5mby1saW5rXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbk9yZ0luZm8oKVwiPlxuICAgICAgICAgIHt7IHR0KCdvcmdzTW9yZUluZm8nKSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0luZm8pIHtcbiAgICAgICAgPCEtLSBPcmcgSW5mbyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW5mb1RpdGxlJyksXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoY2FuRWRpdE9yZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJlZGl0QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJvbkVkaXQoKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogNCB9XCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2UgaWYgKG9yZ0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJvcmdFcnJvclN0YXRlKCkhXCIgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKG9yZygpOyBhcyBvKSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9OYW1lJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tdmFsdWVcIj57eyBvLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9EZXNjcmlwdGlvbicpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLXZhbHVlIG9yZy1pbmZvLXZhbHVlLS1tdXRlZFwiPnt7IG8uZGVzY3JpcHRpb24gfHwgJ+KAlCcgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcmctaW5mby1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9yZy1pbmZvLWxhYmVsXCI+e3sgdHQoJ2luZm9QbGFuJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGxhbi1iYWRnZSBwbGFuLWJhZGdlLS17eyBvLnBsYW4gfX1cIj57eyBwbGFuTGFiZWwoKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9yZy1pbmZvLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3JnLWluZm8tbGFiZWxcIj57eyB0dCgnaW5mb1R5cGUnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvcmctaW5mby12YWx1ZVwiPnt7IG8udHlwZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dNZW1iZXJzKSB7XG4gICAgICAgIDwhLS0gTWVtYmVycyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdtZW1iZXJzVGl0bGUnKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tYm9keVwiPlxuICAgICAgICAgICAgQGlmIChtZW1iZXJzTG9hZGluZygpKSB7XG4gICAgICAgICAgICAgIDx2YWwtc2tlbGV0b24tbGF5b3V0IFtwcm9wc109XCJ7IHByZXNldDogJ2xpc3QnLCByb3dzOiAzIH1cIiAvPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAobWVtYmVyc0Vycm9yU3RhdGUoKSkge1xuICAgICAgICAgICAgICA8dmFsLWVtcHR5LXN0YXRlIFtwcm9wc109XCJtZW1iZXJzRXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChtZW1iZXJzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnbWVtYmVyc0VtcHR5JyksXG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVtYmVycy1saXN0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAobSBvZiB2aXNpYmxlTWVtYmVycygpOyB0cmFjayBtLnVzZXJJZCkge1xuICAgICAgICAgICAgICAgICAgPHZhbC1tZW1iZXItY2FyZFxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRlc3RpZF09XCInb3JnLW1lbWJlci0nICsgbS51c2VySWRcIlxuICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgIGlkOiBtLnVzZXJJZCxcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBtLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBtLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgICBlbWFpbDogbS5lbWFpbCxcbiAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJVcmw6IG0uYXZhdGFyLFxuICAgICAgICAgICAgICAgICAgICAgIHJvbGVMYWJlbDogbS5yb2xlc1swXSA/IHJvbGVMYWJlbChtLnJvbGVzWzBdKSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkFyaWFMYWJlbDogdHQoJ3ZpZXdNZW1iZXJDdGEnKSxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkFjdGlvbik9XCJvblZpZXdNZW1iZXIobSlcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKCFzaG93QWxsTWVtYmVycygpICYmIG1lbWJlcnMoKS5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgKGNsaWNrKT1cInNob3dBbGxNZW1iZXJzLnNldCh0cnVlKVwiPlxuICAgICAgICAgICAgICAgICAge3sgdHQoJ21lbWJlcnNTaG93TW9yZScpIH19ICh7eyBtZW1iZXJzKCkubGVuZ3RoIC0gMyB9fSlcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAaWYgKHNob3dBbGxNZW1iZXJzKCkgJiYgbWVtYmVyc05leHRUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1lbWJlcnMtc2hvdy1tb3JlXCIgW2Rpc2FibGVkXT1cImxvYWRpbmdNb3JlTWVtYmVycygpXCIgKGNsaWNrKT1cImxvYWRNb3JlTWVtYmVycygpXCI+XG4gICAgICAgICAgICAgICAgICB7eyBsb2FkaW5nTW9yZU1lbWJlcnMoKSA/ICfigKYnIDogdHQoJ21lbWJlcnNTaG93TW9yZScpIH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd1JvbGVzKSB7XG4gICAgICAgIDwhLS0gUm9sZXMgeSBwZXJtaXNvczogc2VjY2lvbiBleHBsaWNhdGl2YSwgZGV0YWxsZSBlbiBsYSBydXRhIGRlIHBlcm1pc29zIC0tPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInNldHRpbmdzLXNlY3Rpb25cIj5cbiAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgY29udGVudDogdHQoJ3JvbGVzU2VjdGlvblRpdGxlJyksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdyb2xlc0hpbnQnKSxcbiAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInZpZXdQZXJtaXNzaW9uc0J1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25WaWV3UGVybWlzc2lvbnMoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd0ludml0ZSkge1xuICAgICAgICA8IS0tIEludml0ZTogc29sbyBhZG1pbisgKGdhdGluZyBSQkFDIGludGVybm8pIC0tPlxuICAgICAgICA8c2VjdGlvbiAqdmFsSGFzUGVybWlzc2lvbj1cIid1c2VyczoqJ1wiIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLWludml0ZS1zZWN0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX190ZXh0XCI+XG4gICAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdpbnZpdGVDdGFUaXRsZScpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnaW52aXRlQ3RhSGludCcpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YV9fYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwib3Blbkludml0ZUJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuSW52aXRlKClcIiAvPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwib3BlbkltcG9ydEJ1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuSW1wb3J0KClcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgPCEtLSBBUEkgS2V5czogc2VjY2nDs24gcHJvcGlhLiBJbnRlZ3JhY2lvbmVzIE0yTSAoaW1wb3J0IGRlIG1pZW1icm9zLCBldGMuKS4gLS0+XG4gICAgICA8c2VjdGlvbiAqdmFsSGFzUGVybWlzc2lvbj1cIidhcGkta2V5czpyZWFkJ1wiIGNsYXNzPVwic2V0dGluZ3Mtc2VjdGlvblwiIGRhdGEtdGVzdGlkPVwib3JnLWFwaWtleXMtc2VjdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW52aXRlLWN0YVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnZpdGUtY3RhX190ZXh0XCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiB0cnVlLCBjb250ZW50OiB0dCgnYXBpS2V5c1NlY3Rpb25UaXRsZScpIH1cIiAvPlxuICAgICAgICAgICAgPHZhbC10ZXh0IFtwcm9wc109XCJ7IHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ2RhcmsnLCBib2xkOiBmYWxzZSwgY29udGVudDogdHQoJ2FwaUtleXNTZWN0aW9uSGludCcpIH1cIiAvPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm9yZy1tb3JlLWluZm8tbGlua1wiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25BcGlLZXlzSW5mbygpXCI+XG4gICAgICAgICAgICAgIHt7IHR0KCdhcGlLZXlzTW9yZUluZm8nKSB9fVxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImludml0ZS1jdGFfX2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJvcGVuQXBpS2V5c0J1dHRvblByb3BzKClcIiAoY2xpY2spPVwib25PcGVuQXBpS2V5cygpXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3NlY3Rpb24+XG5cbiAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93VHJhbnNmZXJPd25lcnNoaXAgJiYgaXNPd25lcigpKSB7XG4gICAgICAgIDwhLS0gVHJhbnNmZXIgb3duZXJzaGlwOiBzb2xvIG93bmVyIChnYXRpbmcgUkJBQyBpbnRlcm5vKSAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCIgZGF0YS10ZXN0aWQ9XCJvcmctdHJhbnNmZXItc2VjdGlvblwiPlxuICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICBjb250ZW50OiB0dCgndHJhbnNmZXJUaXRsZScpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1ib2R5XCI+XG4gICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgndHJhbnNmZXJIaW50JyksXG4gICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgQGlmICh0cmFuc2ZlcmFibGVNZW1iZXJzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwidHJhbnNmZXJCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uT3BlblRyYW5zZmVyKClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ21lbWJlcnNFbXB0eScpLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cbiAgICAgIH1cblxuICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dMZWF2ZSkge1xuICAgICAgICA8IS0tIExlYXZlIG9yZyAtLT5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uXCI+XG4gICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdsZWF2ZVRpdGxlJyksXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLWJvZHlcIj5cbiAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGlzT3duZXIoKSA/IHR0KCdsZWF2ZU93bmVySGludCcpIDogdHQoJ2xlYXZlSGludCcpLFxuICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwibGVhdmVCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cIm9uTGVhdmUoKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgfVxuXG4gICAgICBAaWYgKGlzRGVidWcpIHtcbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJzZXR0aW5ncy1zZWN0aW9uIHJiYWMtZGVidWdcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1oZWFkZXItcm93XCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDogJ1JCQUMgKGxpdmUpJyxcbiAgICAgICAgICAgICAgICBzaXplOiAnc21hbGwnLFxuICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyYmFjLWRlYnVnX19ib2R5XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmJhYy1kZWJ1Z19fcm93XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmJhYy1kZWJ1Z19fbGFiZWxcIj5Sb2xlczwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX192YWx1ZVwiPnt7IGF1dGgucm9sZXMoKS5qb2luKCcsICcpIHx8ICfigJQnIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmJhYy1kZWJ1Z19fcm93XCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmJhYy1kZWJ1Z19fbGFiZWxcIj5QZXJtaXNvczwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyYmFjLWRlYnVnX192YWx1ZSByYmFjLWRlYnVnX192YWx1ZS0tcGVybXNcIj57eyBhdXRoLnBlcm1pc3Npb25zKCkuam9pbignLCAnKSB8fCAn4oCUJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cbiAgICAgIC5vcmctbW9yZS1pbmZvLWxpbmsge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgIHBhZGRpbmc6IDRweCAwO1xuICAgICAgICBtYXJnaW4tdG9wOiA0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMTNweDtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LCAjNzAyNmRmKTtcbiAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgfVxuICAgICAgLnBhZ2UtaGVhZGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIH1cbiAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgfVxuICAgICAgLnNldHRpbmdzLXNlY3Rpb24gKyAuc2V0dGluZ3Mtc2VjdGlvbiB7XG4gICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS12YWwtYm9yZGVyLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDgpKTtcbiAgICAgIH1cbiAgICAgIC5zZWN0aW9uLWhlYWRlci1yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgICB9XG4gICAgICAuc2VjdGlvbi1ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvdy1hY3Rpb25zIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMTJweDtcbiAgICAgIH1cbiAgICAgIC5yb3ctYWN0aW9ucy0tZ2FwIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICB9XG4gICAgICAuaW52aXRlLWN0YSB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgIH1cbiAgICAgIC5pbnZpdGUtY3RhX190ZXh0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICB9XG4gICAgICAuaW52aXRlLWN0YV9fYWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGdhcDogMTJweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLm9yZy1pbmZvLWNhcmQge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAxNHB4O1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQsICNmNGY1ZjgpO1xuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgfVxuICAgICAgOmhvc3QtY29udGV4dChib2R5LmRhcmspIC5vcmctaW5mby1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChodG1sLmlvbi1wYWxldHRlLWRhcmspIC5vcmctaW5mby1jYXJkLFxuICAgICAgOmhvc3QtY29udGV4dChbZGF0YS10aGVtZT0nZGFyayddKSAub3JnLWluZm8tY2FyZCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tZmllbGQge1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tdmFsLWJvcmRlci1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tZmllbGQ6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG4gICAgICB9XG4gICAgICAub3JnLWluZm8tbGFiZWwge1xuICAgICAgICBmb250LXNpemU6IDAuNzRyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtKTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby12YWx1ZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5vcmctaW5mby12YWx1ZS0tbXV0ZWQge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgICAgfVxuICAgICAgLnBsYW4tYmFkZ2UtLWZyZWUge1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1pb24tY29sb3ItbGlnaHQtc2hhZGUsICNkN2Q4ZGEpO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLnBsYW4tYmFkZ2UtLXBybyB7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgY29sb3I6ICNmZmY7XG4gICAgICB9XG4gICAgICAucGxhbi1iYWRnZS0tZW50ZXJwcmlzZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICNmNWM1NDI7XG4gICAgICAgIGNvbG9yOiAjMjIyO1xuICAgICAgfVxuICAgICAgLm1lbWJlcnMtbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogOHB4O1xuICAgICAgfVxuICAgICAgLm1lbWJlcnMtc2hvdy1tb3JlIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXByaW1hcnkpO1xuICAgICAgICBmb250LXNpemU6IDE0cHg7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgcGFkZGluZzogOHB4IDA7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1ZyB7XG4gICAgICAgIG9wYWNpdHk6IDAuNztcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX19ib2R5IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgIH1cbiAgICAgIC5yYmFjLWRlYnVnX19yb3cge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fbGFiZWwge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIG1pbi13aWR0aDogNzJweDtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fdmFsdWUge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG4gICAgICB9XG4gICAgICAucmJhYy1kZWJ1Z19fdmFsdWUtLXBlcm1zIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIE9yZ2FuaXphdGlvblZpZXdDb21wb25lbnQge1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHJlYWRvbmx5IGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIG9yZ1NlcnZpY2UgPSBpbmplY3QoT3JnU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBlcnJvcnMgPSBpbmplY3QoVmFsdGVjaEVycm9yU2VydmljZSk7XG4gIHByaXZhdGUgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG4gIHByaXZhdGUgZmlyZXN0b3JlID0gaW5qZWN0KEZpcmVzdG9yZSk7XG4gIHByaXZhdGUgY29uZmlybURpYWxvZyA9IGluamVjdChDb25maXJtYXRpb25EaWFsb2dTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICByZWFkb25seSBpc0RlYnVnID0gaXNEZXZNb2RlKCk7XG5cbiAgLyoqXG4gICAqIENvbmZpZyB2w61hIEBJbnB1dCAob2JqZWN0LWZpcnN0KS4gU2kgbm8gc2UgcGFzYSwgc2UgY2FlIGFsIHJvdXRlIGRhdGFcbiAgICogYG9yZ2FuaXphdGlvbkNvbmZpZ2AgKHBvYmxhZG8gcG9yIGBwcm92aWRlVmFsdGVjaE9yZ2FuaXphdGlvblJvdXRlc2ApLlxuICAgKiBgcmVzb2x2ZWRDb25maWdgIG1lcmdlYSBjb24gbG9zIGRlZmF1bHRzIOKAlCBgQElucHV0YCBnYW5hIHNvYnJlIHJvdXRlIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBPcmdhbml6YXRpb25WaWV3Q29uZmlnO1xuXG4gIHJlYWRvbmx5IHJlc29sdmVkQ29uZmlnID0gY29tcHV0ZWQ8XG4gICAgUmVxdWlyZWQ8T21pdDxPcmdhbml6YXRpb25WaWV3Q29uZmlnLCAnb25PcmdFZGl0ZWQnIHwgJ29uTWVtYmVySW52aXRlZCcgfCAnb25Pd25lcnNoaXBUcmFuc2ZlcnJlZCcgfCAnb25MZWZ0T3JnJz4+ICZcbiAgICAgIFBpY2s8T3JnYW5pemF0aW9uVmlld0NvbmZpZywgJ29uT3JnRWRpdGVkJyB8ICdvbk1lbWJlckludml0ZWQnIHwgJ29uT3duZXJzaGlwVHJhbnNmZXJyZWQnIHwgJ29uTGVmdE9yZyc+XG4gID4oKCkgPT4ge1xuICAgIGNvbnN0IGZyb21Sb3V0ZSA9ICh0aGlzLnJvdXRlPy5zbmFwc2hvdC5kYXRhWydvcmdhbml6YXRpb25Db25maWcnXSA/PyB7fSkgYXMgT3JnYW5pemF0aW9uVmlld0NvbmZpZztcbiAgICBjb25zdCBtZXJnZWQ6IE9yZ2FuaXphdGlvblZpZXdDb25maWcgPSB7IC4uLmZyb21Sb3V0ZSwgLi4uKHRoaXMuY29uZmlnID8/IHt9KSB9O1xuICAgIHJldHVybiB7XG4gICAgICBzaG93SW5mbzogbWVyZ2VkLnNob3dJbmZvID8/IHRydWUsXG4gICAgICBzaG93TWVtYmVyczogbWVyZ2VkLnNob3dNZW1iZXJzID8/IHRydWUsXG4gICAgICBzaG93Um9sZXM6IG1lcmdlZC5zaG93Um9sZXMgPz8gdHJ1ZSxcbiAgICAgIHNob3dJbnZpdGU6IG1lcmdlZC5zaG93SW52aXRlID8/IHRydWUsXG4gICAgICBzaG93VHJhbnNmZXJPd25lcnNoaXA6IG1lcmdlZC5zaG93VHJhbnNmZXJPd25lcnNoaXAgPz8gdHJ1ZSxcbiAgICAgIHNob3dMZWF2ZTogbWVyZ2VkLnNob3dMZWF2ZSA/PyB0cnVlLFxuICAgICAgaTE4bk5hbWVzcGFjZTogbWVyZ2VkLmkxOG5OYW1lc3BhY2UgPz8gREVGQVVMVF9OQU1FU1BBQ0UsXG4gICAgICB2aWV3UGVybWlzc2lvbnNSb3V0ZTogbWVyZ2VkLnZpZXdQZXJtaXNzaW9uc1JvdXRlID8/IERFRkFVTFRfVklFV19QRVJNSVNTSU9OU19ST1VURSxcbiAgICAgIGFwaUtleXNSb3V0ZTogbWVyZ2VkLmFwaUtleXNSb3V0ZSA/PyBERUZBVUxUX0FQSV9LRVlTX1JPVVRFLFxuICAgICAgbGVhdmVSZWRpcmVjdFJvdXRlOiBtZXJnZWQubGVhdmVSZWRpcmVjdFJvdXRlID8/IERFRkFVTFRfTEVBVkVfUkVESVJFQ1RfUk9VVEUsXG4gICAgICBvbk9yZ0VkaXRlZDogbWVyZ2VkLm9uT3JnRWRpdGVkLFxuICAgICAgb25NZW1iZXJJbnZpdGVkOiBtZXJnZWQub25NZW1iZXJJbnZpdGVkLFxuICAgICAgb25Pd25lcnNoaXBUcmFuc2ZlcnJlZDogbWVyZ2VkLm9uT3duZXJzaGlwVHJhbnNmZXJyZWQsXG4gICAgICBvbkxlZnRPcmc6IG1lcmdlZC5vbkxlZnRPcmcsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqIE5hbWVzcGFjZSBpMThuIHJlc3VlbHRvIChjYXB0dXJhZG8gcGFyYSBsbGFtYWRhcyBuby1yZWFjdGl2YXMpLiAqL1xuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIHJlYWRvbmx5IG9yZyA9IHNpZ25hbDxPcmdhbml6YXRpb24gfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGxlYXZpbmcgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9yZ0xvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICByZWFkb25seSBvcmdFcnJvclN0YXRlID0gY29tcHV0ZWQ8RW1wdHlTdGF0ZU1ldGFkYXRhIHwgbnVsbD4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgY29uc3QgZXJyID0gdGhpcy5vcmdMb2FkRXJyb3IoKTtcbiAgICBpZiAoIWVycikgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGNyZWF0ZUVycm9yU3RhdGVQcm9wcyhlcnIsIHtcbiAgICAgIHRpdGxlOiB7IG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVUaXRsZScpLCBlcnJvcjogdGhpcy50dCgnZXJyb3JUaXRsZScpIH0sXG4gICAgICBkZXNjcmlwdGlvbjoge1xuICAgICAgICBvZmZsaW5lOiB0aGlzLnR0KCdvZmZsaW5lSGludCcpLFxuICAgICAgICBlcnJvcjogaW50ZXJwcmV0RXJyb3IoZXJyKS5tZXNzYWdlLFxuICAgICAgfSxcbiAgICAgIHJldHJ5TGFiZWw6IHRoaXMudHQoJ3JldHJ5JyksXG4gICAgICBvblJldHJ5OiAoKSA9PiB0aGlzLmxvYWRPcmcoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLmxvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWVtYmVycyA9IHNpZ25hbDxNZW1iZXJEZXRhaWxbXT4oW10pO1xuICByZWFkb25seSBtZW1iZXJzTG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVtYmVyc0xvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duPihudWxsKTtcblxuICByZWFkb25seSBtZW1iZXJzRXJyb3JTdGF0ZSA9IGNvbXB1dGVkPEVtcHR5U3RhdGVNZXRhZGF0YSB8IG51bGw+KCgpID0+IHtcbiAgICB0aGlzLmkxOG4ubGFuZygpO1xuICAgIGNvbnN0IGVyciA9IHRoaXMubWVtYmVyc0xvYWRFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHsgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZVRpdGxlJyksIGVycm9yOiB0aGlzLnR0KCdlcnJvclRpdGxlJykgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7XG4gICAgICAgIG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVIaW50JyksXG4gICAgICAgIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UsXG4gICAgICB9LFxuICAgICAgcmV0cnlMYWJlbDogdGhpcy50dCgncmV0cnknKSxcbiAgICAgIG9uUmV0cnk6ICgpID0+IHRoaXMubG9hZE1lbWJlcnMoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLm1lbWJlcnNMb2FkaW5nKCksXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IG1lbWJlcnNOZXh0VG9rZW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IGxvYWRpbmdNb3JlTWVtYmVycyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IHNob3dBbGxNZW1iZXJzID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgdmlzaWJsZU1lbWJlcnMgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5zaG93QWxsTWVtYmVycygpID8gdGhpcy5tZW1iZXJzKCkgOiB0aGlzLm1lbWJlcnMoKS5zbGljZSgwLCAzKSkpO1xuICByZWFkb25seSB0cmFuc2ZlcnJpbmcgPSBzaWduYWwoZmFsc2UpO1xuICByZWFkb25seSBhdmFpbGFibGVSb2xlcyA9IHNpZ25hbDxPcmdSb2xlW10+KFNZU1RFTV9ST0xFX0RFRkFVTFRTKTtcblxuICByZWFkb25seSBhY3RpdmVPcmdJZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB1ID0gdGhpcy5hdXRoLnVzZXIoKSBhcyB7XG4gICAgICBhY3RpdmVPcmdJZD86IHN0cmluZztcbiAgICAgIGFjdGl2ZU9yZz86IHN0cmluZztcbiAgICB9IHwgbnVsbDtcbiAgICByZXR1cm4gdT8uYWN0aXZlT3JnSWQgPz8gdT8uYWN0aXZlT3JnID8/ICcnO1xuICB9KTtcblxuICByZWFkb25seSB1c2VySWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmF1dGgudXNlcigpPy51c2VySWQgPz8gJycpO1xuXG4gIHJlYWRvbmx5IGlzT3duZXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbyA9IHRoaXMub3JnKCk7XG4gICAgY29uc3QgdWlkID0gdGhpcy51c2VySWQoKTtcbiAgICByZXR1cm4gISFvICYmICEhdWlkICYmIG8ub3duZXJJZCA9PT0gdWlkO1xuICB9KTtcblxuICByZWFkb25seSBjYW5FZGl0T3JnID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pc093bmVyKCkgfHwgdGhpcy5hdXRoLmhhc1Blcm1pc3Npb24oJ29yZzptYW5hZ2UnKSk7XG5cbiAgcmVhZG9ubHkgY2FuTWFuYWdlTWVtYmVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAodGhpcy5pc093bmVyKCkpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHVpZCA9IHRoaXMudXNlcklkKCk7XG4gICAgY29uc3QgbWUgPSB0aGlzLm1lbWJlcnMoKS5maW5kKG0gPT4gbS51c2VySWQgPT09IHVpZCk7XG4gICAgaWYgKCFtZSkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBtZS5yb2xlcy5zb21lKHIgPT4gciA9PT0gJ2FkbWluJyB8fCByID09PSAnc3VwZXJfYWRtaW4nKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcGFnZVRpdGxlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy50dCgncGFnZVRpdGxlJykpO1xuICByZWFkb25seSBwYWdlRGVzY3JpcHRpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnR0KCdwYWdlRGVzY3JpcHRpb24nKSk7XG5cbiAgcmVhZG9ubHkgcGxhbkxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHBsYW4gPSB0aGlzLm9yZygpPy5wbGFuO1xuICAgIGlmIChwbGFuID09PSAncHJvJykgcmV0dXJuIHRoaXMudHQoJ3BsYW5Qcm8nKTtcbiAgICBpZiAocGxhbiA9PT0gJ2VudGVycHJpc2UnKSByZXR1cm4gdGhpcy50dCgncGxhbkVudGVycHJpc2UnKTtcbiAgICByZXR1cm4gdGhpcy50dCgncGxhbkZyZWUnKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWRpdEJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnZWRpdEN0YScpLFxuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdzbWFsbCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gIH0pKTtcblxuICByZWFkb25seSBsZWF2ZUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnbGVhdmVDdGEnKSxcbiAgICB0b2tlbjogJ29yZy1sZWF2ZScsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLmlzT3duZXIoKSB8fCB0aGlzLmxlYXZpbmcoKSA/IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCA6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgdHJhbnNmZXJhYmxlTWVtYmVycyA9IGNvbXB1dGVkKCgpID0+IHRoaXMubWVtYmVycygpLmZpbHRlcihtID0+IG0udXNlcklkICE9PSB0aGlzLnVzZXJJZCgpKSk7XG5cbiAgcmVhZG9ubHkgdmlld1Blcm1pc3Npb25zQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdyb2xlc1ZpZXdQZXJtcycpLFxuICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICB0b2tlbjogJ29yZy12aWV3LXBlcm1pc3Npb25zJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IHRyYW5zZmVyQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCd0cmFuc2ZlckN0YScpLFxuICAgIHRva2VuOiAnb3JnLXRyYW5zZmVyLXN1Ym1pdCcsXG4gICAgY29sb3I6ICdkYXJrJyxcbiAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiB0aGlzLnRyYW5zZmVycmluZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICByZWFkb25seSBvcGVuSW52aXRlQnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdpbnZpdGVPcGVuJyksXG4gICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICBmaWxsOiAnc29saWQnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IG9wZW5JbXBvcnRCdXR0b25Qcm9wcyA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ2ltcG9ydE9wZW4nKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgc2hhcGU6ICdyb3VuZCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gIH0pKTtcblxuICByZWFkb25seSBvcGVuQXBpS2V5c0J1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgnYXBpS2V5c09wZW4nKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdjbGVhcicsXG4gICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgIHNoYXBlOiAncm91bmQnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICB9KSk7XG5cbiAgLyoqIEd1YXJkYSBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBkaXNwYXJvIGRlbCBlZmZlY3QgKGV2aXRhIGRvYmxlIGNhcmdhKS4gKi9cbiAgcHJpdmF0ZSBsYXN0TG9hZGVkT3JnSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UobnMpKSB7XG4gICAgICB0aGlzLmkxOG4ucmVnaXN0ZXJDb250ZW50KG5zLCBPUkdBTklaQVRJT05fVklFV19JMThOKTtcbiAgICB9XG4gICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgbnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG5cbiAgICAvLyBBdXRvLXJlbG9hZCBlbiBvcmctc3dpdGNoOiByZWFjY2lvbmEgYSBhY3RpdmVPcmdJZCgpIHkgcmVjYXJnYSBvcmcgKyBtaWVtYnJvc1xuICAgIC8vIGN1YW5kbyBlbCB1c3VhcmlvIGNhbWJpYSBkZSBvcmdhbml6YWNpw7NuIGFjdGl2YSBtaWVudHJhcyBsYSB2aXN0YSBlc3TDoVxuICAgIC8vIG1vbnRhZGEuIEN1YnJlIHRhbWJpw6luIGxhIGNhcmdhIGluaWNpYWwg4oCUIGBsYXN0TG9hZGVkT3JnSWRgIGV2aXRhIHJlY2FyZ2FyXG4gICAgLy8gZG9zIHZlY2VzIGVsIG1pc21vIGlkIChwLmVqLiBzaSBlbCBlZmZlY3QgcmUtY29ycmUgcG9yIG90cmEgZGVwZW5kZW5jaWEpLlxuICAgIC8vIGBhbGxvd1NpZ25hbFdyaXRlc2AgcG9ycXVlIGxhcyBsb2FkIGZucyBlc2NyaWJlbiBzaWduYWxzIHPDrW5jcm9uYW1lbnRlXG4gICAgLy8gKGxvYWRpbmcvZXJyb3IvdG9rZW4pIOKAlCBBbmd1bGFyIDE4IGJsb3F1ZWEgd3JpdGVzIGVuIGVmZmVjdCBzaW4gZWwgZmxhZy5cbiAgICBlZmZlY3QoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9yZ0lkID0gdGhpcy5hY3RpdmVPcmdJZCgpO1xuICAgICAgICBpZiAob3JnSWQgPT09IHRoaXMubGFzdExvYWRlZE9yZ0lkKSByZXR1cm47XG4gICAgICAgIHRoaXMubGFzdExvYWRlZE9yZ0lkID0gb3JnSWQ7XG4gICAgICAgIHRoaXMubG9hZE9yZygpO1xuICAgICAgICB0aGlzLmxvYWRNZW1iZXJzKCk7XG4gICAgICAgIHRoaXMubG9hZFJvbGVzKCk7XG4gICAgICB9LFxuICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgKTtcblxuICAgIGNvbm5lY3RQYWdlUmVmcmVzaChhc3luYyAoKSA9PiB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbdGhpcy5sb2FkT3JnKCksIHRoaXMubG9hZE1lbWJlcnMoKV0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25FZGl0KCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbkFkYXB0aXZlKHtcbiAgICAgIGNvbXBvbmVudDogRWRpdE9yZ01vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgb3JnOiB0aGlzLm9yZygpLFxuICAgICAgICBvblN1Y2Nlc3M6ICh1cGRhdGVkOiBPcmdhbml6YXRpb24pID0+IHtcbiAgICAgICAgICB0aGlzLm9yZy5zZXQodXBkYXRlZCk7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uT3JnRWRpdGVkPy4oKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvbkxlYXZlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzT3duZXIoKSB8fCB0aGlzLmxlYXZpbmcoKSkgcmV0dXJuO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybURpYWxvZy5jb25maXJtRGVzdHJ1Y3RpdmUoe1xuICAgICAgdGl0bGU6IHRoaXMudHQoJ2xlYXZlVGl0bGUnKSxcbiAgICAgIG1lc3NhZ2U6IHRoaXMudHQoJ2xlYXZlQ29uZmlybScpLFxuICAgICAgY29uZmlybUJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCdsZWF2ZUN0YScpIH0sXG4gICAgICBjYW5jZWxCdXR0b246IHsgdGV4dDogdGhpcy50dCgnY2FuY2VsQ3RhJykgfSxcbiAgICB9KTtcbiAgICBpZiAoIXJlc3VsdC5jb25maXJtZWQpIHJldHVybjtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5sZWF2aW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5vcmdTZXJ2aWNlLmxlYXZlT3JnKG9yZ0lkKSk7XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCdsZWF2ZVN1Y2Nlc3MnKSxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgZHVyYXRpb246IDM1MDAsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGNmZyA9IHRoaXMucmVzb2x2ZWRDb25maWcoKTtcbiAgICAgIHRoaXMubmF2Lm5hdmlnYXRlQnlVcmwoY2ZnLmxlYXZlUmVkaXJlY3RSb3V0ZSk7XG4gICAgICBjZmcub25MZWZ0T3JnPy4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHtcbiAgICAgICAgY29udGV4dDogJ29yZ2FuaXphdGlvbi5sZWF2ZScsXG4gICAgICAgIGZhbGxiYWNrS2V5OiAnbGVhdmVFcnJvcicsXG4gICAgICAgIGkxOG5OYW1lc3BhY2U6IHRoaXMubnMsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sZWF2aW5nLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgb25PcGVuSW52aXRlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbkFkYXB0aXZlKHtcbiAgICAgIGNvbXBvbmVudDogSW52aXRlTWVtYmVyTW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBvcmdJZDogdGhpcy5hY3RpdmVPcmdJZCgpLFxuICAgICAgICBleGlzdGluZ01lbWJlcklkczogdGhpcy5tZW1iZXJzKCkubWFwKG0gPT4gbS51c2VySWQpLFxuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRNZW1iZXJzKCk7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uTWVtYmVySW52aXRlZD8uKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25PcGVuSW1wb3J0KCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbkFkYXB0aXZlKHtcbiAgICAgIGNvbXBvbmVudDogTWVtYmVySW1wb3J0TW9kYWxDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBvcmdJZDogdGhpcy5hY3RpdmVPcmdJZCgpLFxuICAgICAgICBhdmFpbGFibGVSb2xlczogdGhpcy5hdmFpbGFibGVSb2xlcygpLFxuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRNZW1iZXJzKCk7XG4gICAgICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uTWVtYmVySW52aXRlZD8uKCk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgb25PcGVuQXBpS2V5cygpOiB2b2lkIHtcbiAgICAvLyBMYXMgQVBJIEtleXMgYWhvcmEgdml2ZW4gZW4gc3UgcHJvcGlhIHZpc3RhIChgdmFsLWFwaS1rZXlzLXZpZXdgKTogY3JlYXJcbiAgICAvLyBhcnJpYmEsIGxpc3RhIGFiYWpvIGNvbiBjcmVhZG9yL2ZlY2hhLiBOYXZlZ2Ftb3MgZW4gdmV6IGRlIGFicmlyIHVuIG1vZGFsLlxuICAgIHRoaXMubmF2Lm5hdmlnYXRlQnlVcmwodGhpcy5yZXNvbHZlZENvbmZpZygpLmFwaUtleXNSb3V0ZSk7XG4gIH1cblxuICAvLyBcIk3DoXMgaW5mb3JtYWNpw7NuXCIgc29icmUgb3JnYW5pemFjaW9uZXMg4oCUIG1pc21vIHNoZWV0IGV4cGxpY2F0aXZvIHF1ZSBtdWVzdHJhXG4gIC8vIGFjY291bnQtdmlldyBzaW4gb3JnLCBwZXJvIGRpc3BvbmlibGUgc2llbXByZSAodG9kbyB1c2VyIHRpZW5lIG9yZyBwb3IgZGVmZWN0bykuXG4gIG9uT3JnSW5mbygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oe1xuICAgICAgY29tcG9uZW50OiBPcmdJbmZvU2hlZXRDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICB0aXRsZTogdGhpcy50dCgnb3Jnc0luZm9UaXRsZScpLFxuICAgICAgICBzdWJ0aXRsZTogdGhpcy50dCgnb3Jnc0luZm9TdWJ0aXRsZScpLFxuICAgICAgICBib2R5OiB0aGlzLnR0KCdvcmdzSW5mb0NvbnRlbnQnKSxcbiAgICAgICAgY2xvc2VMYWJlbDogdGhpcy50dCgnb3Jnc0luZm9DbG9zZScpLFxuICAgICAgICBjbG9zZVByb3BzOiB7XG4gICAgICAgICAgdGV4dDogdGhpcy50dCgnb3Jnc0luZm9DbG9zZScpLFxuICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnJlYWtwb2ludHM6IHsgYnJlYWtwb2ludHM6IFswLCAwLjkyXSwgaW5pdGlhbEJyZWFrcG9pbnQ6IDAuOTIsIHNob3dIYW5kbGU6IHRydWUgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFwiTcOhcyBpbmZvcm1hY2nDs25cIiBkZSBsYSBzZWNjacOzbiBJbnRlZ3JhY2lvbmVzIOKAlCBhYnJlIHVuIHNoZWV0IEVYUExJQ0FUSVZPXG4gIC8vIChhcnRpY2xlLXN0eWxlLCBzaW4gbGFzIGZlYXR1cmUtY2FyZHMgZGUgb3JnKSwgTk8gZWwgbW9kYWwgZGUgZ2VzdGnDs24gZGUgQVBJXG4gIC8vIGtleXMuIExhIGdlc3Rpw7NuIHNlIGFicmUgY29uIGVsIGJvdMOzbiBcIkdlc3Rpb25hclwiIChvbk9wZW5BcGlLZXlzKS5cbiAgb25BcGlLZXlzSW5mbygpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oe1xuICAgICAgY29tcG9uZW50OiBPcmdJbmZvU2hlZXRDb21wb25lbnQsXG4gICAgICBjb21wb25lbnRQcm9wczoge1xuICAgICAgICBzaG93RmVhdHVyZXM6IGZhbHNlLFxuICAgICAgICB0aXRsZTogdGhpcy50dCgnYXBpS2V5c0luZm9UaXRsZScpLFxuICAgICAgICBzdWJ0aXRsZTogdGhpcy50dCgnYXBpS2V5c0luZm9TdWJ0aXRsZScpLFxuICAgICAgICBib2R5OiB0aGlzLnR0KCdhcGlLZXlzSW5mb0NvbnRlbnQnKSxcbiAgICAgICAgY2xvc2VMYWJlbDogdGhpcy50dCgnYXBpS2V5c0luZm9DbG9zZScpLFxuICAgICAgICBjbG9zZVByb3BzOiB7XG4gICAgICAgICAgdGV4dDogdGhpcy50dCgnYXBpS2V5c0luZm9DbG9zZScpLFxuICAgICAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICAgICAgICBleHBhbmQ6ICdibG9jaycsXG4gICAgICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnJlYWtwb2ludHM6IHsgYnJlYWtwb2ludHM6IFswLCAwLjkyXSwgaW5pdGlhbEJyZWFrcG9pbnQ6IDAuOTIsIHNob3dIYW5kbGU6IHRydWUgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIG9uVmlld1Blcm1pc3Npb25zKCk6IHZvaWQge1xuICAgIHRoaXMubmF2Lm5hdmlnYXRlQnlVcmwodGhpcy5yZXNvbHZlZENvbmZpZygpLnZpZXdQZXJtaXNzaW9uc1JvdXRlKTtcbiAgfVxuXG4gIG9uT3BlblRyYW5zZmVyKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbkFkYXB0aXZlKHtcbiAgICAgIGNvbXBvbmVudDogVHJhbnNmZXJPd25lcnNoaXBNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG1lbWJlcnM6IHRoaXMudHJhbnNmZXJhYmxlTWVtYmVycygpLFxuICAgICAgICBvbkNvbmZpcm06IChuZXdPd25lcklkOiBzdHJpbmcpID0+IHZvaWQgdGhpcy5vblRyYW5zZmVyKG5ld093bmVySWQpLFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uVHJhbnNmZXIobmV3T3duZXJJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFuZXdPd25lcklkIHx8IHRoaXMudHJhbnNmZXJyaW5nKCkpIHJldHVybjtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNvbmZpcm1EaWFsb2cuY29uZmlybURlc3RydWN0aXZlKHtcbiAgICAgIHRpdGxlOiB0aGlzLnR0KCd0cmFuc2ZlclRpdGxlJyksXG4gICAgICBtZXNzYWdlOiB0aGlzLnR0KCd0cmFuc2ZlckNvbmZpcm0nKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgndHJhbnNmZXJDdGEnKSB9LFxuICAgICAgY2FuY2VsQnV0dG9uOiB7IHRleHQ6IHRoaXMudHQoJ2NhbmNlbEN0YScpIH0sXG4gICAgfSk7XG4gICAgaWYgKCFyZXN1bHQuY29uZmlybWVkKSByZXR1cm47XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMudHJhbnNmZXJyaW5nLnNldCh0cnVlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5vcmdTZXJ2aWNlLnRyYW5zZmVyT3duZXJzaGlwKG9yZ0lkLCBuZXdPd25lcklkKSk7XG4gICAgICB0aGlzLnRvYXN0LnNob3coe1xuICAgICAgICBtZXNzYWdlOiB0aGlzLnR0KCd0cmFuc2ZlclN1Y2Nlc3MnKSxcbiAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgZHVyYXRpb246IDM1MDAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMubG9hZE9yZygpO1xuICAgICAgdGhpcy5sb2FkTWVtYmVycygpO1xuICAgICAgdGhpcy5yZXNvbHZlZENvbmZpZygpLm9uT3duZXJzaGlwVHJhbnNmZXJyZWQ/LigpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvcnMuaGFuZGxlKGVyciwge1xuICAgICAgICBjb250ZXh0OiAnb3JnYW5pemF0aW9uLnRyYW5zZmVyJyxcbiAgICAgICAgZmFsbGJhY2tLZXk6ICd0cmFuc2ZlckVycm9yJyxcbiAgICAgICAgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnRyYW5zZmVycmluZy5zZXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbG9hZE9yZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLm9yZ0xvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vcmdTZXJ2aWNlLmdldE9yZyhvcmdJZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogb3JnID0+IHtcbiAgICAgICAgICB0aGlzLm9yZy5zZXQob3JnKTtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMub3JnTG9hZEVycm9yLnNldChlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbG9hZE1lbWJlcnMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIHRoaXMubWVtYmVyc0xvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMubWVtYmVyc0xvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgdGhpcy5tZW1iZXJzTmV4dFRva2VuLnNldChudWxsKTtcbiAgICB0aGlzLnNob3dBbGxNZW1iZXJzLnNldChmYWxzZSk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgdGhpcy5vcmdTZXJ2aWNlLmdldE9yZ01lbWJlcnMob3JnSWQsIHsgbGltaXQ6IDIwIH0pLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IGFzeW5jIHJlcyA9PiB7XG4gICAgICAgICAgY29uc3QgY2FyZHMgPSBhd2FpdCB0aGlzLmVucmljaFdpdGhQcm9maWxlcyhyZXMubWVtYmVycyk7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzLnNldChjYXJkcyk7XG4gICAgICAgICAgdGhpcy5tZW1iZXJzTmV4dFRva2VuLnNldChyZXMubmV4dFRva2VuID8/IG51bGwpO1xuICAgICAgICAgIHRoaXMubWVtYmVyc0xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgIHRoaXMubWVtYmVyc0xvYWRFcnJvci5zZXQoZXJyKTtcbiAgICAgICAgICB0aGlzLm1lbWJlcnNMb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBsb2FkTW9yZU1lbWJlcnMoKTogdm9pZCB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLm1lbWJlcnNOZXh0VG9rZW4oKTtcbiAgICBpZiAoIW9yZ0lkIHx8ICF0b2tlbiB8fCB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycygpKSByZXR1cm47XG4gICAgdGhpcy5sb2FkaW5nTW9yZU1lbWJlcnMuc2V0KHRydWUpO1xuICAgIHRoaXMub3JnU2VydmljZS5nZXRPcmdNZW1iZXJzKG9yZ0lkLCB7IGxpbWl0OiAyMCwgbmV4dFRva2VuOiB0b2tlbiB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogYXN5bmMgcmVzID0+IHtcbiAgICAgICAgY29uc3QgY2FyZHMgPSBhd2FpdCB0aGlzLmVucmljaFdpdGhQcm9maWxlcyhyZXMubWVtYmVycyk7XG4gICAgICAgIHRoaXMubWVtYmVycy51cGRhdGUocHJldiA9PiBbLi4ucHJldiwgLi4uY2FyZHNdKTtcbiAgICAgICAgdGhpcy5tZW1iZXJzTmV4dFRva2VuLnNldChyZXMubmV4dFRva2VuID8/IG51bGwpO1xuICAgICAgICB0aGlzLmxvYWRpbmdNb3JlTWVtYmVycy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLmVycm9ycy5oYW5kbGUoZXJyLCB7XG4gICAgICAgICAgY29udGV4dDogJ29yZ2FuaXphdGlvbi5sb2FkTW9yZU1lbWJlcnMnLFxuICAgICAgICAgIGZhbGxiYWNrS2V5OiAnbWVtYmVyc0Vycm9yJyxcbiAgICAgICAgICBpMThuTmFtZXNwYWNlOiB0aGlzLm5zLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5sb2FkaW5nTW9yZU1lbWJlcnMuc2V0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVucmljaFdpdGhQcm9maWxlcyhtZW1iZXJzOiBPcmdNZW1iZXJbXSk6IFByb21pc2U8TWVtYmVyRGV0YWlsW10+IHtcbiAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgbWVtYmVycy5tYXAoYXN5bmMgbSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3Qgc25hcCA9IGF3YWl0IGdldERvYyhkb2ModGhpcy5maXJlc3RvcmUsIGBwcm9maWxlcy8ke20udXNlcklkfWApKTtcbiAgICAgICAgICBjb25zdCBwID0gc25hcC5leGlzdHMoKSA/IHNuYXAuZGF0YSgpIDoge307XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLm0sXG4gICAgICAgICAgICBoYW5kbGU6IHBbJ2hhbmRsZSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGF2YXRhcjogKHBbJ2F2YXRhclVybCddID8/IHBbJ2F2YXRhciddKSBhcyBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICBuYW1lOiAocFsnbmFtZSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgfHwgbS5uYW1lLFxuICAgICAgICAgIH0gYXMgTWVtYmVyRGV0YWlsO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gbSBhcyBNZW1iZXJEZXRhaWw7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0cy5tYXAociA9PiAoci5zdGF0dXMgPT09ICdmdWxmaWxsZWQnID8gci52YWx1ZSA6ICh7fSBhcyBNZW1iZXJEZXRhaWwpKSk7XG4gIH1cblxuICBsb2FkUm9sZXMoKTogdm9pZCB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMub3JnU2VydmljZS5saXN0T3JnUm9sZXMob3JnSWQpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiByb2xlcyA9PiB7XG4gICAgICAgIGlmIChyb2xlcy5sZW5ndGgpIHRoaXMuYXZhaWxhYmxlUm9sZXMuc2V0KHJvbGVzKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICByb2xlTGFiZWwocm9sZUlkT3JOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiByZXNvbHZlUm9sZUxhYmVsRnJvbUxpc3Qocm9sZUlkT3JOYW1lLCB0aGlzLmF2YWlsYWJsZVJvbGVzKCksIHRoaXMuaTE4bi5sYW5nKCkpO1xuICB9XG5cbiAgb25WaWV3TWVtYmVyKG1lbWJlcjogTWVtYmVyRGV0YWlsKTogdm9pZCB7XG4gICAgdm9pZCB0aGlzLm1vZGFsU2VydmljZS5vcGVuQWRhcHRpdmUoe1xuICAgICAgY29tcG9uZW50OiBNZW1iZXJEZXRhaWxNb2RhbENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIG1lbWJlcixcbiAgICAgICAgb3JnSWQ6IHRoaXMuYWN0aXZlT3JnSWQoKSxcbiAgICAgICAgYXZhaWxhYmxlUm9sZXM6IHRoaXMuYXZhaWxhYmxlUm9sZXMoKSxcbiAgICAgICAgY2FuTWFuYWdlOiB0aGlzLmNhbk1hbmFnZU1lbWJlcnMoKSAmJiBtZW1iZXIudXNlcklkICE9PSB0aGlzLnVzZXJJZCgpLFxuICAgICAgICBpc1NlbGY6IG1lbWJlci51c2VySWQgPT09IHRoaXMudXNlcklkKCksXG4gICAgICAgIG9uQ2hhbmdlZDogKCkgPT4gdGhpcy5sb2FkTWVtYmVycygpLFxuICAgICAgfSxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCB0dChrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaTE4bi50KGtleSwgdGhpcy5ucyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -60,7 +60,9 @@ export class ModalService {
|
|
|
60
60
|
// content) or fights the breakpoint height. So when it's a sheet we skip
|
|
61
61
|
// the size preset entirely.
|
|
62
62
|
const isSheet = !!options.breakpoints?.breakpoints?.length;
|
|
63
|
-
|
|
63
|
+
// Only apply a size preset when explicitly requested — callers that rely on
|
|
64
|
+
// CSS class sizing (e.g. openAdaptive) must not have inline styles overriding them.
|
|
65
|
+
const size = isSheet ? undefined : options.size ? MODAL_SIZES[options.size] : undefined;
|
|
64
66
|
const cssClasses = this.buildCssClasses(options);
|
|
65
67
|
const modal = await this.modalController.create({
|
|
66
68
|
component: options.component,
|
|
@@ -238,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
238
240
|
providedIn: 'root',
|
|
239
241
|
}]
|
|
240
242
|
}], ctorParameters: () => [{ type: i1.ModalController }] });
|
|
241
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFLTCxXQUFXLEVBQ1gsNEJBQTRCLEVBQzVCLDJCQUEyQixHQUM1QixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7O0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBSUgsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQUcsQ0FBQztJQUV4RDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBbUIsT0FBeUI7UUFDcEQsMkVBQTJFO1FBQzNFLGtFQUFrRTtRQUNsRSx5RUFBeUU7UUFDekUseUVBQXlFO1FBQ3pFLDRCQUE0QjtRQUM1QixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQzNELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsQ0FBQztRQUN6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDOUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQzVCLGNBQWMsRUFBRTtnQkFDZCxHQUFHLE9BQU8sQ0FBQyxj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LE9BQXNCO1FBQzVDLE1BQU0sT0FBTyxHQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDOytHQXhOVSxZQUFZO21IQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHtcbiAgTW9kYWxNZXRhZGF0YSxcbiAgU2ltcGxlTW9kYWxNZXRhZGF0YSxcbiAgTW9kYWxSZXN1bHQsXG4gIE1vZGFsQnV0dG9uLFxuICBNT0RBTF9TSVpFUyxcbiAgREVGQVVMVF9NT0RBTF9DT05GSVJNX0JVVFRPTixcbiAgREVGQVVMVF9NT0RBTF9DQU5DRUxfQlVUVE9OLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNpbXBsZU1vZGFsQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vc2ltcGxlLW1vZGFsLWNvbnRlbnQuY29tcG9uZW50JztcblxuLyoqXG4gKiBNb2RhbFNlcnZpY2VcbiAqXG4gKiBBIHNlcnZpY2UgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyBtb2RhbHMgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIGNvbXBvbmVudCBtb2RhbFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kYWxTZXJ2aWNlLm9wZW4oe1xuICogICBjb21wb25lbnQ6IE15Rm9ybUNvbXBvbmVudCxcbiAqICAgY29tcG9uZW50UHJvcHM6IHsgdXNlcklkOiAxMjMgfSxcbiAqICAgaGVhZGVyOiB7IHRpdGxlOiAnRWRpdCBVc2VyJywgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlIH0sXG4gKiAgIHNpemU6ICdtZWRpdW0nXG4gKiB9KTtcbiAqXG4gKiBpZiAocmVzdWx0LnJvbGUgPT09ICdjb25maXJtJykge1xuICogICBjb25zb2xlLmxvZygnU2F2ZWQ6JywgcmVzdWx0LmRhdGEpO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU2ltcGxlIGNvbnRlbnQgbW9kYWxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGF3YWl0IG1vZGFsU2VydmljZS5vcGVuU2ltcGxlKHtcbiAqICAgdGl0bGU6ICdUZXJtcyBvZiBTZXJ2aWNlJyxcbiAqICAgY29udGVudDogJzxwPlRlcm1zIGNvbnRlbnQgaGVyZS4uLjwvcD4nLFxuICogICBzaXplOiAnbGFyZ2UnLFxuICogICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU2hlZXQgbW9kYWwgKG1vYmlsZSlcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGFsU2VydmljZS5vcGVuU2hlZXQoe1xuICogICBjb21wb25lbnQ6IEZpbHRlckNvbXBvbmVudCxcbiAqICAgYnJlYWtwb2ludHM6IHtcbiAqICAgICBpbml0aWFsQnJlYWtwb2ludDogMC41LFxuICogICAgIGJyZWFrcG9pbnRzOiBbMCwgMC41LCAxXSxcbiAqICAgICBzaG93SGFuZGxlOiB0cnVlXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIG1vZGFsIHdpdGggYSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gTW9kYWwgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbW9kYWwgcmVzdWx0XG4gICAqL1xuICBhc3luYyBvcGVuPFQgPSBhbnksIFIgPSBhbnk+KG9wdGlvbnM6IE1vZGFsTWV0YWRhdGE8VD4pOiBQcm9taXNlPE1vZGFsUmVzdWx0PFI+PiB7XG4gICAgLy8gQSBzaGVldCBtb2RhbCAoYnJlYWtwb2ludHMgcHJlc2VudCkgZ2V0cyBpdHMgaGVpZ2h0IGZyb20gdGhlIGJyZWFrcG9pbnRzXG4gICAgLy8gYW5kIG11c3Qgc3BhbiB0aGUgZnVsbCB2aWV3cG9ydCB3aWR0aC4gQXBwbHlpbmcgYSBzaXplIHByZXNldCdzXG4gICAgLy8gYC0td2lkdGhgL2AtLWhlaWdodGAgaGVyZSBjb2xsYXBzZXMgdGhlIHNoZWV0IChlLmcuIGBhdXRvYCDihpIgc2hyaW5rIHRvXG4gICAgLy8gY29udGVudCkgb3IgZmlnaHRzIHRoZSBicmVha3BvaW50IGhlaWdodC4gU28gd2hlbiBpdCdzIGEgc2hlZXQgd2Ugc2tpcFxuICAgIC8vIHRoZSBzaXplIHByZXNldCBlbnRpcmVseS5cbiAgICBjb25zdCBpc1NoZWV0ID0gISFvcHRpb25zLmJyZWFrcG9pbnRzPy5icmVha3BvaW50cz8ubGVuZ3RoO1xuICAgIGNvbnN0IHNpemUgPSBpc1NoZWV0ID8gdW5kZWZpbmVkIDogTU9EQUxfU0laRVNbb3B0aW9ucy5zaXplIHx8ICdtZWRpdW0nXTtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5idWlsZENzc0NsYXNzZXMob3B0aW9ucyk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IG9wdGlvbnMuY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5jb21wb25lbnRQcm9wcyxcbiAgICAgICAgLy8gUGFzcyBtb2RhbCByZWZlcmVuY2UgZm9yIGRpc21pc3MgZnJvbSB3aXRoaW4gY29tcG9uZW50XG4gICAgICAgIF9tb2RhbFJlZjoge1xuICAgICAgICAgIGRpc21pc3M6IChkYXRhPzogYW55LCByb2xlPzogc3RyaW5nKSA9PiBtb2RhbC5kaXNtaXNzKGRhdGEsIHJvbGUpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgc2hvd0JhY2tkcm9wOiBvcHRpb25zLnNob3dCYWNrZHJvcCA/PyB0cnVlLFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiBvcHRpb25zLmJhY2tkcm9wRGlzbWlzcyA/PyB0cnVlLFxuICAgICAga2V5Ym9hcmRDbG9zZTogb3B0aW9ucy5rZXlib2FyZENsb3NlID8/IHRydWUsXG4gICAgICBjc3NDbGFzczogY3NzQ2xhc3NlcyxcbiAgICAgIG1vZGU6IG9wdGlvbnMubW9kZSxcbiAgICAgIGFuaW1hdGVkOiBvcHRpb25zLmFuaW1hdGVkID8/IHRydWUsXG4gICAgICBjYW5EaXNtaXNzOiB0aGlzLm5vcm1hbGl6ZUNhbkRpc21pc3Mob3B0aW9ucy5jYW5EaXNtaXNzID8/IHRydWUpLFxuICAgICAgcHJlc2VudGluZ0VsZW1lbnQ6IG9wdGlvbnMucHJlc2VudGluZ0VsZW1lbnQsXG4gICAgICAvLyBTaGVldCBtb2RhbCBvcHRpb25zXG4gICAgICBpbml0aWFsQnJlYWtwb2ludDogb3B0aW9ucy5icmVha3BvaW50cz8uaW5pdGlhbEJyZWFrcG9pbnQsXG4gICAgICBicmVha3BvaW50czogb3B0aW9ucy5icmVha3BvaW50cz8uYnJlYWtwb2ludHMsXG4gICAgICBoYW5kbGU6IG9wdGlvbnMuYnJlYWtwb2ludHM/LnNob3dIYW5kbGUsXG4gICAgICBoYW5kbGVCZWhhdmlvcjogb3B0aW9ucy5icmVha3BvaW50cz8uaGFuZGxlQmVoYXZpb3IsXG4gICAgfSk7XG5cbiAgICAvLyBBcHBseSBjdXN0b20gc2l6ZSBzdHlsZXMuIFNraXBwZWQgZm9yIHNoZWV0IG1vZGFscyDigJQgdGhlaXIgZGltZW5zaW9uc1xuICAgIC8vIGNvbWUgZnJvbSB0aGUgYnJlYWtwb2ludHMgKElvbmljIHNwYW5zIHRoZSBzaGVldCBmdWxsLXdpZHRoIGFuZCB1c2VzIHRoZVxuICAgIC8vIGJyZWFrcG9pbnQgdmFsdWVzIGZvciBoZWlnaHQpLlxuICAgIGlmICghaXNTaGVldCAmJiAob3B0aW9ucy53aWR0aCB8fCBvcHRpb25zLmhlaWdodCB8fCBzaXplKSkge1xuICAgICAgY29uc3QgbW9kYWxFbCA9IG1vZGFsIGFzIEhUTUxJb25Nb2RhbEVsZW1lbnQ7XG4gICAgICBtb2RhbEVsLnN0eWxlLnNldFByb3BlcnR5KCctLXdpZHRoJywgb3B0aW9ucy53aWR0aCB8fCBzaXplPy53aWR0aCB8fCAnYXV0bycpO1xuICAgICAgbW9kYWxFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oZWlnaHQnLCBvcHRpb25zLmhlaWdodCB8fCBzaXplPy5oZWlnaHQgfHwgJzUwdmgnKTtcbiAgICB9XG5cbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG4gICAgY29uc3QgeyBkYXRhLCByb2xlIH0gPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcblxuICAgIHJldHVybiB7IGRhdGEsIHJvbGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIHNpbXBsZSBjb250ZW50IG1vZGFsIHdpdGhvdXQgYSBjdXN0b20gY29tcG9uZW50LlxuICAgKiBVc2VzIElvbmljJ3MgYWxlcnQtbGlrZSBzdHlsaW5nIGJ1dCB3aXRoIG1vZGFsIGNhcGFiaWxpdGllcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBTaW1wbGUgbW9kYWwgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbW9kYWwgcmVzdWx0XG4gICAqL1xuICBhc3luYyBvcGVuU2ltcGxlKG9wdGlvbnM6IFNpbXBsZU1vZGFsTWV0YWRhdGEpOiBQcm9taXNlPE1vZGFsUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7XG4gICAgICBjb21wb25lbnQ6IFNpbXBsZU1vZGFsQ29udGVudENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlLFxuICAgICAgICBjb250ZW50OiBvcHRpb25zLmNvbnRlbnQsXG4gICAgICAgIGJ1dHRvbnM6IG9wdGlvbnMuYnV0dG9ucyB8fCBbREVGQVVMVF9NT0RBTF9DQU5DRUxfQlVUVE9OLCBERUZBVUxUX01PREFMX0NPTkZJUk1fQlVUVE9OXSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiBvcHRpb25zLnNob3dDbG9zZUJ1dHRvbiA/PyB0cnVlLFxuICAgICAgfSxcbiAgICAgIHNpemU6IG9wdGlvbnMuc2l6ZSB8fCAnbWVkaXVtJyxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogb3B0aW9ucy5iYWNrZHJvcERpc21pc3MgPz8gdHJ1ZSxcbiAgICAgIGNzc0NsYXNzOiBbJ3NpbXBsZS1tb2RhbCcsIG9wdGlvbnMuY3NzQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBjb25maXJtYXRpb24gbW9kYWwuXG4gICAqIEBwYXJhbSB0aXRsZSAtIE1vZGFsIHRpdGxlXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gTW9kYWwgbWVzc2FnZVxuICAgKiBAcGFyYW0gY29uZmlybUJ1dHRvbiAtIENvbmZpcm0gYnV0dG9uIGNvbmZpZyAob3B0aW9uYWwpXG4gICAqIEBwYXJhbSBjYW5jZWxCdXR0b24gLSBDYW5jZWwgYnV0dG9uIGNvbmZpZyAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRydWUgaWYgY29uZmlybWVkXG4gICAqL1xuICBhc3luYyBjb25maXJtKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGNvbmZpcm1CdXR0b24/OiBQYXJ0aWFsPE1vZGFsQnV0dG9uPixcbiAgICBjYW5jZWxCdXR0b24/OiBQYXJ0aWFsPE1vZGFsQnV0dG9uPlxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm9wZW5TaW1wbGUoe1xuICAgICAgdGl0bGUsXG4gICAgICBjb250ZW50OiBtZXNzYWdlLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHNob3dDbG9zZUJ1dHRvbjogZmFsc2UsXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7IC4uLkRFRkFVTFRfTU9EQUxfQ0FOQ0VMX0JVVFRPTiwgLi4uY2FuY2VsQnV0dG9uIH0sXG4gICAgICAgIHsgLi4uREVGQVVMVF9NT0RBTF9DT05GSVJNX0JVVFRPTiwgLi4uY29uZmlybUJ1dHRvbiB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm9sZSA9PT0gJ2NvbmZpcm0nO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgc2hlZXQgbW9kYWwgKGlPUy1zdHlsZSBib3R0b20gc2hlZXQpLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE1vZGFsIGNvbmZpZ3VyYXRpb24gd2l0aCBzaGVldC1zcGVjaWZpYyBvcHRpb25zXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBtb2RhbCByZXN1bHRcbiAgICovXG4gIGFzeW5jIG9wZW5TaGVldDxUID0gYW55LCBSID0gYW55PihcbiAgICBvcHRpb25zOiBPbWl0PE1vZGFsTWV0YWRhdGE8VD4sICdicmVha3BvaW50cyc+ICYge1xuICAgICAgaW5pdGlhbEJyZWFrcG9pbnQ/OiBudW1iZXI7XG4gICAgICBicmVha3BvaW50cz86IG51bWJlcltdO1xuICAgICAgc2hvd0hhbmRsZT86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPE1vZGFsUmVzdWx0PFI+PiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgaW5pdGlhbEJyZWFrcG9pbnQ6IG9wdGlvbnMuaW5pdGlhbEJyZWFrcG9pbnQgPz8gMC41LFxuICAgICAgICBicmVha3BvaW50czogb3B0aW9ucy5icmVha3BvaW50cyA/PyBbMCwgMC41LCAxXSxcbiAgICAgICAgc2hvd0hhbmRsZTogb3B0aW9ucy5zaG93SGFuZGxlID8/IHRydWUsXG4gICAgICB9LFxuICAgICAgY3NzQ2xhc3M6IFsnc2hlZXQtbW9kYWwnLCBvcHRpb25zLmNzc0NsYXNzXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgZnVsbHNjcmVlbiBtb2RhbC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBNb2RhbCBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBtb2RhbCByZXN1bHRcbiAgICovXG4gIGFzeW5jIG9wZW5GdWxsc2NyZWVuPFQgPSBhbnksIFIgPSBhbnk+KG9wdGlvbnM6IE1vZGFsTWV0YWRhdGE8VD4pOiBQcm9taXNlPE1vZGFsUmVzdWx0PFI+PiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc2l6ZTogJ2Z1bGwnLFxuICAgICAgY3NzQ2xhc3M6IFsnZnVsbHNjcmVlbi1tb2RhbCcsIG9wdGlvbnMuY3NzQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYW4gYWRhcHRpdmUgbW9kYWw6IGZ1bGwtc2NyZWVuIG9uIG1vYmlsZSwgY2VudGVyZWQgY2FyZCBvbiBkZXNrdG9wLlxuICAgKlxuICAgKiBTb2x2ZXMgdHdvIHNoZWV0LW1vZGFsIHByb2JsZW1zIGF0IG9uY2U6XG4gICAqICAxLiBDb250ZW50IHVucmVhY2hhYmxlIOKAlCBubyBhcnRpZmljaWFsIGhlaWdodCBjYXAgZnJvbSBicmVha3BvaW50cy5cbiAgICogIDIuIFNjcm9sbCB0cmlnZ2VycyBkaXNtaXNzIOKAlCBubyBzd2lwZSBnZXN0dXJlLCBvbmx5IGJhY2tkcm9wL2J1dHRvbiBjbG9zZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBNb2RhbCBjb25maWd1cmF0aW9uIChicmVha3BvaW50cy9zaXplL3dpZHRoL2hlaWdodCBhcmUgbWFuYWdlZCBpbnRlcm5hbGx5KVxuICAgKiBAcGFyYW0gdmFyaWFudCAtICd3aWRlJyBmb3Igd2lkZXIgZGVza3RvcCBjYXJkICg3MjBweCB2cyBkZWZhdWx0IDU2MHB4KVxuICAgKi9cbiAgYXN5bmMgb3BlbkFkYXB0aXZlPFQgPSBhbnksIFIgPSBhbnk+KFxuICAgIG9wdGlvbnM6IE9taXQ8TW9kYWxNZXRhZGF0YTxUPiwgJ2JyZWFrcG9pbnRzJyB8ICdzaXplJyB8ICd3aWR0aCcgfCAnaGVpZ2h0Jz4sXG4gICAgdmFyaWFudD86ICd3aWRlJ1xuICApOiBQcm9taXNlPE1vZGFsUmVzdWx0PFI+PiB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFsndmFsLW1vZGFsLWFkYXB0aXZlJ107XG4gICAgaWYgKHZhcmlhbnQgPT09ICd3aWRlJykgY2xhc3Nlcy5wdXNoKCd2YWwtbW9kYWwtYWRhcHRpdmUtLXdpZGUnKTtcbiAgICBpZiAob3B0aW9ucy5jc3NDbGFzcykgY2xhc3Nlcy5wdXNoKG9wdGlvbnMuY3NzQ2xhc3MpO1xuICAgIHJldHVybiB0aGlzLm9wZW4oe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNzc0NsYXNzOiBjbGFzc2VzLmpvaW4oJyAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzZXMgdGhlIHRvcC1tb3N0IG1vZGFsLlxuICAgKiBAcGFyYW0gZGF0YSAtIE9wdGlvbmFsIGRhdGEgdG8gcmV0dXJuXG4gICAqIEBwYXJhbSByb2xlIC0gT3B0aW9uYWwgcm9sZVxuICAgKi9cbiAgYXN5bmMgZGlzbWlzcyhkYXRhPzogYW55LCByb2xlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxDb250cm9sbGVyLmRpc21pc3MoZGF0YSwgcm9sZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdG9wLW1vc3QgbW9kYWwuXG4gICAqL1xuICBhc3luYyBnZXRUb3AoKTogUHJvbWlzZTxIVE1MSW9uTW9kYWxFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxDb250cm9sbGVyLmdldFRvcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDYW5EaXNtaXNzKFxuICAgIGNhbkRpc21pc3M6IGJvb2xlYW4gfCAoKCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pXG4gICk6IGJvb2xlYW4gfCAoKGRhdGE/OiBhbnksIHJvbGU/OiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj4pIHtcbiAgICBpZiAodHlwZW9mIGNhbkRpc21pc3MgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGNhbkRpc21pc3M7XG4gICAgfVxuICAgIC8vIFdyYXAgdGhlIGZ1bmN0aW9uIHRvIGVuc3VyZSBpdCByZXR1cm5zIGEgUHJvbWlzZVxuICAgIHJldHVybiBhc3luYyAoZGF0YT86IGFueSwgcm9sZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gY2FuRGlzbWlzcygpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ3NzQ2xhc3NlcyhvcHRpb25zOiBNb2RhbE1ldGFkYXRhKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFsndmFsLW1vZGFsJ107XG5cbiAgICBpZiAob3B0aW9ucy5zaXplKSB7XG4gICAgICBjbGFzc2VzLnB1c2goYG1vZGFsLSR7b3B0aW9ucy5zaXplfWApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhlYWRlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdtb2RhbC13aXRoLWhlYWRlcicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmZvb3Rlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdtb2RhbC13aXRoLWZvb3RlcicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNzc0NsYXNzKSB7XG4gICAgICBjbGFzc2VzLnB1c2gob3B0aW9ucy5jc3NDbGFzcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG59XG4iXX0=
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFLTCxXQUFXLEVBQ1gsNEJBQTRCLEVBQzVCLDJCQUEyQixHQUM1QixNQUFNLFNBQVMsQ0FBQztBQUNqQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7O0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0NHO0FBSUgsTUFBTSxPQUFPLFlBQVk7SUFDdkIsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO0lBQUcsQ0FBQztJQUV4RDs7OztPQUlHO0lBQ0gsS0FBSyxDQUFDLElBQUksQ0FBbUIsT0FBeUI7UUFDcEQsMkVBQTJFO1FBQzNFLGtFQUFrRTtRQUNsRSx5RUFBeUU7UUFDekUseUVBQXlFO1FBQ3pFLDRCQUE0QjtRQUM1QixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDO1FBQzNELDRFQUE0RTtRQUM1RSxvRkFBb0Y7UUFDcEYsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUN4RixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpELE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFD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LE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQUFDLE9BQXNCO1FBQzVDLE1BQU0sT0FBTyxHQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFeEMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixPQUFPLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQixDQUFDOytHQTFOVSxZQUFZO21IQUFaLFlBQVksY0FGWCxNQUFNOzs0RkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1vZGFsQ29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyL3N0YW5kYWxvbmUnO1xuaW1wb3J0IHtcbiAgTW9kYWxNZXRhZGF0YSxcbiAgU2ltcGxlTW9kYWxNZXRhZGF0YSxcbiAgTW9kYWxSZXN1bHQsXG4gIE1vZGFsQnV0dG9uLFxuICBNT0RBTF9TSVpFUyxcbiAgREVGQVVMVF9NT0RBTF9DT05GSVJNX0JVVFRPTixcbiAgREVGQVVMVF9NT0RBTF9DQU5DRUxfQlVUVE9OLFxufSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFNpbXBsZU1vZGFsQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vc2ltcGxlLW1vZGFsLWNvbnRlbnQuY29tcG9uZW50JztcblxuLyoqXG4gKiBNb2RhbFNlcnZpY2VcbiAqXG4gKiBBIHNlcnZpY2UgZm9yIGNyZWF0aW5nIGFuZCBtYW5hZ2luZyBtb2RhbHMgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlIEJhc2ljIGNvbXBvbmVudCBtb2RhbFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kYWxTZXJ2aWNlLm9wZW4oe1xuICogICBjb21wb25lbnQ6IE15Rm9ybUNvbXBvbmVudCxcbiAqICAgY29tcG9uZW50UHJvcHM6IHsgdXNlcklkOiAxMjMgfSxcbiAqICAgaGVhZGVyOiB7IHRpdGxlOiAnRWRpdCBVc2VyJywgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlIH0sXG4gKiAgIHNpemU6ICdtZWRpdW0nXG4gKiB9KTtcbiAqXG4gKiBpZiAocmVzdWx0LnJvbGUgPT09ICdjb25maXJtJykge1xuICogICBjb25zb2xlLmxvZygnU2F2ZWQ6JywgcmVzdWx0LmRhdGEpO1xuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU2ltcGxlIGNvbnRlbnQgbW9kYWxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGF3YWl0IG1vZGFsU2VydmljZS5vcGVuU2ltcGxlKHtcbiAqICAgdGl0bGU6ICdUZXJtcyBvZiBTZXJ2aWNlJyxcbiAqICAgY29udGVudDogJzxwPlRlcm1zIGNvbnRlbnQgaGVyZS4uLjwvcD4nLFxuICogICBzaXplOiAnbGFyZ2UnLFxuICogICBzaG93Q2xvc2VCdXR0b246IHRydWVcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGUgU2hlZXQgbW9kYWwgKG1vYmlsZSlcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG1vZGFsU2VydmljZS5vcGVuU2hlZXQoe1xuICogICBjb21wb25lbnQ6IEZpbHRlckNvbXBvbmVudCxcbiAqICAgYnJlYWtwb2ludHM6IHtcbiAqICAgICBpbml0aWFsQnJlYWtwb2ludDogMC41LFxuICogICAgIGJyZWFrcG9pbnRzOiBbMCwgMC41LCAxXSxcbiAqICAgICBzaG93SGFuZGxlOiB0cnVlXG4gKiAgIH1cbiAqIH0pO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbFNlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1vZGFsQ29udHJvbGxlcjogTW9kYWxDb250cm9sbGVyKSB7fVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIG1vZGFsIHdpdGggYSBjb21wb25lbnQuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gTW9kYWwgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbW9kYWwgcmVzdWx0XG4gICAqL1xuICBhc3luYyBvcGVuPFQgPSBhbnksIFIgPSBhbnk+KG9wdGlvbnM6IE1vZGFsTWV0YWRhdGE8VD4pOiBQcm9taXNlPE1vZGFsUmVzdWx0PFI+PiB7XG4gICAgLy8gQSBzaGVldCBtb2RhbCAoYnJlYWtwb2ludHMgcHJlc2VudCkgZ2V0cyBpdHMgaGVpZ2h0IGZyb20gdGhlIGJyZWFrcG9pbnRzXG4gICAgLy8gYW5kIG11c3Qgc3BhbiB0aGUgZnVsbCB2aWV3cG9ydCB3aWR0aC4gQXBwbHlpbmcgYSBzaXplIHByZXNldCdzXG4gICAgLy8gYC0td2lkdGhgL2AtLWhlaWdodGAgaGVyZSBjb2xsYXBzZXMgdGhlIHNoZWV0IChlLmcuIGBhdXRvYCDihpIgc2hyaW5rIHRvXG4gICAgLy8gY29udGVudCkgb3IgZmlnaHRzIHRoZSBicmVha3BvaW50IGhlaWdodC4gU28gd2hlbiBpdCdzIGEgc2hlZXQgd2Ugc2tpcFxuICAgIC8vIHRoZSBzaXplIHByZXNldCBlbnRpcmVseS5cbiAgICBjb25zdCBpc1NoZWV0ID0gISFvcHRpb25zLmJyZWFrcG9pbnRzPy5icmVha3BvaW50cz8ubGVuZ3RoO1xuICAgIC8vIE9ubHkgYXBwbHkgYSBzaXplIHByZXNldCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkIOKAlCBjYWxsZXJzIHRoYXQgcmVseSBvblxuICAgIC8vIENTUyBjbGFzcyBzaXppbmcgKGUuZy4gb3BlbkFkYXB0aXZlKSBtdXN0IG5vdCBoYXZlIGlubGluZSBzdHlsZXMgb3ZlcnJpZGluZyB0aGVtLlxuICAgIGNvbnN0IHNpemUgPSBpc1NoZWV0ID8gdW5kZWZpbmVkIDogb3B0aW9ucy5zaXplID8gTU9EQUxfU0laRVNbb3B0aW9ucy5zaXplXSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBjc3NDbGFzc2VzID0gdGhpcy5idWlsZENzc0NsYXNzZXMob3B0aW9ucyk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IG9wdGlvbnMuY29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5jb21wb25lbnRQcm9wcyxcbiAgICAgICAgLy8gUGFzcyBtb2RhbCByZWZlcmVuY2UgZm9yIGRpc21pc3MgZnJvbSB3aXRoaW4gY29tcG9uZW50XG4gICAgICAgIF9tb2RhbFJlZjoge1xuICAgICAgICAgIGRpc21pc3M6IChkYXRhPzogYW55LCByb2xlPzogc3RyaW5nKSA9PiBtb2RhbC5kaXNtaXNzKGRhdGEsIHJvbGUpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGlkOiBvcHRpb25zLmlkLFxuICAgICAgc2hvd0JhY2tkcm9wOiBvcHRpb25zLnNob3dCYWNrZHJvcCA/PyB0cnVlLFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiBvcHRpb25zLmJhY2tkcm9wRGlzbWlzcyA/PyB0cnVlLFxuICAgICAga2V5Ym9hcmRDbG9zZTogb3B0aW9ucy5rZXlib2FyZENsb3NlID8/IHRydWUsXG4gICAgICBjc3NDbGFzczogY3NzQ2xhc3NlcyxcbiAgICAgIG1vZGU6IG9wdGlvbnMubW9kZSxcbiAgICAgIGFuaW1hdGVkOiBvcHRpb25zLmFuaW1hdGVkID8/IHRydWUsXG4gICAgICBjYW5EaXNtaXNzOiB0aGlzLm5vcm1hbGl6ZUNhbkRpc21pc3Mob3B0aW9ucy5jYW5EaXNtaXNzID8/IHRydWUpLFxuICAgICAgcHJlc2VudGluZ0VsZW1lbnQ6IG9wdGlvbnMucHJlc2VudGluZ0VsZW1lbnQsXG4gICAgICAvLyBTaGVldCBtb2RhbCBvcHRpb25zXG4gICAgICBpbml0aWFsQnJlYWtwb2ludDogb3B0aW9ucy5icmVha3BvaW50cz8uaW5pdGlhbEJyZWFrcG9pbnQsXG4gICAgICBicmVha3BvaW50czogb3B0aW9ucy5icmVha3BvaW50cz8uYnJlYWtwb2ludHMsXG4gICAgICBoYW5kbGU6IG9wdGlvbnMuYnJlYWtwb2ludHM/LnNob3dIYW5kbGUsXG4gICAgICBoYW5kbGVCZWhhdmlvcjogb3B0aW9ucy5icmVha3BvaW50cz8uaGFuZGxlQmVoYXZpb3IsXG4gICAgfSk7XG5cbiAgICAvLyBBcHBseSBjdXN0b20gc2l6ZSBzdHlsZXMuIFNraXBwZWQgZm9yIHNoZWV0IG1vZGFscyDigJQgdGhlaXIgZGltZW5zaW9uc1xuICAgIC8vIGNvbWUgZnJvbSB0aGUgYnJlYWtwb2ludHMgKElvbmljIHNwYW5zIHRoZSBzaGVldCBmdWxsLXdpZHRoIGFuZCB1c2VzIHRoZVxuICAgIC8vIGJyZWFrcG9pbnQgdmFsdWVzIGZvciBoZWlnaHQpLlxuICAgIGlmICghaXNTaGVldCAmJiAob3B0aW9ucy53aWR0aCB8fCBvcHRpb25zLmhlaWdodCB8fCBzaXplKSkge1xuICAgICAgY29uc3QgbW9kYWxFbCA9IG1vZGFsIGFzIEhUTUxJb25Nb2RhbEVsZW1lbnQ7XG4gICAgICBtb2RhbEVsLnN0eWxlLnNldFByb3BlcnR5KCctLXdpZHRoJywgb3B0aW9ucy53aWR0aCB8fCBzaXplPy53aWR0aCB8fCAnYXV0bycpO1xuICAgICAgbW9kYWxFbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oZWlnaHQnLCBvcHRpb25zLmhlaWdodCB8fCBzaXplPy5oZWlnaHQgfHwgJzUwdmgnKTtcbiAgICB9XG5cbiAgICBhd2FpdCBtb2RhbC5wcmVzZW50KCk7XG4gICAgY29uc3QgeyBkYXRhLCByb2xlIH0gPSBhd2FpdCBtb2RhbC5vbkRpZERpc21pc3MoKTtcblxuICAgIHJldHVybiB7IGRhdGEsIHJvbGUgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyBhIHNpbXBsZSBjb250ZW50IG1vZGFsIHdpdGhvdXQgYSBjdXN0b20gY29tcG9uZW50LlxuICAgKiBVc2VzIElvbmljJ3MgYWxlcnQtbGlrZSBzdHlsaW5nIGJ1dCB3aXRoIG1vZGFsIGNhcGFiaWxpdGllcy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBTaW1wbGUgbW9kYWwgY29uZmlndXJhdGlvblxuICAgKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byB0aGUgbW9kYWwgcmVzdWx0XG4gICAqL1xuICBhc3luYyBvcGVuU2ltcGxlKG9wdGlvbnM6IFNpbXBsZU1vZGFsTWV0YWRhdGEpOiBQcm9taXNlPE1vZGFsUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7XG4gICAgICBjb21wb25lbnQ6IFNpbXBsZU1vZGFsQ29udGVudENvbXBvbmVudCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiB7XG4gICAgICAgIHRpdGxlOiBvcHRpb25zLnRpdGxlLFxuICAgICAgICBjb250ZW50OiBvcHRpb25zLmNvbnRlbnQsXG4gICAgICAgIGJ1dHRvbnM6IG9wdGlvbnMuYnV0dG9ucyB8fCBbREVGQVVMVF9NT0RBTF9DQU5DRUxfQlVUVE9OLCBERUZBVUxUX01PREFMX0NPTkZJUk1fQlVUVE9OXSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiBvcHRpb25zLnNob3dDbG9zZUJ1dHRvbiA/PyB0cnVlLFxuICAgICAgfSxcbiAgICAgIHNpemU6IG9wdGlvbnMuc2l6ZSB8fCAnbWVkaXVtJyxcbiAgICAgIGJhY2tkcm9wRGlzbWlzczogb3B0aW9ucy5iYWNrZHJvcERpc21pc3MgPz8gdHJ1ZSxcbiAgICAgIGNzc0NsYXNzOiBbJ3NpbXBsZS1tb2RhbCcsIG9wdGlvbnMuY3NzQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYSBjb25maXJtYXRpb24gbW9kYWwuXG4gICAqIEBwYXJhbSB0aXRsZSAtIE1vZGFsIHRpdGxlXG4gICAqIEBwYXJhbSBtZXNzYWdlIC0gTW9kYWwgbWVzc2FnZVxuICAgKiBAcGFyYW0gY29uZmlybUJ1dHRvbiAtIENvbmZpcm0gYnV0dG9uIGNvbmZpZyAob3B0aW9uYWwpXG4gICAqIEBwYXJhbSBjYW5jZWxCdXR0b24gLSBDYW5jZWwgYnV0dG9uIGNvbmZpZyAob3B0aW9uYWwpXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRydWUgaWYgY29uZmlybWVkXG4gICAqL1xuICBhc3luYyBjb25maXJtKFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGNvbmZpcm1CdXR0b24/OiBQYXJ0aWFsPE1vZGFsQnV0dG9uPixcbiAgICBjYW5jZWxCdXR0b24/OiBQYXJ0aWFsPE1vZGFsQnV0dG9uPlxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLm9wZW5TaW1wbGUoe1xuICAgICAgdGl0bGUsXG4gICAgICBjb250ZW50OiBtZXNzYWdlLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHNob3dDbG9zZUJ1dHRvbjogZmFsc2UsXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlLFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7IC4uLkRFRkFVTFRfTU9EQUxfQ0FOQ0VMX0JVVFRPTiwgLi4uY2FuY2VsQnV0dG9uIH0sXG4gICAgICAgIHsgLi4uREVGQVVMVF9NT0RBTF9DT05GSVJNX0JVVFRPTiwgLi4uY29uZmlybUJ1dHRvbiB9LFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIHJldHVybiByZXN1bHQucm9sZSA9PT0gJ2NvbmZpcm0nO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgc2hlZXQgbW9kYWwgKGlPUy1zdHlsZSBib3R0b20gc2hlZXQpLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIE1vZGFsIGNvbmZpZ3VyYXRpb24gd2l0aCBzaGVldC1zcGVjaWZpYyBvcHRpb25zXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBtb2RhbCByZXN1bHRcbiAgICovXG4gIGFzeW5jIG9wZW5TaGVldDxUID0gYW55LCBSID0gYW55PihcbiAgICBvcHRpb25zOiBPbWl0PE1vZGFsTWV0YWRhdGE8VD4sICdicmVha3BvaW50cyc+ICYge1xuICAgICAgaW5pdGlhbEJyZWFrcG9pbnQ/OiBudW1iZXI7XG4gICAgICBicmVha3BvaW50cz86IG51bWJlcltdO1xuICAgICAgc2hvd0hhbmRsZT86IGJvb2xlYW47XG4gICAgfVxuICApOiBQcm9taXNlPE1vZGFsUmVzdWx0PFI+PiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgYnJlYWtwb2ludHM6IHtcbiAgICAgICAgaW5pdGlhbEJyZWFrcG9pbnQ6IG9wdGlvbnMuaW5pdGlhbEJyZWFrcG9pbnQgPz8gMC41LFxuICAgICAgICBicmVha3BvaW50czogb3B0aW9ucy5icmVha3BvaW50cyA/PyBbMCwgMC41LCAxXSxcbiAgICAgICAgc2hvd0hhbmRsZTogb3B0aW9ucy5zaG93SGFuZGxlID8/IHRydWUsXG4gICAgICB9LFxuICAgICAgY3NzQ2xhc3M6IFsnc2hlZXQtbW9kYWwnLCBvcHRpb25zLmNzc0NsYXNzXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgZnVsbHNjcmVlbiBtb2RhbC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBNb2RhbCBjb25maWd1cmF0aW9uXG4gICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSBtb2RhbCByZXN1bHRcbiAgICovXG4gIGFzeW5jIG9wZW5GdWxsc2NyZWVuPFQgPSBhbnksIFIgPSBhbnk+KG9wdGlvbnM6IE1vZGFsTWV0YWRhdGE8VD4pOiBQcm9taXNlPE1vZGFsUmVzdWx0PFI+PiB7XG4gICAgcmV0dXJuIHRoaXMub3Blbih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc2l6ZTogJ2Z1bGwnLFxuICAgICAgY3NzQ2xhc3M6IFsnZnVsbHNjcmVlbi1tb2RhbCcsIG9wdGlvbnMuY3NzQ2xhc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJyksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgYW4gYWRhcHRpdmUgbW9kYWw6IGZ1bGwtc2NyZWVuIG9uIG1vYmlsZSwgY2VudGVyZWQgY2FyZCBvbiBkZXNrdG9wLlxuICAgKlxuICAgKiBTb2x2ZXMgdHdvIHNoZWV0LW1vZGFsIHByb2JsZW1zIGF0IG9uY2U6XG4gICAqICAxLiBDb250ZW50IHVucmVhY2hhYmxlIOKAlCBubyBhcnRpZmljaWFsIGhlaWdodCBjYXAgZnJvbSBicmVha3BvaW50cy5cbiAgICogIDIuIFNjcm9sbCB0cmlnZ2VycyBkaXNtaXNzIOKAlCBubyBzd2lwZSBnZXN0dXJlLCBvbmx5IGJhY2tkcm9wL2J1dHRvbiBjbG9zZS5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBNb2RhbCBjb25maWd1cmF0aW9uIChicmVha3BvaW50cy9zaXplL3dpZHRoL2hlaWdodCBhcmUgbWFuYWdlZCBpbnRlcm5hbGx5KVxuICAgKiBAcGFyYW0gdmFyaWFudCAtICd3aWRlJyBmb3Igd2lkZXIgZGVza3RvcCBjYXJkICg3MjBweCB2cyBkZWZhdWx0IDU2MHB4KVxuICAgKi9cbiAgYXN5bmMgb3BlbkFkYXB0aXZlPFQgPSBhbnksIFIgPSBhbnk+KFxuICAgIG9wdGlvbnM6IE9taXQ8TW9kYWxNZXRhZGF0YTxUPiwgJ2JyZWFrcG9pbnRzJyB8ICdzaXplJyB8ICd3aWR0aCcgfCAnaGVpZ2h0Jz4sXG4gICAgdmFyaWFudD86ICd3aWRlJ1xuICApOiBQcm9taXNlPE1vZGFsUmVzdWx0PFI+PiB7XG4gICAgY29uc3QgY2xhc3NlcyA9IFsndmFsLW1vZGFsLWFkYXB0aXZlJ107XG4gICAgaWYgKHZhcmlhbnQgPT09ICd3aWRlJykgY2xhc3Nlcy5wdXNoKCd2YWwtbW9kYWwtYWRhcHRpdmUtLXdpZGUnKTtcbiAgICBpZiAob3B0aW9ucy5jc3NDbGFzcykgY2xhc3Nlcy5wdXNoKG9wdGlvbnMuY3NzQ2xhc3MpO1xuICAgIHJldHVybiB0aGlzLm9wZW4oe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGNzc0NsYXNzOiBjbGFzc2VzLmpvaW4oJyAnKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNtaXNzZXMgdGhlIHRvcC1tb3N0IG1vZGFsLlxuICAgKiBAcGFyYW0gZGF0YSAtIE9wdGlvbmFsIGRhdGEgdG8gcmV0dXJuXG4gICAqIEBwYXJhbSByb2xlIC0gT3B0aW9uYWwgcm9sZVxuICAgKi9cbiAgYXN5bmMgZGlzbWlzcyhkYXRhPzogYW55LCByb2xlPzogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxDb250cm9sbGVyLmRpc21pc3MoZGF0YSwgcm9sZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdG9wLW1vc3QgbW9kYWwuXG4gICAqL1xuICBhc3luYyBnZXRUb3AoKTogUHJvbWlzZTxIVE1MSW9uTW9kYWxFbGVtZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxDb250cm9sbGVyLmdldFRvcCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBub3JtYWxpemVDYW5EaXNtaXNzKFxuICAgIGNhbkRpc21pc3M6IGJvb2xlYW4gfCAoKCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4pXG4gICk6IGJvb2xlYW4gfCAoKGRhdGE/OiBhbnksIHJvbGU/OiBzdHJpbmcpID0+IFByb21pc2U8Ym9vbGVhbj4pIHtcbiAgICBpZiAodHlwZW9mIGNhbkRpc21pc3MgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGNhbkRpc21pc3M7XG4gICAgfVxuICAgIC8vIFdyYXAgdGhlIGZ1bmN0aW9uIHRvIGVuc3VyZSBpdCByZXR1cm5zIGEgUHJvbWlzZVxuICAgIHJldHVybiBhc3luYyAoZGF0YT86IGFueSwgcm9sZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gY2FuRGlzbWlzcygpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQ3NzQ2xhc3NlcyhvcHRpb25zOiBNb2RhbE1ldGFkYXRhKTogc3RyaW5nIHtcbiAgICBjb25zdCBjbGFzc2VzOiBzdHJpbmdbXSA9IFsndmFsLW1vZGFsJ107XG5cbiAgICBpZiAob3B0aW9ucy5zaXplKSB7XG4gICAgICBjbGFzc2VzLnB1c2goYG1vZGFsLSR7b3B0aW9ucy5zaXplfWApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmhlYWRlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdtb2RhbC13aXRoLWhlYWRlcicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmZvb3Rlcikge1xuICAgICAgY2xhc3Nlcy5wdXNoKCdtb2RhbC13aXRoLWZvb3RlcicpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNzc0NsYXNzKSB7XG4gICAgICBjbGFzc2VzLnB1c2gob3B0aW9ucy5jc3NDbGFzcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuICB9XG59XG4iXX0=
|