@worktile/planet 16.0.0 → 17.0.0-next.1

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.
Files changed (45) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +62 -37
  3. package/application/ng-planet-application-ref.d.ts +48 -0
  4. package/application/ng-planet-application-ref.d.ts.map +1 -0
  5. package/application/planet-application-ref.d.ts +3 -27
  6. package/application/planet-application-ref.d.ts.map +1 -1
  7. package/assets-loader.d.ts +2 -3
  8. package/assets-loader.d.ts.map +1 -1
  9. package/component/planet-component-loader.d.ts.map +1 -1
  10. package/esm2022/application/ng-planet-application-ref.mjs +108 -0
  11. package/esm2022/application/planet-application-loader.mjs +5 -5
  12. package/esm2022/application/planet-application-ref.mjs +2 -94
  13. package/esm2022/application/planet-application.service.mjs +5 -5
  14. package/esm2022/assets-loader.mjs +46 -12
  15. package/esm2022/component/planet-component-loader.mjs +19 -18
  16. package/esm2022/component/planet-component-outlet.mjs +6 -6
  17. package/esm2022/debug.mjs +1 -1
  18. package/esm2022/empty/empty.component.mjs +3 -3
  19. package/esm2022/global-event-dispatcher.mjs +5 -5
  20. package/esm2022/global-planet.mjs +13 -3
  21. package/esm2022/helpers.mjs +83 -17
  22. package/esm2022/module.mjs +4 -4
  23. package/esm2022/planet.class.mjs +1 -1
  24. package/esm2022/planet.mjs +6 -6
  25. package/esm2022/public-api.mjs +1 -2
  26. package/esm2022/router/route-redirect.mjs +5 -5
  27. package/esm2022/sandbox/index.mjs +1 -1
  28. package/esm2022/sandbox/proxy/patches/eventListener.mjs +2 -2
  29. package/esm2022/sandbox/proxy/proxies/common.mjs +1 -1
  30. package/esm2022/sandbox/proxy/proxies/document.mjs +1 -1
  31. package/esm2022/sandbox/proxy/proxies/window.mjs +1 -1
  32. package/esm2022/sandbox/proxy/proxy-sandbox.mjs +1 -1
  33. package/esm2022/sandbox/snapshot/snapshot-sandbox.mjs +1 -1
  34. package/fesm2022/worktile-planet.mjs +221 -96
  35. package/fesm2022/worktile-planet.mjs.map +1 -1
  36. package/global-planet.d.ts +4 -2
  37. package/global-planet.d.ts.map +1 -1
  38. package/helpers.d.ts +5 -2
  39. package/helpers.d.ts.map +1 -1
  40. package/package.json +3 -3
  41. package/planet.class.d.ts +84 -4
  42. package/planet.class.d.ts.map +1 -1
  43. package/sandbox/proxy/patches/eventListener.d.ts.map +1 -1
  44. package/sandbox/proxy/proxy-sandbox.d.ts.map +1 -1
  45. package/sandbox/snapshot/snapshot-sandbox.d.ts.map +1 -1
@@ -442,13 +442,13 @@ export class PlanetApplicationLoader {
442
442
  preload(app, immediate) {
443
443
  return this.preloadInternal(app, immediate);
444
444
  }
445
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PlanetApplicationLoader, deps: [{ token: i1.AssetsLoader }, { token: i2.PlanetApplicationService }, { token: i0.NgZone }, { token: i3.Router }, { token: i0.Injector }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
446
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PlanetApplicationLoader, providedIn: 'root' }); }
445
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PlanetApplicationLoader, deps: [{ token: i1.AssetsLoader }, { token: i2.PlanetApplicationService }, { token: i0.NgZone }, { token: i3.Router }, { token: i0.Injector }, { token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); }
446
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PlanetApplicationLoader, providedIn: 'root' }); }
447
447
  }
