@c8y/ngx-components 1021.2.1 → 1021.3.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 (29) hide show
  1. package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts +1 -0
  2. package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts.map +1 -1
  3. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  4. package/core/common/get-group-icon.pipe.d.ts.map +1 -1
  5. package/core/common/global-config.service.d.ts +1 -1
  6. package/core/common/global-config.service.d.ts.map +1 -1
  7. package/device-profile/device-profile-list.component.d.ts +31 -14
  8. package/device-profile/device-profile-list.component.d.ts.map +1 -1
  9. package/esm2022/auth-configuration/sso-configuration/template-parts/basic-configuration.component.mjs +5 -3
  10. package/esm2022/context-dashboard/context-dashboard.service.mjs +3 -2
  11. package/esm2022/core/common/get-group-icon.pipe.mjs +4 -1
  12. package/esm2022/core/common/global-config.service.mjs +3 -2
  13. package/esm2022/device-profile/device-profile-list.component.mjs +102 -27
  14. package/esm2022/repository/shared/repository.model.mjs +2 -1
  15. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +4 -2
  16. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +2 -1
  18. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-device-profile.mjs +110 -35
  20. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-repository-shared.mjs +1 -0
  22. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components.mjs +5 -1
  24. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  25. package/locales/locales.pot +14 -2
  26. package/package.json +1 -1
  27. package/repository/shared/repository.model.d.ts +2 -1
  28. package/repository/shared/repository.model.d.ts.map +1 -1
  29. package/repository/shared/repository.service.d.ts +1 -1
@@ -340,7 +340,8 @@ export class ContextDashboardService {
340
340
  const query = this.queriesUtil.buildQuery({
341
341
  __filter: {
342
342
  __or: dashboardType.map(t => ({
343
- __has: this.createDashboardFragment(mo, t)
343
+ // it's necessary to wrap fragment in quotes because dashboard type can contain spaces
344
+ __has: `'${this.createDashboardFragment(mo, t)}'`
344
345
  }))
345
346
  }
346
347
  });
@@ -622,4 +623,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
622
623
  providedIn: 'root'
623
624
  }]
624
625
  }], ctorParameters: () => [{ type: i1.InventoryService }, { type: i2.TabsService }, { type: i2.ModalService }, { type: i3.TranslateService }, { type: i4.Router }, { type: i2.NavigatorService }, { type: i2.Permissions }, { type: i2.AlertService }, { type: i2.DynamicComponentService }, { type: i2.GroupService }] });
