@rangertechnologies/ngnxt 2.1.94 → 2.1.96

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 (84) hide show
  1. package/README.md +26 -26
  2. package/esm2022/lib/ar.i18n.mjs +1 -1
  3. package/esm2022/lib/components/button/nxt-button.component.mjs +130 -0
  4. package/esm2022/lib/components/custom-button/custom-button.component.mjs +3 -3
  5. package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +3 -3
  6. package/esm2022/lib/components/custom-date/custom-date.component.mjs +3 -3
  7. package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +3 -3
  8. package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +3 -3
  9. package/esm2022/lib/components/custom-image/custom-image.component.mjs +1 -1
  10. package/esm2022/lib/components/custom-input/custom-input.component.mjs +3 -3
  11. package/esm2022/lib/components/custom-label/custom-label.component.mjs +3 -3
  12. package/esm2022/lib/components/custom-model/custom-model.component.mjs +3 -3
  13. package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +3 -3
  14. package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +3 -3
  15. package/esm2022/lib/components/custom-table/custom-table.component.mjs +3 -3
  16. package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +3 -3
  17. package/esm2022/lib/components/custom-time/custom-time.component.mjs +3 -3
  18. package/esm2022/lib/components/datatable/datatable.component.mjs +785 -0
  19. package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +3 -3
  20. package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +3 -3
  21. package/esm2022/lib/components/file-upload/file-upload.component.mjs +3 -3
  22. package/esm2022/lib/components/file-view/file-view.component.mjs +3 -3
  23. package/esm2022/lib/components/loader/loader.component.mjs +3 -3
  24. package/esm2022/lib/components/pagination/pagination.component.mjs +100 -0
  25. package/esm2022/lib/components/pick-location/pick-location.component.mjs +3 -3
  26. package/esm2022/lib/components/search-box/search-box.component.mjs +3 -3
  27. package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +3 -3
  28. package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +1 -1
  29. package/esm2022/lib/en.i18n.mjs +1 -1
  30. package/esm2022/lib/i18n-config.service.mjs +1 -1
  31. package/esm2022/lib/i18n.component.mjs +19 -19
  32. package/esm2022/lib/i18n.module.mjs +1 -1
  33. package/esm2022/lib/i18n.pipe.mjs +1 -1
  34. package/esm2022/lib/i18n.service.mjs +1 -1
  35. package/esm2022/lib/interfaces/actionMeta.mjs +1 -1
  36. package/esm2022/lib/interfaces/apimeta.mjs +1 -1
  37. package/esm2022/lib/interfaces/dependencyMeta.mjs +1 -1
  38. package/esm2022/lib/model/bookletWrapper.mjs +1 -1
  39. package/esm2022/lib/model/changeWrapper.mjs +1 -1
  40. package/esm2022/lib/model/errorWrapper.mjs +1 -1
  41. package/esm2022/lib/model/tableWrapper.mjs +1 -1
  42. package/esm2022/lib/nxt-app.component.mjs +9 -9
  43. package/esm2022/lib/nxt-app.module.mjs +1 -1
  44. package/esm2022/lib/nxt-app.service.mjs +1 -1
  45. package/esm2022/lib/pages/booklet/booklet.component.mjs +3 -3
  46. package/esm2022/lib/pages/builder/element/element.component.mjs +3 -3
  47. package/esm2022/lib/pages/builder/form/form.component.mjs +3 -3
  48. package/esm2022/lib/pages/builder/menu/menu.component.mjs +3 -3
  49. package/esm2022/lib/pages/builder/properties/properties.component.mjs +3 -3
  50. package/esm2022/lib/pages/questionbook/questionbook.component.mjs +3 -3
  51. package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +3 -3
  52. package/esm2022/lib/pages/summary-page/summary-page.component.mjs +3 -3
  53. package/esm2022/lib/pipe/date/date.pipe.mjs +28 -0
  54. package/esm2022/lib/pipe/editColumnCheck/edit-column-check.pipe.mjs +28 -0
  55. package/esm2022/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.mjs +20 -0
  56. package/esm2022/lib/pipe/editColumnType/edit-column-type.pipe.mjs +20 -0
  57. package/esm2022/lib/pipe/get-value.pipe.mjs +1 -1
  58. package/esm2022/lib/pipe/search-filter/search-filter.pipe.mjs +39 -0
  59. package/esm2022/lib/pipe/time/time.pipe.mjs +26 -0
  60. package/esm2022/lib/services/change.service.mjs +1 -1
  61. package/esm2022/lib/services/data.service.mjs +1 -1
  62. package/esm2022/lib/services/form-builder.service.mjs +1 -1
  63. package/esm2022/lib/services/salesforce.service.mjs +1 -1
  64. package/esm2022/lib/services/shared.service.mjs +1 -1
  65. package/esm2022/lib/services/storage.service.mjs +1 -1
  66. package/esm2022/lib/tam.i18n.mjs +1 -1
  67. package/esm2022/lib/wrapper.mjs +1 -1
  68. package/esm2022/public-api.mjs +3 -1
  69. package/fesm2022/rangertechnologies-ngnxt.mjs +1223 -87
  70. package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
  71. package/lib/components/button/nxt-button.component.d.ts +38 -0
  72. package/lib/components/datatable/datatable.component.d.ts +130 -0
  73. package/lib/components/pagination/pagination.component.d.ts +36 -0
  74. package/lib/pipe/date/date.pipe.d.ts +7 -0
  75. package/lib/pipe/editColumnCheck/edit-column-check.pipe.d.ts +7 -0
  76. package/lib/pipe/editColumnDropdown/edit-column-dropdown.pipe.d.ts +7 -0
  77. package/lib/pipe/editColumnType/edit-column-type.pipe.d.ts +7 -0
  78. package/lib/pipe/search-filter/search-filter.pipe.d.ts +8 -0
  79. package/lib/pipe/time/time.pipe.d.ts +7 -0
  80. package/package.json +1 -1
  81. package/public-api.d.ts +1 -0
  82. package/rangertechnologies-ngnxt-2.1.96.tgz +0 -0
  83. package/src/lib/style.css +1826 -1820
  84. package/rangertechnologies-ngnxt-2.1.94.tgz +0 -0
package/README.md CHANGED
@@ -1,27 +1,27 @@
1
- # ngNXT
2
- ## Installation
3
- `npm i @rangertechnologies/ngnxt --save`
4
-
5
- If the installation is giving you an error try with npm i @rangertechnologies/ngnxt —force
6
-
7
- Once the installation is successful, To check go to package.json file and search for @ranger you will get to see the below line with the latest version
8
-
9
- "@rangertechnologies/ngnxt": "version_number",
10
-
11
- ## Usage Instructions
12
- * Module Import
13
- Import NxtAppModule in the ts component where you are going to use NxtApp. To import,
14
-
15
- `import { NxtAppModule } from '@rangertechnologies/ngnxt';`
16
-
17
- Add NxtAppModule under imports: [NxtAppModule]
18
-
19
- * HTML Element
20
- `<lib-booklet [bookletJSON]="nxtJSON" (handleBookletActionEvent)="nxtFormHandler($event)" ></lib-booklet>`
21
-
22
- The values/actions you need to take care of
23
- - nxtJSON
24
- - nxtFormHandler
25
-
26
- ## Documentation
1
+ # ngNXT
2
+ ## Installation
3
+ `npm i @rangertechnologies/ngnxt --save`
4
+
5
+ If the installation is giving you an error try with npm i @rangertechnologies/ngnxt —force
6
+
7
+ Once the installation is successful, To check go to package.json file and search for @ranger you will get to see the below line with the latest version
8
+
9
+ "@rangertechnologies/ngnxt": "version_number",
10
+
11
+ ## Usage Instructions
12
+ * Module Import
13
+ Import NxtAppModule in the ts component where you are going to use NxtApp. To import,
14
+
15
+ `import { NxtAppModule } from '@rangertechnologies/ngnxt';`
16
+
17
+ Add NxtAppModule under imports: [NxtAppModule]
18
+
19
+ * HTML Element
20
+ `<lib-booklet [bookletJSON]="nxtJSON" (handleBookletActionEvent)="nxtFormHandler($event)" ></lib-booklet>`
21
+
22
+ The values/actions you need to take care of
23
+ - nxtJSON
24
+ - nxtFormHandler
25
+
26
+ ## Documentation
27
27
  For more information, you can visit https://docs.rangernxt.com
@@ -26,4 +26,4 @@ const arI18n = {
26
26
  currentTheme: "rtl",
27
27
  };
