@hmcts/ccd-case-ui-toolkit 7.1.34-qm-wa → 7.1.34
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/shared/components/case-editor/case-edit/case-edit.component.mjs +3 -3
- package/esm2022/lib/shared/components/case-editor/services/event-completion-state-machine.service.mjs +14 -2
- package/esm2022/lib/shared/components/case-editor/services/work-allocation.service.mjs +5 -1
- package/esm2022/lib/shared/components/palette/document/write-document-field.component.mjs +17 -5
- package/esm2022/lib/shared/components/palette/history/event-log/event-log.component.mjs +9 -9
- package/esm2022/lib/shared/components/palette/linked-cases/components/link-cases/link-cases.component.mjs +17 -17
- package/esm2022/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.mjs +10 -10
- package/esm2022/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.mjs +30 -13
- package/esm2022/lib/shared/components/palette/query-management/components/qualifying-questions/qualifying-question-detail/qualifying-question-detail.component.mjs +12 -10
- package/esm2022/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.mjs +1 -22
- package/esm2022/lib/shared/components/palette/query-management/components/query-details/query-details.component.mjs +5 -19
- package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.mjs +114 -103
- package/esm2022/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.mjs +45 -35
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs +268 -233
- package/fesm2022/hmcts-ccd-case-ui-toolkit.mjs.map +1 -1
- package/lib/shared/components/case-editor/services/event-completion-state-machine.service.d.ts.map +1 -1
- package/lib/shared/components/case-editor/services/work-allocation.service.d.ts.map +1 -1
- package/lib/shared/components/palette/document/write-document-field.component.d.ts +3 -1
- package/lib/shared/components/palette/document/write-document-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/components/unlink-cases/unlink-cases.component.d.ts.map +1 -1
- package/lib/shared/components/palette/linked-cases/write-linked-cases-field.component.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/components/qualifying-questions/qualifying-question-detail/qualifying-question-detail.component.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts +0 -1
- package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/components/query-details/query-details.component.d.ts +4 -11
- package/lib/shared/components/palette/query-management/components/query-details/query-details.component.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.d.ts +2 -1
- package/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.d.ts.map +1 -1
- package/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.d.ts +2 -1
- package/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -337,8 +337,8 @@ export class CaseEditComponent {
|
|
|
337
337
|
const caseField = caseFieldsLookup[key];
|
|
338
338
|
// If caseField.hidden is NOT truthy and also NOT equal to false, then it must be null/undefined (remember that
|
|
339
339
|
// both null and undefined are equal to *neither false nor true*)
|
|
340
|
-
if (caseField
|
|
341
|
-
(caseField
|
|
340
|
+
if (caseField?.retain_hidden_value &&
|
|
341
|
+
(caseField?.hidden || (caseField?.hidden !== false && parentField?.hidden))) {
|
|
342
342
|
if (caseField.field_type.type === 'Complex') {
|
|
343
343
|
this.handleComplexField(caseField, formGroup, key, rawFormValueData);
|
|
344
344
|
}
|
|
@@ -539,4 +539,4 @@ export class CaseEditComponent {
|
|
|
539
539
|
type: Output
|
|
540
540
|
}] }); })();
|
|
541
541
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CaseEditComponent, { className: "CaseEditComponent", filePath: "lib/shared/components/case-editor/case-edit/case-edit.component.ts", lineNumber: 35 }); })();
|
|
542
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBYyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBSVUsZ0JBQWdCLEVBQy9CLFFBQVEsRUFDVCxNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUFFLFdBQVcsRUFBRSxnQkFB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RSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFDLEVBQUUsR0FBQyxFQUFFLEdBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUN6RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyx1QkFBZ0QsRUFBRSxZQUEwQjtRQUN6RyxJQUFJLHVCQUF1QixDQUFDLE9BQU8sS0FBSyxZQUFZLENBQUMsT0FBTztlQUN2RCx1QkFBdUIsQ0FBQyxNQUFNLEtBQUssWUFBWSxDQUFDLE1BQU07ZUFDdEQsdUJBQXVCLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7MkVBaGpCVSxpQkFBaUI7NkRBQWpCLGlCQUFpQixzUUFGakIsQ0FBQyxjQUFjLENBQUM7WUNoQzdCLGdDQUErQjs7O2lGRGtDbEIsaUJBQWlCO2NBTjdCLFNBQVM7MkJBQ0UsZUFBZSxhQUdkLENBQUMsY0FBYyxDQUFDO3NpQkFPcEIsWUFBWTtrQkFEbEIsS0FBSztZQUlDLE1BQU07a0JBRFosS0FBSztZQUlDLFFBQVE7a0JBRGQsS0FBSztZQUlDLFNBQVM7a0JBRGYsS0FBSztZQUlDLFdBQVc7a0JBRGpCLEtBQUs7WUFJQyxTQUFTO2tCQURmLE1BQU07WUFJQSxTQUFTO2tCQURmLE1BQU07O2tGQXRCSSxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaW5hbGl6ZSwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdEFwcENvbmZpZyB9IGZyb20gJy4uLy4uLy4uLy4uL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgQ29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9ucy9jb25zdGFudHMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxTaG93UmVnaXN0cmFyU2VydmljZSwgR3JleUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7XG4gIENhc2VFZGl0Q2FzZVN1Ym1pdCwgQ2FzZUVkaXRHZW5lcmF0ZUNhc2VFdmVudERhdGEsIENhc2VFZGl0R2V0TmV4dFBhZ2UsXG4gIENhc2VFZGl0U3VibWl0Rm9ybSxcbiAgQ2FzZUVkaXRvbkV2ZW50Q2FuQmVDb21wbGV0ZWQsXG4gIENhc2VFdmVudERhdGEsIENhc2VFdmVudFRyaWdnZXIsIENhc2VGaWVsZCxcbiAgQ2FzZVZpZXcsIERyYWZ0LCBIdHRwRXJyb3IsIFByb2ZpbGVcbn0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3VzZXIvdXNlci1pbmZvLm1vZGVsJztcbmltcG9ydCB7IEV2ZW50RGV0YWlscywgVGFzaywgVGFza0V2ZW50Q29tcGxldGlvbkluZm8gfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL1Rhc2snO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBGaWVsZHNQdXJnZXIsIEZpZWxkc1V0aWxzLCBGb3JtRXJyb3JTZXJ2aWNlLCBGb3JtVmFsdWVTZXJ2aWNlLCBMb2FkaW5nU2VydmljZSxcbiAgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBXaW5kb3dTZXJ2aWNlXG59IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbiwgV2l6YXJkLCBXaXphcmRQYWdlIH0gZnJvbSAnLi4vZG9tYWluJztcbmltcG9ydCB7IEV2ZW50Q29tcGxldGlvblBhcmFtcyB9IGZyb20gJy4uL2RvbWFpbi9ldmVudC1jb21wbGV0aW9uLXBhcmFtcy5tb2RlbCc7XG5pbXBvcnQgeyBDYXNlTm90aWZpZXIsIFdpemFyZEZhY3RvcnlTZXJ2aWNlLCBXb3JrQWxsb2NhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBWYWxpZFBhZ2VMaXN0Q2FzZUZpZWxkc1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy92YWxpZC1wYWdlLWxpc3QtY2FzZUZpZWxkcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnY2FzZS1lZGl0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4uL2Nhc2UtZWRpdC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0dyZXlCYXJTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDYXNlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPUklHSU5fUVVFUllfUEFSQU0gPSAnb3JpZ2luJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTEVSVF9NRVNTQUdFID0gJ1BhZ2UgaXMgYmVpbmcgcmVmcmVzaGVkIHNvIHlvdSB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBldmVudC4nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBldmVudFRyaWdnZXI6IENhc2VFdmVudFRyaWdnZXI7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1Ym1pdDogKGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEsIHByb2ZpbGU/OiBQcm9maWxlKSA9PiBPYnNlcnZhYmxlPG9iamVjdD47XG5cbiAgQElucHV0KClcbiAgcHVibGljIHZhbGlkYXRlOiAoY2FzZUV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSwgcGFnZUlkOiBzdHJpbmcpID0+IE9ic2VydmFibGU8b2JqZWN0PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2F2ZURyYWZ0OiAoY2FzZUV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSkgPT4gT2JzZXJ2YWJsZTxEcmFmdD47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNhc2VEZXRhaWxzOiBDYXNlVmlldztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNhbmNlbGxlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzdWJtaXR0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyB3aXphcmQ6IFdpemFyZDtcblxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBjb25maXJtYXRpb246IENvbmZpcm1hdGlvbjtcblxuICBwdWJsaWMgbmF2aWdhdGlvbk9yaWdpbjogYW55O1xuXG4gIHB1YmxpYyBpbml0aWFsVXJsOiBzdHJpbmc7XG5cbiAgcHVibGljIGlzUGFnZVJlZnJlc2hlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgaXNTdWJtaXR0aW5nOiBib29sZWFuO1xuXG4gIHB1YmxpYyBldmVudENvbXBsZXRpb25QYXJhbXM6IEV2ZW50Q29tcGxldGlvblBhcmFtcztcblxuICBwdWJsaWMgc3VibWl0UmVzcG9uc2U6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgcHVibGljIGlzRXZlbnRDb21wbGV0aW9uQ2hlY2tzUmVxdWlyZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgaXNDYXNlRmxhZ1N1Ym1pc3Npb24gPSBmYWxzZTtcblxuICBwdWJsaWMgaWdub3JlV2FybmluZyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpc0xpbmtlZENhc2VzU3VibWlzc2lvbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBlcnJvcjogSHR0cEVycm9yO1xuXG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc1N1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgcHVibGljIHZhbGlkUGFnZUxpc3Q6IFdpemFyZFBhZ2VbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FzZU5vdGlmaWVyOiBDYXNlTm90aWZpZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpZWxkc1V0aWxzOiBGaWVsZHNVdGlscyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZpZWxkc1B1cmdlcjogRmllbGRzUHVyZ2VyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cmFyU2VydmljZTogQ29uZGl0aW9uYWxTaG93UmVnaXN0cmFyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpemFyZEZhY3Rvcnk6IFdpemFyZEZhY3RvcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3dzU2VydmljZTogV2luZG93U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1WYWx1ZVNlcnZpY2U6IEZvcm1WYWx1ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtRXJyb3JTZXJ2aWNlOiBGb3JtRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1NlcnZpY2U6IExvYWRpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmFsaWRQYWdlTGlzdENhc2VGaWVsZHNTZXJ2aWNlOiBWYWxpZFBhZ2VMaXN0Q2FzZUZpZWxkc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3b3JrQWxsb2NhdGlvblNlcnZpY2U6IFdvcmtBbGxvY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWJzdHJhY3RDb25maWc6IEFic3RyYWN0QXBwQ29uZmlnXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy53aXphcmQgPSB0aGlzLndpemFyZEZhY3RvcnkuY3JlYXRlKHRoaXMuZXZlbnRUcmlnZ2VyKTtcbiAgICB0aGlzLmluaXRpYWxVcmwgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdldmVudFVybCcpO1xuICAgIHRoaXMuaXNQYWdlUmVmcmVzaGVkID0gSlNPTi5wYXJzZSh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdpc1BhZ2VSZWZyZXNoZWQnKSk7XG5cbiAgICB0aGlzLmNoZWNrUGFnZVJlZnJlc2goKTtcblxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGF0YTogbmV3IEZvcm1Hcm91cCh7fSksXG4gICAgICBldmVudDogdGhpcy5mYi5ncm91cCh7XG4gICAgICAgIGlkOiBbdGhpcy5ldmVudFRyaWdnZXIuaWQsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgICBzdW1tYXJ5OiBbJyddLFxuICAgICAgICBkZXNjcmlwdGlvbjogWycnXVxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xuICAgICAgdGhpcy5uYXZpZ2F0aW9uT3JpZ2luID0gcGFyYW1zW0Nhc2VFZGl0Q29tcG9uZW50Lk9SSUdJTl9RVUVSWV9QQVJBTV07XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5jYWxsYmFja0Vycm9yc1N1YmplY3QpIHtcbiAgICAgIHRoaXMuY2FsbGJhY2tFcnJvcnNTdWJqZWN0LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGNoZWNrUGFnZVJlZnJlc2goKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaXNQYWdlUmVmcmVzaGVkICYmIHRoaXMuaW5pdGlhbFVybCkge1xuICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnZXZlbnRVcmwnKTtcbiAgICAgIHRoaXMud2luZG93c1NlcnZpY2UuYWxlcnQoQ2FzZUVkaXRDb21wb25lbnQuQUxFUlRfTUVTU0FHRSk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5pbml0aWFsVXJsXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWdlKHBhZ2VJZDogc3RyaW5nKTogV2l6YXJkUGFnZSB7XG4gICAgcmV0dXJuIHRoaXMud2l6YXJkLmdldFBhZ2UocGFnZUlkLCB0aGlzLmZpZWxkc1V0aWxzLmJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZSh0aGlzLmV2ZW50VHJpZ2dlciwgdGhpcy5mb3JtKSk7XG4gIH1cblxuICBwdWJsaWMgZmlyc3QoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZmlyc3RQYWdlID0gdGhpcy53aXphcmQuZmlyc3RQYWdlKHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKHRoaXMuZXZlbnRUcmlnZ2VyLCB0aGlzLmZvcm0pKTtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2ZpcnN0UGFnZSA/IGZpcnN0UGFnZS5pZCA6ICdzdWJtaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9QYWdlKHBhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZShwYWdlSWQpO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGFnZSA/IHBhZ2UuaWQgOiAnc3VibWl0J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0KGN1cnJlbnRQYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuaW5pdGlhbFVybCA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2V2ZW50VXJsJyk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsICYmICF0aGlzLmluaXRpYWxVcmwpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2V2ZW50VXJsJywgdGhpcy5yb3V0ZXIudXJsKTtcbiAgICB9XG4gICAgdGhpcy5maWVsZHNQdXJnZXIuY2xlYXJIaWRkZW5GaWVsZHModGhpcy5mb3JtLCB0aGlzLndpemFyZCwgdGhpcy5ldmVudFRyaWdnZXIsIGN1cnJlbnRQYWdlSWQpO1xuICAgIGNvbnN0IG5leHRQYWdlID0gdGhpcy5nZXROZXh0UGFnZSh7XG4gICAgICBjdXJyZW50UGFnZUlkLFxuICAgICAgd2l6YXJkOiB0aGlzLndpemFyZCxcbiAgICAgIGV2ZW50VHJpZ2dlcjogdGhpcy5ldmVudFRyaWdnZXIsXG4gICAgICBmb3JtOiB0aGlzLmZvcm0sXG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICghbmV4dFBhZ2UgJiZcbiAgICAgICEodGhpcy5ldmVudFRyaWdnZXIuc2hvd19zdW1tYXJ5IHx8IHRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfc3VtbWFyeSA9PT0gbnVsbCkgJiZcbiAgICAgICF0aGlzLmV2ZW50VHJpZ2dlci5zaG93X2V2ZW50X25vdGVzKSB7XG4gICAgICB0aGlzLnN1Ym1pdEZvcm0oe1xuICAgICAgICBldmVudFRyaWdnZXI6IHRoaXMuZXZlbnRUcmlnZ2VyLFxuICAgICAgICBmb3JtOiB0aGlzLmZvcm0sXG4gICAgICAgIHN1Ym1pdDogdGhpcy5zdWJtaXQsXG4gICAgICAgIGNhc2VEZXRhaWxzOiB0aGlzLmNhc2VEZXRhaWxzLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpc3RyYXJTZXJ2aWNlLnJlc2V0KCk7XG5cbiAgICBjb25zdCB0aGVRdWVyeVBhcmFtczogUGFyYW1zID0ge307XG4gICAgdGhlUXVlcnlQYXJhbXNbQ2FzZUVkaXRDb21wb25lbnQuT1JJR0lOX1FVRVJZX1BBUkFNXSA9IHRoaXMubmF2aWdhdGlvbk9yaWdpbjtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25leHRQYWdlID8gbmV4dFBhZ2UuaWQgOiAnc3VibWl0J10sIHsgcXVlcnlQYXJhbXM6IHRoZVF1ZXJ5UGFyYW1zLCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIHByZXZpb3VzKGN1cnJlbnRQYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuZmllbGRzUHVyZ2VyLmNsZWFySGlkZGVuRmllbGRzKHRoaXMuZm9ybSwgdGhpcy53aXphcmQsIHRoaXMuZXZlbnRUcmlnZ2VyLCBjdXJyZW50UGFnZUlkKTtcbiAgICB0aGlzLnJlZ2lzdHJhclNlcnZpY2UucmVzZXQoKTtcblxuICAgIGNvbnN0IHByZXZpb3VzUGFnZSA9IHRoaXMud2l6YXJkLnByZXZpb3VzUGFnZShjdXJyZW50UGFnZUlkLCB0aGlzLmZpZWxkc1V0aWxzLmJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZSh0aGlzLmV2ZW50VHJpZ2dlciwgdGhpcy5mb3JtKSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIXByZXZpb3VzUGFnZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGhlUXVlcnlQYXJhbXM6IFBhcmFtcyA9IHt9O1xuICAgIHRoZVF1ZXJ5UGFyYW1zW0Nhc2VFZGl0Q29tcG9uZW50Lk9SSUdJTl9RVUVSWV9QQVJBTV0gPSB0aGlzLm5hdmlnYXRpb25PcmlnaW47XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1BhZ2UuaWRdLCB7IHF1ZXJ5UGFyYW1zOiB0aGVRdWVyeVBhcmFtcywgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNQcmV2aW91cyhjdXJyZW50UGFnZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aXphcmQuaGFzUHJldmlvdXNQYWdlKGN1cnJlbnRQYWdlSWQsIHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKHRoaXMuZXZlbnRUcmlnZ2VyLCB0aGlzLmZvcm0pKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIGVtaXRTdWJtaXR0ZWQocmVzcG9uc2U6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHsgY2FzZUlkOiByZXNwb25zZVsnaWQnXSwgc3RhdHVzOiB0aGlzLmdldFN0YXR1cyhyZXNwb25zZSkgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TmV4dFBhZ2UoeyB3aXphcmQsIGN1cnJlbnRQYWdlSWQsIGV2ZW50VHJpZ2dlciwgZm9ybSB9OiBDYXNlRWRpdEdldE5leHRQYWdlKTogV2l6YXJkUGFnZSB7XG4gICAgcmV0dXJuIHdpemFyZC5uZXh0UGFnZShcbiAgICAgIGN1cnJlbnRQYWdlSWQsXG4gICAgICB0aGlzLmZpZWxkc1V0aWxzLmJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZShldmVudFRyaWdnZXIsIGZvcm0pXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maXJtKGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5jb25maXJtYXRpb24gPSBjb25maXJtYXRpb247XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnY29uZmlybSddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0Rm9ybSh7IGV2ZW50VHJpZ2dlciwgZm9ybSwgY2FzZURldGFpbHMsIHN1Ym1pdCB9OiBDYXNlRWRpdFN1Ym1pdEZvcm0pOiB2b2lkIHtcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgLy8gV2UgaGF2ZSB0byBydW4gdGhlIGV2ZW50IGNvbXBsZXRpb24gY2hlY2tzIGlmIHRhc2sgaW4gc2Vzc2lvbiBzdG9yYWdlXG4gICAgLy8gYW5kIGlmIHRoZSB0YXNrIGlzIGluIHNlc3Npb24gc3RvcmFnZSwgdGhlbiBpcyBpdCBhc3NvY2lhdGVkIHRvIHRoZSBjYXNlXG4gICAgY29uc3QgY2xpZW50Q29udGV4dFN0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2NsaWVudENvbnRleHQnKTtcbiAgICBjb25zdCB1c2VyVGFzayA9IEZpZWxkc1V0aWxzLmdldFVzZXJUYXNrRnJvbUNsaWVudENvbnRleHQoY2xpZW50Q29udGV4dFN0cik7XG4gICAgY29uc3QgdGFza0luU2Vzc2lvblN0b3JhZ2UgPSB1c2VyVGFzayA/IHVzZXJUYXNrLnRhc2tfZGF0YSA6IG51bGw7XG4gICAgbGV0IHRhc2tFdmVudENvbXBsZXRpb25JbmZvOiBUYXNrRXZlbnRDb21wbGV0aW9uSW5mbztcbiAgICBsZXQgdXNlckluZm86IFVzZXJJbmZvO1xuICAgIGNvbnN0IHRhc2tFdmVudENvbXBsZXRpb25TdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd0YXNrRXZlbnRDb21wbGV0aW9uSW5mbycpO1xuICAgIGNvbnN0IHVzZXJJbmZvU3RyID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgndXNlckRldGFpbHMnKTtcbiAgICBjb25zdCBhc3NpZ25OZWVkZWQgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdhc3NpZ25OZWVkZWQnKTtcbiAgICBpZiAodGFza0V2ZW50Q29tcGxldGlvblN0cikge1xuICAgICAgdGFza0V2ZW50Q29tcGxldGlvbkluZm8gPSBKU09OLnBhcnNlKHRhc2tFdmVudENvbXBsZXRpb25TdHIpO1xuICAgIH1cbiAgICBpZiAodXNlckluZm9TdHIpIHtcbiAgICAgIHVzZXJJbmZvID0gSlNPTi5wYXJzZSh1c2VySW5mb1N0cik7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50SWQgPSB0aGlzLmdldEV2ZW50SWQoZm9ybSk7XG4gICAgY29uc3QgY2FzZUlkID0gdGhpcy5nZXRDYXNlSWQoY2FzZURldGFpbHMpO1xuICAgIGNvbnN0IHVzZXJJZCA9IHVzZXJJbmZvLmlkID8gdXNlckluZm8uaWQgOiB1c2VySW5mby51aWQ7XG4gICAgY29uc3QgZXZlbnREZXRhaWxzOiBFdmVudERldGFpbHMgPSB7ZXZlbnRJZCwgY2FzZUlkLCB1c2VySWQsIGFzc2lnbk5lZWRlZH07XG4gICAgaWYgKHRoaXMudGFza0V4aXN0c0ZvclRoaXNFdmVudCh0YXNrSW5TZXNzaW9uU3RvcmFnZSwgdGFza0V2ZW50Q29tcGxldGlvbkluZm8sIGV2ZW50RGV0YWlscykpIHtcbiAgICAgIHRoaXMuYWJzdHJhY3RDb25maWcubG9nTWVzc2FnZShgdGFzayBleGlzdCBmb3IgdGhpcyBldmVudCBmb3IgY2FzZUlkIGFuZCBldmVudElkIGFzICR7Y2FzZUlkfSAke2V2ZW50SWR9YCk7XG4gICAgICAvLyBTaG93IGV2ZW50IGNvbXBsZXRpb24gY29tcG9uZW50IHRvIHBlcmZvcm0gZXZlbnQgY29tcGxldGlvbiBjaGVja3NcbiAgICAgIHRoaXMuZXZlbnRDb21wbGV0aW9uUGFyYW1zID0gKHtcbiAgICAgICAgY2FzZUlkLFxuICAgICAgICBldmVudElkLFxuICAgICAgICB0YXNrOiB0YXNrSW5TZXNzaW9uU3RvcmFnZVxuICAgICAgfSk7XG4gICAgICAvLyBhZGQgdGFza0V2ZW50Q29tcGxldGlvbkluZm8gYWdhaW4gdG8gZW5zdXJlIGxpbmsgY3VycmVudCBldmVudCB3aXRoIHRhc2sgaWRcbiAgICAgIC8vIG5vdGU6IHByZXZpb3VzIHVzYWdlIHdhcyBjcmVhdGVkIGhlcmUgc28gdGhpcyBpcyB0byBlbnN1cmUgY29ycmVjdCBmdW5jdGlvbmFsaXR5IGNvbnRpbnVlc1xuICAgICAgY29uc3QgdGFza0V2ZW50Q29tcGxldGlvbkluZm86IFRhc2tFdmVudENvbXBsZXRpb25JbmZvID0ge1xuICAgICAgICBjYXNlSWQsXG4gICAgICAgIGV2ZW50SWQsXG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgdGFza0lkOiB0YXNrSW5TZXNzaW9uU3RvcmFnZS5pZCxcbiAgICAgICAgY3JlYXRlZFRpbWVzdGFtcDogRGF0ZS5ub3coKX07XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCd0YXNrRXZlbnRDb21wbGV0aW9uSW5mbycsIEpTT04uc3RyaW5naWZ5KHRhc2tFdmVudENvbXBsZXRpb25JbmZvKSk7XG4gICAgICB0aGlzLmlzRXZlbnRDb21wbGV0aW9uQ2hlY2tzUmVxdWlyZWQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUYXNrIG5vdCBpbiBzZXNzaW9uIHN0b3JhZ2UsIHByb2NlZWQgdG8gc3VibWl0XG4gICAgICBjb25zdCBjYXNlRXZlbnREYXRhID0gdGhpcy5nZW5lcmF0ZUNhc2VFdmVudERhdGEoe1xuICAgICAgICBldmVudFRyaWdnZXIsXG4gICAgICAgIGZvcm1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYXNlU3VibWl0KHtmb3JtLFxuICAgICAgICBjYXNlRXZlbnREYXRhLFxuICAgICAgICBzdWJtaXRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDYXNlSWQoY2FzZURldGFpbHM6IENhc2VWaWV3KTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGNhc2VEZXRhaWxzID8gY2FzZURldGFpbHMuY2FzZV9pZCA6ICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXZlbnRJZChmb3JtOiBGb3JtR3JvdXApOiBzdHJpbmcge1xuICAgIHJldHVybiBmb3JtLnZhbHVlLmV2ZW50LmlkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZUNhc2VFdmVudERhdGEoeyBldmVudFRyaWdnZXIsIGZvcm0gfTogQ2FzZUVkaXRHZW5lcmF0ZUNhc2VFdmVudERhdGEgKTogQ2FzZUV2ZW50RGF0YSB7XG4gICAgY29uc3QgY2FzZUV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSA9IHtcbiAgICAgIGRhdGE6IHRoaXMucmVwbGFjZUVtcHR5Q29tcGxleEZpZWxkVmFsdWVzKFxuICAgICAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2Uuc2FuaXRpc2UoXG4gICAgICAgICAgdGhpcy5yZXBsYWNlSGlkZGVuRm9ybVZhbHVlc1dpdGhPcmlnaW5hbENhc2VEYXRhKFxuICAgICAgICAgICAgZm9ybS5nZXQoJ2RhdGEnKSBhcyBGb3JtR3JvdXAsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcykpKSxcbiAgICAgIGV2ZW50OiBmb3JtLnZhbHVlLmV2ZW50XG4gICAgfSBhcyBDYXNlRXZlbnREYXRhO1xuICAgIHRoaXMuZm9ybVZhbHVlU2VydmljZS5jbGVhck5vbkNhc2VGaWVsZHMoY2FzZUV2ZW50RGF0YS5kYXRhLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIHRoaXMuZm9ybVZhbHVlU2VydmljZS5yZW1vdmVOdWxsTGFiZWxzKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlRW1wdHlEb2N1bWVudHMoY2FzZUV2ZW50RGF0YS5kYXRhLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIC8vIFJlbW92ZSBjb2xsZWN0aW9uIGZpZWxkcyB0aGF0IGhhdmUgXCJtaW5cIiB2YWxpZGF0aW9uIG9mIGdyZWF0ZXIgdGhhbiB6ZXJvIHNldCBvbiB0aGUgRmllbGRUeXBlIGJ1dCBhcmUgZW1wdHk7XG4gICAgLy8gdGhlc2Ugd2lsbCBmYWlsIHZhbGlkYXRpb25cbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlRW1wdHlDb2xsZWN0aW9uc1dpdGhNaW5WYWxpZGF0aW9uKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgICAvLyBGb3IgQ2FzZSBGbGFnIHN1Ym1pc3Npb25zICh3aGVyZSBhIEZsYWdMYXVuY2hlciBmaWVsZCBpcyBwcmVzZW50IGluIHRoZSBldmVudCB0cmlnZ2VyKSwgdGhlIGZsYWcgZGV0YWlscyBkYXRhXG4gICAgLy8gbmVlZHMgcG9wdWxhdGluZyBmb3IgZWFjaCBGbGFncyBmaWVsZCwgdGhlbiB0aGUgRmxhZ0xhdW5jaGVyIGZpZWxkIG5lZWRzIHJlbW92aW5nXG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlcG9wdWxhdGVGb3JtRGF0YUZyb21DYXNlRmllbGRWYWx1ZXMoY2FzZUV2ZW50RGF0YS5kYXRhLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIC8vIERhdGEgcG9wdWxhdGlvbiBzdGVwIHJlcXVpcmVkIGZvciBMaW5rZWQgQ2FzZXNcbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucG9wdWxhdGVMaW5rZWRDYXNlc0RldGFpbHNGcm9tQ2FzZUZpZWxkcyhjYXNlRXZlbnREYXRhLmRhdGEsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgLy8gUmVtb3ZlIFwiTGF1bmNoZXJcIi10eXBlIGZpZWxkcyAodGhlc2UgaGF2ZSBubyB2YWx1ZXMgYW5kIGFyZSBub3QgaW50ZW5kZWQgdG8gYmUgcGVyc2lzdGVkKVxuICAgIHRoaXMuZm9ybVZhbHVlU2VydmljZS5yZW1vdmVDYXNlRmllbGRzT2ZUeXBlKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLCBbJ0ZsYWdMYXVuY2hlcicsICdDb21wb25lbnRMYXVuY2hlciddKTtcblxuICAgIC8vIGRlbGV0ZSBmaWVsZHMgd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSBjYXNlIGV2ZW50IGpvdXJuZXkgd2l6YXJkIHBhZ2VzIGNhc2UgZmllbGRzXG4gICAgdGhpcy52YWxpZFBhZ2VMaXN0Q2FzZUZpZWxkc1NlcnZpY2UuZGVsZXRlTm9uVmFsaWRhdGVkRmllbGRzKHRoaXMudmFsaWRQYWdlTGlzdCwgY2FzZUV2ZW50RGF0YS5kYXRhLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMsIGZhbHNlLCBmb3JtLmNvbnRyb2xzWydkYXRhJ10udmFsdWUpO1xuICAgIGNvbnN0IHBhZ2VMaXN0Q2FzZUZpZWxkcyA9IHRoaXMudmFsaWRQYWdlTGlzdENhc2VGaWVsZHNTZXJ2aWNlLnZhbGlkUGFnZUxpc3RDYXNlRmllbGRzKHRoaXMudmFsaWRQYWdlTGlzdCwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLCBmb3JtLmNvbnRyb2xzWydkYXRhJ10udmFsdWUpO1xuICAgIC8vIFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXNlIGZpZWxkcyB3aGljaCBhcmUgaGlkZGVuLCBvbmx5IGlmIHRoZSBzdWJtaXNzaW9uIGlzICpub3QqIGZvciBDYXNlIEZsYWdzXG4gICAgaWYgKCF0aGlzLmlzQ2FzZUZsYWdTdWJtaXNzaW9uKSB7XG4gICAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlVW5uZWNlc3NhcnlGaWVsZHMoY2FzZUV2ZW50RGF0YS5kYXRhLCBwYWdlTGlzdENhc2VGaWVsZHMsIHRydWUsIHRydWUpO1xuICAgIH1cblxuICAgIGNhc2VFdmVudERhdGEuZXZlbnRfdG9rZW4gPSBldmVudFRyaWdnZXIuZXZlbnRfdG9rZW47XG4gICAgY2FzZUV2ZW50RGF0YS5pZ25vcmVfd2FybmluZyA9IHRoaXMuaWdub3JlV2FybmluZztcbiAgICBpZiAodGhpcy5jb25maXJtYXRpb24pIHtcbiAgICAgIGNhc2VFdmVudERhdGEuZGF0YSA9IHt9O1xuICAgIH1cblxuICAgIHJldHVybiBjYXNlRXZlbnREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIG5vbi1hcnJheSB2YWx1ZSBvYmplY3RzIHdpdGggYG51bGxgIGZvciBhbnkgQ29tcGxleC10eXBlIGZpZWxkcyB3aG9zZSB2YWx1ZSBpcyBlZmZlY3RpdmVseSBlbXB0eSwgaS5lLlxuICAgKiBhbGwgaXRzIHN1Yi1maWVsZHMgYW5kIGRlc2NlbmRhbnRzIGFyZSBgbnVsbGAgb3IgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIFRoZSBvYmplY3QgdHJlZSByZXByZXNlbnRpbmcgYWxsIHRoZSBmb3JtIGZpZWxkIGRhdGFcbiAgICogQHJldHVybnMgVGhlIGZvcm0gZmllbGQgZGF0YSBtb2RpZmllZCBhY2NvcmRpbmdseVxuICAgKi9cbiAgcHJpdmF0ZSByZXBsYWNlRW1wdHlDb21wbGV4RmllbGRWYWx1ZXMoZGF0YTogb2JqZWN0KTogb2JqZWN0IHtcbiAgICBPYmplY3Qua2V5cyhkYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhW2tleV0pICYmIHR5cGVvZiBkYXRhW2tleV0gPT09ICdvYmplY3QnICYmICFGaWVsZHNVdGlscy5jb250YWluc05vbkVtcHR5VmFsdWVzKGRhdGFba2V5XSkpIHtcbiAgICAgICAgZGF0YVtrZXldID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYXZlcnNlICphbGwqIHZhbHVlcyBvZiBhIHtAbGluayBGb3JtR3JvdXB9LCBpbmNsdWRpbmcgdGhvc2UgZm9yIGRpc2FibGVkIGZpZWxkcyAoaS5lLiBoaWRkZW4gb25lcyksIHJlcGxhY2luZyB0aGVcbiAgICogdmFsdWUgb2YgYW55IHRoYXQgYXJlIGhpZGRlbiBBTkQgaGF2ZSBgcmV0YWluX2hpZGRlbl92YWx1ZWAgc2V0IHRvIGB0cnVlYCBpbiB0aGUgY29ycmVzcG9uZGluZyBgQ2FzZUZpZWxkYCwgd2l0aFxuICAgKiB0aGUgKm9yaWdpbmFsKiB2YWx1ZSBoZWxkIGluIHRoZSBgQ2FzZUZpZWxkYCBvYmplY3QuXG4gICAqXG4gICAqIFRoaXMgaXMgYXMgcGVyIGRlc2lnbiBpbiBFVUktMzYyMiwgd2hlcmUgYW55IHVzZXItZHJpdmVuIHVwZGF0ZXMgdG8gaGlkZGVuIGZpZWxkcyB3aXRoIGByZXRhaW5faGlkZGVuX3ZhbHVlYCA9XG4gICAqIGB0cnVlYCBhcmUgaWdub3JlZCAodGh1cyByZXRhaW5pbmcgdGhlIHZhbHVlIGRpc3BsYXllZCBvcmlnaW5hbGx5KS5cbiAgICpcbiAgICogKiBGb3IgQ29tcGxleCBmaWVsZCB0eXBlcywgdGhlIHJlcGxhY2VtZW50IGFib3ZlIGlzIHBlcmZvcm1lZCByZWN1cnNpdmVseSBmb3IgYWxsIGhpZGRlbiBzdWItZmllbGRzIHdpdGhcbiAgICogYHJldGFpbl9oaWRkZW5fdmFsdWVgID0gYHRydWVgLlxuICAgKlxuICAgKiAqIEZvciBDb2xsZWN0aW9uIGZpZWxkIHR5cGVzLCBpbmNsdWRpbmcgY29sbGVjdGlvbnMgb2YgQ29tcGxleCBhbmQgRG9jdW1lbnQgZmllbGQgdHlwZXMsIHRoZSByZXBsYWNlbWVudCBpc1xuICAgKiBwZXJmb3JtZWQgZm9yIGFsbCBmaWVsZHMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBmb3JtR3JvdXAgVGhlIGBGb3JtR3JvdXBgIGluc3RhbmNlIHdob3NlIHJhdyB2YWx1ZXMgYXJlIHRvIGJlIHRyYXZlcnNlZFxuICAgKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgYXJyYXkgb2Yge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byBmaWVsZHMgaW4gYGZvcm1Hcm91cGBcbiAgICogQHBhcmFtIHBhcmVudEZpZWxkIFJlZmVyZW5jZSB0byB0aGUgcGFyZW50IGBDYXNlRmllbGRgLiBVc2VkIGZvciByZXRyaWV2aW5nIHRoZSBzdWItZmllbGQgdmFsdWVzIG9mIGEgQ29tcGxleCBmaWVsZFxuICAgKiB0byBwZXJmb3JtIHJlY3Vyc2l2ZSByZXBsYWNlbWVudCAtIHRoZSBzdWItZmllbGQgYENhc2VGaWVsZGBzIHRoZW1zZWx2ZXMgZG8gKm5vdCogY29udGFpbiBhbnkgdmFsdWVzXG4gICAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSAqcmF3KiBmb3JtIHZhbHVlIGRhdGEgKGFzIGtleS12YWx1ZSBwYWlycyksIHdpdGggYW55IHZhbHVlIHJlcGxhY2VtZW50cyBhcyBuZWNlc3NhcnlcbiAgICovXG4gIHByaXZhdGUgcmVwbGFjZUhpZGRlbkZvcm1WYWx1ZXNXaXRoT3JpZ2luYWxDYXNlRGF0YShmb3JtR3JvdXA6IEZvcm1Hcm91cCwgY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIHBhcmVudEZpZWxkPzogQ2FzZUZpZWxkKTogb2JqZWN0IHtcbiAgICAvLyBHZXQgdGhlIHJhdyBmb3JtIHZhbHVlIGRhdGEsIHdoaWNoIGluY2x1ZGVzIHRoZSB2YWx1ZXMgb2YgYW55IGRpc2FibGVkIGNvbnRyb2xzLCBhcyBrZXktdmFsdWUgcGFpcnNcbiAgICBjb25zdCByYXdGb3JtVmFsdWVEYXRhID0gZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XG5cbiAgICAvLyBQbGFjZSBhbGwgY2FzZSBmaWVsZHMgaW4gYSBsb29rdXAgb2JqZWN0LCBzbyB0aGV5IGNhbiBiZSByZXRyaWV2ZWQgYnkgaWRcbiAgICBjb25zdCBjYXNlRmllbGRzTG9va3VwID0ge307XG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNhc2VGaWVsZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNhc2VGaWVsZHNMb29rdXBbY2FzZUZpZWxkc1tpXS5pZF0gPSBjYXNlRmllbGRzW2ldO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlcGxhY2UgYW55IGZvcm0gdmFsdWUgd2l0aCB0aGUgb3JpZ2luYWwsIHdoZXJlIGl0cyBDYXNlRmllbGQgaXMgaGlkZGVuIEFORCBoYXMgdGhlIHJldGFpbl9oaWRkZW5fdmFsdWUgZmxhZyBzZXRcbiAgICAgKiB0byB0cnVlLlxuICAgICAqXG4gICAgICogSWYgdGhlIENhc2VGaWVsZCdzIGBoaWRkZW5gIGF0dHJpYnV0ZSBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGhlbiBjaGVjayB0aGlzIGF0dHJpYnV0ZSBpbiB0aGUgcGFyZW50IENhc2VGaWVsZCAoaWZcbiAgICAgKiBvbmUgZXhpc3RzKS4gVGhpcyBpcyBvY2N1cnJpbmcgKGFuZCBpcyBwb3NzaWJseSBhIGJ1Zykgd2hlbiBhIENhc2VGaWVsZCBpcyBhIHN1Yi1maWVsZCBvZiBhIENvbXBsZXggdHlwZSwgb3IgYW5cbiAgICAgKiBpdGVtIGluIGEgQ29sbGVjdGlvbiB0eXBlLlxuICAgICAqXG4gICAgICogSWYgdGhlIGZpZWxkIGlzIGEgQ29tcGxleCB0eXBlIHdpdGggcmV0YWluX2hpZGRlbl92YWx1ZSA9IHRydWUsIHBlcmZvcm0gYSByZWN1cnNpdmUgcmVwbGFjZW1lbnQgZm9yIGFsbCAoaGlkZGVuKVxuICAgICAqIHN1Yi1maWVsZHMgd2l0aCByZXRhaW5faGlkZGVuX3ZhbHVlID0gdHJ1ZSwgdXNpbmcgdGhlaXIgb3JpZ2luYWwgQ2FzZUZpZWxkIHZhbHVlcyAoZnJvbSB0aGUgYGZvcm1hdHRlZF92YWx1ZWBcbiAgICAgKiBhdHRyaWJ1dGUpLlxuICAgICAqXG4gICAgICogSWYgdGhlIGZpZWxkIGlzIGEgQ29sbGVjdGlvbiB0eXBlIHdpdGggcmV0YWluX2hpZGRlbl92YWx1ZSA9IHRydWUsIHRoZSBlbnRpcmUgY29sbGVjdGlvbiBpcyByZXBsYWNlZCB3aXRoIHRoZVxuICAgICAqIG9yaWdpbmFsIGZyb20gYGZvcm1hdHRlZF92YWx1ZWAuIFRoaXMgYXBwbGllcyB0byAqYWxsKiB0eXBlcyBvZiBDb2xsZWN0aW9ucy5cbiAgICAgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIE9iamVjdC5rZXlzKHJhd0Zvcm1WYWx1ZURhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgY2FzZUZpZWxkOiBDYXNlRmllbGQgPSBjYXNlRmllbGRzTG9va3VwW2tleV07XG4gICAgICAvLyBJZiBjYXNlRmllbGQuaGlkZGVuIGlzIE5PVCB0cnV0aHkgYW5kIGFsc28gTk9UIGVxdWFsIHRvIGZhbHNlLCB0aGVuIGl0IG11c3QgYmUgbnVsbC91bmRlZmluZWQgKHJlbWVtYmVyIHRoYXRcbiAgICAgIC8vIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkIGFyZSBlcXVhbCB0byAqbmVpdGhlciBmYWxzZSBub3IgdHJ1ZSopXG4gICAgICBpZiAoY2FzZUZpZWxkICYmIGNhc2VGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlICYmXG4gICAgICAgIChjYXNlRmllbGQuaGlkZGVuIHx8IChjYXNlRmllbGQuaGlkZGVuICE9PSBmYWxzZSAmJiBwYXJlbnRGaWVsZCAmJiBwYXJlbnRGaWVsZC5oaWRkZW4pKSkge1xuICAgICAgICBpZiAoY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVDb21wbGV4RmllbGQoY2FzZUZpZWxkLCBmb3JtR3JvdXAsIGtleSwgcmF3Rm9ybVZhbHVlRGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVOb25Db21wbGV4RmllbGQocGFyZW50RmllbGQsIHJhd0Zvcm1WYWx1ZURhdGEsIGtleSwgY2FzZUZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJhd0Zvcm1WYWx1ZURhdGE7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZU5vbkNvbXBsZXhGaWVsZChwYXJlbnRGaWVsZDogQ2FzZUZpZWxkLCByYXdGb3JtVmFsdWVEYXRhLCBrZXk6IHN0cmluZywgY2FzZUZpZWxkOiBDYXNlRmllbGQpIHtcbiAgICAvLyBEZWZhdWx0IGNhc2UgYWxzbyBoYW5kbGVzIGNvbGxlY3Rpb25zIG9mICphbGwqIHR5cGVzOyB0aGUgZW50aXJlIGNvbGxlY3Rpb24gaW4gcmF3Rm9ybVZhbHVlRGF0YSB3aWxsIGJlXG4gICAgLy8gcmVwbGFjZWQgd2l0aCB0aGUgb3JpZ2luYWwgZnJvbSBmb3JtYXR0ZWRfdmFsdWVcbiAgICAvLyBVc2UgdGhlIENhc2VGaWVsZCdzIGV4aXN0aW5nICpmb3JtYXR0ZWRfdmFsdWUqIGZyb20gdGhlIHBhcmVudCwgaWYgYXZhaWxhYmxlLiAoVGhpcyBpcyBuZWNlc3NhcnkgZm9yXG4gICAgLy8gQ29tcGxleCBmaWVsZHMsIHdob3NlIHN1Yi1maWVsZHMgZG8gbm90IGhvbGQgYW55IHZhbHVlcyBpbiB0aGUgbW9kZWwuKSBPdGhlcndpc2UsIHVzZSBmb3JtYXR0ZWRfdmFsdWVcbiAgICAvLyBmcm9tIHRoZSBDYXNlRmllbGQgaXRzZWxmLlxuICAgIGlmIChwYXJlbnRGaWVsZCAmJiBwYXJlbnRGaWVsZC5mb3JtYXR0ZWRfdmFsdWUpIHtcbiAgICAgIHJhd0Zvcm1WYWx1ZURhdGFba2V5XSA9IHBhcmVudEZpZWxkLmZvcm1hdHRlZF92YWx1ZVtjYXNlRmllbGQuaWRdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIShjYXNlRmllbGQuaGlkZGVuICYmIGNhc2VGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlKSkge1xuICAgICAgICByYXdGb3JtVmFsdWVEYXRhW2tleV0gPSBjYXNlRmllbGQuZm9ybWF0dGVkX3ZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQ29tcGxleEZpZWxkKGNhc2VGaWVsZDogQ2FzZUZpZWxkLCBmb3JtR3JvdXA6IEZvcm1Hcm91cDxhbnk+LCBrZXk6IHN0cmluZywgcmF3Rm9ybVZhbHVlRGF0YSkge1xuICAgIC8vIE5vdGU6IERlbGliZXJhdGUgdXNlIG9mIGVxdWFsaXR5ICg9PSkgYW5kIG5vbi1lcXVhbGl0eSAoIT0pIG9wZXJhdG9ycyBmb3IgbnVsbCBjaGVja3MgdGhyb3VnaG91dCwgdG9cbiAgICAvLyBoYW5kbGUgYm90aCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzXG4gICAgaWYgKGNhc2VGaWVsZC52YWx1ZSAhPSBudWxsKSB7XG4gICAgICAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gcmVjdXJzaXZlbHkgdG8gcmVwbGFjZSB0aGUgQ29tcGxleCBmaWVsZCdzIHN1Yi1maWVsZHMgYXMgbmVjZXNzYXJ5LCBwYXNzaW5nIHRoZVxuICAgICAgLy8gQ2FzZUZpZWxkIGl0c2VsZiAodGhlIHN1Yi1maWVsZHMgZG8gbm90IGNvbnRhaW4gYW55IHZhbHVlcywgc28gdGhlc2UgbmVlZCB0byBiZSBvYnRhaW5lZCBmcm9tIHRoZVxuICAgICAgLy8gcGFyZW50KVxuICAgICAgLy8gVXBkYXRlIHJhd0Zvcm1WYWx1ZURhdGEgZm9yIHRoaXMgZmllbGRcbiAgICAgIC8vIGNyZWF0aW5nIGZvcm0gZ3JvdXAgYW5kIGFkZGluZyBjb250cm9sIGludG8gaXQgaW4gY2FzZSBjYXNlRmllbGQgaXMgb2YgY29tcGxleHQgdHlwZSBhbmQgYW5kIHBhcnQgb2YgZm9ybUdyb3VwXG4gICAgICBjb25zdCBmb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICAgIGlmIChmb3JtR3JvdXAuY29udHJvbHNba2V5XS52YWx1ZSkge1xuICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHNba2V5XS52YWx1ZSkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGZvcm0uYWRkQ29udHJvbChpdGVtLCBuZXcgRm9ybUNvbnRyb2woZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWVbaXRlbV0pKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByYXdGb3JtVmFsdWVEYXRhW2tleV0gPSB0aGlzLnJlcGxhY2VIaWRkZW5Gb3JtVmFsdWVzV2l0aE9yaWdpbmFsQ2FzZURhdGEoXG4gICAgICAgIGZvcm0sIGNhc2VGaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLCBjYXNlRmllbGQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FzZVN1Ym1pdCh7IGZvcm0sIGNhc2VFdmVudERhdGEsIHN1Ym1pdCB9OiBDYXNlRWRpdENhc2VTdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBsb2FkaW5nU3Bpbm5lclRva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuICAgIC8vIGtlZXAgdGhlIGluaXRpYWwgZXZlbnQgcmVzcG9uc2UgdG8gZmluYWxpc2UgcHJvY2VzcyBhZnRlciB0YXNrIGNvbXBsZXRpb25cbiAgICBsZXQgZXZlbnRSZXNwb25zZTogb2JqZWN0O1xuICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Rhc2tDb21wbGV0aW9uRXJyb3InLCAnZmFsc2UnKTtcbiAgICBzdWJtaXQoY2FzZUV2ZW50RGF0YSkucGlwZShzd2l0Y2hNYXAoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBldmVudFJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgICByZXR1cm4gdGhpcy5wb3N0Q29tcGxldGVUYXNrSWZSZXF1aXJlZCgpO1xuICAgIH0pLGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nU2VydmljZS51bnJlZ2lzdGVyKGxvYWRpbmdTcGlubmVyVG9rZW4pO1xuICAgICAgICAvLyBvbiBldmVudCBjb21wbGV0aW9uIGVuc3VyZSB0aGUgcHJldmlvdXMgZXZlbnQgY2xpZW50Q29udGV4dC90YXNrRXZlbnRDb21wbGV0aW9uSW5mbyByZW1vdmVkXG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2NsaWVudENvbnRleHQnKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgndGFza0V2ZW50Q29tcGxldGlvbkluZm8nKVxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgfSkpXG4gICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5maW5pc2hFdmVudENvbXBsZXRpb25Mb2dpYyhldmVudFJlc3BvbnNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgIGlmICghZXZlbnRSZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gZXZlbnQgc3VibWlzc2lvbiBlcnJvclxuICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFja0Vycm9yc1N1YmplY3QubmV4dChlcnJvcik7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuZXJyb3IuZGV0YWlscykge1xuICAgICAgICAgICAgICB0aGlzLmZvcm1FcnJvclNlcnZpY2VcbiAgICAgICAgICAgICAgICAubWFwRmllbGRFcnJvcnModGhpcy5lcnJvci5kZXRhaWxzLmZpZWxkX2Vycm9ycywgZm9ybS5jb250cm9sc1snZGF0YSddIGFzIEZvcm1Hcm91cCwgJ3ZhbGlkYXRpb24nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndGFza0NvbXBsZXRpb25FcnJvcicsICd0cnVlJyk7XG4gICAgICAgICAgICAvLyB0YXNrIGFzc2lnbm1lbnQvY29tcGxldGlvbiBlcnJvciAtIGhhbmRsZWQgd2l0aGluIHdvcmthbGxvY2F0aW9uIHNlcnZpY2VcbiAgICAgICAgICAgIC8vIGNvdWxkIHNldCB0YXNrIHRvIGJlIGRlbGV0ZWQgKG9yIGNvbXBsZXRlZCBsYXRlcik/XG4gICAgICAgICAgICB0aGlzLmZpbmlzaEV2ZW50Q29tcGxldGlvbkxvZ2ljKGV2ZW50UmVzcG9uc2UpO1xuICAgICAgICAgICAgLy8gYmVsb3cgYWxsb3dzIGVycm9yIHRvIGJlIHNob3duIG9uIG5hdmlnYXRpb24gdG8gY29uZmlybWF0aW9uIHBhZ2VcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNldFByZXNlcnZlQWxlcnRzKHRydWUpO1xuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3Ioe3BocmFzZTogQ29uc3RhbnRzLlRBU0tfQ09NUExFVElPTl9FUlJPUn0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcG9zdENvbXBsZXRlVGFza0lmUmVxdWlyZWQoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBjbGllbnRDb250ZXh0U3RyID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnY2xpZW50Q29udGV4dCcpO1xuICAgIGNvbnN0IHVzZXJUYXNrID0gRmllbGRzVXRpbHMuZ2V0VXNlclRhc2tGcm9tQ2xpZW50Q29udGV4dChjbGllbnRDb250ZXh0U3RyKTtcbiAgICBjb25zdCBbdGFzaywgdGFza1RvQmVDb21wbGV0ZWRdID0gdXNlclRhc2sgPyBbdXNlclRhc2sudGFza19kYXRhLCB1c2VyVGFzay5jb21wbGV0ZV90YXNrXSA6IFtudWxsLCBmYWxzZV07XG4gICAgY29uc3QgYXNzaWduTmVlZGVkID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnYXNzaWduTmVlZGVkJykgPT09ICd0cnVlJztcbiAgICBpZiAodGFzayAmJiBhc3NpZ25OZWVkZWQgJiYgdGFza1RvQmVDb21wbGV0ZWQpIHtcbiAgICAgIHRoaXMuYWJzdHJhY3RDb25maWcubG9nTWVzc2FnZShgcG9zdENvbXBsZXRlVGFza0lmUmVxdWlyZWQgd2l0aCBhc3NpZ25OZWVkZWQ6IHRhc2tJZCAke3Rhc2suaWR9IGFuZCBldmVudCBuYW1lICR7dGhpcy5ldmVudFRyaWdnZXIubmFtZX1gKTtcbiAgICAgIHJldHVybiB0aGlzLndvcmtBbGxvY2F0aW9uU2VydmljZS5hc3NpZ25BbmRDb21wbGV0ZVRhc2sodGFzay5pZCwgdGhpcy5ldmVudFRyaWdnZXIubmFtZSk7XG4gICAgfSBlbHNlIGlmICh0YXNrICYmIHRhc2tUb0JlQ29tcGxldGVkKSB7XG4gICAgICB0aGlzLmFic3RyYWN0Q29uZmlnLmxvZ01lc3NhZ2UoYHBvc3RDb21wbGV0ZVRhc2tJZlJlcXVpcmVkOiB0YXNrSWQgJHt0YXNrLmlkfSBhbmQgZXZlbnQgbmFtZSAke3RoaXMuZXZlbnRUcmlnZ2VyLm5hbWV9YCk7XG4gICAgICByZXR1cm4gdGhpcy53b3JrQWxsb2NhdGlvblNlcnZpY2UuY29tcGxldGVUYXNrKHRhc2suaWQsIHRoaXMuZXZlbnRUcmlnZ2VyLm5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIGZpbmlzaEV2ZW50Q29tcGxldGlvbkxvZ2ljKGV2ZW50UmVzcG9uc2U6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2FzZU5vdGlmaWVyLmNhY2hlZENhc2VWaWV3ID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdldmVudFVybCcpO1xuICAgIGNvbnN0IGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uID0gdGhpcy5idWlsZENvbmZpcm1hdGlvbihldmVudFJlc3BvbnNlKTtcbiAgICBpZiAoY29uZmlybWF0aW9uICYmIChjb25maXJtYXRpb24uZ2V0SGVhZGVyKCkgfHwgY29uZmlybWF0aW9uLmdldEJvZHkoKSkpIHtcbiAgICAgIHRoaXMuY29uZmlybShjb25maXJtYXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXRTdWJtaXR0ZWQoZXZlbnRSZXNwb25zZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmZpcm1hdGlvbihyZXNwb25zZTogb2JqZWN0KTogQ29uZmlybWF0aW9uIHtcbiAgICBpZiAocmVzcG9uc2VbJ2FmdGVyX3N1Ym1pdF9jYWxsYmFja19yZXNwb25zZSddKSB7XG4gICAgICByZXR1cm4gbmV3IENvbmZpcm1hdGlvbihcbiAgICAgICAgcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIHJlc3BvbnNlWydjYWxsYmFja19yZXNwb25zZV9zdGF0dXMnXSxcbiAgICAgICAgcmVzcG9uc2VbJ2FmdGVyX3N1Ym1pdF9jYWxsYmFja19yZXNwb25zZSddWydjb25maXJtYXRpb25faGVhZGVyJ10sXG4gICAgICAgIHJlc3BvbnNlWydhZnRlcl9zdWJtaXRfY2FsbGJhY2tfcmVzcG9uc2UnXVsnY29uZmlybWF0aW9uX2JvZHknXVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gY2hlY2tzIHdoZXRoZXIgY3VycmVudCBjbGllbnRDb250ZXh0IHJlbGV2YW50IGZvciB0aGUgZXZlbnRcbiAgcHVibGljIHRhc2tFeGlzdHNGb3JUaGlzRXZlbnQodGFza0luU2Vzc2lvblN0b3JhZ2U6IFRhc2ssIHRhc2tFdmVudENvbXBsZXRpb25JbmZvOiBUYXNrRXZlbnRDb21wbGV0aW9uSW5mbywgZXZlbnREZXRhaWxzOiBFdmVudERldGFpbHMpOiBib29sZWFuIHtcbiAgICBpZiAoIXRhc2tJblNlc3Npb25TdG9yYWdlIHx8IHRhc2tJblNlc3Npb25TdG9yYWdlLmNhc2VfaWQgIT09IGV2ZW50RGV0YWlscy5jYXNlSWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCF0YXNrRXZlbnRDb21wbGV0aW9uSW5mbykge1xuICAgICAgLy8gaWYgbm8gdGFzayBldmVudCBwcmVzZW50IHRoZW4gdGhlcmUgaXMgbm8gdGFzayB0byBjb21wbGV0ZSBmcm9tIHByZXZpb3VzIGV2ZW50IHByZXNlbnRcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGFza0V2ZW50Q29tcGxldGlvbkluZm8udGFza0lkICE9PSB0YXNrSW5TZXNzaW9uU3RvcmFnZS5pZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoKHRhc2tFdmVudENvbXBsZXRpb25JbmZvLnRhc2tJZCA9PT0gdGFza0luU2Vzc2lvblN0b3JhZ2UuaWQgJiZcbiAgICAgICAgICB0aGlzLmV2ZW50RGV0YWlsc0RvTm90TWF0Y2godGFza0V2ZW50Q29tcGxldGlvbkluZm8sIGV2ZW50RGV0YWlscykpXG4gICAgICAgIHx8IHRoaXMuZXZlbnRNb3JlVGhhbkRheUFnbyh0YXNrRXZlbnRDb21wbGV0aW9uSW5mby5jcmVhdGVkVGltZXN0YW1wKVxuICAgICAgKSB7XG4gICAgICAgIC8vIGlmIHRoZSBzZXNzaW9uIHN0b3JhZ2Ugbm90IHJlbGF0ZWQgdG8gZXZlbnQsIGlnbm9yZSBpdCBhbmQgcmVtb3ZlXG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2NsaWVudENvbnRleHQnKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgndGFza0V2ZW50Q29tcGxldGlvbkluZm8nKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50RGV0YWlscy5hc3NpZ25OZWVkZWQgPT09ICdmYWxzZScgJiYgZXZlbnREZXRhaWxzLnVzZXJJZCAhPT0gdGFza0luU2Vzc2lvblN0b3JhZ2UuYXNzaWduZWUpIHtcbiAgICAgICAgLy8gaWYgdGhlIHVzZXIgZG9lcyBub3QgbWF0Y2ggdGFzayBhc3NpZ25lZSwgYXNzaWduIGlzIG5vdyBuZWVkZWRcbiAgICAgICAgLy8gZGF0YSBjYW5ub3QgYmUgZGVsZXRlZCBhbmQgaWdub3JlZCBhcyBpdCBtYXRjaGVzIHVuZGVyc3RhbmRpbmdcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnYXNzaWduTmVlZGVkJywgJ3RydWUnKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkV2ZW50Q2FuQmVDb21wbGV0ZWQoeyBldmVudFRyaWdnZXIsIGV2ZW50Q2FuQmVDb21wbGV0ZWQsIGNhc2VEZXRhaWxzLCBmb3JtLCBzdWJtaXQgfTogQ2FzZUVkaXRvbkV2ZW50Q2FuQmVDb21wbGV0ZWQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRDYW5CZUNvbXBsZXRlZCkge1xuICAgICAgLy8gU3VibWl0XG4gICAgICBjb25zdCBjYXNlRXZlbnREYXRhID0gdGhpcy5nZW5lcmF0ZUNhc2VFdmVudERhdGEoeyBldmVudFRyaWdnZXIsIGZvcm0gfSk7XG4gICAgICB0aGlzLmNhc2VTdWJtaXQoeyBmb3JtLCBjYXNlRXZlbnREYXRhLCBzdWJtaXQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRhc2tzIHRhYiBvbiBjYXNlIGRldGFpbHMgcGFnZVxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvY2FzZXMvY2FzZS1kZXRhaWxzLyR7dGhpcy5nZXRDYXNlSWQoY2FzZURldGFpbHMpfS90YXNrc2BdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFN0YXR1cyhyZXNwb25zZTogb2JqZWN0KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5oYXNDYWxsYmFja0ZhaWxlZChyZXNwb25zZSkgPyByZXNwb25zZVsnY2FsbGJhY2tfcmVzcG9uc2Vfc3RhdHVzJ10gOiByZXNwb25zZVsnZGVsZXRlX2RyYWZ0X3Jlc3BvbnNlX3N0YXR1cyddO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNDYWxsYmFja0ZhaWxlZChyZXNwb25zZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlc3BvbnNlWydjYWxsYmFja19yZXNwb25zZV9zdGF0dXMnXSAhPT0gJ0NBTExCQUNLX0NPTVBMRVRFRCc7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50TW9yZVRoYW5EYXlBZ28odGltZXN0YW1wOiBudW1iZXIpIHtcbiAgICBpZiAoKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGltZXN0YW1wKSA+ICgyNCo2MCo2MCoxMDAwKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZXZlbnREZXRhaWxzRG9Ob3RNYXRjaCh0YXNrRXZlbnRDb21wbGV0aW9uSW5mbzogVGFza0V2ZW50Q29tcGxldGlvbkluZm8sIGV2ZW50RGV0YWlsczogRXZlbnREZXRhaWxzKSB7XG4gICAgaWYgKHRhc2tFdmVudENvbXBsZXRpb25JbmZvLmV2ZW50SWQgIT09IGV2ZW50RGV0YWlscy5ldmVudElkXG4gICAgICB8fCB0YXNrRXZlbnRDb21wbGV0aW9uSW5mby5jYXNlSWQgIT09IGV2ZW50RGV0YWlscy5jYXNlSWRcbiAgICAgIHx8IHRhc2tFdmVudENvbXBsZXRpb25JbmZvLnVzZXJJZCAhPT0gZXZlbnREZXRhaWxzLnVzZXJJZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwiPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuIl19
|
|
542
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBYyxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBSVUsZ0JBQWdCLEVBQy9CLFFBQVEsRUFDVCxNQUFNLGlCQUFpQixDQUFDO0FBR3pCLE9BQU8sRUFDTCxZQUFZLEVBQ1osWUFBWSxFQUFFLFdBQVcsRUFBRSxnQkFB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RyxDQUFDLEVBQUUsR0FBQyxFQUFFLEdBQUMsRUFBRSxHQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sc0JBQXNCLENBQUMsdUJBQWdELEVBQUUsWUFBMEI7UUFDekcsSUFBSSx1QkFBdUIsQ0FBQyxPQUFPLEtBQUssWUFBWSxDQUFDLE9BQU87ZUFDdkQsdUJBQXVCLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxNQUFNO2VBQ3RELHVCQUF1QixDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzJFQWhqQlUsaUJBQWlCOzZEQUFqQixpQkFBaUIsc1FBRmpCLENBQUMsY0FBYyxDQUFDO1lDaEM3QixnQ0FBK0I7OztpRkRrQ2xCLGlCQUFpQjtjQU43QixTQUFTOzJCQUNFLGVBQWUsYUFHZCxDQUFDLGNBQWMsQ0FBQztzaUJBT3BCLFlBQVk7a0JBRGxCLEtBQUs7WUFJQyxNQUFNO2tCQURaLEtBQUs7WUFJQyxRQUFRO2tCQURkLEtBQUs7WUFJQyxTQUFTO2tCQURmLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsU0FBUztrQkFEZixNQUFNO1lBSUEsU0FBUztrQkFEZixNQUFNOztrRkF0QkksaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmluYWxpemUsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IENvbnN0YW50cyB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbnMvY29uc3RhbnRzJztcbmltcG9ydCB7IENvbmRpdGlvbmFsU2hvd1JlZ2lzdHJhclNlcnZpY2UsIEdyZXlCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge1xuICBDYXNlRWRpdENhc2VTdWJtaXQsIENhc2VFZGl0R2VuZXJhdGVDYXNlRXZlbnREYXRhLCBDYXNlRWRpdEdldE5leHRQYWdlLFxuICBDYXNlRWRpdFN1Ym1pdEZvcm0sXG4gIENhc2VFZGl0b25FdmVudENhbkJlQ29tcGxldGVkLFxuICBDYXNlRXZlbnREYXRhLCBDYXNlRXZlbnRUcmlnZ2VyLCBDYXNlRmllbGQsXG4gIENhc2VWaWV3LCBEcmFmdCwgSHR0cEVycm9yLCBQcm9maWxlXG59IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBFdmVudERldGFpbHMsIFRhc2ssIFRhc2tFdmVudENvbXBsZXRpb25JbmZvIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3dvcmstYWxsb2NhdGlvbi9UYXNrJztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgRmllbGRzUHVyZ2VyLCBGaWVsZHNVdGlscywgRm9ybUVycm9yU2VydmljZSwgRm9ybVZhbHVlU2VydmljZSwgTG9hZGluZ1NlcnZpY2UsXG4gIFNlc3Npb25TdG9yYWdlU2VydmljZSwgV2luZG93U2VydmljZVxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb25maXJtYXRpb24sIFdpemFyZCwgV2l6YXJkUGFnZSB9IGZyb20gJy4uL2RvbWFpbic7XG5pbXBvcnQgeyBFdmVudENvbXBsZXRpb25QYXJhbXMgfSBmcm9tICcuLi9kb21haW4vZXZlbnQtY29tcGxldGlvbi1wYXJhbXMubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZU5vdGlmaWVyLCBXaXphcmRGYWN0b3J5U2VydmljZSwgV29ya0FsbG9jYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgVmFsaWRQYWdlTGlzdENhc2VGaWVsZHNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvdmFsaWQtcGFnZS1saXN0LWNhc2VGaWVsZHMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1jYXNlLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJ2Nhc2UtZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9jYXNlLWVkaXQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtHcmV5QmFyU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgT1JJR0lOX1FVRVJZX1BBUkFNID0gJ29yaWdpbic7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUxFUlRfTUVTU0FHRSA9ICdQYWdlIGlzIGJlaW5nIHJlZnJlc2hlZCBzbyB5b3Ugd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZSBmaXJzdCBwYWdlIG9mIHRoaXMgZXZlbnQuJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdWJtaXQ6IChjYXNlRXZlbnREYXRhOiBDYXNlRXZlbnREYXRhLCBwcm9maWxlPzogUHJvZmlsZSkgPT4gT2JzZXJ2YWJsZTxvYmplY3Q+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB2YWxpZGF0ZTogKGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEsIHBhZ2VJZDogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPG9iamVjdD47XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNhdmVEcmFmdDogKGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEpID0+IE9ic2VydmFibGU8RHJhZnQ+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjYXNlRGV0YWlsczogQ2FzZVZpZXc7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjYW5jZWxsZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc3VibWl0dGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgd2l6YXJkOiBXaXphcmQ7XG5cbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcblxuICBwdWJsaWMgY29uZmlybWF0aW9uOiBDb25maXJtYXRpb247XG5cbiAgcHVibGljIG5hdmlnYXRpb25PcmlnaW46IGFueTtcblxuICBwdWJsaWMgaW5pdGlhbFVybDogc3RyaW5nO1xuXG4gIHB1YmxpYyBpc1BhZ2VSZWZyZXNoZWQ6IGJvb2xlYW47XG5cbiAgcHVibGljIGlzU3VibWl0dGluZzogYm9vbGVhbjtcblxuICBwdWJsaWMgZXZlbnRDb21wbGV0aW9uUGFyYW1zOiBFdmVudENvbXBsZXRpb25QYXJhbXM7XG5cbiAgcHVibGljIHN1Ym1pdFJlc3BvbnNlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIHB1YmxpYyBpc0V2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkID0gZmFsc2U7XG5cbiAgcHVibGljIGlzQ2FzZUZsYWdTdWJtaXNzaW9uID0gZmFsc2U7XG5cbiAgcHVibGljIGlnbm9yZVdhcm5pbmcgPSBmYWxzZTtcblxuICBwdWJsaWMgaXNMaW5rZWRDYXNlc1N1Ym1pc3Npb24gPSBmYWxzZTtcblxuICBwdWJsaWMgZXJyb3I6IEh0dHBFcnJvcjtcblxuICBwdWJsaWMgY2FsbGJhY2tFcnJvcnNTdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHB1YmxpYyB2YWxpZFBhZ2VMaXN0OiBXaXphcmRQYWdlW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNhc2VOb3RpZmllcjogQ2FzZU5vdGlmaWVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZHNVdGlsczogRmllbGRzVXRpbHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZHNQdXJnZXI6IEZpZWxkc1B1cmdlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhclNlcnZpY2U6IENvbmRpdGlvbmFsU2hvd1JlZ2lzdHJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aXphcmRGYWN0b3J5OiBXaXphcmRGYWN0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93c1NlcnZpY2U6IFdpbmRvd1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtVmFsdWVTZXJ2aWNlOiBGb3JtVmFsdWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUVycm9yU2VydmljZTogRm9ybUVycm9yU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvYWRpbmdTZXJ2aWNlOiBMb2FkaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZhbGlkUGFnZUxpc3RDYXNlRmllbGRzU2VydmljZTogVmFsaWRQYWdlTGlzdENhc2VGaWVsZHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd29ya0FsbG9jYXRpb25TZXJ2aWNlOiBXb3JrQWxsb2NhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFic3RyYWN0Q29uZmlnOiBBYnN0cmFjdEFwcENvbmZpZ1xuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMud2l6YXJkID0gdGhpcy53aXphcmRGYWN0b3J5LmNyZWF0ZSh0aGlzLmV2ZW50VHJpZ2dlcik7XG4gICAgdGhpcy5pbml0aWFsVXJsID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnZXZlbnRVcmwnKTtcbiAgICB0aGlzLmlzUGFnZVJlZnJlc2hlZCA9IEpTT04ucGFyc2UodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnaXNQYWdlUmVmcmVzaGVkJykpO1xuXG4gICAgdGhpcy5jaGVja1BhZ2VSZWZyZXNoKCk7XG5cbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGRhdGE6IG5ldyBGb3JtR3JvdXAoe30pLFxuICAgICAgZXZlbnQ6IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBpZDogW3RoaXMuZXZlbnRUcmlnZ2VyLmlkLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc3VtbWFyeTogWycnXSxcbiAgICAgICAgZGVzY3JpcHRpb246IFsnJ11cbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbk9yaWdpbiA9IHBhcmFtc1tDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU1dO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY2FsbGJhY2tFcnJvcnNTdWJqZWN0KSB7XG4gICAgICB0aGlzLmNhbGxiYWNrRXJyb3JzU3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjaGVja1BhZ2VSZWZyZXNoKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzUGFnZVJlZnJlc2hlZCAmJiB0aGlzLmluaXRpYWxVcmwpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2V2ZW50VXJsJyk7XG4gICAgICB0aGlzLndpbmRvd3NTZXJ2aWNlLmFsZXJ0KENhc2VFZGl0Q29tcG9uZW50LkFMRVJUX01FU1NBR0UpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuaW5pdGlhbFVybF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFnZShwYWdlSWQ6IHN0cmluZyk6IFdpemFyZFBhZ2Uge1xuICAgIHJldHVybiB0aGlzLndpemFyZC5nZXRQYWdlKHBhZ2VJZCwgdGhpcy5maWVsZHNVdGlscy5idWlsZENhblNob3dQcmVkaWNhdGUodGhpcy5ldmVudFRyaWdnZXIsIHRoaXMuZm9ybSkpO1xuICB9XG5cbiAgcHVibGljIGZpcnN0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGZpcnN0UGFnZSA9IHRoaXMud2l6YXJkLmZpcnN0UGFnZSh0aGlzLmZpZWxkc1V0aWxzLmJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZSh0aGlzLmV2ZW50VHJpZ2dlciwgdGhpcy5mb3JtKSk7XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtmaXJzdFBhZ2UgPyBmaXJzdFBhZ2UuaWQgOiAnc3VibWl0J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuYXZpZ2F0ZVRvUGFnZShwYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLmdldFBhZ2UocGFnZUlkKTtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3BhZ2UgPyBwYWdlLmlkIDogJ3N1Ym1pdCddLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cblxuICBwdWJsaWMgbmV4dChjdXJyZW50UGFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmluaXRpYWxVcmwgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdldmVudFVybCcpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMucm91dGVyLnVybCAmJiAhdGhpcy5pbml0aWFsVXJsKSB7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCdldmVudFVybCcsIHRoaXMucm91dGVyLnVybCk7XG4gICAgfVxuICAgIHRoaXMuZmllbGRzUHVyZ2VyLmNsZWFySGlkZGVuRmllbGRzKHRoaXMuZm9ybSwgdGhpcy53aXphcmQsIHRoaXMuZXZlbnRUcmlnZ2VyLCBjdXJyZW50UGFnZUlkKTtcbiAgICBjb25zdCBuZXh0UGFnZSA9IHRoaXMuZ2V0TmV4dFBhZ2Uoe1xuICAgICAgY3VycmVudFBhZ2VJZCxcbiAgICAgIHdpemFyZDogdGhpcy53aXphcmQsXG4gICAgICBldmVudFRyaWdnZXI6IHRoaXMuZXZlbnRUcmlnZ2VyLFxuICAgICAgZm9ybTogdGhpcy5mb3JtLFxuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIW5leHRQYWdlICYmXG4gICAgICAhKHRoaXMuZXZlbnRUcmlnZ2VyLnNob3dfc3VtbWFyeSB8fCB0aGlzLmV2ZW50VHJpZ2dlci5zaG93X3N1bW1hcnkgPT09IG51bGwpICYmXG4gICAgICAhdGhpcy5ldmVudFRyaWdnZXIuc2hvd19ldmVudF9ub3Rlcykge1xuICAgICAgdGhpcy5zdWJtaXRGb3JtKHtcbiAgICAgICAgZXZlbnRUcmlnZ2VyOiB0aGlzLmV2ZW50VHJpZ2dlcixcbiAgICAgICAgZm9ybTogdGhpcy5mb3JtLFxuICAgICAgICBzdWJtaXQ6IHRoaXMuc3VibWl0LFxuICAgICAgICBjYXNlRGV0YWlsczogdGhpcy5jYXNlRGV0YWlscyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0cmFyU2VydmljZS5yZXNldCgpO1xuXG4gICAgY29uc3QgdGhlUXVlcnlQYXJhbXM6IFBhcmFtcyA9IHt9O1xuICAgIHRoZVF1ZXJ5UGFyYW1zW0Nhc2VFZGl0Q29tcG9uZW50Lk9SSUdJTl9RVUVSWV9QQVJBTV0gPSB0aGlzLm5hdmlnYXRpb25PcmlnaW47XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtuZXh0UGFnZSA/IG5leHRQYWdlLmlkIDogJ3N1Ym1pdCddLCB7IHF1ZXJ5UGFyYW1zOiB0aGVRdWVyeVBhcmFtcywgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2aW91cyhjdXJyZW50UGFnZUlkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmZpZWxkc1B1cmdlci5jbGVhckhpZGRlbkZpZWxkcyh0aGlzLmZvcm0sIHRoaXMud2l6YXJkLCB0aGlzLmV2ZW50VHJpZ2dlciwgY3VycmVudFBhZ2VJZCk7XG4gICAgdGhpcy5yZWdpc3RyYXJTZXJ2aWNlLnJlc2V0KCk7XG5cbiAgICBjb25zdCBwcmV2aW91c1BhZ2UgPSB0aGlzLndpemFyZC5wcmV2aW91c1BhZ2UoY3VycmVudFBhZ2VJZCwgdGhpcy5maWVsZHNVdGlscy5idWlsZENhblNob3dQcmVkaWNhdGUodGhpcy5ldmVudFRyaWdnZXIsIHRoaXMuZm9ybSkpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFwcmV2aW91c1BhZ2UpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHRoZVF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcbiAgICB0aGVRdWVyeVBhcmFtc1tDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU1dID0gdGhpcy5uYXZpZ2F0aW9uT3JpZ2luO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcHJldmlvdXNQYWdlLmlkXSwgeyBxdWVyeVBhcmFtczogdGhlUXVlcnlQYXJhbXMsIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cblxuICBwdWJsaWMgaGFzUHJldmlvdXMoY3VycmVudFBhZ2VJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMud2l6YXJkLmhhc1ByZXZpb3VzUGFnZShjdXJyZW50UGFnZUlkLCB0aGlzLmZpZWxkc1V0aWxzLmJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZSh0aGlzLmV2ZW50VHJpZ2dlciwgdGhpcy5mb3JtKSk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsbGVkLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBlbWl0U3VibWl0dGVkKHJlc3BvbnNlOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5zdWJtaXR0ZWQuZW1pdCh7IGNhc2VJZDogcmVzcG9uc2VbJ2lkJ10sIHN0YXR1czogdGhpcy5nZXRTdGF0dXMocmVzcG9uc2UpIH0pO1xuICB9XG5cbiAgcHVibGljIGdldE5leHRQYWdlKHsgd2l6YXJkLCBjdXJyZW50UGFnZUlkLCBldmVudFRyaWdnZXIsIGZvcm0gfTogQ2FzZUVkaXRHZXROZXh0UGFnZSk6IFdpemFyZFBhZ2Uge1xuICAgIHJldHVybiB3aXphcmQubmV4dFBhZ2UoXG4gICAgICBjdXJyZW50UGFnZUlkLFxuICAgICAgdGhpcy5maWVsZHNVdGlscy5idWlsZENhblNob3dQcmVkaWNhdGUoZXZlbnRUcmlnZ2VyLCBmb3JtKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybShjb25maXJtYXRpb246IENvbmZpcm1hdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuY29uZmlybWF0aW9uID0gY29uZmlybWF0aW9uO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2NvbmZpcm0nXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIHN1Ym1pdEZvcm0oeyBldmVudFRyaWdnZXIsIGZvcm0sIGNhc2VEZXRhaWxzLCBzdWJtaXQgfTogQ2FzZUVkaXRTdWJtaXRGb3JtKTogdm9pZCB7XG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xuICAgIC8vIFdlIGhhdmUgdG8gcnVuIHRoZSBldmVudCBjb21wbGV0aW9uIGNoZWNrcyBpZiB0YXNrIGluIHNlc3Npb24gc3RvcmFnZVxuICAgIC8vIGFuZCBpZiB0aGUgdGFzayBpcyBpbiBzZXNzaW9uIHN0b3JhZ2UsIHRoZW4gaXMgaXQgYXNzb2NpYXRlZCB0byB0aGUgY2FzZVxuICAgIGNvbnN0IGNsaWVudENvbnRleHRTdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjbGllbnRDb250ZXh0Jyk7XG4gICAgY29uc3QgdXNlclRhc2sgPSBGaWVsZHNVdGlscy5nZXRVc2VyVGFza0Zyb21DbGllbnRDb250ZXh0KGNsaWVudENvbnRleHRTdHIpO1xuICAgIGNvbnN0IHRhc2tJblNlc3Npb25TdG9yYWdlID0gdXNlclRhc2sgPyB1c2VyVGFzay50YXNrX2RhdGEgOiBudWxsO1xuICAgIGxldCB0YXNrRXZlbnRDb21wbGV0aW9uSW5mbzogVGFza0V2ZW50Q29tcGxldGlvbkluZm87XG4gICAgbGV0IHVzZXJJbmZvOiBVc2VySW5mbztcbiAgICBjb25zdCB0YXNrRXZlbnRDb21wbGV0aW9uU3RyID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgndGFza0V2ZW50Q29tcGxldGlvbkluZm8nKTtcbiAgICBjb25zdCB1c2VySW5mb1N0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ3VzZXJEZXRhaWxzJyk7XG4gICAgY29uc3QgYXNzaWduTmVlZGVkID0gdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnYXNzaWduTmVlZGVkJyk7XG4gICAgaWYgKHRhc2tFdmVudENvbXBsZXRpb25TdHIpIHtcbiAgICAgIHRhc2tFdmVudENvbXBsZXRpb25JbmZvID0gSlNPTi5wYXJzZSh0YXNrRXZlbnRDb21wbGV0aW9uU3RyKTtcbiAgICB9XG4gICAgaWYgKHVzZXJJbmZvU3RyKSB7XG4gICAgICB1c2VySW5mbyA9IEpTT04ucGFyc2UodXNlckluZm9TdHIpO1xuICAgIH1cbiAgICBjb25zdCBldmVudElkID0gdGhpcy5nZXRFdmVudElkKGZvcm0pO1xuICAgIGNvbnN0IGNhc2VJZCA9IHRoaXMuZ2V0Q2FzZUlkKGNhc2VEZXRhaWxzKTtcbiAgICBjb25zdCB1c2VySWQgPSB1c2VySW5mby5pZCA/IHVzZXJJbmZvLmlkIDogdXNlckluZm8udWlkO1xuICAgIGNvbnN0IGV2ZW50RGV0YWlsczogRXZlbnREZXRhaWxzID0ge2V2ZW50SWQsIGNhc2VJZCwgdXNlcklkLCBhc3NpZ25OZWVkZWR9O1xuICAgIGlmICh0aGlzLnRhc2tFeGlzdHNGb3JUaGlzRXZlbnQodGFza0luU2Vzc2lvblN0b3JhZ2UsIHRhc2tFdmVudENvbXBsZXRpb25JbmZvLCBldmVudERldGFpbHMpKSB7XG4gICAgICB0aGlzLmFic3RyYWN0Q29uZmlnLmxvZ01lc3NhZ2UoYHRhc2sgZXhpc3QgZm9yIHRoaXMgZXZlbnQgZm9yIGNhc2VJZCBhbmQgZXZlbnRJZCBhcyAke2Nhc2VJZH0gJHtldmVudElkfWApO1xuICAgICAgLy8gU2hvdyBldmVudCBjb21wbGV0aW9uIGNvbXBvbmVudCB0byBwZXJmb3JtIGV2ZW50IGNvbXBsZXRpb24gY2hlY2tzXG4gICAgICB0aGlzLmV2ZW50Q29tcGxldGlvblBhcmFtcyA9ICh7XG4gICAgICAgIGNhc2VJZCxcbiAgICAgICAgZXZlbnRJZCxcbiAgICAgICAgdGFzazogdGFza0luU2Vzc2lvblN0b3JhZ2VcbiAgICAgIH0pO1xuICAgICAgLy8gYWRkIHRhc2tFdmVudENvbXBsZXRpb25JbmZvIGFnYWluIHRvIGVuc3VyZSBsaW5rIGN1cnJlbnQgZXZlbnQgd2l0aCB0YXNrIGlkXG4gICAgICAvLyBub3RlOiBwcmV2aW91cyB1c2FnZSB3YXMgY3JlYXRlZCBoZXJlIHNvIHRoaXMgaXMgdG8gZW5zdXJlIGNvcnJlY3QgZnVuY3Rpb25hbGl0eSBjb250aW51ZXNcbiAgICAgIGNvbnN0IHRhc2tFdmVudENvbXBsZXRpb25JbmZvOiBUYXNrRXZlbnRDb21wbGV0aW9uSW5mbyA9IHtcbiAgICAgICAgY2FzZUlkLFxuICAgICAgICBldmVudElkLFxuICAgICAgICB1c2VySWQsXG4gICAgICAgIHRhc2tJZDogdGFza0luU2Vzc2lvblN0b3JhZ2UuaWQsXG4gICAgICAgIGNyZWF0ZWRUaW1lc3RhbXA6IERhdGUubm93KCl9O1xuICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgndGFza0V2ZW50Q29tcGxldGlvbkluZm8nLCBKU09OLnN0cmluZ2lmeSh0YXNrRXZlbnRDb21wbGV0aW9uSW5mbykpO1xuICAgICAgdGhpcy5pc0V2ZW50Q29tcGxldGlvbkNoZWNrc1JlcXVpcmVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGFzayBub3QgaW4gc2Vzc2lvbiBzdG9yYWdlLCBwcm9jZWVkIHRvIHN1Ym1pdFxuICAgICAgY29uc3QgY2FzZUV2ZW50RGF0YSA9IHRoaXMuZ2VuZXJhdGVDYXNlRXZlbnREYXRhKHtcbiAgICAgICAgZXZlbnRUcmlnZ2VyLFxuICAgICAgICBmb3JtXG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2FzZVN1Ym1pdCh7Zm9ybSxcbiAgICAgICAgY2FzZUV2ZW50RGF0YSxcbiAgICAgICAgc3VibWl0XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FzZUlkKGNhc2VEZXRhaWxzOiBDYXNlVmlldyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChjYXNlRGV0YWlscyA/IGNhc2VEZXRhaWxzLmNhc2VfaWQgOiAnJyk7XG4gIH1cblxuICBwcml2YXRlIGdldEV2ZW50SWQoZm9ybTogRm9ybUdyb3VwKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZm9ybS52YWx1ZS5ldmVudC5pZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVDYXNlRXZlbnREYXRhKHsgZXZlbnRUcmlnZ2VyLCBmb3JtIH06IENhc2VFZGl0R2VuZXJhdGVDYXNlRXZlbnREYXRhICk6IENhc2VFdmVudERhdGEge1xuICAgIGNvbnN0IGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB7XG4gICAgICBkYXRhOiB0aGlzLnJlcGxhY2VFbXB0eUNvbXBsZXhGaWVsZFZhbHVlcyhcbiAgICAgICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnNhbml0aXNlKFxuICAgICAgICAgIHRoaXMucmVwbGFjZUhpZGRlbkZvcm1WYWx1ZXNXaXRoT3JpZ2luYWxDYXNlRGF0YShcbiAgICAgICAgICAgIGZvcm0uZ2V0KCdkYXRhJykgYXMgRm9ybUdyb3VwLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpKSksXG4gICAgICBldmVudDogZm9ybS52YWx1ZS5ldmVudFxuICAgIH0gYXMgQ2FzZUV2ZW50RGF0YTtcbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UuY2xlYXJOb25DYXNlRmllbGRzKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlTnVsbExhYmVscyhjYXNlRXZlbnREYXRhLmRhdGEsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZUVtcHR5RG9jdW1lbnRzKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgICAvLyBSZW1vdmUgY29sbGVjdGlvbiBmaWVsZHMgdGhhdCBoYXZlIFwibWluXCIgdmFsaWRhdGlvbiBvZiBncmVhdGVyIHRoYW4gemVybyBzZXQgb24gdGhlIEZpZWxkVHlwZSBidXQgYXJlIGVtcHR5O1xuICAgIC8vIHRoZXNlIHdpbGwgZmFpbCB2YWxpZGF0aW9uXG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZUVtcHR5Q29sbGVjdGlvbnNXaXRoTWluVmFsaWRhdGlvbihjYXNlRXZlbnREYXRhLmRhdGEsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgLy8gRm9yIENhc2UgRmxhZyBzdWJtaXNzaW9ucyAod2hlcmUgYSBGbGFnTGF1bmNoZXIgZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgZXZlbnQgdHJpZ2dlciksIHRoZSBmbGFnIGRldGFpbHMgZGF0YVxuICAgIC8vIG5lZWRzIHBvcHVsYXRpbmcgZm9yIGVhY2ggRmxhZ3MgZmllbGQsIHRoZW4gdGhlIEZsYWdMYXVuY2hlciBmaWVsZCBuZWVkcyByZW1vdmluZ1xuICAgIHRoaXMuZm9ybVZhbHVlU2VydmljZS5yZXBvcHVsYXRlRm9ybURhdGFGcm9tQ2FzZUZpZWxkVmFsdWVzKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgICAvLyBEYXRhIHBvcHVsYXRpb24gc3RlcCByZXF1aXJlZCBmb3IgTGlua2VkIENhc2VzXG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnBvcHVsYXRlTGlua2VkQ2FzZXNEZXRhaWxzRnJvbUNhc2VGaWVsZHMoY2FzZUV2ZW50RGF0YS5kYXRhLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICAgIC8vIFJlbW92ZSBcIkxhdW5jaGVyXCItdHlwZSBmaWVsZHMgKHRoZXNlIGhhdmUgbm8gdmFsdWVzIGFuZCBhcmUgbm90IGludGVuZGVkIHRvIGJlIHBlcnNpc3RlZClcbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlQ2FzZUZpZWxkc09mVHlwZShjYXNlRXZlbnREYXRhLmRhdGEsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcywgWydGbGFnTGF1bmNoZXInLCAnQ29tcG9uZW50TGF1bmNoZXInXSk7XG5cbiAgICAvLyBkZWxldGUgZmllbGRzIHdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgY2FzZSBldmVudCBqb3VybmV5IHdpemFyZCBwYWdlcyBjYXNlIGZpZWxkc1xuICAgIHRoaXMudmFsaWRQYWdlTGlzdENhc2VGaWVsZHNTZXJ2aWNlLmRlbGV0ZU5vblZhbGlkYXRlZEZpZWxkcyh0aGlzLnZhbGlkUGFnZUxpc3QsIGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzLCBmYWxzZSwgZm9ybS5jb250cm9sc1snZGF0YSddLnZhbHVlKTtcbiAgICBjb25zdCBwYWdlTGlzdENhc2VGaWVsZHMgPSB0aGlzLnZhbGlkUGFnZUxpc3RDYXNlRmllbGRzU2VydmljZS52YWxpZFBhZ2VMaXN0Q2FzZUZpZWxkcyh0aGlzLnZhbGlkUGFnZUxpc3QsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcywgZm9ybS5jb250cm9sc1snZGF0YSddLnZhbHVlKTtcbiAgICAvLyBSZW1vdmUgdW5uZWNlc3NhcnkgY2FzZSBmaWVsZHMgd2hpY2ggYXJlIGhpZGRlbiwgb25seSBpZiB0aGUgc3VibWlzc2lvbiBpcyAqbm90KiBmb3IgQ2FzZSBGbGFnc1xuICAgIGlmICghdGhpcy5pc0Nhc2VGbGFnU3VibWlzc2lvbikge1xuICAgICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZVVubmVjZXNzYXJ5RmllbGRzKGNhc2VFdmVudERhdGEuZGF0YSwgcGFnZUxpc3RDYXNlRmllbGRzLCB0cnVlLCB0cnVlKTtcbiAgICB9XG5cbiAgICBjYXNlRXZlbnREYXRhLmV2ZW50X3Rva2VuID0gZXZlbnRUcmlnZ2VyLmV2ZW50X3Rva2VuO1xuICAgIGNhc2VFdmVudERhdGEuaWdub3JlX3dhcm5pbmcgPSB0aGlzLmlnbm9yZVdhcm5pbmc7XG4gICAgaWYgKHRoaXMuY29uZmlybWF0aW9uKSB7XG4gICAgICBjYXNlRXZlbnREYXRhLmRhdGEgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FzZUV2ZW50RGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBub24tYXJyYXkgdmFsdWUgb2JqZWN0cyB3aXRoIGBudWxsYCBmb3IgYW55IENvbXBsZXgtdHlwZSBmaWVsZHMgd2hvc2UgdmFsdWUgaXMgZWZmZWN0aXZlbHkgZW1wdHksIGkuZS5cbiAgICogYWxsIGl0cyBzdWItZmllbGRzIGFuZCBkZXNjZW5kYW50cyBhcmUgYG51bGxgIG9yIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgcmVwcmVzZW50aW5nIGFsbCB0aGUgZm9ybSBmaWVsZCBkYXRhXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtIGZpZWxkIGRhdGEgbW9kaWZpZWQgYWNjb3JkaW5nbHlcbiAgICovXG4gIHByaXZhdGUgcmVwbGFjZUVtcHR5Q29tcGxleEZpZWxkVmFsdWVzKGRhdGE6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgT2JqZWN0LmtleXMoZGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0YVtrZXldKSAmJiB0eXBlb2YgZGF0YVtrZXldID09PSAnb2JqZWN0JyAmJiAhRmllbGRzVXRpbHMuY29udGFpbnNOb25FbXB0eVZhbHVlcyhkYXRhW2tleV0pKSB7XG4gICAgICAgIGRhdGFba2V5XSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmF2ZXJzZSAqYWxsKiB2YWx1ZXMgb2YgYSB7QGxpbmsgRm9ybUdyb3VwfSwgaW5jbHVkaW5nIHRob3NlIGZvciBkaXNhYmxlZCBmaWVsZHMgKGkuZS4gaGlkZGVuIG9uZXMpLCByZXBsYWNpbmcgdGhlXG4gICAqIHZhbHVlIG9mIGFueSB0aGF0IGFyZSBoaWRkZW4gQU5EIGhhdmUgYHJldGFpbl9oaWRkZW5fdmFsdWVgIHNldCB0byBgdHJ1ZWAgaW4gdGhlIGNvcnJlc3BvbmRpbmcgYENhc2VGaWVsZGAsIHdpdGhcbiAgICogdGhlICpvcmlnaW5hbCogdmFsdWUgaGVsZCBpbiB0aGUgYENhc2VGaWVsZGAgb2JqZWN0LlxuICAgKlxuICAgKiBUaGlzIGlzIGFzIHBlciBkZXNpZ24gaW4gRVVJLTM2MjIsIHdoZXJlIGFueSB1c2VyLWRyaXZlbiB1cGRhdGVzIHRvIGhpZGRlbiBmaWVsZHMgd2l0aCBgcmV0YWluX2hpZGRlbl92YWx1ZWAgPVxuICAgKiBgdHJ1ZWAgYXJlIGlnbm9yZWQgKHRodXMgcmV0YWluaW5nIHRoZSB2YWx1ZSBkaXNwbGF5ZWQgb3JpZ2luYWxseSkuXG4gICAqXG4gICAqICogRm9yIENvbXBsZXggZmllbGQgdHlwZXMsIHRoZSByZXBsYWNlbWVudCBhYm92ZSBpcyBwZXJmb3JtZWQgcmVjdXJzaXZlbHkgZm9yIGFsbCBoaWRkZW4gc3ViLWZpZWxkcyB3aXRoXG4gICAqIGByZXRhaW5faGlkZGVuX3ZhbHVlYCA9IGB0cnVlYC5cbiAgICpcbiAgICogKiBGb3IgQ29sbGVjdGlvbiBmaWVsZCB0eXBlcywgaW5jbHVkaW5nIGNvbGxlY3Rpb25zIG9mIENvbXBsZXggYW5kIERvY3VtZW50IGZpZWxkIHR5cGVzLCB0aGUgcmVwbGFjZW1lbnQgaXNcbiAgICogcGVyZm9ybWVkIGZvciBhbGwgZmllbGRzIGluIHRoZSBjb2xsZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gZm9ybUdyb3VwIFRoZSBgRm9ybUdyb3VwYCBpbnN0YW5jZSB3aG9zZSByYXcgdmFsdWVzIGFyZSB0byBiZSB0cmF2ZXJzZWRcbiAgICogQHBhcmFtIGNhc2VGaWVsZHMgVGhlIGFycmF5IG9mIHtAbGluayBDYXNlRmllbGR9IGRvbWFpbiBtb2RlbCBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gZmllbGRzIGluIGBmb3JtR3JvdXBgXG4gICAqIEBwYXJhbSBwYXJlbnRGaWVsZCBSZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBgQ2FzZUZpZWxkYC4gVXNlZCBmb3IgcmV0cmlldmluZyB0aGUgc3ViLWZpZWxkIHZhbHVlcyBvZiBhIENvbXBsZXggZmllbGRcbiAgICogdG8gcGVyZm9ybSByZWN1cnNpdmUgcmVwbGFjZW1lbnQgLSB0aGUgc3ViLWZpZWxkIGBDYXNlRmllbGRgcyB0aGVtc2VsdmVzIGRvICpub3QqIGNvbnRhaW4gYW55IHZhbHVlc1xuICAgKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgKnJhdyogZm9ybSB2YWx1ZSBkYXRhIChhcyBrZXktdmFsdWUgcGFpcnMpLCB3aXRoIGFueSB2YWx1ZSByZXBsYWNlbWVudHMgYXMgbmVjZXNzYXJ5XG4gICAqL1xuICBwcml2YXRlIHJlcGxhY2VIaWRkZW5Gb3JtVmFsdWVzV2l0aE9yaWdpbmFsQ2FzZURhdGEoZm9ybUdyb3VwOiBGb3JtR3JvdXAsIGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBwYXJlbnRGaWVsZD86IENhc2VGaWVsZCk6IG9iamVjdCB7XG4gICAgLy8gR2V0IHRoZSByYXcgZm9ybSB2YWx1ZSBkYXRhLCB3aGljaCBpbmNsdWRlcyB0aGUgdmFsdWVzIG9mIGFueSBkaXNhYmxlZCBjb250cm9scywgYXMga2V5LXZhbHVlIHBhaXJzXG4gICAgY29uc3QgcmF3Rm9ybVZhbHVlRGF0YSA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgLy8gUGxhY2UgYWxsIGNhc2UgZmllbGRzIGluIGEgbG9va3VwIG9iamVjdCwgc28gdGhleSBjYW4gYmUgcmV0cmlldmVkIGJ5IGlkXG4gICAgY29uc3QgY2FzZUZpZWxkc0xvb2t1cCA9IHt9O1xuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjYXNlRmllbGRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjYXNlRmllbGRzTG9va3VwW2Nhc2VGaWVsZHNbaV0uaWRdID0gY2FzZUZpZWxkc1tpXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXBsYWNlIGFueSBmb3JtIHZhbHVlIHdpdGggdGhlIG9yaWdpbmFsLCB3aGVyZSBpdHMgQ2FzZUZpZWxkIGlzIGhpZGRlbiBBTkQgaGFzIHRoZSByZXRhaW5faGlkZGVuX3ZhbHVlIGZsYWcgc2V0XG4gICAgICogdG8gdHJ1ZS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBDYXNlRmllbGQncyBgaGlkZGVuYCBhdHRyaWJ1dGUgaXMgbnVsbCBvciB1bmRlZmluZWQsIHRoZW4gY2hlY2sgdGhpcyBhdHRyaWJ1dGUgaW4gdGhlIHBhcmVudCBDYXNlRmllbGQgKGlmXG4gICAgICogb25lIGV4aXN0cykuIFRoaXMgaXMgb2NjdXJyaW5nIChhbmQgaXMgcG9zc2libHkgYSBidWcpIHdoZW4gYSBDYXNlRmllbGQgaXMgYSBzdWItZmllbGQgb2YgYSBDb21wbGV4IHR5cGUsIG9yIGFuXG4gICAgICogaXRlbSBpbiBhIENvbGxlY3Rpb24gdHlwZS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBmaWVsZCBpcyBhIENvbXBsZXggdHlwZSB3aXRoIHJldGFpbl9oaWRkZW5fdmFsdWUgPSB0cnVlLCBwZXJmb3JtIGEgcmVjdXJzaXZlIHJlcGxhY2VtZW50IGZvciBhbGwgKGhpZGRlbilcbiAgICAgKiBzdWItZmllbGRzIHdpdGggcmV0YWluX2hpZGRlbl92YWx1ZSA9IHRydWUsIHVzaW5nIHRoZWlyIG9yaWdpbmFsIENhc2VGaWVsZCB2YWx1ZXMgKGZyb20gdGhlIGBmb3JtYXR0ZWRfdmFsdWVgXG4gICAgICogYXR0cmlidXRlKS5cbiAgICAgKlxuICAgICAqIElmIHRoZSBmaWVsZCBpcyBhIENvbGxlY3Rpb24gdHlwZSB3aXRoIHJldGFpbl9oaWRkZW5fdmFsdWUgPSB0cnVlLCB0aGUgZW50aXJlIGNvbGxlY3Rpb24gaXMgcmVwbGFjZWQgd2l0aCB0aGVcbiAgICAgKiBvcmlnaW5hbCBmcm9tIGBmb3JtYXR0ZWRfdmFsdWVgLiBUaGlzIGFwcGxpZXMgdG8gKmFsbCogdHlwZXMgb2YgQ29sbGVjdGlvbnMuXG4gICAgICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBPYmplY3Qua2V5cyhyYXdGb3JtVmFsdWVEYXRhKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGNhc2VGaWVsZDogQ2FzZUZpZWxkID0gY2FzZUZpZWxkc0xvb2t1cFtrZXldO1xuICAgICAgLy8gSWYgY2FzZUZpZWxkLmhpZGRlbiBpcyBOT1QgdHJ1dGh5IGFuZCBhbHNvIE5PVCBlcXVhbCB0byBmYWxzZSwgdGhlbiBpdCBtdXN0IGJlIG51bGwvdW5kZWZpbmVkIChyZW1lbWJlciB0aGF0XG4gICAgICAvLyBib3RoIG51bGwgYW5kIHVuZGVmaW5lZCBhcmUgZXF1YWwgdG8gKm5laXRoZXIgZmFsc2Ugbm9yIHRydWUqKVxuICAgICAgaWYgKGNhc2VGaWVsZD8ucmV0YWluX2hpZGRlbl92YWx1ZSAmJlxuICAgICAgICAoY2FzZUZpZWxkPy5oaWRkZW4gfHwgKGNhc2VGaWVsZD8uaGlkZGVuICE9PSBmYWxzZSAmJiBwYXJlbnRGaWVsZD8uaGlkZGVuKSkpIHtcbiAgICAgICAgaWYgKGNhc2VGaWVsZC5maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4Jykge1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ29tcGxleEZpZWxkKGNhc2VGaWVsZCwgZm9ybUdyb3VwLCBrZXksIHJhd0Zvcm1WYWx1ZURhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuaGFuZGxlTm9uQ29tcGxleEZpZWxkKHBhcmVudEZpZWxkLCByYXdGb3JtVmFsdWVEYXRhLCBrZXksIGNhc2VGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiByYXdGb3JtVmFsdWVEYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb25Db21wbGV4RmllbGQocGFyZW50RmllbGQ6IENhc2VGaWVsZCwgcmF3Rm9ybVZhbHVlRGF0YSwga2V5OiBzdHJpbmcsIGNhc2VGaWVsZDogQ2FzZUZpZWxkKSB7XG4gICAgLy8gRGVmYXVsdCBjYXNlIGFsc28gaGFuZGxlcyBjb2xsZWN0aW9ucyBvZiAqYWxsKiB0eXBlczsgdGhlIGVudGlyZSBjb2xsZWN0aW9uIGluIHJhd0Zvcm1WYWx1ZURhdGEgd2lsbCBiZVxuICAgIC8vIHJlcGxhY2VkIHdpdGggdGhlIG9yaWdpbmFsIGZyb20gZm9ybWF0dGVkX3ZhbHVlXG4gICAgLy8gVXNlIHRoZSBDYXNlRmllbGQncyBleGlzdGluZyAqZm9ybWF0dGVkX3ZhbHVlKiBmcm9tIHRoZSBwYXJlbnQsIGlmIGF2YWlsYWJsZS4gKFRoaXMgaXMgbmVjZXNzYXJ5IGZvclxuICAgIC8vIENvbXBsZXggZmllbGRzLCB3aG9zZSBzdWItZmllbGRzIGRvIG5vdCBob2xkIGFueSB2YWx1ZXMgaW4gdGhlIG1vZGVsLikgT3RoZXJ3aXNlLCB1c2UgZm9ybWF0dGVkX3ZhbHVlXG4gICAgLy8gZnJvbSB0aGUgQ2FzZUZpZWxkIGl0c2VsZi5cbiAgICBpZiAocGFyZW50RmllbGQgJiYgcGFyZW50RmllbGQuZm9ybWF0dGVkX3ZhbHVlKSB7XG4gICAgICByYXdGb3JtVmFsdWVEYXRhW2tleV0gPSBwYXJlbnRGaWVsZC5mb3JtYXR0ZWRfdmFsdWVbY2FzZUZpZWxkLmlkXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEoY2FzZUZpZWxkLmhpZGRlbiAmJiBjYXNlRmllbGQucmV0YWluX2hpZGRlbl92YWx1ZSkpIHtcbiAgICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUNvbXBsZXhGaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCwgZm9ybUdyb3VwOiBGb3JtR3JvdXA8YW55Piwga2V5OiBzdHJpbmcsIHJhd0Zvcm1WYWx1ZURhdGEpIHtcbiAgICAvLyBOb3RlOiBEZWxpYmVyYXRlIHVzZSBvZiBlcXVhbGl0eSAoPT0pIGFuZCBub24tZXF1YWxpdHkgKCE9KSBvcGVyYXRvcnMgZm9yIG51bGwgY2hlY2tzIHRocm91Z2hvdXQsIHRvXG4gICAgLy8gaGFuZGxlIGJvdGggbnVsbCBhbmQgdW5kZWZpbmVkIHZhbHVlc1xuICAgIGlmIChjYXNlRmllbGQudmFsdWUgIT0gbnVsbCkge1xuICAgICAgLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IHRvIHJlcGxhY2UgdGhlIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIGFzIG5lY2Vzc2FyeSwgcGFzc2luZyB0aGVcbiAgICAgIC8vIENhc2VGaWVsZCBpdHNlbGYgKHRoZSBzdWItZmllbGRzIGRvIG5vdCBjb250YWluIGFueSB2YWx1ZXMsIHNvIHRoZXNlIG5lZWQgdG8gYmUgb2J0YWluZWQgZnJvbSB0aGVcbiAgICAgIC8vIHBhcmVudClcbiAgICAgIC8vIFVwZGF0ZSByYXdGb3JtVmFsdWVEYXRhIGZvciB0aGlzIGZpZWxkXG4gICAgICAvLyBjcmVhdGluZyBmb3JtIGdyb3VwIGFuZCBhZGRpbmcgY29udHJvbCBpbnRvIGl0IGluIGNhc2UgY2FzZUZpZWxkIGlzIG9mIGNvbXBsZXh0IHR5cGUgYW5kIGFuZCBwYXJ0IG9mIGZvcm1Hcm91cFxuICAgICAgY29uc3QgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICBpZiAoZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybUdyb3VwLmNvbnRyb2xzW2tleV0udmFsdWUpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICBmb3JtLmFkZENvbnRyb2woaXRlbSwgbmV3IEZvcm1Db250cm9sKGZvcm1Hcm91cC5jb250cm9sc1trZXldLnZhbHVlW2l0ZW1dKSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gdGhpcy5yZXBsYWNlSGlkZGVuRm9ybVZhbHVlc1dpdGhPcmlnaW5hbENhc2VEYXRhKFxuICAgICAgICBmb3JtLCBjYXNlRmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcywgY2FzZUZpZWxkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNhc2VTdWJtaXQoeyBmb3JtLCBjYXNlRXZlbnREYXRhLCBzdWJtaXQgfTogQ2FzZUVkaXRDYXNlU3VibWl0KTogdm9pZCB7XG4gICAgY29uc3QgbG9hZGluZ1NwaW5uZXJUb2tlbiA9IHRoaXMubG9hZGluZ1NlcnZpY2UucmVnaXN0ZXIoKTtcbiAgICAvLyBrZWVwIHRoZSBpbml0aWFsIGV2ZW50IHJlc3BvbnNlIHRvIGZpbmFsaXNlIHByb2Nlc3MgYWZ0ZXIgdGFzayBjb21wbGV0aW9uXG4gICAgbGV0IGV2ZW50UmVzcG9uc2U6IG9iamVjdDtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCd0YXNrQ29tcGxldGlvbkVycm9yJywgJ2ZhbHNlJyk7XG4gICAgc3VibWl0KGNhc2VFdmVudERhdGEpLnBpcGUoc3dpdGNoTWFwKChyZXNwb25zZSkgPT4ge1xuICAgICAgZXZlbnRSZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgICAgcmV0dXJuIHRoaXMucG9zdENvbXBsZXRlVGFza0lmUmVxdWlyZWQoKTtcbiAgICB9KSxmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2UudW5yZWdpc3Rlcihsb2FkaW5nU3Bpbm5lclRva2VuKTtcbiAgICAgICAgLy8gb24gZXZlbnQgY29tcGxldGlvbiBlbnN1cmUgdGhlIHByZXZpb3VzIGV2ZW50IGNsaWVudENvbnRleHQvdGFza0V2ZW50Q29tcGxldGlvbkluZm8gcmVtb3ZlZFxuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjbGllbnRDb250ZXh0Jyk7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ3Rhc2tFdmVudENvbXBsZXRpb25JbmZvJylcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcbiAgICAgIH0pKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmluaXNoRXZlbnRDb21wbGV0aW9uTG9naWMoZXZlbnRSZXNwb25zZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICBpZiAoIWV2ZW50UmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vIGV2ZW50IHN1Ym1pc3Npb24gZXJyb3JcbiAgICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgICAgIHRoaXMuY2FsbGJhY2tFcnJvcnNTdWJqZWN0Lm5leHQoZXJyb3IpO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmICh0aGlzLmVycm9yLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgdGhpcy5mb3JtRXJyb3JTZXJ2aWNlXG4gICAgICAgICAgICAgICAgLm1hcEZpZWxkRXJyb3JzKHRoaXMuZXJyb3IuZGV0YWlscy5maWVsZF9lcnJvcnMsIGZvcm0uY29udHJvbHNbJ2RhdGEnXSBhcyBGb3JtR3JvdXAsICd2YWxpZGF0aW9uJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ3Rhc2tDb21wbGV0aW9uRXJyb3InLCAndHJ1ZScpO1xuICAgICAgICAgICAgLy8gdGFzayBhc3NpZ25tZW50L2NvbXBsZXRpb24gZXJyb3IgLSBoYW5kbGVkIHdpdGhpbiB3b3JrYWxsb2NhdGlvbiBzZXJ2aWNlXG4gICAgICAgICAgICAvLyBjb3VsZCBzZXQgdGFzayB0byBiZSBkZWxldGVkIChvciBjb21wbGV0ZWQgbGF0ZXIpP1xuICAgICAgICAgICAgdGhpcy5maW5pc2hFdmVudENvbXBsZXRpb25Mb2dpYyhldmVudFJlc3BvbnNlKTtcbiAgICAgICAgICAgIC8vIGJlbG93IGFsbG93cyBlcnJvciB0byBiZSBzaG93biBvbiBuYXZpZ2F0aW9uIHRvIGNvbmZpcm1hdGlvbiBwYWdlXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zZXRQcmVzZXJ2ZUFsZXJ0cyh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHtwaHJhc2U6IENvbnN0YW50cy5UQVNLX0NPTVBMRVRJT05fRVJST1J9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIHBvc3RDb21wbGV0ZVRhc2tJZlJlcXVpcmVkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgY2xpZW50Q29udGV4dFN0ciA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2NsaWVudENvbnRleHQnKTtcbiAgICBjb25zdCB1c2VyVGFzayA9IEZpZWxkc1V0aWxzLmdldFVzZXJUYXNrRnJvbUNsaWVudENvbnRleHQoY2xpZW50Q29udGV4dFN0cik7XG4gICAgY29uc3QgW3Rhc2ssIHRhc2tUb0JlQ29tcGxldGVkXSA9IHVzZXJUYXNrID8gW3VzZXJUYXNrLnRhc2tfZGF0YSwgdXNlclRhc2suY29tcGxldGVfdGFza10gOiBbbnVsbCwgZmFsc2VdO1xuICAgIGNvbnN0IGFzc2lnbk5lZWRlZCA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2Fzc2lnbk5lZWRlZCcpID09PSAndHJ1ZSc7XG4gICAgaWYgKHRhc2sgJiYgYXNzaWduTmVlZGVkICYmIHRhc2tUb0JlQ29tcGxldGVkKSB7XG4gICAgICB0aGlzLmFic3RyYWN0Q29uZmlnLmxvZ01lc3NhZ2UoYHBvc3RDb21wbGV0ZVRhc2tJZlJlcXVpcmVkIHdpdGggYXNzaWduTmVlZGVkOiB0YXNrSWQgJHt0YXNrLmlkfSBhbmQgZXZlbnQgbmFtZSAke3RoaXMuZXZlbnRUcmlnZ2VyLm5hbWV9YCk7XG4gICAgICByZXR1cm4gdGhpcy53b3JrQWxsb2NhdGlvblNlcnZpY2UuYXNzaWduQW5kQ29tcGxldGVUYXNrKHRhc2suaWQsIHRoaXMuZXZlbnRUcmlnZ2VyLm5hbWUpO1xuICAgIH0gZWxzZSBpZiAodGFzayAmJiB0YXNrVG9CZUNvbXBsZXRlZCkge1xuICAgICAgdGhpcy5hYnN0cmFjdENvbmZpZy5sb2dNZXNzYWdlKGBwb3N0Q29tcGxldGVUYXNrSWZSZXF1aXJlZDogdGFza0lkICR7dGFzay5pZH0gYW5kIGV2ZW50IG5hbWUgJHt0aGlzLmV2ZW50VHJpZ2dlci5uYW1lfWApO1xuICAgICAgcmV0dXJuIHRoaXMud29ya0FsbG9jYXRpb25TZXJ2aWNlLmNvbXBsZXRlVGFzayh0YXNrLmlkLCB0aGlzLmV2ZW50VHJpZ2dlci5uYW1lKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5pc2hFdmVudENvbXBsZXRpb25Mb2dpYyhldmVudFJlc3BvbnNlOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNhc2VOb3RpZmllci5jYWNoZWRDYXNlVmlldyA9IG51bGw7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSgnZXZlbnRVcmwnKTtcbiAgICBjb25zdCBjb25maXJtYXRpb246IENvbmZpcm1hdGlvbiA9IHRoaXMuYnVpbGRDb25maXJtYXRpb24oZXZlbnRSZXNwb25zZSk7XG4gICAgaWYgKGNvbmZpcm1hdGlvbiAmJiAoY29uZmlybWF0aW9uLmdldEhlYWRlcigpIHx8IGNvbmZpcm1hdGlvbi5nZXRCb2R5KCkpKSB7XG4gICAgICB0aGlzLmNvbmZpcm0oY29uZmlybWF0aW9uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbWl0U3VibWl0dGVkKGV2ZW50UmVzcG9uc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb25maXJtYXRpb24ocmVzcG9uc2U6IG9iamVjdCk6IENvbmZpcm1hdGlvbiB7XG4gICAgaWYgKHJlc3BvbnNlWydhZnRlcl9zdWJtaXRfY2FsbGJhY2tfcmVzcG9uc2UnXSkge1xuICAgICAgcmV0dXJuIG5ldyBDb25maXJtYXRpb24oXG4gICAgICAgIHJlc3BvbnNlWydpZCddLFxuICAgICAgICByZXNwb25zZVsnY2FsbGJhY2tfcmVzcG9uc2Vfc3RhdHVzJ10sXG4gICAgICAgIHJlc3BvbnNlWydhZnRlcl9zdWJtaXRfY2FsbGJhY2tfcmVzcG9uc2UnXVsnY29uZmlybWF0aW9uX2hlYWRlciddLFxuICAgICAgICByZXNwb25zZVsnYWZ0ZXJfc3VibWl0X2NhbGxiYWNrX3Jlc3BvbnNlJ11bJ2NvbmZpcm1hdGlvbl9ib2R5J11cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIGNoZWNrcyB3aGV0aGVyIGN1cnJlbnQgY2xpZW50Q29udGV4dCByZWxldmFudCBmb3IgdGhlIGV2ZW50XG4gIHB1YmxpYyB0YXNrRXhpc3RzRm9yVGhpc0V2ZW50KHRhc2tJblNlc3Npb25TdG9yYWdlOiBUYXNrLCB0YXNrRXZlbnRDb21wbGV0aW9uSW5mbzogVGFza0V2ZW50Q29tcGxldGlvbkluZm8sIGV2ZW50RGV0YWlsczogRXZlbnREZXRhaWxzKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0YXNrSW5TZXNzaW9uU3RvcmFnZSB8fCB0YXNrSW5TZXNzaW9uU3RvcmFnZS5jYXNlX2lkICE9PSBldmVudERldGFpbHMuY2FzZUlkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghdGFza0V2ZW50Q29tcGxldGlvbkluZm8pIHtcbiAgICAgIC8vIGlmIG5vIHRhc2sgZXZlbnQgcHJlc2VudCB0aGVuIHRoZXJlIGlzIG5vIHRhc2sgdG8gY29tcGxldGUgZnJvbSBwcmV2aW91cyBldmVudCBwcmVzZW50XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRhc2tFdmVudENvbXBsZXRpb25JbmZvLnRhc2tJZCAhPT0gdGFza0luU2Vzc2lvblN0b3JhZ2UuaWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2UgaWYgKCh0YXNrRXZlbnRDb21wbGV0aW9uSW5mby50YXNrSWQgPT09IHRhc2tJblNlc3Npb25TdG9yYWdlLmlkICYmXG4gICAgICAgICAgdGhpcy5ldmVudERldGFpbHNEb05vdE1hdGNoKHRhc2tFdmVudENvbXBsZXRpb25JbmZvLCBldmVudERldGFpbHMpKVxuICAgICAgICB8fCB0aGlzLmV2ZW50TW9yZVRoYW5EYXlBZ28odGFza0V2ZW50Q29tcGxldGlvbkluZm8uY3JlYXRlZFRpbWVzdGFtcClcbiAgICAgICkge1xuICAgICAgICAvLyBpZiB0aGUgc2Vzc2lvbiBzdG9yYWdlIG5vdCByZWxhdGVkIHRvIGV2ZW50LCBpZ25vcmUgaXQgYW5kIHJlbW92ZVxuICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdjbGllbnRDb250ZXh0Jyk7XG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ3Rhc2tFdmVudENvbXBsZXRpb25JbmZvJyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudERldGFpbHMuYXNzaWduTmVlZGVkID09PSAnZmFsc2UnICYmIGV2ZW50RGV0YWlscy51c2VySWQgIT09IHRhc2tJblNlc3Npb25TdG9yYWdlLmFzc2lnbmVlKSB7XG4gICAgICAgIC8vIGlmIHRoZSB1c2VyIGRvZXMgbm90IG1hdGNoIHRhc2sgYXNzaWduZWUsIGFzc2lnbiBpcyBub3cgbmVlZGVkXG4gICAgICAgIC8vIGRhdGEgY2Fubm90IGJlIGRlbGV0ZWQgYW5kIGlnbm9yZWQgYXMgaXQgbWF0Y2hlcyB1bmRlcnN0YW5kaW5nXG4gICAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2Fzc2lnbk5lZWRlZCcsICd0cnVlJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25FdmVudENhbkJlQ29tcGxldGVkKHsgZXZlbnRUcmlnZ2VyLCBldmVudENhbkJlQ29tcGxldGVkLCBjYXNlRGV0YWlscywgZm9ybSwgc3VibWl0IH06IENhc2VFZGl0b25FdmVudENhbkJlQ29tcGxldGVkKTogdm9pZCB7XG4gICAgaWYgKGV2ZW50Q2FuQmVDb21wbGV0ZWQpIHtcbiAgICAgIC8vIFN1Ym1pdFxuICAgICAgY29uc3QgY2FzZUV2ZW50RGF0YSA9IHRoaXMuZ2VuZXJhdGVDYXNlRXZlbnREYXRhKHsgZXZlbnRUcmlnZ2VyLCBmb3JtIH0pO1xuICAgICAgdGhpcy5jYXNlU3VibWl0KHsgZm9ybSwgY2FzZUV2ZW50RGF0YSwgc3VibWl0IH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOYXZpZ2F0ZSB0byB0YXNrcyB0YWIgb24gY2FzZSBkZXRhaWxzIHBhZ2VcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgL2Nhc2VzL2Nhc2UtZGV0YWlscy8ke3RoaXMuZ2V0Q2FzZUlkKGNhc2VEZXRhaWxzKX0vdGFza3NgXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTdGF0dXMocmVzcG9uc2U6IG9iamVjdCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQ2FsbGJhY2tGYWlsZWQocmVzcG9uc2UpID8gcmVzcG9uc2VbJ2NhbGxiYWNrX3Jlc3BvbnNlX3N0YXR1cyddIDogcmVzcG9uc2VbJ2RlbGV0ZV9kcmFmdF9yZXNwb25zZV9zdGF0dXMnXTtcbiAgfVxuXG4gIHByaXZhdGUgaGFzQ2FsbGJhY2tGYWlsZWQocmVzcG9uc2U6IG9iamVjdCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZXNwb25zZVsnY2FsbGJhY2tfcmVzcG9uc2Vfc3RhdHVzJ10gIT09ICdDQUxMQkFDS19DT01QTEVURUQnO1xuICB9XG5cbiAgcHJpdmF0ZSBldmVudE1vcmVUaGFuRGF5QWdvKHRpbWVzdGFtcDogbnVtYmVyKSB7XG4gICAgaWYgKChuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRpbWVzdGFtcCkgPiAoMjQqNjAqNjAqMTAwMCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGV2ZW50RGV0YWlsc0RvTm90TWF0Y2godGFza0V2ZW50Q29tcGxldGlvbkluZm86IFRhc2tFdmVudENvbXBsZXRpb25JbmZvLCBldmVudERldGFpbHM6IEV2ZW50RGV0YWlscykge1xuICAgIGlmICh0YXNrRXZlbnRDb21wbGV0aW9uSW5mby5ldmVudElkICE9PSBldmVudERldGFpbHMuZXZlbnRJZFxuICAgICAgfHwgdGFza0V2ZW50Q29tcGxldGlvbkluZm8uY2FzZUlkICE9PSBldmVudERldGFpbHMuY2FzZUlkXG4gICAgICB8fCB0YXNrRXZlbnRDb21wbGV0aW9uSW5mby51c2VySWQgIT09IGV2ZW50RGV0YWlscy51c2VySWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbiJdfQ==
|
|
@@ -45,7 +45,7 @@ export class EventCompletionStateMachineService {
|
|
|
45
45
|
entryActionForStateCheckTasksCanBeCompleted(state, context) {
|
|
46
46
|
const assignNeeded = context.sessionStorageService.getItem('assignNeeded');
|
|
47
47
|
context.workAllocationService.getTask(context.task.id).subscribe(taskResponse => {
|
|
48
|
-
if (taskResponse
|
|
48
|
+
if (taskResponse?.task?.task_state) {
|
|
49
49
|
switch (taskResponse.task.task_state.toUpperCase()) {
|
|
50
50
|
case TaskState.Unassigned:
|
|
51
51
|
// Task unassigned
|
|
@@ -80,6 +80,14 @@ export class EventCompletionStateMachineService {
|
|
|
80
80
|
break;
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
+
else if (!taskResponse?.task) {
|
|
84
|
+
context.alertService.setPreserveAlerts(true);
|
|
85
|
+
context.alertService.warning({ phrase: 'Task statecheck : no task available for completion', replacements: {} });
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
context.alertService.setPreserveAlerts(true);
|
|
89
|
+
context.alertService.warning({ phrase: 'Task statecheck : no task state available for completion', replacements: {} });
|
|
90
|
+
}
|
|
83
91
|
}, error => {
|
|
84
92
|
context.alertService.error(error.message);
|
|
85
93
|
return throwError(error);
|
|
@@ -102,6 +110,8 @@ export class EventCompletionStateMachineService {
|
|
|
102
110
|
context.component.eventCanBeCompleted.emit(true);
|
|
103
111
|
}
|
|
104
112
|
else {
|
|
113
|
+
context.alertService.setPreserveAlerts(true);
|
|
114
|
+
context.alertService.warning({ phrase: 'CompleteEventAndTask : no task available for completion', replacements: {} });
|
|
105
115
|
// Emit event cannot be completed event
|
|
106
116
|
context.component.eventCanBeCompleted.emit(false);
|
|
107
117
|
}
|
|
@@ -122,6 +132,8 @@ export class EventCompletionStateMachineService {
|
|
|
122
132
|
context.component.eventCanBeCompleted.emit(true);
|
|
123
133
|
}
|
|
124
134
|
else {
|
|
135
|
+
context.alertService.setPreserveAlerts(true);
|
|
136
|
+
context.alertService.warning({ phrase: 'Unassigned task : no task available for completion', replacements: {} });
|
|
125
137
|
// Emit event cannot be completed event
|
|
126
138
|
context.component.eventCanBeCompleted.emit(false);
|
|
127
139
|
}
|
|
@@ -163,4 +175,4 @@ export class EventCompletionStateMachineService {
|
|
|
163
175
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(EventCompletionStateMachineService, [{
|
|
164
176
|
type: Injectable
|
|
165
177
|
}], null, null); })();
|
|
166
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY29tcGxldGlvbi1zdGF0ZS1tYWNoaW5lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3Ivc2VydmljZXMvZXZlbnQtY29tcGxldGlvbi1zdGF0ZS1tYWNoaW5lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVMsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7QUFFekYsTUFBTSw4QkFBOEIsR0FBRyxnQ0FBZ0MsQ0FBQztBQUd4RSxNQUFNLE9BQU8sa0NBQWtDO0lBQ3RDLDZCQUE2QixDQUFRO0lBQ3JDLHlCQUF5QixDQUFRO0lBQ2pDLGdCQUFnQixDQUFRO0lBQ3hCLHlCQUF5QixDQUFRO0lBQ2pDLDZCQUE2QixDQUFRO0lBQ3JDLDhCQUE4QixDQUFRO0lBQ3RDLHVCQUF1QixDQUFRO0lBQy9CLHFCQUFxQixDQUFRO0lBQzdCLG1CQUFtQixDQUFRO0lBQzNCLFVBQVUsQ0FBUTtJQUVsQixzQkFBc0IsQ0FBQyxPQUEyQztRQUN2RSxPQUFPLElBQUksWUFBWSxDQUFDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxZ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QUFDO0lBRU0sK0NBQStDO1FBQ3BELElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxhQUFhLENBQy9DLHFCQUFxQixDQUFDLEtBQUssRUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FDaEIsQ0FBQztJQUNKLENBQUM7SUFFTSxvQ0FBb0M7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FDcEMscUJBQXFCLENBQUMsS0FBSyxFQUMzQixJQUFJLENBQUMsVUFBVSxDQUNoQixDQUFDO0lBQ0osQ0FBQztJQUVNLDJCQUEyQixDQUFDLE9BQTJDO1FBQzVFLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsNEJBQTRCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RSxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDO0lBQzlCLENBQUM7NEZBeE5VLGtDQUFrQztnRUFBbEMsa0NBQWtDLFdBQWxDLGtDQUFrQzs7aUZBQWxDLGtDQUFrQztjQUQ5QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RhdGUsIFN0YXRlTWFjaGluZSB9IGZyb20gJ0BlZGl1bS9mc20nO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVGFza1N0YXRlIH0gZnJvbSAnLi4vLi4vLi4vZG9tYWluL3dvcmstYWxsb2NhdGlvbi9UYXNrJztcbmltcG9ydCB7IEZpZWxkc1V0aWxzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgRXZlbnRDb21wbGV0aW9uU3RhdGVNYWNoaW5lQ29udGV4dCB9IGZyb20gJy4uL2RvbWFpbi9ldmVudC1jb21wbGV0aW9uLXN0YXRlLW1hY2hpbmUtY29udGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBFdmVudENvbXBsZXRpb25TdGF0ZXMgfSBmcm9tICcuLi9kb21haW4vZXZlbnQtY29tcGxldGlvbi1zdGF0ZXMuZW51bS5tb2RlbCc7XG5pbXBvcnQgeyBFdmVudENvbXBsZXRpb25UYXNrU3RhdGVzIH0gZnJvbSAnLi4vZG9tYWluL2V2ZW50LWNvbXBsZXRpb24tdGFzay1zdGF0ZXMubW9kZWwnO1xuXG5jb25zdCBFVkVOVF9DT01QTEVUSU9OX1NUQVRFX01BQ0hJTkUgPSAnRVZFTlQgQ09NUExFVElPTiBTVEFURSBNQUNISU5FJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEV2ZW50Q29tcGxldGlvblN0YXRlTWFjaGluZVNlcnZpY2Uge1xuICBwdWJsaWMgc3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWQ6IFN0YXRlO1xuICBwdWJsaWMgc3RhdGVDb21wbGV0ZUV2ZW50QW5kVGFzazogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZUNhbmNlbEV2ZW50OiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlQ29tcGxldGVFdmVudE5vdFRhc2s6IFN0YXRlO1xuICBwdWJsaWMgc3RhdGVUYXNrQ29tcGxldGVkT3JDYW5jZWxsZWQ6IFN0YXRlO1xuICBwdWJsaWMgc3RhdGVUYXNrQXNzaWduZWRUb0Fub3RoZXJVc2VyOiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlVGFza1JlYXNzaWduVG9Vc2VyOiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlVGFza0Fzc2lnblRvVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZVRhc2tVbmFzc2lnbmVkOiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlRmluYWw6IFN0YXRlO1xuXG4gIHB1YmxpYyBpbml0aWFsaXNlU3RhdGVNYWNoaW5lKGNvbnRleHQ6IEV2ZW50Q29tcGxldGlvblN0YXRlTWFjaGluZUNvbnRleHQpOiBTdGF0ZU1hY2hpbmUge1xuICAgIHJldHVybiBuZXcgU3RhdGVNYWNoaW5lKEVWRU5UX0NPTVBMRVRJT05fU1RBVEVfTUFDSElORSwgY29udGV4dCk7XG4gIH1cblxuICBwdWJsaWMgc3RhcnRTdGF0ZU1hY2hpbmUoc3RhdGVNYWNoaW5lOiBTdGF0ZU1hY2hpbmUpOiB2b2lkIHtcbiAgICBzdGF0ZU1hY2hpbmUuc3RhcnQodGhpcy5zdGF0ZUNoZWNrVGFza3NDYW5CZUNvbXBsZXRlZCk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlU3RhdGVzKHN0YXRlTWFjaGluZTogU3RhdGVNYWNoaW5lKTogdm9pZCB7XG4gICAgLy8gSW5pdGlhbCBzdGF0ZVxuICAgIHRoaXMuc3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWQgPSBzdGF0ZU1hY2hpbmUuY3JlYXRlU3RhdGUoXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuQ2hlY2tUYXNrc0NhbkJlQ29tcGxldGVkLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWRcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZUNvbXBsZXRlRXZlbnRBbmRUYXNrID0gc3RhdGVNYWNoaW5lLmNyZWF0ZVN0YXRlKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLkNvbXBsZXRlRXZlbnRBbmRUYXNrLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVDb21wbGV0ZUV2ZW50QW5kVGFza1xuICAgICk7XG5cbiAgICB0aGlzLnN0YXRlVGFza0NvbXBsZXRlZE9yQ2FuY2VsbGVkID0gc3RhdGVNYWNoaW5lLmNyZWF0ZVN0YXRlKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLlRhc2tDb21wZXRlZE9yQ2FuY2VsbGVkLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVUYXNrQ29tcGxldGVkT3JDYW5jZWxsZWRcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXIgPSBzdGF0ZU1hY2hpbmUuY3JlYXRlU3RhdGUoXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuVGFza0Fzc2lnbmVkVG9Bbm90aGVyVXNlcixcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5lbnRyeUFjdGlvbkZvclN0YXRlVGFza0Fzc2lnbmVkVG9Bbm90aGVyVXNlclxuICAgICk7XG5cbiAgICB0aGlzLnN0YXRlVGFza1VuYXNzaWduZWQgPSBzdGF0ZU1hY2hpbmUuY3JlYXRlU3RhdGUoXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuVGFza1VuYXNzaWduZWQsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZW50cnlBY3Rpb25Gb3JTdGF0ZVRhc2tVbmFzc2lnbmVkXG4gICAgKTtcblxuICAgIC8vIENyZWF0ZSBmaW5hbCBzdGF0ZSwgdGhlIHNlY29uZCBwYXJhbSBpc0NvbXBsZXRlIGlzIHNldCB0byB0cnVlIHRvIG1ha2Ugc3VyZSBzdGF0ZSBtYWNoaW5lIGZpbmlzaGVkIHJ1bm5pbmdcbiAgICB0aGlzLnN0YXRlRmluYWwgPSBzdGF0ZU1hY2hpbmUuY3JlYXRlU3RhdGUoXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuRmluYWwsXG4gICAgICB0cnVlLFxuICAgICAgdGhpcy5lbnRyeUFjdGlvbkZvclN0YXRlRmluYWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWwgdHJhbnNpdGlvblxuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZUNoZWNrVGFza3NDYW5CZUNvbXBsZXRlZCgpO1xuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tDb21wbGV0ZWRPckNhbmNlbGxlZCgpO1xuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZUNvbXBsZXRlRXZlbnRBbmRUYXNrKCk7XG4gICAgdGhpcy5hZGRUcmFuc2l0aW9uc0ZvclN0YXRlVGFza0Fzc2lnbmVkVG9Bbm90aGVyVXNlcigpO1xuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tVbmFzc2lnbmVkKCk7XG4gIH1cblxuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZUNoZWNrVGFza3NDYW5CZUNvbXBsZXRlZChzdGF0ZTogU3RhdGUsIGNvbnRleHQ6IEV2ZW50Q29tcGxldGlvblN0YXRlTWFjaGluZUNvbnRleHQpOiB2b2lkIHtcbiAgICBjb25zdCBhc3NpZ25OZWVkZWQgPSBjb250ZXh0LnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdhc3NpZ25OZWVkZWQnKTtcbiAgICBjb250ZXh0LndvcmtBbGxvY2F0aW9uU2VydmljZS5nZXRUYXNrKGNvbnRleHQudGFzay5pZCkuc3Vic2NyaWJlKFxuICAgICAgdGFza1Jlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKHRhc2tSZXNwb25zZSAmJiB0YXNrUmVzcG9uc2UudGFzayAmJiB0YXNrUmVzcG9uc2UudGFzay50YXNrX3N0YXRlKSB7XG4gICAgICAgICAgc3dpdGNoICh0YXNrUmVzcG9uc2UudGFzay50YXNrX3N0YXRlLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgVGFza1N0YXRlLlVuYXNzaWduZWQ6XG4gICAgICAgICAgICAgIC8vIFRhc2sgdW5hc3NpZ25lZFxuICAgICAgICAgICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50Q29tcGxldGlvblN0YXRlcy5UYXNrVW5hc3NpZ25lZCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUYXNrU3RhdGUuQ29tcGxldGVkOlxuICAgICAgICAgICAgY2FzZSBUYXNrU3RhdGUuQ2FuY2VsbGVkOlxuICAgICAgICAgICAgY2FzZSBUYXNrU3RhdGUuVGVybWluYXRlZDpcbiAgICAgICAgICAgICAgLy8gVGFzayBjb21wbGV0ZWQgb3IgY2FuY2VsbGVkXG4gICAgICAgICAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRDb21wbGV0aW9uU3RhdGVzLlRhc2tDb21wZXRlZE9yQ2FuY2VsbGVkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRhc2tTdGF0ZS5Bc3NpZ25lZDpcbiAgICAgICAgICAgICAgLy8gVGFzayBpcyBpbiBhc3NpZ25lZCBzdGF0ZVxuICAgICAgICAgICAgICBpZiAodGFza1Jlc3BvbnNlLnRhc2suYXNzaWduZWUgPT09IGNvbnRleHQudGFzay5hc3NpZ25lZSkge1xuICAgICAgICAgICAgICAgIC8vIFRhc2sgc3RpbGwgYXNzaWduZWQgdG8gY3VycmVudCB1c2VyLCBjb21wbGV0ZSBldmVudCBhbmQgdGFza1xuICAgICAgICAgICAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRDb21wbGV0aW9uU3RhdGVzLkNvbXBsZXRlRXZlbnRBbmRUYXNrKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChhc3NpZ25OZWVkZWQgPT09ICd0cnVlIC0gb3ZlcnJpZGUnKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcyB3aWxsIHRyZWF0IHRhc2sgYXMgdW5hc3NpZ25lZCBpbnN0ZWFkIG9mIHJlYXNzaWduZWQgdG8gY29tcGxldGUgYWZ0ZXIgdXNlciBjb25maXJtYXRpb25cbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25OZWVkZWQgd2lsbCBhbHNvIGJlIGltbWVkaWF0ZWx5IG92ZXJ3cml0dGVuIHRvIHRydWVcbiAgICAgICAgICAgICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50Q29tcGxldGlvblN0YXRlcy5UYXNrVW5hc3NpZ25lZCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGFzayBoYXMgYmVlbiByZWFzc2lnbmVkIHRvIGFub3RoZXIgdXNlciwgZGlzcGxheSBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgY29udGV4dC5yZWFzc2lnbmVkVGFzayA9IHRhc2tSZXNwb25zZS50YXNrO1xuICAgICAgICAgICAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRDb21wbGV0aW9uU3RhdGVzLlRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgLy8gQWxsb3cgdXNlciB0byBjb21wbGV0ZSB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgc3RhdGUudHJpZ2dlcihFdmVudENvbXBsZXRpb25TdGF0ZXMuQ29tcGxldGVFdmVudEFuZFRhc2spO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvciA9PiB7XG4gICAgICAgIGNvbnRleHQuYWxlcnRTZXJ2aWNlLmVycm9yKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlVGFza0NvbXBsZXRlZE9yQ2FuY2VsbGVkKHN0YXRlOiBTdGF0ZSwgY29udGV4dDogRXZlbnRDb21wbGV0aW9uU3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIC8vIFRyaWdnZXIgZmluYWwgc3RhdGUgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBzdGF0ZSBtYWNoaW5lXG4gICAgc3RhdGUudHJpZ2dlcihFdmVudENvbXBsZXRpb25TdGF0ZXMuRmluYWwpO1xuICAgIC8vIExvYWQgY2FzZSBldmVudCBjb21wbGV0aW9uIHRhc2sgY2FuY2VsbGVkIGNvbXBvbmVudFxuICAgIGNvbnRleHQuY29tcG9uZW50LnNldFRhc2tTdGF0ZShFdmVudENvbXBsZXRpb25UYXNrU3RhdGVzLlRhc2tDYW5jZWxsZWQpO1xuICB9XG5cbiAgcHVibGljIGVudHJ5QWN0aW9uRm9yU3RhdGVDb21wbGV0ZUV2ZW50QW5kVGFzayhzdGF0ZTogU3RhdGUsIGNvbnRleHQ6IEV2ZW50Q29tcGxldGlvblN0YXRlTWFjaGluZUNvbnRleHQpOiB2b2lkIHtcbiAgICAvLyBUcmlnZ2VyIGZpbmFsIHN0YXRlIHRvIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2Ygc3RhdGUgbWFjaGluZVxuICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRDb21wbGV0aW9uU3RhdGVzLkZpbmFsKTtcbiAgICBjb25zdCBjbGllbnRDb250ZXh0U3RyID0gY29udGV4dC5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnY2xpZW50Q29udGV4dCcpO1xuICAgIGNvbnN0IHVzZXJUYXNrID0gRmllbGRzVXRpbHMuZ2V0VXNlclRhc2tGcm9tQ2xpZW50Q29udGV4dChjbGllbnRDb250ZXh0U3RyKTtcbiAgICBpZiAodXNlclRhc2s/LnRhc2tfZGF0YSkge1xuICAgICAgY29udGV4dC5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbSgnYXNzaWduTmVlZGVkJywgJ2ZhbHNlJyk7XG4gICAgICAvLyBqdXN0IHNldCBldmVudCBjYW4gYmUgY29tcGxldGVkXG4gICAgICBjb250ZXh0LmNvbXBvbmVudC5ldmVudENhbkJlQ29tcGxldGVkLmVtaXQodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVtaXQgZXZlbnQgY2Fubm90IGJlIGNvbXBsZXRlZCBldmVudFxuICAgICAgY29udGV4dC5jb21wb25lbnQuZXZlbnRDYW5CZUNvbXBsZXRlZC5lbWl0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZVRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXIoc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudENvbXBsZXRpb25TdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgLy8gVHJpZ2dlciBmaW5hbCBzdGF0ZSB0byBjb21wbGV0ZSBwcm9jZXNzaW5nIG9mIHN0YXRlIG1hY2hpbmVcbiAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50Q29tcGxldGlvblN0YXRlcy5GaW5hbCk7XG4gICAgLy8gTG9hZCBjYXNlIGV2ZW50IGNvbXBsZXRpb24gdGFzayByZWFzc2lnbmVkIGNvbXBvbmVudFxuICAgIGNvbnRleHQuY29tcG9uZW50LnNldFRhc2tTdGF0ZShFdmVudENvbXBsZXRpb25UYXNrU3RhdGVzLlRhc2tSZWFzc2lnbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlVGFza1VuYXNzaWduZWQoc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudENvbXBsZXRpb25TdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgLy8gVHJpZ2dlciBmaW5hbCBzdGF0ZSB0byBjb21wbGV0ZSBwcm9jZXNzaW5nIG9mIHN0YXRlIG1hY2hpbmVcbiAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50Q29tcGxldGlvblN0YXRlcy5GaW5hbCk7XG4gICAgY29uc3QgY2xpZW50Q29udGV4dFN0ciA9IGNvbnRleHQuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2NsaWVudENvbnRleHQnKTtcbiAgICBjb25zdCB1c2VyVGFzayA9IEZpZWxkc1V0aWxzLmdldFVzZXJUYXNrRnJvbUNsaWVudENvbnRleHQoY2xpZW50Q29udGV4dFN0cik7XG4gICAgaWYgKHVzZXJUYXNrPy50YXNrX2RhdGEpIHtcbiAgICAgIGNvbnRleHQuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2Fzc2lnbk5lZWRlZCcsICd0cnVlJyk7XG4gICAgICBjb250ZXh0LmNvbXBvbmVudC5ldmVudENhbkJlQ29tcGxldGVkLmVtaXQodHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEVtaXQgZXZlbnQgY2Fubm90IGJlIGNvbXBsZXRlZCBldmVudFxuICAgICAgY29udGV4dC5jb21wb25lbnQuZXZlbnRDYW5CZUNvbXBsZXRlZC5lbWl0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZUZpbmFsKHN0YXRlOiBTdGF0ZSwgY29udGV4dDogRXZlbnRDb21wbGV0aW9uU3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIC8vIEZpbmFsIGFjdGlvbnMgY2FuIGJlIHBlcmZvcm1lZCBoZXJlLCB0aGUgc3RhdGUgbWFjaGluZSBmaW5pc2hlZCBydW5uaW5nXG4gICAgY29uc29sZS5sb2coJ0ZJTkFMJyk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZUNoZWNrVGFza3NDYW5CZUNvbXBsZXRlZCgpOiB2b2lkIHtcbiAgICAvLyBDb21wbGV0ZSBldmVudCBhbmQgdGFza1xuICAgIHRoaXMuc3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWQuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50Q29tcGxldGlvblN0YXRlcy5Db21wbGV0ZUV2ZW50QW5kVGFzayxcbiAgICAgIHRoaXMuc3RhdGVDb21wbGV0ZUV2ZW50QW5kVGFza1xuICAgICk7XG4gICAgLy8gVGFzayBjb21wbGV0ZWQgb3IgY2FuY2VsbGVkXG4gICAgdGhpcy5zdGF0ZUNoZWNrVGFza3NDYW5CZUNvbXBsZXRlZC5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLlRhc2tDb21wZXRlZE9yQ2FuY2VsbGVkLFxuICAgICAgdGhpcy5zdGF0ZVRhc2tDb21wbGV0ZWRPckNhbmNlbGxlZFxuICAgICk7XG4gICAgLy8gVGFzayBhc3NpZ25lZCB0byBhbm90aGVyIHVzZXJcbiAgICB0aGlzLnN0YXRlQ2hlY2tUYXNrc0NhbkJlQ29tcGxldGVkLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuVGFza0Fzc2lnbmVkVG9Bbm90aGVyVXNlcixcbiAgICAgIHRoaXMuc3RhdGVUYXNrQXNzaWduZWRUb0Fub3RoZXJVc2VyXG4gICAgKTtcbiAgICAvLyBUYXNrIHVuYXNzaWduZWRcbiAgICB0aGlzLnN0YXRlQ2hlY2tUYXNrc0NhbkJlQ29tcGxldGVkLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuVGFza1VuYXNzaWduZWQsXG4gICAgICB0aGlzLnN0YXRlVGFza1VuYXNzaWduZWRcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zRm9yU3RhdGVUYXNrQ29tcGxldGVkT3JDYW5jZWxsZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVRhc2tDb21wbGV0ZWRPckNhbmNlbGxlZC5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLkZpbmFsLFxuICAgICAgdGhpcy5zdGF0ZUZpbmFsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUcmFuc2l0aW9uc0ZvclN0YXRlQ29tcGxldGVFdmVudEFuZFRhc2soKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNvbXBsZXRlRXZlbnRBbmRUYXNrLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuRmluYWwsXG4gICAgICB0aGlzLnN0YXRlRmluYWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zRm9yU3RhdGVUYXNrQXNzaWduZWRUb0Fub3RoZXJVc2VyKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVUYXNrQXNzaWduZWRUb0Fub3RoZXJVc2VyLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuRmluYWwsXG4gICAgICB0aGlzLnN0YXRlRmluYWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zRm9yU3RhdGVUYXNrVW5hc3NpZ25lZCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlVGFza1VuYXNzaWduZWQuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50Q29tcGxldGlvblN0YXRlcy5GaW5hbCxcbiAgICAgIHRoaXMuc3RhdGVGaW5hbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgdGFza1ByZXNlbnRJblNlc3Npb25TdG9yYWdlKGNvbnRleHQ6IEV2ZW50Q29tcGxldGlvblN0YXRlTWFjaGluZUNvbnRleHQpOiBib29sZWFuIHtcbiAgICBjb25zdCBjbGllbnRDb250ZXh0U3RyID0gY29udGV4dC5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnY2xpZW50Q29udGV4dCcpO1xuICAgIGNvbnN0IHVzZXJUYXNrID0gRmllbGRzVXRpbHMuZ2V0VXNlclRhc2tGcm9tQ2xpZW50Q29udGV4dChjbGllbnRDb250ZXh0U3RyKTtcbiAgICByZXR1cm4gISF1c2VyVGFzay50YXNrX2RhdGE7XG4gIH1cbn1cbiJdfQ==
|
|
178
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtY29tcGxldGlvbi1zdGF0ZS1tYWNoaW5lLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3Ivc2VydmljZXMvZXZlbnQtY29tcGxldGlvbi1zdGF0ZS1tYWNoaW5lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVMsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVoRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNyRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7QUFFekYsTUFBTSw4QkFBOEIsR0FBRyxnQ0FBZ0MsQ0FBQztBQUd4RSxNQUFNLE9BQU8sa0NBQWtDO0lBQ3RDLDZCQUE2QixDQUFRO0lBQ3JDLHlCQUF5QixDQUFRO0lBQ2pDLGdCQUFnQixDQUFRO0lBQ3hCLHlCQUF5QixDQUFRO0lBQ2pDLDZCQUE2QixDQUFRO0lBQ3JDLDhCQUE4QixDQUFRO0lBQ3RDLHVCQUF1QixDQUFRO0lBQy9CLHFCQUFxQixDQUFRO0lBQzdCLG1CQUFtQixDQUFRO0lBQzNCLFVBQVUsQ0FBUTtJQUVsQixzQkFBc0IsQ0FBQyxPQUEyQztRQUN2RSxPQUFPLElBQUksWUFBWSxDQUFDLDhCQUE4QixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxZ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LE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDaEYsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLDRCQUE0QixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztJQUM5QixDQUFDOzRGQWxPVSxrQ0FBa0M7Z0VBQWxDLGtDQUFrQyxXQUFsQyxrQ0FBa0M7O2lGQUFsQyxrQ0FBa0M7Y0FEOUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0YXRlLCBTdGF0ZU1hY2hpbmUgfSBmcm9tICdAZWRpdW0vZnNtJztcbmltcG9ydCB7IHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRhc2tTdGF0ZSB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi93b3JrLWFsbG9jYXRpb24vVGFzayc7XG5pbXBvcnQgeyBGaWVsZHNVdGlscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IEV2ZW50Q29tcGxldGlvblN0YXRlTWFjaGluZUNvbnRleHQgfSBmcm9tICcuLi9kb21haW4vZXZlbnQtY29tcGxldGlvbi1zdGF0ZS1tYWNoaW5lLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHsgRXZlbnRDb21wbGV0aW9uU3RhdGVzIH0gZnJvbSAnLi4vZG9tYWluL2V2ZW50LWNvbXBsZXRpb24tc3RhdGVzLmVudW0ubW9kZWwnO1xuaW1wb3J0IHsgRXZlbnRDb21wbGV0aW9uVGFza1N0YXRlcyB9IGZyb20gJy4uL2RvbWFpbi9ldmVudC1jb21wbGV0aW9uLXRhc2stc3RhdGVzLm1vZGVsJztcblxuY29uc3QgRVZFTlRfQ09NUExFVElPTl9TVEFURV9NQUNISU5FID0gJ0VWRU5UIENPTVBMRVRJT04gU1RBVEUgTUFDSElORSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFdmVudENvbXBsZXRpb25TdGF0ZU1hY2hpbmVTZXJ2aWNlIHtcbiAgcHVibGljIHN0YXRlQ2hlY2tUYXNrc0NhbkJlQ29tcGxldGVkOiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlQ29tcGxldGVFdmVudEFuZFRhc2s6IFN0YXRlO1xuICBwdWJsaWMgc3RhdGVDYW5jZWxFdmVudDogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZUNvbXBsZXRlRXZlbnROb3RUYXNrOiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlVGFza0NvbXBsZXRlZE9yQ2FuY2VsbGVkOiBTdGF0ZTtcbiAgcHVibGljIHN0YXRlVGFza0Fzc2lnbmVkVG9Bbm90aGVyVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZVRhc2tSZWFzc2lnblRvVXNlcjogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZVRhc2tBc3NpZ25Ub1VzZXI6IFN0YXRlO1xuICBwdWJsaWMgc3RhdGVUYXNrVW5hc3NpZ25lZDogU3RhdGU7XG4gIHB1YmxpYyBzdGF0ZUZpbmFsOiBTdGF0ZTtcblxuICBwdWJsaWMgaW5pdGlhbGlzZVN0YXRlTWFjaGluZShjb250ZXh0OiBFdmVudENvbXBsZXRpb25TdGF0ZU1hY2hpbmVDb250ZXh0KTogU3RhdGVNYWNoaW5lIHtcbiAgICByZXR1cm4gbmV3IFN0YXRlTWFjaGluZShFVkVOVF9DT01QTEVUSU9OX1NUQVRFX01BQ0hJTkUsIGNvbnRleHQpO1xuICB9XG5cbiAgcHVibGljIHN0YXJ0U3RhdGVNYWNoaW5lKHN0YXRlTWFjaGluZTogU3RhdGVNYWNoaW5lKTogdm9pZCB7XG4gICAgc3RhdGVNYWNoaW5lLnN0YXJ0KHRoaXMuc3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWQpO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZVN0YXRlcyhzdGF0ZU1hY2hpbmU6IFN0YXRlTWFjaGluZSk6IHZvaWQge1xuICAgIC8vIEluaXRpYWwgc3RhdGVcbiAgICB0aGlzLnN0YXRlQ2hlY2tUYXNrc0NhbkJlQ29tcGxldGVkID0gc3RhdGVNYWNoaW5lLmNyZWF0ZVN0YXRlKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLkNoZWNrVGFza3NDYW5CZUNvbXBsZXRlZCxcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5lbnRyeUFjdGlvbkZvclN0YXRlQ2hlY2tUYXNrc0NhbkJlQ29tcGxldGVkXG4gICAgKTtcblxuICAgIHRoaXMuc3RhdGVDb21wbGV0ZUV2ZW50QW5kVGFzayA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50Q29tcGxldGlvblN0YXRlcy5Db21wbGV0ZUV2ZW50QW5kVGFzayxcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5lbnRyeUFjdGlvbkZvclN0YXRlQ29tcGxldGVFdmVudEFuZFRhc2tcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZVRhc2tDb21wbGV0ZWRPckNhbmNlbGxlZCA9IHN0YXRlTWFjaGluZS5jcmVhdGVTdGF0ZShcbiAgICAgIEV2ZW50Q29tcGxldGlvblN0YXRlcy5UYXNrQ29tcGV0ZWRPckNhbmNlbGxlZCxcbiAgICAgIGZhbHNlLFxuICAgICAgdGhpcy5lbnRyeUFjdGlvbkZvclN0YXRlVGFza0NvbXBsZXRlZE9yQ2FuY2VsbGVkXG4gICAgKTtcblxuICAgIHRoaXMuc3RhdGVUYXNrQXNzaWduZWRUb0Fub3RoZXJVc2VyID0gc3RhdGVNYWNoaW5lLmNyZWF0ZVN0YXRlKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLlRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXIsXG4gICAgICBmYWxzZSxcbiAgICAgIHRoaXMuZW50cnlBY3Rpb25Gb3JTdGF0ZVRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXJcbiAgICApO1xuXG4gICAgdGhpcy5zdGF0ZVRhc2tVbmFzc2lnbmVkID0gc3RhdGVNYWNoaW5lLmNyZWF0ZVN0YXRlKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLlRhc2tVbmFzc2lnbmVkLFxuICAgICAgZmFsc2UsXG4gICAgICB0aGlzLmVudHJ5QWN0aW9uRm9yU3RhdGVUYXNrVW5hc3NpZ25lZFxuICAgICk7XG5cbiAgICAvLyBDcmVhdGUgZmluYWwgc3RhdGUsIHRoZSBzZWNvbmQgcGFyYW0gaXNDb21wbGV0ZSBpcyBzZXQgdG8gdHJ1ZSB0byBtYWtlIHN1cmUgc3RhdGUgbWFjaGluZSBmaW5pc2hlZCBydW5uaW5nXG4gICAgdGhpcy5zdGF0ZUZpbmFsID0gc3RhdGVNYWNoaW5lLmNyZWF0ZVN0YXRlKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLkZpbmFsLFxuICAgICAgdHJ1ZSxcbiAgICAgIHRoaXMuZW50cnlBY3Rpb25Gb3JTdGF0ZUZpbmFsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUcmFuc2l0aW9ucygpOiB2b2lkIHtcbiAgICAvLyBJbml0aWFsIHRyYW5zaXRpb25cbiAgICB0aGlzLmFkZFRyYW5zaXRpb25zRm9yU3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWQoKTtcbiAgICB0aGlzLmFkZFRyYW5zaXRpb25zRm9yU3RhdGVUYXNrQ29tcGxldGVkT3JDYW5jZWxsZWQoKTtcbiAgICB0aGlzLmFkZFRyYW5zaXRpb25zRm9yU3RhdGVDb21wbGV0ZUV2ZW50QW5kVGFzaygpO1xuICAgIHRoaXMuYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXIoKTtcbiAgICB0aGlzLmFkZFRyYW5zaXRpb25zRm9yU3RhdGVUYXNrVW5hc3NpZ25lZCgpO1xuICB9XG5cbiAgcHVibGljIGVudHJ5QWN0aW9uRm9yU3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWQoc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudENvbXBsZXRpb25TdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgY29uc3QgYXNzaWduTmVlZGVkID0gY29udGV4dC5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSgnYXNzaWduTmVlZGVkJyk7XG4gICAgY29udGV4dC53b3JrQWxsb2NhdGlvblNlcnZpY2UuZ2V0VGFzayhjb250ZXh0LnRhc2suaWQpLnN1YnNjcmliZShcbiAgICAgIHRhc2tSZXNwb25zZSA9PiB7XG4gICAgICAgIGlmICh0YXNrUmVzcG9uc2U/LnRhc2s/LnRhc2tfc3RhdGUpIHtcbiAgICAgICAgICBzd2l0Y2ggKHRhc2tSZXNwb25zZS50YXNrLnRhc2tfc3RhdGUudG9VcHBlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSBUYXNrU3RhdGUuVW5hc3NpZ25lZDpcbiAgICAgICAgICAgICAgLy8gVGFzayB1bmFzc2lnbmVkXG4gICAgICAgICAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRDb21wbGV0aW9uU3RhdGVzLlRhc2tVbmFzc2lnbmVkKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFRhc2tTdGF0ZS5Db21wbGV0ZWQ6XG4gICAgICAgICAgICBjYXNlIFRhc2tTdGF0ZS5DYW5jZWxsZWQ6XG4gICAgICAgICAgICBjYXNlIFRhc2tTdGF0ZS5UZXJtaW5hdGVkOlxuICAgICAgICAgICAgICAvLyBUYXNrIGNvbXBsZXRlZCBvciBjYW5jZWxsZWRcbiAgICAgICAgICAgICAgc3RhdGUudHJpZ2dlcihFdmVudENvbXBsZXRpb25TdGF0ZXMuVGFza0NvbXBldGVkT3JDYW5jZWxsZWQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgVGFza1N0YXRlLkFzc2lnbmVkOlxuICAgICAgICAgICAgICAvLyBUYXNrIGlzIGluIGFzc2lnbmVkIHN0YXRlXG4gICAgICAgICAgICAgIGlmICh0YXNrUmVzcG9uc2UudGFzay5hc3NpZ25lZSA9PT0gY29udGV4dC50YXNrLmFzc2lnbmVlKSB7XG4gICAgICAgICAgICAgICAgLy8gVGFzayBzdGlsbCBhc3NpZ25lZCB0byBjdXJyZW50IHVzZXIsIGNvbXBsZXRlIGV2ZW50IGFuZCB0YXNrXG4gICAgICAgICAgICAgICAgc3RhdGUudHJpZ2dlcihFdmVudENvbXBsZXRpb25TdGF0ZXMuQ29tcGxldGVFdmVudEFuZFRhc2spO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFzc2lnbk5lZWRlZCA9PT0gJ3RydWUgLSBvdmVycmlkZScpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzIHdpbGwgdHJlYXQgdGFzayBhcyB1bmFzc2lnbmVkIGluc3RlYWQgb2YgcmVhc3NpZ25lZCB0byBjb21wbGV0ZSBhZnRlciB1c2VyIGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgICAgIC8vIGFzc2lnbk5lZWRlZCB3aWxsIGFsc28gYmUgaW1tZWRpYXRlbHkgb3ZlcndyaXR0ZW4gdG8gdHJ1ZVxuICAgICAgICAgICAgICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRDb21wbGV0aW9uU3RhdGVzLlRhc2tVbmFzc2lnbmVkKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUYXNrIGhhcyBiZWVuIHJlYXNzaWduZWQgdG8gYW5vdGhlciB1c2VyLCBkaXNwbGF5IGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlYXNzaWduZWRUYXNrID0gdGFza1Jlc3BvbnNlLnRhc2s7XG4gICAgICAgICAgICAgICAgc3RhdGUudHJpZ2dlcihFdmVudENvbXBsZXRpb25TdGF0ZXMuVGFza0Fzc2lnbmVkVG9Bbm90aGVyVXNlcik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAvLyBBbGxvdyB1c2VyIHRvIGNvbXBsZXRlIHRoZSBldmVudFxuICAgICAgICAgICAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50Q29tcGxldGlvblN0YXRlcy5Db21wbGV0ZUV2ZW50QW5kVGFzayk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghdGFza1Jlc3BvbnNlPy50YXNrKSB7XG4gICAgICAgICAgY29udGV4dC5hbGVydFNlcnZpY2Uuc2V0UHJlc2VydmVBbGVydHModHJ1ZSk7XG4gICAgICAgICAgY29udGV4dC5hbGVydFNlcnZpY2Uud2FybmluZyh7IHBocmFzZTogJ1Rhc2sgc3RhdGVjaGVjayA6IG5vIHRhc2sgYXZhaWxhYmxlIGZvciBjb21wbGV0aW9uJywgcmVwbGFjZW1lbnRzOiB7fSB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmFsZXJ0U2VydmljZS5zZXRQcmVzZXJ2ZUFsZXJ0cyh0cnVlKTtcbiAgICAgICAgICBjb250ZXh0LmFsZXJ0U2VydmljZS53YXJuaW5nKHsgcGhyYXNlOiAnVGFzayBzdGF0ZWNoZWNrIDogbm8gdGFzayBzdGF0ZSBhdmFpbGFibGUgZm9yIGNvbXBsZXRpb24nLCByZXBsYWNlbWVudHM6IHt9IH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3IgPT4ge1xuICAgICAgICBjb250ZXh0LmFsZXJ0U2VydmljZS5lcnJvcihlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZVRhc2tDb21wbGV0ZWRPckNhbmNlbGxlZChzdGF0ZTogU3RhdGUsIGNvbnRleHQ6IEV2ZW50Q29tcGxldGlvblN0YXRlTWFjaGluZUNvbnRleHQpOiB2b2lkIHtcbiAgICAvLyBUcmlnZ2VyIGZpbmFsIHN0YXRlIHRvIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2Ygc3RhdGUgbWFjaGluZVxuICAgIHN0YXRlLnRyaWdnZXIoRXZlbnRDb21wbGV0aW9uU3RhdGVzLkZpbmFsKTtcbiAgICAvLyBMb2FkIGNhc2UgZXZlbnQgY29tcGxldGlvbiB0YXNrIGNhbmNlbGxlZCBjb21wb25lbnRcbiAgICBjb250ZXh0LmNvbXBvbmVudC5zZXRUYXNrU3RhdGUoRXZlbnRDb21wbGV0aW9uVGFza1N0YXRlcy5UYXNrQ2FuY2VsbGVkKTtcbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlQ29tcGxldGVFdmVudEFuZFRhc2soc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudENvbXBsZXRpb25TdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgLy8gVHJpZ2dlciBmaW5hbCBzdGF0ZSB0byBjb21wbGV0ZSBwcm9jZXNzaW5nIG9mIHN0YXRlIG1hY2hpbmVcbiAgICBzdGF0ZS50cmlnZ2VyKEV2ZW50Q29tcGxldGlvblN0YXRlcy5GaW5hbCk7XG4gICAgY29uc3QgY2xpZW50Q29udGV4dFN0ciA9IGNvbnRleHQuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2NsaWVudENvbnRleHQnKTtcbiAgICBjb25zdCB1c2VyVGFzayA9IEZpZWxkc1V0aWxzLmdldFVzZXJUYXNrRnJvbUNsaWVudENvbnRleHQoY2xpZW50Q29udGV4dFN0cik7XG4gICAgaWYgKHVzZXJUYXNrPy50YXNrX2RhdGEpIHtcbiAgICAgIGNvbnRleHQuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2Fzc2lnbk5lZWRlZCcsICdmYWxzZScpO1xuICAgICAgLy8ganVzdCBzZXQgZXZlbnQgY2FuIGJlIGNvbXBsZXRlZFxuICAgICAgY29udGV4dC5jb21wb25lbnQuZXZlbnRDYW5CZUNvbXBsZXRlZC5lbWl0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmFsZXJ0U2VydmljZS5zZXRQcmVzZXJ2ZUFsZXJ0cyh0cnVlKTtcbiAgICAgIGNvbnRleHQuYWxlcnRTZXJ2aWNlLndhcm5pbmcoe3BocmFzZTogJ0NvbXBsZXRlRXZlbnRBbmRUYXNrIDogbm8gdGFzayBhdmFpbGFibGUgZm9yIGNvbXBsZXRpb24nLCByZXBsYWNlbWVudHM6IHt9fSk7XG4gICAgICAvLyBFbWl0IGV2ZW50IGNhbm5vdCBiZSBjb21wbGV0ZWQgZXZlbnRcbiAgICAgIGNvbnRleHQuY29tcG9uZW50LmV2ZW50Q2FuQmVDb21wbGV0ZWQuZW1pdChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVudHJ5QWN0aW9uRm9yU3RhdGVUYXNrQXNzaWduZWRUb0Fub3RoZXJVc2VyKHN0YXRlOiBTdGF0ZSwgY29udGV4dDogRXZlbnRDb21wbGV0aW9uU3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIC8vIFRyaWdnZXIgZmluYWwgc3RhdGUgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBzdGF0ZSBtYWNoaW5lXG4gICAgc3RhdGUudHJpZ2dlcihFdmVudENvbXBsZXRpb25TdGF0ZXMuRmluYWwpO1xuICAgIC8vIExvYWQgY2FzZSBldmVudCBjb21wbGV0aW9uIHRhc2sgcmVhc3NpZ25lZCBjb21wb25lbnRcbiAgICBjb250ZXh0LmNvbXBvbmVudC5zZXRUYXNrU3RhdGUoRXZlbnRDb21wbGV0aW9uVGFza1N0YXRlcy5UYXNrUmVhc3NpZ25lZCk7XG4gIH1cblxuICBwdWJsaWMgZW50cnlBY3Rpb25Gb3JTdGF0ZVRhc2tVbmFzc2lnbmVkKHN0YXRlOiBTdGF0ZSwgY29udGV4dDogRXZlbnRDb21wbGV0aW9uU3RhdGVNYWNoaW5lQ29udGV4dCk6IHZvaWQge1xuICAgIC8vIFRyaWdnZXIgZmluYWwgc3RhdGUgdG8gY29tcGxldGUgcHJvY2Vzc2luZyBvZiBzdGF0ZSBtYWNoaW5lXG4gICAgc3RhdGUudHJpZ2dlcihFdmVudENvbXBsZXRpb25TdGF0ZXMuRmluYWwpO1xuICAgIGNvbnN0IGNsaWVudENvbnRleHRTdHIgPSBjb250ZXh0LnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjbGllbnRDb250ZXh0Jyk7XG4gICAgY29uc3QgdXNlclRhc2sgPSBGaWVsZHNVdGlscy5nZXRVc2VyVGFza0Zyb21DbGllbnRDb250ZXh0KGNsaWVudENvbnRleHRTdHIpO1xuICAgIGlmICh1c2VyVGFzaz8udGFza19kYXRhKSB7XG4gICAgICBjb250ZXh0LnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCdhc3NpZ25OZWVkZWQnLCAndHJ1ZScpO1xuICAgICAgY29udGV4dC5jb21wb25lbnQuZXZlbnRDYW5CZUNvbXBsZXRlZC5lbWl0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmFsZXJ0U2VydmljZS5zZXRQcmVzZXJ2ZUFsZXJ0cyh0cnVlKTtcbiAgICAgIGNvbnRleHQuYWxlcnRTZXJ2aWNlLndhcm5pbmcoe3BocmFzZTogJ1VuYXNzaWduZWQgdGFzayA6IG5vIHRhc2sgYXZhaWxhYmxlIGZvciBjb21wbGV0aW9uJywgcmVwbGFjZW1lbnRzOiB7fX0pO1xuICAgICAgLy8gRW1pdCBldmVudCBjYW5ub3QgYmUgY29tcGxldGVkIGV2ZW50XG4gICAgICBjb250ZXh0LmNvbXBvbmVudC5ldmVudENhbkJlQ29tcGxldGVkLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbnRyeUFjdGlvbkZvclN0YXRlRmluYWwoc3RhdGU6IFN0YXRlLCBjb250ZXh0OiBFdmVudENvbXBsZXRpb25TdGF0ZU1hY2hpbmVDb250ZXh0KTogdm9pZCB7XG4gICAgLy8gRmluYWwgYWN0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIGhlcmUsIHRoZSBzdGF0ZSBtYWNoaW5lIGZpbmlzaGVkIHJ1bm5pbmdcbiAgICBjb25zb2xlLmxvZygnRklOQUwnKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRUcmFuc2l0aW9uc0ZvclN0YXRlQ2hlY2tUYXNrc0NhbkJlQ29tcGxldGVkKCk6IHZvaWQge1xuICAgIC8vIENvbXBsZXRlIGV2ZW50IGFuZCB0YXNrXG4gICAgdGhpcy5zdGF0ZUNoZWNrVGFza3NDYW5CZUNvbXBsZXRlZC5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLkNvbXBsZXRlRXZlbnRBbmRUYXNrLFxuICAgICAgdGhpcy5zdGF0ZUNvbXBsZXRlRXZlbnRBbmRUYXNrXG4gICAgKTtcbiAgICAvLyBUYXNrIGNvbXBsZXRlZCBvciBjYW5jZWxsZWRcbiAgICB0aGlzLnN0YXRlQ2hlY2tUYXNrc0NhbkJlQ29tcGxldGVkLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuVGFza0NvbXBldGVkT3JDYW5jZWxsZWQsXG4gICAgICB0aGlzLnN0YXRlVGFza0NvbXBsZXRlZE9yQ2FuY2VsbGVkXG4gICAgKTtcbiAgICAvLyBUYXNrIGFzc2lnbmVkIHRvIGFub3RoZXIgdXNlclxuICAgIHRoaXMuc3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWQuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50Q29tcGxldGlvblN0YXRlcy5UYXNrQXNzaWduZWRUb0Fub3RoZXJVc2VyLFxuICAgICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXJcbiAgICApO1xuICAgIC8vIFRhc2sgdW5hc3NpZ25lZFxuICAgIHRoaXMuc3RhdGVDaGVja1Rhc2tzQ2FuQmVDb21wbGV0ZWQuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50Q29tcGxldGlvblN0YXRlcy5UYXNrVW5hc3NpZ25lZCxcbiAgICAgIHRoaXMuc3RhdGVUYXNrVW5hc3NpZ25lZFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tDb21wbGV0ZWRPckNhbmNlbGxlZCgpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlVGFza0NvbXBsZXRlZE9yQ2FuY2VsbGVkLmFkZFRyYW5zaXRpb24oXG4gICAgICBFdmVudENvbXBsZXRpb25TdGF0ZXMuRmluYWwsXG4gICAgICB0aGlzLnN0YXRlRmluYWxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkZFRyYW5zaXRpb25zRm9yU3RhdGVDb21wbGV0ZUV2ZW50QW5kVGFzaygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlQ29tcGxldGVFdmVudEFuZFRhc2suYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50Q29tcGxldGlvblN0YXRlcy5GaW5hbCxcbiAgICAgIHRoaXMuc3RhdGVGaW5hbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZVRhc2tBc3NpZ25lZFRvQW5vdGhlclVzZXIuYWRkVHJhbnNpdGlvbihcbiAgICAgIEV2ZW50Q29tcGxldGlvblN0YXRlcy5GaW5hbCxcbiAgICAgIHRoaXMuc3RhdGVGaW5hbFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgYWRkVHJhbnNpdGlvbnNGb3JTdGF0ZVRhc2tVbmFzc2lnbmVkKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVUYXNrVW5hc3NpZ25lZC5hZGRUcmFuc2l0aW9uKFxuICAgICAgRXZlbnRDb21wbGV0aW9uU3RhdGVzLkZpbmFsLFxuICAgICAgdGhpcy5zdGF0ZUZpbmFsXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyB0YXNrUHJlc2VudEluU2Vzc2lvblN0b3JhZ2UoY29udGV4dDogRXZlbnRDb21wbGV0aW9uU3RhdGVNYWNoaW5lQ29udGV4dCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNsaWVudENvbnRleHRTdHIgPSBjb250ZXh0LnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCdjbGllbnRDb250ZXh0Jyk7XG4gICAgY29uc3QgdXNlclRhc2sgPSBGaWVsZHNVdGlscy5nZXRVc2VyVGFza0Zyb21DbGllbnRDb250ZXh0KGNsaWVudENvbnRleHRTdHIpO1xuICAgIHJldHVybiAhIXVzZXJUYXNrLnRhc2tfZGF0YTtcbiAgfVxufVxuIl19
|
|
@@ -96,6 +96,8 @@ export class WorkAllocationService {
|
|
|
96
96
|
*/
|
|
97
97
|
completeTask(taskId, eventName) {
|
|
98
98
|
if (!this.isWAEnabled()) {
|
|
99
|
+
this.alertService.setPreserveAlerts(true);
|
|
100
|
+
this.alertService.warning({ phrase: 'completeTask: Work Allocation is not enabled, so the task could not be completed. Please complete the task associated with the case manually.' });
|
|
99
101
|
return of(null);
|
|
100
102
|
}
|
|
101
103
|
this.appConfig.logMessage(`completeTask: completing ${taskId}`);
|
|
@@ -117,6 +119,8 @@ export class WorkAllocationService {
|
|
|
117
119
|
*/
|
|
118
120
|
assignAndCompleteTask(taskId, eventName) {
|
|
119
121
|
if (!this.isWAEnabled()) {
|
|
122
|
+
this.alertService.setPreserveAlerts(true);
|
|
123
|
+
this.alertService.warning({ phrase: 'assignAndCompleteTask: Work Allocation is not enabled, so the task could not be completed. Please complete the task associated with the case manually.' });
|
|
120
124
|
return of(null);
|
|
121
125
|
}
|
|
122
126
|
this.appConfig.logMessage(`assignAndCompleteTask: completing ${taskId}`);
|
|
@@ -228,4 +232,4 @@ export class WorkAllocationService {
|
|
|
228
232
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WorkAllocationService, [{
|
|
229
233
|
type: Injectable
|
|
230
234
|
}], () => [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }, { type: i1.HttpErrorService }, { type: i1.AlertService }, { type: i1.SessionStorageService }], null); })();
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1hbGxvY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3Ivc2VydmljZXMvd29yay1hbGxvY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFFdkcsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFHaEUsTUFBTSxPQUFPLHFCQUFxQjtJQU9iO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFWWixNQUFNLENBQUMsY0FBYyxHQUFHLDJCQUEyQixDQUFDO0lBQ3BELE1BQU0sQ0FBQyxhQUFhLEdBQUcsMEJBQTBCLENBQUM7SUFFakQsUUFBUSxDQUFrQjtJQUVsQyxZQUNtQixJQUFpQixFQUNqQixTQUE0QixFQUM1QixZQUE4QixFQUM5QixZQUEwQixFQUMxQixxQkFBNEM7UUFKNUMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUU3RCw2Q0FB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dkcsTUFBTSxjQUFjLEdBQWdCO1lBQ2xDLHVCQUF1QixFQUFFLEtBQUs7WUFDOUIsS0FBSyxFQUFFLEVBQUU7U0FDVixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLHlCQUF5QixNQUFNLGFBQWEsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNqRixPQUFPLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsdUJBQXVCLEVBQUUsZUFBZSxNQUFNLFVBQVUsT0FBTyxhQUFhLFFBQVEsaUJBQWlCLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDOUosQ0FBQztJQUVGOztPQUVHO0lBQ0ksT0FBTyxDQUFDLE1BQWM7UUFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDMUIsQ0FBQztRQUNELElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQzsrRUF2T1cscUJBQXFCO2dFQUFyQixxQkFBcUIsV0FBckIscUJBQXFCOztpRkFBckIscUJBQXFCO2NBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IFRhc2tTZWFyY2hQYXJhbWV0ZXIsIFdBRmVhdHVyZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBVc2VyRGV0YWlscyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItZGV0YWlscy5tb2RlbCc7XG5pbXBvcnQgeyBUYXNrUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL3Rhc2stcmVzcG9uc2UubW9kZWwnO1xuaW1wb3J0IHsgVGFza1BheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL1Rhc2tQYXlsb2FkJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgSHR0cEVycm9yU2VydmljZSwgSHR0cFNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcblxuZXhwb3J0IGNvbnN0IE1VTFRJUExFX1RBU0tTX0ZPVU5EID0gJ01vcmUgdGhhbiBvbmUgdGFzayBmb3VuZCEnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV29ya0FsbG9jYXRpb25TZXJ2aWNlIHtcbiAgcHVibGljIHN0YXRpYyBpQUNDYXNlT2ZmaWNlciA9ICdjYXNld29ya2VyLWlhLWNhc2VvZmZpY2VyJztcbiAgcHVibGljIHN0YXRpYyBpQUNBZG1PZmZpY2VyID0gJ2Nhc2V3b3JrZXItaWEtYWRtb2ZmaWNlcic7XG5cbiAgcHJpdmF0ZSBmZWF0dXJlczogV0FGZWF0dXJlQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBDb25maWc6IEFic3RyYWN0QXBwQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JTZXJ2aWNlOiBIdHRwRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZVxuICApIHtcbiAgICAvLyBDaGVjayB0byBzZWUgaWYgd29yayBhbGxvY2F0aW9uIGlzIGVuYWJsZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBBUEkgdG8gZ2V0IHRhc2tzIG1hdGNoaW5nIHRoZSBzZWFyY2ggY3JpdGVyaWEuXG4gICAqIEBwYXJhbSBzZWFyY2hSZXF1ZXN0IFRoZSBzZWFyY2ggcGFyYW1ldGVycyB0aGF0IHNwZWNpZnkgd2hpY2ggdGFza3MgdG8gbWF0Y2guXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoVGFza3Moc2VhcmNoUmVxdWVzdDogVGFza1NlYXJjaFBhcmFtZXRlcik6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgLy8gRG8gbm90IG5lZWQgdG8gY2hlY2sgaWYgV0EgZW5hYmxlZCBhcyBwYXJlbnQgbWV0aG9kIHdpbGwgZG8gdGhhdFxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3NlYXJjaEZvckNvbXBsZXRhYmxlYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIHtzZWFyY2hSZXF1ZXN0fSwgbnVsbCwgZmFsc2UpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIC8vIGV4cGxpY2l0bHkgZWF0IGF3YXkgNDAxIGVycm9yIGFuZCA0MDAgZXJyb3JcbiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3Iuc3RhdHVzICYmIChlcnJvci5zdGF0dXMgPT09IDQwMSB8fCBlcnJvci5zdGF0dXMgPT09IDQwMCkpIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBzdGF0dXMgNDAxIG9yIDQwMCcsIGVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzV0FFbmFibGVkKGp1cmlzZGljdGlvbj86IHN0cmluZywgY2FzZVR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aGlzLmZlYXR1cmVzID0gdGhpcy5hcHBDb25maWcuZ2V0V0FTZXJ2aWNlQ29uZmlnKCk7XG4gICAgaWYgKHRoaXMuZmVhdHVyZXMpIHtcbiAgICAgIGNvbnN0IGZ0c3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mZWF0dXJlcyk7XG4gICAgICB0aGlzLmFwcENvbmZpZz8ubG9nTWVzc2FnZShgaXNXQUVuYWJsZWQ6IHdhLXNlcnZpY2UtY29uZmlnIHJldHVybmluZyAke2Z0c3RyPy5sZW5ndGggPiAwfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcENvbmZpZz8ubG9nTWVzc2FnZShgaXNXQUVuYWJsZWQ6IHdhLXNlcnZpY2UtY29uZmlnIHJldHVybmluZyBubyBmZWF0dXJlc2ApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgZW5hYmxlZCA9IGZhbHNlO1xuICAgIGlmICghanVyaXNkaWN0aW9uIHx8ICFjYXNlVHlwZSkge1xuICAgICAgY29uc3QgY2FzZUluZm8gPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2Nhc2VJbmZvJykpO1xuICAgICAganVyaXNkaWN0aW9uID0gY2FzZUluZm8uanVyaXNkaWN0aW9uO1xuICAgICAgY2FzZVR5cGUgPSBjYXNlSW5mby5jYXNlVHlwZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZlYXR1cmVzIHx8ICF0aGlzLmZlYXR1cmVzLmNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICB0aGlzLmFwcENvbmZpZy5sb2dNZXNzYWdlKCdpc1dBRW5hYmxlZDogbm8gZmVhdHVyZXMnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5mZWF0dXJlcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKHNlcnZpY2VDb25maWcgPT4ge1xuICAgICAgaWYgKHNlcnZpY2VDb25maWcuc2VydmljZU5hbWUgPT09IGp1cmlzZGljdGlvbiAmJiAoc2VydmljZUNvbmZpZy5jYXNlVHlwZXMuaW5kZXhPZihjYXNlVHlwZSkgIT09IC0xKSkge1xuICAgICAgICAgIGVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYXBwQ29uZmlnLmxvZ01lc3NhZ2UoYGlzV0FFbmFibGVkOiByZXR1cm5pbmcgJHtlbmFibGVkfWApO1xuICAgIHJldHVybiBlbmFibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIEFQSSB0byBhc3NpZ24gYSB0YXNrLlxuICAgKiBAcGFyYW0gdGFza0lkIHNwZWNpZmllcyB3aGljaCB0YXNrIHNob3VsZCBiZSBhc3NpZ25lZC5cbiAgICogQHBhcmFtIHVzZXJJZCBzcGVjaWZpZXMgdGhlIHVzZXIgdGhlIHRhc2sgc2hvdWxkIGJlIGFzc2lnbmVkIHRvLlxuICAgKi9cbiAgcHVibGljIGFzc2lnblRhc2sodGFza0lkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuaXNXQUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS90YXNrLyR7dGFza0lkfS9hc3NpZ25gO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHVybCwge3VzZXJJZH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgQVBJIHRvIGNvbXBsZXRlIGEgdGFzay5cbiAgICogQHBhcmFtIHRhc2tJZCBzcGVjaWZpZXMgd2hpY2ggdGFzayBzaG91bGQgYmUgY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlVGFzayh0YXNrSWQ6IHN0cmluZywgZXZlbnROYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuaXNXQUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cbiAgICB0aGlzLmFwcENvbmZpZy5sb2dNZXNzYWdlKGBjb21wbGV0ZVRhc2s6IGNvbXBsZXRpbmcgJHt0YXNrSWR9YCk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0V29ya0FsbG9jYXRpb25BcGlVcmwoKX0vdGFzay8ke3Rhc2tJZH0vY29tcGxldGVgO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHVybCwgeyBhY3Rpb25CeUV2ZW50OiB0cnVlLCBldmVudE5hbWU6IGV2ZW50TmFtZSB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICAvLyB0aGlzIHdpbGwgc3Vic2NyaWJlIHRvIGdldCB0aGUgdXNlciBkZXRhaWxzIGFuZCBkZWNpZGUgd2hldGhlciB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0KHRoaXMuYXBwQ29uZmlnLmdldFVzZXJJbmZvQXBpVXJsKCkpLnBpcGUobWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKSkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVUYXNrQ29tcGxldGlvbkVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIEFQSSB0byBhc3NpZ24gYW5kIGNvbXBsZXRlIGEgdGFzay5cbiAgICogQHBhcmFtIHRhc2tJZCBzcGVjaWZpZXMgd2hpY2ggdGFzayBzaG91bGQgYmUgY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIGFzc2lnbkFuZENvbXBsZXRlVGFzayh0YXNrSWQ6IHN0cmluZywgZXZlbnROYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuaXNXQUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cbiAgICB0aGlzLmFwcENvbmZpZy5sb2dNZXNzYWdlKGBhc3NpZ25BbmRDb21wbGV0ZVRhc2s6IGNvbXBsZXRpbmcgJHt0YXNrSWR9YCk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5hcHBDb25maWcuZ2V0V29ya0FsbG9jYXRpb25BcGlVcmwoKX0vdGFzay8ke3Rhc2tJZH0vY29tcGxldGVgO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHVybCwge1xuICAgICAgICBjb21wbGV0aW9uX29wdGlvbnM6IHtcbiAgICAgICAgICBhc3NpZ25fYW5kX2NvbXBsZXRlOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGFjdGlvbkJ5RXZlbnQ6IHRydWUsXG4gICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIHRoaXMuZXJyb3JTZXJ2aWNlLnNldEVycm9yKGVycm9yKTtcbiAgICAgICAgICAvLyB0aGlzIHdpbGwgc3Vic2NyaWJlIHRvIGdldCB0aGUgdXNlciBkZXRhaWxzIGFuZCBkZWNpZGUgd2hldGhlciB0byBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2VcbiAgICAgICAgICB0aGlzLmh0dHAuZ2V0KHRoaXMuYXBwQ29uZmlnLmdldFVzZXJJbmZvQXBpVXJsKCkpLnBpcGUobWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKSkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVUYXNrQ29tcGxldGlvbkVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihlcnJvcik7XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXMgdGhlIHJlc3BvbnNlIGZyb20gdGhlIG9ic2VydmFibGUgdG8gZ2V0IHRoZSB1c2VyIGRldGFpbHMgd2hlbiB0YXNrIGlzIGNvbXBsZXRlZC5cbiAgICogQHBhcmFtIHJlc3BvbnNlIGlzIHRoZSByZXNwb25zZSBnaXZlbiBmcm9tIHRoZSBvYnNlcnZhYmxlIHdoaWNoIGNvbnRhaW5zIHRoZSB1c2VyIGRldGFpbGQuXG4gICAqL1xuICBwdWJsaWMgaGFuZGxlVGFza0NvbXBsZXRpb25FcnJvcihyZXNwb25zZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgdXNlckRldGFpbHMgPSByZXNwb25zZSBhcyBVc2VyRGV0YWlscztcbiAgICBpZiAodGhpcy51c2VySXNDYXNld29ya2VyKHVzZXJEZXRhaWxzLnVzZXJJbmZvLnJvbGVzKSkge1xuICAgICAgLy8gd2hlbiBzdWJtaXR0aW5nIHRoZSBjb21wbGV0aW9uIG9mIHRhc2sgaWYgbm90IHlldCByZW5kZXJlZCBjYXNlcy9jYXNlIGNvbmZpcm0gdGhlbiBwcmVzZXJ2ZSB0aGUgYWxlcnQgZm9yIHJlLXJlbmRlcmluZ1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2V0UHJlc2VydmVBbGVydHModHJ1ZSwgWydjYXNlcy9jYXNlJywgJ3N1Ym1pdCddKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm5pbmcoeyBwaHJhc2U6J0EgdGFzayBjb3VsZCBub3QgYmUgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS4gUGxlYXNlIGNvbXBsZXRlIHRoZSB0YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FzZSBtYW51YWxseS4nfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgdXNlcidzIHJvbGUgaXMgZXF1aXZhbGVudCB0byBhIGNhc2V3b3JrZXIuXG4gICAqIEBwYXJhbSByb2xlcyBpcyB0aGUgbGlzdCBvZiByb2xlcyBmb3VuZCBmcm9tIHRoZSBjdXJyZW50IHVzZXIuXG4gICAqL1xuICBwdWJsaWMgdXNlcklzQ2FzZXdvcmtlcihyb2xlczogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBjb25zdCBsb3dlckNhc2VSb2xlcyA9IHJvbGVzLm1hcChyb2xlID0+IHJvbGUudG9Mb3dlckNhc2UoKSk7XG4gICAgLy8gV2hlbi9pZiBsaWIgJiB0YXJnZXQgcGVybWFuZW50bHkgY2hhbmdlIHRvIGVzMjAxNiwgcmVwbGFjZSBpbmRleE9mIHdpdGggaW5jbHVkZXNcbiAgICByZXR1cm4gKGxvd2VyQ2FzZVJvbGVzLmluZGV4T2YoV29ya0FsbG9jYXRpb25TZXJ2aWNlLmlBQ0Nhc2VPZmZpY2VyKSAhPT0gLTEpXG4gICAgICB8fCAobG93ZXJDYXNlUm9sZXMuaW5kZXhPZihXb3JrQWxsb2NhdGlvblNlcnZpY2UuaUFDQWRtT2ZmaWNlcikgIT09IC0xKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIGZvciBvcGVuIHRhc2tzIGZvciBhIGNhc2UgYW5kIGV2ZW50IGNvbWJpbmF0aW9uLiBUaGVyZSBhcmUgNSBwb3NzaWJsZSBzY2VuYXJpb3M6XG4gICAqICAgMS4gTm8gdGFza3MgZm91bmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PiBTdWNjZXNzLlxuICAgKiAgIDIuIE9uZSB0YXNrIGZvdW5kID0+IE1hcmsgYXMgZG9uZSAgICAgICAgICAgICAgPT4gU3VjY2Vzcy5cbiAgICogICAzLiBPbmUgdGFzayBmb3VuZCA9PiBNYXJrIGFzIGRvbmUgdGhyb3dzIGVycm9yID0+IEZhaWx1cmUuXG4gICAqICAgNC4gTW9yZSB0aGFuIG9uZSB0YXNrIGZvdW5kICAgICAgICAgICAgICAgICAgICA9PiBGYWlsdXJlLlxuICAgKiAgIDUuIFNlYXJjaCBjYWxsIHRocm93cyBhbiBlcnJvciAgICAgICAgICAgICAgICAgPT4gRmFpbHVyZS5cbiAgICogQHBhcmFtIGNjZElkIFRoZSBJRCBvZiB0aGUgY2FzZSB0byBmaW5kIHRhc2tzIGZvci5cbiAgICogQHBhcmFtIGV2ZW50SWQgVGhlIElEIG9mIHRoZSBldmVudCB0byBmaW5kIHRhc2tzIGZvci5cbiAgICovXG4gIHB1YmxpYyBjb21wbGV0ZUFwcHJvcHJpYXRlVGFzayhjY2RJZDogc3RyaW5nLCBldmVudElkOiBzdHJpbmcsIGp1cmlzZGljdGlvbjogc3RyaW5nLCBjYXNlVHlwZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5pc1dBRW5hYmxlZChqdXJpc2RpY3Rpb24sIGNhc2VUeXBlSWQpKSB7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuICAgIGNvbnN0IHRhc2tTZWFyY2hQYXJhbWV0ZXI6IFRhc2tTZWFyY2hQYXJhbWV0ZXIgPSB7XG4gICAgICBjY2RJZCxcbiAgICAgIGV2ZW50SWQsXG4gICAgICBqdXJpc2RpY3Rpb24sXG4gICAgICBjYXNlVHlwZUlkXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hUYXNrcyh0YXNrU2VhcmNoUGFyYW1ldGVyKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhc2tzOiBhbnlbXSA9IHJlc3BvbnNlLnRhc2tzO1xuICAgICAgICAgIGlmICh0YXNrcyAmJiB0YXNrcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBpZiAodGFza3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29tcGxldGVUYXNrKHRhc2tzWzBdLmlkLCBldmVudElkKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBwcm9ibGVtLiBUaHJvdyBhbiBhcHByb3ByaWF0ZSBlcnJvci5cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKE1VTFRJUExFX1RBU0tTX0ZPVU5EKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEFsbCBnb29kLiBOb3RoaW5nIHRvIHNlZSBoZXJlLlxuICAgICAgICB9KSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgLy8gU2ltcGx5IHJldGhyb3cgaXQuXG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGFza3MgZm9yIGNhc2UgYW5kIGV2ZW50LlxuICAgKi9cbiAgcHVibGljIGdldFRhc2tzQnlDYXNlSWRBbmRFdmVudElkKGV2ZW50SWQ6IHN0cmluZywgY2FzZUlkOiBzdHJpbmcsIGNhc2VUeXBlOiBzdHJpbmcsIGp1cmlzZGljdGlvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxUYXNrUGF5bG9hZD4ge1xuICAgIGNvbnN0IGRlZmF1bHRQYXlsb2FkOiBUYXNrUGF5bG9hZCA9IHtcbiAgICAgIHRhc2tfcmVxdWlyZWRfZm9yX2V2ZW50OiBmYWxzZSxcbiAgICAgIHRhc2tzOiBbXVxuICAgIH07XG4gICAgaWYgKCF0aGlzLmlzV0FFbmFibGVkKCkpIHtcbiAgICAgIHRoaXMuYXBwQ29uZmlnLmxvZ01lc3NhZ2UoYGlzV0FFbmFibGVkIGZhbHNlIGZvciAke2Nhc2VJZH0gaW4gZXZlbnQgJHtldmVudElkfWApO1xuICAgICAgcmV0dXJuIG9mKGRlZmF1bHRQYXlsb2FkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5hcHBDb25maWcuZ2V0V29ya0FsbG9jYXRpb25BcGlVcmwoKX0vY2FzZS90YXNrcy8ke2Nhc2VJZH0vZXZlbnQvJHtldmVudElkfS9jYXNlVHlwZS8ke2Nhc2VUeXBlfS9qdXJpc2RpY3Rpb24vJHtqdXJpc2RpY3Rpb259YCk7XG4gIH1cblxuIC8qKlxuICAqIENhbGwgdGhlIEFQSSB0byBnZXQgYSB0YXNrXG4gICovXG4gcHVibGljIGdldFRhc2sodGFza0lkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPFRhc2tSZXNwb25zZT4ge1xuICBpZiAoIXRoaXMuaXNXQUVuYWJsZWQoKSkge1xuICAgIHJldHVybiBvZih7dGFzazogbnVsbH0pO1xuICB9XG4gIHRoaXMuYXBwQ29uZmlnLmxvZ01lc3NhZ2UoYGdldFRhc2s6ICR7dGFza0lkfWApO1xuICByZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS90YXNrLyR7dGFza0lkfWApO1xuIH1cbn1cbiJdfQ==
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29yay1hbGxvY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL2NvbXBvbmVudHMvY2FzZS1lZGl0b3Ivc2VydmljZXMvd29yay1hbGxvY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBSzNELE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFFdkcsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsMkJBQTJCLENBQUM7QUFHaEUsTUFBTSxPQUFPLHFCQUFxQjtJQU9iO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFWWixNQUFNLENBQUMsY0FBYyxHQUFHLDJCQUEyQixDQUFDO0lBQ3BELE1BQU0sQ0FBQyxhQUFhLEdBQUcsMEJBQTBCLENBQUM7SUFFakQsUUFBUSxDQUFrQjtJQUVsQyxZQUNtQixJQUFpQixFQUNqQixTQUE0QixFQUM1QixZQUE4QixFQUM5QixZQUEwQixFQUMxQixxQkFBNEM7UUFKNUMsU0FBSSxHQUFKLElBQUksQ0FBYTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUM1QixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUU3RCw2Q0FB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Q0FBQyx1QkFBdUIsRUFBRSxTQUFTLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDcEYsQ0FBQzsrRUEzT1cscUJBQXFCO2dFQUFyQixxQkFBcUIsV0FBckIscUJBQXFCOztpRkFBckIscUJBQXFCO2NBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWJzdHJhY3RBcHBDb25maWcgfSBmcm9tICcuLi8uLi8uLi8uLi9hcHAuY29uZmlnJztcbmltcG9ydCB7IFRhc2tTZWFyY2hQYXJhbWV0ZXIsIFdBRmVhdHVyZUNvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbic7XG5pbXBvcnQgeyBVc2VyRGV0YWlscyB9IGZyb20gJy4uLy4uLy4uL2RvbWFpbi91c2VyL3VzZXItZGV0YWlscy5tb2RlbCc7XG5pbXBvcnQgeyBUYXNrUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL3Rhc2stcmVzcG9uc2UubW9kZWwnO1xuaW1wb3J0IHsgVGFza1BheWxvYWQgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL1Rhc2tQYXlsb2FkJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgSHR0cEVycm9yU2VydmljZSwgSHR0cFNlcnZpY2UsIFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcblxuZXhwb3J0IGNvbnN0IE1VTFRJUExFX1RBU0tTX0ZPVU5EID0gJ01vcmUgdGhhbiBvbmUgdGFzayBmb3VuZCEnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgV29ya0FsbG9jYXRpb25TZXJ2aWNlIHtcbiAgcHVibGljIHN0YXRpYyBpQUNDYXNlT2ZmaWNlciA9ICdjYXNld29ya2VyLWlhLWNhc2VvZmZpY2VyJztcbiAgcHVibGljIHN0YXRpYyBpQUNBZG1PZmZpY2VyID0gJ2Nhc2V3b3JrZXItaWEtYWRtb2ZmaWNlcic7XG5cbiAgcHJpdmF0ZSBmZWF0dXJlczogV0FGZWF0dXJlQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBDb25maWc6IEFic3RyYWN0QXBwQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JTZXJ2aWNlOiBIdHRwRXJyb3JTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZVxuICApIHtcbiAgICAvLyBDaGVjayB0byBzZWUgaWYgd29yayBhbGxvY2F0aW9uIGlzIGVuYWJsZWRcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsIHRoZSBBUEkgdG8gZ2V0IHRhc2tzIG1hdGNoaW5nIHRoZSBzZWFyY2ggY3JpdGVyaWEuXG4gICAqIEBwYXJhbSBzZWFyY2hSZXF1ZXN0IFRoZSBzZWFyY2ggcGFyYW1ldGVycyB0aGF0IHNwZWNpZnkgd2hpY2ggdGFza3MgdG8gbWF0Y2guXG4gICAqL1xuICBwdWJsaWMgc2VhcmNoVGFza3Moc2VhcmNoUmVxdWVzdDogVGFza1NlYXJjaFBhcmFtZXRlcik6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgLy8gRG8gbm90IG5lZWQgdG8gY2hlY2sgaWYgV0EgZW5hYmxlZCBhcyBwYXJlbnQgbWV0aG9kIHdpbGwgZG8gdGhhdFxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3NlYXJjaEZvckNvbXBsZXRhYmxlYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIHtzZWFyY2hSZXF1ZXN0fSwgbnVsbCwgZmFsc2UpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlc3BvbnNlID0+IHJlc3BvbnNlKSxcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIC8vIGV4cGxpY2l0bHkgZWF0IGF3YXkgNDAxIGVycm9yIGFuZCA0MDAgZXJyb3JcbiAgICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3Iuc3RhdHVzICYmIChlcnJvci5zdGF0dXMgPT09IDQwMSB8fCBlcnJvci5zdGF0dXMgPT09IDQwMCkpIHtcbiAgICAgICAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBzdGF0dXMgNDAxIG9yIDQwMCcsIGVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzV0FFbmFibGVkKGp1cmlzZGljdGlvbj86IHN0cmluZywgY2FzZVR5cGU/OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICB0aGlzLmZlYXR1cmVzID0gdGhpcy5hcHBDb25maWcuZ2V0V0FTZXJ2aWNlQ29uZmlnKCk7XG4gICAgaWYgKHRoaXMuZmVhdHVyZXMpIHtcbiAgICAgIGNvbnN0IGZ0c3RyID0gSlNPTi5zdHJpbmdpZnkodGhpcy5mZWF0dXJlcyk7XG4gICAgICB0aGlzLmFwcENvbmZpZz8ubG9nTWVzc2FnZShgaXNXQUVuYWJsZWQ6IHdhLXNlcnZpY2UtY29uZmlnIHJldHVybmluZyAke2Z0c3RyPy5sZW5ndGggPiAwfWApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcENvbmZpZz8ubG9nTWVzc2FnZShgaXNXQUVuYWJsZWQ6IHdhLXNlcnZpY2UtY29uZmlnIHJldHVybmluZyBubyBmZWF0dXJlc2ApO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgZW5hYmxlZCA9IGZhbHNlO1xuICAgIGlmICghanVyaXNkaWN0aW9uIHx8ICFjYXNlVHlwZSkge1xuICAgICAgY29uc3QgY2FzZUluZm8gPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2Nhc2VJbmZvJykpO1xuICAgICAganVyaXNkaWN0aW9uID0gY2FzZUluZm8uanVyaXNkaWN0aW9uO1xuICAgICAgY2FzZVR5cGUgPSBjYXNlSW5mby5jYXNlVHlwZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmZlYXR1cmVzIHx8ICF0aGlzLmZlYXR1cmVzLmNvbmZpZ3VyYXRpb25zKSB7XG4gICAgICB0aGlzLmFwcENvbmZpZy5sb2dNZXNzYWdlKCdpc1dBRW5hYmxlZDogbm8gZmVhdHVyZXMnKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5mZWF0dXJlcy5jb25maWd1cmF0aW9ucy5mb3JFYWNoKHNlcnZpY2VDb25maWcgPT4ge1xuICAgICAgaWYgKHNlcnZpY2VDb25maWcuc2VydmljZU5hbWUgPT09IGp1cmlzZGljdGlvbiAmJiAoc2VydmljZUNvbmZpZy5jYXNlVHlwZXMuaW5kZXhPZihjYXNlVHlwZSkgIT09IC0xKSkge1xuICAgICAgICAgIGVuYWJsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYXBwQ29uZmlnLmxvZ01lc3NhZ2UoYGlzV0FFbmFibGVkOiByZXR1cm5pbmcgJHtlbmFibGVkfWApO1xuICAgIHJldHVybiBlbmFibGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgdGhlIEFQSSB0byBhc3NpZ24gYSB0YXNrLlxuICAgKiBAcGFyYW0gdGFza0lkIHNwZWNpZmllcyB3aGljaCB0YXNrIHNob3VsZCBiZSBhc3NpZ25lZC5cbiAgICogQHBhcmFtIHVzZXJJZCBzcGVjaWZpZXMgdGhlIHVzZXIgdGhlIHRhc2sgc2hvdWxkIGJlIGFzc2lnbmVkIHRvLlxuICAgKi9cbiAgcHVibGljIGFzc2lnblRhc2sodGFza0lkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuaXNXQUVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS90YXNrLyR7dGFza0lkfS9hc3NpZ25gO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHVybCwge3VzZXJJZH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgQVBJIHRvIGNvbXBsZXRlIGEgdGFzay5cbiAgICogQHBhcmFtIHRhc2tJZCBzcGVjaWZpZXMgd2hpY2ggdGFzayBzaG91bGQgYmUgY29tcGxldGVkLlxuICAgKi9cbiAgcHVibGljIGNvbXBsZXRlVGFzayh0YXNrSWQ6IHN0cmluZywgZXZlbnROYW1lPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuaXNXQUVuYWJsZWQoKSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc2V0UHJlc2VydmVBbGVydHModHJ1ZSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuaW5nKHsgcGhyYXNlOidjb21wbGV0ZVRhc2s6IFdvcmsgQWxsb2NhdGlvbiBpcyBub3QgZW5hYmxlZCwgc28gdGhlIHRhc2sgY291bGQgbm90IGJlIGNvbXBsZXRlZC4gUGxlYXNlIGNvbXBsZXRlIHRoZSB0YXNrIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2FzZSBtYW51YWxseS4nfSk7XG4gICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfVxuICAgIHRoaXMuYXBwQ29uZmlnLmxvZ01lc3NhZ2UoYGNvbXBsZXRlVGFzazogY29tcGxldGluZyAke3Rhc2tJZH1gKTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLmFwcENvbmZpZy5nZXRXb3JrQWxsb2NhdGlvbkFwaVVybCgpfS90YXNrLyR7dGFza0lkfS9jb21wbGV0ZWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodXJsLCB7IGFjdGlvbkJ5RXZlbnQ6IHRydWUsIGV2ZW50TmFtZTogZXZlbnROYW1lIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvclNlcnZpY2Uuc2V0RXJyb3IoZXJyb3IpO1xuICAgICAgICAgIC8vIHRoaXMgd2lsbCBzdWJzY3JpYmUgdG8gZ2V0IHRoZSB1c2VyIGRldGFpbHMgYW5kIGRlY2lkZSB3aGV0aGVyIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZVxuICAgICAgICAgIHRoaXMuaHR0cC5nZXQodGhpcy5hcHBDb25maWcuZ2V0VXNlckluZm9BcGlVcmwoKSkucGlwZShtYXAocmVzcG9uc2UgPT4gcmVzcG9uc2UpKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRhc2tDb21wbGV0aW9uRXJyb3IocmVzcG9uc2UpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCB0aGUgQVBJIHRvIGFzc2lnbiBhbmQgY29tcGxldGUgYSB0YXNrLlxuICAgKiBAcGFyYW0gdGFza0lkIHNwZWNpZmllcyB3aGljaCB0YXNrIHNob3VsZCBiZSBjb21wbGV0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXNzaWduQW5kQ29tcGxldGVUYXNrKHRhc2tJZDogc3RyaW5nLCBldmVudE5hbWU/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICghdGhpcy5pc1dBRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zZXRQcmVzZXJ2ZUFsZXJ0cyh0cnVlKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm5pbmcoeyBwaHJhc2U6J2Fzc2lnbkFuZENvbXBsZXRlVGFzazogV29yayBBbGxvY2F0aW9uIGlzIG5vdCBlbmFibGVkLCBzbyB0aGUgdGFzayBjb3VsZCBub3QgYmUgY29tcGxldGVkLiBQbGVhc2UgY29tcGxldGUgdGhlIHRhc2sgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYXNlIG1hbnVhbGx5Lid9KTtcbiAgICAgIHJldHVybiBvZihudWxsKTtcbiAgICB9XG4gICAgdGhpcy5hcHBDb25maWcubG9nTWVzc2FnZShgYXNzaWduQW5kQ29tcGxldGVUYXNrOiBjb21wbGV0aW5nICR7dGFza0lkfWApO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L3Rhc2svJHt0YXNrSWR9L2NvbXBsZXRlYDtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdCh1cmwsIHtcbiAgICAgICAgY29tcGxldGlvbl9vcHRpb25zOiB7XG4gICAgICAgICAgYXNzaWduX2FuZF9jb21wbGV0ZTogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25CeUV2ZW50OiB0cnVlLFxuICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZVxuICAgICAgfSlcbiAgICAgIC5waXBlKFxuICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICB0aGlzLmVycm9yU2VydmljZS5zZXRFcnJvcihlcnJvcik7XG4gICAgICAgICAgLy8gdGhpcyB3aWxsIHN1YnNjcmliZSB0byBnZXQgdGhlIHVzZXIgZGV0YWlscyBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgdGhpcy5odHRwLmdldCh0aGlzLmFwcENvbmZpZy5nZXRVc2VySW5mb0FwaVVybCgpKS5waXBlKG1hcChyZXNwb25zZSA9PiByZXNwb25zZSkpLnN1YnNjcmliZSgocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVGFza0NvbXBsZXRpb25FcnJvcihyZXNwb25zZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXJyb3IpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVzIHRoZSByZXNwb25zZSBmcm9tIHRoZSBvYnNlcnZhYmxlIHRvIGdldCB0aGUgdXNlciBkZXRhaWxzIHdoZW4gdGFzayBpcyBjb21wbGV0ZWQuXG4gICAqIEBwYXJhbSByZXNwb25zZSBpcyB0aGUgcmVzcG9uc2UgZ2l2ZW4gZnJvbSB0aGUgb2JzZXJ2YWJsZSB3aGljaCBjb250YWlucyB0aGUgdXNlciBkZXRhaWxkLlxuICAgKi9cbiAgcHVibGljIGhhbmRsZVRhc2tDb21wbGV0aW9uRXJyb3IocmVzcG9uc2U6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IHVzZXJEZXRhaWxzID0gcmVzcG9uc2UgYXMgVXNlckRldGFpbHM7XG4gICAgaWYgKHRoaXMudXNlcklzQ2FzZXdvcmtlcih1c2VyRGV0YWlscy51c2VySW5mby5yb2xlcykpIHtcbiAgICAgIC8vIHdoZW4gc3VibWl0dGluZyB0aGUgY29tcGxldGlvbiBvZiB0YXNrIGlmIG5vdCB5ZXQgcmVuZGVyZWQgY2FzZXMvY2FzZSBjb25maXJtIHRoZW4gcHJlc2VydmUgdGhlIGFsZXJ0IGZvciByZS1yZW5kZXJpbmdcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNldFByZXNlcnZlQWxlcnRzKHRydWUsIFsnY2FzZXMvY2FzZScsICdzdWJtaXQnXSk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuaW5nKHsgcGhyYXNlOidBIHRhc2sgY291bGQgbm90IGJlIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuIFBsZWFzZSBjb21wbGV0ZSB0aGUgdGFzayBhc3NvY2lhdGVkIHdpdGggdGhlIGNhc2UgbWFudWFsbHkuJ30pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHVzZXIncyByb2xlIGlzIGVxdWl2YWxlbnQgdG8gYSBjYXNld29ya2VyLlxuICAgKiBAcGFyYW0gcm9sZXMgaXMgdGhlIGxpc3Qgb2Ygcm9sZXMgZm91bmQgZnJvbSB0aGUgY3VycmVudCB1c2VyLlxuICAgKi9cbiAgcHVibGljIHVzZXJJc0Nhc2V3b3JrZXIocm9sZXM6IHN0cmluZ1tdKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbG93ZXJDYXNlUm9sZXMgPSByb2xlcy5tYXAocm9sZSA9PiByb2xlLnRvTG93ZXJDYXNlKCkpO1xuICAgIC8vIFdoZW4vaWYgbGliICYgdGFyZ2V0IHBlcm1hbmVudGx5IGNoYW5nZSB0byBlczIwMTYsIHJlcGxhY2UgaW5kZXhPZiB3aXRoIGluY2x1ZGVzXG4gICAgcmV0dXJuIChsb3dlckNhc2VSb2xlcy5pbmRleE9mKFdvcmtBbGxvY2F0aW9uU2VydmljZS5pQUNDYXNlT2ZmaWNlcikgIT09IC0xKVxuICAgICAgfHwgKGxvd2VyQ2FzZVJvbGVzLmluZGV4T2YoV29ya0FsbG9jYXRpb25TZXJ2aWNlLmlBQ0FkbU9mZmljZXIpICE9PSAtMSk7XG4gIH1cblxuICAvKipcbiAgICogTG9vayBmb3Igb3BlbiB0YXNrcyBmb3IgYSBjYXNlIGFuZCBldmVudCBjb21iaW5hdGlvbi4gVGhlcmUgYXJlIDUgcG9zc2libGUgc2NlbmFyaW9zOlxuICAgKiAgIDEuIE5vIHRhc2tzIGZvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT4gU3VjY2Vzcy5cbiAgICogICAyLiBPbmUgdGFzayBmb3VuZCA9PiBNYXJrIGFzIGRvbmUgICAgICAgICAgICAgID0+IFN1Y2Nlc3MuXG4gICAqICAgMy4gT25lIHRhc2sgZm91bmQgPT4gTWFyayBhcyBkb25lIHRocm93cyBlcnJvciA9PiBGYWlsdXJlLlxuICAgKiAgIDQuIE1vcmUgdGhhbiBvbmUgdGFzayBmb3VuZCAgICAgICAgICAgICAgICAgICAgPT4gRmFpbHVyZS5cbiAgICogICA1LiBTZWFyY2ggY2FsbCB0aHJvd3MgYW4gZXJyb3IgICAgICAgICAgICAgICAgID0+IEZhaWx1cmUuXG4gICAqIEBwYXJhbSBjY2RJZCBUaGUgSUQgb2YgdGhlIGNhc2UgdG8gZmluZCB0YXNrcyBmb3IuXG4gICAqIEBwYXJhbSBldmVudElkIFRoZSBJRCBvZiB0aGUgZXZlbnQgdG8gZmluZCB0YXNrcyBmb3IuXG4gICAqL1xuICBwdWJsaWMgY29tcGxldGVBcHByb3ByaWF0ZVRhc2soY2NkSWQ6IHN0cmluZywgZXZlbnRJZDogc3RyaW5nLCBqdXJpc2RpY3Rpb246IHN0cmluZywgY2FzZVR5cGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAoIXRoaXMuaXNXQUVuYWJsZWQoanVyaXNkaWN0aW9uLCBjYXNlVHlwZUlkKSkge1xuICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH1cbiAgICBjb25zdCB0YXNrU2VhcmNoUGFyYW1ldGVyOiBUYXNrU2VhcmNoUGFyYW1ldGVyID0ge1xuICAgICAgY2NkSWQsXG4gICAgICBldmVudElkLFxuICAgICAganVyaXNkaWN0aW9uLFxuICAgICAgY2FzZVR5cGVJZFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuc2VhcmNoVGFza3ModGFza1NlYXJjaFBhcmFtZXRlcilcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCB0YXNrczogYW55W10gPSByZXNwb25zZS50YXNrcztcbiAgICAgICAgICBpZiAodGFza3MgJiYgdGFza3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKHRhc2tzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRlVGFzayh0YXNrc1swXS5pZCwgZXZlbnRJZCkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcHJvYmxlbS4gVGhyb3cgYW4gYXBwcm9wcmlhdGUgZXJyb3IuXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihNVUxUSVBMRV9UQVNLU19GT1VORCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBBbGwgZ29vZC4gTm90aGluZyB0byBzZWUgaGVyZS5cbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIFNpbXBseSByZXRocm93IGl0LlxuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGVycm9yKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRhc2tzIGZvciBjYXNlIGFuZCBldmVudC5cbiAgICovXG4gIHB1YmxpYyBnZXRUYXNrc0J5Q2FzZUlkQW5kRXZlbnRJZChldmVudElkOiBzdHJpbmcsIGNhc2VJZDogc3RyaW5nLCBjYXNlVHlwZTogc3RyaW5nLCBqdXJpc2RpY3Rpb246IHN0cmluZyk6IE9ic2VydmFibGU8VGFza1BheWxvYWQ+IHtcbiAgICBjb25zdCBkZWZhdWx0UGF5bG9hZDogVGFza1BheWxvYWQgPSB7XG4gICAgICB0YXNrX3JlcXVpcmVkX2Zvcl9ldmVudDogZmFsc2UsXG4gICAgICB0YXNrczogW11cbiAgICB9O1xuICAgIGlmICghdGhpcy5pc1dBRW5hYmxlZCgpKSB7XG4gICAgICB0aGlzLmFwcENvbmZpZy5sb2dNZXNzYWdlKGBpc1dBRW5hYmxlZCBmYWxzZSBmb3IgJHtjYXNlSWR9IGluIGV2ZW50ICR7ZXZlbnRJZH1gKTtcbiAgICAgIHJldHVybiBvZihkZWZhdWx0UGF5bG9hZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYXBwQ29uZmlnLmdldFdvcmtBbGxvY2F0aW9uQXBpVXJsKCl9L2Nhc2UvdGFza3MvJHtjYXNlSWR9L2V2ZW50LyR7ZXZlbnRJZH0vY2FzZVR5cGUvJHtjYXNlVHlwZX0vanVyaXNkaWN0aW9uLyR7anVyaXNkaWN0aW9ufWApO1xuICB9XG5cbiAvKipcbiAgKiBDYWxsIHRoZSBBUEkgdG8gZ2V0IGEgdGFza1xuICAqL1xuIHB1YmxpYyBnZXRUYXNrKHRhc2tJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxUYXNrUmVzcG9uc2U+IHtcbiAgaWYgKCF0aGlzLmlzV0FFbmFibGVkKCkpIHtcbiAgICByZXR1cm4gb2Yoe3Rhc2s6IG51bGx9KTtcbiAgfVxuICB0aGlzLmFwcENvbmZpZy5sb2dNZXNzYWdlKGBnZXRUYXNrOiAke3Rhc2tJZH1gKTtcbiAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5hcHBDb25maWcuZ2V0V29ya0FsbG9jYXRpb25BcGlVcmwoKX0vdGFzay8ke3Rhc2tJZH1gKTtcbiB9XG59XG4iXX0=
|