tin-spa 14.4.2 → 14.10.2

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 (160) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/classes/Classes.mjs +57 -32
  3. package/esm2020/lib/classes/LibClasses.mjs +2 -1
  4. package/esm2020/lib/classes/TinCore.mjs +194 -44
  5. package/esm2020/lib/components/alert/alert.component.mjs +12 -6
  6. package/esm2020/lib/components/attach/attach.component.mjs +49 -33
  7. package/esm2020/lib/components/capsules/capsules.component.mjs +63 -0
  8. package/esm2020/lib/components/cards/cards.component.mjs +103 -0
  9. package/esm2020/lib/components/date/date.component.mjs +4 -4
  10. package/esm2020/lib/components/email/email.component.mjs +19 -17
  11. package/esm2020/lib/components/form/form.component.mjs +142 -57
  12. package/esm2020/lib/components/html/html.component.mjs +34 -0
  13. package/esm2020/lib/components/label/label.component.mjs +6 -3
  14. package/esm2020/lib/components/list-dialog/list-dialog.component.mjs +3 -3
  15. package/esm2020/lib/components/money/money.component.mjs +26 -9
  16. package/esm2020/lib/components/multi-select/multi-select.component.mjs +165 -0
  17. package/esm2020/lib/components/multi-text/multi-text.component.mjs +208 -0
  18. package/esm2020/lib/components/nav-menu/nav-menu.component.mjs +31 -27
  19. package/esm2020/lib/components/notes/notes.component.mjs +62 -0
  20. package/esm2020/lib/components/number/number.component.mjs +23 -8
  21. package/esm2020/lib/components/option/option.component.mjs +36 -14
  22. package/esm2020/lib/components/page/page.component.mjs +101 -0
  23. package/esm2020/lib/components/search/search.component.mjs +10 -5
  24. package/esm2020/lib/components/select/select.component.mjs +56 -129
  25. package/esm2020/lib/components/select-bitwise/select-bitwise.component.mjs +87 -0
  26. package/esm2020/lib/components/select-common/select-common.component.mjs +189 -0
  27. package/esm2020/lib/components/select-internal/select-internal.component.mjs +75 -0
  28. package/esm2020/lib/components/select-lite/select-lite.component.mjs +18 -0
  29. package/esm2020/lib/components/steps/steps.component.mjs +83 -61
  30. package/esm2020/lib/components/suffix/suffix.component.mjs +70 -0
  31. package/esm2020/lib/components/table/detailsDialog.component.mjs +169 -37
  32. package/esm2020/lib/components/table/table.component.mjs +136 -111
  33. package/esm2020/lib/components/table-action/table-action.component.mjs +42 -8
  34. package/esm2020/lib/components/table-header/table-header.component.mjs +12 -8
  35. package/esm2020/lib/components/table-internal/detailsDialog-internal.component.mjs +169 -35
  36. package/esm2020/lib/components/table-internal/table-internal.component.mjs +138 -112
  37. package/esm2020/lib/components/table-lite/detailsDialog-lite.component.mjs +371 -0
  38. package/esm2020/lib/components/table-lite/table-lite.component.mjs +441 -0
  39. package/esm2020/lib/components/table-row/table-row.component.mjs +23 -4
  40. package/esm2020/lib/components/text/text.component.mjs +85 -40
  41. package/esm2020/lib/components/tiles/tiles.component.mjs +32 -20
  42. package/esm2020/lib/components/viewer/viewer.component.mjs +7 -3
  43. package/esm2020/lib/components/viewer/viewerDialog.component.mjs +20 -13
  44. package/esm2020/lib/modules/admin/admin-routing.module.mjs +11 -1
  45. package/esm2020/lib/pages/accounts/accountDialog.component.mjs +1 -1
  46. package/esm2020/lib/pages/app-models/app-models.component.mjs +56 -0
  47. package/esm2020/lib/pages/approvals/approvals.component.mjs +19 -0
  48. package/esm2020/lib/pages/approvals-config/approvals-config.component.mjs +165 -0
  49. package/esm2020/lib/pages/bug/bug.component.mjs +3 -3
  50. package/esm2020/lib/pages/change-password/change-password.component.mjs +1 -1
  51. package/esm2020/lib/pages/create-account/create-account.component.mjs +1 -1
  52. package/esm2020/lib/pages/customers/customers.component.mjs +9 -48
  53. package/esm2020/lib/pages/departments/departments.component.mjs +2 -4
  54. package/esm2020/lib/pages/employees/employees.component.mjs +3 -4
  55. package/esm2020/lib/pages/grades/grades.component.mjs +3 -3
  56. package/esm2020/lib/pages/inventory/inventory.component.mjs +3 -3
  57. package/esm2020/lib/pages/inventory/quantityDialog.component.mjs +1 -1
  58. package/esm2020/lib/pages/invitations-table/invitations-table.component.mjs +11 -10
  59. package/esm2020/lib/pages/login/login.component.mjs +52 -14
  60. package/esm2020/lib/pages/logs/logs.component.mjs +27 -22
  61. package/esm2020/lib/pages/membership/membership.component.mjs +15 -19
  62. package/esm2020/lib/pages/notifications/notifications.component.mjs +82 -6
  63. package/esm2020/lib/pages/notifications-config/notifications-config.component.mjs +113 -0
  64. package/esm2020/lib/pages/plans/plans.component.mjs +16 -19
  65. package/esm2020/lib/pages/positions/positions.component.mjs +4 -4
  66. package/esm2020/lib/pages/profile/profile.component.mjs +4 -3
  67. package/esm2020/lib/pages/recover-account/recover-account.component.mjs +1 -1
  68. package/esm2020/lib/pages/roles/addRoleDialog.component.mjs +2 -2
  69. package/esm2020/lib/pages/roles/roles.component.mjs +77 -17
  70. package/esm2020/lib/pages/settings/settings.component.mjs +2 -11
  71. package/esm2020/lib/pages/signup/signup.component.mjs +1 -1
  72. package/esm2020/lib/pages/suppliers/suppliers.component.mjs +3 -31
  73. package/esm2020/lib/pages/tasks/tasks.component.mjs +9 -9
  74. package/esm2020/lib/pages/tenant-settings/tenant-settings.component.mjs +145 -72
  75. package/esm2020/lib/pages/tenants/tenants.component.mjs +10 -10
  76. package/esm2020/lib/pages/transactions/transactDialog.component.mjs +1 -1
  77. package/esm2020/lib/pages/transactions/transactions.component.mjs +3 -3
  78. package/esm2020/lib/pages/users/users.component.mjs +115 -92
  79. package/esm2020/lib/pages/welcome/welcome.component.mjs +9 -9
  80. package/esm2020/lib/select-context.directive.mjs +23 -0
  81. package/esm2020/lib/services/button.service.mjs +90 -30
  82. package/esm2020/lib/services/csv.service.mjs +1 -1
  83. package/esm2020/lib/services/datalib.service.mjs +504 -76
  84. package/esm2020/lib/services/dialog.service.mjs +24 -7
  85. package/esm2020/lib/services/notifications.service.mjs +33 -0
  86. package/esm2020/lib/services/table-config.service.mjs +55 -7
  87. package/esm2020/lib/tin-spa.module.mjs +46 -11
  88. package/esm2020/public-api.mjs +8 -1
  89. package/fesm2015/tin-spa.mjs +6158 -2594
  90. package/fesm2015/tin-spa.mjs.map +1 -1
  91. package/fesm2020/tin-spa.mjs +6143 -2518
  92. package/fesm2020/tin-spa.mjs.map +1 -1
  93. package/lib/classes/Classes.d.ts +231 -127
  94. package/lib/classes/LibClasses.d.ts +1 -0
  95. package/lib/classes/TinCore.d.ts +11 -3
  96. package/lib/components/attach/attach.component.d.ts +13 -6
  97. package/lib/components/capsules/capsules.component.d.ts +26 -0
  98. package/lib/components/cards/cards.component.d.ts +39 -0
  99. package/lib/components/email/email.component.d.ts +4 -3
  100. package/lib/components/form/form.component.d.ts +20 -11
  101. package/lib/components/html/html.component.d.ts +16 -0
  102. package/lib/components/label/label.component.d.ts +2 -1
  103. package/lib/components/money/money.component.d.ts +8 -1
  104. package/lib/components/multi-select/multi-select.component.d.ts +47 -0
  105. package/lib/components/multi-text/multi-text.component.d.ts +56 -0
  106. package/lib/components/nav-menu/nav-menu.component.d.ts +6 -2
  107. package/lib/components/notes/notes.component.d.ts +19 -0
  108. package/lib/components/number/number.component.d.ts +7 -1
  109. package/lib/components/option/option.component.d.ts +10 -2
  110. package/lib/components/page/page.component.d.ts +38 -0
  111. package/lib/components/search/search.component.d.ts +3 -1
  112. package/lib/components/select/select.component.d.ts +16 -37
  113. package/lib/components/select-bitwise/select-bitwise.component.d.ts +31 -0
  114. package/lib/components/select-common/select-common.component.d.ts +50 -0
  115. package/lib/components/select-internal/select-internal.component.d.ts +23 -0
  116. package/lib/components/select-lite/select-lite.component.d.ts +8 -0
  117. package/lib/components/steps/steps.component.d.ts +18 -9
  118. package/lib/components/suffix/suffix.component.d.ts +23 -0
  119. package/lib/components/table/detailsDialog.component.d.ts +24 -7
  120. package/lib/components/table/table.component.d.ts +15 -9
  121. package/lib/components/table-action/table-action.component.d.ts +4 -1
  122. package/lib/components/table-header/table-header.component.d.ts +3 -1
  123. package/lib/components/table-internal/detailsDialog-internal.component.d.ts +24 -7
  124. package/lib/components/table-internal/table-internal.component.d.ts +15 -9
  125. package/lib/components/table-lite/detailsDialog-lite.component.d.ts +81 -0
  126. package/lib/components/table-lite/table-lite.component.d.ts +91 -0
  127. package/lib/components/table-row/table-row.component.d.ts +4 -1
  128. package/lib/components/text/text.component.d.ts +16 -7
  129. package/lib/components/tiles/tiles.component.d.ts +4 -3
  130. package/lib/components/viewer/viewerDialog.component.d.ts +3 -1
  131. package/lib/pages/app-models/app-models.component.d.ts +15 -0
  132. package/lib/pages/approvals/approvals.component.d.ts +10 -0
  133. package/lib/pages/approvals-config/approvals-config.component.d.ts +24 -0
  134. package/lib/pages/customers/customers.component.d.ts +2 -8
  135. package/lib/pages/invitations-table/invitations-table.component.d.ts +1 -1
  136. package/lib/pages/login/login.component.d.ts +7 -1
  137. package/lib/pages/logs/logs.component.d.ts +2 -6
  138. package/lib/pages/membership/membership.component.d.ts +2 -6
  139. package/lib/pages/notifications/notifications.component.d.ts +9 -1
  140. package/lib/pages/notifications-config/notifications-config.component.d.ts +17 -0
  141. package/lib/pages/plans/plans.component.d.ts +2 -6
  142. package/lib/pages/roles/roles.component.d.ts +14 -2
  143. package/lib/pages/suppliers/suppliers.component.d.ts +1 -4
  144. package/lib/pages/tasks/tasks.component.d.ts +1 -1
  145. package/lib/pages/tenant-settings/tenant-settings.component.d.ts +12 -7
  146. package/lib/pages/tenants/tenants.component.d.ts +2 -2
  147. package/lib/pages/users/users.component.d.ts +8 -16
  148. package/lib/select-context.directive.d.ts +10 -0
  149. package/lib/services/button.service.d.ts +10 -7
  150. package/lib/services/datalib.service.d.ts +54 -10
  151. package/lib/services/dialog.service.d.ts +2 -2
  152. package/lib/services/notifications.service.d.ts +12 -0
  153. package/lib/services/table-config.service.d.ts +9 -1
  154. package/lib/tin-spa.module.d.ts +50 -33
  155. package/package.json +1 -1
  156. package/public-api.d.ts +7 -0
  157. package/esm2020/lib/pages/invitations/invitations.component.mjs +0 -14
  158. package/esm2020/lib/pages/tenant-settings/inviteDialog.component.mjs +0 -60
  159. package/lib/pages/invitations/invitations.component.d.ts +0 -8
  160. package/lib/pages/tenant-settings/inviteDialog.component.d.ts +0 -28