28
28
  export default arI18n;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXIuaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9hci5pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sTUFBTSxHQUFHO0lBQ1gsUUFBUSxFQUFFLE9BQU87SUFDakIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLE9BQU87SUFDZixVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsY0FBYztJQUMzQixVQUFVLEVBQUUsU0FBUztJQUNyQixtQkFBbUIsRUFBRSxvQkFBb0I7SUFDekMsZ0JBQWdCLEVBQUUsWUFBWTtJQUM5Qiw0QkFBNEI7SUFDNUIsMkJBQTJCO0lBQzNCLG1CQUFtQjtJQUNuQiwrQkFBK0I7SUFDL0IsVUFBVSxFQUFFLFFBQVE7SUFDcEIsVUFBVSxFQUFFLGFBQWE7SUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxvQ0FBb0M7SUFDdkQsZ0JBQWdCLEVBQUUsZUFBZTtJQUNqQyxNQUFNLEVBQUUsTUFBTTtJQUNkLEdBQUcsRUFBRSxNQUFNO0lBQ1gsVUFBVSxFQUFFLFFBQVE7SUFDcEIsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsWUFBWSxFQUFFLGFBQWE7SUFDM0IsYUFBYSxFQUFFLGNBQWM7SUFDN0IscUJBQXFCLEVBQUUsb0JBQW9CO0lBQzNDLFlBQVksRUFBRSxLQUFLO0NBQ3RCLENBQUE7QUFFRCxlQUFlLE1BQU0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGFySTE4biA9IHtcclxuICAgIHJlcXVpcmVkOiBcItmF2LfZhNmI2KhcIixcclxuICAgIGFkZE1vcmU6IFwi2KPYttmBINin2YTZhdiy2YrYr1wiLFxyXG4gICAgc2VsZWN0OiBcItmK2K7Yqtin2LFcIixcclxuICAgIGF0dGFjaG1lbnQ6IFwi2YXYsdmB2YJcIixcclxuICAgIGNob29zZUZpbGVzOiBcItin2K7YqtixINin2YTZhdmE2YHYp9iqXCIsXHJcbiAgICB1cGxvYWRGaWxlOiBcItix2YHYuSDZhdmE2YFcIixcclxuICAgIHRoaXNGaWVsZElzUmVxdWlyZWQ6IFwi2YfYsNmHINin2YTYrtin2YbYqSDZhdi32YTZiNio2YcuXCIsXHJcbiAgICBwaWNrWW91ckxvY2F0aW9uOiBcItin2K7YqtixINmF2YjZgti52YNcIixcclxuICAgIC8vIGZpcnN0TmFtZTogXCLYp9mE2KfYs9mFINin2YTYo9mI2YRcIixcclxuICAgIC8vIGxhc3ROYW1lOiBcItin2LPZhSDYp9mE2LnYp9im2YTYqVwiLFxyXG4gICAgLy8gZGl2aXNpb246IFwi2YLYs9mFXCIsXHJcbiAgICAvLyBudW1iZXJQbGF0ZTogXCLZhNmI2K3YqSDYp9mE2KPYsdmC2KfZhVwiLFxyXG4gICAgY2FsaWJyYXRlZDogXCLZhdi52KfZitix2KlcIixcclxuICAgIGVudGVyVmFsdWU6IFwi2KPYr9iu2YQg2KfZhNmC2YrZhdipXCIsXHJcbiAgICBkZXRhaWxzOiBcItiq2YHYp9i12YrZhFwiLCAvLyBIQSAyMEZFQjI0IFBUVyBkZXRhaWxzIHRvIERldGFpbHNcclxuICAgIHBsZWFzZU1ha2VDaG9pY2U6IFwi2YrYsdis2Ykg2KfZhNin2K7YqtmK2KfYsVwiLFxyXG4gICAgYXR0YWNoOiBcItmK2LHYqNi3XCIsXHJcbiAgICBhZGQ6IFwi2YrYttmK2YFcIixcclxuICAgIHplcm9PZlplcm86IFwiMCDZhdmGIDBcIixcclxuICAgIHNlbGVjdERhdGU6IFwi2K3Yr9ivINiq2KfYsdmK2K5cIixcclxuICAgIHRvQnV5VGlja2V0OiBcItmE2LTYsdin2KEg2KrYsNmD2LHYqVwiLFxyXG4gICAgcGlja0xvY2F0aW9uOiBcItin2K7YqtixINin2YTZhdmI2YLYuVwiLFxyXG4gICAgZW50ZXJMb2NhdGlvbjogXCLYpdiv2K7Yp9mEINin2YTYr9mI2YTYqVwiLFxyXG4gICAgc2VhcmNoTmVhcmVzdExvY2F0aW9uOiBcItin2YTYqNit2Ksg2LnZhiDYo9mC2LHYqCDZhdmI2YLYuVwiLFxyXG4gICAgY3VycmVudFRoZW1lOiBcInJ0bFwiLFxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBhckkxOG47Il19
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXIuaTE4bi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9hci5pMThuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sTUFBTSxHQUFHO0lBQ1gsUUFBUSxFQUFFLE9BQU87SUFDakIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLE9BQU87SUFDZixVQUFVLEVBQUUsTUFBTTtJQUNsQixXQUFXLEVBQUUsY0FBYztJQUMzQixVQUFVLEVBQUUsU0FBUztJQUNyQixtQkFBbUIsRUFBRSxvQkFBb0I7SUFDekMsZ0JBQWdCLEVBQUUsWUFBWTtJQUM5Qiw0QkFBNEI7SUFDNUIsMkJBQTJCO0lBQzNCLG1CQUFtQjtJQUNuQiwrQkFBK0I7SUFDL0IsVUFBVSxFQUFFLFFBQVE7SUFDcEIsVUFBVSxFQUFFLGFBQWE7SUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxvQ0FBb0M7SUFDdkQsZ0JBQWdCLEVBQUUsZUFBZTtJQUNqQyxNQUFNLEVBQUUsTUFBTTtJQUNkLEdBQUcsRUFBRSxNQUFNO0lBQ1gsVUFBVSxFQUFFLFFBQVE7SUFDcEIsVUFBVSxFQUFFLFdBQVc7SUFDdkIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsWUFBWSxFQUFFLGFBQWE7SUFDM0IsYUFBYSxFQUFFLGNBQWM7SUFDN0IscUJBQXFCLEVBQUUsb0JBQW9CO0lBQzNDLFlBQVksRUFBRSxLQUFLO0NBQ3RCLENBQUE7QUFFRCxlQUFlLE1BQU0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGFySTE4biA9IHtcbiAgICByZXF1aXJlZDogXCLZhdi32YTZiNioXCIsXG4gICAgYWRkTW9yZTogXCLYo9i22YEg2KfZhNmF2LLZitivXCIsXG4gICAgc2VsZWN0OiBcItmK2K7Yqtin2LFcIixcbiAgICBhdHRhY2htZW50OiBcItmF2LHZgdmCXCIsXG4gICAgY2hvb3NlRmlsZXM6IFwi2KfYrtiq2LEg2KfZhNmF2YTZgdin2KpcIixcbiAgICB1cGxvYWRGaWxlOiBcItix2YHYuSDZhdmE2YFcIixcbiAgICB0aGlzRmllbGRJc1JlcXVpcmVkOiBcItmH2LDZhyDYp9mE2K7Yp9mG2Kkg2YXYt9mE2YjYqNmHLlwiLFxuICAgIHBpY2tZb3VyTG9jYXRpb246IFwi2KfYrtiq2LEg2YXZiNmC2LnZg1wiLFxuICAgIC8vIGZpcnN0TmFtZTogXCLYp9mE2KfYs9mFINin2YTYo9mI2YRcIixcbiAgICAvLyBsYXN0TmFtZTogXCLYp9iz2YUg2KfZhNi52KfYptmE2KlcIixcbiAgICAvLyBkaXZpc2lvbjogXCLZgtiz2YVcIixcbiAgICAvLyBudW1iZXJQbGF0ZTogXCLZhNmI2K3YqSDYp9mE2KPYsdmC2KfZhVwiLFxuICAgIGNhbGlicmF0ZWQ6IFwi2YXYudin2YrYsdipXCIsXG4gICAgZW50ZXJWYWx1ZTogXCLYo9iv2K7ZhCDYp9mE2YLZitmF2KlcIixcbiAgICBkZXRhaWxzOiBcItiq2YHYp9i12YrZhFwiLCAvLyBIQSAyMEZFQjI0IFBUVyBkZXRhaWxzIHRvIERldGFpbHNcbiAgICBwbGVhc2VNYWtlQ2hvaWNlOiBcItmK2LHYrNmJINin2YTYp9iu2KrZitin2LFcIixcbiAgICBhdHRhY2g6IFwi2YrYsdio2LdcIixcbiAgICBhZGQ6IFwi2YrYttmK2YFcIixcbiAgICB6ZXJvT2ZaZXJvOiBcIjAg2YXZhiAwXCIsXG4gICAgc2VsZWN0RGF0ZTogXCLYrdiv2K8g2KrYp9ix2YrYrlwiLFxuICAgIHRvQnV5VGlja2V0OiBcItmE2LTYsdin2KEg2KrYsNmD2LHYqVwiLFxuICAgIHBpY2tMb2NhdGlvbjogXCLYp9iu2KrYsSDYp9mE2YXZiNmC2LlcIixcbiAgICBlbnRlckxvY2F0aW9uOiBcItil2K/Yrtin2YQg2KfZhNiv2YjZhNipXCIsXG4gICAgc2VhcmNoTmVhcmVzdExvY2F0aW9uOiBcItin2YTYqNit2Ksg2LnZhiDYo9mC2LHYqCDZhdmI2YLYuVwiLFxuICAgIGN1cnJlbnRUaGVtZTogXCJydGxcIixcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXJJMThuOyJdfQ==
@@ -0,0 +1,130 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ export class NxtButtonComponent {
6
+ elementRef;
7
+ buttonValue = ''; //SKS24JAN25 button text
8
+ buttonType = 'primary'; //SKS24JAN25 If the button type is 'text-only', it should display only the text without a border or outline. For 'grey-text', the button should have a border and a background color, but the text color should be gray, similar to 'blue-text'
9
+ type = 'button'; //SKS24JAN25 The button types are "button," "group," and "dropdown."
10
+ buttonDisable = false; //SKS24JAN25 use this input to disable a button when needed.
11
+ fcBtnBgColor = ''; // Use this input to set a custom background color for the button.
12
+ fcBtnBorder = ''; // Use this input to set a custom border style for the button.
13
+ fcBtnTextColor = ''; // Use this input to set a custom text color for the button.
14
+ fcBtnHeight = ''; // Use this input to set a custom height for the button.
15
+ fcBtnWidth = ''; // Use this input to set a custom width for the button.
16
+ fcBtnIconLeftSrc = ''; // Use this input to set the source of the left-side icon for the button.
17
+ fcBtnIconRightSrc = ''; // Use this input to set the source of the right-side icon for the button.
18
+ fcBtnHoverBgColor = ''; // Use this input to set the background color of the button on hover.
19
+ fcBtnHoverTextColor = ''; // Use this input to set the text color of the button on hover.
20
+ fcBtnId = 'default'; // Use this input to set a custom ID for the button. Default is 'default'.
21
+ dataDismiss = ''; // Use this input to specify the dismiss action for the button (e.g., 'modal' to close a modal).
22
+ fcButtonBorder = '0px'; // Use this input to set the border size of the button. Default is '0px' for no border.
23
+ modalToTrigger = ''; // Use this input to specify the ID or target of the modal to be triggered.
24
+ isImageSvg = false; // Use this input to determine if the image is an SVG. Default is false (non-SVG).
25
+ tabIndex = ''; // Use this input to set the tab index for the element, controlling the focus order.
26
+ buttonConfig = ''; // Use this input to pass configuration settings for the group and dropdown buttons (e.g., styles, actions).
27
+ buttonClickEmit = new EventEmitter();
28
+ iconSrc = ''; // Ensure it's always a string
29
+ isDropdownOpen = false;
30
+ // SKS24JAN25 dropdown button config
31
+ // dropdownButton = {
32
+ // fcBtnBgColor: '#007bff',
33
+ // fcBtnBorder: '1px solid #0056b3',
34
+ // fcBtnTextColor: '#ffffff',
35
+ // fcBtnHeight: '40px',
36
+ // fcBtnWidth: '150px',
37
+ // fcBtnHoverBgColor: '#0056b3',
38
+ // fcBtnHoverTextColor: '#ffffff',
39
+ // label: 'Dropdown',
40
+ // iconSrc: '',
41
+ // items: [
42
+ // { label: 'Action 1',iconSrc: '', hover: false },
43
+ // { label: 'Action 2',iconSrc: '', hover: false },
44
+ // { label: 'Action 3',iconSrc: '', hover: false }
45
+ // ]
46
+ // };
47
+ constructor(elementRef) {
48
+ this.elementRef = elementRef;
49
+ }
50
+ ngOnInit() { }
51
+ //SKS24JAN25 Function to get styles for dropdown and group buttons based on the provided configuration.
52
+ getButtonStyles(config) {
53
+ return {
54
+ '--fc-button-custom-bg': config.fcBtnBgColor || '',
55
+ '--fc-button-custom-border': config.fcBtnBorder || '',
56
+ '--fc-button-custom-color': config.fcBtnTextColor || '',
57
+ '--fc-button-custom-height': config.fcBtnHeight || '',
58
+ '--fc-button-custom-width': config.fcBtnWidth || '',
59
+ '--fc-button-hover-bg': config.fcBtnHoverBgColor || '',
60
+ '--fc-button-hover-text-color': config.fcBtnHoverTextColor || ''
61
+ };
62
+ }
63
+ buttonClicked($event) {
64
+ this.buttonClickEmit.emit($event);
65
+ if (this.isDropdownOpen) {
66
+ this.isDropdownOpen = false;
67
+ }
68
+ }
69
+ toggleDropdown() {
70
+ this.isDropdownOpen = !this.isDropdownOpen;
71
+ }
72
+ //SKS24JAN25 Listener for clicks outside the dropdown button to close or manage its state.
73
+ onClickOutside(event) {
74
+ if (this.isDropdownOpen && !this.elementRef.nativeElement.contains(event.target)) {
75
+ this.isDropdownOpen = false;
76
+ }
77
+ }
78
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtButtonComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
79
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NxtButtonComponent, isStandalone: true, selector: "nxt-button", inputs: { buttonValue: "buttonValue", buttonType: "buttonType", type: "type", buttonDisable: "buttonDisable", fcBtnBgColor: "fcBtnBgColor", fcBtnBorder: "fcBtnBorder", fcBtnTextColor: "fcBtnTextColor", fcBtnHeight: "fcBtnHeight", fcBtnWidth: "fcBtnWidth", fcBtnIconLeftSrc: "fcBtnIconLeftSrc", fcBtnIconRightSrc: "fcBtnIconRightSrc", fcBtnHoverBgColor: "fcBtnHoverBgColor", fcBtnHoverTextColor: "fcBtnHoverTextColor", fcBtnId: "fcBtnId", dataDismiss: "dataDismiss", fcButtonBorder: "fcButtonBorder", modalToTrigger: "modalToTrigger", isImageSvg: "isImageSvg", tabIndex: "tabIndex", buttonConfig: "buttonConfig" }, outputs: { buttonClickEmit: "buttonClickEmit" }, host: { listeners: { "document:click": "onClickOutside($event)" } }, ngImport: i0, template: "<!-- SKS24JAN25 group button -->\n<div *ngIf=\"type === 'group'\" class=\"btn-group\" role=\"group\" aria-label=\"Button Group\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"getButtonStyles(btn)\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.fcBtnId !== 'default' ? btn.fcBtnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"custom-tooltip\" \n style=\"background-color:{{btn.tooltipBcColor}};\n color:{{btn.tooltipColor}};\n font-size:{{btn.tooltipFSize}}\">\n {{ btn.tooltip }}\n <div class=\"tooltip-pointer\" style=\"background-color:{{btn.tooltipBcColor}};\"></div>\n </span>\n </button>\n</div>\n \n<!-- SKS24JAN25 single button -->\n<button type=\"button\" *ngIf=\"type !== 'group' && type !== 'dropdown'\" class=\"btn btn-primary fc-button {{buttonType}}\" [tabindex]=\"tabIndex\"\n [attr.data-bs-toggle]=\"modalToTrigger != '' ? 'modal' : ''\"\n [attr.data-bs-target]=\"modalToTrigger != '' ? '#'+modalToTrigger : ''\"\n style=\"--fc-button-custom-bg: {{fcBtnBgColor}};--fc-button-custom-border: {{fcBtnBorder}};--fc-button-custom-color: {{fcBtnTextColor}};--fc-button-custom-height: {{fcBtnHeight}};--fc-button-custom-width: {{fcBtnWidth}};--fc-button-hover-bg: {{fcBtnHoverBgColor}};--fc-button-hover-text-color: {{fcBtnHoverTextColor}};\"\n [disabled]=\"buttonDisable\" [attr.data-bs-dismiss]='dataDismiss' (click)=\"buttonClicked($event)\"\n [attr.id]=\"fcBtnId != 'default' ? fcBtnId : null\">\n <img *ngIf=\"fcBtnIconLeftSrc != '' && isImageSvg\" src=\"{{fcBtnIconLeftSrc}}\"\n class=\"fc-btn-icon left-icon\">\n <img *ngIf=\"fcBtnIconLeftSrc != '' && !isImageSvg\" src=\"{{fcBtnIconLeftSrc}}\" class=\"fc-btn-icon left-icon\">\n <span class=\"fc-btn-text\">{{buttonValue}}</span>\n <img *ngIf=\"fcBtnIconRightSrc != '' && isImageSvg\" src=\"{{fcBtnIconRightSrc}}\"\n class=\"fc-btn-icon right-icon\">\n <img *ngIf=\"fcBtnIconRightSrc != '' && !isImageSvg\" src=\"{{fcBtnIconRightSrc}}\" class=\"fc-btn-icon right-icon\">\n</button>\n\n<!-- SKS24JAN25 dropdown button -->\n<div *ngIf=\"type === 'dropdown'\" class=\"dropdown\">\n <svg class=\"clickable-img\" (click)=\"toggleDropdown()\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.3\" y=\"0.3\" width=\"39.4\" height=\"39.4\" rx=\"11.7\" fill=\"#FAFBFD\" stroke=\"#D5D5D5\" stroke-width=\"0.6\"/>\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"getButtonStyles(btn)\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.fcBtnId !== 'default' ? btn.fcBtnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"fc-btn-text\" style=\"padding-left: 12px;\">{{btn.name}}</span>\n </button>\n </div>\n</div>\n", styles: [".fc-button,.fc-button:hover,.fc-button:active,.fc-button:focus{outline:none;border:none;box-shadow:none}.fc-button{padding:6.5px}.fc-button:active{transform:scale(1.02)}.text-only{background:transparent;color:var(--fc-primary-color);border:none;outline:none}.grey-text{color:var(--fc-text-color)}.blue-text{color:var(--fc-primary-color)}.grey-border{color:#272525;background:transparent;border:2px solid #dddddd}.grey-border:hover{color:#272525;background:#6a2aff0a;border:2px solid #6a2aff59}.grey-border:active,.grey-border:focus{background-color:#386bf6;border:2px solid #3268ff;color:#fff}.blue-border,.blue-border:hover,.blue-border:active,.blue-border:focus{border:1px solid var(--fc-primary-color)}.bg-transparent{background-color:transparent}.custom-btn{background-color:var(--fc-button-custom-bg);border-color:var(--fc-button-custom-border);color:var(--fc-button-custom-color);height:var(--fc-button-custom-height);width:var(--fc-button-custom-width)}.custom-btn:hover,.custom-btn:active,.custom-btn:focus{border-color:var(--fc-button-custom-border);background-color:var(--fc-button-hover-bg);color:var(--fc-button-hover-text-color)}.fc-btn-text{display:inline-flex;vertical-align:middle;font-size:14px;font-weight:400;padding-left:5px;padding-right:5px}.right-icon{margin-left:5px}.left-icon{margin-right:5px}.fc-button.side-save-component,.fc-button.side-cancel-component{border:1px solid transparent}.fc-button.side-save-component:focus,.fc-button.side-cancel-component:focus{box-shadow:0 0 0 .25rem #0d6efd40;border:1px solid #86b7fe}.btn-group{background-color:#fdfeff;border:1px solid #dddddd;border-radius:7px}.btn-icon{background-color:#fdfeff;border:1px solid #dddddd}.custom-tooltip{visibility:visible;position:absolute;background-color:#0773ff;color:#fff;text-align:center;padding:5px 10px;border-radius:4px;font-size:12px;white-space:nowrap;bottom:100%;left:50%;transform:translate(-50%);opacity:0;transition:opacity .2s;z-index:10;margin-bottom:10px}.tooltip-pointer{position:absolute;width:0;height:0;bottom:-5px;left:50%;transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #0773ff}.tooltip-container:hover .custom-tooltip{visibility:visible;opacity:1}.clickable-img{position:relative;cursor:pointer;height:41px;transition:transform .3s ease,box-shadow .3s ease;border:2px solid #dddddd;border-radius:13px}.clickable-img:hover{transform:scale(.95);border:2px solid rgb(31,105,255);border-radius:14px}.dropdown{position:relative;display:inline-block}.dropdown-menu{right:0;top:45px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a;left:unset}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}.dropdown-menu .btn:hover{background-color:#f1f1f1}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
80
+ }
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NxtButtonComponent, decorators: [{
82
+ type: Component,
83
+ args: [{ selector: 'nxt-button', standalone: true, imports: [CommonModule], template: "<!-- SKS24JAN25 group button -->\n<div *ngIf=\"type === 'group'\" class=\"btn-group\" role=\"group\" aria-label=\"Button Group\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"getButtonStyles(btn)\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.fcBtnId !== 'default' ? btn.fcBtnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"custom-tooltip\" \n style=\"background-color:{{btn.tooltipBcColor}};\n color:{{btn.tooltipColor}};\n font-size:{{btn.tooltipFSize}}\">\n {{ btn.tooltip }}\n <div class=\"tooltip-pointer\" style=\"background-color:{{btn.tooltipBcColor}};\"></div>\n </span>\n </button>\n</div>\n \n<!-- SKS24JAN25 single button -->\n<button type=\"button\" *ngIf=\"type !== 'group' && type !== 'dropdown'\" class=\"btn btn-primary fc-button {{buttonType}}\" [tabindex]=\"tabIndex\"\n [attr.data-bs-toggle]=\"modalToTrigger != '' ? 'modal' : ''\"\n [attr.data-bs-target]=\"modalToTrigger != '' ? '#'+modalToTrigger : ''\"\n style=\"--fc-button-custom-bg: {{fcBtnBgColor}};--fc-button-custom-border: {{fcBtnBorder}};--fc-button-custom-color: {{fcBtnTextColor}};--fc-button-custom-height: {{fcBtnHeight}};--fc-button-custom-width: {{fcBtnWidth}};--fc-button-hover-bg: {{fcBtnHoverBgColor}};--fc-button-hover-text-color: {{fcBtnHoverTextColor}};\"\n [disabled]=\"buttonDisable\" [attr.data-bs-dismiss]='dataDismiss' (click)=\"buttonClicked($event)\"\n [attr.id]=\"fcBtnId != 'default' ? fcBtnId : null\">\n <img *ngIf=\"fcBtnIconLeftSrc != '' && isImageSvg\" src=\"{{fcBtnIconLeftSrc}}\"\n class=\"fc-btn-icon left-icon\">\n <img *ngIf=\"fcBtnIconLeftSrc != '' && !isImageSvg\" src=\"{{fcBtnIconLeftSrc}}\" class=\"fc-btn-icon left-icon\">\n <span class=\"fc-btn-text\">{{buttonValue}}</span>\n <img *ngIf=\"fcBtnIconRightSrc != '' && isImageSvg\" src=\"{{fcBtnIconRightSrc}}\"\n class=\"fc-btn-icon right-icon\">\n <img *ngIf=\"fcBtnIconRightSrc != '' && !isImageSvg\" src=\"{{fcBtnIconRightSrc}}\" class=\"fc-btn-icon right-icon\">\n</button>\n\n<!-- SKS24JAN25 dropdown button -->\n<div *ngIf=\"type === 'dropdown'\" class=\"dropdown\">\n <svg class=\"clickable-img\" (click)=\"toggleDropdown()\" width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"0.3\" y=\"0.3\" width=\"39.4\" height=\"39.4\" rx=\"11.7\" fill=\"#FAFBFD\" stroke=\"#D5D5D5\" stroke-width=\"0.6\"/>\n <path d=\"M19.9999 25.6667C23.6818 25.6667 26.6666 22.6819 26.6666 19C26.6666 15.3181 23.6818 12.3334 19.9999 12.3334C16.318 12.3334 13.3333 15.3181 13.3333 19C13.3333 22.6819 16.318 25.6667 19.9999 25.6667Z\" fill=\"#292D32\" stroke=\"#292D32\" stroke-width=\"1.5\" stroke-miterlimit=\"10\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n <path d=\"M17.6467 18.16L20.0001 20.5067L22.3534 18.16\" stroke=\"white\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg> \n <div class=\"dropdown-menu\" *ngIf=\"isDropdownOpen\">\n <button *ngFor=\"let btn of buttonConfig.buttons\"\n type=\"button\"\n class=\"btn btn-icon {{btn.buttonType}} tooltip-container\"\n [attr.tabindex]=\"btn.tabIndex\"\n [attr.data-bs-toggle]=\"btn.modalToTrigger ? 'modal' : null\"\n [attr.data-bs-target]=\"btn.modalToTrigger ? '#' + btn.modalToTrigger : null\"\n [ngStyle]=\"getButtonStyles(btn)\"\n [disabled]=\"btn.buttonDisable\"\n [attr.data-bs-dismiss]=\"btn.dataDismiss\"\n (click)=\"buttonClicked(btn)\"\n [attr.id]=\"btn.fcBtnId !== 'default' ? btn.fcBtnId : null\">\n <img *ngIf=\"btn.isImageSvg\" [src]=\"btn.iconSrc\">\n <span class=\"fc-btn-text\" style=\"padding-left: 12px;\">{{btn.name}}</span>\n </button>\n </div>\n</div>\n", styles: [".fc-button,.fc-button:hover,.fc-button:active,.fc-button:focus{outline:none;border:none;box-shadow:none}.fc-button{padding:6.5px}.fc-button:active{transform:scale(1.02)}.text-only{background:transparent;color:var(--fc-primary-color);border:none;outline:none}.grey-text{color:var(--fc-text-color)}.blue-text{color:var(--fc-primary-color)}.grey-border{color:#272525;background:transparent;border:2px solid #dddddd}.grey-border:hover{color:#272525;background:#6a2aff0a;border:2px solid #6a2aff59}.grey-border:active,.grey-border:focus{background-color:#386bf6;border:2px solid #3268ff;color:#fff}.blue-border,.blue-border:hover,.blue-border:active,.blue-border:focus{border:1px solid var(--fc-primary-color)}.bg-transparent{background-color:transparent}.custom-btn{background-color:var(--fc-button-custom-bg);border-color:var(--fc-button-custom-border);color:var(--fc-button-custom-color);height:var(--fc-button-custom-height);width:var(--fc-button-custom-width)}.custom-btn:hover,.custom-btn:active,.custom-btn:focus{border-color:var(--fc-button-custom-border);background-color:var(--fc-button-hover-bg);color:var(--fc-button-hover-text-color)}.fc-btn-text{display:inline-flex;vertical-align:middle;font-size:14px;font-weight:400;padding-left:5px;padding-right:5px}.right-icon{margin-left:5px}.left-icon{margin-right:5px}.fc-button.side-save-component,.fc-button.side-cancel-component{border:1px solid transparent}.fc-button.side-save-component:focus,.fc-button.side-cancel-component:focus{box-shadow:0 0 0 .25rem #0d6efd40;border:1px solid #86b7fe}.btn-group{background-color:#fdfeff;border:1px solid #dddddd;border-radius:7px}.btn-icon{background-color:#fdfeff;border:1px solid #dddddd}.custom-tooltip{visibility:visible;position:absolute;background-color:#0773ff;color:#fff;text-align:center;padding:5px 10px;border-radius:4px;font-size:12px;white-space:nowrap;bottom:100%;left:50%;transform:translate(-50%);opacity:0;transition:opacity .2s;z-index:10;margin-bottom:10px}.tooltip-pointer{position:absolute;width:0;height:0;bottom:-5px;left:50%;transform:translate(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #0773ff}.tooltip-container:hover .custom-tooltip{visibility:visible;opacity:1}.clickable-img{position:relative;cursor:pointer;height:41px;transition:transform .3s ease,box-shadow .3s ease;border:2px solid #dddddd;border-radius:13px}.clickable-img:hover{transform:scale(.95);border:2px solid rgb(31,105,255);border-radius:14px}.dropdown{position:relative;display:inline-block}.dropdown-menu{right:0;top:45px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 4px 8px #0000001a;left:unset}.dropdown .dropdown-menu{display:block}.dropdown-menu .btn{display:block;padding:10px;width:100%;text-align:left;background:transparent;border:none;cursor:pointer}.dropdown-menu .btn:hover{background-color:#f1f1f1}\n"] }]
84
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { buttonValue: [{
85
+ type: Input
86
+ }], buttonType: [{
87
+ type: Input
88
+ }], type: [{
89
+ type: Input
90
+ }], buttonDisable: [{
91
+ type: Input
92
+ }], fcBtnBgColor: [{
93
+ type: Input
94
+ }], fcBtnBorder: [{
95
+ type: Input
96
+ }], fcBtnTextColor: [{
97
+ type: Input
98
+ }], fcBtnHeight: [{
99
+ type: Input
100
+ }], fcBtnWidth: [{
101
+ type: Input
102
+ }], fcBtnIconLeftSrc: [{
103
+ type: Input
104
+ }], fcBtnIconRightSrc: [{
105
+ type: Input
106
+ }], fcBtnHoverBgColor: [{
107
+ type: Input
108
+ }], fcBtnHoverTextColor: [{
109
+ type: Input
110
+ }], fcBtnId: [{
111
+ type: Input
112
+ }], dataDismiss: [{
113
+ type: Input
114
+ }], fcButtonBorder: [{
115
+ type: Input
116
+ }], modalToTrigger: [{
117
+ type: Input
118
+ }], isImageSvg: [{
119
+ type: Input
120
+ }], tabIndex: [{
121
+ type: Input
122
+ }], buttonConfig: [{
123
+ type: Input
124
+ }], buttonClickEmit: [{
125
+ type: Output
126
+ }], onClickOutside: [{
127
+ type: HostListener,
128
+ args: ['document:click', ['$event']]
129
+ }] } });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnh0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9idXR0b24vbnh0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7OztBQVF6RyxNQUFNLE9BQU8sa0JBQWtCO0lBK0NUO0lBN0NYLFdBQVcsR0FBVyxFQUFFLENBQUMsQ0FBQyx5QkFBeUI7SUFDbkQsVUFBVSxHQUFXLFNBQVMsQ0FBQyxDQUFDLCtPQUErTztJQUMvUSxJQUFJLEdBQVcsUUFBUSxDQUFDLENBQUMsb0VBQW9FO0lBQzdGLGFBQWEsR0FBWSxLQUFLLENBQUMsQ0FBQyw0REFBNEQ7SUFDNUYsWUFBWSxHQUFXLEVBQUUsQ0FBQyxDQUFDLGtFQUFrRTtJQUM3RixXQUFXLEdBQVcsRUFBRSxDQUFDLENBQUMsOERBQThEO0lBQ3hGLGNBQWMsR0FBVyxFQUFFLENBQUMsQ0FBQyw0REFBNEQ7SUFDekYsV0FBVyxHQUFXLEVBQUUsQ0FBQyxDQUFDLHdEQUF3RDtJQUNsRixVQUFVLEdBQVcsRUFBRSxDQUFDLENBQUMsdURBQXVEO0lBQ2hGLGdCQUFnQixHQUFXLEVBQUUsQ0FBQyxDQUFDLHlFQUF5RTtJQUN4RyxpQkFBaUIsR0FBVyxFQUFFLENBQUMsQ0FBQywwRUFBMEU7SUFDMUcsaUJBQWlCLEdBQVcsRUFBRSxDQUFDLENBQUMscUVBQXFFO0lBQ3JHLG1CQUFt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QVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQXFEUCxjQUFjO3NCQURiLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdueHQtYnV0dG9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlVXJsOiAnLi9ueHQtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbnh0LWJ1dHRvbi5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTnh0QnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiBcbiAgQElucHV0KCkgYnV0dG9uVmFsdWU6IHN0cmluZyA9ICcnOyAvL1NLUzI0SkFOMjUgYnV0dG9uIHRleHQgXG4gIEBJbnB1dCgpIGJ1dHRvblR5cGU6IHN0cmluZyA9ICdwcmltYXJ5JzsgLy9TS1MyNEpBTjI1IElmIHRoZSBidXR0b24gdHlwZSBpcyAndGV4dC1vbmx5JywgaXQgc2hvdWxkIGRpc3BsYXkgb25seSB0aGUgdGV4dCB3aXRob3V0IGEgYm9yZGVyIG9yIG91dGxpbmUuIEZvciAnZ3JleS10ZXh0JywgdGhlIGJ1dHRvbiBzaG91bGQgaGF2ZSBhIGJvcmRlciBhbmQgYSBiYWNrZ3JvdW5kIGNvbG9yLCBidXQgdGhlIHRleHQgY29sb3Igc2hvdWxkIGJlIGdyYXksIHNpbWlsYXIgdG8gJ2JsdWUtdGV4dCdcbiAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ2J1dHRvbic7IC8vU0tTMjRKQU4yNSBUaGUgYnV0dG9uIHR5cGVzIGFyZSBcImJ1dHRvbixcIiBcImdyb3VwLFwiIGFuZCBcImRyb3Bkb3duLlwiXG4gIEBJbnB1dCgpIGJ1dHRvbkRpc2FibGU6IGJvb2xlYW4gPSBmYWxzZTsgLy9TS1MyNEpBTjI1IHVzZSB0aGlzIGlucHV0IHRvIGRpc2FibGUgYSBidXR0b24gd2hlbiBuZWVkZWQuXG4gIEBJbnB1dCgpIGZjQnRuQmdDb2xvcjogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCBhIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9yIGZvciB0aGUgYnV0dG9uLlxuICBASW5wdXQoKSBmY0J0bkJvcmRlcjogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCBhIGN1c3RvbSBib3JkZXIgc3R5bGUgZm9yIHRoZSBidXR0b24uXG4gIEBJbnB1dCgpIGZjQnRuVGV4dENvbG9yOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IGEgY3VzdG9tIHRleHQgY29sb3IgZm9yIHRoZSBidXR0b24uXG4gIEBJbnB1dCgpIGZjQnRuSGVpZ2h0OiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IGEgY3VzdG9tIGhlaWdodCBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgZmNCdG5XaWR0aDogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCBhIGN1c3RvbSB3aWR0aCBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgZmNCdG5JY29uTGVmdFNyYzogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCB0aGUgc291cmNlIG9mIHRoZSBsZWZ0LXNpZGUgaWNvbiBmb3IgdGhlIGJ1dHRvbi5cbiAgQElucHV0KCkgZmNCdG5JY29uUmlnaHRTcmM6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgdGhlIHNvdXJjZSBvZiB0aGUgcmlnaHQtc2lkZSBpY29uIGZvciB0aGUgYnV0dG9uLlxuICBASW5wdXQoKSBmY0J0bkhvdmVyQmdDb2xvcjogc3RyaW5nID0gJyc7IC8vIFVzZSB0aGlzIGlucHV0IHRvIHNldCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgYnV0dG9uIG9uIGhvdmVyLlxuICBASW5wdXQoKSBmY0J0bkhvdmVyVGV4dENvbG9yOiBzdHJpbmcgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IHRoZSB0ZXh0IGNvbG9yIG9mIHRoZSBidXR0b24gb24gaG92ZXIuXG4gIEBJbnB1dCgpIGZjQnRuSWQ6IHN0cmluZyA9ICdkZWZhdWx0JzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gc2V0IGEgY3VzdG9tIElEIGZvciB0aGUgYnV0dG9uLiBEZWZhdWx0IGlzICdkZWZhdWx0Jy5cbiAgQElucHV0KCkgZGF0YURpc21pc3M6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzcGVjaWZ5IHRoZSBkaXNtaXNzIGFjdGlvbiBmb3IgdGhlIGJ1dHRvbiAoZS5nLiwgJ21vZGFsJyB0byBjbG9zZSBhIG1vZGFsKS5cbiAgQElucHV0KCkgZmNCdXR0b25Cb3JkZXI6IHN0cmluZyA9ICcwcHgnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgdGhlIGJvcmRlciBzaXplIG9mIHRoZSBidXR0b24uIERlZmF1bHQgaXMgJzBweCcgZm9yIG5vIGJvcmRlci5cbiAgQElucHV0KCkgbW9kYWxUb1RyaWdnZXI6IHN0cmluZyA9ICcnOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBzcGVjaWZ5IHRoZSBJRCBvciB0YXJnZXQgb2YgdGhlIG1vZGFsIHRvIGJlIHRyaWdnZXJlZC5cbiAgQElucHV0KCkgaXNJbWFnZVN2ZzogYm9vbGVhbiA9IGZhbHNlOyAvLyBVc2UgdGhpcyBpbnB1dCB0byBkZXRlcm1pbmUgaWYgdGhlIGltYWdlIGlzIGFuIFNWRy4gRGVmYXVsdCBpcyBmYWxzZSAobm9uLVNWRykuXG4gIEBJbnB1dCgpIHRhYkluZGV4OiBhbnkgPSAnJzsvLyBVc2UgdGhpcyBpbnB1dCB0byBzZXQgdGhlIHRhYiBpbmRleCBmb3IgdGhlIGVsZW1lbnQsIGNvbnRyb2xsaW5nIHRoZSBmb2N1cyBvcmRlci5cbiAgQElucHV0KCkgYnV0dG9uQ29uZmlnOiBhbnkgPSAnJzsgLy8gVXNlIHRoaXMgaW5wdXQgdG8gcGFzcyBjb25maWd1cmF0aW9uIHNldHRpbmdzIGZvciB0aGUgZ3JvdXAgYW5kIGRyb3Bkb3duIGJ1dHRvbnMgKGUuZy4sIHN0eWxlcywgYWN0aW9ucykuXG5cbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrRW1pdDpFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBpY29uU3JjOiBhbnkgPSAnJzsgLy8gRW5zdXJlIGl0J3MgYWx3YXlzIGEgc3RyaW5nXG4gIGlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG5cbiAgXG5cbiAgLy8gU0tTMjRKQU4yNSBkcm9wZG93biBidXR0b24gY29uZmlnXG5cbiAgLy8gZHJvcGRvd25CdXR0b24gPSB7XG4gIC8vICAgZmNCdG5CZ0NvbG9yOiAnIzAwN2JmZicsXG4gIC8vICAgZmNCdG5Cb3JkZXI6ICcxcHggc29saWQgIzAwNTZiMycsXG4gIC8vICAgZmNCdG5UZXh0Q29sb3I6ICcjZmZmZmZmJyxcbiAgLy8gICBmY0J0bkhlaWdodDogJzQwcHgnLFxuICAvLyAgIGZjQnRuV2lkdGg6ICcxNTBweCcsXG4gIC8vICAgZmNCdG5Ib3ZlckJnQ29sb3I6ICcjMDA1NmIzJyxcbiAgLy8gICBmY0J0bkhvdmVyVGV4dENvbG9yOiAnI2ZmZmZmZicsXG4gIC8vICAgbGFiZWw6ICdEcm9wZG93bicsXG4gIC8vICAgaWNvblNyYzogJycsXG4gIC8vICAgaXRlbXM6IFtcbiAgLy8gICAgIHsgbGFiZWw6ICdBY3Rpb24gMScsaWNvblNyYzogJycsIGhvdmVyOiBmYWxzZSB9LFxuICAvLyAgICAgeyBsYWJlbDogJ0FjdGlvbiAyJyxpY29uU3JjOiAnJywgaG92ZXI6IGZhbHNlIH0sXG4gIC8vICAgICB7IGxhYmVsOiAnQWN0aW9uIDMnLGljb25TcmM6ICcnLCBob3ZlcjogZmFsc2UgfVxuICAvLyAgIF1cbiAgLy8gfTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XG4gIC8vU0tTMjRKQU4yNSBGdW5jdGlvbiB0byBnZXQgc3R5bGVzIGZvciBkcm9wZG93biBhbmQgZ3JvdXAgYnV0dG9ucyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgY29uZmlndXJhdGlvbi5cbiAgZ2V0QnV0dG9uU3R5bGVzKGNvbmZpZzogYW55KTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICctLWZjLWJ1dHRvbi1jdXN0b20tYmcnOiBjb25maWcuZmNCdG5CZ0NvbG9yIHx8ICcnLFxuICAgICAgJy0tZmMtYnV0dG9uLWN1c3RvbS1ib3JkZXInOiBjb25maWcuZmNCdG5Cb3JkZXIgfHwgJycsXG4gICAgICAnLS1mYy1idXR0b24tY3VzdG9tLWNvbG9yJzogY29uZmlnLmZjQnRuVGV4dENvbG9yIHx8ICcnLFxuICAgICAgJy0tZmMtYnV0dG9uLWN1c3RvbS1oZWlnaHQnOiBjb25maWcuZmNCdG5IZWlnaHQgfHwgJycsXG4gICAgICAnLS1mYy1idXR0b24tY3VzdG9tLXdpZHRoJzogY29uZmlnLmZjQnRuV2lkdGggfHwgJycsXG4gICAgICAnLS1mYy1idXR0b24taG92ZXItYmcnOiBjb25maWcuZmNCdG5Ib3ZlckJnQ29sb3IgfHwgJycsXG4gICAgICAnLS1mYy1idXR0b24taG92ZXItdGV4dC1jb2xvcic6IGNvbmZpZy5mY0J0bkhvdmVyVGV4dENvbG9yIHx8ICcnXG4gICAgfTtcbiAgfVxuICBcblxuICBidXR0b25DbGlja2VkKCRldmVudDphbnkpe1xuICAgIHRoaXMuYnV0dG9uQ2xpY2tFbWl0LmVtaXQoJGV2ZW50KTtcbiAgICBpZih0aGlzLmlzRHJvcGRvd25PcGVuKXtcbiAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW49ZmFsc2VcbiAgICB9XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bigpIHtcbiAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gIXRoaXMuaXNEcm9wZG93bk9wZW47XG4gIH1cbi8vU0tTMjRKQU4yNSBMaXN0ZW5lciBmb3IgY2xpY2tzIG91dHNpZGUgdGhlIGRyb3Bkb3duIGJ1dHRvbiB0byBjbG9zZSBvciBtYW5hZ2UgaXRzIHN0YXRlLlxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG4gIG9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMuaXNEcm9wZG93bk9wZW4gJiYgIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldClcbiAgICApIHtcbiAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cbiIsIjwhLS0gU0tTMjRKQU4yNSBncm91cCBidXR0b24gLS0+XG48ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2dyb3VwJ1wiIGNsYXNzPVwiYnRuLWdyb3VwXCIgcm9sZT1cImdyb3VwXCIgYXJpYS1sYWJlbD1cIkJ1dHRvbiBHcm91cFwiPlxuICAgIDxidXR0b24gKm5nRm9yPVwibGV0IGJ0biBvZiBidXR0b25Db25maWcuYnV0dG9uc1wiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1pY29uIHt7YnRuLmJ1dHRvblR5cGV9fSB0b29sdGlwLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJidG4udGFiSW5kZXhcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy10b2dnbGVdPVwiYnRuLm1vZGFsVG9UcmlnZ2VyID8gJ21vZGFsJyA6IG51bGxcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy10YXJnZXRdPVwiYnRuLm1vZGFsVG9UcmlnZ2VyID8gJyMnICsgYnRuLm1vZGFsVG9UcmlnZ2VyIDogbnVsbFwiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRCdXR0b25TdHlsZXMoYnRuKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuLmJ1dHRvbkRpc2FibGVcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1icy1kaXNtaXNzXT1cImJ0bi5kYXRhRGlzbWlzc1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiYnV0dG9uQ2xpY2tlZChidG4pXCJcbiAgICAgICAgICAgIFthdHRyLmlkXT1cImJ0bi5mY0J0bklkICE9PSAnZGVmYXVsdCcgPyBidG4uZmNCdG5JZCA6IG51bGxcIj5cbiAgICAgICAgPGltZyAqbmdJZj1cImJ0bi5pc0ltYWdlU3ZnXCIgW3NyY109XCJidG4uaWNvblNyY1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImN1c3RvbS10b29sdGlwXCIgXG4gICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6e3tidG4udG9vbHRpcEJjQ29sb3J9fTtcbiAgICAgICAgICAgIGNvbG9yOnt7YnRuLnRvb2x0aXBDb2xvcn19O1xuICAgICAgICAgICAgZm9udC1zaXplOnt7YnRuLnRvb2x0aXBGU2l6ZX19XCI+XG4gICAgICAgICAgICB7eyBidG4udG9vbHRpcCB9fVxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRvb2x0aXAtcG9pbnRlclwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjp7e2J0bi50b29sdGlwQmNDb2xvcn19O1wiPjwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgPC9idXR0b24+XG48L2Rpdj5cbiAgXG48IS0tIFNLUzI0SkFOMjUgc2luZ2xlIGJ1dHRvbiAtLT5cbjxidXR0b24gdHlwZT1cImJ1dHRvblwiICAqbmdJZj1cInR5cGUgIT09ICdncm91cCcgJiYgdHlwZSAhPT0gJ2Ryb3Bkb3duJ1wiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGZjLWJ1dHRvbiB7e2J1dHRvblR5cGV9fVwiIFt0YWJpbmRleF09XCJ0YWJJbmRleFwiXG4gICAgW2F0dHIuZGF0YS1icy10b2dnbGVdPVwibW9kYWxUb1RyaWdnZXIgIT0gJycgPyAnbW9kYWwnIDogJydcIlxuICAgIFthdHRyLmRhdGEtYnMtdGFyZ2V0XT1cIm1vZGFsVG9UcmlnZ2VyICE9ICcnID8gJyMnK21vZGFsVG9UcmlnZ2VyIDogJydcIlxuICAgIHN0eWxlPVwiLS1mYy1idXR0b24tY3VzdG9tLWJnOiB7e2ZjQnRuQmdDb2xvcn19Oy0tZmMtYnV0dG9uLWN1c3RvbS1ib3JkZXI6IHt7ZmNCdG5Cb3JkZXJ9fTstLWZjLWJ1dHRvbi1jdXN0b20tY29sb3I6IHt7ZmNCdG5UZXh0Q29sb3J9fTstLWZjLWJ1dHRvbi1jdXN0b20taGVpZ2h0OiB7e2ZjQnRuSGVpZ2h0fX07LS1mYy1idXR0b24tY3VzdG9tLXdpZHRoOiB7e2ZjQnRuV2lkdGh9fTstLWZjLWJ1dHRvbi1ob3Zlci1iZzoge3tmY0J0bkhvdmVyQmdDb2xvcn19Oy0tZmMtYnV0dG9uLWhvdmVyLXRleHQtY29sb3I6IHt7ZmNCdG5Ib3ZlclRleHRDb2xvcn19O1wiXG4gICAgW2Rpc2FibGVkXT1cImJ1dHRvbkRpc2FibGVcIiBbYXR0ci5kYXRhLWJzLWRpc21pc3NdPSdkYXRhRGlzbWlzcycgKGNsaWNrKT1cImJ1dHRvbkNsaWNrZWQoJGV2ZW50KVwiXG4gICAgW2F0dHIuaWRdPVwiZmNCdG5JZCAhPSAnZGVmYXVsdCcgPyBmY0J0bklkIDogbnVsbFwiPlxuICAgIDxpbWcgKm5nSWY9XCJmY0J0bkljb25MZWZ0U3JjICE9ICcnICYmIGlzSW1hZ2VTdmdcIiBzcmM9XCJ7e2ZjQnRuSWNvbkxlZnRTcmN9fVwiXG4gICAgICAgIGNsYXNzPVwiZmMtYnRuLWljb24gbGVmdC1pY29uXCI+XG4gICAgPGltZyAqbmdJZj1cImZjQnRuSWNvbkxlZnRTcmMgIT0gJycgJiYgIWlzSW1hZ2VTdmdcIiBzcmM9XCJ7e2ZjQnRuSWNvbkxlZnRTcmN9fVwiIGNsYXNzPVwiZmMtYnRuLWljb24gbGVmdC1pY29uXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJmYy1idG4tdGV4dFwiPnt7YnV0dG9uVmFsdWV9fTwvc3Bhbj5cbiAgICA8aW1nICpuZ0lmPVwiZmNCdG5JY29uUmlnaHRTcmMgIT0gJycgJiYgaXNJbWFnZVN2Z1wiIHNyYz1cInt7ZmNCdG5JY29uUmlnaHRTcmN9fVwiXG4gICAgICAgIGNsYXNzPVwiZmMtYnRuLWljb24gcmlnaHQtaWNvblwiPlxuICAgIDxpbWcgKm5nSWY9XCJmY0J0bkljb25SaWdodFNyYyAhPSAnJyAmJiAhaXNJbWFnZVN2Z1wiIHNyYz1cInt7ZmNCdG5JY29uUmlnaHRTcmN9fVwiIGNsYXNzPVwiZmMtYnRuLWljb24gcmlnaHQtaWNvblwiPlxuPC9idXR0b24+XG5cbjwhLS0gU0tTMjRKQU4yNSBkcm9wZG93biBidXR0b24gLS0+XG48ZGl2ICpuZ0lmPVwidHlwZSA9PT0gJ2Ryb3Bkb3duJ1wiIGNsYXNzPVwiZHJvcGRvd25cIj5cbiAgICA8c3ZnIGNsYXNzPVwiY2xpY2thYmxlLWltZ1wiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigpXCIgIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIHZpZXdCb3g9XCIwIDAgNDAgNDBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgPHJlY3QgeD1cIjAuM1wiIHk9XCIwLjNcIiB3aWR0aD1cIjM5LjRcIiBoZWlnaHQ9XCIzOS40XCIgcng9XCIxMS43XCIgZmlsbD1cIiNGQUZCRkRcIiBzdHJva2U9XCIjRDVENUQ1XCIgc3Ryb2tlLXdpZHRoPVwiMC42XCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTE5Ljk5OTkgMjUuNjY2N0MyMy42ODE4IDI1LjY2NjcgMjYuNjY2NiAyMi42ODE5IDI2LjY2NjYgMTlDMjYuNjY2NiAxNS4zMTgxIDIzLjY4MTggMTIuMzMzNCAxOS45OTk5IDEyLjMzMzRDMTYuMzE4IDEyLjMzMzQgMTMuMzMzMyAxNS4zMTgxIDEzLjMzMzMgMTlDMTMuMzMzMyAyMi42ODE5IDE2LjMxOCAyNS42NjY3IDE5Ljk5OTkgMjUuNjY2N1pcIiBmaWxsPVwiIzI5MkQzMlwiIHN0cm9rZT1cIiMyOTJEMzJcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbWl0ZXJsaW1pdD1cIjEwXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICA8cGF0aCBkPVwiTTE3LjY0NjcgMTguMTZMMjAuMDAwMSAyMC41MDY3TDIyLjM1MzQgMTguMTZcIiBzdHJva2U9XCJ3aGl0ZVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICA8L3N2Zz4gIFxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCIgICpuZ0lmPVwiaXNEcm9wZG93bk9wZW5cIj5cbiAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgYnRuIG9mIGJ1dHRvbkNvbmZpZy5idXR0b25zXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWljb24ge3tidG4uYnV0dG9uVHlwZX19IHRvb2x0aXAtY29udGFpbmVyXCJcbiAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImJ0bi50YWJJbmRleFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJzLXRvZ2dsZV09XCJidG4ubW9kYWxUb1RyaWdnZXIgPyAnbW9kYWwnIDogbnVsbFwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJzLXRhcmdldF09XCJidG4ubW9kYWxUb1RyaWdnZXIgPyAnIycgKyBidG4ubW9kYWxUb1RyaWdnZXIgOiBudWxsXCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldEJ1dHRvblN0eWxlcyhidG4pXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4uYnV0dG9uRGlzYWJsZVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWJzLWRpc21pc3NdPVwiYnRuLmRhdGFEaXNtaXNzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJidXR0b25DbGlja2VkKGJ0bilcIlxuICAgICAgICAgICAgW2F0dHIuaWRdPVwiYnRuLmZjQnRuSWQgIT09ICdkZWZhdWx0JyA/IGJ0bi5mY0J0bklkIDogbnVsbFwiPlxuICAgICAgICAgICAgPGltZyAqbmdJZj1cImJ0bi5pc0ltYWdlU3ZnXCIgW3NyY109XCJidG4uaWNvblNyY1wiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYy1idG4tdGV4dFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAxMnB4O1wiPnt7YnRuLm5hbWV9fTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -16,11 +16,11 @@ export class CustomButtonComponent {
16
16
  this.buttonValue.emit(event);
17
17
  }
18
18
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
19
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomButtonComponent, selector: "app-custom-button", inputs: { height: "height", width: "width", textColor: "textColor", buttonText: "buttonText", value: "value", backgroundColor: "backgroundColor" }, outputs: { buttonValue: "buttonValue" }, ngImport: i0, template: "\r\n<!-- 08NOV23 - button html added-->\r\n<button \r\n[style.height]=\"height\" \r\n[style.color]=\"textColor\"\r\n[style.background-color]=\"backgroundColor\"\r\n[style.width]=\"width\" class=\"custom-button\"\r\n[value] =\"value\"\r\n(click)=\"handleClick(value)\"\r\n >{{ buttonText }}</button>\r\n", styles: [".custom-button{border:none;cursor:pointer;border-radius:5px;font-size:16px;font-size:14px}.custom-button:hover{background-color:#0056b3}\n"] });
19
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomButtonComponent, selector: "app-custom-button", inputs: { height: "height", width: "width", textColor: "textColor", buttonText: "buttonText", value: "value", backgroundColor: "backgroundColor" }, outputs: { buttonValue: "buttonValue" }, ngImport: i0, template: "\n<!-- 08NOV23 - button html added-->\n<button \n[style.height]=\"height\" \n[style.color]=\"textColor\"\n[style.background-color]=\"backgroundColor\"\n[style.width]=\"width\" class=\"custom-button\"\n[value] =\"value\"\n(click)=\"handleClick(value)\"\n >{{ buttonText }}</button>\n", styles: [".custom-button{border:none;cursor:pointer;border-radius:5px;font-size:16px;font-size:14px}.custom-button:hover{background-color:#0056b3}\n"] });
20
20
  }
