@c8y/ngx-components 1020.33.1 → 1020.39.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/auth-configuration/sso-configuration/sso-configuration.model.d.ts +2 -0
  2. package/auth-configuration/sso-configuration/sso-configuration.model.d.ts.map +1 -1
  3. package/auth-configuration/sso-configuration/sso-configuration.service.d.ts.map +1 -1
  4. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts +5 -0
  5. package/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.d.ts.map +1 -1
  6. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts +7 -0
  7. package/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.d.ts.map +1 -1
  8. package/auth-configuration/sso-configuration/templates/aad-configuration-mapper.d.ts.map +1 -1
  9. package/auth-configuration/sso-configuration/templates/aad.model.d.ts +1 -0
  10. package/auth-configuration/sso-configuration/templates/aad.model.d.ts.map +1 -1
  11. package/auth-configuration/sso-configuration/templates/custom-configuration-mapper.d.ts.map +1 -1
  12. package/auth-configuration/sso-configuration/templates/custom.model.d.ts +1 -0
  13. package/auth-configuration/sso-configuration/templates/custom.model.d.ts.map +1 -1
  14. package/auth-configuration/sso-configuration/templates/key-cloak-configuration-mapper.d.ts.map +1 -1
  15. package/auth-configuration/sso-configuration/templates/key-cloak.model.d.ts +1 -0
  16. package/auth-configuration/sso-configuration/templates/key-cloak.model.d.ts.map +1 -1
  17. package/context-dashboard/context-dashboard.component.d.ts +4 -0
  18. package/context-dashboard/context-dashboard.component.d.ts.map +1 -1
  19. package/context-dashboard/context-dashboard.model.d.ts +2 -32
  20. package/context-dashboard/context-dashboard.model.d.ts.map +1 -1
  21. package/context-dashboard/dashboard-detail.component.d.ts +2 -0
  22. package/context-dashboard/dashboard-detail.component.d.ts.map +1 -1
  23. package/core/dynamic-component/dynamic-component.model.d.ts +135 -1
  24. package/core/dynamic-component/dynamic-component.model.d.ts.map +1 -1
  25. package/core/dynamic-forms/typeahead/typeahead.type.component.d.ts.map +1 -1
  26. package/core/product-experience/gainsight.service.d.ts +1 -0
  27. package/core/product-experience/gainsight.service.d.ts.map +1 -1
  28. package/core/select/typeahead.component.d.ts.map +1 -1
  29. package/esm2022/auth-configuration/sso-configuration/sso-configuration.model.mjs +1 -1
  30. package/esm2022/auth-configuration/sso-configuration/sso-configuration.service.mjs +5 -3
  31. package/esm2022/auth-configuration/sso-configuration/template-parts/access-mapping/access-mapping.component.mjs +25 -11
  32. package/esm2022/auth-configuration/sso-configuration/template-parts/user-data-mapping.component.mjs +18 -8
  33. package/esm2022/auth-configuration/sso-configuration/templates/aad-configuration-mapper.mjs +5 -3
  34. package/esm2022/auth-configuration/sso-configuration/templates/aad-template.component.mjs +3 -3
  35. package/esm2022/auth-configuration/sso-configuration/templates/aad.model.mjs +1 -1
  36. package/esm2022/auth-configuration/sso-configuration/templates/custom-configuration-mapper.mjs +5 -3
  37. package/esm2022/auth-configuration/sso-configuration/templates/custom-template.component.mjs +3 -3
  38. package/esm2022/auth-configuration/sso-configuration/templates/custom.model.mjs +1 -1
  39. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak-configuration-mapper.mjs +5 -3
  40. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak-template.component.mjs +3 -3
  41. package/esm2022/auth-configuration/sso-configuration/templates/key-cloak.model.mjs +1 -1
  42. package/esm2022/context-dashboard/context-dashboard.component.mjs +85 -23
  43. package/esm2022/context-dashboard/context-dashboard.model.mjs +1 -1
  44. package/esm2022/context-dashboard/dashboard-detail.component.mjs +42 -11
  45. package/esm2022/core/dynamic-component/dynamic-component.model.mjs +28 -1
  46. package/esm2022/core/dynamic-forms/typeahead/typeahead.type.component.mjs +2 -3
  47. package/esm2022/core/product-experience/gainsight.service.mjs +15 -1
  48. package/esm2022/core/select/typeahead.component.mjs +9 -4
  49. package/esm2022/repository/firmware/list/add-firmware-patch-modal.component.mjs +3 -3
  50. package/esm2022/trusted-certificates/list/trusted-certificate-list.component.mjs +2 -2
  51. package/esm2022/widgets/cockpit/index.mjs +1 -1
  52. package/esm2022/widgets/definitions/alarms/alarm-list/index.mjs +3 -3
  53. package/esm2022/widgets/definitions/alarms/all-critical-alarms/index.mjs +3 -3
  54. package/esm2022/widgets/definitions/alarms/recent-alarms/index.mjs +3 -3
  55. package/esm2022/widgets/definitions/applications/index.mjs +3 -3
  56. package/esm2022/widgets/definitions/cockpit-legacy-welcome/index.mjs +3 -3
  57. package/esm2022/widgets/definitions/cockpit-welcome/index.mjs +3 -3
  58. package/esm2022/widgets/definitions/device-control-message/index.mjs +3 -3
  59. package/esm2022/widgets/definitions/device-management-welcome/index.mjs +1 -1
  60. package/esm2022/widgets/definitions/help-and-service/index.mjs +3 -3
  61. package/esm2022/widgets/definitions/image/index.mjs +3 -3
  62. package/esm2022/widgets/definitions/info-gauge/index.mjs +3 -3
  63. package/esm2022/widgets/definitions/kpi/index.mjs +3 -3
  64. package/esm2022/widgets/definitions/map/index.mjs +3 -3
  65. package/esm2022/widgets/definitions/markdown/index.mjs +3 -3
  66. package/esm2022/widgets/definitions/three-d-rotation/index.mjs +3 -3
  67. package/esm2022/widgets/device-management/index.mjs +1 -1
  68. package/esm2022/widgets/widgets.module.mjs +3 -3
  69. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +118 -86
  70. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  71. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +123 -31
  72. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  73. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -2
  74. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  75. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +1 -1
  76. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  77. package/fesm2022/c8y-ngx-components-widgets-cockpit.mjs.map +1 -1
  78. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs +2 -2
  79. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-alarm-list.mjs.map +1 -1
  80. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs +2 -2
  81. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-all-critical-alarms.mjs.map +1 -1
  82. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs +2 -2
  83. package/fesm2022/c8y-ngx-components-widgets-definitions-alarms-recent-alarms.mjs.map +1 -1
  84. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs +2 -2
  85. package/fesm2022/c8y-ngx-components-widgets-definitions-applications.mjs.map +1 -1
  86. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs +2 -2
  87. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-legacy-welcome.mjs.map +1 -1
  88. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs +2 -2
  89. package/fesm2022/c8y-ngx-components-widgets-definitions-cockpit-welcome.mjs.map +1 -1
  90. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs +2 -2
  91. package/fesm2022/c8y-ngx-components-widgets-definitions-device-control-message.mjs.map +1 -1
  92. package/fesm2022/c8y-ngx-components-widgets-definitions-device-management-welcome.mjs.map +1 -1
  93. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs +2 -2
  94. package/fesm2022/c8y-ngx-components-widgets-definitions-help-and-service.mjs.map +1 -1
  95. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs +2 -2
  96. package/fesm2022/c8y-ngx-components-widgets-definitions-image.mjs.map +1 -1
  97. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs +2 -2
  98. package/fesm2022/c8y-ngx-components-widgets-definitions-info-gauge.mjs.map +1 -1
  99. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs +2 -2
  100. package/fesm2022/c8y-ngx-components-widgets-definitions-kpi.mjs.map +1 -1
  101. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs +2 -2
  102. package/fesm2022/c8y-ngx-components-widgets-definitions-map.mjs.map +1 -1
  103. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs +2 -2
  104. package/fesm2022/c8y-ngx-components-widgets-definitions-markdown.mjs.map +1 -1
  105. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs +2 -2
  106. package/fesm2022/c8y-ngx-components-widgets-definitions-three-d-rotation.mjs.map +1 -1
  107. package/fesm2022/c8y-ngx-components-widgets-device-management.mjs.map +1 -1
  108. package/fesm2022/c8y-ngx-components-widgets.mjs +2 -2
  109. package/fesm2022/c8y-ngx-components-widgets.mjs.map +1 -1
  110. package/fesm2022/c8y-ngx-components.mjs +49 -4
  111. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  112. package/locales/de.po +46 -12
  113. package/locales/en.po +7 -7
  114. package/locales/es.po +40 -12
  115. package/locales/fr.po +40 -12
  116. package/locales/ja_JP.po +43 -12
  117. package/locales/locales.pot +35 -14
  118. package/locales/nl.po +40 -12
  119. package/locales/pl.po +40 -12
  120. package/locales/pt_BR.po +40 -12
  121. package/package.json +1 -1
  122. package/widgets/cockpit/index.d.ts.map +1 -1
  123. package/widgets/definitions/alarms/alarm-list/index.d.ts.map +1 -1
  124. package/widgets/definitions/alarms/all-critical-alarms/index.d.ts.map +1 -1
  125. package/widgets/definitions/alarms/recent-alarms/index.d.ts.map +1 -1
  126. package/widgets/definitions/applications/index.d.ts.map +1 -1
  127. package/widgets/definitions/cockpit-legacy-welcome/index.d.ts.map +1 -1
  128. package/widgets/definitions/cockpit-welcome/index.d.ts.map +1 -1
  129. package/widgets/definitions/device-control-message/index.d.ts.map +1 -1
  130. package/widgets/definitions/device-management-welcome/index.d.ts.map +1 -1
  131. package/widgets/definitions/help-and-service/index.d.ts.map +1 -1
  132. package/widgets/definitions/image/index.d.ts.map +1 -1
  133. package/widgets/definitions/info-gauge/index.d.ts.map +1 -1
  134. package/widgets/definitions/kpi/index.d.ts.map +1 -1
  135. package/widgets/definitions/map/index.d.ts.map +1 -1
  136. package/widgets/definitions/markdown/index.d.ts.map +1 -1
  137. package/widgets/definitions/three-d-rotation/index.d.ts.map +1 -1
  138. package/widgets/device-management/index.d.ts.map +1 -1
  139. package/widgets/widgets.module.d.ts +2 -2
  140. package/widgets/widgets.module.d.ts.map +1 -1
@@ -67,7 +67,8 @@ export class SsoConfigurationService {
67
67
  inventoryMappings: [],
68
68
  configuration: {
69
69
  mapRolesOnlyForNewUser: false,
70
- manageRolesOnlyFromAccessMapping: false
70
+ manageRolesOnlyFromAccessMapping: false,
71
+ mapFromIdToken: false
71
72
  }
72
73
  }
73
74
  },
@@ -91,7 +92,8 @@ export class SsoConfigurationService {
91
92
  accessTokenToUserDataMappings: {},
92
93
  externalTokenConfig: {
93
94
  enabled: false
94
- }
95
+ },
96
+ useIdToken: false
95
97
  };
96
98
  }
97
99
  getSsoConfiguration$() {
@@ -109,4 +111,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
109
111
  providedIn: 'root'
110
112
  }]
