@seniorsistemas/yms-integration 1.42.1 → 1.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/bundles/seniorsistemas-yms-integration.umd.js +876 -388
  2. package/bundles/seniorsistemas-yms-integration.umd.js.map +1 -1
  3. package/bundles/seniorsistemas-yms-integration.umd.min.js +1 -1
  4. package/bundles/seniorsistemas-yms-integration.umd.min.js.map +1 -1
  5. package/esm2015/seniorsistemas-yms-integration.js +53 -51
  6. package/esm2015/src/sam-senior/core/entity-service.js +27 -12
  7. package/esm2015/src/wms/components/document-grid/document-grid.component.js +42 -358
  8. package/esm2015/src/wms/components/document-grid/document-grid.facade.js +380 -0
  9. package/esm2015/src/wms/components/document-grid/document-grid.module.js +19 -10
  10. package/esm2015/src/wms/components/document-grid/insert-key/insert-key.component.js +45 -44
  11. package/esm2015/src/wms/components/document-grid/register-document/register-document.component.js +28 -24
  12. package/esm2015/src/wms/components/document-grid/strategies/partner.strategy.js +48 -0
  13. package/esm2015/src/wms/components/document-grid/strategies/senior-connect.strategy.js +72 -0
  14. package/esm2015/src/wms/components/document-grid/strategies/senior-erp.strategy.js +56 -0
  15. package/esm2015/src/wms/components/document-grid/strategies/silt.strategy.js +80 -0
  16. package/esm2015/src/wms/components/document-grid/strategies/wis.strategy.js +68 -0
  17. package/esm2015/src/wms/components/document-grid/strategies/wms-integration-strategy.factory.js +31 -0
  18. package/esm2015/src/wms/components/document-grid/strategies/wms-integration-strategy.interface.js +7 -0
  19. package/esm2015/src/wms/components/utils/invoice-conditions.js +30 -9
  20. package/esm2015/src/wms/entities/document/document.service.js +11 -10
  21. package/esm2015/src/wms/entities/invoice-condition/invoice-condition.js +1 -1
  22. package/esm2015/src/wms/entities/wms-system/wms-system.js +2 -1
  23. package/esm5/seniorsistemas-yms-integration.js +53 -51
  24. package/esm5/src/sam-senior/core/entity-service.js +23 -8
  25. package/esm5/src/wms/components/document-grid/document-grid.component.js +47 -363
  26. package/esm5/src/wms/components/document-grid/document-grid.facade.js +397 -0
  27. package/esm5/src/wms/components/document-grid/document-grid.module.js +19 -10
  28. package/esm5/src/wms/components/document-grid/insert-key/insert-key.component.js +44 -43
  29. package/esm5/src/wms/components/document-grid/register-document/register-document.component.js +28 -24
  30. package/esm5/src/wms/components/document-grid/strategies/partner.strategy.js +52 -0
  31. package/esm5/src/wms/components/document-grid/strategies/senior-connect.strategy.js +76 -0
  32. package/esm5/src/wms/components/document-grid/strategies/senior-erp.strategy.js +60 -0
  33. package/esm5/src/wms/components/document-grid/strategies/silt.strategy.js +84 -0
  34. package/esm5/src/wms/components/document-grid/strategies/wis.strategy.js +72 -0
  35. package/esm5/src/wms/components/document-grid/strategies/wms-integration-strategy.factory.js +32 -0
  36. package/esm5/src/wms/components/document-grid/strategies/wms-integration-strategy.interface.js +7 -0
  37. package/esm5/src/wms/components/utils/invoice-conditions.js +30 -9
  38. package/esm5/src/wms/entities/document/document.service.js +11 -10
  39. package/esm5/src/wms/entities/invoice-condition/invoice-condition.js +1 -1
  40. package/esm5/src/wms/entities/wms-system/wms-system.js +2 -1
  41. package/fesm2015/seniorsistemas-yms-integration.js +783 -330
  42. package/fesm2015/seniorsistemas-yms-integration.js.map +1 -1
  43. package/fesm5/seniorsistemas-yms-integration.js +824 -338
  44. package/fesm5/seniorsistemas-yms-integration.js.map +1 -1
  45. package/package.json +4 -3
  46. package/seniorsistemas-yms-integration.d.ts +52 -50
  47. package/seniorsistemas-yms-integration.metadata.json +1 -1
  48. package/src/sam-senior/core/entity-service.d.ts +5 -0
  49. package/src/wms/components/document-grid/document-grid.component.d.ts +28 -77
  50. package/src/wms/components/document-grid/document-grid.facade.d.ts +96 -0
  51. package/src/wms/components/document-grid/insert-key/insert-key.component.d.ts +6 -8
  52. package/src/wms/components/document-grid/register-document/register-document.component.d.ts +5 -5
  53. package/src/wms/components/document-grid/strategies/partner.strategy.d.ts +17 -0
  54. package/src/wms/components/document-grid/strategies/senior-connect.strategy.d.ts +17 -0
  55. package/src/wms/components/document-grid/strategies/senior-erp.strategy.d.ts +17 -0
  56. package/src/wms/components/document-grid/strategies/silt.strategy.d.ts +17 -0
  57. package/src/wms/components/document-grid/strategies/wis.strategy.d.ts +17 -0
  58. package/src/wms/components/document-grid/strategies/wms-integration-strategy.factory.d.ts +8 -0
  59. package/src/wms/components/document-grid/strategies/wms-integration-strategy.interface.d.ts +53 -0
  60. package/src/wms/components/utils/invoice-conditions.d.ts +2 -2
  61. package/src/wms/entities/document/document.service.d.ts +9 -6
  62. package/src/wms/entities/wms-system/wms-system.d.ts +1 -0
@@ -0,0 +1,380 @@
1
+ import * as tslib_1 from "tslib";
2
+ import { Injectable } from "@angular/core";
3
+ import { TranslateService } from "@ngx-translate/core";
4
+ import { BehaviorSubject, Subject, forkJoin, throwError, } from "rxjs";
5
+ import { catchError, takeUntil } from "rxjs/operators";
6
+ import { UtilsMessageService } from "../../../utils/utils-message";
7
+ import { AgendaService, } from "../../entities/agenda/agenda.service";
8
+ import { DocumentService } from "../../entities/document/document.service";
9
+ import { WmsSystem } from "../../entities/wms-system/wms-system";
10
+ import { FormWmsService } from "../../form/form-wms.service";
11
+ import { IntegrationService, } from "../../entities/integration/integration.service";
12
+ import { getInvoiceConditions } from "../utils/invoice-conditions";
13
+ import { WmsIntegrationStrategyFactory } from "./strategies/wms-integration-strategy.factory";
14
+ let DocumentGridFacade = class DocumentGridFacade {
15
+ constructor(translate, documentService, integrationService, agendaService, utils, wmsService, strategyFactory) {
16
+ this.translate = translate;
17
+ this.documentService = documentService;
18
+ this.integrationService = integrationService;
19
+ this.agendaService = agendaService;
20
+ this.utils = utils;
21
+ this.wmsService = wmsService;
22
+ this.strategyFactory = strategyFactory;
23
+ this.ngUnsubscribe = new Subject();
24
+ this.summary = "yms.int.wms_saved_document_message_title";
25
+ this.currentStrategy = null;
26
+ // State subjects
27
+ this.stateSubject = new BehaviorSubject({
28
+ gridData: [],
29
+ selection: [],
30
+ gridColumns: [],
31
+ documentTotalRecords: 0,
32
+ loading: false,
33
+ disabled: true,
34
+ showInvoiceSearchModal: false,
35
+ showAddInvoiceModal: false,
36
+ edit: false,
37
+ processType: null,
38
+ wmsSystem: null,
39
+ isClienteExterno: false,
40
+ enableButtonIsClienteExterno: true,
41
+ });
42
+ this.state$ = this.stateSubject.asObservable();
43
+ this.invoiceConditions = getInvoiceConditions(this.translate);
44
+ }
45
+ // Getters para acesso direto ao estado atual
46
+ get state() {
47
+ return this.stateSubject.getValue();
48
+ }
49
+ // Inicialização
50
+ init(agenda, wmsSystem) {
51
+ this.agenda = agenda;
52
+ this.updateState({ wmsSystem });
53
+ this.verifyClienteExterno();
54
+ this.getProcessTypeByScheduling();
55
+ this.listDocuments(false);
56
+ this.loadSystemIntegration();
57
+ }
58
+ loadSystemIntegration() {
59
+ this.wmsService.getSystemIntegration().subscribe(({ system }) => {
60
+ this.updateState({ wmsSystem: system });
61
+ this.updateStrategy(system);
62
+ if (this.isWmsSeniorConnect()) {
63
+ this.getYard();
64
+ this.getSchedule();
65
+ }
66
+ });
67
+ }
68
+ updateStrategy(wmsSystem) {
69
+ this.currentStrategy = this.strategyFactory.getStrategy(wmsSystem);
70
+ this.updateGridColumns();
71
+ }
72
+ getYard() {
73
+ this.documentService
74
+ .getYard(this.agenda.planta.id)
75
+ .pipe(catchError((err) => throwError(err)))
76
+ .subscribe((content) => {
77
+ this.yard = content;
78
+ });
79
+ }
80
+ getSchedule() {
81
+ if (this.agenda.externalTenant && this.agenda.externalTenant.cnpj) {
82
+ this.schedule = this.agenda;
83
+ return;
84
+ }
85
+ this.agendaService
86
+ .get(this.agenda.id)
87
+ .pipe(catchError((err) => throwError(err)))
88
+ .subscribe((content) => {
89
+ this.schedule = content;
90
+ });
91
+ }
92
+ verifyClienteExterno() {
93
+ this.agendaService
94
+ .isClienteExterno()
95
+ .subscribe((result) => {
96
+ this.updateState({ isClienteExterno: result.isClienteExterno });
97
+ this.updateGridColumns();
98
+ this.cantEditStatus();
99
+ });
100
+ }
101
+ getProcessTypeByScheduling() {
102
+ this.integrationService
103
+ .getProcessTypeByScheduling(this.agenda.tipoAgendamento.id)
104
+ .subscribe((result) => {
105
+ this.updateState({ processType: result.processType });
106
+ });
107
+ }
108
+ cantEditStatus() {
109
+ const cantEditStatus = [
110
+ "CANCELADO",
111
+ "EM_EXECUCAO",
112
+ "CONCLUIDO",
113
+ "AGUARDANDO_POR_VALIDACAO",
114
+ ].includes(this.agenda.status.toString());
115
+ if (cantEditStatus) {
116
+ this.updateState({ enableButtonIsClienteExterno: false });
117
+ }
118
+ }
119
+ // Ações
120
+ openInvoiceKeyModal() {
121
+ this.updateState({
122
+ selection: [],
123
+ showInvoiceSearchModal: true,
124
+ });
125
+ }
126
+ openDocumentRegisterModal() {
127
+ this.updateState({
128
+ selection: [],
129
+ edit: true,
130
+ showAddInvoiceModal: true,
131
+ });
132
+ }
133
+ closeInvoiceSearchModal() {
134
+ this.updateState({ showInvoiceSearchModal: false });
135
+ }
136
+ closeAddInvoiceModal() {
137
+ this.updateState({ showAddInvoiceModal: false });
138
+ }
139
+ viewDocument() {
140
+ this.updateState({
141
+ showAddInvoiceModal: true,
142
+ edit: false,
143
+ });
144
+ return this.state.selection[0];
145
+ }
146
+ setSelection(selection) {
147
+ this.updateState({ selection });
148
+ }
149
+ addToSelection(document) {
150
+ this.updateState({ selection: [document] });
151
+ }
152
+ setDisabled(disabled) {
153
+ this.updateState({ disabled });
154
+ }
155
+ setShowInvoiceSearchModal(visible) {
156
+ this.updateState({ showInvoiceSearchModal: visible });
157
+ }
158
+ setShowAddInvoiceModal(visible) {
159
+ this.updateState({ showAddInvoiceModal: visible });
160
+ }
161
+ onChangeDocument(document) {
162
+ if (!this.hasFilledValues(document)) {
163
+ this.utils.message("error", "yms.int.wms_save_error_register_document_message_title", "yms.int.wms_save_error_register_document_message_description");
164
+ return;
165
+ }
166
+ this.assignKeys(document);
167
+ const duplicateDocument = this.state.gridData.find((gridData) => gridData.key === document.key);
168
+ if (duplicateDocument) {
169
+ this.utils.message("error", "yms.int.wms_error_register_document_message_title", "yms.int.wms_error_register_document_message_description");
170
+ return;
171
+ }
172
+ const newGridData = [...this.state.gridData, document];
173
+ this.updateState({
174
+ gridData: newGridData,
175
+ disabled: false,
176
+ showAddInvoiceModal: false,
177
+ showInvoiceSearchModal: false,
178
+ });
179
+ this.utils.message("success", this.summary, "yms.int.wms_success_message_description");
180
+ }
181
+ assignKeys(document) {
182
+ if (document.id === undefined) {
183
+ if (this.agenda.id !== undefined) {
184
+ document.schedulingId = this.agenda.id;
185
+ }
186
+ if (document.key === undefined || document.key === null) {
187
+ document.key =
188
+ this.currentStrategy.updateDocumentKey(document) ||
189
+ document.invoiceKey;
190
+ }
191
+ }
192
+ }
193
+ hasFilledValues(document) {
194
+ const formValues = Object.values(document);
195
+ return formValues.some((value) => value !== null && value !== "");
196
+ }
197
+ save() {
198
+ const { gridData } = this.state;
199
+ if (gridData.length > 0) {
200
+ gridData.forEach((data) => {
201
+ if (!data.id) {
202
+ if (!data.schedulingId) {
203
+ data.schedulingId = this.agenda.id;
204
+ }
205
+ data.key = this.updateKeyByWms(data);
206
+ this.documentService.insert(data).subscribe(() => {
207
+ this.sucessMessage();
208
+ });
209
+ this.updateState({ disabled: true });
210
+ }
211
+ else {
212
+ this.documentService.update(data.id, data).subscribe(() => {
213
+ this.sucessMessage();
214
+ this.updateState({ disabled: true });
215
+ });
216
+ }
217
+ });
218
+ this.listDocuments(false);
219
+ }
220
+ }
221
+ updateKeyByWms(data) {
222
+ return this.currentStrategy.updateDocumentKey(data) || data.invoiceKey;
223
+ }
224
+ deleteSelectedDocuments() {
225
+ this.removeDocumentIfIdUndefined();
226
+ const { selection } = this.state;
227
+ if (selection.length < 1) {
228
+ return;
229
+ }
230
+ forkJoin(selection.map((document) => this.documentService.delete(document.id)))
231
+ .pipe(takeUntil(this.ngUnsubscribe))
232
+ .subscribe(() => {
233
+ this.utils.message("success", "yms.patio.warn_deleted_message_title", "yms.patio.deleted_message_detail");
234
+ this.listDocuments(true);
235
+ });
236
+ }
237
+ removeDocumentIfIdUndefined() {
238
+ const { selection, gridData } = this.state;
239
+ const newSelection = [...selection];
240
+ const newGridData = [...gridData];
241
+ selection.forEach((value, index) => {
242
+ if (!value.id) {
243
+ const indexGridData = newGridData.findIndex((document) => document.key === value.key);
244
+ newGridData.splice(indexGridData, 1);
245
+ newSelection.splice(index, 1);
246
+ }
247
+ });
248
+ this.updateState({ gridData: newGridData, selection: newSelection });
249
+ }
250
+ notSavedDocuments() {
251
+ return this.state.gridData.some((document) => !document.id);
252
+ }
253
+ listDocuments(isDelete) {
254
+ this.documentService
255
+ .list({
256
+ filterQuery: `schedulingId eq '${this.agenda.id}'`,
257
+ size: 100,
258
+ })
259
+ .subscribe((contents) => {
260
+ let newGridData = isDelete
261
+ ? this.state.gridData.filter((item) => !item.id)
262
+ : [];
263
+ if (contents.totalElements > 0) {
264
+ newGridData = [...newGridData, ...contents.contents];
265
+ }
266
+ const documentTotalRecords = contents.totalElements > 0
267
+ ? contents.totalElements
268
+ : newGridData.length;
269
+ const hasElementWithoutId = newGridData.some((item) => !item.id);
270
+ this.updateState({
271
+ gridData: newGridData,
272
+ disabled: !hasElementWithoutId,
273
+ loading: false,
274
+ selection: [],
275
+ documentTotalRecords,
276
+ });
277
+ });
278
+ }
279
+ // Menu Actions
280
+ getActions() {
281
+ return [
282
+ {
283
+ disabled: this.checkWmsSystemInvalid(),
284
+ label: this.translate.instant("yms.int.wms_search"),
285
+ command: () => this.openInvoiceKeyModal(),
286
+ icon: "fa fa-search",
287
+ },
288
+ {
289
+ disabled: this.checkWmsSystemInvalid(),
290
+ label: this.translate.instant("yms.int.wms_add_document_register"),
291
+ command: () => this.openDocumentRegisterModal(),
292
+ icon: "fas fa-pen-square",
293
+ },
294
+ ];
295
+ }
296
+ checkWmsSystemInvalid() {
297
+ const { wmsSystem } = this.state;
298
+ return wmsSystem && wmsSystem === WmsSystem.NONE;
299
+ }
300
+ // Grid columns
301
+ updateGridColumns() {
302
+ const gridColumns = this.getGridColumns();
303
+ this.updateState({ gridColumns });
304
+ }
305
+ getGridColumns() {
306
+ if (!this.currentStrategy) {
307
+ return [];
308
+ }
309
+ return this.currentStrategy.getGridColumns(this.translate, this.state.isClienteExterno);
310
+ }
311
+ // WMS Type checks
312
+ isWmsSeniorConnect() {
313
+ return this.state.wmsSystem === WmsSystem.SENIOR_CONNECT;
314
+ }
315
+ isWmsWIS() {
316
+ return this.state.wmsSystem === WmsSystem.WIS;
317
+ }
318
+ isWmsSilt() {
319
+ return this.state.wmsSystem === WmsSystem.SENIOR;
320
+ }
321
+ isWmsPartner() {
322
+ return this.state.wmsSystem === WmsSystem.PARTNER;
323
+ }
324
+ // Validation
325
+ validateDocument(document) {
326
+ if (!this.currentStrategy) {
327
+ return true;
328
+ }
329
+ const result = this.currentStrategy.validateDocument(document, {
330
+ yard: this.yard,
331
+ schedule: this.schedule,
332
+ agenda: this.agenda,
333
+ });
334
+ if (!result.isValid && result.errorMessageKey) {
335
+ this.buildMessage(result.errorMessageKey);
336
+ }
337
+ return result.isValid;
338
+ }
339
+ // Invoice conditions
340
+ getFilteredInvoiceConditions(invoiceCondition) {
341
+ if (!this.currentStrategy) {
342
+ return this.invoiceConditions;
343
+ }
344
+ return this.currentStrategy.getFilteredInvoiceConditions(invoiceCondition, this.invoiceConditions);
345
+ }
346
+ supportsInvoiceCondition() {
347
+ return this.currentStrategy.supportsInvoiceCondition() || false;
348
+ }
349
+ // Helpers
350
+ getProp(obj, path) {
351
+ return path
352
+ .split(".")
353
+ .reduce((result, prop) => result[prop] === undefined ? "" : result[prop], obj);
354
+ }
355
+ sucessMessage() {
356
+ this.utils.message("success", this.summary, "saved_message_content");
357
+ }
358
+ buildMessage(description) {
359
+ this.utils.message("warn", "yms.int.documento_invalido_warning_header", description);
360
+ }
361
+ updateState(partialState) {
362
+ this.stateSubject.next(Object.assign({}, this.state, partialState));
363
+ }
364
+ destroy() {
365
+ this.ngUnsubscribe.next();
366
+ this.ngUnsubscribe.complete();
367
+ }
368
+ };
369
+ DocumentGridFacade = tslib_1.__decorate([
370
+ Injectable(),
371
+ tslib_1.__metadata("design:paramtypes", [TranslateService,
372
+ DocumentService,
373
+ IntegrationService,
374
+ AgendaService,
375
+ UtilsMessageService,
376
+ FormWmsService,
377
+ WmsIntegrationStrategyFactory])
378
+ ], DocumentGridFacade);
379
+ export { DocumentGridFacade };
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JpZC5mYWNhZGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL3dtcy9jb21wb25lbnRzL2RvY3VtZW50LWdyaWQvZG9jdW1lbnQtZ3JpZC5mYWNhZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBQ1AsUUFBUSxFQUNSLFVBQVUsR0FDWCxNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUNMLGFBQWEsR0FFZCxNQUFNLHNDQUFzQyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUUzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDakUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzdELE9BQU8sRUFFTCxrQkFBa0IsR0FFbkIsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQW1COUYsSUFBYSxrQkFBa0IsR0FBL0IsTUFBYSxrQkFBa0I7SUFtQzdCLFlBQ21CLFNBQTJCLEVBQzNCLGVBQWdDLEVBQ2hDLGtCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixLQUEwQixFQUMxQixVQUEwQixFQUMxQixlQUE4QztRQU45QyxjQUFTLEdBQVQs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QyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0NBQ0YsQ0FBQTtBQS9jWSxrQkFBa0I7SUFEOUIsVUFBVSxFQUFFOzZDQXFDbUIsZ0JBQWdCO1FBQ1YsZUFBZTtRQUNaLGtCQUFrQjtRQUN2QixhQUFhO1FBQ3JCLG1CQUFtQjtRQUNkLGNBQWM7UUFDVCw2QkFBNkI7R0ExQ3RELGtCQUFrQixDQStjOUI7U0EvY1ksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSBcInByaW1lbmcvYXBpXCI7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIGZvcmtKb2luLFxuICB0aHJvd0Vycm9yLFxufSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFrZVVudGlsIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQgeyBVdGlsc01lc3NhZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uLy4uL3V0aWxzL3V0aWxzLW1lc3NhZ2VcIjtcbmltcG9ydCB7XG4gIEFnZW5kYVNlcnZpY2UsXG4gIElzQ2xpZW50ZUV4dGVybm8sXG59IGZyb20gXCIuLi8uLi9lbnRpdGllcy9hZ2VuZGEvYWdlbmRhLnNlcnZpY2VcIjtcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSBcIi4uLy4uL2VudGl0aWVzL2RvY3VtZW50L2RvY3VtZW50XCI7XG5pbXBvcnQgeyBEb2N1bWVudFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZW50aXRpZXMvZG9jdW1lbnQvZG9jdW1lbnQuc2VydmljZVwiO1xuaW1wb3J0IHsgSW52b2ljZUNvbmRpdGlvbiB9IGZyb20gXCIuLi8uLi9lbnRpdGllcy9pbnZvaWNlLWNvbmRpdGlvbi9pbnZvaWNlLWNvbmRpdGlvblwiO1xuaW1wb3J0IHsgV21zU3lzdGVtIH0gZnJvbSBcIi4uLy4uL2VudGl0aWVzL3dtcy1zeXN0ZW0vd21zLXN5c3RlbVwiO1xuaW1wb3J0IHsgRm9ybVdtc1NlcnZpY2UgfSBmcm9tIFwiLi4vLi4vZm9ybS9mb3JtLXdtcy5zZXJ2aWNlXCI7XG5pbXBvcnQge1xuICBHZXRQcm9jZXNzVHlwZUJ5U2NoZWR1bGluZ091dHB1dCxcbiAgSW50ZWdyYXRpb25TZXJ2aWNlLFxuICBQcm9jZXNzVHlwZSxcbn0gZnJvbSBcIi4uLy4uL2VudGl0aWVzL2ludGVncmF0aW9uL2ludGVncmF0aW9uLnNlcnZpY2VcIjtcbmltcG9ydCB7IGdldEludm9pY2VDb25kaXRpb25zIH0gZnJvbSBcIi4uL3V0aWxzL2ludm9pY2UtY29uZGl0aW9uc1wiO1xuaW1wb3J0IHsgV21zSW50ZWdyYXRpb25TdHJhdGVneSB9IGZyb20gXCIuL3N0cmF0ZWdpZXMvd21zLWludGVncmF0aW9uLXN0cmF0ZWd5LmludGVyZmFjZVwiO1xuaW1wb3J0IHsgV21zSW50ZWdyYXRpb25TdHJhdGVneUZhY3RvcnkgfSBmcm9tIFwiLi9zdHJhdGVnaWVzL3dtcy1pbnRlZ3JhdGlvbi1zdHJhdGVneS5mYWN0b3J5XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9jdW1lbnRHcmlkU3RhdGUge1xuICBncmlkRGF0YTogRG9jdW1lbnRbXTtcbiAgc2VsZWN0aW9uOiBEb2N1bWVudFtdO1xuICBncmlkQ29sdW1uczogYW55W107XG4gIGRvY3VtZW50VG90YWxSZWNvcmRzOiBudW1iZXI7XG4gIGxvYWRpbmc6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICBzaG93SW52b2ljZVNlYXJjaE1vZGFsOiBib29sZWFuO1xuICBzaG93QWRkSW52b2ljZU1vZGFsOiBib29sZWFuO1xuICBlZGl0OiBib29sZWFuO1xuICBwcm9jZXNzVHlwZTogUHJvY2Vzc1R5cGU7XG4gIHdtc1N5c3RlbTogV21zU3lzdGVtO1xuICBpc0NsaWVudGVFeHRlcm5vOiBib29sZWFuO1xuICBlbmFibGVCdXR0b25Jc0NsaWVudGVFeHRlcm5vOiBib29sZWFuO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRHcmlkRmFjYWRlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdW1tYXJ5ID0gXCJ5bXMuaW50Lndtc19zYXZlZF9kb2N1bWVudF9tZXNzYWdlX3RpdGxlXCI7XG5cbiAgcHJpdmF0ZSB5YXJkOiBhbnk7XG4gIHByaXZhdGUgc2NoZWR1bGU6IGFueTtcbiAgcHJpdmF0ZSBjdXJyZW50U3RyYXRlZ3k6IFdtc0ludGVncmF0aW9uU3RyYXRlZ3kgfCBudWxsID0gbnVsbDtcblxuICAvLyBTdGF0ZSBzdWJqZWN0c1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YXRlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RG9jdW1lbnRHcmlkU3RhdGU+KHtcbiAgICBncmlkRGF0YTogW10sXG4gICAgc2VsZWN0aW9uOiBbXSxcbiAgICBncmlkQ29sdW1uczogW10sXG4gICAgZG9jdW1lbnRUb3RhbFJlY29yZHM6IDAsXG4gICAgbG9hZGluZzogZmFsc2UsXG4gICAgZGlzYWJsZWQ6IHRydWUsXG4gICAgc2hvd0ludm9pY2VTZWFyY2hNb2RhbDogZmFsc2UsXG4gICAgc2hvd0FkZEludm9pY2VNb2RhbDogZmFsc2UsXG4gICAgZWRpdDogZmFsc2UsXG4gICAgcHJvY2Vzc1R5cGU6IG51bGwsXG4gICAgd21zU3lzdGVtOiBudWxsLFxuICAgIGlzQ2xpZW50ZUV4dGVybm86IGZhbHNlLFxuICAgIGVuYWJsZUJ1dHRvbklzQ2xpZW50ZUV4dGVybm86IHRydWUsXG4gIH0pO1xuXG4gIHB1YmxpYyByZWFkb25seSBzdGF0ZSQgPSB0aGlzLnN0YXRlU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHVibGljIHJlYWRvbmx5IGludm9pY2VDb25kaXRpb25zID0gZ2V0SW52b2ljZUNvbmRpdGlvbnModGhpcy50cmFuc2xhdGUpO1xuXG4gIHByaXZhdGUgYWdlbmRhOiBhbnk7XG5cbiAgLy8gR2V0dGVycyBwYXJhIGFjZXNzbyBkaXJldG8gYW8gZXN0YWRvIGF0dWFsXG4gIGdldCBzdGF0ZSgpOiBEb2N1bWVudEdyaWRTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGVTdWJqZWN0LmdldFZhbHVlKCk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW50ZWdyYXRpb25TZXJ2aWNlOiBJbnRlZ3JhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhZ2VuZGFTZXJ2aWNlOiBBZ2VuZGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXRpbHM6IFV0aWxzTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3bXNTZXJ2aWNlOiBGb3JtV21zU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0cmF0ZWd5RmFjdG9yeTogV21zSW50ZWdyYXRpb25TdHJhdGVneUZhY3RvcnlcbiAgKSB7fVxuXG4gIC8vIEluaWNpYWxpemHDp8Ojb1xuICBpbml0KGFnZW5kYTogYW55LCB3bXNTeXN0ZW06IFdtc1N5c3RlbSk6IHZvaWQge1xuICAgIHRoaXMuYWdlbmRhID0gYWdlbmRhO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoeyB3bXNTeXN0ZW0gfSk7XG5cbiAgICB0aGlzLnZlcmlmeUNsaWVudGVFeHRlcm5vKCk7XG4gICAgdGhpcy5nZXRQcm9jZXNzVHlwZUJ5U2NoZWR1bGluZygpO1xuICAgIHRoaXMubGlzdERvY3VtZW50cyhmYWxzZSk7XG4gICAgdGhpcy5sb2FkU3lzdGVtSW50ZWdyYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZFN5c3RlbUludGVncmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMud21zU2VydmljZS5nZXRTeXN0ZW1JbnRlZ3JhdGlvbigpLnN1YnNjcmliZSgoeyBzeXN0ZW0gfTogYW55KSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgd21zU3lzdGVtOiBzeXN0ZW0gfSk7XG4gICAgICB0aGlzLnVwZGF0ZVN0cmF0ZWd5KHN5c3RlbSk7XG4gICAgICBpZiAodGhpcy5pc1dtc1NlbmlvckNvbm5lY3QoKSkge1xuICAgICAgICB0aGlzLmdldFlhcmQoKTtcbiAgICAgICAgdGhpcy5nZXRTY2hlZHVsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdHJhdGVneSh3bXNTeXN0ZW06IFdtc1N5c3RlbSk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFN0cmF0ZWd5ID0gdGhpcy5zdHJhdGVneUZhY3RvcnkuZ2V0U3RyYXRlZ3kod21zU3lzdGVtKTtcbiAgICB0aGlzLnVwZGF0ZUdyaWRDb2x1bW5zKCk7XG4gIH1cblxuICBwcml2YXRlIGdldFlhcmQoKTogdm9pZCB7XG4gICAgdGhpcy5kb2N1bWVudFNlcnZpY2VcbiAgICAgIC5nZXRZYXJkKHRoaXMuYWdlbmRhLnBsYW50YS5pZClcbiAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycikgPT4gdGhyb3dFcnJvcihlcnIpKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvbnRlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnlhcmQgPSBjb250ZW50O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNjaGVkdWxlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudCAmJiB0aGlzLmFnZW5kYS5leHRlcm5hbFRlbmFudC5jbnBqKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlID0gdGhpcy5hZ2VuZGE7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hZ2VuZGFTZXJ2aWNlXG4gICAgICAuZ2V0KHRoaXMuYWdlbmRhLmlkKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyKSA9PiB0aHJvd0Vycm9yKGVycikpKVxuICAgICAgLnN1YnNjcmliZSgoY29udGVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGUgPSBjb250ZW50O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZlcmlmeUNsaWVudGVFeHRlcm5vKCk6IHZvaWQge1xuICAgIHRoaXMuYWdlbmRhU2VydmljZVxuICAgICAgLmlzQ2xpZW50ZUV4dGVybm8oKVxuICAgICAgLnN1YnNjcmliZSgocmVzdWx0OiBJc0NsaWVudGVFeHRlcm5vKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyBpc0NsaWVudGVFeHRlcm5vOiByZXN1bHQuaXNDbGllbnRlRXh0ZXJubyB9KTtcbiAgICAgICAgdGhpcy51cGRhdGVHcmlkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLmNhbnRFZGl0U3RhdHVzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UHJvY2Vzc1R5cGVCeVNjaGVkdWxpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5pbnRlZ3JhdGlvblNlcnZpY2VcbiAgICAgIC5nZXRQcm9jZXNzVHlwZUJ5U2NoZWR1bGluZyh0aGlzLmFnZW5kYS50aXBvQWdlbmRhbWVudG8uaWQpXG4gICAgICAuc3Vic2NyaWJlKChyZXN1bHQ6IEdldFByb2Nlc3NUeXBlQnlTY2hlZHVsaW5nT3V0cHV0KSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoeyBwcm9jZXNzVHlwZTogcmVzdWx0LnByb2Nlc3NUeXBlIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbnRFZGl0U3RhdHVzKCk6IHZvaWQge1xuICAgIGNvbnN0IGNhbnRFZGl0U3RhdHVzID0gW1xuICAgICAgXCJDQU5DRUxBRE9cIixcbiAgICAgIFwiRU1fRVhFQ1VDQU9cIixcbiAgICAgIFwiQ09OQ0xVSURPXCIsXG4gICAgICBcIkFHVUFSREFORE9fUE9SX1ZBTElEQUNBT1wiLFxuICAgIF0uaW5jbHVkZXModGhpcy5hZ2VuZGEuc3RhdHVzLnRvU3RyaW5nKCkpO1xuXG4gICAgaWYgKGNhbnRFZGl0U3RhdHVzKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgZW5hYmxlQnV0dG9uSXNDbGllbnRlRXh0ZXJubzogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQcOnw7Vlc1xuICBvcGVuSW52b2ljZUtleU1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIHNob3dJbnZvaWNlU2VhcmNoTW9kYWw6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBvcGVuRG9jdW1lbnRSZWdpc3Rlck1vZGFsKCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgIGVkaXQ6IHRydWUsXG4gICAgICBzaG93QWRkSW52b2ljZU1vZGFsOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgY2xvc2VJbnZvaWNlU2VhcmNoTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IHNob3dJbnZvaWNlU2VhcmNoTW9kYWw6IGZhbHNlIH0pO1xuICB9XG5cbiAgY2xvc2VBZGRJbnZvaWNlTW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IHNob3dBZGRJbnZvaWNlTW9kYWw6IGZhbHNlIH0pO1xuICB9XG5cbiAgdmlld0RvY3VtZW50KCk6IERvY3VtZW50IHtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHtcbiAgICAgIHNob3dBZGRJbnZvaWNlTW9kYWw6IHRydWUsXG4gICAgICBlZGl0OiBmYWxzZSxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3Rpb25bMF07XG4gIH1cblxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uOiBEb2N1bWVudFtdKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IHNlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIGFkZFRvU2VsZWN0aW9uKGRvY3VtZW50OiBEb2N1bWVudCk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoeyBzZWxlY3Rpb246IFtkb2N1bWVudF0gfSk7XG4gIH1cblxuICBzZXREaXNhYmxlZChkaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoeyBkaXNhYmxlZCB9KTtcbiAgfVxuXG4gIHNldFNob3dJbnZvaWNlU2VhcmNoTW9kYWwodmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlU3RhdGUoeyBzaG93SW52b2ljZVNlYXJjaE1vZGFsOiB2aXNpYmxlIH0pO1xuICB9XG5cbiAgc2V0U2hvd0FkZEludm9pY2VNb2RhbCh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IHNob3dBZGRJbnZvaWNlTW9kYWw6IHZpc2libGUgfSk7XG4gIH1cblxuICBvbkNoYW5nZURvY3VtZW50KGRvY3VtZW50OiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNGaWxsZWRWYWx1ZXMoZG9jdW1lbnQpKSB7XG4gICAgICB0aGlzLnV0aWxzLm1lc3NhZ2UoXG4gICAgICAgIFwiZXJyb3JcIixcbiAgICAgICAgXCJ5bXMuaW50Lndtc19zYXZlX2Vycm9yX3JlZ2lzdGVyX2RvY3VtZW50X21lc3NhZ2VfdGl0bGVcIixcbiAgICAgICAgXCJ5bXMuaW50Lndtc19zYXZlX2Vycm9yX3JlZ2lzdGVyX2RvY3VtZW50X21lc3NhZ2VfZGVzY3JpcHRpb25cIlxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFzc2lnbktleXMoZG9jdW1lbnQpO1xuICAgIGNvbnN0IGR1cGxpY2F0ZURvY3VtZW50ID0gdGhpcy5zdGF0ZS5ncmlkRGF0YS5maW5kKFxuICAgICAgKGdyaWREYXRhKSA9PiBncmlkRGF0YS5rZXkgPT09IGRvY3VtZW50LmtleVxuICAgICk7XG5cbiAgICBpZiAoZHVwbGljYXRlRG9jdW1lbnQpIHtcbiAgICAgIHRoaXMudXRpbHMubWVzc2FnZShcbiAgICAgICAgXCJlcnJvclwiLFxuICAgICAgICBcInltcy5pbnQud21zX2Vycm9yX3JlZ2lzdGVyX2RvY3VtZW50X21lc3NhZ2VfdGl0bGVcIixcbiAgICAgICAgXCJ5bXMuaW50Lndtc19lcnJvcl9yZWdpc3Rlcl9kb2N1bWVudF9tZXNzYWdlX2Rlc2NyaXB0aW9uXCJcbiAgICAgICk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmV3R3JpZERhdGEgPSBbLi4udGhpcy5zdGF0ZS5ncmlkRGF0YSwgZG9jdW1lbnRdO1xuICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgZ3JpZERhdGE6IG5ld0dyaWREYXRhLFxuICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgc2hvd0FkZEludm9pY2VNb2RhbDogZmFsc2UsXG4gICAgICBzaG93SW52b2ljZVNlYXJjaE1vZGFsOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLnV0aWxzLm1lc3NhZ2UoXG4gICAgICBcInN1Y2Nlc3NcIixcbiAgICAgIHRoaXMuc3VtbWFyeSxcbiAgICAgIFwieW1zLmludC53bXNfc3VjY2Vzc19tZXNzYWdlX2Rlc2NyaXB0aW9uXCJcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3NpZ25LZXlzKGRvY3VtZW50OiBEb2N1bWVudCk6IHZvaWQge1xuICAgIGlmIChkb2N1bWVudC5pZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5hZ2VuZGEuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBkb2N1bWVudC5zY2hlZHVsaW5nSWQgPSB0aGlzLmFnZW5kYS5pZDtcbiAgICAgIH1cbiAgICAgIGlmIChkb2N1bWVudC5rZXkgPT09IHVuZGVmaW5lZCB8fCBkb2N1bWVudC5rZXkgPT09IG51bGwpIHtcbiAgICAgICAgZG9jdW1lbnQua2V5ID1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRTdHJhdGVneS51cGRhdGVEb2N1bWVudEtleShkb2N1bWVudCkgfHxcbiAgICAgICAgICBkb2N1bWVudC5pbnZvaWNlS2V5O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFzRmlsbGVkVmFsdWVzKGRvY3VtZW50OiBEb2N1bWVudCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBPYmplY3QudmFsdWVzKGRvY3VtZW50KTtcbiAgICByZXR1cm4gZm9ybVZhbHVlcy5zb21lKCh2YWx1ZSkgPT4gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IFwiXCIpO1xuICB9XG5cbiAgc2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB7IGdyaWREYXRhIH0gPSB0aGlzLnN0YXRlO1xuXG4gICAgaWYgKGdyaWREYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIGdyaWREYXRhLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgaWYgKCFkYXRhLmlkKSB7XG4gICAgICAgICAgaWYgKCFkYXRhLnNjaGVkdWxpbmdJZCkge1xuICAgICAgICAgICAgZGF0YS5zY2hlZHVsaW5nSWQgPSB0aGlzLmFnZW5kYS5pZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YS5rZXkgPSB0aGlzLnVwZGF0ZUtleUJ5V21zKGRhdGEpO1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmluc2VydChkYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWNlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVTdGF0ZSh7IGRpc2FibGVkOiB0cnVlIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlLnVwZGF0ZShkYXRhLmlkLCBkYXRhKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdWNlc3NNZXNzYWdlKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmxpc3REb2N1bWVudHMoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlS2V5QnlXbXMoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RyYXRlZ3kudXBkYXRlRG9jdW1lbnRLZXkoZGF0YSkgfHwgZGF0YS5pbnZvaWNlS2V5O1xuICB9XG5cbiAgZGVsZXRlU2VsZWN0ZWREb2N1bWVudHMoKTogdm9pZCB7XG4gICAgdGhpcy5yZW1vdmVEb2N1bWVudElmSWRVbmRlZmluZWQoKTtcblxuICAgIGNvbnN0IHsgc2VsZWN0aW9uIH0gPSB0aGlzLnN0YXRlO1xuICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoIDwgMSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZvcmtKb2luKFxuICAgICAgc2VsZWN0aW9uLm1hcCgoZG9jdW1lbnQpID0+IHRoaXMuZG9jdW1lbnRTZXJ2aWNlLmRlbGV0ZShkb2N1bWVudC5pZCkpXG4gICAgKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy51dGlscy5tZXNzYWdlKFxuICAgICAgICAgIFwic3VjY2Vzc1wiLFxuICAgICAgICAgIFwieW1zLnBhdGlvLndhcm5fZGVsZXRlZF9tZXNzYWdlX3RpdGxlXCIsXG4gICAgICAgICAgXCJ5bXMucGF0aW8uZGVsZXRlZF9tZXNzYWdlX2RldGFpbFwiXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubGlzdERvY3VtZW50cyh0cnVlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVEb2N1bWVudElmSWRVbmRlZmluZWQoKTogdm9pZCB7XG4gICAgY29uc3QgeyBzZWxlY3Rpb24sIGdyaWREYXRhIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IFsuLi5zZWxlY3Rpb25dO1xuICAgIGNvbnN0IG5ld0dyaWREYXRhID0gWy4uLmdyaWREYXRhXTtcblxuICAgIHNlbGVjdGlvbi5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIGlmICghdmFsdWUuaWQpIHtcbiAgICAgICAgY29uc3QgaW5kZXhHcmlkRGF0YSA9IG5ld0dyaWREYXRhLmZpbmRJbmRleChcbiAgICAgICAgICAoZG9jdW1lbnQpID0+IGRvY3VtZW50LmtleSA9PT0gdmFsdWUua2V5XG4gICAgICAgICk7XG4gICAgICAgIG5ld0dyaWREYXRhLnNwbGljZShpbmRleEdyaWREYXRhLCAxKTtcbiAgICAgICAgbmV3U2VsZWN0aW9uLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXRlKHsgZ3JpZERhdGE6IG5ld0dyaWREYXRhLCBzZWxlY3Rpb246IG5ld1NlbGVjdGlvbiB9KTtcbiAgfVxuXG4gIG5vdFNhdmVkRG9jdW1lbnRzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLmdyaWREYXRhLnNvbWUoKGRvY3VtZW50KSA9PiAhZG9jdW1lbnQuaWQpO1xuICB9XG5cbiAgbGlzdERvY3VtZW50cyhpc0RlbGV0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAubGlzdCh7XG4gICAgICAgIGZpbHRlclF1ZXJ5OiBgc2NoZWR1bGluZ0lkIGVxICcke3RoaXMuYWdlbmRhLmlkfSdgLFxuICAgICAgICBzaXplOiAxMDAsXG4gICAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoY29udGVudHM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgbmV3R3JpZERhdGEgPSBpc0RlbGV0ZVxuICAgICAgICAgID8gdGhpcy5zdGF0ZS5ncmlkRGF0YS5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmlkKVxuICAgICAgICAgIDogW107XG5cbiAgICAgICAgaWYgKGNvbnRlbnRzLnRvdGFsRWxlbWVudHMgPiAwKSB7XG4gICAgICAgICAgbmV3R3JpZERhdGEgPSBbLi4ubmV3R3JpZERhdGEsIC4uLmNvbnRlbnRzLmNvbnRlbnRzXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRvY3VtZW50VG90YWxSZWNvcmRzID1cbiAgICAgICAgICBjb250ZW50cy50b3RhbEVsZW1lbnRzID4gMFxuICAgICAgICAgICAgPyBjb250ZW50cy50b3RhbEVsZW1lbnRzXG4gICAgICAgICAgICA6IG5ld0dyaWREYXRhLmxlbmd0aDtcblxuICAgICAgICBjb25zdCBoYXNFbGVtZW50V2l0aG91dElkID0gbmV3R3JpZERhdGEuc29tZSgoaXRlbSkgPT4gIWl0ZW0uaWQpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlU3RhdGUoe1xuICAgICAgICAgIGdyaWREYXRhOiBuZXdHcmlkRGF0YSxcbiAgICAgICAgICBkaXNhYmxlZDogIWhhc0VsZW1lbnRXaXRob3V0SWQsXG4gICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgc2VsZWN0aW9uOiBbXSxcbiAgICAgICAgICBkb2N1bWVudFRvdGFsUmVjb3JkcyxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIE1lbnUgQWN0aW9uc1xuICBnZXRBY3Rpb25zKCk6IE1lbnVJdGVtW10ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmNoZWNrV21zU3lzdGVtSW52YWxpZCgpLFxuICAgICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudChcInltcy5pbnQud21zX3NlYXJjaFwiKSxcbiAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5vcGVuSW52b2ljZUtleU1vZGFsKCksXG4gICAgICAgIGljb246IFwiZmEgZmEtc2VhcmNoXCIsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBkaXNhYmxlZDogdGhpcy5jaGVja1dtc1N5c3RlbUludmFsaWQoKSxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJ5bXMuaW50Lndtc19hZGRfZG9jdW1lbnRfcmVnaXN0ZXJcIiksXG4gICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMub3BlbkRvY3VtZW50UmVnaXN0ZXJNb2RhbCgpLFxuICAgICAgICBpY29uOiBcImZhcyBmYS1wZW4tc3F1YXJlXCIsXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBjaGVja1dtc1N5c3RlbUludmFsaWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgeyB3bXNTeXN0ZW0gfSA9IHRoaXMuc3RhdGU7XG4gICAgcmV0dXJuIHdtc1N5c3RlbSAmJiB3bXNTeXN0ZW0gPT09IFdtc1N5c3RlbS5OT05FO1xuICB9XG5cbiAgLy8gR3JpZCBjb2x1bW5zXG4gIHByaXZhdGUgdXBkYXRlR3JpZENvbHVtbnMoKTogdm9pZCB7XG4gICAgY29uc3QgZ3JpZENvbHVtbnMgPSB0aGlzLmdldEdyaWRDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7IGdyaWRDb2x1bW5zIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRHcmlkQ29sdW1ucygpOiBhbnlbXSB7XG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTdHJhdGVneSkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RyYXRlZ3kuZ2V0R3JpZENvbHVtbnMoXG4gICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgIHRoaXMuc3RhdGUuaXNDbGllbnRlRXh0ZXJub1xuICAgICk7XG4gIH1cblxuICAvLyBXTVMgVHlwZSBjaGVja3NcbiAgaXNXbXNTZW5pb3JDb25uZWN0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLndtc1N5c3RlbSA9PT0gV21zU3lzdGVtLlNFTklPUl9DT05ORUNUO1xuICB9XG5cbiAgaXNXbXNXSVMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUud21zU3lzdGVtID09PSBXbXNTeXN0ZW0uV0lTO1xuICB9XG5cbiAgaXNXbXNTaWx0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLndtc1N5c3RlbSA9PT0gV21zU3lzdGVtLlNFTklPUjtcbiAgfVxuXG4gIGlzV21zUGFydG5lcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS53bXNTeXN0ZW0gPT09IFdtc1N5c3RlbS5QQVJUTkVSO1xuICB9XG5cbiAgLy8gVmFsaWRhdGlvblxuICB2YWxpZGF0ZURvY3VtZW50KGRvY3VtZW50OiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY3VycmVudFN0cmF0ZWd5KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN1cnJlbnRTdHJhdGVneS52YWxpZGF0ZURvY3VtZW50KGRvY3VtZW50LCB7XG4gICAgICB5YXJkOiB0aGlzLnlhcmQsXG4gICAgICBzY2hlZHVsZTogdGhpcy5zY2hlZHVsZSxcbiAgICAgIGFnZW5kYTogdGhpcy5hZ2VuZGEsXG4gICAgfSk7XG5cbiAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkICYmIHJlc3VsdC5lcnJvck1lc3NhZ2VLZXkpIHtcbiAgICAgIHRoaXMuYnVpbGRNZXNzYWdlKHJlc3VsdC5lcnJvck1lc3NhZ2VLZXkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQuaXNWYWxpZDtcbiAgfVxuXG4gIC8vIEludm9pY2UgY29uZGl0aW9uc1xuICBnZXRGaWx0ZXJlZEludm9pY2VDb25kaXRpb25zKFxuICAgIGludm9pY2VDb25kaXRpb246IGFueVxuICApOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBJbnZvaWNlQ29uZGl0aW9uIHwgbnVsbCB9W10ge1xuICAgIGlmICghdGhpcy5jdXJyZW50U3RyYXRlZ3kpIHtcbiAgICAgIHJldHVybiB0aGlzLmludm9pY2VDb25kaXRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RyYXRlZ3kuZ2V0RmlsdGVyZWRJbnZvaWNlQ29uZGl0aW9ucyhcbiAgICAgIGludm9pY2VDb25kaXRpb24sXG4gICAgICB0aGlzLmludm9pY2VDb25kaXRpb25zXG4gICAgKTtcbiAgfVxuXG4gIHN1cHBvcnRzSW52b2ljZUNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U3RyYXRlZ3kuc3VwcG9ydHNJbnZvaWNlQ29uZGl0aW9uKCkgfHwgZmFsc2U7XG4gIH1cblxuICAvLyBIZWxwZXJzXG4gIGdldFByb3Aob2JqOiBhbnksIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgICAgIC5zcGxpdChcIi5cIilcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChyZXN1bHQ6IGFueSwgcHJvcDogYW55KSA9PlxuICAgICAgICAgIHJlc3VsdFtwcm9wXSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHJlc3VsdFtwcm9wXSxcbiAgICAgICAgb2JqXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdWNlc3NNZXNzYWdlKCk6IHZvaWQge1xuICAgIHRoaXMudXRpbHMubWVzc2FnZShcInN1Y2Nlc3NcIiwgdGhpcy5zdW1tYXJ5LCBcInNhdmVkX21lc3NhZ2VfY29udGVudFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRNZXNzYWdlKGRlc2NyaXB0aW9uOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnV0aWxzLm1lc3NhZ2UoXG4gICAgICBcIndhcm5cIixcbiAgICAgIFwieW1zLmludC5kb2N1bWVudG9faW52YWxpZG9fd2FybmluZ19oZWFkZXJcIixcbiAgICAgIGRlc2NyaXB0aW9uXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGUocGFydGlhbFN0YXRlOiBQYXJ0aWFsPERvY3VtZW50R3JpZFN0YXRlPik6IHZvaWQge1xuICAgIHRoaXMuc3RhdGVTdWJqZWN0Lm5leHQoeyAuLi50aGlzLnN0YXRlLCAuLi5wYXJ0aWFsU3RhdGUgfSk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,18 +1,21 @@
1
1
  import * as tslib_1 from "tslib";