21
21
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomButtonComponent, decorators: [{
22
22
  type: Component,
23
- args: [{ selector: 'app-custom-button', template: "\r\n<!-- 08NOV23 - button html added-->\r\n<button \r\n[style.height]=\"height\" \r\n[style.color]=\"textColor\"\r\n[style.background-color]=\"backgroundColor\"\r\n[style.width]=\"width\" class=\"custom-button\"\r\n[value] =\"value\"\r\n(click)=\"handleClick(value)\"\r\n >{{ buttonText }}</button>\r\n", styles: [".custom-button{border:none;cursor:pointer;border-radius:5px;font-size:16px;font-size:14px}.custom-button:hover{background-color:#0056b3}\n"] }]
23
+ args: [{ selector: 'app-custom-button', template: "\n<!-- 08NOV23 - button html added-->\n<button \n[style.height]=\"height\" \n[style.color]=\"textColor\"\n[style.background-color]=\"backgroundColor\"\n[style.width]=\"width\" class=\"custom-button\"\n[value] =\"value\"\n(click)=\"handleClick(value)\"\n >{{ buttonText }}</button>\n", styles: [".custom-button{border:none;cursor:pointer;border-radius:5px;font-size:16px;font-size:14px}.custom-button:hover{background-color:#0056b3}\n"] }]
24
24
  }], ctorParameters: () => [], propDecorators: { height: [{
25
25
  type: Input
26
26
  }], width: [{
@@ -36,4 +36,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
36
36
  }], buttonValue: [{
37
37
  type: Output
38
38
  }] } });