111
113
  }], ctorParameters: () => [{ type: i1.TenantLoginOptionsService }] });
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NvLWNvbmZpZ3VyYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLFNBQVMsRUFFVCx5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNyQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQW9CLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBS3RELE1BQU0sT0FBTyx1QkFBdUI7SUE2RmxDLFlBQW9CLG1CQUE4QztRQUE5Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTJCO1FBNUYxRCxzQkFBaUIsR0FBbUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUNyRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUM5RCxDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQ3BCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxL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VTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBHcmFudFR5cGUsXG4gIElUZW5hbnRMb2dpbk9wdGlvbixcbiAgVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgVGVuYW50TG9naW5PcHRpb25UeXBlLFxuICBVc2VyTWFuYWdlbWVudFNvdXJjZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBTc29Db25maWd1cmF0aW9uLCBUZW1wbGF0ZVR5cGUgfSBmcm9tICcuL3Nzby1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IGRlZmVyLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBwdWJsaXNoUmVwbGF5LCByZWZDb3VudCwgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTc29Db25maWd1cmF0aW9uU2VydmljZSB7XG4gIHByaXZhdGUgc3NvQ29uZmlndXJhdGlvbiQ6IE9ic2VydmFibGU8SVRlbmFudExvZ2luT3B0aW9uPiA9IGRlZmVyKCgpID0+XG4gICAgdGhpcy5sb2dpbk9wdGlvbnNTZXJ2aWNlLmRldGFpbChUZW5hbnRMb2dpbk9wdGlvblR5cGUuT0FVVEgyKVxuICApLnBpcGUoXG4gICAgbWFwKHJlcyA9PiByZXMuZGF0YSksXG4gICAgY2F0Y2hFcnJvcigoeyByZXMgfSkgPT4ge1xuICAgICAgaWYgKHJlcy5zdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLkZvcmJpZGRlbikgcmV0dXJuIHRocm93RXJyb3IobmV3IEVycm9yKCkpO1xuICAgICAgZWxzZSByZXR1cm4gb2YodGhpcy5kZWZhdWx0Q29uZmlndXJhdGlvbik7XG4gICAgfSksXG4gICAgcHVibGlzaFJlcGxheSgxLCAxMDAwKSxcbiAgICByZWZDb3VudCgpLFxuICAgIHRha2UoMSlcbiAgKTtcblxuICBwcml2YXRlIGRlZmF1bHRDb25maWd1cmF0aW9uOiBTc29Db25maWd1cmF0aW9uID0ge1xuICAgIGF1dGhvcml6YXRpb25SZXF1ZXN0OiB7XG4gICAgICBib2R5OiAnJyxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgIG9wZXJhdGlvbjogJ1JFRElSRUNUJyxcbiAgICAgIHJlcXVlc3RQYXJhbXM6IHtcbiAgICAgICAgcmVzcG9uc2VfdHlwZTogJ2NvZGUnLFxuICAgICAgICBjbGllbnRfaWQ6ICcke2NsaWVudElkfScsXG4gICAgICAgIHJlZGlyZWN0X3VyaTogJyR7cmVkaXJlY3RVcml9JyxcbiAgICAgICAgc2NvcGU6ICcnXG4gICAgICB9XG4gICAgfSxcbiAgICB0b2tlblJlcXVlc3Q6IHtcbiAgICAgIGJvZHk6ICdncmFudF90eXBlPWF1dGhvcml6YXRpb25fY29kZSZjb2RlPSR7Y29kZX0mcmVkaXJlY3RfdXJpPSR7cmVkaXJlY3RVcml9JmNsaWVudF9pZD0ke2NsaWVudElkfScsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgb3BlcmF0aW9uOiAnRVhFQ1VURScsXG4gICAgICByZXF1ZXN0UGFyYW1zOiB7XG4gICAgICAgIHJlc3BvbnNlX3R5cGU6ICdjb2RlJyxcbiAgICAgICAgY2xpZW50X2lkOiAnJHtjbGllbnRJZH0nLFxuICAgICAgICByZWRpcmVjdF91cmk6ICcke3JlZGlyZWN0VXJpfScsXG4gICAgICAgIHNjb3BlOiAnJ1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVmcmVzaFJlcXVlc3Q6IHtcbiAgICAgIGJvZHk6ICdncmFudF90eXBlPXJlZnJlc2hfdG9rZW4mcmVmcmVzaF90b2tlbj0ke3JlZnJlc2hUb2tlbn0mY2xpZW50X2lkPSR7Y2xpZW50SWR9JyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQXV0aG9yaXphdGlvbjogJydcbiAgICAgIH0sXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIG9wZXJhdGlvbjogJ0VYRUNVVEUnLFxuICAgICAgcmVxdWVzdFBhcmFtczoge1xuICAgICAgICByZXNwb25zZV90eXBlOiAncmVmcmVzaCcsXG4gICAgICAgIGNsaWVudF9pZDogJyR7Y2xpZW50SWR9J1xuICAgICAgfVxuICAgIH0sXG4gICAgbG9nb3V0UmVxdWVzdDoge1xuICAgICAgaGVhZGVyczoge30sXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIG9wZXJhdGlvbjogJ1JFRElSRUNUJyxcbiAgICAgIHJlcXVlc3RQYXJhbXM6IHt9XG4gICAgfSxcbiAgICB0eXBlOiBUZW5hbnRMb2dpbk9wdGlvblR5cGUuT0FVVEgyLFxuICAgIGdyYW50VHlwZTogR3JhbnRUeXBlLkFVVEhPUklaQVRJT05fQ09ERSxcbiAgICB1c2VyTWFuYWdlbWVudFNvdXJjZTogVXNlck1hbmFnZW1lbnRTb3VyY2UuUkVNT1RFLFxuICAgIG9uTmV3VXNlcjoge1xuICAgICAgZHluYW1pY01hcHBpbmc6IHtcbiAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICBpbnZlbnRvcnlNYXBwaW5nczogW10sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBtYXBSb2xlc09ubHlGb3JOZXdVc2VyOiBmYWxzZSxcbiAgICAgICAgICBtYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZzogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgdXNlcklkQ29uZmlnOiB7XG4gICAgICBqd3RGaWVsZDogJycsXG4gICAgICB1c2VDb25zdGFudFZhbHVlOiB0cnVlXG4gICAgfSxcbiAgICBzaWduYXR1cmVWZXJpZmljYXRpb25Db25maWc6IHtcbiAgICAgIG1hbnVhbDoge1xuICAgICAgICBjZXJ0SWRGcm9tRmllbGQ6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICB0ZW1wbGF0ZTogVGVtcGxhdGVUeXBlLkNVU1RPTSxcbiAgICBjbGllbnRJZDogJycsXG4gICAgYXVkaWVuY2U6ICcnLFxuICAgIGlzc3VlcjogJycsXG4gICAgYnV0dG9uTmFtZTogJycsXG4gICAgcmVkaXJlY3RUb1BsYXRmb3JtOiAnJyxcbiAgICBwcm92aWRlck5hbWU6ICcnLFxuICAgIHZpc2libGVPbkxvZ2luUGFnZTogdHJ1ZSxcbiAgICBhY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5nczoge30sXG4gICAgZXh0ZXJuYWxUb2tlbkNvbmZpZzoge1xuICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb2dpbk9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlKSB7fVxuXG4gIGdldFNzb0NvbmZpZ3VyYXRpb24kKCk6IE9ic2VydmFibGU8SVRlbmFudExvZ2luT3B0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuc3NvQ29uZmlndXJhdGlvbiQ7XG4gIH1cblxuICBzYXZlKHNzb0NvbmZpZ3VyYXRpb246IFNzb0NvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5sb2dpbk9wdGlvbnNTZXJ2aWNlLnNhdmUoc3NvQ29uZmlndXJhdGlvbik7XG4gIH1cbn1cbiJdfQ==
114
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NvLWNvbmZpZ3VyYXRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLFNBQVMsRUFFVCx5QkFBeUIsRUFDekIscUJBQXFCLEVBQ3JCLG9CQUFvQixFQUNyQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQW9CLFlBQVksRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBS3RELE1BQU0sT0FBTyx1QkFBdUI7SUErRmxDLFlBQW9CLG1CQUE4QztRQUE5Qyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQTJCO1FBOUYxRCxzQkFBaUIsR0FBbUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUNyRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUM5RCxDQUFDLElBQUksQ0FDSixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQ3BCLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRTtZQUNyQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssY0FBYyxDQUFDLFNBQVM7Z0JBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxL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LHVCQUF1QixjQUZ0QixNQUFNOzsyRkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgR3JhbnRUeXBlLFxuICBJVGVuYW50TG9naW5PcHRpb24sXG4gIFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsXG4gIFRlbmFudExvZ2luT3B0aW9uVHlwZSxcbiAgVXNlck1hbmFnZW1lbnRTb3VyY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgU3NvQ29uZmlndXJhdGlvbiwgVGVtcGxhdGVUeXBlIH0gZnJvbSAnLi9zc28tY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBkZWZlciwgT2JzZXJ2YWJsZSwgb2YsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCwgcHVibGlzaFJlcGxheSwgcmVmQ291bnQsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3NvQ29uZmlndXJhdGlvblNlcnZpY2Uge1xuICBwcml2YXRlIHNzb0NvbmZpZ3VyYXRpb24kOiBPYnNlcnZhYmxlPElUZW5hbnRMb2dpbk9wdGlvbj4gPSBkZWZlcigoKSA9PlxuICAgIHRoaXMubG9naW5PcHRpb25zU2VydmljZS5kZXRhaWwoVGVuYW50TG9naW5PcHRpb25UeXBlLk9BVVRIMilcbiAgKS5waXBlKFxuICAgIG1hcChyZXMgPT4gcmVzLmRhdGEpLFxuICAgIGNhdGNoRXJyb3IoKHsgcmVzIH0pID0+IHtcbiAgICAgIGlmIChyZXMuc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Gb3JiaWRkZW4pIHJldHVybiB0aHJvd0Vycm9yKG5ldyBFcnJvcigpKTtcbiAgICAgIGVsc2UgcmV0dXJuIG9mKHRoaXMuZGVmYXVsdENvbmZpZ3VyYXRpb24pO1xuICAgIH0pLFxuICAgIHB1Ymxpc2hSZXBsYXkoMSwgMTAwMCksXG4gICAgcmVmQ291bnQoKSxcbiAgICB0YWtlKDEpXG4gICk7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0Q29uZmlndXJhdGlvbjogU3NvQ29uZmlndXJhdGlvbiA9IHtcbiAgICBhdXRob3JpemF0aW9uUmVxdWVzdDoge1xuICAgICAgYm9keTogJycsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICBvcGVyYXRpb246ICdSRURJUkVDVCcsXG4gICAgICByZXF1ZXN0UGFyYW1zOiB7XG4gICAgICAgIHJlc3BvbnNlX3R5cGU6ICdjb2RlJyxcbiAgICAgICAgY2xpZW50X2lkOiAnJHtjbGllbnRJZH0nLFxuICAgICAgICByZWRpcmVjdF91cmk6ICcke3JlZGlyZWN0VXJpfScsXG4gICAgICAgIHNjb3BlOiAnJ1xuICAgICAgfVxuICAgIH0sXG4gICAgdG9rZW5SZXF1ZXN0OiB7XG4gICAgICBib2R5OiAnZ3JhbnRfdHlwZT1hdXRob3JpemF0aW9uX2NvZGUmY29kZT0ke2NvZGV9JnJlZGlyZWN0X3VyaT0ke3JlZGlyZWN0VXJpfSZjbGllbnRfaWQ9JHtjbGllbnRJZH0nLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIG9wZXJhdGlvbjogJ0VYRUNVVEUnLFxuICAgICAgcmVxdWVzdFBhcmFtczoge1xuICAgICAgICByZXNwb25zZV90eXBlOiAnY29kZScsXG4gICAgICAgIGNsaWVudF9pZDogJyR7Y2xpZW50SWR9JyxcbiAgICAgICAgcmVkaXJlY3RfdXJpOiAnJHtyZWRpcmVjdFVyaX0nLFxuICAgICAgICBzY29wZTogJydcbiAgICAgIH1cbiAgICB9LFxuICAgIHJlZnJlc2hSZXF1ZXN0OiB7XG4gICAgICBib2R5OiAnZ3JhbnRfdHlwZT1yZWZyZXNoX3Rva2VuJnJlZnJlc2hfdG9rZW49JHtyZWZyZXNoVG9rZW59JmNsaWVudF9pZD0ke2NsaWVudElkfScsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEF1dGhvcml6YXRpb246ICcnXG4gICAgICB9LFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBvcGVyYXRpb246ICdFWEVDVVRFJyxcbiAgICAgIHJlcXVlc3RQYXJhbXM6IHtcbiAgICAgICAgcmVzcG9uc2VfdHlwZTogJ3JlZnJlc2gnLFxuICAgICAgICBjbGllbnRfaWQ6ICcke2NsaWVudElkfSdcbiAgICAgIH1cbiAgICB9LFxuICAgIGxvZ291dFJlcXVlc3Q6IHtcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBvcGVyYXRpb246ICdSRURJUkVDVCcsXG4gICAgICByZXF1ZXN0UGFyYW1zOiB7fVxuICAgIH0sXG4gICAgdHlwZTogVGVuYW50TG9naW5PcHRpb25UeXBlLk9BVVRIMixcbiAgICBncmFudFR5cGU6IEdyYW50VHlwZS5BVVRIT1JJWkFUSU9OX0NPREUsXG4gICAgdXNlck1hbmFnZW1lbnRTb3VyY2U6IFVzZXJNYW5hZ2VtZW50U291cmNlLlJFTU9URSxcbiAgICBvbk5ld1VzZXI6IHtcbiAgICAgIGR5bmFtaWNNYXBwaW5nOiB7XG4gICAgICAgIG1hcHBpbmdzOiBbXSxcbiAgICAgICAgaW52ZW50b3J5TWFwcGluZ3M6IFtdLFxuICAgICAgICBjb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgbWFwUm9sZXNPbmx5Rm9yTmV3VXNlcjogZmFsc2UsXG4gICAgICAgICAgbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmc6IGZhbHNlLFxuICAgICAgICAgIG1hcEZyb21JZFRva2VuOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VySWRDb25maWc6IHtcbiAgICAgIGp3dEZpZWxkOiAnJyxcbiAgICAgIHVzZUNvbnN0YW50VmFsdWU6IHRydWVcbiAgICB9LFxuICAgIHNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZzoge1xuICAgICAgbWFudWFsOiB7XG4gICAgICAgIGNlcnRJZEZyb21GaWVsZDogZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIHRlbXBsYXRlOiBUZW1wbGF0ZVR5cGUuQ1VTVE9NLFxuICAgIGNsaWVudElkOiAnJyxcbiAgICBhdWRpZW5jZTogJycsXG4gICAgaXNzdWVyOiAnJyxcbiAgICBidXR0b25OYW1lOiAnJyxcbiAgICByZWRpcmVjdFRvUGxhdGZvcm06ICcnLFxuICAgIHByb3ZpZGVyTmFtZTogJycsXG4gICAgdmlzaWJsZU9uTG9naW5QYWdlOiB0cnVlLFxuICAgIGFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzOiB7fSxcbiAgICBleHRlcm5hbFRva2VuQ29uZmlnOiB7XG4gICAgICBlbmFibGVkOiBmYWxzZVxuICAgIH0sXG4gICAgdXNlSWRUb2tlbjogZmFsc2VcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvZ2luT3B0aW9uc1NlcnZpY2U6IFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UpIHt9XG5cbiAgZ2V0U3NvQ29uZmlndXJhdGlvbiQoKTogT2JzZXJ2YWJsZTxJVGVuYW50TG9naW5PcHRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5zc29Db25maWd1cmF0aW9uJDtcbiAgfVxuXG4gIHNhdmUoc3NvQ29uZmlndXJhdGlvbjogU3NvQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiB0aGlzLmxvZ2luT3B0aW9uc1NlcnZpY2Uuc2F2ZShzc29Db25maWd1cmF0aW9uKTtcbiAgfVxufVxuIl19
@@ -18,6 +18,8 @@ export class AccessMappingComponent {
18
18
  this.UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION = gettext('Roles selected in the rules below will be reassigned to a user on each log in and other ones will be unchanged');
19
19
  this.CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP = gettext('The access mapping will be executed during the first login. The administrator cannot edit the SSO user roles. During the next login all the roles will be cleared and the mapping will be executed again.');
20
20
  this.CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION = gettext('Roles selected in the rules below will be reassigned to a user on each log in and other ones will be cleared');
21
+ this.RETRIVE_FROM_ACCESS_TOKEN = gettext('Retrieve from Access token');
22
+ this.RETRIVE_FROM_ID_TOKEN = gettext('Retrieve from ID token');
21
23
  }