625
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pGLE9BQU8sRUFDTCxZQUFZLEVBRVosdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsWUFBWSxFQUNaLFlBQVksRUFDWixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixXQUFXLEVBQ1gsTUFBTSxFQUVOLFdBQVcsRUFDWCxXQUFXLEVBRVosTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxPQUFPLEVBQ1AsR0FBRyxFQUNILEdBQUcsRUFDSCxLQUFLLEVBQ0wsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sR0FBRyxFQUNILElBQUksRUFDTCxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQ0wseUJBQXlCLEVBR3pCLG9CQUFvQixFQUdwQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3ZC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a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCwgUXVlcmllc1V0aWwgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvbnRleHREYXRhLFxuICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgZ2V0QWN0aXZhdGVkUm91dGUsXG4gIGdldHRleHQsXG4gIEdyb3VwU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBORVdfREFTSEJPQVJEX1FVRVJZX1BBUkFNLFxuICBQZXJtaXNzaW9ucyxcbiAgU3RhdHVzLFxuICBUYWIsXG4gIFRhYnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgV2lkZ2V0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBjbG9uZURlZXAsXG4gIGZvckVhY2gsXG4gIGdldCxcbiAgaGFzLFxuICBrZXlCeSxcbiAga2V5cyxcbiAgcGljayxcbiAgcmVkdWNlLFxuICBzZXQsXG4gIHNvbWVcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHRhcCwgdGhyb3dJZkVtcHR5LCB0b0FycmF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRCxcbiAgQ29udGV4dERhc2hib2FyZCxcbiAgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gIENvbnRleHREYXNoYm9hcmRUeXBlLFxuICBEYXNoYm9hcmRDb250ZXh0LFxuICBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFNUWUxJTkdfQ0xBU1NfUFJFRklYRVNcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIHtcbiAgZGFzaGJvYXJkVGFicyQ6IE9ic2VydmFibGU8VGFiW10+O1xuICBmb3JtRGlzYWJsZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICByZWFkb25seSBSRVBPUlRfUEFSVElBTF9OQU1FID0gJ3JlcG9ydF8nO1xuICBjb3B5Q2xpcGJvYXJkOiBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkO1xuICBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG4gIHJlYWRvbmx5IFZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUID0gMTA7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5WRU5UT1JZX1JPTEVTID0gW1xuICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU5cbiAgXTtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BBR0VTSVpFID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBGUkFHTUVOVF9OQU1FID0gJ2M4eV9EYXNoYm9hcmQnO1xuICBwcml2YXRlIHJlYWRvbmx5IERBU0hCT0FSRF9ST1VURV9QQVRIID0gJ2Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfU1BMSVQgPSAnISc7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfVElNRU9VVCA9IDUwMDtcbiAgcHJpdmF0ZSBfZm9ybURpc2FibGVkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBmb3JtRGlzYWJsZWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkc0NhY2hlOiB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICByZXN1bHQ6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PjtcbiAgICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgfTtcblxuICBnZXQgZm9ybURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtRGlzYWJsZWQ7XG4gIH1cblxuICBzZXQgZm9ybURpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZm9ybURpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5mb3JtRGlzYWJsZWRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm1EaXNhYmxlZCQgPSB0aGlzLmZvcm1EaXNhYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5xdWVyaWVzVXRpbCA9IG5ldyBRdWVyaWVzVXRpbCgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZCwgY29udGV4dD86IENvbnRleHREYXRhLCBuYW1lID0gJycpIHtcbiAgICBsZXQgZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiA9IHt9O1xuICAgIGFzc2lnbihcbiAgICAgIGRhc2hib2FyZCxcbiAgICAgIHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKHsgYzh5X0Rhc2hib2FyZDogZGFzaGJvYXJkQ2ZnIH0pLFxuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRIaXN0b3J5KGRhc2hib2FyZCwgZGFzaGJvYXJkQ2ZnKVxuICAgICk7XG5cbiAgICBjb25zdCBbZGFzaGJvYXJkVHlwZSwgZGFzaGJvYXJkRnJhZ21lbnRzXSA9IHRoaXMuZ2V0RGFzaGJvYXJkRnJhZ21lbnRzKFxuICAgICAgeyBjOHlfRGFzaGJvYXJkOiBkYXNoYm9hcmRDZmcgfSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBuYW1lLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGRhc2hib2FyZCA9IHsgLi4uZGFzaGJvYXJkLCAuLi5kYXNoYm9hcmRGcmFnbWVudHMgfTtcblxuICAgIGlmICh0aGlzLnNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQsIGNvbnRleHQpKSB7XG4gICAgICBhc3NpZ24oZGFzaGJvYXJkLCB7IGM4eV9HbG9iYWw6IHt9IH0pO1xuICAgIH1cbiAgICBkYXNoYm9hcmQubmFtZSA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWU7XG4gICAgY29uc3QgeyBkYXRhIH0gPVxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXAgfHxcbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZSB8fFxuICAgICAgKGNvbnRleHQgJiYgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQpXG4gICAgICAgID8gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUoXG4gICAgICAgICAgICBkYXNoYm9hcmQsXG4gICAgICAgICAgICAoY29udGV4dD8uY29udGV4dERhdGEuaWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgICAgIClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeS5jcmVhdGUoZGFzaGJvYXJkKTtcbiAgICByZXR1cm4gZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdDtcbiAgfVxuXG4gIGFzeW5jIGRldGFpbChkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBsZXQgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoZGFzaGJvYXJkTU8pO1xuICAgIGRhdGEgPSB0aGlzLmFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1ucyhkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KTtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmRNTy5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICBjb250ZXh0PzogQ29udGV4dERhdGFcbiAgKTogUHJvbWlzZTxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENmZyA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkO1xuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBhc3NpZ24oXG4gICAgICBkYXNoYm9hcmQsXG4gICAgICB0aGlzLmFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1ucyh7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9KSxcbiAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkSGlzdG9yeShkYXNoYm9hcmQsIGRhc2hib2FyZENmZylcbiAgICApO1xuXG4gICAgY29uc3Qga2VlcEZyYWdtZW50cyA9IHRoaXMuY2xlYW4ocGljayhkYXNoYm9hcmQsIFt0aGlzLkZSQUdNRU5UX05BTUUsICdpZCcsICduYW1lJ10pKTtcbiAgICBrZWVwRnJhZ21lbnRzLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5O1xuICAgIGF3YWl0IHRoaXMuc2VyaWFsaXplV2lkZ2V0Q29uZmlncyhrZWVwRnJhZ21lbnRzKTtcblxuICAgIGNvbnN0IFssIGRhc2hib2FyZFR5cGVGcmFnbWVudHNdID0gdGhpcy5nZXREYXNoYm9hcmRGcmFnbWVudHMoZGFzaGJvYXJkLCBjb250ZXh0LCAnJywgdHJ1ZSk7XG4gICAga2VlcEZyYWdtZW50cy5jOHlfR2xvYmFsID0gdGhpcy5zaG91bGRTZXRHbG9iYWwoeyAuLi5kYXNoYm9hcmQsIC4uLmRhc2hib2FyZFR5cGVGcmFnbWVudHMgfSk7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS51cGRhdGUoeyAuLi5rZWVwRnJhZ21lbnRzLCAuLi5kYXNoYm9hcmRUeXBlRnJhZ21lbnRzIH0pO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgd2l0aENvbmZpcm1hdGlvbiA9IHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdpdGhDb25maXJtYXRpb24pIHtcbiAgICAgICAgbGV0IG1zZzogc3RyaW5nID0gZ2V0dGV4dChcbiAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRhc2hib2FyZCBcInt7IGRhc2hib2FyZE5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpKSB7XG4gICAgICAgICAgbXNnID0gZ2V0dGV4dChcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiIGZyb20gYWxsIGRldmljZXMgb2YgdGhlIHR5cGUgXCJ7eyBkZXZpY2VUeXBlIH19XCIuXG4gICAgICAgICAgIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkYXNoYm9hcmQnKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtc2csIHtcbiAgICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWUsXG4gICAgICAgICAgICBkZXZpY2VUeXBlOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9rOiBnZXR0ZXh0KCdEZWxldGUnKSxcbiAgICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5kZWxldGUoZGFzaGJvYXJkKTtcbiAgICAgIGNvbnN0IHRhYlRvUmVtb3ZlID0gQXJyYXkuZnJvbSh0aGlzLnRhYnMuc3RhdGUpLmZpbmQodGFiID0+IHtcbiAgICAgICAgaWYgKHRhYi5wYXRoKSB7XG4gICAgICAgICAgcmV0dXJuIHRhYi5wYXRoLmVuZHNXaXRoKGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7ZGFzaGJvYXJkLmlkfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGFicy5yZW1vdmUodGFiVG9SZW1vdmUpO1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYnMucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkSGlzdG9yeShcbiAgICBkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+LFxuICAgIGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZFxuICApOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgaWYgKCFkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkpIHtcbiAgICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIWRhc2hib2FyZENmZy5oaXN0b3J5RGVzY3JpcHRpb24pIHtcbiAgICAgIGRhc2hib2FyZENmZy5oaXN0b3J5RGVzY3JpcHRpb24gPSB7IGNoYW5nZVR5cGU6ICdjcmVhdGUnIH07XG4gICAgfVxuXG4gICAgZGFzaGJvYXJkQ2ZnLmNyZWF0ZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gY2xvbmVEZWVwKFtkYXNoYm9hcmRDZmcsIC4uLmRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeV0pO1xuXG4gICAgaWYgKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeS5sZW5ndGggPiB0aGlzLlZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUKSB7XG4gICAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBbXG4gICAgICAgIC4uLmRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeS5zbGljZSgwLCB0aGlzLlZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUKVxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGFzaGJvYXJkO1xuICB9XG5cbiAgYWN0aXZhdGVEYXNoYm9hcmRzKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHR5cGVzOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFRhYltdPiB7XG4gICAgY29uc3QgeyBkYXNoYm9hcmRJZCB9ID0gcm91dGUucGFyYW1zO1xuICAgIGlmIChkYXNoYm9hcmRJZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZCwgdHlwZXMsIHJvdXRlLnBhcmVudC5kYXRhLmNvbnRleHREYXRhKS5waXBlKFxuICAgICAgICB0YXAoZGFzaGJvYXJkID0+IHtcbiAgICAgICAgICByb3V0ZS5kYXRhID0geyBkYXNoYm9hcmQgfTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXNoYm9hcmRUYWJzJCA9IHRoaXMuZ2V0VGFicyQocm91dGUuZGF0YS5jb250ZXh0RGF0YSwgdHlwZXMpO1xuICAgIHJldHVybiB0aGlzLmRhc2hib2FyZFRhYnMkO1xuICB9XG5cbiAgZ2V0TmFtZWREYXNoYm9hcmRPckNyZWF0ZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRXaWRnZXRzOiBXaWRnZXRbXSwgY29udGV4dD86IENvbnRleHREYXRhKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm1hcFdpZGdldHMoZGVmYXVsdFdpZGdldHMpO1xuICAgIHJldHVybiB0aGlzLmdldERhc2hib2FyZCQobmFtZSwgW0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkXSkucGlwZShcbiAgICAgIHRocm93SWZFbXB0eSgpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PlxuICAgICAgICBmcm9tKFxuICAgICAgICAgIHRoaXMuY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgd2lkZ2V0Q2xhc3NlczogeyAnZGFzaGJvYXJkLXRoZW1lLWxpZ2h0JzogdHJ1ZSwgJ3BhbmVsLXRpdGxlLXJlZ3VsYXInOiB0cnVlIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVOYXZpZ2F0b3JJdGVtKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMubmF2aWdhdG9yLnN0YXRlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBpZiAobm9kZS5wYXRoID09PSBgcmVwb3J0cy8ke21vLmlkfWApIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3IucmVtb3ZlKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChtby5jOHlfSXNOYXZpZ2F0b3JOb2RlKSB7XG4gICAgICBjb25zdCBub2RlVG9BZGQgPSBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICAgIGxhYmVsOiBtby5uYW1lLFxuICAgICAgICBwYXRoOiBgcmVwb3J0cy8ke21vLmlkfWAsXG4gICAgICAgIGljb246IG1vLmljb24sXG4gICAgICAgIHByaW9yaXR5OiBtby5wcmlvcml0eVxuICAgICAgfSk7XG4gICAgICB0aGlzLm5hdmlnYXRvci5hZGQobm9kZVRvQWRkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICgvZGFzaGJvYXJkLy50ZXN0KHRoaXMucm91dGVyLnVybCkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpLFxuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIFtORVdfREFTSEJPQVJEX1FVRVJZX1BBUkFNXTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKC9eXFwvKGRldmljZXxncm91cClcXC9bMC05XSskLy50ZXN0KHRoaXMucm91dGVyLnVybCkpIHtcbiAgICAgIC8vIGluIGNhc2UgdGhlIGFkZCBkYXNoYm9hcmQgYnV0dG9uIGlzIHRoZSBvbmx5IHRhYiBvbiB0aGF0IHJvdXRlXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nLCB0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRILCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdXNlciBpcyBhYmxlIHRvIGVkaXQgZGFzaGJvYXJkIGFjY29yZGluZyB0byBoaXMgcm9sZXMgYW5kIGRhc2hib2FyZCBvd25lcnNoaXAuXG4gICAqXG4gICAqIEBwYXJhbSBtbyAtIERhc2hib2FyZCBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB1c2VyIGlzIGFibGUgdG8gZWRpdCBkYXNoYm9hcmQsIGZhbHNlIGlmIGhlIGNhbm5vdC5cbiAgICovXG4gIGFzeW5jIGNhbkVkaXREYXNoYm9hcmQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdCh0aGlzLklOVkVOVE9SWV9ST0xFUywgbW8pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIGhhcyBwZXJtaXNzaW9ucyB0byBjb3B5IGRhc2hib2FyZCBhY2NvcmRpbmcgdG8gaGlzIHJvbGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGNvcHkgZGFzaGJvYXJkLCBmYWxzZSBpZiBoZSBjYW5ub3QuXG4gICAqL1xuICBoYXNQZXJtaXNzaW9uc1RvQ29weURhc2hib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5oYXNBbnlSb2xlKFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQ1JFQVRFLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQ1JFQVRFXG4gICAgXSk7XG4gIH1cblxuICBpc05hbWVkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc1JlcG9ydChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke3RoaXMuUkVQT1JUX1BBUlRJQUxfTkFNRX1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNEZXZpY2VUeXBlKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdQcm9wID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcCk7XG4gICAgICBpZiAoIW1hdGNoaW5nUHJvcCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVyZSBtaWdodCBiZSBtYXRjaGluZyBrZXksIGJ1dCBpdHMgdmFsdWUgY2FuIGJlIHt9IG9yIG51bGxcbiAgICAgICAgcmV0dXJuICEhZGFzaGJvYXJkW3Byb3BdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaXNEZXZpY2VEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2V9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0dyb3VwRGFzaGJvYXJkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuR3JvdXB9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZERhc2hib2FyZFN0eWxlcyhzdHlsZUxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHN0eWxlTGlzdC5maWx0ZXIoYyA9PlxuICAgICAgU1RZTElOR19DTEFTU19QUkVGSVhFUy5zb21lKGNsYXNzUHJlZml4ID0+IGMuc3RhcnRzV2l0aChjbGFzc1ByZWZpeCkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0eWxpbmcoc3R5bGVMaXN0LCBzdHlsZU5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IHN0eWxpbmcgPSBzdHlsZUxpc3QuZmluZChcbiAgICAgIHN0eWxlID0+IHN0eWxlICYmIG5ldyBSZWdFeHAoYC0ke3N0eWxlTmFtZX0kYCwgJ2knKS50ZXN0KHN0eWxlLmNsYXNzKVxuICAgICk7XG4gICAgcmV0dXJuIHN0eWxpbmcgPyBzdHlsaW5nLmNsYXNzIDogZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbWFwV2lkZ2V0cyh3aWRnZXRzOiBXaWRnZXRbXSkge1xuICAgIHJldHVybiBrZXlCeShcbiAgICAgIHdpZGdldHMubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5pZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zdWJzdHIoMik7XG4gICAgICAgIHJldHVybiB3aWRnZXQ7XG4gICAgICB9KSxcbiAgICAgICdpZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZE9yTmFtZSwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSwgbW8/OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZS5nZXQoZGFzaGJvYXJkSWRPck5hbWUpO1xuXG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IG1vXG4gICAgICA/IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpXG4gICAgICA6IHRoaXMuZ2V0TmFtZWREYXNoYm9hcmQoZGFzaGJvYXJkSWRPck5hbWUpO1xuXG4gICAgY29uc3QgY2FjaGVSZWZyZXNoID0gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyQoZGFzaGJvYXJkcykucGlwZShcbiAgICAgIHRhcChkYXNoYm9hcmQgPT4gdGhpcy5jYWNoZURhc2hib2FyZChkYXNoYm9hcmQpKSxcbiAgICAgIGZpbHRlcihcbiAgICAgICAgZGFzaGJvYXJkID0+XG4gICAgICAgICAgZGFzaGJvYXJkLmlkID09PSBkYXNoYm9hcmRJZE9yTmFtZSB8fFxuICAgICAgICAgIGhhcyhcbiAgICAgICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgICAgIGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHtkYXNoYm9hcmRJZE9yTmFtZX1gXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIGNhY2hlID8gb2YoY2FjaGUpIDogY2FjaGVSZWZyZXNoO1xuICB9XG5cbiAgYXN5bmMgcGFzdGVEYXNoYm9hcmQobmV3Q29udGV4dDogRGFzaGJvYXJkQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNvcHlDbGlwYm9hcmQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhc2hib2FyZFRvUGFzdGUgPSB0aGlzLmNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmQsXG4gICAgICAgICAgbmV3Q29udGV4dC5jb250ZXh0RGF0YSxcbiAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuY29udGV4dC5jb250ZXh0RGF0YVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmNyZWF0ZSh0aGlzLmNsZWFuKGRhc2hib2FyZFRvUGFzdGUpLCBuZXdDb250ZXh0KTtcblxuICAgICAgICAvLyBsaW5raW5nIGNoaWxkQWRkaXRpb25zIGZvciBlLmcuIHRvIGdyYW50IGFjY2VzcyB0byB0aGUgaW1hZ2VzIHVwbG9hZGVkIGJ5IHRoZSBpbWFnZSB3aWRnZXQgZm9yIHVzZXJzIHdpdGggb25seSBpbnZlbnRvcnkgcm9sZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YTogY2hpbGRBZGRpdGlvbnMgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zTGlzdChcbiAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuZGFzaGJvYXJkSWQsXG4gICAgICAgICAgeyBwYWdlU2l6ZTogMjAwMCB9XG4gICAgICAgICk7XG4gICAgICAgIGlmIChjaGlsZEFkZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0J1bGtBZGQoY2hpbGRBZGRpdGlvbnMsIGRhc2hib2FyZC5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb0Rhc2hib2FyZChkYXNoYm9hcmQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMuYWxlcnQud2FybmluZyhnZXR0ZXh0KCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIHRoaXMgYWN0aW9uLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBmcmFnbWVudCB0aGF0IGFzc29jaWF0ZXMgZGFzaGJvYXJkcyB3aXRoIGRldmljZS9hc3NldC4gSXQgY29uc2lzdHMgb2YgdGhyZWUgZWxlbWVudHM6XG4gICAqIC0gRlJBR01FTlRfTkFNRSAtIHN0YXRpYyBzdHJpbmdcbiAgICogLSBkYXNoYm9hcmQgdHlwZSAoZS5nLiAnZ3JvdXAnLCAnZGV2aWNlJylcbiAgICogLSBmcmFnbWVudCB2YWx1ZSAoIGlkIG9mIGRldmljZS9hc3NldCBpZiBpdCBpcyBub3QgdHlwZWQgZGFzaGJvYXJkOyBkZXZpY2VUeXBlVmFsdWUgcHJvcGVydHkgb2YgZGFzaGJvYXJkIGlmIGl0IGlzIHR5cGUgZGFzaGJvYXJkKVxuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciBkZXZpY2UgZGFzaGJvYXJkOiAnYzh5X0Rhc2hib2FyZCFkZXZpY2UhNzczMjAwJ1xuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciBncm91cCBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIWdyb3VwITg0MTI5MjA4J1xuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciB0eXBlZCBkZXZpY2UgZGFzaGJvYXJkOiAnYzh5X0Rhc2hib2FyZCF0eXBlIWM4eV9sd20ybV9jb25uZWN0b3JfZGV2aWNlJ1xuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dERhc2hib2FyZFR5cGUgVHlwZSBvZiBkYXNoYm9hcmRcbiAgICogQHBhcmFtIHZhbHVlIEZyYWdtZW50IHZhbHVlXG4gICAqIEByZXR1cm5zIEZyYWdtZW50IGZvciBkYXNoYm9hcmRcbiAgICovXG4gIGNyZWF0ZUZyYWdtZW50S2V5KGNvbnRleHREYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFt0aGlzLkZSQUdNRU5UX05BTUUsIGNvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZV0uam9pbih0aGlzLklOREVYX1NQTElUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgZGFzaGJvYXJkIGNhbiBiZSBzZXQgdG8gdHlwZSBkYXNoYm9hcmQuXG4gICAqIEZpcnN0LCBpdCBjaGVja3MgaWYgZGV2aWNlVHlwZVZhbHVlIGV4aXN0cyBhbmQgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBzZXQgZGFzaGJvYXJkIHR5cGUuXG4gICAqIFRoZW4sIGNhc2UgZnJvbSBzZW5zb3IgYXBwIGlzIGNoZWNrZWQtIGRhc2hib2FyZCBjcmVhdGVkIHdpdGggc2Vuc29yIGFwcCBoYXMgZGV2aWNlVHlwZSBzZXQgdG8gdHJ1ZSBidXRcbiAgICogdHlwZSBmcmFnbWVudCBpcyBtaXNzaW5nLSB3ZSBkbyBub3Qgc3VwcG9ydCB0aGlzIGNvbWJpbmF0aW9uLlxuICAgKiBAcGFyYW0gbW8gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0XG4gICAqIEBwYXJhbSBkZXZpY2VUeXBlVmFsdWUgVmFsdWUgb2YgZGV2aWNlIHR5cGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBkYXNoYm9hcmQgY2FuIGJlIHNldCB0byB0eXBlIGRhc2hib2FyZCwgZmFsc2UgaWYgaXQgaXMgZm9yYmlkZGVuLlxuICAgKi9cbiAgc2hvdWxkQWxsb3dUb1NldERhc2hib2FyZFR5cGUoXG4gICAgbW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIGRldmljZVR5cGVWYWx1ZTogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZGV2aWNlVHlwZVZhbHVlIHx8ICF0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUodGhpcy5JTlZFTlRPUllfUk9MRVMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVGcmFnbWVudCA9IHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkoQ29udGV4dERhc2hib2FyZFR5cGUuVHlwZSwgZGV2aWNlVHlwZVZhbHVlKTtcbiAgICBpZiAobW8uYzh5X0Rhc2hib2FyZCAmJiBtby5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGUgJiYgIW1vW3R5cGVGcmFnbWVudF0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjcmVhdGVSZXBvcnQocmVwb3J0Q2ZnOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0Pikge1xuICAgIGNvbnN0IHJlcG9ydDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKHJlcG9ydCwgcmVwb3J0Q2ZnKTtcbiAgICBPYmplY3QuYXNzaWduKHJlcG9ydCwgeyBjOHlfUmVwb3J0OiB7fSB9KTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY3JlYXRlKHJlcG9ydCk7XG4gIH1cblxuICBhZGRSZXBvcnROYXZpZ2F0b3JOb2RlKHJlcG9ydDogSU1hbmFnZWRPYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gbmV3IE5hdmlnYXRvck5vZGUoe1xuICAgICAgbGFiZWw6IHJlcG9ydC5uYW1lLFxuICAgICAgcGF0aDogYHJlcG9ydHMvJHtyZXBvcnQuaWR9YCxcbiAgICAgIGljb246IHJlcG9ydC5pY29uLFxuICAgICAgcHJpb3JpdHk6IHJlcG9ydC5wcmlvcml0eVxuICAgIH0pO1xuICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlKTtcbiAgfVxuXG4gIGdldENvbnRleHRGb3JHUyhtbzogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNEZXZpY2UobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkRFVklDRTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBTZXJ2aWNlLmlzQXNzZXQobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkFTU0VUO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNHcm91cChtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuR1JPVVA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbnRleHREYXNoYm9hcmRzKFxuICAgIG1vOiBJTWFuYWdlZE9iamVjdCxcbiAgICBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdXG4gICk6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoe1xuICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgX19vcjogZGFzaGJvYXJkVHlwZS5tYXAodCA9PiAoe1xuICAgICAgICAgIF9faGFzOiB0aGlzLmNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vLCB0KVxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGNhY2hlSGFzVmFsaWRSZXNwb25zZSA9XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRzQ2FjaGUgJiZcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZHNDYWNoZS5xdWVyeSA9PT0gcXVlcnkgJiZcbiAgICAgIG5vdyAtIHRoaXMuY29udGV4dERhc2hib2FyZHNDYWNoZS50aW1lc3RhbXAgPCB0aGlzLkNBQ0hFX1RJTUVPVVQ7XG5cbiAgICBpZiAoY2FjaGVIYXNWYWxpZFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0RGFzaGJvYXJkc0NhY2hlLnJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkc0NhY2hlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRzQ2FjaGUgPSB7XG4gICAgICBxdWVyeSxcbiAgICAgIHJlc3VsdDogdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5ERUZBVUxUX1BBR0VTSVpFXG4gICAgICB9KSxcbiAgICAgIHRpbWVzdGFtcDogbm93XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0RGFzaGJvYXJkc0NhY2hlLnJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHVwbGUgZGVzY3JpYmluZyB0aGUgZGFzaGJvYXJkIHR5cGUgYW5kIGl0cyBmcmFnbWVudHMuIEZvciBhc3NldHMgbGlrZSBkZXZpY2VzIGFuZCBncm91cHMsIGl0J3MgcG9zc2libGVcbiAgICogdG8gaGF2ZSB0d28gZnJhZ21lbnRzOiBvbmUgaW5kaWNhdGluZyB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlL2Fzc2V0IHdpdGggaXRzIElELCBhbmQgdGhlIHNlY29uZCBpbmRpY2F0aW5nXG4gICAqIHRoZSBkZXZpY2UvYXNzZXQgdHlwZSAoaWYgdGhlIGRhc2hib2FyZCBpcyBtZWFudCB0byBiZSBhcHBsaWVkIHRvIGFsbCBhc3NldHMgb2YgdGhpcyB0eXBlKS5cbiAgICpcbiAgICogQHBhcmFtIGRhc2hib2FyZE1PIC0gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gY29udGV4dCAtIENvbnRleHQgZGF0YSBvZiBhc3NldC5cbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBpc0VkaXQgLSBUcnVlIGlmIGV4aXN0aW5nIGRhc2hib2FyZCBpcyB1cGRhdGVkLCBmYWxzZSB3aGVuIGl0J3MgY3JlYXRpb24gb2YgbmV3IGRhc2hib2FyZC5cbiAgICogQHJldHVybnMgVHVwbGUgb2YgZGFzaGJvYXJkIHR5cGUgYW5kIG9iamVjdCBjb250YWluaW5nIGRhc2hib2FyZCBmcmFnbWVudHMuXG4gICAqL1xuICBwcml2YXRlIGdldERhc2hib2FyZEZyYWdtZW50cyhcbiAgICBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgY29udGV4dDogQ29udGV4dERhdGEsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGlzRWRpdDogYm9vbGVhblxuICApOiBbQ29udGV4dERhc2hib2FyZFR5cGUsIFJlY29yZDxzdHJpbmcsIG9iamVjdD5dIHtcbiAgICBsZXQgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGU7XG4gICAgY29uc3QgaWQgPSAoY29udGV4dD8uY29udGV4dERhdGE/LmlkIGFzIHN0cmluZykgfHwgJyc7XG4gICAgY29uc3QgZnJhZ21lbnRzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cbiAgICBpZiAoY29udGV4dD8uY29udGV4dCA9PT0gVmlld0NvbnRleHQuRGV2aWNlIHx8IGNvbnRleHQ/LmNvbnRleHQgPT09IFZpZXdDb250ZXh0Lkdyb3VwKSB7XG4gICAgICAvLyBnZXQgYmFzZSB0eXBlIGZvciBkZXZpY2Ugb3IgZ3JvdXBcbiAgICAgIGNvbnN0IGRlZmF1bHRUeXBlID1cbiAgICAgICAgY29udGV4dC5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2VcbiAgICAgICAgICA/IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVxuICAgICAgICAgIDogQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXA7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlXG4gICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuVHlwZVxuICAgICAgICA6IGRlZmF1bHRUeXBlO1xuXG4gICAgICAvLyBjbGVhciBmcmFnbWVudHMgZnJvbSBvdGhlciBhc3NldCBpZiBjdXJyZW50IGFzc2V0IGlzIG5vdCBvcmlnaW4gb2YgdGhpcyBkYXNoYm9hcmRcbiAgICAgIHRoaXMuY2xlYXJSZWR1bmRhbnRGcmFnbWVudChkYXNoYm9hcmRNTywgZGVmYXVsdFR5cGUsIGZyYWdtZW50cyk7XG5cbiAgICAgIC8vIGFkZCBiYXNlIGZyYWdtZW50IGZvciBwYXJ0aWN1bGFyIGFzc2V0XG4gICAgICBjb25zdCBkZXZpY2VPckdyb3VwRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KGRlZmF1bHRUeXBlLCBpZCk7XG4gICAgICBmcmFnbWVudHNbZGV2aWNlT3JHcm91cEZyYWdtZW50S2V5XSA9IHt9O1xuXG4gICAgICAvLyBhZGQgb3IgY2xlYXIgdHlwZSBmcmFnbWVudFxuICAgICAgaWYgKGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZSB8fCBpc0VkaXQpIHtcbiAgICAgICAgY29uc3QgdHlwZUZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShcbiAgICAgICAgICBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlLFxuICAgICAgICAgIGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGZyYWdtZW50c1t0eXBlRnJhZ21lbnRLZXldID0gZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlID8ge30gOiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQ7XG4gICAgICBjb25zdCBuYW1lZEZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZCwgbmFtZSk7XG4gICAgICBmcmFnbWVudHNbbmFtZWRGcmFnbWVudEtleV0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2Rhc2hib2FyZFR5cGUsIGZyYWdtZW50c107XG4gIH1cbiAgLyoqXG4gICAqIENsZWFycyBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGVzIGZyb20gb3RoZXIgbWFuYWdlZCBvYmplY3QuXG4gICAqIEUuZy4gdHlwZWQgZGFzaGJvYXJkIGlzIGNyZWF0ZWQgZm9yIGRldmljZSBBIG9mIHR5cGUgYzh5X01RVFREZXZpY2UgYW5kIGlkIDEsIHNvIGl0IGdldHMgZnJhZ21lbnRzIG9iamVjdFxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITE6IHt9LFxuICAgKiBjOHlfRGFzaGJvYXJkIXR5cGUhYzh5X01RVFREZXZpY2U6IHt9XG4gICAqIH1cbiAgICpgYGBcbiAgICogdGhlbiwgb24gZGV2aWNlIEIgb2YgdHlwZSBjOHlfTVFUVERldmljZSBhbmQgaWQgMiwgd2hpY2ggYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgZGFzaGJvYXJkLCBkZXZpY2VUeXBlIGlzIHNldCB0b1xuICAgKiBmYWxzZSwgc28gZGFzaGJvYXJkIGlzIG5vdCB0eXBlZCBkYXNoYm9hcmQgYW55bW9yZSBhbmQgbm93IGJlbG9uZ3MgdG8gZGV2aWNlIEIsIHRoZXJlZm9yZSBmcmFnbWVudHMgc2hvdWxkIGxvb2sgbGlrZVxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITE6IG51bGwsIC8vIHRoaXMgdmFsdWUgaXMgY2xlYXJlZCBiZWNhdXNlIGRhc2hib2FyZCBpcyBkb2Vzbid0IGJlbG9uZyB0byBkZXZpY2UgQSBhbnltb3JlXG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITI6IHt9LCAvLyBhc3NpZ24gZGFzaGJvYXJkIHRvIGRldmljZSBCXG4gICAqIGM4eV9EYXNoYm9hcmQhdHlwZSFjOHlfTVFUVERldmljZTogbnVsbCAvLyB0aGlzIHZhbHVlIGlzIGNsZWFyZWQgaW4gZ2V0RGFzaGJvYXJkRnJhZ21lbnRzIG1ldGhvZCBhcyBpdCdzIG5vdCB0eXBlZCBkYXNoYm9hcmQgYW55bW9yZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZGFzaGJvYXJkTU8gLSBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSB0eXBlIC0gQ29udGV4dCBkYXNoYm9hcmQgdHlwZS5cbiAgICogQHBhcmFtIGZyYWdtZW50cyAtIEZyYWdtZW50cyBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyUmVkdW5kYW50RnJhZ21lbnQoXG4gICAgZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIHR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlLFxuICAgIGZyYWdtZW50czogUmVjb3JkPHN0cmluZywgb2JqZWN0PlxuICApOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhkYXNoYm9hcmRNTylcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkodHlwZSwgJycpKSlcbiAgICAgIC5mb3JFYWNoKGtleSA9PiAoZnJhZ21lbnRzW2tleV0gPSBudWxsKSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBtaWdyYXRlIGRhc2hib2FyZHMgZnJvbSBwcmV2aW91cyAxMiBjb2x1bW5zIGxheW91dCB0byAyNCBjb2x1bW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnM8VCBleHRlbmRzIHsgYzh5X0Rhc2hib2FyZD86IENvbnRleHREYXNoYm9hcmQgfT4oXG4gICAgZGFzaGJvYXJkczogVFtdXG4gICk6IFRbXTtcbiAgcHJpdmF0ZSBhZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnM8VCBleHRlbmRzIHsgYzh5X0Rhc2hib2FyZD86IENvbnRleHREYXNoYm9hcmQgfT4oXG4gICAgZGFzaGJvYXJkczogVFxuICApOiBUO1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUIHwgVFtdXG4gICk6IFQgfCBUW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhc2hib2FyZHMpKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcy5tYXAoZGFzaGJvYXJkID0+IHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKGRhc2hib2FyZCkpO1xuICAgIH1cbiAgICAvLyBpZiBgY29sdW1uc2AgYXR0cmlidXRlIGV4aXN0cywgZGFzaGJvYXJkIHdhcyBhbHJlYWR5IGFkanVzdGVkLlxuICAgIGlmIChkYXNoYm9hcmRzLmM4eV9EYXNoYm9hcmQuY29sdW1ucykge1xuICAgICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gICAgfVxuXG4gICAgZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNvbHVtbnMgPSAyNDtcbiAgICBpZiAoIWRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gICAgfVxuXG4gICAgLy8gTmV3bHkgY3JlYXRlZCBOYW1lZENvbnRleHREYXNoYm9hcmRzIGFyZSBzdGlsbCBjcmVhdGVkIHdpdGggMTIgY29sdW1ucyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gRGVmYXVsdCB3aWRnZXRzIG1pZ2h0IGJlIGFscmVhZHkgY29uZmlndXJlZCBmb3IgMjQgY29sdW1ucy5cbiAgICAvLyBJZiBhIHdpZGdldCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgZm9yIG1vcmUgdGhhbiAxMiBjb2x1bW5zLCB3ZSBzaG91bGQgbm90IGFkanVzdCBpdC5cbiAgICBjb25zdCBhbHJlYWR5SGFzV2lkZ2V0c0NvbmZpZ3VyZWRGb3JNb3JlVGhhbjEyQ29sdW1ucyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICBkYXNoYm9hcmRzLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW5cbiAgICApLnNvbWUod2lkZ2V0ID0+IHdpZGdldC5feCArIHdpZGdldC5fd2lkdGggPiAxMik7XG4gICAgaWYgKGFscmVhZHlIYXNXaWRnZXRzQ29uZmlndXJlZEZvck1vcmVUaGFuMTJDb2x1bW5zKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICB9XG5cbiAgICAvLyB3ZSBuZWVkIHRvIG11bHRpcGx5IGJvdGggX3dpZHRoIGFuZCBfeCBhdHRyaWJ1dGVzIHdpdGggMiB0byBtaWdyYXRlIGZyb20gMTIgdG8gMjQgY29sdW1ucy5cbiAgICBPYmplY3QudmFsdWVzKGRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbikuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgaWYgKHdpZGdldC5fd2lkdGgpIHtcbiAgICAgICAgd2lkZ2V0Ll93aWR0aCA9IHdpZGdldC5fd2lkdGggKiAyO1xuICAgICAgfVxuICAgICAgaWYgKHdpZGdldC5feCkge1xuICAgICAgICB3aWRnZXQuX3ggPSB3aWRnZXQuX3ggKiAyO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXNoYm9hcmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXJpYWxpemVXaWRnZXRDb25maWdzKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNsb25lRGVlcChkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbik7XG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdzID0gT2JqZWN0LnZhbHVlcyhjaGlsZHJlbik7XG4gICAgY29uc3QgZGV0YWlscyA9IGNvbmZpZ3MubWFwKCh7IGNvbXBvbmVudElkLCBjb25maWcgfSkgPT4gKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudC5zZXJpYWxpemVDb25maWdzKGRldGFpbHMpO1xuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LCBpbmRleCkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgc2V0KGRldGFpbHNbaW5kZXhdLmNvbmZpZywga2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb250ZXh0RGFzaGJvYXJkQ29weShcbiAgICBkYXNoOiBDb250ZXh0RGFzaGJvYXJkLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICk6IENvbnRleHREYXNoYm9hcmQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcmVkdWNlKFxuICAgICAgZGFzaC5jaGlsZHJlbixcbiAgICAgIChfY2hpbGRyZW4sIGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaWQgfSA9IGNoaWxkO1xuICAgICAgICBjb25zdCBjZmcgPSBjaGlsZC5jb25maWc7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0NvcHkgPSB7XG4gICAgICAgICAgZGV2aWNlOiBkZXZpY2UgPT4gdGhpcy5yZXBsYWNlQ29udGV4dEluT2JqKGRldmljZSwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50czogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhUG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNHYXVnZTogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzTGFiZWxzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNmZykge1xuICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLCBwcm9wZXJ0aWVzVG9Db3B5KTtcbiAgICAgICAgICBpZiAoY2ZnLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLm9wdGlvbnMsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZHJlbltpZF0gPSBjbG9uZURlZXAoY2hpbGQpO1xuICAgICAgICByZXR1cm4gX2NoaWxkcmVuO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGRhc2guY2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIGNvbnN0IGlzVHlwZURhc2hib2FyZCA9IGRhc2guZGV2aWNlVHlwZSAmJiAhIWRhc2guZGV2aWNlVHlwZVZhbHVlO1xuICAgIGlmIChpc1R5cGVEYXNoYm9hcmQpIHtcbiAgICAgIGRhc2guZGV2aWNlVHlwZVZhbHVlID0gbmV3Q29udGV4dC50eXBlO1xuICAgIH1cbiAgICByZXR1cm4gZGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgY29weVByb3BlcnRpZXMob2JqLCBwcm9wZXJ0aWVzVG9Db3B5KSB7XG4gICAgZm9yRWFjaChwcm9wZXJ0aWVzVG9Db3B5LCAoY29weUZuLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKG9ialtwcm9wZXJ0eV0pIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IGNvcHlGbihvYmpbcHJvcGVydHldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoXG4gICAgZGF0YVBvaW50cyxcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBkYXRhUG9pbnRzLmZvckVhY2goZHAgPT4ge1xuICAgICAgZHAuX190YXJnZXQgPSB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZHAuX190YXJnZXQsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhUG9pbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluT2JqKFxuICAgIG9iajogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKSB7XG4gICAgaWYgKG9iaiAmJiBvYmouaWQgPT09IG9sZENvbnRleHQuaWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCBwaWNrKG5ld0NvbnRleHQsIFsnaWQnLCAnbmFtZSddKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcml2YXRlIGdldFRhYnMkKG1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSkge1xuICAgIGNvbnN0IGRhc2hib2FyZHMgPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzKG1vLCBkYXNoYm9hcmRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZGFzaGJvYXJkID0+IHRoaXMudmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQpKSxcbiAgICAgIG1lcmdlTWFwKChbZGFzaGJvYXJkXSkgPT4gdGhpcy5yZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KGRhc2hib2FyZCkpLFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgbWFwKGRhc2hib2FyZCA9PiB0aGlzLmNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQpKSxcbiAgICAgIHRvQXJyYXkoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeURhc2hib2FyZEF2YWlsYWJpbGl0eSQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGdsb2JhbFJvbGVzSWRzID0gZGFzaGJvYXJkPy5jOHlfRGFzaGJvYXJkPy5nbG9iYWxSb2xlc0lkcztcbiAgICBjb25zdCBjYW5FZGl0ID0gZnJvbShcbiAgICAgIHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdCh0aGlzLklOVkVOVE9SWV9ST0xFUywgZGFzaGJvYXJkLCB7IHNraXBSZXF1ZXN0Q2hlY2s6IHRydWUgfSlcbiAgICApO1xuICAgIGNvbnN0IGhhc0FueUdsb2JhbFJvbGUgPVxuICAgICAgIWdsb2JhbFJvbGVzSWRzIHx8IGdsb2JhbFJvbGVzSWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEXG4gICAgICAgID8gb2YodHJ1ZSlcbiAgICAgICAgOiBvZih0aGlzLnBlcm1pc3Npb25zLmhhc0FueUdsb2JhbFJvbGUoZ2xvYmFsUm9sZXNJZHMpKTtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtvZihkYXNoYm9hcmQpLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkucGlwZShcbiAgICAgIGZpbHRlcigoWywgY2FuRWRpdCwgaGFzQW55R2xvYmFsUm9sZV0pID0+IGNhbkVkaXQgfHwgaGFzQW55R2xvYmFsUm9sZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0RGFzaGJvYXJkcyQocmVxdWVzdDogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+KSB7XG4gICAgcmV0dXJuIGZyb20ocmVxdWVzdCkucGlwZShcbiAgICAgIG1lcmdlTWFwKHJlc3BvbnNlID0+XG4gICAgICAgIHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKHJlc3BvbnNlLmRhdGEgYXMgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3RbXSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyBhbHJlYWR5IGNvcnJ1cHRlZCBkYXNoYm9hcmRzIGZyb20gZGFzaGJvYXJkTW8gcHJvcGVydHkuXG4gICAqIEFkZGVkIHRvIGZpeCBkYXNoYm9hcmRzIG9uIHRoZSBjbG91ZCBpbnN0YW5jZSAoZXUtbGF0ZXN0KS5cbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBnb2luZyB0byBiZSByZW1vdmVkIGFmdGVyIDEwMDcuNy4wLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KFxuICAgIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENvcHkgPSBjbG9uZURlZXAoZGFzaGJvYXJkKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdldChkYXNoYm9hcmRDb3B5LCAnYzh5X0Rhc2hib2FyZC5jaGlsZHJlbicpO1xuICAgIGxldCB1cGRhdGVEYXNoYm9hcmQgPSBmYWxzZTtcblxuICAgIGZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgIGlmIChnZXQoY2hpbGQsICdjb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCcpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dDtcbiAgICAgICAgdXBkYXRlRGFzaGJvYXJkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnZXQoY2hpbGQsICdjb25maWcuZGFzaGJvYXJkTW8nKSkge1xuICAgICAgICBkZWxldGUgY2hpbGQuY29uZmlnLmRhc2hib2FyZE1vO1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHVwZGF0ZURhc2hib2FyZCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGUoZGFzaGJvYXJkQ29weSk7XG4gICAgfVxuICAgIHJldHVybiBkYXNoYm9hcmRDb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWNoZURhc2hib2FyZChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkLmlkLCBkYXNoYm9hcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXNoYm9hcmRUYWIoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgYzh5X0Rhc2hib2FyZDogX2Rhc2hib2FyZCwgaWQgfSA9IGRhc2hib2FyZDtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogX2Rhc2hib2FyZC5pY29uLFxuICAgICAgcGF0aDogYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtpZH1gLFxuICAgICAgbGFiZWw6IF9kYXNoYm9hcmQubmFtZSxcbiAgICAgIHByaW9yaXR5OiBfZGFzaGJvYXJkLnByaW9yaXR5LFxuICAgICAgaGlkZTogdGhpcy5pc1JlcG9ydChkYXNoYm9hcmQpLFxuICAgICAgYmFkZ2U6XG4gICAgICAgIF9kYXNoYm9hcmQuZGV2aWNlVHlwZSAmJlxuICAgICAgICB0aGlzLnNob3VsZEFsbG93VG9TZXREYXNoYm9hcmRUeXBlKGRhc2hib2FyZCwgX2Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUpXG4gICAgICAgICAgPyBnZXR0ZXh0KCdEYXNoYm9hcmQgdGVtcGxhdGUnKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHRvb2x0aXBUZXh0OiBfZGFzaGJvYXJkLmRlc2NyaXB0aW9uIHx8IGdldHRleHQoJ0Rhc2hib2FyZCB0ZW1wbGF0ZScpXG4gICAgfSBhcyBUYWI7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuKGRhc2hib2FyZCkge1xuICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXNoYm9hcmQsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSAnJCRoYXNoS2V5JyB8fCBrZXkgPT09ICdrbGFzc2VzJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gIH1cblxuICBwcml2YXRlIGdldE5hbWVkRGFzaGJvYXJkKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIGZyYWdtZW50VHlwZTogYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke25hbWV9YCxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vOiBJTWFuYWdlZE9iamVjdCwgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG1vLmM4eV9SZXBvcnQpIHtcbiAgICAgIHZhbHVlID0gYCR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfSR7bW8uaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0eXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlID8gbW8udHlwZSA6IG1vLmlkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke3R5cGV9JHt0aGlzLklOREVYX1NQTElUfSR7dmFsdWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sIGNvbnRleHQ/KSB7XG4gICAgaWYgKFxuICAgICAgKCFjb250ZXh0ICYmIHRoaXMuaXNOYW1lZChkYXNoYm9hcmQpICYmICF0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCkpIHx8XG4gICAgICB0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
626
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1kYXNoYm9hcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2NvbnRleHQtZGFzaGJvYXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQTBCLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBa0IsZ0JBQWdCLEVBQWUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3pGLE9BQU8sRUFDTCxZQUFZLEVBRVosdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsWUFBWSxFQUNaLFlBQVksRUFDWixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2hCLHlCQUF5QixFQUN6QixXQUFXLEVBQ1gsTUFBTSxFQUVOLFdBQVcsRUFDWCxXQUFXLEVBRVosTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxPQUFPLEVBQ1AsR0FBRyxFQUNILEdBQUcsRUFDSCxLQUFLLEVBQ0wsSUFBSSxFQUNKLElBQUksRUFDSixNQUFNLEVBQ04sR0FBRyxFQUNILElBQUksRUFDTCxNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRixPQUFPLEVBQ0wseUJBQXlCLEVBR3pCLG9CQUFvQixFQUdwQixrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3ZC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QUZ0QixNQUFNOzsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCwgUXVlcmllc1V0aWwgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBbGVydFNlcnZpY2UsXG4gIENvbnRleHREYXRhLFxuICBEeW5hbWljQ29tcG9uZW50U2VydmljZSxcbiAgZ2V0QWN0aXZhdGVkUm91dGUsXG4gIGdldHRleHQsXG4gIEdyb3VwU2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBOYXZpZ2F0b3JOb2RlLFxuICBOYXZpZ2F0b3JTZXJ2aWNlLFxuICBORVdfREFTSEJPQVJEX1FVRVJZX1BBUkFNLFxuICBQZXJtaXNzaW9ucyxcbiAgU3RhdHVzLFxuICBUYWIsXG4gIFRhYnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgV2lkZ2V0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtcbiAgYXNzaWduLFxuICBjbG9uZURlZXAsXG4gIGZvckVhY2gsXG4gIGdldCxcbiAgaGFzLFxuICBrZXlCeSxcbiAga2V5cyxcbiAgcGljayxcbiAgcmVkdWNlLFxuICBzZXQsXG4gIHNvbWVcbn0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZyb20sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHRhcCwgdGhyb3dJZkVtcHR5LCB0b0FycmF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRCxcbiAgQ29udGV4dERhc2hib2FyZCxcbiAgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gIENvbnRleHREYXNoYm9hcmRUeXBlLFxuICBEYXNoYm9hcmRDb250ZXh0LFxuICBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkLFxuICBQUk9EVUNUX0VYUEVSSUVOQ0UsXG4gIFNUWUxJTkdfQ0xBU1NfUFJFRklYRVNcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHREYXNoYm9hcmRTZXJ2aWNlIHtcbiAgZGFzaGJvYXJkVGFicyQ6IE9ic2VydmFibGU8VGFiW10+O1xuICBmb3JtRGlzYWJsZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICByZWFkb25seSBSRVBPUlRfUEFSVElBTF9OQU1FID0gJ3JlcG9ydF8nO1xuICBjb3B5Q2xpcGJvYXJkOiBEYXNoYm9hcmRDb3B5Q2xpcGJvYXJkO1xuICBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG4gIHJlYWRvbmx5IFZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUID0gMTA7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5WRU5UT1JZX1JPTEVTID0gW1xuICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQURNSU5cbiAgXTtcbiAgcHJpdmF0ZSBjYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX1BBR0VTSVpFID0gMTAwMDtcbiAgcHJpdmF0ZSByZWFkb25seSBGUkFHTUVOVF9OQU1FID0gJ2M4eV9EYXNoYm9hcmQnO1xuICBwcml2YXRlIHJlYWRvbmx5IERBU0hCT0FSRF9ST1VURV9QQVRIID0gJ2Rhc2hib2FyZCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgSU5ERVhfU1BMSVQgPSAnISc7XG4gIHByaXZhdGUgcmVhZG9ubHkgQ0FDSEVfVElNRU9VVCA9IDUwMDtcbiAgcHJpdmF0ZSBfZm9ybURpc2FibGVkID0gdHJ1ZTtcbiAgcHJpdmF0ZSBmb3JtRGlzYWJsZWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSBjb250ZXh0RGFzaGJvYXJkc0NhY2hlOiB7XG4gICAgcXVlcnk6IHN0cmluZztcbiAgICByZXN1bHQ6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PjtcbiAgICB0aW1lc3RhbXA6IG51bWJlcjtcbiAgfTtcblxuICBnZXQgZm9ybURpc2FibGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtRGlzYWJsZWQ7XG4gIH1cblxuICBzZXQgZm9ybURpc2FibGVkKHZhbHVlKSB7XG4gICAgdGhpcy5fZm9ybURpc2FibGVkID0gdmFsdWU7XG4gICAgdGhpcy5mb3JtRGlzYWJsZWRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0YWJzOiBUYWJzU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3I6IE5hdmlnYXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtaXNzaW9uczogUGVybWlzc2lvbnMsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZvcm1EaXNhYmxlZCQgPSB0aGlzLmZvcm1EaXNhYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5xdWVyaWVzVXRpbCA9IG5ldyBRdWVyaWVzVXRpbCgpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlKGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZCwgY29udGV4dD86IENvbnRleHREYXRhLCBuYW1lID0gJycpIHtcbiAgICBsZXQgZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiA9IHt9O1xuICAgIGFzc2lnbihcbiAgICAgIGRhc2hib2FyZCxcbiAgICAgIHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKHsgYzh5X0Rhc2hib2FyZDogZGFzaGJvYXJkQ2ZnIH0pLFxuICAgICAgdGhpcy51cGRhdGVEYXNoYm9hcmRIaXN0b3J5KGRhc2hib2FyZCwgZGFzaGJvYXJkQ2ZnKVxuICAgICk7XG5cbiAgICBjb25zdCBbZGFzaGJvYXJkVHlwZSwgZGFzaGJvYXJkRnJhZ21lbnRzXSA9IHRoaXMuZ2V0RGFzaGJvYXJkRnJhZ21lbnRzKFxuICAgICAgeyBjOHlfRGFzaGJvYXJkOiBkYXNoYm9hcmRDZmcgfSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBuYW1lLFxuICAgICAgZmFsc2VcbiAgICApO1xuICAgIGRhc2hib2FyZCA9IHsgLi4uZGFzaGJvYXJkLCAuLi5kYXNoYm9hcmRGcmFnbWVudHMgfTtcblxuICAgIGlmICh0aGlzLnNob3VsZFNldEdsb2JhbChkYXNoYm9hcmQsIGNvbnRleHQpKSB7XG4gICAgICBhc3NpZ24oZGFzaGJvYXJkLCB7IGM4eV9HbG9iYWw6IHt9IH0pO1xuICAgIH1cbiAgICBkYXNoYm9hcmQubmFtZSA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWU7XG4gICAgY29uc3QgeyBkYXRhIH0gPVxuICAgICAgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXAgfHxcbiAgICAgIGRhc2hib2FyZFR5cGUgPT09IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZSB8fFxuICAgICAgKGNvbnRleHQgJiYgZGFzaGJvYXJkVHlwZSA9PT0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQpXG4gICAgICAgID8gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUoXG4gICAgICAgICAgICBkYXNoYm9hcmQsXG4gICAgICAgICAgICAoY29udGV4dD8uY29udGV4dERhdGEuaWQgYXMgc3RyaW5nKSB8fCAnJ1xuICAgICAgICAgIClcbiAgICAgICAgOiBhd2FpdCB0aGlzLmludmVudG9yeS5jcmVhdGUoZGFzaGJvYXJkKTtcbiAgICByZXR1cm4gZGF0YSBhcyBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdDtcbiAgfVxuXG4gIGFzeW5jIGRldGFpbChkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpIHtcbiAgICBsZXQgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoZGFzaGJvYXJkTU8pO1xuICAgIGRhdGEgPSB0aGlzLmFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1ucyhkYXRhIGFzIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KTtcbiAgICB0aGlzLmNhY2hlLnNldChkYXNoYm9hcmRNTy5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoXG4gICAgZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCxcbiAgICBjb250ZXh0PzogQ29udGV4dERhdGFcbiAgKTogUHJvbWlzZTxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENmZyA9IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkO1xuICAgIGRhc2hib2FyZC5uYW1lID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmQubmFtZTtcbiAgICBhc3NpZ24oXG4gICAgICBkYXNoYm9hcmQsXG4gICAgICB0aGlzLmFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1ucyh7IGM4eV9EYXNoYm9hcmQ6IGRhc2hib2FyZENmZyB9KSxcbiAgICAgIHRoaXMudXBkYXRlRGFzaGJvYXJkSGlzdG9yeShkYXNoYm9hcmQsIGRhc2hib2FyZENmZylcbiAgICApO1xuXG4gICAgY29uc3Qga2VlcEZyYWdtZW50cyA9IHRoaXMuY2xlYW4ocGljayhkYXNoYm9hcmQsIFt0aGlzLkZSQUdNRU5UX05BTUUsICdpZCcsICduYW1lJ10pKTtcbiAgICBrZWVwRnJhZ21lbnRzLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5O1xuICAgIGF3YWl0IHRoaXMuc2VyaWFsaXplV2lkZ2V0Q29uZmlncyhrZWVwRnJhZ21lbnRzKTtcblxuICAgIGNvbnN0IFssIGRhc2hib2FyZFR5cGVGcmFnbWVudHNdID0gdGhpcy5nZXREYXNoYm9hcmRGcmFnbWVudHMoZGFzaGJvYXJkLCBjb250ZXh0LCAnJywgdHJ1ZSk7XG4gICAga2VlcEZyYWdtZW50cy5jOHlfR2xvYmFsID0gdGhpcy5zaG91bGRTZXRHbG9iYWwoeyAuLi5kYXNoYm9hcmQsIC4uLmRhc2hib2FyZFR5cGVGcmFnbWVudHMgfSk7XG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS51cGRhdGUoeyAuLi5rZWVwRnJhZ21lbnRzLCAuLi5kYXNoYm9hcmRUeXBlRnJhZ21lbnRzIH0pO1xuICAgIHRoaXMuY2FjaGUuc2V0KGRhc2hib2FyZC5pZCwgZGF0YSk7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGUoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgd2l0aENvbmZpcm1hdGlvbiA9IHRydWUpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHdpdGhDb25maXJtYXRpb24pIHtcbiAgICAgICAgbGV0IG1zZzogc3RyaW5nID0gZ2V0dGV4dChcbiAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgdGhlIGRhc2hib2FyZCBcInt7IGRhc2hib2FyZE5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD9gXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpKSB7XG4gICAgICAgICAgbXNnID0gZ2V0dGV4dChcbiAgICAgICAgICAgIGBZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZSB0aGUgZGFzaGJvYXJkIFwie3sgZGFzaGJvYXJkTmFtZSB9fVwiIGZyb20gYWxsIGRldmljZXMgb2YgdGhlIHR5cGUgXCJ7eyBkZXZpY2VUeXBlIH19XCIuXG4gICAgICAgICAgIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICAgIGdldHRleHQoJ0RlbGV0ZSBkYXNoYm9hcmQnKSxcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtc2csIHtcbiAgICAgICAgICAgIGRhc2hib2FyZE5hbWU6IGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkLm5hbWUsXG4gICAgICAgICAgICBkZXZpY2VUeXBlOiBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWVcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9rOiBnZXR0ZXh0KCdEZWxldGUnKSxcbiAgICAgICAgICAgIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJylcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5kZWxldGUoZGFzaGJvYXJkKTtcbiAgICAgIGNvbnN0IHRhYlRvUmVtb3ZlID0gQXJyYXkuZnJvbSh0aGlzLnRhYnMuc3RhdGUpLmZpbmQodGFiID0+IHtcbiAgICAgICAgaWYgKHRhYi5wYXRoKSB7XG4gICAgICAgICAgcmV0dXJuIHRhYi5wYXRoLmVuZHNXaXRoKGAke3RoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEh9LyR7ZGFzaGJvYXJkLmlkfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGFicy5yZW1vdmUodGFiVG9SZW1vdmUpO1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYnMucmVmcmVzaCgpO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGludGVuZGVkIGVtcHR5XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRGFzaGJvYXJkSGlzdG9yeShcbiAgICBkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+LFxuICAgIGRhc2hib2FyZENmZzogQ29udGV4dERhc2hib2FyZFxuICApOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0PiB7XG4gICAgaWYgKCFkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkpIHtcbiAgICAgIGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIWRhc2hib2FyZENmZy5oaXN0b3J5RGVzY3JpcHRpb24pIHtcbiAgICAgIGRhc2hib2FyZENmZy5oaXN0b3J5RGVzY3JpcHRpb24gPSB7IGNoYW5nZVR5cGU6ICdjcmVhdGUnIH07XG4gICAgfVxuXG4gICAgZGFzaGJvYXJkQ2ZnLmNyZWF0ZWQgPSBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgZGFzaGJvYXJkLmM4eV9EYXNoYm9hcmRIaXN0b3J5ID0gY2xvbmVEZWVwKFtkYXNoYm9hcmRDZmcsIC4uLmRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeV0pO1xuXG4gICAgaWYgKGRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeS5sZW5ndGggPiB0aGlzLlZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUKSB7XG4gICAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZEhpc3RvcnkgPSBbXG4gICAgICAgIC4uLmRhc2hib2FyZC5jOHlfRGFzaGJvYXJkSGlzdG9yeS5zbGljZSgwLCB0aGlzLlZFUlNJT05fSElTVE9SWV9TSVpFX0xJTUlUKVxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGFzaGJvYXJkO1xuICB9XG5cbiAgYWN0aXZhdGVEYXNoYm9hcmRzKFxuICAgIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LFxuICAgIHR5cGVzOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdXG4gICk6IE9ic2VydmFibGU8Ym9vbGVhbiB8IFRhYltdPiB7XG4gICAgY29uc3QgeyBkYXNoYm9hcmRJZCB9ID0gcm91dGUucGFyYW1zO1xuICAgIGlmIChkYXNoYm9hcmRJZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZCwgdHlwZXMsIHJvdXRlLnBhcmVudC5kYXRhLmNvbnRleHREYXRhKS5waXBlKFxuICAgICAgICB0YXAoZGFzaGJvYXJkID0+IHtcbiAgICAgICAgICByb3V0ZS5kYXRhID0geyBkYXNoYm9hcmQgfTtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgoKSA9PiB0cnVlKSxcbiAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5kYXNoYm9hcmRUYWJzJCA9IHRoaXMuZ2V0VGFicyQocm91dGUuZGF0YS5jb250ZXh0RGF0YSwgdHlwZXMpO1xuICAgIHJldHVybiB0aGlzLmRhc2hib2FyZFRhYnMkO1xuICB9XG5cbiAgZ2V0TmFtZWREYXNoYm9hcmRPckNyZWF0ZShuYW1lOiBzdHJpbmcsIGRlZmF1bHRXaWRnZXRzOiBXaWRnZXRbXSwgY29udGV4dD86IENvbnRleHREYXRhKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSB0aGlzLm1hcFdpZGdldHMoZGVmYXVsdFdpZGdldHMpO1xuICAgIHJldHVybiB0aGlzLmdldERhc2hib2FyZCQobmFtZSwgW0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkXSkucGlwZShcbiAgICAgIHRocm93SWZFbXB0eSgpLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PlxuICAgICAgICBmcm9tKFxuICAgICAgICAgIHRoaXMuY3JlYXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgd2lkZ2V0Q2xhc3NlczogeyAnZGFzaGJvYXJkLXRoZW1lLWxpZ2h0JzogdHJ1ZSwgJ3BhbmVsLXRpdGxlLXJlZ3VsYXInOiB0cnVlIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgbmFtZVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICB1cGRhdGVOYXZpZ2F0b3JJdGVtKG1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIHRoaXMubmF2aWdhdG9yLnN0YXRlLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBpZiAobm9kZS5wYXRoID09PSBgcmVwb3J0cy8ke21vLmlkfWApIHtcbiAgICAgICAgdGhpcy5uYXZpZ2F0b3IucmVtb3ZlKG5vZGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChtby5jOHlfSXNOYXZpZ2F0b3JOb2RlKSB7XG4gICAgICBjb25zdCBub2RlVG9BZGQgPSBuZXcgTmF2aWdhdG9yTm9kZSh7XG4gICAgICAgIGxhYmVsOiBtby5uYW1lLFxuICAgICAgICBwYXRoOiBgcmVwb3J0cy8ke21vLmlkfWAsXG4gICAgICAgIGljb246IG1vLmljb24sXG4gICAgICAgIHByaW9yaXR5OiBtby5wcmlvcml0eVxuICAgICAgfSk7XG4gICAgICB0aGlzLm5hdmlnYXRvci5hZGQobm9kZVRvQWRkKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBuYXZpZ2F0ZVRvRGFzaGJvYXJkKGRhc2hib2FyZE1POiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGlmICgvZGFzaGJvYXJkLy50ZXN0KHRoaXMucm91dGVyLnVybCkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLi4nLCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpLFxuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIFtORVdfREFTSEJPQVJEX1FVRVJZX1BBUkFNXTogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKC9eXFwvKGRldmljZXxncm91cClcXC9bMC05XSskLy50ZXN0KHRoaXMucm91dGVyLnVybCkpIHtcbiAgICAgIC8vIGluIGNhc2UgdGhlIGFkZCBkYXNoYm9hcmQgYnV0dG9uIGlzIHRoZSBvbmx5IHRhYiBvbiB0aGF0IHJvdXRlXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4nLCB0aGlzLkRBU0hCT0FSRF9ST1VURV9QQVRILCBkYXNoYm9hcmRNTy5pZF0sIHtcbiAgICAgICAgcmVsYXRpdmVUbzogZ2V0QWN0aXZhdGVkUm91dGUodGhpcy5yb3V0ZXIpXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLicsIHRoaXMuREFTSEJPQVJEX1JPVVRFX1BBVEgsIGRhc2hib2FyZE1PLmlkXSwge1xuICAgICAgICByZWxhdGl2ZVRvOiBnZXRBY3RpdmF0ZWRSb3V0ZSh0aGlzLnJvdXRlcilcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgdXNlciBpcyBhYmxlIHRvIGVkaXQgZGFzaGJvYXJkIGFjY29yZGluZyB0byBoaXMgcm9sZXMgYW5kIGRhc2hib2FyZCBvd25lcnNoaXAuXG4gICAqXG4gICAqIEBwYXJhbSBtbyAtIERhc2hib2FyZCBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgVHJ1ZSBpZiB1c2VyIGlzIGFibGUgdG8gZWRpdCBkYXNoYm9hcmQsIGZhbHNlIGlmIGhlIGNhbm5vdC5cbiAgICovXG4gIGFzeW5jIGNhbkVkaXREYXNoYm9hcmQobW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdCh0aGlzLklOVkVOVE9SWV9ST0xFUywgbW8pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB1c2VyIGhhcyBwZXJtaXNzaW9ucyB0byBjb3B5IGRhc2hib2FyZCBhY2NvcmRpbmcgdG8gaGlzIHJvbGVzLlxuICAgKlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHVzZXIgaGFzIHBlcm1pc3Npb25zIHRvIGNvcHkgZGFzaGJvYXJkLCBmYWxzZSBpZiBoZSBjYW5ub3QuXG4gICAqL1xuICBoYXNQZXJtaXNzaW9uc1RvQ29weURhc2hib2FyZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucy5oYXNBbnlSb2xlKFtcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfSU5WRU5UT1JZX0FETUlOLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9JTlZFTlRPUllfQ1JFQVRFLFxuICAgICAgUGVybWlzc2lvbnMuUk9MRV9NQU5BR0VEX09CSkVDVF9BRE1JTixcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfTUFOQUdFRF9PQkpFQ1RfQ1JFQVRFXG4gICAgXSk7XG4gIH1cblxuICBpc05hbWVkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuTmFtZWR9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc1JlcG9ydChkYXNoYm9hcmQ6IFBhcnRpYWw8Q29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q+KSB7XG4gICAgcmV0dXJuIHNvbWUoa2V5cyhkYXNoYm9hcmQpLCBwcm9wID0+XG4gICAgICBuZXcgUmVnRXhwKFxuICAgICAgICBgXiR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke3RoaXMuUkVQT1JUX1BBUlRJQUxfTkFNRX1gXG4gICAgICApLnRlc3QocHJvcClcbiAgICApO1xuICB9XG5cbiAgaXNEZXZpY2VUeXBlKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdQcm9wID0gbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlfSR7dGhpcy5JTkRFWF9TUExJVH1gXG4gICAgICApLnRlc3QocHJvcCk7XG4gICAgICBpZiAoIW1hdGNoaW5nUHJvcCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGVyZSBtaWdodCBiZSBtYXRjaGluZyBrZXksIGJ1dCBpdHMgdmFsdWUgY2FuIGJlIHt9IG9yIG51bGxcbiAgICAgICAgcmV0dXJuICEhZGFzaGJvYXJkW3Byb3BdO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaXNEZXZpY2VEYXNoYm9hcmQoZGFzaGJvYXJkOiBQYXJ0aWFsPENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0Pik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzb21lKGtleXMoZGFzaGJvYXJkKSwgcHJvcCA9PlxuICAgICAgbmV3IFJlZ0V4cChcbiAgICAgICAgYF4ke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5EZXZpY2V9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBpc0dyb3VwRGFzaGJvYXJkKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gc29tZShrZXlzKGRhc2hib2FyZCksIHByb3AgPT5cbiAgICAgIG5ldyBSZWdFeHAoXG4gICAgICAgIGBeJHt0aGlzLkZSQUdNRU5UX05BTUV9JHt0aGlzLklOREVYX1NQTElUfSR7Q29udGV4dERhc2hib2FyZFR5cGUuR3JvdXB9JHt0aGlzLklOREVYX1NQTElUfWBcbiAgICAgICkudGVzdChwcm9wKVxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZERhc2hib2FyZFN0eWxlcyhzdHlsZUxpc3Q6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHN0eWxlTGlzdC5maWx0ZXIoYyA9PlxuICAgICAgU1RZTElOR19DTEFTU19QUkVGSVhFUy5zb21lKGNsYXNzUHJlZml4ID0+IGMuc3RhcnRzV2l0aChjbGFzc1ByZWZpeCkpXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0eWxpbmcoc3R5bGVMaXN0LCBzdHlsZU5hbWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNvbnN0IHN0eWxpbmcgPSBzdHlsZUxpc3QuZmluZChcbiAgICAgIHN0eWxlID0+IHN0eWxlICYmIG5ldyBSZWdFeHAoYC0ke3N0eWxlTmFtZX0kYCwgJ2knKS50ZXN0KHN0eWxlLmNsYXNzKVxuICAgICk7XG4gICAgcmV0dXJuIHN0eWxpbmcgPyBzdHlsaW5nLmNsYXNzIDogZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbWFwV2lkZ2V0cyh3aWRnZXRzOiBXaWRnZXRbXSkge1xuICAgIHJldHVybiBrZXlCeShcbiAgICAgIHdpZGdldHMubWFwKHdpZGdldCA9PiB7XG4gICAgICAgIHdpZGdldC5pZCA9IFN0cmluZyhNYXRoLnJhbmRvbSgpKS5zdWJzdHIoMik7XG4gICAgICAgIHJldHVybiB3aWRnZXQ7XG4gICAgICB9KSxcbiAgICAgICdpZCdcbiAgICApO1xuICB9XG5cbiAgZ2V0RGFzaGJvYXJkJChkYXNoYm9hcmRJZE9yTmFtZSwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSwgbW8/OiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGNhY2hlID0gdGhpcy5jYWNoZS5nZXQoZGFzaGJvYXJkSWRPck5hbWUpO1xuXG4gICAgY29uc3QgZGFzaGJvYXJkcyA9IG1vXG4gICAgICA/IHRoaXMuZ2V0Q29udGV4dERhc2hib2FyZHMobW8sIGRhc2hib2FyZFR5cGUpXG4gICAgICA6IHRoaXMuZ2V0TmFtZWREYXNoYm9hcmQoZGFzaGJvYXJkSWRPck5hbWUpO1xuXG4gICAgY29uc3QgY2FjaGVSZWZyZXNoID0gdGhpcy5nZXRDb250ZXh0RGFzaGJvYXJkcyQoZGFzaGJvYXJkcykucGlwZShcbiAgICAgIHRhcChkYXNoYm9hcmQgPT4gdGhpcy5jYWNoZURhc2hib2FyZChkYXNoYm9hcmQpKSxcbiAgICAgIGZpbHRlcihcbiAgICAgICAgZGFzaGJvYXJkID0+XG4gICAgICAgICAgZGFzaGJvYXJkLmlkID09PSBkYXNoYm9hcmRJZE9yTmFtZSB8fFxuICAgICAgICAgIGhhcyhcbiAgICAgICAgICAgIGRhc2hib2FyZCxcbiAgICAgICAgICAgIGAke3RoaXMuRlJBR01FTlRfTkFNRX0ke3RoaXMuSU5ERVhfU1BMSVR9JHtDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZH0ke3RoaXMuSU5ERVhfU1BMSVR9JHtkYXNoYm9hcmRJZE9yTmFtZX1gXG4gICAgICAgICAgKVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIGNhY2hlID8gb2YoY2FjaGUpIDogY2FjaGVSZWZyZXNoO1xuICB9XG5cbiAgYXN5bmMgcGFzdGVEYXNoYm9hcmQobmV3Q29udGV4dDogRGFzaGJvYXJkQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmNvcHlDbGlwYm9hcmQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhc2hib2FyZFRvUGFzdGUgPSB0aGlzLmNyZWF0ZUNvbnRleHREYXNoYm9hcmRDb3B5KFxuICAgICAgICAgIHRoaXMuY29weUNsaXBib2FyZC5kYXNoYm9hcmQsXG4gICAgICAgICAgbmV3Q29udGV4dC5jb250ZXh0RGF0YSxcbiAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuY29udGV4dC5jb250ZXh0RGF0YVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBkYXNoYm9hcmQgPSBhd2FpdCB0aGlzLmNyZWF0ZSh0aGlzLmNsZWFuKGRhc2hib2FyZFRvUGFzdGUpLCBuZXdDb250ZXh0KTtcblxuICAgICAgICAvLyBsaW5raW5nIGNoaWxkQWRkaXRpb25zIGZvciBlLmcuIHRvIGdyYW50IGFjY2VzcyB0byB0aGUgaW1hZ2VzIHVwbG9hZGVkIGJ5IHRoZSBpbWFnZSB3aWRnZXQgZm9yIHVzZXJzIHdpdGggb25seSBpbnZlbnRvcnkgcm9sZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YTogY2hpbGRBZGRpdGlvbnMgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zTGlzdChcbiAgICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQuZGFzaGJvYXJkSWQsXG4gICAgICAgICAgeyBwYWdlU2l6ZTogMjAwMCB9XG4gICAgICAgICk7XG4gICAgICAgIGlmIChjaGlsZEFkZGl0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0J1bGtBZGQoY2hpbGRBZGRpdGlvbnMsIGRhc2hib2FyZC5pZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvcHlDbGlwYm9hcmQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubmF2aWdhdGVUb0Rhc2hib2FyZChkYXNoYm9hcmQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHRoaXMuYWxlcnQud2FybmluZyhnZXR0ZXh0KCdJbnN1ZmZpY2llbnQgcGVybWlzc2lvbnMgZm9yIHRoaXMgYWN0aW9uLicpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBmcmFnbWVudCB0aGF0IGFzc29jaWF0ZXMgZGFzaGJvYXJkcyB3aXRoIGRldmljZS9hc3NldC4gSXQgY29uc2lzdHMgb2YgdGhyZWUgZWxlbWVudHM6XG4gICAqIC0gRlJBR01FTlRfTkFNRSAtIHN0YXRpYyBzdHJpbmdcbiAgICogLSBkYXNoYm9hcmQgdHlwZSAoZS5nLiAnZ3JvdXAnLCAnZGV2aWNlJylcbiAgICogLSBmcmFnbWVudCB2YWx1ZSAoIGlkIG9mIGRldmljZS9hc3NldCBpZiBpdCBpcyBub3QgdHlwZWQgZGFzaGJvYXJkOyBkZXZpY2VUeXBlVmFsdWUgcHJvcGVydHkgb2YgZGFzaGJvYXJkIGlmIGl0IGlzIHR5cGUgZGFzaGJvYXJkKVxuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciBkZXZpY2UgZGFzaGJvYXJkOiAnYzh5X0Rhc2hib2FyZCFkZXZpY2UhNzczMjAwJ1xuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciBncm91cCBkYXNoYm9hcmQ6ICdjOHlfRGFzaGJvYXJkIWdyb3VwITg0MTI5MjA4J1xuICAgKiBFeGFtcGxlIGZyYWdtZW50IGZvciB0eXBlZCBkZXZpY2UgZGFzaGJvYXJkOiAnYzh5X0Rhc2hib2FyZCF0eXBlIWM4eV9sd20ybV9jb25uZWN0b3JfZGV2aWNlJ1xuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dERhc2hib2FyZFR5cGUgVHlwZSBvZiBkYXNoYm9hcmRcbiAgICogQHBhcmFtIHZhbHVlIEZyYWdtZW50IHZhbHVlXG4gICAqIEByZXR1cm5zIEZyYWdtZW50IGZvciBkYXNoYm9hcmRcbiAgICovXG4gIGNyZWF0ZUZyYWdtZW50S2V5KGNvbnRleHREYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZSwgdmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFt0aGlzLkZSQUdNRU5UX05BTUUsIGNvbnRleHREYXNoYm9hcmRUeXBlLCB2YWx1ZV0uam9pbih0aGlzLklOREVYX1NQTElUKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgZGFzaGJvYXJkIGNhbiBiZSBzZXQgdG8gdHlwZSBkYXNoYm9hcmQuXG4gICAqIEZpcnN0LCBpdCBjaGVja3MgaWYgZGV2aWNlVHlwZVZhbHVlIGV4aXN0cyBhbmQgaWYgdXNlciBoYXMgcGVybWlzc2lvbiB0byBzZXQgZGFzaGJvYXJkIHR5cGUuXG4gICAqIFRoZW4sIGNhc2UgZnJvbSBzZW5zb3IgYXBwIGlzIGNoZWNrZWQtIGRhc2hib2FyZCBjcmVhdGVkIHdpdGggc2Vuc29yIGFwcCBoYXMgZGV2aWNlVHlwZSBzZXQgdG8gdHJ1ZSBidXRcbiAgICogdHlwZSBmcmFnbWVudCBpcyBtaXNzaW5nLSB3ZSBkbyBub3Qgc3VwcG9ydCB0aGlzIGNvbWJpbmF0aW9uLlxuICAgKiBAcGFyYW0gbW8gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0XG4gICAqIEBwYXJhbSBkZXZpY2VUeXBlVmFsdWUgVmFsdWUgb2YgZGV2aWNlIHR5cGVcbiAgICogQHJldHVybnMgVHJ1ZSBpZiBkYXNoYm9hcmQgY2FuIGJlIHNldCB0byB0eXBlIGRhc2hib2FyZCwgZmFsc2UgaWYgaXQgaXMgZm9yYmlkZGVuLlxuICAgKi9cbiAgc2hvdWxkQWxsb3dUb1NldERhc2hib2FyZFR5cGUoXG4gICAgbW86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIGRldmljZVR5cGVWYWx1ZTogc3RyaW5nXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmICghZGV2aWNlVHlwZVZhbHVlIHx8ICF0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUodGhpcy5JTlZFTlRPUllfUk9MRVMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVGcmFnbWVudCA9IHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkoQ29udGV4dERhc2hib2FyZFR5cGUuVHlwZSwgZGV2aWNlVHlwZVZhbHVlKTtcbiAgICBpZiAobW8uYzh5X0Rhc2hib2FyZCAmJiBtby5jOHlfRGFzaGJvYXJkLmRldmljZVR5cGUgJiYgIW1vW3R5cGVGcmFnbWVudF0pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjcmVhdGVSZXBvcnQocmVwb3J0Q2ZnOiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0Pikge1xuICAgIGNvbnN0IHJlcG9ydDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fTtcbiAgICBPYmplY3QuYXNzaWduKHJlcG9ydCwgcmVwb3J0Q2ZnKTtcbiAgICBPYmplY3QuYXNzaWduKHJlcG9ydCwgeyBjOHlfUmVwb3J0OiB7fSB9KTtcbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY3JlYXRlKHJlcG9ydCk7XG4gIH1cblxuICBhZGRSZXBvcnROYXZpZ2F0b3JOb2RlKHJlcG9ydDogSU1hbmFnZWRPYmplY3QpOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gbmV3IE5hdmlnYXRvck5vZGUoe1xuICAgICAgbGFiZWw6IHJlcG9ydC5uYW1lLFxuICAgICAgcGF0aDogYHJlcG9ydHMvJHtyZXBvcnQuaWR9YCxcbiAgICAgIGljb246IHJlcG9ydC5pY29uLFxuICAgICAgcHJpb3JpdHk6IHJlcG9ydC5wcmlvcml0eVxuICAgIH0pO1xuICAgIHRoaXMubmF2aWdhdG9yLmFkZChub2RlKTtcbiAgfVxuXG4gIGdldENvbnRleHRGb3JHUyhtbzogSU1hbmFnZWRPYmplY3QpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNEZXZpY2UobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkRFVklDRTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JvdXBTZXJ2aWNlLmlzQXNzZXQobW8pKSB7XG4gICAgICByZXR1cm4gUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT05URVhULkFTU0VUO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncm91cFNlcnZpY2UuaXNHcm91cChtbykpIHtcbiAgICAgIHJldHVybiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTlRFWFQuR1JPVVA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldENvbnRleHREYXNoYm9hcmRzKFxuICAgIG1vOiBJTWFuYWdlZE9iamVjdCxcbiAgICBkYXNoYm9hcmRUeXBlOiBDb250ZXh0RGFzaGJvYXJkVHlwZVtdXG4gICk6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoe1xuICAgICAgX19maWx0ZXI6IHtcbiAgICAgICAgX19vcjogZGFzaGJvYXJkVHlwZS5tYXAodCA9PiAoe1xuICAgICAgICAgIC8vIGl0J3MgbmVjZXNzYXJ5IHRvIHdyYXAgZnJhZ21lbnQgaW4gcXVvdGVzIGJlY2F1c2UgZGFzaGJvYXJkIHR5cGUgY2FuIGNvbnRhaW4gc3BhY2VzXG4gICAgICAgICAgX19oYXM6IGAnJHt0aGlzLmNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vLCB0KX0nYFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGNhY2hlSGFzVmFsaWRSZXNwb25zZSA9XG4gICAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRzQ2FjaGUgJiZcbiAgICAgIHRoaXMuY29udGV4dERhc2hib2FyZHNDYWNoZS5xdWVyeSA9PT0gcXVlcnkgJiZcbiAgICAgIG5vdyAtIHRoaXMuY29udGV4dERhc2hib2FyZHNDYWNoZS50aW1lc3RhbXAgPCB0aGlzLkNBQ0hFX1RJTUVPVVQ7XG5cbiAgICBpZiAoY2FjaGVIYXNWYWxpZFJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250ZXh0RGFzaGJvYXJkc0NhY2hlLnJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZXh0RGFzaGJvYXJkc0NhY2hlID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRzQ2FjaGUgPSB7XG4gICAgICBxdWVyeSxcbiAgICAgIHJlc3VsdDogdGhpcy5pbnZlbnRvcnkubGlzdCh7XG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBwYWdlU2l6ZTogdGhpcy5ERUZBVUxUX1BBR0VTSVpFXG4gICAgICB9KSxcbiAgICAgIHRpbWVzdGFtcDogbm93XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0RGFzaGJvYXJkc0NhY2hlLnJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdHVwbGUgZGVzY3JpYmluZyB0aGUgZGFzaGJvYXJkIHR5cGUgYW5kIGl0cyBmcmFnbWVudHMuIEZvciBhc3NldHMgbGlrZSBkZXZpY2VzIGFuZCBncm91cHMsIGl0J3MgcG9zc2libGVcbiAgICogdG8gaGF2ZSB0d28gZnJhZ21lbnRzOiBvbmUgaW5kaWNhdGluZyB0aGlzIHBhcnRpY3VsYXIgZGV2aWNlL2Fzc2V0IHdpdGggaXRzIElELCBhbmQgdGhlIHNlY29uZCBpbmRpY2F0aW5nXG4gICAqIHRoZSBkZXZpY2UvYXNzZXQgdHlwZSAoaWYgdGhlIGRhc2hib2FyZCBpcyBtZWFudCB0byBiZSBhcHBsaWVkIHRvIGFsbCBhc3NldHMgb2YgdGhpcyB0eXBlKS5cbiAgICpcbiAgICogQHBhcmFtIGRhc2hib2FyZE1PIC0gRGFzaGJvYXJkIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcGFyYW0gY29udGV4dCAtIENvbnRleHQgZGF0YSBvZiBhc3NldC5cbiAgICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBkYXNoYm9hcmQuXG4gICAqIEBwYXJhbSBpc0VkaXQgLSBUcnVlIGlmIGV4aXN0aW5nIGRhc2hib2FyZCBpcyB1cGRhdGVkLCBmYWxzZSB3aGVuIGl0J3MgY3JlYXRpb24gb2YgbmV3IGRhc2hib2FyZC5cbiAgICogQHJldHVybnMgVHVwbGUgb2YgZGFzaGJvYXJkIHR5cGUgYW5kIG9iamVjdCBjb250YWluaW5nIGRhc2hib2FyZCBmcmFnbWVudHMuXG4gICAqL1xuICBwcml2YXRlIGdldERhc2hib2FyZEZyYWdtZW50cyhcbiAgICBkYXNoYm9hcmRNTzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QsXG4gICAgY29udGV4dDogQ29udGV4dERhdGEsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGlzRWRpdDogYm9vbGVhblxuICApOiBbQ29udGV4dERhc2hib2FyZFR5cGUsIFJlY29yZDxzdHJpbmcsIG9iamVjdD5dIHtcbiAgICBsZXQgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGU7XG4gICAgY29uc3QgaWQgPSAoY29udGV4dD8uY29udGV4dERhdGE/LmlkIGFzIHN0cmluZykgfHwgJyc7XG4gICAgY29uc3QgZnJhZ21lbnRzOiBSZWNvcmQ8c3RyaW5nLCBvYmplY3Q+ID0ge307XG5cbiAgICBpZiAoY29udGV4dD8uY29udGV4dCA9PT0gVmlld0NvbnRleHQuRGV2aWNlIHx8IGNvbnRleHQ/LmNvbnRleHQgPT09IFZpZXdDb250ZXh0Lkdyb3VwKSB7XG4gICAgICAvLyBnZXQgYmFzZSB0eXBlIGZvciBkZXZpY2Ugb3IgZ3JvdXBcbiAgICAgIGNvbnN0IGRlZmF1bHRUeXBlID1cbiAgICAgICAgY29udGV4dC5jb250ZXh0ID09PSBWaWV3Q29udGV4dC5EZXZpY2VcbiAgICAgICAgICA/IENvbnRleHREYXNoYm9hcmRUeXBlLkRldmljZVxuICAgICAgICAgIDogQ29udGV4dERhc2hib2FyZFR5cGUuR3JvdXA7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlXG4gICAgICAgID8gQ29udGV4dERhc2hib2FyZFR5cGUuVHlwZVxuICAgICAgICA6IGRlZmF1bHRUeXBlO1xuXG4gICAgICAvLyBjbGVhciBmcmFnbWVudHMgZnJvbSBvdGhlciBhc3NldCBpZiBjdXJyZW50IGFzc2V0IGlzIG5vdCBvcmlnaW4gb2YgdGhpcyBkYXNoYm9hcmRcbiAgICAgIHRoaXMuY2xlYXJSZWR1bmRhbnRGcmFnbWVudChkYXNoYm9hcmRNTywgZGVmYXVsdFR5cGUsIGZyYWdtZW50cyk7XG5cbiAgICAgIC8vIGFkZCBiYXNlIGZyYWdtZW50IGZvciBwYXJ0aWN1bGFyIGFzc2V0XG4gICAgICBjb25zdCBkZXZpY2VPckdyb3VwRnJhZ21lbnRLZXkgPSB0aGlzLmNyZWF0ZUZyYWdtZW50S2V5KGRlZmF1bHRUeXBlLCBpZCk7XG4gICAgICBmcmFnbWVudHNbZGV2aWNlT3JHcm91cEZyYWdtZW50S2V5XSA9IHt9O1xuXG4gICAgICAvLyBhZGQgb3IgY2xlYXIgdHlwZSBmcmFnbWVudFxuICAgICAgaWYgKGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZSB8fCBpc0VkaXQpIHtcbiAgICAgICAgY29uc3QgdHlwZUZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShcbiAgICAgICAgICBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlLFxuICAgICAgICAgIGRhc2hib2FyZE1PLmM4eV9EYXNoYm9hcmQuZGV2aWNlVHlwZVZhbHVlXG4gICAgICAgICk7XG4gICAgICAgIGZyYWdtZW50c1t0eXBlRnJhZ21lbnRLZXldID0gZGFzaGJvYXJkTU8uYzh5X0Rhc2hib2FyZC5kZXZpY2VUeXBlID8ge30gOiBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuYW1lKSB7XG4gICAgICBkYXNoYm9hcmRUeXBlID0gQ29udGV4dERhc2hib2FyZFR5cGUuTmFtZWQ7XG4gICAgICBjb25zdCBuYW1lZEZyYWdtZW50S2V5ID0gdGhpcy5jcmVhdGVGcmFnbWVudEtleShDb250ZXh0RGFzaGJvYXJkVHlwZS5OYW1lZCwgbmFtZSk7XG4gICAgICBmcmFnbWVudHNbbmFtZWRGcmFnbWVudEtleV0gPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gW2Rhc2hib2FyZFR5cGUsIGZyYWdtZW50c107XG4gIH1cbiAgLyoqXG4gICAqIENsZWFycyBmcmFnbWVudHMgdGhhdCBvcmlnaW5hdGVzIGZyb20gb3RoZXIgbWFuYWdlZCBvYmplY3QuXG4gICAqIEUuZy4gdHlwZWQgZGFzaGJvYXJkIGlzIGNyZWF0ZWQgZm9yIGRldmljZSBBIG9mIHR5cGUgYzh5X01RVFREZXZpY2UgYW5kIGlkIDEsIHNvIGl0IGdldHMgZnJhZ21lbnRzIG9iamVjdFxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITE6IHt9LFxuICAgKiBjOHlfRGFzaGJvYXJkIXR5cGUhYzh5X01RVFREZXZpY2U6IHt9XG4gICAqIH1cbiAgICpgYGBcbiAgICogdGhlbiwgb24gZGV2aWNlIEIgb2YgdHlwZSBjOHlfTVFUVERldmljZSBhbmQgaWQgMiwgd2hpY2ggYWxzbyBoYXMgYWNjZXNzIHRvIHRoaXMgZGFzaGJvYXJkLCBkZXZpY2VUeXBlIGlzIHNldCB0b1xuICAgKiBmYWxzZSwgc28gZGFzaGJvYXJkIGlzIG5vdCB0eXBlZCBkYXNoYm9hcmQgYW55bW9yZSBhbmQgbm93IGJlbG9uZ3MgdG8gZGV2aWNlIEIsIHRoZXJlZm9yZSBmcmFnbWVudHMgc2hvdWxkIGxvb2sgbGlrZVxuICAgKiBgYGB0c1xuICAgKiB7XG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITE6IG51bGwsIC8vIHRoaXMgdmFsdWUgaXMgY2xlYXJlZCBiZWNhdXNlIGRhc2hib2FyZCBpcyBkb2Vzbid0IGJlbG9uZyB0byBkZXZpY2UgQSBhbnltb3JlXG4gICAqIGM4eV9EYXNoYm9hcmQhZGV2aWNlITI6IHt9LCAvLyBhc3NpZ24gZGFzaGJvYXJkIHRvIGRldmljZSBCXG4gICAqIGM4eV9EYXNoYm9hcmQhdHlwZSFjOHlfTVFUVERldmljZTogbnVsbCAvLyB0aGlzIHZhbHVlIGlzIGNsZWFyZWQgaW4gZ2V0RGFzaGJvYXJkRnJhZ21lbnRzIG1ldGhvZCBhcyBpdCdzIG5vdCB0eXBlZCBkYXNoYm9hcmQgYW55bW9yZVxuICAgKiB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBAcGFyYW0gZGFzaGJvYXJkTU8gLSBEYXNoYm9hcmQgbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSB0eXBlIC0gQ29udGV4dCBkYXNoYm9hcmQgdHlwZS5cbiAgICogQHBhcmFtIGZyYWdtZW50cyAtIEZyYWdtZW50cyBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIGNsZWFyUmVkdW5kYW50RnJhZ21lbnQoXG4gICAgZGFzaGJvYXJkTU86IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICAgIHR5cGU6IENvbnRleHREYXNoYm9hcmRUeXBlLFxuICAgIGZyYWdtZW50czogUmVjb3JkPHN0cmluZywgb2JqZWN0PlxuICApOiB2b2lkIHtcbiAgICBPYmplY3Qua2V5cyhkYXNoYm9hcmRNTylcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKHRoaXMuY3JlYXRlRnJhZ21lbnRLZXkodHlwZSwgJycpKSlcbiAgICAgIC5mb3JFYWNoKGtleSA9PiAoZnJhZ21lbnRzW2tleV0gPSBudWxsKSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlZCB0byBtaWdyYXRlIGRhc2hib2FyZHMgZnJvbSBwcmV2aW91cyAxMiBjb2x1bW5zIGxheW91dCB0byAyNCBjb2x1bW5zLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnM8VCBleHRlbmRzIHsgYzh5X0Rhc2hib2FyZD86IENvbnRleHREYXNoYm9hcmQgfT4oXG4gICAgZGFzaGJvYXJkczogVFtdXG4gICk6IFRbXTtcbiAgcHJpdmF0ZSBhZGp1c3REYXNoYm9hcmRGb3IyNENvbHVtbnM8VCBleHRlbmRzIHsgYzh5X0Rhc2hib2FyZD86IENvbnRleHREYXNoYm9hcmQgfT4oXG4gICAgZGFzaGJvYXJkczogVFxuICApOiBUO1xuICBwcml2YXRlIGFkanVzdERhc2hib2FyZEZvcjI0Q29sdW1uczxUIGV4dGVuZHMgeyBjOHlfRGFzaGJvYXJkPzogQ29udGV4dERhc2hib2FyZCB9PihcbiAgICBkYXNoYm9hcmRzOiBUIHwgVFtdXG4gICk6IFQgfCBUW10ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRhc2hib2FyZHMpKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcy5tYXAoZGFzaGJvYXJkID0+IHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKGRhc2hib2FyZCkpO1xuICAgIH1cbiAgICAvLyBpZiBgY29sdW1uc2AgYXR0cmlidXRlIGV4aXN0cywgZGFzaGJvYXJkIHdhcyBhbHJlYWR5IGFkanVzdGVkLlxuICAgIGlmIChkYXNoYm9hcmRzLmM4eV9EYXNoYm9hcmQuY29sdW1ucykge1xuICAgICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gICAgfVxuXG4gICAgZGFzaGJvYXJkcy5jOHlfRGFzaGJvYXJkLmNvbHVtbnMgPSAyNDtcbiAgICBpZiAoIWRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIGRhc2hib2FyZHM7XG4gICAgfVxuXG4gICAgLy8gTmV3bHkgY3JlYXRlZCBOYW1lZENvbnRleHREYXNoYm9hcmRzIGFyZSBzdGlsbCBjcmVhdGVkIHdpdGggMTIgY29sdW1ucyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG4gICAgLy8gRGVmYXVsdCB3aWRnZXRzIG1pZ2h0IGJlIGFscmVhZHkgY29uZmlndXJlZCBmb3IgMjQgY29sdW1ucy5cbiAgICAvLyBJZiBhIHdpZGdldCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgZm9yIG1vcmUgdGhhbiAxMiBjb2x1bW5zLCB3ZSBzaG91bGQgbm90IGFkanVzdCBpdC5cbiAgICBjb25zdCBhbHJlYWR5SGFzV2lkZ2V0c0NvbmZpZ3VyZWRGb3JNb3JlVGhhbjEyQ29sdW1ucyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICBkYXNoYm9hcmRzLmM4eV9EYXNoYm9hcmQuY2hpbGRyZW5cbiAgICApLnNvbWUod2lkZ2V0ID0+IHdpZGdldC5feCArIHdpZGdldC5fd2lkdGggPiAxMik7XG4gICAgaWYgKGFscmVhZHlIYXNXaWRnZXRzQ29uZmlndXJlZEZvck1vcmVUaGFuMTJDb2x1bW5zKSB7XG4gICAgICByZXR1cm4gZGFzaGJvYXJkcztcbiAgICB9XG5cbiAgICAvLyB3ZSBuZWVkIHRvIG11bHRpcGx5IGJvdGggX3dpZHRoIGFuZCBfeCBhdHRyaWJ1dGVzIHdpdGggMiB0byBtaWdyYXRlIGZyb20gMTIgdG8gMjQgY29sdW1ucy5cbiAgICBPYmplY3QudmFsdWVzKGRhc2hib2FyZHMuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbikuZm9yRWFjaCh3aWRnZXQgPT4ge1xuICAgICAgaWYgKHdpZGdldC5fd2lkdGgpIHtcbiAgICAgICAgd2lkZ2V0Ll93aWR0aCA9IHdpZGdldC5fd2lkdGggKiAyO1xuICAgICAgfVxuICAgICAgaWYgKHdpZGdldC5feCkge1xuICAgICAgICB3aWRnZXQuX3ggPSB3aWRnZXQuX3ggKiAyO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBkYXNoYm9hcmRzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZXJpYWxpemVXaWRnZXRDb25maWdzKGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNsb25lRGVlcChkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbik7XG4gICAgaWYgKCFjaGlsZHJlbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb25maWdzID0gT2JqZWN0LnZhbHVlcyhjaGlsZHJlbik7XG4gICAgY29uc3QgZGV0YWlscyA9IGNvbmZpZ3MubWFwKCh7IGNvbXBvbmVudElkLCBjb25maWcgfSkgPT4gKHsgY29tcG9uZW50SWQsIGNvbmZpZyB9KSk7XG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZHluYW1pY0NvbXBvbmVudC5zZXJpYWxpemVDb25maWdzKGRldGFpbHMpO1xuICAgIHJlc3VsdHMuZm9yRWFjaCgocmVzdWx0LCBpbmRleCkgPT4ge1xuICAgICAgT2JqZWN0LmVudHJpZXMocmVzdWx0KS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgc2V0KGRldGFpbHNbaW5kZXhdLmNvbmZpZywga2V5LCB2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBkYXNoYm9hcmQuYzh5X0Rhc2hib2FyZC5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb250ZXh0RGFzaGJvYXJkQ29weShcbiAgICBkYXNoOiBDb250ZXh0RGFzaGJvYXJkLFxuICAgIG5ld0NvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LFxuICAgIG9sZENvbnRleHQ6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+XG4gICk6IENvbnRleHREYXNoYm9hcmQge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gcmVkdWNlKFxuICAgICAgZGFzaC5jaGlsZHJlbixcbiAgICAgIChfY2hpbGRyZW4sIGNoaWxkKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgaWQgfSA9IGNoaWxkO1xuICAgICAgICBjb25zdCBjZmcgPSBjaGlsZC5jb25maWc7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXNUb0NvcHkgPSB7XG4gICAgICAgICAgZGV2aWNlOiBkZXZpY2UgPT4gdGhpcy5yZXBsYWNlQ29udGV4dEluT2JqKGRldmljZSwgbmV3Q29udGV4dCwgb2xkQ29udGV4dCksXG4gICAgICAgICAgZGF0YXBvaW50czogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhUG9pbnRzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpLFxuICAgICAgICAgIGRhdGFwb2ludHNHYXVnZTogZGF0YVBvaW50cyA9PlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQ29udGV4dEluRGF0YVBvaW50cyhkYXRhUG9pbnRzLCBuZXdDb250ZXh0LCBvbGRDb250ZXh0KSxcbiAgICAgICAgICBkYXRhcG9pbnRzTGFiZWxzOiBkYXRhUG9pbnRzID0+XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VDb250ZXh0SW5EYXRhUG9pbnRzKGRhdGFQb2ludHMsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGNmZykge1xuICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLCBwcm9wZXJ0aWVzVG9Db3B5KTtcbiAgICAgICAgICBpZiAoY2ZnLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29weVByb3BlcnRpZXMoY2ZnLm9wdGlvbnMsIHByb3BlcnRpZXNUb0NvcHkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZHJlbltpZF0gPSBjbG9uZURlZXAoY2hpbGQpO1xuICAgICAgICByZXR1cm4gX2NoaWxkcmVuO1xuICAgICAgfSxcbiAgICAgIHt9XG4gICAgKTtcblxuICAgIGRhc2guY2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgIGNvbnN0IGlzVHlwZURhc2hib2FyZCA9IGRhc2guZGV2aWNlVHlwZSAmJiAhIWRhc2guZGV2aWNlVHlwZVZhbHVlO1xuICAgIGlmIChpc1R5cGVEYXNoYm9hcmQpIHtcbiAgICAgIGRhc2guZGV2aWNlVHlwZVZhbHVlID0gbmV3Q29udGV4dC50eXBlO1xuICAgIH1cbiAgICByZXR1cm4gZGFzaDtcbiAgfVxuXG4gIHByaXZhdGUgY29weVByb3BlcnRpZXMob2JqLCBwcm9wZXJ0aWVzVG9Db3B5KSB7XG4gICAgZm9yRWFjaChwcm9wZXJ0aWVzVG9Db3B5LCAoY29weUZuLCBwcm9wZXJ0eSkgPT4ge1xuICAgICAgaWYgKG9ialtwcm9wZXJ0eV0pIHtcbiAgICAgICAgb2JqW3Byb3BlcnR5XSA9IGNvcHlGbihvYmpbcHJvcGVydHldKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUNvbnRleHRJbkRhdGFQb2ludHMoXG4gICAgZGF0YVBvaW50cyxcbiAgICBuZXdDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PixcbiAgICBvbGRDb250ZXh0OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PlxuICApIHtcbiAgICBkYXRhUG9pbnRzLmZvckVhY2goZHAgPT4ge1xuICAgICAgZHAuX190YXJnZXQgPSB0aGlzLnJlcGxhY2VDb250ZXh0SW5PYmooZHAuX190YXJnZXQsIG5ld0NvbnRleHQsIG9sZENvbnRleHQpO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhUG9pbnRzO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlQ29udGV4dEluT2JqKFxuICAgIG9iajogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgbmV3Q29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sXG4gICAgb2xkQ29udGV4dDogUGFydGlhbDxJTWFuYWdlZE9iamVjdD5cbiAgKSB7XG4gICAgaWYgKG9iaiAmJiBvYmouaWQgPT09IG9sZENvbnRleHQuaWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqLCBwaWNrKG5ld0NvbnRleHQsIFsnaWQnLCAnbmFtZSddKSk7XG4gICAgfVxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBwcml2YXRlIGdldFRhYnMkKG1vOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCwgZGFzaGJvYXJkVHlwZTogQ29udGV4dERhc2hib2FyZFR5cGVbXSkge1xuICAgIGNvbnN0IGRhc2hib2FyZHMgPSB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzKG1vLCBkYXNoYm9hcmRUeXBlKTtcblxuICAgIHJldHVybiB0aGlzLmdldENvbnRleHREYXNoYm9hcmRzJChkYXNoYm9hcmRzKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZGFzaGJvYXJkID0+IHRoaXMudmVyaWZ5RGFzaGJvYXJkQXZhaWxhYmlsaXR5JChkYXNoYm9hcmQpKSxcbiAgICAgIG1lcmdlTWFwKChbZGFzaGJvYXJkXSkgPT4gdGhpcy5yZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KGRhc2hib2FyZCkpLFxuICAgICAgdGFwKGRhc2hib2FyZCA9PiB0aGlzLmNhY2hlRGFzaGJvYXJkKGRhc2hib2FyZCkpLFxuICAgICAgbWFwKGRhc2hib2FyZCA9PiB0aGlzLmNyZWF0ZURhc2hib2FyZFRhYihkYXNoYm9hcmQpKSxcbiAgICAgIHRvQXJyYXkoKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeURhc2hib2FyZEF2YWlsYWJpbGl0eSQoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGdsb2JhbFJvbGVzSWRzID0gZGFzaGJvYXJkPy5jOHlfRGFzaGJvYXJkPy5nbG9iYWxSb2xlc0lkcztcbiAgICBjb25zdCBjYW5FZGl0ID0gZnJvbShcbiAgICAgIHRoaXMucGVybWlzc2lvbnMuY2FuRWRpdCh0aGlzLklOVkVOVE9SWV9ST0xFUywgZGFzaGJvYXJkLCB7IHNraXBSZXF1ZXN0Q2hlY2s6IHRydWUgfSlcbiAgICApO1xuICAgIGNvbnN0IGhhc0FueUdsb2JhbFJvbGUgPVxuICAgICAgIWdsb2JhbFJvbGVzSWRzIHx8IGdsb2JhbFJvbGVzSWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEXG4gICAgICAgID8gb2YodHJ1ZSlcbiAgICAgICAgOiBvZih0aGlzLnBlcm1pc3Npb25zLmhhc0FueUdsb2JhbFJvbGUoZ2xvYmFsUm9sZXNJZHMpKTtcblxuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtvZihkYXNoYm9hcmQpLCBjYW5FZGl0LCBoYXNBbnlHbG9iYWxSb2xlXSkucGlwZShcbiAgICAgIGZpbHRlcigoWywgY2FuRWRpdCwgaGFzQW55R2xvYmFsUm9sZV0pID0+IGNhbkVkaXQgfHwgaGFzQW55R2xvYmFsUm9sZSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0RGFzaGJvYXJkcyQocmVxdWVzdDogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+KSB7XG4gICAgcmV0dXJuIGZyb20ocmVxdWVzdCkucGlwZShcbiAgICAgIG1lcmdlTWFwKHJlc3BvbnNlID0+XG4gICAgICAgIHRoaXMuYWRqdXN0RGFzaGJvYXJkRm9yMjRDb2x1bW5zKHJlc3BvbnNlLmRhdGEgYXMgQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3RbXSlcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFucyBhbHJlYWR5IGNvcnJ1cHRlZCBkYXNoYm9hcmRzIGZyb20gZGFzaGJvYXJkTW8gcHJvcGVydHkuXG4gICAqIEFkZGVkIHRvIGZpeCBkYXNoYm9hcmRzIG9uIHRoZSBjbG91ZCBpbnN0YW5jZSAoZXUtbGF0ZXN0KS5cbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBpcyBnb2luZyB0byBiZSByZW1vdmVkIGFmdGVyIDEwMDcuNy4wLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZW1vdmVEYXNoYm9hcmRNb1Byb3BlcnR5KFxuICAgIGRhc2hib2FyZDogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4ge1xuICAgIGNvbnN0IGRhc2hib2FyZENvcHkgPSBjbG9uZURlZXAoZGFzaGJvYXJkKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGdldChkYXNoYm9hcmRDb3B5LCAnYzh5X0Rhc2hib2FyZC5jaGlsZHJlbicpO1xuICAgIGxldCB1cGRhdGVEYXNoYm9hcmQgPSBmYWxzZTtcblxuICAgIGZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgIGlmIChnZXQoY2hpbGQsICdjb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dCcpKSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZC5jb21wb25lbnRUcmFuc2Zvcm1Db25maWdXaXRoQ29udGV4dDtcbiAgICAgICAgdXBkYXRlRGFzaGJvYXJkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChnZXQoY2hpbGQsICdjb25maWcuZGFzaGJvYXJkTW8nKSkge1xuICAgICAgICBkZWxldGUgY2hpbGQuY29uZmlnLmRhc2hib2FyZE1vO1xuICAgICAgICB1cGRhdGVEYXNoYm9hcmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHVwZGF0ZURhc2hib2FyZCkge1xuICAgICAgYXdhaXQgdGhpcy51cGRhdGUoZGFzaGJvYXJkQ29weSk7XG4gICAgfVxuICAgIHJldHVybiBkYXNoYm9hcmRDb3B5O1xuICB9XG5cbiAgcHJpdmF0ZSBjYWNoZURhc2hib2FyZChkYXNoYm9hcmQ6IENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0KSB7XG4gICAgdGhpcy5jYWNoZS5zZXQoZGFzaGJvYXJkLmlkLCBkYXNoYm9hcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEYXNoYm9hcmRUYWIoZGFzaGJvYXJkOiBDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IHsgYzh5X0Rhc2hib2FyZDogX2Rhc2hib2FyZCwgaWQgfSA9IGRhc2hib2FyZDtcbiAgICByZXR1cm4ge1xuICAgICAgaWNvbjogX2Rhc2hib2FyZC5pY29uLFxuICAgICAgcGF0aDogYCR7dGhpcy5EQVNIQk9BUkRfUk9VVEVfUEFUSH0vJHtpZH1gLFxuICAgICAgbGFiZWw6IF9kYXNoYm9hcmQubmFtZSxcbiAgICAgIHByaW9yaXR5OiBfZGFzaGJvYXJkLnByaW9yaXR5LFxuICAgICAgaGlkZTogdGhpcy5pc1JlcG9ydChkYXNoYm9hcmQpLFxuICAgICAgYmFkZ2U6XG4gICAgICAgIF9kYXNoYm9hcmQuZGV2aWNlVHlwZSAmJlxuICAgICAgICB0aGlzLnNob3VsZEFsbG93VG9TZXREYXNoYm9hcmRUeXBlKGRhc2hib2FyZCwgX2Rhc2hib2FyZC5kZXZpY2VUeXBlVmFsdWUpXG4gICAgICAgICAgPyBnZXR0ZXh0KCdEYXNoYm9hcmQgdGVtcGxhdGUnKVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgIHRvb2x0aXBUZXh0OiBfZGFzaGJvYXJkLmRlc2NyaXB0aW9uIHx8IGdldHRleHQoJ0Rhc2hib2FyZCB0ZW1wbGF0ZScpXG4gICAgfSBhcyBUYWI7XG4gIH1cblxuICBwcml2YXRlIGNsZWFuKGRhc2hib2FyZCkge1xuICAgIGNvbnN0IGpzb25TdHJpbmcgPSBKU09OLnN0cmluZ2lmeShkYXNoYm9hcmQsIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICBpZiAoa2V5ID09PSAnJCRoYXNoS2V5JyB8fCBrZXkgPT09ICdrbGFzc2VzJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSk7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gIH1cblxuICBwcml2YXRlIGdldE5hbWVkRGFzaGJvYXJkKG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KHtcbiAgICAgIGZyYWdtZW50VHlwZTogYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke0NvbnRleHREYXNoYm9hcmRUeXBlLk5hbWVkfSR7dGhpcy5JTkRFWF9TUExJVH0ke25hbWV9YCxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURhc2hib2FyZEZyYWdtZW50KG1vOiBJTWFuYWdlZE9iamVjdCwgdHlwZTogQ29udGV4dERhc2hib2FyZFR5cGUpIHtcbiAgICBsZXQgdmFsdWU7XG4gICAgaWYgKG1vLmM4eV9SZXBvcnQpIHtcbiAgICAgIHZhbHVlID0gYCR7dGhpcy5SRVBPUlRfUEFSVElBTF9OQU1FfSR7bW8uaWR9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSB0eXBlID09PSBDb250ZXh0RGFzaGJvYXJkVHlwZS5UeXBlID8gbW8udHlwZSA6IG1vLmlkO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy5GUkFHTUVOVF9OQU1FfSR7dGhpcy5JTkRFWF9TUExJVH0ke3R5cGV9JHt0aGlzLklOREVYX1NQTElUfSR7dmFsdWV9YDtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkU2V0R2xvYmFsKGRhc2hib2FyZDogUGFydGlhbDxDb250ZXh0RGFzaGJvYXJkTWFuYWdlZE9iamVjdD4sIGNvbnRleHQ/KSB7XG4gICAgaWYgKFxuICAgICAgKCFjb250ZXh0ICYmIHRoaXMuaXNOYW1lZChkYXNoYm9hcmQpICYmICF0aGlzLmlzUmVwb3J0KGRhc2hib2FyZCkpIHx8XG4gICAgICB0aGlzLmlzRGV2aWNlVHlwZShkYXNoYm9hcmQpXG4gICAgKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iXX0=
@@ -7,6 +7,9 @@ export class GetGroupIconPipe {
7
7
  this.groupService = groupService;
8
8
  }