39
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9jdXN0b20tYnV0dG9uL2N1c3RvbS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWJ1dHRvbi9jdXN0b20tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTy9FLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMscUNBQXFDO0lBQzVCLE1BQU0sQ0FBUztJQUNmLEtBQUssQ0FBUztJQUNkLFNBQVMsR0FBVSxNQUFNLENBQUE7SUFDekIsVUFBVSxDQUFTO0lBQ25CLEtBQUssQ0FBUTtJQUNiLGVBQWUsR0FBVyxTQUFTLENBQUMsQ0FBQywyQkFBMkI7SUFDL0QsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDaEQsZ0JBQWdCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7d0dBaEJVLHFCQUFxQjs0RkFBckIscUJBQXFCLHNQQ1BsQyxnVEFVQTs7NEZESGEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjt3REFNcEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1idXR0b24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tYnV0dG9uLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VzdG9tQnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAvLyAgMDhOT1YyMyAtIGJ1dHRvbiBpbnB1dCBhbmQgb3V0cHRzXHJcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmc7XHJcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZztcclxuICBASW5wdXQoKSB0ZXh0Q29sb3I6IHN0cmluZyA9JyNmZmYnXHJcbiAgQElucHV0KCkgYnV0dG9uVGV4dDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHZhbHVlOnN0cmluZztcclxuICBASW5wdXQoKSBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZyA9ICcjMDA3YmZmJzsgLy8gRGVmYXVsdCBiYWNrZ3JvdW5kIGNvbG9yXHJcbiAgQE91dHB1dCgpIGJ1dHRvblZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IFxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xpY2soZXZlbnQpe1xyXG4gICAgdGhpcy5idXR0b25WYWx1ZS5lbWl0KGV2ZW50KTtcclxuICB9XHJcbn1cclxuIiwiXHJcbjwhLS0gMDhOT1YyMyAtIGJ1dHRvbiBodG1sIGFkZGVkLS0+XHJcbjxidXR0b24gXHJcbltzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCIgXHJcbltzdHlsZS5jb2xvcl09XCJ0ZXh0Q29sb3JcIlxyXG5bc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIlxyXG5bc3R5bGUud2lkdGhdPVwid2lkdGhcIiBjbGFzcz1cImN1c3RvbS1idXR0b25cIlxyXG5bdmFsdWVdID1cInZhbHVlXCJcclxuKGNsaWNrKT1cImhhbmRsZUNsaWNrKHZhbHVlKVwiXHJcbiA+e3sgYnV0dG9uVGV4dCB9fTwvYnV0dG9uPlxyXG4iXX0=
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvY29tcG9uZW50cy9jdXN0b20tYnV0dG9uL2N1c3RvbS1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWJ1dHRvbi9jdXN0b20tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTy9FLE1BQU0sT0FBTyxxQkFBcUI7SUFDaEMscUNBQXFDO0lBQzVCLE1BQU0sQ0FBUztJQUNmLEtBQUssQ0FBUztJQUNkLFNBQVMsR0FBVSxNQUFNLENBQUE7SUFDekIsVUFBVSxDQUFTO0lBQ25CLEtBQUssQ0FBUTtJQUNiLGVBQWUsR0FBVyxTQUFTLENBQUMsQ0FBQywyQkFBMkI7SUFDL0QsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDaEQsZ0JBQWdCLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLENBQUM7d0dBaEJVLHFCQUFxQjs0RkFBckIscUJBQXFCLHNQQ1BsQyw0UkFVQTs7NEZESGEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjt3REFNcEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2N1c3RvbS1idXR0b24uY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8vICAwOE5PVjIzIC0gYnV0dG9uIGlucHV0IGFuZCBvdXRwdHNcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdpZHRoOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRleHRDb2xvcjogc3RyaW5nID0nI2ZmZidcbiAgQElucHV0KCkgYnV0dG9uVGV4dDogc3RyaW5nO1xuICBASW5wdXQoKSB2YWx1ZTpzdHJpbmc7XG4gIEBJbnB1dCgpIGJhY2tncm91bmRDb2xvcjogc3RyaW5nID0gJyMwMDdiZmYnOyAvLyBEZWZhdWx0IGJhY2tncm91bmQgY29sb3JcbiAgQE91dHB1dCgpIGJ1dHRvblZhbHVlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7IFxuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgaGFuZGxlQ2xpY2soZXZlbnQpe1xuICAgIHRoaXMuYnV0dG9uVmFsdWUuZW1pdChldmVudCk7XG4gIH1cbn1cbiIsIlxuPCEtLSAwOE5PVjIzIC0gYnV0dG9uIGh0bWwgYWRkZWQtLT5cbjxidXR0b24gXG5bc3R5bGUuaGVpZ2h0XT1cImhlaWdodFwiIFxuW3N0eWxlLmNvbG9yXT1cInRleHRDb2xvclwiXG5bc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJiYWNrZ3JvdW5kQ29sb3JcIlxuW3N0eWxlLndpZHRoXT1cIndpZHRoXCIgY2xhc3M9XCJjdXN0b20tYnV0dG9uXCJcblt2YWx1ZV0gPVwidmFsdWVcIlxuKGNsaWNrKT1cImhhbmRsZUNsaWNrKHZhbHVlKVwiXG4gPnt7IGJ1dHRvblRleHQgfX08L2J1dHRvbj5cbiJdfQ==
@@ -343,11 +343,11 @@ export class CustomCalendarComponent {
343
343
  return updatedText;
344
344
  }