22
24
  ngOnChanges() {
23
25
  if (this.templateModel && this.apps && this.groups) {
@@ -52,34 +54,46 @@ export class AccessMappingComponent {
52
54
  pull(this.templateModel.onNewUser.dynamicMapping.inventoryMappings, inventoryMapping);
53
55
  }
54
56
  setDynamicMappingConfiguration(mapRolesOnlyForNewUser, manageRolesOnlyFromAccessMapping = false) {
55
- this.templateModel.onNewUser.dynamicMapping.configuration = {
56
- mapRolesOnlyForNewUser,
57
- manageRolesOnlyFromAccessMapping
58
- };
57
+ this.dynamicMappingConfiguration.mapRolesOnlyForNewUser = mapRolesOnlyForNewUser;
58
+ this.dynamicMappingConfiguration.manageRolesOnlyFromAccessMapping =
59
+ manageRolesOnlyFromAccessMapping;
59
60
  this.controlContainer.control.markAsDirty();
60
61
  }
61
62
  get mapRolesOnlyForNewUser() {
62
- return this.templateModel.onNewUser.dynamicMapping.configuration.mapRolesOnlyForNewUser;
63
+ return this.dynamicMappingConfiguration.mapRolesOnlyForNewUser;
63
64
  }
64
65
  get manageRolesOnlyFromAccessMapping() {
65
- return this.templateModel.onNewUser.dynamicMapping.configuration
66
- .manageRolesOnlyFromAccessMapping;
66
+ return this.dynamicMappingConfiguration.manageRolesOnlyFromAccessMapping;
67
+ }
68
+ get mapFromIdToken() {
69
+ return this.dynamicMappingConfiguration.mapFromIdToken;
70
+ }
71
+ setMapFromIdToken(mapFromIdToken) {
72
+ this.dynamicMappingConfiguration.mapFromIdToken = mapFromIdToken;
73
+ this.controlContainer.control.markAsDirty();
74
+ }
75
+ get dynamicMappingConfiguration() {
76
+ return this.templateModel.onNewUser.dynamicMapping.configuration;
67
77
  }
68
78
  setDynamicMapping() {
69
79
  defaultsDeep(this.templateModel.onNewUser, {
70
80
  dynamicMapping: {
71
81
  mappings: [],
72
82
  inventoryMappings: [],
73
- configuration: { mapRolesOnlyForNewUser: false, manageRolesOnlyFromAccessMapping: false }
83
+ configuration: {
84
+ mapRolesOnlyForNewUser: false,
85
+ manageRolesOnlyFromAccessMapping: false,
86
+ mapFromIdToken: true
87
+ }
74
88
  }
75
89
  });
76
90
  }
77
91
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: AccessMappingComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
78
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: AccessMappingComponent, selector: "c8y-sso-access-mapping", inputs: { apps: "apps", groups: "groups", inventoryRoles: "inventoryRoles", templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i5.DynamicAccessMappingComponent, selector: "c8y-sso-dynamic-access-mapping", inputs: ["groups", "apps", "accessMapping", "accessMappingIndex"], outputs: ["onRemoveAccessMapping"] }, { kind: "component", type: i6.InventoryRolesMappingComponent, selector: "c8y-sso-inventory-roles-mapping", inputs: ["inventoryMapping", "inventoryMappingIndex", "inventoryRoles"], outputs: ["onRemoveInventoryMapping"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
92
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: AccessMappingComponent, selector: "c8y-sso-access-mapping", inputs: { apps: "apps", groups: "groups", inventoryRoles: "inventoryRoles", templateModel: "templateModel" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "component", type: i5.DynamicAccessMappingComponent, selector: "c8y-sso-dynamic-access-mapping", inputs: ["groups", "apps", "accessMapping", "accessMappingIndex"], outputs: ["onRemoveAccessMapping"] }, { kind: "component", type: i6.InventoryRolesMappingComponent, selector: "c8y-sso-inventory-roles-mapping", inputs: ["inventoryMapping", "inventoryMappingIndex", "inventoryRoles"], outputs: ["onRemoveInventoryMapping"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
79
93
  }
80
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: AccessMappingComponent, decorators: [{
81
95
  type: Component,
82
- args: [{ selector: 'c8y-sso-access-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
96
+ args: [{ selector: 'c8y-sso-access-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n Access mapping\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of dynamic access mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"!mapFromIdToken\"\n (change)=\"setMapFromIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingSource\"\n [checked]=\"mapFromIdToken\"\n (change)=\"setMapFromIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Dynamic access mapping principle' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--on-user-creation\"\n [checked]=\"mapRolesOnlyForNewUser\"\n (change)=\"setDynamicMappingConfiguration(true)\"\n />\n <span></span>\n <span>{{ USE_ACCESS_MAPPING_ON_USER_CREATION_OPTION | translate }}</span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ USE_ACCESS_MAPPING_ON_USER_CREATION_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-unchanged\"\n [checked]=\"!mapRolesOnlyForNewUser && manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, true)\"\n />\n <span></span>\n <span>\n {{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n type=\"button\"\n class=\"btn-help\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ UPDATE_ROLES_LISTED_IN_ACCESS_MAPPING_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <label\n title=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"dynamicAccessMappingConfiguration\"\n data-cy=\"c8y-inventory-roles-mapping--other-ones-will-be-cleared\"\n [checked]=\"!mapRolesOnlyForNewUser && !manageRolesOnlyFromAccessMapping\"\n (change)=\"setDynamicMappingConfiguration(false, false)\"\n />\n <span></span>\n <span>\n {{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_OPTION | translate }}\n </span>\n <button\n class=\"btn-help\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLEAR_AND_UPDATED_ROLES_ON_EACH_LOG_IN_TOOLTIP | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>{{ 'Dynamic access mapping' | translate }}</legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.mappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No access mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <div\n *ngFor=\"\n let accessMapping of templateModel.onNewUser.dynamicMapping.mappings;\n index as idx\n \"\n >\n <c8y-sso-dynamic-access-mapping\n [accessMapping]=\"accessMapping\"\n (onRemoveAccessMapping)=\"onRemove(accessMapping)\"\n [apps]=\"apps\"\n [groups]=\"groups\"\n [accessMappingIndex]=\"idx\"\n ></c8y-sso-dynamic-access-mapping>\n </div>\n <div class=\"p-t-16\">\n <button\n id=\"add-access-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add access mapping' | translate }}\"\n (click)=\"addAccessMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add access mapping' | translate }}\n </button>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset p-16\">\n <legend>\n {{ 'Inventory roles mapping' | translate }}\n </legend>\n <c8y-ui-empty-state\n *ngIf=\"templateModel.onNewUser.dynamicMapping.inventoryMappings.length === 0\"\n [icon]=\"'list'\"\n [title]=\"'No inventory roles mapping rules defined.' | translate\"\n [subtitle]=\"'Click below to add a new mapping.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-container\n *ngFor=\"\n let inventoryMapping of templateModel.onNewUser.dynamicMapping.inventoryMappings;\n index as idx\n \"\n >\n <c8y-sso-inventory-roles-mapping\n [inventoryRoles]=\"inventoryRoles\"\n [inventoryMapping]=\"inventoryMapping\"\n (onRemoveInventoryMapping)=\"onRemoveInventoryMapping(inventoryMapping)\"\n [inventoryMappingIndex]=\"idx\"\n ></c8y-sso-inventory-roles-mapping>\n </ng-container>\n <div class=\"p-t-16\">\n <button\n id=\"add-inventory-mapping-button\"\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Add inventory roles mapping' | translate }}\"\n (click)=\"addInventoryMapping()\"\n >\n <i\n c8yIcon=\"plus-circle\"\n class=\"m-r-4\"\n ></i>\n {{ 'Add inventory roles mapping' | translate }}\n </button>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
83
97
  }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { apps: [{
84
98
  type: Input
85
99
  }], groups: [{
@@ -89,4 +103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
89
103
  }], templateModel: [{
90
104
  type: Input
91
105
  }] } });
92
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLW1hcHBpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlLXBhcnRzL2FjY2Vzcy1tYXBwaW5nL2FjY2Vzcy1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi90ZW1wbGF0ZS1wYXJ0cy9hY2Nlc3MtbWFwcGluZy9hY2Nlc3MtbWFwcGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQVExRCxNQUFNLE9BQU8sc0JBQXNCO0lBMkJqQyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXJCdEQsZ0RBQTJDLEdBQUcsT0FBTyxDQUNuRCxtTEFBbUwsQ0FDcEwsQ0FBQztRQUNGLCtDQUEwQyxHQUFHLE9BQU8sQ0FDbEQsa0RBQWtELENBQ25ELENBQUM7UUFFRixpRUFBNEQsR0FBRyxPQUFPLENBQ3BFLDJNQUEyTSxDQUM1TSxDQUFDO1FBQ0YsZ0VBQTJELEdBQUcsT0FBTyxDQUNuRSxnSEFBZ0gsQ0FDakgsQ0FBQztRQUVGLG1EQUE4QyxHQUFHLE9BQU8sQ0FDdEQsMk1BQTJNLENBQzVNLENBQUM7UUFDRixrREFBNkMsR0FBRyxPQUFPLENBQ3JELDhHQUE4RyxDQUMvRyxDQUFDO0lBRXVELENBQUM7SUFFMUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sWUFBWSxHQUFrQjtZQUNsQyxJQUFJLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsZUFBZSxFQUFFLENBQUMsRUFBRSxhQUFhLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO2FBQ3BFO1lBQ0QsVUFBVSxFQUFFLEVBQUU7WUFDZCxnQkFBZ0IsRUFBRSxFQUFFO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLE1BQU0scUJBQXFCLEdBQXFCO1lBQzlDLElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsS0FBSztnQkFDZixlQUFlLEVBQUUsQ0FBQyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDcEU7WUFDRCxrQkFBa0IsRUFBRSxFQUFFO1NBQ3ZCLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUVELFFBQVEsQ0FBQyxhQUE0QjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsd0JBQXdCLENBQUMsZ0JBQWtDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRUQsOEJBQThCLENBQzVCLHNCQUErQixFQUMvQixnQ0FBZ0MsR0FBRyxLQUFLO1FBRXhDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEdBQUc7WUFDMUQsc0JBQXNCO1lBQ3RCLGdDQUFnQztTQUNqQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxzQkFBc0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDO0lBQzFGLENBQUM7SUFFRCxJQUFJLGdDQUFnQztRQUNsQyxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxhQUFhO2FBQzdELGdDQUFnQyxDQUFDO0lBQ3RDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFO1lBQ3pDLGNBQWMsRUFBRTtnQkFDZCxRQUFRLEVBQUUsRUFBRTtnQkFDWixpQkFBaUIsRUFBRSxFQUFFO2dCQUNyQixhQUFhLEVBQUUsRUFBRSxzQkFBc0IsRUFBRSxLQUFLLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFO2FBQzFGO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0E5RlUsc0JBQXNCO2tHQUF0QixzQkFBc0IsaU1DWm5DLHd1TUF5S0Esa2hERC9KaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7OzJGQUV4RCxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0Usd0JBQXdCLGlCQUVuQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztxRkFHMUQsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBwdWxsLCBkZWZhdWx0c0RlZXAgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uLCBJSWRlbnRpZmllZCwgSVVzZXJHcm91cCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEludmVudG9yeU1hcHBpbmcsIEFjY2Vzc01hcHBpbmcgfSBmcm9tICcuLi8uLi9zc28tY29uZmlndXJhdGlvbi5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zc28tYWNjZXNzLW1hcHBpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWNjZXNzLW1hcHBpbmcuY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEFjY2Vzc01hcHBpbmdDb21wb25lbnQge1xuICBASW5wdXQoKSBhcHBzOiBJQXBwbGljYXRpb25bXTtcbiAgQElucHV0KCkgZ3JvdXBzOiBJVXNlckdyb3VwW107XG4gIEBJbnB1dCgpIGludmVudG9yeVJvbGVzOiBJSWRlbnRpZmllZFtdO1xuICBASW5wdXQoKSB0ZW1wbGF0ZU1vZGVsO1xuXG4gIFVTRV9BQ0NFU1NfTUFQUElOR19PTl9VU0VSX0NSRUFUSU9OX1RPT0xUSVAgPSBnZXR0ZXh0KFxuICAgICdUaGUgYWNjZXNzIG1hcHBpbmcgd2lsbCBiZSBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIHRoZSBmaXJzdCBsb2dpbiwgdGhlbiB0aGUgYWRtaW5pc3RyYXRvciBjYW4gZWRpdCB0aGUgdXNlciByb2xlcy4gRHVyaW5nIHRoZSBuZXh0IGxvZ2luLCB0aGVzZSBtYXBwaW5ncyB3aWxsIG5vdCBiZSBleGVjdXRlZC4nXG4gICk7XG4gIFVTRV9BQ0NFU1NfTUFQUElOR19PTl9VU0VSX0NSRUFUSU9OX09QVElPTiA9IGdldHRleHQoXG4gICAgJ1VzZSBkeW5hbWljIGFjY2VzcyBtYXBwaW5nIG9ubHkgb24gdXNlciBjcmVhdGlvbidcbiAgKTtcblxuICBVUERBVEVfUk9MRVNfTElTVEVEX0lOX0FDQ0VTU19NQVBQSU5HX09OX0VBQ0hfTE9HX0lOX1RPT0xUSVAgPSBnZXR0ZXh0KFxuICAgICdUaGUgYWNjZXNzIG1hcHBpbmcgd2lsbCBiZSBleGVjdXRlZCBvbmx5IG9uY2UgZHVyaW5nIHRoZSBmaXJzdCBsb2dpbiwgdGhlbiB0aGUgYWRtaW5pc3RyYXRvciBjYW4gZWRpdCB0aGUgdXNlciByb2xlcy4gRHVyaW5nIHRoZSBuZXh0IGxvZ2luIG9ubHkgdGhlIHJvbGVzIGxpc3RlZCBpbiB0aGUgYWNjZXNzIG1hcHBpbmdzIHdpbGwgYmUgdXBkYXRlZC4nXG4gICk7XG4gIFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fT1BUSU9OID0gZ2V0dGV4dChcbiAgICAnUm9sZXMgc2VsZWN0ZWQgaW4gdGhlIHJ1bGVzIGJlbG93IHdpbGwgYmUgcmVhc3NpZ25lZCB0byBhIHVzZXIgb24gZWFjaCBsb2cgaW4gYW5kIG90aGVyIG9uZXMgd2lsbCBiZSB1bmNoYW5nZWQnXG4gICk7XG5cbiAgQ0xFQVJfQU5EX1VQREFURURfUk9MRVNfT05fRUFDSF9MT0dfSU5fVE9PTFRJUCA9IGdldHRleHQoXG4gICAgJ1RoZSBhY2Nlc3MgbWFwcGluZyB3aWxsIGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgZmlyc3QgbG9naW4uIFRoZSBhZG1pbmlzdHJhdG9yIGNhbm5vdCBlZGl0IHRoZSBTU08gdXNlciByb2xlcy4gRHVyaW5nIHRoZSBuZXh0IGxvZ2luIGFsbCB0aGUgcm9sZXMgd2lsbCBiZSBjbGVhcmVkIGFuZCB0aGUgbWFwcGluZyB3aWxsIGJlIGV4ZWN1dGVkIGFnYWluLidcbiAgKTtcbiAgQ0xFQVJfQU5EX1VQREFURURfUk9MRVNfT05fRUFDSF9MT0dfSU5fT1BUSU9OID0gZ2V0dGV4dChcbiAgICAnUm9sZXMgc2VsZWN0ZWQgaW4gdGhlIHJ1bGVzIGJlbG93IHdpbGwgYmUgcmVhc3NpZ25lZCB0byBhIHVzZXIgb24gZWFjaCBsb2cgaW4gYW5kIG90aGVyIG9uZXMgd2lsbCBiZSBjbGVhcmVkJ1xuICApO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcikge31cblxuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50ZW1wbGF0ZU1vZGVsICYmIHRoaXMuYXBwcyAmJiB0aGlzLmdyb3Vwcykge1xuICAgICAgdGhpcy5zZXREeW5hbWljTWFwcGluZygpO1xuICAgIH1cbiAgfVxuXG4gIGFkZEFjY2Vzc01hcHBpbmcoKSB7XG4gICAgY29uc3QgZW1wdHlNYXBwaW5nOiBBY2Nlc3NNYXBwaW5nID0ge1xuICAgICAgd2hlbjoge1xuICAgICAgICBvcGVyYXRvcjogJ0FORCcsXG4gICAgICAgIGNoaWxkUHJlZGljYXRlczogW3sgcGFyYW1ldGVyUGF0aDogJycsIG9wZXJhdG9yOiAnRVEnLCB2YWx1ZTogJycgfV1cbiAgICAgIH0sXG4gICAgICB0aGVuR3JvdXBzOiBbXSxcbiAgICAgIHRoZW5BcHBsaWNhdGlvbnM6IFtdXG4gICAgfTtcbiAgICB0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLm1hcHBpbmdzLnB1c2goZW1wdHlNYXBwaW5nKTtcbiAgfVxuXG4gIGFkZEludmVudG9yeU1hcHBpbmcoKSB7XG4gICAgY29uc3QgZW1wdHlJbnZlbnRvcnlNYXBwaW5nOiBJbnZlbnRvcnlNYXBwaW5nID0ge1xuICAgICAgd2hlbjoge1xuICAgICAgICBvcGVyYXRvcjogJ0FORCcsXG4gICAgICAgIGNoaWxkUHJlZGljYXRlczogW3sgcGFyYW1ldGVyUGF0aDogJycsIG9wZXJhdG9yOiAnRVEnLCB2YWx1ZTogJycgfV1cbiAgICAgIH0sXG4gICAgICB0aGVuSW52ZW50b3J5Um9sZXM6IFtdXG4gICAgfTtcbiAgICB0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLmludmVudG9yeU1hcHBpbmdzLnB1c2goZW1wdHlJbnZlbnRvcnlNYXBwaW5nKTtcbiAgfVxuXG4gIG9uUmVtb3ZlKGFjY2Vzc01hcHBpbmc6IEFjY2Vzc01hcHBpbmcpIHtcbiAgICBwdWxsKHRoaXMudGVtcGxhdGVNb2RlbC5vbk5ld1VzZXIuZHluYW1pY01hcHBpbmcubWFwcGluZ3MsIGFjY2Vzc01hcHBpbmcpO1xuICB9XG5cbiAgb25SZW1vdmVJbnZlbnRvcnlNYXBwaW5nKGludmVudG9yeU1hcHBpbmc6IEludmVudG9yeU1hcHBpbmcpIHtcbiAgICBwdWxsKHRoaXMudGVtcGxhdGVNb2RlbC5vbk5ld1VzZXIuZHluYW1pY01hcHBpbmcuaW52ZW50b3J5TWFwcGluZ3MsIGludmVudG9yeU1hcHBpbmcpO1xuICB9XG5cbiAgc2V0RHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uKFxuICAgIG1hcFJvbGVzT25seUZvck5ld1VzZXI6IGJvb2xlYW4sXG4gICAgbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmcgPSBmYWxzZVxuICApIHtcbiAgICB0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLmNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBtYXBSb2xlc09ubHlGb3JOZXdVc2VyLFxuICAgICAgbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmdcbiAgICB9O1xuICAgIHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBnZXQgbWFwUm9sZXNPbmx5Rm9yTmV3VXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5jb25maWd1cmF0aW9uLm1hcFJvbGVzT25seUZvck5ld1VzZXI7XG4gIH1cblxuICBnZXQgbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVNb2RlbC5vbk5ld1VzZXIuZHluYW1pY01hcHBpbmcuY29uZmlndXJhdGlvblxuICAgICAgLm1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREeW5hbWljTWFwcGluZygpIHtcbiAgICBkZWZhdWx0c0RlZXAodGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlciwge1xuICAgICAgZHluYW1pY01hcHBpbmc6IHtcbiAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICBpbnZlbnRvcnlNYXBwaW5nczogW10sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHsgbWFwUm9sZXNPbmx5Rm9yTmV3VXNlcjogZmFsc2UsIG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nOiBmYWxzZSB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTI0XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGNvbC1tZC0yXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaDQgdGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHNcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgQWNjZXNzIG1hcHBpbmdcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTAgY29sLWxnLTlcIj5cbiAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgdGl0bGU9XCJ7eyBVU0VfQUNDRVNTX01BUFBJTkdfT05fVVNFUl9DUkVBVElPTl9PUFRJT04gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgIG5hbWU9XCJkeW5hbWljQWNjZXNzTWFwcGluZ0NvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1pbnZlbnRvcnktcm9sZXMtbWFwcGluZy0tb24tdXNlci1jcmVhdGlvblwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCJtYXBSb2xlc09ubHlGb3JOZXdVc2VyXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0RHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uKHRydWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj57eyBVU0VfQUNDRVNTX01BUFBJTkdfT05fVVNFUl9DUkVBVElPTl9PUFRJT04gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyBVU0VfQUNDRVNTX01BUFBJTkdfT05fVVNFUl9DUkVBVElPTl9UT09MVElQIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICB0aXRsZT1cInt7IFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyBpbnB1dC1zbVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICBuYW1lPVwiZHluYW1pY0FjY2Vzc01hcHBpbmdDb25maWd1cmF0aW9uXCJcbiAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktaW52ZW50b3J5LXJvbGVzLW1hcHBpbmctLW90aGVyLW9uZXMtd2lsbC1iZS11bmNoYW5nZWRcIlxuICAgICAgICAgICAgW2NoZWNrZWRdPVwiIW1hcFJvbGVzT25seUZvck5ld1VzZXIgJiYgbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmdcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXREeW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24oZmFsc2UsIHRydWUpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgIHt7IFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBwb3BvdmVyPVwie3sgVVBEQVRFX1JPTEVTX0xJU1RFRF9JTl9BQ0NFU1NfTUFQUElOR19PTl9FQUNIX0xPR19JTl9UT09MVElQIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICB0aXRsZT1cInt7IENMRUFSX0FORF9VUERBVEVEX1JPTEVTX09OX0VBQ0hfTE9HX0lOX09QVElPTiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gaW5wdXQtc21cIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICBkYXRhLWN5PVwiYzh5LWludmVudG9yeS1yb2xlcy1tYXBwaW5nLS1vdGhlci1vbmVzLXdpbGwtYmUtY2xlYXJlZFwiXG4gICAgICAgICAgICBbY2hlY2tlZF09XCIhbWFwUm9sZXNPbmx5Rm9yTmV3VXNlciAmJiAhbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmdcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXREeW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24oZmFsc2UsIGZhbHNlKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9PUFRJT04gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIHBvcG92ZXI9XCJ7eyBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9UT09MVElQIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTE2XCI+XG4gICAgICAgIDxsZWdlbmQ+e3sgJ0R5bmFtaWMgYWNjZXNzIG1hcHBpbmcnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAqbmdJZj1cInRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLm1hcHBpbmdzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgW2ljb25dPVwiJ2xpc3QnXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ05vIGFjY2VzcyBtYXBwaW5nIHJ1bGVzIGRlZmluZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3N1YnRpdGxlXT1cIidDbGljayBiZWxvdyB0byBhZGQgYSBuZXcgbWFwcGluZy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgYWNjZXNzTWFwcGluZyBvZiB0ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5tYXBwaW5ncztcbiAgICAgICAgICAgIGluZGV4IGFzIGlkeFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LXNzby1keW5hbWljLWFjY2Vzcy1tYXBwaW5nXG4gICAgICAgICAgICBbYWNjZXNzTWFwcGluZ109XCJhY2Nlc3NNYXBwaW5nXCJcbiAgICAgICAgICAgIChvblJlbW92ZUFjY2Vzc01hcHBpbmcpPVwib25SZW1vdmUoYWNjZXNzTWFwcGluZylcIlxuICAgICAgICAgICAgW2FwcHNdPVwiYXBwc1wiXG4gICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICBbYWNjZXNzTWFwcGluZ0luZGV4XT1cImlkeFwiXG4gICAgICAgICAgPjwvYzh5LXNzby1keW5hbWljLWFjY2Vzcy1tYXBwaW5nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWRkLWFjY2Vzcy1tYXBwaW5nLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEFjY2Vzc01hcHBpbmcoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgJ0FkZCBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMTZcIj5cbiAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICB7eyAnSW52ZW50b3J5IHJvbGVzIG1hcHBpbmcnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGVnZW5kPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgKm5nSWY9XCJ0ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5pbnZlbnRvcnlNYXBwaW5ncy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgIFtpY29uXT1cIidsaXN0J1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidObyBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZyBydWxlcyBkZWZpbmVkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCInQ2xpY2sgYmVsb3cgdG8gYWRkIGEgbmV3IG1hcHBpbmcuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGludmVudG9yeU1hcHBpbmcgb2YgdGVtcGxhdGVNb2RlbC5vbk5ld1VzZXIuZHluYW1pY01hcHBpbmcuaW52ZW50b3J5TWFwcGluZ3M7XG4gICAgICAgICAgICBpbmRleCBhcyBpZHhcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1zc28taW52ZW50b3J5LXJvbGVzLW1hcHBpbmdcbiAgICAgICAgICAgIFtpbnZlbnRvcnlSb2xlc109XCJpbnZlbnRvcnlSb2xlc1wiXG4gICAgICAgICAgICBbaW52ZW50b3J5TWFwcGluZ109XCJpbnZlbnRvcnlNYXBwaW5nXCJcbiAgICAgICAgICAgIChvblJlbW92ZUludmVudG9yeU1hcHBpbmcpPVwib25SZW1vdmVJbnZlbnRvcnlNYXBwaW5nKGludmVudG9yeU1hcHBpbmcpXCJcbiAgICAgICAgICAgIFtpbnZlbnRvcnlNYXBwaW5nSW5kZXhdPVwiaWR4XCJcbiAgICAgICAgICA+PC9jOHktc3NvLWludmVudG9yeS1yb2xlcy1tYXBwaW5nPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWRkLWludmVudG9yeS1tYXBwaW5nLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEludmVudG9yeU1hcHBpbmcoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgJ0FkZCBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLW1hcHBpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlLXBhcnRzL2FjY2Vzcy1tYXBwaW5nL2FjY2Vzcy1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi90ZW1wbGF0ZS1wYXJ0cy9hY2Nlc3MtbWFwcGluZy9hY2Nlc3MtbWFwcGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQVExRCxNQUFNLE9BQU8sc0JBQXNCO0lBOEJqQyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXhCdEQsZ0RBQTJDLEdBQUcsT0FBTyxDQUNuRCxtTEFBbUwsQ0FDcEwsQ0FBQztRQUNGLCtDQUEwQyxHQUFHLE9BQU8sQ0FDbEQsa0RBQWtELENBQ25ELENBQUM7UUFFRixpRUFBNEQsR0FBRyxPQUFPLENBQ3BFLDJNQUEyTSxDQUM1TSxDQUFDO1FBQ0YsZ0VBQTJELEdBQUcsT0FBTyxDQUNuRSxnSEFBZ0gsQ0FDakgsQ0FBQztRQUVGLG1EQUE4QyxHQUFHLE9BQU8sQ0FDdEQsMk1BQTJNLENBQzVNLENBQUM7UUFDRixrREFBNkMsR0FBRyxPQUFPLENBQ3JELDhHQUE4RyxDQUMvRyxDQUFDO1FBRUYsOEJB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RTtnQkFDZCxRQUFRLEVBQUUsRUFBRTtnQkFDWixpQkFBaUIsRUFBRSxFQUFFO2dCQUNyQixhQUFhLEVBQUU7b0JBQ2Isc0JBQXNCLEVBQUUsS0FBSztvQkFDN0IsZ0NBQWdDLEVBQUUsS0FBSztvQkFDdkMsY0FBYyxFQUFFLElBQUk7aUJBQ3JCO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDOzhHQWhIVSxzQkFBc0I7a0dBQXRCLHNCQUFzQixpTUNabkMsMm5QQTRNQSxraEREbE1pQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs7MkZBRXhELHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSx3QkFBd0IsaUJBRW5CLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO3FGQUcxRCxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IHB1bGwsIGRlZmF1bHRzRGVlcCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElJZGVudGlmaWVkLCBJVXNlckdyb3VwIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW52ZW50b3J5TWFwcGluZywgQWNjZXNzTWFwcGluZyB9IGZyb20gJy4uLy4uL3Nzby1jb25maWd1cmF0aW9uLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNzby1hY2Nlc3MtbWFwcGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hY2Nlc3MtbWFwcGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgQWNjZXNzTWFwcGluZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGFwcHM6IElBcHBsaWNhdGlvbltdO1xuICBASW5wdXQoKSBncm91cHM6IElVc2VyR3JvdXBbXTtcbiAgQElucHV0KCkgaW52ZW50b3J5Um9sZXM6IElJZGVudGlmaWVkW107XG4gIEBJbnB1dCgpIHRlbXBsYXRlTW9kZWw7XG5cbiAgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fVE9PTFRJUCA9IGdldHRleHQoXG4gICAgJ1RoZSBhY2Nlc3MgbWFwcGluZyB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgdGhlIGZpcnN0IGxvZ2luLCB0aGVuIHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBlZGl0IHRoZSB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4sIHRoZXNlIG1hcHBpbmdzIHdpbGwgbm90IGJlIGV4ZWN1dGVkLidcbiAgKTtcbiAgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fT1BUSU9OID0gZ2V0dGV4dChcbiAgICAnVXNlIGR5bmFtaWMgYWNjZXNzIG1hcHBpbmcgb25seSBvbiB1c2VyIGNyZWF0aW9uJ1xuICApO1xuXG4gIFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fVE9PTFRJUCA9IGdldHRleHQoXG4gICAgJ1RoZSBhY2Nlc3MgbWFwcGluZyB3aWxsIGJlIGV4ZWN1dGVkIG9ubHkgb25jZSBkdXJpbmcgdGhlIGZpcnN0IGxvZ2luLCB0aGVuIHRoZSBhZG1pbmlzdHJhdG9yIGNhbiBlZGl0IHRoZSB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4gb25seSB0aGUgcm9sZXMgbGlzdGVkIGluIHRoZSBhY2Nlc3MgbWFwcGluZ3Mgd2lsbCBiZSB1cGRhdGVkLidcbiAgKTtcbiAgVVBEQVRFX1JPTEVTX0xJU1RFRF9JTl9BQ0NFU1NfTUFQUElOR19PTl9FQUNIX0xPR19JTl9PUFRJT04gPSBnZXR0ZXh0KFxuICAgICdSb2xlcyBzZWxlY3RlZCBpbiB0aGUgcnVsZXMgYmVsb3cgd2lsbCBiZSByZWFzc2lnbmVkIHRvIGEgdXNlciBvbiBlYWNoIGxvZyBpbiBhbmQgb3RoZXIgb25lcyB3aWxsIGJlIHVuY2hhbmdlZCdcbiAgKTtcblxuICBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9UT09MVElQID0gZ2V0dGV4dChcbiAgICAnVGhlIGFjY2VzcyBtYXBwaW5nIHdpbGwgYmUgZXhlY3V0ZWQgZHVyaW5nIHRoZSBmaXJzdCBsb2dpbi4gVGhlIGFkbWluaXN0cmF0b3IgY2Fubm90IGVkaXQgdGhlIFNTTyB1c2VyIHJvbGVzLiBEdXJpbmcgdGhlIG5leHQgbG9naW4gYWxsIHRoZSByb2xlcyB3aWxsIGJlIGNsZWFyZWQgYW5kIHRoZSBtYXBwaW5nIHdpbGwgYmUgZXhlY3V0ZWQgYWdhaW4uJ1xuICApO1xuICBDTEVBUl9BTkRfVVBEQVRFRF9ST0xFU19PTl9FQUNIX0xPR19JTl9PUFRJT04gPSBnZXR0ZXh0KFxuICAgICdSb2xlcyBzZWxlY3RlZCBpbiB0aGUgcnVsZXMgYmVsb3cgd2lsbCBiZSByZWFzc2lnbmVkIHRvIGEgdXNlciBvbiBlYWNoIGxvZyBpbiBhbmQgb3RoZXIgb25lcyB3aWxsIGJlIGNsZWFyZWQnXG4gICk7XG5cbiAgUkVUUklWRV9GUk9NX0FDQ0VTU19UT0tFTiA9IGdldHRleHQoJ1JldHJpZXZlIGZyb20gQWNjZXNzIHRva2VuJyk7XG4gIFJFVFJJVkVfRlJPTV9JRF9UT0tFTiA9IGdldHRleHQoJ1JldHJpZXZlIGZyb20gSUQgdG9rZW4nKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIpIHt9XG5cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGVtcGxhdGVNb2RlbCAmJiB0aGlzLmFwcHMgJiYgdGhpcy5ncm91cHMpIHtcbiAgICAgIHRoaXMuc2V0RHluYW1pY01hcHBpbmcoKTtcbiAgICB9XG4gIH1cblxuICBhZGRBY2Nlc3NNYXBwaW5nKCkge1xuICAgIGNvbnN0IGVtcHR5TWFwcGluZzogQWNjZXNzTWFwcGluZyA9IHtcbiAgICAgIHdoZW46IHtcbiAgICAgICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgICAgICBjaGlsZFByZWRpY2F0ZXM6IFt7IHBhcmFtZXRlclBhdGg6ICcnLCBvcGVyYXRvcjogJ0VRJywgdmFsdWU6ICcnIH1dXG4gICAgICB9LFxuICAgICAgdGhlbkdyb3VwczogW10sXG4gICAgICB0aGVuQXBwbGljYXRpb25zOiBbXVxuICAgIH07XG4gICAgdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5tYXBwaW5ncy5wdXNoKGVtcHR5TWFwcGluZyk7XG4gIH1cblxuICBhZGRJbnZlbnRvcnlNYXBwaW5nKCkge1xuICAgIGNvbnN0IGVtcHR5SW52ZW50b3J5TWFwcGluZzogSW52ZW50b3J5TWFwcGluZyA9IHtcbiAgICAgIHdoZW46IHtcbiAgICAgICAgb3BlcmF0b3I6ICdBTkQnLFxuICAgICAgICBjaGlsZFByZWRpY2F0ZXM6IFt7IHBhcmFtZXRlclBhdGg6ICcnLCBvcGVyYXRvcjogJ0VRJywgdmFsdWU6ICcnIH1dXG4gICAgICB9LFxuICAgICAgdGhlbkludmVudG9yeVJvbGVzOiBbXVxuICAgIH07XG4gICAgdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5pbnZlbnRvcnlNYXBwaW5ncy5wdXNoKGVtcHR5SW52ZW50b3J5TWFwcGluZyk7XG4gIH1cblxuICBvblJlbW92ZShhY2Nlc3NNYXBwaW5nOiBBY2Nlc3NNYXBwaW5nKSB7XG4gICAgcHVsbCh0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLm1hcHBpbmdzLCBhY2Nlc3NNYXBwaW5nKTtcbiAgfVxuXG4gIG9uUmVtb3ZlSW52ZW50b3J5TWFwcGluZyhpbnZlbnRvcnlNYXBwaW5nOiBJbnZlbnRvcnlNYXBwaW5nKSB7XG4gICAgcHVsbCh0aGlzLnRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLmludmVudG9yeU1hcHBpbmdzLCBpbnZlbnRvcnlNYXBwaW5nKTtcbiAgfVxuXG4gIHNldER5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbihcbiAgICBtYXBSb2xlc09ubHlGb3JOZXdVc2VyOiBib29sZWFuLFxuICAgIG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFwUm9sZXNPbmx5Rm9yTmV3VXNlciA9IG1hcFJvbGVzT25seUZvck5ld1VzZXI7XG4gICAgdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmcgPVxuICAgICAgbWFuYWdlUm9sZXNPbmx5RnJvbUFjY2Vzc01hcHBpbmc7XG4gICAgdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIGdldCBtYXBSb2xlc09ubHlGb3JOZXdVc2VyKCkge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbi5tYXBSb2xlc09ubHlGb3JOZXdVc2VyO1xuICB9XG5cbiAgZ2V0IG1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbi5tYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZztcbiAgfVxuXG4gIGdldCBtYXBGcm9tSWRUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5keW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24ubWFwRnJvbUlkVG9rZW47XG4gIH1cblxuICBzZXRNYXBGcm9tSWRUb2tlbihtYXBGcm9tSWRUb2tlbikge1xuICAgIHRoaXMuZHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uLm1hcEZyb21JZFRva2VuID0gbWFwRnJvbUlkVG9rZW47XG4gICAgdGhpcy5jb250cm9sQ29udGFpbmVyLmNvbnRyb2wubWFya0FzRGlydHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGR5bmFtaWNNYXBwaW5nQ29uZmlndXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5jb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREeW5hbWljTWFwcGluZygpIHtcbiAgICBkZWZhdWx0c0RlZXAodGhpcy50ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlciwge1xuICAgICAgZHluYW1pY01hcHBpbmc6IHtcbiAgICAgICAgbWFwcGluZ3M6IFtdLFxuICAgICAgICBpbnZlbnRvcnlNYXBwaW5nczogW10sXG4gICAgICAgIGNvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICBtYXBSb2xlc09ubHlGb3JOZXdVc2VyOiBmYWxzZSxcbiAgICAgICAgICBtYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZzogZmFsc2UsXG4gICAgICAgICAgbWFwRnJvbUlkVG9rZW46IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicC0yNFwiPlxuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tMyBjb2wtbWQtMlwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImg0IHRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzXCJcbiAgICAgICAgdHJhbnNsYXRlXG4gICAgICA+XG4gICAgICAgIEFjY2VzcyBtYXBwaW5nXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTkgY29sLW1kLTEwIGNvbC1sZy05XCI+XG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgcC0yNFwiPlxuICAgICAgICA8bGVnZW5kPnt7ICdTb3VyY2Ugb2YgZHluYW1pYyBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX08L2xlZ2VuZD5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBSRVRSSVZFX0ZST01fQUNDRVNTX1RPS0VOIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nU291cmNlXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiIW1hcEZyb21JZFRva2VuXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRNYXBGcm9tSWRUb2tlbihmYWxzZSlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuPnt7IFJFVFJJVkVfRlJPTV9BQ0NFU1NfVE9LRU4gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgUkVUUklWRV9GUk9NX0lEX1RPS0VOIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nU291cmNlXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWFwRnJvbUlkVG9rZW5cIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInNldE1hcEZyb21JZFRva2VuKHRydWUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBSRVRSSVZFX0ZST01fSURfVE9LRU4gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTI0XCI+XG4gICAgICAgIDxsZWdlbmQ+e3sgJ0R5bmFtaWMgYWNjZXNzIG1hcHBpbmcgcHJpbmNpcGxlJyB8IHRyYW5zbGF0ZSB9fTwvbGVnZW5kPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICB0aXRsZT1cInt7IFVTRV9BQ0NFU1NfTUFQUElOR19PTl9VU0VSX0NSRUFUSU9OX09QVElPTiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyBpbnB1dC1zbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJkeW5hbWljQWNjZXNzTWFwcGluZ0NvbmZpZ3VyYXRpb25cIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwiYzh5LWludmVudG9yeS1yb2xlcy1tYXBwaW5nLS1vbi11c2VyLWNyZWF0aW9uXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwibWFwUm9sZXNPbmx5Rm9yTmV3VXNlclwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0RHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uKHRydWUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBVU0VfQUNDRVNTX01BUFBJTkdfT05fVVNFUl9DUkVBVElPTl9PUFRJT04gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHBcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgVVNFX0FDQ0VTU19NQVBQSU5HX09OX1VTRVJfQ1JFQVRJT05fVE9PTFRJUCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICB0aXRsZT1cInt7IFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktaW52ZW50b3J5LXJvbGVzLW1hcHBpbmctLW90aGVyLW9uZXMtd2lsbC1iZS11bmNoYW5nZWRcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCIhbWFwUm9sZXNPbmx5Rm9yTmV3VXNlciAmJiBtYW5hZ2VSb2xlc09ubHlGcm9tQWNjZXNzTWFwcGluZ1wiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwic2V0RHluYW1pY01hcHBpbmdDb25maWd1cmF0aW9uKGZhbHNlLCB0cnVlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHt7IFVQREFURV9ST0xFU19MSVNURURfSU5fQUNDRVNTX01BUFBJTkdfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgVVBEQVRFX1JPTEVTX0xJU1RFRF9JTl9BQ0NFU1NfTUFQUElOR19PTl9FQUNIX0xPR19JTl9UT09MVElQIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgQ0xFQVJfQU5EX1VQREFURURfUk9MRVNfT05fRUFDSF9MT0dfSU5fT1BUSU9OIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGNsYXNzPVwiYzh5LXJhZGlvIGlucHV0LXNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImR5bmFtaWNBY2Nlc3NNYXBwaW5nQ29uZmlndXJhdGlvblwiXG4gICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktaW52ZW50b3J5LXJvbGVzLW1hcHBpbmctLW90aGVyLW9uZXMtd2lsbC1iZS1jbGVhcmVkXCJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiIW1hcFJvbGVzT25seUZvck5ld1VzZXIgJiYgIW1hbmFnZVJvbGVzT25seUZyb21BY2Nlc3NNYXBwaW5nXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXREeW5hbWljTWFwcGluZ0NvbmZpZ3VyYXRpb24oZmFsc2UsIGZhbHNlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgIHt7IENMRUFSX0FORF9VUERBVEVEX1JPTEVTX09OX0VBQ0hfTE9HX0lOX09QVElPTiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7IENMRUFSX0FORF9VUERBVEVEX1JPTEVTX09OX0VBQ0hfTE9HX0lOX1RPT0xUSVAgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9maWVsZHNldD5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTE2XCI+XG4gICAgICAgIDxsZWdlbmQ+e3sgJ0R5bmFtaWMgYWNjZXNzIG1hcHBpbmcnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAqbmdJZj1cInRlbXBsYXRlTW9kZWwub25OZXdVc2VyLmR5bmFtaWNNYXBwaW5nLm1hcHBpbmdzLmxlbmd0aCA9PT0gMFwiXG4gICAgICAgICAgW2ljb25dPVwiJ2xpc3QnXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ05vIGFjY2VzcyBtYXBwaW5nIHJ1bGVzIGRlZmluZWQuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3N1YnRpdGxlXT1cIidDbGljayBiZWxvdyB0byBhZGQgYSBuZXcgbWFwcGluZy4nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICBsZXQgYWNjZXNzTWFwcGluZyBvZiB0ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5tYXBwaW5ncztcbiAgICAgICAgICAgIGluZGV4IGFzIGlkeFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8Yzh5LXNzby1keW5hbWljLWFjY2Vzcy1tYXBwaW5nXG4gICAgICAgICAgICBbYWNjZXNzTWFwcGluZ109XCJhY2Nlc3NNYXBwaW5nXCJcbiAgICAgICAgICAgIChvblJlbW92ZUFjY2Vzc01hcHBpbmcpPVwib25SZW1vdmUoYWNjZXNzTWFwcGluZylcIlxuICAgICAgICAgICAgW2FwcHNdPVwiYXBwc1wiXG4gICAgICAgICAgICBbZ3JvdXBzXT1cImdyb3Vwc1wiXG4gICAgICAgICAgICBbYWNjZXNzTWFwcGluZ0luZGV4XT1cImlkeFwiXG4gICAgICAgICAgPjwvYzh5LXNzby1keW5hbWljLWFjY2Vzcy1tYXBwaW5nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWRkLWFjY2Vzcy1tYXBwaW5nLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEFjY2Vzc01hcHBpbmcoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgJ0FkZCBhY2Nlc3MgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0IHAtMTZcIj5cbiAgICAgICAgPGxlZ2VuZD5cbiAgICAgICAgICB7eyAnSW52ZW50b3J5IHJvbGVzIG1hcHBpbmcnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGVnZW5kPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgKm5nSWY9XCJ0ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlci5keW5hbWljTWFwcGluZy5pbnZlbnRvcnlNYXBwaW5ncy5sZW5ndGggPT09IDBcIlxuICAgICAgICAgIFtpY29uXT1cIidsaXN0J1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidObyBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZyBydWxlcyBkZWZpbmVkLicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCInQ2xpY2sgYmVsb3cgdG8gYWRkIGEgbmV3IG1hcHBpbmcuJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGludmVudG9yeU1hcHBpbmcgb2YgdGVtcGxhdGVNb2RlbC5vbk5ld1VzZXIuZHluYW1pY01hcHBpbmcuaW52ZW50b3J5TWFwcGluZ3M7XG4gICAgICAgICAgICBpbmRleCBhcyBpZHhcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGM4eS1zc28taW52ZW50b3J5LXJvbGVzLW1hcHBpbmdcbiAgICAgICAgICAgIFtpbnZlbnRvcnlSb2xlc109XCJpbnZlbnRvcnlSb2xlc1wiXG4gICAgICAgICAgICBbaW52ZW50b3J5TWFwcGluZ109XCJpbnZlbnRvcnlNYXBwaW5nXCJcbiAgICAgICAgICAgIChvblJlbW92ZUludmVudG9yeU1hcHBpbmcpPVwib25SZW1vdmVJbnZlbnRvcnlNYXBwaW5nKGludmVudG9yeU1hcHBpbmcpXCJcbiAgICAgICAgICAgIFtpbnZlbnRvcnlNYXBwaW5nSW5kZXhdPVwiaWR4XCJcbiAgICAgICAgICA+PC9jOHktc3NvLWludmVudG9yeS1yb2xlcy1tYXBwaW5nPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInAtdC0xNlwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGlkPVwiYWRkLWludmVudG9yeS1tYXBwaW5nLWJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FkZCBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cImFkZEludmVudG9yeU1hcHBpbmcoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgJ0FkZCBpbnZlbnRvcnkgcm9sZXMgbWFwcGluZycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2ZpZWxkc2V0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -2,25 +2,35 @@ import { Component, Input } from '@angular/core';
2
2
  import { gettext } from '@c8y/ngx-components';
3
3
  import { ControlContainer, NgForm } from '@angular/forms';
4
4
  import * as i0 from "@angular/core";
5
- import * as i1 from "@c8y/ngx-components";
6
- import * as i2 from "@angular/forms";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "@c8y/ngx-components";
7
7
  import * as i3 from "ngx-bootstrap/popover";
8
8
  export class UserDataMappingComponent {
9
- constructor() {
9
+ constructor(controlContainer) {
10
+ this.controlContainer = controlContainer;
10
11
  this.CLAIM_NAMES = gettext('Token claims can be checked in Audit Logs under Single sign-on type.');
12
+ this.RETRIVE_FROM_ACCESS_TOKEN = gettext('Retrieve from Access token');
13
+ this.RETRIVE_FROM_ID_TOKEN = gettext('Retrieve from ID token');
11
14
  }
12
15
  ngAfterContentInit() {
13
16
  if (!this.templateModel.accessTokenToUserDataMappings) {
14
17
  this.templateModel.accessTokenToUserDataMappings = {};
15
18
  }
16
19
  }
17
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: UserDataMappingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: UserDataMappingComponent, selector: "c8y-sso-user-data-mapping", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
20
+ get useIdToken() {
21
+ return this.templateModel.useIdToken;
22
+ }
23
+ setUseIdToken(useIdToken) {
24
+ this.templateModel.useIdToken = useIdToken;
25
+ this.controlContainer.control.markAsDirty();
26
+ }
27
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: UserDataMappingComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
28
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: UserDataMappingComponent, selector: "c8y-sso-user-data-mapping", inputs: { templateModel: "templateModel" }, ngImport: i0, template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
19
29
  }
20
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: UserDataMappingComponent, decorators: [{
21
31
  type: Component,
22
- args: [{ selector: 'c8y-sso-user-data-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
23
- }], propDecorators: { templateModel: [{
32
+ args: [{ selector: 'c8y-sso-user-data-mapping', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"p-24\">\n <div class=\"row\">\n <div class=\"col-xs-12 col-sm-3 col-md-2\">\n <div\n class=\"h4 text-normal text-right text-left-xs\"\n translate\n >\n User data mappings\n </div>\n </div>\n\n <div class=\"col-xs-12 col-sm-9 col-md-10 col-lg-9\">\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>{{ 'Source of user data mapping' | translate }}</legend>\n <c8y-form-group>\n <label\n title=\"{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"!useIdToken\"\n (change)=\"setUseIdToken(false)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ACCESS_TOKEN | translate }}</span>\n </label>\n <label\n title=\"{{ RETRIVE_FROM_ID_TOKEN | translate }}\"\n class=\"c8y-radio input-sm\"\n >\n <input\n type=\"radio\"\n name=\"userAccessMappingSource\"\n [checked]=\"useIdToken\"\n (change)=\"setUseIdToken(true)\"\n />\n <span></span>\n <span>{{ RETRIVE_FROM_ID_TOKEN | translate }}</span>\n </label>\n </c8y-form-group>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset p-24\">\n <legend>\n {{ 'Claim names' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ CLAIM_NAMES | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n ></button>\n </legend>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"firstName\"\n class=\"control-label\"\n translate\n >\n First name\n </label>\n <input\n class=\"form-control\"\n name=\"firstName\"\n id=\"firstName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.firstNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'given_name' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"lastName\"\n class=\"control-label\"\n translate\n >\n Last name\n </label>\n <input\n class=\"form-control\"\n name=\"lastName\"\n id=\"lastName\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.lastNameClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'family_name' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"email\"\n class=\"control-label\"\n translate\n >\n Email\n </label>\n <input\n class=\"form-control\"\n name=\"email\"\n id=\"email\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.emailClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'email' }\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label\n for=\"phoneNumber\"\n class=\"control-label\"\n translate\n >\n Phone number\n </label>\n <input\n class=\"form-control\"\n name=\"phoneNumber\"\n id=\"phoneNumber\"\n [(ngModel)]=\"templateModel.accessTokenToUserDataMappings.phoneNumberClaimName\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'phone_number' }\"\n />\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </div>\n </div>\n</div>\n" }]
33
+ }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { templateModel: [{
24
34
  type: Input
25
35
  }] } });
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1kYXRhLW1hcHBpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlLXBhcnRzL3VzZXItZGF0YS1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi90ZW1wbGF0ZS1wYXJ0cy91c2VyLWRhdGEtbWFwcGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU8xRCxNQUFNLE9BQU8sd0JBQXdCO0lBTHJDO1FBT0UsZ0JBQVcsR0FBRyxPQUFPLENBQUMsc0VBQXNFLENBQUMsQ0FBQztLQU8vRjtJQUxDLGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDOzhHQVJVLHdCQUF3QjtrR0FBeEIsd0JBQXdCLDZHQ1RyQyx1M0dBeUdBLDZ1Q0RsR2lCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzsyRkFFeEQsd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLDJCQUEyQixpQkFFdEIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7OEJBRzFELGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zc28tdXNlci1kYXRhLW1hcHBpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1kYXRhLW1hcHBpbmcuY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJEYXRhTWFwcGluZ0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHRlbXBsYXRlTW9kZWw7XG4gIENMQUlNX05BTUVTID0gZ2V0dGV4dCgnVG9rZW4gY2xhaW1zIGNhbiBiZSBjaGVja2VkIGluIEF1ZGl0IExvZ3MgdW5kZXIgU2luZ2xlIHNpZ24tb24gdHlwZS4nKTtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgaWYgKCF0aGlzLnRlbXBsYXRlTW9kZWwuYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3MpIHtcbiAgICAgIHRoaXMudGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncyA9IHt9O1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInAtMjRcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTMgY29sLW1kLTJcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJoNCB0ZXh0LW5vcm1hbCB0ZXh0LXJpZ2h0IHRleHQtbGVmdC14c1wiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBVc2VyIGRhdGEgbWFwcGluZ3NcbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNvbC14cy0xMiBjb2wtc20tOSBjb2wtbWQtMTAgY29sLWxnLTlcIj5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTI0XCI+XG4gICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAge3sgJ0NsYWltIG5hbWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7IENMQUlNX05BTUVTIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9sZWdlbmQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJmaXJzdE5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBGaXJzdCBuYW1lXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmlyc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZW1wbGF0ZU1vZGVsLmFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzLmZpcnN0TmFtZUNsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdnaXZlbl9uYW1lJyB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGZvcj1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgTGFzdCBuYW1lXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgIGlkPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncy5sYXN0TmFtZUNsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdmYW1pbHlfbmFtZScgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEVtYWlsXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIGlkPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncy5lbWFpbENsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdlbWFpbCcgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJwaG9uZU51bWJlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFBob25lIG51bWJlclxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBpZD1cInBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3MucGhvbmVOdW1iZXJDbGFpbU5hbWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAncGhvbmVfbnVtYmVyJyB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1kYXRhLW1hcHBpbmcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlLXBhcnRzL3VzZXItZGF0YS1tYXBwaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9zc28tY29uZmlndXJhdGlvbi90ZW1wbGF0ZS1wYXJ0cy91c2VyLWRhdGEtbWFwcGluZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7OztBQU8xRCxNQUFNLE9BQU8sd0JBQXdCO0lBT25DLFlBQW9CLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBTHRELGdCQUFXLEdBQUcsT0FBTyxDQUFDLHNFQUFzRSxDQUFDLENBQUM7UUFFOUYsOEJBQXlCLEdBQUcsT0FBTyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDbEUsMEJBQXFCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDLENBQUM7SUFFRCxDQUFDO0lBRTFELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsNkJBQTZCLEdBQUcsRUFBRSxDQUFDO1FBQ3hELENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYSxDQUFDLFVBQVU7UUFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsQ0FBQzs4R0F0QlUsd0JBQXdCO2tHQUF4Qix3QkFBd0IsNkdDVHJDLHk4SUF5SUEsNnVDRGxJaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7OzJGQUV4RCx3QkFBd0I7a0JBTHBDLFNBQVM7K0JBQ0UsMkJBQTJCLGlCQUV0QixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztxRkFHMUQsYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXNzby11c2VyLWRhdGEtbWFwcGluZycsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWRhdGEtbWFwcGluZy5jb21wb25lbnQuaHRtbCcsXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgVXNlckRhdGFNYXBwaW5nQ29tcG9uZW50IHtcbiAgQElucHV0KCkgdGVtcGxhdGVNb2RlbDtcbiAgQ0xBSU1fTkFNRVMgPSBnZXR0ZXh0KCdUb2tlbiBjbGFpbXMgY2FuIGJlIGNoZWNrZWQgaW4gQXVkaXQgTG9ncyB1bmRlciBTaW5nbGUgc2lnbi1vbiB0eXBlLicpO1xuXG4gIFJFVFJJVkVfRlJPTV9BQ0NFU1NfVE9LRU4gPSBnZXR0ZXh0KCdSZXRyaWV2ZSBmcm9tIEFjY2VzcyB0b2tlbicpO1xuICBSRVRSSVZFX0ZST01fSURfVE9LRU4gPSBnZXR0ZXh0KCdSZXRyaWV2ZSBmcm9tIElEIHRva2VuJyk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMudGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncykge1xuICAgICAgdGhpcy50ZW1wbGF0ZU1vZGVsLmFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzID0ge307XG4gICAgfVxuICB9XG5cbiAgZ2V0IHVzZUlkVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVNb2RlbC51c2VJZFRva2VuO1xuICB9XG5cbiAgc2V0VXNlSWRUb2tlbih1c2VJZFRva2VuKSB7XG4gICAgdGhpcy50ZW1wbGF0ZU1vZGVsLnVzZUlkVG9rZW4gPSB1c2VJZFRva2VuO1xuICAgIHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJwLTI0XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTEyIGNvbC1zbS0zIGNvbC1tZC0yXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiaDQgdGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHNcIlxuICAgICAgICB0cmFuc2xhdGVcbiAgICAgID5cbiAgICAgICAgVXNlciBkYXRhIG1hcHBpbmdzXG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtMTIgY29sLXNtLTkgY29sLW1kLTEwIGNvbC1sZy05XCI+XG4gICAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXQgcC0yNFwiPlxuICAgICAgICA8bGVnZW5kPnt7ICdTb3VyY2Ugb2YgdXNlciBkYXRhIG1hcHBpbmcnIHwgdHJhbnNsYXRlIH19PC9sZWdlbmQ+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHRpdGxlPVwie3sgUkVUUklWRV9GUk9NX0FDQ0VTU19UT0tFTiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBjbGFzcz1cImM4eS1yYWRpbyBpbnB1dC1zbVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJ1c2VyQWNjZXNzTWFwcGluZ1NvdXJjZVwiXG4gICAgICAgICAgICAgIFtjaGVja2VkXT1cIiF1c2VJZFRva2VuXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRVc2VJZFRva2VuKGZhbHNlKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgUkVUUklWRV9GUk9NX0FDQ0VTU19UT0tFTiB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdGl0bGU9XCJ7eyBSRVRSSVZFX0ZST01fSURfVE9LRU4gfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJjOHktcmFkaW8gaW5wdXQtc21cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICAgICAgICBuYW1lPVwidXNlckFjY2Vzc01hcHBpbmdTb3VyY2VcIlxuICAgICAgICAgICAgICBbY2hlY2tlZF09XCJ1c2VJZFRva2VuXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZXRVc2VJZFRva2VuKHRydWUpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyBSRVRSSVZFX0ZST01fSURfVE9LRU4gfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZmllbGRzZXQ+XG5cbiAgICAgIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldCBwLTI0XCI+XG4gICAgICAgIDxsZWdlbmQ+XG4gICAgICAgICAge3sgJ0NsYWltIG5hbWVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7IENMQUlNX05BTUVTIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHBsYWNlbWVudD1cInJpZ2h0XCJcbiAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgPC9sZWdlbmQ+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJmaXJzdE5hbWVcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBGaXJzdCBuYW1lXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZmlyc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBpZD1cImZpcnN0TmFtZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZW1wbGF0ZU1vZGVsLmFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzLmZpcnN0TmFtZUNsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdnaXZlbl9uYW1lJyB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIGZvcj1cImxhc3ROYW1lXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbnRyb2wtbGFiZWxcIlxuICAgICAgICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgTGFzdCBuYW1lXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgIGlkPVwibGFzdE5hbWVcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncy5sYXN0TmFtZUNsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdmYW1pbHlfbmFtZScgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJlbWFpbFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEVtYWlsXG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIGlkPVwiZW1haWxcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncy5lbWFpbENsYWltTmFtZVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6ICdlbWFpbCcgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBmb3I9XCJwaG9uZU51bWJlclwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjb250cm9sLWxhYmVsXCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFBob25lIG51bWJlclxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgbmFtZT1cInBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBpZD1cInBob25lTnVtYmVyXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInRlbXBsYXRlTW9kZWwuYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3MucGhvbmVOdW1iZXJDbGFpbU5hbWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAncGhvbmVfbnVtYmVyJyB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9maWVsZHNldD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -91,7 +91,8 @@ export class AadConfigurationMapper {
91
91
  userManagementSource: UserManagementSource.REMOTE,
92
92
  type: TenantLoginOptionType.OAUTH2,
93
93
  grantType: GrantType.AUTHORIZATION_CODE,
94
- externalTokenConfig: templateModel.externalTokenConfig.toExternalTokenConfig()
94
+ externalTokenConfig: templateModel.externalTokenConfig.toExternalTokenConfig(),
95
+ useIdToken: templateModel.useIdToken
95
96
  };
96
97
  return ssoConfiguration;
97
98
  }
@@ -119,7 +120,8 @@ export class AadConfigurationMapper {
119
120
  publicKeyDiscoveryUrl: ssoConfigurationForAad.signatureVerificationConfig.aad.publicKeyDiscoveryUrl,
120
121
  signatureVerificationConfig: new SignatureConfiguration(ssoConfigurationForAad.signatureVerificationConfig),
121
122
  onNewUser: ssoConfigurationForAad.onNewUser,
122
- externalTokenConfig: new ExternalToken(ssoConfigurationForAad.externalTokenConfig)
123
+ externalTokenConfig: new ExternalToken(ssoConfigurationForAad.externalTokenConfig),
124
+ useIdToken: ssoConfiguration.useIdToken
123
125
  };
124
126
  return aadConfiguration;
125
127
  }
@@ -194,4 +196,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImpor
194
196
  providedIn: 'root'
195
197
  }]
196
198
  }] });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWFkLWNvbmZpZ3VyYXRpb24tbWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlcy9hYWQtY29uZmlndXJhdGlvbi1tYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFvQixZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsRUFBRSxFQUNGLEdBQUcsRUFDSCxZQUFZLEVBQ1osR0FBRyxFQUNILElBQUksRUFDSixNQUFNLEVBQ04sV0FBVyxFQUNaLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0NBQStDLENBQUM7O0FBSzlFLE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFJVSxhQUFRLEdBQUc7WUFDakIsa0JBQWtCLEVBQUUsSUFBSTtTQUN6QixDQUFDO1FBRU0sZUFBVSxHQUFHLDRDQUE0QyxDQUFDO0tBME1uRTtJQXhNQyxPQUFPLENBQUMsYUFBK0I7UUFDckMsTUFBTSxPQUFPLEdBQUcsR0FBRyxhQUFhLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxNQUFNLFNBQVMsQ0FBQztRQUU3RSxNQUFNLGdCQUFnQixHQUFxQjtZQUN6QyxRQUFRLEVBQUUsYUFBYSxDQUFDLGFBQWE7WUFDckMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxhQUFhO1lBQ3JDLGFBQWEsRUFBRSxhQUFhLENBQUMsbUJBQW1CO2dCQUM5QyxDQUFDLENB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dCI6WyJpbXBvcnQgeyBTc29Db25maWd1cmF0aW9uTWFwcGVyIH0gZnJvbSAnLi9zc28tY29uZmlndXJhdGlvbi5tYXBwZXInO1xuaW1wb3J0IHsgQWFkQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYWFkLm1vZGVsJztcbmltcG9ydCB7IFNzb0NvbmZpZ3VyYXRpb24sIFRlbXBsYXRlVHlwZSB9IGZyb20gJy4uL3Nzby1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIGNsb25lRGVlcCxcbiAgcGljayxcbiAgZGVmYXVsdHMsXG4gIGF0LFxuICBtYXAsXG4gIGRlZmF1bHRzRGVlcCxcbiAgaGFzLFxuICBoZWFkLFxuICByZWplY3QsXG4gIGlzVW5kZWZpbmVkXG59IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBHcmFudFR5cGUsIFRlbmFudExvZ2luT3B0aW9uVHlwZSwgVXNlck1hbmFnZW1lbnRTb3VyY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBTaWduYXR1cmVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vdGVtcGxhdGUtcGFydHMvc2lnbmF0dXJlLWNvbmZpZ3VyYXRpb24ubW9kZWwnO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXh0ZXJuYWxUb2tlbiB9IGZyb20gJy4uL3RlbXBsYXRlLXBhcnRzL2V4dGVybmFsLXRva2VuLWNvbmZpZy5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFhZENvbmZpZ3VyYXRpb25NYXBwZXIgaW1wbGVtZW50cyBTc29Db25maWd1cmF0aW9uTWFwcGVyPEFhZENvbmZpZ3VyYXRpb24+IHtcbiAgcHJpdmF0ZSBkZWZhdWx0cyA9IHtcbiAgICB2aXNpYmxlT25Mb2dpblBhZ2U6IHRydWVcbiAgfTtcblxuICBwcml2YXRlIHVybFBhdHRlcm4gPSAvXiguKylcXC8oKC4rPylcXC9vYXV0aDJcXC8oYXV0aG9yaXplfHRva2VuKSkkLztcblxuICBtYXBGcm9tKHRlbXBsYXRlTW9kZWw6IEFhZENvbmZpZ3VyYXRpb24pOiBTc29Db25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBiYXNlVXJsID0gYCR7dGVtcGxhdGVNb2RlbC5hYWRBZGRyZXNzfS8ke3RlbXBsYXRlTW9kZWwudGVuYW50fS9vYXV0aDJgO1xuXG4gICAgY29uc3Qgc3NvQ29uZmlndXJhdGlvbjogU3NvQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGF1ZGllbmNlOiB0ZW1wbGF0ZU1vZGVsLmFwcGxpY2F0aW9uSWQsXG4gICAgICBjbGllbnRJZDogdGVtcGxhdGVNb2RlbC5hcHBsaWNhdGlvbklkLFxuICAgICAgbG9nb3V0UmVxdWVzdDogdGVtcGxhdGVNb2RlbC5yZWRpcmVjdEFmdGVyTG9nb3V0XG4gICAgICAgID8ge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICB1cmw6IGAke2Jhc2VVcmx9L2xvZ291dGAsXG4gICAgICAgICAgICByZXF1ZXN0UGFyYW1zOiB7XG4gICAgICAgICAgICAgIHBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaTogdGVtcGxhdGVNb2RlbC5yZWRpcmVjdEFmdGVyTG9nb3V0VXJsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICBib2R5OiAnJyxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ1JFRElSRUNUJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgb3BlcmF0aW9uOiAnUkVESVJFQ1QnLFxuICAgICAgICAgICAgcmVxdWVzdFBhcmFtczoge31cbiAgICAgICAgICB9LFxuICAgICAgYXV0aG9yaXphdGlvblJlcXVlc3Q6IHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgdXJsOiBgJHtiYXNlVXJsfS9hdXRob3JpemVgLFxuICAgICAgICByZXF1ZXN0UGFyYW1zOiB7XG4gICAgICAgICAgcmVkaXJlY3RfdXJpOiAnJHtyZWRpcmVjdFVyaX0nLFxuICAgICAgICAgIGNsaWVudF9pZDogJyR7Y2xpZW50SWR9JyxcbiAgICAgICAgICByZXNwb25zZV90eXBlOiAnY29kZSdcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGJvZHk6ICcnLFxuICAgICAgICBvcGVyYXRpb246ICdSRURJUkVDVCdcbiAgICAgIH0sXG4gICAgICB0b2tlblJlcXVlc3Q6IHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIHVybDogYCR7YmFzZVVybH0vdG9rZW5gLFxuICAgICAgICByZXF1ZXN0UGFyYW1zOiB7fSxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGJvZHk6IHRoaXMuZ2V0UXVlcnlTdHJpbmcoe1xuICAgICAgICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgICAgICAgIGNvZGU6ICcke2NvZGV9JyxcbiAgICAgICAgICByZWRpcmVjdF91cmk6ICcke3JlZGlyZWN0VXJpfScsXG4gICAgICAgICAgcmVzb3VyY2U6ICcke2NsaWVudElkfScsXG4gICAgICAgICAgY2xpZW50X2lkOiAnJHtjbGllbnRJZH0nLFxuICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IGVuY29kZVVSSUNvbXBvbmVudCh0ZW1wbGF0ZU1vZGVsLmNsaWVudFNlY3JldClcbiAgICAgICAgfSksXG4gICAgICAgIG9wZXJhdGlvbjogJ0VYRUNVVEUnXG4gICAgICB9LFxuICAgICAgcmVmcmVzaFJlcXVlc3Q6IHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIHVybDogYCR7YmFzZVVybH0vdG9rZW5gLFxuICAgICAgICByZXF1ZXN0UGFyYW1zOiB7fSxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGJvZHk6IHRoaXMuZ2V0UXVlcnlTdHJpbmcoe1xuICAgICAgICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICAgICAgICByZWZyZXNoX3Rva2VuOiAnJHtyZWZyZXNoVG9rZW59JyxcbiAgICAgICAgICByZXNvdXJjZTogJyR7Y2xpZW50SWR9JyxcbiAgICAgICAgICBjbGllbnRfaWQ6ICcke2NsaWVudElkfScsXG4gICAgICAgICAgY2xpZW50X3NlY3JldDogZW5jb2RlVVJJQ29tcG9uZW50KHRlbXBsYXRlTW9kZWwuY2xpZW50U2VjcmV0KVxuICAgICAgICB9KSxcbiAgICAgICAgb3BlcmF0aW9uOiAnRVhFQ1VURSdcbiAgICAgIH0sXG4gICAgICBidXR0b25OYW1lOiB0ZW1wbGF0ZU1vZGVsLmJ1dHRvbk5hbWUsXG4gICAgICBwcm92aWRlck5hbWU6ICdBenVyZSBBRCcsXG4gICAgICBpc3N1ZXI6IHRlbXBsYXRlTW9kZWwuaXNzdWVyLFxuICAgICAgb25OZXdVc2VyOiB0ZW1wbGF0ZU1vZGVsLm9uTmV3VXNlcixcbiAgICAgIGFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzOiB0ZW1wbGF0ZU1vZGVsLmFjY2Vzc1Rva2VuVG9Vc2VyRGF0YU1hcHBpbmdzLFxuICAgICAgcmVkaXJlY3RUb1BsYXRmb3JtOiB0ZW1wbGF0ZU1vZGVsLnJlZGlyZWN0VG9QbGF0Zm9ybSB8fCBudWxsLFxuICAgICAgdGVtcGxhdGU6IFRlbXBsYXRlVHlwZS5BWlVSRSxcbiAgICAgIHVzZXJJZENvbmZpZzoge1xuICAgICAgICB1c2VDb25zdGFudFZhbHVlOiBmYWxzZSxcbiAgICAgICAgand0RmllbGQ6IHRlbXBsYXRlTW9kZWwudXNlcklkQ29uZmlnLmp3dEZpZWxkXG4gICAgICB9LFxuICAgICAgdmlzaWJsZU9uTG9naW5QYWdlOiB0ZW1wbGF0ZU1vZGVsLnZpc2libGVPbkxvZ2luUGFnZSxcbiAgICAgIHNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZzpcbiAgICAgICAgdGVtcGxhdGVNb2RlbC5zaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcudG9TaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcoKSxcbiAgICAgIHVzZXJNYW5hZ2VtZW50U291cmNlOiBVc2VyTWFuYWdlbWVudFNvdXJjZS5SRU1PVEUsXG4gICAgICB0eXBlOiBUZW5hbnRMb2dpbk9wdGlvblR5cGUuT0FVVEgyLFxuICAgICAgZ3JhbnRUeXBlOiBHcmFudFR5cGUuQVVUSE9SSVpBVElPTl9DT0RFLFxuICAgICAgZXh0ZXJuYWxUb2tlbkNvbmZpZzogdGVtcGxhdGVNb2RlbC5leHRlcm5hbFRva2VuQ29uZmlnLnRvRXh0ZXJuYWxUb2tlbkNvbmZpZygpXG4gICAgfTtcbiAgICByZXR1cm4gc3NvQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIG1hcFRvKHNzb0NvbmZpZ3VyYXRpb246IFNzb0NvbmZpZ3VyYXRpb24pOiBBYWRDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBzc29Db25maWd1cmF0aW9uRm9yQWFkID0gY2xvbmVEZWVwKHNzb0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgY29uc3QgYXBwbGljYXRpb25zSWQgPSBhdChzc29Db25maWd1cmF0aW9uRm9yQWFkLCBbJ2F1ZGllbmNlJywgJ2NsaWVudElkJ10pO1xuICAgIHRoaXMuc2V0dXBEZWZhdWx0cyhzc29Db25maWd1cmF0aW9uRm9yQWFkKTtcbiAgICB0aGlzLnNldHVwVXNlcklkQ29uZmlnKHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQpO1xuICAgIHRoaXMuc2V0dXBTaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcoc3NvQ29uZmlndXJhdGlvbkZvckFhZCk7XG5cbiAgICBjb25zdCBhYWRDb25maWd1cmF0aW9uOiBBYWRDb25maWd1cmF0aW9uID0ge1xuICAgICAgYWFkQWRkcmVzczogdGhpcy5nZXRBYWRBZGRyZXNzKHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQpLFxuICAgICAgdGVuYW50OiB0aGlzLmdldFRlbmFudChzc29Db25maWd1cmF0aW9uRm9yQWFkKSxcbiAgICAgIGFwcGxpY2F0aW9uSWQ6IHRoaXMuZ2V0Rmlyc3REZWZpbmVkKGFwcGxpY2F0aW9uc0lkKSxcbiAgICAgIHJlZGlyZWN0VG9QbGF0Zm9ybTogc3NvQ29uZmlndXJhdGlvbkZvckFhZC5yZWRpcmVjdFRvUGxhdGZvcm0sXG4gICAgICBjbGllbnRTZWNyZXQ6IHRoaXMuZ2V0Q2xpZW50U2VjcmV0KHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQpLFxuICAgICAgaXNzdWVyOiBzc29Db25maWd1cmF0aW9uRm9yQWFkLmlzc3VlcixcbiAgICAgIGJ1dHRvbk5hbWU6IHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQuYnV0dG9uTmFtZSxcbiAgICAgIHZpc2libGVPbkxvZ2luUGFnZTogc3NvQ29uZmlndXJhdGlvbkZvckFhZC52aXNpYmxlT25Mb2dpblBhZ2UsXG4gICAgICByZWRpcmVjdEFmdGVyTG9nb3V0OiB0aGlzLmdldFJlZGlyZWN0QWZ0ZXJMb2dvdXQoc3NvQ29uZmlndXJhdGlvbkZvckFhZCksXG4gICAgICByZWRpcmVjdEFmdGVyTG9nb3V0VXJsOiB0aGlzLmdldFJlZGlyZWN0QWZ0ZXJMb2dvdXRVcmwoc3NvQ29uZmlndXJhdGlvbkZvckFhZCksXG4gICAgICBhY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5nczogc3NvQ29uZmlndXJhdGlvbkZvckFhZC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncyxcbiAgICAgIHVzZXJJZENvbmZpZzoge1xuICAgICAgICBqd3RGaWVsZDogc3NvQ29uZmlndXJhdGlvbkZvckFhZC51c2VySWRDb25maWcuand0RmllbGRcbiAgICAgIH0sXG4gICAgICBwdWJsaWNLZXlEaXNjb3ZlcnlVcmw6XG4gICAgICAgIHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQuc2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnLmFhZC5wdWJsaWNLZXlEaXNjb3ZlcnlVcmwsXG4gICAgICBzaWduYXR1cmVWZXJpZmljYXRpb25Db25maWc6IG5ldyBTaWduYXR1cmVDb25maWd1cmF0aW9uKFxuICAgICAgICBzc29Db25maWd1cmF0aW9uRm9yQWFkLnNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZ1xuICAgICAgKSxcbiAgICAgIG9uTmV3VXNlcjogc3NvQ29uZmlndXJhdGlvbkZvckFhZC5vbk5ld1VzZXIsXG4gICAgICBleHRlcm5hbFRva2VuQ29uZmlnOiBuZXcgRXh0ZXJuYWxUb2tlbihzc29Db25maWd1cmF0aW9uRm9yQWFkLmV4dGVybmFsVG9rZW5Db25maWcpXG4gICAgfTtcbiAgICByZXR1cm4gYWFkQ29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBEZWZhdWx0cyhzc29Db25maWd1cmF0aW9uKSB7XG4gICAgZGVmYXVsdHMoc3NvQ29uZmlndXJhdGlvbiwgdGhpcy5kZWZhdWx0cyk7XG4gIH1cblxuICBwcml2YXRlIGdldEFhZEFkZHJlc3Moc3NvQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IHVybHMgPSB0aGlzLmdldFVybHNGcm9tUmVxdWVzdHMoc3NvQ29uZmlndXJhdGlvbik7XG5cbiAgICBjb25zdCBhYWRBZGRyZXNzZXMgPSBtYXAodXJscywgdXJsID0+IHRoaXMuZ2V0QWFkQWRkcmVzc0Zyb21VcmwodXJsKSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3REZWZpbmVkKGFhZEFkZHJlc3Nlcyk7XG4gIH1cblxuICBwcml2YXRlIGdldFRlbmFudChzc29Db25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgdXJscyA9IHRoaXMuZ2V0VXJsc0Zyb21SZXF1ZXN0cyhzc29Db25maWd1cmF0aW9uKTtcblxuICAgIGNvbnN0IHRlbmFudHMgPSBtYXAodXJscywgdXJsID0+IHRoaXMuZ2V0VGVuYW50RnJvbVVybCh1cmwpKTtcbiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdERlZmluZWQodGVuYW50cyk7XG4gIH1cblxuICBwcml2YXRlIGdldFVybHNGcm9tUmVxdWVzdHMoc3NvQ29uZmlndXJhdGlvbikge1xuICAgIHJldHVybiBhdChzc29Db25maWd1cmF0aW9uLCBbXG4gICAgICAnYXV0aG9yaXphdGlvblJlcXVlc3QudXJsJyxcbiAgICAgICd0b2tlblJlcXVlc3QudXJsJyxcbiAgICAgICdyZWZyZXNoUmVxdWVzdC51cmwnXG4gICAgXSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFhZEFkZHJlc3NGcm9tVXJsKHVybCkge1xuICAgIGNvbnN0IFssIGFhZEFkZHJlc3NdID0gKHVybCB8fCAnJykubWF0Y2godGhpcy51cmxQYXR0ZXJuKSB8fCBbXTtcbiAgICByZXR1cm4gYWFkQWRkcmVzcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGVuYW50RnJvbVVybCh1cmwpIHtcbiAgICBjb25zdCBbLCAsICwgdGVuYW50XSA9ICh1cmwgfHwgJycpLm1hdGNoKHRoaXMudXJsUGF0dGVybikgfHwgW107XG4gICAgcmV0dXJuIHRlbmFudDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xpZW50U2VjcmV0KHNzb0NvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBib2RpZXMgPSBhdChzc29Db25maWd1cmF0aW9uLCBbJ3Rva2VuUmVxdWVzdC5ib2R5JywgJ3JlZnJlc2hSZXF1ZXN0LmJvZHknXSk7XG4gICAgY29uc3QgY2xpZW50U2VjcmV0cyA9IG1hcChib2RpZXMsIGJvZHkgPT4gdGhpcy5nZXRDbGllbnRTZWNyZXRGcm9tQm9keShib2R5KSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3REZWZpbmVkKGNsaWVudFNlY3JldHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGllbnRTZWNyZXRGcm9tQm9keShib2R5KSB7XG4gICAgY29uc3QgWywgY2xpZW50U2VjcmV0XSA9IChib2R5IHx8ICcnKS5tYXRjaCgvY2xpZW50X3NlY3JldD0oW14mXSspLykgfHwgW107XG4gICAgcmV0dXJuIGNsaWVudFNlY3JldCA/IGRlY29kZVVSSUNvbXBvbmVudChjbGllbnRTZWNyZXQpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFVzZXJJZENvbmZpZyhzc29Db25maWd1cmF0aW9uKSB7XG4gICAgZGVmYXVsdHNEZWVwKHNzb0NvbmZpZ3VyYXRpb24sIHsgdXNlcklkQ29uZmlnOiB7IGp3dEZpZWxkOiAndXBuJyB9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cFNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZyhzc29Db25maWd1cmF0aW9uKSB7XG4gICAgZGVmYXVsdHNEZWVwKHNzb0NvbmZpZ3VyYXRpb24sIHtcbiAgICAgIHNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZzogeyBhYWQ6IHsgcHVibGljS2V5RGlzY292ZXJ5VXJsOiAnJyB9IH1cbiAgICB9KTtcbiAgICBzc29Db25maWd1cmF0aW9uLnNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZyA9IHBpY2soXG4gICAgICBzc29Db25maWd1cmF0aW9uLnNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZyxcbiAgICAgICdhYWQnXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVkaXJlY3RBZnRlckxvZ291dChzc29Db25maWd1cmF0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGhhcyhzc29Db25maWd1cmF0aW9uLCAnbG9nb3V0UmVxdWVzdC5yZXF1ZXN0UGFyYW1zLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaScpXG4gICAgICA/IHRydWVcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGdldFJlZGlyZWN0QWZ0ZXJMb2dvdXRVcmwoc3NvQ29uZmlndXJhdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNzb0NvbmZpZ3VyYXRpb24ubG9nb3V0UmVxdWVzdC5yZXF1ZXN0UGFyYW1zLnBvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaVxuICAgICAgPyBzc29Db25maWd1cmF0aW9uLmxvZ291dFJlcXVlc3QucmVxdWVzdFBhcmFtcy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcbiAgICAgIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Rmlyc3REZWZpbmVkKHZhbHVlcykge1xuICAgIHJldHVybiBoZWFkKHJlamVjdCh2YWx1ZXMsIGlzVW5kZWZpbmVkKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5U3RyaW5nKHBhcmFtcykge1xuICAgIHJldHVybiBtYXAocGFyYW1zLCAodmFsdWUsIGtleSkgPT4gYCR7a2V5fT0ke3ZhbHVlfWApLmpvaW4oJyYnKTtcbiAgfVxufVxuIl19
199
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWFkLWNvbmZpZ3VyYXRpb24tbWFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL3Nzby1jb25maWd1cmF0aW9uL3RlbXBsYXRlcy9hYWQtY29uZmlndXJhdGlvbi1tYXBwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFvQixZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQ0wsU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsRUFBRSxFQUNGLEdBQUcsRUFDSCxZQUFZLEVBQ1osR0FBRyxFQUNILElBQUksRUFDSixNQUFNLEVBQ04sV0FBVyxFQUNaLE1BQU0sV0FBVyxDQUFDO0FBQ25CLE9BQU8sRUFBRSxTQUFTLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0NBQStDLENBQUM7O0FBSzlFLE1BQU0sT0FBTyxzQkFBc0I7SUFIbkM7UUFJVSxhQUFRLEdBQUc7WUFDakIsa0JBQWtCLEVBQUUsSUFBSTtTQUN6QixDQUFDO1FBRU0sZUFBVSxHQUFHLDRDQUE0QyxDQUFDO0tBNE1uRTtJQTFNQyxPQUFPLENBQUMsYUFBK0I7UUFDckMsTUFBTSxPQUFPLEdBQUcsR0FBRyxhQUFhLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxNQUFNLFNBQVMsQ0FBQztRQUU3RSxNQUFNLGdCQUFnQixHQUFxQjtZQUN6QyxRQUFRLEVBQUUsYUFBYSxDQUFDLGFBQWE7WUFDckMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxhQUFhO1lBQ3JDLGFBQWEsRUFBRSxhQUFhLENBQUMsbUJBQW1CO2dCQUM5QyxDQUFDLENBQUM7b0JBQ0UsTUFBTSxFQUFFLE1BQU07b0JBQ2QsR0FBRyxFQUFFLEdBQUcsT0FBTyxTQUFTO29CQUN4QixhQUFhLEVBQUU7d0JBQ2Isd0JBQXdCLEVBQUUsYUFBYSxDQUFDLHNCQUFzQjtxQkFDL0Q7b0JBQ0QsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsSUFBSSxFQUFFLEVBQUU7b0JBQ1IsU0FBUyxFQUFFLFVBQVU7aUJBQ3RCO2dCQUNILENBQUMsQ0FBQztvQkFDRSxNQUFNLEVBQUUsTUFBTTtvQkFDZCxPQUFPLEVBQUUsRUFBRTtvQkFDWCxTQUFTLEVBQUUsVUFBVTtvQkFDckIsYUFBYSxFQUFFLEVBQUU7aUJBQ2xCO1lBQ0wsb0JBQW9CLEVBQUU7Z0JBQ3BCLE1BQU0sRUFBRSxLQUFLO2dCQUNiLEdBQUcsRUFBRSxHQUFHLE9BQU8sWUFBWTtnQkFDM0IsYUFBYSxFQUFFO29CQUNiLFlBQVksRUFBRSxnQkFBZ0I7b0JBQzlCLFNBQVMsRUFBRSxhQUFhO29CQUN4QixhQUFhLEVBQUUsTUFBTTtpQkFDdEI7Z0JBQ0QsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsU0FBUyxFQUFFLFVBQVU7YUFDdEI7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLE1BQU07Z0JBQ2QsR0FBRyxFQUFFLEdBQUcsT0FBTyxRQUFRO2dCQUN2QixhQUFhLEVBQUUsRUFBRTtnQkFDakIsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBQ3hCLFVBQVUsRUFBRSxvQkFBb0I7b0JBQ2hDLElBQUksRUFBRSxTQUFTO29CQUNmLFlBQVksRUFBRSxnQkFBZ0I7b0JBQzlCLFFBQVEsRUFBRSxhQUFhO29CQUN2QixTQUFTLEVBQUUsYUFBYTtvQkFDeEIsYUFBYSxFQUFFLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUM7aUJBQzlELENBQUM7Z0JBQ0YsU0FBUyxFQUFFLFNBQVM7YUFDckI7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsR0FBRyxFQUFFLEdBQUcsT0FBTyxRQUFRO2dCQUN2QixhQUFhLEVBQUUsRUFBRTtnQkFDakIsT0FBTyxFQUFFLEVBQUU7Z0JBQ1gsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUM7b0JBQ3hCLFVBQVUsRUFBRSxlQUFlO29CQUMzQixhQUFhLEVBQUUsaUJBQWlCO29CQUNoQyxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsU0FBUyxFQUFFLGFBQWE7b0JBQ3hCLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO2lCQUM5RCxDQUFDO2dCQUNGLFNBQVMsRUFBRSxTQUFTO2FBQ3JCO1lBQ0QsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO1lBQ3BDLFlBQVksRUFBRSxVQUFVO1lBQ3hCLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtZQUM1QixTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVM7WUFDbEMsNkJBQTZCLEVBQUUsYUFBYSxDQUFDLDZCQUE2QjtZQUMxRSxrQkFBa0IsRUFBRSxhQUFhLENBQUMsa0JBQWtCLElBQUksSUFBSTtZQUM1RCxRQUFRLEVBQUUsWUFBWSxDQUFDLEtBQUs7WUFDNUIsWUFBWSxFQUFFO2dCQUNaLGdCQUFnQixFQUFFLEtBQUs7Z0JBQ3ZCLFFBQVEsRUFBRSxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVE7YUFDOUM7WUFDRCxrQkFBa0IsRUFBRSxhQUFhLENBQUMsa0JBQWtCO1lBQ3BELDJCQUEyQixFQUN6QixhQUFhLENBQUMsMkJBQTJCLENBQUMsNkJBQTZCLEVBQUU7WUFDM0Usb0JBQW9CLEVBQUUsb0JBQW9CLENBQUMsTUFBTTtZQUNqRCxJQUFJLEVBQUUscUJBQXFCLENBQUMsTUFBTTtZQUNsQyxTQUFTLEVBQUUsU0FBUyxDQUFDLGtCQUFrQjtZQUN2QyxtQkFBbUIsRUFBRSxhQUFhLENBQUMsbUJBQW1CLENBQUMscUJBQXFCLEVBQUU7WUFDOUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxVQUFVO1NBQ3JDLENBQUM7UUFDRixPQUFPLGdCQUFnQixDQUFDO0lBQzFCLENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWtDO1FBQ3RDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFM0QsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLHNCQUFzQixFQUFFLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTlELE1BQU0sZ0JBQWdCLEdBQXFCO1lBQ3pDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDO1lBQ3RELE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDO1lBQzlDLGFBQWEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQztZQUNuRCxrQkFBa0IsRUFBRSxzQkFBc0IsQ0FBQyxrQkFBa0I7WUFDN0QsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsc0JBQXNCLENBQUM7WUFDMUQsTUFBTSxFQUFFLHNCQUFzQixDQUFDLE1BQU07WUFDckMsVUFBVSxFQUFFLHNCQUFzQixDQUFDLFVBQVU7WUFDN0Msa0JBQWtCLEVBQUUsc0JBQXNCLENBQUMsa0JBQWtCO1lBQzdELG1CQUFtQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxzQkFBc0IsQ0FBQztZQUN4RSxzQkFBc0IsRUFBRSxJQUFJLENBQUMseUJBQXlCLENBQUMsc0JBQXNCLENBQUM7WUFDOUUsNkJBQTZCLEVBQUUsc0JBQXNCLENBQUMsNkJBQTZCO1lBQ25GLFlBQVksRUFBRTtnQkFDWixRQUFRLEVBQUUsc0JBQXNCLENBQUMsWUFBWSxDQUFDLFFBQVE7YUFDdkQ7WUFDRCxxQkFBcUIsRUFDbkIsc0JBQXNCLENBQUMsMkJBQTJCLENBQUMsR0FBRyxDQUFDLHFCQUFxQjtZQUM5RSwyQkFBMkIsRUFBRSxJQUFJLHNCQUFzQixDQUNyRCxzQkFBc0IsQ0FBQywyQkFBMkIsQ0FDbkQ7WUFDRCxTQUFTLEVBQUUsc0JBQXNCLENBQUMsU0FBUztZQUMzQyxtQkFBbUIsRUFBRSxJQUFJLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxtQkFBbUIsQ0FBQztZQUNsRixVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtTQUN4QyxDQUFDO1FBQ0YsT0FBTyxnQkFBZ0IsQ0FBQztJQUMxQixDQUFDO0lBRU8sYUFBYSxDQUFDLGdCQUFnQjtRQUNwQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFTyxhQUFhLENBQUMsZ0JBQWdCO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXhELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLFNBQVMsQ0FBQyxnQkFBZ0I7UUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFeEQsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sbUJBQW1CLENBQUMsZ0JBQWdCO1FBQzFDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLDBCQUEwQjtZQUMxQixrQkFBa0I7WUFDbEIsb0JBQW9CO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxHQUFHO1FBQzlCLE1BQU0sQ0FBQyxFQUFFLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2hFLE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUFHO1FBQzFCLE1BQU0sQ0FBQyxFQUFFLEFBQUQsRUFBRyxBQUFELEVBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEUsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLGVBQWUsQ0FBQyxnQkFBZ0I7UUFDdEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixFQUFFLENBQUMsbUJBQW1CLEVBQUUscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RSxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLHVCQUF1QixDQUFDLElBQUk7UUFDbEMsTUFBTSxDQUFDLEVBQUUsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxDQUFDO1FBQzNFLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxnQkFBZ0I7UUFDeEMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sZ0NBQWdDLENBQUMsZ0JBQWdCO1FBQ3ZELFlBQVksQ0FBQyxnQkFBZ0IsRUFBRTtZQUM3QiwyQkFBMkIsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLHFCQUFxQixFQUFFLEVBQUUsRUFBRSxFQUFFO1NBQ3BFLENBQUMsQ0FBQztRQUNILGdCQUFnQixDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FDakQsZ0JBQWdCLENBQUMsMkJBQTJCLEVBQzVDLEtBQUssQ0FDTixDQUFDO0lBQ0osQ0FBQztJQUVPLHNCQUFzQixDQUFDLGdCQUFnQjtRQUM3QyxPQUFPLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxzREFBc0QsQ0FBQztZQUNsRixDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixDQUFDO0lBRU8seUJBQXlCLENBQUMsZ0JBQWdCO1FBQ2hELE9BQU8sZ0JBQWdCLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyx3QkFBd0I7WUFDMUUsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsd0JBQXdCO1lBQ3ZFLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQU07UUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFTyxjQUFjLENBQUMsTUFBTTtRQUMzQixPQUFPLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDOzhHQWhOVSxzQkFBc0I7a0hBQXRCLHNCQUFzQixjQUZyQixNQUFNOzsyRkFFUCxzQkFBc0I7a0JBSGxDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3NvQ29uZmlndXJhdGlvbk1hcHBlciB9IGZyb20gJy4vc3NvLWNvbmZpZ3VyYXRpb24ubWFwcGVyJztcbmltcG9ydCB7IEFhZENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2FhZC5tb2RlbCc7XG5pbXBvcnQgeyBTc29Db25maWd1cmF0aW9uLCBUZW1wbGF0ZVR5cGUgfSBmcm9tICcuLi9zc28tY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQge1xuICBjbG9uZURlZXAsXG4gIHBpY2ssXG4gIGRlZmF1bHRzLFxuICBhdCxcbiAgbWFwLFxuICBkZWZhdWx0c0RlZXAsXG4gIGhhcyxcbiAgaGVhZCxcbiAgcmVqZWN0LFxuICBpc1VuZGVmaW5lZFxufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgR3JhbnRUeXBlLCBUZW5hbnRMb2dpbk9wdGlvblR5cGUsIFVzZXJNYW5hZ2VtZW50U291cmNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgU2lnbmF0dXJlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3RlbXBsYXRlLXBhcnRzL3NpZ25hdHVyZS1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEV4dGVybmFsVG9rZW4gfSBmcm9tICcuLi90ZW1wbGF0ZS1wYXJ0cy9leHRlcm5hbC10b2tlbi1jb25maWcubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBYWRDb25maWd1cmF0aW9uTWFwcGVyIGltcGxlbWVudHMgU3NvQ29uZmlndXJhdGlvbk1hcHBlcjxBYWRDb25maWd1cmF0aW9uPiB7XG4gIHByaXZhdGUgZGVmYXVsdHMgPSB7XG4gICAgdmlzaWJsZU9uTG9naW5QYWdlOiB0cnVlXG4gIH07XG5cbiAgcHJpdmF0ZSB1cmxQYXR0ZXJuID0gL14oLispXFwvKCguKz8pXFwvb2F1dGgyXFwvKGF1dGhvcml6ZXx0b2tlbikpJC87XG5cbiAgbWFwRnJvbSh0ZW1wbGF0ZU1vZGVsOiBBYWRDb25maWd1cmF0aW9uKTogU3NvQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgYmFzZVVybCA9IGAke3RlbXBsYXRlTW9kZWwuYWFkQWRkcmVzc30vJHt0ZW1wbGF0ZU1vZGVsLnRlbmFudH0vb2F1dGgyYDtcblxuICAgIGNvbnN0IHNzb0NvbmZpZ3VyYXRpb246IFNzb0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICBhdWRpZW5jZTogdGVtcGxhdGVNb2RlbC5hcHBsaWNhdGlvbklkLFxuICAgICAgY2xpZW50SWQ6IHRlbXBsYXRlTW9kZWwuYXBwbGljYXRpb25JZCxcbiAgICAgIGxvZ291dFJlcXVlc3Q6IHRlbXBsYXRlTW9kZWwucmVkaXJlY3RBZnRlckxvZ291dFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgICAgdXJsOiBgJHtiYXNlVXJsfS9sb2dvdXRgLFxuICAgICAgICAgICAgcmVxdWVzdFBhcmFtczoge1xuICAgICAgICAgICAgICBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmk6IHRlbXBsYXRlTW9kZWwucmVkaXJlY3RBZnRlckxvZ291dFVybFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgYm9keTogJycsXG4gICAgICAgICAgICBvcGVyYXRpb246ICdSRURJUkVDVCdcbiAgICAgICAgICB9XG4gICAgICAgIDoge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzOiB7fSxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ1JFRElSRUNUJyxcbiAgICAgICAgICAgIHJlcXVlc3RQYXJhbXM6IHt9XG4gICAgICAgICAgfSxcbiAgICAgIGF1dGhvcml6YXRpb25SZXF1ZXN0OiB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHVybDogYCR7YmFzZVVybH0vYXV0aG9yaXplYCxcbiAgICAgICAgcmVxdWVzdFBhcmFtczoge1xuICAgICAgICAgIHJlZGlyZWN0X3VyaTogJyR7cmVkaXJlY3RVcml9JyxcbiAgICAgICAgICBjbGllbnRfaWQ6ICcke2NsaWVudElkfScsXG4gICAgICAgICAgcmVzcG9uc2VfdHlwZTogJ2NvZGUnXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBib2R5OiAnJyxcbiAgICAgICAgb3BlcmF0aW9uOiAnUkVESVJFQ1QnXG4gICAgICB9LFxuICAgICAgdG9rZW5SZXF1ZXN0OiB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB1cmw6IGAke2Jhc2VVcmx9L3Rva2VuYCxcbiAgICAgICAgcmVxdWVzdFBhcmFtczoge30sXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBib2R5OiB0aGlzLmdldFF1ZXJ5U3RyaW5nKHtcbiAgICAgICAgICBncmFudF90eXBlOiAnYXV0aG9yaXphdGlvbl9jb2RlJyxcbiAgICAgICAgICBjb2RlOiAnJHtjb2RlfScsXG4gICAgICAgICAgcmVkaXJlY3RfdXJpOiAnJHtyZWRpcmVjdFVyaX0nLFxuICAgICAgICAgIHJlc291cmNlOiAnJHtjbGllbnRJZH0nLFxuICAgICAgICAgIGNsaWVudF9pZDogJyR7Y2xpZW50SWR9JyxcbiAgICAgICAgICBjbGllbnRfc2VjcmV0OiBlbmNvZGVVUklDb21wb25lbnQodGVtcGxhdGVNb2RlbC5jbGllbnRTZWNyZXQpXG4gICAgICAgIH0pLFxuICAgICAgICBvcGVyYXRpb246ICdFWEVDVVRFJ1xuICAgICAgfSxcbiAgICAgIHJlZnJlc2hSZXF1ZXN0OiB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICB1cmw6IGAke2Jhc2VVcmx9L3Rva2VuYCxcbiAgICAgICAgcmVxdWVzdFBhcmFtczoge30sXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBib2R5OiB0aGlzLmdldFF1ZXJ5U3RyaW5nKHtcbiAgICAgICAgICBncmFudF90eXBlOiAncmVmcmVzaF90b2tlbicsXG4gICAgICAgICAgcmVmcmVzaF90b2tlbjogJyR7cmVmcmVzaFRva2VufScsXG4gICAgICAgICAgcmVzb3VyY2U6ICcke2NsaWVudElkfScsXG4gICAgICAgICAgY2xpZW50X2lkOiAnJHtjbGllbnRJZH0nLFxuICAgICAgICAgIGNsaWVudF9zZWNyZXQ6IGVuY29kZVVSSUNvbXBvbmVudCh0ZW1wbGF0ZU1vZGVsLmNsaWVudFNlY3JldClcbiAgICAgICAgfSksXG4gICAgICAgIG9wZXJhdGlvbjogJ0VYRUNVVEUnXG4gICAgICB9LFxuICAgICAgYnV0dG9uTmFtZTogdGVtcGxhdGVNb2RlbC5idXR0b25OYW1lLFxuICAgICAgcHJvdmlkZXJOYW1lOiAnQXp1cmUgQUQnLFxuICAgICAgaXNzdWVyOiB0ZW1wbGF0ZU1vZGVsLmlzc3VlcixcbiAgICAgIG9uTmV3VXNlcjogdGVtcGxhdGVNb2RlbC5vbk5ld1VzZXIsXG4gICAgICBhY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5nczogdGVtcGxhdGVNb2RlbC5hY2Nlc3NUb2tlblRvVXNlckRhdGFNYXBwaW5ncyxcbiAgICAgIHJlZGlyZWN0VG9QbGF0Zm9ybTogdGVtcGxhdGVNb2RlbC5yZWRpcmVjdFRvUGxhdGZvcm0gfHwgbnVsbCxcbiAgICAgIHRlbXBsYXRlOiBUZW1wbGF0ZVR5cGUuQVpVUkUsXG4gICAgICB1c2VySWRDb25maWc6IHtcbiAgICAgICAgdXNlQ29uc3RhbnRWYWx1ZTogZmFsc2UsXG4gICAgICAgIGp3dEZpZWxkOiB0ZW1wbGF0ZU1vZGVsLnVzZXJJZENvbmZpZy5qd3RGaWVsZFxuICAgICAgfSxcbiAgICAgIHZpc2libGVPbkxvZ2luUGFnZTogdGVtcGxhdGVNb2RlbC52aXNpYmxlT25Mb2dpblBhZ2UsXG4gICAgICBzaWduYXR1cmVWZXJpZmljYXRpb25Db25maWc6XG4gICAgICAgIHRlbXBsYXRlTW9kZWwuc2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnLnRvU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnKCksXG4gICAgICB1c2VyTWFuYWdlbWVudFNvdXJjZTogVXNlck1hbmFnZW1lbnRTb3VyY2UuUkVNT1RFLFxuICAgICAgdHlwZTogVGVuYW50TG9naW5PcHRpb25UeXBlLk9BVVRIMixcbiAgICAgIGdyYW50VHlwZTogR3JhbnRUeXBlLkFVVEhPUklaQVRJT05fQ09ERSxcbiAgICAgIGV4dGVybmFsVG9rZW5Db25maWc6IHRlbXBsYXRlTW9kZWwuZXh0ZXJuYWxUb2tlbkNvbmZpZy50b0V4dGVybmFsVG9rZW5Db25maWcoKSxcbiAgICAgIHVzZUlkVG9rZW46IHRlbXBsYXRlTW9kZWwudXNlSWRUb2tlblxuICAgIH07XG4gICAgcmV0dXJuIHNzb0NvbmZpZ3VyYXRpb247XG4gIH1cblxuICBtYXBUbyhzc29Db25maWd1cmF0aW9uOiBTc29Db25maWd1cmF0aW9uKTogQWFkQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3Qgc3NvQ29uZmlndXJhdGlvbkZvckFhZCA9IGNsb25lRGVlcChzc29Db25maWd1cmF0aW9uKTtcblxuICAgIGNvbnN0IGFwcGxpY2F0aW9uc0lkID0gYXQoc3NvQ29uZmlndXJhdGlvbkZvckFhZCwgWydhdWRpZW5jZScsICdjbGllbnRJZCddKTtcbiAgICB0aGlzLnNldHVwRGVmYXVsdHMoc3NvQ29uZmlndXJhdGlvbkZvckFhZCk7XG4gICAgdGhpcy5zZXR1cFVzZXJJZENvbmZpZyhzc29Db25maWd1cmF0aW9uRm9yQWFkKTtcbiAgICB0aGlzLnNldHVwU2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnKHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQpO1xuXG4gICAgY29uc3QgYWFkQ29uZmlndXJhdGlvbjogQWFkQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIGFhZEFkZHJlc3M6IHRoaXMuZ2V0QWFkQWRkcmVzcyhzc29Db25maWd1cmF0aW9uRm9yQWFkKSxcbiAgICAgIHRlbmFudDogdGhpcy5nZXRUZW5hbnQoc3NvQ29uZmlndXJhdGlvbkZvckFhZCksXG4gICAgICBhcHBsaWNhdGlvbklkOiB0aGlzLmdldEZpcnN0RGVmaW5lZChhcHBsaWNhdGlvbnNJZCksXG4gICAgICByZWRpcmVjdFRvUGxhdGZvcm06IHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQucmVkaXJlY3RUb1BsYXRmb3JtLFxuICAgICAgY2xpZW50U2VjcmV0OiB0aGlzLmdldENsaWVudFNlY3JldChzc29Db25maWd1cmF0aW9uRm9yQWFkKSxcbiAgICAgIGlzc3Vlcjogc3NvQ29uZmlndXJhdGlvbkZvckFhZC5pc3N1ZXIsXG4gICAgICBidXR0b25OYW1lOiBzc29Db25maWd1cmF0aW9uRm9yQWFkLmJ1dHRvbk5hbWUsXG4gICAgICB2aXNpYmxlT25Mb2dpblBhZ2U6IHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQudmlzaWJsZU9uTG9naW5QYWdlLFxuICAgICAgcmVkaXJlY3RBZnRlckxvZ291dDogdGhpcy5nZXRSZWRpcmVjdEFmdGVyTG9nb3V0KHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQpLFxuICAgICAgcmVkaXJlY3RBZnRlckxvZ291dFVybDogdGhpcy5nZXRSZWRpcmVjdEFmdGVyTG9nb3V0VXJsKHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQpLFxuICAgICAgYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3M6IHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQuYWNjZXNzVG9rZW5Ub1VzZXJEYXRhTWFwcGluZ3MsXG4gICAgICB1c2VySWRDb25maWc6IHtcbiAgICAgICAgand0RmllbGQ6IHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQudXNlcklkQ29uZmlnLmp3dEZpZWxkXG4gICAgICB9LFxuICAgICAgcHVibGljS2V5RGlzY292ZXJ5VXJsOlxuICAgICAgICBzc29Db25maWd1cmF0aW9uRm9yQWFkLnNpZ25hdHVyZVZlcmlmaWNhdGlvbkNvbmZpZy5hYWQucHVibGljS2V5RGlzY292ZXJ5VXJsLFxuICAgICAgc2lnbmF0dXJlVmVyaWZpY2F0aW9uQ29uZmlnOiBuZXcgU2lnbmF0dXJlQ29uZmlndXJhdGlvbihcbiAgICAgICAgc3NvQ29uZmlndXJhdGlvbkZvckFhZC5zaWduYXR1cmVWZXJpZmljYXRpb25Db25maWdcbiAgICAgICksXG4gICAgICBvbk5ld1VzZXI6IHNzb0NvbmZpZ3VyYXRpb25Gb3JBYWQub25OZXdVc2VyLFxuICAgICAgZXh0ZXJuYWxUb2tlbkNvbmZpZzogbmV3IEV4dGVybmFsVG9rZW4oc3NvQ29uZmlndXJhdGlvbkZvckFhZC5leHRlcm5hbFRva2VuQ29uZmlnKSxcbiAgICAgIHVzZUlkVG9rZW46IHNzb0NvbmZpZ3VyYXRpb24udXNlSWRUb2tlblxuICAgIH07XG4gICAgcmV0dXJuIGFhZENvbmZpZ3VyYXRpb247XG4gIH1cblxuICBwcml2YXRlIHNldHVwRGVmYXVsdHMoc3NvQ29uZmlndXJhdGlvbikge1xuICAgIGRlZmF1bHRzKHNzb0NvbmZpZ3VyYXRpb24sIHRoaXMuZGVmYXVsdHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBYWRBZGRyZXNzKHNzb0NvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCB1cmxzID0gdGhpcy5nZXRVcmxzRnJvbVJlcXVlc3RzKHNzb0NvbmZpZ3VyYXRpb24pO1xuXG4gICAgY29uc3QgYWFkQWRkcmVzc2VzID0gbWFwKHVybHMsIHVybCA9PiB0aGlzLmdldEFhZEFkZHJlc3NGcm9tVXJsKHVybCkpO1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0RGVmaW5lZChhYWRBZGRyZXNzZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUZW5hbnQoc3NvQ29uZmlndXJhdGlvbikge1xuICAgIGNvbnN0IHVybHMgPSB0aGlzLmdldFVybHNGcm9tUmVxdWVzdHMoc3NvQ29uZmlndXJhdGlvbik7XG5cbiAgICBjb25zdCB0ZW5hbnRzID0gbWFwKHVybHMsIHVybCA9PiB0aGlzLmdldFRlbmFudEZyb21VcmwodXJsKSk7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Rmlyc3REZWZpbmVkKHRlbmFudHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVcmxzRnJvbVJlcXVlc3RzKHNzb0NvbmZpZ3VyYXRpb24pIHtcbiAgICByZXR1cm4gYXQoc3NvQ29uZmlndXJhdGlvbiwgW1xuICAgICAgJ2F1dGhvcml6YXRpb25SZXF1ZXN0LnVybCcsXG4gICAgICAndG9rZW5SZXF1ZXN0LnVybCcsXG4gICAgICAncmVmcmVzaFJlcXVlc3QudXJsJ1xuICAgIF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBYWRBZGRyZXNzRnJvbVVybCh1cmwpIHtcbiAgICBjb25zdCBbLCBhYWRBZGRyZXNzXSA9ICh1cmwgfHwgJycpLm1hdGNoKHRoaXMudXJsUGF0dGVybikgfHwgW107XG4gICAgcmV0dXJuIGFhZEFkZHJlc3M7XG4gIH1cblxuICBwcml2YXRlIGdldFRlbmFudEZyb21VcmwodXJsKSB7XG4gICAgY29uc3QgWywgLCAsIHRlbmFudF0gPSAodXJsIHx8ICcnKS5tYXRjaCh0aGlzLnVybFBhdHRlcm4pIHx8IFtdO1xuICAgIHJldHVybiB0ZW5hbnQ7XG4gIH1cblxuICBwcml2YXRlIGdldENsaWVudFNlY3JldChzc29Db25maWd1cmF0aW9uKSB7XG4gICAgY29uc3QgYm9kaWVzID0gYXQoc3NvQ29uZmlndXJhdGlvbiwgWyd0b2tlblJlcXVlc3QuYm9keScsICdyZWZyZXNoUmVxdWVzdC5ib2R5J10pO1xuICAgIGNvbnN0IGNsaWVudFNlY3JldHMgPSBtYXAoYm9kaWVzLCBib2R5ID0+IHRoaXMuZ2V0Q2xpZW50U2VjcmV0RnJvbUJvZHkoYm9keSkpO1xuICAgIHJldHVybiB0aGlzLmdldEZpcnN0RGVmaW5lZChjbGllbnRTZWNyZXRzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2xpZW50U2VjcmV0RnJvbUJvZHkoYm9keSkge1xuICAgIGNvbnN0IFssIGNsaWVudFNlY3JldF0gPSAoYm9keSB8fCAnJykubWF0Y2goL2NsaWVudF9zZWNyZXQ9KFteJl0rKS8pIHx8IFtdO1xuICAgIHJldHVybiBjbGllbnRTZWNyZXQgPyBkZWNvZGVVUklDb21wb25lbnQoY2xpZW50U2VjcmV0KSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBVc2VySWRDb25maWcoc3NvQ29uZmlndXJhdGlvbikge1xuICAgIGRlZmF1bHRzRGVlcChzc29Db25maWd1cmF0aW9uLCB7IHVzZXJJZENvbmZpZzogeyBqd3RGaWVsZDogJ3VwbicgfSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBTaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcoc3NvQ29uZmlndXJhdGlvbikge1xuICAgIGRlZmF1bHRzRGVlcChzc29Db25maWd1cmF0aW9uLCB7XG4gICAgICBzaWduYXR1cmVWZXJpZmljYXRpb25Db25maWc6IHsgYWFkOiB7IHB1YmxpY0tleURpc2NvdmVyeVVybDogJycgfSB9XG4gICAgfSk7XG4gICAgc3NvQ29uZmlndXJhdGlvbi5zaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcgPSBwaWNrKFxuICAgICAgc3NvQ29uZmlndXJhdGlvbi5zaWduYXR1cmVWZXJpZmljYXRpb25Db25maWcsXG4gICAgICAnYWFkJ1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFJlZGlyZWN0QWZ0ZXJMb2dvdXQoc3NvQ29uZmlndXJhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBoYXMoc3NvQ29uZmlndXJhdGlvbiwgJ2xvZ291dFJlcXVlc3QucmVxdWVzdFBhcmFtcy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmknKVxuICAgICAgPyB0cnVlXG4gICAgICA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZWRpcmVjdEFmdGVyTG9nb3V0VXJsKHNzb0NvbmZpZ3VyYXRpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBzc29Db25maWd1cmF0aW9uLmxvZ291dFJlcXVlc3QucmVxdWVzdFBhcmFtcy5wb3N0X2xvZ291dF9yZWRpcmVjdF91cmlcbiAgICAgID8gc3NvQ29uZmlndXJhdGlvbi5sb2dvdXRSZXF1ZXN0LnJlcXVlc3RQYXJhbXMucG9zdF9sb2dvdXRfcmVkaXJlY3RfdXJpXG4gICAgICA6IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGdldEZpcnN0RGVmaW5lZCh2YWx1ZXMpIHtcbiAgICByZXR1cm4gaGVhZChyZWplY3QodmFsdWVzLCBpc1VuZGVmaW5lZCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRRdWVyeVN0cmluZyhwYXJhbXMpIHtcbiAgICByZXR1cm4gbWFwKHBhcmFtcywgKHZhbHVlLCBrZXkpID0+IGAke2tleX09JHt2YWx1ZX1gKS5qb2luKCcmJyk7XG4gIH1cbn1cbiJdfQ==