2
- import { DocumentGridComponent } from './document-grid.component';
2
+ import { DocumentGridComponent } from "./document-grid.component";
3
+ import { DocumentGridFacade } from "./document-grid.facade";
4
+ import { WmsIntegrationStrategyFactory } from "./strategies/wms-integration-strategy.factory";
3
5
  import { NgModule } from "@angular/core";
4
6
  import { CommonModule } from "@angular/common";
5
7
  import { TranslateModule } from "@ngx-translate/core";
6
- import { ButtonModule, EmptyStateModule } from "@seniorsistemas/angular-components";
7
- import { DropdownModule, PanelModule } from 'primeng/primeng';
8
+ import { ButtonModule, EmptyStateModule, } from "@seniorsistemas/angular-components";
9
+ import { ConfirmDialogModule, DropdownModule, PanelModule, } from "primeng/primeng";
10
+ import { ConfirmationService } from "primeng/api";
8
11
  import { TableModule } from "primeng/table";
9
- import { RegisterDocumentModule } from './register-document/register-document.module';
10
- import { InsertKeyModule } from './insert-key/insert-key.module';
12
+ import { RegisterDocumentModule } from "./register-document/register-document.module";
13
+ import { InsertKeyModule } from "./insert-key/insert-key.module";
11
14
  import { ButtonModule as PrimeButtonModule } from "primeng/button";
12
15
  import { ComponentsModule as LogisticaComponentsModule } from "@seniorsistemas/yms-components";
13
- import { FormsModule } from '@angular/forms';
16
+ import { FormsModule } from "@angular/forms";
14
17
  import { ExternalTenantService } from "../../entities/external-tenant/external-tenant.service";
15
- import { CpfCnpjFormatPipe } from '../../shared/cpf-cnpj-format.pipe';
18
+ import { CpfCnpjFormatPipe } from "../../shared/cpf-cnpj-format.pipe";
16
19
  let DocumentGridModule = class DocumentGridModule {
17
20
  };
18
21
  DocumentGridModule = tslib_1.__decorate([
@@ -20,7 +23,12 @@ DocumentGridModule = tslib_1.__decorate([
20
23
  declarations: [DocumentGridComponent, CpfCnpjFormatPipe],
21
24
  entryComponents: [DocumentGridComponent],
22
25
  exports: [DocumentGridComponent, CpfCnpjFormatPipe],
23
- providers: [ExternalTenantService],
26
+ providers: [
27
+ ExternalTenantService,
28
+ DocumentGridFacade,
29
+ WmsIntegrationStrategyFactory,
30
+ ConfirmationService,
31
+ ],
24
32
  imports: [
25
33
  CommonModule,
26
34
  TranslateModule,
@@ -33,9 +41,10 @@ DocumentGridModule = tslib_1.__decorate([
33
41
  LogisticaComponentsModule,
34
42
  EmptyStateModule,
35
43
  DropdownModule,
36
- FormsModule
44
+ FormsModule,
45
+ ConfirmDialogModule,
37
46
  ],
38
47
  })
39
48
  ], DocumentGridModule);
40
49
  export { DocumentGridModule };
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JpZC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL3dtcy9jb21wb25lbnRzL2RvY3VtZW50LWdyaWQvZG9jdW1lbnQtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEYsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxJQUFJLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixJQUFJLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBcUJ0RSxJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFrQjtDQUM5QixDQUFBO0FBRFksa0JBQWtCO0lBcEI5QixRQUFRLENBQUM7UUFDTixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQztRQUN4RCxlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztRQUN4QyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQztRQUNuRCxTQUFTLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztRQUNsQyxPQUFPLEVBQUU7WUFDUCxZQUFZO1lBQ1osZUFBZTtZQUNmLFlBQVk7WUFDWixXQUFXO1lBQ1gsV0FBVztZQUNYLHNCQUFzQjtZQUN0QixlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLHlCQUF5QjtZQUN6QixnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLFdBQVc7U0FDWjtLQUNKLENBQUM7R0FDVyxrQkFBa0IsQ0FDOUI7U0FEWSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEb2N1bWVudEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2RvY3VtZW50LWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUsIEVtcHR5U3RhdGVNb2R1bGUgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgRHJvcGRvd25Nb2R1bGUsIFBhbmVsTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9wcmltZW5nJztcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IFJlZ2lzdGVyRG9jdW1lbnRNb2R1bGUgfSBmcm9tICcuL3JlZ2lzdGVyLWRvY3VtZW50L3JlZ2lzdGVyLWRvY3VtZW50Lm1vZHVsZSc7XG5pbXBvcnQgeyBJbnNlcnRLZXlNb2R1bGUgfSBmcm9tICcuL2luc2VydC1rZXkvaW5zZXJ0LWtleS5tb2R1bGUnO1xuaW1wb3J0IHsgQnV0dG9uTW9kdWxlIGFzIFByaW1lQnV0dG9uTW9kdWxlIH0gZnJvbSBcInByaW1lbmcvYnV0dG9uXCI7XG5pbXBvcnQgeyBDb21wb25lbnRzTW9kdWxlIGFzIExvZ2lzdGljYUNvbXBvbmVudHNNb2R1bGUgfSBmcm9tIFwiQHNlbmlvcnNpc3RlbWFzL3ltcy1jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEV4dGVybmFsVGVuYW50U2VydmljZSB9IGZyb20gXCIuLi8uLi9lbnRpdGllcy9leHRlcm5hbC10ZW5hbnQvZXh0ZXJuYWwtdGVuYW50LnNlcnZpY2VcIjtcbmltcG9ydCB7IENwZkNucGpGb3JtYXRQaXBlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NwZi1jbnBqLWZvcm1hdC5waXBlJztcbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbRG9jdW1lbnRHcmlkQ29tcG9uZW50LCBDcGZDbnBqRm9ybWF0UGlwZV0sXG4gICAgZW50cnlDb21wb25lbnRzOiBbRG9jdW1lbnRHcmlkQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbRG9jdW1lbnRHcmlkQ29tcG9uZW50LCBDcGZDbnBqRm9ybWF0UGlwZV0sXG4gICAgcHJvdmlkZXJzOiBbRXh0ZXJuYWxUZW5hbnRTZXJ2aWNlXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICBDb21tb25Nb2R1bGUsXG4gICAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgICBCdXR0b25Nb2R1bGUsXG4gICAgICBQYW5lbE1vZHVsZSxcbiAgICAgIFRhYmxlTW9kdWxlLFxuICAgICAgUmVnaXN0ZXJEb2N1bWVudE1vZHVsZSxcbiAgICAgIEluc2VydEtleU1vZHVsZSxcbiAgICAgIFByaW1lQnV0dG9uTW9kdWxlLFxuICAgICAgTG9naXN0aWNhQ29tcG9uZW50c01vZHVsZSxcbiAgICAgIEVtcHR5U3RhdGVNb2R1bGUsXG4gICAgICBEcm9wZG93bk1vZHVsZSxcbiAgICAgIEZvcm1zTW9kdWxlXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgRG9jdW1lbnRHcmlkTW9kdWxlIHtcbn1cbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtZ3JpZC5tb2R1bGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Ac2VuaW9yc2lzdGVtYXMveW1zLWludGVncmF0aW9uLyIsInNvdXJjZXMiOlsic3JjL3dtcy9jb21wb25lbnRzL2RvY3VtZW50LWdyaWQvZG9jdW1lbnQtZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQ0wsWUFBWSxFQUNaLGdCQUFnQixHQUNqQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLFdBQVcsR0FDWixNQUFNLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsWUFBWSxJQUFJLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkUsT0FBTyxFQUFFLGdCQUFnQixJQUFJLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0YsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBMkJ0RSxJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFrQjtDQUFHLENBQUE7QUFBckIsa0JBQWtCO0lBMUI5QixRQUFRLENBQUM7UUFDUixZQUFZLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQztRQUN4RCxlQUFlLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQztRQUN4QyxPQUFPLEVBQUUsQ0FBQyxxQkFBcUIsRUFBRSxpQkFBaUIsQ0FBQztRQUNuRCxTQUFTLEVBQUU7WUFDVCxxQkFBcUI7WUFDckIsa0JBQWtCO1lBQ2xCLDZCQUE2QjtZQUM3QixtQkFBbUI7U0FDcEI7UUFDRCxPQUFPLEVBQUU7WUFDUCxZQUFZO1lBQ1osZUFBZTtZQUNmLFlBQVk7WUFDWixXQUFXO1lBQ1gsV0FBVztZQUNYLHNCQUFzQjtZQUN0QixlQUFlO1lBQ2YsaUJBQWlCO1lBQ2pCLHlCQUF5QjtZQUN6QixnQkFBZ0I7WUFDaEIsY0FBYztZQUNkLFdBQVc7WUFDWCxtQkFBbUI7U0FDcEI7S0FDRixDQUFDO0dBQ1csa0JBQWtCLENBQUc7U0FBckIsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRG9jdW1lbnRHcmlkQ29tcG9uZW50IH0gZnJvbSBcIi4vZG9jdW1lbnQtZ3JpZC5jb21wb25lbnRcIjtcbmltcG9ydCB7IERvY3VtZW50R3JpZEZhY2FkZSB9IGZyb20gXCIuL2RvY3VtZW50LWdyaWQuZmFjYWRlXCI7XG5pbXBvcnQgeyBXbXNJbnRlZ3JhdGlvblN0cmF0ZWd5RmFjdG9yeSB9IGZyb20gXCIuL3N0cmF0ZWdpZXMvd21zLWludGVncmF0aW9uLXN0cmF0ZWd5LmZhY3RvcnlcIjtcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XG5pbXBvcnQge1xuICBCdXR0b25Nb2R1bGUsXG4gIEVtcHR5U3RhdGVNb2R1bGUsXG59IGZyb20gXCJAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzXCI7XG5pbXBvcnQge1xuICBDb25maXJtRGlhbG9nTW9kdWxlLFxuICBEcm9wZG93bk1vZHVsZSxcbiAgUGFuZWxNb2R1bGUsXG59IGZyb20gXCJwcmltZW5nL3ByaW1lbmdcIjtcbmltcG9ydCB7IENvbmZpcm1hdGlvblNlcnZpY2UgfSBmcm9tIFwicHJpbWVuZy9hcGlcIjtcbmltcG9ydCB7IFRhYmxlTW9kdWxlIH0gZnJvbSBcInByaW1lbmcvdGFibGVcIjtcbmltcG9ydCB7IFJlZ2lzdGVyRG9jdW1lbnRNb2R1bGUgfSBmcm9tIFwiLi9yZWdpc3Rlci1kb2N1bWVudC9yZWdpc3Rlci1kb2N1bWVudC5tb2R1bGVcIjtcbmltcG9ydCB7IEluc2VydEtleU1vZHVsZSB9IGZyb20gXCIuL2luc2VydC1rZXkvaW5zZXJ0LWtleS5tb2R1bGVcIjtcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSBhcyBQcmltZUJ1dHRvbk1vZHVsZSB9IGZyb20gXCJwcmltZW5nL2J1dHRvblwiO1xuaW1wb3J0IHsgQ29tcG9uZW50c01vZHVsZSBhcyBMb2dpc3RpY2FDb21wb25lbnRzTW9kdWxlIH0gZnJvbSBcIkBzZW5pb3JzaXN0ZW1hcy95bXMtY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IEV4dGVybmFsVGVuYW50U2VydmljZSB9IGZyb20gXCIuLi8uLi9lbnRpdGllcy9leHRlcm5hbC10ZW5hbnQvZXh0ZXJuYWwtdGVuYW50LnNlcnZpY2VcIjtcbmltcG9ydCB7IENwZkNucGpGb3JtYXRQaXBlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9jcGYtY25wai1mb3JtYXQucGlwZVwiO1xuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbRG9jdW1lbnRHcmlkQ29tcG9uZW50LCBDcGZDbnBqRm9ybWF0UGlwZV0sXG4gIGVudHJ5Q29tcG9uZW50czogW0RvY3VtZW50R3JpZENvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtEb2N1bWVudEdyaWRDb21wb25lbnQsIENwZkNucGpGb3JtYXRQaXBlXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgRXh0ZXJuYWxUZW5hbnRTZXJ2aWNlLFxuICAgIERvY3VtZW50R3JpZEZhY2FkZSxcbiAgICBXbXNJbnRlZ3JhdGlvblN0cmF0ZWd5RmFjdG9yeSxcbiAgICBDb25maXJtYXRpb25TZXJ2aWNlLFxuICBdLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBCdXR0b25Nb2R1bGUsXG4gICAgUGFuZWxNb2R1bGUsXG4gICAgVGFibGVNb2R1bGUsXG4gICAgUmVnaXN0ZXJEb2N1bWVudE1vZHVsZSxcbiAgICBJbnNlcnRLZXlNb2R1bGUsXG4gICAgUHJpbWVCdXR0b25Nb2R1bGUsXG4gICAgTG9naXN0aWNhQ29tcG9uZW50c01vZHVsZSxcbiAgICBFbXB0eVN0YXRlTW9kdWxlLFxuICAgIERyb3Bkb3duTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIENvbmZpcm1EaWFsb2dNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvY3VtZW50R3JpZE1vZHVsZSB7fVxuIl19