9
9
  async transform(mo, open = false, defaultIcon) {
10
+ if (!mo.c8y_IsDevice) {
11
+ return this.groupService.getIcon(mo, open, 'c8y-group-open');
12
+ }
10
13
  return this.groupService.getIcon(mo, open, defaultIcon);
11
14
  }
12
15
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: GetGroupIconPipe, deps: [{ token: i1.GroupService }], target: i0.ɵɵFactoryTarget.Pipe }); }
@@ -18,4 +21,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
18
21
  name: 'getGroupIcon'
19
22
  }]
20
23
  }], ctorParameters: () => [{ type: i1.GroupService }] });
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWdyb3VwLWljb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2dldC1ncm91cC1pY29uLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUFHLENBQUM7SUFFbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFrQixFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsV0FBb0I7UUFDcEUsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFELENBQUM7OEdBTFUsZ0JBQWdCOzRHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSDVCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBHcm91cFNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdnZXRHcm91cEljb24nXG59KVxuZXhwb3J0IGNsYXNzIEdldEdyb3VwSWNvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZSkge31cblxuICBhc3luYyB0cmFuc2Zvcm0obW86IElNYW5hZ2VkT2JqZWN0LCBvcGVuID0gZmFsc2UsIGRlZmF1bHRJY29uPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5ncm91cFNlcnZpY2UuZ2V0SWNvbihtbywgb3BlbiwgZGVmYXVsdEljb24pO1xuICB9XG59XG4iXX0=
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWdyb3VwLWljb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvY29tbW9uL2dldC1ncm91cC1pY29uLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFLL0MsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixZQUFvQixZQUEwQjtRQUExQixpQkFBWSxHQUFaLFlBQVksQ0FBYztJQUFHLENBQUM7SUFFbEQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFrQixFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsV0FBb0I7UUFDcEUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzFELENBQUM7OEdBUlUsZ0JBQWdCOzRHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSDVCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLGNBQWM7aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBHcm91cFNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICdnZXRHcm91cEljb24nXG59KVxuZXhwb3J0IGNsYXNzIEdldEdyb3VwSWNvblBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBncm91cFNlcnZpY2U6IEdyb3VwU2VydmljZSkge31cblxuICBhc3luYyB0cmFuc2Zvcm0obW86IElNYW5hZ2VkT2JqZWN0LCBvcGVuID0gZmFsc2UsIGRlZmF1bHRJY29uPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIW1vLmM4eV9Jc0RldmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBTZXJ2aWNlLmdldEljb24obW8sIG9wZW4sICdjOHktZ3JvdXAtb3BlbicpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5ncm91cFNlcnZpY2UuZ2V0SWNvbihtbywgb3BlbiwgZGVmYXVsdEljb24pO1xuICB9XG59XG4iXX0=
@@ -13,7 +13,8 @@ export class GlobalConfigService {
13
13
  c8y_ModbusDeviceType: 'c8y_FieldbusAsGlobal',
14
14
  c8y_CANopenDeviceType: 'c8y_CANOpenAsGlobal',
15
15
  c8y_LoraDeviceType: 'c8y_LoraAsGlobal',
16
- c8y_SigfoxDeviceType: 'c8y_SigfoxAsGlobal'
16
+ c8y_SigfoxDeviceType: 'c8y_SigfoxAsGlobal',
17
+ c8y_Profile: 'c8y_ProfileAsGlobal'
17
18
  };