@@ -7,10 +7,11 @@ import * as i4 from "@angular/material/icon";
7
7
  import * as i5 from "@angular/material/chips";
8
8
  import * as i6 from "@angular/material/tooltip";
9
9
  import * as i7 from "../check/check.component";
10
- import * as i8 from "../select/select.component";
10
+ import * as i8 from "../select-lite/select-lite.component";
11
11
  export class TableRowComponent {
12
12
  constructor(buttonService) {
13
13
  this.buttonService = buttonService;
14
+ this.smallScreen = false;
14
15
  this.actionClick = new EventEmitter();
15
16
  this.columnClick = new EventEmitter();
16
17
  this.showBannerEvent = new EventEmitter();
@@ -52,18 +53,36 @@ export class TableRowComponent {
52
53
  showBanner(message) {
53
54
  this.showBannerEvent.emit(message);
54
55
  }
56
+ textDisplayed(row, column) {
57
+ let txt = row[column.name];
58
+ let max = !this.smallScreen ? column?.maxLength : column?.maxLength / 2;
59
+ if (max && txt.length > max) {
60
+ return txt.substring(0, max);
61
+ }
62
+ return txt;
63
+ }
64
+ textTruncated(row, column) {
65
+ let txt = row[column.name];
66
+ let max = !this.smallScreen ? column?.maxLength : column?.maxLength / 2;
67
+ if (max && txt.length > max) {
68
+ return true;
69
+ }
70
+ return false;
71
+ }
55
72
  }
56
73
  TableRowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableRowComponent, deps: [{ token: i1.ButtonService }], target: i0.ɵɵFactoryTarget.Component });
