@bnsights/bbsf-admin-portal 1.1.63 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. package/README.md +3 -1
  2. package/bnsights-bbsf-admin-portal-1.3.1.tgz +0 -0
  3. package/esm2022/lib/Pages/ActiveDirectories/active-directories.component.mjs +5 -5
  4. package/esm2022/lib/Pages/ActiveDirectories/active-directory/active-directory.component.mjs +5 -5
  5. package/esm2022/lib/Pages/ActiveDirectories/active-directory-add/active-directory-add.component.mjs +5 -5
  6. package/esm2022/lib/Pages/ActiveDirectories/active-directory-routing.module.mjs +5 -5
  7. package/esm2022/lib/Pages/ActiveDirectories/active-directory.module.mjs +5 -5
  8. package/esm2022/lib/Pages/_layout/components/aside/aside-menu/aside-menu.component.mjs +5 -5
  9. package/esm2022/lib/Pages/_layout/components/aside/aside.component.mjs +5 -5
  10. package/esm2022/lib/Pages/_layout/components/content/content.component.mjs +5 -5
  11. package/esm2022/lib/Pages/_layout/components/footer/footer.component.mjs +5 -5
  12. package/esm2022/lib/Pages/_layout/components/header/header.component.mjs +5 -5
  13. package/esm2022/lib/Pages/_layout/components/header/page-title/page-title.component.mjs +5 -5
  14. package/esm2022/lib/Pages/_layout/components/scripts-init/scripts-init.component.mjs +5 -5
  15. package/esm2022/lib/Pages/_layout/components/subheader/subheader.component.mjs +5 -5
  16. package/esm2022/lib/Pages/_layout/components/subheader/subheader.module.mjs +5 -5
  17. package/esm2022/lib/Pages/_layout/components/toolbar/toolbar.component.mjs +5 -5
  18. package/esm2022/lib/Pages/_layout/components/toolbar/toolbar.module.mjs +5 -5
  19. package/esm2022/lib/Pages/_layout/components/topbar/topbar.component.mjs +5 -5
  20. package/esm2022/lib/Pages/anonymouslayout/activation/activation.component.mjs +5 -5
  21. package/esm2022/lib/Pages/anonymouslayout/anonymouslayout-routing.module.mjs +5 -5
  22. package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.component.mjs +11 -6
  23. package/esm2022/lib/Pages/anonymouslayout/anonymouslayout.module.mjs +5 -5
  24. package/esm2022/lib/Pages/anonymouslayout/change-password/change-password.component.mjs +5 -5
  25. package/esm2022/lib/Pages/anonymouslayout/error/error.component.mjs +5 -5
  26. package/esm2022/lib/Pages/anonymouslayout/forgot-password/forgot-password.component.mjs +5 -5
  27. package/esm2022/lib/Pages/anonymouslayout/login/login.component.mjs +5 -5
  28. package/esm2022/lib/Pages/anonymouslayout/rest-password/rest-password.component.mjs +5 -5
  29. package/esm2022/lib/Pages/anonymouslayout/upload-license/upload-license.component.mjs +5 -5
  30. package/esm2022/lib/Pages/anonymouslayout/verify-two-fa/verify-two-fa.component.mjs +5 -5
  31. package/esm2022/lib/Pages/authentication/auth-callback/auth-callback.component.mjs +5 -5
  32. package/esm2022/lib/Pages/authentication/authentication.component.mjs +5 -5
  33. package/esm2022/lib/Pages/authentication/authentication.module.mjs +5 -5
  34. package/esm2022/lib/Pages/authentication/authentication.routing.mjs +5 -5
  35. package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration-edit/auth-configuration-edit.component.mjs +5 -5
  36. package/esm2022/lib/Pages/configurations/auth-configuration/auth-configuration.component.mjs +5 -5
  37. package/esm2022/lib/Pages/configurations/configuration/configuration.component.mjs +5 -5
  38. package/esm2022/lib/Pages/configurations/configurations.component.mjs +5 -5
  39. package/esm2022/lib/Pages/configurations/configurations.module.mjs +5 -5
  40. package/esm2022/lib/Pages/configurations/configurations.routing.mjs +5 -5
  41. package/esm2022/lib/Pages/core/auth.module.mjs +5 -5
  42. package/esm2022/lib/Pages/core/authentication/admin.guard.mjs +4 -4
  43. package/esm2022/lib/Pages/core/authentication/auth.guard.mjs +4 -4
  44. package/esm2022/lib/Pages/core/authentication/auth.service.mjs +4 -4
  45. package/esm2022/lib/Pages/departments/department/department.component.mjs +5 -5
  46. package/esm2022/lib/Pages/departments/department-info/department-info.component.mjs +5 -5
  47. package/esm2022/lib/Pages/departments/departments-routing.module.mjs +5 -5
  48. package/esm2022/lib/Pages/departments/departments.component.mjs +5 -5
  49. package/esm2022/lib/Pages/departments/departments.module.mjs +5 -5
  50. package/esm2022/lib/Pages/documents/add-document/add-document.component.mjs +5 -5
  51. package/esm2022/lib/Pages/documents/document-master-layouts/document-master-layouts.component.mjs +5 -5
  52. package/esm2022/lib/Pages/documents/document-template-info/document-template-info.component.mjs +5 -5
  53. package/esm2022/lib/Pages/documents/document-templates/document-templates.component.mjs +5 -5
  54. package/esm2022/lib/Pages/documents/documents.component.mjs +5 -5
  55. package/esm2022/lib/Pages/documents/documents.module.mjs +5 -5
  56. package/esm2022/lib/Pages/documents/documents.routing.mjs +5 -5
  57. package/esm2022/lib/Pages/documents/edit-document/edit-document.component.mjs +5 -5
  58. package/esm2022/lib/Pages/documents/edit-document-template/edit-document-template.component.mjs +5 -5
  59. package/esm2022/lib/Pages/empty-data/empty-data.component.mjs +5 -5
  60. package/esm2022/lib/Pages/empty-data/empty-data.module.mjs +5 -5
  61. package/esm2022/lib/Pages/helpCenter/help-center/help-center.component.mjs +5 -5
  62. package/esm2022/lib/Pages/helpCenter/help-center-preview/help-center-preview.component.mjs +5 -5
  63. package/esm2022/lib/Pages/helpCenter/help-center-routing.module.mjs +5 -5
  64. package/esm2022/lib/Pages/helpCenter/help-center-secondlevel/help-center-secondlevel.component.mjs +5 -5
  65. package/esm2022/lib/Pages/helpCenter/help-center-thirdlevel/help-center-thirdlevel.component.mjs +5 -5
  66. package/esm2022/lib/Pages/helpCenter/help-center.module.mjs +5 -5
  67. package/esm2022/lib/Pages/helpCenter/help-centers.component.mjs +5 -5
  68. package/esm2022/lib/Pages/home/filter-pipe.mjs +6 -5
  69. package/esm2022/lib/Pages/home/home.component.mjs +5 -5
  70. package/esm2022/lib/Pages/home/home.module.mjs +5 -5
  71. package/esm2022/lib/Pages/impersonation-rules/impersonation-rules/impersonation-rules.component.mjs +5 -5
  72. package/esm2022/lib/Pages/impersonation-rules/impersonation-rules.module.mjs +5 -5
  73. package/esm2022/lib/Pages/jobs/jobs/jobs.component.mjs +5 -5
  74. package/esm2022/lib/Pages/jobs/jobs.module.mjs +5 -5
  75. package/esm2022/lib/Pages/license/license/license.component.mjs +5 -5
  76. package/esm2022/lib/Pages/license/license.module.mjs +5 -5
  77. package/esm2022/lib/Pages/localizations/localizations-replace-text/localizations-replace-text.component.mjs +5 -5
  78. package/esm2022/lib/Pages/localizations/localizations.component.mjs +5 -5
  79. package/esm2022/lib/Pages/localizations/localizations.module.mjs +5 -5
  80. package/esm2022/lib/Pages/logs/log/log.component.mjs +5 -5
  81. package/esm2022/lib/Pages/logs/logs-routing.module.mjs +5 -5
  82. package/esm2022/lib/Pages/logs/logs.component.mjs +5 -5
  83. package/esm2022/lib/Pages/logs/logs.module.mjs +5 -5
  84. package/esm2022/lib/Pages/lookups/lookup/lookup.component.mjs +5 -5
  85. package/esm2022/lib/Pages/lookups/lookup-group/lookup-group.component.mjs +5 -5
  86. package/esm2022/lib/Pages/lookups/lookup-item/lookup-item.component.mjs +5 -5
  87. package/esm2022/lib/Pages/lookups/lookups-routing.module.mjs +5 -5
  88. package/esm2022/lib/Pages/lookups/lookups.component.mjs +5 -5
  89. package/esm2022/lib/Pages/lookups/lookups.module.mjs +5 -5
  90. package/esm2022/lib/Pages/notifications/add-notification/add-notification.component.mjs +5 -5
  91. package/esm2022/lib/Pages/notifications/edit-email/edit-email.component.mjs +5 -5
  92. package/esm2022/lib/Pages/notifications/edit-notification/edit-notification.component.mjs +5 -5
  93. package/esm2022/lib/Pages/notifications/edit-sms/edit-sms.component.mjs +5 -5
  94. package/esm2022/lib/Pages/notifications/master-layouts/master-layouts.component.mjs +5 -5
  95. package/esm2022/lib/Pages/notifications/notifications.component.mjs +5 -5
  96. package/esm2022/lib/Pages/notifications/notifications.module.mjs +5 -5
  97. package/esm2022/lib/Pages/notifications/notifications.routing.mjs +5 -5
  98. package/esm2022/lib/Pages/notifications/template-info/template-info.component.mjs +5 -5
  99. package/esm2022/lib/Pages/notifications/templates/templates.component.mjs +5 -5
  100. package/esm2022/lib/Pages/organization/add-organization/add-organization.component.mjs +5 -5
  101. package/esm2022/lib/Pages/organization/edit-organization/edit-organization.component.mjs +5 -5
  102. package/esm2022/lib/Pages/organization/list-organization/list-organization.component.mjs +5 -5
  103. package/esm2022/lib/Pages/organization/organization.component.mjs +5 -5
  104. package/esm2022/lib/Pages/organization/organization.module.mjs +5 -5
  105. package/esm2022/lib/Pages/organization/organization.routing.mjs +5 -5
  106. package/esm2022/lib/Pages/providers/provider/provider.component.mjs +5 -5
  107. package/esm2022/lib/Pages/providers/providers-routing.module.mjs +5 -5
  108. package/esm2022/lib/Pages/providers/providers.component.mjs +5 -5
  109. package/esm2022/lib/Pages/providers/providers.module.mjs +5 -5
  110. package/esm2022/lib/Pages/publicHolidays/public-holiday/public-holiday.component.mjs +5 -5
  111. package/esm2022/lib/Pages/publicHolidays/public-holidays-routing.module.mjs +5 -5
  112. package/esm2022/lib/Pages/publicHolidays/public-holidays.component.mjs +5 -5
  113. package/esm2022/lib/Pages/publicHolidays/public-holidays.module.mjs +5 -5
  114. package/esm2022/lib/Pages/roles/permission-set-info/permission-set-info.component.mjs +5 -5
  115. package/esm2022/lib/Pages/roles/permissions/permissions.component.mjs +5 -5
  116. package/esm2022/lib/Pages/roles/permissionsets/permissionsets.component.mjs +5 -5
  117. package/esm2022/lib/Pages/roles/roles-routing.module.mjs +5 -5
  118. package/esm2022/lib/Pages/roles/roles.component.mjs +5 -5
  119. package/esm2022/lib/Pages/roles/roles.module.mjs +5 -5
  120. package/esm2022/lib/Pages/sectors/sector/sector.component.mjs +5 -5
  121. package/esm2022/lib/Pages/sectors/sector-info/sector-info.component.mjs +5 -5
  122. package/esm2022/lib/Pages/sectors/sectors-department-info/sectors-department-info.component.mjs +5 -5
  123. package/esm2022/lib/Pages/sectors/sectors-routing.module.mjs +5 -5
  124. package/esm2022/lib/Pages/sectors/sectors.component.mjs +5 -5
  125. package/esm2022/lib/Pages/sectors/sectors.module.mjs +5 -5
  126. package/esm2022/lib/Pages/shared/Pipes/survey-date.pipe.mjs +6 -5
  127. package/esm2022/lib/Pages/shared/Services/AccountService.service.mjs +4 -4
  128. package/esm2022/lib/Pages/shared/Services/ActiveDirectoryService.service.mjs +4 -4
  129. package/esm2022/lib/Pages/shared/Services/AnonymousLayoutService.service.mjs +4 -4
  130. package/esm2022/lib/Pages/shared/Services/ConfigurationsService.service.mjs +4 -4
  131. package/esm2022/lib/Pages/shared/Services/DepartmentService.service.mjs +4 -4
  132. package/esm2022/lib/Pages/shared/Services/DocumentHeaderAndFooterTemplate.service.mjs +4 -4
  133. package/esm2022/lib/Pages/shared/Services/DocumentTemplateService.service.mjs +4 -4
  134. package/esm2022/lib/Pages/shared/Services/EmailHeaderAndFooterTemplateService.Service.mjs +4 -4
  135. package/esm2022/lib/Pages/shared/Services/ErrorService.service.mjs +4 -4
  136. package/esm2022/lib/Pages/shared/Services/GlobalErrorHandler.service.mjs +4 -4
  137. package/esm2022/lib/Pages/shared/Services/HelpCenterService.service.mjs +4 -4
  138. package/esm2022/lib/Pages/shared/Services/HttpErrorInterceptor.service.mjs +4 -4
  139. package/esm2022/lib/Pages/shared/Services/ImpersonationRuleService.service.mjs +4 -4
  140. package/esm2022/lib/Pages/shared/Services/JobsService.service.mjs +4 -4
  141. package/esm2022/lib/Pages/shared/Services/LicenseService.service.mjs +4 -4
  142. package/esm2022/lib/Pages/shared/Services/LogsService.mjs +4 -4
  143. package/esm2022/lib/Pages/shared/Services/LookupGroupsService.service.mjs +4 -4
  144. package/esm2022/lib/Pages/shared/Services/LookupService.service.mjs +4 -4
  145. package/esm2022/lib/Pages/shared/Services/PermissionSetService.service.mjs +4 -4
  146. package/esm2022/lib/Pages/shared/Services/PermissionsService.service.mjs +4 -4
  147. package/esm2022/lib/Pages/shared/Services/PublicHolidayService.service.mjs +4 -4
  148. package/esm2022/lib/Pages/shared/Services/SectorService.service.mjs +4 -4
  149. package/esm2022/lib/Pages/shared/Services/TemplateService.service.mjs +4 -4
  150. package/esm2022/lib/Pages/shared/Services/WorkFlowVersionService.service.mjs +4 -4
  151. package/esm2022/lib/Pages/shared/Services/WorkflowActivityService.service.mjs +4 -4
  152. package/esm2022/lib/Pages/shared/Services/WorkflowInstanceService.service.mjs +4 -4
  153. package/esm2022/lib/Pages/shared/Services/WorkflowLogVariablesService.service.mjs +4 -4
  154. package/esm2022/lib/Pages/shared/Services/WorkflowService.service.mjs +4 -4
  155. package/esm2022/lib/Pages/shared/Services/WorkflowVariablesService.service.mjs +4 -4
  156. package/esm2022/lib/Pages/shared/Services/data.service.mjs +4 -4
  157. package/esm2022/lib/Pages/shared/Services/injectionModuleService.service.mjs +4 -4
  158. package/esm2022/lib/Pages/shared/Services/localizationsService.service .mjs +4 -4
  159. package/esm2022/lib/Pages/shared/Services/organization.service.mjs +4 -4
  160. package/esm2022/lib/Pages/shared/Services/provider.service.mjs +4 -4
  161. package/esm2022/lib/Pages/shared/Services/survey-question.service.mjs +4 -4
  162. package/esm2022/lib/Pages/shared/Services/survey.service.mjs +4 -4
  163. package/esm2022/lib/Pages/shared/Services/userService.service.mjs +4 -4
  164. package/esm2022/lib/Pages/shared/components/AdDirective.mjs +5 -4
  165. package/esm2022/lib/Pages/shared/components/external-url/external-url.component.mjs +5 -5
  166. package/esm2022/lib/Pages/shared/components/no-results/no-results.component.mjs +5 -5
  167. package/esm2022/lib/Pages/shared/components/survey/add-survey/add-survey.component.mjs +5 -5
  168. package/esm2022/lib/Pages/shared/components/survey/delete-survey/delete-survey.component.mjs +5 -5
  169. package/esm2022/lib/Pages/shared/components/survey/duplicate-survey/duplicate-survey.component.mjs +5 -5
  170. package/esm2022/lib/Pages/shared/components/survey/edit-survey/edit-survey.component.mjs +5 -5
  171. package/esm2022/lib/Pages/shared/components/survey/submissions/delete-submission/delete-submission.component.mjs +5 -5
  172. package/esm2022/lib/Pages/shared/components/survey/submissions/eliminate-submission/eliminate-submission.component.mjs +5 -5
  173. package/esm2022/lib/Pages/shared/components/survey/submissions/uneliminate-submission/uneliminate-submission.component.mjs +5 -5
  174. package/esm2022/lib/Pages/shared/components/survey/survey-info/add-question/add-question.component.mjs +5 -5
  175. package/esm2022/lib/Pages/shared/components/survey/survey-info/delete-question/delete-question.component.mjs +5 -5
  176. package/esm2022/lib/Pages/shared/components/survey/survey-info/edit-question/edit-question.component.mjs +5 -5
  177. package/esm2022/lib/Pages/shared/components/survey/survey-info/preview/preview.component.mjs +5 -5
  178. package/esm2022/lib/Pages/shared/components/survey/survey-info/publish-survey/publish-survey.component.mjs +5 -5
  179. package/esm2022/lib/Pages/shared/components/survey/survey-info/result-question/result.component.mjs +5 -5
  180. package/esm2022/lib/Pages/shared/components/survey/survey-info/survey-info.component.mjs +5 -5
  181. package/esm2022/lib/Pages/shared/components/survey/survey-info/take-survey/take-survey.component.mjs +5 -5
  182. package/esm2022/lib/Pages/shared/components/survey/survey-info/unpublish-survey/unpublish-survey.component.mjs +5 -5
  183. package/esm2022/lib/Pages/shared/components/survey/survey.component.mjs +5 -5
  184. package/esm2022/lib/Pages/shared/components/survey-form/survey-form.component.mjs +5 -5
  185. package/esm2022/lib/Pages/shared/components/survey-form-item/survey-form-item.component.mjs +5 -5
  186. package/esm2022/lib/Pages/shared/components/survey-layout/survey-layout.component.mjs +5 -5
  187. package/esm2022/lib/Pages/shared/config.service.mjs +4 -4
  188. package/esm2022/lib/Pages/shared/filter/filter.component.mjs +5 -5
  189. package/esm2022/lib/Pages/shared/modules/public-survey.module.mjs +5 -5
  190. package/esm2022/lib/Pages/shared/modules/survey-routing.module.mjs +5 -5
  191. package/esm2022/lib/Pages/shared/modules/survey.module.mjs +5 -5
  192. package/esm2022/lib/Pages/shared/shared.module.mjs +5 -5
  193. package/esm2022/lib/Pages/shared/stylesbundle.service.mjs +4 -4
  194. package/esm2022/lib/Pages/start/index/index.component.mjs +5 -5
  195. package/esm2022/lib/Pages/start/start-routing.module.mjs +5 -5
  196. package/esm2022/lib/Pages/start/start.module.mjs +5 -5
  197. package/esm2022/lib/Pages/users/users.component.mjs +5 -5
  198. package/esm2022/lib/Pages/users/users.module.mjs +5 -5
  199. package/esm2022/lib/Pages/workflows/activity/workflow-activity-add/workflow-activity-add.component.mjs +5 -5
  200. package/esm2022/lib/Pages/workflows/activity/workflow-activity-edit/workflow-activity-edit.component.mjs +5 -5
  201. package/esm2022/lib/Pages/workflows/instance-info/instance-info.component.mjs +5 -5
  202. package/esm2022/lib/Pages/workflows/tabs/tabs.component.mjs +5 -5
  203. package/esm2022/lib/Pages/workflows/version-info/version-info.component.mjs +5 -5
  204. package/esm2022/lib/Pages/workflows/workflow/workflow.component.mjs +5 -5
  205. package/esm2022/lib/Pages/workflows/workflows-routing.module.mjs +5 -5
  206. package/esm2022/lib/Pages/workflows/workflows.component.mjs +5 -5
  207. package/esm2022/lib/Pages/workflows/workflows.module.mjs +5 -5
  208. package/esm2022/lib/_metronic/core/services/layout-init.service.mjs +4 -4
  209. package/esm2022/lib/_metronic/core/services/layout.service.mjs +4 -4
  210. package/esm2022/lib/_metronic/core/services/page-info.service.mjs +4 -4
  211. package/esm2022/lib/masterlayout.component.mjs +5 -5
  212. package/esm2022/lib/masterlayout.module.mjs +5 -5
  213. package/esm2022/lib/masterlayout.routing.mjs +5 -5
  214. package/fesm2022/bnsights-bbsf-admin-portal.mjs +802 -796
  215. package/fesm2022/bnsights-bbsf-admin-portal.mjs.map +1 -1
  216. package/lib/Pages/anonymouslayout/anonymouslayout.component.d.ts +2 -0
  217. package/package.json +12 -12