345
345
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomCalendarComponent, deps: [{ token: i1.ChangeService }], target: i0.ɵɵFactoryTarget.Component });
346
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: { allEvents: "allEvents", question: "question", nxtId: "nxtId" }, outputs: { eventSelected: "eventSelected", dateSelected: "dateSelected", openModal: "openModal", closeModal: "closeModal" }, ngImport: i0, template: "<div class=\"align-calendar\">\r\n <div class=\"calendar-container\">\r\n <div class=\"calendar-header\">\r\n <button (click)=\"previousMonth()\"><< Previous >></button>\r\n <h3>{{ currentDate | date: 'MMMM yyyy' }}</h3>\r\n <button (click)=\"nextMonth()\"><< Next >></button>\r\n </div>\r\n <div class=\"calendar-grid\">\r\n <div class=\"day-of-week\" *ngFor=\"let day of daysOfWeek\">{{ day }}</div>\r\n <div\r\n class=\"calendar-day\"\r\n *ngFor=\"let day of calendarDays\"\r\n [class.not-current-month]=\"!day.isCurrentMonth\"\r\n [class.past]=\"day.isPast\"\r\n [class.today]=\"day.isToday\"\r\n [class.future]=\"day.isFuture\"\r\n [class.selected]=\"day.isSelected\"\r\n (click)=\"selectDay(day)\"\r\n >\r\n <div class=\"day-number\">{{ day.date.getDate() }}\r\n <span *ngIf=\"day?.events?.length > 0\" class=\"entry-indicator\" [class.select]=\"day?.isSelected\"></span>\r\n </div>\r\n <!-- <div *ngFor=\"let event of day.events\" >\r\n <div *ngFor=\"let entryGroup of event.entries\" class=\"event\">\r\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\">\r\n <div *ngIf=\"entryGroup[key].type == 'Time'\">\r\n {{ entryGroup[key].input?.value | date: 'shortTime' }}\r\n </div>\r\n <div *ngIf=\"entryGroup[key].type != 'Time'\">\r\n {{ entryGroup[key].input }}\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"appoinappointment\">\r\n <div class=\"appointments-container\">\r\n <h4>Add Appointment</h4>\r\n <button *ngIf=\"selectedDay\" (click)=\"addAppointment()\">Add</button>\r\n </div>\r\n <!--VD 06Sep24 calendar updates--> \r\n <!-- RS 09DEC24 Changed keys--> \r\n <div *ngIf=\"showAppoinmentSection && selectedDay?.events?.length > 0\" class=\"appointments-container\">\r\n <h4>Appointments</h4>\r\n <div *ngFor=\"let event of selectedDay?.events\">\r\n <div class=\"event\" *ngFor=\"let entryGroup of event.entries\">\r\n <div class=\"event-info\">\r\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\" class=\"entry-row\">\r\n <div *ngIf=\"entryGroup[key].questionText\" class=\"entry-text\">\r\n {{removeCharacters(entryGroup[key].questionText)}}:\r\n </div>\r\n <div class=\"entry-value\">\r\n <!-- VD 09Sep24- date type and link type updates -->\r\n <span *ngIf=\"entryGroup[key].type != 'Time' && entryGroup[key].type != 'Link'&& entryGroup[key].type != 'Date'\">{{ entryGroup[key].input }}</span>\r\n <span *ngIf=\"entryGroup[key].type == 'Time'\">{{ entryGroup[key].input | date: 'shortTime' }}</span>\r\n <span *ngIf=\"entryGroup[key].type == 'Date'\">{{ entryGroup[key].input | date: 'mediumDate' }}</span>\r\n <span *ngIf=\"entryGroup[key].type == 'Link'\">\r\n <a [href]=\"'//'+ entryGroup[key].input\" target=\"_blank\">{{removeCharacters(entryGroup[key].questionText)}}</a>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"event-actions\">\r\n <button (click)=\"editEvent(event,entryGroup)\">Edit</button>\r\n <button (click)=\"deleteEvent(event.id,entryGroup)\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <app-custom-model\r\n [modalTitle]=\"modalTitle\"\r\n [isModalOpen]=\"isModalOpen\"\r\n [modalSize]=\"modalSize\"\r\n [saveButtonValue]=\"saveButtonValue\"\r\n [modalFooter]=\"modalFooter\"\r\n (saveButtonEmit)=\"onSave()\"\r\n (cancelButtonEmit)=\"onCancel()\"\r\n>\r\n<lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n<ng-template dynamicComponentHost ></ng-template>\r\n</app-custom-model> -->", styles: [".calendar-container{flex:1}.appoinappointment{flex:1;margin-left:10px}.calendar-header{display:flex;justify-content:space-between;align-items:center}.selected{box-shadow:0 0 5px #00000080;background-color:green!important;color:#fff!important}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.day-of-week{text-align:center;font-weight:700;padding:5px;background-color:#f0f0f0;border:1px solid #ccc}.calendar-day{border:1px solid #ccc;padding:5px;display:flex;flex-direction:column;align-items:flex-start;background-color:#fff;position:relative;cursor:pointer}.calendar-day.not-current-month{background-color:#f0f0f0}.calendar-day.past{color:#aaa}.calendar-day.today{background-color:#e6ffe6;font-weight:700}.calendar-day.future{color:#000}.day-number{font-size:1.2em;margin-bottom:5px}.event{background-color:#d1e7dd;border-left:4px solid #0f5132;margin:5px 0;padding:2px 5px;border-radius:3px}.event-title{font-weight:700}.event-time{font-size:.8em}input[type=text],input[type=time]{width:100%;margin-top:5px;box-sizing:border-box}button{margin-top:5px;align-self:stretch;margin-left:0!important}.calendar-header button{margin-top:5px;align-self:stretch;margin-left:0!important;border:none;background:none}.align-calendar{display:flex;width:100%}.form-group.content-box{padding-bottom:0!important}.entry-indicator{position:absolute;top:5px;right:5px;width:10px;height:10px;background-color:#0f5132;border-radius:50%}.select{background-color:#fff}.entry-row{display:flex;align-items:center;margin-bottom:5px}.entry-text{font-weight:700;margin-right:10px;white-space:nowrap}.entry-value{flex:1;word-break:break-word}.entry-value a{color:#4caf50}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
346
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CustomCalendarComponent, selector: "app-custom-calendar", inputs: { allEvents: "allEvents", question: "question", nxtId: "nxtId" }, outputs: { eventSelected: "eventSelected", dateSelected: "dateSelected", openModal: "openModal", closeModal: "closeModal" }, ngImport: i0, template: "<div class=\"align-calendar\">\n <div class=\"calendar-container\">\n <div class=\"calendar-header\">\n <button (click)=\"previousMonth()\"><< Previous >></button>\n <h3>{{ currentDate | date: 'MMMM yyyy' }}</h3>\n <button (click)=\"nextMonth()\"><< Next >></button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"day-of-week\" *ngFor=\"let day of daysOfWeek\">{{ day }}</div>\n <div\n class=\"calendar-day\"\n *ngFor=\"let day of calendarDays\"\n [class.not-current-month]=\"!day.isCurrentMonth\"\n [class.past]=\"day.isPast\"\n [class.today]=\"day.isToday\"\n [class.future]=\"day.isFuture\"\n [class.selected]=\"day.isSelected\"\n (click)=\"selectDay(day)\"\n >\n <div class=\"day-number\">{{ day.date.getDate() }}\n <span *ngIf=\"day?.events?.length > 0\" class=\"entry-indicator\" [class.select]=\"day?.isSelected\"></span>\n </div>\n <!-- <div *ngFor=\"let event of day.events\" >\n <div *ngFor=\"let entryGroup of event.entries\" class=\"event\">\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\">\n <div *ngIf=\"entryGroup[key].type == 'Time'\">\n {{ entryGroup[key].input?.value | date: 'shortTime' }}\n </div>\n <div *ngIf=\"entryGroup[key].type != 'Time'\">\n {{ entryGroup[key].input }}\n </div>\n </div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n <div class=\"appoinappointment\">\n <div class=\"appointments-container\">\n <h4>Add Appointment</h4>\n <button *ngIf=\"selectedDay\" (click)=\"addAppointment()\">Add</button>\n </div>\n <!--VD 06Sep24 calendar updates--> \n <!-- RS 09DEC24 Changed keys--> \n <div *ngIf=\"showAppoinmentSection && selectedDay?.events?.length > 0\" class=\"appointments-container\">\n <h4>Appointments</h4>\n <div *ngFor=\"let event of selectedDay?.events\">\n <div class=\"event\" *ngFor=\"let entryGroup of event.entries\">\n <div class=\"event-info\">\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\" class=\"entry-row\">\n <div *ngIf=\"entryGroup[key].questionText\" class=\"entry-text\">\n {{removeCharacters(entryGroup[key].questionText)}}:\n </div>\n <div class=\"entry-value\">\n <!-- VD 09Sep24- date type and link type updates -->\n <span *ngIf=\"entryGroup[key].type != 'Time' && entryGroup[key].type != 'Link'&& entryGroup[key].type != 'Date'\">{{ entryGroup[key].input }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Time'\">{{ entryGroup[key].input | date: 'shortTime' }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Date'\">{{ entryGroup[key].input | date: 'mediumDate' }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Link'\">\n <a [href]=\"'//'+ entryGroup[key].input\" target=\"_blank\">{{removeCharacters(entryGroup[key].questionText)}}</a>\n </span>\n </div>\n </div>\n <div class=\"event-actions\">\n <button (click)=\"editEvent(event,entryGroup)\">Edit</button>\n <button (click)=\"deleteEvent(event.id,entryGroup)\">Delete</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<!-- <app-custom-model\n [modalTitle]=\"modalTitle\"\n [isModalOpen]=\"isModalOpen\"\n [modalSize]=\"modalSize\"\n [saveButtonValue]=\"saveButtonValue\"\n [modalFooter]=\"modalFooter\"\n (saveButtonEmit)=\"onSave()\"\n (cancelButtonEmit)=\"onCancel()\"\n>\n<lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n<ng-template dynamicComponentHost ></ng-template>\n</app-custom-model> -->", styles: [".calendar-container{flex:1}.appoinappointment{flex:1;margin-left:10px}.calendar-header{display:flex;justify-content:space-between;align-items:center}.selected{box-shadow:0 0 5px #00000080;background-color:green!important;color:#fff!important}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.day-of-week{text-align:center;font-weight:700;padding:5px;background-color:#f0f0f0;border:1px solid #ccc}.calendar-day{border:1px solid #ccc;padding:5px;display:flex;flex-direction:column;align-items:flex-start;background-color:#fff;position:relative;cursor:pointer}.calendar-day.not-current-month{background-color:#f0f0f0}.calendar-day.past{color:#aaa}.calendar-day.today{background-color:#e6ffe6;font-weight:700}.calendar-day.future{color:#000}.day-number{font-size:1.2em;margin-bottom:5px}.event{background-color:#d1e7dd;border-left:4px solid #0f5132;margin:5px 0;padding:2px 5px;border-radius:3px}.event-title{font-weight:700}.event-time{font-size:.8em}input[type=text],input[type=time]{width:100%;margin-top:5px;box-sizing:border-box}button{margin-top:5px;align-self:stretch;margin-left:0!important}.calendar-header button{margin-top:5px;align-self:stretch;margin-left:0!important;border:none;background:none}.align-calendar{display:flex;width:100%}.form-group.content-box{padding-bottom:0!important}.entry-indicator{position:absolute;top:5px;right:5px;width:10px;height:10px;background-color:#0f5132;border-radius:50%}.select{background-color:#fff}.entry-row{display:flex;align-items:center;margin-bottom:5px}.entry-text{font-weight:700;margin-right:10px;white-space:nowrap}.entry-value{flex:1;word-break:break-word}.entry-value a{color:#4caf50}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
347
347
  }
348
348
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomCalendarComponent, decorators: [{
349
349
  type: Component,
350
- args: [{ selector: 'app-custom-calendar', template: "<div class=\"align-calendar\">\r\n <div class=\"calendar-container\">\r\n <div class=\"calendar-header\">\r\n <button (click)=\"previousMonth()\"><< Previous >></button>\r\n <h3>{{ currentDate | date: 'MMMM yyyy' }}</h3>\r\n <button (click)=\"nextMonth()\"><< Next >></button>\r\n </div>\r\n <div class=\"calendar-grid\">\r\n <div class=\"day-of-week\" *ngFor=\"let day of daysOfWeek\">{{ day }}</div>\r\n <div\r\n class=\"calendar-day\"\r\n *ngFor=\"let day of calendarDays\"\r\n [class.not-current-month]=\"!day.isCurrentMonth\"\r\n [class.past]=\"day.isPast\"\r\n [class.today]=\"day.isToday\"\r\n [class.future]=\"day.isFuture\"\r\n [class.selected]=\"day.isSelected\"\r\n (click)=\"selectDay(day)\"\r\n >\r\n <div class=\"day-number\">{{ day.date.getDate() }}\r\n <span *ngIf=\"day?.events?.length > 0\" class=\"entry-indicator\" [class.select]=\"day?.isSelected\"></span>\r\n </div>\r\n <!-- <div *ngFor=\"let event of day.events\" >\r\n <div *ngFor=\"let entryGroup of event.entries\" class=\"event\">\r\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\">\r\n <div *ngIf=\"entryGroup[key].type == 'Time'\">\r\n {{ entryGroup[key].input?.value | date: 'shortTime' }}\r\n </div>\r\n <div *ngIf=\"entryGroup[key].type != 'Time'\">\r\n {{ entryGroup[key].input }}\r\n </div>\r\n </div>\r\n </div>\r\n </div> -->\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"appoinappointment\">\r\n <div class=\"appointments-container\">\r\n <h4>Add Appointment</h4>\r\n <button *ngIf=\"selectedDay\" (click)=\"addAppointment()\">Add</button>\r\n </div>\r\n <!--VD 06Sep24 calendar updates--> \r\n <!-- RS 09DEC24 Changed keys--> \r\n <div *ngIf=\"showAppoinmentSection && selectedDay?.events?.length > 0\" class=\"appointments-container\">\r\n <h4>Appointments</h4>\r\n <div *ngFor=\"let event of selectedDay?.events\">\r\n <div class=\"event\" *ngFor=\"let entryGroup of event.entries\">\r\n <div class=\"event-info\">\r\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\" class=\"entry-row\">\r\n <div *ngIf=\"entryGroup[key].questionText\" class=\"entry-text\">\r\n {{removeCharacters(entryGroup[key].questionText)}}:\r\n </div>\r\n <div class=\"entry-value\">\r\n <!-- VD 09Sep24- date type and link type updates -->\r\n <span *ngIf=\"entryGroup[key].type != 'Time' && entryGroup[key].type != 'Link'&& entryGroup[key].type != 'Date'\">{{ entryGroup[key].input }}</span>\r\n <span *ngIf=\"entryGroup[key].type == 'Time'\">{{ entryGroup[key].input | date: 'shortTime' }}</span>\r\n <span *ngIf=\"entryGroup[key].type == 'Date'\">{{ entryGroup[key].input | date: 'mediumDate' }}</span>\r\n <span *ngIf=\"entryGroup[key].type == 'Link'\">\r\n <a [href]=\"'//'+ entryGroup[key].input\" target=\"_blank\">{{removeCharacters(entryGroup[key].questionText)}}</a>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"event-actions\">\r\n <button (click)=\"editEvent(event,entryGroup)\">Edit</button>\r\n <button (click)=\"deleteEvent(event.id,entryGroup)\">Delete</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- <app-custom-model\r\n [modalTitle]=\"modalTitle\"\r\n [isModalOpen]=\"isModalOpen\"\r\n [modalSize]=\"modalSize\"\r\n [saveButtonValue]=\"saveButtonValue\"\r\n [modalFooter]=\"modalFooter\"\r\n (saveButtonEmit)=\"onSave()\"\r\n (cancelButtonEmit)=\"onCancel()\"\r\n>\r\n<lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\r\n<ng-template dynamicComponentHost ></ng-template>\r\n</app-custom-model> -->", styles: [".calendar-container{flex:1}.appoinappointment{flex:1;margin-left:10px}.calendar-header{display:flex;justify-content:space-between;align-items:center}.selected{box-shadow:0 0 5px #00000080;background-color:green!important;color:#fff!important}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.day-of-week{text-align:center;font-weight:700;padding:5px;background-color:#f0f0f0;border:1px solid #ccc}.calendar-day{border:1px solid #ccc;padding:5px;display:flex;flex-direction:column;align-items:flex-start;background-color:#fff;position:relative;cursor:pointer}.calendar-day.not-current-month{background-color:#f0f0f0}.calendar-day.past{color:#aaa}.calendar-day.today{background-color:#e6ffe6;font-weight:700}.calendar-day.future{color:#000}.day-number{font-size:1.2em;margin-bottom:5px}.event{background-color:#d1e7dd;border-left:4px solid #0f5132;margin:5px 0;padding:2px 5px;border-radius:3px}.event-title{font-weight:700}.event-time{font-size:.8em}input[type=text],input[type=time]{width:100%;margin-top:5px;box-sizing:border-box}button{margin-top:5px;align-self:stretch;margin-left:0!important}.calendar-header button{margin-top:5px;align-self:stretch;margin-left:0!important;border:none;background:none}.align-calendar{display:flex;width:100%}.form-group.content-box{padding-bottom:0!important}.entry-indicator{position:absolute;top:5px;right:5px;width:10px;height:10px;background-color:#0f5132;border-radius:50%}.select{background-color:#fff}.entry-row{display:flex;align-items:center;margin-bottom:5px}.entry-text{font-weight:700;margin-right:10px;white-space:nowrap}.entry-value{flex:1;word-break:break-word}.entry-value a{color:#4caf50}\n"] }]
350
+ args: [{ selector: 'app-custom-calendar', template: "<div class=\"align-calendar\">\n <div class=\"calendar-container\">\n <div class=\"calendar-header\">\n <button (click)=\"previousMonth()\"><< Previous >></button>\n <h3>{{ currentDate | date: 'MMMM yyyy' }}</h3>\n <button (click)=\"nextMonth()\"><< Next >></button>\n </div>\n <div class=\"calendar-grid\">\n <div class=\"day-of-week\" *ngFor=\"let day of daysOfWeek\">{{ day }}</div>\n <div\n class=\"calendar-day\"\n *ngFor=\"let day of calendarDays\"\n [class.not-current-month]=\"!day.isCurrentMonth\"\n [class.past]=\"day.isPast\"\n [class.today]=\"day.isToday\"\n [class.future]=\"day.isFuture\"\n [class.selected]=\"day.isSelected\"\n (click)=\"selectDay(day)\"\n >\n <div class=\"day-number\">{{ day.date.getDate() }}\n <span *ngIf=\"day?.events?.length > 0\" class=\"entry-indicator\" [class.select]=\"day?.isSelected\"></span>\n </div>\n <!-- <div *ngFor=\"let event of day.events\" >\n <div *ngFor=\"let entryGroup of event.entries\" class=\"event\">\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\">\n <div *ngIf=\"entryGroup[key].type == 'Time'\">\n {{ entryGroup[key].input?.value | date: 'shortTime' }}\n </div>\n <div *ngIf=\"entryGroup[key].type != 'Time'\">\n {{ entryGroup[key].input }}\n </div>\n </div>\n </div>\n </div> -->\n </div>\n </div>\n </div>\n <div class=\"appoinappointment\">\n <div class=\"appointments-container\">\n <h4>Add Appointment</h4>\n <button *ngIf=\"selectedDay\" (click)=\"addAppointment()\">Add</button>\n </div>\n <!--VD 06Sep24 calendar updates--> \n <!-- RS 09DEC24 Changed keys--> \n <div *ngIf=\"showAppoinmentSection && selectedDay?.events?.length > 0\" class=\"appointments-container\">\n <h4>Appointments</h4>\n <div *ngFor=\"let event of selectedDay?.events\">\n <div class=\"event\" *ngFor=\"let entryGroup of event.entries\">\n <div class=\"event-info\">\n <div *ngFor=\"let key of getEntryKeys(entryGroup)\" class=\"entry-row\">\n <div *ngIf=\"entryGroup[key].questionText\" class=\"entry-text\">\n {{removeCharacters(entryGroup[key].questionText)}}:\n </div>\n <div class=\"entry-value\">\n <!-- VD 09Sep24- date type and link type updates -->\n <span *ngIf=\"entryGroup[key].type != 'Time' && entryGroup[key].type != 'Link'&& entryGroup[key].type != 'Date'\">{{ entryGroup[key].input }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Time'\">{{ entryGroup[key].input | date: 'shortTime' }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Date'\">{{ entryGroup[key].input | date: 'mediumDate' }}</span>\n <span *ngIf=\"entryGroup[key].type == 'Link'\">\n <a [href]=\"'//'+ entryGroup[key].input\" target=\"_blank\">{{removeCharacters(entryGroup[key].questionText)}}</a>\n </span>\n </div>\n </div>\n <div class=\"event-actions\">\n <button (click)=\"editEvent(event,entryGroup)\">Edit</button>\n <button (click)=\"deleteEvent(event.id,entryGroup)\">Delete</button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<!-- <app-custom-model\n [modalTitle]=\"modalTitle\"\n [isModalOpen]=\"isModalOpen\"\n [modalSize]=\"modalSize\"\n [saveButtonValue]=\"saveButtonValue\"\n [modalFooter]=\"modalFooter\"\n (saveButtonEmit)=\"onSave()\"\n (cancelButtonEmit)=\"onCancel()\"\n>\n<lib-questionbook [qbItem]=\"qbRefrenceBook\" [questions]=\"referenceQuestions\" (handleQuestion)=\"handleQuestionEvent($event)\"></lib-questionbook>\n<ng-template dynamicComponentHost ></ng-template>\n</app-custom-model> -->", styles: [".calendar-container{flex:1}.appoinappointment{flex:1;margin-left:10px}.calendar-header{display:flex;justify-content:space-between;align-items:center}.selected{box-shadow:0 0 5px #00000080;background-color:green!important;color:#fff!important}.calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:5px}.day-of-week{text-align:center;font-weight:700;padding:5px;background-color:#f0f0f0;border:1px solid #ccc}.calendar-day{border:1px solid #ccc;padding:5px;display:flex;flex-direction:column;align-items:flex-start;background-color:#fff;position:relative;cursor:pointer}.calendar-day.not-current-month{background-color:#f0f0f0}.calendar-day.past{color:#aaa}.calendar-day.today{background-color:#e6ffe6;font-weight:700}.calendar-day.future{color:#000}.day-number{font-size:1.2em;margin-bottom:5px}.event{background-color:#d1e7dd;border-left:4px solid #0f5132;margin:5px 0;padding:2px 5px;border-radius:3px}.event-title{font-weight:700}.event-time{font-size:.8em}input[type=text],input[type=time]{width:100%;margin-top:5px;box-sizing:border-box}button{margin-top:5px;align-self:stretch;margin-left:0!important}.calendar-header button{margin-top:5px;align-self:stretch;margin-left:0!important;border:none;background:none}.align-calendar{display:flex;width:100%}.form-group.content-box{padding-bottom:0!important}.entry-indicator{position:absolute;top:5px;right:5px;width:10px;height:10px;background-color:#0f5132;border-radius:50%}.select{background-color:#fff}.entry-row{display:flex;align-items:center;margin-bottom:5px}.entry-text{font-weight:700;margin-right:10px;white-space:nowrap}.entry-value{flex:1;word-break:break-word}.entry-value a{color:#4caf50}\n"] }]
351
351
  }], ctorParameters: () => [{ type: i1.ChangeService }], propDecorators: { eventSelected: [{
352
352
  type: Output
353
353
  }], dateSelected: [{
@@ -363,4 +363,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
363
363
  }], nxtId: [{
364
364
  type: Input
365
365
  }] } });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNhbGVuZGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1jYWxlbmRhci9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWNhbGVuZGFyL2N1c3RvbS1jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7OztBQW1CckgsTUFBTSxPQUFPLHVCQUF1QjtJQWdDYjtJQS9CWCxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNsRCw4QkFBOEI7SUFDcEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdkMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsU0FBUyxHQUFVLEVBQUUsQ0FBQztJQUN0QixRQUFRLENBQVU7SUFDbEIsS0FBSyxDQUFTO0lBQ3ZCLDJGQUEyRjtJQUMzRixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2Isa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLGNBQWMsQ0FBSztJQUNuQixnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDdEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLFdBQVcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQy9CLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLFVBQVUsR0FBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxF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LENBQUMsVUFBZTtRQUMxQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQW1CO1FBQ2xDLElBQUksV0FBVyxHQUFHLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7d0dBeldZLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLGtRQ25CcEMsd2hKQXFGdUI7OzRGRGxFVix1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCO2tGQUtyQixhQUFhO3NCQUF0QixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUXVlc3Rpb24gfSBmcm9tICcuLi8uLi93cmFwcGVyJztcclxuLy9pbXBvcnQgeyBRdWVzdGlvbmJvb2tDb21wb25lbnQgfSBmcm9tICcuLi8uLi9wYWdlcy9xdWVzdGlvbmJvb2svcXVlc3Rpb25ib29rLmNvbXBvbmVudCc7XHJcbi8vaW1wb3J0IHsgQ29tcG9uZW50aG9zdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29tcG9uZW50aG9zdC9jb21wb25lbnRob3N0LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XHJcbmludGVyZmFjZSBDYWxlbmRhckRheSB7XHJcbiAgZGF0ZTogRGF0ZTtcclxuICBldmVudHM6IGFueVtdO1xyXG4gIGlzQ3VycmVudE1vbnRoOiBib29sZWFuO1xyXG4gIGlzUGFzdDogYm9vbGVhbjtcclxuICBpc1RvZGF5OiBib29sZWFuO1xyXG4gIGlzRnV0dXJlOiBib29sZWFuO1xyXG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xyXG59XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1jYWxlbmRhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2N1c3RvbS1jYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3VzdG9tLWNhbGVuZGFyLmNvbXBvbmVudC5jc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1c3RvbUNhbGVuZGFyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAT3V0cHV0KCkgZXZlbnRTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG4gIEBPdXRwdXQoKSBkYXRlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb3Blbk1vZGFsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGNsb3NlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBASW5wdXQoKSBhbGxFdmVudHM6IGFueVtdID0gW107IFxyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBRdWVzdGlvblxyXG4gIEBJbnB1dCgpIG54dElkOiBzdHJpbmc7XHJcbiAgLy9AVmlld0NoaWxkKENvbXBvbmVudGhvc3REaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGR5bmFtaWNIb3N0OiBDb21wb25lbnRob3N0RGlyZWN0aXZlO1xyXG4gIGVudHJpZXMgPSBbXTtcclxuICByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcclxuICBxYlJlZnJlbmNlQm9vazphbnk7XHJcbiAgY2FsZW5kYXJRdWVzdGlvbiA9IFtdO1xyXG4gIGNhbGVuZGFyID0ge307XHJcbiAgY3VycmVudERhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIGNhbGVuZGFyRGF5czogQ2FsZW5kYXJEYXlbXSA9IFtdO1xyXG4gIGRheXNPZldlZWs6IHN0cmluZ1tdID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xyXG4gIG5ld0V2ZW50VGl0bGU6IHN0cmluZyA9ICcnO1xyXG4gIG5ld0V2ZW50VGltZTogc3RyaW5nID0gJyc7XHJcbiAgbmV3RGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xyXG4gIG5ld0xpbms6IHN0cmluZyA9ICcnO1xyXG4gIHNlbGVjdGVkRGF5OiBDYWxlbmRhckRheSB8IG51bGwgPSBudWxsO1xyXG4gIGlzTW9kYWxPcGVuID0gZmFsc2U7XHJcbiAgbW9kYWxUaXRsZSA9ICdDdXN0b20gTW9kYWwnO1xyXG4gIG1vZGFsU2l6ZSA9ICdsYXJnZSc7XHJcbiAgc2F2ZUJ1dHRvblZhbHVlID0gJ1NhdmUnO1xyXG4gIG1vZGFsRm9vdGVyID0gdHJ1ZTtcclxuICBlZGl0aW5nRXZlbnRJZDogbnVtYmVyO1xyXG4gIGVkaXRpbmdFbnRyeUdyb3VwOiBhbnk7XHJcbiAgc2hvd0FwcG9pbm1lbnRTZWN0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBzdWJzY3JpcHRpb246IGFueTtcclxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlKSB7IH1cclxuICBuZ09uSW5pdCgpIHtcclxuICAgICBpZih0aGlzLnF1ZXN0aW9uPy5pbnB1dCl7XHJcbiAgICAgIHRoaXMuYWxsRXZlbnRzID0gdGhpcy5xdWVzdGlvbi5pbnB1dDtcclxuICAgICB9XHJcbiAgICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xyXG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhbmdlU2VydmljZS5jdXN0b21DaGFuZ2UkLnN1YnNjcmliZShcclxuICAgICAgKGNoYW5nZVZhbHVlKSA9PiB7XHJcbiAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSA9PSAnY2FsZW5kYXItbW9kYWwtc2F2ZScpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNhdmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcclxuICAgICAgICAgICAgaWYodGhpcy5xdWVzdGlvbj8uaW5wdXQpe1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxsRXZlbnRzID0gdGhpcy5xdWVzdGlvbi5pbnB1dDtcclxuICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgIC8vIHRoaXMuZGF0ZVNlbGVjdGVkLmVtaXQodGhpcy5jYWxlbmRhcik7XHJcbiAgICAvL3RoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KHRoaXMuYWxsRXZlbnRzKTtcclxuICB9XHJcbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICBwcm9jZXNzUXVlc3Rpb24oKXtcclxuICAgIHRoaXMuZW50cmllcyA9IEpTT04ucGFyc2UodGhpcy5xdWVzdGlvblsnZmllbGRzTWV0YSddKTtcclxuICAgIHRoaXMucWJSZWZyZW5jZUJvb2sgPSBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pO1xyXG4gICAgbGV0IHRpdGxlID0gdGhpcy5xYlJlZnJlbmNlQm9vaz8ucXVlc3Rpb25ib29rPy50aXRsZTtcclxuICAgIHRoaXMubW9kYWxUaXRsZSA9IHRpdGxlO1xyXG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcclxuICAgIGlmKHRoaXMuZW50cmllcy5sZW5ndGggPiAwKXtcclxuICAgICAgIHRoaXMuZW50cmllcy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgIGlmKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2Upe1xyXG4gICAgICAgICAgICAgbGV0IHFSZWZlcmVuY2UgPSBKU09OLnBhcnNlKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2UpO1xyXG4gICAgICAgICAgICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMucHVzaChxUmVmZXJlbmNlPy5xdWVzdGlvbik7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnZW50cmllcy0tPicpO1xyXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9uLS0+Jyk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLmVudHJpZXMpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMpO1xyXG4gIH1cclxuICAgLy8gc3VuZGF5IGNvbW1lbnRcclxuICAvLyBvcGVuUXVlc3Rpb25Cb29rTW9kYWwoKSB7XHJcbiAgLy8gICBjb25zdCB2aWV3Q29udGFpbmVyUmVmID0gdGhpcy5keW5hbWljSG9zdC52aWV3Q29udGFpbmVyUmVmO1xyXG4gIC8vICAgdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gIC8vICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoUXVlc3Rpb25ib29rQ29tcG9uZW50KTtcclxuICAvLyAgIGNvbXBvbmVudFJlZi5pbnN0YW5jZS5xYkl0ZW0gPSB0aGlzLnFiUmVmcmVuY2VCb29rO1xyXG4gIC8vICAgY29tcG9uZW50UmVmLmluc3RhbmNlLnF1ZXN0aW9ucyA9IHRoaXMucmVmZXJlbmNlUXVlc3Rpb25zO1xyXG4gIC8vICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmhhbmRsZVF1ZXN0aW9uLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4gdGhpcy5oYW5kbGVRdWVzdGlvbkV2ZW50KGV2ZW50KSk7XHJcbiAgLy8gfVxyXG5cclxuICBnZW5lcmF0ZUNhbGVuZGFyKCkge1xyXG4gICAgY29uc3QgeWVhciA9IHRoaXMuY3VycmVudERhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIGNvbnN0IG1vbnRoID0gdGhpcy5jdXJyZW50RGF0ZS5nZXRNb250aCgpO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0T2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoLCAxKTtcclxuICAgIGNvbnN0IGVuZE9mTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApO1xyXG5cclxuICAgIGNvbnN0IHN0YXJ0RGF5T2ZXZWVrID0gc3RhcnRPZk1vbnRoLmdldERheSgpO1xyXG4gICAgY29uc3QgZW5kRGF5T2ZXZWVrID0gZW5kT2ZNb250aC5nZXREYXkoKTtcclxuXHJcbiAgICBjb25zdCBzdGFydERhdGUgPSBuZXcgRGF0ZShzdGFydE9mTW9udGgpO1xyXG4gICAgc3RhcnREYXRlLnNldERhdGUoc3RhcnREYXRlLmdldERhdGUoKSAtIHN0YXJ0RGF5T2ZXZWVrKTtcclxuXHJcbiAgICBjb25zdCBlbmREYXRlID0gbmV3IERhdGUoZW5kT2ZNb250aCk7XHJcbiAgICBlbmREYXRlLnNldERhdGUoZW5kRGF0ZS5nZXREYXRlKCkgKyAoNiAtIGVuZERheU9mV2VlaykpO1xyXG5cclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUobmV3IERhdGUoKS5zZXRIb3VycygwLCAwLCAwLCAwKSk7XHJcbiAgICBcclxuICAgICB0aGlzLmNhbGVuZGFyRGF5cyA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBkID0gbmV3IERhdGUoc3RhcnREYXRlKTsgZCA8PSBlbmREYXRlOyBkLnNldERhdGUoZC5nZXREYXRlKCkgKyAxKSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkKTtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRGF5cy5wdXNoKHtcclxuICAgICAgICAgIGRhdGU6IGRhdGUsXHJcbiAgICAgICAgICBldmVudHM6IFtdLFxyXG4gICAgICAgICAgaXNDdXJyZW50TW9udGg6IGQuZ2V0TW9udGgoKSA9PT0gbW9udGgsXHJcbiAgICAgICAgICBpc1Bhc3Q6IGRhdGUgPCB0b2RheSxcclxuICAgICAgICAgIGlzVG9kYXk6IGRhdGUuZ2V0VGltZSgpID09PSB0b2RheS5nZXRUaW1lKCksXHJcbiAgICAgICAgICBpc0Z1dHVyZTogZGF0ZSA+IHRvZGF5LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgLy8gUG9wdWxhdGUgY2FsZW5kYXIgd2l0aCBldmVudHMgZnJvbSBhbGxFdmVudHMgYXJyYXlcclxuICAgIHRoaXMuY2FsZW5kYXJEYXlzLmZvckVhY2goZGF5ID0+IHtcclxuICAgICAgZGF5LmV2ZW50cyA9IHRoaXMuYWxsRXZlbnRzPy5maWx0ZXIoZXZlbnQgPT4gZXZlbnQ/LmRhdGU/LnRvRGF0ZVN0cmluZygpID09PSBkYXkuZGF0ZS50b0RhdGVTdHJpbmcoKSk7XHJcbiAgICB9KTtcclxuICAgICAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcclxuICAgIGxldCBjYWwgPSB7fVxyXG4gICAgY2FsWyd5ZWFyJ10gPSB5ZWFyO1xyXG4gICAgY2FsWydtb250aCddID0gbW9udGggKyAxO1xyXG4gICAgdGhpcy5jYWxlbmRhciA9IGNhbDtcclxuICB9XHJcblxyXG4gIHNlbGVjdERheShkYXk6IENhbGVuZGFyRGF5KSB7XHJcbiAgICBjb25zb2xlLmxvZyhkYXkpO1xyXG4gICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG4gICAgdGhpcy5zaG93QXBwb2lubWVudFNlY3Rpb24gPSB0cnVlO1xyXG4gICAgdGhpcy5zZWxlY3RlZERheSA9IGRheTtcclxuICAgLy8gdGhpcy5ldmVudFNlbGVjdGVkLmVtaXQoZGF5Py5ldmVudHMpO1xyXG4gICAgY29uc3QgcHJldmlvdXNseVNlbGVjdGVkRGF5ID0gdGhpcy5jYWxlbmRhckRheXMuZmluZChkID0+IGQuaXNTZWxlY3RlZCk7XHJcbiAgICBpZiAocHJldmlvdXNseVNlbGVjdGVkRGF5KSB7XHJcbiAgICAgIHByZXZpb3VzbHlTZWxlY3RlZERheS5pc1NlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBTZWxlY3QgdGhlIGNsaWNrZWQgZGF5XHJcbiAgICBkYXkuaXNTZWxlY3RlZCA9IHRydWU7XHJcbiAgIC8vIFZEIDA5U2VwMjQtIHNldHVwIHRoZSBxdWVyeSBwYXJhbSBkYXRhIGZvciBhcGkgY2FsbFxyXG4gICAgbGV0IHJlZmVyZW5jZURhdGEgPSBbXTtcclxuICAgIHRoaXMucmVmZXJlbmNlUXVlc3Rpb25zLmZvckVhY2gocXVlcyA9PiB7XHJcbiAgICAgIC8vIFZEIDA5LTA5LTI0IGdldCB0aGUgc2VsZWN0ZWQgZGF0ZVxyXG4gICAgICAvLyBuZWVkIHRvIGFkZCBpbiB0aGUgZG9jdW1lbnRcclxuICAgICAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcclxuICAgICAgIGlmKHF1ZXMucmVmZXJlbmNlRmllbGQgPT0gJ3NlbGVjdGVkRGF0ZScpe1xyXG4gICAgICAgICAgcXVlcy5pbnB1dCA9IGRheS5kYXRlLnRvSVNPU3RyaW5nKCk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcclxuICAgICAgIH1cclxuICAgICAgIC8vIFZEIDA5LTA5LTI0IGdldCB0aGUgcXVlcnkgcmVmcmVuY2UgIGZpZWxkIGRhdGEgdG8gcGFzcyB0aGUgcXVlcnlQYXJhbSAgZm9yIGFwaVxyXG4gICAgICAgaWYocXVlcy5zdWJUZXh0KXtcclxuICAgICAgICBsZXQgc3ViVGV4dCA9IEpTT04ucGFyc2UocXVlcy5zdWJUZXh0KTtcclxuICAgICAgICBpZiAoc3ViVGV4dC5xdWVyeUZpZWxkICYmIHN1YlRleHQucXVlcnlWYWx1ZVJlZmVyZW5jZSkge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudFF1ZXMgPSBxdWVzO1xyXG4gICAgICAgICAgICBsZXQgcXVlcnlSZWZlcmVuY2VzID0gc3ViVGV4dC5xdWVyeVZhbHVlUmVmZXJlbmNlLnNwbGl0KCcsJyk7ICAgXHJcbiAgICAgICAgICAgIHF1ZXJ5UmVmZXJlbmNlcy5mb3JFYWNoKHJlZkZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCByZWZRdWVzID0gdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMuZmluZChxID0+IHEucmVmZXJlbmNlRmllbGQgPT09IHJlZkZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZWZRdWVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlRGF0YS5wdXNoKHJlZlF1ZXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgLy8gQWRkIHRoZSByZWZlcmVuY2VEYXRhIGFycmF5IHRvIHRoZSBjdXJyZW50IHF1ZXN0aW9uXHJcbiAgICAgICAgICAgIGN1cnJlbnRRdWVzLnJlZmVyZW5jZVF1ZXJ5RGF0YSA9IHJlZmVyZW5jZURhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByZXZpb3VzTW9udGgoKSB7XHJcbiAgICB0aGlzLnNob3dBcHBvaW5tZW50U2VjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXJyZW50RGF0ZS5zZXRNb250aCh0aGlzLmN1cnJlbnREYXRlLmdldE1vbnRoKCkgLSAxKTtcclxuICAgIHRoaXMuY3VycmVudERhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnREYXRlKTsgLy8gRW5zdXJlIHRoZSBkYXRlIG9iamVjdCBpcyB1cGRhdGVkXHJcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkLmVtaXQodGhpcy5jYWxlbmRhcik7XHJcbiAgICB0aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdCh0aGlzLmFsbEV2ZW50cyk7XHJcbiAgfVxyXG5cclxuICBuZXh0TW9udGgoKSB7XHJcbiAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXHJcbiAgICB0aGlzLnNob3dBcHBvaW5tZW50U2VjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5jdXJyZW50RGF0ZS5zZXRNb250aCh0aGlzLmN1cnJlbnREYXRlLmdldE1vbnRoKCkgKyAxKTtcclxuICAgIHRoaXMuY3VycmVudERhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnREYXRlKTsgLy8gRW5zdXJlIHRoZSBkYXRlIG9iamVjdCBpcyB1cGRhdGVkXHJcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcclxuICAgIHRoaXMuZGF0ZVNlbGVjdGVkLmVtaXQodGhpcy5jYWxlbmRhcik7XHJcbiAgICB0aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdCh0aGlzLmFsbEV2ZW50cyk7XHJcbiAgfVxyXG5cclxuICBhZGRBcHBvaW50bWVudCgpIHtcclxuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSB0cnVlO1xyXG4gICAgIHRoaXMuY2FsZW5kYXJRdWVzdGlvbiA9IHRoaXMucmVmZXJlbmNlUXVlc3Rpb25zLm1hcChxID0+ICh7IC4uLnEsIGlucHV0OiAnJyB9KSk7XHJcbiAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xyXG4gICAgICAvLyBjbGVhciB0aGUgaW5wdXRcclxuICAgICAgaWYocXVlcy5yZWZlcmVuY2VGaWVsZCAhPSAnc2VsZWN0ZWREYXRlJyl7XHJcbiAgICAgICAgaWYocXVlcy50eXBlID09ICdEcm9wZG93bicpe1xyXG4gICAgICAgICAgZGVsZXRlIHF1ZXMuaW5wdXQ7XHJcbiAgICAgICAgICBkZWxldGUgcXVlcy5zZWxlY3RlZFZhbHVlO1xyXG4gICAgICAgICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG4gICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgIGRlbGV0ZSBxdWVzLmlucHV0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zb2xlLmxvZyh0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyk7XHJcbiAgICB0aGlzLmVkaXRpbmdFdmVudElkID0gbnVsbDtcclxuICAgIHRoaXMuY2FsZW5kYXJRdWVzdGlvbiA9IHRoaXMucmVmZXJlbmNlUXVlc3Rpb25zO1xyXG4gICAgdGhpcy5vcGVuQm9va01vZGVsKCk7XHJcbiAgICAvLyBzdW5kYXkgY29tbWVudFxyXG4gICAgLy90aGlzLm9wZW5RdWVzdGlvbkJvb2tNb2RhbCgpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkJvb2tNb2RlbCgpe1xyXG4gICAgdGhpcy5vcGVuTW9kYWwuZW1pdCh7XHJcbiAgICAgIHFiUmVmcmVuY2VCb29rOiB0aGlzLnFiUmVmcmVuY2VCb29rLFxyXG4gICAgICByZWZlcmVuY2VRdWVzdGlvbnM6IHRoaXMucmVmZXJlbmNlUXVlc3Rpb25zLFxyXG4gICAgICBtb2RhbFRpdGxlIDogdGhpcy5tb2RhbFRpdGxlLFxyXG4gICAgICBtb2RhbFNpemUgOiB0aGlzLm1vZGFsU2l6ZSxcclxuICAgICAgc2F2ZUJ1dHRvblZhbHVlIDogdGhpcy5zYXZlQnV0dG9uVmFsdWUsXHJcbiAgICAgIG1vZGFsRm9vdGVyIDogdGhpcy5tb2RhbEZvb3RlcixcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNsb3NlQ2FsZW5kYXJNb2RhbCgpIHtcclxuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KHRydWUpO1xyXG4gIH1cclxuIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG5cclxuZWRpdEV2ZW50KGV2ZW50OiBhbnksIGVudHJ5R3JvdXA6IGFueSkge1xyXG4gIHRoaXMuaXNNb2RhbE9wZW4gPSB0cnVlO1xyXG4gIHRoaXMucmVmZXJlbmNlUXVlc3Rpb25zID0gT2JqZWN0LnZhbHVlcyhlbnRyeUdyb3VwKTtcclxuICB0aGlzLmNhbGVuZGFyUXVlc3Rpb24gPSBbLi4udGhpcy5yZWZlcmVuY2VRdWVzdGlvbnNdOyAvLyBNYWtlIGEgY29weSBvZiB0aGUgY3VycmVudCBlbnRyaWVzIHRvIGVkaXRcclxuICB0aGlzLmVkaXRpbmdFdmVudElkID0gZXZlbnQuaWQ7XHJcbiAgdGhpcy5lZGl0aW5nRW50cnlHcm91cCA9IGVudHJ5R3JvdXA7IC8vIFN0b3JlIHRoZSBlbnRyeSBncm91cCBiZWluZyBlZGl0ZWRcclxuICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTsgLy8gUmVnZW5lcmF0ZSB0aGUgY2FsZW5kYXIgdG8gcmVmbGVjdCBjaGFuZ2VzXHJcbiAgdGhpcy5vcGVuQm9va01vZGVsKCk7XHJcbiAgLy8gc3VkYXkgY29tbWVudFxyXG4gLy8gdGhpcy5vcGVuUXVlc3Rpb25Cb29rTW9kYWwoKTtcclxuXHJcbn1cclxuXHJcbmRlbGV0ZUV2ZW50KCBldmVudElkOiBudW1iZXIsIGVudHJ5R3JvdXA6IGFueSkge1xyXG4gIGxldCBldmVudCA9IHRoaXMuYWxsRXZlbnRzPy5maW5kKGUgPT4gZT8uaWQgPT09IGV2ZW50SWQpO1xyXG4gIGlmIChldmVudCkge1xyXG4gICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZW50cnlHcm91cCB0byBkZWxldGVcclxuICAgICAgY29uc3QgZW50cnlJbmRleCA9IGV2ZW50LmVudHJpZXMuaW5kZXhPZihlbnRyeUdyb3VwKTtcclxuICAgICAgaWYgKGVudHJ5SW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgZXZlbnQuZW50cmllcy5zcGxpY2UoZW50cnlJbmRleCwgMSk7IC8vIFJlbW92ZSB0aGUgc3BlY2lmaWMgZW50cnlcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGhhcyBubyBtb3JlIGVudHJpZXMsIHJlbW92ZSB0aGUgZXZlbnQgZW50aXJlbHlcclxuICAgICAgaWYgKGV2ZW50LmVudHJpZXMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBjb25zdCBldmVudEluZGV4ID0gdGhpcy5hbGxFdmVudHM/LmluZGV4T2YoZXZlbnQpO1xyXG4gICAgICAgICAgaWYgKGV2ZW50SW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxsRXZlbnRzPy5zcGxpY2UoZXZlbnRJbmRleCwgMSk7IC8vIFJlbW92ZSB0aGUgZW50aXJlIGV2ZW50XHJcbiAgICAgICAgICB9XHJcbiAgICAgIH1cclxuICB9XHJcbiAgbGV0IGV2ZW50RGF0YSA9IHt9O1xyXG4gICBldmVudERhdGFbJ2FjdGlvbiddID0gXCJkZWxldGVcIjtcclxuICAgZXZlbnREYXRhWydkYXRhJ10gPSBldmVudDtcclxuICB0aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdChldmVudERhdGEpO1xyXG4gIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpOyAvLyBSZWdlbmVyYXRlIHRoZSBjYWxlbmRhciB0byByZWZsZWN0IHRoZSBjaGFuZ2VzXHJcbn1cclxuXHJcbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcclxuICBhZGRFdmVudChkYXk6IENhbGVuZGFyRGF5LCBlbnRyeVF1ZXMpIHtcclxuICAgIC8vIFRyYW5zZm9ybSBuZXcgZW50cmllcyBpbnRvIHRoZSBkZXNpcmVkIGZvcm1hdFxyXG4gICAgY29uc3QgbmV3RW50cmllcyA9IGVudHJ5UXVlcy5yZWR1Y2UoKGFjYywgcSkgPT4ge1xyXG4gICAgICAgIGFjY1txLmlkXSA9IHsgLi4ucSB9O1xyXG4gICAgICAgIHJldHVybiBhY2M7XHJcbiAgICB9LCB7fSk7XHJcblxyXG4gICAgLy8gRmluZCBhbiBleGlzdGluZyBldmVudCBmb3IgdGhlIGdpdmVuIGRhdGVcclxuICAgIGNvbnN0IGV4aXN0aW5nRXZlbnQgPSBkYXkuZXZlbnRzPy5maW5kKGV2ZW50ID0+IGV2ZW50LmRhdGUgPT09IGRheS5kYXRlKTtcclxuXHJcbiAgICBpZiAoZXhpc3RpbmdFdmVudCkge1xyXG4gICAgICAgIC8vIE1lcmdlIG5ldyBlbnRyaWVzIGludG8gdGhlIGV4aXN0aW5nIGV2ZW50J3MgZW50cmllcyBhcnJheVxyXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBlbnRyaWVzIGFycmF5IGFscmVhZHkgY29udGFpbnMgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgaWRcclxuICAgICAgICBjb25zdCBleGlzdGluZ0VudHJpZXMgPSBleGlzdGluZ0V2ZW50LmVudHJpZXMubWFwKGVudHJ5ID0+ICh7IC4uLmVudHJ5IH0pKTtcclxuICAgICAgICAvLyBBcHBlbmQgbmV3IGVudHJpZXMgdG8gdGhlIGV4aXN0aW5nIGVudHJpZXNcclxuICAgICAgICBleGlzdGluZ0VudHJpZXMucHVzaChuZXdFbnRyaWVzKTtcclxuICAgICAgICBleGlzdGluZ0V2ZW50LmVudHJpZXMgPSBleGlzdGluZ0VudHJpZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBldmVudCBpZiBpdCBkb2Vzbid0IGV4aXN0IGZvciB0aGUgZ2l2ZW4gZGF0ZVxyXG4gICAgICAgIGNvbnN0IG5ld0V2ZW50ID0ge1xyXG4gICAgICAgICAgICBpZDogdGhpcy5nZW5lcmF0ZUlkKCksXHJcbiAgICAgICAgICAgIGRhdGU6IGRheS5kYXRlLFxyXG4gICAgICAgICAgICBlbnRyaWVzOiBbbmV3RW50cmllc10gLy8gV3JhcCB0aGUgbmV3IGVudHJpZXMgaW4gYW4gYXJyYXlcclxuICAgICAgICB9O1xyXG4gICAgICAgIGRheS5ldmVudHMgPSBkYXk/LmV2ZW50cyB8fCBbXVxyXG4gICAgICAgIGRheS5ldmVudHMucHVzaChuZXdFdmVudCk7XHJcbiAgICAgICAgdGhpcy5hbGxFdmVudHM/LnB1c2gobmV3RXZlbnQpO1xyXG4gICAgICAgIC8vdGhpcy5ldmVudFNlbGVjdGVkLmVtaXQodGhpcy5hbGxFdmVudHMpO1xyXG4gICAgICAgIGxldCBldmVudERhdGEgPSB7fTtcclxuICAgICAgICBldmVudERhdGFbJ2FjdGlvbiddID0gXCJhZGRcIjtcclxuICAgICAgICBldmVudERhdGFbJ2RhdGEnXSA9IG5ld0V2ZW50O1xyXG4gICAgICAgIHRoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KGV2ZW50RGF0YSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcclxuICAgIGNvbnNvbGUubG9nKCdhbGxFdmVudHMnLCB0aGlzLmFsbEV2ZW50cyk7XHJcbn1cclxuIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xyXG4gb25TYXZlKCkge1xyXG4gICAgaWYgKHRoaXMuZWRpdGluZ0V2ZW50SWQgIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBldmVudCA9IHRoaXMuYWxsRXZlbnRzPy5maW5kKGUgPT4gZT8uaWQgPT09IHRoaXMuZWRpdGluZ0V2ZW50SWQpO1xyXG4gICAgICAgIGlmIChldmVudCAmJiB0aGlzLmVkaXRpbmdFbnRyeUdyb3VwKSB7XHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlY2lmaWMgZW50cnkgZ3JvdXAgd2l0aGluIHRoZSBldmVudFxyXG4gICAgICAgICAgICBjb25zdCBlbnRyeUluZGV4ID0gZXZlbnQuZW50cmllcy5maW5kSW5kZXgoZW50cnlHcm91cCA9PiBlbnRyeUdyb3VwID09PSB0aGlzLmVkaXRpbmdFbnRyeUdyb3VwKTtcclxuICAgICAgICAgICAgaWYgKGVudHJ5SW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuZW50cmllc1tlbnRyeUluZGV4XSA9IHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5yZWR1Y2UoKGFjYywgcSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjY1txLmlkXSA9IHsgLi4ucSB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgICAgICB9LCB7fSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgLy8gdGhpcy5ldmVudFNlbGVjdGVkLmVtaXQodGhpcy5hbGxFdmVudHMpO1xyXG4gICAgICBsZXQgZXZlbnREYXRhID0ge307XHJcbiAgICAgIGV2ZW50RGF0YVsnYWN0aW9uJ10gPSBcImVkaXRcIjtcclxuICAgICAgZXZlbnREYXRhWydkYXRhJ10gPSBldmVudDtcclxuICAgICAgdGhpcy5ldmVudFNlbGVjdGVkLmVtaXQoZXZlbnREYXRhKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXkpIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRFdmVudCh0aGlzLnNlbGVjdGVkRGF5LCB0aGlzLmNhbGVuZGFyUXVlc3Rpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VDYWxlbmRhck1vZGFsKCk7XHJcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcclxufVxyXG5cclxuICAvLyBvbkNhbmNlbCgpIHtcclxuICAvLyAgIGNvbnNvbGUubG9nKCdDYW5jZWwgYnV0dG9uIGNsaWNrZWQnKTtcclxuICAvLyAgIHRoaXMuY2xvc2VDYWxlbmRhck1vZGFsKCk7XHJcbiAgLy8gfVxyXG4gIC8vdGhpcyBmdW50aW9uIG5lZWQgdG8gYmUgdXNlZFxyXG4gIC8vIGhhbmRsZVF1ZXN0aW9uRXZlbnQocXVlcyl7XHJcbiAgLy8gICAgIC8vIFVwZGF0ZSB0aGUgcXVlc3Rpb25zIGFycmF5IHdpdGggdGhlIG5ldyBxdWVzdGlvblxyXG4gIC8vICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5maW5kSW5kZXgocSA9PiBxLmlkID09PSBxdWVzLmlkKTtcclxuICAvLyAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAvLyAgICAgICAvLyBJZiBxdWVzdGlvbiBhbHJlYWR5IGV4aXN0cywgdXBkYXRlIGl0XHJcbiAgLy8gICAgICAgdGhpcy5jYWxlbmRhclF1ZXN0aW9uW2luZGV4XSA9IHF1ZXM7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgLy8gSWYgcXVlc3Rpb24gZG9lc24ndCBleGlzdCwgYWRkIGl0IHRvIHRoZSBhcnJheVxyXG4gIC8vICAgICAgIHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5wdXNoKHF1ZXMpO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsZW5kYXJRdWVzdGlvbik7XHJcbiAgLy8gICB9XHJcblxyXG4gLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXHJcbiAgZ2VuZXJhdGVJZCgpIHtcclxuICAgIHJldHVybiAnXycgKyBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSk7XHJcbiAgfVxyXG5cclxuICBnZXRFbnRyeUtleXMoZW50cnlHcm91cDogYW55KTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGVudHJ5R3JvdXApO1xyXG59XHJcblxyXG5yZW1vdmVDaGFyYWN0ZXJzKHF1ZXN0aW9uVGV4dDpzdHJpbmcpe1xyXG4gIGxldCB1cGRhdGVkVGV4dCA9IHF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XHJcbiAgcmV0dXJuIHVwZGF0ZWRUZXh0O1xyXG59XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJhbGlnbi1jYWxlbmRhclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItaGVhZGVyXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJwcmV2aW91c01vbnRoKClcIj48PCBQcmV2aW91cyA+PjwvYnV0dG9uPlxyXG4gICAgICAgICAgPGgzPnt7IGN1cnJlbnREYXRlIHwgZGF0ZTogJ01NTU0geXl5eScgfX08L2gzPlxyXG4gICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibmV4dE1vbnRoKClcIj48PCBOZXh0ID4+PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItZ3JpZFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImRheS1vZi13ZWVrXCIgKm5nRm9yPVwibGV0IGRheSBvZiBkYXlzT2ZXZWVrXCI+e3sgZGF5IH19PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1kYXlcIlxyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXkgb2YgY2FsZW5kYXJEYXlzXCJcclxuICAgICAgICAgICAgICBbY2xhc3Mubm90LWN1cnJlbnQtbW9udGhdPVwiIWRheS5pc0N1cnJlbnRNb250aFwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLnBhc3RdPVwiZGF5LmlzUGFzdFwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLnRvZGF5XT1cImRheS5pc1RvZGF5XCJcclxuICAgICAgICAgICAgICBbY2xhc3MuZnV0dXJlXT1cImRheS5pc0Z1dHVyZVwiXHJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheS5pc1NlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0RGF5KGRheSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5LW51bWJlclwiPnt7IGRheS5kYXRlLmdldERhdGUoKSB9fVxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXk/LmV2ZW50cz8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiZW50cnktaW5kaWNhdG9yXCIgW2NsYXNzLnNlbGVjdF09XCJkYXk/LmlzU2VsZWN0ZWRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBldmVudCBvZiBkYXkuZXZlbnRzXCIgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBlbnRyeUdyb3VwIG9mIGV2ZW50LmVudHJpZXNcIiBjbGFzcz1cImV2ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBrZXkgb2YgZ2V0RW50cnlLZXlzKGVudHJ5R3JvdXApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQ/LnZhbHVlIHwgZGF0ZTogJ3Nob3J0VGltZScgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cnlHcm91cFtrZXldLnR5cGUgIT0gJ1RpbWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGVudHJ5R3JvdXBba2V5XS5pbnB1dCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhcHBvaW5hcHBvaW50bWVudFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiYXBwb2ludG1lbnRzLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgPGg0PkFkZCBBcHBvaW50bWVudDwvaDQ+XHJcbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWREYXlcIiAoY2xpY2spPVwiYWRkQXBwb2ludG1lbnQoKVwiPkFkZDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLVZEIDA2U2VwMjQgY2FsZW5kYXIgdXBkYXRlcy0tPiBcclxuICAgICAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPiBcclxuICAgICAgPGRpdiAqbmdJZj1cInNob3dBcHBvaW5tZW50U2VjdGlvbiAmJiBzZWxlY3RlZERheT8uZXZlbnRzPy5sZW5ndGggPiAwXCIgY2xhc3M9XCJhcHBvaW50bWVudHMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8aDQ+QXBwb2ludG1lbnRzPC9oND5cclxuICAgICAgICAgIDxkaXYgICpuZ0Zvcj1cImxldCBldmVudCBvZiBzZWxlY3RlZERheT8uZXZlbnRzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50XCIgKm5nRm9yPVwibGV0IGVudHJ5R3JvdXAgb2YgZXZlbnQuZW50cmllc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBrZXkgb2YgZ2V0RW50cnlLZXlzKGVudHJ5R3JvdXApXCIgY2xhc3M9XCJlbnRyeS1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS5xdWVzdGlvblRleHRcIiBjbGFzcz1cImVudHJ5LXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cmVtb3ZlQ2hhcmFjdGVycyhlbnRyeUdyb3VwW2tleV0ucXVlc3Rpb25UZXh0KX19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVudHJ5LXZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZEIDA5U2VwMjQtIGRhdGUgdHlwZSBhbmQgbGluayB0eXBlIHVwZGF0ZXMgICAgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlICE9ICdUaW1lJyAmJiBlbnRyeUdyb3VwW2tleV0udHlwZSAhPSAnTGluaycmJiBlbnRyeUdyb3VwW2tleV0udHlwZSAhPSAnRGF0ZSdcIj57eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdUaW1lJ1wiPnt7IGVudHJ5R3JvdXBba2V5XS5pbnB1dCB8IGRhdGU6ICdzaG9ydFRpbWUnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlbnRyeUdyb3VwW2tleV0udHlwZSA9PSAnRGF0ZSdcIj57eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQgfCBkYXRlOiAnbWVkaXVtRGF0ZScgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdMaW5rJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIFtocmVmXT1cIicvLycrIGVudHJ5R3JvdXBba2V5XS5pbnB1dFwiIHRhcmdldD1cIl9ibGFua1wiPnt7cmVtb3ZlQ2hhcmFjdGVycyhlbnRyeUdyb3VwW2tleV0ucXVlc3Rpb25UZXh0KX19PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1hY3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRFdmVudChldmVudCxlbnRyeUdyb3VwKVwiPkVkaXQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZGVsZXRlRXZlbnQoZXZlbnQuaWQsZW50cnlHcm91cClcIj5EZWxldGU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPGFwcC1jdXN0b20tbW9kZWxcclxuICBbbW9kYWxUaXRsZV09XCJtb2RhbFRpdGxlXCJcclxuICBbaXNNb2RhbE9wZW5dPVwiaXNNb2RhbE9wZW5cIlxyXG4gIFttb2RhbFNpemVdPVwibW9kYWxTaXplXCJcclxuICBbc2F2ZUJ1dHRvblZhbHVlXT1cInNhdmVCdXR0b25WYWx1ZVwiXHJcbiAgW21vZGFsRm9vdGVyXT1cIm1vZGFsRm9vdGVyXCJcclxuICAoc2F2ZUJ1dHRvbkVtaXQpPVwib25TYXZlKClcIlxyXG4gIChjYW5jZWxCdXR0b25FbWl0KT1cIm9uQ2FuY2VsKClcIlxyXG4+XHJcbjxsaWItcXVlc3Rpb25ib29rIFtxYkl0ZW1dPVwicWJSZWZyZW5jZUJvb2tcIiBbcXVlc3Rpb25zXT1cInJlZmVyZW5jZVF1ZXN0aW9uc1wiIChoYW5kbGVRdWVzdGlvbik9XCJoYW5kbGVRdWVzdGlvbkV2ZW50KCRldmVudClcIj48L2xpYi1xdWVzdGlvbmJvb2s+XHJcbjxuZy10ZW1wbGF0ZSBkeW5hbWljQ29tcG9uZW50SG9zdCA+PC9uZy10ZW1wbGF0ZT5cclxuPC9hcHAtY3VzdG9tLW1vZGVsPiAtLT4iXX0=