448
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PlanetApplicationLoader, decorators: [{
448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PlanetApplicationLoader, decorators: [{
449
449
  type: Injectable,
450
450
  args: [{
451
451
  providedIn: 'root'
452
452
  }]
453
- }], ctorParameters: function () { return [{ type: i1.AssetsLoader }, { type: i2.PlanetApplicationService }, { type: i0.NgZone }, { type: i3.Router }, { type: i0.Injector }, { type: i0.ApplicationRef }]; } });
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vcGxhbmV0LWFwcGxpY2F0aW9uLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxFQUFFLEVBQWMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBd0MsV0FBVyxFQUFpQixNQUFNLGlCQUFpQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7O0FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFdBQVcs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SUFBSSxnQkFBZ0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7YUFDMUc7WUFDRCxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNyQjtJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksT0FBTyxDQUFDLEdBQXNCLEVBQUUsU0FBbUI7UUFDdEQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRCxDQUFDOzhHQTlmUSx1QkFBdUI7a0hBQXZCLHVCQUF1QixjQUZwQixNQUFNOzsyRkFFVCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lLCBBcHBsaWNhdGlvblJlZiwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG9mLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBmb3JrSm9pbiwgZnJvbSwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXNzZXRzTG9hZGVyIH0gZnJvbSAnLi4vYXNzZXRzLWxvYWRlcic7XG5pbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvbiwgUGxhbmV0Um91dGVyRXZlbnQsIFN3aXRjaE1vZGVzLCBQbGFuZXRPcHRpb25zIH0gZnJvbSAnLi4vcGxhbmV0LmNsYXNzJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgc2hhcmUsIG1hcCwgdGFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZSwgZmlsdGVyLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZ2V0SFRNTEVsZW1lbnQsIGNvZXJjZUFycmF5LCBjcmVhdGVFbGVtZW50QnlUZW1wbGF0ZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgUGxhbmV0QXBwbGljYXRpb25SZWYgfSBmcm9tICcuL3BsYW5ldC1hcHBsaWNhdGlvbi1yZWYnO1xuaW1wb3J0IHsgUGxhbmV0UG9ydGFsQXBwbGljYXRpb24gfSBmcm9tICcuL3BvcnRhbC1hcHBsaWNhdGlvbic7XG5pbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuL3BsYW5ldC1hcHBsaWNhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEdsb2JhbEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gJy4uL2dsb2JhbC1ldmVudC1kaXNwYXRjaGVyJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBnbG9iYWxQbGFuZXQsIGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmLCBnZXRBcHBsaWNhdGlvbkxvYWRlciB9IGZyb20gJy4uL2dsb2JhbC1wbGFuZXQnO1xuaW1wb3J0IHsgY3JlYXRlRGVidWcgfSBmcm9tICcuLi9kZWJ1Zyc7XG5jb25zdCBkZWJ1ZyA9IGNyZWF0ZURlYnVnKCdhcHAtbG9hZGVyJyk7XG5cbmV4cG9ydCBlbnVtIEFwcGxpY2F0aW9uU3RhdHVzIHtcbiAgICBhc3NldHNMb2FkaW5nID0gMSxcbiAgICBhc3NldHNMb2FkZWQgPSAyLFxuICAgIGJvb3RzdHJhcHBpbmcgPSAzLFxuICAgIGJvb3RzdHJhcHBlZCA9IDQsXG4gICAgYWN0aXZlID0gNSxcbiAgICBsb2FkRXJyb3IgPSAxMFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFwcHNMb2FkaW5nU3RhcnRFdmVudCB7XG4gICAgc2hvdWxkTG9hZEFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW107XG4gICAgc2hvdWxkVW5sb2FkQXBwczogUGxhbmV0QXBwbGljYXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBTdGF0dXNDaGFuZ2VFdmVudCB7XG4gICAgYXBwOiBQbGFuZXRBcHBsaWNhdGlvbjtcbiAgICBzdGF0dXM6IEFwcGxpY2F0aW9uU3RhdHVzO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYW5ldEFwcGxpY2F0aW9uTG9hZGVyIHtcbiAgICBwcml2YXRlIGZpcnN0TG9hZCA9IHRydWU7XG5cbiAgICBwcml2YXRlIHN0YXJ0Um91dGVDaGFuZ2VFdmVudCE6IFBsYW5ldFJvdXRlckV2ZW50O1xuXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBQbGFuZXRPcHRpb25zO1xuXG4gICAgcHJpdmF0ZSBpblByb2dyZXNzQXBwQXNzZXRzTG9hZHMgPSBuZXcgTWFwPHN0cmluZywgT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvbj4+KCk7XG5cbiAgICBwcml2YXRlIGFwcHNTdGF0dXMgPSBuZXcgTWFwPFBsYW5ldEFwcGxpY2F0aW9uLCBBcHBsaWNhdGlvblN0YXR1cz4oKTtcblxuICAgIHByaXZhdGUgcG9ydGFsQXBwID0gbmV3IFBsYW5ldFBvcnRhbEFwcGxpY2F0aW9uKCk7XG5cbiAgICBwcml2YXRlIHJvdXRlQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PFBsYW5ldFJvdXRlckV2ZW50PigpO1xuXG4gICAgcHJpdmF0ZSBhcHBTdGF0dXNDaGFuZ2UkID0gbmV3IFN1YmplY3Q8QXBwU3RhdHVzQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICBwcml2YXRlIGFwcHNMb2FkaW5nU3RhcnQkID0gbmV3IFN1YmplY3Q8QXBwc0xvYWRpbmdTdGFydEV2ZW50PigpO1xuXG4gICAgcHVibGljIGdldCBhcHBTdGF0dXNDaGFuZ2UoKTogT2JzZXJ2YWJsZTxBcHBTdGF0dXNDaGFuZ2VFdmVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBTdGF0dXNDaGFuZ2UkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYXBwc0xvYWRpbmdTdGFydCgpOiBPYnNlcnZhYmxlPEFwcHNMb2FkaW5nU3RhcnRFdmVudD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBzTG9hZGluZ1N0YXJ0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZGluZ0RvbmUgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGFzc2V0c0xvYWRlcjogQXNzZXRzTG9hZGVyLFxuICAgICAgICBwcml2YXRlIHBsYW5ldEFwcGxpY2F0aW9uU2VydmljZTogUGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBhcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWZcbiAgICApIHtcbiAgICAgICAgaWYgKGdldEFwcGxpY2F0aW9uTG9hZGVyKCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnUGxhbmV0QXBwbGljYXRpb25Mb2FkZXIgaGFzIGJlZW4gaW5qZWN0ZWQgaW4gdGhlIHBvcnRhbCwgcmVwZWF0ZWQgaW5qZWN0aW9uIGlzIG5vdCBhbGxvd2VkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHN3aXRjaE1vZGU6IFN3aXRjaE1vZGVzLmRlZmF1bHQsXG4gICAgICAgICAgICBlcnJvckhhbmRsZXI6IChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wb3J0YWxBcHAubmdab25lID0gbmdab25lO1xuICAgICAgICB0aGlzLnBvcnRhbEFwcC5hcHBsaWNhdGlvblJlZiA9IGFwcGxpY2F0aW9uUmVmO1xuICAgICAgICB0aGlzLnBvcnRhbEFwcC5yb3V0ZXIgPSByb3V0ZXI7XG4gICAgICAgIHRoaXMucG9ydGFsQXBwLmluamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMucG9ydGFsQXBwLmdsb2JhbEV2ZW50RGlzcGF0Y2hlciA9IGluamVjdG9yLmdldChHbG9iYWxFdmVudERpc3BhdGNoZXIpO1xuICAgICAgICBnbG9iYWxQbGFuZXQucG9ydGFsQXBwbGljYXRpb24gPSB0aGlzLnBvcnRhbEFwcDtcbiAgICAgICAgdGhpcy5zZXR1cFJvdXRlQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRBcHBTdGF0dXMoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbiwgc3RhdHVzOiBBcHBsaWNhdGlvblN0YXR1cykge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZnJvbVN0YXR1cyA9IHRoaXMuYXBwc1N0YXR1cy5nZXQoYXBwKTtcbiAgICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgICAgIGBhcHAoJHthcHAubmFtZX0pIHN0YXR1cyBjaGFuZ2U6ICR7ZnJvbVN0YXR1cyA/IEFwcGxpY2F0aW9uU3RhdHVzW2Zyb21TdGF0dXNdIDogJ2VtcHR5J30gPT4gJHtcbiAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25TdGF0dXNbc3RhdHVzXVxuICAgICAgICAgICAgICAgIH1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5hcHBzU3RhdHVzLnNldChhcHAsIHN0YXR1cyk7XG4gICAgICAgICAgICB0aGlzLmFwcFN0YXR1c0NoYW5nZSQubmV4dCh7XG4gICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiBzdGF0dXNcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFwcFN0YXR1c0NoYW5nZSQoXG4gICAgICAgIGFwcDogUGxhbmV0QXBwbGljYXRpb24sXG4gICAgICAgIHN0YXR1cyA9IEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBlZFxuICAgICk6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdHVzQ2hhbmdlLnBpcGUoXG4gICAgICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBldmVudC5hcHAgPT09IGFwcCAmJiBldmVudC5zdGF0dXMgPT09IHN0YXR1cztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN3aXRjaE1vZGVJc0NvZXhpc3QoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbikge1xuICAgICAgICBpZiAoYXBwICYmIGFwcC5zd2l0Y2hNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBwLnN3aXRjaE1vZGUgPT09IFN3aXRjaE1vZGVzLmNvZXhpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN3aXRjaE1vZGUgPT09IFN3aXRjaE1vZGVzLmNvZXhpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGVycm9ySGFuZGxlcihlcnJvcjogRXJyb3IpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5lcnJvckhhbmRsZXIoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExvYWRpbmdEb25lKCkge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2FkaW5nRG9uZSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QXBwTmFtZXMoYXBwczogUGxhbmV0QXBwbGljYXRpb25bXSk6IHN0cmluZyB8IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIGFwcHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICA/IGBbXWBcbiAgICAgICAgICAgIDogYXBwcy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5uYW1lO1xuICAgICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldHVwUm91dGVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMucm91dGVDaGFuZ2UkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHggJiYgeC51cmwpID09PSAoeSAmJiB5LnVybCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgLy8gVXNpbmcgc3dpdGNoTWFwIHNvIHdlIGNhbmNlbCBleGVjdXRpbmcgbG9hZGluZyB3aGVuIGEgbmV3IG9uZSBjb21lcyBpblxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJldHVybiBuZXcgb2JzZXJ2YWJsZSB1c2Ugb2YgYW5kIGNhdGNoRXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIC8vIGluIG9yZGVyIHRvIHByZXZlbnQgcm91dGVDaGFuZ2UkIGNvbXBsZXRlZCB3aGljaCBuZXZlciB0cmlnZ2VyIG5ldyByb3V0ZSBjaGFuZ2VcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGV2ZW50KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdW5sb2FkIGFwcHMgYW5kIHJldHVybiBzaG91bGQgbG9hZCBhcHBzXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGByb3V0ZSBjaGFuZ2UsIHVybCBpczogJHtldmVudC51cmx9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFydFJvdXRlQ2hhbmdlRXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRMb2FkQXBwcyA9IHRoaXMucGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcHNCeU1hdGNoZWRVcmwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zyhgc2hvdWxkIGxvYWQgYXBwczogJHt0aGlzLmdldEFwcE5hbWVzKHNob3VsZExvYWRBcHBzKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRVbmxvYWRBcHBzID0gdGhpcy5nZXRVbmxvYWRBcHBzKHNob3VsZExvYWRBcHBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcHNMb2FkaW5nU3RhcnQkLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRMb2FkQXBwcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkVW5sb2FkQXBwc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5sb2FkQXBwcyhzaG91bGRVbmxvYWRBcHBzLCBldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYHVubG9hZCBhcHBzOiAke3RoaXMuZ2V0QXBwTmFtZXMoc2hvdWxkVW5sb2FkQXBwcyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNob3VsZExvYWRBcHBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBMb2FkIGFwcCBhc3NldHMgKHN0YXRpYyByZXNvdXJjZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoc2hvdWxkTG9hZEFwcHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNBcHBzTmVlZExvYWRpbmdBc3NldHMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsb2FkQXBwcyQgPSBzaG91bGRMb2FkQXBwcy5tYXAoYXBwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwU3RhdHVzID0gdGhpcy5hcHBzU3RhdHVzLmdldChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhYXBwU3RhdHVzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmFzc2V0c0xvYWRpbmcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFN0YXR1cyA9PT0gQXBwbGljYXRpb25TdGF0dXMubG9hZEVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uU3RhdHVzW2FwcFN0YXR1cyBhcyBBcHBsaWNhdGlvblN0YXR1c11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBzdGFydCBsb2FkIGFzc2V0c2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNBcHBzTmVlZExvYWRpbmdBc3NldHMgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydExvYWRBcHBBc3NldHMoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzQXBwc05lZWRMb2FkaW5nQXNzZXRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0RvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRBcHBzJC5sZW5ndGggPiAwID8gZm9ya0pvaW4obG9hZEFwcHMkKSA6IG9mKFtdIGFzIFBsYW5ldEFwcGxpY2F0aW9uW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBCb290c3RyYXAgb3Igc2hvdyBhcHBzXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXAoYXBwcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwcyQ6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb24+W10gPSBhcHBzLm1hcChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoYXBwKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwU3RhdHVzID0gdGhpcy5hcHBzU3RhdHVzLmdldChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzIGJvb3RzdHJhcHBlZCwgc2hvdyBhcHAgYW5kIGFjdGl2ZWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXBwKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKGFwcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwUmVmPy5uYXZpZ2F0ZUJ5VXJsKGV2ZW50LnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nRG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcFN0YXR1cyA9PT0gQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFtyb3V0ZUNoYW5nZV0gYXBwKCR7YXBwLm5hbWV9KSBzdGF0dXMgaXMgYXNzZXRzTG9hZGVkLCBzdGFydCBib290c3RyYXBwaW5nYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ib290c3RyYXBBcHAoYXBwKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgYXBwKCR7YXBwLm5hbWV9KSBib290c3RyYXBwZWQgc3VjY2VzcywgYWN0aXZlIGl0YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFwcFN0YXR1cyA9PT0gQXBwbGljYXRpb25TdGF0dXMuYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgaXMgYWN0aXZlLCBkbyBub3RoaW5nc2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHN1YiBhcHAgdXNlIG9sZCB2ZXJzaW9uIHdoaWNoIGhhcyBub3QgZ2V0Q3VycmVudFJvdXRlclN0YXRlVXJsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSBhcHBSZWY/LmdldEN1cnJlbnRSb3V0ZXJTdGF0ZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhcHBSZWYuZ2V0Q3VycmVudFJvdXRlclN0YXRlVXJsKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VXJsICE9PSBldmVudC51cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJlZj8ubmF2aWdhdGVCeVVybChldmVudC51cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFtyb3V0ZUNoYW5nZV0gYXBwKCR7YXBwLm5hbWV9KSBzdGF0dXMgaXMgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblN0YXR1c1thcHBTdGF0dXMgYXMgQXBwbGljYXRpb25TdGF0dXNdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBTdGF0dXNDaGFuZ2UkKGFwcCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgYXBwKCR7YXBwLm5hbWV9KSBzdGF0dXMgaXMgYm9vdHN0cmFwcGVkIGJ5IHN1YnNjcmliZSBzdGF0dXMgY2hhbmdlLCBhY3RpdmUgaXRgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QXBwKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcHBzJC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBzdGFydCBsb2FkIGFuZCBhY3RpdmUgYXBwczogJHt0aGlzLmdldEFwcE5hbWVzKGFwcHMpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDliIfmjaLliLDlupTnlKjlkI7kvJrmnInpl6rng4HnjrDosaHvvIzmiYDku6Xkvb/nlKggc2V0VGltZW91dCDlkI7lkK/liqjlupTnlKhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhhbXBsZTogcmVkaXJlY3QgdG8gYXBwMSdzIGRhc2hib2FyZCBmcm9tIHBvcnRhbCdzIGFib3V0IHBhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgYXBwJ3Mgcm91dGUgaGFzIHJlZGlyZWN0LCBpdCBkb2Vzbid0IHdvcmssIGl0IG9rIGp1c3QgaW4gc2V0VGltZW91dCwgSSBkb24ndCBrbm93IHdoeS5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzo6IHJlbW92ZSBpdCwgaXQgaXMgb2sgaW4gdmVyc2lvbiBBbmd1bGFyIDkueFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOatpOWkhOWIpOaWreaYr+WboOS4uuWmguaenOmdmeaAgei1hOa6kOWKoOi9veWujOavlei/mOacquWQr+WKqOiiq+WPlua2iO+8jOi/mOaYr+S8muWQr+WKqOS5i+WJjeeahOW6lOeUqO+8jOiZveeEtuWPr+iDveaAp+avlOi+g+Wwj++8jOS9huaYr+aXoOazleaOkumZpOi/meenjeWPr+iDveaAp++8jOaJgOS7peWPquacieW9kyBFdmVudCDmmK/mnIDlkI7kuIDkuKrmiY3kvJrlkK/liqhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0Um91dGVDaGFuZ2VFdmVudCA9PT0gZXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBydW5PdXRzaWRlQW5ndWxhciBmb3IgZml4IGVycm9yOiBgRXhwZWN0ZWQgdG8gbm90IGJlIGluIEFuZ3VsYXIgWm9uZSwgYnV0IGl0IGlzIWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmtKb2luKGFwcHMkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRMb2FkaW5nRG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnN1cmVQcmVsb2FkQXBwcyhhcHBzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBubyBhcHBzIG5lZWQgdG8gYmUgbG9hZGVkLCBlbnN1cmUgcHJlbG9hZCBhcHBzYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlUHJlbG9hZEFwcHMoYXBwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVycm9yIGhhbmRsZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGBhcHBzIGxvYWRlciBlcnJvcjogJHtlcnJvcn1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ySGFuZGxlcihlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnRMb2FkQXBwQXNzZXRzKGFwcDogUGxhbmV0QXBwbGljYXRpb24pOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uPiB7XG4gICAgICAgIGlmICh0aGlzLmluUHJvZ3Jlc3NBcHBBc3NldHNMb2Fkcy5nZXQoYXBwLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pblByb2dyZXNzQXBwQXNzZXRzTG9hZHMuZ2V0KGFwcC5uYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRBcHAkID0gdGhpcy5hc3NldHNMb2FkZXIubG9hZEFwcEFzc2V0cyhhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pblByb2dyZXNzQXBwQXNzZXRzTG9hZHMuZGVsZXRlKGFwcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkZWQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzLmRlbGV0ZShhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMubG9hZEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc2hhcmUoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzLnNldChhcHAubmFtZSwgbG9hZEFwcCQpO1xuICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkaW5nKTtcbiAgICAgICAgICAgIHJldHVybiBsb2FkQXBwJDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGlkZUFwcChwbGFuZXRBcHA6IFBsYW5ldEFwcGxpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKHBsYW5ldEFwcC5uYW1lKTtcbiAgICAgICAgY29uc3QgYXBwUm9vdEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFwcFJlZj8uc2VsZWN0b3IgfHwgKHBsYW5ldEFwcC5zZWxlY3RvciBhcyBzdHJpbmcpKTtcbiAgICAgICAgaWYgKGFwcFJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICBhcHBSb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6bm9uZTsnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2hvd0FwcChwbGFuZXRBcHA6IFBsYW5ldEFwcGxpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKHBsYW5ldEFwcC5uYW1lKTtcbiAgICAgICAgY29uc3QgYXBwUm9vdEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGFwcFJlZj8uc2VsZWN0b3IgfHwgKHBsYW5ldEFwcC5zZWxlY3RvciBhcyBzdHJpbmcpKTtcbiAgICAgICAgaWYgKGFwcFJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICBhcHBSb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJycpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95QXBwKHBsYW5ldEFwcDogUGxhbmV0QXBwbGljYXRpb24pIHtcbiAgICAgICAgY29uc3QgYXBwUmVmID0gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYocGxhbmV0QXBwLm5hbWUpO1xuICAgICAgICBpZiAoYXBwUmVmKSB7XG4gICAgICAgICAgICBhcHBSZWYuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldEhUTUxFbGVtZW50KHBsYW5ldEFwcC5ob3N0UGFyZW50KTtcbiAgICAgICAgY29uc3QgYXBwUm9vdEVsZW1lbnQgPSBjb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoKGFwcFJlZiAmJiBhcHBSZWYuc2VsZWN0b3IpIHx8IChwbGFuZXRBcHAuc2VsZWN0b3IgYXMgc3RyaW5nKSk7XG4gICAgICAgIGlmIChhcHBSb290RWxlbWVudCkge1xuICAgICAgICAgICAgY29udGFpbmVyPy5yZW1vdmVDaGlsZChhcHBSb290RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJvb3RzdHJhcEFwcChcbiAgICAgICAgYXBwOiBQbGFuZXRBcHBsaWNhdGlvbixcbiAgICAgICAgZGVmYXVsdFN0YXR1czogJ2hpZGRlbicgfCAnZGlzcGxheScgPSAnZGlzcGxheSdcbiAgICApOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uUmVmPiB7XG4gICAgICAgIGRlYnVnKGBhcHAoJHthcHAubmFtZX0pIHN0YXJ0IGJvb3RzdHJhcHBpbmdgKTtcbiAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwaW5nKTtcbiAgICAgICAgY29uc3QgYXBwUmVmID0gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICBpZiAoYXBwUmVmICYmIGFwcFJlZi5ib290c3RyYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldEhUTUxFbGVtZW50KGFwcC5ob3N0UGFyZW50KTtcbiAgICAgICAgICAgIGxldCBhcHBSb290RWxlbWVudDogSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcihhcHBSZWYuc2VsZWN0b3IgfHwgYXBwLnNlbGVjdG9yISkhO1xuICAgICAgICAgICAgICAgIGlmICghYXBwUm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcFJlZi50ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50QnlUZW1wbGF0ZShhcHBSZWYudGVtcGxhdGUpITtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChhcHAuc2VsZWN0b3IhKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ2Rpc3BsYXk6bm9uZTsnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcC5ob3N0Q2xhc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY29lcmNlQXJyYXkoYXBwLmhvc3RDbGFzcykpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHAuc3R5bGVQcmVmaXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50LmNsYXNzTGlzdC5hZGQoLi4uY29lcmNlQXJyYXkoYXBwLnN0eWxlUHJlZml4KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGFwcFJvb3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXBwUmVmLmJvb3RzdHJhcCh0aGlzLnBvcnRhbEFwcCk7XG4gICAgICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBwcm9taXNlIGZvciBib290c3RyYXBcbiAgICAgICAgICAgIGlmICgocmVzdWx0IGFzIGFueSlbJ3RoZW4nXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZyb20ocmVzdWx0KSBhcyBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uUmVmPjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgYXBwKCR7YXBwLm5hbWV9KSBib290c3RyYXBwZWQgc3VjY2VzcyBmb3IgJHtkZWZhdWx0U3RhdHVzfWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBlZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWZhdWx0U3RhdHVzID09PSAnZGlzcGxheScgJiYgYXBwUm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnc3R5bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHBSZWY7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFske2FwcC5uYW1lfV0gbm90IGZvdW5kLCBtYWtlIHN1cmUgdGhhdCB0aGUgYXBwIGhhcyB0aGUgY29ycmVjdCBuYW1lIGRlZmluZWQgdXNlIGRlZmluZUFwcGxpY2F0aW9uKCR7YXBwLm5hbWV9KSBhbmQgcnVudGltZUNodW5rIGFuZCB2ZW5kb3JDaHVuayBhcmUgc2V0IHRvIHRydWUsIGRldGFpbHMgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93b3JrdGlsZS9uZ3gtcGxhbmV0I3Rocm93LWVycm9yLWNhbm5vdC1yZWFkLXByb3BlcnR5LWNhbGwtb2YtdW5kZWZpbmVkLWF0LV9fd2VicGFja19yZXF1aXJlX18tYm9vdHN0cmFwNzlgXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVbmxvYWRBcHBzKGFjdGl2ZUFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10pIHtcbiAgICAgICAgY29uc3QgdW5sb2FkQXBwczogUGxhbmV0QXBwbGljYXRpb25bXSA9IFtdO1xuICAgICAgICB0aGlzLmFwcHNTdGF0dXMuZm9yRWFjaCgodmFsdWUsIGFwcCkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBBcHBsaWNhdGlvblN0YXR1cy5hY3RpdmUgJiYgIWFjdGl2ZUFwcHMuZmluZChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gYXBwLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdW5sb2FkQXBwcy5wdXNoKGFwcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5sb2FkQXBwcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHVubG9hZEFwcHMoc2hvdWxkVW5sb2FkQXBwczogUGxhbmV0QXBwbGljYXRpb25bXSwgZXZlbnQ6IFBsYW5ldFJvdXRlckV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGhpZGVBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdID0gW107XG4gICAgICAgIGNvbnN0IGRlc3Ryb3lBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdID0gW107XG4gICAgICAgIHNob3VsZFVubG9hZEFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuc3dpdGNoTW9kZUlzQ29leGlzdChhcHApKSB7XG4gICAgICAgICAgICAgICAgZGVidWcoYGhpZGUgYXBwKCR7YXBwLm5hbWV9KSBmb3IgY29leGlzdCBtb2RlYCk7XG4gICAgICAgICAgICAgICAgaGlkZUFwcHMucHVzaChhcHApO1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZUFwcChhcHApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYm9vdHN0cmFwcGVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVzdHJveUFwcHMucHVzaChhcHApO1xuICAgICAgICAgICAgICAgIC8vIOmUgOavgeS5i+WJjeWFiOmakOiXj++8jOWQpuWImeS8muWHuueOsOmXqueDge+8jOWboOS4uiBkZXN0cm95IOaYr+W7tui/n+aJp+ihjOeahFxuICAgICAgICAgICAgICAgIC8vIOWmguaenOmUgOavgeS4jeW7tui/n+aJp+ihjO+8jOS8muWHuueOsOWIh+aNouWIsOS4u+W6lOeUqOeahOaXtuWAmeS8muacieinhuWbvuWNoemhv+eOsOixoVxuICAgICAgICAgICAgICAgIHRoaXMuaGlkZUFwcChhcHApO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGhpZGVBcHBzLmxlbmd0aCA+IDAgfHwgZGVzdHJveUFwcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgLy8g5LuO5YW25LuW5bqU55So5YiH5o2i5Yiw5Li75bqU55So55qE5pe25YCZ5Lya5pyJ6KeG5Zu+5Y2h6aG/546w6LGh77yM5omA5Lul5YWI562J5Li75bqU55So5riy5p+T5a6M5q+V5ZCO5YaN5Yqg6L295YW25LuW5bqU55SoXG4gICAgICAgICAgICAvLyDmraTlpITlsJ3or5Xkvb/nlKggdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKSDlupTnlKjkuYvpl7TnmoTliIfmjaLkvJrlh7rnjrDpl6rng4FcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhpZGVBcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwUmVmID0gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSZWYubmF2aWdhdGVCeVVybChldmVudC51cmwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgZGVzdHJveUFwcHMuZm9yRWFjaChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgZGVzdHJveSBhcHAoJHthcHAubmFtZX0pYCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVzdHJveUFwcChhcHApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHByZWxvYWRBcHBzKGFjdGl2ZUFwcHM/OiBQbGFuZXRBcHBsaWNhdGlvbltdKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9QcmVsb2FkQXBwcyA9IHRoaXMucGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcHNUb1ByZWxvYWQoXG4gICAgICAgICAgICAgICAgYWN0aXZlQXBwcyA/IGFjdGl2ZUFwcHMubWFwKGl0ZW0gPT4gaXRlbS5uYW1lKSA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGRlYnVnKGBzdGFydCBwcmVsb2FkIGFwcHM6ICR7dGhpcy5nZXRBcHBOYW1lcyh0b1ByZWxvYWRBcHBzKX1gKTtcbiAgICAgICAgICAgIGNvbnN0IGxvYWRBcHBzJCA9IHRvUHJlbG9hZEFwcHMubWFwKHByZWxvYWRBcHAgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByZWxvYWRJbnRlcm5hbChwcmVsb2FkQXBwKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3JrSm9pbihsb2FkQXBwcyQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuc3VyZVByZWxvYWRBcHBzKGFjdGl2ZUFwcHM/OiBQbGFuZXRBcHBsaWNhdGlvbltdKSB7XG4gICAgICAgIC8vIFN0YXJ0IHByZWxvYWQgYXBwc1xuICAgICAgICAvLyBTdGFydCBwcmVsb2FkIHdoZW4gZmlyc3QgdGltZSBhcHAgbG9hZGVkXG4gICAgICAgIGlmICh0aGlzLmZpcnN0TG9hZCkge1xuICAgICAgICAgICAgdGhpcy5wcmVsb2FkQXBwcyhhY3RpdmVBcHBzKTtcbiAgICAgICAgICAgIHRoaXMuZmlyc3RMb2FkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0T3B0aW9ucyhvcHRpb25zOiBQYXJ0aWFsPFBsYW5ldE9wdGlvbnM+KSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNldCByb3V0ZSBieSBjdXJyZW50IHJvdXRlclxuICAgICAqL1xuICAgIHB1YmxpYyByZXJvdXRlKGV2ZW50OiBQbGFuZXRSb3V0ZXJFdmVudCkge1xuICAgICAgICB0aGlzLnJvdXRlQ2hhbmdlJC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByZWxvYWRJbnRlcm5hbChhcHA6IFBsYW5ldEFwcGxpY2F0aW9uLCBpbW1lZGlhdGU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvblJlZiB8IG51bGw+IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5hcHBzU3RhdHVzLmdldChhcHApO1xuICAgICAgICBpZiAoIXN0YXR1cyB8fCBzdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmxvYWRFcnJvcikge1xuICAgICAgICAgICAgZGVidWcoYHByZWxvYWQgYXBwKCR7YXBwLm5hbWV9KSwgc3RhdHVzIGlzIGVtcHR5LCBzdGFydCB0byBsb2FkIGFzc2V0c2ApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRMb2FkQXBwQXNzZXRzKGFwcCkucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgcHJlbG9hZCBhcHAoJHthcHAubmFtZX0pLCBhc3NldHMgbG9hZGVkLCBzdGFydCBib290c3RyYXAgYXBwLCBpbW1lZGlhdGU6ICR7ISFpbW1lZGlhdGV9YCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbW1lZGlhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJvb3RzdHJhcEFwcChhcHAsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9vdHN0cmFwQXBwKGFwcCwgJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKGFwcC5uYW1lKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIFtBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkaW5nLCBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkZWQsIEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBpbmddLmluY2x1ZGVzKFxuICAgICAgICAgICAgICAgIHN0YXR1c1xuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRlYnVnKGBwcmVsb2FkIGFwcCgke2FwcC5uYW1lfSksIHN0YXR1cyBpcyAke0FwcGxpY2F0aW9uU3RhdHVzW3N0YXR1c119LCByZXR1cm4gdW50aWwgYm9vdHN0cmFwcGVkYCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRBcHBTdGF0dXNDaGFuZ2UkKGFwcCkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICBpZiAoIWFwcFJlZikge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHthcHAubmFtZX0ncyBzdGF0dXMgaXMgJHtBcHBsaWNhdGlvblN0YXR1c1tzdGF0dXNdfSwgcGxhbmV0QXBwbGljYXRpb25SZWYgaXMgbnVsbC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvZihhcHBSZWYpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlbG9hZCBwbGFuZXQgYXBwbGljYXRpb25cbiAgICAgKiBAcGFyYW0gYXBwIGFwcFxuICAgICAqIEBwYXJhbSBpbW1lZGlhdGUgYm9vdHN0cmFwIG9uIHN0YWJsZSBieSBkZWZhdWx0LCBzZXR0aW5nIGltbWVkaWF0ZSBpcyB0cnVlLCBpdCB3aWxsIGJvb3RzdHJhcCBpbW1lZGlhdGVcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJlbG9hZChhcHA6IFBsYW5ldEFwcGxpY2F0aW9uLCBpbW1lZGlhdGU/OiBib29sZWFuKTogT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvblJlZj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVsb2FkSW50ZXJuYWwoYXBwLCBpbW1lZGlhdGUpO1xuICAgIH1cbn1cbiJdfQ==
453
+ }], ctorParameters: () => [{ type: i1.AssetsLoader }, { type: i2.PlanetApplicationService }, { type: i0.NgZone }, { type: i3.Router }, { type: i0.Injector }, { type: i0.ApplicationRef }] });
454
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLWxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vcGxhbmV0LWFwcGxpY2F0aW9uLWxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxFQUFFLEVBQWMsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBd0MsV0FBVyxFQUFpQixNQUFNLGlCQUFpQixDQUFDO0FBQ25HLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RyxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7O0FBQ3ZDLE1BQU0sS0FBSyxHQUFHLFdBQVcs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QUM7WUFDQyxLQUFLLENBQUMsZUFBZSxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7WUFDckcsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUNyQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLEdBQUcsRUFBRTtnQkFDTCxPQUFPLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ04sQ0FBQzthQUFNLENBQUM7WUFDSixNQUFNLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakQsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxnQkFBZ0IsaUJBQWlCLENBQUMsTUFBTSxDQUFDLGlDQUFpQyxDQUFDLENBQUM7WUFDM0csQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RCLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBQyxHQUFzQixFQUFFLFNBQW1CO1FBQ3RELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs4R0E5ZlEsdUJBQXVCO2tIQUF2Qix1QkFBdUIsY0FGcEIsTUFBTTs7MkZBRVQsdUJBQXVCO2tCQUhuQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSwgQXBwbGljYXRpb25SZWYsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBvZiwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgZm9ya0pvaW4sIGZyb20sIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzc2V0c0xvYWRlciB9IGZyb20gJy4uL2Fzc2V0cy1sb2FkZXInO1xuaW1wb3J0IHsgUGxhbmV0QXBwbGljYXRpb24sIFBsYW5ldFJvdXRlckV2ZW50LCBTd2l0Y2hNb2RlcywgUGxhbmV0T3B0aW9ucyB9IGZyb20gJy4uL3BsYW5ldC5jbGFzcyc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAsIHNoYXJlLCBtYXAsIHRhcCwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2UsIGZpbHRlciwgY2F0Y2hFcnJvciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGdldEhUTUxFbGVtZW50LCBjb2VyY2VBcnJheSwgY3JlYXRlRWxlbWVudEJ5VGVtcGxhdGUgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB7IFBsYW5ldEFwcGxpY2F0aW9uUmVmIH0gZnJvbSAnLi9wbGFuZXQtYXBwbGljYXRpb24tcmVmJztcbmltcG9ydCB7IFBsYW5ldFBvcnRhbEFwcGxpY2F0aW9uIH0gZnJvbSAnLi9wb3J0YWwtYXBwbGljYXRpb24nO1xuaW1wb3J0IHsgUGxhbmV0QXBwbGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9wbGFuZXQtYXBwbGljYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBHbG9iYWxFdmVudERpc3BhdGNoZXIgfSBmcm9tICcuLi9nbG9iYWwtZXZlbnQtZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZ2xvYmFsUGxhbmV0LCBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZiwgZ2V0QXBwbGljYXRpb25Mb2FkZXIgfSBmcm9tICcuLi9nbG9iYWwtcGxhbmV0JztcbmltcG9ydCB7IGNyZWF0ZURlYnVnIH0gZnJvbSAnLi4vZGVidWcnO1xuY29uc3QgZGVidWcgPSBjcmVhdGVEZWJ1ZygnYXBwLWxvYWRlcicpO1xuXG5leHBvcnQgZW51bSBBcHBsaWNhdGlvblN0YXR1cyB7XG4gICAgYXNzZXRzTG9hZGluZyA9IDEsXG4gICAgYXNzZXRzTG9hZGVkID0gMixcbiAgICBib290c3RyYXBwaW5nID0gMyxcbiAgICBib290c3RyYXBwZWQgPSA0LFxuICAgIGFjdGl2ZSA9IDUsXG4gICAgbG9hZEVycm9yID0gMTBcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBcHBzTG9hZGluZ1N0YXJ0RXZlbnQge1xuICAgIHNob3VsZExvYWRBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdO1xuICAgIHNob3VsZFVubG9hZEFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXBwU3RhdHVzQ2hhbmdlRXZlbnQge1xuICAgIGFwcDogUGxhbmV0QXBwbGljYXRpb247XG4gICAgc3RhdHVzOiBBcHBsaWNhdGlvblN0YXR1cztcbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBQbGFuZXRBcHBsaWNhdGlvbkxvYWRlciB7XG4gICAgcHJpdmF0ZSBmaXJzdExvYWQgPSB0cnVlO1xuXG4gICAgcHJpdmF0ZSBzdGFydFJvdXRlQ2hhbmdlRXZlbnQhOiBQbGFuZXRSb3V0ZXJFdmVudDtcblxuICAgIHByaXZhdGUgb3B0aW9uczogUGxhbmV0T3B0aW9ucztcblxuICAgIHByaXZhdGUgaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzID0gbmV3IE1hcDxzdHJpbmcsIE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb24+PigpO1xuXG4gICAgcHJpdmF0ZSBhcHBzU3RhdHVzID0gbmV3IE1hcDxQbGFuZXRBcHBsaWNhdGlvbiwgQXBwbGljYXRpb25TdGF0dXM+KCk7XG5cbiAgICBwcml2YXRlIHBvcnRhbEFwcCA9IG5ldyBQbGFuZXRQb3J0YWxBcHBsaWNhdGlvbigpO1xuXG4gICAgcHJpdmF0ZSByb3V0ZUNoYW5nZSQgPSBuZXcgU3ViamVjdDxQbGFuZXRSb3V0ZXJFdmVudD4oKTtcblxuICAgIHByaXZhdGUgYXBwU3RhdHVzQ2hhbmdlJCA9IG5ldyBTdWJqZWN0PEFwcFN0YXR1c0NoYW5nZUV2ZW50PigpO1xuXG4gICAgcHJpdmF0ZSBhcHBzTG9hZGluZ1N0YXJ0JCA9IG5ldyBTdWJqZWN0PEFwcHNMb2FkaW5nU3RhcnRFdmVudD4oKTtcblxuICAgIHB1YmxpYyBnZXQgYXBwU3RhdHVzQ2hhbmdlKCk6IE9ic2VydmFibGU8QXBwU3RhdHVzQ2hhbmdlRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwU3RhdHVzQ2hhbmdlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFwcHNMb2FkaW5nU3RhcnQoKTogT2JzZXJ2YWJsZTxBcHBzTG9hZGluZ1N0YXJ0RXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwc0xvYWRpbmdTdGFydCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRpbmdEb25lID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBhc3NldHNMb2FkZXI6IEFzc2V0c0xvYWRlcixcbiAgICAgICAgcHJpdmF0ZSBwbGFuZXRBcHBsaWNhdGlvblNlcnZpY2U6IFBsYW5ldEFwcGxpY2F0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgYXBwbGljYXRpb25SZWY6IEFwcGxpY2F0aW9uUmVmXG4gICAgKSB7XG4gICAgICAgIGlmIChnZXRBcHBsaWNhdGlvbkxvYWRlcigpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ1BsYW5ldEFwcGxpY2F0aW9uTG9hZGVyIGhhcyBiZWVuIGluamVjdGVkIGluIHRoZSBwb3J0YWwsIHJlcGVhdGVkIGluamVjdGlvbiBpcyBub3QgYWxsb3dlZCdcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBzd2l0Y2hNb2RlOiBTd2l0Y2hNb2Rlcy5kZWZhdWx0LFxuICAgICAgICAgICAgZXJyb3JIYW5kbGVyOiAoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucG9ydGFsQXBwLm5nWm9uZSA9IG5nWm9uZTtcbiAgICAgICAgdGhpcy5wb3J0YWxBcHAuYXBwbGljYXRpb25SZWYgPSBhcHBsaWNhdGlvblJlZjtcbiAgICAgICAgdGhpcy5wb3J0YWxBcHAucm91dGVyID0gcm91dGVyO1xuICAgICAgICB0aGlzLnBvcnRhbEFwcC5pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLnBvcnRhbEFwcC5nbG9iYWxFdmVudERpc3BhdGNoZXIgPSBpbmplY3Rvci5nZXQoR2xvYmFsRXZlbnREaXNwYXRjaGVyKTtcbiAgICAgICAgZ2xvYmFsUGxhbmV0LnBvcnRhbEFwcGxpY2F0aW9uID0gdGhpcy5wb3J0YWxBcHA7XG4gICAgICAgIHRoaXMuc2V0dXBSb3V0ZUNoYW5nZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0QXBwU3RhdHVzKGFwcDogUGxhbmV0QXBwbGljYXRpb24sIHN0YXR1czogQXBwbGljYXRpb25TdGF0dXMpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21TdGF0dXMgPSB0aGlzLmFwcHNTdGF0dXMuZ2V0KGFwcCk7XG4gICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICBgYXBwKCR7YXBwLm5hbWV9KSBzdGF0dXMgY2hhbmdlOiAke2Zyb21TdGF0dXMgPyBBcHBsaWNhdGlvblN0YXR1c1tmcm9tU3RhdHVzXSA6ICdlbXB0eSd9ID0+ICR7XG4gICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uU3RhdHVzW3N0YXR1c11cbiAgICAgICAgICAgICAgICB9YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYXBwc1N0YXR1cy5zZXQoYXBwLCBzdGF0dXMpO1xuICAgICAgICAgICAgdGhpcy5hcHBTdGF0dXNDaGFuZ2UkLm5leHQoe1xuICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgIHN0YXR1czogc3RhdHVzXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBcHBTdGF0dXNDaGFuZ2UkKFxuICAgICAgICBhcHA6IFBsYW5ldEFwcGxpY2F0aW9uLFxuICAgICAgICBzdGF0dXMgPSBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwZWRcbiAgICApOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcFN0YXR1c0NoYW5nZS5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXZlbnQuYXBwID09PSBhcHAgJiYgZXZlbnQuc3RhdHVzID09PSBzdGF0dXM7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzd2l0Y2hNb2RlSXNDb2V4aXN0KGFwcDogUGxhbmV0QXBwbGljYXRpb24pIHtcbiAgICAgICAgaWYgKGFwcCAmJiBhcHAuc3dpdGNoTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwcC5zd2l0Y2hNb2RlID09PSBTd2l0Y2hNb2Rlcy5jb2V4aXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5zd2l0Y2hNb2RlID09PSBTd2l0Y2hNb2Rlcy5jb2V4aXN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlcnJvckhhbmRsZXIoZXJyb3I6IEVycm9yKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuZXJyb3JIYW5kbGVyKGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMb2FkaW5nRG9uZSgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ0RvbmUgPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFwcE5hbWVzKGFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10pOiBzdHJpbmcgfCBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBhcHBzLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgPyBgW11gXG4gICAgICAgICAgICA6IGFwcHMubWFwKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXR1cFJvdXRlQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnJvdXRlQ2hhbmdlJFxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHgsIHkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh4ICYmIHgudXJsKSA9PT0gKHkgJiYgeS51cmwpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vIFVzaW5nIHN3aXRjaE1hcCBzbyB3ZSBjYW5jZWwgZXhlY3V0aW5nIGxvYWRpbmcgd2hlbiBhIG5ldyBvbmUgY29tZXMgaW5cbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm4gbmV3IG9ic2VydmFibGUgdXNlIG9mIGFuZCBjYXRjaEVycm9yLFxuICAgICAgICAgICAgICAgICAgICAvLyBpbiBvcmRlciB0byBwcmV2ZW50IHJvdXRlQ2hhbmdlJCBjb21wbGV0ZWQgd2hpY2ggbmV2ZXIgdHJpZ2dlciBuZXcgcm91dGUgY2hhbmdlXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihldmVudCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHVubG9hZCBhcHBzIGFuZCByZXR1cm4gc2hvdWxkIGxvYWQgYXBwc1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zyhgcm91dGUgY2hhbmdlLCB1cmwgaXM6ICR7ZXZlbnQudXJsfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRSb3V0ZUNoYW5nZUV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkTG9hZEFwcHMgPSB0aGlzLnBsYW5ldEFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBzQnlNYXRjaGVkVXJsKGV2ZW50LnVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYHNob3VsZCBsb2FkIGFwcHM6ICR7dGhpcy5nZXRBcHBOYW1lcyhzaG91bGRMb2FkQXBwcyl9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkVW5sb2FkQXBwcyA9IHRoaXMuZ2V0VW5sb2FkQXBwcyhzaG91bGRMb2FkQXBwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBzTG9hZGluZ1N0YXJ0JC5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkTG9hZEFwcHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZFVubG9hZEFwcHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVubG9hZEFwcHMoc2hvdWxkVW5sb2FkQXBwcywgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKGB1bmxvYWQgYXBwczogJHt0aGlzLmdldEFwcE5hbWVzKHNob3VsZFVubG9hZEFwcHMpfWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRMb2FkQXBwcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTG9hZCBhcHAgYXNzZXRzIChzdGF0aWMgcmVzb3VyY2VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoTWFwKHNob3VsZExvYWRBcHBzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGFzQXBwc05lZWRMb2FkaW5nQXNzZXRzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9hZEFwcHMkID0gc2hvdWxkTG9hZEFwcHMubWFwKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFN0YXR1cyA9IHRoaXMuYXBwc1N0YXR1cy5nZXQoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWFwcFN0YXR1cyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwU3RhdHVzID09PSBBcHBsaWNhdGlvblN0YXR1cy5hc3NldHNMb2FkaW5nIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmxvYWRFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBhcHAoJHthcHAubmFtZX0pIHN0YXR1cyBpcyAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBsaWNhdGlvblN0YXR1c1thcHBTdGF0dXMgYXMgQXBwbGljYXRpb25TdGF0dXNdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc3RhcnQgbG9hZCBhc3NldHNgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQXBwc05lZWRMb2FkaW5nQXNzZXRzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRMb2FkQXBwQXNzZXRzKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0FwcHNOZWVkTG9hZGluZ0Fzc2V0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdEb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2FkQXBwcyQubGVuZ3RoID4gMCA/IGZvcmtKb2luKGxvYWRBcHBzJCkgOiBvZihbXSBhcyBQbGFuZXRBcHBsaWNhdGlvbltdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm9vdHN0cmFwIG9yIHNob3cgYXBwc1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwKGFwcHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcHMkOiBPYnNlcnZhYmxlPFBsYW5ldEFwcGxpY2F0aW9uPltdID0gYXBwcy5tYXAoYXBwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGFwcCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChhcHAgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFN0YXR1cyA9IHRoaXMuYXBwc1N0YXR1cy5nZXQoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwU3RhdHVzID09PSBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgW3JvdXRlQ2hhbmdlXSBhcHAoJHthcHAubmFtZX0pIHN0YXR1cyBpcyBib290c3RyYXBwZWQsIHNob3cgYXBwIGFuZCBhY3RpdmVgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FwcChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJlZj8ubmF2aWdhdGVCeVVybChldmVudC51cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmFjdGl2ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGFwcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmFzc2V0c0xvYWRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzIGFzc2V0c0xvYWRlZCwgc3RhcnQgYm9vdHN0cmFwcGluZ2BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYm9vdHN0cmFwQXBwKGFwcCkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoYGFwcCgke2FwcC5uYW1lfSkgYm9vdHN0cmFwcGVkIHN1Y2Nlc3MsIGFjdGl2ZSBpdGApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYWN0aXZlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRpbmdEb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhcHBTdGF0dXMgPT09IEFwcGxpY2F0aW9uU3RhdHVzLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgW3JvdXRlQ2hhbmdlXSBhcHAoJHthcHAubmFtZX0pIGlzIGFjdGl2ZSwgZG8gbm90aGluZ3NgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXBwUmVmID0gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBzdWIgYXBwIHVzZSBvbGQgdmVyc2lvbiB3aGljaCBoYXMgbm90IGdldEN1cnJlbnRSb3V0ZXJTdGF0ZVVybFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gYXBwUmVmPy5nZXRDdXJyZW50Um91dGVyU3RhdGVVcmxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXBwUmVmLmdldEN1cnJlbnRSb3V0ZXJTdGF0ZVVybCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFVybCAhPT0gZXZlbnQudXJsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBSZWY/Lm5hdmlnYXRlQnlVcmwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoYXBwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbcm91dGVDaGFuZ2VdIGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzICR7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25TdGF0dXNbYXBwU3RhdHVzIGFzIEFwcGxpY2F0aW9uU3RhdHVzXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwU3RhdHVzQ2hhbmdlJChhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGFwcCgke2FwcC5uYW1lfSkgc3RhdHVzIGlzIGJvb3RzdHJhcHBlZCBieSBzdWJzY3JpYmUgc3RhdHVzIGNoYW5nZSwgYWN0aXZlIGl0YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5hY3RpdmUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0FwcChhcHApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXBwcyQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zyhgc3RhcnQgbG9hZCBhbmQgYWN0aXZlIGFwcHM6ICR7dGhpcy5nZXRBcHBOYW1lcyhhcHBzKX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g5YiH5o2i5Yiw5bqU55So5ZCO5Lya5pyJ6Zeq54OB546w6LGh77yM5omA5Lul5L2/55SoIHNldFRpbWVvdXQg5ZCO5ZCv5Yqo5bqU55SoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGV4YW1wbGU6IHJlZGlyZWN0IHRvIGFwcDEncyBkYXNoYm9hcmQgZnJvbSBwb3J0YWwncyBhYm91dCBwYWdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGFwcCdzIHJvdXRlIGhhcyByZWRpcmVjdCwgaXQgZG9lc24ndCB3b3JrLCBpdCBvayBqdXN0IGluIHNldFRpbWVvdXQsIEkgZG9uJ3Qga25vdyB3aHkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86OiByZW1vdmUgaXQsIGl0IGlzIG9rIGluIHZlcnNpb24gQW5ndWxhciA5LnhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDmraTlpITliKTmlq3mmK/lm6DkuLrlpoLmnpzpnZnmgIHotYTmupDliqDovb3lrozmr5Xov5jmnKrlkK/liqjooqvlj5bmtojvvIzov5jmmK/kvJrlkK/liqjkuYvliY3nmoTlupTnlKjvvIzomb3nhLblj6/og73mgKfmr5TovoPlsI/vvIzkvYbmmK/ml6Dms5XmjpLpmaTov5nnp43lj6/og73mgKfvvIzmiYDku6Xlj6rmnInlvZMgRXZlbnQg5piv5pyA5ZCO5LiA5Liq5omN5Lya5ZCv5YqoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGFydFJvdXRlQ2hhbmdlRXZlbnQgPT09IGV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVuT3V0c2lkZUFuZ3VsYXIgZm9yIGZpeCBlcnJvcjogYEV4cGVjdGVkIHRvIG5vdCBiZSBpbiBBbmd1bGFyIFpvbmUsIGJ1dCBpdCBpcyFgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JrSm9pbihhcHBzJCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0TG9hZGluZ0RvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZW5zdXJlUHJlbG9hZEFwcHMoYXBwcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zyhgbm8gYXBwcyBuZWVkIHRvIGJlIGxvYWRlZCwgZW5zdXJlIHByZWxvYWQgYXBwc2ApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuc3VyZVByZWxvYWRBcHBzKGFwcHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldExvYWRpbmdEb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBoYW5kbGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhgYXBwcyBsb2FkZXIgZXJyb3I6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvckhhbmRsZXIoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0TG9hZEFwcEFzc2V0cyhhcHA6IFBsYW5ldEFwcGxpY2F0aW9uKTogT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvbj4ge1xuICAgICAgICBpZiAodGhpcy5pblByb2dyZXNzQXBwQXNzZXRzTG9hZHMuZ2V0KGFwcC5uYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzLmdldChhcHAubmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsb2FkQXBwJCA9IHRoaXMuYXNzZXRzTG9hZGVyLmxvYWRBcHBBc3NldHMoYXBwKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5Qcm9ncmVzc0FwcEFzc2V0c0xvYWRzLmRlbGV0ZShhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGVkKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluUHJvZ3Jlc3NBcHBBc3NldHNMb2Fkcy5kZWxldGUoYXBwLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmxvYWRFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNoYXJlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmluUHJvZ3Jlc3NBcHBBc3NldHNMb2Fkcy5zZXQoYXBwLm5hbWUsIGxvYWRBcHAkKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGluZyk7XG4gICAgICAgICAgICByZXR1cm4gbG9hZEFwcCQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVBcHAocGxhbmV0QXBwOiBQbGFuZXRBcHBsaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihwbGFuZXRBcHAubmFtZSk7XG4gICAgICAgIGNvbnN0IGFwcFJvb3RFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhcHBSZWY/LnNlbGVjdG9yIHx8IChwbGFuZXRBcHAuc2VsZWN0b3IgYXMgc3RyaW5nKSk7XG4gICAgICAgIGlmIChhcHBSb290RWxlbWVudCkge1xuICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5Om5vbmU7Jyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dBcHAocGxhbmV0QXBwOiBQbGFuZXRBcHBsaWNhdGlvbikge1xuICAgICAgICBjb25zdCBhcHBSZWYgPSBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihwbGFuZXRBcHAubmFtZSk7XG4gICAgICAgIGNvbnN0IGFwcFJvb3RFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhcHBSZWY/LnNlbGVjdG9yIHx8IChwbGFuZXRBcHAuc2VsZWN0b3IgYXMgc3RyaW5nKSk7XG4gICAgICAgIGlmIChhcHBSb290RWxlbWVudCkge1xuICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveUFwcChwbGFuZXRBcHA6IFBsYW5ldEFwcGxpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKHBsYW5ldEFwcC5uYW1lKTtcbiAgICAgICAgaWYgKGFwcFJlZikge1xuICAgICAgICAgICAgYXBwUmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250YWluZXIgPSBnZXRIVE1MRWxlbWVudChwbGFuZXRBcHAuaG9zdFBhcmVudCk7XG4gICAgICAgIGNvbnN0IGFwcFJvb3RFbGVtZW50ID0gY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKChhcHBSZWYgJiYgYXBwUmVmLnNlbGVjdG9yKSB8fCAocGxhbmV0QXBwLnNlbGVjdG9yIGFzIHN0cmluZykpO1xuICAgICAgICBpZiAoYXBwUm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnRhaW5lcj8ucmVtb3ZlQ2hpbGQoYXBwUm9vdEVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBib290c3RyYXBBcHAoXG4gICAgICAgIGFwcDogUGxhbmV0QXBwbGljYXRpb24sXG4gICAgICAgIGRlZmF1bHRTdGF0dXM6ICdoaWRkZW4nIHwgJ2Rpc3BsYXknID0gJ2Rpc3BsYXknXG4gICAgKTogT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvblJlZj4ge1xuICAgICAgICBkZWJ1ZyhgYXBwKCR7YXBwLm5hbWV9KSBzdGFydCBib290c3RyYXBwaW5nYCk7XG4gICAgICAgIHRoaXMuc2V0QXBwU3RhdHVzKGFwcCwgQXBwbGljYXRpb25TdGF0dXMuYm9vdHN0cmFwcGluZyk7XG4gICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKGFwcC5uYW1lKTtcbiAgICAgICAgaWYgKGFwcFJlZiAmJiBhcHBSZWYuYm9vdHN0cmFwKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBnZXRIVE1MRWxlbWVudChhcHAuaG9zdFBhcmVudCk7XG4gICAgICAgICAgICBsZXQgYXBwUm9vdEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoYXBwUmVmLnNlbGVjdG9yIHx8IGFwcC5zZWxlY3RvciEpITtcbiAgICAgICAgICAgICAgICBpZiAoIWFwcFJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHBSZWYudGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcFJvb3RFbGVtZW50ID0gY3JlYXRlRWxlbWVudEJ5VGVtcGxhdGUoYXBwUmVmLnRlbXBsYXRlKSE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoYXBwLnNlbGVjdG9yISk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXBwUm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzdHlsZScsICdkaXNwbGF5Om5vbmU7Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhcHAuaG9zdENsYXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNvZXJjZUFycmF5KGFwcC5ob3N0Q2xhc3MpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwLnN0eWxlUHJlZml4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNvZXJjZUFycmF5KGFwcC5zdHlsZVByZWZpeCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChhcHBSb290RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGFwcFJlZi5ib290c3RyYXAodGhpcy5wb3J0YWxBcHApO1xuICAgICAgICAgICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcHJvbWlzZSBmb3IgYm9vdHN0cmFwXG4gICAgICAgICAgICBpZiAoKHJlc3VsdCBhcyBhbnkpWyd0aGVuJ10pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBmcm9tKHJlc3VsdCkgYXMgT2JzZXJ2YWJsZTxQbGFuZXRBcHBsaWNhdGlvblJlZj47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYGFwcCgke2FwcC5uYW1lfSkgYm9vdHN0cmFwcGVkIHN1Y2Nlc3MgZm9yICR7ZGVmYXVsdFN0YXR1c31gKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBcHBTdGF0dXMoYXBwLCBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwZWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdFN0YXR1cyA9PT0gJ2Rpc3BsYXknICYmIGFwcFJvb3RFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBSb290RWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXBwUmVmO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgIGBbJHthcHAubmFtZX1dIG5vdCBmb3VuZCwgbWFrZSBzdXJlIHRoYXQgdGhlIGFwcCBoYXMgdGhlIGNvcnJlY3QgbmFtZSBkZWZpbmVkIHVzZSBkZWZpbmVBcHBsaWNhdGlvbigke2FwcC5uYW1lfSkgYW5kIHJ1bnRpbWVDaHVuayBhbmQgdmVuZG9yQ2h1bmsgYXJlIHNldCB0byB0cnVlLCBkZXRhaWxzIHNlZSBodHRwczovL2dpdGh1Yi5jb20vd29ya3RpbGUvbmd4LXBsYW5ldCN0aHJvdy1lcnJvci1jYW5ub3QtcmVhZC1wcm9wZXJ0eS1jYWxsLW9mLXVuZGVmaW5lZC1hdC1fX3dlYnBhY2tfcmVxdWlyZV9fLWJvb3RzdHJhcDc5YFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VW5sb2FkQXBwcyhhY3RpdmVBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdKSB7XG4gICAgICAgIGNvbnN0IHVubG9hZEFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10gPSBbXTtcbiAgICAgICAgdGhpcy5hcHBzU3RhdHVzLmZvckVhY2goKHZhbHVlLCBhcHApID0+IHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gQXBwbGljYXRpb25TdGF0dXMuYWN0aXZlICYmICFhY3RpdmVBcHBzLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGFwcC5uYW1lKSkge1xuICAgICAgICAgICAgICAgIHVubG9hZEFwcHMucHVzaChhcHApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVubG9hZEFwcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bmxvYWRBcHBzKHNob3VsZFVubG9hZEFwcHM6IFBsYW5ldEFwcGxpY2F0aW9uW10sIGV2ZW50OiBQbGFuZXRSb3V0ZXJFdmVudCkge1xuICAgICAgICBjb25zdCBoaWRlQXBwczogUGxhbmV0QXBwbGljYXRpb25bXSA9IFtdO1xuICAgICAgICBjb25zdCBkZXN0cm95QXBwczogUGxhbmV0QXBwbGljYXRpb25bXSA9IFtdO1xuICAgICAgICBzaG91bGRVbmxvYWRBcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN3aXRjaE1vZGVJc0NvZXhpc3QoYXBwKSkge1xuICAgICAgICAgICAgICAgIGRlYnVnKGBoaWRlIGFwcCgke2FwcC5uYW1lfSkgZm9yIGNvZXhpc3QgbW9kZWApO1xuICAgICAgICAgICAgICAgIGhpZGVBcHBzLnB1c2goYXBwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBcHAoYXBwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmJvb3RzdHJhcHBlZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlc3Ryb3lBcHBzLnB1c2goYXBwKTtcbiAgICAgICAgICAgICAgICAvLyDplIDmr4HkuYvliY3lhYjpmpDol4/vvIzlkKbliJnkvJrlh7rnjrDpl6rng4HvvIzlm6DkuLogZGVzdHJveSDmmK/lu7bov5/miafooYznmoRcbiAgICAgICAgICAgICAgICAvLyDlpoLmnpzplIDmr4HkuI3lu7bov5/miafooYzvvIzkvJrlh7rnjrDliIfmjaLliLDkuLvlupTnlKjnmoTml7blgJnkvJrmnInop4blm77ljaHpob/njrDosaFcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGVBcHAoYXBwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFwcFN0YXR1cyhhcHAsIEFwcGxpY2F0aW9uU3RhdHVzLmFzc2V0c0xvYWRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChoaWRlQXBwcy5sZW5ndGggPiAwIHx8IGRlc3Ryb3lBcHBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIOS7juWFtuS7luW6lOeUqOWIh+aNouWIsOS4u+W6lOeUqOeahOaXtuWAmeS8muacieinhuWbvuWNoemhv+eOsOixoe+8jOaJgOS7peWFiOetieS4u+W6lOeUqOa4suafk+WujOavleWQjuWGjeWKoOi9veWFtuS7luW6lOeUqFxuICAgICAgICAgICAgLy8g5q2k5aSE5bCd6K+V5L2/55SoIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkg5bqU55So5LmL6Ze055qE5YiH5o2i5Lya5Ye6546w6Zeq54OBXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBoaWRlQXBwcy5mb3JFYWNoKGFwcCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFwcFJlZiA9IGdldFBsYW5ldEFwcGxpY2F0aW9uUmVmKGFwcC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcFJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwUmVmLm5hdmlnYXRlQnlVcmwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGRlc3Ryb3lBcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYGRlc3Ryb3kgYXBwKCR7YXBwLm5hbWV9KWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lBcHAoYXBwKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVsb2FkQXBwcyhhY3RpdmVBcHBzPzogUGxhbmV0QXBwbGljYXRpb25bXSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvUHJlbG9hZEFwcHMgPSB0aGlzLnBsYW5ldEFwcGxpY2F0aW9uU2VydmljZS5nZXRBcHBzVG9QcmVsb2FkKFxuICAgICAgICAgICAgICAgIGFjdGl2ZUFwcHMgPyBhY3RpdmVBcHBzLm1hcChpdGVtID0+IGl0ZW0ubmFtZSkgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkZWJ1Zyhgc3RhcnQgcHJlbG9hZCBhcHBzOiAke3RoaXMuZ2V0QXBwTmFtZXModG9QcmVsb2FkQXBwcyl9YCk7XG4gICAgICAgICAgICBjb25zdCBsb2FkQXBwcyQgPSB0b1ByZWxvYWRBcHBzLm1hcChwcmVsb2FkQXBwID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVsb2FkSW50ZXJuYWwocHJlbG9hZEFwcCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgZm9ya0pvaW4obG9hZEFwcHMkKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyKGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbnN1cmVQcmVsb2FkQXBwcyhhY3RpdmVBcHBzPzogUGxhbmV0QXBwbGljYXRpb25bXSkge1xuICAgICAgICAvLyBTdGFydCBwcmVsb2FkIGFwcHNcbiAgICAgICAgLy8gU3RhcnQgcHJlbG9hZCB3aGVuIGZpcnN0IHRpbWUgYXBwIGxvYWRlZFxuICAgICAgICBpZiAodGhpcy5maXJzdExvYWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJlbG9hZEFwcHMoYWN0aXZlQXBwcyk7XG4gICAgICAgICAgICB0aGlzLmZpcnN0TG9hZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldE9wdGlvbnMob3B0aW9uczogUGFydGlhbDxQbGFuZXRPcHRpb25zPikge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMsXG4gICAgICAgICAgICAuLi5vcHRpb25zXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzZXQgcm91dGUgYnkgY3VycmVudCByb3V0ZXJcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVyb3V0ZShldmVudDogUGxhbmV0Um91dGVyRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yb3V0ZUNoYW5nZSQubmV4dChldmVudCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmVsb2FkSW50ZXJuYWwoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbiwgaW1tZWRpYXRlPzogYm9vbGVhbik6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb25SZWYgfCBudWxsPiB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuYXBwc1N0YXR1cy5nZXQoYXBwKTtcbiAgICAgICAgaWYgKCFzdGF0dXMgfHwgc3RhdHVzID09PSBBcHBsaWNhdGlvblN0YXR1cy5sb2FkRXJyb3IpIHtcbiAgICAgICAgICAgIGRlYnVnKGBwcmVsb2FkIGFwcCgke2FwcC5uYW1lfSksIHN0YXR1cyBpcyBlbXB0eSwgc3RhcnQgdG8gbG9hZCBhc3NldHNgKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXJ0TG9hZEFwcEFzc2V0cyhhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVidWcoYHByZWxvYWQgYXBwKCR7YXBwLm5hbWV9KSwgYXNzZXRzIGxvYWRlZCwgc3RhcnQgYm9vdHN0cmFwIGFwcCwgaW1tZWRpYXRlOiAkeyEhaW1tZWRpYXRlfWApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW1tZWRpYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ib290c3RyYXBBcHAoYXBwLCAnaGlkZGVuJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJvb3RzdHJhcEFwcChhcHAsICdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JIYW5kbGVyKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQbGFuZXRBcHBsaWNhdGlvblJlZihhcHAubmFtZSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBbQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGluZywgQXBwbGljYXRpb25TdGF0dXMuYXNzZXRzTG9hZGVkLCBBcHBsaWNhdGlvblN0YXR1cy5ib290c3RyYXBwaW5nXS5pbmNsdWRlcyhcbiAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkZWJ1ZyhgcHJlbG9hZCBhcHAoJHthcHAubmFtZX0pLCBzdGF0dXMgaXMgJHtBcHBsaWNhdGlvblN0YXR1c1tzdGF0dXNdfSwgcmV0dXJuIHVudGlsIGJvb3RzdHJhcHBlZGApO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QXBwU3RhdHVzQ2hhbmdlJChhcHApLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYXBwUmVmID0gZ2V0UGxhbmV0QXBwbGljYXRpb25SZWYoYXBwLm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFhcHBSZWYpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXBwLm5hbWV9J3Mgc3RhdHVzIGlzICR7QXBwbGljYXRpb25TdGF0dXNbc3RhdHVzXX0sIHBsYW5ldEFwcGxpY2F0aW9uUmVmIGlzIG51bGwuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb2YoYXBwUmVmKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZWxvYWQgcGxhbmV0IGFwcGxpY2F0aW9uXG4gICAgICogQHBhcmFtIGFwcCBhcHBcbiAgICAgKiBAcGFyYW0gaW1tZWRpYXRlIGJvb3RzdHJhcCBvbiBzdGFibGUgYnkgZGVmYXVsdCwgc2V0dGluZyBpbW1lZGlhdGUgaXMgdHJ1ZSwgaXQgd2lsbCBib290c3RyYXAgaW1tZWRpYXRlXG4gICAgICovXG4gICAgcHVibGljIHByZWxvYWQoYXBwOiBQbGFuZXRBcHBsaWNhdGlvbiwgaW1tZWRpYXRlPzogYm9vbGVhbik6IE9ic2VydmFibGU8UGxhbmV0QXBwbGljYXRpb25SZWY+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlbG9hZEludGVybmFsKGFwcCwgaW1tZWRpYXRlKTtcbiAgICB9XG59XG4iXX0=
@@ -1,94 +1,2 @@
1
- import { NgZone } from '@angular/core';
2
- import { Router, NavigationEnd } from '@angular/router';
3
- import { take } from 'rxjs/operators';
4
- import { from } from 'rxjs';
5
- import { getTagNameByTemplate } from '../helpers';
6
- import { getSandboxInstance } from '../sandbox/';
7
- export class PlanetApplicationRef {
8
- get selector() {
9
- return this.innerSelector;
10
- }
11
- get bootstrapped() {
12
- return !!this.appModuleRef;
13
- }
14
- get ngZone() {
15
- return this.appModuleRef?.injector.get(NgZone);
16
- }
17
- get sandbox() {
18
- return getSandboxInstance();
19
- }
20
- constructor(name, options) {
21
- this.name = name;
22
- if (options) {
23
- this.template = options.template;
24
- this.innerSelector = this.template ? getTagNameByTemplate(this.template) : '';
25
- this.appModuleBootstrap = options.bootstrap;
26
- }
27
- // This is a hack, since NgZone doesn't allow you to configure the property that identifies your zone.
28
- // See https://github.com/PlaceMe-SAS/single-spa-angular-cli/issues/33,
29
- NgZone.isInAngularZone = () => {
30
- // @ts-ignore
31
- return window.Zone.current._properties[`ngx-planet-${name}`] === true;
32
- };
33
- }
34
- // 子应用路由变化后同步修改 portal 的 Route
35
- syncPortalRouteWhenNavigationEnd() {
36
- const router = this.appModuleRef?.injector.get(Router);
37
- if (router) {
38
- router.events.subscribe(event => {
39
- if (event instanceof NavigationEnd) {
40
- this.ngZone?.onStable
41
- .asObservable()
42
- .pipe(take(1))
43
- .subscribe(() => {
44
- this.portalApp.router.navigateByUrl(event.url);
45
- });
46
- }
47
- });
48
- }
49
- }
50
- bootstrap(app) {
51
- if (!this.appModuleBootstrap) {
52
- throw new Error(`app(${this.name}) is not defined`);
53
- }
54
- this.portalApp = app;
55
- return from(this.appModuleBootstrap(app).then(appModuleRef => {
56
- this.appModuleRef = appModuleRef;
57
- this.appModuleRef.instance.appName = this.name;
58
- this.syncPortalRouteWhenNavigationEnd();
59
- return this;
60
- }));
61
- }
62
- getRouter() {
63
- return this.appModuleRef?.injector.get(Router);
64
- }
65
- getCurrentRouterStateUrl() {
66
- return this.getRouter()?.routerState.snapshot.url;
67
- }
68
- navigateByUrl(url) {
69
- const router = this.getRouter();
70
- this.ngZone?.run(() => {
71
- router?.navigateByUrl(url);
72
- });
73
- }
74
- getComponentFactory() {
75
- return this.componentFactory;
76
- }
77
- registerComponentFactory(componentFactory) {
78
- this.componentFactory = componentFactory;
79
- }
80
- destroy() {
81
- if (this.appModuleRef) {
82
- const router = this.appModuleRef.injector.get(Router);
83
- if (router) {
84
- router.dispose();
85
- }
86
- if (this.sandbox) {
87
- this.sandbox.destroy();
88
- }
89
- this.appModuleRef.destroy();
90
- this.appModuleRef = undefined;
91
- }
92
- }
93
- }
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vcGxhbmV0LWFwcGxpY2F0aW9uLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sRUFBYyxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxrQkFBa0IsRUFBVyxNQUFNLGFBQWEsQ0FBQztBQWMxRCxNQUFNLE9BQU8sb0JBQW9CO0lBUzdCLElBQVcsUUFBUTtRQUNmLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBVyxZQUFZO1FBQ25CLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsTUFBTTtRQUNiLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFXLE9BQU87UUFDZCxPQUFPLGtCQUFrQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELFlBQVksSUFBWSxFQUFFLE9BQTBCO1FBQ2hELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxD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WUFDdEQsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3BCO1lBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDMUI7WUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO1NBQ2pDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGVSZWYsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGFuZXRQb3J0YWxBcHBsaWNhdGlvbiB9IGZyb20gJy4vcG9ydGFsLWFwcGxpY2F0aW9uJztcbmltcG9ydCB7IFBsYW50Q29tcG9uZW50Q29uZmlnIH0gZnJvbSAnLi4vY29tcG9uZW50L3BsYW50LWNvbXBvbmVudC5jb25maWcnO1xuaW1wb3J0IHsgUGxhbmV0Q29tcG9uZW50UmVmIH0gZnJvbSAnLi4vY29tcG9uZW50L3BsYW5ldC1jb21wb25lbnQtcmVmJztcbmltcG9ydCB7IGdldFRhZ05hbWVCeVRlbXBsYXRlIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBnZXRTYW5kYm94SW5zdGFuY2UsIFNhbmRib3ggfSBmcm9tICcuLi9zYW5kYm94Lyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQm9vdHN0cmFwT3B0aW9ucyB7XG4gICAgdGVtcGxhdGU6IHN0cmluZztcbiAgICBib290c3RyYXA6IEJvb3RzdHJhcEFwcE1vZHVsZTtcbn1cblxuZXhwb3J0IHR5cGUgQm9vdHN0cmFwQXBwTW9kdWxlID0gKHBvcnRhbEFwcDogUGxhbmV0UG9ydGFsQXBwbGljYXRpb24pID0+IFByb21pc2U8TmdNb2R1bGVSZWY8YW55PiB8IHVuZGVmaW5lZCB8IG51bGw+O1xuXG5leHBvcnQgdHlwZSBQbGFudENvbXBvbmVudEZhY3RvcnkgPSA8VERhdGEsIFRDb21wPihcbiAgICBjb21wb25lbnROYW1lOiBzdHJpbmcsXG4gICAgY29uZmlnOiBQbGFudENvbXBvbmVudENvbmZpZzxURGF0YT5cbikgPT4gUGxhbmV0Q29tcG9uZW50UmVmPFRDb21wPjtcblxuZXhwb3J0IGNsYXNzIFBsYW5ldEFwcGxpY2F0aW9uUmVmIHtcbiAgICBwdWJsaWMgYXBwTW9kdWxlUmVmPzogTmdNb2R1bGVSZWY8YW55PjtcbiAgICBwdWJsaWMgdGVtcGxhdGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBpbm5lclNlbGVjdG9yPzogc3RyaW5nO1xuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nO1xuICAgIHByaXZhdGUgcG9ydGFsQXBwITogUGxhbmV0UG9ydGFsQXBwbGljYXRpb247XG4gICAgcHJpdmF0ZSBhcHBNb2R1bGVCb290c3RyYXA/OiBCb290c3RyYXBBcHBNb2R1bGU7XG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5PzogUGxhbnRDb21wb25lbnRGYWN0b3J5O1xuXG4gICAgcHVibGljIGdldCBzZWxlY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5uZXJTZWxlY3RvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGJvb3RzdHJhcHBlZCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5hcHBNb2R1bGVSZWY7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBuZ1pvbmUoKTogTmdab25lIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwTW9kdWxlUmVmPy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNhbmRib3goKTogU2FuZGJveCB7XG4gICAgICAgIHJldHVybiBnZXRTYW5kYm94SW5zdGFuY2UoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM/OiBCb290c3RyYXBPcHRpb25zKSB7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlID0gb3B0aW9ucy50ZW1wbGF0ZTtcbiAgICAgICAgICAgIHRoaXMuaW5uZXJTZWxlY3RvciA9IHRoaXMudGVtcGxhdGUgPyBnZXRUYWdOYW1lQnlUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlKSA6ICcnO1xuICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVCb290c3RyYXAgPSBvcHRpb25zLmJvb3RzdHJhcDtcbiAgICAgICAgfVxuICAgICAgICAvLyBUaGlzIGlzIGEgaGFjaywgc2luY2UgTmdab25lIGRvZXNuJ3QgYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSB0aGUgcHJvcGVydHkgdGhhdCBpZGVudGlmaWVzIHlvdXIgem9uZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QbGFjZU1lLVNBUy9zaW5nbGUtc3BhLWFuZ3VsYXItY2xpL2lzc3Vlcy8zMyxcbiAgICAgICAgTmdab25lLmlzSW5Bbmd1bGFyWm9uZSA9ICgpID0+IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cuWm9uZS5jdXJyZW50Ll9wcm9wZXJ0aWVzW2BuZ3gtcGxhbmV0LSR7bmFtZX1gXSA9PT0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyDlrZDlupTnlKjot6/nlLHlj5jljJblkI7lkIzmraXkv67mlLkgcG9ydGFsIOeahCBSb3V0ZVxuICAgIHByaXZhdGUgc3luY1BvcnRhbFJvdXRlV2hlbk5hdmlnYXRpb25FbmQoKSB7XG4gICAgICAgIGNvbnN0IHJvdXRlciA9IHRoaXMuYXBwTW9kdWxlUmVmPy5pbmplY3Rvci5nZXQoUm91dGVyKTtcbiAgICAgICAgaWYgKHJvdXRlcikge1xuICAgICAgICAgICAgcm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmU/Lm9uU3RhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcnRhbEFwcC5yb3V0ZXIhLm5hdmlnYXRlQnlVcmwoZXZlbnQudXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYm9vdHN0cmFwKGFwcDogUGxhbmV0UG9ydGFsQXBwbGljYXRpb24pOiBPYnNlcnZhYmxlPHRoaXM+IHtcbiAgICAgICAgaWYgKCF0aGlzLmFwcE1vZHVsZUJvb3RzdHJhcCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBhcHAoJHt0aGlzLm5hbWV9KSBpcyBub3QgZGVmaW5lZGApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucG9ydGFsQXBwID0gYXBwO1xuICAgICAgICByZXR1cm4gZnJvbShcbiAgICAgICAgICAgIHRoaXMuYXBwTW9kdWxlQm9vdHN0cmFwKGFwcCkudGhlbihhcHBNb2R1bGVSZWYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwTW9kdWxlUmVmID0gYXBwTW9kdWxlUmVmITtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcE1vZHVsZVJlZi5pbnN0YW5jZS5hcHBOYW1lID0gdGhpcy5uYW1lO1xuICAgICAgICAgICAgICAgIHRoaXMuc3luY1BvcnRhbFJvdXRlV2hlbk5hdmlnYXRpb25FbmQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0Um91dGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBNb2R1bGVSZWY/LmluamVjdG9yLmdldChSb3V0ZXIpO1xuICAgIH1cblxuICAgIGdldEN1cnJlbnRSb3V0ZXJTdGF0ZVVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Um91dGVyKCk/LnJvdXRlclN0YXRlLnNuYXBzaG90LnVybDtcbiAgICB9XG5cbiAgICBuYXZpZ2F0ZUJ5VXJsKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvdXRlciA9IHRoaXMuZ2V0Um91dGVyKCk7XG4gICAgICAgIHRoaXMubmdab25lPy5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgcm91dGVyPy5uYXZpZ2F0ZUJ5VXJsKHVybCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldENvbXBvbmVudEZhY3RvcnkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudEZhY3Rvcnk7XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJDb21wb25lbnRGYWN0b3J5KGNvbXBvbmVudEZhY3Rvcnk6IFBsYW50Q29tcG9uZW50RmFjdG9yeSkge1xuICAgICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnkgPSBjb21wb25lbnRGYWN0b3J5O1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFwcE1vZHVsZVJlZikge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVyID0gdGhpcy5hcHBNb2R1bGVSZWYuaW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgICAgICBpZiAocm91dGVyKSB7XG4gICAgICAgICAgICAgICAgcm91dGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNhbmRib3gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhbmRib3guZGVzdHJveSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVSZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5hcHBNb2R1bGVSZWYgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLXJlZi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYW5ldC9zcmMvYXBwbGljYXRpb24vcGxhbmV0LWFwcGxpY2F0aW9uLXJlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhbmV0UG9ydGFsQXBwbGljYXRpb24gfSBmcm9tICcuL3BvcnRhbC1hcHBsaWNhdGlvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhbmV0QXBwbGljYXRpb25SZWYge1xuICAgIHRlbXBsYXRlPzogc3RyaW5nO1xuICAgIGdldCBib290c3RyYXBwZWQoKTogYm9vbGVhbjtcbiAgICBnZXQgc2VsZWN0b3IoKTogc3RyaW5nO1xuICAgIGJvb3RzdHJhcChhcHA6IFBsYW5ldFBvcnRhbEFwcGxpY2F0aW9uKTogT2JzZXJ2YWJsZTx0aGlzPjtcbiAgICBuYXZpZ2F0ZUJ5VXJsKHVybDogc3RyaW5nKTogdm9pZDtcbiAgICBnZXRDdXJyZW50Um91dGVyU3RhdGVVcmwoKTogc3RyaW5nO1xuICAgIGRlc3Ryb3koKTogdm9pZDtcbn1cbiJdfQ==
@@ -73,13 +73,13 @@ export class PlanetApplicationService {
73
73
  getApps() {
74
74
  return this.apps;
75
75
  }
76
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PlanetApplicationService, deps: [{ token: i1.HttpClient }, { token: i2.AssetsLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }
77
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PlanetApplicationService, providedIn: 'root' }); }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PlanetApplicationService, deps: [{ token: i1.HttpClient }, { token: i2.AssetsLoader }], target: i0.ɵɵFactoryTarget.Injectable }); }
77
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PlanetApplicationService, providedIn: 'root' }); }
78
78
  }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PlanetApplicationService, decorators: [{
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: PlanetApplicationService, decorators: [{
80
80
  type: Injectable,
81
81
  args: [{
82
82
  providedIn: 'root'
83
83
  }]
84
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.AssetsLoader }]; } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFuZXQvc3JjL2FwcGxpY2F0aW9uL3BsYW5ldC1hcHBsaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFLekQsTUFBTSxPQUFPLHdCQUF3QjtJQUtqQyxZQUFvQixJQUFnQixFQUFVLFlBQTBCO1FBQXBELFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUpoRSxTQUFJLEdBQXdCLEVBQUUsQ0FBQztRQUUvQixZQUFPLEdBQXlDLEVBQUUsQ0FBQztRQUd2RCxJQUFJLHFCQUFxQixFQUFFLEVBQUU7WUFDekIsTUFBTSxJQUFJLEtBQUssQ0FDWCw2RkFBNkYsQ0FDaEcsQ0FBQztTQUNMO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBUyxTQUFrRTtRQUMvRSxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNmLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3JEO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXO1FBQ3JCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNQLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDdkI7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUF5QixDQUFDLENBQUM7YUFDNUM7UUFDTCxDQUFDLENBQUMsRUFDRixXQUFXLEVBQUUsQ0FDaEIsQ0FBQztRQUNGLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVk7UUFDbkIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsbUJBQW1CLENBQW1CLEdBQVc7UUFDN0MsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLElBQUksR0FBRyxDQUFDLGdCQUFnQixZQUFZLE1BQU0sRUFBRTtnQkFDeEMsT0FBTyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3pDO2lCQUFNO2dCQUNILE9BQU8sR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQzthQUMvQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsZUFBMEI7UUFDdkMsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQy9CLElBQUksZUFBZSxFQUFFO2dCQUNqQixPQUFPLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUM3RDtpQkFBTTtnQkFDSCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUM7YUFDdEI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7OEdBMUVRLHdCQUF3QjtrSEFBeEIsd0JBQXdCLGNBRnJCLE1BQU07OzJGQUVULHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvbiB9IGZyb20gJy4uL3BsYW5ldC5jbGFzcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXksIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3NldHNMb2FkZXIgfSBmcm9tICcuLi9hc3NldHMtbG9hZGVyJztcbmltcG9ydCB7IGdldEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2dsb2JhbC1wbGFuZXQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYW5ldEFwcGxpY2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSBhcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIGFwcHNNYXA6IHsgW2tleTogc3RyaW5nXTogUGxhbmV0QXBwbGljYXRpb24gfSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGFzc2V0c0xvYWRlcjogQXNzZXRzTG9hZGVyKSB7XG4gICAgICAgIGlmIChnZXRBcHBsaWNhdGlvblNlcnZpY2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdQbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UgaGFzIGJlZW4gaW5qZWN0ZWQgaW4gdGhlIHBvcnRhbCwgcmVwZWF0ZWQgaW5qZWN0aW9uIGlzIG5vdCBhbGxvd2VkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyPFRFeHRyYT4oYXBwT3JBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbjxURXh0cmE+IHwgUGxhbmV0QXBwbGljYXRpb248VEV4dHJhPltdKSB7XG4gICAgICAgIGNvbnN0IGFwcHMgPSBjb2VyY2VBcnJheShhcHBPckFwcHMpO1xuICAgICAgICBhcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcHNNYXBbYXBwLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FwcC5uYW1lfSBoYXMgYmUgcmVnaXN0ZXJlZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwcy5wdXNoKGFwcCk7XG4gICAgICAgICAgICB0aGlzLmFwcHNNYXBbYXBwLm5hbWVdID0gYXBwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWdpc3RlckJ5VXJsKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaHR0cC5nZXQoYCR7dXJsfWApLnBpcGUoXG4gICAgICAgICAgICBtYXAoYXBwcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFwcHMgJiYgQXJyYXkuaXNBcnJheShhcHBzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyKGFwcHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoYXBwcyBhcyBQbGFuZXRBcHBsaWNhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5hcHBzTWFwW25hbWVdKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hcHBzTWFwW25hbWVdO1xuICAgICAgICAgICAgdGhpcy5hcHBzID0gdGhpcy5hcHBzLmZpbHRlcihhcHAgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAubmFtZSAhPT0gbmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QXBwc0J5TWF0Y2hlZFVybDxURXh0cmEgPSB1bmtub3duPih1cmw6IHN0cmluZyk6IFBsYW5ldEFwcGxpY2F0aW9uPFRFeHRyYT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcHMoKS5maWx0ZXIoYXBwID0+IHtcbiAgICAgICAgICAgIGlmIChhcHAucm91dGVyUGF0aFByZWZpeCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAucm91dGVyUGF0aFByZWZpeC50ZXN0KHVybCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aChhcHAucm91dGVyUGF0aFByZWZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFwcEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwc01hcFtuYW1lXTtcbiAgICB9XG5cbiAgICBnZXRBcHBzVG9QcmVsb2FkKGV4Y2x1ZGVBcHBOYW1lcz86IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcHMoKS5maWx0ZXIoYXBwID0+IHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlQXBwTmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwLnByZWxvYWQgJiYgIWV4Y2x1ZGVBcHBOYW1lcy5pbmNsdWRlcyhhcHAubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAucHJlbG9hZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXBwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwcztcbiAgICB9XG59XG4iXX0=
84
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.AssetsLoader }] });
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbmV0LWFwcGxpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9wbGFuZXQvc3JjL2FwcGxpY2F0aW9uL3BsYW5ldC1hcHBsaWNhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUV6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFLekQsTUFBTSxPQUFPLHdCQUF3QjtJQUtqQyxZQUFvQixJQUFnQixFQUFVLFlBQTBCO1FBQXBELFNBQUksR0FBSixJQUFJLENBQVk7UUFBVSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUpoRSxTQUFJLEdBQXdCLEVBQUUsQ0FBQztRQUUvQixZQUFPLEdBQXlDLEVBQUUsQ0FBQztRQUd2RCxJQUFJLHFCQUFxQixFQUFFLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUNYLDZGQUE2RixDQUNoRyxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRLENBQVMsU0FBa0U7UUFDL0UsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3RELENBQUM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsYUFBYSxDQUFDLEdBQVc7UUFDckIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FDdkMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ1AsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixJQUFJLENBQUMsUUFBUSxDQUFDLElBQXlCLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsV0FBVyxFQUFFLENBQ2hCLENBQUM7UUFDRixNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFZO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMvQixPQUFPLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztJQUNMLENBQUM7SUFFRCxtQkFBbUIsQ0FBbUIsR0FBVztRQUM3QyxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxHQUFHLENBQUMsZ0JBQWdCLFlBQVksTUFBTSxFQUFFLENBQUM7Z0JBQ3pDLE9BQU8sR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGdCQUFnQixDQUFDLGVBQTBCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUMvQixJQUFJLGVBQWUsRUFBRSxDQUFDO2dCQUNsQixPQUFPLEdBQUcsQ0FBQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQ3ZCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxPQUFPO1FBQ0gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7OEdBMUVRLHdCQUF3QjtrSEFBeEIsd0JBQXdCLGNBRnJCLE1BQU07OzJGQUVULHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFuZXRBcHBsaWNhdGlvbiB9IGZyb20gJy4uL3BsYW5ldC5jbGFzcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgc2hhcmVSZXBsYXksIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGNvZXJjZUFycmF5IH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3NldHNMb2FkZXIgfSBmcm9tICcuLi9hc3NldHMtbG9hZGVyJztcbmltcG9ydCB7IGdldEFwcGxpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2dsb2JhbC1wbGFuZXQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYW5ldEFwcGxpY2F0aW9uU2VydmljZSB7XG4gICAgcHJpdmF0ZSBhcHBzOiBQbGFuZXRBcHBsaWNhdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIGFwcHNNYXA6IHsgW2tleTogc3RyaW5nXTogUGxhbmV0QXBwbGljYXRpb24gfSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LCBwcml2YXRlIGFzc2V0c0xvYWRlcjogQXNzZXRzTG9hZGVyKSB7XG4gICAgICAgIGlmIChnZXRBcHBsaWNhdGlvblNlcnZpY2UoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdQbGFuZXRBcHBsaWNhdGlvblNlcnZpY2UgaGFzIGJlZW4gaW5qZWN0ZWQgaW4gdGhlIHBvcnRhbCwgcmVwZWF0ZWQgaW5qZWN0aW9uIGlzIG5vdCBhbGxvd2VkJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZ2lzdGVyPFRFeHRyYT4oYXBwT3JBcHBzOiBQbGFuZXRBcHBsaWNhdGlvbjxURXh0cmE+IHwgUGxhbmV0QXBwbGljYXRpb248VEV4dHJhPltdKSB7XG4gICAgICAgIGNvbnN0IGFwcHMgPSBjb2VyY2VBcnJheShhcHBPckFwcHMpO1xuICAgICAgICBhcHBzLmZvckVhY2goYXBwID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcHNNYXBbYXBwLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2FwcC5uYW1lfSBoYXMgYmUgcmVnaXN0ZXJlZC5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBwcy5wdXNoKGFwcCk7XG4gICAgICAgICAgICB0aGlzLmFwcHNNYXBbYXBwLm5hbWVdID0gYXBwO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWdpc3RlckJ5VXJsKHVybDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaHR0cC5nZXQoYCR7dXJsfWApLnBpcGUoXG4gICAgICAgICAgICBtYXAoYXBwcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGFwcHMgJiYgQXJyYXkuaXNBcnJheShhcHBzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyKGFwcHMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXIoYXBwcyBhcyBQbGFuZXRBcHBsaWNhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdC5zdWJzY3JpYmUoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB1bnJlZ2lzdGVyKG5hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5hcHBzTWFwW25hbWVdKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5hcHBzTWFwW25hbWVdO1xuICAgICAgICAgICAgdGhpcy5hcHBzID0gdGhpcy5hcHBzLmZpbHRlcihhcHAgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAubmFtZSAhPT0gbmFtZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0QXBwc0J5TWF0Y2hlZFVybDxURXh0cmEgPSB1bmtub3duPih1cmw6IHN0cmluZyk6IFBsYW5ldEFwcGxpY2F0aW9uPFRFeHRyYT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcHMoKS5maWx0ZXIoYXBwID0+IHtcbiAgICAgICAgICAgIGlmIChhcHAucm91dGVyUGF0aFByZWZpeCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAucm91dGVyUGF0aFByZWZpeC50ZXN0KHVybCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwuc3RhcnRzV2l0aChhcHAucm91dGVyUGF0aFByZWZpeCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFwcEJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwc01hcFtuYW1lXTtcbiAgICB9XG5cbiAgICBnZXRBcHBzVG9QcmVsb2FkKGV4Y2x1ZGVBcHBOYW1lcz86IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFwcHMoKS5maWx0ZXIoYXBwID0+IHtcbiAgICAgICAgICAgIGlmIChleGNsdWRlQXBwTmFtZXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXBwLnByZWxvYWQgJiYgIWV4Y2x1ZGVBcHBOYW1lcy5pbmNsdWRlcyhhcHAubmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcHAucHJlbG9hZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXBwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwcztcbiAgICB9XG59XG4iXX0=