@@ -771,12 +771,12 @@ export class TabsComponent {
771
771
  ngOnDestroy() {
772
772
  this.requestHandlerService.destroyHandler();
773
773
  }
774
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabsComponent, deps: [{ token: i1.AuthService }, { token: i2.WorkflowService }, { token: i3.ActivatedRoute }, { token: i4.WorkflowVariablesService }, { token: i5.WorkflowActivityService }, { token: i6.PageInfoService }, { token: i7.NgbModal }, { token: i1.EnvironmentService }, { token: i1.BBSFTranslateService }, { token: i1.UtilityService }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
775
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TabsComponent, selector: "lib-tabs", viewQueries: [{ propertyName: "publishConfirmationModalControl", first: true, predicate: ["publishConfirmationModalControl"], descendants: true }, { propertyName: "WFVersionPagingElement", first: true, predicate: ["WorkflowVersionPagingViewElement"], descendants: true }, { propertyName: "WorkflowVariablePagingViewElement", first: true, predicate: ["WorkflowVariablePagingViewElement"], descendants: true }, { propertyName: "ActivityPagingViewElement", first: true, predicate: ["ActivityPagingViewElement"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder\">\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"getDetails()\">{{utilityService.getResourceValue(\"Details\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0 justify-content-end\">\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" *ngIf=\"ShowWorkflowDetails&&!WorkflowDetails.isPublished\"\r\n id=\"btnPublish\" class=\"btn btn-sm btn-primary\" (click)=\"showPublishWFModal(WorkflowDetails.iD_GUID)\">\r\n {{utilityService.getResourceValue(\"PublishWorkflow\")}}\r\n\r\n </button>\r\n <!--<a class=\"btn btn-sm btn-light-primary\">\r\n {{utilityService.getResourceValue(\"Preview\")}}\r\n </a>-->\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <form [formGroup]=\"DetailsForm\" *ngIf=\"ShowWorkflowDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"NameMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"DescriptionMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Active\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Published\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n <!--Publish workflow confirmation-->\r\n <BBSF-ConfirmationModal *ngIf=\"publishControlLoaded\" [options]=\"publishWFConfirmationOptions\" id=\"publishConfirmationModalControl\" #publishConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeVersion()\">{{utilityService.getResourceValue(\"Versions\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVersionForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"WorkflowVersionForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"WorkflowIdTextBox\"\r\n [group]=\"WorkflowVersionForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Change\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Current\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Published\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let version of WorkflowVersionPagingResult\">\r\n <td>\r\n <a href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/VersionInfo',version.iD_GUID]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{version.changeStr}}</a>\r\n </td>\r\n <td>{{version.isCurrent}}</td>\r\n <td>{{version.isPublished}}</td>\r\n <td>{{version.creationDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVersionPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVersionListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"WorkflowVersionPaging\" [group]=\"WorkflowVersionForm\"\r\n #WorkflowVersionPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowVariables()\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVariableForm\">\r\n <BBSF-TextBox [options]=\"WorkflowVariablesearchTextBox\"\r\n [group]=\"WorkflowVariableForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"VerisonIdTextBox\"\r\n [group]=\"WorkflowVariableForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddWorkflowVariableModal(AddWorkflowVariableModal)\">\r\n <i class=\" fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let WorkflowVariable of WorkflowVariablePagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" class=\"text-dark\">{{WorkflowVariable.nameStr}}</a>\r\n\r\n </td>\r\n\r\n <td>\r\n {{WorkflowVariable.sysName}}\r\n </td>\r\n <td>{{WorkflowVariable.dataTypeItem}}</td>\r\n <td>{{WorkflowVariable.variableTypeItem}}</td>\r\n\r\n <td>\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\"\r\n (click)=\"showEditWorkflowVariableModal(WorkflowVariable.iD_GUID, EditWorkflowVariableModal)\">\r\n <i class=\"fa fa-edit\"\r\n aria-hidden=\"true\"></i>\r\n </a>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVariablePagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariableListResult($event)\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\" [options]=\"WorkflowVariablePaging\"\r\n [group]=\"WorkflowVariableForm\" #WorkflowVariablePagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddWFVariableName\" [group]=\"AddWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"AddWFVariableSysName\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,true)\" [options]=\"AddWFVariableDataType\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"AddWFVariableConstant\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showAddLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of addWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinAddMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseWorkflowVariableModal id=\"CloseWorkflowVariableModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditWFVariableName\" [group]=\"EditWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditWFVariableSysName\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,false)\" [options]=\"EditWFVariableDataType\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"EditWFVariableConstant\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showEditLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of editWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[3]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinEditMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditWorkflowVariableModal id=\"CloseEditWorkflowVariableModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowActivity()\">\r\n {{utilityService.getResourceValue(\"WorkflowActivities\")}}\r\n </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\">\r\n <form [formGroup]=\"workflowActivityForm\">\r\n <div id=\"filtersContainer\" data-isloaded=\"true\">\r\n <BBSF-TextBox [options]=\"WorkflowActivityIdTextBox\"\r\n [group]=\"workflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\" [routerLink]=\"['/Admin/Workflows/AddActivity',VersionId]\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 mb-8\" *ngFor=\"let workflowActivity of ActivityPagingResult\">\r\n <div class=\"card bg-light-dark rounded\">\r\n <div class=\"card-header border-0 pt-9\">\r\n <div class=\"card-title m-0 fs-2 text-primary\">\r\n {{workflowActivity.typeNameStr}}\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" class=\"btn btn-primary btn-sm me-2 \" (click)=\"showAddWFVariablestoActivity(workflowActivity.versionID_GUID,workflowActivity.iD_GUID,wfActivityVariablesModal)\">\r\n <i class=\"fa fa-gear\" aria-hidden=\"true\">\r\n </i>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnAdd\" class=\"btn btn-light-primary btn-sm btn-icon me-2\" [routerLink]=\"['/Admin/Workflows/EditActivity',workflowActivity.iD_GUID]\">\r\n <i *ngIf=\"workflowActivity.isPublished\" class=\"fas fa-pen\"></i>\r\n <i *ngIf=\"!workflowActivity.isPublished\" class=\"fas fa-pen\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-9\">\r\n <div class=\"fs-6 fw-bolder text-dark\">{{utilityService.getResourceValue(\"WFOutcome\")}}</div>\r\n <div class=\"text-gray-400 fw-bold fs-5 mt-1 mb-7\">\r\n <ul class=\"list-unstyled\">\r\n\r\n <li>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n <ul id=\"horizontalmenu\">\r\n <li class=\"text-dark\" *ngFor=\"let item of workflowActivity.variables\">\r\n <i class=\"fa fa-gear\"></i>\r\n {{item.sysName}}\r\n\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\" mb-5\">\r\n <div *ngFor=\"let item of workflowActivity.outcomes\">\r\n {{ item.nameEN }}: {{item.nextActvityName}}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end:: Card body-->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setActivityListResult($event)\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\" [options]=\"ActivityPaging\"\r\n [group]=\"workflowActivityForm\" #ActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n\r\n <ng-template #wfActivityVariablesModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"AddWorkflowVariables\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addWorkflowVariabletoActivityFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enabled\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mandatory\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of activityWFVariableOptions;let i=index;\">\r\n\r\n <td>\r\n <!--hidden is system-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n\r\n <!--if is systm-->\r\n <div *ngIf=\"option[7];else variableNameDDL;\">\r\n <!--variavle name-->\r\n <BBSF-TextBox [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden variable id-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[9]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <!--variavle name ddl-->\r\n <ng-template #variableNameDDL>\r\n <BBSF-DropdownList [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-DropdownList>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <!--is enabled-->\r\n <BBSF-CheckBox [options]=\"option[1]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[2]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is mandatory-->\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[4]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is visible-->\r\n <BBSF-CheckBox [options]=\"option[5]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--if ! isSystem-->\r\n <a *ngIf=\"!option[7]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteActivityWFVariable(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addNewActivityWFVariable()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".nav.nav-tabs{background:#f7f8fa;border-bottom:0px}.nav-tabs .nav-item .nav-link{color:#494b74}.nav-tabs .nav-item .nav-link.active,.nav-tabs .nav-item .nav-link:active,.nav-tabs .nav-item .nav-link:hover{color:#494b74;font-weight:500}.workflow-tabs a.nav-link{padding:17px 25px}.kt-widget.kt-widget--user-profile-3.kt-widget.kt-widget--user-profile-3.workflow-activities{border-radius:15px;box-shadow:0 0 3px #dadada!important}.workflow-activities .kt-widget__progress{justify-content:flex-end;align-items:end}.workflow-activities .kt-widget__username{color:#494b74}.workflow-activities ul#horizontalmenu{color:#a4a4a4;list-style:outside}\n"], dependencies: [{ kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i11.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i11.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i11.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i11.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "component", type: i11.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i7.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i7.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i7.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i7.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i7.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i7.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i7.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i12.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i13.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
774
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TabsComponent, deps: [{ token: i1.AuthService }, { token: i2.WorkflowService }, { token: i3.ActivatedRoute }, { token: i4.WorkflowVariablesService }, { token: i5.WorkflowActivityService }, { token: i6.PageInfoService }, { token: i7.NgbModal }, { token: i1.EnvironmentService }, { token: i1.BBSFTranslateService }, { token: i1.UtilityService }, { token: i1.RequestHandlerService }], target: i0.ɵɵFactoryTarget.Component }); }
775
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: TabsComponent, selector: "lib-tabs", viewQueries: [{ propertyName: "publishConfirmationModalControl", first: true, predicate: ["publishConfirmationModalControl"], descendants: true }, { propertyName: "WFVersionPagingElement", first: true, predicate: ["WorkflowVersionPagingViewElement"], descendants: true }, { propertyName: "WorkflowVariablePagingViewElement", first: true, predicate: ["WorkflowVariablePagingViewElement"], descendants: true }, { propertyName: "ActivityPagingViewElement", first: true, predicate: ["ActivityPagingViewElement"], descendants: true }], ngImport: i0, template: "<block-ui></block-ui>\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder\">\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"getDetails()\">{{utilityService.getResourceValue(\"Details\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0 justify-content-end\">\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" *ngIf=\"ShowWorkflowDetails&&!WorkflowDetails.isPublished\"\r\n id=\"btnPublish\" class=\"btn btn-sm btn-primary\" (click)=\"showPublishWFModal(WorkflowDetails.iD_GUID)\">\r\n {{utilityService.getResourceValue(\"PublishWorkflow\")}}\r\n\r\n </button>\r\n <!--<a class=\"btn btn-sm btn-light-primary\">\r\n {{utilityService.getResourceValue(\"Preview\")}}\r\n </a>-->\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <form [formGroup]=\"DetailsForm\" *ngIf=\"ShowWorkflowDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"NameMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"DescriptionMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Active\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Published\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n <!--Publish workflow confirmation-->\r\n <BBSF-ConfirmationModal *ngIf=\"publishControlLoaded\" [options]=\"publishWFConfirmationOptions\" id=\"publishConfirmationModalControl\" #publishConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeVersion()\">{{utilityService.getResourceValue(\"Versions\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVersionForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"WorkflowVersionForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"WorkflowIdTextBox\"\r\n [group]=\"WorkflowVersionForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Change\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Current\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Published\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let version of WorkflowVersionPagingResult\">\r\n <td>\r\n <a href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/VersionInfo',version.iD_GUID]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{version.changeStr}}</a>\r\n </td>\r\n <td>{{version.isCurrent}}</td>\r\n <td>{{version.isPublished}}</td>\r\n <td>{{version.creationDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVersionPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVersionListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"WorkflowVersionPaging\" [group]=\"WorkflowVersionForm\"\r\n #WorkflowVersionPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowVariables()\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVariableForm\">\r\n <BBSF-TextBox [options]=\"WorkflowVariablesearchTextBox\"\r\n [group]=\"WorkflowVariableForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"VerisonIdTextBox\"\r\n [group]=\"WorkflowVariableForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddWorkflowVariableModal(AddWorkflowVariableModal)\">\r\n <i class=\" fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let WorkflowVariable of WorkflowVariablePagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" class=\"text-dark\">{{WorkflowVariable.nameStr}}</a>\r\n\r\n </td>\r\n\r\n <td>\r\n {{WorkflowVariable.sysName}}\r\n </td>\r\n <td>{{WorkflowVariable.dataTypeItem}}</td>\r\n <td>{{WorkflowVariable.variableTypeItem}}</td>\r\n\r\n <td>\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\"\r\n (click)=\"showEditWorkflowVariableModal(WorkflowVariable.iD_GUID, EditWorkflowVariableModal)\">\r\n <i class=\"fa fa-edit\"\r\n aria-hidden=\"true\"></i>\r\n </a>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVariablePagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariableListResult($event)\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\" [options]=\"WorkflowVariablePaging\"\r\n [group]=\"WorkflowVariableForm\" #WorkflowVariablePagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddWFVariableName\" [group]=\"AddWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"AddWFVariableSysName\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,true)\" [options]=\"AddWFVariableDataType\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"AddWFVariableConstant\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showAddLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of addWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinAddMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseWorkflowVariableModal id=\"CloseWorkflowVariableModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditWFVariableName\" [group]=\"EditWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditWFVariableSysName\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,false)\" [options]=\"EditWFVariableDataType\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"EditWFVariableConstant\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showEditLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of editWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[3]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinEditMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditWorkflowVariableModal id=\"CloseEditWorkflowVariableModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowActivity()\">\r\n {{utilityService.getResourceValue(\"WorkflowActivities\")}}\r\n </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\">\r\n <form [formGroup]=\"workflowActivityForm\">\r\n <div id=\"filtersContainer\" data-isloaded=\"true\">\r\n <BBSF-TextBox [options]=\"WorkflowActivityIdTextBox\"\r\n [group]=\"workflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\" [routerLink]=\"['/Admin/Workflows/AddActivity',VersionId]\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 mb-8\" *ngFor=\"let workflowActivity of ActivityPagingResult\">\r\n <div class=\"card bg-light-dark rounded\">\r\n <div class=\"card-header border-0 pt-9\">\r\n <div class=\"card-title m-0 fs-2 text-primary\">\r\n {{workflowActivity.typeNameStr}}\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" class=\"btn btn-primary btn-sm me-2 \" (click)=\"showAddWFVariablestoActivity(workflowActivity.versionID_GUID,workflowActivity.iD_GUID,wfActivityVariablesModal)\">\r\n <i class=\"fa fa-gear\" aria-hidden=\"true\">\r\n </i>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnAdd\" class=\"btn btn-light-primary btn-sm btn-icon me-2\" [routerLink]=\"['/Admin/Workflows/EditActivity',workflowActivity.iD_GUID]\">\r\n <i *ngIf=\"workflowActivity.isPublished\" class=\"fas fa-pen\"></i>\r\n <i *ngIf=\"!workflowActivity.isPublished\" class=\"fas fa-pen\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-9\">\r\n <div class=\"fs-6 fw-bolder text-dark\">{{utilityService.getResourceValue(\"WFOutcome\")}}</div>\r\n <div class=\"text-gray-400 fw-bold fs-5 mt-1 mb-7\">\r\n <ul class=\"list-unstyled\">\r\n\r\n <li>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n <ul id=\"horizontalmenu\">\r\n <li class=\"text-dark\" *ngFor=\"let item of workflowActivity.variables\">\r\n <i class=\"fa fa-gear\"></i>\r\n {{item.sysName}}\r\n\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\" mb-5\">\r\n <div *ngFor=\"let item of workflowActivity.outcomes\">\r\n {{ item.nameEN }}: {{item.nextActvityName}}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end:: Card body-->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setActivityListResult($event)\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\" [options]=\"ActivityPaging\"\r\n [group]=\"workflowActivityForm\" #ActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n\r\n <ng-template #wfActivityVariablesModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"AddWorkflowVariables\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addWorkflowVariabletoActivityFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enabled\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mandatory\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of activityWFVariableOptions;let i=index;\">\r\n\r\n <td>\r\n <!--hidden is system-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n\r\n <!--if is systm-->\r\n <div *ngIf=\"option[7];else variableNameDDL;\">\r\n <!--variavle name-->\r\n <BBSF-TextBox [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden variable id-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[9]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <!--variavle name ddl-->\r\n <ng-template #variableNameDDL>\r\n <BBSF-DropdownList [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-DropdownList>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <!--is enabled-->\r\n <BBSF-CheckBox [options]=\"option[1]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[2]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is mandatory-->\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[4]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is visible-->\r\n <BBSF-CheckBox [options]=\"option[5]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--if ! isSystem-->\r\n <a *ngIf=\"!option[7]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteActivityWFVariable(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addNewActivityWFVariable()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".nav.nav-tabs{background:#f7f8fa;border-bottom:0px}.nav-tabs .nav-item .nav-link{color:#494b74}.nav-tabs .nav-item .nav-link.active,.nav-tabs .nav-item .nav-link:active,.nav-tabs .nav-item .nav-link:hover{color:#494b74;font-weight:500}.workflow-tabs a.nav-link{padding:17px 25px}.kt-widget.kt-widget--user-profile-3.kt-widget.kt-widget--user-profile-3.workflow-activities{border-radius:15px;box-shadow:0 0 3px #dadada!important}.workflow-activities .kt-widget__progress{justify-content:flex-end;align-items:end}.workflow-activities .kt-widget__username{color:#494b74}.workflow-activities ul#horizontalmenu{color:#a4a4a4;list-style:outside}\n"], dependencies: [{ kind: "directive", type: i3.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i10.BlockUIComponent, selector: "block-ui", inputs: ["name", "message", "delayStart", "delayStop", "template"] }, { kind: "component", type: i11.MultiLingualTextBoxComponent, selector: "BBSF-MultiLingualTextBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.TextboxComponent, selector: "BBSF-TextBox", inputs: ["group", "options"], outputs: ["onChange", "onBlur"] }, { kind: "component", type: i11.CheckBoxComponent, selector: "BBSF-CheckBox", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.DropdownListComponent, selector: "BBSF-DropdownList", inputs: ["group", "options"], outputs: ["onChange", "onClear"] }, { kind: "component", type: i11.ToggleslideComponent, selector: "BBSF-Toggleslide", inputs: ["group", "options"], outputs: ["onChange"] }, { kind: "component", type: i11.PagingComponent, selector: "BBSF-Paging", inputs: ["options", "group"], outputs: ["Items"] }, { kind: "component", type: i11.FormComponent, selector: "BBSF-Form", inputs: ["options"], outputs: ["onChange"] }, { kind: "component", type: i11.ConfirmationModalComponent, selector: "BBSF-ConfirmationModal", inputs: ["options"] }, { kind: "directive", type: i7.NgbNavContent, selector: "ng-template[ngbNavContent]" }, { kind: "directive", type: i7.NgbNav, selector: "[ngbNav]", inputs: ["activeId", "animation", "destroyOnHide", "orientation", "roles", "keyboard"], outputs: ["activeIdChange", "shown", "hidden", "navChange"], exportAs: ["ngbNav"] }, { kind: "directive", type: i7.NgbNavItem, selector: "[ngbNavItem]", inputs: ["destroyOnHide", "disabled", "domId", "ngbNavItem"], outputs: ["shown", "hidden"], exportAs: ["ngbNavItem"] }, { kind: "directive", type: i7.NgbNavItemRole, selector: "[ngbNavItem]:not(ng-container)" }, { kind: "directive", type: i7.NgbNavLink, selector: "a[ngbNavLink]" }, { kind: "directive", type: i7.NgbNavLinkBase, selector: "[ngbNavLink]" }, { kind: "component", type: i7.NgbNavOutlet, selector: "[ngbNavOutlet]", inputs: ["paneRole", "ngbNavOutlet"] }, { kind: "directive", type: i12.InlineSVGDirective, selector: "[inlineSVG]", inputs: ["inlineSVG", "resolveSVGUrl", "replaceContents", "prepend", "injectComponent", "cacheSVG", "setSVGAttributes", "removeSVGAttributes", "forceEvalStyles", "evalScripts", "fallbackImgUrl", "fallbackSVG", "onSVGLoaded"], outputs: ["onSVGInserted", "onSVGFailed"] }, { kind: "component", type: i13.EmptyDataComponent, selector: "lib-empty-data", inputs: ["Message", "ShowImage", "ImgURL"] }] }); }
776
776
  }
777
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TabsComponent, decorators: [{
777
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: TabsComponent, decorators: [{
778
778
  type: Component,
779
- args: [{ selector: 'lib-tabs', template: "<block-ui></block-ui>\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder\">\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"getDetails()\">{{utilityService.getResourceValue(\"Details\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0 justify-content-end\">\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" *ngIf=\"ShowWorkflowDetails&&!WorkflowDetails.isPublished\"\r\n id=\"btnPublish\" class=\"btn btn-sm btn-primary\" (click)=\"showPublishWFModal(WorkflowDetails.iD_GUID)\">\r\n {{utilityService.getResourceValue(\"PublishWorkflow\")}}\r\n\r\n </button>\r\n <!--<a class=\"btn btn-sm btn-light-primary\">\r\n {{utilityService.getResourceValue(\"Preview\")}}\r\n </a>-->\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <form [formGroup]=\"DetailsForm\" *ngIf=\"ShowWorkflowDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"NameMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"DescriptionMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Active\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Published\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n <!--Publish workflow confirmation-->\r\n <BBSF-ConfirmationModal *ngIf=\"publishControlLoaded\" [options]=\"publishWFConfirmationOptions\" id=\"publishConfirmationModalControl\" #publishConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeVersion()\">{{utilityService.getResourceValue(\"Versions\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVersionForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"WorkflowVersionForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"WorkflowIdTextBox\"\r\n [group]=\"WorkflowVersionForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Change\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Current\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Published\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let version of WorkflowVersionPagingResult\">\r\n <td>\r\n <a href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/VersionInfo',version.iD_GUID]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{version.changeStr}}</a>\r\n </td>\r\n <td>{{version.isCurrent}}</td>\r\n <td>{{version.isPublished}}</td>\r\n <td>{{version.creationDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVersionPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVersionListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"WorkflowVersionPaging\" [group]=\"WorkflowVersionForm\"\r\n #WorkflowVersionPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowVariables()\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVariableForm\">\r\n <BBSF-TextBox [options]=\"WorkflowVariablesearchTextBox\"\r\n [group]=\"WorkflowVariableForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"VerisonIdTextBox\"\r\n [group]=\"WorkflowVariableForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddWorkflowVariableModal(AddWorkflowVariableModal)\">\r\n <i class=\" fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let WorkflowVariable of WorkflowVariablePagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" class=\"text-dark\">{{WorkflowVariable.nameStr}}</a>\r\n\r\n </td>\r\n\r\n <td>\r\n {{WorkflowVariable.sysName}}\r\n </td>\r\n <td>{{WorkflowVariable.dataTypeItem}}</td>\r\n <td>{{WorkflowVariable.variableTypeItem}}</td>\r\n\r\n <td>\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\"\r\n (click)=\"showEditWorkflowVariableModal(WorkflowVariable.iD_GUID, EditWorkflowVariableModal)\">\r\n <i class=\"fa fa-edit\"\r\n aria-hidden=\"true\"></i>\r\n </a>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVariablePagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariableListResult($event)\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\" [options]=\"WorkflowVariablePaging\"\r\n [group]=\"WorkflowVariableForm\" #WorkflowVariablePagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddWFVariableName\" [group]=\"AddWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"AddWFVariableSysName\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,true)\" [options]=\"AddWFVariableDataType\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"AddWFVariableConstant\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showAddLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of addWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinAddMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseWorkflowVariableModal id=\"CloseWorkflowVariableModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditWFVariableName\" [group]=\"EditWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditWFVariableSysName\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,false)\" [options]=\"EditWFVariableDataType\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"EditWFVariableConstant\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showEditLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of editWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[3]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinEditMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditWorkflowVariableModal id=\"CloseEditWorkflowVariableModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowActivity()\">\r\n {{utilityService.getResourceValue(\"WorkflowActivities\")}}\r\n </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\">\r\n <form [formGroup]=\"workflowActivityForm\">\r\n <div id=\"filtersContainer\" data-isloaded=\"true\">\r\n <BBSF-TextBox [options]=\"WorkflowActivityIdTextBox\"\r\n [group]=\"workflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\" [routerLink]=\"['/Admin/Workflows/AddActivity',VersionId]\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 mb-8\" *ngFor=\"let workflowActivity of ActivityPagingResult\">\r\n <div class=\"card bg-light-dark rounded\">\r\n <div class=\"card-header border-0 pt-9\">\r\n <div class=\"card-title m-0 fs-2 text-primary\">\r\n {{workflowActivity.typeNameStr}}\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" class=\"btn btn-primary btn-sm me-2 \" (click)=\"showAddWFVariablestoActivity(workflowActivity.versionID_GUID,workflowActivity.iD_GUID,wfActivityVariablesModal)\">\r\n <i class=\"fa fa-gear\" aria-hidden=\"true\">\r\n </i>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnAdd\" class=\"btn btn-light-primary btn-sm btn-icon me-2\" [routerLink]=\"['/Admin/Workflows/EditActivity',workflowActivity.iD_GUID]\">\r\n <i *ngIf=\"workflowActivity.isPublished\" class=\"fas fa-pen\"></i>\r\n <i *ngIf=\"!workflowActivity.isPublished\" class=\"fas fa-pen\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-9\">\r\n <div class=\"fs-6 fw-bolder text-dark\">{{utilityService.getResourceValue(\"WFOutcome\")}}</div>\r\n <div class=\"text-gray-400 fw-bold fs-5 mt-1 mb-7\">\r\n <ul class=\"list-unstyled\">\r\n\r\n <li>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n <ul id=\"horizontalmenu\">\r\n <li class=\"text-dark\" *ngFor=\"let item of workflowActivity.variables\">\r\n <i class=\"fa fa-gear\"></i>\r\n {{item.sysName}}\r\n\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\" mb-5\">\r\n <div *ngFor=\"let item of workflowActivity.outcomes\">\r\n {{ item.nameEN }}: {{item.nextActvityName}}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end:: Card body-->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setActivityListResult($event)\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\" [options]=\"ActivityPaging\"\r\n [group]=\"workflowActivityForm\" #ActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n\r\n <ng-template #wfActivityVariablesModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"AddWorkflowVariables\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addWorkflowVariabletoActivityFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enabled\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mandatory\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of activityWFVariableOptions;let i=index;\">\r\n\r\n <td>\r\n <!--hidden is system-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n\r\n <!--if is systm-->\r\n <div *ngIf=\"option[7];else variableNameDDL;\">\r\n <!--variavle name-->\r\n <BBSF-TextBox [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden variable id-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[9]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <!--variavle name ddl-->\r\n <ng-template #variableNameDDL>\r\n <BBSF-DropdownList [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-DropdownList>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <!--is enabled-->\r\n <BBSF-CheckBox [options]=\"option[1]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[2]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is mandatory-->\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[4]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is visible-->\r\n <BBSF-CheckBox [options]=\"option[5]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--if ! isSystem-->\r\n <a *ngIf=\"!option[7]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteActivityWFVariable(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addNewActivityWFVariable()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".nav.nav-tabs{background:#f7f8fa;border-bottom:0px}.nav-tabs .nav-item .nav-link{color:#494b74}.nav-tabs .nav-item .nav-link.active,.nav-tabs .nav-item .nav-link:active,.nav-tabs .nav-item .nav-link:hover{color:#494b74;font-weight:500}.workflow-tabs a.nav-link{padding:17px 25px}.kt-widget.kt-widget--user-profile-3.kt-widget.kt-widget--user-profile-3.workflow-activities{border-radius:15px;box-shadow:0 0 3px #dadada!important}.workflow-activities .kt-widget__progress{justify-content:flex-end;align-items:end}.workflow-activities .kt-widget__username{color:#494b74}.workflow-activities ul#horizontalmenu{color:#a4a4a4;list-style:outside}\n"] }]
779
+ args: [{ selector: 'lib-tabs', standalone: false, template: "<block-ui></block-ui>\r\n<div class=\"container-fluid\">\r\n <div class=\"card card-custom-h\">\r\n <div class=\"card-body\">\r\n <ul ngbNav #nav=\"ngbNav\" class=\"nav nav-stretch nav-line-tabs nav-line-tabs-2x border-transparent fs-5 fw-bolder\">\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"getDetails()\">{{utilityService.getResourceValue(\"Details\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0 justify-content-end\">\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" *ngIf=\"ShowWorkflowDetails&&!WorkflowDetails.isPublished\"\r\n id=\"btnPublish\" class=\"btn btn-sm btn-primary\" (click)=\"showPublishWFModal(WorkflowDetails.iD_GUID)\">\r\n {{utilityService.getResourceValue(\"PublishWorkflow\")}}\r\n\r\n </button>\r\n <!--<a class=\"btn btn-sm btn-light-primary\">\r\n {{utilityService.getResourceValue(\"Preview\")}}\r\n </a>-->\r\n\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <form [formGroup]=\"DetailsForm\" *ngIf=\"ShowWorkflowDetails\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"NameMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"DescriptionMultilingualTextBox\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-MultiLingualTextBox>\r\n </div>\r\n </div>\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"SysName\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Active\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-md-6\">\r\n <div class=\"form-group\">\r\n <div class=\"label-content\">\r\n <BBSF-TextBox [options]=\"Published\"\r\n [group]=\"DetailsForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n </form>\r\n\r\n\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n <!--Publish workflow confirmation-->\r\n <BBSF-ConfirmationModal *ngIf=\"publishControlLoaded\" [options]=\"publishWFConfirmationOptions\" id=\"publishConfirmationModalControl\" #publishConfirmationModalControl></BBSF-ConfirmationModal>\r\n\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeVersion()\">{{utilityService.getResourceValue(\"Versions\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\" *ngIf=\"IsFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVersionForm\">\r\n <BBSF-TextBox [options]=\"searchTextBox\" [group]=\"WorkflowVersionForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"WorkflowIdTextBox\"\r\n [group]=\"WorkflowVersionForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Change\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Current\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Published\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"CreationDate\")}}</th>\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let version of WorkflowVersionPagingResult\">\r\n <td>\r\n <a href=\"javascript:void(0)\"\r\n [routerLink]=\"['/Admin/Workflows/VersionInfo',version.iD_GUID]\"\r\n routerLinkActive=\"router-link-active\"\r\n class=\"text-dark\">{{version.changeStr}}</a>\r\n </td>\r\n <td>{{version.isCurrent}}</td>\r\n <td>{{version.isPublished}}</td>\r\n <td>{{version.creationDate}}</td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVersionPagingResult.length == 0\">\r\n <td colspan=\"4\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVersionListResult($event)\" *ngIf=\"IsFilterLoaded\"\r\n [options]=\"WorkflowVersionPaging\" [group]=\"WorkflowVersionForm\"\r\n #WorkflowVersionPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowVariables()\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\">\r\n <form [formGroup]=\"WorkflowVariableForm\">\r\n <BBSF-TextBox [options]=\"WorkflowVariablesearchTextBox\"\r\n [group]=\"WorkflowVariableForm\"></BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"VerisonIdTextBox\"\r\n [group]=\"WorkflowVariableForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\"\r\n (click)=\"showAddWorkflowVariableModal(AddWorkflowVariableModal)\">\r\n <i class=\" fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <!--begin::Permission list-->\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Name\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"SysName\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"DataType\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"VariableType\")}}</th>\r\n <th class=\"min-w-50px\">{{utilityService.getResourceValue(\"Action\")}}</th>\r\n\r\n\r\n </tr>\r\n </thead>\r\n <tbody id=\"listingContainer\" class=\"fw-bold text-gray-600 border-0\">\r\n\r\n <tr *ngFor=\"let WorkflowVariable of WorkflowVariablePagingResult\">\r\n\r\n <td>\r\n <a href=\"javascript:void(0)\" class=\"text-dark\">{{WorkflowVariable.nameStr}}</a>\r\n\r\n </td>\r\n\r\n <td>\r\n {{WorkflowVariable.sysName}}\r\n </td>\r\n <td>{{WorkflowVariable.dataTypeItem}}</td>\r\n <td>{{WorkflowVariable.variableTypeItem}}</td>\r\n\r\n <td>\r\n <a class=\"btn btn-sm btn-light-primary btn-icon\"\r\n (click)=\"showEditWorkflowVariableModal(WorkflowVariable.iD_GUID, EditWorkflowVariableModal)\">\r\n <i class=\"fa fa-edit\"\r\n aria-hidden=\"true\"></i>\r\n </a>\r\n\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"WorkflowVariablePagingResult.length == 0\">\r\n <td colspan=\"5\">\r\n <lib-empty-data></lib-empty-data>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n <!--end::Permission list-->\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setWorkflowVariableListResult($event)\"\r\n *ngIf=\"IsWorkflowVariableFilterLoaded\" [options]=\"WorkflowVariablePaging\"\r\n [group]=\"WorkflowVariableForm\" #WorkflowVariablePagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n <!-- Add Modal -->\r\n <ng-template #AddWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Add\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n\r\n <BBSF-Form [options]=\"AddWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"AddWFVariableName\" [group]=\"AddWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"AddWFVariableSysName\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,true)\" [options]=\"AddWFVariableDataType\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"AddWFVariableConstant\"\r\n [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showAddLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of addWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [options]=\"option[0]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"AddWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,true)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinAddMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseWorkflowVariableModal id=\"CloseWorkflowVariableModal\" type=\"button\" class=\"btn btn-light me-3 btn-sm\"\r\n (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n <!--Edit Modal-->\r\n <ng-template #EditWorkflowVariableModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"Edit\")}} {{utilityService.getResourceValue(\"WorkflowVariable\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"EditWorkflowVariableFormOptions\">\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-MultiLingualTextBox [options]=\"EditWFVariableName\" [group]=\"EditWorkflowVariableForm\"></BBSF-MultiLingualTextBox>\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-TextBox [options]=\"EditWFVariableSysName\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-DropdownList (OnChange)=\"WFVariableTypeOnChange($event,false)\" [options]=\"EditWFVariableDataType\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-DropdownList>\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-md-12\">\r\n <BBSF-Toggleslide [options]=\"EditWFVariableConstant\"\r\n [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-Toggleslide>\r\n </div>\r\n </div>\r\n <div class=\"row\" *ngIf=\"showEditLookupsTable\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameEN\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"NameAR\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Value\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of editWFVariablesLookupOptions;let i=index;\">\r\n\r\n <td>\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n <BBSF-TextBox [options]=\"option[1]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[2]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <BBSF-TextBox [options]=\"option[3]\" [group]=\"EditWorkflowVariableForm\">\r\n </BBSF-TextBox>\r\n </td>\r\n <td>\r\n <a class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteWFVariableLookup(option,false)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"4\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addWFVariableLookupinEditMode()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button #CloseEditWorkflowVariableModal id=\"CloseEditWorkflowVariableModal\" type=\"button\"\r\n class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n <li ngbNavItem class=\"nav-item mt-2\">\r\n <a ngbNavLink class=\"nav-link text-active-primary ms-0 me-10 py-5\" (click)=\"initializeWorkflowActivity()\">\r\n {{utilityService.getResourceValue(\"WorkflowActivities\")}}\r\n </a>\r\n <ng-template ngbNavContent>\r\n <div class=\"card\">\r\n <div class=\"card-header border-0 pt-5 px-0\">\r\n <div class=\"card-title align-items-start flex-column\">\r\n <div class=\"filter-container text-dark\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\">\r\n <form [formGroup]=\"workflowActivityForm\">\r\n <div id=\"filtersContainer\" data-isloaded=\"true\">\r\n <BBSF-TextBox [options]=\"WorkflowActivityIdTextBox\"\r\n [group]=\"workflowActivityForm\" [hidden]=\"true\"></BBSF-TextBox>\r\n </div>\r\n </form>\r\n </div>\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" title=\"Add\" class=\"btn btn-primary btn-sm\" [routerLink]=\"['/Admin/Workflows/AddActivity',VersionId]\">\r\n <i class=\"fa fa-plus\"></i> {{utilityService.getResourceValue(\"Add\")}}\r\n\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body py-3 px-0\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-6 mb-8\" *ngFor=\"let workflowActivity of ActivityPagingResult\">\r\n <div class=\"card bg-light-dark rounded\">\r\n <div class=\"card-header border-0 pt-9\">\r\n <div class=\"card-title m-0 fs-2 text-primary\">\r\n {{workflowActivity.typeNameStr}}\r\n </div>\r\n <div class=\"card-toolbar\">\r\n <button type=\"button\" class=\"btn btn-primary btn-sm me-2 \" (click)=\"showAddWFVariablestoActivity(workflowActivity.versionID_GUID,workflowActivity.iD_GUID,wfActivityVariablesModal)\">\r\n <i class=\"fa fa-gear\" aria-hidden=\"true\">\r\n </i>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n </button>\r\n <button type=\"button\" id=\"btnAdd\" class=\"btn btn-light-primary btn-sm btn-icon me-2\" [routerLink]=\"['/Admin/Workflows/EditActivity',workflowActivity.iD_GUID]\">\r\n <i *ngIf=\"workflowActivity.isPublished\" class=\"fas fa-pen\"></i>\r\n <i *ngIf=\"!workflowActivity.isPublished\" class=\"fas fa-pen\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"card-body p-9\">\r\n <div class=\"fs-6 fw-bolder text-dark\">{{utilityService.getResourceValue(\"WFOutcome\")}}</div>\r\n <div class=\"text-gray-400 fw-bold fs-5 mt-1 mb-7\">\r\n <ul class=\"list-unstyled\">\r\n\r\n <li>\r\n {{utilityService.getResourceValue(\"WorkflowVariables\")}}\r\n <ul id=\"horizontalmenu\">\r\n <li class=\"text-dark\" *ngFor=\"let item of workflowActivity.variables\">\r\n <i class=\"fa fa-gear\"></i>\r\n {{item.sysName}}\r\n\r\n </li>\r\n </ul>\r\n </li>\r\n\r\n </ul>\r\n </div>\r\n\r\n <div class=\" mb-5\">\r\n <div *ngFor=\"let item of workflowActivity.outcomes\">\r\n {{ item.nameEN }}: {{item.nextActvityName}}\r\n </div>\r\n </div>\r\n </div>\r\n <!--end:: Card body-->\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"card-footer border-0\">\r\n <BBSF-Paging (Items)=\"setActivityListResult($event)\"\r\n *ngIf=\"IsworkflowActivityFilterLoaded\" [options]=\"ActivityPaging\"\r\n [group]=\"workflowActivityForm\" #ActivityPagingViewElement>\r\n </BBSF-Paging>\r\n </div>\r\n <!--end:: Widgets/Applications/User/Profile3-->\r\n </div>\r\n\r\n <ng-template #wfActivityVariablesModal let-modal>\r\n <div class=\"modal-header pb-0 border-0 justify-content-end\">\r\n <h5 class=\"modal-title\" id=\"exampleModalLabel\"></h5>\r\n <button type=\"button\" data-dismiss=\"modal\" aria-label=\"Close\" class=\"btn btn-sm btn-icon btn-active-color-primary\" (click)=\"modal.dismiss()\">\r\n <span class=\"svg-icon svg-icon-1\">\r\n <span [inlineSVG]=\"'./src/assets/images/arr061.svg'\"></span>\r\n </span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body scroll-y px-10 px-lg-15 pt-0 pb-15\">\r\n <div class=\"mb-13 text-center\">\r\n <h1 class=\"mb-3\">\r\n {{utilityService.getResourceValue(\"AddWorkflowVariables\")}}\r\n </h1>\r\n </div>\r\n <BBSF-Form [options]=\"addWorkflowVariabletoActivityFormOptions\">\r\n <div class=\"row\">\r\n <div class=\"table-responsive\">\r\n <!-- begin::Table -->\r\n <table class=\"table align-middle table-row-dashed fs-6 gy-5 dataTable no-footer table-w-control\">\r\n <thead>\r\n <tr class=\"text-start text-gray-400 fw-bolder fs-7 text-uppercase gs-0\">\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"WorkflowVariables\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Enabled\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Mandatory\")}}</th>\r\n <th class=\"min-w-150px\">{{utilityService.getResourceValue(\"Visible\")}}</th>\r\n <th class=\"min-w-150px\"></th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"fw-bold text-gray-600 border-0\">\r\n <tr *ngFor=\"let option of activityWFVariableOptions;let i=index;\">\r\n\r\n <td>\r\n <!--hidden is system-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[0]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n\r\n <!--if is systm-->\r\n <div *ngIf=\"option[7];else variableNameDDL;\">\r\n <!--variavle name-->\r\n <BBSF-TextBox [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n <!--hidden variable id-->\r\n <BBSF-TextBox [hidden]=\"true\" [options]=\"option[9]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-TextBox>\r\n </div>\r\n <!--variavle name ddl-->\r\n <ng-template #variableNameDDL>\r\n <BBSF-DropdownList [options]=\"option[8]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-DropdownList>\r\n </ng-template>\r\n </td>\r\n <td>\r\n <!--is enabled-->\r\n <BBSF-CheckBox [options]=\"option[1]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[2]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is mandatory-->\r\n <BBSF-CheckBox [options]=\"option[3]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[4]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--is visible-->\r\n <BBSF-CheckBox [options]=\"option[5]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n <BBSF-CheckBox [hidden]=\"true\" [options]=\"option[6]\" [group]=\"addWorkflowVariabletoActivityForm\">\r\n </BBSF-CheckBox>\r\n </td>\r\n <td>\r\n <!--if ! isSystem-->\r\n <a *ngIf=\"!option[7]\" class=\"btn btn-icon btn-light-danger btn-sm\" (click)=\"deleteActivityWFVariable(option)\">\r\n <i class=\" fa fa-trash hidden\" aria-hidden=\"true\"></i>\r\n </a>\r\n </td>\r\n </tr>\r\n <tr>\r\n <td colspan=\"5\">\r\n <button type=\"button\" class=\"w-100 btn btn-success\" (click)=\"addNewActivityWFVariable()\">\r\n {{utilityService.getResourceValue(\"AddNewRecord\")}}\r\n </button>\r\n </td>\r\n </tr>\r\n\r\n\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"text-center pt-7\">\r\n <button type=\"button\" class=\"btn btn-light btn-sm me-3\" data-dismiss=\"modal\" (click)=\"modal.dismiss()\">\r\n {{utilityService.getResourceValue(\"CancelLabel\")}}\r\n </button>\r\n <button type=\"submit\" class=\"btn btn-primary btn-sm\">{{utilityService.getResourceValue(\"SaveLabel\")}}</button>\r\n </div>\r\n </BBSF-Form>\r\n </div>\r\n </ng-template>\r\n\r\n </ng-template>\r\n </li>\r\n </ul>\r\n <div [ngbNavOutlet]=\"nav\"></div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".nav.nav-tabs{background:#f7f8fa;border-bottom:0px}.nav-tabs .nav-item .nav-link{color:#494b74}.nav-tabs .nav-item .nav-link.active,.nav-tabs .nav-item .nav-link:active,.nav-tabs .nav-item .nav-link:hover{color:#494b74;font-weight:500}.workflow-tabs a.nav-link{padding:17px 25px}.kt-widget.kt-widget--user-profile-3.kt-widget.kt-widget--user-profile-3.workflow-activities{border-radius:15px;box-shadow:0 0 3px #dadada!important}.workflow-activities .kt-widget__progress{justify-content:flex-end;align-items:end}.workflow-activities .kt-widget__username{color:#494b74}.workflow-activities ul#horizontalmenu{color:#a4a4a4;list-style:outside}\n"] }]
780
780
  }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.WorkflowService }, { type: i3.ActivatedRoute }, { type: i4.WorkflowVariablesService }, { type: i5.WorkflowActivityService }, { type: i6.PageInfoService }, { type: i7.NgbModal }, { type: i1.EnvironmentService }, { type: i1.BBSFTranslateService }, { type: i1.UtilityService }, { type: i1.RequestHandlerService }], propDecorators: { publishConfirmationModalControl: [{
781
781
  type: ViewChild,
782
782
  args: ['publishConfirmationModalControl', { static: false }]
@@ -790,4 +790,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
790
790
  type: ViewChild,
791
791
  args: ['ActivityPagingViewElement', { static: false }]
792
792
  }] } });
793
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvdGFicy90YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUErQyxNQUFNLHlCQUF5QixDQUFDO0FBR3BWLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUdyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFJckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU8xRCxNQUFNLE9BQU8sYUFBYTtJQStGeEIsdUJBQXVCO0lBR3ZCLFlBQW9CLFdBQXdCLEVBQVUsZUFBZ0MsRUFDNUUsY0FBOEIsRUFB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QUssRUFBRTtnQkF1Q04seUJBQXlCO3NCQUFuRixTQUFTO3VCQUFDLDJCQUEyQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb250cm9sTGF5b3V0LCBFbmdsaXNoQXJhYmljRFRPLCBGaWx0ZXJJdGVtLCBGaWx0ZXJUeXBlLCBJbnB1dFR5cGUsIE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zLCBQYWdpbmdPcHRpb25zLCBUZXh0Qm94T3B0aW9ucywgVG9nZ2xlU2xpZGVPcHRpb25zLCBEcm9wZG93bk9wdGlvbnMsIEZvcm1PcHRpb25zLCBQYWdpbmdBY3Rpb25Nb2RlLCBGb3JjZURpcmVjdGlvbiwgQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zLCBDaGVja0JveE9wdGlvbnMsIENvbmZpcm1hdGlvbk1vZGFsQ29tcG9uZW50LCBQYWdpbmdDb21wb25lbnQgfSBmcm9tICdAYm5zaWdodHMvYmJzZi1jb250cm9scyc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2VydmljZSB9IGZyb20gJy4vLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93U2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBXRlZhcmlhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1dGVmFyaWFibGVNb2RlbCc7XHJcbmltcG9ydCB7IFdvcmtmbG93VmFyaWFibGVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93QWN0aXZpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL1NlcnZpY2VzL1dvcmtmbG93QWN0aXZpdHlTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fbWV0cm9uaWMvY29yZS9zZXJ2aWNlcy9wYWdlLWluZm8uc2VydmljZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSwgQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIEVudmlyb25tZW50U2VydmljZSwgUmVxdWVzdEhhbmRsZXJTZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVmFyaWFibGVMb29rdXBNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvV29ya2Zsb3dNb2RlbHMvVmFyaWFibGVMb29rdXBNb2RlbCc7XHJcbmltcG9ydCB7IFdGQWN0aXZpdHlWYXJpYWJsZURUTywgV0ZBY3Rpdml0eVZhcmlhYmxlc01vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Xb3JrZmxvd01vZGVscy9XRkFjdGl2aXR5VmFyaWFibGVzTW9kZWwnO1xyXG5pbXBvcnQgeyBWYXJpYWJsZURhdGFUeXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbnN0YW50cyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10YWJzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFicy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFicy5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBQYWdldGl0bGU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vV0ZcclxuICAvLyBEZXRhaWxzIENvbnRyb2xzXHJcbiAgRGV0YWlsc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBXb3JrZmxvd0RldGFpbHM6IGFueTtcclxuICBXb3JrZmxvd0lkOiBzdHJpbmc7XHJcbiAgTmFtZU11bHRpbGluZ3VhbFRleHRCb3g6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIERlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveDogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgQWN0aXZlOiBUZXh0Qm94T3B0aW9ucztcclxuICBQdWJsaXNoZWQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIFN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIFNob3dXb3JrZmxvd0RldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBWZXJzaW9uSWQ6IHN0cmluZztcclxuICAvL3B1Ymxpc2ggV0YgIE1vZGVsIENvbnRyb2xzXHJcbiAgcHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIHB1Ymxpc2hDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgncHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaXNoQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgLy9TdGFydCBXb3JrRmxvdyBWZXJzaW9uXHJcbiAgV29ya0Zsb3dWZXJzaW9uQXBpVXJsID0gXCIvYXBpL2FkbWluL1dGVmVyc2lvbi9cIjtcclxuICBXb3JrZmxvd1ZlcnNpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgV29ya2Zsb3dJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFdvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1ZlcnNpb25QYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIFdvcmtmbG93SWRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdXb3JrZmxvd1ZlcnNpb25QYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBXRlZlcnNpb25QYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuICAvL0VuZCBXb3JrRmxvdyB2ZXJzaW9uXHJcblxyXG4gIC8vU3RhcnQgV29ya2Zsb3cgVmFyaWFibGVzXHJcbiAgLy9Xb3JrZmxvdyBWYXJpYWJsZXMgY29udHJvbHNcclxuICBXb3JrZmxvd1ZhcmlhYmxlQXBpVXJsID0gXCIvYXBpL2FkbWluL1dvcmtmbG93VmFyaWFibGUvXCI7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZVRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBWZXJpc29uSWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBWZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgRGF0YVR5cGVMaXN0ID0gW107XHJcbiAgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1ZpZXdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBBZGRXRlZhcmlhYmxlTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgQWRkV0ZWYXJpYWJsZVN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFdGVmFyaWFibGVEYXRhVHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFdGVmFyaWFibGVDb25zdGFudDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIC8vV0YgdmFyaWFibGUgbG9va3Vwc1xyXG4gIGFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9uczogYW55W10gPSBbXTtcclxuICBzaG93QWRkTG9va3Vwc1RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRkTGFzdExvb2t1cEluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEVkaXRXRlZhcmlhYmxlTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFdGVmFyaWFibGVTeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0V0ZWYXJpYWJsZURhdGFUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFdGVmFyaWFibGVDb25zdGFudDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIFdvcmtmbG93VmFyaWFibGVJZDogYW55O1xyXG4gIC8vV0YgdmFyaWFibGUgbG9va3Vwc1xyXG4gIGVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgc2hvd0VkaXRMb29rdXBzVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlZGl0TGFzdExvb2t1cEluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICAvL0VuZCBXb3JrZmxvdyBWYXJpYWJsZVxyXG5cclxuICAvL3N0cmF0IFdvcmtmbG93IEFjdGl2aXR5XHJcbiAgLy9Xb3JrZmxvdyBBY3Rpdml0eSBDb250cm9sc1xyXG4gIEFjdGl2aXR5QXBpVXJsID0gXCIvYXBpL2FkbWluL1dvcmtmbG93QWN0aXZpdHkvXCI7XHJcbiAgQWN0aXZpdHlUeXBlTGlzdCA9IFtdO1xyXG4gIHdvcmtmbG93QWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIEFjdGl2aXR5UGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIEFjdGl2aXR5UGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgQWN0aXZpdHlQYWdpbmdWaWV3RWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vQWRkIFdGIHZhcmlhYmxlcyB0byBhY3Rpdml0eSBjb250cm9sc1xyXG4gIGFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgYWN0aXZpdHlJRDogc3RyaW5nO1xyXG4gIGFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgbGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGFjdGl2aXR5VmFyaWFibGVzTGlzdCA9IFtdO1xyXG4gIC8vRW5kIFdvcmtmbG93IEFjdGl2aXR5XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBXb3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIFdvcmtmbG93VmFyaWFibGVzU2VydmljZTogV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrZmxvd0FjdGl2aXR5U2VydmljZTogV29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UsIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZSkge1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgdGhpcy5WZXJzaW9uSWQgPSBwYXJhbXNbJ3ZpZCddO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdldERldGFpbHMoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvL1dGIGZ1bmN0aW9uc1xyXG4gIGdldERldGFpbHMoKSB7XHJcbiAgICB0aGlzLlNob3dXb3JrZmxvd0RldGFpbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1NlcnZpY2UuZ2V0RGV0YWlscyh0aGlzLldvcmtmbG93SWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dEZXRhaWxzID0gcmVzdWx0IGFzIGFueTtcclxuXHJcbiAgICAgIHZhciBOYW1lID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgTmFtZS5hcmFiaWMgPSB0aGlzLldvcmtmbG93RGV0YWlscy5uYW1lLmFyYWJpYztcclxuICAgICAgTmFtZS5lbmdsaXNoID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMubmFtZS5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5QYWdldGl0bGUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5uYW1lU3RyO1xyXG5cclxuXHJcbiAgICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLlBhZ2V0aXRsZTtcclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93c1wiKSwgcGF0aDogJy9BZG1pbi9Xb3JrZmxvd3Mvd29ya2Zsb3cnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuXHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3ggPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guZW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3gubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94LnZhbHVlID0gTmFtZTtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICB2YXIgRGVzY3JpcHRpb24gPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBEZXNjcmlwdGlvbi5hcmFiaWMgPSB0aGlzLldvcmtmbG93RGV0YWlscy5kZXNjcmlwdGlvbi5hcmFiaWM7XHJcbiAgICAgIERlc2NyaXB0aW9uLmVuZ2xpc2ggPSB0aGlzLldvcmtmbG93RGV0YWlscy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveCA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5hcmFiaWNMYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5lbmdsaXNoTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5uYW1lID0gXCJEZXNjcmlwdGlvblwiO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC52YWx1ZSA9IERlc2NyaXB0aW9uO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlN5c05hbWUubmFtZSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLlN5c05hbWUubGFiZWxLZXkgPSBcIlN5c05hbWVcIjtcclxuICAgICAgdGhpcy5TeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5TeXNOYW1lLmlzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLlN5c05hbWUudmFsdWUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5zeXNOYW1lO1xyXG5cclxuICAgICAgdGhpcy5BY3RpdmUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BY3RpdmUubmFtZSA9IFwiQWN0aXZlXCI7XHJcbiAgICAgIHRoaXMuQWN0aXZlLmxhYmVsS2V5ID0gXCJBY3RpdmVcIjtcclxuICAgICAgdGhpcy5BY3RpdmUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFjdGl2ZS5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BY3RpdmUudmFsdWUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5pc0FjdGl2ZTtcclxuXHJcbiAgICAgIHRoaXMuUHVibGlzaGVkID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLm5hbWUgPSBcIlB1Ymxpc2hlZFwiO1xyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC5sYWJlbEtleSA9IFwiUHVibGlzaGVkXCI7XHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5QdWJsaXNoZWQuaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLnZhbHVlID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMuaXNQdWJsaXNoZWQ7XHJcblxyXG4gICAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG5cclxuICAgICAgdGhpcy5TaG93V29ya2Zsb3dEZXRhaWxzID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vRGVsZXRlIHByb3ZpZGVyXHJcbiAgc2hvd1B1Ymxpc2hXRk1vZGFsKGlkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2goaWQpO1xyXG5cclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLnB1Ymxpc2hXb3JrRmxvdztcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gICAgdGhpcy5wdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zLmNvbmZpcm1hdGlvbkhlYWRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrRmZsb3dcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuY29uZmlybWF0aW9uQm9keSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrRmZsb3dDb25maXJtYXRpb25cIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuc3VibWl0QnV0dG9uVGV4dCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuc3VjY2Vzc05vdGlmaWNhdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoZWRTdWNjZXNzZnVsbHlcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMub25TdWNjZXNzSGFuZGxlciA9IHRoaXMucHVibGlzaFdvcmtGbG93T25TdWNjZXNzO1xyXG5cclxuICAgIHRoaXMucHVibGlzaENvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIHB1Ymxpc2hXb3JrRmxvdyA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93U2VydmljZS5wdWJsaXNoV29ya0Zsb3coaWQpO1xyXG4gIH07XHJcbiAgcHVibGlzaFdvcmtGbG93T25TdWNjZXNzID0gKHJlc3VsdCkgPT4ge1xyXG4gICAgdGhpcy5Xb3JrZmxvd0RldGFpbHMuaXNQdWJsaXNoZWQgPSB0cnVlO1xyXG4gIH07XHJcblxyXG4gIC8vV0YgdmVyc2lvbiBmdW5jdGlvbnNcclxuICBpbml0aWFsaXplVmVyc2lvbigpIHtcclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIC8vIFRleHRCb3ggaW50aVxyXG5cclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94Lm5hbWUgPSBcInNlYXJjaFRleHRCb3hcIjtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gucGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIik7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCI7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCI7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3g7XHJcblxyXG5cclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3gubmFtZSA9IFwiV29ya2Zsb3dJZFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveC52YWx1ZSA9IHRoaXMuV29ya2Zsb3dJZDtcclxuXHJcbiAgICB0aGlzLldvcmtmbG93SWRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IFwiV29ya2Zsb3dJZFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJXZklEXCI7XHJcbiAgICB0aGlzLldvcmtmbG93SWRGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLldvcmtmbG93SWRGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveDtcclxuXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5hY3Rpb25Qb3N0VVJMID0gdGhpcy5Xb3JrRmxvd1ZlcnNpb25BcGlVcmwgKyAnR2V0VmVyc2lvbnNMaXN0aW5nJztcclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiLCBcIldvcmtmbG93SWRUZXh0Qm94XCJdO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZlcnNpb25QYWdpbmcuZmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlciwgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyXTtcclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nLnZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuICBzZXRXb3JrZmxvd1ZlcnNpb25MaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZlcnNpb25QYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gIH1cclxuXHJcbiAgLy9XRiB2YXJpYWJsZXMgRnVuY3Rpb25zXHJcbiAgc2V0V29ya2Zsb3dWYXJpYWJsZUxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvL2luaXRpYWxpemUgV0YgdmFyaWFibGVzIHBhZ2VcclxuICBpbml0aWFsaXplV29ya2Zsb3dWYXJpYWJsZXMoKSB7XHJcbiAgICAvLyBUZXh0Qm94IGluaXRcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3gubmFtZSA9IFwiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC5wbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gXCJXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveFwiO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94O1xyXG5cclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94Lm5hbWUgPSBcIlZlcmlzb25JZFRleHRCb3hcIjtcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveC52YWx1ZSA9IHRoaXMuV29ya2Zsb3dJZDtcclxuXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlci5mb3JtQ29udHJvbE5hbWUgPSBcIlZlcmlzb25JZFRleHRCb3hcIjtcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcInZlcnNpb25JRFwiO1xyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94O1xyXG5cclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZUFwaVVybCArICdHZXRWYXJpYWJsZUxpc3RpbmcnO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIiwgXCJWZXJpc29uSWRUZXh0Qm94XCJdO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nLmZpbHRlcnMgPSBbdGhpcy5UZXh0SW5wdXRGaWx0ZXIsIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyXTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZy52YWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgLy9BZGQsRWRpdCBXRiB2YXJpYWJsZSBzaGFyZWQgZnVuY3Rpb25zXHJcbiAgV0ZWYXJpYWJsZVR5cGVPbkNoYW5nZSh0eXBlOiBhbnksIGlzQWRkOiBib29sZWFuKSB7XHJcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkFkZExvb2t1cE5hbWVFTlwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiQWRkTG9va3VwTmFtZUFSXCIgKyBpKTtcclxuICAgICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJMb29rdXBWYWx1ZVwiICsgaSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXggPSAwO1xyXG4gICAgICBpZiAodHlwZSA9PSBWYXJpYWJsZURhdGFUeXBlLlNpbmdsZVNlbGVjdGlvbiB8fCB0eXBlID09IFZhcmlhYmxlRGF0YVR5cGUuTXVsdGlTZWxlY3Rpb24pXHJcbiAgICAgICAgdGhpcy5zaG93QWRkTG9va3Vwc1RhYmxlID0gdHJ1ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuc2hvd0FkZExvb2t1cHNUYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWRpdExhc3RMb29rdXBJbmRleDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkVkaXRMb29rdXBJRFwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkVkaXRMb29rdXBOYW1lRU5cIiArIGkpO1xyXG4gICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0TG9va3VwTmFtZUFSXCIgKyBpKTtcclxuICAgICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiRWRpdExvb2t1cFZhbHVlXCIgKyBpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4ID0gMDtcclxuICAgICAgaWYgKHR5cGUgPT0gVmFyaWFibGVEYXRhVHlwZS5TaW5nbGVTZWxlY3Rpb24gfHwgdHlwZSA9PSBWYXJpYWJsZURhdGFUeXBlLk11bHRpU2VsZWN0aW9uKVxyXG4gICAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSB0cnVlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5zaG93RWRpdExvb2t1cHNUYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpbml0aWFsaXplV0ZWYXJpYWJsZUxvb2t1cE9wdGlvbnMoaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBsb29rdXBPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IG9iamVjdExvb2t1cE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgICBsZXQgYWN0aW9uSW5kaWNhdGU6IHN0cmluZztcclxuICAgIGxldCBpbmRleDogbnVtYmVyO1xyXG4gICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgIGFjdGlvbkluZGljYXRlID0gXCJBZGRcIjtcclxuICAgICAgaW5kZXggPSB0aGlzLmFkZExhc3RMb29rdXBJbmRleDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhY3Rpb25JbmRpY2F0ZSA9IFwiRWRpdFwiO1xyXG4gICAgICBpbmRleCA9IHRoaXMuZWRpdExhc3RMb29rdXBJbmRleDtcclxuICAgIH1cclxuICAgIC8vRm9yIGVkaXQgb25seVxyXG4gICAgbGV0IGxvb2t1cElEID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBsb29rdXBJRC5uYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cElEXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cElELmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICBsb29rdXBJRC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gICAgbGV0IGxvb2t1cE5hbWVFTiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgbG9va3VwTmFtZUVOLm5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiTG9va3VwTmFtZUVOXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cE5hbWVFTi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgbG9va3VwTmFtZUVOLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIGxvb2t1cE5hbWVFTi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVFTi5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG4gICAgbGV0IGxvb2t1cE5hbWVBUiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgbG9va3VwTmFtZUFSLm5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiTG9va3VwTmFtZUFSXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cE5hbWVBUi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgbG9va3VwTmFtZUFSLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIGxvb2t1cE5hbWVBUi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVBUi5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG4gICAgbGV0IGxvb2t1cFZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBsb29rdXBWYWx1ZS5uYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cFZhbHVlXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cFZhbHVlLmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICBsb29rdXBWYWx1ZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBsb29rdXBWYWx1ZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIGxvb2t1cFZhbHVlLm1heExlbmd0aCA9IDIwMDA7XHJcblxyXG4gICAgaWYgKGlzQWRkKVxyXG4gICAgICBvYmplY3RMb29rdXBPcHRpb25zLnB1c2gobG9va3VwTmFtZUVOLCBsb29rdXBOYW1lQVIsIGxvb2t1cFZhbHVlKTtcclxuICAgIGVsc2VcclxuICAgICAgb2JqZWN0TG9va3VwT3B0aW9ucy5wdXNoKGxvb2t1cElELCBsb29rdXBOYW1lRU4sIGxvb2t1cE5hbWVBUiwgbG9va3VwVmFsdWUpO1xyXG5cclxuICAgIGxvb2t1cE9wdGlvbnMucHVzaChvYmplY3RMb29rdXBPcHRpb25zKTtcclxuXHJcbiAgICBpbmRleCArPSAxO1xyXG4gICAgcmV0dXJuIFtsb29rdXBPcHRpb25zLCBpbmRleF07XHJcblxyXG4gIH1cclxuICBkZWxldGVXRlZhcmlhYmxlTG9va3VwKGRlbGV0ZWRMb29rdXA6IGFueSwgaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChpc0FkZCkge1xyXG4gICAgICBsZXQgZGVsZXRlZExvb2t1cEluZGV4OiBudW1iZXIgPSB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRMb29rdXApO1xyXG4gICAgICBpZiAoZGVsZXRlZExvb2t1cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLnNwbGljZShkZWxldGVkTG9va3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZExvb2t1cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKGRlbGV0ZWRMb29rdXBbaV0uTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGRlbGV0ZWRMb29rdXBJbmRleDogbnVtYmVyID0gdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLmluZGV4T2YoZGVsZXRlZExvb2t1cCk7XHJcbiAgICAgIGlmIChkZWxldGVkTG9va3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLnNwbGljZShkZWxldGVkTG9va3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZExvb2t1cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkTG9va3VwW2ldLk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9BZGQgV0YgdmFyaWFibGVcclxuICBzaG93QWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKEFkZFdvcmtmbG93VmFyaWFibGVNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLmxvYWRBZGREcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgdGhpcy5EYXRhVHlwZUxpc3QgPSByZXN1bHRPYmouZGF0YVR5cGVMaXN0O1xyXG5cclxuICAgICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLnNob3dBZGRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybTtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkV0ZWYXJpYWJsZU1vZGVsO1xyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFdGVmFyaWFibGVGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ7XHJcblxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVOYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLm5hbWUgPSBcIlN5c05hbWVcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS5sYWJlbEtleSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS52YWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZVN5c05hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLm5hbWUgPSBcIkRhdGFUeXBlSXRlbUlEX0dVSURcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUubGFiZWxLZXkgPSBcIkRhdGFUeXBlXCI7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLmRhdGFTb3VyY2UgPSB0aGlzLkRhdGFUeXBlTGlzdDtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZS5wbGFjZWhvbGRlciA9IFwiXCI7XHJcblxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVDb25zdGFudCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQubmFtZSA9IFwiSXNDb25zdGFudFwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVDb25zdGFudC5sYWJlbEtleSA9IFwiQ29uc3RhbnRcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcbiAgZ2V0QWRkV0ZWYXJpYWJsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBhZGRNb2RlbCA9IG5ldyBXRlZhcmlhYmxlTW9kZWwoKTtcclxuICAgIGFkZE1vZGVsLk5hbWUgPSBSZXN1bHRNb2RlbC5OYW1lO1xyXG4gICAgYWRkTW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWU7XHJcbiAgICBhZGRNb2RlbC5Xb3JrZmxvd1ZlcnNpb25JRF9HVUlEID0gdGhpcy5WZXJzaW9uSWQ7XHJcbiAgICBhZGRNb2RlbC5EYXRhVHlwZUl0ZW1JRF9HVUlEID0gUmVzdWx0TW9kZWwuRGF0YVR5cGVJdGVtSURfR1VJRDtcclxuICAgIGFkZE1vZGVsLklzQ29uc3RhbnQgPSBSZXN1bHRNb2RlbC5Jc0NvbnN0YW50O1xyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7IGorKykge1xyXG4gICAgICBsZXQgYWRkTG9va3VwTmFtZUVOID0gUmVzdWx0TW9kZWxbXCJBZGRMb29rdXBOYW1lRU5cIiArIGpdO1xyXG4gICAgICBpZiAoYWRkTG9va3VwTmFtZUVOID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBhZGRMb29rdXBOYW1lQVIgPSBSZXN1bHRNb2RlbFtcIkFkZExvb2t1cE5hbWVBUlwiICsgal07XHJcbiAgICAgIGxldCBhZGRMb29rdXBWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiQWRkTG9va3VwVmFsdWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cDogVmFyaWFibGVMb29rdXBNb2RlbCA9IG5ldyBWYXJpYWJsZUxvb2t1cE1vZGVsKCk7XHJcbiAgICAgIGxvb2t1cC5OYW1lRU4gPSBhZGRMb29rdXBOYW1lRU47XHJcbiAgICAgIGxvb2t1cC5OYW1lQVIgPSBhZGRMb29rdXBOYW1lQVI7XHJcbiAgICAgIGxvb2t1cC5WYWx1ZSA9IGFkZExvb2t1cFZhbHVlO1xyXG4gICAgICBhZGRNb2RlbC52YXJpYWJsZUxvb2t1cERUT3MucHVzaChsb29rdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChhZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9O1xyXG4gIGdldEFkZFdGVmFyaWFibGVGdW5jdGlvbiA9IChBZGRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UuYWRkVmFyaWFibGUoQWRkTW9kZWwpO1xyXG4gIH07XHJcbiAgYWRkV0ZWYXJpYWJsZUxvb2t1cGluQWRkTW9kZSgpIHtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IHRoaXMuaW5pdGlhbGl6ZVdGVmFyaWFibGVMb29rdXBPcHRpb25zKHRydWUpO1xyXG4gICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5jb25jYXQocmVzdWx0WzBdKTtcclxuICAgIHRoaXMuYWRkTGFzdExvb2t1cEluZGV4ID0gcmVzdWx0WzFdO1xyXG4gIH1cclxuXHJcbiAgLy9FZGl0IFdGIHZhcmlhYmxlXHJcbiAgc2hvd0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoV0ZWYXJpYWJsZUlEOiBzdHJpbmcsIEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVJZCA9IFdGVmFyaWFibGVJRDtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLmdldEVkaXRXb3JrRmxvd1ZhcmlhYmxlRGF0YShXRlZhcmlhYmxlSUQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgd29ya2Zsb3dWYXJpYWJsZSA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgd29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEID0gd29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgIHRoaXMuRGF0YVR5cGVMaXN0ID0gbGlzdHMuZGF0YVR5cGVMaXN0O1xyXG5cclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm07XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0V0ZWYXJpYWJsZU1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0V0ZWYXJpYWJsZUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ7XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5wYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcblxyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuYXJhYmljID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmFyYWJpYztcclxuICAgICAgbmFtZS5lbmdsaXNoID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZU5hbWUuZW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS52YWx1ZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLm1heExlbmd0aCA9IDI1NTtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZS5uYW1lID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLmxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZVN5c05hbWUudmFsdWUgPSB3b3JrZmxvd1ZhcmlhYmxlLnN5c05hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLm1heExlbmd0aCA9IDEwMDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVEYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLm5hbWUgPSBcIkRhdGFUeXBlSXRlbUlEX0dVSURcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLmxhYmVsS2V5ID0gXCJEYXRhVHlwZVwiO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuZGF0YVNvdXJjZSA9IHRoaXMuRGF0YVR5cGVMaXN0O1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLnBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLnNlbGVjdGVkSXRlbXMgPSB3b3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5uYW1lID0gXCJJc0NvbnN0YW50XCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5sYWJlbEtleSA9IFwiQ29uc3RhbnRcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZUNvbnN0YW50LnZhbHVlID0gd29ya2Zsb3dWYXJpYWJsZS5pc0NvbnN0YW50O1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcblxyXG5cclxuICAgICAgaWYgKHdvcmtmbG93VmFyaWFibGUuZGF0YVR5cGVJdGVtSURfR1VJRCA9PSBWYXJpYWJsZURhdGFUeXBlLlNpbmdsZVNlbGVjdGlvbiB8fCB3b3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbUlEX0dVSUQgPT0gVmFyaWFibGVEYXRhVHlwZS5NdWx0aVNlbGVjdGlvbikge1xyXG4gICAgICAgIC8vU2V0IExvb2t1cCBDb250cm9sc1xyXG4gICAgICAgIHRoaXMuc2V0RWRpdFZhcmlhYmxlTG9va3Vwcyh3b3JrZmxvd1ZhcmlhYmxlLnZhcmlhYmxlTG9va3VwRFRPcyk7XHJcbiAgICAgICAgdGhpcy5zaG93RWRpdExvb2t1cHNUYWJsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihFZGl0V29ya2Zsb3dWYXJpYWJsZU1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRFZGl0V0ZWYXJpYWJsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybS52YWx1ZSBhcyBhbnk7XHJcbiAgICBsZXQgRWRpdE1vZGVsID0gbmV3IFdGVmFyaWFibGVNb2RlbCgpO1xyXG4gICAgRWRpdE1vZGVsLklEX0dVSUQgPSB0aGlzLldvcmtmbG93VmFyaWFibGVJZDtcclxuICAgIEVkaXRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIEVkaXRNb2RlbC5TeXNOYW1lID0gUmVzdWx0TW9kZWwuU3lzTmFtZTtcclxuICAgIEVkaXRNb2RlbC5Xb3JrZmxvd1ZlcnNpb25JRF9HVUlEID0gdGhpcy5WZXJzaW9uSWQ7XHJcbiAgICBFZGl0TW9kZWwuRGF0YVR5cGVJdGVtSURfR1VJRCA9IFJlc3VsdE1vZGVsLkRhdGFUeXBlSXRlbUlEX0dVSUQ7XHJcbiAgICBFZGl0TW9kZWwuSXNDb25zdGFudCA9IFJlc3VsdE1vZGVsLklzQ29uc3RhbnQ7XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXg7IGorKykge1xyXG4gICAgICBsZXQgZWRpdExvb2t1cElEID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwSURcIiArIGpdO1xyXG4gICAgICBpZiAoZWRpdExvb2t1cElEID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBlZGl0TG9va3VwTmFtZUVOID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwTmFtZUVOXCIgKyBqXTtcclxuICAgICAgbGV0IGVkaXRMb29rdXBOYW1lQVIgPSBSZXN1bHRNb2RlbFtcIkVkaXRMb29rdXBOYW1lQVJcIiArIGpdO1xyXG4gICAgICBsZXQgZWRpdExvb2t1cFZhbHVlID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwVmFsdWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cDogVmFyaWFibGVMb29rdXBNb2RlbCA9IG5ldyBWYXJpYWJsZUxvb2t1cE1vZGVsKCk7XHJcbiAgICAgIGxvb2t1cC5JRF9HVUlEID0gZWRpdExvb2t1cElEO1xyXG4gICAgICBsb29rdXAuTmFtZUVOID0gZWRpdExvb2t1cE5hbWVFTjtcclxuICAgICAgbG9va3VwLk5hbWVBUiA9IGVkaXRMb29rdXBOYW1lQVI7XHJcbiAgICAgIGxvb2t1cC5WYWx1ZSA9IGVkaXRMb29rdXBWYWx1ZTtcclxuICAgICAgRWRpdE1vZGVsLnZhcmlhYmxlTG9va3VwRFRPcy5wdXNoKGxvb2t1cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9O1xyXG4gIGdldEVkaXRXRlZhcmlhYmxlRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93VmFyaWFibGVzU2VydmljZS5lZGl0VmFyaWFibGUoRWRpdE1vZGVsKTtcclxuICB9O1xyXG4gIHNldEVkaXRWYXJpYWJsZUxvb2t1cHMoZXhpc3RpbmdMb29rdXBzOiBhbnlbXSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZ0xvb2t1cHMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIGxldCBvYmplY3RBdHRyaWJ1dGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cElEID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIGxvb2t1cElELm5hbWUgPSBcIkVkaXRMb29rdXBJRFwiICsgaTtcclxuICAgICAgbG9va3VwSUQuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgbG9va3VwSUQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICBsb29rdXBJRC52YWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS5pRF9HVUlEO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cE5hbWVFTiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBsb29rdXBOYW1lRU4ubmFtZSA9IFwiRWRpdExvb2t1cE5hbWVFTlwiICsgaTtcclxuICAgICAgbG9va3VwTmFtZUVOLmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi52YWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS5uYW1lRU47XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgbG9va3VwTmFtZUVOLm1heExlbmd0aCA9IDI1NTtcclxuXHJcblxyXG4gICAgICBsZXQgbG9va3VwTmFtZUFSID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5uYW1lID0gXCJFZGl0TG9va3VwTmFtZUFSXCIgKyBpO1xyXG4gICAgICBsb29rdXBOYW1lQVIuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgbG9va3VwTmFtZUFSLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgbG9va3VwTmFtZUFSLnZhbHVlID0gZXhpc3RpbmdMb29rdXBzW2ldLm5hbWVBUjtcclxuICAgICAgbG9va3VwTmFtZUFSLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICBsb29rdXBOYW1lQVIuZm9yY2VEaXJlY3Rpb24gPSBGb3JjZURpcmVjdGlvbi5BcmFiaWM7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG4gICAgICBsZXQgbG9va3VwVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgbG9va3VwVmFsdWUubmFtZSA9IFwiRWRpdExvb2t1cFZhbHVlXCIgKyBpO1xyXG4gICAgICBsb29rdXBWYWx1ZS5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBsb29rdXBWYWx1ZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cFZhbHVlLnZhbHVlID0gZXhpc3RpbmdMb29rdXBzW2ldLnZhbHVlO1xyXG4gICAgICBsb29rdXBWYWx1ZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgbG9va3VwVmFsdWUubWF4TGVuZ3RoID0gMjAwMDtcclxuXHJcbiAgICAgIG9iamVjdEF0dHJpYnV0ZU9wdGlvbnMucHVzaChsb29rdXBJRCwgbG9va3VwTmFtZUVOLCBsb29rdXBOYW1lQVIsIGxvb2t1cFZhbHVlKTtcclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLnB1c2gob2JqZWN0QXR0cmlidXRlT3B0aW9ucyk7XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCArPSAxO1xyXG5cclxuICAgIH1cclxuICB9XHJcbiAgYWRkV0ZWYXJpYWJsZUxvb2t1cGluRWRpdE1vZGUoKSB7XHJcbiAgICBsZXQgcmVzdWx0OiBhbnkgPSB0aGlzLmluaXRpYWxpemVXRlZhcmlhYmxlTG9va3VwT3B0aW9ucyhmYWxzZSk7XHJcbiAgICB0aGlzLmVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSB0aGlzLmVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMuY29uY2F0KHJlc3VsdFswXSk7XHJcbiAgICB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXggPSByZXN1bHRbMV07XHJcbiAgfVxyXG5cclxuICAvL1dGIEFjdGl2aXRpdGllcyBGdW5jdGlvbnNcclxuICBzZXRBY3Rpdml0eUxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVdvcmtmbG93QWN0aXZpdHkoKSB7XHJcbiAgICAvLyB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94Lm5hbWUgPSBcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveC52YWx1ZSA9IHRoaXMuV29ya2Zsb3dJZDtcclxuXHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlci5mb3JtQ29udHJvbE5hbWUgPSBcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcIldmSURcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLmlzRm9ybUNvbnRyb2wgPSB0cnVlO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveDtcclxuXHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuQWN0aXZpdHlBcGlVcmwgKyAnR2V0V29ya2Zsb3dBY3Rpdml0eUxpc3RpbmcnO1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZy5vbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIl07XHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nLmZpbHRlcnMgPSBbdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXJdO1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZy52YWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSwgMTApO1xyXG5cclxuICAgIC8vdGhpcy53b3JrZmxvd0FjdGl2aXR5U2VydmljZS5Mb2FkZHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vICBsZXQgQWN0aXZpdHlMaXN0ID0gcmVzdWx0IGFzIGFueVxyXG4gICAgLy8gIHRoaXMuQWN0aXZpdHlUeXBlTGlzdCA9IEFjdGl2aXR5TGlzdFxyXG5cclxuXHJcbiAgICAvL30pXHJcbiAgfVxyXG5cclxuICAvL0FkZCBBY3Rpdml0eSBXRiB2YXJpYWJsZXNcclxuICBzaG93QWRkV0ZWYXJpYWJsZXN0b0FjdGl2aXR5KHZlcnNpb25JRDogc3RyaW5nLCBhY3Rpdml0eUlEOiBzdHJpbmcsIHdmVmFyaWFibGVzTW9kYWw6IGFueSkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuYWN0aXZpdHlJRCA9IGFjdGl2aXR5SUQ7XHJcbiAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMgPSBbXTtcclxuICAgIHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4ID0gMDtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuZ2V0QWN0aXZpdHlXRlZhcmlhYmxlcyh2ZXJzaW9uSUQsIGFjdGl2aXR5SUQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgbW9kZWwgPSByZXN1bHRPYmoubW9kZWw7XHJcbiAgICAgIHRoaXMuYWN0aXZpdHlWYXJpYWJsZXNMaXN0ID0gcmVzdWx0T2JqLmFjdGl2aXR5VmFyaWFibGVzTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm07XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eU1vZGVsO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5BY3Rpdml0eVBhZ2luZ1ZpZXdFbGVtZW50O1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMucGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBjdXJyZW50VmFyaWFibGUgPSBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPc1tpXTtcclxuICAgICAgICBsZXQgb2JqZWN0VmFyaWFibGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICBsZXQgaXNTeXN0ZW06IGJvb2xlYW4gPSBjdXJyZW50VmFyaWFibGUuaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzU3lzdGVtID0gbmV3IFRleHRCb3hPcHRpb25zKCk7Ly9oaWRkZW5cclxuICAgICAgICB2YXJpYWJsZUlzU3lzdGVtLm5hbWUgPSBcInZhcmlhYmxlSXNTeXN0ZW1cIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc1N5c3RlbS5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgIHZhcmlhYmxlSXNTeXN0ZW0udHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgIHZhcmlhYmxlSXNTeXN0ZW0udmFsdWUgPSBpc1N5c3RlbTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkLm5hbWUgPSBcInZhcmlhYmxlSXNFbmFibGVkXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkLnZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzRW5hYmxlZDtcclxuICAgICAgICB2YXJpYWJsZUlzRW5hYmxlZC5pc0Rpc2FibGVkID0gaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIC8vaGlkZGVuIGZpZWxkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuLm5hbWUgPSBcInZhcmlhYmxlSXNFbmFibGVkSGlkZGVuXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuLnZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzRW5hYmxlZDtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnkgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeS5uYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5XCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkudmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNNYW5kYXRvcnk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeS5pc0Rpc2FibGVkID0gaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIC8vaGlkZGVuIGZpZWxkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbi5uYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4udmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNNYW5kYXRvcnk7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZS5uYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZVwiICsgaTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZS52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc1Zpc2libGU7XHJcbiAgICAgICAgdmFyaWFibGVJc1Zpc2libGUuaXNEaXNhYmxlZCA9IGlzU3lzdGVtO1xyXG5cclxuICAgICAgICAvL2hpZGRlbiBmaWVsZFxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbiA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5uYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZUhpZGRlblwiICsgaTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc1Zpc2libGU7XHJcblxyXG4gICAgICAgIG9iamVjdFZhcmlhYmxlT3B0aW9ucy5wdXNoKHZhcmlhYmxlSXNTeXN0ZW0sIHZhcmlhYmxlSXNFbmFibGVkLCB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbiwgdmFyaWFibGVJc01hbmRhdG9yeSwgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbixcclxuICAgICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLCB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbiwgaXNTeXN0ZW0pO1xyXG5cclxuICAgICAgICBpZiAoaXNTeXN0ZW0pIHtcclxuICAgICAgICAgIGxldCB2YXJpYWJsZU5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5uYW1lID0gXCJ2YXJpYWJsZU5hbWVcIiArIGk7XHJcbiAgICAgICAgICB2YXJpYWJsZU5hbWUuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICB2YXJpYWJsZU5hbWUudmFsdWUgPSBjdXJyZW50VmFyaWFibGUudmFyaWFibGVOYW1lO1xyXG5cclxuICAgICAgICAgIGxldCB2YXJpYWJsZUlEID0gbmV3IFRleHRCb3hPcHRpb25zKCk7Ly9oaWRkZW5cclxuICAgICAgICAgIHZhcmlhYmxlSUQubmFtZSA9IFwidmFyaWFibGVJRFwiICsgaTtcclxuICAgICAgICAgIHZhcmlhYmxlSUQuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSUQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgdmFyaWFibGVJRC52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgIG9iamVjdFZhcmlhYmxlT3B0aW9ucy5wdXNoKHZhcmlhYmxlTmFtZSwgdmFyaWFibGVJRCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxldCB2YXJpYWJsZUlEZHJvcGRvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24ubmFtZSA9IFwidmFyaWFibGVJRGRyb3Bkb3duXCI7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5kYXRhU291cmNlID0gdGhpcy5hY3Rpdml0eVZhcmlhYmxlc0xpc3Q7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uc2VsZWN0ZWRJdGVtcyA9IGN1cnJlbnRWYXJpYWJsZS5pREdVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgb2JqZWN0VmFyaWFibGVPcHRpb25zLnB1c2godmFyaWFibGVJRGRyb3Bkb3duKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zLnB1c2gob2JqZWN0VmFyaWFibGVPcHRpb25zKTtcclxuICAgICAgICB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleCArPSAxO1xyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHdmVmFyaWFibGVzTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldGFkZFdGVmFyaWFibGV0b0FjdGl2aXR5TW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtLnZhbHVlO1xyXG4gICAgbGV0IG1vZGVsID0gbmV3IFdGQWN0aXZpdHlWYXJpYWJsZXNNb2RlbCgpO1xyXG4gICAgbW9kZWwuQWN0aXZpdHlJRF9HVUlEID0gdGhpcy5hY3Rpdml0eUlEO1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleDsgaisrKSB7XHJcbiAgICAgIGxldCB2YXJpYWJsZXNJc1N5c3RlbSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc1N5c3RlbVwiICsgal07XHJcbiAgICAgIGlmICh2YXJpYWJsZXNJc1N5c3RlbSA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgIGxldCB2YXJpYWJsZUlzTWFuZGF0b3J5OiBib29sZWFuO1xyXG4gICAgICBsZXQgdmFyaWFibGVJc1Zpc2libGU6IGJvb2xlYW47XHJcblxyXG4gICAgICBsZXQgYWN0aXZpdHlWYXJpYWJsZTogV0ZBY3Rpdml0eVZhcmlhYmxlRFRPID0gbmV3IFdGQWN0aXZpdHlWYXJpYWJsZURUTygpO1xyXG5cclxuICAgICAgaWYgKHZhcmlhYmxlc0lzU3lzdGVtKSB7XHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSUQgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSURcIiArIGpdO1xyXG4gICAgICAgIGFjdGl2aXR5VmFyaWFibGUuSURfR1VJRCA9IHZhcmlhYmxlSUQ7XHJcblxyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzRW5hYmxlZEhpZGRlblwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc01hbmRhdG9yeUhpZGRlblwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc1Zpc2libGUgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuXCIgKyBqXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgdmFyaWFibGVJRCA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJRGRyb3Bkb3duXCIgKyBqXTtcclxuICAgICAgICBhY3Rpdml0eVZhcmlhYmxlLklEX0dVSUQgPSB2YXJpYWJsZUlEO1xyXG5cclxuICAgICAgICB2YXJpYWJsZUlzRW5hYmxlZCA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc0VuYWJsZWRcIiArIGpdO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNNYW5kYXRvcnlcIiArIGpdO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzVmlzaWJsZVwiICsgal07XHJcbiAgICAgIH1cclxuICAgICAgYWN0aXZpdHlWYXJpYWJsZS5Jc1N5c3RlbSA9IHZhcmlhYmxlc0lzU3lzdGVtO1xyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzRW5hYmxlZCA9IHZhcmlhYmxlSXNFbmFibGVkO1xyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzTWFuZGF0b3J5ID0gdmFyaWFibGVJc01hbmRhdG9yeTtcclxuICAgICAgYWN0aXZpdHlWYXJpYWJsZS5Jc1Zpc2libGUgPSB2YXJpYWJsZUlzVmlzaWJsZTtcclxuICAgICAgbW9kZWwuYWN0aXZpdHlWYXJpYWJsZURUT3MucHVzaChhY3Rpdml0eVZhcmlhYmxlKTtcclxuICAgIH1cclxuICAgIHBhcmFtQXJyYXkucHVzaChtb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9O1xyXG4gIGdldGFkZFdGVmFyaWFibGV0b0FjdGl2aXR5RnVuY3Rpb24gPSAodmFyaWFibGVzTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuYWRkQWN0aXZpdHlXRlZhcmlhYmxlcyh2YXJpYWJsZXNNb2RlbCk7XHJcbiAgfTtcclxuICBkZWxldGVBY3Rpdml0eVdGVmFyaWFibGUoZGVsZXRlZFZhcmlhYmxlOiBhbnkpIHtcclxuICAgIGxldCBkZWxldGVkVmFyaWFibGVJbmRleDogbnVtYmVyID0gdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zLmluZGV4T2YoZGVsZXRlZFZhcmlhYmxlKTtcclxuICAgIGlmIChkZWxldGVkVmFyaWFibGVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zLnNwbGljZShkZWxldGVkVmFyaWFibGVJbmRleCwgMSk7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZFZhcmlhYmxlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkVmFyaWFibGVbaV0uTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYWRkTmV3QWN0aXZpdHlXRlZhcmlhYmxlKCkge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5sYXN0QWN0aXZpdHlXRlZhcmlhYmxlSW5kZXg7XHJcblxyXG4gICAgbGV0IG9iamVjdFZhcmlhYmxlT3B0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJRGRyb3Bkb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLm5hbWUgPSBcInZhcmlhYmxlSURkcm9wZG93blwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlEZHJvcGRvd24uaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5kYXRhU291cmNlID0gdGhpcy5hY3Rpdml0eVZhcmlhYmxlc0xpc3Q7XHJcblxyXG4gICAgbGV0IGlzU3lzdGVtOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNTeXN0ZW0gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTsvL2hpZGRlblxyXG4gICAgdmFyaWFibGVJc1N5c3RlbS5uYW1lID0gXCJ2YXJpYWJsZUlzU3lzdGVtXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNTeXN0ZW0uaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHZhcmlhYmxlSXNTeXN0ZW0udHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdmFyaWFibGVJc1N5c3RlbS52YWx1ZSA9IGlzU3lzdGVtO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlzRW5hYmxlZCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNFbmFibGVkLm5hbWUgPSBcInZhcmlhYmxlSXNFbmFibGVkXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNFbmFibGVkLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4ubmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRIaWRkZW5cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4udmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkubmFtZSA9IFwidmFyaWFibGVJc01hbmRhdG9yeVwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzTWFuZGF0b3J5LnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLm5hbWUgPSBcInZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW5cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbi52YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNWaXNpYmxlLm5hbWUgPSBcInZhcmlhYmxlSXNWaXNpYmxlXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNWaXNpYmxlLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGVIaWRkZW4ubmFtZSA9IFwidmFyaWFibGVJc1Zpc2libGVIaWRkZW5cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGVIaWRkZW4udmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBvYmplY3RWYXJpYWJsZU9wdGlvbnMucHVzaCh2YXJpYWJsZUlzU3lzdGVtLCB2YXJpYWJsZUlzRW5hYmxlZCwgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4sIHZhcmlhYmxlSXNNYW5kYXRvcnksIHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4sXHJcbiAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLCB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbiwgaXNTeXN0ZW0sIHZhcmlhYmxlSURkcm9wZG93bik7XHJcblxyXG4gICAgdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zLnB1c2gob2JqZWN0VmFyaWFibGVPcHRpb25zKTtcclxuICAgIHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4ICs9IDE7XHJcbiAgfVxyXG5cclxuICAvL09uIGRlc3Ryb3lcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgPHVsIG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFicyBuYXYtbGluZS10YWJzLTJ4IGJvcmRlci10cmFuc3BhcmVudCBmcy01IGZ3LWJvbGRlclwiPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImdldERldGFpbHMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRldGFpbHNcIil9fTwvYT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTAgIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJTaG93V29ya2Zsb3dEZXRhaWxzJiYhV29ya2Zsb3dEZXRhaWxzLmlzUHVibGlzaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImJ0blB1Ymxpc2hcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2hvd1B1Ymxpc2hXRk1vZGFsKFdvcmtmbG93RGV0YWlscy5pRF9HVUlEKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrZmxvd1wiKX19XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByZXZpZXdcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L2E+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiRGV0YWlsc0Zvcm1cIiAqbmdJZj1cIlNob3dXb3JrZmxvd0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiTmFtZU11bHRpbGluZ3VhbFRleHRCb3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkRldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkRldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkRldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlB1Ymxpc2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjogV2lkZ2V0cy9BcHBsaWNhdGlvbnMvVXNlci9Qcm9maWxlMy0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8IS0tUHVibGlzaCB3b3JrZmxvdyBjb25maXJtYXRpb24tLT5cclxuICAgICAgICAgIDxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwicHVibGlzaENvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJwdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJwdWJsaXNoQ29uZmlybWF0aW9uTW9kYWxDb250cm9sXCIgI3B1Ymxpc2hDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImluaXRpYWxpemVWZXJzaW9uKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWZXJzaW9uc1wiKX19PC9hPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiV29ya2Zsb3dWZXJzaW9uRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJXb3JrZmxvd0lkVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiV29ya2Zsb3dWZXJzaW9uRm9ybVwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2hhbmdlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkN1cnJlbnRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHVibGlzaGVkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNyZWF0aW9uRGF0ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdmVyc2lvbiBvZiBXb3JrZmxvd1ZlcnNpb25QYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL1dvcmtmbG93cy9WZXJzaW9uSW5mbycsdmVyc2lvbi5pRF9HVUlEXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3ZlcnNpb24uY2hhbmdlU3RyfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3ZlcnNpb24uaXNDdXJyZW50fX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3t2ZXJzaW9uLmlzUHVibGlzaGVkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3t2ZXJzaW9uLmNyZWF0aW9uRGF0ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJXb3JrZmxvd1ZlcnNpb25QYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRXb3JrZmxvd1ZlcnNpb25MaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJXb3JrZmxvd1ZlcnNpb25QYWdpbmdcIiBbZ3JvdXBdPVwiV29ya2Zsb3dWZXJzaW9uRm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1dvcmtmbG93VmVyc2lvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjogV2lkZ2V0cy9BcHBsaWNhdGlvbnMvVXNlci9Qcm9maWxlMy0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJpbml0aWFsaXplV29ya2Zsb3dWYXJpYWJsZXMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX08L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lciB0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJWZXJpc29uSWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoQWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXBsdXNcIj48L2k+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN5c05hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGF0YVR5cGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmFyaWFibGVUeXBlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBXb3JrZmxvd1ZhcmlhYmxlIG9mIFdvcmtmbG93VmFyaWFibGVQYWdpbmdSZXN1bHRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e1dvcmtmbG93VmFyaWFibGUubmFtZVN0cn19PC9hPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e1dvcmtmbG93VmFyaWFibGUuc3lzTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e1dvcmtmbG93VmFyaWFibGUuZGF0YVR5cGVJdGVtfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tXb3JrZmxvd1ZhcmlhYmxlLnZhcmlhYmxlVHlwZUl0ZW19fTwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoV29ya2Zsb3dWYXJpYWJsZS5pRF9HVUlELCBFZGl0V29ya2Zsb3dWYXJpYWJsZU1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIldvcmtmbG93VmFyaWFibGVQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRXb3JrZmxvd1ZhcmlhYmxlTGlzdFJlc3VsdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cIldvcmtmbG93VmFyaWFibGVQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiICNXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEFkZCBNb2RhbCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkFkZFdGVmFyaWFibGVOYW1lXCIgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZFdGVmFyaWFibGVTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgKE9uQ2hhbmdlKT1cIldGVmFyaWFibGVUeXBlT25DaGFuZ2UoJGV2ZW50LHRydWUpXCIgW29wdGlvbnNdPVwiQWRkV0ZWYXJpYWJsZURhdGFUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkFkZFdGVmFyaWFibGVDb25zdGFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInNob3dBZGRMb29rdXBzVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB0YWJsZS13LWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVFTlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZUFSXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYWx1ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbVwiIChjbGljayk9XCJkZWxldGVXRlZhcmlhYmxlTG9va3VwKG9wdGlvbix0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInctMTAwIGJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJhZGRXRlZhcmlhYmxlTG9va3VwaW5BZGRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGROZXdSZWNvcmRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgaWQ9XCJDbG9zZVdvcmtmbG93VmFyaWFibGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tRWRpdCBNb2RhbC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlXCIpfX1cclxuICAgICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJFZGl0V0ZWYXJpYWJsZU5hbWVcIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRXRlZhcmlhYmxlU3lzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAoT25DaGFuZ2UpPVwiV0ZWYXJpYWJsZVR5cGVPbkNoYW5nZSgkZXZlbnQsZmFsc2UpXCIgW29wdGlvbnNdPVwiRWRpdFdGVmFyaWFibGVEYXRhVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiRWRpdFdGVmFyaWFibGVDb25zdGFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJzaG93RWRpdExvb2t1cHNUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZUVOXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lQVJcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZhbHVlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzNdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZVdGVmFyaWFibGVMb29rdXAob3B0aW9uLGZhbHNlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInctMTAwIGJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJhZGRXRlZhcmlhYmxlTG9va3VwaW5FZGl0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkTmV3UmVjb3JkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgaWQ9XCJDbG9zZUVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1Gb3JtPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJpbml0aWFsaXplV29ya2Zsb3dBY3Rpdml0eSgpXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93QWN0aXZpdGllc1wiKX19XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lciB0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImZpbHRlcnNDb250YWluZXJcIiBkYXRhLWlzbG9hZGVkPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL1dvcmtmbG93cy9BZGRBY3Rpdml0eScsVmVyc2lvbklkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02IG1iLThcIiAqbmdGb3I9XCJsZXQgd29ya2Zsb3dBY3Rpdml0eSBvZiBBY3Rpdml0eVBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJnLWxpZ2h0LWRhcmsgcm91bmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgbS0wIGZzLTIgdGV4dC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3t3b3JrZmxvd0FjdGl2aXR5LnR5cGVOYW1lU3RyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbWUtMiBcIiAoY2xpY2spPVwic2hvd0FkZFdGVmFyaWFibGVzdG9BY3Rpdml0eSh3b3JrZmxvd0FjdGl2aXR5LnZlcnNpb25JRF9HVUlELHdvcmtmbG93QWN0aXZpdHkuaURfR1VJRCx3ZkFjdGl2aXR5VmFyaWFibGVzTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWdlYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0bkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1zbSBidG4taWNvbiBtZS0yXCIgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL0VkaXRBY3Rpdml0eScsd29ya2Zsb3dBY3Rpdml0eS5pRF9HVUlEXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJ3b3JrZmxvd0FjdGl2aXR5LmlzUHVibGlzaGVkXCIgY2xhc3M9XCJmYXMgZmEtcGVuXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhd29ya2Zsb3dBY3Rpdml0eS5pc1B1Ymxpc2hlZFwiIGNsYXNzPVwiZmFzIGZhLXBlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IGZ3LWJvbGRlciB0ZXh0LWRhcmtcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXRk91dGNvbWVcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTQwMCBmdy1ib2xkIGZzLTUgbXQtMSBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZXNcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9XCJob3Jpem9udGFsbWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtZGFya1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdvcmtmbG93QWN0aXZpdHkudmFyaWFibGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWdlYXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uc3lzTmFtZX19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd29ya2Zsb3dBY3Rpdml0eS5vdXRjb21lc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lRU4gfX06IHt7aXRlbS5uZXh0QWN0dml0eU5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6IENhcmQgYm9keS0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0QWN0aXZpdHlMaXN0UmVzdWx0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiQWN0aXZpdHlQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiICNBY3Rpdml0eVBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjogV2lkZ2V0cy9BcHBsaWNhdGlvbnMvVXNlci9Qcm9maWxlMy0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjd2ZBY3Rpdml0eVZhcmlhYmxlc01vZGFsIGxldC1tb2RhbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRXb3JrZmxvd1ZhcmlhYmxlc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlc1wiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW5hYmxlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTWFuZGF0b3J5XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWaXNpYmxlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taGlkZGVuIGlzIHN5c3RlbS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taWYgaXMgc3lzdG0tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbls3XTtlbHNlIHZhcmlhYmxlTmFtZURETDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tdmFyaWF2bGUgbmFtZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzhdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1oaWRkZW4gdmFyaWFibGUgaWQtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvbls5XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS12YXJpYXZsZSBuYW1lIGRkbC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ZhcmlhYmxlTmFtZURETD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwib3B0aW9uWzhdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taXMgZW5hYmxlZC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taXMgbWFuZGF0b3J5LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblszXVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bNF1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pcyB2aXNpYmxlLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvbls1XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bNl1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pZiAhIGlzU3lzdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiIW9wdGlvbls3XVwiIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZUFjdGl2aXR5V0ZWYXJpYWJsZShvcHRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidy0xMDAgYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cImFkZE5ld0FjdGl2aXR5V0ZWYXJpYWJsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkTmV3UmVjb3JkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1Gb3JtPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuIl19
793
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYnNmLWFkbWluLXBvcnRhbC9zcmMvbGliL1BhZ2VzL3dvcmtmbG93cy90YWJzL3RhYnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1hZG1pbi1wb3J0YWwvc3JjL2xpYi9QYWdlcy93b3JrZmxvd3MvdGFicy90YWJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsZUFBZSxFQUErQyxNQUFNLHlCQUF5QixDQUFDO0FBR3BWLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvREFBb0QsQ0FBQztBQUdyRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFJckYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0RBQXdELENBQUM7QUFDN0YsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFDOUgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQVExRCxNQUFNLE9BQU8sYUFBYTtJQStGeEIsdUJBQXVCO0lBR3ZCLFlBQW9CLFdBQXdCLEVBQVUsZUFBZ0MsRUFDNUUsY0FBOEIsRUFB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QU0sRUFBRSxLQUFLLEVBQUU7Z0JBdUNOLHlCQUF5QjtzQkFBbkYsU0FBUzt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbExheW91dCwgRW5nbGlzaEFyYWJpY0RUTywgRmlsdGVySXRlbSwgRmlsdGVyVHlwZSwgSW5wdXRUeXBlLCBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucywgUGFnaW5nT3B0aW9ucywgVGV4dEJveE9wdGlvbnMsIFRvZ2dsZVNsaWRlT3B0aW9ucywgRHJvcGRvd25PcHRpb25zLCBGb3JtT3B0aW9ucywgUGFnaW5nQWN0aW9uTW9kZSwgRm9yY2VEaXJlY3Rpb24sIENvbmZpcm1hdGlvbk1vZGFsT3B0aW9ucywgQ2hlY2tCb3hPcHRpb25zLCBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudCwgUGFnaW5nQ29tcG9uZW50IH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtY29udHJvbHMnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1NlcnZpY2UgfSBmcm9tICcuLy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd1NlcnZpY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgV0ZWYXJpYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL21vZGVscy9Xb3JrZmxvd01vZGVscy9XRlZhcmlhYmxlTW9kZWwnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zaGFyZWQvU2VydmljZXMvV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0FjdGl2aXR5U2VydmljZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9TZXJ2aWNlcy9Xb3JrZmxvd0FjdGl2aXR5U2VydmljZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX21ldHJvbmljL2NvcmUvc2VydmljZXMvcGFnZS1pbmZvLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UsIEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBFbnZpcm9ubWVudFNlcnZpY2UsIFJlcXVlc3RIYW5kbGVyU2VydmljZSwgVXRpbGl0eVNlcnZpY2UgfSBmcm9tICdAYm5zaWdodHMvYmJzZi11dGlsaXRpZXMnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFZhcmlhYmxlTG9va3VwTW9kZWwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbW9kZWxzL1dvcmtmbG93TW9kZWxzL1ZhcmlhYmxlTG9va3VwTW9kZWwnO1xyXG5pbXBvcnQgeyBXRkFjdGl2aXR5VmFyaWFibGVEVE8sIFdGQWN0aXZpdHlWYXJpYWJsZXNNb2RlbCB9IGZyb20gJy4uLy4uL3NoYXJlZC9tb2RlbHMvV29ya2Zsb3dNb2RlbHMvV0ZBY3Rpdml0eVZhcmlhYmxlc01vZGVsJztcclxuaW1wb3J0IHsgVmFyaWFibGVEYXRhVHlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb25zdGFudHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi10YWJzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LmNzcyddLFxyXG4gICAgc3RhbmRhbG9uZTogZmFsc2VcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIC8vUGFnZSByZXF1aXJlbWVudHNcclxuICBQYWdldGl0bGU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIC8vV0ZcclxuICAvLyBEZXRhaWxzIENvbnRyb2xzXHJcbiAgRGV0YWlsc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBXb3JrZmxvd0RldGFpbHM6IGFueTtcclxuICBXb3JrZmxvd0lkOiBzdHJpbmc7XHJcbiAgTmFtZU11bHRpbGluZ3VhbFRleHRCb3g6IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zO1xyXG4gIERlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveDogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgQWN0aXZlOiBUZXh0Qm94T3B0aW9ucztcclxuICBQdWJsaXNoZWQ6IFRleHRCb3hPcHRpb25zO1xyXG4gIFN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIFNob3dXb3JrZmxvd0RldGFpbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBWZXJzaW9uSWQ6IHN0cmluZztcclxuICAvL3B1Ymxpc2ggV0YgIE1vZGVsIENvbnRyb2xzXHJcbiAgcHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9uczogQ29uZmlybWF0aW9uTW9kYWxPcHRpb25zO1xyXG4gIHB1Ymxpc2hDb250cm9sTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQFZpZXdDaGlsZCgncHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbCcsIHsgc3RhdGljOiBmYWxzZSB9KSBwdWJsaXNoQ29uZmlybWF0aW9uTW9kYWxDb250cm9sOiBDb25maXJtYXRpb25Nb2RhbENvbXBvbmVudDtcclxuXHJcbiAgLy9TdGFydCBXb3JrRmxvdyBWZXJzaW9uXHJcbiAgV29ya0Zsb3dWZXJzaW9uQXBpVXJsID0gXCIvYXBpL2FkbWluL1dGVmVyc2lvbi9cIjtcclxuICBXb3JrZmxvd1ZlcnNpb25Gb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgV29ya2Zsb3dJZFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIHNlYXJjaFRleHRCb3g6IFRleHRCb3hPcHRpb25zO1xyXG4gIFdvcmtmbG93VmVyc2lvblBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1ZlcnNpb25QYWdpbmc6IFBhZ2luZ09wdGlvbnM7XHJcbiAgVGV4dElucHV0RmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIFdvcmtmbG93SWRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgSXNGaWx0ZXJMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBAVmlld0NoaWxkKCdXb3JrZmxvd1ZlcnNpb25QYWdpbmdWaWV3RWxlbWVudCcsIHsgc3RhdGljOiBmYWxzZSB9KSBXRlZlcnNpb25QYWdpbmdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuICAvL0VuZCBXb3JrRmxvdyB2ZXJzaW9uXHJcblxyXG4gIC8vU3RhcnQgV29ya2Zsb3cgVmFyaWFibGVzXHJcbiAgLy9Xb3JrZmxvdyBWYXJpYWJsZXMgY29udHJvbHNcclxuICBXb3JrZmxvd1ZhcmlhYmxlQXBpVXJsID0gXCIvYXBpL2FkbWluL1dvcmtmbG93VmFyaWFibGUvXCI7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgV29ya2Zsb3dWYXJpYWJsZVRleHRJbnB1dEZpbHRlcjogRmlsdGVySXRlbTtcclxuICBWZXJpc29uSWRUZXh0Qm94OiBUZXh0Qm94T3B0aW9ucztcclxuICBWZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXI6IEZpbHRlckl0ZW07XHJcbiAgRGF0YVR5cGVMaXN0ID0gW107XHJcbiAgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1Jlc3VsdDogYW55W10gPSBbXTtcclxuICBXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAVmlld0NoaWxkKCdXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgV29ya2Zsb3dWYXJpYWJsZVBhZ2luZ1ZpZXdFbGVtZW50OiBQYWdpbmdDb21wb25lbnQ8YW55PjtcclxuXHJcbiAgLy9BZGQgTW9kZWwgQ29udHJvbHNcclxuICBBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIEFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucztcclxuICBBZGRXRlZhcmlhYmxlTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgQWRkV0ZWYXJpYWJsZVN5c05hbWU6IFRleHRCb3hPcHRpb25zO1xyXG4gIEFkZFdGVmFyaWFibGVEYXRhVHlwZTogRHJvcGRvd25PcHRpb25zO1xyXG4gIEFkZFdGVmFyaWFibGVDb25zdGFudDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIC8vV0YgdmFyaWFibGUgbG9va3Vwc1xyXG4gIGFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9uczogYW55W10gPSBbXTtcclxuICBzaG93QWRkTG9va3Vwc1RhYmxlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWRkTGFzdExvb2t1cEluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICAvL0VkaXQgTW9kZWwgQ29udHJvbHNcclxuICBFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zID0gbmV3IEZvcm1PcHRpb25zO1xyXG4gIEVkaXRXRlZhcmlhYmxlTmFtZTogTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnM7XHJcbiAgRWRpdFdGVmFyaWFibGVTeXNOYW1lOiBUZXh0Qm94T3B0aW9ucztcclxuICBFZGl0V0ZWYXJpYWJsZURhdGFUeXBlOiBEcm9wZG93bk9wdGlvbnM7XHJcbiAgRWRpdFdGVmFyaWFibGVDb25zdGFudDogVG9nZ2xlU2xpZGVPcHRpb25zO1xyXG4gIFdvcmtmbG93VmFyaWFibGVJZDogYW55O1xyXG4gIC8vV0YgdmFyaWFibGUgbG9va3Vwc1xyXG4gIGVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgc2hvd0VkaXRMb29rdXBzVGFibGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlZGl0TGFzdExvb2t1cEluZGV4OiBudW1iZXIgPSAwO1xyXG5cclxuICAvL0VuZCBXb3JrZmxvdyBWYXJpYWJsZVxyXG5cclxuICAvL3N0cmF0IFdvcmtmbG93IEFjdGl2aXR5XHJcbiAgLy9Xb3JrZmxvdyBBY3Rpdml0eSBDb250cm9sc1xyXG4gIEFjdGl2aXR5QXBpVXJsID0gXCIvYXBpL2FkbWluL1dvcmtmbG93QWN0aXZpdHkvXCI7XHJcbiAgQWN0aXZpdHlUeXBlTGlzdCA9IFtdO1xyXG4gIHdvcmtmbG93QWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveDogVGV4dEJveE9wdGlvbnM7XHJcbiAgV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyOiBGaWx0ZXJJdGVtO1xyXG4gIEFjdGl2aXR5UGFnaW5nUmVzdWx0OiBhbnlbXSA9IFtdO1xyXG4gIEFjdGl2aXR5UGFnaW5nOiBQYWdpbmdPcHRpb25zO1xyXG4gIElzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoJ0FjdGl2aXR5UGFnaW5nVmlld0VsZW1lbnQnLCB7IHN0YXRpYzogZmFsc2UgfSkgQWN0aXZpdHlQYWdpbmdWaWV3RWxlbWVudDogUGFnaW5nQ29tcG9uZW50PGFueT47XHJcblxyXG4gIC8vQWRkIFdGIHZhcmlhYmxlcyB0byBhY3Rpdml0eSBjb250cm9sc1xyXG4gIGFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIGFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnM7XHJcbiAgYWN0aXZpdHlJRDogc3RyaW5nO1xyXG4gIGFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgbGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGFjdGl2aXR5VmFyaWFibGVzTGlzdCA9IFtdO1xyXG4gIC8vRW5kIFdvcmtmbG93IEFjdGl2aXR5XHJcblxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBXb3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93U2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLCBwcml2YXRlIFdvcmtmbG93VmFyaWFibGVzU2VydmljZTogV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrZmxvd0FjdGl2aXR5U2VydmljZTogV29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UsIHByaXZhdGUgcGFnZUluZm9TZXJ2aWNlOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsIHByaXZhdGUgZW52aXJvbm1lbnRTZXJ2aWNlOiBFbnZpcm9ubWVudFNlcnZpY2UsIHByaXZhdGUgYmJzZlRyYW5zbGF0ZVNlcnZpY2U6IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHVibGljIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSwgcHJpdmF0ZSByZXF1ZXN0SGFuZGxlclNlcnZpY2U6IFJlcXVlc3RIYW5kbGVyU2VydmljZSkge1xyXG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dJZCA9IHBhcmFtc1snaWQnXTtcclxuICAgICAgdGhpcy5WZXJzaW9uSWQgPSBwYXJhbXNbJ3ZpZCddO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuYmJzZlRyYW5zbGF0ZVNlcnZpY2Uub25MYW5nQ2hhbmdlLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5uZ09uSW5pdCgpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmdldERldGFpbHMoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvL1dGIGZ1bmN0aW9uc1xyXG4gIGdldERldGFpbHMoKSB7XHJcbiAgICB0aGlzLlNob3dXb3JrZmxvd0RldGFpbHMgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1NlcnZpY2UuZ2V0RGV0YWlscyh0aGlzLldvcmtmbG93SWQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIHRoaXMuV29ya2Zsb3dEZXRhaWxzID0gcmVzdWx0IGFzIGFueTtcclxuXHJcbiAgICAgIHZhciBOYW1lID0gbmV3IEVuZ2xpc2hBcmFiaWNEVE8oKTtcclxuICAgICAgTmFtZS5hcmFiaWMgPSB0aGlzLldvcmtmbG93RGV0YWlscy5uYW1lLmFyYWJpYztcclxuICAgICAgTmFtZS5lbmdsaXNoID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMubmFtZS5lbmdsaXNoO1xyXG5cclxuICAgICAgdGhpcy5QYWdldGl0bGUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5uYW1lU3RyO1xyXG5cclxuXHJcbiAgICAgIFBhZ2VJbmZvU2VydmljZS5QYWdlVGl0bGUgPSB0aGlzLlBhZ2V0aXRsZTtcclxuICAgICAgUGFnZUluZm9TZXJ2aWNlLlBhZ2VCcmVhZGNydW1icyA9IFtcclxuICAgICAgICB7IHRpdGxlOiB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJIb21lXCIpLCBwYXRoOiAnL0FkbWluL0hvbWUnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93c1wiKSwgcGF0aDogJy9BZG1pbi9Xb3JrZmxvd3Mvd29ya2Zsb3cnLCBpc1NlcGFyYXRvcjogZmFsc2UsIGlzQWN0aXZlOiBmYWxzZSB9LFxyXG4gICAgICAgIHsgdGl0bGU6ICcnLCBwYXRoOiAnJywgaXNTZXBhcmF0b3I6IHRydWUsIGlzQWN0aXZlOiBmYWxzZSB9XHJcblxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlVGl0bGUoKTtcclxuICAgICAgdGhpcy5wYWdlSW5mb1NlcnZpY2UuY2FsY3VsYXRlQnJlYWRjcnVtYnMoKTtcclxuXHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3ggPSBuZXcgTXVsdGlMaW5ndWFsVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5hcmFiaWNMYWJlbEtleSA9IFwiTmFtZUluQXJhYmljXCI7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guZW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3guaXNSZXF1aXJlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuTmFtZU11bHRpbGluZ3VhbFRleHRCb3gubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLk5hbWVNdWx0aWxpbmd1YWxUZXh0Qm94LnZhbHVlID0gTmFtZTtcclxuICAgICAgdGhpcy5OYW1lTXVsdGlsaW5ndWFsVGV4dEJveC5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgICB2YXIgRGVzY3JpcHRpb24gPSBuZXcgRW5nbGlzaEFyYWJpY0RUTygpO1xyXG4gICAgICBEZXNjcmlwdGlvbi5hcmFiaWMgPSB0aGlzLldvcmtmbG93RGV0YWlscy5kZXNjcmlwdGlvbi5hcmFiaWM7XHJcbiAgICAgIERlc2NyaXB0aW9uLmVuZ2xpc2ggPSB0aGlzLldvcmtmbG93RGV0YWlscy5kZXNjcmlwdGlvbi5lbmdsaXNoO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveCA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5hcmFiaWNMYWJlbEtleSA9IFwiRGVzY3JpcHRpb25JbkFyYWJpY1wiO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5lbmdsaXNoTGFiZWxLZXkgPSBcIkRlc2NyaXB0aW9uSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRGVzY3JpcHRpb25NdWx0aWxpbmd1YWxUZXh0Qm94LmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5uYW1lID0gXCJEZXNjcmlwdGlvblwiO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC52YWx1ZSA9IERlc2NyaXB0aW9uO1xyXG4gICAgICB0aGlzLkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveC5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLlN5c05hbWUubmFtZSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLlN5c05hbWUubGFiZWxLZXkgPSBcIlN5c05hbWVcIjtcclxuICAgICAgdGhpcy5TeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5TeXNOYW1lLmlzRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLlN5c05hbWUudmFsdWUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5zeXNOYW1lO1xyXG5cclxuICAgICAgdGhpcy5BY3RpdmUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BY3RpdmUubmFtZSA9IFwiQWN0aXZlXCI7XHJcbiAgICAgIHRoaXMuQWN0aXZlLmxhYmVsS2V5ID0gXCJBY3RpdmVcIjtcclxuICAgICAgdGhpcy5BY3RpdmUudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICB0aGlzLkFjdGl2ZS5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BY3RpdmUudmFsdWUgPSB0aGlzLldvcmtmbG93RGV0YWlscy5pc0FjdGl2ZTtcclxuXHJcbiAgICAgIHRoaXMuUHVibGlzaGVkID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLm5hbWUgPSBcIlB1Ymxpc2hlZFwiO1xyXG4gICAgICB0aGlzLlB1Ymxpc2hlZC5sYWJlbEtleSA9IFwiUHVibGlzaGVkXCI7XHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5QdWJsaXNoZWQuaXNEaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuUHVibGlzaGVkLnZhbHVlID0gdGhpcy5Xb3JrZmxvd0RldGFpbHMuaXNQdWJsaXNoZWQ7XHJcblxyXG4gICAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG5cclxuICAgICAgdGhpcy5TaG93V29ya2Zsb3dEZXRhaWxzID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vRGVsZXRlIHByb3ZpZGVyXHJcbiAgc2hvd1B1Ymxpc2hXRk1vZGFsKGlkOiBzdHJpbmcpIHtcclxuXHJcbiAgICAvL2FycmF5IHNlbnQgdG8gc2VydmljZSBmdW5jdGlvblxyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBwYXJhbUFycmF5LnB1c2goaWQpO1xyXG5cclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucyA9IG5ldyBDb25maXJtYXRpb25Nb2RhbE9wdGlvbnMoKTtcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLnB1Ymxpc2hXb3JrRmxvdztcclxuICAgIHRoaXMucHVibGlzaFdGQ29uZmlybWF0aW9uT3B0aW9ucy5zZXJ2aWNlU3VibWl0TW9kZWwgPSBwYXJhbUFycmF5O1xyXG4gICAgdGhpcy5wdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zLmNvbmZpcm1hdGlvbkhlYWRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrRmZsb3dcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuY29uZmlybWF0aW9uQm9keSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrRmZsb3dDb25maXJtYXRpb25cIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuc3VibWl0QnV0dG9uVGV4dCA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMuc3VjY2Vzc05vdGlmaWNhdGlvbk1lc3NhZ2UgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJQdWJsaXNoZWRTdWNjZXNzZnVsbHlcIik7XHJcbiAgICB0aGlzLnB1Ymxpc2hXRkNvbmZpcm1hdGlvbk9wdGlvbnMub25TdWNjZXNzSGFuZGxlciA9IHRoaXMucHVibGlzaFdvcmtGbG93T25TdWNjZXNzO1xyXG5cclxuICAgIHRoaXMucHVibGlzaENvbnRyb2xMb2FkZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMucHVibGlzaENvbmZpcm1hdGlvbk1vZGFsQ29udHJvbC5zaG93TW9kYWwoKTtcclxuICAgIH0sIDIwMCk7XHJcbiAgfVxyXG4gIHB1Ymxpc2hXb3JrRmxvdyA9IChpZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93U2VydmljZS5wdWJsaXNoV29ya0Zsb3coaWQpO1xyXG4gIH07XHJcbiAgcHVibGlzaFdvcmtGbG93T25TdWNjZXNzID0gKHJlc3VsdCkgPT4ge1xyXG4gICAgdGhpcy5Xb3JrZmxvd0RldGFpbHMuaXNQdWJsaXNoZWQgPSB0cnVlO1xyXG4gIH07XHJcblxyXG4gIC8vV0YgdmVyc2lvbiBmdW5jdGlvbnNcclxuICBpbml0aWFsaXplVmVyc2lvbigpIHtcclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIC8vIFRleHRCb3ggaW50aVxyXG5cclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5zZWFyY2hUZXh0Qm94Lm5hbWUgPSBcInNlYXJjaFRleHRCb3hcIjtcclxuICAgIHRoaXMuc2VhcmNoVGV4dEJveC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3gucGxhY2Vob2xkZXIgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTZWFyY2hCeU5hbWVcIik7XHJcbiAgICB0aGlzLnNlYXJjaFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gXCJzZWFyY2hUZXh0Qm94XCI7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJzZWFyY2hUZXh0XCI7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5pc0Zvcm1Db250cm9sID0gdHJ1ZTtcclxuICAgIHRoaXMuVGV4dElucHV0RmlsdGVyLmZpbHRlclR5cGUgPSBGaWx0ZXJUeXBlLlRleHRCb3g7XHJcblxyXG5cclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3gubmFtZSA9IFwiV29ya2Zsb3dJZFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHRoaXMuV29ya2Zsb3dJZFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5Xb3JrZmxvd0lkVGV4dEJveC52YWx1ZSA9IHRoaXMuV29ya2Zsb3dJZDtcclxuXHJcbiAgICB0aGlzLldvcmtmbG93SWRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyLmZvcm1Db250cm9sTmFtZSA9IFwiV29ya2Zsb3dJZFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dJZEZpbHRlci5hY3Rpb25QYXJhbWV0ZXJOYW1lID0gXCJXZklEXCI7XHJcbiAgICB0aGlzLldvcmtmbG93SWRGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLldvcmtmbG93SWRGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveDtcclxuXHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmVyc2lvblBhZ2luZy5hY3Rpb25Qb3N0VVJMID0gdGhpcy5Xb3JrRmxvd1ZlcnNpb25BcGlVcmwgKyAnR2V0VmVyc2lvbnNMaXN0aW5nJztcclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wic2VhcmNoVGV4dEJveFwiLCBcIldvcmtmbG93SWRUZXh0Qm94XCJdO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZlcnNpb25QYWdpbmcuZmlsdGVycyA9IFt0aGlzLlRleHRJbnB1dEZpbHRlciwgdGhpcy5Xb3JrZmxvd0lkRmlsdGVyXTtcclxuICAgIHRoaXMuV29ya2Zsb3dWZXJzaW9uUGFnaW5nLnZhbGlkYXRpb25Ub2tlbiA9IHRoaXMuYXV0aFNlcnZpY2UuYXV0aG9yaXphdGlvbkhlYWRlclZhbHVlKCk7XHJcblxyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICB0aGlzLklzRmlsdGVyTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuICBzZXRXb3JrZmxvd1ZlcnNpb25MaXN0UmVzdWx0KHJlc3VsdCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZlcnNpb25QYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcblxyXG4gIH1cclxuXHJcbiAgLy9XRiB2YXJpYWJsZXMgRnVuY3Rpb25zXHJcbiAgc2V0V29ya2Zsb3dWYXJpYWJsZUxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmdSZXN1bHQgPSByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvL2luaXRpYWxpemUgV0YgdmFyaWFibGVzIHBhZ2VcclxuICBpbml0aWFsaXplV29ya2Zsb3dWYXJpYWJsZXMoKSB7XHJcbiAgICAvLyBUZXh0Qm94IGluaXRcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3ggPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3gubmFtZSA9IFwiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3gudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveC5wbGFjZWhvbGRlciA9IHRoaXMudXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNlYXJjaEJ5TmFtZVwiKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3guaGlkZUxhYmVsID0gdHJ1ZTtcclxuXHJcblxyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIgPSBuZXcgRmlsdGVySXRlbSgpO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuZm9ybUNvbnRyb2xOYW1lID0gXCJXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveFwiO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuYWN0aW9uUGFyYW1ldGVyTmFtZSA9IFwic2VhcmNoVGV4dFwiO1xyXG4gICAgdGhpcy5UZXh0SW5wdXRGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLlRleHRJbnB1dEZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94O1xyXG5cclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94Lm5hbWUgPSBcIlZlcmlzb25JZFRleHRCb3hcIjtcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dEJveC52YWx1ZSA9IHRoaXMuV29ya2Zsb3dJZDtcclxuXHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlci5mb3JtQ29udHJvbE5hbWUgPSBcIlZlcmlzb25JZFRleHRCb3hcIjtcclxuICAgIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcInZlcnNpb25JRFwiO1xyXG4gICAgdGhpcy5WZXJpc29uSWRUZXh0SW5wdXRGaWx0ZXIuaXNGb3JtQ29udHJvbCA9IHRydWU7XHJcbiAgICB0aGlzLlZlcmlzb25JZFRleHRJbnB1dEZpbHRlci5maWx0ZXJUeXBlID0gRmlsdGVyVHlwZS5UZXh0Qm94O1xyXG5cclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZyA9IG5ldyBQYWdpbmdPcHRpb25zKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuV29ya2Zsb3dWYXJpYWJsZUFwaVVybCArICdHZXRWYXJpYWJsZUxpc3RpbmcnO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nLm9uS2V5UHJlc3NGaWx0ZXJzQ29udHJvbE5hbWVzID0gW1wiV29ya2Zsb3dWYXJpYWJsZXNlYXJjaFRleHRCb3hcIiwgXCJWZXJpc29uSWRUZXh0Qm94XCJdO1xyXG4gICAgdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nLmZpbHRlcnMgPSBbdGhpcy5UZXh0SW5wdXRGaWx0ZXIsIHRoaXMuVmVyaXNvbklkVGV4dElucHV0RmlsdGVyXTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZVBhZ2luZy52YWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgLy9BZGQsRWRpdCBXRiB2YXJpYWJsZSBzaGFyZWQgZnVuY3Rpb25zXHJcbiAgV0ZWYXJpYWJsZVR5cGVPbkNoYW5nZSh0eXBlOiBhbnksIGlzQWRkOiBib29sZWFuKSB7XHJcbiAgICB0eXBlID0gdHlwZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkFkZExvb2t1cE5hbWVFTlwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiQWRkTG9va3VwTmFtZUFSXCIgKyBpKTtcclxuICAgICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJMb29rdXBWYWx1ZVwiICsgaSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXggPSAwO1xyXG4gICAgICBpZiAodHlwZSA9PSBWYXJpYWJsZURhdGFUeXBlLlNpbmdsZVNlbGVjdGlvbiB8fCB0eXBlID09IFZhcmlhYmxlRGF0YVR5cGUuTXVsdGlTZWxlY3Rpb24pXHJcbiAgICAgICAgdGhpcy5zaG93QWRkTG9va3Vwc1RhYmxlID0gdHJ1ZTtcclxuICAgICAgZWxzZVxyXG4gICAgICAgIHRoaXMuc2hvd0FkZExvb2t1cHNUYWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZWRpdExhc3RMb29rdXBJbmRleDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkVkaXRMb29rdXBJRFwiICsgaSk7XHJcbiAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChcIkVkaXRMb29rdXBOYW1lRU5cIiArIGkpO1xyXG4gICAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtLnJlbW92ZUNvbnRyb2woXCJFZGl0TG9va3VwTmFtZUFSXCIgKyBpKTtcclxuICAgICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKFwiRWRpdExvb2t1cFZhbHVlXCIgKyBpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5lZGl0TGFzdExvb2t1cEluZGV4ID0gMDtcclxuICAgICAgaWYgKHR5cGUgPT0gVmFyaWFibGVEYXRhVHlwZS5TaW5nbGVTZWxlY3Rpb24gfHwgdHlwZSA9PSBWYXJpYWJsZURhdGFUeXBlLk11bHRpU2VsZWN0aW9uKVxyXG4gICAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSB0cnVlO1xyXG4gICAgICBlbHNlXHJcbiAgICAgICAgdGhpcy5zaG93RWRpdExvb2t1cHNUYWJsZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuICBpbml0aWFsaXplV0ZWYXJpYWJsZUxvb2t1cE9wdGlvbnMoaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBsb29rdXBPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgbGV0IG9iamVjdExvb2t1cE9wdGlvbnM6IGFueVtdID0gW107XHJcbiAgICBsZXQgYWN0aW9uSW5kaWNhdGU6IHN0cmluZztcclxuICAgIGxldCBpbmRleDogbnVtYmVyO1xyXG4gICAgaWYgKGlzQWRkKSB7XHJcbiAgICAgIGFjdGlvbkluZGljYXRlID0gXCJBZGRcIjtcclxuICAgICAgaW5kZXggPSB0aGlzLmFkZExhc3RMb29rdXBJbmRleDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBhY3Rpb25JbmRpY2F0ZSA9IFwiRWRpdFwiO1xyXG4gICAgICBpbmRleCA9IHRoaXMuZWRpdExhc3RMb29rdXBJbmRleDtcclxuICAgIH1cclxuICAgIC8vRm9yIGVkaXQgb25seVxyXG4gICAgbGV0IGxvb2t1cElEID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBsb29rdXBJRC5uYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cElEXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cElELmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICBsb29rdXBJRC50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcblxyXG4gICAgbGV0IGxvb2t1cE5hbWVFTiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgbG9va3VwTmFtZUVOLm5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiTG9va3VwTmFtZUVOXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cE5hbWVFTi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgbG9va3VwTmFtZUVOLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIGxvb2t1cE5hbWVFTi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVFTi5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG4gICAgbGV0IGxvb2t1cE5hbWVBUiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgbG9va3VwTmFtZUFSLm5hbWUgPSBhY3Rpb25JbmRpY2F0ZSArIFwiTG9va3VwTmFtZUFSXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cE5hbWVBUi5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgbG9va3VwTmFtZUFSLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIGxvb2t1cE5hbWVBUi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIGxvb2t1cE5hbWVBUi5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG4gICAgbGV0IGxvb2t1cFZhbHVlID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICBsb29rdXBWYWx1ZS5uYW1lID0gYWN0aW9uSW5kaWNhdGUgKyBcIkxvb2t1cFZhbHVlXCIgKyBpbmRleDtcclxuICAgIGxvb2t1cFZhbHVlLmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICBsb29rdXBWYWx1ZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICBsb29rdXBWYWx1ZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIGxvb2t1cFZhbHVlLm1heExlbmd0aCA9IDIwMDA7XHJcblxyXG4gICAgaWYgKGlzQWRkKVxyXG4gICAgICBvYmplY3RMb29rdXBPcHRpb25zLnB1c2gobG9va3VwTmFtZUVOLCBsb29rdXBOYW1lQVIsIGxvb2t1cFZhbHVlKTtcclxuICAgIGVsc2VcclxuICAgICAgb2JqZWN0TG9va3VwT3B0aW9ucy5wdXNoKGxvb2t1cElELCBsb29rdXBOYW1lRU4sIGxvb2t1cE5hbWVBUiwgbG9va3VwVmFsdWUpO1xyXG5cclxuICAgIGxvb2t1cE9wdGlvbnMucHVzaChvYmplY3RMb29rdXBPcHRpb25zKTtcclxuXHJcbiAgICBpbmRleCArPSAxO1xyXG4gICAgcmV0dXJuIFtsb29rdXBPcHRpb25zLCBpbmRleF07XHJcblxyXG4gIH1cclxuICBkZWxldGVXRlZhcmlhYmxlTG9va3VwKGRlbGV0ZWRMb29rdXA6IGFueSwgaXNBZGQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChpc0FkZCkge1xyXG4gICAgICBsZXQgZGVsZXRlZExvb2t1cEluZGV4OiBudW1iZXIgPSB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5pbmRleE9mKGRlbGV0ZWRMb29rdXApO1xyXG4gICAgICBpZiAoZGVsZXRlZExvb2t1cEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHRoaXMuYWRkV0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLnNwbGljZShkZWxldGVkTG9va3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZExvb2t1cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybS5yZW1vdmVDb250cm9sKGRlbGV0ZWRMb29rdXBbaV0uTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGRlbGV0ZWRMb29rdXBJbmRleDogbnVtYmVyID0gdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLmluZGV4T2YoZGVsZXRlZExvb2t1cCk7XHJcbiAgICAgIGlmIChkZWxldGVkTG9va3VwSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLnNwbGljZShkZWxldGVkTG9va3VwSW5kZXgsIDEpO1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZExvb2t1cC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkTG9va3VwW2ldLk5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9BZGQgV0YgdmFyaWFibGVcclxuICBzaG93QWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKEFkZFdvcmtmbG93VmFyaWFibGVNb2RhbCkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLmxvYWRBZGREcm9wZG93bnMoKS5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xyXG4gICAgICBsZXQgcmVzdWx0T2JqID0gcmVzdWx0IGFzIGFueTtcclxuICAgICAgdGhpcy5EYXRhVHlwZUxpc3QgPSByZXN1bHRPYmouZGF0YVR5cGVMaXN0O1xyXG5cclxuICAgICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSBbXTtcclxuICAgICAgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXggPSAwO1xyXG4gICAgICB0aGlzLnNob3dBZGRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm0gPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMgPSBuZXcgRm9ybU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybTtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuZ2V0TW9kZWxGdW5jdGlvbiA9IHRoaXMuZ2V0QWRkV0ZWYXJpYWJsZU1vZGVsO1xyXG4gICAgICB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5zZXJ2aWNlU3VibWl0RnVuY3Rpb24gPSB0aGlzLmdldEFkZFdGVmFyaWFibGVGdW5jdGlvbjtcclxuICAgICAgdGhpcy5BZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ7XHJcblxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVOYW1lID0gbmV3IE11bHRpTGluZ3VhbFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZU5hbWUubmFtZSA9IFwiTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVOYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5lbmdsaXNoTGFiZWxLZXkgPSBcIk5hbWVJbkVuZ2xpc2hcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlTmFtZS5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLm5hbWUgPSBcIlN5c05hbWVcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS5sYWJlbEtleSA9IFwiU3lzTmFtZVwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVTeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlU3lzTmFtZS52YWx1ZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZVN5c05hbWUubWF4TGVuZ3RoID0gMTAwO1xyXG5cclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUgPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLm5hbWUgPSBcIkRhdGFUeXBlSXRlbUlEX0dVSURcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUubGFiZWxLZXkgPSBcIkRhdGFUeXBlXCI7XHJcbiAgICAgIHRoaXMuQWRkV0ZWYXJpYWJsZURhdGFUeXBlLmRhdGFTb3VyY2UgPSB0aGlzLkRhdGFUeXBlTGlzdDtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlRGF0YVR5cGUuYWxsb3dTZWFyY2hGaWx0ZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVEYXRhVHlwZS5wbGFjZWhvbGRlciA9IFwiXCI7XHJcblxyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVDb25zdGFudCA9IG5ldyBUb2dnbGVTbGlkZU9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQubmFtZSA9IFwiSXNDb25zdGFudFwiO1xyXG4gICAgICB0aGlzLkFkZFdGVmFyaWFibGVDb25zdGFudC5sYWJlbEtleSA9IFwiQ29uc3RhbnRcIjtcclxuICAgICAgdGhpcy5BZGRXRlZhcmlhYmxlQ29uc3RhbnQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcbiAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oQWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG4gICAgfSk7XHJcblxyXG5cclxuICB9XHJcbiAgZ2V0QWRkV0ZWYXJpYWJsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkFkZFdvcmtmbG93VmFyaWFibGVGb3JtLnZhbHVlIGFzIGFueTtcclxuICAgIGxldCBhZGRNb2RlbCA9IG5ldyBXRlZhcmlhYmxlTW9kZWwoKTtcclxuICAgIGFkZE1vZGVsLk5hbWUgPSBSZXN1bHRNb2RlbC5OYW1lO1xyXG4gICAgYWRkTW9kZWwuU3lzTmFtZSA9IFJlc3VsdE1vZGVsLlN5c05hbWU7XHJcbiAgICBhZGRNb2RlbC5Xb3JrZmxvd1ZlcnNpb25JRF9HVUlEID0gdGhpcy5WZXJzaW9uSWQ7XHJcbiAgICBhZGRNb2RlbC5EYXRhVHlwZUl0ZW1JRF9HVUlEID0gUmVzdWx0TW9kZWwuRGF0YVR5cGVJdGVtSURfR1VJRDtcclxuICAgIGFkZE1vZGVsLklzQ29uc3RhbnQgPSBSZXN1bHRNb2RlbC5Jc0NvbnN0YW50O1xyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5hZGRMYXN0TG9va3VwSW5kZXg7IGorKykge1xyXG4gICAgICBsZXQgYWRkTG9va3VwTmFtZUVOID0gUmVzdWx0TW9kZWxbXCJBZGRMb29rdXBOYW1lRU5cIiArIGpdO1xyXG4gICAgICBpZiAoYWRkTG9va3VwTmFtZUVOID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBhZGRMb29rdXBOYW1lQVIgPSBSZXN1bHRNb2RlbFtcIkFkZExvb2t1cE5hbWVBUlwiICsgal07XHJcbiAgICAgIGxldCBhZGRMb29rdXBWYWx1ZSA9IFJlc3VsdE1vZGVsW1wiQWRkTG9va3VwVmFsdWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cDogVmFyaWFibGVMb29rdXBNb2RlbCA9IG5ldyBWYXJpYWJsZUxvb2t1cE1vZGVsKCk7XHJcbiAgICAgIGxvb2t1cC5OYW1lRU4gPSBhZGRMb29rdXBOYW1lRU47XHJcbiAgICAgIGxvb2t1cC5OYW1lQVIgPSBhZGRMb29rdXBOYW1lQVI7XHJcbiAgICAgIGxvb2t1cC5WYWx1ZSA9IGFkZExvb2t1cFZhbHVlO1xyXG4gICAgICBhZGRNb2RlbC52YXJpYWJsZUxvb2t1cERUT3MucHVzaChsb29rdXApO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcmFtQXJyYXkucHVzaChhZGRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9O1xyXG4gIGdldEFkZFdGVmFyaWFibGVGdW5jdGlvbiA9IChBZGRNb2RlbCk6IE9ic2VydmFibGU8YW55PiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlc1NlcnZpY2UuYWRkVmFyaWFibGUoQWRkTW9kZWwpO1xyXG4gIH07XHJcbiAgYWRkV0ZWYXJpYWJsZUxvb2t1cGluQWRkTW9kZSgpIHtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IHRoaXMuaW5pdGlhbGl6ZVdGVmFyaWFibGVMb29rdXBPcHRpb25zKHRydWUpO1xyXG4gICAgdGhpcy5hZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSB0aGlzLmFkZFdGVmFyaWFibGVzTG9va3VwT3B0aW9ucy5jb25jYXQocmVzdWx0WzBdKTtcclxuICAgIHRoaXMuYWRkTGFzdExvb2t1cEluZGV4ID0gcmVzdWx0WzFdO1xyXG4gIH1cclxuXHJcbiAgLy9FZGl0IFdGIHZhcmlhYmxlXHJcbiAgc2hvd0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoV0ZWYXJpYWJsZUlEOiBzdHJpbmcsIEVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwpIHtcclxuICAgIHRoaXMudXRpbGl0eVNlcnZpY2Uuc3RhcnRCbG9ja1VJKCk7XHJcbiAgICB0aGlzLldvcmtmbG93VmFyaWFibGVJZCA9IFdGVmFyaWFibGVJRDtcclxuICAgIHRoaXMuV29ya2Zsb3dWYXJpYWJsZXNTZXJ2aWNlLmdldEVkaXRXb3JrRmxvd1ZhcmlhYmxlRGF0YShXRlZhcmlhYmxlSUQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgd29ya2Zsb3dWYXJpYWJsZSA9IHJlc3VsdE9iai5tb2RlbDtcclxuICAgICAgd29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEID0gd29ya2Zsb3dWYXJpYWJsZS5kYXRhVHlwZUl0ZW1JRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICBsZXQgbGlzdHMgPSByZXN1bHRPYmoubGlzdHM7XHJcbiAgICAgIHRoaXMuRGF0YVR5cGVMaXN0ID0gbGlzdHMuZGF0YVR5cGVMaXN0O1xyXG5cclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zID0gW107XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCA9IDA7XHJcbiAgICAgIHRoaXMuc2hvd0VkaXRMb29rdXBzVGFibGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5FZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm07XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0V0ZWYXJpYWJsZU1vZGVsO1xyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRFZGl0V0ZWYXJpYWJsZUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5Xb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ7XHJcbiAgICAgIHRoaXMuRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtT3B0aW9ucy5wYWdpbmdBY3Rpb25Nb2RlID0gUGFnaW5nQWN0aW9uTW9kZS5VcGRhdGU7XHJcblxyXG4gICAgICBsZXQgbmFtZSA9IG5ldyBFbmdsaXNoQXJhYmljRFRPKCk7XHJcbiAgICAgIG5hbWUuYXJhYmljID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmFyYWJpYztcclxuICAgICAgbmFtZS5lbmdsaXNoID0gd29ya2Zsb3dWYXJpYWJsZS5uYW1lLmVuZ2xpc2g7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZSA9IG5ldyBNdWx0aUxpbmd1YWxUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS5uYW1lID0gXCJOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLmFyYWJpY0xhYmVsS2V5ID0gXCJOYW1lSW5BcmFiaWNcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZU5hbWUuZW5nbGlzaExhYmVsS2V5ID0gXCJOYW1lSW5FbmdsaXNoXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlTmFtZS52YWx1ZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVOYW1lLm1heExlbmd0aCA9IDI1NTtcclxuXHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZSA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlU3lzTmFtZS5uYW1lID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLmxhYmVsS2V5ID0gXCJTeXNOYW1lXCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZVN5c05hbWUudmFsdWUgPSB3b3JrZmxvd1ZhcmlhYmxlLnN5c05hbWU7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVTeXNOYW1lLm1heExlbmd0aCA9IDEwMDtcclxuXHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVEYXRhVHlwZSA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLm5hbWUgPSBcIkRhdGFUeXBlSXRlbUlEX0dVSURcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLmxhYmVsS2V5ID0gXCJEYXRhVHlwZVwiO1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuZGF0YVNvdXJjZSA9IHRoaXMuRGF0YVR5cGVMaXN0O1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlRGF0YVR5cGUuc2luZ2xlU2VsZWN0aW9uID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLnBsYWNlaG9sZGVyID0gXCJcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZURhdGFUeXBlLnNlbGVjdGVkSXRlbXMgPSB3b3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbUlEX0dVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQgPSBuZXcgVG9nZ2xlU2xpZGVPcHRpb25zKCk7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5uYW1lID0gXCJJc0NvbnN0YW50XCI7XHJcbiAgICAgIHRoaXMuRWRpdFdGVmFyaWFibGVDb25zdGFudC5sYWJlbEtleSA9IFwiQ29uc3RhbnRcIjtcclxuICAgICAgdGhpcy5FZGl0V0ZWYXJpYWJsZUNvbnN0YW50LnZhbHVlID0gd29ya2Zsb3dWYXJpYWJsZS5pc0NvbnN0YW50O1xyXG4gICAgICB0aGlzLkVkaXRXRlZhcmlhYmxlQ29uc3RhbnQudmlld1R5cGUgPSBDb250cm9sTGF5b3V0Lkhvcml6b250YWw7XHJcblxyXG5cclxuICAgICAgaWYgKHdvcmtmbG93VmFyaWFibGUuZGF0YVR5cGVJdGVtSURfR1VJRCA9PSBWYXJpYWJsZURhdGFUeXBlLlNpbmdsZVNlbGVjdGlvbiB8fCB3b3JrZmxvd1ZhcmlhYmxlLmRhdGFUeXBlSXRlbUlEX0dVSUQgPT0gVmFyaWFibGVEYXRhVHlwZS5NdWx0aVNlbGVjdGlvbikge1xyXG4gICAgICAgIC8vU2V0IExvb2t1cCBDb250cm9sc1xyXG4gICAgICAgIHRoaXMuc2V0RWRpdFZhcmlhYmxlTG9va3Vwcyh3b3JrZmxvd1ZhcmlhYmxlLnZhcmlhYmxlTG9va3VwRFRPcyk7XHJcbiAgICAgICAgdGhpcy5zaG93RWRpdExvb2t1cHNUYWJsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihFZGl0V29ya2Zsb3dWYXJpYWJsZU1vZGFsKTtcclxuICAgICAgdGhpcy51dGlsaXR5U2VydmljZS5zdG9wQmxvY2tVSSgpO1xyXG5cclxuICAgIH0pO1xyXG4gIH1cclxuICBnZXRFZGl0V0ZWYXJpYWJsZU1vZGVsID0gKCkgPT4ge1xyXG4gICAgbGV0IHBhcmFtQXJyYXk6IGFueVtdID0gW107XHJcbiAgICBsZXQgUmVzdWx0TW9kZWwgPSB0aGlzLkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybS52YWx1ZSBhcyBhbnk7XHJcbiAgICBsZXQgRWRpdE1vZGVsID0gbmV3IFdGVmFyaWFibGVNb2RlbCgpO1xyXG4gICAgRWRpdE1vZGVsLklEX0dVSUQgPSB0aGlzLldvcmtmbG93VmFyaWFibGVJZDtcclxuICAgIEVkaXRNb2RlbC5OYW1lID0gUmVzdWx0TW9kZWwuTmFtZTtcclxuICAgIEVkaXRNb2RlbC5TeXNOYW1lID0gUmVzdWx0TW9kZWwuU3lzTmFtZTtcclxuICAgIEVkaXRNb2RlbC5Xb3JrZmxvd1ZlcnNpb25JRF9HVUlEID0gdGhpcy5WZXJzaW9uSWQ7XHJcbiAgICBFZGl0TW9kZWwuRGF0YVR5cGVJdGVtSURfR1VJRCA9IFJlc3VsdE1vZGVsLkRhdGFUeXBlSXRlbUlEX0dVSUQ7XHJcbiAgICBFZGl0TW9kZWwuSXNDb25zdGFudCA9IFJlc3VsdE1vZGVsLklzQ29uc3RhbnQ7XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXg7IGorKykge1xyXG4gICAgICBsZXQgZWRpdExvb2t1cElEID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwSURcIiArIGpdO1xyXG4gICAgICBpZiAoZWRpdExvb2t1cElEID09IHVuZGVmaW5lZClcclxuICAgICAgICBjb250aW51ZTtcclxuXHJcbiAgICAgIGxldCBlZGl0TG9va3VwTmFtZUVOID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwTmFtZUVOXCIgKyBqXTtcclxuICAgICAgbGV0IGVkaXRMb29rdXBOYW1lQVIgPSBSZXN1bHRNb2RlbFtcIkVkaXRMb29rdXBOYW1lQVJcIiArIGpdO1xyXG4gICAgICBsZXQgZWRpdExvb2t1cFZhbHVlID0gUmVzdWx0TW9kZWxbXCJFZGl0TG9va3VwVmFsdWVcIiArIGpdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cDogVmFyaWFibGVMb29rdXBNb2RlbCA9IG5ldyBWYXJpYWJsZUxvb2t1cE1vZGVsKCk7XHJcbiAgICAgIGxvb2t1cC5JRF9HVUlEID0gZWRpdExvb2t1cElEO1xyXG4gICAgICBsb29rdXAuTmFtZUVOID0gZWRpdExvb2t1cE5hbWVFTjtcclxuICAgICAgbG9va3VwLk5hbWVBUiA9IGVkaXRMb29rdXBOYW1lQVI7XHJcbiAgICAgIGxvb2t1cC5WYWx1ZSA9IGVkaXRMb29rdXBWYWx1ZTtcclxuICAgICAgRWRpdE1vZGVsLnZhcmlhYmxlTG9va3VwRFRPcy5wdXNoKGxvb2t1cCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyYW1BcnJheS5wdXNoKEVkaXRNb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9O1xyXG4gIGdldEVkaXRXRlZhcmlhYmxlRnVuY3Rpb24gPSAoRWRpdE1vZGVsKTogT2JzZXJ2YWJsZTxhbnk+ID0+IHtcclxuICAgIHJldHVybiB0aGlzLldvcmtmbG93VmFyaWFibGVzU2VydmljZS5lZGl0VmFyaWFibGUoRWRpdE1vZGVsKTtcclxuICB9O1xyXG4gIHNldEVkaXRWYXJpYWJsZUxvb2t1cHMoZXhpc3RpbmdMb29rdXBzOiBhbnlbXSkge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBleGlzdGluZ0xvb2t1cHMubGVuZ3RoOyBpKyspIHtcclxuXHJcbiAgICAgIGxldCBvYmplY3RBdHRyaWJ1dGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cElEID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIGxvb2t1cElELm5hbWUgPSBcIkVkaXRMb29rdXBJRFwiICsgaTtcclxuICAgICAgbG9va3VwSUQuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgbG9va3VwSUQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICBsb29rdXBJRC52YWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS5pRF9HVUlEO1xyXG5cclxuICAgICAgbGV0IGxvb2t1cE5hbWVFTiA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgICBsb29rdXBOYW1lRU4ubmFtZSA9IFwiRWRpdExvb2t1cE5hbWVFTlwiICsgaTtcclxuICAgICAgbG9va3VwTmFtZUVOLmhpZGVMYWJlbCA9IHRydWU7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cE5hbWVFTi52YWx1ZSA9IGV4aXN0aW5nTG9va3Vwc1tpXS5uYW1lRU47XHJcbiAgICAgIGxvb2t1cE5hbWVFTi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgbG9va3VwTmFtZUVOLm1heExlbmd0aCA9IDI1NTtcclxuXHJcblxyXG4gICAgICBsZXQgbG9va3VwTmFtZUFSID0gbmV3IFRleHRCb3hPcHRpb25zKCk7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5uYW1lID0gXCJFZGl0TG9va3VwTmFtZUFSXCIgKyBpO1xyXG4gICAgICBsb29rdXBOYW1lQVIuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgbG9va3VwTmFtZUFSLnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgICAgbG9va3VwTmFtZUFSLnZhbHVlID0gZXhpc3RpbmdMb29rdXBzW2ldLm5hbWVBUjtcclxuICAgICAgbG9va3VwTmFtZUFSLmlzUmVxdWlyZWQgPSB0cnVlO1xyXG4gICAgICBsb29rdXBOYW1lQVIuZm9yY2VEaXJlY3Rpb24gPSBGb3JjZURpcmVjdGlvbi5BcmFiaWM7XHJcbiAgICAgIGxvb2t1cE5hbWVBUi5tYXhMZW5ndGggPSAyNTU7XHJcblxyXG4gICAgICBsZXQgbG9va3VwVmFsdWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgbG9va3VwVmFsdWUubmFtZSA9IFwiRWRpdExvb2t1cFZhbHVlXCIgKyBpO1xyXG4gICAgICBsb29rdXBWYWx1ZS5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICBsb29rdXBWYWx1ZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgIGxvb2t1cFZhbHVlLnZhbHVlID0gZXhpc3RpbmdMb29rdXBzW2ldLnZhbHVlO1xyXG4gICAgICBsb29rdXBWYWx1ZS5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgbG9va3VwVmFsdWUubWF4TGVuZ3RoID0gMjAwMDtcclxuXHJcbiAgICAgIG9iamVjdEF0dHJpYnV0ZU9wdGlvbnMucHVzaChsb29rdXBJRCwgbG9va3VwTmFtZUVOLCBsb29rdXBOYW1lQVIsIGxvb2t1cFZhbHVlKTtcclxuICAgICAgdGhpcy5lZGl0V0ZWYXJpYWJsZXNMb29rdXBPcHRpb25zLnB1c2gob2JqZWN0QXR0cmlidXRlT3B0aW9ucyk7XHJcbiAgICAgIHRoaXMuZWRpdExhc3RMb29rdXBJbmRleCArPSAxO1xyXG5cclxuICAgIH1cclxuICB9XHJcbiAgYWRkV0ZWYXJpYWJsZUxvb2t1cGluRWRpdE1vZGUoKSB7XHJcbiAgICBsZXQgcmVzdWx0OiBhbnkgPSB0aGlzLmluaXRpYWxpemVXRlZhcmlhYmxlTG9va3VwT3B0aW9ucyhmYWxzZSk7XHJcbiAgICB0aGlzLmVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMgPSB0aGlzLmVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnMuY29uY2F0KHJlc3VsdFswXSk7XHJcbiAgICB0aGlzLmVkaXRMYXN0TG9va3VwSW5kZXggPSByZXN1bHRbMV07XHJcbiAgfVxyXG5cclxuICAvL1dGIEFjdGl2aXRpdGllcyBGdW5jdGlvbnNcclxuICBzZXRBY3Rpdml0eUxpc3RSZXN1bHQocmVzdWx0KSB7XHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nUmVzdWx0ID0gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVdvcmtmbG93QWN0aXZpdHkoKSB7XHJcbiAgICAvLyB0aGlzLklzd29ya2Zsb3dBY3Rpdml0eUZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveCA9IG5ldyBUZXh0Qm94T3B0aW9ucygpO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94Lm5hbWUgPSBcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveC5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRUZXh0Qm94LnR5cGUgPSBJbnB1dFR5cGUuVGV4dDtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkVGV4dEJveC52YWx1ZSA9IHRoaXMuV29ya2Zsb3dJZDtcclxuXHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlciA9IG5ldyBGaWx0ZXJJdGVtKCk7XHJcbiAgICB0aGlzLldvcmtmbG93QWN0aXZpdHlJZEZpbHRlci5mb3JtQ29udHJvbE5hbWUgPSBcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLmFjdGlvblBhcmFtZXRlck5hbWUgPSBcIldmSURcIjtcclxuICAgIHRoaXMuV29ya2Zsb3dBY3Rpdml0eUlkRmlsdGVyLmlzRm9ybUNvbnRyb2wgPSB0cnVlO1xyXG4gICAgdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXIuZmlsdGVyVHlwZSA9IEZpbHRlclR5cGUuVGV4dEJveDtcclxuXHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nID0gbmV3IFBhZ2luZ09wdGlvbnMoKTtcclxuICAgIHRoaXMuQWN0aXZpdHlQYWdpbmcuYWN0aW9uUG9zdFVSTCA9IHRoaXMuQWN0aXZpdHlBcGlVcmwgKyAnR2V0V29ya2Zsb3dBY3Rpdml0eUxpc3RpbmcnO1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZy5vbktleVByZXNzRmlsdGVyc0NvbnRyb2xOYW1lcyA9IFtcIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIl07XHJcbiAgICB0aGlzLkFjdGl2aXR5UGFnaW5nLmZpbHRlcnMgPSBbdGhpcy5Xb3JrZmxvd0FjdGl2aXR5SWRGaWx0ZXJdO1xyXG4gICAgdGhpcy5BY3Rpdml0eVBhZ2luZy52YWxpZGF0aW9uVG9rZW4gPSB0aGlzLmF1dGhTZXJ2aWNlLmF1dGhvcml6YXRpb25IZWFkZXJWYWx1ZSgpO1xyXG5cclxuICAgIHRoaXMuU2hvd1dvcmtmbG93RGV0YWlscyA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc0ZpbHRlckxvYWRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5Jc1dvcmtmbG93VmFyaWFibGVGaWx0ZXJMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5Jc3dvcmtmbG93QWN0aXZpdHlGaWx0ZXJMb2FkZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSwgMTApO1xyXG5cclxuICAgIC8vdGhpcy53b3JrZmxvd0FjdGl2aXR5U2VydmljZS5Mb2FkZHJvcGRvd25zKCkuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcclxuICAgIC8vICBsZXQgQWN0aXZpdHlMaXN0ID0gcmVzdWx0IGFzIGFueVxyXG4gICAgLy8gIHRoaXMuQWN0aXZpdHlUeXBlTGlzdCA9IEFjdGl2aXR5TGlzdFxyXG5cclxuXHJcbiAgICAvL30pXHJcbiAgfVxyXG5cclxuICAvL0FkZCBBY3Rpdml0eSBXRiB2YXJpYWJsZXNcclxuICBzaG93QWRkV0ZWYXJpYWJsZXN0b0FjdGl2aXR5KHZlcnNpb25JRDogc3RyaW5nLCBhY3Rpdml0eUlEOiBzdHJpbmcsIHdmVmFyaWFibGVzTW9kYWw6IGFueSkge1xyXG4gICAgdGhpcy51dGlsaXR5U2VydmljZS5zdGFydEJsb2NrVUkoKTtcclxuICAgIHRoaXMuYWN0aXZpdHlJRCA9IGFjdGl2aXR5SUQ7XHJcbiAgICB0aGlzLmFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnMgPSBbXTtcclxuICAgIHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4ID0gMDtcclxuICAgIHRoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuZ2V0QWN0aXZpdHlXRlZhcmlhYmxlcyh2ZXJzaW9uSUQsIGFjdGl2aXR5SUQpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGxldCByZXN1bHRPYmogPSByZXN1bHQgYXMgYW55O1xyXG4gICAgICBsZXQgbW9kZWwgPSByZXN1bHRPYmoubW9kZWw7XHJcbiAgICAgIHRoaXMuYWN0aXZpdHlWYXJpYWJsZXNMaXN0ID0gcmVzdWx0T2JqLmFjdGl2aXR5VmFyaWFibGVzTGlzdDtcclxuXHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucyA9IG5ldyBGb3JtT3B0aW9ucygpO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuZm9ybUdyb3VwID0gdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm07XHJcbiAgICAgIHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9ucy5nZXRNb2RlbEZ1bmN0aW9uID0gdGhpcy5nZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eU1vZGVsO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMuc2VydmljZVN1Ym1pdEZ1bmN0aW9uID0gdGhpcy5nZXRhZGRXRlZhcmlhYmxldG9BY3Rpdml0eUZ1bmN0aW9uO1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMucGFnaW5nUmVmZXJlbmNlID0gdGhpcy5BY3Rpdml0eVBhZ2luZ1ZpZXdFbGVtZW50O1xyXG4gICAgICB0aGlzLmFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybU9wdGlvbnMucGFnaW5nQWN0aW9uTW9kZSA9IFBhZ2luZ0FjdGlvbk1vZGUuVXBkYXRlO1xyXG5cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBjdXJyZW50VmFyaWFibGUgPSBtb2RlbC5hY3Rpdml0eVZhcmlhYmxlRFRPc1tpXTtcclxuICAgICAgICBsZXQgb2JqZWN0VmFyaWFibGVPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICBsZXQgaXNTeXN0ZW06IGJvb2xlYW4gPSBjdXJyZW50VmFyaWFibGUuaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzU3lzdGVtID0gbmV3IFRleHRCb3hPcHRpb25zKCk7Ly9oaWRkZW5cclxuICAgICAgICB2YXJpYWJsZUlzU3lzdGVtLm5hbWUgPSBcInZhcmlhYmxlSXNTeXN0ZW1cIiArIGk7XHJcbiAgICAgICAgdmFyaWFibGVJc1N5c3RlbS5oaWRlTGFiZWwgPSB0cnVlO1xyXG4gICAgICAgIHZhcmlhYmxlSXNTeXN0ZW0udHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgIHZhcmlhYmxlSXNTeXN0ZW0udmFsdWUgPSBpc1N5c3RlbTtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkLm5hbWUgPSBcInZhcmlhYmxlSXNFbmFibGVkXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkLnZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzRW5hYmxlZDtcclxuICAgICAgICB2YXJpYWJsZUlzRW5hYmxlZC5pc0Rpc2FibGVkID0gaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIC8vaGlkZGVuIGZpZWxkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuLm5hbWUgPSBcInZhcmlhYmxlSXNFbmFibGVkSGlkZGVuXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuLnZhbHVlID0gY3VycmVudFZhcmlhYmxlLmlzRW5hYmxlZDtcclxuXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnkgPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeS5uYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5XCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkudmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNNYW5kYXRvcnk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeS5pc0Rpc2FibGVkID0gaXNTeXN0ZW07XHJcblxyXG4gICAgICAgIC8vaGlkZGVuIGZpZWxkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbi5uYW1lID0gXCJ2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuXCIgKyBpO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4udmFsdWUgPSBjdXJyZW50VmFyaWFibGUuaXNNYW5kYXRvcnk7XHJcblxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZS5uYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZVwiICsgaTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZS52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc1Zpc2libGU7XHJcbiAgICAgICAgdmFyaWFibGVJc1Zpc2libGUuaXNEaXNhYmxlZCA9IGlzU3lzdGVtO1xyXG5cclxuICAgICAgICAvL2hpZGRlbiBmaWVsZFxyXG4gICAgICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbiA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi5uYW1lID0gXCJ2YXJpYWJsZUlzVmlzaWJsZUhpZGRlblwiICsgaTtcclxuICAgICAgICB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbi52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pc1Zpc2libGU7XHJcblxyXG4gICAgICAgIG9iamVjdFZhcmlhYmxlT3B0aW9ucy5wdXNoKHZhcmlhYmxlSXNTeXN0ZW0sIHZhcmlhYmxlSXNFbmFibGVkLCB2YXJpYWJsZUlzRW5hYmxlZEhpZGRlbiwgdmFyaWFibGVJc01hbmRhdG9yeSwgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbixcclxuICAgICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLCB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbiwgaXNTeXN0ZW0pO1xyXG5cclxuICAgICAgICBpZiAoaXNTeXN0ZW0pIHtcclxuICAgICAgICAgIGxldCB2YXJpYWJsZU5hbWUgPSBuZXcgVGV4dEJveE9wdGlvbnMoKTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5uYW1lID0gXCJ2YXJpYWJsZU5hbWVcIiArIGk7XHJcbiAgICAgICAgICB2YXJpYWJsZU5hbWUuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS5pc0Rpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlTmFtZS50eXBlID0gSW5wdXRUeXBlLlRleHQ7XHJcbiAgICAgICAgICB2YXJpYWJsZU5hbWUudmFsdWUgPSBjdXJyZW50VmFyaWFibGUudmFyaWFibGVOYW1lO1xyXG5cclxuICAgICAgICAgIGxldCB2YXJpYWJsZUlEID0gbmV3IFRleHRCb3hPcHRpb25zKCk7Ly9oaWRkZW5cclxuICAgICAgICAgIHZhcmlhYmxlSUQubmFtZSA9IFwidmFyaWFibGVJRFwiICsgaTtcclxuICAgICAgICAgIHZhcmlhYmxlSUQuaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSUQudHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgICAgICAgdmFyaWFibGVJRC52YWx1ZSA9IGN1cnJlbnRWYXJpYWJsZS5pRF9HVUlEPy50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgICAgICAgIG9iamVjdFZhcmlhYmxlT3B0aW9ucy5wdXNoKHZhcmlhYmxlTmFtZSwgdmFyaWFibGVJRCk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGxldCB2YXJpYWJsZUlEZHJvcGRvd24gPSBuZXcgRHJvcGRvd25PcHRpb25zKCk7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24ubmFtZSA9IFwidmFyaWFibGVJRGRyb3Bkb3duXCI7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgICAgICAgdmFyaWFibGVJRGRyb3Bkb3duLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgICAgICAgIHZhcmlhYmxlSURkcm9wZG93bi5kYXRhU291cmNlID0gdGhpcy5hY3Rpdml0eVZhcmlhYmxlc0xpc3Q7XHJcbiAgICAgICAgICB2YXJpYWJsZUlEZHJvcGRvd24uc2VsZWN0ZWRJdGVtcyA9IGN1cnJlbnRWYXJpYWJsZS5pREdVSUQ/LnRvTG93ZXJDYXNlKCk7XHJcblxyXG4gICAgICAgICAgb2JqZWN0VmFyaWFibGVPcHRpb25zLnB1c2godmFyaWFibGVJRGRyb3Bkb3duKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zLnB1c2gob2JqZWN0VmFyaWFibGVPcHRpb25zKTtcclxuICAgICAgICB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleCArPSAxO1xyXG5cclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKHdmVmFyaWFibGVzTW9kYWwpO1xyXG4gICAgICB0aGlzLnV0aWxpdHlTZXJ2aWNlLnN0b3BCbG9ja1VJKCk7XHJcblxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGdldGFkZFdGVmFyaWFibGV0b0FjdGl2aXR5TW9kZWwgPSAoKSA9PiB7XHJcbiAgICBsZXQgcGFyYW1BcnJheTogYW55W10gPSBbXTtcclxuICAgIGxldCBSZXN1bHRNb2RlbCA9IHRoaXMuYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtLnZhbHVlO1xyXG4gICAgbGV0IG1vZGVsID0gbmV3IFdGQWN0aXZpdHlWYXJpYWJsZXNNb2RlbCgpO1xyXG4gICAgbW9kZWwuQWN0aXZpdHlJRF9HVUlEID0gdGhpcy5hY3Rpdml0eUlEO1xyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxhc3RBY3Rpdml0eVdGVmFyaWFibGVJbmRleDsgaisrKSB7XHJcbiAgICAgIGxldCB2YXJpYWJsZXNJc1N5c3RlbSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc1N5c3RlbVwiICsgal07XHJcbiAgICAgIGlmICh2YXJpYWJsZXNJc1N5c3RlbSA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgY29udGludWU7XHJcblxyXG4gICAgICBsZXQgdmFyaWFibGVJc0VuYWJsZWQ6IGJvb2xlYW47XHJcbiAgICAgIGxldCB2YXJpYWJsZUlzTWFuZGF0b3J5OiBib29sZWFuO1xyXG4gICAgICBsZXQgdmFyaWFibGVJc1Zpc2libGU6IGJvb2xlYW47XHJcblxyXG4gICAgICBsZXQgYWN0aXZpdHlWYXJpYWJsZTogV0ZBY3Rpdml0eVZhcmlhYmxlRFRPID0gbmV3IFdGQWN0aXZpdHlWYXJpYWJsZURUTygpO1xyXG5cclxuICAgICAgaWYgKHZhcmlhYmxlc0lzU3lzdGVtKSB7XHJcbiAgICAgICAgbGV0IHZhcmlhYmxlSUQgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSURcIiArIGpdO1xyXG4gICAgICAgIGFjdGl2aXR5VmFyaWFibGUuSURfR1VJRCA9IHZhcmlhYmxlSUQ7XHJcblxyXG4gICAgICAgIHZhcmlhYmxlSXNFbmFibGVkID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzRW5hYmxlZEhpZGRlblwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc01hbmRhdG9yeSA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc01hbmRhdG9yeUhpZGRlblwiICsgal07XHJcbiAgICAgICAgdmFyaWFibGVJc1Zpc2libGUgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuXCIgKyBqXTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgdmFyaWFibGVJRCA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJRGRyb3Bkb3duXCIgKyBqXTtcclxuICAgICAgICBhY3Rpdml0eVZhcmlhYmxlLklEX0dVSUQgPSB2YXJpYWJsZUlEO1xyXG5cclxuICAgICAgICB2YXJpYWJsZUlzRW5hYmxlZCA9IFJlc3VsdE1vZGVsW1widmFyaWFibGVJc0VuYWJsZWRcIiArIGpdO1xyXG4gICAgICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkgPSBSZXN1bHRNb2RlbFtcInZhcmlhYmxlSXNNYW5kYXRvcnlcIiArIGpdO1xyXG4gICAgICAgIHZhcmlhYmxlSXNWaXNpYmxlID0gUmVzdWx0TW9kZWxbXCJ2YXJpYWJsZUlzVmlzaWJsZVwiICsgal07XHJcbiAgICAgIH1cclxuICAgICAgYWN0aXZpdHlWYXJpYWJsZS5Jc1N5c3RlbSA9IHZhcmlhYmxlc0lzU3lzdGVtO1xyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzRW5hYmxlZCA9IHZhcmlhYmxlSXNFbmFibGVkO1xyXG4gICAgICBhY3Rpdml0eVZhcmlhYmxlLklzTWFuZGF0b3J5ID0gdmFyaWFibGVJc01hbmRhdG9yeTtcclxuICAgICAgYWN0aXZpdHlWYXJpYWJsZS5Jc1Zpc2libGUgPSB2YXJpYWJsZUlzVmlzaWJsZTtcclxuICAgICAgbW9kZWwuYWN0aXZpdHlWYXJpYWJsZURUT3MucHVzaChhY3Rpdml0eVZhcmlhYmxlKTtcclxuICAgIH1cclxuICAgIHBhcmFtQXJyYXkucHVzaChtb2RlbCk7XHJcbiAgICByZXR1cm4gcGFyYW1BcnJheTtcclxuICB9O1xyXG4gIGdldGFkZFdGVmFyaWFibGV0b0FjdGl2aXR5RnVuY3Rpb24gPSAodmFyaWFibGVzTW9kZWwpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dBY3Rpdml0eVNlcnZpY2UuYWRkQWN0aXZpdHlXRlZhcmlhYmxlcyh2YXJpYWJsZXNNb2RlbCk7XHJcbiAgfTtcclxuICBkZWxldGVBY3Rpdml0eVdGVmFyaWFibGUoZGVsZXRlZFZhcmlhYmxlOiBhbnkpIHtcclxuICAgIGxldCBkZWxldGVkVmFyaWFibGVJbmRleDogbnVtYmVyID0gdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zLmluZGV4T2YoZGVsZXRlZFZhcmlhYmxlKTtcclxuICAgIGlmIChkZWxldGVkVmFyaWFibGVJbmRleCAhPT0gLTEpIHtcclxuICAgICAgdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zLnNwbGljZShkZWxldGVkVmFyaWFibGVJbmRleCwgMSk7XHJcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGVsZXRlZFZhcmlhYmxlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdGhpcy5hZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm0ucmVtb3ZlQ29udHJvbChkZWxldGVkVmFyaWFibGVbaV0uTmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgYWRkTmV3QWN0aXZpdHlXRlZhcmlhYmxlKCkge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5sYXN0QWN0aXZpdHlXRlZhcmlhYmxlSW5kZXg7XHJcblxyXG4gICAgbGV0IG9iamVjdFZhcmlhYmxlT3B0aW9uczogYW55W10gPSBbXTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJRGRyb3Bkb3duID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLm5hbWUgPSBcInZhcmlhYmxlSURkcm9wZG93blwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlEZHJvcGRvd24uaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5zaW5nbGVTZWxlY3Rpb24gPSB0cnVlO1xyXG4gICAgdmFyaWFibGVJRGRyb3Bkb3duLmFsbG93U2VhcmNoRmlsdGVyID0gdHJ1ZTtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5pc1JlcXVpcmVkID0gdHJ1ZTtcclxuICAgIHZhcmlhYmxlSURkcm9wZG93bi5kYXRhU291cmNlID0gdGhpcy5hY3Rpdml0eVZhcmlhYmxlc0xpc3Q7XHJcblxyXG4gICAgbGV0IGlzU3lzdGVtOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNTeXN0ZW0gPSBuZXcgVGV4dEJveE9wdGlvbnMoKTsvL2hpZGRlblxyXG4gICAgdmFyaWFibGVJc1N5c3RlbS5uYW1lID0gXCJ2YXJpYWJsZUlzU3lzdGVtXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNTeXN0ZW0uaGlkZUxhYmVsID0gdHJ1ZTtcclxuICAgIHZhcmlhYmxlSXNTeXN0ZW0udHlwZSA9IElucHV0VHlwZS5UZXh0O1xyXG4gICAgdmFyaWFibGVJc1N5c3RlbS52YWx1ZSA9IGlzU3lzdGVtO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlzRW5hYmxlZCA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNFbmFibGVkLm5hbWUgPSBcInZhcmlhYmxlSXNFbmFibGVkXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNFbmFibGVkLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNFbmFibGVkSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4ubmFtZSA9IFwidmFyaWFibGVJc0VuYWJsZWRIaWRkZW5cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4udmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBsZXQgdmFyaWFibGVJc01hbmRhdG9yeSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNNYW5kYXRvcnkubmFtZSA9IFwidmFyaWFibGVJc01hbmRhdG9yeVwiICsgaW5kZXg7XHJcbiAgICB2YXJpYWJsZUlzTWFuZGF0b3J5LnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4gPSBuZXcgQ2hlY2tCb3hPcHRpb25zKCk7XHJcbiAgICB2YXJpYWJsZUlzTWFuZGF0b3J5SGlkZGVuLm5hbWUgPSBcInZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW5cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc01hbmRhdG9yeUhpZGRlbi52YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgIGxldCB2YXJpYWJsZUlzVmlzaWJsZSA9IG5ldyBDaGVja0JveE9wdGlvbnMoKTtcclxuICAgIHZhcmlhYmxlSXNWaXNpYmxlLm5hbWUgPSBcInZhcmlhYmxlSXNWaXNpYmxlXCIgKyBpbmRleDtcclxuICAgIHZhcmlhYmxlSXNWaXNpYmxlLnZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IHZhcmlhYmxlSXNWaXNpYmxlSGlkZGVuID0gbmV3IENoZWNrQm94T3B0aW9ucygpO1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGVIaWRkZW4ubmFtZSA9IFwidmFyaWFibGVJc1Zpc2libGVIaWRkZW5cIiArIGluZGV4O1xyXG4gICAgdmFyaWFibGVJc1Zpc2libGVIaWRkZW4udmFsdWUgPSBmYWxzZTtcclxuXHJcbiAgICBvYmplY3RWYXJpYWJsZU9wdGlvbnMucHVzaCh2YXJpYWJsZUlzU3lzdGVtLCB2YXJpYWJsZUlzRW5hYmxlZCwgdmFyaWFibGVJc0VuYWJsZWRIaWRkZW4sIHZhcmlhYmxlSXNNYW5kYXRvcnksIHZhcmlhYmxlSXNNYW5kYXRvcnlIaWRkZW4sXHJcbiAgICAgIHZhcmlhYmxlSXNWaXNpYmxlLCB2YXJpYWJsZUlzVmlzaWJsZUhpZGRlbiwgaXNTeXN0ZW0sIHZhcmlhYmxlSURkcm9wZG93bik7XHJcblxyXG4gICAgdGhpcy5hY3Rpdml0eVdGVmFyaWFibGVPcHRpb25zLnB1c2gob2JqZWN0VmFyaWFibGVPcHRpb25zKTtcclxuICAgIHRoaXMubGFzdEFjdGl2aXR5V0ZWYXJpYWJsZUluZGV4ICs9IDE7XHJcbiAgfVxyXG5cclxuICAvL09uIGRlc3Ryb3lcclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVxdWVzdEhhbmRsZXJTZXJ2aWNlLmRlc3Ryb3lIYW5kbGVyKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8YmxvY2stdWk+PC9ibG9jay11aT5cclxuPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZFwiPlxyXG4gIDxkaXYgY2xhc3M9XCJjYXJkIGNhcmQtY3VzdG9tLWhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cclxuICAgICAgPHVsIG5nYk5hdiAjbmF2PVwibmdiTmF2XCIgY2xhc3M9XCJuYXYgbmF2LXN0cmV0Y2ggbmF2LWxpbmUtdGFicyBuYXYtbGluZS10YWJzLTJ4IGJvcmRlci10cmFuc3BhcmVudCBmcy01IGZ3LWJvbGRlclwiPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImdldERldGFpbHMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkRldGFpbHNcIil9fTwvYT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC01IHB4LTAgIGp1c3RpZnktY29udGVudC1lbmRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJTaG93V29ya2Zsb3dEZXRhaWxzJiYhV29ya2Zsb3dEZXRhaWxzLmlzUHVibGlzaGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImJ0blB1Ymxpc2hcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLXByaW1hcnlcIiAoY2xpY2spPVwic2hvd1B1Ymxpc2hXRk1vZGFsKFdvcmtmbG93RGV0YWlscy5pRF9HVUlEKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlB1Ymxpc2hXb3JrZmxvd1wiKX19XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgPCEtLTxhIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tbGlnaHQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlByZXZpZXdcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L2E+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiRGV0YWlsc0Zvcm1cIiAqbmdJZj1cIlNob3dXb3JrZmxvd0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLU11bHRpTGluZ3VhbFRleHRCb3ggW29wdGlvbnNdPVwiTmFtZU11bHRpbGluZ3VhbFRleHRCb3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkRlc2NyaXB0aW9uTXVsdGlsaW5ndWFsVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkRldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkRldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJBY3RpdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkRldGFpbHNGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIlB1Ymxpc2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRGV0YWlsc0Zvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjogV2lkZ2V0cy9BcHBsaWNhdGlvbnMvVXNlci9Qcm9maWxlMy0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8IS0tUHVibGlzaCB3b3JrZmxvdyBjb25maXJtYXRpb24tLT5cclxuICAgICAgICAgIDxCQlNGLUNvbmZpcm1hdGlvbk1vZGFsICpuZ0lmPVwicHVibGlzaENvbnRyb2xMb2FkZWRcIiBbb3B0aW9uc109XCJwdWJsaXNoV0ZDb25maXJtYXRpb25PcHRpb25zXCIgaWQ9XCJwdWJsaXNoQ29uZmlybWF0aW9uTW9kYWxDb250cm9sXCIgI3B1Ymxpc2hDb25maXJtYXRpb25Nb2RhbENvbnRyb2w+PC9CQlNGLUNvbmZpcm1hdGlvbk1vZGFsPlxyXG5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIDxsaSBuZ2JOYXZJdGVtIGNsYXNzPVwibmF2LWl0ZW0gbXQtMlwiPlxyXG4gICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcz1cIm5hdi1saW5rIHRleHQtYWN0aXZlLXByaW1hcnkgbXMtMCBtZS0xMCBweS01XCIgKGNsaWNrKT1cImluaXRpYWxpemVWZXJzaW9uKClcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWZXJzaW9uc1wiKX19PC9hPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTUgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiV29ya2Zsb3dWZXJzaW9uRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwic2VhcmNoVGV4dEJveFwiIFtncm91cF09XCJXb3JrZmxvd1ZlcnNpb25Gb3JtXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJXb3JrZmxvd0lkVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiV29ya2Zsb3dWZXJzaW9uRm9ybVwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LTMgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpQZXJtaXNzaW9uIGxpc3QtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2hhbmdlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkN1cnJlbnRcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiUHVibGlzaGVkXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNyZWF0aW9uRGF0ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGJvZHkgaWQ9XCJsaXN0aW5nQ29udGFpbmVyXCIgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgdmVyc2lvbiBvZiBXb3JrZmxvd1ZlcnNpb25QYWdpbmdSZXN1bHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL1dvcmtmbG93cy9WZXJzaW9uSW5mbycsdmVyc2lvbi5pRF9HVUlEXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVyTGlua0FjdGl2ZT1cInJvdXRlci1saW5rLWFjdGl2ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e3ZlcnNpb24uY2hhbmdlU3RyfX08L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e3ZlcnNpb24uaXNDdXJyZW50fX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3t2ZXJzaW9uLmlzUHVibGlzaGVkfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3t2ZXJzaW9uLmNyZWF0aW9uRGF0ZX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJXb3JrZmxvd1ZlcnNpb25QYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRXb3JrZmxvd1ZlcnNpb25MaXN0UmVzdWx0KCRldmVudClcIiAqbmdJZj1cIklzRmlsdGVyTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJXb3JrZmxvd1ZlcnNpb25QYWdpbmdcIiBbZ3JvdXBdPVwiV29ya2Zsb3dWZXJzaW9uRm9ybVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI1dvcmtmbG93VmVyc2lvblBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjogV2lkZ2V0cy9BcHBsaWNhdGlvbnMvVXNlci9Qcm9maWxlMy0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJpbml0aWFsaXplV29ya2Zsb3dWYXJpYWJsZXMoKVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX08L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lciB0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXNXb3JrZmxvd1ZhcmlhYmxlRmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJXb3JrZmxvd1ZhcmlhYmxlc2VhcmNoVGV4dEJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJWZXJpc29uSWRUZXh0Qm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIldvcmtmbG93VmFyaWFibGVGb3JtXCIgW2hpZGRlbl09XCJ0cnVlXCI+PC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoQWRkV29ya2Zsb3dWYXJpYWJsZU1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXBsdXNcIj48L2k+IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6UGVybWlzc2lvbiBsaXN0LS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlN5c05hbWVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRGF0YVR5cGVcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiVmFyaWFibGVUeXBlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy01MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWN0aW9uXCIpfX08L3RoPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRib2R5IGlkPVwibGlzdGluZ0NvbnRhaW5lclwiIGNsYXNzPVwiZnctYm9sZCB0ZXh0LWdyYXktNjAwIGJvcmRlci0wXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBXb3JrZmxvd1ZhcmlhYmxlIG9mIFdvcmtmbG93VmFyaWFibGVQYWdpbmdSZXN1bHRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgY2xhc3M9XCJ0ZXh0LWRhcmtcIj57e1dvcmtmbG93VmFyaWFibGUubmFtZVN0cn19PC9hPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7e1dvcmtmbG93VmFyaWFibGUuc3lzTmFtZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57e1dvcmtmbG93VmFyaWFibGUuZGF0YVR5cGVJdGVtfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3tXb3JrZmxvd1ZhcmlhYmxlLnZhcmlhYmxlVHlwZUl0ZW19fTwvdGQ+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwoV29ya2Zsb3dWYXJpYWJsZS5pRF9HVUlELCBFZGl0V29ya2Zsb3dWYXJpYWJsZU1vZGFsKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cIldvcmtmbG93VmFyaWFibGVQYWdpbmdSZXN1bHQubGVuZ3RoID09IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1lbXB0eS1kYXRhPjwvbGliLWVtcHR5LWRhdGE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS1lbmQ6OlBlcm1pc3Npb24gbGlzdC0tPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWZvb3RlciBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtUGFnaW5nIChJdGVtcyk9XCJzZXRXb3JrZmxvd1ZhcmlhYmxlTGlzdFJlc3VsdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIklzV29ya2Zsb3dWYXJpYWJsZUZpbHRlckxvYWRlZFwiIFtvcHRpb25zXT1cIldvcmtmbG93VmFyaWFibGVQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiICNXb3JrZmxvd1ZhcmlhYmxlUGFnaW5nVmlld0VsZW1lbnQ+XHJcbiAgICAgICAgICAgICAgICA8L0JCU0YtUGFnaW5nPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1lbmQ6OiBXaWRnZXRzL0FwcGxpY2F0aW9ucy9Vc2VyL1Byb2ZpbGUzLS0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tIEFkZCBNb2RhbCAtLT5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNBZGRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkFkZFwiKX19IHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVcIil9fVxyXG4gICAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybU9wdGlvbnNcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1NdWx0aUxpbmd1YWxUZXh0Qm94IFtvcHRpb25zXT1cIkFkZFdGVmFyaWFibGVOYW1lXCIgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkFkZFdGVmFyaWFibGVTeXNOYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgKE9uQ2hhbmdlKT1cIldGVmFyaWFibGVUeXBlT25DaGFuZ2UoJGV2ZW50LHRydWUpXCIgW29wdGlvbnNdPVwiQWRkV0ZWYXJpYWJsZURhdGFUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRvZ2dsZXNsaWRlIFtvcHRpb25zXT1cIkFkZFdGVmFyaWFibGVDb25zdGFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ub2dnbGVzbGlkZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqbmdJZj1cInNob3dBZGRMb29rdXBzVGFibGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBiZWdpbjo6VGFibGUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgdGFibGUtcm93LWRhc2hlZCBmcy02IGd5LTUgZGF0YVRhYmxlIG5vLWZvb3RlciB0YWJsZS13LWNvbnRyb2xcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInRleHQtc3RhcnQgdGV4dC1ncmF5LTQwMCBmdy1ib2xkZXIgZnMtNyB0ZXh0LXVwcGVyY2FzZSBncy0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIk5hbWVFTlwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZUFSXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWYWx1ZVwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmdy1ib2xkIHRleHQtZ3JheS02MDAgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhZGRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJBZGRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cIkFkZFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVGV4dEJveCBbb3B0aW9uc109XCJvcHRpb25bMl1cIiBbZ3JvdXBdPVwiQWRkV29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImJ0biBidG4taWNvbiBidG4tbGlnaHQtZGFuZ2VyIGJ0bi1zbVwiIChjbGljayk9XCJkZWxldGVXRlZhcmlhYmxlTG9va3VwKG9wdGlvbix0cnVlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInctMTAwIGJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJhZGRXRlZhcmlhYmxlTG9va3VwaW5BZGRNb2RlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGROZXdSZWNvcmRcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwdC03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAjQ2xvc2VXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgaWQ9XCJDbG9zZVdvcmtmbG93VmFyaWFibGVNb2RhbFwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tbGlnaHQgbWUtMyBidG4tc21cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQ2FuY2VsTGFiZWxcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlNhdmVMYWJlbFwiKX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLUZvcm0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICA8IS0tRWRpdCBNb2RhbC0tPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI0VkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgbGV0LW1vZGFsPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXIgcGItMCBib3JkZXItMCBqdXN0aWZ5LWNvbnRlbnQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiIGlkPVwiZXhhbXBsZU1vZGFsTGFiZWxcIj48L2g1PlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLWljb24gYnRuLWFjdGl2ZS1jb2xvci1wcmltYXJ5XCIgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN2Zy1pY29uIHN2Zy1pY29uLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBbaW5saW5lU1ZHXT1cIicuL3NyYy9hc3NldHMvaW1hZ2VzL2FycjA2MS5zdmcnXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keSBzY3JvbGwteSBweC0xMCBweC1sZy0xNSBwdC0wIHBiLTE1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMTMgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGgxIGNsYXNzPVwibWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkVkaXRcIil9fSB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlXCIpfX1cclxuICAgICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPEJCU0YtRm9ybSBbb3B0aW9uc109XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1PcHRpb25zXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtTXVsdGlMaW5ndWFsVGV4dEJveCBbb3B0aW9uc109XCJFZGl0V0ZWYXJpYWJsZU5hbWVcIiBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+PC9CQlNGLU11bHRpTGluZ3VhbFRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIkVkaXRXRlZhcmlhYmxlU3lzTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLURyb3Bkb3duTGlzdCAoT25DaGFuZ2UpPVwiV0ZWYXJpYWJsZVR5cGVPbkNoYW5nZSgkZXZlbnQsZmFsc2UpXCIgW29wdGlvbnNdPVwiRWRpdFdGVmFyaWFibGVEYXRhVHlwZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLURyb3Bkb3duTGlzdD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPEJCU0YtVG9nZ2xlc2xpZGUgW29wdGlvbnNdPVwiRWRpdFdGVmFyaWFibGVDb25zdGFudFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ3JvdXBdPVwiRWRpdFdvcmtmbG93VmFyaWFibGVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVG9nZ2xlc2xpZGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKm5nSWY9XCJzaG93RWRpdExvb2t1cHNUYWJsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJlZ2luOjpUYWJsZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFsaWduLW1pZGRsZSB0YWJsZS1yb3ctZGFzaGVkIGZzLTYgZ3ktNSBkYXRhVGFibGUgbm8tZm9vdGVyIHRhYmxlLXctY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwidGV4dC1zdGFydCB0ZXh0LWdyYXktNDAwIGZ3LWJvbGRlciBmcy03IHRleHQtdXBwZXJjYXNlIGdzLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTmFtZUVOXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJOYW1lQVJcIil9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJtaW4tdy0xNTBweFwiPnt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIlZhbHVlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGVkaXRXRlZhcmlhYmxlc0xvb2t1cE9wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJFZGl0V29ya2Zsb3dWYXJpYWJsZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzFdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzNdXCIgW2dyb3VwXT1cIkVkaXRXb3JrZmxvd1ZhcmlhYmxlRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZVdGVmFyaWFibGVMb29rdXAob3B0aW9uLGZhbHNlKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiIGZhIGZhLXRyYXNoIGhpZGRlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cInctMTAwIGJ0biBidG4tc3VjY2Vzc1wiIChjbGljayk9XCJhZGRXRlZhcmlhYmxlTG9va3VwaW5FZGl0TW9kZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkTmV3UmVjb3JkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB0LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICNDbG9zZUVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWwgaWQ9XCJDbG9zZUVkaXRXb3JrZmxvd1ZhcmlhYmxlTW9kYWxcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1Gb3JtPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgICA8bGkgbmdiTmF2SXRlbSBjbGFzcz1cIm5hdi1pdGVtIG10LTJcIj5cclxuICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3M9XCJuYXYtbGluayB0ZXh0LWFjdGl2ZS1wcmltYXJ5IG1zLTAgbWUtMTAgcHktNVwiIChjbGljayk9XCJpbml0aWFsaXplV29ya2Zsb3dBY3Rpdml0eSgpXCI+XHJcbiAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93QWN0aXZpdGllc1wiKX19XHJcbiAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLTAgcHQtNSBweC0wXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWNvbnRhaW5lciB0ZXh0LWRhcmtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImZpbHRlcnNDb250YWluZXJcIiBkYXRhLWlzbG9hZGVkPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtvcHRpb25zXT1cIldvcmtmbG93QWN0aXZpdHlJZFRleHRCb3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiIFtoaWRkZW5dPVwidHJ1ZVwiPjwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdG9vbGJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0aXRsZT1cIkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1zbVwiIFtyb3V0ZXJMaW5rXT1cIlsnL0FkbWluL1dvcmtmbG93cy9BZGRBY3Rpdml0eScsVmVyc2lvbklkXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiPjwvaT4ge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkXCIpfX1cclxuXHJcbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS0zIHB4LTBcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy02IG1iLThcIiAqbmdGb3I9XCJsZXQgd29ya2Zsb3dBY3Rpdml0eSBvZiBBY3Rpdml0eVBhZ2luZ1Jlc3VsdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkIGJnLWxpZ2h0LWRhcmsgcm91bmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci0wIHB0LTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtdGl0bGUgbS0wIGZzLTIgdGV4dC1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3t3b3JrZmxvd0FjdGl2aXR5LnR5cGVOYW1lU3RyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gbWUtMiBcIiAoY2xpY2spPVwic2hvd0FkZFdGVmFyaWFibGVzdG9BY3Rpdml0eSh3b3JrZmxvd0FjdGl2aXR5LnZlcnNpb25JRF9HVUlELHdvcmtmbG93QWN0aXZpdHkuaURfR1VJRCx3ZkFjdGl2aXR5VmFyaWFibGVzTW9kYWwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWdlYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIldvcmtmbG93VmFyaWFibGVzXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBpZD1cImJ0bkFkZFwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodC1wcmltYXJ5IGJ0bi1zbSBidG4taWNvbiBtZS0yXCIgW3JvdXRlckxpbmtdPVwiWycvQWRtaW4vV29ya2Zsb3dzL0VkaXRBY3Rpdml0eScsd29ya2Zsb3dBY3Rpdml0eS5pRF9HVUlEXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJ3b3JrZmxvd0FjdGl2aXR5LmlzUHVibGlzaGVkXCIgY2xhc3M9XCJmYXMgZmEtcGVuXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhd29ya2Zsb3dBY3Rpdml0eS5pc1B1Ymxpc2hlZFwiIGNsYXNzPVwiZmFzIGZhLXBlblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy02IGZ3LWJvbGRlciB0ZXh0LWRhcmtcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXRk91dGNvbWVcIil9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTQwMCBmdy1ib2xkIGZzLTUgbXQtMSBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiV29ya2Zsb3dWYXJpYWJsZXNcIil9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgaWQ9XCJob3Jpem9udGFsbWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtZGFya1wiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHdvcmtmbG93QWN0aXZpdHkudmFyaWFibGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWdlYXJcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW0uc3lzTmFtZX19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygd29ya2Zsb3dBY3Rpdml0eS5vdXRjb21lc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5uYW1lRU4gfX06IHt7aXRlbS5uZXh0QWN0dml0eU5hbWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6IENhcmQgYm9keS0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1mb290ZXIgYm9yZGVyLTBcIj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLVBhZ2luZyAoSXRlbXMpPVwic2V0QWN0aXZpdHlMaXN0UmVzdWx0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiSXN3b3JrZmxvd0FjdGl2aXR5RmlsdGVyTG9hZGVkXCIgW29wdGlvbnNdPVwiQWN0aXZpdHlQYWdpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtncm91cF09XCJ3b3JrZmxvd0FjdGl2aXR5Rm9ybVwiICNBY3Rpdml0eVBhZ2luZ1ZpZXdFbGVtZW50PlxyXG4gICAgICAgICAgICAgICAgPC9CQlNGLVBhZ2luZz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8IS0tZW5kOjogV2lkZ2V0cy9BcHBsaWNhdGlvbnMvVXNlci9Qcm9maWxlMy0tPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjd2ZBY3Rpdml0eVZhcmlhYmxlc01vZGFsIGxldC1tb2RhbD5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHBiLTAgYm9yZGVyLTAganVzdGlmeS1jb250ZW50LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cImV4YW1wbGVNb2RhbExhYmVsXCI+PC9oNT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtZGlzbWlzcz1cIm1vZGFsXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1pY29uIGJ0bi1hY3RpdmUtY29sb3ItcHJpbWFyeVwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBzdmctaWNvbi0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubGluZVNWR109XCInLi9zcmMvYXNzZXRzL2ltYWdlcy9hcnIwNjEuc3ZnJ1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWJvZHkgc2Nyb2xsLXkgcHgtMTAgcHgtbGctMTUgcHQtMCBwYi0xNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTEzIHRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm1iLTNcIj5cclxuICAgICAgICAgICAgICAgICAgICB7e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJBZGRXb3JrZmxvd1ZhcmlhYmxlc1wiKX19XHJcbiAgICAgICAgICAgICAgICAgIDwvaDE+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxCQlNGLUZvcm0gW29wdGlvbnNdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYmVnaW46OlRhYmxlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIHRhYmxlLXJvdy1kYXNoZWQgZnMtNiBneS01IGRhdGFUYWJsZSBuby1mb290ZXIgdGFibGUtdy1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJ0ZXh0LXN0YXJ0IHRleHQtZ3JheS00MDAgZnctYm9sZGVyIGZzLTcgdGV4dC11cHBlcmNhc2UgZ3MtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJXb3JrZmxvd1ZhcmlhYmxlc1wiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiRW5hYmxlZFwiKX19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cIm1pbi13LTE1MHB4XCI+e3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiTWFuZGF0b3J5XCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJWaXNpYmxlXCIpfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwibWluLXctMTUwcHhcIj48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keSBjbGFzcz1cImZ3LWJvbGQgdGV4dC1ncmF5LTYwMCBib3JkZXItMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFjdGl2aXR5V0ZWYXJpYWJsZU9wdGlvbnM7bGV0IGk9aW5kZXg7XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taGlkZGVuIGlzIHN5c3RlbS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvblswXVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLVRleHRCb3g+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taWYgaXMgc3lzdG0tLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm9wdGlvbls3XTtlbHNlIHZhcmlhYmxlTmFtZURETDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tdmFyaWF2bGUgbmFtZS0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLVRleHRCb3ggW29wdGlvbnNdPVwib3B0aW9uWzhdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1UZXh0Qm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1oaWRkZW4gdmFyaWFibGUgaWQtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1UZXh0Qm94IFtoaWRkZW5dPVwidHJ1ZVwiIFtvcHRpb25zXT1cIm9wdGlvbls5XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtVGV4dEJveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS12YXJpYXZsZSBuYW1lIGRkbC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ZhcmlhYmxlTmFtZURETD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1Ecm9wZG93bkxpc3QgW29wdGlvbnNdPVwib3B0aW9uWzhdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1Ecm9wZG93bkxpc3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taXMgZW5hYmxlZC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbb3B0aW9uc109XCJvcHRpb25bMV1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPEJCU0YtQ2hlY2tCb3ggW2hpZGRlbl09XCJ0cnVlXCIgW29wdGlvbnNdPVwib3B0aW9uWzJdXCIgW2dyb3VwXT1cImFkZFdvcmtmbG93VmFyaWFibGV0b0FjdGl2aXR5Rm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JCU0YtQ2hlY2tCb3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0taXMgbWFuZGF0b3J5LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvblszXVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bNF1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pcyB2aXNpYmxlLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxCQlNGLUNoZWNrQm94IFtvcHRpb25zXT1cIm9wdGlvbls1XVwiIFtncm91cF09XCJhZGRXb3JrZmxvd1ZhcmlhYmxldG9BY3Rpdml0eUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9CQlNGLUNoZWNrQm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QkJTRi1DaGVja0JveCBbaGlkZGVuXT1cInRydWVcIiBbb3B0aW9uc109XCJvcHRpb25bNl1cIiBbZ3JvdXBdPVwiYWRkV29ya2Zsb3dWYXJpYWJsZXRvQWN0aXZpdHlGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvQkJTRi1DaGVja0JveD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1pZiAhIGlzU3lzdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiIW9wdGlvbls3XVwiIGNsYXNzPVwiYnRuIGJ0bi1pY29uIGJ0bi1saWdodC1kYW5nZXIgYnRuLXNtXCIgKGNsaWNrKT1cImRlbGV0ZUFjdGl2aXR5V0ZWYXJpYWJsZShvcHRpb24pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCIgZmEgZmEtdHJhc2ggaGlkZGVuXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCI1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwidy0xMDAgYnRuIGJ0bi1zdWNjZXNzXCIgKGNsaWNrKT1cImFkZE5ld0FjdGl2aXR5V0ZWYXJpYWJsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t1dGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKFwiQWRkTmV3UmVjb3JkXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgcHQtN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gIG1lLTNcIiBkYXRhLWRpc21pc3M9XCJtb2RhbFwiIChjbGljayk9XCJtb2RhbC5kaXNtaXNzKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7dXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZShcIkNhbmNlbExhYmVsXCIpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIj57e3V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJTYXZlTGFiZWxcIil9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvQkJTRi1Gb3JtPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9saT5cclxuICAgICAgPC91bD5cclxuICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiPjwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuIl19