@smarterplan/ngx-smarterplan-admin 0.1.27

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 (46) hide show
  1. package/README.md +24 -0
  2. package/esm2020/lib/admin/admin.component.mjs +33 -0
  3. package/esm2020/lib/chevron/chevron.component.mjs +19 -0
  4. package/esm2020/lib/guest-link/guest-link.component.mjs +62 -0
  5. package/esm2020/lib/guide.guard.mjs +25 -0
  6. package/esm2020/lib/name-from-id.pipe.mjs +29 -0
  7. package/esm2020/lib/ngx-smarterplan-admin-routing.module.mjs +47 -0
  8. package/esm2020/lib/ngx-smarterplan-admin.module.mjs +90 -0
  9. package/esm2020/lib/ngx-smarterplan-admin.service.mjs +14 -0
  10. package/esm2020/lib/organisation/organisation.component.mjs +166 -0
  11. package/esm2020/lib/sp-admin.guard.mjs +31 -0
  12. package/esm2020/lib/user/detail-organisation/detail-organisation.component.mjs +160 -0
  13. package/esm2020/lib/user/form-mission/form-mission.component.mjs +205 -0
  14. package/esm2020/lib/user/form-organisation/form-organisation.component.mjs +125 -0
  15. package/esm2020/lib/user/user-mission-form/user-mission-form.component.mjs +106 -0
  16. package/esm2020/lib/user/user.component.mjs +325 -0
  17. package/esm2020/lib/visitor/create-batch/create-batch.component.mjs +108 -0
  18. package/esm2020/lib/visitor/template/template.component.mjs +219 -0
  19. package/esm2020/lib/visitor/visitor.component.mjs +284 -0
  20. package/esm2020/public-api.mjs +6 -0
  21. package/esm2020/smarterplan-ngx-smarterplan-admin.mjs +5 -0
  22. package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs +2026 -0
  23. package/fesm2015/smarterplan-ngx-smarterplan-admin.mjs.map +1 -0
  24. package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs +1921 -0
  25. package/fesm2020/smarterplan-ngx-smarterplan-admin.mjs.map +1 -0
  26. package/lib/admin/admin.component.d.ts +13 -0
  27. package/lib/chevron/chevron.component.d.ts +9 -0
  28. package/lib/guest-link/guest-link.component.d.ts +20 -0
  29. package/lib/guide.guard.d.ts +11 -0
  30. package/lib/name-from-id.pipe.d.ts +11 -0
  31. package/lib/ngx-smarterplan-admin-routing.module.d.ts +7 -0
  32. package/lib/ngx-smarterplan-admin.module.d.ts +26 -0
  33. package/lib/ngx-smarterplan-admin.service.d.ts +6 -0
  34. package/lib/organisation/organisation.component.d.ts +53 -0
  35. package/lib/sp-admin.guard.d.ts +12 -0
  36. package/lib/user/detail-organisation/detail-organisation.component.d.ts +39 -0
  37. package/lib/user/form-mission/form-mission.component.d.ts +54 -0
  38. package/lib/user/form-organisation/form-organisation.component.d.ts +32 -0
  39. package/lib/user/user-mission-form/user-mission-form.component.d.ts +28 -0
  40. package/lib/user/user.component.d.ts +100 -0
  41. package/lib/visitor/create-batch/create-batch.component.d.ts +23 -0
  42. package/lib/visitor/template/template.component.d.ts +52 -0
  43. package/lib/visitor/visitor.component.d.ts +65 -0
  44. package/package.json +39 -0
  45. package/public-api.d.ts +2 -0
  46. package/smarterplan-ngx-smarterplan-admin.d.ts +5 -0
@@ -0,0 +1,284 @@
1
+ import { Component, ViewChild } from '@angular/core';
2
+ import { RoleStatus, ProfileEntity, EmailStatus } from 'ngx-smarterplan-core';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "ngx-smarterplan-core";
5
+ import * as i2 from "@angular/router";
6
+ import * as i3 from "@ngx-translate/core";
7
+ import * as i4 from "@ng-bootstrap/ng-bootstrap";
8
+ import * as i5 from "../chevron/chevron.component";
9
+ import * as i6 from "./template/template.component";
10
+ import * as i7 from "./create-batch/create-batch.component";
11
+ import * as i8 from "@angular/common";
12
+ import * as i9 from "@angular/forms";
13
+ export class VisitorComponent {
14
+ constructor(userService, missionService, router, translate, spaceService, zoneService, modalService, templateService) {
15
+ this.userService = userService;
16
+ this.missionService = missionService;
17
+ this.router = router;
18
+ this.translate = translate;
19
+ this.spaceService = spaceService;
20
+ this.zoneService = zoneService;
21
+ this.modalService = modalService;
22
+ this.templateService = templateService;
23
+ this.editing = false;
24
+ this.creating = false;
25
+ this.isAddingBatch = false;
26
+ this.allZoneTemplatesMap = new Map(); // zone=>its templates
27
+ this.allTemplateMissionsMap = new Map(); // templateID, its derived Missions
28
+ this.detailsForZones = [];
29
+ this.csvHeaders = [
30
+ "email",
31
+ "user_status",
32
+ "zone",
33
+ "location",
34
+ "start_date_time",
35
+ "end_date_time",
36
+ "access_level",
37
+ ];
38
+ this.loading = false;
39
+ this.toDuplicate = false;
40
+ this.userService.isChanged.subscribe(() => this.setup());
41
+ }
42
+ ngOnInit() {
43
+ this.setup();
44
+ }
45
+ setup() {
46
+ this.setupUser();
47
+ this.setZonesTemplates();
48
+ }
49
+ async setZonesTemplates() {
50
+ if (!this.currentOrg) {
51
+ return;
52
+ }
53
+ this.loading = true;
54
+ this.allZoneTemplatesMap = new Map();
55
+ this.allTemplateMissionsMap = new Map();
56
+ let locations = this.spaceService.locationsForUser;
57
+ if (locations.length === 0) {
58
+ locations = await this.spaceService.getLocationsForCurrentUser();
59
+ }
60
+ await Promise.all(locations.map(async (space) => {
61
+ let zones = await this.zoneService.getZonesBySpace(space.id);
62
+ zones = zones.filter((zone) => zone.isMuseumVisitZone);
63
+ await Promise.all(zones.map(async (zone) => {
64
+ const visitorsMissions = await this.missionService.getMissionsByZoneByRole(zone.id, RoleStatus.VISITOR_MUSEUM);
65
+ let templates = await this.templateService.getTemplatesByZone(zone.id);
66
+ templates = templates.filter((template) => !template.deletedAt);
67
+ templates = templates.sort((a, b) =>
68
+ // @ts-ignore
69
+ // eslint-disable-next-line prettier/prettier
70
+ new Date(b.startDateTime) - new Date(a.startDateTime));
71
+ for (const template of templates) {
72
+ const missionsFromTemplate = visitorsMissions.filter((mis) => mis.templateMissionID === template.id);
73
+ this.allTemplateMissionsMap.set(template.id, missionsFromTemplate);
74
+ }
75
+ this.allZoneTemplatesMap.set(zone, templates);
76
+ }));
77
+ }));
78
+ // sort list by zone name alphabetically
79
+ this.allZoneTemplatesMapFiltered =
80
+ new Map([...this.allZoneTemplatesMap.entries()].sort((a, b) => a[0].name.localeCompare(b[0].name)));
81
+ this.loading = false;
82
+ }
83
+ setupUser() {
84
+ this.currentOrg = this.userService.currentOrganisation();
85
+ }
86
+ onCreateTemplate() {
87
+ this.creating = true;
88
+ }
89
+ async onDeleteMission(mission) {
90
+ await this.missionService.softDeleteMission(mission.id);
91
+ this.setZonesTemplates();
92
+ }
93
+ async onEditTemplate(template) {
94
+ this.editing = true;
95
+ this.templateToEdit = template;
96
+ }
97
+ onUpdatedEvent(isAdded) {
98
+ this.editing = false;
99
+ this.templateToEdit = null;
100
+ this.isAddingBatch = false;
101
+ this.chosenTemplate = null;
102
+ if (isAdded) {
103
+ this.setZonesTemplates();
104
+ }
105
+ }
106
+ async onUpdatedTemplate(template) {
107
+ this.loading = true;
108
+ this.editing = false;
109
+ this.templateToEdit = null;
110
+ if (template) {
111
+ if (this.toDuplicate) {
112
+ // create new template
113
+ delete template.id;
114
+ await this.templateService.create(template);
115
+ this.toDuplicate = false;
116
+ await this.setZonesTemplates();
117
+ return;
118
+ }
119
+ await this.templateService.update(template);
120
+ await this.setZonesTemplates();
121
+ // update related Missions
122
+ const missionsForTemplate = await this.missionService.getMissionsByTemplate(template.id);
123
+ await Promise.all(missionsForTemplate.map(async (mission) => {
124
+ const missionUpdate = {
125
+ id: mission.id,
126
+ level: template.level,
127
+ startDateTime: template.startDateTime,
128
+ endDateTime: template.endDateTime,
129
+ locale: template.locale,
130
+ zoneID: template.zoneID,
131
+ spaceID: template.spaceID,
132
+ hashtags: template.hashtags,
133
+ };
134
+ await this.missionService.update(missionUpdate);
135
+ }));
136
+ }
137
+ this.loading = false;
138
+ }
139
+ async onCreatedTemplate(template) {
140
+ this.loading = true;
141
+ this.creating = false;
142
+ if (template) {
143
+ await this.templateService.create(template);
144
+ this.setZonesTemplates();
145
+ }
146
+ this.loading = false;
147
+ }
148
+ onToggleMissionsForZone(zoneID) {
149
+ if (this.detailsForZones.includes(zoneID)) {
150
+ const index = this.detailsForZones.indexOf(zoneID);
151
+ this.detailsForZones.splice(index, 1);
152
+ }
153
+ else {
154
+ this.detailsForZones.push(zoneID);
155
+ }
156
+ }
157
+ onToggleTemplateDetails(template) {
158
+ this.templateShowing =
159
+ this.templateShowing === template.id ? null : template.id;
160
+ }
161
+ onAddNewTemplateToZone(zone) {
162
+ this.zoneIDForNewTemplate = zone.id;
163
+ this.creating = true;
164
+ }
165
+ async onArchiveTemplate(template) {
166
+ const message = this.translate.instant("confirm.archiveTemplate");
167
+ if (window.confirm(message)) {
168
+ const missionsToDelete = this.allTemplateMissionsMap.get(template.id);
169
+ await Promise.all(missionsToDelete.map(async (mission) => {
170
+ await this.missionService.softDeleteMission(mission.id);
171
+ }));
172
+ await this.templateService.softDelete(template.id);
173
+ this.setZonesTemplates();
174
+ }
175
+ }
176
+ onGenerateBatch(template) {
177
+ this.chosenTemplate = template;
178
+ this.isAddingBatch = true;
179
+ }
180
+ generateCSVUsers(template) {
181
+ const data = [];
182
+ for (const mission of this.allTemplateMissionsMap.get(template.id)) {
183
+ const user = new ProfileEntity(mission.user);
184
+ data.push([
185
+ user.email,
186
+ mission.user.status,
187
+ mission.zone.name,
188
+ mission.space.name,
189
+ mission.startDateTime,
190
+ mission.endDateTime,
191
+ mission.level,
192
+ ]);
193
+ }
194
+ return data;
195
+ }
196
+ async onSendInvitation(template) {
197
+ await Promise.all(this.allTemplateMissionsMap
198
+ .get(template.id)
199
+ .map(async (mission) => {
200
+ if (mission.emailStatus !== EmailStatus.SENT) {
201
+ await this.missionService.update({
202
+ id: mission.id,
203
+ emailStatus: EmailStatus.CREATION_TO_DELIVER,
204
+ });
205
+ }
206
+ }));
207
+ }
208
+ async onSendUpdate(template) {
209
+ await Promise.all(this.allTemplateMissionsMap
210
+ .get(template.id)
211
+ .map(async (mission) => {
212
+ await this.missionService.update({
213
+ id: mission.id,
214
+ emailStatus: EmailStatus.UPDATE_TO_DELIVER,
215
+ });
216
+ }));
217
+ }
218
+ async onCancelTemplate(template) {
219
+ const message = this.translate.instant("confirm.cancelTemplate");
220
+ if (window.confirm(message)) {
221
+ await Promise.all(this.allTemplateMissionsMap
222
+ .get(template.id)
223
+ .map(async (mission) => {
224
+ await this.missionService.update({
225
+ id: mission.id,
226
+ emailStatus: EmailStatus.CANCELLATION_TO_DELIVER,
227
+ deletedAt: Date.now(),
228
+ });
229
+ }));
230
+ }
231
+ }
232
+ applyResultsSearchBar(results) {
233
+ this.allZoneTemplatesMapFiltered = results || this.allZoneTemplatesMap;
234
+ }
235
+ onDeleteUsers(mis) {
236
+ this.currentTemplateUsers = [];
237
+ for (const mission of this.allTemplateMissionsMap.get(mis.id)) {
238
+ this.currentTemplateUsers.push({
239
+ mission,
240
+ profile: new ProfileEntity(mission.user),
241
+ checked: false,
242
+ index: this.allTemplateMissionsMap.get(mis.id).indexOf(mission),
243
+ });
244
+ }
245
+ this.modalRef = this.modalService.open(this.modal);
246
+ }
247
+ /**
248
+ * Deletes mission of the user and checks if can hard delete the Profile (no other missions)
249
+ */
250
+ async onDeleteChosen() {
251
+ const listToDelete = this.currentTemplateUsers.filter((object) => object.checked);
252
+ await Promise.all(listToDelete.map(async (object) => {
253
+ await this.missionService.softDeleteMission(object.mission.id);
254
+ await this.userService.softDeleteUser(object.profile.id);
255
+ this.allTemplateMissionsMap
256
+ .get(object.mission.templateMissionID)
257
+ .splice(object.index, 1);
258
+ }));
259
+ this.modalRef.close();
260
+ }
261
+ onDuplicateTemplate(template) {
262
+ this.editing = true;
263
+ this.templateToEdit = template;
264
+ this.toDuplicate = true;
265
+ }
266
+ async onCleanTimeTemplate(template) {
267
+ await this.templateService.update({
268
+ id: template.id,
269
+ realEndedAt: null,
270
+ realStartedAt: null
271
+ });
272
+ await this.setZonesTemplates();
273
+ }
274
+ }
275
+ VisitorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: VisitorComponent, deps: [{ token: i1.BaseUserService }, { token: i1.MissionService }, { token: i2.Router }, { token: i3.TranslateService }, { token: i1.SpaceService }, { token: i1.ZoneService }, { token: i4.NgbModal }, { token: i1.TemplateService }], target: i0.ɵɵFactoryTarget.Component });
276
+ VisitorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: VisitorComponent, selector: "lib-visitor", viewQueries: [{ propertyName: "modal", first: true, predicate: ["deleteUsers"], descendants: true }], ngImport: i0, template: "<div class=\"dashboard-tab\">\r\n <div class=\"header-dashboard-tab\">\r\n <h3>{{'Museum Visitors' | translate}}</h3>\r\n <!-- <app-search-bar [searchable]=\"allZoneTemplatesMap\" objectType=\"TEMPLATE\"\r\n (searchEvent)=\"applyResultsSearchBar($event)\">\r\n </app-search-bar> -->\r\n <hr>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-7\">\r\n <div class=\"row ml-0 mb-2\">\r\n <h4 class=\"header-small\">{{'Itineraries' | translate}}</h4>\r\n </div>\r\n <div class=\"row ml-0 mb-2\" *ngIf=\"!editing && !creating\">\r\n <button class=\"btn btn-outline-primary rounded-pill ml-3 add-button\" (click)=\"onCreateTemplate()\">\r\n {{'Create template for new itinerary' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div *ngIf=\"!editing && !creating\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let pair of allZoneTemplatesMapFiltered | keyvalue\">\r\n <h4>{{pair.key.name}} <span style=\"font-size:0.8em\"> - {{pair.key.space.name}}</span> </h4>\r\n <div class=\"d-flex justify-content-between align-items-center\"\r\n (click)=\"onToggleMissionsForZone(pair.key.id)\">\r\n <ng-container *ngIf=\"pair.value.length <= 1\">\r\n {{pair.value.length}} {{'visit template found' | translate}}\r\n </ng-container>\r\n <ng-container *ngIf=\"pair.value.length > 1\">\r\n {{pair.value.length}} {{'visit templates found' | translate}}\r\n </ng-container>\r\n <lib-chevron [conditionShowing]=\"detailsForZones.includes(pair.key.id)\"></lib-chevron>\r\n\r\n </div>\r\n <div *ngIf=\"detailsForZones.includes(pair.key.id)\">\r\n <button class=\"btn btn-outline-primary rounded-pill mt-3 mb-3 ml-2\"\r\n (click)=\"onAddNewTemplateToZone(pair.key)\">{{'Add new template' | translate}}</button>\r\n\r\n <ul class=\"container-fluid list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let template of pair.value\">\r\n <div class=\"d-flex justify-content-between align-items-center\"\r\n (click)=\"onToggleTemplateDetails(template)\">\r\n <h5>{{template.title}}</h5>\r\n <lib-chevron [conditionShowing]=\"templateShowing === template.id\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"templateShowing === template.id\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Description' | translate }}:\r\n {{ template.description}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Language' | translate }}:\r\n {{ template.locale ? template.locale : ('Not applicable' | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\"\r\n *ngIf=\"template.hashtags && template.hashtags.length> 0\">\r\n {{'Hashtags' | translate}}:\r\n <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\"\r\n *ngIf=\"template.hashtags.length> 0\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of template.hashtags\">{{\r\n hashtag | hashtagFromID | async }}</li>\r\n </div>\r\n </ul>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate }}:\r\n {{ template.level}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Planned at' | translate }} :\r\n {{ template.startDateTime ? (template.startDateTime |\r\n timeDateString:\"day_time_zone\" | async) :\r\n \"No data\" | translate }} - \r\n {{ template.endDateTime ?\r\n (template.endDateTime | timeDateString:\"day_time_zone\" | async) : \"No data\" |\r\n translate}}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">\r\n {{'Effective start/end time ' | translate }}: \r\n {{ template.realStartedAt ? (template.realStartedAt |\r\n timeDateString:\"day_time_zone\" | async) : ('No data' | translate)}} / \r\n {{ template.realEndedAt ? (template.realEndedAt |\r\n timeDateString:\"day_time_zone\" | async) : ('No data' | translate)}}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\"\r\n *ngIf=\"allTemplateMissionsMap.get(template.id)\">\r\n {{'Visitors created' |\r\n translate}}:{{allTemplateMissionsMap.get(template.id).length}}\r\n <lib-csv-export [headers]=\"csvHeaders\" [title]=\"'Users'\"\r\n buttonLabel=\"Download users\" [rowsInput]=\"generateCSVUsers(template)\">\r\n </lib-csv-export>\r\n </li>\r\n \r\n </ul>\r\n <div class=\"action-button-container\">\r\n <div class=\"d-inline-block mr-2 action-button\" ngbDropdown\r\n #myDrop=\"ngbDropdown\">\r\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownManual\"\r\n ngbDropdownToggle>{{'Manage users' |\r\n translate}}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownManual\">\r\n <button (click)=\"onGenerateBatch(template)\" ngbDropdownItem>\r\n {{'Create users from this template' | translate}}</button>\r\n <button (click)=\"onSendInvitation(template)\" ngbDropdownItem>\r\n {{'Send invitation to all users' | translate}}\r\n </button>\r\n <button (click)=\"onSendUpdate(template)\" ngbDropdownItem>\r\n {{'Send update to all users' | translate}}\r\n </button>\r\n <button (click)=\"onDeleteUsers(template)\" ngbDropdownItem>\r\n {{'Remove users' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"d-inline-block mr-2 action-button\" ngbDropdown\r\n #myDrop2=\"ngbDropdown\">\r\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdown2\"\r\n ngbDropdownToggle>{{'Manage template' |\r\n translate}}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdown2\">\r\n <button (click)=\"onEditTemplate(template)\" ngbDropdownItem>\r\n {{'Edit template' | translate}}</button>\r\n <button (click)=\"onCleanTimeTemplate(template)\" ngbDropdownItem>\r\n {{'Clean effective times' | translate}}\r\n </button>\r\n <button (click)=\"onArchiveTemplate(template)\" ngbDropdownItem>\r\n {{'Archive template' | translate}}\r\n </button>\r\n <button (click)=\"onCancelTemplate(template)\" ngbDropdownItem>\r\n {{'Cancel visit' | translate}}\r\n </button>\r\n <button (click)=\"onDuplicateTemplate(template)\" ngbDropdownItem>\r\n {{'Duplicate' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill mr-2 ml-auto\"\r\n (click)=\"onEdit(mis)\">\r\n {{'Edit' | translate}}</button>\r\n <button class=\"btn btn-primary rounded-pill mt-3 mb-3 ml-auto\"\r\n (click)=\"onArchiveTemplate(mis)\">{{'Archive' | translate}}</button> -->\r\n </div>\r\n\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"editing\">\r\n <lib-template [editTemplate]=\"templateToEdit\" [currentOrg]=\"currentOrg\"\r\n (updatedTemplate)=\"onUpdatedTemplate($event)\"></lib-template>\r\n </div>\r\n <div *ngIf=\"creating\">\r\n <lib-template [currentOrg]=\"currentOrg\" [zoneID]=\"zoneIDForNewTemplate\"\r\n (createdTemplate)=\"onCreatedTemplate($event)\"></lib-template>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 col-lg-5\" *ngIf=\"isAddingBatch\">\r\n <lib-create-batch [template]=\"chosenTemplate\" (createdMissions)=\"onUpdatedEvent($event)\"></lib-create-batch>\r\n </div>\r\n <ng-template #deleteUsers let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"modal-basic-title\">{{\"Delete users\" | translate}}\r\n </h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.close()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"column align-items-center\">\r\n <div class=\"row\" style=\"padding: 0 1.25rem;\">\r\n <ul class=\"container-fluid list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let object of currentTemplateUsers\">\r\n <input type=\"checkbox\" [(ngModel)]=\"object.checked\"> {{object.profile.email}}\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div class=\"row\" style=\"padding: 1.25rem;\">\r\n <button class=\"btn btn-outline-primary rounded-pill mr-4\" (click)=\"onDeleteChosen()\">{{\"Apply\" |\r\n translate}}\r\n </button>\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"modalRef.close()\">{{\"Cancel\" |\r\n translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>", styles: [".add-button{width:-moz-fit-content;width:fit-content;margin-left:.5rem}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px!important}\n"], components: [{ type: i1.LoaderComponent, selector: "lib-loader" }, { type: i5.ChevronComponent, selector: "lib-chevron", inputs: ["conditionShowing"] }, { type: i1.CsvExportComponent, selector: "lib-csv-export", inputs: ["headers", "rowsInput", "getRows", "title", "buttonLabel"] }, { type: i6.TemplateComponent, selector: "lib-template", inputs: ["currentOrg", "editTemplate", "zoneID"], outputs: ["updatedTemplate", "createdTemplate"] }, { type: i7.CreateBatchComponent, selector: "lib-create-batch", inputs: ["template"], outputs: ["createdMissions"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i4.NgbDropdownItem, selector: "[ngbDropdownItem]", inputs: ["disabled"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], pipes: { "translate": i3.TranslatePipe, "keyvalue": i8.KeyValuePipe, "async": i8.AsyncPipe, "hashtagFromID": i1.HashtagFromIdPipe, "timeDateString": i1.TimeDateToLocalStringPipe } });
277
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: VisitorComponent, decorators: [{
278
+ type: Component,
279
+ args: [{ selector: 'lib-visitor', template: "<div class=\"dashboard-tab\">\r\n <div class=\"header-dashboard-tab\">\r\n <h3>{{'Museum Visitors' | translate}}</h3>\r\n <!-- <app-search-bar [searchable]=\"allZoneTemplatesMap\" objectType=\"TEMPLATE\"\r\n (searchEvent)=\"applyResultsSearchBar($event)\">\r\n </app-search-bar> -->\r\n <hr>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-md-8 col-lg-7\">\r\n <div class=\"row ml-0 mb-2\">\r\n <h4 class=\"header-small\">{{'Itineraries' | translate}}</h4>\r\n </div>\r\n <div class=\"row ml-0 mb-2\" *ngIf=\"!editing && !creating\">\r\n <button class=\"btn btn-outline-primary rounded-pill ml-3 add-button\" (click)=\"onCreateTemplate()\">\r\n {{'Create template for new itinerary' | translate}}</button>\r\n </div>\r\n <div class=\"d-flex justify-content-center\" *ngIf=\"loading\">\r\n <lib-loader></lib-loader>\r\n </div>\r\n <div *ngIf=\"!editing && !creating\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let pair of allZoneTemplatesMapFiltered | keyvalue\">\r\n <h4>{{pair.key.name}} <span style=\"font-size:0.8em\"> - {{pair.key.space.name}}</span> </h4>\r\n <div class=\"d-flex justify-content-between align-items-center\"\r\n (click)=\"onToggleMissionsForZone(pair.key.id)\">\r\n <ng-container *ngIf=\"pair.value.length <= 1\">\r\n {{pair.value.length}} {{'visit template found' | translate}}\r\n </ng-container>\r\n <ng-container *ngIf=\"pair.value.length > 1\">\r\n {{pair.value.length}} {{'visit templates found' | translate}}\r\n </ng-container>\r\n <lib-chevron [conditionShowing]=\"detailsForZones.includes(pair.key.id)\"></lib-chevron>\r\n\r\n </div>\r\n <div *ngIf=\"detailsForZones.includes(pair.key.id)\">\r\n <button class=\"btn btn-outline-primary rounded-pill mt-3 mb-3 ml-2\"\r\n (click)=\"onAddNewTemplateToZone(pair.key)\">{{'Add new template' | translate}}</button>\r\n\r\n <ul class=\"container-fluid list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let template of pair.value\">\r\n <div class=\"d-flex justify-content-between align-items-center\"\r\n (click)=\"onToggleTemplateDetails(template)\">\r\n <h5>{{template.title}}</h5>\r\n <lib-chevron [conditionShowing]=\"templateShowing === template.id\"></lib-chevron>\r\n </div>\r\n <div *ngIf=\"templateShowing === template.id\">\r\n <ul class=\"list-group list-group-flush\">\r\n <li class=\"list-group-item bg-transparent\">{{'Description' | translate }}:\r\n {{ template.description}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Language' | translate }}:\r\n {{ template.locale ? template.locale : ('Not applicable' | translate)}}</li>\r\n <li class=\"list-group-item bg-transparent\"\r\n *ngIf=\"template.hashtags && template.hashtags.length> 0\">\r\n {{'Hashtags' | translate}}:\r\n <ul class=\"keywordsDisplay no-border\">\r\n <div class=\"keywordsdisplayContainer\"\r\n *ngIf=\"template.hashtags.length> 0\">\r\n <li class=\"keywordsItem\" *ngFor=\"let hashtag of template.hashtags\">{{\r\n hashtag | hashtagFromID | async }}</li>\r\n </div>\r\n </ul>\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">{{'Access level' | translate }}:\r\n {{ template.level}}</li>\r\n <li class=\"list-group-item bg-transparent\">{{'Planned at' | translate }} :\r\n {{ template.startDateTime ? (template.startDateTime |\r\n timeDateString:\"day_time_zone\" | async) :\r\n \"No data\" | translate }} - \r\n {{ template.endDateTime ?\r\n (template.endDateTime | timeDateString:\"day_time_zone\" | async) : \"No data\" |\r\n translate}}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\">\r\n {{'Effective start/end time ' | translate }}: \r\n {{ template.realStartedAt ? (template.realStartedAt |\r\n timeDateString:\"day_time_zone\" | async) : ('No data' | translate)}} / \r\n {{ template.realEndedAt ? (template.realEndedAt |\r\n timeDateString:\"day_time_zone\" | async) : ('No data' | translate)}}\r\n </li>\r\n <li class=\"list-group-item bg-transparent\"\r\n *ngIf=\"allTemplateMissionsMap.get(template.id)\">\r\n {{'Visitors created' |\r\n translate}}:{{allTemplateMissionsMap.get(template.id).length}}\r\n <lib-csv-export [headers]=\"csvHeaders\" [title]=\"'Users'\"\r\n buttonLabel=\"Download users\" [rowsInput]=\"generateCSVUsers(template)\">\r\n </lib-csv-export>\r\n </li>\r\n \r\n </ul>\r\n <div class=\"action-button-container\">\r\n <div class=\"d-inline-block mr-2 action-button\" ngbDropdown\r\n #myDrop=\"ngbDropdown\">\r\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdownManual\"\r\n ngbDropdownToggle>{{'Manage users' |\r\n translate}}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownManual\">\r\n <button (click)=\"onGenerateBatch(template)\" ngbDropdownItem>\r\n {{'Create users from this template' | translate}}</button>\r\n <button (click)=\"onSendInvitation(template)\" ngbDropdownItem>\r\n {{'Send invitation to all users' | translate}}\r\n </button>\r\n <button (click)=\"onSendUpdate(template)\" ngbDropdownItem>\r\n {{'Send update to all users' | translate}}\r\n </button>\r\n <button (click)=\"onDeleteUsers(template)\" ngbDropdownItem>\r\n {{'Remove users' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n <div class=\"d-inline-block mr-2 action-button\" ngbDropdown\r\n #myDrop2=\"ngbDropdown\">\r\n <button class=\"btn btn-label-file rounded-pill\" id=\"dropdown2\"\r\n ngbDropdownToggle>{{'Manage template' |\r\n translate}}</button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdown2\">\r\n <button (click)=\"onEditTemplate(template)\" ngbDropdownItem>\r\n {{'Edit template' | translate}}</button>\r\n <button (click)=\"onCleanTimeTemplate(template)\" ngbDropdownItem>\r\n {{'Clean effective times' | translate}}\r\n </button>\r\n <button (click)=\"onArchiveTemplate(template)\" ngbDropdownItem>\r\n {{'Archive template' | translate}}\r\n </button>\r\n <button (click)=\"onCancelTemplate(template)\" ngbDropdownItem>\r\n {{'Cancel visit' | translate}}\r\n </button>\r\n <button (click)=\"onDuplicateTemplate(template)\" ngbDropdownItem>\r\n {{'Duplicate' | translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- <button type=\"button\" class=\"btn btn-primary rounded-pill mr-2 ml-auto\"\r\n (click)=\"onEdit(mis)\">\r\n {{'Edit' | translate}}</button>\r\n <button class=\"btn btn-primary rounded-pill mt-3 mb-3 ml-auto\"\r\n (click)=\"onArchiveTemplate(mis)\">{{'Archive' | translate}}</button> -->\r\n </div>\r\n\r\n </li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n <div *ngIf=\"editing\">\r\n <lib-template [editTemplate]=\"templateToEdit\" [currentOrg]=\"currentOrg\"\r\n (updatedTemplate)=\"onUpdatedTemplate($event)\"></lib-template>\r\n </div>\r\n <div *ngIf=\"creating\">\r\n <lib-template [currentOrg]=\"currentOrg\" [zoneID]=\"zoneIDForNewTemplate\"\r\n (createdTemplate)=\"onCreatedTemplate($event)\"></lib-template>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 col-lg-5\" *ngIf=\"isAddingBatch\">\r\n <lib-create-batch [template]=\"chosenTemplate\" (createdMissions)=\"onUpdatedEvent($event)\"></lib-create-batch>\r\n </div>\r\n <ng-template #deleteUsers let-modal>\r\n <div class=\"modal-header\">\r\n <h4 class=\"modal-title\" id=\"modal-basic-title\">{{\"Delete users\" | translate}}\r\n </h4>\r\n <button type=\"button\" class=\"close\" aria-label=\"Close\" (click)=\"modalRef.close()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n </button>\r\n </div>\r\n <div class=\"modal-body\">\r\n <div class=\"column align-items-center\">\r\n <div class=\"row\" style=\"padding: 0 1.25rem;\">\r\n <ul class=\"container-fluid list-group list-group-flush\">\r\n <li class=\"list-group-item\" *ngFor=\"let object of currentTemplateUsers\">\r\n <input type=\"checkbox\" [(ngModel)]=\"object.checked\"> {{object.profile.email}}\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <div class=\"row\" style=\"padding: 1.25rem;\">\r\n <button class=\"btn btn-outline-primary rounded-pill mr-4\" (click)=\"onDeleteChosen()\">{{\"Apply\" |\r\n translate}}\r\n </button>\r\n <button class=\"btn btn-outline-primary rounded-pill\" (click)=\"modalRef.close()\">{{\"Cancel\" |\r\n translate}}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </div>\r\n</div>", styles: [".add-button{width:-moz-fit-content;width:fit-content;margin-left:.5rem}li.ml-4{margin-left:3rem}.action-button-container{display:flex;justify-content:space-evenly}.action-button-container .action-button{width:145px!important}\n"] }]
280
+ }], ctorParameters: function () { return [{ type: i1.BaseUserService }, { type: i1.MissionService }, { type: i2.Router }, { type: i3.TranslateService }, { type: i1.SpaceService }, { type: i1.ZoneService }, { type: i4.NgbModal }, { type: i1.TemplateService }]; }, propDecorators: { modal: [{
281
+ type: ViewChild,
282
+ args: ["deleteUsers"]
283
+ }] } });
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlzaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tYWRtaW4vc3JjL2xpYi92aXNpdG9yL3Zpc2l0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9saWIvdmlzaXRvci92aXNpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBSTdELE9BQU8sRUFFd0IsVUFBVSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQ3BFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7O0FBTzlCLE1BQU0sT0FBTyxnQkFBZ0I7SUErQ3pCLFlBQ1ksV0FBNEIsRUFDNUIsY0FBOEIsRUFDOUIsTUFBYyxFQUNkLFNBQTJCLEVBQzNCLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQXNCLEVBQ3RCLGVBQWdDO1FBUGhDLGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFVO1FBQ3RCLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQTVDNUMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUVoQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLHdCQUFtQixHQUErQixJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsc0JBQXNCO1FBSW5GLDJCQUFzQixHQUEyQixJQUFJLEdBQUcsRUFBRSxDQUFD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SyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELG1CQUFtQixDQUFDLFFBQXVCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFDO1FBQy9CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CLENBQUMsUUFBdUI7UUFDN0MsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztZQUM5QixFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDZixXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ25DLENBQUM7OzZHQTdWUSxnQkFBZ0I7aUdBQWhCLGdCQUFnQix5SkNkN0IseTRiQTRMTTsyRkQ5S08sZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNJLGFBQWE7aVNBS0csS0FBSztzQkFBOUIsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gICAgTWlzc2lvbiwgWm9uZSwgT3JnYW5pc2F0aW9uLCBCYXNlVXNlclNlcnZpY2UsIE1pc3Npb25TZXJ2aWNlLFxyXG4gICAgU3BhY2VTZXJ2aWNlLCBab25lU2VydmljZSwgUm9sZVN0YXR1cywgUHJvZmlsZUVudGl0eSwgRW1haWxTdGF0dXMsIFRlbXBsYXRlU2VydmljZSwgVmlzaXRUZW1wbGF0ZSwgc29ydEFscGhhYmV0aWNhbGx5T25OYW1lXHJcbn0gZnJvbSAnbmd4LXNtYXJ0ZXJwbGFuLWNvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2xpYi12aXNpdG9yJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi92aXNpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Zpc2l0b3IuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlzaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKFwiZGVsZXRlVXNlcnNcIikgbW9kYWw7XHJcblxyXG4gICAgY2hvc2VuVGVtcGxhdGU6IFZpc2l0VGVtcGxhdGU7XHJcblxyXG4gICAgYWxsT3JkZXJlZE1pc3Npb25zOiBNaXNzaW9uW107XHJcblxyXG4gICAgY3VycmVudE9yZzogT3JnYW5pc2F0aW9uO1xyXG5cclxuICAgIHRlbXBsYXRlVG9FZGl0OiBWaXNpdFRlbXBsYXRlO1xyXG5cclxuICAgIGVkaXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBjcmVhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgIHpvbmVJREZvck5ld1RlbXBsYXRlOiBzdHJpbmc7XHJcblxyXG4gICAgaXNBZGRpbmdCYXRjaCA9IGZhbHNlO1xyXG5cclxuICAgIGFsbFpvbmVUZW1wbGF0ZXNNYXA6IE1hcDxab25lLCBWaXNpdFRlbXBsYXRlW10+ID0gbmV3IE1hcCgpOyAvLyB6b25lPT5pdHMgdGVtcGxhdGVzXHJcblxyXG4gICAgYWxsWm9uZVRlbXBsYXRlc01hcEZpbHRlcmVkOiBNYXA8Wm9uZSwgVmlzaXRUZW1wbGF0ZVtdPjtcclxuXHJcbiAgICBhbGxUZW1wbGF0ZU1pc3Npb25zTWFwOiBNYXA8c3RyaW5nLCBNaXNzaW9uW10+ID0gbmV3IE1hcCgpOyAvLyB0ZW1wbGF0ZUlELCBpdHMgZGVyaXZlZCBNaXNzaW9uc1xyXG5cclxuICAgIGRldGFpbHNGb3Jab25lczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICBjc3ZIZWFkZXJzID0gW1xyXG4gICAgICAgIFwiZW1haWxcIixcclxuICAgICAgICBcInVzZXJfc3RhdHVzXCIsXHJcbiAgICAgICAgXCJ6b25lXCIsXHJcbiAgICAgICAgXCJsb2NhdGlvblwiLFxyXG4gICAgICAgIFwic3RhcnRfZGF0ZV90aW1lXCIsXHJcbiAgICAgICAgXCJlbmRfZGF0ZV90aW1lXCIsXHJcbiAgICAgICAgXCJhY2Nlc3NfbGV2ZWxcIixcclxuICAgIF07XHJcblxyXG4gICAgdGVtcGxhdGVTaG93aW5nOiBzdHJpbmc7XHJcblxyXG4gICAgbG9hZGluZyA9IGZhbHNlO1xyXG5cclxuICAgIGN1cnJlbnRUZW1wbGF0ZVVzZXJzO1xyXG5cclxuICAgIG1vZGFsUmVmO1xyXG5cclxuICAgIHRvRHVwbGljYXRlID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWlzc2lvblNlcnZpY2U6IE1pc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBzcGFjZVNlcnZpY2U6IFNwYWNlU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICAgICAgcHJpdmF0ZSB0ZW1wbGF0ZVNlcnZpY2U6IFRlbXBsYXRlU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UuaXNDaGFuZ2VkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnNldHVwKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0dXAoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cCgpIHtcclxuICAgICAgICB0aGlzLnNldHVwVXNlcigpO1xyXG4gICAgICAgIHRoaXMuc2V0Wm9uZXNUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRab25lc1RlbXBsYXRlcygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE9yZykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hbGxab25lVGVtcGxhdGVzTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIHRoaXMuYWxsVGVtcGxhdGVNaXNzaW9uc01hcCA9IG5ldyBNYXAoKTtcclxuICAgICAgICBsZXQgbG9jYXRpb25zID0gdGhpcy5zcGFjZVNlcnZpY2UubG9jYXRpb25zRm9yVXNlcjtcclxuICAgICAgICBpZiAobG9jYXRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBsb2NhdGlvbnMgPSBhd2FpdCB0aGlzLnNwYWNlU2VydmljZS5nZXRMb2NhdGlvbnNGb3JDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgbG9jYXRpb25zLm1hcChhc3luYyAoc3BhY2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCB6b25lcyA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0Wm9uZXNCeVNwYWNlKHNwYWNlLmlkKTtcclxuICAgICAgICAgICAgICAgIHpvbmVzID0gem9uZXMuZmlsdGVyKCh6b25lKSA9PiB6b25lLmlzTXVzZXVtVmlzaXRab25lKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgICAgIHpvbmVzLm1hcChhc3luYyAoem9uZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2aXNpdG9yc01pc3Npb25zID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNCeVpvbmVCeVJvbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRlbXBsYXRlcyA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnRlbXBsYXRlU2VydmljZS5nZXRUZW1wbGF0ZXNCeVpvbmUoem9uZS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlcyA9IHRlbXBsYXRlcy5maWx0ZXIoKHRlbXBsYXRlKSA9PiAhdGVtcGxhdGUuZGVsZXRlZEF0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVzID0gdGVtcGxhdGVzLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5zdGFydERhdGVUaW1lKSAtIG5ldyBEYXRlKGEuc3RhcnREYXRlVGltZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgdGVtcGxhdGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtaXNzaW9uc0Zyb21UZW1wbGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRvcnNNaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtaXMpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXMudGVtcGxhdGVNaXNzaW9uSUQgPT09IHRlbXBsYXRlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxUZW1wbGF0ZU1pc3Npb25zTWFwLnNldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaXNzaW9uc0Zyb21UZW1wbGF0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxab25lVGVtcGxhdGVzTWFwLnNldCh6b25lLCB0ZW1wbGF0ZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBzb3J0IGxpc3QgYnkgem9uZSBuYW1lIGFscGhhYmV0aWNhbGx5XHJcbiAgICAgICAgdGhpcy5hbGxab25lVGVtcGxhdGVzTWFwRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICBuZXcgTWFwKFsuLi50aGlzLmFsbFpvbmVUZW1wbGF0ZXNNYXAuZW50cmllcygpXS5zb3J0KChhLCBiKSA9PiBhWzBdLm5hbWUubG9jYWxlQ29tcGFyZShiWzBdLm5hbWUpKSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBVc2VyKCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE9yZyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE9yZ2FuaXNhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ3JlYXRlVGVtcGxhdGUoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25EZWxldGVNaXNzaW9uKG1pc3Npb246IE1pc3Npb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLnNvZnREZWxldGVNaXNzaW9uKG1pc3Npb24uaWQpO1xyXG4gICAgICAgIHRoaXMuc2V0Wm9uZXNUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkVkaXRUZW1wbGF0ZSh0ZW1wbGF0ZTogVmlzaXRUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZVRvRWRpdCA9IHRlbXBsYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVXBkYXRlZEV2ZW50KGlzQWRkZWQ6IE1pc3Npb25bXSkge1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVUb0VkaXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNBZGRpbmdCYXRjaCA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2hvc2VuVGVtcGxhdGUgPSBudWxsO1xyXG4gICAgICAgIGlmIChpc0FkZGVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Wm9uZXNUZW1wbGF0ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25VcGRhdGVkVGVtcGxhdGUodGVtcGxhdGU6IFZpc2l0VGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVUb0VkaXQgPSBudWxsO1xyXG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50b0R1cGxpY2F0ZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyB0ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRlbXBsYXRlLmlkO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy50ZW1wbGF0ZVNlcnZpY2UuY3JlYXRlKHRlbXBsYXRlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudG9EdXBsaWNhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0Wm9uZXNUZW1wbGF0ZXMoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRlbXBsYXRlU2VydmljZS51cGRhdGUodGVtcGxhdGUpO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNldFpvbmVzVGVtcGxhdGVzKCk7XHJcbiAgICAgICAgICAgIC8vIHVwZGF0ZSByZWxhdGVkIE1pc3Npb25zXHJcbiAgICAgICAgICAgIGNvbnN0IG1pc3Npb25zRm9yVGVtcGxhdGUgPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uc0J5VGVtcGxhdGUodGVtcGxhdGUuaWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIG1pc3Npb25zRm9yVGVtcGxhdGUubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWlzc2lvblVwZGF0ZSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1pc3Npb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsOiB0ZW1wbGF0ZS5sZXZlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnREYXRlVGltZTogdGVtcGxhdGUuc3RhcnREYXRlVGltZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZVRpbWU6IHRlbXBsYXRlLmVuZERhdGVUaW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGU6IHRlbXBsYXRlLmxvY2FsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUlEOiB0ZW1wbGF0ZS56b25lSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlSUQ6IHRlbXBsYXRlLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc2h0YWdzOiB0ZW1wbGF0ZS5oYXNodGFncyxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UudXBkYXRlKG1pc3Npb25VcGRhdGUpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkNyZWF0ZWRUZW1wbGF0ZSh0ZW1wbGF0ZTogVmlzaXRUZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5jcmVhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0ZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRlbXBsYXRlU2VydmljZS5jcmVhdGUodGVtcGxhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNldFpvbmVzVGVtcGxhdGVzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9nZ2xlTWlzc2lvbnNGb3Jab25lKHpvbmVJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGV0YWlsc0ZvclpvbmVzLmluY2x1ZGVzKHpvbmVJRCkpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmRldGFpbHNGb3Jab25lcy5pbmRleE9mKHpvbmVJRCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsc0ZvclpvbmVzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxzRm9yWm9uZXMucHVzaCh6b25lSUQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblRvZ2dsZVRlbXBsYXRlRGV0YWlscyh0ZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVTaG93aW5nID1cclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVNob3dpbmcgPT09IHRlbXBsYXRlLmlkID8gbnVsbCA6IHRlbXBsYXRlLmlkO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWRkTmV3VGVtcGxhdGVUb1pvbmUoem9uZTogWm9uZSkge1xyXG4gICAgICAgIHRoaXMuem9uZUlERm9yTmV3VGVtcGxhdGUgPSB6b25lLmlkO1xyXG4gICAgICAgIHRoaXMuY3JlYXRpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQXJjaGl2ZVRlbXBsYXRlKHRlbXBsYXRlOiBWaXNpdFRlbXBsYXRlKSB7XHJcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJjb25maXJtLmFyY2hpdmVUZW1wbGF0ZVwiKTtcclxuICAgICAgICBpZiAod2luZG93LmNvbmZpcm0obWVzc2FnZSkpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlzc2lvbnNUb0RlbGV0ZSA9IHRoaXMuYWxsVGVtcGxhdGVNaXNzaW9uc01hcC5nZXQodGVtcGxhdGUuaWQpO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIG1pc3Npb25zVG9EZWxldGUubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5zb2Z0RGVsZXRlTWlzc2lvbihtaXNzaW9uLmlkKTtcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnRlbXBsYXRlU2VydmljZS5zb2Z0RGVsZXRlKHRlbXBsYXRlLmlkKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRab25lc1RlbXBsYXRlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbkdlbmVyYXRlQmF0Y2godGVtcGxhdGU6IFZpc2l0VGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmNob3NlblRlbXBsYXRlID0gdGVtcGxhdGU7XHJcbiAgICAgICAgdGhpcy5pc0FkZGluZ0JhdGNoID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZW5lcmF0ZUNTVlVzZXJzKHRlbXBsYXRlOiBWaXNpdFRlbXBsYXRlKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgbWlzc2lvbiBvZiB0aGlzLmFsbFRlbXBsYXRlTWlzc2lvbnNNYXAuZ2V0KHRlbXBsYXRlLmlkKSkge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gbmV3IFByb2ZpbGVFbnRpdHkobWlzc2lvbi51c2VyKTtcclxuICAgICAgICAgICAgZGF0YS5wdXNoKFtcclxuICAgICAgICAgICAgICAgIHVzZXIuZW1haWwsXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uLnVzZXIuc3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgbWlzc2lvbi56b25lLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uLnNwYWNlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uLnN0YXJ0RGF0ZVRpbWUsXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uLmVuZERhdGVUaW1lLFxyXG4gICAgICAgICAgICAgICAgbWlzc2lvbi5sZXZlbCxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uU2VuZEludml0YXRpb24odGVtcGxhdGU6IFZpc2l0VGVtcGxhdGUpIHtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgdGhpcy5hbGxUZW1wbGF0ZU1pc3Npb25zTWFwXHJcbiAgICAgICAgICAgICAgICAuZ2V0KHRlbXBsYXRlLmlkKVxyXG4gICAgICAgICAgICAgICAgLm1hcChhc3luYyAobWlzc2lvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtaXNzaW9uLmVtYWlsU3RhdHVzICE9PSBFbWFpbFN0YXR1cy5TRU5UKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UudXBkYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtaXNzaW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxTdGF0dXM6IEVtYWlsU3RhdHVzLkNSRUFUSU9OX1RPX0RFTElWRVIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25TZW5kVXBkYXRlKHRlbXBsYXRlOiBWaXNpdFRlbXBsYXRlKSB7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIHRoaXMuYWxsVGVtcGxhdGVNaXNzaW9uc01hcFxyXG4gICAgICAgICAgICAgICAgLmdldCh0ZW1wbGF0ZS5pZClcclxuICAgICAgICAgICAgICAgIC5tYXAoYXN5bmMgKG1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLnVwZGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtaXNzaW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbWFpbFN0YXR1czogRW1haWxTdGF0dXMuVVBEQVRFX1RPX0RFTElWRVIsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uQ2FuY2VsVGVtcGxhdGUodGVtcGxhdGU6IFZpc2l0VGVtcGxhdGUpIHtcclxuICAgICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcImNvbmZpcm0uY2FuY2VsVGVtcGxhdGVcIik7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxUZW1wbGF0ZU1pc3Npb25zTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldCh0ZW1wbGF0ZS5pZClcclxuICAgICAgICAgICAgICAgICAgICAubWFwKGFzeW5jIChtaXNzaW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UudXBkYXRlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtaXNzaW9uLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1haWxTdGF0dXM6IEVtYWlsU3RhdHVzLkNBTkNFTExBVElPTl9UT19ERUxJVkVSLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlZEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlSZXN1bHRzU2VhcmNoQmFyKHJlc3VsdHMpIHtcclxuICAgICAgICB0aGlzLmFsbFpvbmVUZW1wbGF0ZXNNYXBGaWx0ZXJlZCA9IHJlc3VsdHMgfHwgdGhpcy5hbGxab25lVGVtcGxhdGVzTWFwO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRGVsZXRlVXNlcnMobWlzOiBWaXNpdFRlbXBsYXRlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VGVtcGxhdGVVc2VycyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgbWlzc2lvbiBvZiB0aGlzLmFsbFRlbXBsYXRlTWlzc2lvbnNNYXAuZ2V0KG1pcy5pZCkpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VGVtcGxhdGVVc2Vycy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIG1pc3Npb24sXHJcbiAgICAgICAgICAgICAgICBwcm9maWxlOiBuZXcgUHJvZmlsZUVudGl0eShtaXNzaW9uLnVzZXIpLFxyXG4gICAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpbmRleDogdGhpcy5hbGxUZW1wbGF0ZU1pc3Npb25zTWFwLmdldChtaXMuaWQpLmluZGV4T2YobWlzc2lvbiksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih0aGlzLm1vZGFsKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlbGV0ZXMgbWlzc2lvbiBvZiB0aGUgdXNlciBhbmQgY2hlY2tzIGlmIGNhbiBoYXJkIGRlbGV0ZSB0aGUgUHJvZmlsZSAobm8gb3RoZXIgbWlzc2lvbnMpXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIG9uRGVsZXRlQ2hvc2VuKCkge1xyXG4gICAgICAgIGNvbnN0IGxpc3RUb0RlbGV0ZSA9IHRoaXMuY3VycmVudFRlbXBsYXRlVXNlcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAob2JqZWN0KSA9PiBvYmplY3QuY2hlY2tlZCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBsaXN0VG9EZWxldGUubWFwKGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2Uuc29mdERlbGV0ZU1pc3Npb24ob2JqZWN0Lm1pc3Npb24uaWQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51c2VyU2VydmljZS5zb2Z0RGVsZXRlVXNlcihvYmplY3QucHJvZmlsZS5pZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5hbGxUZW1wbGF0ZU1pc3Npb25zTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgLmdldChvYmplY3QubWlzc2lvbi50ZW1wbGF0ZU1pc3Npb25JRClcclxuICAgICAgICAgICAgICAgICAgICAuc3BsaWNlKG9iamVjdC5pbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5tb2RhbFJlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uRHVwbGljYXRlVGVtcGxhdGUodGVtcGxhdGU6IFZpc2l0VGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmVkaXRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGVtcGxhdGVUb0VkaXQgPSB0ZW1wbGF0ZTtcclxuICAgICAgICB0aGlzLnRvRHVwbGljYXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkNsZWFuVGltZVRlbXBsYXRlKHRlbXBsYXRlOiBWaXNpdFRlbXBsYXRlKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy50ZW1wbGF0ZVNlcnZpY2UudXBkYXRlKHtcclxuICAgICAgICAgICAgaWQ6IHRlbXBsYXRlLmlkLFxyXG4gICAgICAgICAgICByZWFsRW5kZWRBdDogbnVsbCxcclxuICAgICAgICAgICAgcmVhbFN0YXJ0ZWRBdDogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0Wm9uZXNUZW1wbGF0ZXMoKTtcclxuICAgIH1cclxuXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImRhc2hib2FyZC10YWJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItZGFzaGJvYXJkLXRhYlwiPlxyXG4gICAgICAgIDxoMz57eydNdXNldW0gVmlzaXRvcnMnIHwgdHJhbnNsYXRlfX08L2gzPlxyXG4gICAgICAgIDwhLS0gPGFwcC1zZWFyY2gtYmFyIFtzZWFyY2hhYmxlXT1cImFsbFpvbmVUZW1wbGF0ZXNNYXBcIiBvYmplY3RUeXBlPVwiVEVNUExBVEVcIlxyXG4gICAgICAgICAgICAoc2VhcmNoRXZlbnQpPVwiYXBwbHlSZXN1bHRzU2VhcmNoQmFyKCRldmVudClcIj5cclxuICAgICAgICA8L2FwcC1zZWFyY2gtYmFyPiAtLT5cclxuICAgICAgICA8aHI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTggY29sLWxnLTdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtbC0wIG1iLTJcIj5cclxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cImhlYWRlci1zbWFsbFwiPnt7J0l0aW5lcmFyaWVzJyB8IHRyYW5zbGF0ZX19PC9oND5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWwtMCBtYi0yXCIgKm5nSWY9XCIhZWRpdGluZyAmJiAhY3JlYXRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbWwtMyBhZGQtYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ3JlYXRlVGVtcGxhdGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7J0NyZWF0ZSB0ZW1wbGF0ZSBmb3IgbmV3IGl0aW5lcmFyeScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLWxvYWRlcj48L2xpYi1sb2FkZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWVkaXRpbmcgJiYgIWNyZWF0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW1cIiAqbmdGb3I9XCJsZXQgcGFpciBvZiBhbGxab25lVGVtcGxhdGVzTWFwRmlsdGVyZWQgfCBrZXl2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDQ+e3twYWlyLmtleS5uYW1lfX0gPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MC44ZW1cIj4gLSB7e3BhaXIua2V5LnNwYWNlLm5hbWV9fTwvc3Bhbj4gPC9oND5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVG9nZ2xlTWlzc2lvbnNGb3Jab25lKHBhaXIua2V5LmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhaXIudmFsdWUubGVuZ3RoIDw9IDFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3BhaXIudmFsdWUubGVuZ3RofX0ge3sndmlzaXQgdGVtcGxhdGUgZm91bmQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhaXIudmFsdWUubGVuZ3RoID4gMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7cGFpci52YWx1ZS5sZW5ndGh9fSB7eyd2aXNpdCB0ZW1wbGF0ZXMgZm91bmQnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jaGV2cm9uIFtjb25kaXRpb25TaG93aW5nXT1cImRldGFpbHNGb3Jab25lcy5pbmNsdWRlcyhwYWlyLmtleS5pZClcIj48L2xpYi1jaGV2cm9uPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkZXRhaWxzRm9yWm9uZXMuaW5jbHVkZXMocGFpci5rZXkuaWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkgcm91bmRlZC1waWxsIG10LTMgbWItMyBtbC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BZGROZXdUZW1wbGF0ZVRvWm9uZShwYWlyLmtleSlcIj57eydBZGQgbmV3IHRlbXBsYXRlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIGxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiICpuZ0Zvcj1cImxldCB0ZW1wbGF0ZSBvZiBwYWlyLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRvZ2dsZVRlbXBsYXRlRGV0YWlscyh0ZW1wbGF0ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNT57e3RlbXBsYXRlLnRpdGxlfX08L2g1PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpYi1jaGV2cm9uIFtjb25kaXRpb25TaG93aW5nXT1cInRlbXBsYXRlU2hvd2luZyA9PT0gdGVtcGxhdGUuaWRcIj48L2xpYi1jaGV2cm9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRlbXBsYXRlU2hvd2luZyA9PT0gdGVtcGxhdGUuaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtZ3JvdXAgbGlzdC1ncm91cC1mbHVzaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbSBiZy10cmFuc3BhcmVudFwiPnt7J0Rlc2NyaXB0aW9uJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVtcGxhdGUuZGVzY3JpcHRpb259fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snTGFuZ3VhZ2UnIHwgdHJhbnNsYXRlIH19OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZW1wbGF0ZS5sb2NhbGUgPyB0ZW1wbGF0ZS5sb2NhbGUgOiAoJ05vdCBhcHBsaWNhYmxlJyB8IHRyYW5zbGF0ZSl9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0ZW1wbGF0ZS5oYXNodGFncyAmJiB0ZW1wbGF0ZS5oYXNodGFncy5sZW5ndGg+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snSGFzaHRhZ3MnIHwgdHJhbnNsYXRlfX06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImtleXdvcmRzRGlzcGxheSBuby1ib3JkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXl3b3Jkc2Rpc3BsYXlDb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGVtcGxhdGUuaGFzaHRhZ3MubGVuZ3RoPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwia2V5d29yZHNJdGVtXCIgKm5nRm9yPVwibGV0IGhhc2h0YWcgb2YgdGVtcGxhdGUuaGFzaHRhZ3NcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnIHwgaGFzaHRhZ0Zyb21JRCB8IGFzeW5jIH19PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snQWNjZXNzIGxldmVsJyB8IHRyYW5zbGF0ZSB9fTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGVtcGxhdGUubGV2ZWx9fTwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwibGlzdC1ncm91cC1pdGVtIGJnLXRyYW5zcGFyZW50XCI+e3snUGxhbm5lZCBhdCcgfCB0cmFuc2xhdGUgfX0gOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZW1wbGF0ZS5zdGFydERhdGVUaW1lID8gKHRlbXBsYXRlLnN0YXJ0RGF0ZVRpbWUgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lRGF0ZVN0cmluZzpcImRheV90aW1lX3pvbmVcIiB8IGFzeW5jKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiTm8gZGF0YVwiIHwgdHJhbnNsYXRlIH19IC0gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRlbXBsYXRlLmVuZERhdGVUaW1lID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlbXBsYXRlLmVuZERhdGVUaW1lIHwgdGltZURhdGVTdHJpbmc6XCJkYXlfdGltZV96b25lXCIgfCBhc3luYykgOiBcIk5vIGRhdGFcIiB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snRWZmZWN0aXZlIHN0YXJ0L2VuZCB0aW1lICcgfCB0cmFuc2xhdGUgfX06IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZW1wbGF0ZS5yZWFsU3RhcnRlZEF0ID8gKHRlbXBsYXRlLnJlYWxTdGFydGVkQXQgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZURhdGVTdHJpbmc6XCJkYXlfdGltZV96b25lXCIgfCBhc3luYykgOiAoJ05vIGRhdGEnIHwgdHJhbnNsYXRlKX19IC8gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZW1wbGF0ZS5yZWFsRW5kZWRBdCA/ICh0ZW1wbGF0ZS5yZWFsRW5kZWRBdCB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZURhdGVTdHJpbmc6XCJkYXlfdGltZV96b25lXCIgfCBhc3luYykgOiAoJ05vIGRhdGEnIHwgdHJhbnNsYXRlKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJsaXN0LWdyb3VwLWl0ZW0gYmctdHJhbnNwYXJlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFsbFRlbXBsYXRlTWlzc2lvbnNNYXAuZ2V0KHRlbXBsYXRlLmlkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydWaXNpdG9ycyBjcmVhdGVkJyB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZX19Ont7YWxsVGVtcGxhdGVNaXNzaW9uc01hcC5nZXQodGVtcGxhdGUuaWQpLmxlbmd0aH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItY3N2LWV4cG9ydCBbaGVhZGVyc109XCJjc3ZIZWFkZXJzXCIgW3RpdGxlXT1cIidVc2VycydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uTGFiZWw9XCJEb3dubG9hZCB1c2Vyc1wiIFtyb3dzSW5wdXRdPVwiZ2VuZXJhdGVDU1ZVc2Vycyh0ZW1wbGF0ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItY3N2LWV4cG9ydD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tYnV0dG9uLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWlubGluZS1ibG9jayBtci0yIGFjdGlvbi1idXR0b25cIiBuZ2JEcm9wZG93blxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbXlEcm9wPVwibmdiRHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGFiZWwtZmlsZSByb3VuZGVkLXBpbGxcIiBpZD1cImRyb3Bkb3duTWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPnt7J01hbmFnZSB1c2VycycgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd25NYW51YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uR2VuZXJhdGVCYXRjaCh0ZW1wbGF0ZSlcIiBuZ2JEcm9wZG93bkl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ3JlYXRlIHVzZXJzIGZyb20gdGhpcyB0ZW1wbGF0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib25TZW5kSW52aXRhdGlvbih0ZW1wbGF0ZSlcIiBuZ2JEcm9wZG93bkl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snU2VuZCBpbnZpdGF0aW9uIHRvIGFsbCB1c2VycycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvblNlbmRVcGRhdGUodGVtcGxhdGUpXCIgbmdiRHJvcGRvd25JdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J1NlbmQgdXBkYXRlIHRvIGFsbCB1c2VycycgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvbkRlbGV0ZVVzZXJzKHRlbXBsYXRlKVwiIG5nYkRyb3Bkb3duSXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydSZW1vdmUgdXNlcnMnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1pbmxpbmUtYmxvY2sgbXItMiBhY3Rpb24tYnV0dG9uXCIgbmdiRHJvcGRvd25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI215RHJvcDI9XCJuZ2JEcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1sYWJlbC1maWxlIHJvdW5kZWQtcGlsbFwiIGlkPVwiZHJvcGRvd24yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYkRyb3Bkb3duVG9nZ2xlPnt7J01hbmFnZSB0ZW1wbGF0ZScgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBuZ2JEcm9wZG93bk1lbnUgYXJpYS1sYWJlbGxlZGJ5PVwiZHJvcGRvd24yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvbkVkaXRUZW1wbGF0ZSh0ZW1wbGF0ZSlcIiBuZ2JEcm9wZG93bkl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snRWRpdCB0ZW1wbGF0ZScgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib25DbGVhblRpbWVUZW1wbGF0ZSh0ZW1wbGF0ZSlcIiBuZ2JEcm9wZG93bkl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snQ2xlYW4gZWZmZWN0aXZlIHRpbWVzJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uQXJjaGl2ZVRlbXBsYXRlKHRlbXBsYXRlKVwiIG5nYkRyb3Bkb3duSXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBcmNoaXZlIHRlbXBsYXRlJyB8IHRyYW5zbGF0ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9uQ2FuY2VsVGVtcGxhdGUodGVtcGxhdGUpXCIgbmdiRHJvcGRvd25JdGVtPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0NhbmNlbCB2aXNpdCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvbkR1cGxpY2F0ZVRlbXBsYXRlKHRlbXBsYXRlKVwiIG5nYkRyb3Bkb3duSXRlbT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydEdXBsaWNhdGUnIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSByb3VuZGVkLXBpbGwgbXItMiBtbC1hdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FZGl0KG1pcylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydFZGl0JyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IHJvdW5kZWQtcGlsbCBtdC0zIG1iLTMgbWwtYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXJjaGl2ZVRlbXBsYXRlKG1pcylcIj57eydBcmNoaXZlJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImVkaXRpbmdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItdGVtcGxhdGUgW2VkaXRUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVRvRWRpdFwiIFtjdXJyZW50T3JnXT1cImN1cnJlbnRPcmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICh1cGRhdGVkVGVtcGxhdGUpPVwib25VcGRhdGVkVGVtcGxhdGUoJGV2ZW50KVwiPjwvbGliLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNyZWF0aW5nXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXRlbXBsYXRlIFtjdXJyZW50T3JnXT1cImN1cnJlbnRPcmdcIiBbem9uZUlEXT1cInpvbmVJREZvck5ld1RlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoY3JlYXRlZFRlbXBsYXRlKT1cIm9uQ3JlYXRlZFRlbXBsYXRlKCRldmVudClcIj48L2xpYi10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IGNvbC1sZy01XCIgKm5nSWY9XCJpc0FkZGluZ0JhdGNoXCI+XHJcbiAgICAgICAgICAgIDxsaWItY3JlYXRlLWJhdGNoIFt0ZW1wbGF0ZV09XCJjaG9zZW5UZW1wbGF0ZVwiIChjcmVhdGVkTWlzc2lvbnMpPVwib25VcGRhdGVkRXZlbnQoJGV2ZW50KVwiPjwvbGliLWNyZWF0ZS1iYXRjaD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlbGV0ZVVzZXJzIGxldC1tb2RhbD5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGVcIiBpZD1cIm1vZGFsLWJhc2ljLXRpdGxlXCI+e3tcIkRlbGV0ZSB1c2Vyc1wiIHwgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgIDwvaDQ+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImNsb3NlXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cIm1vZGFsUmVmLmNsb3NlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4mdGltZXM7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgc3R5bGU9XCJwYWRkaW5nOiAwIDEuMjVyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBsaXN0LWdyb3VwIGxpc3QtZ3JvdXAtZmx1c2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImxpc3QtZ3JvdXAtaXRlbVwiICpuZ0Zvcj1cImxldCBvYmplY3Qgb2YgY3VycmVudFRlbXBsYXRlVXNlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgWyhuZ01vZGVsKV09XCJvYmplY3QuY2hlY2tlZFwiPiB7e29iamVjdC5wcm9maWxlLmVtYWlsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBzdHlsZT1cInBhZGRpbmc6IDEuMjVyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGwgbXItNFwiIChjbGljayk9XCJvbkRlbGV0ZUNob3NlbigpXCI+e3tcIkFwcGx5XCIgfFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtcHJpbWFyeSByb3VuZGVkLXBpbGxcIiAoY2xpY2spPVwibW9kYWxSZWYuY2xvc2UoKVwiPnt7XCJDYW5jZWxcIiB8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
@@ -0,0 +1,6 @@
1
+ /*
2
+ * Public API Surface of ngx-smarterplan-admin
3
+ */
4
+ export * from './lib/ngx-smarterplan-admin.service';
5
+ export * from './lib/ngx-smarterplan-admin.module';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1hZG1pbi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxvQ0FBb0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LXNtYXJ0ZXJwbGFuLWFkbWluXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluLm1vZHVsZSc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRlcnBsYW4tbmd4LXNtYXJ0ZXJwbGFuLWFkbWluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWFkbWluL3NyYy9zbWFydGVycGxhbi1uZ3gtc21hcnRlcnBsYW4tYWRtaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==