18
19
  this.cache = undefined;
19
20
  }
@@ -53,4 +54,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
53
54
  type: Injectable,
54
55
  args: [{ providedIn: 'root' }]
55
56
  }], ctorParameters: () => [{ type: i1.InventoryService }] });
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZ2xvYmFsLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFrQixnQkFBZ0IsRUFBZSxNQUFNLGFBQWEsQ0FBQzs7O0FBWTVFLE1BQU0sT0FBTyxtQkFBbUI7SUFjOUIsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFYdkMsd0JBQW1CLEdBQW9EO1lBQzdFLFlBQVksRUFBRSxzQkFBc0I7WUFDcEMsWUFBWSxFQUFFLHNCQUFzQjtZQUNwQyxxQkFBcUIsRUFBRSwyQkFBMkI7WUFDbEQsdUJBQXVCLEVBQUUsMkJBQTJCO1lBQ3BELG9CQUFvQixFQUFFLHNCQUFzQjtZQUM1QyxxQkFBcUIsRUFBRSxxQkFBcUI7WUFDNUMsa0JBQWtCLEVBQUUsa0JBQWtCO1lBQ3RDLG9CQUFvQixFQUFFLG9CQUFvQjtTQUNsQyxDQUFDO1FBR1QsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQW9CO1FBQ3hDLE1BQU0sV0FBVyxHQUFHO1lBQ2xCLFFBQVEsRUFBRSxDQUFDO1lBQ1gsSUFBSSxFQUFFLCtCQUErQjtZQUNyQyxXQUFXLEVBQUUsWUFBWTtZQUN6QixZQUFZO1NBQ2IsQ0FBQztRQUVGLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILGNBQWMsQ0FBQyxVQUFzQztRQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUN0RCxNQUFNLElBQUksTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUM3RSxDQUFDO0lBQ0osQ0FBQzs4R0FwRFUsbUJBQW1CO2tIQUFuQixtQkFBbUIsY0FETixNQUFNOzsyRkFDbkIsbUJBQW1CO2tCQUQvQixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuZXhwb3J0IHR5cGUgTWFuYWdlZE9iamVjdFR5cGVGb3JDb25maWcgPVxuICB8ICdjOHlfU29mdHdhcmUnXG4gIHwgJ2M4eV9GaXJtd2FyZSdcbiAgfCAnYzh5X0NvbmZpZ3VyYXRpb25EdW1wJ1xuICB8ICdjOHlfTW9kYnVzRGV2aWNlVHlwZSdcbiAgfCAnYzh5X0NBTm9wZW5EZXZpY2VUeXBlJ1xuICB8ICdjOHlfTG9yYURldmljZVR5cGUnXG4gIHwgJ2M4eV9TaWdmb3hEZXZpY2VUeXBlJ1xuICB8ICdjOHlfRGV2aWNlU2hlbGxUZW1wbGF0ZSc7XG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEdsb2JhbENvbmZpZ1NlcnZpY2Uge1xuICBwcm90ZWN0ZWQgY2FjaGU6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQ+PjtcblxuICBwcml2YXRlIGZyYWdtZW50VHlwZU1hcHBpbmc6IHsgW2tleSBpbiBNYW5hZ2VkT2JqZWN0VHlwZUZvckNvbmZpZ106IHN0cmluZyB9ID0ge1xuICAgIGM4eV9Tb2Z0d2FyZTogJ2M4eV9Tb2Z0d2FyZUFzR2xvYmFsJyxcbiAgICBjOHlfRmlybXdhcmU6ICdjOHlfRmlybXdhcmVBc0dsb2JhbCcsXG4gICAgYzh5X0NvbmZpZ3VyYXRpb25EdW1wOiAnYzh5X0NvbmZpZ3VyYXRpb25Bc0dsb2JhbCcsXG4gICAgYzh5X0RldmljZVNoZWxsVGVtcGxhdGU6ICdjOHlfU2hlbGxUZW1wbGF0ZUFzR2xvYmFsJyxcbiAgICBjOHlfTW9kYnVzRGV2aWNlVHlwZTogJ2M4eV9GaWVsZGJ1c0FzR2xvYmFsJyxcbiAgICBjOHlfQ0FOb3BlbkRldmljZVR5cGU6ICdjOHlfQ0FOT3BlbkFzR2xvYmFsJyxcbiAgICBjOHlfTG9yYURldmljZVR5cGU6ICdjOHlfTG9yYUFzR2xvYmFsJyxcbiAgICBjOHlfU2lnZm94RGV2aWNlVHlwZTogJ2M4eV9TaWdmb3hBc0dsb2JhbCdcbiAgfSBhcyBjb25zdDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGludmVudG9yeTogSW52ZW50b3J5U2VydmljZSkge1xuICAgIHRoaXMuY2FjaGUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvbiBmb3IgYSBzcGVjaWZpYyBmcmFnbWVudCB0eXBlLlxuICAgKiBAcGFyYW0gZnJhZ21lbnRUeXBlIC0gVGhlIGZyYWdtZW50IHR5cGUgb24gd2hpY2ggdGhlIG1hbmFnZWQgb2JqZWN0IHR5cGUgY29ycmVzcG9uZHMuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGluIHRoZSBmaXJzdCBnbG9iYWwgY29uZmlndXJhdGlvbiBtYW5hZ2VkIG9iamVjdC5cbiAgICovXG4gIGFzeW5jIGdldEdsb2JhbENvbmZpZyhmcmFnbWVudFR5cGU6IHN0cmluZyk6IFByb21pc2U8SU1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHtcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgdHlwZTogJ2M4eV9HbG9iYWxPYmplY3RDb25maWd1cmF0aW9uJyxcbiAgICAgIGNyZWF0ZWRGcm9tOiAnMTk5MC0wMS0wMScsXG4gICAgICBmcmFnbWVudFR5cGVcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLmNhY2hlKSB7XG4gICAgICB0aGlzLmNhY2hlID0gdGhpcy5pbnZlbnRvcnkubGlzdChxdWVyeVBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLmNhY2hlKT8uZGF0YVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgd2hldGhlciBhbiBvYmplY3Qgc2hvdWxkIGluY2x1ZGUgdGhlIGM4eV9HbG9iYWwgZnJhZ21lbnQgaW4gaXRzIGRlY2xhcmF0aW9uLlxuICAgKiBJZiB0aGUgZnJhZ21lbnQgaXMgc2V0IHRvIGZhbHNlIGl0IHNob3VsZCByZXR1cm4gZmFsc2U7XG4gICAqIElmIHRoZSBmcmFnbWVudCBpcyBzZXQgdG8gdHJ1ZSAgaXQgc2hvdWxkIHJldHVybiB0cnVlO1xuICAgKiBJZiBubyBmcmFnbWVudCBpcyBhdmFpbGFibGUgIGl0IHNob3VsZCByZXR1cm4gdHJ1ZTtcbiAgICogQHBhcmFtIG9iamVjdFR5cGUgLSBUaGUgdHlwZSBvZiBtYW5hZ2VkIG9iamVjdC5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgaW50byBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBnbG9iYWwgcGFyYW1ldGVyIHNob3VsZCBiZSBzZXQuXG4gICAqL1xuICBnZXRHbG9iYWxQYXJhbShvYmplY3RUeXBlOiBNYW5hZ2VkT2JqZWN0VHlwZUZvckNvbmZpZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGZyYWdtZW50VHlwZSA9IHRoaXMuZnJhZ21lbnRUeXBlTWFwcGluZ1tvYmplY3RUeXBlXTtcblxuICAgIHJldHVybiB0aGlzLmdldEdsb2JhbENvbmZpZyhmcmFnbWVudFR5cGUpLnRoZW4ocmVzdWx0ID0+XG4gICAgICByZXN1bHQgJiYgcmVzdWx0W2ZyYWdtZW50VHlwZV0gIT09IHVuZGVmaW5lZCA/ICEhcmVzdWx0W2ZyYWdtZW50VHlwZV0gOiB0cnVlXG4gICAgKTtcbiAgfVxufVxuIl19
57
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xvYmFsLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vY29yZS9jb21tb24vZ2xvYmFsLWNvbmZpZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFrQixnQkFBZ0IsRUFBZSxNQUFNLGFBQWEsQ0FBQzs7O0FBYTVFLE1BQU0sT0FBTyxtQkFBbUI7SUFlOUIsWUFBb0IsU0FBMkI7UUFBM0IsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFadkMsd0JBQW1CLEdBQW9EO1lBQzdFLFlBQVksRUFBRSxzQkFBc0I7WUFDcEMsWUFBWSxFQUFFLHNCQUFzQjtZQUNwQyxxQkFBcUIsRUFBRSwyQkFBMkI7WUFDbEQsdUJBQXVCLEVBQUUsMkJBQTJCO1lBQ3BELG9CQUFvQixFQUFFLHNCQUFzQjtZQUM1QyxxQkFBcUIsRUFBRSxxQkFBcUI7WUFDNUMsa0JBQWtCLEVBQUUsa0JBQWtCO1lBQ3RDLG9CQUFvQixFQUFFLG9CQUFvQjtZQUMxQyxXQUFXLEVBQUUscUJBQXFCO1NBQzFCLENBQUM7UUFHVCxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxlQUFlLENBQUMsWUFBb0I7UUFDeEMsTUFBTSxXQUFXLEdBQUc7WUFDbEIsUUFBUSxFQUFFLENBQUM7WUFDWCxJQUFJLEVBQUUsK0JBQStCO1lBQ3JDLFdBQVcsRUFBRSxZQUFZO1lBQ3pCLFlBQVk7U0FDYixDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsY0FBYyxDQUFDLFVBQXNDO1FBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQ3RELE1BQU0sSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQzdFLENBQUM7SUFDSixDQUFDOzhHQXJEVSxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUROLE1BQU07OzJGQUNuQixtQkFBbUI7a0JBRC9CLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeVNlcnZpY2UsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5leHBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0VHlwZUZvckNvbmZpZyA9XG4gIHwgJ2M4eV9Tb2Z0d2FyZSdcbiAgfCAnYzh5X0Zpcm13YXJlJ1xuICB8ICdjOHlfQ29uZmlndXJhdGlvbkR1bXAnXG4gIHwgJ2M4eV9Nb2RidXNEZXZpY2VUeXBlJ1xuICB8ICdjOHlfQ0FOb3BlbkRldmljZVR5cGUnXG4gIHwgJ2M4eV9Mb3JhRGV2aWNlVHlwZSdcbiAgfCAnYzh5X1NpZ2ZveERldmljZVR5cGUnXG4gIHwgJ2M4eV9EZXZpY2VTaGVsbFRlbXBsYXRlJ1xuICB8ICdjOHlfUHJvZmlsZSc7XG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEdsb2JhbENvbmZpZ1NlcnZpY2Uge1xuICBwcm90ZWN0ZWQgY2FjaGU6IFByb21pc2U8SVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQ+PjtcblxuICBwcml2YXRlIGZyYWdtZW50VHlwZU1hcHBpbmc6IHsgW2tleSBpbiBNYW5hZ2VkT2JqZWN0VHlwZUZvckNvbmZpZ106IHN0cmluZyB9ID0ge1xuICAgIGM4eV9Tb2Z0d2FyZTogJ2M4eV9Tb2Z0d2FyZUFzR2xvYmFsJyxcbiAgICBjOHlfRmlybXdhcmU6ICdjOHlfRmlybXdhcmVBc0dsb2JhbCcsXG4gICAgYzh5X0NvbmZpZ3VyYXRpb25EdW1wOiAnYzh5X0NvbmZpZ3VyYXRpb25Bc0dsb2JhbCcsXG4gICAgYzh5X0RldmljZVNoZWxsVGVtcGxhdGU6ICdjOHlfU2hlbGxUZW1wbGF0ZUFzR2xvYmFsJyxcbiAgICBjOHlfTW9kYnVzRGV2aWNlVHlwZTogJ2M4eV9GaWVsZGJ1c0FzR2xvYmFsJyxcbiAgICBjOHlfQ0FOb3BlbkRldmljZVR5cGU6ICdjOHlfQ0FOT3BlbkFzR2xvYmFsJyxcbiAgICBjOHlfTG9yYURldmljZVR5cGU6ICdjOHlfTG9yYUFzR2xvYmFsJyxcbiAgICBjOHlfU2lnZm94RGV2aWNlVHlwZTogJ2M4eV9TaWdmb3hBc0dsb2JhbCcsXG4gICAgYzh5X1Byb2ZpbGU6ICdjOHlfUHJvZmlsZUFzR2xvYmFsJ1xuICB9IGFzIGNvbnN0O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW52ZW50b3J5OiBJbnZlbnRvcnlTZXJ2aWNlKSB7XG4gICAgdGhpcy5jYWNoZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIGZvciBhIHNwZWNpZmljIGZyYWdtZW50IHR5cGUuXG4gICAqIEBwYXJhbSBmcmFnbWVudFR5cGUgLSBUaGUgZnJhZ21lbnQgdHlwZSBvbiB3aGljaCB0aGUgbWFuYWdlZCBvYmplY3QgdHlwZSBjb3JyZXNwb25kcy5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgaW4gdGhlIGZpcnN0IGdsb2JhbCBjb25maWd1cmF0aW9uIG1hbmFnZWQgb2JqZWN0LlxuICAgKi9cbiAgYXN5bmMgZ2V0R2xvYmFsQ29uZmlnKGZyYWdtZW50VHlwZTogc3RyaW5nKTogUHJvbWlzZTxJTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0ge1xuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICB0eXBlOiAnYzh5X0dsb2JhbE9iamVjdENvbmZpZ3VyYXRpb24nLFxuICAgICAgY3JlYXRlZEZyb206ICcxOTkwLTAxLTAxJyxcbiAgICAgIGZyYWdtZW50VHlwZVxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuY2FjaGUpIHtcbiAgICAgIHRoaXMuY2FjaGUgPSB0aGlzLmludmVudG9yeS5saXN0KHF1ZXJ5UGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuY2FjaGUpPy5kYXRhWzBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyB3aGV0aGVyIGFuIG9iamVjdCBzaG91bGQgaW5jbHVkZSB0aGUgYzh5X0dsb2JhbCBmcmFnbWVudCBpbiBpdHMgZGVjbGFyYXRpb24uXG4gICAqIElmIHRoZSBmcmFnbWVudCBpcyBzZXQgdG8gZmFsc2UgaXQgc2hvdWxkIHJldHVybiBmYWxzZTtcbiAgICogSWYgdGhlIGZyYWdtZW50IGlzIHNldCB0byB0cnVlICBpdCBzaG91bGQgcmV0dXJuIHRydWU7XG4gICAqIElmIG5vIGZyYWdtZW50IGlzIGF2YWlsYWJsZSAgaXQgc2hvdWxkIHJldHVybiB0cnVlO1xuICAgKiBAcGFyYW0gb2JqZWN0VHlwZSAtIFRoZSB0eXBlIG9mIG1hbmFnZWQgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBpbnRvIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGdsb2JhbCBwYXJhbWV0ZXIgc2hvdWxkIGJlIHNldC5cbiAgICovXG4gIGdldEdsb2JhbFBhcmFtKG9iamVjdFR5cGU6IE1hbmFnZWRPYmplY3RUeXBlRm9yQ29uZmlnKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZnJhZ21lbnRUeXBlID0gdGhpcy5mcmFnbWVudFR5cGVNYXBwaW5nW29iamVjdFR5cGVdO1xuXG4gICAgcmV0dXJuIHRoaXMuZ2V0R2xvYmFsQ29uZmlnKGZyYWdtZW50VHlwZSkudGhlbihyZXN1bHQgPT5cbiAgICAgIHJlc3VsdCAmJiByZXN1bHRbZnJhZ21lbnRUeXBlXSAhPT0gdW5kZWZpbmVkID8gISFyZXN1bHRbZnJhZ21lbnRUeXBlXSA6IHRydWVcbiAgICApO1xuICB9XG59XG4iXX0=