@skyux/docs-tools 7.2.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/docs-tools.module.mjs +5 -5
- package/esm2020/modules/anatomy/anatomy-item.component.mjs +4 -4
- package/esm2020/modules/anatomy/anatomy-thumbnail.component.mjs +4 -4
- package/esm2020/modules/anatomy/anatomy.component.mjs +4 -4
- package/esm2020/modules/anatomy/anatomy.module.mjs +5 -5
- package/esm2020/modules/code-examples/code-example.component.mjs +14 -14
- package/esm2020/modules/code-examples/code-examples-editor.service.mjs +4 -4
- package/esm2020/modules/code-examples/code-examples.component.mjs +10 -10
- package/esm2020/modules/code-examples/code-examples.module.mjs +5 -5
- package/esm2020/modules/demo/demo-control-panel-checkbox.component.mjs +13 -13
- package/esm2020/modules/demo/demo-control-panel-radio-group.component.mjs +4 -4
- package/esm2020/modules/demo/demo-control-panel-section.component.mjs +4 -4
- package/esm2020/modules/demo/demo-control-panel.component.mjs +4 -4
- package/esm2020/modules/demo/demo.component.mjs +4 -4
- package/esm2020/modules/demo/demo.module.mjs +5 -5
- package/esm2020/modules/demo-page/demo-page-dom-adapter.service.mjs +10 -10
- package/esm2020/modules/demo-page/demo-page-module-info.component.mjs +4 -4
- package/esm2020/modules/demo-page/demo-page-section.component.mjs +4 -4
- package/esm2020/modules/demo-page/demo-page-summary.component.mjs +4 -4
- package/esm2020/modules/demo-page/demo-page-title.service.mjs +4 -4
- package/esm2020/modules/demo-page/demo-page-type-definitions.component.mjs +4 -4
- package/esm2020/modules/demo-page/demo-page.component.mjs +30 -30
- package/esm2020/modules/demo-page/demo-page.module.mjs +5 -5
- package/esm2020/modules/design-guidelines/design-guideline-thumbnail.component.mjs +4 -4
- package/esm2020/modules/design-guidelines/design-guideline.component.mjs +4 -4
- package/esm2020/modules/design-guidelines/design-guidelines.component.mjs +4 -4
- package/esm2020/modules/design-guidelines/design-guidelines.module.mjs +5 -5
- package/esm2020/modules/heading-anchor/heading-anchor.component.mjs +4 -4
- package/esm2020/modules/heading-anchor/heading-anchor.module.mjs +5 -5
- package/esm2020/modules/markdown/markdown.module.mjs +5 -5
- package/esm2020/modules/markdown/markdown.pipe.mjs +4 -4
- package/esm2020/modules/module-info/module-info.component.mjs +14 -14
- package/esm2020/modules/module-info/module-info.module.mjs +5 -5
- package/esm2020/modules/safe-html/safe-html.component.mjs +4 -4
- package/esm2020/modules/safe-html/safe-html.module.mjs +5 -5
- package/esm2020/modules/shared/docs-tools-supportal.service.mjs +4 -4
- package/esm2020/modules/shared/sky-docs-tools-resources.module.mjs +5 -5
- package/esm2020/modules/source-code/source-code-provider.mjs +4 -4
- package/esm2020/modules/source-code/source-code.service.mjs +4 -4
- package/esm2020/modules/thumbnail/thumbnail.component.mjs +4 -4
- package/esm2020/modules/thumbnail/thumbnail.module.mjs +5 -5
- package/esm2020/modules/type-definitions/anchor-link.service.mjs +4 -4
- package/esm2020/modules/type-definitions/call-signature-definition.component.mjs +8 -8
- package/esm2020/modules/type-definitions/class-definition.component.mjs +4 -4
- package/esm2020/modules/type-definitions/directive-definition.component.mjs +4 -4
- package/esm2020/modules/type-definitions/enumeration-definition.component.mjs +4 -4
- package/esm2020/modules/type-definitions/interface-definition.component.mjs +7 -7
- package/esm2020/modules/type-definitions/method-definitions.component.mjs +12 -12
- package/esm2020/modules/type-definitions/pipe-definition.component.mjs +4 -4
- package/esm2020/modules/type-definitions/property-definitions.component.mjs +12 -12
- package/esm2020/modules/type-definitions/type-alias-definition.component.mjs +7 -7
- package/esm2020/modules/type-definitions/type-anchor-links.pipe.mjs +4 -4
- package/esm2020/modules/type-definitions/type-definitions-format.service.mjs +4 -4
- package/esm2020/modules/type-definitions/type-definitions-provider.mjs +4 -4
- package/esm2020/modules/type-definitions/type-definitions.module.mjs +5 -5
- package/esm2020/modules/type-definitions/type-definitions.service.mjs +4 -4
- package/esm2020/modules/type-definitions/typedoc-adapter.service.mjs +4 -4
- package/fesm2015/skyux-docs-tools.mjs +277 -277
- package/fesm2015/skyux-docs-tools.mjs.map +1 -1
- package/fesm2020/skyux-docs-tools.mjs +277 -277
- package/fesm2020/skyux-docs-tools.mjs.map +1 -1
- package/modules/anatomy/anatomy-item.component.d.ts +1 -1
- package/modules/anatomy/anatomy-thumbnail.component.d.ts +1 -1
- package/modules/anatomy/anatomy.component.d.ts +1 -1
- package/modules/code-examples/code-example-module-dependencies.d.ts +1 -1
- package/modules/code-examples/code-example.component.d.ts +1 -1
- package/modules/code-examples/code-examples.component.d.ts +1 -1
- package/modules/demo/demo-content-alignment.d.ts +1 -1
- package/modules/demo/demo-control-panel-checkbox.component.d.ts +1 -1
- package/modules/demo/demo-control-panel-radio-group.component.d.ts +1 -1
- package/modules/demo/demo-control-panel-section.component.d.ts +1 -1
- package/modules/demo/demo-control-panel.component.d.ts +1 -1
- package/modules/demo/demo.component.d.ts +1 -1
- package/modules/demo-page/demo-page-module-info.component.d.ts +1 -1
- package/modules/demo-page/demo-page-section.component.d.ts +1 -1
- package/modules/demo-page/demo-page-summary.component.d.ts +1 -1
- package/modules/demo-page/demo-page-type-definitions.component.d.ts +1 -1
- package/modules/demo-page/demo-page.component.d.ts +1 -1
- package/modules/design-guidelines/design-guideline-thumbnail.component.d.ts +1 -1
- package/modules/design-guidelines/design-guideline.component.d.ts +1 -1
- package/modules/design-guidelines/design-guidelines.component.d.ts +1 -1
- package/modules/heading-anchor/heading-anchor.component.d.ts +1 -1
- package/modules/module-info/module-info.component.d.ts +2 -2
- package/modules/safe-html/safe-html.component.d.ts +1 -1
- package/modules/thumbnail/thumbnail.component.d.ts +1 -1
- package/modules/type-definitions/anchor-link-service-format.d.ts +1 -1
- package/modules/type-definitions/call-signature-definition.component.d.ts +1 -1
- package/modules/type-definitions/class-definition.component.d.ts +1 -1
- package/modules/type-definitions/directive-definition.component.d.ts +1 -1
- package/modules/type-definitions/enumeration-definition.component.d.ts +1 -1
- package/modules/type-definitions/interface-definition.component.d.ts +1 -1
- package/modules/type-definitions/method-definitions.component.d.ts +1 -1
- package/modules/type-definitions/pipe-definition.component.d.ts +1 -1
- package/modules/type-definitions/property-definitions.component.d.ts +1 -1
- package/modules/type-definitions/type-alias-definition.component.d.ts +1 -1
- package/package.json +20 -20
|
@@ -513,9 +513,9 @@ export class SkyDocsTypeDocAdapterService {
|
|
|
513
513
|
'');
|
|
514
514
|
}
|
|
515
515
|
}
|
|
516
|
-
SkyDocsTypeDocAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
517
|
-
SkyDocsTypeDocAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
518
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
516
|
+
SkyDocsTypeDocAdapterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyDocsTypeDocAdapterService, deps: [{ token: i1.SkyDocsTypeDefinitionsProvider, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
517
|
+
SkyDocsTypeDocAdapterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyDocsTypeDocAdapterService, providedIn: 'any' });
|
|
518
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyDocsTypeDocAdapterService, decorators: [{
|
|
519
519
|
type: Injectable,
|
|
520
520
|
args: [{
|
|
521
521
|
providedIn: 'any',
|
|
@@ -523,4 +523,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
523
523
|
}], ctorParameters: function () { return [{ type: i1.SkyDocsTypeDefinitionsProvider, decorators: [{
|
|
524
524
|
type: Optional
|
|
525
525
|
}] }]; } });
|
|
526
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb2NzLXRvb2xzL3NyYy9tb2R1bGVzL3R5cGUtZGVmaW5pdGlvbnMvdHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFnRHJELE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDOzs7QUFFckM7O0dBRUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQ3NCLHVCQUF3RDtRQUF4RCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWlDO0lBQzNFLENBQUM7SUFFRyxpQkFBaUIsQ0FBQyxLQUFtQjtRQUMxQyxNQUFNLFVBQVUsR0FBMkI7WUFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUM5QjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDcEM7UUFFRCxPQUFPLFVBQVUs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ekQsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUNoQyxPQUFPO1NBQ1I7UUFFRCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDNUIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFtQjtRQUNyQyxPQUFPLENBQ0wsS0FBSyxDQUFDLFFBQVE7WUFDZCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkQsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDOzswSEExc0JVLDRCQUE0Qjs4SEFBNUIsNEJBQTRCLGNBRjNCLEtBQUs7NEZBRU4sNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs7MEJBR0ksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiB9IGZyb20gJy4vY2FsbC1zaWduYXR1cmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDbGFzc0RlZmluaXRpb24gfSBmcm9tICcuL2NsYXNzLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuL3Byb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ29tbWVudFRhZ3MgfSBmcm9tICcuL2NvbW1lbnQtdGFncyc7XG5cbmltcG9ydCB7IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uIH0gZnJvbSAnLi9kaXJlY3RpdmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24gfSBmcm9tICcuL2VudW1lcmF0aW9uLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9lbnVtZXJhdGlvbi1tZW1iZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NJbmRleFNpZ25hdHVyZURlZmluaXRpb24gfSBmcm9tICcuL2luZGV4LXNpZ25hdHVyZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZURlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlLXByb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRob2QtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQaXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB9IGZyb20gJy4vcHJvcGVydHktZGVjb3JhdG9yJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gfSBmcm9tICcuL3R5cGUtYWxpYXMtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVEZWZpbml0aW9uc1Byb3ZpZGVyIH0gZnJvbSAnLi90eXBlLWRlZmluaXRpb25zLXByb3ZpZGVyJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlLXBhcmFtZXRlci1kZWZpbml0aW9uJztcblxuaW1wb3J0IHtcbiAgVHlwZURvY0NvbW1lbnQsXG4gIFR5cGVEb2NFbnRyeSxcbiAgVHlwZURvY0VudHJ5Q2hpbGQsXG4gIFR5cGVEb2NQYXJhbWV0ZXIsXG4gIFR5cGVEb2NTaWduYXR1cmUsXG4gIFR5cGVEb2NUeXBlLFxuICBUeXBlRG9jVHlwZVBhcmFtZXRlcixcbn0gZnJvbSAnLi90eXBlZG9jLXR5cGVzJztcblxuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuXG4vKipcbiAqIENvbnZlcnRzIFR5cGVEb2MgdHlwZXMgaW50byBTS1kgVVggZG9jcy10b29scyB0eXBlcywgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIHZhcmlvdXMgZGVmaW5pdGlvbnMgY29tcG9uZW50cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RG9jc1R5cGVEb2NBZGFwdGVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHlwZURlZmluaXRpb25zUHJvdmlkZXI/OiBTa3lEb2NzVHlwZURlZmluaXRpb25zUHJvdmlkZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyB0b0NsYXNzRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGVudHJ5LmNvbW1lbnQpO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgY29uc3QgbWV0aG9kcyA9IHRoaXMuZ2V0Q2xhc3NNZXRob2RzKGVudHJ5KTtcbiAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ubWV0aG9kcyA9IG1ldGhvZHM7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q2xhc3NQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9EaXJlY3RpdmVEZWZpbml0aW9uKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnlcbiAgKTogU2t5RG9jc0RpcmVjdGl2ZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHNlbGVjdG9yOiB0aGlzLmdldFNlbGVjdG9yKGVudHJ5KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDbGFzc1Byb3BlcnRpZXMoZW50cnkpO1xuXG4gICAgY29uc3QgZXZlbnRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdPdXRwdXQnXG4gICAgKTtcbiAgICBpZiAoZXZlbnRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5ldmVudFByb3BlcnRpZXMgPSBldmVudFByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdJbnB1dCdcbiAgICApO1xuICAgIGlmIChpbnB1dFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLmlucHV0UHJvcGVydGllcyA9IGlucHV0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0VudW1lcmF0aW9uRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24ge1xuICAgIGNvbnN0IG1lbWJlcnMgPSB0aGlzLmdldEVudW1lcmF0aW9uTWVtYmVycyhlbnRyeSk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG1lbWJlcnMsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHVibGljIHRvSW50ZXJmYWNlRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NJbnRlcmZhY2VEZWZpbml0aW9uIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRJbnRlcmZhY2VQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9QaXBlRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc1BpcGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRob2RzID0gdGhpcy5nZXRDbGFzc01ldGhvZHMoZW50cnkpO1xuICAgIGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IG1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAndHJhbnNmb3JtJyk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1BpcGVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHRyYW5zZm9ybU1ldGhvZCxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b1R5cGVBbGlhc0RlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzVHlwZUFsaWFzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgIGNvbW1lbnQ6IGVudHJ5LmNvbW1lbnQsXG4gICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICBlbnRyeS50eXBlLmRlY2xhcmF0aW9uPy5zaWduYXR1cmVzXG4gICAgICAgID8gZW50cnkudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgOiBlbnRyeS5jb21tZW50XG4gICAgKTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdG9yKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlY29yYXRvclNvdXJjZSA9IGVudHJ5LmRlY29yYXRvcnNbMF0uYXJndW1lbnRzLm9iajtcbiAgICByZXR1cm4gZGVjb3JhdG9yU291cmNlLmluZGV4T2YoJ3NlbGVjdG9yOiBgJykgPiAtMVxuICAgICAgPyBkZWNvcmF0b3JTb3VyY2VcbiAgICAgICAgICAuc3BsaXQoJ3NlbGVjdG9yOiBgJylbMV1cbiAgICAgICAgICAuc3BsaXQoJ2AnKVswXVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJylcbiAgICAgIDogZGVjb3JhdG9yU291cmNlLnNwbGl0KFwic2VsZWN0b3I6ICdcIilbMV0uc3BsaXQoXCInXCIpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc1Byb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gZW50cnkuY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgICBjaGlsZC5raW5kU3RyaW5nID09PSAnUHJvcGVydHknIHx8IGNoaWxkLmtpbmRTdHJpbmcgPT09ICdBY2Nlc3NvcidcbiAgICAgIClcbiAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZztcblxuICAgICAgICAvKiBFbnN1cmUgd2UgYXJlIHByb3Blcmx5IGNhcHR1cmluZyBkZWZpbml0aW9ucyB3aGljaCB1c2UgYSBnZXR0ZXIvc2V0dGVyLiBGaW5hbCBjaGVjayBpcyBhIHNhbml0eSBjaGVjayAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQua2luZFN0cmluZyA9PT0gJ0FjY2Vzc29yJyAmJlxuICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAoY2hpbGQuc2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwIHx8IGNoaWxkLmdldFNpZ25hdHVyZS5sZW5ndGggPiAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYWluVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBtYWluVGFncyk7XG5cbiAgICAgICAgICBpZiAoY2hpbGQuZ2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUYWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5nZXRTaWduYXR1cmVbMF0uY29tbWVudCk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFnZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcblxuICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgZ2V0VGFncyk7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgZ2V0VGFncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0VGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuc2V0U2lnbmF0dXJlWzBdLmNvbW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBzZXRUYWdzKTtcblxuICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsICYmICFzZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgc2V0VGFncyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFtYWluVGFncy5leHRyYXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgbWFpblRhZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdQcm9wZXJ0eScgJiZcbiAgICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24/LnNpZ25hdHVyZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24uc2lnbmF0dXJlc1swXS5jb21tZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgICAgICAgICAgY2hpbGQudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICF0YWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuXG4gICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCAmJiAhdGFncy5leHRyYXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkLCB0YWdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29yYXRvciA9IHRoaXMuZ2V0RGVjb3JhdG9yKGNoaWxkKTtcbiAgICAgICAgaWYgKGRlY29yYXRvcikge1xuICAgICAgICAgIGRlZmluaXRpb24uZGVjb3JhdG9yID0gZGVjb3JhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZWZpbml0aW9uLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RydWN0b3IgPSBlbnRyeS5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkKSA9PiBjaGlsZC5raW5kU3RyaW5nID09PSAnQ29uc3RydWN0b3InXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnN0cnVjdG9yLnNpZ25hdHVyZXMuZmluZChcbiAgICAgICAgICAgICAgKHNpZ25hdHVyZSkgPT4gc2lnbmF0dXJlLmtpbmRTdHJpbmcgPT09ICdDb25zdHJ1Y3RvciBzaWduYXR1cmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtID0gc2lnbmF0dXJlLnBhcmFtZXRlcnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLm5hbWUgPT09IGNoaWxkLm5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUGFyYW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICAgICAgICAgICAgICBtYXRjaGluZ1BhcmFtLmNvbW1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIG1hdGNoaW5nUGFyYW1UYWdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShkZWZpbml0aW9ucywgWydpc09wdGlvbmFsJywgJ25hbWUnXSwgWydhc2MnLCAnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc01ldGhvZHMoZW50cnk6IFR5cGVEb2NFbnRyeSk6IFNreURvY3NDbGFzc01ldGhvZERlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZHMgPSBlbnRyeS5jaGlsZHJlblxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNoaWxkKSA9PlxuICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIC9ebmcvLnRlc3QoY2hpbGQubmFtZSkgPT09IGZhbHNlXG4gICAgICApXG4gICAgICAubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0UHJvcGVydHlOYW1lKGNoaWxkKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkKSxcbiAgICAgICAgICBpc1N0YXRpYzogISFjaGlsZC5mbGFncz8uaXNTdGF0aWMsXG4gICAgICAgICAgcGFyZW50TmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDb21tZW50cyBmb3IgbWV0aG9kcyBhcmUgc3RvcmVkIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLlxuICAgICAgICBjb25zdCBjb21tZW50ID0gY2hpbGQuc2lnbmF0dXJlc1swXS5jb21tZW50O1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjb21tZW50KTtcbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLmdldFR5cGVQYXJhbWV0ZXJEZWZpbml0aW9ucyhcbiAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLnR5cGVQYXJhbWV0ZXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGRlZmluaXRpb24udHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShtZXRob2RzLCBbJ25hbWUnXSwgWydhc2MnXSk7XG4gIH1cblxuICBwcml2YXRlIGdldEludGVyZmFjZVByb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4gJiYgIWVudHJ5LmluZGV4U2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPVxuICAgICAgZW50cnkuY2hpbGRyZW4/Lm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgbGV0IHRhZ3M6IFNreURvY3NDb21tZW50VGFncyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIGNoaWxkLnNpZ25hdHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLnNpZ25hdHVyZXNbMF0uY29tbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBpc09wdGlvbmFsOiB0YWdzLmV4dHJhcy5yZXF1aXJlZCA/IGZhbHNlIDogISFjaGlsZC5mbGFncz8uaXNPcHRpb25hbCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9KSB8fCBbXTtcblxuICAgIGNvbnN0IHNvcnRlZCA9IG9yZGVyQnkoZGVmaW5pdGlvbnMsIFsnaXNPcHRpb25hbCcsICduYW1lJ10sIFsnYXNjJywgJ2FzYyddKTtcblxuICAgIC8vIEFkZCBhbnkgaW5kZXggc2lnbmF0dXJlcywgZS5nLiBgW186IHN0cmluZ106IGFueWBcbiAgICBpZiAoZW50cnkuaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgIGNvbnN0IGluZGV4U2lnbmF0dXJlID0gZW50cnkuaW5kZXhTaWduYXR1cmU7XG4gICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICBuYW1lOiBpbmRleFNpZ25hdHVyZS5uYW1lLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgaW5kZXhTaWduYXR1cmU6IHRoaXMuZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKGluZGV4U2lnbmF0dXJlKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGluZGV4U2lnbmF0dXJlLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG4gICAgICBzb3J0ZWQucHVzaChkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnVtZXJhdGlvbk1lbWJlcnMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnkuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uTWVtYmVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogY2hpbGQubmFtZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbihjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGQpOiBTa3lEb2NzVHlwZURlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzVHlwZURlZmluaXRpb247XG5cbiAgICBjb25zdCBraW5kU3RyaW5nID0gY2hpbGQua2luZFN0cmluZztcbiAgICBzd2l0Y2ggKGtpbmRTdHJpbmcpIHtcbiAgICAgIGNhc2UgJ0FjY2Vzc29yJzpcbiAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkLnNldFNpZ25hdHVyZVswXS5wYXJhbWV0ZXJzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZC5nZXRTaWduYXR1cmVbMF0pO1xuXG4gICAgICBjYXNlICdNZXRob2QnOlxuICAgICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNhbGxTaWduYXR1cmU6IHRoaXMuZ2V0Q2FsbFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5jb21tZW50KVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogY2hpbGQuc2lnbmF0dXJlc1swXS5uYW1lLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nID1cbiAgICAgICAgICBjaGlsZC50eXBlLm5hbWUgfHwgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8ubmFtZSB8fCBjaGlsZC50eXBlLnZhbHVlO1xuXG4gICAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogY2hpbGQudHlwZS50eXBlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVuaW9uP1xuICAgICAgICBpZiAoY2hpbGQudHlwZS50eXBlcykge1xuICAgICAgICAgIGRlZmluaXRpb24udW5pb25UeXBlcyA9IGNoaWxkLnR5cGUudHlwZXMubWFwKCh0KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7IHR5cGU6IHQgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udmVydCByZWZsZWN0aW9uIHR5cGVzLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQudHlwZS50eXBlID09PSAncmVmbGVjdGlvbicgfHxcbiAgICAgICAgICBjaGlsZC50eXBlLmVsZW1lbnRUeXBlPy50eXBlID09PSAncmVmbGVjdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPVxuICAgICAgICAgICAgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8udHlwZSA9PT0gJ3JlZmxlY3Rpb24nXG4gICAgICAgICAgICAgID8gY2hpbGQudHlwZS5lbGVtZW50VHlwZS5kZWNsYXJhdGlvblxuICAgICAgICAgICAgICA6IGNoaWxkLnR5cGUuZGVjbGFyYXRpb247XG4gICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChkZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnNpZ25hdHVyZXMpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5jYWxsU2lnbmF0dXJlID0gdGhpcy5nZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXhTaWduYXR1cmUgPSBkZWNsYXJhdGlvbi5pbmRleFNpZ25hdHVyZTtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pbmRleFNpZ25hdHVyZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbmRleFNpZ25hdHVyZURlZmluaXRpb24oaW5kZXhTaWduYXR1cmUpO1xuICAgICAgICAgICAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLyBlbHNlIGlmIChkZWNsYXJhdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uLnR5cGVMaXRlcmFsID0ge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZ2V0SW50ZXJmYWNlUHJvcGVydGllcyh7XG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZGVjbGFyYXRpb24uY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkLnR5cGUudHlwZSA9PT0gJ3R5cGVPcGVyYXRvcicpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBgJHtjaGlsZC50eXBlLm9wZXJhdG9yfSAke2NoaWxkLnR5cGUudGFyZ2V0Lm5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC50eXBlLnR5cGVBcmd1bWVudHMpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLnR5cGVBcmd1bWVudHMgPSB0aGlzLmdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgICAgICAgICAgY2hpbGQudHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtZXRlckRlZmluaXRpb25zKFxuICAgIGNhbGxTaWduYXR1cmU6IFR5cGVEb2NTaWduYXR1cmUsXG4gICAgcGFyZW50VGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghY2FsbFNpZ25hdHVyZS5wYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyczogU2t5RG9jc1BhcmFtZXRlckRlZmluaXRpb25bXSA9XG4gICAgICBjYWxsU2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldFBhcmFtZXRlckNvbW1lbnRUYWdzKHAsIHBhcmVudFRhZ3MpO1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShwLCB0YWdzKTtcbiAgICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHRoaXMuZ2V0VHlwZUFyZ3VtZW50RGVmaW5pdGlvbnMocC50eXBlKTtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXI6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uID0ge1xuICAgICAgICAgIGlzT3B0aW9uYWw6ICEhKGRlZmF1bHRWYWx1ZSB8fCAhIXAuZmxhZ3M/LmlzT3B0aW9uYWwpLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHApLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcmFtZXRlci5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFncy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHBhcmFtZXRlci5kZXNjcmlwdGlvbiA9IHRhZ3MuZGVzY3JpcHRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBwYXJhbWV0ZXIudHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgIHR5cGVDb25maWc6IFR5cGVEb2NUeXBlXG4gICk6IFNreURvY3NUeXBlRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIXR5cGVDb25maWcgfHwgIXR5cGVDb25maWcudHlwZUFyZ3VtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlQ29uZmlnLnR5cGVBcmd1bWVudHMubWFwKCh0eXBlQXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHsgdHlwZTogdHlwZUFyZ3VtZW50IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICBjYWxsU2lnbmF0dXJlOiBUeXBlRG9jU2lnbmF0dXJlLFxuICAgIHRhZ3M6IFNreURvY3NDb21tZW50VGFnc1xuICApOiBTa3lEb2NzQ2FsbFNpZ25hdHVyZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiA9IHtcbiAgICAgIHJldHVyblR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oY2FsbFNpZ25hdHVyZSksXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmdldFBhcmFtZXRlckRlZmluaXRpb25zKGNhbGxTaWduYXR1cmUsIHRhZ3MpO1xuICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKFxuICAgIHNpZ25hdHVyZTogVHlwZURvY1NpZ25hdHVyZVxuICApOiBTa3lEb2NzSW5kZXhTaWduYXR1cmVEZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB7XG4gICAgICAgIG5hbWU6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzWzBdLm5hbWUsXG4gICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlLnBhcmFtZXRlcnNbMF0pLFxuICAgICAgfSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgdHlwZVBhcmFtZXRlcnM6IFR5cGVEb2NUeXBlUGFyYW1ldGVyW11cbiAgKTogU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghdHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVBhcmFtZXRlcnMubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogdHlwZVBhcmFtLm5hbWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZVBhcmFtLnR5cGUpIHtcbiAgICAgICAgZGVmaW5pdGlvbi50eXBlID0gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgICAgdHlwZTogdHlwZVBhcmFtLnR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tbWVudFRhZ3MoY29tbWVudDogVHlwZURvY0NvbW1lbnQpOiBTa3lEb2NzQ29tbWVudFRhZ3Mge1xuICAgIGxldCBjb2RlRXhhbXBsZTogc3RyaW5nO1xuICAgIGxldCBjb2RlRXhhbXBsZUxhbmd1YWdlOiBzdHJpbmcgPSAnbWFya3VwJztcbiAgICBsZXQgZGVwcmVjYXRpb25XYXJuaW5nOiBzdHJpbmc7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAgIGxldCBkZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgICBsZXQgcGFyYW1ldGVyczoge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB9W107XG5cbiAgICBjb25zdCBleHRyYXM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9ID0ge307XG5cbiAgICBpZiAoY29tbWVudCkge1xuICAgICAgaWYgKGNvbW1lbnQudGFncykge1xuICAgICAgICBjb21tZW50LnRhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0YWcudGFnKSB7XG4gICAgICAgICAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgICAgICAgICAgZGVwcmVjYXRpb25XYXJuaW5nID0gdGFnLnRleHQudHJpbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOlxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0YWcudGV4dC50cmltKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdleGFtcGxlJzpcbiAgICAgICAgICAgICAgY29kZUV4YW1wbGUgPSB0YWcudGV4dC50cmltKCkuc3BsaXQoJ2BgYCcpWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBjb2RlRXhhbXBsZS5zcGxpdCgnXFxuJylbMF07XG4gICAgICAgICAgICAgIGlmIChsYW5ndWFnZSA9PT0gJ21hcmt1cCcgfHwgbGFuZ3VhZ2UgPT09ICd0eXBlc2NyaXB0Jykge1xuICAgICAgICAgICAgICAgIGNvZGVFeGFtcGxlID0gY29kZUV4YW1wbGUuc2xpY2UobGFuZ3VhZ2UubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgY29kZUV4YW1wbGVMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdwYXJhbSc6XG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IFtdO1xuICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IHRhZy5wYXJhbSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFnLnRleHQudHJpbSgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGV4dHJhc1t0YWcudGFnXSA9IHRhZy50ZXh0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBkZXNjcmlwdGlvbiA9IChjb21tZW50LnNob3J0VGV4dCB8fCBjb21tZW50LnRleHQgfHwgJycpLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZUV4YW1wbGUsXG4gICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGVwcmVjYXRpb25XYXJuaW5nLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRyYXMsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGFyYW1ldGVyIGRlc2NyaXB0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBwYXJlbnQncyAoZnVuY3Rpb24vbWV0aG9kKSBjb21tZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQYXJhbWV0ZXJDb21tZW50VGFncyhcbiAgICBwYXJhbWV0ZXI6IFR5cGVEb2NQYXJhbWV0ZXIsXG4gICAgcGFyZW50VGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NDb21tZW50VGFncyB7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MocGFyYW1ldGVyLmNvbW1lbnQpO1xuICAgIGNvbnN0IHBhcmFtVGFncyA9IHBhcmVudFRhZ3MucGFyYW1ldGVycztcbiAgICBjb25zdCB0YWdQYXJhbSA9IHBhcmFtVGFnc1xuICAgICAgPyBwYXJhbVRhZ3MuZmluZCgocGFyYW0pID0+IHBhcmFtLm5hbWUgPT09IHBhcmFtZXRlci5uYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRhZ1BhcmFtIHx8ICF0YWdQYXJhbS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRhZ3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRhZ3MsXG4gICAgICAuLi57XG4gICAgICAgIGRlc2NyaXB0aW9uOiB0YWdQYXJhbS5kZXNjcmlwdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGNvbW1lbnQgdGFnIChlLmcuIGBAcGFyYW1gKSB2YWx1ZXMgdG8gdGhlIHByb3ZpZGVkIGRlZmluaXRpb24sIGlmIHRoZSB2YWx1ZSBpcyBkZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUNvbW1lbnRUYWdWYWx1ZXMoXG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgY29kZUV4YW1wbGU/OiBzdHJpbmc7XG4gICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlPzogc3RyaW5nO1xuICAgICAgZGVwcmVjYXRpb25XYXJuaW5nPzogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfSxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRhZ3MuY29kZUV4YW1wbGUpIHtcbiAgICAgIGRlZmluaXRpb24uY29kZUV4YW1wbGUgPSB0YWdzLmNvZGVFeGFtcGxlO1xuICAgICAgZGVmaW5pdGlvbi5jb2RlRXhhbXBsZUxhbmd1YWdlID0gdGFncy5jb2RlRXhhbXBsZUxhbmd1YWdlO1xuICAgIH1cblxuICAgIGlmICh0YWdzLmRlcHJlY2F0aW9uV2FybmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWZpbml0aW9uLmRlcHJlY2F0aW9uV2FybmluZyA9IHRhZ3MuZGVwcmVjYXRpb25XYXJuaW5nO1xuICAgIH1cblxuICAgIGlmICh0YWdzLmRlc2NyaXB0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uLmRlc2NyaXB0aW9uID0gdGFncy5kZXNjcmlwdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERlY29yYXRvcihcbiAgICBjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGRcbiAgKTogU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBjaGlsZC5kZWNvcmF0b3JzICYmIGNoaWxkLmRlY29yYXRvcnNbMF0gJiYgY2hpbGQuZGVjb3JhdG9yc1swXS5uYW1lO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4geyBuYW1lIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHk6IFR5cGVEb2NFbnRyeUNoaWxkKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWNvcmF0b3JzID0gcHJvcGVydHkuZGVjb3JhdG9ycyAmJiBwcm9wZXJ0eS5kZWNvcmF0b3JzWzBdO1xuICAgIC8vIFVzZSB0aGUgSW5wdXQncyBib3VuZCBwcm9wZXJ0eSBuYW1lLCBpZiBmb3VuZC5cbiAgICAvLyBlLmcuIEBJbnB1dCgnZm9vYmFyJylcbiAgICByZXR1cm4gZGVjb3JhdG9ycz8uYXJndW1lbnRzPy5iaW5kaW5nUHJvcGVydHlOYW1lXG4gICAgICA/IGRlY29yYXRvcnMuYXJndW1lbnRzLmJpbmRpbmdQcm9wZXJ0eU5hbWUucmVwbGFjZSgvKFxcJ3xcXFwiKS9nLCAnJylcbiAgICAgIDogcHJvcGVydHkubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKFxuICAgIGNoaWxkOiBUeXBlRG9jRW50cnlDaGlsZCxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGFncy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0YWdzLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBUeXBlRG9jIHZlcnNpb24gMC4yMC54IHN0b3BwZWQgYXV0by1nZW5lcmF0aW5nIGluaXRpYWxpemVycyBmb3IgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAvLyAoYW5kIHJlcGxhY2VkIHRoZW0gd2l0aCBcIi4uLlwiKSBkdWUgdG8gdGhlIGNvbXBsaWNhdGVkIGxvZ2ljIGl0IHJlcXVpcmVkLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL1R5cGVTdHJvbmcvdHlwZWRvYy9pc3N1ZXMvMTU1MlxuICAgIGlmIChjaGlsZC5kZWZhdWx0VmFsdWUgPT09ICcuLi4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkLmRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QW5jaG9ySWQoZW50cnk6IFR5cGVEb2NFbnRyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVudHJ5LmFuY2hvcklkIHx8XG4gICAgICB0aGlzLnR5cGVEZWZpbml0aW9uc1Byb3ZpZGVyPy5hbmNob3JJZHNbZW50cnkubmFtZV0gfHxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
526
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb2NzLXRvb2xzL3NyYy9tb2R1bGVzL3R5cGUtZGVmaW5pdGlvbnMvdHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFnRHJELE9BQU8sT0FBTyxNQUFNLGdCQUFnQixDQUFDOzs7QUFFckM7O0dBRUc7QUFJSCxNQUFNLE9BQU8sNEJBQTRCO0lBQ3ZDLFlBQ3NCLHVCQUF3RDtRQUF4RCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWlDO0lBQzNFLENBQUM7SUFFRyxpQkFBaUIsQ0FBQyxLQUFtQjtRQUMxQyxNQUFNLFVBQVUsR0FBMkI7WUFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtTQUNqQixDQUFDO1FBRUYsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUU3QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNsQixVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztTQUM5QjtRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckIsVUFBVSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7U0FDcEM7UUFFRCxPQUFPLFVBQVUs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ekQsSUFBSSxLQUFLLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUNoQyxPQUFPO1NBQ1I7UUFFRCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDNUIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFtQjtRQUNyQyxPQUFPLENBQ0wsS0FBSyxDQUFDLFFBQVE7WUFDZCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkQsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDOzt5SEExc0JVLDRCQUE0Qjs2SEFBNUIsNEJBQTRCLGNBRjNCLEtBQUs7MkZBRU4sNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs7MEJBR0ksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiB9IGZyb20gJy4vY2FsbC1zaWduYXR1cmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDbGFzc0RlZmluaXRpb24gfSBmcm9tICcuL2NsYXNzLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuL3Byb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ29tbWVudFRhZ3MgfSBmcm9tICcuL2NvbW1lbnQtdGFncyc7XG5cbmltcG9ydCB7IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uIH0gZnJvbSAnLi9kaXJlY3RpdmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24gfSBmcm9tICcuL2VudW1lcmF0aW9uLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9lbnVtZXJhdGlvbi1tZW1iZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NJbmRleFNpZ25hdHVyZURlZmluaXRpb24gfSBmcm9tICcuL2luZGV4LXNpZ25hdHVyZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZURlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlLXByb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRob2QtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQaXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB9IGZyb20gJy4vcHJvcGVydHktZGVjb3JhdG9yJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gfSBmcm9tICcuL3R5cGUtYWxpYXMtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVEZWZpbml0aW9uc1Byb3ZpZGVyIH0gZnJvbSAnLi90eXBlLWRlZmluaXRpb25zLXByb3ZpZGVyJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlLXBhcmFtZXRlci1kZWZpbml0aW9uJztcblxuaW1wb3J0IHtcbiAgVHlwZURvY0NvbW1lbnQsXG4gIFR5cGVEb2NFbnRyeSxcbiAgVHlwZURvY0VudHJ5Q2hpbGQsXG4gIFR5cGVEb2NQYXJhbWV0ZXIsXG4gIFR5cGVEb2NTaWduYXR1cmUsXG4gIFR5cGVEb2NUeXBlLFxuICBUeXBlRG9jVHlwZVBhcmFtZXRlcixcbn0gZnJvbSAnLi90eXBlZG9jLXR5cGVzJztcblxuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuXG4vKipcbiAqIENvbnZlcnRzIFR5cGVEb2MgdHlwZXMgaW50byBTS1kgVVggZG9jcy10b29scyB0eXBlcywgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIHZhcmlvdXMgZGVmaW5pdGlvbnMgY29tcG9uZW50cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RG9jc1R5cGVEb2NBZGFwdGVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdHlwZURlZmluaXRpb25zUHJvdmlkZXI/OiBTa3lEb2NzVHlwZURlZmluaXRpb25zUHJvdmlkZXJcbiAgKSB7fVxuXG4gIHB1YmxpYyB0b0NsYXNzRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGVudHJ5LmNvbW1lbnQpO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgY29uc3QgbWV0aG9kcyA9IHRoaXMuZ2V0Q2xhc3NNZXRob2RzKGVudHJ5KTtcbiAgICBpZiAobWV0aG9kcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ubWV0aG9kcyA9IG1ldGhvZHM7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q2xhc3NQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24ucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9EaXJlY3RpdmVEZWZpbml0aW9uKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnlcbiAgKTogU2t5RG9jc0RpcmVjdGl2ZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHNlbGVjdG9yOiB0aGlzLmdldFNlbGVjdG9yKGVudHJ5KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRDbGFzc1Byb3BlcnRpZXMoZW50cnkpO1xuXG4gICAgY29uc3QgZXZlbnRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdPdXRwdXQnXG4gICAgKTtcbiAgICBpZiAoZXZlbnRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5ldmVudFByb3BlcnRpZXMgPSBldmVudFByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5maWx0ZXIoXG4gICAgICAocCkgPT4gcC5kZWNvcmF0b3I/Lm5hbWUgPT09ICdJbnB1dCdcbiAgICApO1xuICAgIGlmIChpbnB1dFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLmlucHV0UHJvcGVydGllcyA9IGlucHV0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0VudW1lcmF0aW9uRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24ge1xuICAgIGNvbnN0IG1lbWJlcnMgPSB0aGlzLmdldEVudW1lcmF0aW9uTWVtYmVycyhlbnRyeSk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG1lbWJlcnMsXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHVibGljIHRvSW50ZXJmYWNlRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NJbnRlcmZhY2VEZWZpbml0aW9uIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRJbnRlcmZhY2VQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBwcm9wZXJ0aWVzLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9QaXBlRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc1BpcGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRob2RzID0gdGhpcy5nZXRDbGFzc01ldGhvZHMoZW50cnkpO1xuICAgIGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IG1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAndHJhbnNmb3JtJyk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1BpcGVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHRyYW5zZm9ybU1ldGhvZCxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b1R5cGVBbGlhc0RlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzVHlwZUFsaWFzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgIGNvbW1lbnQ6IGVudHJ5LmNvbW1lbnQsXG4gICAgICAgIHR5cGU6IGVudHJ5LnR5cGUsXG4gICAgICB9KSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICBlbnRyeS50eXBlLmRlY2xhcmF0aW9uPy5zaWduYXR1cmVzXG4gICAgICAgID8gZW50cnkudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgOiBlbnRyeS5jb21tZW50XG4gICAgKTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVyXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdG9yKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlY29yYXRvclNvdXJjZSA9IGVudHJ5LmRlY29yYXRvcnNbMF0uYXJndW1lbnRzLm9iajtcbiAgICByZXR1cm4gZGVjb3JhdG9yU291cmNlLmluZGV4T2YoJ3NlbGVjdG9yOiBgJykgPiAtMVxuICAgICAgPyBkZWNvcmF0b3JTb3VyY2VcbiAgICAgICAgICAuc3BsaXQoJ3NlbGVjdG9yOiBgJylbMV1cbiAgICAgICAgICAuc3BsaXQoJ2AnKVswXVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJylcbiAgICAgIDogZGVjb3JhdG9yU291cmNlLnNwbGl0KFwic2VsZWN0b3I6ICdcIilbMV0uc3BsaXQoXCInXCIpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc1Byb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gZW50cnkuY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgICBjaGlsZC5raW5kU3RyaW5nID09PSAnUHJvcGVydHknIHx8IGNoaWxkLmtpbmRTdHJpbmcgPT09ICdBY2Nlc3NvcidcbiAgICAgIClcbiAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZztcblxuICAgICAgICAvKiBFbnN1cmUgd2UgYXJlIHByb3Blcmx5IGNhcHR1cmluZyBkZWZpbml0aW9ucyB3aGljaCB1c2UgYSBnZXR0ZXIvc2V0dGVyLiBGaW5hbCBjaGVjayBpcyBhIHNhbml0eSBjaGVjayAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQua2luZFN0cmluZyA9PT0gJ0FjY2Vzc29yJyAmJlxuICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAoY2hpbGQuc2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwIHx8IGNoaWxkLmdldFNpZ25hdHVyZS5sZW5ndGggPiAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYWluVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBtYWluVGFncyk7XG5cbiAgICAgICAgICBpZiAoY2hpbGQuZ2V0U2lnbmF0dXJlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUYWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5nZXRTaWduYXR1cmVbMF0uY29tbWVudCk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFnZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcblxuICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgZ2V0VGFncyk7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgZ2V0VGFncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3Qgc2V0VGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuc2V0U2lnbmF0dXJlWzBdLmNvbW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBzZXRUYWdzKTtcblxuICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsICYmICFzZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgc2V0VGFncyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFtYWluVGFncy5leHRyYXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgbWFpblRhZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdQcm9wZXJ0eScgJiZcbiAgICAgICAgICAgICFjaGlsZC5jb21tZW50Py5zaG9ydFRleHQgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24/LnNpZ25hdHVyZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24uc2lnbmF0dXJlc1swXS5jb21tZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgICAgICAgICAgY2hpbGQudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICF0YWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuXG4gICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCAmJiAhdGFncy5leHRyYXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKGNoaWxkLCB0YWdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRlY29yYXRvciA9IHRoaXMuZ2V0RGVjb3JhdG9yKGNoaWxkKTtcbiAgICAgICAgaWYgKGRlY29yYXRvcikge1xuICAgICAgICAgIGRlZmluaXRpb24uZGVjb3JhdG9yID0gZGVjb3JhdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkZWZpbml0aW9uLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgY29uc3QgY29uc3RydWN0b3IgPSBlbnRyeS5jaGlsZHJlbi5maW5kKFxuICAgICAgICAgICAgKGNoaWxkKSA9PiBjaGlsZC5raW5kU3RyaW5nID09PSAnQ29uc3RydWN0b3InXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnN0cnVjdG9yLnNpZ25hdHVyZXMuZmluZChcbiAgICAgICAgICAgICAgKHNpZ25hdHVyZSkgPT4gc2lnbmF0dXJlLmtpbmRTdHJpbmcgPT09ICdDb25zdHJ1Y3RvciBzaWduYXR1cmUnXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtID0gc2lnbmF0dXJlLnBhcmFtZXRlcnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLm5hbWUgPT09IGNoaWxkLm5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUGFyYW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICAgICAgICAgICAgICBtYXRjaGluZ1BhcmFtLmNvbW1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIG1hdGNoaW5nUGFyYW1UYWdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShkZWZpbml0aW9ucywgWydpc09wdGlvbmFsJywgJ25hbWUnXSwgWydhc2MnLCAnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc01ldGhvZHMoZW50cnk6IFR5cGVEb2NFbnRyeSk6IFNreURvY3NDbGFzc01ldGhvZERlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZHMgPSBlbnRyeS5jaGlsZHJlblxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNoaWxkKSA9PlxuICAgICAgICAgIGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIC9ebmcvLnRlc3QoY2hpbGQubmFtZSkgPT09IGZhbHNlXG4gICAgICApXG4gICAgICAubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uID0ge1xuICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0UHJvcGVydHlOYW1lKGNoaWxkKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkKSxcbiAgICAgICAgICBpc1N0YXRpYzogISFjaGlsZC5mbGFncz8uaXNTdGF0aWMsXG4gICAgICAgICAgcGFyZW50TmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDb21tZW50cyBmb3IgbWV0aG9kcyBhcmUgc3RvcmVkIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLlxuICAgICAgICBjb25zdCBjb21tZW50ID0gY2hpbGQuc2lnbmF0dXJlc1swXS5jb21tZW50O1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjb21tZW50KTtcbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLmdldFR5cGVQYXJhbWV0ZXJEZWZpbml0aW9ucyhcbiAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLnR5cGVQYXJhbWV0ZXJcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgICAgIGRlZmluaXRpb24udHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShtZXRob2RzLCBbJ25hbWUnXSwgWydhc2MnXSk7XG4gIH1cblxuICBwcml2YXRlIGdldEludGVyZmFjZVByb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4gJiYgIWVudHJ5LmluZGV4U2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPVxuICAgICAgZW50cnkuY2hpbGRyZW4/Lm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgbGV0IHRhZ3M6IFNreURvY3NDb21tZW50VGFncyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNoaWxkLmtpbmRTdHJpbmcgPT09ICdNZXRob2QnICYmIGNoaWxkLnNpZ25hdHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLnNpZ25hdHVyZXNbMF0uY29tbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBpc09wdGlvbmFsOiB0YWdzLmV4dHJhcy5yZXF1aXJlZCA/IGZhbHNlIDogISFjaGlsZC5mbGFncz8uaXNPcHRpb25hbCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9KSB8fCBbXTtcblxuICAgIGNvbnN0IHNvcnRlZCA9IG9yZGVyQnkoZGVmaW5pdGlvbnMsIFsnaXNPcHRpb25hbCcsICduYW1lJ10sIFsnYXNjJywgJ2FzYyddKTtcblxuICAgIC8vIEFkZCBhbnkgaW5kZXggc2lnbmF0dXJlcywgZS5nLiBgW186IHN0cmluZ106IGFueWBcbiAgICBpZiAoZW50cnkuaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgIGNvbnN0IGluZGV4U2lnbmF0dXJlID0gZW50cnkuaW5kZXhTaWduYXR1cmU7XG4gICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICBuYW1lOiBpbmRleFNpZ25hdHVyZS5uYW1lLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgaW5kZXhTaWduYXR1cmU6IHRoaXMuZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKGluZGV4U2lnbmF0dXJlKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGluZGV4U2lnbmF0dXJlLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG4gICAgICBzb3J0ZWQucHVzaChkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnVtZXJhdGlvbk1lbWJlcnMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnkuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uTWVtYmVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogY2hpbGQubmFtZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbihjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGQpOiBTa3lEb2NzVHlwZURlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzVHlwZURlZmluaXRpb247XG5cbiAgICBjb25zdCBraW5kU3RyaW5nID0gY2hpbGQua2luZFN0cmluZztcbiAgICBzd2l0Y2ggKGtpbmRTdHJpbmcpIHtcbiAgICAgIGNhc2UgJ0FjY2Vzc29yJzpcbiAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkLnNldFNpZ25hdHVyZVswXS5wYXJhbWV0ZXJzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZC5nZXRTaWduYXR1cmVbMF0pO1xuXG4gICAgICBjYXNlICdNZXRob2QnOlxuICAgICAgICBkZWZpbml0aW9uID0ge1xuICAgICAgICAgIGNhbGxTaWduYXR1cmU6IHRoaXMuZ2V0Q2FsbFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5jb21tZW50KVxuICAgICAgICAgICksXG4gICAgICAgICAgbmFtZTogY2hpbGQuc2lnbmF0dXJlc1swXS5uYW1lLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBsZXQgbmFtZTogc3RyaW5nID1cbiAgICAgICAgICBjaGlsZC50eXBlLm5hbWUgfHwgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8ubmFtZSB8fCBjaGlsZC50eXBlLnZhbHVlO1xuXG4gICAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgdHlwZTogY2hpbGQudHlwZS50eXBlLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gbmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFVuaW9uP1xuICAgICAgICBpZiAoY2hpbGQudHlwZS50eXBlcykge1xuICAgICAgICAgIGRlZmluaXRpb24udW5pb25UeXBlcyA9IGNoaWxkLnR5cGUudHlwZXMubWFwKCh0KSA9PlxuICAgICAgICAgICAgdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7IHR5cGU6IHQgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udmVydCByZWZsZWN0aW9uIHR5cGVzLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQudHlwZS50eXBlID09PSAncmVmbGVjdGlvbicgfHxcbiAgICAgICAgICBjaGlsZC50eXBlLmVsZW1lbnRUeXBlPy50eXBlID09PSAncmVmbGVjdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPVxuICAgICAgICAgICAgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8udHlwZSA9PT0gJ3JlZmxlY3Rpb24nXG4gICAgICAgICAgICAgID8gY2hpbGQudHlwZS5lbGVtZW50VHlwZS5kZWNsYXJhdGlvblxuICAgICAgICAgICAgICA6IGNoaWxkLnR5cGUuZGVjbGFyYXRpb247XG4gICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChkZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnNpZ25hdHVyZXMpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5jYWxsU2lnbmF0dXJlID0gdGhpcy5nZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudClcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgY29uc3QgaW5kZXhTaWduYXR1cmUgPSBkZWNsYXJhdGlvbi5pbmRleFNpZ25hdHVyZTtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pbmRleFNpZ25hdHVyZSA9XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRJbmRleFNpZ25hdHVyZURlZmluaXRpb24oaW5kZXhTaWduYXR1cmUpO1xuICAgICAgICAgICAgfSAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqLyBlbHNlIGlmIChkZWNsYXJhdGlvbi5jaGlsZHJlbikge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uLnR5cGVMaXRlcmFsID0ge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMuZ2V0SW50ZXJmYWNlUHJvcGVydGllcyh7XG4gICAgICAgICAgICAgICAgICBjaGlsZHJlbjogZGVjbGFyYXRpb24uY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkLnR5cGUudHlwZSA9PT0gJ3R5cGVPcGVyYXRvcicpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBgJHtjaGlsZC50eXBlLm9wZXJhdG9yfSAke2NoaWxkLnR5cGUudGFyZ2V0Lm5hbWV9YDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC50eXBlLnR5cGVBcmd1bWVudHMpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLnR5cGVBcmd1bWVudHMgPSB0aGlzLmdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgICAgICAgICAgY2hpbGQudHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtZXRlckRlZmluaXRpb25zKFxuICAgIGNhbGxTaWduYXR1cmU6IFR5cGVEb2NTaWduYXR1cmUsXG4gICAgcGFyZW50VGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghY2FsbFNpZ25hdHVyZS5wYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyczogU2t5RG9jc1BhcmFtZXRlckRlZmluaXRpb25bXSA9XG4gICAgICBjYWxsU2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldFBhcmFtZXRlckNvbW1lbnRUYWdzKHAsIHBhcmVudFRhZ3MpO1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShwLCB0YWdzKTtcbiAgICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHRoaXMuZ2V0VHlwZUFyZ3VtZW50RGVmaW5pdGlvbnMocC50eXBlKTtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXI6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uID0ge1xuICAgICAgICAgIGlzT3B0aW9uYWw6ICEhKGRlZmF1bHRWYWx1ZSB8fCAhIXAuZmxhZ3M/LmlzT3B0aW9uYWwpLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHApLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcmFtZXRlci5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFncy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHBhcmFtZXRlci5kZXNjcmlwdGlvbiA9IHRhZ3MuZGVzY3JpcHRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBwYXJhbWV0ZXIudHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgIHR5cGVDb25maWc6IFR5cGVEb2NUeXBlXG4gICk6IFNreURvY3NUeXBlRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIXR5cGVDb25maWcgfHwgIXR5cGVDb25maWcudHlwZUFyZ3VtZW50cykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlQ29uZmlnLnR5cGVBcmd1bWVudHMubWFwKCh0eXBlQXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHsgdHlwZTogdHlwZUFyZ3VtZW50IH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICBjYWxsU2lnbmF0dXJlOiBUeXBlRG9jU2lnbmF0dXJlLFxuICAgIHRhZ3M6IFNreURvY3NDb21tZW50VGFnc1xuICApOiBTa3lEb2NzQ2FsbFNpZ25hdHVyZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiA9IHtcbiAgICAgIHJldHVyblR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oY2FsbFNpZ25hdHVyZSksXG4gICAgfTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSB0aGlzLmdldFBhcmFtZXRlckRlZmluaXRpb25zKGNhbGxTaWduYXR1cmUsIHRhZ3MpO1xuICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKFxuICAgIHNpZ25hdHVyZTogVHlwZURvY1NpZ25hdHVyZVxuICApOiBTa3lEb2NzSW5kZXhTaWduYXR1cmVEZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB7XG4gICAgICAgIG5hbWU6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzWzBdLm5hbWUsXG4gICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlLnBhcmFtZXRlcnNbMF0pLFxuICAgICAgfSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgdHlwZVBhcmFtZXRlcnM6IFR5cGVEb2NUeXBlUGFyYW1ldGVyW11cbiAgKTogU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghdHlwZVBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZVBhcmFtZXRlcnMubWFwKCh0eXBlUGFyYW0pID0+IHtcbiAgICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogdHlwZVBhcmFtLm5hbWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAodHlwZVBhcmFtLnR5cGUpIHtcbiAgICAgICAgZGVmaW5pdGlvbi50eXBlID0gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7XG4gICAgICAgICAgdHlwZTogdHlwZVBhcmFtLnR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tbWVudFRhZ3MoY29tbWVudDogVHlwZURvY0NvbW1lbnQpOiBTa3lEb2NzQ29tbWVudFRhZ3Mge1xuICAgIGxldCBjb2RlRXhhbXBsZTogc3RyaW5nO1xuICAgIGxldCBjb2RlRXhhbXBsZUxhbmd1YWdlOiBzdHJpbmcgPSAnbWFya3VwJztcbiAgICBsZXQgZGVwcmVjYXRpb25XYXJuaW5nOiBzdHJpbmc7XG4gICAgbGV0IGRlZmF1bHRWYWx1ZTogc3RyaW5nO1xuICAgIGxldCBkZXNjcmlwdGlvbjogc3RyaW5nID0gJyc7XG5cbiAgICBsZXQgcGFyYW1ldGVyczoge1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICB9W107XG5cbiAgICBjb25zdCBleHRyYXM6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICB9ID0ge307XG5cbiAgICBpZiAoY29tbWVudCkge1xuICAgICAgaWYgKGNvbW1lbnQudGFncykge1xuICAgICAgICBjb21tZW50LnRhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0YWcudGFnKSB7XG4gICAgICAgICAgICBjYXNlICdkZXByZWNhdGVkJzpcbiAgICAgICAgICAgICAgZGVwcmVjYXRpb25XYXJuaW5nID0gdGFnLnRleHQudHJpbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnZGVmYXVsdCc6XG4gICAgICAgICAgICBjYXNlICdkZWZhdWx0VmFsdWUnOlxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0YWcudGV4dC50cmltKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdleGFtcGxlJzpcbiAgICAgICAgICAgICAgY29kZUV4YW1wbGUgPSB0YWcudGV4dC50cmltKCkuc3BsaXQoJ2BgYCcpWzFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSBjb2RlRXhhbXBsZS5zcGxpdCgnXFxuJylbMF07XG4gICAgICAgICAgICAgIGlmIChsYW5ndWFnZSA9PT0gJ21hcmt1cCcgfHwgbGFuZ3VhZ2UgPT09ICd0eXBlc2NyaXB0Jykge1xuICAgICAgICAgICAgICAgIGNvZGVFeGFtcGxlID0gY29kZUV4YW1wbGUuc2xpY2UobGFuZ3VhZ2UubGVuZ3RoKS50cmltKCk7XG4gICAgICAgICAgICAgICAgY29kZUV4YW1wbGVMYW5ndWFnZSA9IGxhbmd1YWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdwYXJhbSc6XG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IFtdO1xuICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IHRhZy5wYXJhbSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFnLnRleHQudHJpbSgpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGV4dHJhc1t0YWcudGFnXSA9IHRhZy50ZXh0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBkZXNjcmlwdGlvbiA9IChjb21tZW50LnNob3J0VGV4dCB8fCBjb21tZW50LnRleHQgfHwgJycpLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY29kZUV4YW1wbGUsXG4gICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlLFxuICAgICAgZGVmYXVsdFZhbHVlLFxuICAgICAgZGVwcmVjYXRpb25XYXJuaW5nLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRyYXMsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUGFyYW1ldGVyIGRlc2NyaXB0aW9ucyBhcmUgZGVyaXZlZCBmcm9tIHRoZSBwYXJlbnQncyAoZnVuY3Rpb24vbWV0aG9kKSBjb21tZW50LlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRQYXJhbWV0ZXJDb21tZW50VGFncyhcbiAgICBwYXJhbWV0ZXI6IFR5cGVEb2NQYXJhbWV0ZXIsXG4gICAgcGFyZW50VGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NDb21tZW50VGFncyB7XG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MocGFyYW1ldGVyLmNvbW1lbnQpO1xuICAgIGNvbnN0IHBhcmFtVGFncyA9IHBhcmVudFRhZ3MucGFyYW1ldGVycztcbiAgICBjb25zdCB0YWdQYXJhbSA9IHBhcmFtVGFnc1xuICAgICAgPyBwYXJhbVRhZ3MuZmluZCgocGFyYW0pID0+IHBhcmFtLm5hbWUgPT09IHBhcmFtZXRlci5uYW1lKVxuICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIXRhZ1BhcmFtIHx8ICF0YWdQYXJhbS5kZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIHRhZ3M7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRhZ3MsXG4gICAgICAuLi57XG4gICAgICAgIGRlc2NyaXB0aW9uOiB0YWdQYXJhbS5kZXNjcmlwdGlvbixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBsaWVzIGNvbW1lbnQgdGFnIChlLmcuIGBAcGFyYW1gKSB2YWx1ZXMgdG8gdGhlIHByb3ZpZGVkIGRlZmluaXRpb24sIGlmIHRoZSB2YWx1ZSBpcyBkZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUNvbW1lbnRUYWdWYWx1ZXMoXG4gICAgZGVmaW5pdGlvbjoge1xuICAgICAgY29kZUV4YW1wbGU/OiBzdHJpbmc7XG4gICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlPzogc3RyaW5nO1xuICAgICAgZGVwcmVjYXRpb25XYXJuaW5nPzogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgfSxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogdm9pZCB7XG4gICAgaWYgKHRhZ3MuY29kZUV4YW1wbGUpIHtcbiAgICAgIGRlZmluaXRpb24uY29kZUV4YW1wbGUgPSB0YWdzLmNvZGVFeGFtcGxlO1xuICAgICAgZGVmaW5pdGlvbi5jb2RlRXhhbXBsZUxhbmd1YWdlID0gdGFncy5jb2RlRXhhbXBsZUxhbmd1YWdlO1xuICAgIH1cblxuICAgIGlmICh0YWdzLmRlcHJlY2F0aW9uV2FybmluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBkZWZpbml0aW9uLmRlcHJlY2F0aW9uV2FybmluZyA9IHRhZ3MuZGVwcmVjYXRpb25XYXJuaW5nO1xuICAgIH1cblxuICAgIGlmICh0YWdzLmRlc2NyaXB0aW9uKSB7XG4gICAgICBkZWZpbml0aW9uLmRlc2NyaXB0aW9uID0gdGFncy5kZXNjcmlwdGlvbjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldERlY29yYXRvcihcbiAgICBjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGRcbiAgKTogU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBjaGlsZC5kZWNvcmF0b3JzICYmIGNoaWxkLmRlY29yYXRvcnNbMF0gJiYgY2hpbGQuZGVjb3JhdG9yc1swXS5uYW1lO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4geyBuYW1lIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHk6IFR5cGVEb2NFbnRyeUNoaWxkKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWNvcmF0b3JzID0gcHJvcGVydHkuZGVjb3JhdG9ycyAmJiBwcm9wZXJ0eS5kZWNvcmF0b3JzWzBdO1xuICAgIC8vIFVzZSB0aGUgSW5wdXQncyBib3VuZCBwcm9wZXJ0eSBuYW1lLCBpZiBmb3VuZC5cbiAgICAvLyBlLmcuIEBJbnB1dCgnZm9vYmFyJylcbiAgICByZXR1cm4gZGVjb3JhdG9ycz8uYXJndW1lbnRzPy5iaW5kaW5nUHJvcGVydHlOYW1lXG4gICAgICA/IGRlY29yYXRvcnMuYXJndW1lbnRzLmJpbmRpbmdQcm9wZXJ0eU5hbWUucmVwbGFjZSgvKFxcJ3xcXFwiKS9nLCAnJylcbiAgICAgIDogcHJvcGVydHkubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKFxuICAgIGNoaWxkOiBUeXBlRG9jRW50cnlDaGlsZCxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGFncy5kZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB0YWdzLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG5cbiAgICAvLyBUeXBlRG9jIHZlcnNpb24gMC4yMC54IHN0b3BwZWQgYXV0by1nZW5lcmF0aW5nIGluaXRpYWxpemVycyBmb3IgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAvLyAoYW5kIHJlcGxhY2VkIHRoZW0gd2l0aCBcIi4uLlwiKSBkdWUgdG8gdGhlIGNvbXBsaWNhdGVkIGxvZ2ljIGl0IHJlcXVpcmVkLlxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL1R5cGVTdHJvbmcvdHlwZWRvYy9pc3N1ZXMvMTU1MlxuICAgIGlmIChjaGlsZC5kZWZhdWx0VmFsdWUgPT09ICcuLi4nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoaWxkLmRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QW5jaG9ySWQoZW50cnk6IFR5cGVEb2NFbnRyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVudHJ5LmFuY2hvcklkIHx8XG4gICAgICB0aGlzLnR5cGVEZWZpbml0aW9uc1Byb3ZpZGVyPy5hbmNob3JJZHNbZW50cnkubmFtZV0gfHxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxufVxuIl19
|