@lowcodeunit/applications-flow-common 1.36.193-10787-gh-source-control → 1.36.196-social-ui-performance-issues
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.
- package/esm2020/lib/controls/build-pipeline-form/build-pipeline-form.component.mjs +4 -4
- package/esm2020/lib/controls/connected-source/connected-source.component.mjs +5 -9
- package/esm2020/lib/controls/devops-source-control-form/devops-source-control-form.component.mjs +4 -4
- package/esm2020/lib/controls/dfs-modifiers-form/dfs-modifiers-form.component.mjs +7 -4
- package/esm2020/lib/controls/edit-application-form/edit-application-form.component.mjs +4 -4
- package/esm2020/lib/controls/edit-project-form/edit-project-form.component.mjs +4 -4
- package/esm2020/lib/controls/emulated-devices-toggle/emulated-devices-toggle.component.mjs +4 -4
- package/esm2020/lib/controls/processor-details-form/processor-details-form.component.mjs +8 -9
- package/esm2020/lib/controls/security-toggle/security-toggle.component.mjs +4 -4
- package/esm2020/lib/controls/state-config-form/state-config-form.component.mjs +7 -4
- package/esm2020/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.mjs +5 -4
- package/esm2020/lib/dialogs/dfs-modifiers-dialog/dfs-modifiers-dialog.component.mjs +7 -4
- package/esm2020/lib/dialogs/edit-application-dialog/edit-application-dialog.component.mjs +1 -4
- package/esm2020/lib/dialogs/edit-project-dialog/edit-project-dialog.component.mjs +5 -4
- package/esm2020/lib/dialogs/feed-header-dialog/feed-header-dialog.component.mjs +14 -7
- package/esm2020/lib/dialogs/new-application-dialog/new-application-dialog.component.mjs +4 -4
- package/esm2020/lib/dialogs/processor-details-dialog/processor-details-dialog.component.mjs +11 -18
- package/esm2020/lib/dialogs/source-control-dialog/source-control-dialog.component.mjs +5 -4
- package/esm2020/lib/dialogs/state-config-dialog/state-config-dialog.component.mjs +9 -5
- package/esm2020/lib/elements/breadcrumb/breadcrumb.component.mjs +4 -4
- package/esm2020/lib/elements/feed-header/feed-header.component.mjs +5 -4
- package/esm2020/lib/elements/main-feed-card/main-feed-card.component.mjs +7 -4
- package/esm2020/lib/elements/project-info-card/project-info-card.component.mjs +6 -6
- package/esm2020/lib/elements/projects/projects.component.mjs +7 -4
- package/esm2020/lib/elements/slotted-card/slotted-card.component.mjs +5 -4
- package/esm2020/lib/services/applications-flow.service.mjs +1 -2
- package/esm2020/lib/services/eac.service.mjs +46 -46
- package/esm2020/lib/services/project.service.mjs +7 -5
- package/fesm2015/lowcodeunit-applications-flow-common.mjs +175 -157
- package/fesm2015/lowcodeunit-applications-flow-common.mjs.map +1 -1
- package/fesm2020/lowcodeunit-applications-flow-common.mjs +172 -156
- package/fesm2020/lowcodeunit-applications-flow-common.mjs.map +1 -1
- package/lib/controls/build-pipeline-form/build-pipeline-form.component.d.ts +1 -1
- package/lib/controls/connected-source/connected-source.component.d.ts +2 -3
- package/lib/controls/devops-source-control-form/devops-source-control-form.component.d.ts +1 -1
- package/lib/controls/dfs-modifiers-form/dfs-modifiers-form.component.d.ts +1 -1
- package/lib/controls/edit-application-form/edit-application-form.component.d.ts +1 -1
- package/lib/controls/edit-project-form/edit-project-form.component.d.ts +1 -1
- package/lib/controls/emulated-devices-toggle/emulated-devices-toggle.component.d.ts +1 -1
- package/lib/controls/processor-details-form/processor-details-form.component.d.ts +1 -1
- package/lib/controls/security-toggle/security-toggle.component.d.ts +1 -1
- package/lib/controls/state-config-form/state-config-form.component.d.ts +1 -1
- package/lib/dialogs/build-pipeline-dialog/build-pipeline-dialog.component.d.ts +1 -1
- package/lib/dialogs/dfs-modifiers-dialog/dfs-modifiers-dialog.component.d.ts +1 -1
- package/lib/dialogs/edit-application-dialog/edit-application-dialog.component.d.ts +1 -1
- package/lib/dialogs/edit-project-dialog/edit-project-dialog.component.d.ts +1 -1
- package/lib/dialogs/feed-header-dialog/feed-header-dialog.component.d.ts +1 -1
- package/lib/dialogs/new-application-dialog/new-application-dialog.component.d.ts +1 -1
- package/lib/dialogs/processor-details-dialog/processor-details-dialog.component.d.ts +1 -2
- package/lib/dialogs/source-control-dialog/source-control-dialog.component.d.ts +1 -1
- package/lib/dialogs/state-config-dialog/state-config-dialog.component.d.ts +1 -1
- package/lib/elements/breadcrumb/breadcrumb.component.d.ts +1 -1
- package/lib/elements/feed-header/feed-header.component.d.ts +1 -1
- package/lib/elements/main-feed-card/main-feed-card.component.d.ts +1 -1
- package/lib/elements/project-info-card/project-info-card.component.d.ts +1 -1
- package/lib/elements/projects/projects.component.d.ts +1 -1
- package/lib/elements/slotted-card/slotted-card.component.d.ts +1 -1
- package/lib/services/eac.service.d.ts +2 -2
- package/package.json +1 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import { ApplicationsFlowState, } from '../state/applications-flow.state';
|
|
3
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
import * as i1 from "./project.service";
|
|
5
6
|
import * as i2 from "@angular/common/http";
|
|
@@ -16,7 +17,7 @@ export class EaCService {
|
|
|
16
17
|
constructor(projectService, http) {
|
|
17
18
|
this.projectService = projectService;
|
|
18
19
|
this.http = http;
|
|
19
|
-
this.State = new ApplicationsFlowState();
|
|
20
|
+
this.State = new BehaviorSubject(new ApplicationsFlowState());
|
|
20
21
|
}
|
|
21
22
|
// Properties
|
|
22
23
|
get EditingProjectLookup() {
|
|
@@ -32,98 +33,98 @@ export class EaCService {
|
|
|
32
33
|
async DeleteApplication(appLookup, appName) {
|
|
33
34
|
if (confirm(`Are you sure you want to delete application '${appName}'?`)) {
|
|
34
35
|
const eac = {
|
|
35
|
-
EnterpriseLookup: this.State
|
|
36
|
+
EnterpriseLookup: this.State?.value?.EaC?.EnterpriseLookup,
|
|
36
37
|
Applications: {},
|
|
37
38
|
};
|
|
38
39
|
eac.Applications[appLookup] = {
|
|
39
40
|
Application: {},
|
|
40
41
|
};
|
|
41
|
-
return await this.projectService.EnterpriseAsCodeRemovals(this.State, eac);
|
|
42
|
+
return await this.projectService.EnterpriseAsCodeRemovals(this.State.value, eac);
|
|
42
43
|
}
|
|
43
44
|
}
|
|
44
45
|
async DeleteDevOpsAction(doaLookup, doaName) {
|
|
45
46
|
if (confirm(`Are you sure you want to delete Build Pipeline '${doaName}'?`)) {
|
|
46
47
|
const eac = {
|
|
47
|
-
EnterpriseLookup: this.State.EaC.EnterpriseLookup,
|
|
48
|
+
EnterpriseLookup: this.State.value.EaC.EnterpriseLookup,
|
|
48
49
|
Environments: {},
|
|
49
50
|
};
|
|
50
|
-
eac.Environments[this.State.EaC.Enterprise.PrimaryEnvironment] = {
|
|
51
|
+
eac.Environments[this.State.value.EaC.Enterprise.PrimaryEnvironment] = {
|
|
51
52
|
DevOpsActions: {},
|
|
52
53
|
};
|
|
53
|
-
eac.Environments[this.State.EaC.Enterprise.PrimaryEnvironment].DevOpsActions[doaLookup] = {};
|
|
54
|
-
return await this.projectService.EnterpriseAsCodeRemovals(this.State, eac);
|
|
54
|
+
eac.Environments[this.State.value.EaC.Enterprise.PrimaryEnvironment].DevOpsActions[doaLookup] = {};
|
|
55
|
+
return await this.projectService.EnterpriseAsCodeRemovals(this.State.value, eac);
|
|
55
56
|
}
|
|
56
57
|
}
|
|
57
58
|
async DeleteModifier(modifierLookup, modifierName) {
|
|
58
59
|
if (confirm(`Are you sure you want to delete Modifier '${modifierName}'?`)) {
|
|
59
60
|
const eac = {
|
|
60
|
-
EnterpriseLookup: this.State.EaC.EnterpriseLookup,
|
|
61
|
+
EnterpriseLookup: this.State.value.EaC.EnterpriseLookup,
|
|
61
62
|
Modifiers: {},
|
|
62
63
|
};
|
|
63
64
|
eac.Modifiers[modifierLookup] = {};
|
|
64
|
-
return await this.projectService.EnterpriseAsCodeRemovals(this.State, eac);
|
|
65
|
+
return await this.projectService.EnterpriseAsCodeRemovals(this.State.value, eac);
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
68
|
async DeleteProject(projectLookup, projectName) {
|
|
68
69
|
if (confirm(`Are you sure you want to delete Project '${projectName}'?`)) {
|
|
69
70
|
const eac = {
|
|
70
|
-
EnterpriseLookup: this.State.EaC.EnterpriseLookup,
|
|
71
|
+
EnterpriseLookup: this.State.value.EaC.EnterpriseLookup,
|
|
71
72
|
Projects: {},
|
|
72
73
|
};
|
|
73
74
|
eac.Projects[projectLookup] = {
|
|
74
75
|
Project: {},
|
|
75
76
|
};
|
|
76
|
-
return await this.projectService.EnterpriseAsCodeRemovals(this.State, eac);
|
|
77
|
+
return await this.projectService.EnterpriseAsCodeRemovals(this.State.value, eac);
|
|
77
78
|
}
|
|
78
79
|
}
|
|
79
80
|
async DeleteSourceControl(srcLookup, srcName) {
|
|
80
81
|
if (confirm(`Are you sure you want to delete Source Control '${srcName}'?`)) {
|
|
81
82
|
const eac = {
|
|
82
|
-
EnterpriseLookup: this.State.EaC.EnterpriseLookup,
|
|
83
|
+
EnterpriseLookup: this.State.value.EaC.EnterpriseLookup,
|
|
83
84
|
Environments: {},
|
|
84
85
|
};
|
|
85
|
-
eac.Environments[this.State.EaC.Enterprise.PrimaryEnvironment] = {
|
|
86
|
+
eac.Environments[this.State.value.EaC.Enterprise.PrimaryEnvironment] = {
|
|
86
87
|
Sources: {},
|
|
87
88
|
};
|
|
88
|
-
eac.Environments[this.State.EaC.Enterprise.PrimaryEnvironment].Sources[srcLookup] = {};
|
|
89
|
-
return await this.projectService.EnterpriseAsCodeRemovals(this.State, eac);
|
|
89
|
+
eac.Environments[this.State.value.EaC.Enterprise.PrimaryEnvironment].Sources[srcLookup] = {};
|
|
90
|
+
return await this.projectService.EnterpriseAsCodeRemovals(this.State.value, eac);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
// this.appsFlowEventsSvc.EnsureUserEnterpriseEvent.subscribe(async () => {
|
|
93
94
|
// await this.projectService.EnsureUserEnterprise(this.State);
|
|
94
95
|
// });
|
|
95
96
|
async EnsureUserEnterprise() {
|
|
96
|
-
await this.projectService.EnsureUserEnterprise(this.State);
|
|
97
|
+
await this.projectService.EnsureUserEnterprise(this.State.value);
|
|
97
98
|
}
|
|
98
99
|
async EnterpriseAsCodeRemovals(eac) {
|
|
99
|
-
return this.projectService.EnterpriseAsCodeRemovals(this.State, eac);
|
|
100
|
+
return this.projectService.EnterpriseAsCodeRemovals(this.State.value, eac);
|
|
100
101
|
}
|
|
101
102
|
async GetActiveEnterprise() {
|
|
102
|
-
await this.projectService.GetActiveEnterprise(this.State);
|
|
103
|
+
await this.projectService.GetActiveEnterprise(this.State.value);
|
|
103
104
|
}
|
|
104
105
|
async LoadUserFeed(page, pageSize, forCheck = false) {
|
|
105
|
-
await this.projectService.LoadUserFeed(page, pageSize, forCheck, this.State);
|
|
106
|
+
await this.projectService.LoadUserFeed(page, pageSize, forCheck, this.State.value);
|
|
106
107
|
}
|
|
107
108
|
GenerateRoutedApplications(applications) {
|
|
108
|
-
return this.projectService.GenerateRoutedApplications(applications, this.State);
|
|
109
|
+
return this.projectService.GenerateRoutedApplications(applications, this.State.value);
|
|
109
110
|
}
|
|
110
111
|
async HasValidConnection() {
|
|
111
|
-
await this.projectService.HasValidConnection(this.State);
|
|
112
|
+
await this.projectService.HasValidConnection(this.State.value);
|
|
112
113
|
}
|
|
113
114
|
async ListEnterprises() {
|
|
114
|
-
await this.projectService.ListEnterprises(this.State);
|
|
115
|
+
await this.projectService.ListEnterprises(this.State.value);
|
|
115
116
|
}
|
|
116
117
|
async LoadEnterpriseAsCode() {
|
|
117
|
-
await this.projectService.LoadEnterpriseAsCode(this.State);
|
|
118
|
+
await this.projectService.LoadEnterpriseAsCode(this.State.value);
|
|
118
119
|
}
|
|
119
120
|
ReloadFeed() {
|
|
120
|
-
if (this.State.FeedCheck) {
|
|
121
|
-
this.State.Feed = this.State.FeedCheck.Items;
|
|
122
|
-
this.State.FeedActions = this.State.FeedCheck.Actions;
|
|
123
|
-
this.State.FeedSourceControlLookups =
|
|
124
|
-
this.State.FeedCheck.SourceControlLookups;
|
|
121
|
+
if (this.State.value.FeedCheck) {
|
|
122
|
+
this.State.value.Feed = this.State.value.FeedCheck.Items;
|
|
123
|
+
this.State.value.FeedActions = this.State.value.FeedCheck.Actions;
|
|
124
|
+
this.State.value.FeedSourceControlLookups =
|
|
125
|
+
this.State.value.FeedCheck.SourceControlLookups;
|
|
125
126
|
}
|
|
126
|
-
this.State.FeedCheck = null;
|
|
127
|
+
this.State.value.FeedCheck = null;
|
|
127
128
|
}
|
|
128
129
|
async SaveApplicationAsCode(req) {
|
|
129
130
|
return await this.handleSaveApplication(req);
|
|
@@ -132,7 +133,7 @@ export class EaCService {
|
|
|
132
133
|
await this.handleSaveDFSModifier(req);
|
|
133
134
|
}
|
|
134
135
|
async SaveEnterpriseAsCode(eac) {
|
|
135
|
-
return await this.projectService.SaveEnterpriseAsCode(this.State, eac);
|
|
136
|
+
return await this.projectService.SaveEnterpriseAsCode(this.State.value, eac);
|
|
136
137
|
}
|
|
137
138
|
async SaveEnvironmentAsCode(req) {
|
|
138
139
|
return await this.handleSaveEnvironment(req);
|
|
@@ -141,26 +142,26 @@ export class EaCService {
|
|
|
141
142
|
return await this.handleSaveProject(req.ProjectLookup, req.Project);
|
|
142
143
|
}
|
|
143
144
|
async SetActiveEnterprise(entLookup) {
|
|
144
|
-
this.projectService.SetActiveEnterprise(this.State, entLookup);
|
|
145
|
+
this.projectService.SetActiveEnterprise(this.State.value, entLookup);
|
|
145
146
|
}
|
|
146
147
|
async SetCreatingProject(creatingProject) {
|
|
147
148
|
this.projectService.SetCreatingProject(creatingProject);
|
|
148
149
|
}
|
|
149
150
|
async SetEditProjectSettings(projectLookup) {
|
|
150
|
-
await this.projectService.SetEditProjectSettings(this.State, projectLookup);
|
|
151
|
+
await this.projectService.SetEditProjectSettings(this.State.value, projectLookup);
|
|
151
152
|
}
|
|
152
153
|
async SubmitFeedEntry(entry) {
|
|
153
|
-
return await this.projectService.SubmitFeedEntry(this.State, entry);
|
|
154
|
+
return await this.projectService.SubmitFeedEntry(this.State.value, entry);
|
|
154
155
|
}
|
|
155
156
|
async UnpackLowCodeUnit(req) {
|
|
156
157
|
if (confirm(`Are you sure you want to unpack application '${req.ApplicationName}' with version '${req.Version}'?`)) {
|
|
157
|
-
await this.projectService.UnpackLowCodeUnit(this.State, req);
|
|
158
|
+
await this.projectService.UnpackLowCodeUnit(this.State.value, req);
|
|
158
159
|
}
|
|
159
160
|
}
|
|
160
161
|
// Helpers
|
|
161
162
|
async handleSaveApplication(req) {
|
|
162
163
|
const saveEaC = {
|
|
163
|
-
EnterpriseLookup: this.State.EaC.EnterpriseLookup,
|
|
164
|
+
EnterpriseLookup: this.State.value.EaC.EnterpriseLookup,
|
|
164
165
|
Applications: {},
|
|
165
166
|
Projects: {},
|
|
166
167
|
};
|
|
@@ -175,12 +176,11 @@ export class EaCService {
|
|
|
175
176
|
if (req.Application) {
|
|
176
177
|
saveEaC.Applications[req.ApplicationLookup] = req.Application;
|
|
177
178
|
}
|
|
178
|
-
|
|
179
|
-
return await this.projectService.SaveEnterpriseAsCode(this.State, saveEaC);
|
|
179
|
+
return await this.projectService.SaveEnterpriseAsCode(this.State.value, saveEaC);
|
|
180
180
|
}
|
|
181
181
|
async handleSaveDFSModifier(req) {
|
|
182
182
|
const saveEaC = {
|
|
183
|
-
EnterpriseLookup: this.State.EaC.EnterpriseLookup,
|
|
183
|
+
EnterpriseLookup: this.State.value.EaC.EnterpriseLookup,
|
|
184
184
|
Modifiers: {},
|
|
185
185
|
Projects: {},
|
|
186
186
|
Applications: {},
|
|
@@ -202,11 +202,11 @@ export class EaCService {
|
|
|
202
202
|
ModifierLookups: req.ModifierLookups,
|
|
203
203
|
};
|
|
204
204
|
}
|
|
205
|
-
await this.projectService.SaveEnterpriseAsCode(this.State, saveEaC);
|
|
205
|
+
await this.projectService.SaveEnterpriseAsCode(this.State.value, saveEaC);
|
|
206
206
|
}
|
|
207
207
|
async handleSaveEnvironment(req) {
|
|
208
208
|
const saveEaC = {
|
|
209
|
-
EnterpriseLookup: this.State?.EaC?.EnterpriseLookup,
|
|
209
|
+
EnterpriseLookup: this.State?.value.EaC?.EnterpriseLookup,
|
|
210
210
|
DataTokens: {},
|
|
211
211
|
Environments: {},
|
|
212
212
|
};
|
|
@@ -216,17 +216,17 @@ export class EaCService {
|
|
|
216
216
|
if (req.EnterpriseDataTokens) {
|
|
217
217
|
saveEaC.DataTokens = req.EnterpriseDataTokens;
|
|
218
218
|
}
|
|
219
|
-
return await this.projectService.SaveEnterpriseAsCode(this.State, saveEaC);
|
|
219
|
+
return await this.projectService.SaveEnterpriseAsCode(this.State.value, saveEaC);
|
|
220
220
|
}
|
|
221
221
|
async handleSaveProject(projectLookup, project) {
|
|
222
222
|
const projHosts = {};
|
|
223
223
|
project?.Hosts?.forEach((host) => {
|
|
224
|
-
projHosts[host] = this.State.EaC.Hosts[host];
|
|
224
|
+
projHosts[host] = this.State.value.EaC.Hosts[host];
|
|
225
225
|
});
|
|
226
226
|
const saveEaC = {
|
|
227
|
-
EnterpriseLookup: this.State.EaC.EnterpriseLookup,
|
|
227
|
+
EnterpriseLookup: this.State.value.EaC.EnterpriseLookup,
|
|
228
228
|
Enterprise: {
|
|
229
|
-
...this.State.EaC.Enterprise,
|
|
229
|
+
...this.State.value.EaC.Enterprise,
|
|
230
230
|
PrimaryHost: project.Hosts[0],
|
|
231
231
|
},
|
|
232
232
|
Hosts: projHosts,
|
|
@@ -234,7 +234,7 @@ export class EaCService {
|
|
|
234
234
|
Projects: {},
|
|
235
235
|
};
|
|
236
236
|
saveEaC.Projects[projectLookup] = project;
|
|
237
|
-
let status = await this.projectService.SaveEnterpriseAsCode(this.State, saveEaC);
|
|
237
|
+
let status = await this.projectService.SaveEnterpriseAsCode(this.State.value, saveEaC);
|
|
238
238
|
this.SetEditProjectSettings(projectLookup);
|
|
239
239
|
return status;
|
|
240
240
|
}
|
|
@@ -247,4 +247,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
|
|
|
247
247
|
providedIn: 'root',
|
|
248
248
|
}]
|
|
249
249
|
}], ctorParameters: function () { return [{ type: i1.ProjectService }, { type: i2.HttpClient }]; } });
|
|
250
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFjLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9lYWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDSCxxQkFBcUIsR0FFeEIsTUFBTSxrQ0FBa0MsQ0FBQzs7OztBQWUxQyxNQUFNLE9BQU8saUNBQWlDO0NBTTdDO0FBRUQsTUFBTSxPQUFPLDJCQUEyQjtDQVF2QztBQUVELE1BQU0sT0FBTyxpQ0FBaUM7Q0FNN0M7QUFFRCxNQUFNLE9BQU8sNkJBQTZCO0NBSXpDO0FBS0QsTUFBTSxPQUFPLFVBQVU7SUFZbkIsZ0JBQWdCO0lBQ2hCLFlBQ2MsY0FBOEIsRUFDOUIsSUFBZ0I7UUFEaEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFNBQUksR0FBSixJQUFJLENBQVk7UUFFMUIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7SUFDN0MsQ0FBQztJQWpCRCxjQUFjO0lBQ2QsSUFBVyxvQkFBb0I7UUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDO0lBQ3BELENBQUM7SUFFRCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztJQUMvQyxDQUFDO0lBWUQsZUFBZTtJQUNSLGlCQUFpQixDQUFDLFFBQWtCO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFTSxLQUFLLENBQUMsaUJBQWlCLENBQzFCLFNBQWlCLEVBQ2pCLE9BQWU7UUFFZixJQUNJLE9BQU8sQ0FBQyxnREFBZ0QsT0FBTyxJQUFJLENBQUMsRUFDdEU7WUFDRSxNQUFNLEdBQUcsR0FB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QVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFByb2plY3RTZXJ2aWNlIH0gZnJvbSAnLi9wcm9qZWN0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgICBBcHBsaWNhdGlvbnNGbG93U3RhdGUsXG4gICAgVW5wYWNrTG93Q29kZVVuaXRSZXF1ZXN0LFxufSBmcm9tICcuLi9zdGF0ZS9hcHBsaWNhdGlvbnMtZmxvdy5zdGF0ZSc7XG5pbXBvcnQge1xuICAgIEVhQ0FwcGxpY2F0aW9uQXNDb2RlLFxuICAgIEVhQ0RhdGFUb2tlbixcbiAgICBFYUNERlNNb2RpZmllcixcbiAgICBFYUNFbnZpcm9ubWVudEFzQ29kZSxcbiAgICBFYUNIb3N0LFxuICAgIEVhQ1Byb2plY3RBc0NvZGUsXG4gICAgRW50ZXJwcmlzZUFzQ29kZSxcbn0gZnJvbSAnQHNlbWFudGljanMvY29tbW9uJztcbmltcG9ydCB7IEZlZWRFbnRyeSwgRmVlZEl0ZW0gfSBmcm9tICcuLi9tb2RlbHMvdXNlci1mZWVkLm1vZGVsJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICdAbGN1L2NvbW1vbic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBTYXZlQXBwbGljYXRpb25Bc0NvZGVFdmVudFJlcXVlc3Qge1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbj86IEVhQ0FwcGxpY2F0aW9uQXNDb2RlO1xuXG4gICAgcHVibGljIEFwcGxpY2F0aW9uTG9va3VwPzogc3RyaW5nO1xuXG4gICAgcHVibGljIFByb2plY3RMb29rdXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTYXZlREZTTW9kaWZpZXJFdmVudFJlcXVlc3Qge1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbkxvb2t1cD86IHN0cmluZztcblxuICAgIHB1YmxpYyBNb2RpZmllcj86IEVhQ0RGU01vZGlmaWVyO1xuXG4gICAgcHVibGljIE1vZGlmaWVyTG9va3Vwcz86IEFycmF5PHN0cmluZz47XG5cbiAgICBwdWJsaWMgUHJvamVjdExvb2t1cHM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgY2xhc3MgU2F2ZUVudmlyb25tZW50QXNDb2RlRXZlbnRSZXF1ZXN0IHtcbiAgICBwdWJsaWMgRW50ZXJwcmlzZURhdGFUb2tlbnM/OiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0RhdGFUb2tlbiB9O1xuXG4gICAgcHVibGljIEVudmlyb25tZW50PzogRWFDRW52aXJvbm1lbnRBc0NvZGU7XG5cbiAgICBwdWJsaWMgRW52aXJvbm1lbnRMb29rdXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTYXZlUHJvamVjdEFzQ29kZUV2ZW50UmVxdWVzdCB7XG4gICAgcHVibGljIFByb2plY3Q/OiBFYUNQcm9qZWN0QXNDb2RlO1xuXG4gICAgcHVibGljIFByb2plY3RMb29rdXA/OiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVhQ1NlcnZpY2Uge1xuICAgIC8vICBQcm9wZXJ0aWVzXG4gICAgcHVibGljIGdldCBFZGl0aW5nUHJvamVjdExvb2t1cCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0U2VydmljZS5FZGl0aW5nUHJvamVjdExvb2t1cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IENyZWF0aW5nUHJvamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdFNlcnZpY2UuQ3JlYXRpbmdQcm9qZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBTdGF0ZTogQXBwbGljYXRpb25zRmxvd1N0YXRlO1xuXG4gICAgLy8gIENvbnN0cnVjdG9yc1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcHJvamVjdFNlcnZpY2U6IFByb2plY3RTZXJ2aWNlLFxuICAgICAgICBwcm90ZWN0ZWQgaHR0cDogSHR0cENsaWVudFxuICAgICkge1xuICAgICAgICB0aGlzLlN0YXRlID0gbmV3IEFwcGxpY2F0aW9uc0Zsb3dTdGF0ZSgpO1xuICAgIH1cblxuICAgIC8vICBBUEkgTWV0aG9kc1xuICAgIHB1YmxpYyBDaGVja1VzZXJGZWVkSXRlbShmZWVkSXRlbTogRmVlZEl0ZW0pOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChmZWVkSXRlbS5SZWZyZXNoTGluayk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZUFwcGxpY2F0aW9uKFxuICAgICAgICBhcHBMb29rdXA6IHN0cmluZyxcbiAgICAgICAgYXBwTmFtZTogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlybShgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBhcHBsaWNhdGlvbiAnJHthcHBOYW1lfSc/YClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBlYWM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICAgICAgRW50ZXJwcmlzZUxvb2t1cDogdGhpcy5TdGF0ZS5FYUMuRW50ZXJwcmlzZUxvb2t1cCxcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbnM6IHt9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZWFjLkFwcGxpY2F0aW9uc1thcHBMb29rdXBdID0ge1xuICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uOiB7fSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLkVudGVycHJpc2VBc0NvZGVSZW1vdmFscyhcbiAgICAgICAgICAgICAgICB0aGlzLlN0YXRlLFxuICAgICAgICAgICAgICAgIGVhY1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVEZXZPcHNBY3Rpb24oXG4gICAgICAgIGRvYUxvb2t1cDogc3RyaW5nLFxuICAgICAgICBkb2FOYW1lOiBzdHJpbmdcbiAgICApOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maXJtKFxuICAgICAgICAgICAgICAgIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIEJ1aWxkIFBpcGVsaW5lICcke2RvYU5hbWV9Jz9gXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZWFjOiBFbnRlcnByaXNlQXNDb2RlID0ge1xuICAgICAgICAgICAgICAgIEVudGVycHJpc2VMb29rdXA6IHRoaXMuU3RhdGUuRWFDLkVudGVycHJpc2VMb29rdXAsXG4gICAgICAgICAgICAgICAgRW52aXJvbm1lbnRzOiB7fSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGVhYy5FbnZpcm9ubWVudHNbdGhpcy5TdGF0ZS5FYUMuRW50ZXJwcmlzZS5QcmltYXJ5RW52aXJvbm1lbnRdID0ge1xuICAgICAgICAgICAgICAgIERldk9wc0FjdGlvbnM6IHt9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZWFjLkVudmlyb25tZW50c1tcbiAgICAgICAgICAgICAgICB0aGlzLlN0YXRlLkVhQy5FbnRlcnByaXNlLlByaW1hcnlFbnZpcm9ubWVudFxuICAgICAgICAgICAgXS5EZXZPcHNBY3Rpb25zW2RvYUxvb2t1cF0gPSB7fTtcblxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuRW50ZXJwcmlzZUFzQ29kZVJlbW92YWxzKFxuICAgICAgICAgICAgICAgIHRoaXMuU3RhdGUsXG4gICAgICAgICAgICAgICAgZWFjXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZU1vZGlmaWVyKFxuICAgICAgICBtb2RpZmllckxvb2t1cDogc3RyaW5nLFxuICAgICAgICBtb2RpZmllck5hbWU6IHN0cmluZ1xuICAgICk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpcm0oXG4gICAgICAgICAgICAgICAgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgTW9kaWZpZXIgJyR7bW9kaWZpZXJOYW1lfSc/YFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGVhYzogRW50ZXJwcmlzZUFzQ29kZSA9IHtcbiAgICAgICAgICAgICAgICBFbnRlcnByaXNlTG9va3VwOiB0aGlzLlN0YXRlLkVhQy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgICAgIE1vZGlmaWVyczoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlYWMuTW9kaWZpZXJzW21vZGlmaWVyTG9va3VwXSA9IHt9O1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5FbnRlcnByaXNlQXNDb2RlUmVtb3ZhbHMoXG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZSxcbiAgICAgICAgICAgICAgICBlYWNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlUHJvamVjdChcbiAgICAgICAgcHJvamVjdExvb2t1cDogc3RyaW5nLFxuICAgICAgICBwcm9qZWN0TmFtZTogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlybShgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBQcm9qZWN0ICcke3Byb2plY3ROYW1lfSc/YClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBlYWM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICAgICAgRW50ZXJwcmlzZUxvb2t1cDogdGhpcy5TdGF0ZS5FYUMuRW50ZXJwcmlzZUxvb2t1cCxcbiAgICAgICAgICAgICAgICBQcm9qZWN0czoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlYWMuUHJvamVjdHNbcHJvamVjdExvb2t1cF0gPSB7XG4gICAgICAgICAgICAgICAgUHJvamVjdDoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5FbnRlcnByaXNlQXNDb2RlUmVtb3ZhbHMoXG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZSxcbiAgICAgICAgICAgICAgICBlYWNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlU291cmNlQ29udHJvbChcbiAgICAgICAgc3JjTG9va3VwOiBzdHJpbmcsXG4gICAgICAgIHNyY05hbWU6IHN0cmluZ1xuICAgICk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpcm0oXG4gICAgICAgICAgICAgICAgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgU291cmNlIENvbnRyb2wgJyR7c3JjTmFtZX0nP2BcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBlYWM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICAgICAgRW50ZXJwcmlzZUxvb2t1cDogdGhpcy5TdGF0ZS5FYUMuRW50ZXJwcmlzZUxvb2t1cCxcbiAgICAgICAgICAgICAgICBFbnZpcm9ubWVudHM6IHt9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZWFjLkVudmlyb25tZW50c1t0aGlzLlN0YXRlLkVhQy5FbnRlcnByaXNlLlByaW1hcnlFbnZpcm9ubWVudF0gPSB7XG4gICAgICAgICAgICAgICAgU291cmNlczoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlYWMuRW52aXJvbm1lbnRzW1xuICAgICAgICAgICAgICAgIHRoaXMuU3RhdGUuRWFDLkVudGVycHJpc2UuUHJpbWFyeUVudmlyb25tZW50XG4gICAgICAgICAgICBdLlNvdXJjZXNbc3JjTG9va3VwXSA9IHt9O1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5FbnRlcnByaXNlQXNDb2RlUmVtb3ZhbHMoXG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZSxcbiAgICAgICAgICAgICAgICBlYWNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB0aGlzLmFwcHNGbG93RXZlbnRzU3ZjLkVuc3VyZVVzZXJFbnRlcnByaXNlRXZlbnQuc3Vic2NyaWJlKGFzeW5jICgpID0+IHtcbiAgICAvLyAgIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuRW5zdXJlVXNlckVudGVycHJpc2UodGhpcy5TdGF0ZSk7XG4gICAgLy8gfSk7XG5cbiAgICBwdWJsaWMgYXN5bmMgRW5zdXJlVXNlckVudGVycHJpc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuRW5zdXJlVXNlckVudGVycHJpc2UodGhpcy5TdGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEVudGVycHJpc2VBc0NvZGVSZW1vdmFscyhcbiAgICAgICAgZWFjOiBFbnRlcnByaXNlQXNDb2RlXG4gICAgKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdFNlcnZpY2UuRW50ZXJwcmlzZUFzQ29kZVJlbW92YWxzKHRoaXMuU3RhdGUsIGVhYyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldEFjdGl2ZUVudGVycHJpc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuR2V0QWN0aXZlRW50ZXJwcmlzZSh0aGlzLlN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTG9hZFVzZXJGZWVkKFxuICAgICAgICBwYWdlOiBudW1iZXIsXG4gICAgICAgIHBhZ2VTaXplOiBudW1iZXIsXG4gICAgICAgIGZvckNoZWNrOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5Mb2FkVXNlckZlZWQoXG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICBmb3JDaGVjayxcbiAgICAgICAgICAgIHRoaXMuU3RhdGVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2VuZXJhdGVSb3V0ZWRBcHBsaWNhdGlvbnMoYXBwbGljYXRpb25zOiB7XG4gICAgICAgIFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlO1xuICAgIH0pOiB7XG4gICAgICAgIFtyb3V0ZTogc3RyaW5nXTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9O1xuICAgIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0U2VydmljZS5HZW5lcmF0ZVJvdXRlZEFwcGxpY2F0aW9ucyhcbiAgICAgICAgICAgIGFwcGxpY2F0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuU3RhdGVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgSGFzVmFsaWRDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLkhhc1ZhbGlkQ29ubmVjdGlvbih0aGlzLlN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEVudGVycHJpc2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLkxpc3RFbnRlcnByaXNlcyh0aGlzLlN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTG9hZEVudGVycHJpc2VBc0NvZGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuTG9hZEVudGVycHJpc2VBc0NvZGUodGhpcy5TdGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIFJlbG9hZEZlZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLlN0YXRlLkZlZWRDaGVjaykge1xuICAgICAgICAgICAgdGhpcy5TdGF0ZS5GZWVkID0gdGhpcy5TdGF0ZS5GZWVkQ2hlY2suSXRlbXM7XG5cbiAgICAgICAgICAgIHRoaXMuU3RhdGUuRmVlZEFjdGlvbnMgPSB0aGlzLlN0YXRlLkZlZWRDaGVjay5BY3Rpb25zO1xuXG4gICAgICAgICAgICB0aGlzLlN0YXRlLkZlZWRTb3VyY2VDb250cm9sTG9va3VwcyA9XG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZS5GZWVkQ2hlY2suU291cmNlQ29udHJvbExvb2t1cHM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLlN0YXRlLkZlZWRDaGVjayA9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFNhdmVBcHBsaWNhdGlvbkFzQ29kZShcbiAgICAgICAgcmVxOiBTYXZlQXBwbGljYXRpb25Bc0NvZGVFdmVudFJlcXVlc3RcbiAgICApOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVTYXZlQXBwbGljYXRpb24ocmVxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2F2ZURGU01vZGlmaWVyKFxuICAgICAgICByZXE6IFNhdmVERlNNb2RpZmllckV2ZW50UmVxdWVzdFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZVNhdmVERlNNb2RpZmllcihyZXEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTYXZlRW50ZXJwcmlzZUFzQ29kZShlYWM6IEVudGVycHJpc2VBc0NvZGUpOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5TYXZlRW50ZXJwcmlzZUFzQ29kZSh0aGlzLlN0YXRlLCBlYWMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTYXZlRW52aXJvbm1lbnRBc0NvZGUoXG4gICAgICAgIHJlcTogU2F2ZUVudmlyb25tZW50QXNDb2RlRXZlbnRSZXF1ZXN0XG4gICAgKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlU2F2ZUVudmlyb25tZW50KHJlcSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFNhdmVQcm9qZWN0QXNDb2RlKFxuICAgICAgICByZXE6IFNhdmVQcm9qZWN0QXNDb2RlRXZlbnRSZXF1ZXN0XG4gICAgKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaGFuZGxlU2F2ZVByb2plY3QocmVxLlByb2plY3RMb29rdXAsIHJlcS5Qcm9qZWN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2V0QWN0aXZlRW50ZXJwcmlzZShlbnRMb29rdXA6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLlNldEFjdGl2ZUVudGVycHJpc2UodGhpcy5TdGF0ZSwgZW50TG9va3VwKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2V0Q3JlYXRpbmdQcm9qZWN0KGNyZWF0aW5nUHJvamVjdDogYm9vbGVhbik6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLnByb2plY3RTZXJ2aWNlLlNldENyZWF0aW5nUHJvamVjdChjcmVhdGluZ1Byb2plY3QpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTZXRFZGl0UHJvamVjdFNldHRpbmdzKHByb2plY3RMb29rdXA6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLlNldEVkaXRQcm9qZWN0U2V0dGluZ3MoXG4gICAgICAgICAgICB0aGlzLlN0YXRlLFxuICAgICAgICAgICAgcHJvamVjdExvb2t1cFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTdWJtaXRGZWVkRW50cnkoZW50cnk6IEZlZWRFbnRyeSk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLlN1Ym1pdEZlZWRFbnRyeSh0aGlzLlN0YXRlLCBlbnRyeSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFVucGFja0xvd0NvZGVVbml0KFxuICAgICAgICByZXE6IFVucGFja0xvd0NvZGVVbml0UmVxdWVzdFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maXJtKFxuICAgICAgICAgICAgICAgIGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5wYWNrIGFwcGxpY2F0aW9uICcke3JlcS5BcHBsaWNhdGlvbk5hbWV9JyB3aXRoIHZlcnNpb24gJyR7cmVxLlZlcnNpb259Jz9gXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5VbnBhY2tMb3dDb2RlVW5pdCh0aGlzLlN0YXRlLCByZXEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gIEhlbHBlcnNcbiAgICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlU2F2ZUFwcGxpY2F0aW9uKFxuICAgICAgICByZXE6IFNhdmVBcHBsaWNhdGlvbkFzQ29kZUV2ZW50UmVxdWVzdFxuICAgICk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIGNvbnN0IHNhdmVFYUM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICBFbnRlcnByaXNlTG9va3VwOiB0aGlzLlN0YXRlLkVhQy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgQXBwbGljYXRpb25zOiB7fSxcbiAgICAgICAgICAgIFByb2plY3RzOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVxLlByb2plY3RMb29rdXApIHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUHJvaiA9IHtcbiAgICAgICAgICAgICAgICBbcmVxLlByb2plY3RMb29rdXBdOiB7XG4gICAgICAgICAgICAgICAgICAgIEFwcGxpY2F0aW9uTG9va3VwczogW3JlcS5BcHBsaWNhdGlvbkxvb2t1cF0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHNhdmVFYUMuUHJvamVjdHMgPSBleGlzdGluZ1Byb2o7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxLkFwcGxpY2F0aW9uKSB7XG4gICAgICAgICAgICBzYXZlRWFDLkFwcGxpY2F0aW9uc1tyZXEuQXBwbGljYXRpb25Mb29rdXBdID0gcmVxLkFwcGxpY2F0aW9uO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2F2aW5nIGFwcDogXCIsIHNhdmVFYUMpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuU2F2ZUVudGVycHJpc2VBc0NvZGUoXG4gICAgICAgICAgICB0aGlzLlN0YXRlLFxuICAgICAgICAgICAgc2F2ZUVhQ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhc3luYyBoYW5kbGVTYXZlREZTTW9kaWZpZXIoXG4gICAgICAgIHJlcTogU2F2ZURGU01vZGlmaWVyRXZlbnRSZXF1ZXN0XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IHNhdmVFYUM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICBFbnRlcnByaXNlTG9va3VwOiB0aGlzLlN0YXRlLkVhQy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgTW9kaWZpZXJzOiB7fSxcbiAgICAgICAgICAgIFByb2plY3RzOiB7fSxcbiAgICAgICAgICAgIEFwcGxpY2F0aW9uczoge30sXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHJlcS5Nb2RpZmllcikge1xuICAgICAgICAgICAgc2F2ZUVhQy5Nb2RpZmllcnNbcmVxLk1vZGlmaWVyTG9va3Vwc1swXV0gPSByZXEuTW9kaWZpZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxLlByb2plY3RMb29rdXBzKSB7XG4gICAgICAgICAgICByZXEuUHJvamVjdExvb2t1cHMuZm9yRWFjaCgobG9va3VwKSA9PiB7XG4gICAgICAgICAgICAgICAgc2F2ZUVhQy5Qcm9qZWN0c1tsb29rdXBdID0ge1xuICAgICAgICAgICAgICAgICAgICBNb2RpZmllckxvb2t1cHM6IHJlcS5Nb2RpZmllckxvb2t1cHMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlcS5BcHBsaWNhdGlvbkxvb2t1cCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0FQUExPb2t1cDogJywgcmVxLkFwcGxpY2F0aW9uTG9va3VwKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzYXZlRUFDOiAnLCBzYXZlRWFDKTtcbiAgICAgICAgICAgIHNhdmVFYUMuQXBwbGljYXRpb25zW3JlcS5BcHBsaWNhdGlvbkxvb2t1cF0gPSB7XG4gICAgICAgICAgICAgICAgTW9kaWZpZXJMb29rdXBzOiByZXEuTW9kaWZpZXJMb29rdXBzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuU2F2ZUVudGVycHJpc2VBc0NvZGUodGhpcy5TdGF0ZSwgc2F2ZUVhQyk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVNhdmVFbnZpcm9ubWVudChcbiAgICAgICAgcmVxOiBTYXZlRW52aXJvbm1lbnRBc0NvZGVFdmVudFJlcXVlc3RcbiAgICApOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICBjb25zdCBzYXZlRWFDOiBFbnRlcnByaXNlQXNDb2RlID0ge1xuICAgICAgICAgICAgRW50ZXJwcmlzZUxvb2t1cDogdGhpcy5TdGF0ZT8uRWFDPy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgRGF0YVRva2Vuczoge30sXG4gICAgICAgICAgICBFbnZpcm9ubWVudHM6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXEuRW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIHNhdmVFYUMuRW52aXJvbm1lbnRzW3JlcS5FbnZpcm9ubWVudExvb2t1cF0gPSByZXEuRW52aXJvbm1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxLkVudGVycHJpc2VEYXRhVG9rZW5zKSB7XG4gICAgICAgICAgICBzYXZlRWFDLkRhdGFUb2tlbnMgPSByZXEuRW50ZXJwcmlzZURhdGFUb2tlbnM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5TYXZlRW50ZXJwcmlzZUFzQ29kZShcbiAgICAgICAgICAgIHRoaXMuU3RhdGUsXG4gICAgICAgICAgICBzYXZlRWFDXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVNhdmVQcm9qZWN0KFxuICAgICAgICBwcm9qZWN0TG9va3VwOiBzdHJpbmcsXG4gICAgICAgIHByb2plY3Q6IEVhQ1Byb2plY3RBc0NvZGVcbiAgICApOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICBjb25zdCBwcm9qSG9zdHM6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDSG9zdCB9ID0ge307XG5cbiAgICAgICAgcHJvamVjdD8uSG9zdHM/LmZvckVhY2goKGhvc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgcHJvakhvc3RzW2hvc3RdID0gdGhpcy5TdGF0ZS5FYUMuSG9zdHNbaG9zdF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNhdmVFYUM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICBFbnRlcnByaXNlTG9va3VwOiB0aGlzLlN0YXRlLkVhQy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgRW50ZXJwcmlzZToge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuU3RhdGUuRWFDLkVudGVycHJpc2UsXG4gICAgICAgICAgICAgICAgUHJpbWFyeUhvc3Q6IHByb2plY3QuSG9zdHNbMF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSG9zdHM6IHByb2pIb3N0cyxcbiAgICAgICAgICAgIC8vIFByb3ZpZGVyczogdGhpcy5TdGF0ZS5FYUMuUHJvdmlkZXJzLCAgLy8gIFRPRE86ICBSZW1vdmUgYWZ0ZXIgYWxsIHByb3ZpZGVycyBBREIyQydzIGhhdmUgYmVlbiB1cGdyYWRlZFxuICAgICAgICAgICAgUHJvamVjdHM6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHNhdmVFYUMuUHJvamVjdHNbcHJvamVjdExvb2t1cF0gPSBwcm9qZWN0O1xuXG4gICAgICAgIGxldCBzdGF0dXMgPSBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLlNhdmVFbnRlcnByaXNlQXNDb2RlKFxuICAgICAgICAgICAgdGhpcy5TdGF0ZSxcbiAgICAgICAgICAgIHNhdmVFYUNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLlNldEVkaXRQcm9qZWN0U2V0dGluZ3MocHJvamVjdExvb2t1cCk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICB9XG59XG4iXX0=
|
|
250
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWFjLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9lYWMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFDSCxxQkFBcUIsR0FFeEIsTUFBTSxrQ0FBa0MsQ0FBQztBQWExQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDOzs7O0FBRW5ELE1BQU0sT0FBTyxpQ0FBaUM7Q0FNN0M7QUFFRCxNQUFNLE9BQU8sMkJBQTJCO0NBUXZDO0FBRUQsTUFBTSxPQUFPLGlDQUFpQztDQU03QztBQUVELE1BQU0sT0FBTyw2QkFBNkI7Q0FJekM7QUFLRCxNQUFNLE9BQU8sVUFBVTtJQVluQixnQkFBZ0I7SUFDaEIsWUFDYyxjQUE4QixFQUM5QixJQUFnQjtRQURoQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUUxQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBZSxDQUM1QixJQUFJLHFCQUFxQixFQUFFLENBQzlCLENBQUM7SUFDTixDQUFDO0lBbkJELGNBQWM7SUFDZCxJQUFXLG9CQUFvQjtRQUMzQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUM7SUFDcEQsQ0FBQztJQUVELElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO0lBQy9DLENBQUM7SUFjRCxlQUFlO0lBQ1IsaUJBQWlCLENBQUMsUUFBa0I7UUFDdkMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxpQkFBaUIsQ0FDMUIsU0FBaUIsRUFDakIsT0FBZTtRQUVm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QUssQ0FBQyxHQUFHLENBQUMsZ0JBQWdCO1lBQ3ZELFVBQVUsRUFBRTtnQkFDUixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxVQUFVO2dCQUNsQyxXQUFXLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7YUFDaEM7WUFDRCxLQUFLLEVBQUUsU0FBUztZQUNoQix5R0FBeUc7WUFDekcsUUFBUSxFQUFFLEVBQUU7U0FDZixDQUFDO1FBRUYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxPQUFPLENBQUM7UUFFMUMsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssRUFDaEIsT0FBTyxDQUNWLENBQUM7UUFFRixJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFM0MsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQzs7dUdBN1pRLFVBQVU7MkdBQVYsVUFBVSxjQUZQLE1BQU07MkZBRVQsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQcm9qZWN0U2VydmljZSB9IGZyb20gJy4vcHJvamVjdC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gICAgQXBwbGljYXRpb25zRmxvd1N0YXRlLFxuICAgIFVucGFja0xvd0NvZGVVbml0UmVxdWVzdCxcbn0gZnJvbSAnLi4vc3RhdGUvYXBwbGljYXRpb25zLWZsb3cuc3RhdGUnO1xuaW1wb3J0IHtcbiAgICBFYUNBcHBsaWNhdGlvbkFzQ29kZSxcbiAgICBFYUNEYXRhVG9rZW4sXG4gICAgRWFDREZTTW9kaWZpZXIsXG4gICAgRWFDRW52aXJvbm1lbnRBc0NvZGUsXG4gICAgRWFDSG9zdCxcbiAgICBFYUNQcm9qZWN0QXNDb2RlLFxuICAgIEVudGVycHJpc2VBc0NvZGUsXG59IGZyb20gJ0BzZW1hbnRpY2pzL2NvbW1vbic7XG5pbXBvcnQgeyBGZWVkRW50cnksIEZlZWRJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3VzZXItZmVlZC5tb2RlbCc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnQGxjdS9jb21tb24nO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjbGFzcyBTYXZlQXBwbGljYXRpb25Bc0NvZGVFdmVudFJlcXVlc3Qge1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbj86IEVhQ0FwcGxpY2F0aW9uQXNDb2RlO1xuXG4gICAgcHVibGljIEFwcGxpY2F0aW9uTG9va3VwPzogc3RyaW5nO1xuXG4gICAgcHVibGljIFByb2plY3RMb29rdXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTYXZlREZTTW9kaWZpZXJFdmVudFJlcXVlc3Qge1xuICAgIHB1YmxpYyBBcHBsaWNhdGlvbkxvb2t1cD86IHN0cmluZztcblxuICAgIHB1YmxpYyBNb2RpZmllcj86IEVhQ0RGU01vZGlmaWVyO1xuXG4gICAgcHVibGljIE1vZGlmaWVyTG9va3Vwcz86IEFycmF5PHN0cmluZz47XG5cbiAgICBwdWJsaWMgUHJvamVjdExvb2t1cHM/OiBBcnJheTxzdHJpbmc+O1xufVxuXG5leHBvcnQgY2xhc3MgU2F2ZUVudmlyb25tZW50QXNDb2RlRXZlbnRSZXF1ZXN0IHtcbiAgICBwdWJsaWMgRW50ZXJwcmlzZURhdGFUb2tlbnM/OiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0RhdGFUb2tlbiB9O1xuXG4gICAgcHVibGljIEVudmlyb25tZW50PzogRWFDRW52aXJvbm1lbnRBc0NvZGU7XG5cbiAgICBwdWJsaWMgRW52aXJvbm1lbnRMb29rdXA/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBTYXZlUHJvamVjdEFzQ29kZUV2ZW50UmVxdWVzdCB7XG4gICAgcHVibGljIFByb2plY3Q/OiBFYUNQcm9qZWN0QXNDb2RlO1xuXG4gICAgcHVibGljIFByb2plY3RMb29rdXA/OiBzdHJpbmc7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEVhQ1NlcnZpY2Uge1xuICAgIC8vICBQcm9wZXJ0aWVzXG4gICAgcHVibGljIGdldCBFZGl0aW5nUHJvamVjdExvb2t1cCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0U2VydmljZS5FZGl0aW5nUHJvamVjdExvb2t1cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IENyZWF0aW5nUHJvamVjdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvamVjdFNlcnZpY2UuQ3JlYXRpbmdQcm9qZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBTdGF0ZTogQmVoYXZpb3JTdWJqZWN0PEFwcGxpY2F0aW9uc0Zsb3dTdGF0ZT47XG5cbiAgICAvLyAgQ29uc3RydWN0b3JzXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByb3RlY3RlZCBwcm9qZWN0U2VydmljZTogUHJvamVjdFNlcnZpY2UsXG4gICAgICAgIHByb3RlY3RlZCBodHRwOiBIdHRwQ2xpZW50XG4gICAgKSB7XG4gICAgICAgIHRoaXMuU3RhdGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFwcGxpY2F0aW9uc0Zsb3dTdGF0ZT4oXG4gICAgICAgICAgICBuZXcgQXBwbGljYXRpb25zRmxvd1N0YXRlKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyAgQVBJIE1ldGhvZHNcbiAgICBwdWJsaWMgQ2hlY2tVc2VyRmVlZEl0ZW0oZmVlZEl0ZW06IEZlZWRJdGVtKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoZmVlZEl0ZW0uUmVmcmVzaExpbmspO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBEZWxldGVBcHBsaWNhdGlvbihcbiAgICAgICAgYXBwTG9va3VwOiBzdHJpbmcsXG4gICAgICAgIGFwcE5hbWU6IHN0cmluZ1xuICAgICk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpcm0oYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYXBwbGljYXRpb24gJyR7YXBwTmFtZX0nP2ApXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZWFjOiBFbnRlcnByaXNlQXNDb2RlID0ge1xuICAgICAgICAgICAgICAgIEVudGVycHJpc2VMb29rdXA6IHRoaXMuU3RhdGU/LnZhbHVlPy5FYUM/LkVudGVycHJpc2VMb29rdXAsXG4gICAgICAgICAgICAgICAgQXBwbGljYXRpb25zOiB7fSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGVhYy5BcHBsaWNhdGlvbnNbYXBwTG9va3VwXSA9IHtcbiAgICAgICAgICAgICAgICBBcHBsaWNhdGlvbjoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5FbnRlcnByaXNlQXNDb2RlUmVtb3ZhbHMoXG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICBlYWNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlRGV2T3BzQWN0aW9uKFxuICAgICAgICBkb2FMb29rdXA6IHN0cmluZyxcbiAgICAgICAgZG9hTmFtZTogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlybShcbiAgICAgICAgICAgICAgICBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBCdWlsZCBQaXBlbGluZSAnJHtkb2FOYW1lfSc/YFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGVhYzogRW50ZXJwcmlzZUFzQ29kZSA9IHtcbiAgICAgICAgICAgICAgICBFbnRlcnByaXNlTG9va3VwOiB0aGlzLlN0YXRlLnZhbHVlLkVhQy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgICAgIEVudmlyb25tZW50czoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlYWMuRW52aXJvbm1lbnRzW1xuICAgICAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWUuRWFDLkVudGVycHJpc2UuUHJpbWFyeUVudmlyb25tZW50XG4gICAgICAgICAgICBdID0ge1xuICAgICAgICAgICAgICAgIERldk9wc0FjdGlvbnM6IHt9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZWFjLkVudmlyb25tZW50c1tcbiAgICAgICAgICAgICAgICB0aGlzLlN0YXRlLnZhbHVlLkVhQy5FbnRlcnByaXNlLlByaW1hcnlFbnZpcm9ubWVudFxuICAgICAgICAgICAgXS5EZXZPcHNBY3Rpb25zW2RvYUxvb2t1cF0gPSB7fTtcblxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuRW50ZXJwcmlzZUFzQ29kZVJlbW92YWxzKFxuICAgICAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWUsXG4gICAgICAgICAgICAgICAgZWFjXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIERlbGV0ZU1vZGlmaWVyKFxuICAgICAgICBtb2RpZmllckxvb2t1cDogc3RyaW5nLFxuICAgICAgICBtb2RpZmllck5hbWU6IHN0cmluZ1xuICAgICk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpcm0oXG4gICAgICAgICAgICAgICAgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgTW9kaWZpZXIgJyR7bW9kaWZpZXJOYW1lfSc/YFxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnN0IGVhYzogRW50ZXJwcmlzZUFzQ29kZSA9IHtcbiAgICAgICAgICAgICAgICBFbnRlcnByaXNlTG9va3VwOiB0aGlzLlN0YXRlLnZhbHVlLkVhQy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgICAgIE1vZGlmaWVyczoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlYWMuTW9kaWZpZXJzW21vZGlmaWVyTG9va3VwXSA9IHt9O1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5FbnRlcnByaXNlQXNDb2RlUmVtb3ZhbHMoXG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICBlYWNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlUHJvamVjdChcbiAgICAgICAgcHJvamVjdExvb2t1cDogc3RyaW5nLFxuICAgICAgICBwcm9qZWN0TmFtZTogc3RyaW5nXG4gICAgKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlybShgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBQcm9qZWN0ICcke3Byb2plY3ROYW1lfSc/YClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBlYWM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICAgICAgRW50ZXJwcmlzZUxvb2t1cDogdGhpcy5TdGF0ZS52YWx1ZS5FYUMuRW50ZXJwcmlzZUxvb2t1cCxcbiAgICAgICAgICAgICAgICBQcm9qZWN0czoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBlYWMuUHJvamVjdHNbcHJvamVjdExvb2t1cF0gPSB7XG4gICAgICAgICAgICAgICAgUHJvamVjdDoge30sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5FbnRlcnByaXNlQXNDb2RlUmVtb3ZhbHMoXG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICBlYWNcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRGVsZXRlU291cmNlQ29udHJvbChcbiAgICAgICAgc3JjTG9va3VwOiBzdHJpbmcsXG4gICAgICAgIHNyY05hbWU6IHN0cmluZ1xuICAgICk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpcm0oXG4gICAgICAgICAgICAgICAgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgU291cmNlIENvbnRyb2wgJyR7c3JjTmFtZX0nP2BcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBlYWM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICAgICAgRW50ZXJwcmlzZUxvb2t1cDogdGhpcy5TdGF0ZS52YWx1ZS5FYUMuRW50ZXJwcmlzZUxvb2t1cCxcbiAgICAgICAgICAgICAgICBFbnZpcm9ubWVudHM6IHt9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgZWFjLkVudmlyb25tZW50c1tcbiAgICAgICAgICAgICAgICB0aGlzLlN0YXRlLnZhbHVlLkVhQy5FbnRlcnByaXNlLlByaW1hcnlFbnZpcm9ubWVudFxuICAgICAgICAgICAgXSA9IHtcbiAgICAgICAgICAgICAgICBTb3VyY2VzOiB7fSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGVhYy5FbnZpcm9ubWVudHNbXG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZS52YWx1ZS5FYUMuRW50ZXJwcmlzZS5QcmltYXJ5RW52aXJvbm1lbnRcbiAgICAgICAgICAgIF0uU291cmNlc1tzcmNMb29rdXBdID0ge307XG5cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLkVudGVycHJpc2VBc0NvZGVSZW1vdmFscyhcbiAgICAgICAgICAgICAgICB0aGlzLlN0YXRlLnZhbHVlLFxuICAgICAgICAgICAgICAgIGVhY1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMuYXBwc0Zsb3dFdmVudHNTdmMuRW5zdXJlVXNlckVudGVycHJpc2VFdmVudC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4ge1xuICAgIC8vICAgYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5FbnN1cmVVc2VyRW50ZXJwcmlzZSh0aGlzLlN0YXRlKTtcbiAgICAvLyB9KTtcblxuICAgIHB1YmxpYyBhc3luYyBFbnN1cmVVc2VyRW50ZXJwcmlzZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5FbnN1cmVVc2VyRW50ZXJwcmlzZSh0aGlzLlN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgRW50ZXJwcmlzZUFzQ29kZVJlbW92YWxzKFxuICAgICAgICBlYWM6IEVudGVycHJpc2VBc0NvZGVcbiAgICApOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0U2VydmljZS5FbnRlcnByaXNlQXNDb2RlUmVtb3ZhbHMoXG4gICAgICAgICAgICB0aGlzLlN0YXRlLnZhbHVlLFxuICAgICAgICAgICAgZWFjXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIEdldEFjdGl2ZUVudGVycHJpc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuR2V0QWN0aXZlRW50ZXJwcmlzZSh0aGlzLlN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTG9hZFVzZXJGZWVkKFxuICAgICAgICBwYWdlOiBudW1iZXIsXG4gICAgICAgIHBhZ2VTaXplOiBudW1iZXIsXG4gICAgICAgIGZvckNoZWNrOiBib29sZWFuID0gZmFsc2VcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5Mb2FkVXNlckZlZWQoXG4gICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgcGFnZVNpemUsXG4gICAgICAgICAgICBmb3JDaGVjayxcbiAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2VuZXJhdGVSb3V0ZWRBcHBsaWNhdGlvbnMoYXBwbGljYXRpb25zOiB7XG4gICAgICAgIFtsb29rdXA6IHN0cmluZ106IEVhQ0FwcGxpY2F0aW9uQXNDb2RlO1xuICAgIH0pOiB7XG4gICAgICAgIFtyb3V0ZTogc3RyaW5nXTogeyBbbG9va3VwOiBzdHJpbmddOiBFYUNBcHBsaWNhdGlvbkFzQ29kZSB9O1xuICAgIH0ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9qZWN0U2VydmljZS5HZW5lcmF0ZVJvdXRlZEFwcGxpY2F0aW9ucyhcbiAgICAgICAgICAgIGFwcGxpY2F0aW9ucyxcbiAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgSGFzVmFsaWRDb25uZWN0aW9uKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLkhhc1ZhbGlkQ29ubmVjdGlvbih0aGlzLlN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTGlzdEVudGVycHJpc2VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLkxpc3RFbnRlcnByaXNlcyh0aGlzLlN0YXRlLnZhbHVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgTG9hZEVudGVycHJpc2VBc0NvZGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGF3YWl0IHRoaXMucHJvamVjdFNlcnZpY2UuTG9hZEVudGVycHJpc2VBc0NvZGUodGhpcy5TdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIFJlbG9hZEZlZWQoKSB7XG4gICAgICAgIGlmICh0aGlzLlN0YXRlLnZhbHVlLkZlZWRDaGVjaykge1xuICAgICAgICAgICAgdGhpcy5TdGF0ZS52YWx1ZS5GZWVkID0gdGhpcy5TdGF0ZS52YWx1ZS5GZWVkQ2hlY2suSXRlbXM7XG5cbiAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWUuRmVlZEFjdGlvbnMgPSB0aGlzLlN0YXRlLnZhbHVlLkZlZWRDaGVjay5BY3Rpb25zO1xuXG4gICAgICAgICAgICB0aGlzLlN0YXRlLnZhbHVlLkZlZWRTb3VyY2VDb250cm9sTG9va3VwcyA9XG4gICAgICAgICAgICAgICAgdGhpcy5TdGF0ZS52YWx1ZS5GZWVkQ2hlY2suU291cmNlQ29udHJvbExvb2t1cHM7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLlN0YXRlLnZhbHVlLkZlZWRDaGVjayA9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFNhdmVBcHBsaWNhdGlvbkFzQ29kZShcbiAgICAgICAgcmVxOiBTYXZlQXBwbGljYXRpb25Bc0NvZGVFdmVudFJlcXVlc3RcbiAgICApOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5oYW5kbGVTYXZlQXBwbGljYXRpb24ocmVxKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2F2ZURGU01vZGlmaWVyKFxuICAgICAgICByZXE6IFNhdmVERlNNb2RpZmllckV2ZW50UmVxdWVzdFxuICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZVNhdmVERlNNb2RpZmllcihyZXEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTYXZlRW50ZXJwcmlzZUFzQ29kZShlYWM6IEVudGVycHJpc2VBc0NvZGUpOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5TYXZlRW50ZXJwcmlzZUFzQ29kZShcbiAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWUsXG4gICAgICAgICAgICBlYWNcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2F2ZUVudmlyb25tZW50QXNDb2RlKFxuICAgICAgICByZXE6IFNhdmVFbnZpcm9ubWVudEFzQ29kZUV2ZW50UmVxdWVzdFxuICAgICk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVNhdmVFbnZpcm9ubWVudChyZXEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBTYXZlUHJvamVjdEFzQ29kZShcbiAgICAgICAgcmVxOiBTYXZlUHJvamVjdEFzQ29kZUV2ZW50UmVxdWVzdFxuICAgICk6IFByb21pc2U8U3RhdHVzPiB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmhhbmRsZVNhdmVQcm9qZWN0KHJlcS5Qcm9qZWN0TG9va3VwLCByZXEuUHJvamVjdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFNldEFjdGl2ZUVudGVycHJpc2UoZW50TG9va3VwOiBhbnkpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5TZXRBY3RpdmVFbnRlcnByaXNlKHRoaXMuU3RhdGUudmFsdWUsIGVudExvb2t1cCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIFNldENyZWF0aW5nUHJvamVjdChjcmVhdGluZ1Byb2plY3Q6IGJvb2xlYW4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5wcm9qZWN0U2VydmljZS5TZXRDcmVhdGluZ1Byb2plY3QoY3JlYXRpbmdQcm9qZWN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU2V0RWRpdFByb2plY3RTZXR0aW5ncyhwcm9qZWN0TG9va3VwOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5TZXRFZGl0UHJvamVjdFNldHRpbmdzKFxuICAgICAgICAgICAgdGhpcy5TdGF0ZS52YWx1ZSxcbiAgICAgICAgICAgIHByb2plY3RMb29rdXBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgU3VibWl0RmVlZEVudHJ5KGVudHJ5OiBGZWVkRW50cnkpOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5TdWJtaXRGZWVkRW50cnkoXG4gICAgICAgICAgICB0aGlzLlN0YXRlLnZhbHVlLFxuICAgICAgICAgICAgZW50cnlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgVW5wYWNrTG93Q29kZVVuaXQoXG4gICAgICAgIHJlcTogVW5wYWNrTG93Q29kZVVuaXRSZXF1ZXN0XG4gICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpcm0oXG4gICAgICAgICAgICAgICAgYEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bnBhY2sgYXBwbGljYXRpb24gJyR7cmVxLkFwcGxpY2F0aW9uTmFtZX0nIHdpdGggdmVyc2lvbiAnJHtyZXEuVmVyc2lvbn0nP2BcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLlVucGFja0xvd0NvZGVVbml0KHRoaXMuU3RhdGUudmFsdWUsIHJlcSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAgSGVscGVyc1xuICAgIHByb3RlY3RlZCBhc3luYyBoYW5kbGVTYXZlQXBwbGljYXRpb24oXG4gICAgICAgIHJlcTogU2F2ZUFwcGxpY2F0aW9uQXNDb2RlRXZlbnRSZXF1ZXN0XG4gICAgKTogUHJvbWlzZTxTdGF0dXM+IHtcbiAgICAgICAgY29uc3Qgc2F2ZUVhQzogRW50ZXJwcmlzZUFzQ29kZSA9IHtcbiAgICAgICAgICAgIEVudGVycHJpc2VMb29rdXA6IHRoaXMuU3RhdGUudmFsdWUuRWFDLkVudGVycHJpc2VMb29rdXAsXG4gICAgICAgICAgICBBcHBsaWNhdGlvbnM6IHt9LFxuICAgICAgICAgICAgUHJvamVjdHM6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXEuUHJvamVjdExvb2t1cCkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdQcm9qID0ge1xuICAgICAgICAgICAgICAgIFtyZXEuUHJvamVjdExvb2t1cF06IHtcbiAgICAgICAgICAgICAgICAgICAgQXBwbGljYXRpb25Mb29rdXBzOiBbcmVxLkFwcGxpY2F0aW9uTG9va3VwXSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgc2F2ZUVhQy5Qcm9qZWN0cyA9IGV4aXN0aW5nUHJvajtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXEuQXBwbGljYXRpb24pIHtcbiAgICAgICAgICAgIHNhdmVFYUMuQXBwbGljYXRpb25zW3JlcS5BcHBsaWNhdGlvbkxvb2t1cF0gPSByZXEuQXBwbGljYXRpb247XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5TYXZlRW50ZXJwcmlzZUFzQ29kZShcbiAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWUsXG4gICAgICAgICAgICBzYXZlRWFDXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVNhdmVERlNNb2RpZmllcihcbiAgICAgICAgcmVxOiBTYXZlREZTTW9kaWZpZXJFdmVudFJlcXVlc3RcbiAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgc2F2ZUVhQzogRW50ZXJwcmlzZUFzQ29kZSA9IHtcbiAgICAgICAgICAgIEVudGVycHJpc2VMb29rdXA6IHRoaXMuU3RhdGUudmFsdWUuRWFDLkVudGVycHJpc2VMb29rdXAsXG4gICAgICAgICAgICBNb2RpZmllcnM6IHt9LFxuICAgICAgICAgICAgUHJvamVjdHM6IHt9LFxuICAgICAgICAgICAgQXBwbGljYXRpb25zOiB7fSxcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocmVxLk1vZGlmaWVyKSB7XG4gICAgICAgICAgICBzYXZlRWFDLk1vZGlmaWVyc1tyZXEuTW9kaWZpZXJMb29rdXBzWzBdXSA9IHJlcS5Nb2RpZmllcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXEuUHJvamVjdExvb2t1cHMpIHtcbiAgICAgICAgICAgIHJlcS5Qcm9qZWN0TG9va3Vwcy5mb3JFYWNoKChsb29rdXApID0+IHtcbiAgICAgICAgICAgICAgICBzYXZlRWFDLlByb2plY3RzW2xvb2t1cF0gPSB7XG4gICAgICAgICAgICAgICAgICAgIE1vZGlmaWVyTG9va3VwczogcmVxLk1vZGlmaWVyTG9va3VwcyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxLkFwcGxpY2F0aW9uTG9va3VwKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnQVBQTE9va3VwOiAnLCByZXEuQXBwbGljYXRpb25Mb29rdXApO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3NhdmVFQUM6ICcsIHNhdmVFYUMpO1xuICAgICAgICAgICAgc2F2ZUVhQy5BcHBsaWNhdGlvbnNbcmVxLkFwcGxpY2F0aW9uTG9va3VwXSA9IHtcbiAgICAgICAgICAgICAgICBNb2RpZmllckxvb2t1cHM6IHJlcS5Nb2RpZmllckxvb2t1cHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5TYXZlRW50ZXJwcmlzZUFzQ29kZShcbiAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWUsXG4gICAgICAgICAgICBzYXZlRWFDXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVNhdmVFbnZpcm9ubWVudChcbiAgICAgICAgcmVxOiBTYXZlRW52aXJvbm1lbnRBc0NvZGVFdmVudFJlcXVlc3RcbiAgICApOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICBjb25zdCBzYXZlRWFDOiBFbnRlcnByaXNlQXNDb2RlID0ge1xuICAgICAgICAgICAgRW50ZXJwcmlzZUxvb2t1cDogdGhpcy5TdGF0ZT8udmFsdWUuRWFDPy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgRGF0YVRva2Vuczoge30sXG4gICAgICAgICAgICBFbnZpcm9ubWVudHM6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChyZXEuRW52aXJvbm1lbnQpIHtcbiAgICAgICAgICAgIHNhdmVFYUMuRW52aXJvbm1lbnRzW3JlcS5FbnZpcm9ubWVudExvb2t1cF0gPSByZXEuRW52aXJvbm1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVxLkVudGVycHJpc2VEYXRhVG9rZW5zKSB7XG4gICAgICAgICAgICBzYXZlRWFDLkRhdGFUb2tlbnMgPSByZXEuRW50ZXJwcmlzZURhdGFUb2tlbnM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9qZWN0U2VydmljZS5TYXZlRW50ZXJwcmlzZUFzQ29kZShcbiAgICAgICAgICAgIHRoaXMuU3RhdGUudmFsdWUsXG4gICAgICAgICAgICBzYXZlRWFDXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZVNhdmVQcm9qZWN0KFxuICAgICAgICBwcm9qZWN0TG9va3VwOiBzdHJpbmcsXG4gICAgICAgIHByb2plY3Q6IEVhQ1Byb2plY3RBc0NvZGVcbiAgICApOiBQcm9taXNlPFN0YXR1cz4ge1xuICAgICAgICBjb25zdCBwcm9qSG9zdHM6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDSG9zdCB9ID0ge307XG5cbiAgICAgICAgcHJvamVjdD8uSG9zdHM/LmZvckVhY2goKGhvc3Q6IGFueSkgPT4ge1xuICAgICAgICAgICAgcHJvakhvc3RzW2hvc3RdID0gdGhpcy5TdGF0ZS52YWx1ZS5FYUMuSG9zdHNbaG9zdF07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHNhdmVFYUM6IEVudGVycHJpc2VBc0NvZGUgPSB7XG4gICAgICAgICAgICBFbnRlcnByaXNlTG9va3VwOiB0aGlzLlN0YXRlLnZhbHVlLkVhQy5FbnRlcnByaXNlTG9va3VwLFxuICAgICAgICAgICAgRW50ZXJwcmlzZToge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuU3RhdGUudmFsdWUuRWFDLkVudGVycHJpc2UsXG4gICAgICAgICAgICAgICAgUHJpbWFyeUhvc3Q6IHByb2plY3QuSG9zdHNbMF0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgSG9zdHM6IHByb2pIb3N0cyxcbiAgICAgICAgICAgIC8vIFByb3ZpZGVyczogdGhpcy5TdGF0ZS5FYUMuUHJvdmlkZXJzLCAgLy8gIFRPRE86ICBSZW1vdmUgYWZ0ZXIgYWxsIHByb3ZpZGVycyBBREIyQydzIGhhdmUgYmVlbiB1cGdyYWRlZFxuICAgICAgICAgICAgUHJvamVjdHM6IHt9LFxuICAgICAgICB9O1xuXG4gICAgICAgIHNhdmVFYUMuUHJvamVjdHNbcHJvamVjdExvb2t1cF0gPSBwcm9qZWN0O1xuXG4gICAgICAgIGxldCBzdGF0dXMgPSBhd2FpdCB0aGlzLnByb2plY3RTZXJ2aWNlLlNhdmVFbnRlcnByaXNlQXNDb2RlKFxuICAgICAgICAgICAgdGhpcy5TdGF0ZS52YWx1ZSxcbiAgICAgICAgICAgIHNhdmVFYUNcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLlNldEVkaXRQcm9qZWN0U2V0dGluZ3MocHJvamVjdExvb2t1cCk7XG5cbiAgICAgICAgcmV0dXJuIHN0YXR1cztcbiAgICB9XG59XG4iXX0=
|