366
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWNhbGVuZGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9jb21wb25lbnRzL2N1c3RvbS1jYWxlbmRhci9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnh0LWFwcC9zcmMvbGliL2NvbXBvbmVudHMvY3VzdG9tLWNhbGVuZGFyL2N1c3RvbS1jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQzs7OztBQW1CckgsTUFBTSxPQUFPLHVCQUF1QjtJQWdDYjtJQS9CWCxhQUFhLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQUNsRCw4QkFBOEI7SUFDcEIsWUFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdkMsU0FBUyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDcEMsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7SUFDdEMsU0FBUyxHQUFVLEVBQUUsQ0FBQztJQUN0QixRQUFRLENBQVU7SUFDbEIsS0FBSyxDQUFTO0lBQ3ZCLDJGQUEyRjtJQUMzRixPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ2Isa0JBQWtCLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLGNBQWMsQ0FBSztJQUNuQixnQkFBZ0IsR0FBRyxFQUFFLENBQUM7SUFDdEIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUNkLFdBQVcsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO0lBQy9CLFlBQVksR0FBa0IsRUFBRSxDQUFDO0lBQ2pDLFVBQVUsR0FBYSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUSxF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LENBQUMsVUFBZTtRQUMxQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQW1CO1FBQ2xDLElBQUksV0FBVyxHQUFHLFlBQVksRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7d0dBeldZLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLGtRQ25CcEMsODJJQXFGdUI7OzRGRGxFVix1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCO2tGQUtyQixhQUFhO3NCQUF0QixNQUFNO2dCQUVHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vd3JhcHBlcic7XG4vL2ltcG9ydCB7IFF1ZXN0aW9uYm9va0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BhZ2VzL3F1ZXN0aW9uYm9vay9xdWVzdGlvbmJvb2suY29tcG9uZW50Jztcbi8vaW1wb3J0IHsgQ29tcG9uZW50aG9zdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvY29tcG9uZW50aG9zdC9jb21wb25lbnRob3N0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xuaW50ZXJmYWNlIENhbGVuZGFyRGF5IHtcbiAgZGF0ZTogRGF0ZTtcbiAgZXZlbnRzOiBhbnlbXTtcbiAgaXNDdXJyZW50TW9udGg6IGJvb2xlYW47XG4gIGlzUGFzdDogYm9vbGVhbjtcbiAgaXNUb2RheTogYm9vbGVhbjtcbiAgaXNGdXR1cmU6IGJvb2xlYW47XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWN1c3RvbS1jYWxlbmRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jdXN0b20tY2FsZW5kYXIuY29tcG9uZW50LmNzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21DYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBPdXRwdXQoKSBldmVudFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICBAT3V0cHV0KCkgZGF0ZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBvcGVuTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGNsb3NlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgYWxsRXZlbnRzOiBhbnlbXSA9IFtdOyBcbiAgQElucHV0KCkgcXVlc3Rpb246IFF1ZXN0aW9uXG4gIEBJbnB1dCgpIG54dElkOiBzdHJpbmc7XG4gIC8vQFZpZXdDaGlsZChDb21wb25lbnRob3N0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBkeW5hbWljSG9zdDogQ29tcG9uZW50aG9zdERpcmVjdGl2ZTtcbiAgZW50cmllcyA9IFtdO1xuICByZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgcWJSZWZyZW5jZUJvb2s6YW55O1xuICBjYWxlbmRhclF1ZXN0aW9uID0gW107XG4gIGNhbGVuZGFyID0ge307XG4gIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgY2FsZW5kYXJEYXlzOiBDYWxlbmRhckRheVtdID0gW107XG4gIGRheXNPZldlZWs6IHN0cmluZ1tdID0gWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddO1xuICBuZXdFdmVudFRpdGxlOiBzdHJpbmcgPSAnJztcbiAgbmV3RXZlbnRUaW1lOiBzdHJpbmcgPSAnJztcbiAgbmV3RGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xuICBuZXdMaW5rOiBzdHJpbmcgPSAnJztcbiAgc2VsZWN0ZWREYXk6IENhbGVuZGFyRGF5IHwgbnVsbCA9IG51bGw7XG4gIGlzTW9kYWxPcGVuID0gZmFsc2U7XG4gIG1vZGFsVGl0bGUgPSAnQ3VzdG9tIE1vZGFsJztcbiAgbW9kYWxTaXplID0gJ2xhcmdlJztcbiAgc2F2ZUJ1dHRvblZhbHVlID0gJ1NhdmUnO1xuICBtb2RhbEZvb3RlciA9IHRydWU7XG4gIGVkaXRpbmdFdmVudElkOiBudW1iZXI7XG4gIGVkaXRpbmdFbnRyeUdyb3VwOiBhbnk7XG4gIHNob3dBcHBvaW5tZW50U2VjdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIHN1YnNjcmlwdGlvbjogYW55O1xuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlKSB7IH1cbiAgbmdPbkluaXQoKSB7XG4gICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0KXtcbiAgICAgIHRoaXMuYWxsRXZlbnRzID0gdGhpcy5xdWVzdGlvbi5pbnB1dDtcbiAgICAgfVxuICAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLmNoYW5nZVNlcnZpY2UuY3VzdG9tQ2hhbmdlJC5zdWJzY3JpYmUoXG4gICAgICAoY2hhbmdlVmFsdWUpID0+IHtcbiAgICAgICAgICBpZihjaGFuZ2VWYWx1ZSA9PSAnY2FsZW5kYXItbW9kYWwtc2F2ZScpIHtcbiAgICAgICAgICAgIHRoaXMub25TYXZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKGNoYW5nZVZhbHVlID09ICdkYXRhQmluZCcpIHtcbiAgICAgICAgICAgIGlmKHRoaXMucXVlc3Rpb24/LmlucHV0KXtcbiAgICAgICAgICAgICAgdGhpcy5hbGxFdmVudHMgPSB0aGlzLnF1ZXN0aW9uLmlucHV0O1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgKTtcbiAgIC8vIHRoaXMuZGF0ZVNlbGVjdGVkLmVtaXQodGhpcy5jYWxlbmRhcik7XG4gICAgLy90aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdCh0aGlzLmFsbEV2ZW50cyk7XG4gIH1cbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgcHJvY2Vzc1F1ZXN0aW9uKCl7XG4gICAgdGhpcy5lbnRyaWVzID0gSlNPTi5wYXJzZSh0aGlzLnF1ZXN0aW9uWydmaWVsZHNNZXRhJ10pO1xuICAgIHRoaXMucWJSZWZyZW5jZUJvb2sgPSBKU09OLnBhcnNlKHRoaXMucXVlc3Rpb25bJ3FiUmVmZXJlbmNlUXVlc3Rpb25zJ10pO1xuICAgIGxldCB0aXRsZSA9IHRoaXMucWJSZWZyZW5jZUJvb2s/LnF1ZXN0aW9uYm9vaz8udGl0bGU7XG4gICAgdGhpcy5tb2RhbFRpdGxlID0gdGl0bGU7XG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMgPSBbXTtcbiAgICBpZih0aGlzLmVudHJpZXMubGVuZ3RoID4gMCl7XG4gICAgICAgdGhpcy5lbnRyaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgIGlmKGVsZW1lbnQucXVlc3Rpb25SZWZlcmVuY2Upe1xuICAgICAgICAgICAgIGxldCBxUmVmZXJlbmNlID0gSlNPTi5wYXJzZShlbGVtZW50LnF1ZXN0aW9uUmVmZXJlbmNlKTtcbiAgICAgICAgICAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucy5wdXNoKHFSZWZlcmVuY2U/LnF1ZXN0aW9uKTtcbiAgICAgICAgICAgfVxuICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zb2xlLmxvZygnZW50cmllcy0tPicpO1xuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbi0tPicpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuZW50cmllcyk7XG4gICAgY29uc29sZS5sb2codGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMpO1xuICB9XG4gICAvLyBzdW5kYXkgY29tbWVudFxuICAvLyBvcGVuUXVlc3Rpb25Cb29rTW9kYWwoKSB7XG4gIC8vICAgY29uc3Qgdmlld0NvbnRhaW5lclJlZiA9IHRoaXMuZHluYW1pY0hvc3Qudmlld0NvbnRhaW5lclJlZjtcbiAgLy8gICB2aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG4gIC8vICAgY29uc3QgY29tcG9uZW50UmVmID0gdmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoUXVlc3Rpb25ib29rQ29tcG9uZW50KTtcbiAgLy8gICBjb21wb25lbnRSZWYuaW5zdGFuY2UucWJJdGVtID0gdGhpcy5xYlJlZnJlbmNlQm9vaztcbiAgLy8gICBjb21wb25lbnRSZWYuaW5zdGFuY2UucXVlc3Rpb25zID0gdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnM7XG4gIC8vICAgY29tcG9uZW50UmVmLmluc3RhbmNlLmhhbmRsZVF1ZXN0aW9uLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4gdGhpcy5oYW5kbGVRdWVzdGlvbkV2ZW50KGV2ZW50KSk7XG4gIC8vIH1cblxuICBnZW5lcmF0ZUNhbGVuZGFyKCkge1xuICAgIGNvbnN0IHllYXIgPSB0aGlzLmN1cnJlbnREYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgY29uc3QgbW9udGggPSB0aGlzLmN1cnJlbnREYXRlLmdldE1vbnRoKCk7XG5cbiAgICBjb25zdCBzdGFydE9mTW9udGggPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7XG4gICAgY29uc3QgZW5kT2ZNb250aCA9IG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCk7XG5cbiAgICBjb25zdCBzdGFydERheU9mV2VlayA9IHN0YXJ0T2ZNb250aC5nZXREYXkoKTtcbiAgICBjb25zdCBlbmREYXlPZldlZWsgPSBlbmRPZk1vbnRoLmdldERheSgpO1xuXG4gICAgY29uc3Qgc3RhcnREYXRlID0gbmV3IERhdGUoc3RhcnRPZk1vbnRoKTtcbiAgICBzdGFydERhdGUuc2V0RGF0ZShzdGFydERhdGUuZ2V0RGF0ZSgpIC0gc3RhcnREYXlPZldlZWspO1xuXG4gICAgY29uc3QgZW5kRGF0ZSA9IG5ldyBEYXRlKGVuZE9mTW9udGgpO1xuICAgIGVuZERhdGUuc2V0RGF0ZShlbmREYXRlLmdldERhdGUoKSArICg2IC0gZW5kRGF5T2ZXZWVrKSk7XG5cbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKG5ldyBEYXRlKCkuc2V0SG91cnMoMCwgMCwgMCwgMCkpO1xuICAgIFxuICAgICB0aGlzLmNhbGVuZGFyRGF5cyA9IFtdO1xuICAgICAgZm9yIChsZXQgZCA9IG5ldyBEYXRlKHN0YXJ0RGF0ZSk7IGQgPD0gZW5kRGF0ZTsgZC5zZXREYXRlKGQuZ2V0RGF0ZSgpICsgMSkpIHtcbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGQpO1xuICAgICAgICB0aGlzLmNhbGVuZGFyRGF5cy5wdXNoKHtcbiAgICAgICAgICBkYXRlOiBkYXRlLFxuICAgICAgICAgIGV2ZW50czogW10sXG4gICAgICAgICAgaXNDdXJyZW50TW9udGg6IGQuZ2V0TW9udGgoKSA9PT0gbW9udGgsXG4gICAgICAgICAgaXNQYXN0OiBkYXRlIDwgdG9kYXksXG4gICAgICAgICAgaXNUb2RheTogZGF0ZS5nZXRUaW1lKCkgPT09IHRvZGF5LmdldFRpbWUoKSxcbiAgICAgICAgICBpc0Z1dHVyZTogZGF0ZSA+IHRvZGF5LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgIC8vIFBvcHVsYXRlIGNhbGVuZGFyIHdpdGggZXZlbnRzIGZyb20gYWxsRXZlbnRzIGFycmF5XG4gICAgdGhpcy5jYWxlbmRhckRheXMuZm9yRWFjaChkYXkgPT4ge1xuICAgICAgZGF5LmV2ZW50cyA9IHRoaXMuYWxsRXZlbnRzPy5maWx0ZXIoZXZlbnQgPT4gZXZlbnQ/LmRhdGU/LnRvRGF0ZVN0cmluZygpID09PSBkYXkuZGF0ZS50b0RhdGVTdHJpbmcoKSk7XG4gICAgfSk7XG4gICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICAgIGxldCBjYWwgPSB7fVxuICAgIGNhbFsneWVhciddID0geWVhcjtcbiAgICBjYWxbJ21vbnRoJ10gPSBtb250aCArIDE7XG4gICAgdGhpcy5jYWxlbmRhciA9IGNhbDtcbiAgfVxuXG4gIHNlbGVjdERheShkYXk6IENhbGVuZGFyRGF5KSB7XG4gICAgY29uc29sZS5sb2coZGF5KTtcbiAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gICAgdGhpcy5zaG93QXBwb2lubWVudFNlY3Rpb24gPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWREYXkgPSBkYXk7XG4gICAvLyB0aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdChkYXk/LmV2ZW50cyk7XG4gICAgY29uc3QgcHJldmlvdXNseVNlbGVjdGVkRGF5ID0gdGhpcy5jYWxlbmRhckRheXMuZmluZChkID0+IGQuaXNTZWxlY3RlZCk7XG4gICAgaWYgKHByZXZpb3VzbHlTZWxlY3RlZERheSkge1xuICAgICAgcHJldmlvdXNseVNlbGVjdGVkRGF5LmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgLy8gU2VsZWN0IHRoZSBjbGlja2VkIGRheVxuICAgIGRheS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgIC8vIFZEIDA5U2VwMjQtIHNldHVwIHRoZSBxdWVyeSBwYXJhbSBkYXRhIGZvciBhcGkgY2FsbFxuICAgIGxldCByZWZlcmVuY2VEYXRhID0gW107XG4gICAgdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMuZm9yRWFjaChxdWVzID0+IHtcbiAgICAgIC8vIFZEIDA5LTA5LTI0IGdldCB0aGUgc2VsZWN0ZWQgZGF0ZVxuICAgICAgLy8gbmVlZCB0byBhZGQgaW4gdGhlIGRvY3VtZW50XG4gICAgICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAgICAgIGlmKHF1ZXMucmVmZXJlbmNlRmllbGQgPT0gJ3NlbGVjdGVkRGF0ZScpe1xuICAgICAgICAgIHF1ZXMuaW5wdXQgPSBkYXkuZGF0ZS50b0lTT1N0cmluZygpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgIH1cbiAgICAgICAvLyBWRCAwOS0wOS0yNCBnZXQgdGhlIHF1ZXJ5IHJlZnJlbmNlICBmaWVsZCBkYXRhIHRvIHBhc3MgdGhlIHF1ZXJ5UGFyYW0gIGZvciBhcGlcbiAgICAgICBpZihxdWVzLnN1YlRleHQpe1xuICAgICAgICBsZXQgc3ViVGV4dCA9IEpTT04ucGFyc2UocXVlcy5zdWJUZXh0KTtcbiAgICAgICAgaWYgKHN1YlRleHQucXVlcnlGaWVsZCAmJiBzdWJUZXh0LnF1ZXJ5VmFsdWVSZWZlcmVuY2UpIHtcbiAgICAgICAgICAgIGxldCBjdXJyZW50UXVlcyA9IHF1ZXM7XG4gICAgICAgICAgICBsZXQgcXVlcnlSZWZlcmVuY2VzID0gc3ViVGV4dC5xdWVyeVZhbHVlUmVmZXJlbmNlLnNwbGl0KCcsJyk7ICAgXG4gICAgICAgICAgICBxdWVyeVJlZmVyZW5jZXMuZm9yRWFjaChyZWZGaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJlZlF1ZXMgPSB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucy5maW5kKHEgPT4gcS5yZWZlcmVuY2VGaWVsZCA9PT0gcmVmRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChyZWZRdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZURhdGEucHVzaChyZWZRdWVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEFkZCB0aGUgcmVmZXJlbmNlRGF0YSBhcnJheSB0byB0aGUgY3VycmVudCBxdWVzdGlvblxuICAgICAgICAgICAgY3VycmVudFF1ZXMucmVmZXJlbmNlUXVlcnlEYXRhID0gcmVmZXJlbmNlRGF0YTtcbiAgICAgICAgfVxuICAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHJldmlvdXNNb250aCgpIHtcbiAgICB0aGlzLnNob3dBcHBvaW5tZW50U2VjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuY3VycmVudERhdGUuc2V0TW9udGgodGhpcy5jdXJyZW50RGF0ZS5nZXRNb250aCgpIC0gMSk7XG4gICAgdGhpcy5jdXJyZW50RGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VycmVudERhdGUpOyAvLyBFbnN1cmUgdGhlIGRhdGUgb2JqZWN0IGlzIHVwZGF0ZWRcbiAgICB0aGlzLmdlbmVyYXRlQ2FsZW5kYXIoKTtcbiAgICB0aGlzLmRhdGVTZWxlY3RlZC5lbWl0KHRoaXMuY2FsZW5kYXIpO1xuICAgIHRoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KHRoaXMuYWxsRXZlbnRzKTtcbiAgfVxuXG4gIG5leHRNb250aCgpIHtcbiAgICAgLy8gVkQgMDZTZXAyNCBjYWxlbmRhciBjaGFuZ2VzXG4gICAgdGhpcy5zaG93QXBwb2lubWVudFNlY3Rpb24gPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnREYXRlLnNldE1vbnRoKHRoaXMuY3VycmVudERhdGUuZ2V0TW9udGgoKSArIDEpO1xuICAgIHRoaXMuY3VycmVudERhdGUgPSBuZXcgRGF0ZSh0aGlzLmN1cnJlbnREYXRlKTsgLy8gRW5zdXJlIHRoZSBkYXRlIG9iamVjdCBpcyB1cGRhdGVkXG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgdGhpcy5kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLmNhbGVuZGFyKTtcbiAgICB0aGlzLmV2ZW50U2VsZWN0ZWQuZW1pdCh0aGlzLmFsbEV2ZW50cyk7XG4gIH1cblxuICBhZGRBcHBvaW50bWVudCgpIHtcbiAgICB0aGlzLmlzTW9kYWxPcGVuID0gdHJ1ZTtcbiAgICAgdGhpcy5jYWxlbmRhclF1ZXN0aW9uID0gdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMubWFwKHEgPT4gKHsgLi4ucSwgaW5wdXQ6ICcnIH0pKTtcbiAgICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucy5mb3JFYWNoKHF1ZXMgPT4ge1xuICAgICAgLy8gY2xlYXIgdGhlIGlucHV0XG4gICAgICBpZihxdWVzLnJlZmVyZW5jZUZpZWxkICE9ICdzZWxlY3RlZERhdGUnKXtcbiAgICAgICAgaWYocXVlcy50eXBlID09ICdEcm9wZG93bicpe1xuICAgICAgICAgIGRlbGV0ZSBxdWVzLmlucHV0O1xuICAgICAgICAgIGRlbGV0ZSBxdWVzLnNlbGVjdGVkVmFsdWU7XG4gICAgICAgICAgIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIHF1ZXMuaW5wdXQ7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyk7XG4gICAgdGhpcy5lZGl0aW5nRXZlbnRJZCA9IG51bGw7XG4gICAgdGhpcy5jYWxlbmRhclF1ZXN0aW9uID0gdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnM7XG4gICAgdGhpcy5vcGVuQm9va01vZGVsKCk7XG4gICAgLy8gc3VuZGF5IGNvbW1lbnRcbiAgICAvL3RoaXMub3BlblF1ZXN0aW9uQm9va01vZGFsKCk7XG4gIH1cblxuICBvcGVuQm9va01vZGVsKCl7XG4gICAgdGhpcy5vcGVuTW9kYWwuZW1pdCh7XG4gICAgICBxYlJlZnJlbmNlQm9vazogdGhpcy5xYlJlZnJlbmNlQm9vayxcbiAgICAgIHJlZmVyZW5jZVF1ZXN0aW9uczogdGhpcy5yZWZlcmVuY2VRdWVzdGlvbnMsXG4gICAgICBtb2RhbFRpdGxlIDogdGhpcy5tb2RhbFRpdGxlLFxuICAgICAgbW9kYWxTaXplIDogdGhpcy5tb2RhbFNpemUsXG4gICAgICBzYXZlQnV0dG9uVmFsdWUgOiB0aGlzLnNhdmVCdXR0b25WYWx1ZSxcbiAgICAgIG1vZGFsRm9vdGVyIDogdGhpcy5tb2RhbEZvb3RlcixcblxuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VDYWxlbmRhck1vZGFsKCkge1xuICAgIHRoaXMuaXNNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmNsb3NlTW9kYWwuZW1pdCh0cnVlKTtcbiAgfVxuIC8vIFZEIDA2U2VwMjQgY2FsZW5kYXIgY2hhbmdlc1xuXG5lZGl0RXZlbnQoZXZlbnQ6IGFueSwgZW50cnlHcm91cDogYW55KSB7XG4gIHRoaXMuaXNNb2RhbE9wZW4gPSB0cnVlO1xuICB0aGlzLnJlZmVyZW5jZVF1ZXN0aW9ucyA9IE9iamVjdC52YWx1ZXMoZW50cnlHcm91cCk7XG4gIHRoaXMuY2FsZW5kYXJRdWVzdGlvbiA9IFsuLi50aGlzLnJlZmVyZW5jZVF1ZXN0aW9uc107IC8vIE1ha2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IGVudHJpZXMgdG8gZWRpdFxuICB0aGlzLmVkaXRpbmdFdmVudElkID0gZXZlbnQuaWQ7XG4gIHRoaXMuZWRpdGluZ0VudHJ5R3JvdXAgPSBlbnRyeUdyb3VwOyAvLyBTdG9yZSB0aGUgZW50cnkgZ3JvdXAgYmVpbmcgZWRpdGVkXG4gIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpOyAvLyBSZWdlbmVyYXRlIHRoZSBjYWxlbmRhciB0byByZWZsZWN0IGNoYW5nZXNcbiAgdGhpcy5vcGVuQm9va01vZGVsKCk7XG4gIC8vIHN1ZGF5IGNvbW1lbnRcbiAvLyB0aGlzLm9wZW5RdWVzdGlvbkJvb2tNb2RhbCgpO1xuXG59XG5cbmRlbGV0ZUV2ZW50KCBldmVudElkOiBudW1iZXIsIGVudHJ5R3JvdXA6IGFueSkge1xuICBsZXQgZXZlbnQgPSB0aGlzLmFsbEV2ZW50cz8uZmluZChlID0+IGU/LmlkID09PSBldmVudElkKTtcbiAgaWYgKGV2ZW50KSB7XG4gICAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZW50cnlHcm91cCB0byBkZWxldGVcbiAgICAgIGNvbnN0IGVudHJ5SW5kZXggPSBldmVudC5lbnRyaWVzLmluZGV4T2YoZW50cnlHcm91cCk7XG4gICAgICBpZiAoZW50cnlJbmRleCA+IC0xKSB7XG4gICAgICAgICAgZXZlbnQuZW50cmllcy5zcGxpY2UoZW50cnlJbmRleCwgMSk7IC8vIFJlbW92ZSB0aGUgc3BlY2lmaWMgZW50cnlcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGV2ZW50IGhhcyBubyBtb3JlIGVudHJpZXMsIHJlbW92ZSB0aGUgZXZlbnQgZW50aXJlbHlcbiAgICAgIGlmIChldmVudC5lbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGNvbnN0IGV2ZW50SW5kZXggPSB0aGlzLmFsbEV2ZW50cz8uaW5kZXhPZihldmVudCk7XG4gICAgICAgICAgaWYgKGV2ZW50SW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICB0aGlzLmFsbEV2ZW50cz8uc3BsaWNlKGV2ZW50SW5kZXgsIDEpOyAvLyBSZW1vdmUgdGhlIGVudGlyZSBldmVudFxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgfVxuICBsZXQgZXZlbnREYXRhID0ge307XG4gICBldmVudERhdGFbJ2FjdGlvbiddID0gXCJkZWxldGVcIjtcbiAgIGV2ZW50RGF0YVsnZGF0YSddID0gZXZlbnQ7XG4gIHRoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KGV2ZW50RGF0YSk7XG4gIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpOyAvLyBSZWdlbmVyYXRlIHRoZSBjYWxlbmRhciB0byByZWZsZWN0IHRoZSBjaGFuZ2VzXG59XG5cbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgYWRkRXZlbnQoZGF5OiBDYWxlbmRhckRheSwgZW50cnlRdWVzKSB7XG4gICAgLy8gVHJhbnNmb3JtIG5ldyBlbnRyaWVzIGludG8gdGhlIGRlc2lyZWQgZm9ybWF0XG4gICAgY29uc3QgbmV3RW50cmllcyA9IGVudHJ5UXVlcy5yZWR1Y2UoKGFjYywgcSkgPT4ge1xuICAgICAgICBhY2NbcS5pZF0gPSB7IC4uLnEgfTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICAvLyBGaW5kIGFuIGV4aXN0aW5nIGV2ZW50IGZvciB0aGUgZ2l2ZW4gZGF0ZVxuICAgIGNvbnN0IGV4aXN0aW5nRXZlbnQgPSBkYXkuZXZlbnRzPy5maW5kKGV2ZW50ID0+IGV2ZW50LmRhdGUgPT09IGRheS5kYXRlKTtcblxuICAgIGlmIChleGlzdGluZ0V2ZW50KSB7XG4gICAgICAgIC8vIE1lcmdlIG5ldyBlbnRyaWVzIGludG8gdGhlIGV4aXN0aW5nIGV2ZW50J3MgZW50cmllcyBhcnJheVxuICAgICAgICAvLyBDaGVjayBpZiB0aGUgZW50cmllcyBhcnJheSBhbHJlYWR5IGNvbnRhaW5zIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIGlkXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nRW50cmllcyA9IGV4aXN0aW5nRXZlbnQuZW50cmllcy5tYXAoZW50cnkgPT4gKHsgLi4uZW50cnkgfSkpO1xuICAgICAgICAvLyBBcHBlbmQgbmV3IGVudHJpZXMgdG8gdGhlIGV4aXN0aW5nIGVudHJpZXNcbiAgICAgICAgZXhpc3RpbmdFbnRyaWVzLnB1c2gobmV3RW50cmllcyk7XG4gICAgICAgIGV4aXN0aW5nRXZlbnQuZW50cmllcyA9IGV4aXN0aW5nRW50cmllcztcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZXZlbnQgaWYgaXQgZG9lc24ndCBleGlzdCBmb3IgdGhlIGdpdmVuIGRhdGVcbiAgICAgICAgY29uc3QgbmV3RXZlbnQgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5nZW5lcmF0ZUlkKCksXG4gICAgICAgICAgICBkYXRlOiBkYXkuZGF0ZSxcbiAgICAgICAgICAgIGVudHJpZXM6IFtuZXdFbnRyaWVzXSAvLyBXcmFwIHRoZSBuZXcgZW50cmllcyBpbiBhbiBhcnJheVxuICAgICAgICB9O1xuICAgICAgICBkYXkuZXZlbnRzID0gZGF5Py5ldmVudHMgfHwgW11cbiAgICAgICAgZGF5LmV2ZW50cy5wdXNoKG5ld0V2ZW50KTtcbiAgICAgICAgdGhpcy5hbGxFdmVudHM/LnB1c2gobmV3RXZlbnQpO1xuICAgICAgICAvL3RoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KHRoaXMuYWxsRXZlbnRzKTtcbiAgICAgICAgbGV0IGV2ZW50RGF0YSA9IHt9O1xuICAgICAgICBldmVudERhdGFbJ2FjdGlvbiddID0gXCJhZGRcIjtcbiAgICAgICAgZXZlbnREYXRhWydkYXRhJ10gPSBuZXdFdmVudDtcbiAgICAgICAgdGhpcy5ldmVudFNlbGVjdGVkLmVtaXQoZXZlbnREYXRhKTtcbiAgICB9XG4gICAgdGhpcy5nZW5lcmF0ZUNhbGVuZGFyKCk7XG4gICAgY29uc29sZS5sb2coJ2FsbEV2ZW50cycsIHRoaXMuYWxsRXZlbnRzKTtcbn1cbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiBvblNhdmUoKSB7XG4gICAgaWYgKHRoaXMuZWRpdGluZ0V2ZW50SWQgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB0aGlzLmFsbEV2ZW50cz8uZmluZChlID0+IGU/LmlkID09PSB0aGlzLmVkaXRpbmdFdmVudElkKTtcbiAgICAgICAgaWYgKGV2ZW50ICYmIHRoaXMuZWRpdGluZ0VudHJ5R3JvdXApIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlY2lmaWMgZW50cnkgZ3JvdXAgd2l0aGluIHRoZSBldmVudFxuICAgICAgICAgICAgY29uc3QgZW50cnlJbmRleCA9IGV2ZW50LmVudHJpZXMuZmluZEluZGV4KGVudHJ5R3JvdXAgPT4gZW50cnlHcm91cCA9PT0gdGhpcy5lZGl0aW5nRW50cnlHcm91cCk7XG4gICAgICAgICAgICBpZiAoZW50cnlJbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgZXZlbnQuZW50cmllc1tlbnRyeUluZGV4XSA9IHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5yZWR1Y2UoKGFjYywgcSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhY2NbcS5pZF0gPSB7IC4uLnEgfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgLy8gdGhpcy5ldmVudFNlbGVjdGVkLmVtaXQodGhpcy5hbGxFdmVudHMpO1xuICAgICAgbGV0IGV2ZW50RGF0YSA9IHt9O1xuICAgICAgZXZlbnREYXRhWydhY3Rpb24nXSA9IFwiZWRpdFwiO1xuICAgICAgZXZlbnREYXRhWydkYXRhJ10gPSBldmVudDtcbiAgICAgIHRoaXMuZXZlbnRTZWxlY3RlZC5lbWl0KGV2ZW50RGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkRXZlbnQodGhpcy5zZWxlY3RlZERheSwgdGhpcy5jYWxlbmRhclF1ZXN0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3NlQ2FsZW5kYXJNb2RhbCgpO1xuICAgIHRoaXMuZ2VuZXJhdGVDYWxlbmRhcigpO1xufVxuXG4gIC8vIG9uQ2FuY2VsKCkge1xuICAvLyAgIGNvbnNvbGUubG9nKCdDYW5jZWwgYnV0dG9uIGNsaWNrZWQnKTtcbiAgLy8gICB0aGlzLmNsb3NlQ2FsZW5kYXJNb2RhbCgpO1xuICAvLyB9XG4gIC8vdGhpcyBmdW50aW9uIG5lZWQgdG8gYmUgdXNlZFxuICAvLyBoYW5kbGVRdWVzdGlvbkV2ZW50KHF1ZXMpe1xuICAvLyAgICAgLy8gVXBkYXRlIHRoZSBxdWVzdGlvbnMgYXJyYXkgd2l0aCB0aGUgbmV3IHF1ZXN0aW9uXG4gIC8vICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5maW5kSW5kZXgocSA9PiBxLmlkID09PSBxdWVzLmlkKTtcbiAgLy8gICAgIGlmIChpbmRleCA+IC0xKSB7XG4gIC8vICAgICAgIC8vIElmIHF1ZXN0aW9uIGFscmVhZHkgZXhpc3RzLCB1cGRhdGUgaXRcbiAgLy8gICAgICAgdGhpcy5jYWxlbmRhclF1ZXN0aW9uW2luZGV4XSA9IHF1ZXM7XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICAvLyBJZiBxdWVzdGlvbiBkb2Vzbid0IGV4aXN0LCBhZGQgaXQgdG8gdGhlIGFycmF5XG4gIC8vICAgICAgIHRoaXMuY2FsZW5kYXJRdWVzdGlvbi5wdXNoKHF1ZXMpO1xuICAvLyAgICAgfVxuICAvLyAgICAgY29uc29sZS5sb2codGhpcy5jYWxlbmRhclF1ZXN0aW9uKTtcbiAgLy8gICB9XG5cbiAvLyBWRCAwNlNlcDI0IGNhbGVuZGFyIGNoYW5nZXNcbiAgZ2VuZXJhdGVJZCgpIHtcbiAgICByZXR1cm4gJ18nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpO1xuICB9XG5cbiAgZ2V0RW50cnlLZXlzKGVudHJ5R3JvdXA6IGFueSk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50cnlHcm91cCk7XG59XG5cbnJlbW92ZUNoYXJhY3RlcnMocXVlc3Rpb25UZXh0OnN0cmluZyl7XG4gIGxldCB1cGRhdGVkVGV4dCA9IHF1ZXN0aW9uVGV4dD8ucmVwbGFjZSgvPFtePl0qPi9nLCAnJyk7XG4gIHJldHVybiB1cGRhdGVkVGV4dDtcbn1cblxufVxuIiwiPGRpdiBjbGFzcz1cImFsaWduLWNhbGVuZGFyXCI+XG4gICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNhbGVuZGFyLWhlYWRlclwiPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInByZXZpb3VzTW9udGgoKVwiPjw8IFByZXZpb3VzID4+PC9idXR0b24+XG4gICAgICAgICAgPGgzPnt7IGN1cnJlbnREYXRlIHwgZGF0ZTogJ01NTU0geXl5eScgfX08L2gzPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm5leHRNb250aCgpXCI+PDwgTmV4dCA+PjwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItZ3JpZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXktb2Ytd2Vla1wiICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5c09mV2Vla1wiPnt7IGRheSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJjYWxlbmRhci1kYXlcIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF5IG9mIGNhbGVuZGFyRGF5c1wiXG4gICAgICAgICAgICAgIFtjbGFzcy5ub3QtY3VycmVudC1tb250aF09XCIhZGF5LmlzQ3VycmVudE1vbnRoXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnBhc3RdPVwiZGF5LmlzUGFzdFwiXG4gICAgICAgICAgICAgIFtjbGFzcy50b2RheV09XCJkYXkuaXNUb2RheVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5mdXR1cmVdPVwiZGF5LmlzRnV0dXJlXCJcbiAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImRheS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdERheShkYXkpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5LW51bWJlclwiPnt7IGRheS5kYXRlLmdldERhdGUoKSB9fVxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF5Py5ldmVudHM/Lmxlbmd0aCA+IDBcIiBjbGFzcz1cImVudHJ5LWluZGljYXRvclwiIFtjbGFzcy5zZWxlY3RdPVwiZGF5Py5pc1NlbGVjdGVkXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPCEtLSA8ZGl2ICpuZ0Zvcj1cImxldCBldmVudCBvZiBkYXkuZXZlbnRzXCIgPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZW50cnlHcm91cCBvZiBldmVudC5lbnRyaWVzXCIgY2xhc3M9XCJldmVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGtleSBvZiBnZXRFbnRyeUtleXMoZW50cnlHcm91cClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdUaW1lJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZW50cnlHcm91cFtrZXldLmlucHV0Py52YWx1ZSB8IGRhdGU6ICdzaG9ydFRpbWUnIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW50cnlHcm91cFtrZXldLnR5cGUgIT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJhcHBvaW5hcHBvaW50bWVudFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImFwcG9pbnRtZW50cy1jb250YWluZXJcIj5cbiAgICAgICAgICA8aDQ+QWRkIEFwcG9pbnRtZW50PC9oND5cbiAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VsZWN0ZWREYXlcIiAoY2xpY2spPVwiYWRkQXBwb2ludG1lbnQoKVwiPkFkZDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tVkQgMDZTZXAyNCBjYWxlbmRhciB1cGRhdGVzLS0+IFxuICAgICAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPiBcbiAgICAgIDxkaXYgKm5nSWY9XCJzaG93QXBwb2lubWVudFNlY3Rpb24gJiYgc2VsZWN0ZWREYXk/LmV2ZW50cz8ubGVuZ3RoID4gMFwiIGNsYXNzPVwiYXBwb2ludG1lbnRzLWNvbnRhaW5lclwiPlxuICAgICAgICAgIDxoND5BcHBvaW50bWVudHM8L2g0PlxuICAgICAgICAgIDxkaXYgICpuZ0Zvcj1cImxldCBldmVudCBvZiBzZWxlY3RlZERheT8uZXZlbnRzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudFwiICpuZ0Zvcj1cImxldCBlbnRyeUdyb3VwIG9mIGV2ZW50LmVudHJpZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBrZXkgb2YgZ2V0RW50cnlLZXlzKGVudHJ5R3JvdXApXCIgY2xhc3M9XCJlbnRyeS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbnRyeUdyb3VwW2tleV0ucXVlc3Rpb25UZXh0XCIgY2xhc3M9XCJlbnRyeS10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tyZW1vdmVDaGFyYWN0ZXJzKGVudHJ5R3JvdXBba2V5XS5xdWVzdGlvblRleHQpfX06XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbnRyeS12YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVkQgMDlTZXAyNC0gZGF0ZSB0eXBlIGFuZCBsaW5rIHR5cGUgdXBkYXRlcyAgICAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlICE9ICdUaW1lJyAmJiBlbnRyeUdyb3VwW2tleV0udHlwZSAhPSAnTGluaycmJiBlbnRyeUdyb3VwW2tleV0udHlwZSAhPSAnRGF0ZSdcIj57eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJlbnRyeUdyb3VwW2tleV0udHlwZSA9PSAnVGltZSdcIj57eyBlbnRyeUdyb3VwW2tleV0uaW5wdXQgfCBkYXRlOiAnc2hvcnRUaW1lJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdEYXRlJ1wiPnt7IGVudHJ5R3JvdXBba2V5XS5pbnB1dCB8IGRhdGU6ICdtZWRpdW1EYXRlJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImVudHJ5R3JvdXBba2V5XS50eXBlID09ICdMaW5rJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBbaHJlZl09XCInLy8nKyBlbnRyeUdyb3VwW2tleV0uaW5wdXRcIiB0YXJnZXQ9XCJfYmxhbmtcIj57e3JlbW92ZUNoYXJhY3RlcnMoZW50cnlHcm91cFtrZXldLnF1ZXN0aW9uVGV4dCl9fTwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV2ZW50LWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImVkaXRFdmVudChldmVudCxlbnRyeUdyb3VwKVwiPkVkaXQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImRlbGV0ZUV2ZW50KGV2ZW50LmlkLGVudHJ5R3JvdXApXCI+RGVsZXRlPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIDxhcHAtY3VzdG9tLW1vZGVsXG4gIFttb2RhbFRpdGxlXT1cIm1vZGFsVGl0bGVcIlxuICBbaXNNb2RhbE9wZW5dPVwiaXNNb2RhbE9wZW5cIlxuICBbbW9kYWxTaXplXT1cIm1vZGFsU2l6ZVwiXG4gIFtzYXZlQnV0dG9uVmFsdWVdPVwic2F2ZUJ1dHRvblZhbHVlXCJcbiAgW21vZGFsRm9vdGVyXT1cIm1vZGFsRm9vdGVyXCJcbiAgKHNhdmVCdXR0b25FbWl0KT1cIm9uU2F2ZSgpXCJcbiAgKGNhbmNlbEJ1dHRvbkVtaXQpPVwib25DYW5jZWwoKVwiXG4+XG48bGliLXF1ZXN0aW9uYm9vayBbcWJJdGVtXT1cInFiUmVmcmVuY2VCb29rXCIgW3F1ZXN0aW9uc109XCJyZWZlcmVuY2VRdWVzdGlvbnNcIiAoaGFuZGxlUXVlc3Rpb24pPVwiaGFuZGxlUXVlc3Rpb25FdmVudCgkZXZlbnQpXCI+PC9saWItcXVlc3Rpb25ib29rPlxuPG5nLXRlbXBsYXRlIGR5bmFtaWNDb21wb25lbnRIb3N0ID48L25nLXRlbXBsYXRlPlxuPC9hcHAtY3VzdG9tLW1vZGVsPiAtLT4iXX0=