57
- TableRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableRowComponent, selector: "app-table-row", inputs: { column: "column", row: "row", config: "config" }, outputs: { actionClick: "actionClick", columnClick: "columnClick", showBannerEvent: "showBannerEvent" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <spa-select [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\"></spa-select>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <mat-chip-list>\r\n <mat-chip (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'background-color': getColorOnCondition(row, column)}\" style=\"font-size: 12px;\"> {{row[column.name]}} </mat-chip>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </mat-chip-list>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'icon'\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">{{row[column.name] | currency:'':''}}</label>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button mat-stroked-button (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'color': getColorOnCondition(row, column)}\" >{{row[column.name]}}</button>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">{{row[column.name]}}</label>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}\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: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i5.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7.CheckComponent, selector: "spa-check", inputs: ["readonly", "display", "value", "infoMessage"], outputs: ["valueChange", "click", "check", "uncheck", "infoClick"] }, { kind: "component", type: i8.SelectComponent, selector: "spa-select", inputs: ["width", "readonly", "required", "defaultFirstValue", "readonlyMode", "hint", "placeholder", "multiple", "display", "value", "options", "masterOptions", "optionValue", "optionDisplay", "optionDisplayExtra", "nullable", "peekConfig", "infoMessage", "copyContent"], outputs: ["valueChange", "infoClick"] }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
74
+ TableRowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableRowComponent, selector: "app-table-row", inputs: { column: "column", row: "row", config: "config", smallScreen: "smallScreen" }, outputs: { actionClick: "actionClick", columnClick: "columnClick", showBannerEvent: "showBannerEvent" }, ngImport: i0, template: "<ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <spa-select-lite [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\"></spa-select-lite>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <mat-chip-list>\r\n <mat-chip (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'background-color': getColorOnCondition(row, column)}\" style=\"font-size: 12px;\"> {{row[column.name]}} </mat-chip>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </mat-chip-list>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'icon'\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'datetimesec'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm:ss'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">{{row[column.name] | currency:'':''}}</label>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button mat-stroked-button (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'color': getColorOnCondition(row, column)}\" >{{row[column.name]}}</button>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">\r\n <ng-container *ngIf=\"column.type === 'number'\">\r\n {{row[column.name] | number:'1.0-2'}}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.type !== 'number'\">\r\n {{textDisplayed(row, column)}}\r\n </ng-container>\r\n </label>\r\n <mat-icon class=\"col-icon\" *ngIf=\"textTruncated(row, column)\" matTooltip='Show more' matTooltipPosition=\"above\" (click)=\"showBanner(row[column.name])\">more_horiz</mat-icon>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}\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: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i5.MatChipList, selector: "mat-chip-list", inputs: ["role", "aria-describedby", "errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { kind: "directive", type: i5.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "role", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7.CheckComponent, selector: "spa-check", inputs: ["readonly", "display", "value", "infoMessage"], outputs: ["valueChange", "click", "check", "uncheck", "infoClick"] }, { kind: "component", type: i8.SelectLiteComponent, selector: "spa-select-lite" }, { kind: "pipe", type: i2.DecimalPipe, name: "number" }, { kind: "pipe", type: i2.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i2.DatePipe, name: "date" }] });
58
75
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableRowComponent, decorators: [{
59
76
  type: Component,
60
- args: [{ selector: 'app-table-row', template: "<ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <spa-select [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\"></spa-select>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <mat-chip-list>\r\n <mat-chip (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'background-color': getColorOnCondition(row, column)}\" style=\"font-size: 12px;\"> {{row[column.name]}} </mat-chip>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </mat-chip-list>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'icon'\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">{{row[column.name] | currency:'':''}}</label>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button mat-stroked-button (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'color': getColorOnCondition(row, column)}\" >{{row[column.name]}}</button>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">{{row[column.name]}}</label>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}\n"] }]
77
+ args: [{ selector: 'app-table-row', template: "<ng-container [ngSwitch]=\"column.type\">\r\n <ng-container *ngSwitchCase=\"'checkbox'\">\r\n <spa-check [value]=\"row[column.name]\" [readonly]=\"true\"></spa-check>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'select'\">\r\n <spa-select-lite [options]=\"column.options\" [optionDisplay]=\"column.optionDisplay\" [optionValue]=\"column.optionValue\" [(value)]=\"row[column.name]\" width=\"90%\"></spa-select-lite>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'chip'\">\r\n <mat-chip-list>\r\n <mat-chip (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'background-color': getColorOnCondition(row, column)}\" style=\"font-size: 12px;\"> {{row[column.name]}} </mat-chip>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </mat-chip-list>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'icon'\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'datetime'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'datetimesec'\">\r\n {{row[column.name] | date : 'dd/MM/yyyy HH:mm:ss'}}\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'money'\">\r\n <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">{{row[column.name] | currency:'':''}}</label>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <button mat-stroked-button (click)=\"onColumnClick(column, row)\" [ngStyle]=\"{'color': getColorOnCondition(row, column)}\" >{{row[column.name]}}</button>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <label [ngStyle]=\"{'color': getColorOnCondition(row, column) }\">\r\n <ng-container *ngIf=\"column.type === 'number'\">\r\n {{row[column.name] | number:'1.0-2'}}\r\n </ng-container>\r\n <ng-container *ngIf=\"column.type !== 'number'\">\r\n {{textDisplayed(row, column)}}\r\n </ng-container>\r\n </label>\r\n <mat-icon class=\"col-icon\" *ngIf=\"textTruncated(row, column)\" matTooltip='Show more' matTooltipPosition=\"above\" (click)=\"showBanner(row[column.name])\">more_horiz</mat-icon>\r\n <mat-icon class=\"col-icon\" *ngIf=\"column.icon && testIconCondition(row, column.icon)\" [matTooltip]=\"row[column.icon.tipField] ?? column.icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[column.icon.tipField])\" [ngStyle]=\"{'color':column.icon?.color}\">{{column.icon.name }}</mat-icon>\r\n <ng-container *ngFor=\"let icon of column.icons\">\r\n <mat-icon class=\"col-icon\" *ngIf=\"testIconCondition(row, icon)\" [matTooltip]=\"row[icon.tipField] ?? icon?.tip\" matTooltipPosition=\"above\" (click)=\"showBanner(row[icon.tipField])\" [ngStyle]=\"{'color':icon?.color}\">{{icon.name }}</mat-icon>\r\n </ng-container>\r\n </ng-container>\r\n</ng-container>\r\n", styles: [".top{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:center;margin-bottom:10px;margin-top:10px}.mat-mini-fab{width:32px;height:32px}.mat-mini-fab mat-icon{font-size:16px;margin-top:-3px}.mat-icon-button{width:32px;height:32px}.mat-icon-button mat-icon{font-size:20px;margin-top:-7px}.col-icon{margin-left:10px}.title{margin-top:10px;font-size:larger;font-weight:300}.make-gray{background-color:#e5e5e5}.right-padding{padding-right:10px}.action-buttons-container{display:flex;justify-content:flex-end;align-items:center}.refreshIcon{font-size:22px!important;margin-top:-7px!important}\n"] }]
61
78
  }], ctorParameters: function () { return [{ type: i1.ButtonService }]; }, propDecorators: { column: [{
62
79
  type: Input
63
80
  }], row: [{
64
81
  type: Input
65
82
  }], config: [{
66
83
  type: Input
84
+ }], smallScreen: [{
85
+ type: Input
67
86
  }], actionClick: [{
68
87
  type: Output
69
88
  }], columnClick: [{
@@ -71,4 +90,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
71
90
  }], showBannerEvent: [{
72
91
  type: Output
73
92
  }] } });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtcm93L3RhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyxpQkFBaUI7SUFTNUIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFKdEMsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBOEIsQ0FBQztRQUM3RCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFnQyxDQUFDO1FBQy9ELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUVILENBQUM7SUFFckQsaUJBQWlCLENBQUMsR0FBUSxFQUFFLElBQVU7UUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQVEsRUFBRSxNQUFjO1FBRTFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlELE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlFO1FBR0QsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFDO1lBQ2hCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDakMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN4QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ25CO2FBRUY7U0FDRjthQUNHO1lBRUYsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUMxQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzdEO1NBRUY7UUFHRCxPQUFPLEVBQUUsQ0FBQztJQUdaLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVSxFQUFFLE9BQWM7UUFDakMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN4RCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQzdDLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWSxFQUFFLEdBQVE7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWMsRUFBRSxHQUFRO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFlO1FBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7OzhHQTdEVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiwwTkNUOUIsOHhOQXNFQTsyRkQ3RGEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWU7b0dBS2hCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29sdW1uLCBCdXR0b24sIFRhYmxlQ29uZmlnLCBJY29uIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9DbGFzc2VzJztcclxuaW1wb3J0IHsgQnV0dG9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2J1dHRvbi5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXRhYmxlLXJvdycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLXJvdy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUtcm93LmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFibGVSb3dDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNvbHVtbjogQ29sdW1uO1xyXG4gIEBJbnB1dCgpIHJvdzogYW55O1xyXG4gIEBJbnB1dCgpIGNvbmZpZzogVGFibGVDb25maWc7XHJcblxyXG4gIEBPdXRwdXQoKSBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBuYW1lOiBzdHJpbmcsIHJvdzogYW55IH0+KCk7XHJcbiAgQE91dHB1dCgpIGNvbHVtbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGNvbHVtbjogQ29sdW1uLCByb3c6IGFueSB9PigpO1xyXG4gIEBPdXRwdXQoKSBzaG93QmFubmVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlKSB7IH1cclxuXHJcbiAgdGVzdEljb25Db25kaXRpb24ocm93OiBhbnksIGljb246IEljb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpY29uLmNvbmRpdGlvbiA/IGljb24uY29uZGl0aW9uKHJvdykgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3JPbkNvbmRpdGlvbihyb3c6IGFueSwgY29sdW1uOiBDb2x1bW4pIHtcclxuXHJcbiAgICBpZiAoY29sdW1uLm9wdGlvbnMpIHtcclxuICAgICAgY29uc3QgY29sb3IgPSB0aGlzLmdldENvbG9yKHJvd1tjb2x1bW4ubmFtZV0sIGNvbHVtbi5vcHRpb25zKTtcclxuICAgICAgcmV0dXJuIGNvbHVtbi50eXBlID09PSAnY2hpcCcgPyBjb2xvciA6IChjb2xvciA9PT0gJ2xpZ2h0Z3JleScgPyAnJyA6IGNvbG9yKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKGNvbHVtbi5jb2xvcnMpe1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbG9yIG9mIGNvbHVtbi5jb2xvcnMpIHtcclxuICAgICAgICBpZiAoY29sb3IuY29uZGl0aW9uKHJvdykpIHtcclxuICAgICAgICAgIHJldHVybiBjb2xvci5uYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2V7XHJcblxyXG4gICAgICBpZiAoY29sdW1uLmNvbG9yICYmIGNvbHVtbi5jb2xvci5jb25kaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLmNvbG9yLmNvbmRpdGlvbihyb3cpID8gY29sdW1uLmNvbG9yLm5hbWUgOiAnJztcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXRDb2xvcih2YWx1ZTogYW55LCBvcHRpb25zOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiAnbGlnaHRncmV5JztcclxuICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09PSB2YWx1ZSk7XHJcbiAgICByZXR1cm4gb3B0aW9uID8gb3B0aW9uLmNvbG9yIDogJ2xpZ2h0Z3JleSc7XHJcbiAgfVxyXG5cclxuICBvbkFjdGlvbkNsaWNrKG5hbWU6IHN0cmluZywgcm93OiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IG5hbWUsIHJvdyB9KTtcclxuICB9XHJcblxyXG4gIG9uQ29sdW1uQ2xpY2soY29sdW1uOiBDb2x1bW4sIHJvdzogYW55KSB7XHJcbiAgICB0aGlzLmNvbHVtbkNsaWNrLmVtaXQoeyBjb2x1bW4sIHJvdyB9KTtcclxuICB9XHJcblxyXG4gIHNob3dCYW5uZXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNob3dCYW5uZXJFdmVudC5lbWl0KG1lc3NhZ2UpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2x1bW4udHlwZVwiPlxyXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidjaGVja2JveCdcIj5cclxuICAgIDxzcGEtY2hlY2sgW3ZhbHVlXT1cInJvd1tjb2x1bW4ubmFtZV1cIiBbcmVhZG9ubHldPVwidHJ1ZVwiPjwvc3BhLWNoZWNrPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cImNvbHVtbi5pY29uICYmIHRlc3RJY29uQ29uZGl0aW9uKHJvdywgY29sdW1uLmljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSA/PyBjb2x1bW4uaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwic2hvd0Jhbm5lcihyb3dbY29sdW1uLmljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmNvbHVtbi5pY29uPy5jb2xvcn1cIj57e2NvbHVtbi5pY29uLm5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2x1bW4uaWNvbnNcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbaWNvbi50aXBGaWVsZF0gPz8gaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwic2hvd0Jhbm5lcihyb3dbaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6aWNvbj8uY29sb3J9XCI+e3tpY29uLm5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzZWxlY3QnXCI+XHJcbiAgICA8c3BhLXNlbGVjdCBbb3B0aW9uc109XCJjb2x1bW4ub3B0aW9uc1wiIFtvcHRpb25EaXNwbGF5XT1cImNvbHVtbi5vcHRpb25EaXNwbGF5XCIgW29wdGlvblZhbHVlXT1cImNvbHVtbi5vcHRpb25WYWx1ZVwiIFsodmFsdWUpXT1cInJvd1tjb2x1bW4ubmFtZV1cIiB3aWR0aD1cIjkwJVwiPjwvc3BhLXNlbGVjdD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoaXAnXCI+XHJcbiAgICA8bWF0LWNoaXAtbGlzdD5cclxuICAgICAgPG1hdC1jaGlwIChjbGljayk9XCJvbkNvbHVtbkNsaWNrKGNvbHVtbiwgcm93KVwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGdldENvbG9yT25Db25kaXRpb24ocm93LCBjb2x1bW4pfVwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1wiPiB7e3Jvd1tjb2x1bW4ubmFtZV19fSA8L21hdC1jaGlwPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbY29sdW1uLmljb24udGlwRmllbGRdID8/IGNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbaWNvbi50aXBGaWVsZF0gPz8gaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwic2hvd0Jhbm5lcihyb3dbaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6aWNvbj8uY29sb3J9XCI+e3tpY29uLm5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbY29sdW1uLmljb24udGlwRmllbGRdID8/IGNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbHVtbi5pY29uc1wiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwidGVzdEljb25Db25kaXRpb24ocm93LCBpY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tpY29uLnRpcEZpZWxkXSA/PyBpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tpY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICB7e3Jvd1tjb2x1bW4ubmFtZV0gfCBkYXRlIDogJ2RkL01NL3l5eXknfX1cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0gPz8gY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2ljb24udGlwRmllbGRdID8/IGljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2ljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZXRpbWUnXCI+XHJcbiAgICB7e3Jvd1tjb2x1bW4ubmFtZV0gfCBkYXRlIDogJ2RkL01NL3l5eXkgSEg6bW0nfX1cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0gPz8gY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2ljb24udGlwRmllbGRdID8/IGljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2ljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbW9uZXknXCI+XHJcbiAgICA8bGFiZWwgW25nU3R5bGVdPVwieydjb2xvcic6IGdldENvbG9yT25Db25kaXRpb24ocm93LCBjb2x1bW4pIH1cIj57e3Jvd1tjb2x1bW4ubmFtZV0gfCBjdXJyZW5jeTonJzonJ319PC9sYWJlbD5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0gPz8gY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2ljb24udGlwRmllbGRdID8/IGljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2ljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cIm9uQ29sdW1uQ2xpY2soY29sdW1uLCByb3cpXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGdldENvbG9yT25Db25kaXRpb24ocm93LCBjb2x1bW4pfVwiID57e3Jvd1tjb2x1bW4ubmFtZV19fTwvYnV0dG9uPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cImNvbHVtbi5pY29uICYmIHRlc3RJY29uQ29uZGl0aW9uKHJvdywgY29sdW1uLmljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSA/PyBjb2x1bW4uaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwic2hvd0Jhbm5lcihyb3dbY29sdW1uLmljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmNvbHVtbi5pY29uPy5jb2xvcn1cIj57e2NvbHVtbi5pY29uLm5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2x1bW4uaWNvbnNcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbaWNvbi50aXBGaWVsZF0gPz8gaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwic2hvd0Jhbm5lcihyb3dbaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6aWNvbj8uY29sb3J9XCI+e3tpY29uLm5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgIDxsYWJlbCBbbmdTdHlsZV09XCJ7J2NvbG9yJzogZ2V0Q29sb3JPbkNvbmRpdGlvbihyb3csIGNvbHVtbikgfVwiPnt7cm93W2NvbHVtbi5uYW1lXX19PC9sYWJlbD5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0gPz8gY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2ljb24udGlwRmllbGRdID8/IGljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2ljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Rpbi1zcGEvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLXJvdy90YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGluLXNwYS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtcm93L3RhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyxpQkFBaUI7SUFZNUIsWUFBb0IsYUFBNEI7UUFBNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFSdkMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFNUIsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBOEIsQ0FBQztRQUM3RCxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFnQyxDQUFDO1FBQy9ELG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztJQUlILENBQUM7SUFFckQsaUJBQWlCLENBQUMsR0FBUSxFQUFFLElBQVU7UUFDcEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckQsQ0FBQztJQUVELG1CQUFtQixDQUFDLEdBQVEsRUFBRSxNQUFjO1FBRTFDLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtZQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlELE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlFO1FBR0QsSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFDO1lBQ2hCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRTtnQkFDakMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN4QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ25CO2FBRUY7U0FDRjthQUNHO1lBRUYsSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUMxQyxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQzdEO1NBRUY7UUFHRCxPQUFPLEVBQUUsQ0FBQztJQUdaLENBQUM7SUFFRCxRQUFRLENBQUMsS0FBVSxFQUFFLE9BQWM7UUFDakMsSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN4RCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO0lBQzdDLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBWSxFQUFFLEdBQVE7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWMsRUFBRSxHQUFRO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFVBQVUsQ0FBQyxPQUFlO1FBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUSxFQUFFLE1BQWM7UUFFcEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMxQixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUMsQ0FBQyxDQUFDO1FBRXRFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFDO1lBQzFCLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDOUI7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUViLENBQUM7SUFDRCxhQUFhLENBQUMsR0FBUSxFQUFFLE1BQWM7UUFFcEMsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUUxQixJQUFJLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRXhFLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFBO1NBQ1o7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUVmLENBQUM7OzhHQTFGVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixzUENUOUIsby9QQXNGQTsyRkQ3RWEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWU7b0dBS2hCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb2x1bW4sIEJ1dHRvbiwgVGFibGVDb25maWcsIEljb24gfSBmcm9tICcuLi8uLi9jbGFzc2VzL0NsYXNzZXMnO1xyXG5pbXBvcnQgeyBCdXR0b25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYnV0dG9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtdGFibGUtcm93JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtcm93LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS1yb3cuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJsZVJvd0NvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgY29sdW1uOiBDb2x1bW47XHJcbiAgQElucHV0KCkgcm93OiBhbnk7XHJcbiAgQElucHV0KCkgY29uZmlnOiBUYWJsZUNvbmZpZztcclxuICBASW5wdXQoKSBzbWFsbFNjcmVlbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbmFtZTogc3RyaW5nLCByb3c6IGFueSB9PigpO1xyXG4gIEBPdXRwdXQoKSBjb2x1bW5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyBjb2x1bW46IENvbHVtbiwgcm93OiBhbnkgfT4oKTtcclxuICBAT3V0cHV0KCkgc2hvd0Jhbm5lckV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBidXR0b25TZXJ2aWNlOiBCdXR0b25TZXJ2aWNlKSB7IH1cclxuXHJcbiAgdGVzdEljb25Db25kaXRpb24ocm93OiBhbnksIGljb246IEljb24pOiBib29sZWFuIHtcclxuICAgIHJldHVybiBpY29uLmNvbmRpdGlvbiA/IGljb24uY29uZGl0aW9uKHJvdykgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29sb3JPbkNvbmRpdGlvbihyb3c6IGFueSwgY29sdW1uOiBDb2x1bW4pIHtcclxuXHJcbiAgICBpZiAoY29sdW1uLm9wdGlvbnMpIHtcclxuICAgICAgY29uc3QgY29sb3IgPSB0aGlzLmdldENvbG9yKHJvd1tjb2x1bW4ubmFtZV0sIGNvbHVtbi5vcHRpb25zKTtcclxuICAgICAgcmV0dXJuIGNvbHVtbi50eXBlID09PSAnY2hpcCcgPyBjb2xvciA6IChjb2xvciA9PT0gJ2xpZ2h0Z3JleScgPyAnJyA6IGNvbG9yKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKGNvbHVtbi5jb2xvcnMpe1xyXG4gICAgICBmb3IgKGNvbnN0IGNvbG9yIG9mIGNvbHVtbi5jb2xvcnMpIHtcclxuICAgICAgICBpZiAoY29sb3IuY29uZGl0aW9uKHJvdykpIHtcclxuICAgICAgICAgIHJldHVybiBjb2xvci5uYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2V7XHJcblxyXG4gICAgICBpZiAoY29sdW1uLmNvbG9yICYmIGNvbHVtbi5jb2xvci5jb25kaXRpb24pIHtcclxuICAgICAgICByZXR1cm4gY29sdW1uLmNvbG9yLmNvbmRpdGlvbihyb3cpID8gY29sdW1uLmNvbG9yLm5hbWUgOiAnJztcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgcmV0dXJuICcnO1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBnZXRDb2xvcih2YWx1ZTogYW55LCBvcHRpb25zOiBhbnlbXSk6IHN0cmluZyB7XHJcbiAgICBpZiAoIW9wdGlvbnMpIHJldHVybiAnbGlnaHRncmV5JztcclxuICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZChvcHQgPT4gb3B0LnZhbHVlID09PSB2YWx1ZSk7XHJcbiAgICByZXR1cm4gb3B0aW9uID8gb3B0aW9uLmNvbG9yIDogJ2xpZ2h0Z3JleSc7XHJcbiAgfVxyXG5cclxuICBvbkFjdGlvbkNsaWNrKG5hbWU6IHN0cmluZywgcm93OiBhbnkpIHtcclxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IG5hbWUsIHJvdyB9KTtcclxuICB9XHJcblxyXG4gIG9uQ29sdW1uQ2xpY2soY29sdW1uOiBDb2x1bW4sIHJvdzogYW55KSB7XHJcbiAgICB0aGlzLmNvbHVtbkNsaWNrLmVtaXQoeyBjb2x1bW4sIHJvdyB9KTtcclxuICB9XHJcblxyXG4gIHNob3dCYW5uZXIobWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNob3dCYW5uZXJFdmVudC5lbWl0KG1lc3NhZ2UpO1xyXG4gIH1cclxuXHJcbiAgdGV4dERpc3BsYXllZChyb3c6IGFueSwgY29sdW1uOiBDb2x1bW4pe1xyXG5cclxuICAgIGxldCB0eHQgPSByb3dbY29sdW1uLm5hbWVdXHJcbiAgICBsZXQgbWF4ID0gIXRoaXMuc21hbGxTY3JlZW4gPyBjb2x1bW4/Lm1heExlbmd0aCA6IGNvbHVtbj8ubWF4TGVuZ3RoLzI7XHJcblxyXG4gICAgaWYgKG1heCAmJiB0eHQubGVuZ3RoID4gbWF4KXtcclxuICAgICAgcmV0dXJuIHR4dC5zdWJzdHJpbmcoMCwgbWF4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdHh0O1xyXG5cclxuICB9XHJcbiAgdGV4dFRydW5jYXRlZChyb3c6IGFueSwgY29sdW1uOiBDb2x1bW4pIHtcclxuXHJcbiAgICBsZXQgdHh0ID0gcm93W2NvbHVtbi5uYW1lXVxyXG5cclxuICAgIGxldCBtYXggPSAhdGhpcy5zbWFsbFNjcmVlbiA/IGNvbHVtbj8ubWF4TGVuZ3RoIDogY29sdW1uPy5tYXhMZW5ndGggLyAyO1xyXG5cclxuICAgIGlmIChtYXggJiYgdHh0Lmxlbmd0aCA+IG1heCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxuXHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbi50eXBlXCI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoZWNrYm94J1wiPlxyXG4gICAgPHNwYS1jaGVjayBbdmFsdWVdPVwicm93W2NvbHVtbi5uYW1lXVwiIFtyZWFkb25seV09XCJ0cnVlXCI+PC9zcGEtY2hlY2s+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbY29sdW1uLmljb24udGlwRmllbGRdID8/IGNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbHVtbi5pY29uc1wiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwidGVzdEljb25Db25kaXRpb24ocm93LCBpY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tpY29uLnRpcEZpZWxkXSA/PyBpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tpY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3NlbGVjdCdcIj5cclxuICAgIDxzcGEtc2VsZWN0LWxpdGUgW29wdGlvbnNdPVwiY29sdW1uLm9wdGlvbnNcIiBbb3B0aW9uRGlzcGxheV09XCJjb2x1bW4ub3B0aW9uRGlzcGxheVwiIFtvcHRpb25WYWx1ZV09XCJjb2x1bW4ub3B0aW9uVmFsdWVcIiBbKHZhbHVlKV09XCJyb3dbY29sdW1uLm5hbWVdXCIgd2lkdGg9XCI5MCVcIj48L3NwYS1zZWxlY3QtbGl0ZT5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2NoaXAnXCI+XHJcbiAgICA8bWF0LWNoaXAtbGlzdD5cclxuICAgICAgPG1hdC1jaGlwIChjbGljayk9XCJvbkNvbHVtbkNsaWNrKGNvbHVtbiwgcm93KVwiIFtuZ1N0eWxlXT1cInsnYmFja2dyb3VuZC1jb2xvcic6IGdldENvbG9yT25Db25kaXRpb24ocm93LCBjb2x1bW4pfVwiIHN0eWxlPVwiZm9udC1zaXplOiAxMnB4O1wiPiB7e3Jvd1tjb2x1bW4ubmFtZV19fSA8L21hdC1jaGlwPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbY29sdW1uLmljb24udGlwRmllbGRdID8/IGNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbaWNvbi50aXBGaWVsZF0gPz8gaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwic2hvd0Jhbm5lcihyb3dbaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6aWNvbj8uY29sb3J9XCI+e3tpY29uLm5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbWF0LWNoaXAtbGlzdD5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCI+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbY29sdW1uLmljb24udGlwRmllbGRdID8/IGNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbHVtbi5pY29uc1wiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwidGVzdEljb25Db25kaXRpb24ocm93LCBpY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tpY29uLnRpcEZpZWxkXSA/PyBpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tpY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICB7e3Jvd1tjb2x1bW4ubmFtZV0gfCBkYXRlIDogJ2RkL01NL3l5eXknfX1cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0gPz8gY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2ljb24udGlwRmllbGRdID8/IGljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2ljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZXRpbWUnXCI+XHJcbiAgICB7e3Jvd1tjb2x1bW4ubmFtZV0gfCBkYXRlIDogJ2RkL01NL3l5eXkgSEg6bW0nfX1cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0gPz8gY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2ljb24udGlwRmllbGRdID8/IGljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2ljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZGF0ZXRpbWVzZWMnXCI+XHJcbiAgICB7e3Jvd1tjb2x1bW4ubmFtZV0gfCBkYXRlIDogJ2RkL01NL3l5eXkgSEg6bW06c3MnfX1cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0gPz8gY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2ljb24udGlwRmllbGRdID8/IGljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2ljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbW9uZXknXCI+XHJcbiAgICA8bGFiZWwgW25nU3R5bGVdPVwieydjb2xvcic6IGdldENvbG9yT25Db25kaXRpb24ocm93LCBjb2x1bW4pIH1cIj57e3Jvd1tjb2x1bW4ubmFtZV0gfCBjdXJyZW5jeTonJzonJ319PC9sYWJlbD5cclxuICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJjb2x1bW4uaWNvbiAmJiB0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGNvbHVtbi5pY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0gPz8gY29sdW1uLmljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzpjb2x1bW4uaWNvbj8uY29sb3J9XCI+e3tjb2x1bW4uaWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGljb24gb2YgY29sdW1uLmljb25zXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNvbC1pY29uXCIgKm5nSWY9XCJ0ZXN0SWNvbkNvbmRpdGlvbihyb3csIGljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2ljb24udGlwRmllbGRdID8/IGljb24/LnRpcFwiIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCIgKGNsaWNrKT1cInNob3dCYW5uZXIocm93W2ljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmljb24/LmNvbG9yfVwiPnt7aWNvbi5uYW1lIH19PC9tYXQtaWNvbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG5cclxuICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxyXG4gICAgPGJ1dHRvbiBtYXQtc3Ryb2tlZC1idXR0b24gKGNsaWNrKT1cIm9uQ29sdW1uQ2xpY2soY29sdW1uLCByb3cpXCIgW25nU3R5bGVdPVwieydjb2xvcic6IGdldENvbG9yT25Db25kaXRpb24ocm93LCBjb2x1bW4pfVwiID57e3Jvd1tjb2x1bW4ubmFtZV19fTwvYnV0dG9uPlxyXG4gICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cImNvbHVtbi5pY29uICYmIHRlc3RJY29uQ29uZGl0aW9uKHJvdywgY29sdW1uLmljb24pXCIgW21hdFRvb2x0aXBdPVwicm93W2NvbHVtbi5pY29uLnRpcEZpZWxkXSA/PyBjb2x1bW4uaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwic2hvd0Jhbm5lcihyb3dbY29sdW1uLmljb24udGlwRmllbGRdKVwiIFtuZ1N0eWxlXT1cInsnY29sb3InOmNvbHVtbi5pY29uPy5jb2xvcn1cIj57e2NvbHVtbi5pY29uLm5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaWNvbiBvZiBjb2x1bW4uaWNvbnNcIj5cclxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY29sLWljb25cIiAqbmdJZj1cInRlc3RJY29uQ29uZGl0aW9uKHJvdywgaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbaWNvbi50aXBGaWVsZF0gPz8gaWNvbj8udGlwXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIiAoY2xpY2spPVwic2hvd0Jhbm5lcihyb3dbaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6aWNvbj8uY29sb3J9XCI+e3tpY29uLm5hbWUgfX08L21hdC1pY29uPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgIDxsYWJlbCBbbmdTdHlsZV09XCJ7J2NvbG9yJzogZ2V0Q29sb3JPbkNvbmRpdGlvbihyb3csIGNvbHVtbikgfVwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnR5cGUgPT09ICdudW1iZXInXCI+XHJcbiAgICAgICAge3tyb3dbY29sdW1uLm5hbWVdIHwgbnVtYmVyOicxLjAtMid9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50eXBlICE9PSAnbnVtYmVyJ1wiPlxyXG4gICAgICAgIHt7dGV4dERpc3BsYXllZChyb3csIGNvbHVtbil9fVxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwidGV4dFRydW5jYXRlZChyb3csIGNvbHVtbilcIiBtYXRUb29sdGlwPSdTaG93IG1vcmUnICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tjb2x1bW4ubmFtZV0pXCI+bW9yZV9ob3JpejwvbWF0LWljb24+XHJcbiAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwiY29sdW1uLmljb24gJiYgdGVzdEljb25Db25kaXRpb24ocm93LCBjb2x1bW4uaWNvbilcIiBbbWF0VG9vbHRpcF09XCJyb3dbY29sdW1uLmljb24udGlwRmllbGRdID8/IGNvbHVtbi5pY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tjb2x1bW4uaWNvbi50aXBGaWVsZF0pXCIgW25nU3R5bGVdPVwieydjb2xvcic6Y29sdW1uLmljb24/LmNvbG9yfVwiPnt7Y29sdW1uLmljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpY29uIG9mIGNvbHVtbi5pY29uc1wiPlxyXG4gICAgICA8bWF0LWljb24gY2xhc3M9XCJjb2wtaWNvblwiICpuZ0lmPVwidGVzdEljb25Db25kaXRpb24ocm93LCBpY29uKVwiIFttYXRUb29sdGlwXT1cInJvd1tpY29uLnRpcEZpZWxkXSA/PyBpY29uPy50aXBcIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIChjbGljayk9XCJzaG93QmFubmVyKHJvd1tpY29uLnRpcEZpZWxkXSlcIiBbbmdTdHlsZV09XCJ7J2NvbG9yJzppY29uPy5jb2xvcn1cIj57e2ljb24ubmFtZSB9fTwvbWF0LWljb24+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9uZy1jb250YWluZXI+XHJcbiJdfQ==