@mediusinc/mng-commons 0.13.0 → 0.14.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.
- package/esm2020/lib/api/utils/medius-rest.util.mjs +8 -3
- package/esm2020/lib/components/action/action.component.mjs +17 -4
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +1 -1
- package/esm2020/lib/components/action/models/action-execution.model.mjs +6 -1
- package/esm2020/lib/components/action/models/index.mjs +2 -1
- package/esm2020/lib/components/action/models/tableview-action-default-categories.model.mjs +11 -0
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +1 -1
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +17 -10
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +5 -13
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +5 -2
- package/esm2020/lib/components/tableview/table/table.component.mjs +48 -20
- package/esm2020/lib/components/tableview/tableview.component.mjs +9 -3
- package/esm2020/lib/data-providers/table.data-provider.mjs +9 -2
- package/esm2020/lib/data-providers/tableview.data-provider.mjs +30 -2
- package/esm2020/lib/descriptors/action.descriptor.mjs +11 -1
- package/esm2020/lib/descriptors/column.descriptor.mjs +106 -29
- package/esm2020/lib/descriptors/editor.descriptor.mjs +109 -7
- package/esm2020/lib/descriptors/field.descriptor.mjs +38 -4
- package/esm2020/lib/descriptors/filter.descriptor.mjs +13 -6
- package/esm2020/lib/descriptors/index.mjs +2 -2
- package/esm2020/lib/descriptors/table.descriptor.mjs +282 -16
- package/esm2020/lib/descriptors/tableview.descriptor.mjs +175 -3
- package/esm2020/lib/descriptors/types/table.type.mjs +10 -1
- package/esm2020/lib/mng-commons.module.mjs +5 -1
- package/esm2020/lib/models/index.mjs +2 -1
- package/esm2020/lib/models/tableview-attr.model.mjs +2 -0
- package/esm2020/lib/pipes/class-map.pipe.mjs +22 -0
- package/esm2020/lib/pipes/index.mjs +2 -1
- package/esm2020/lib/router/models/router.model.mjs +1 -1
- package/esm2020/lib/router/tableview-route-builder.mjs +41 -17
- package/esm2020/lib/services/action-executor.service.mjs +1 -1
- package/esm2020/lib/utils/tableview.util.mjs +144 -0
- package/fesm2015/mediusinc-mng-commons.mjs +1095 -128
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +1077 -117
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/api/utils/medius-rest.util.d.ts +1 -0
- package/lib/components/action/action.component.d.ts +2 -1
- package/lib/components/action/models/action-execution.model.d.ts +2 -0
- package/lib/components/action/models/index.d.ts +1 -0
- package/lib/components/action/models/tableview-action-default-categories.model.d.ts +10 -0
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +9 -4
- package/lib/components/tableview/route/tableview-route.component.d.ts +0 -5
- package/lib/components/tableview/table/table.component.d.ts +4 -2
- package/lib/components/tableview/tableview.component.d.ts +3 -0
- package/lib/data-providers/table.data-provider.d.ts +6 -1
- package/lib/data-providers/tableview.data-provider.d.ts +16 -2
- package/lib/descriptors/action.descriptor.d.ts +4 -0
- package/lib/descriptors/column.descriptor.d.ts +39 -5
- package/lib/descriptors/editor.descriptor.d.ts +69 -11
- package/lib/descriptors/field.descriptor.d.ts +7 -2
- package/lib/descriptors/filter.descriptor.d.ts +7 -6
- package/lib/descriptors/index.d.ts +1 -1
- package/lib/descriptors/table.descriptor.d.ts +124 -8
- package/lib/descriptors/tableview.descriptor.d.ts +81 -7
- package/lib/descriptors/types/table.type.d.ts +8 -0
- package/lib/mng-commons.module.d.ts +72 -71
- package/lib/models/index.d.ts +1 -0
- package/lib/models/tableview-attr.model.d.ts +9 -0
- package/lib/pipes/class-map.pipe.d.ts +7 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/router/models/router.model.d.ts +6 -0
- package/lib/router/tableview-route-builder.d.ts +3 -0
- package/lib/utils/tableview.util.d.ts +39 -0
- package/package.json +1 -1
- package/scss/mng-overrides/_theme_tableview.scss +17 -0
- package/version-info.json +5 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MngActionRouteComponent } from '../components/action';
|
|
2
|
+
import { TableviewActionDefaultCategories } from '../components/action/models';
|
|
2
3
|
import { MngTableviewRouteComponent } from '../components/tableview';
|
|
3
4
|
import { ActionEditorAddDescriptor, ActionEditorDetailsDescriptor, ActionEditorEditDescriptor } from '../descriptors';
|
|
4
|
-
import { Permissions } from '../security/model';
|
|
5
5
|
import { RouteBuilder } from './route-builder';
|
|
6
6
|
export class TableviewRouteBuilder {
|
|
7
7
|
constructor(path) {
|
|
@@ -12,6 +12,7 @@ export class TableviewRouteBuilder {
|
|
|
12
12
|
this.editPath = ':itemId/edit';
|
|
13
13
|
this.hasAdd = true;
|
|
14
14
|
this.addPath = 'add';
|
|
15
|
+
this.hasDelete = true;
|
|
15
16
|
}
|
|
16
17
|
static fromComponent(path, component) {
|
|
17
18
|
const inst = new TableviewRouteBuilder(path);
|
|
@@ -39,6 +40,15 @@ export class TableviewRouteBuilder {
|
|
|
39
40
|
}
|
|
40
41
|
return inst;
|
|
41
42
|
}
|
|
43
|
+
withReadOnly(permissions) {
|
|
44
|
+
if (permissions) {
|
|
45
|
+
this.withPermissions(permissions);
|
|
46
|
+
}
|
|
47
|
+
this.withAdd(false);
|
|
48
|
+
this.withEdit(false);
|
|
49
|
+
this.withDelete(false);
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
42
52
|
withDetails(hasDetails = true, permissions, path) {
|
|
43
53
|
this.hasDetails = hasDetails;
|
|
44
54
|
if (permissions) {
|
|
@@ -69,24 +79,31 @@ export class TableviewRouteBuilder {
|
|
|
69
79
|
}
|
|
70
80
|
return this;
|
|
71
81
|
}
|
|
82
|
+
withDelete(hasDelete = true, permissions) {
|
|
83
|
+
this.hasDelete = hasDelete;
|
|
84
|
+
if (permissions) {
|
|
85
|
+
this.withPermissions(undefined, undefined, undefined, permissions);
|
|
86
|
+
}
|
|
87
|
+
return this;
|
|
88
|
+
}
|
|
72
89
|
withPermissions(read, add, edit, delet, details) {
|
|
73
90
|
if (!this.permissions) {
|
|
74
91
|
this.permissions = {};
|
|
75
92
|
}
|
|
76
93
|
if (read) {
|
|
77
|
-
this.permissions[
|
|
94
|
+
this.permissions[TableviewActionDefaultCategories.READ] = read;
|
|
78
95
|
}
|
|
79
96
|
if (add) {
|
|
80
|
-
this.permissions[
|
|
97
|
+
this.permissions[TableviewActionDefaultCategories.ADD] = add;
|
|
81
98
|
}
|
|
82
99
|
if (edit) {
|
|
83
|
-
this.permissions[
|
|
100
|
+
this.permissions[TableviewActionDefaultCategories.EDIT] = edit;
|
|
84
101
|
}
|
|
85
102
|
if (delet) {
|
|
86
|
-
this.permissions[
|
|
103
|
+
this.permissions[TableviewActionDefaultCategories.DELETE] = delet;
|
|
87
104
|
}
|
|
88
105
|
if (details) {
|
|
89
|
-
this.permissions[
|
|
106
|
+
this.permissions[TableviewActionDefaultCategories.DETAILS] = details;
|
|
90
107
|
}
|
|
91
108
|
return this;
|
|
92
109
|
}
|
|
@@ -122,39 +139,46 @@ export class TableviewRouteBuilder {
|
|
|
122
139
|
if (this.permissions) {
|
|
123
140
|
routeData.tableviewPermissions = { ...this.permissions };
|
|
124
141
|
}
|
|
142
|
+
routeData.tableviewActions = {
|
|
143
|
+
hasAdd: this.hasAdd,
|
|
144
|
+
hasEdit: this.hasEdit,
|
|
145
|
+
hasDetails: this.hasDetails,
|
|
146
|
+
hasDelete: this.hasDelete
|
|
147
|
+
};
|
|
125
148
|
tableviewRouteBuilder.withData(routeData);
|
|
126
|
-
if (this.permissions?.[
|
|
127
|
-
tableviewRouteBuilder.withPermissions(this.permissions[
|
|
149
|
+
if (this.permissions?.[TableviewActionDefaultCategories.READ]) {
|
|
150
|
+
tableviewRouteBuilder.withPermissions(this.permissions[TableviewActionDefaultCategories.READ]);
|
|
128
151
|
}
|
|
129
152
|
// list route
|
|
130
153
|
const rootChildRouteBuilder = RouteBuilder.create('', MngActionRouteComponent);
|
|
131
|
-
|
|
132
|
-
|
|
154
|
+
rootChildRouteBuilder.withData({ ...routeData });
|
|
155
|
+
if (this.permissions?.[TableviewActionDefaultCategories.READ]) {
|
|
156
|
+
rootChildRouteBuilder.withPermissions(this.permissions[TableviewActionDefaultCategories.READ]);
|
|
133
157
|
}
|
|
134
158
|
tableviewRouteBuilder.addChildBuilder(rootChildRouteBuilder);
|
|
135
159
|
// add route
|
|
136
160
|
if (this.hasAdd) {
|
|
137
161
|
const routeBuilder = RouteBuilder.create(this.addPath, MngActionRouteComponent);
|
|
138
|
-
if (this.permissions?.[
|
|
139
|
-
routeBuilder.withPermissions(this.permissions[
|
|
162
|
+
if (this.permissions?.[TableviewActionDefaultCategories.ADD]) {
|
|
163
|
+
routeBuilder.withPermissions(this.permissions[TableviewActionDefaultCategories.ADD]);
|
|
140
164
|
}
|
|
141
165
|
tableviewRouteBuilder.addChildBuilder(routeBuilder);
|
|
142
166
|
}
|
|
143
167
|
if (this.hasDetails) {
|
|
144
168
|
const routeBuilder = RouteBuilder.create(this.detailsPath, MngActionRouteComponent);
|
|
145
|
-
if (this.permissions?.[
|
|
146
|
-
routeBuilder.withPermissions(this.permissions[
|
|
169
|
+
if (this.permissions?.[TableviewActionDefaultCategories.DETAILS]) {
|
|
170
|
+
routeBuilder.withPermissions(this.permissions[TableviewActionDefaultCategories.DETAILS]);
|
|
147
171
|
}
|
|
148
172
|
tableviewRouteBuilder.addChildBuilder(routeBuilder);
|
|
149
173
|
}
|
|
150
174
|
if (this.hasEdit) {
|
|
151
175
|
const routeBuilder = RouteBuilder.create(this.editPath, MngActionRouteComponent);
|
|
152
|
-
if (this.permissions?.[
|
|
153
|
-
routeBuilder.withPermissions(this.permissions[
|
|
176
|
+
if (this.permissions?.[TableviewActionDefaultCategories.EDIT]) {
|
|
177
|
+
routeBuilder.withPermissions(this.permissions[TableviewActionDefaultCategories.EDIT]);
|
|
154
178
|
}
|
|
155
179
|
tableviewRouteBuilder.addChildBuilder(routeBuilder);
|
|
156
180
|
}
|
|
157
181
|
return tableviewRouteBuilder;
|
|
158
182
|
}
|
|
159
183
|
}
|
|
160
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LXJvdXRlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JvdXRlci90YWJsZXZpZXctcm91dGUtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQThCLDBCQUEwQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFaEcsT0FBTyxFQUFtQix5QkFBeUIsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzSixPQUFPLEVBQWUsV0FBVyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFFNUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE1BQU0sT0FBTyxxQkFBcUI7SUFrQjlCLFlBQTRCLElBQVk7UUFBWixTQUFJLEdBQUosSUFBSSxDQUFRO1FBWGhDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsZ0JBQVcsR0FBRyxTQUFTLENBQUM7UUFDeEIsWUFBTyxHQUFHLElBQUksQ0FBQztRQUNmLGFBQVEsR0FBRyxjQUFjLENBQUM7UUFDMUIsV0FBTSxHQUFHLElBQUksQ0FBQztRQUNkLFlBQU8sR0FBRyxLQUFLLENBQUM7SUFNbUIsQ0FBQztJQUVyQyxNQUFNLENBQUMsYUFBYSxDQUFrRCxJQUFZLEVBQUUsU0FBa0I7UUFDekcsTUFBTSxJQUFJLEdBQUcsSUFBSSxxQkFBcUIsQ0FBSSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sTUFBTSxDQUFDLElBQUksQ0FDZCxJQUFZLEVBQ1osVUFBb0MsRUFDcEMsWUFBOEMsRUFDOUMsT0FBcUM7UUFFckMsTUFBTSxJQUFJLEdBQUcsSUFBSSxxQkFBcUIsQ0FB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WSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMvRTtZQUNELHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN2RDtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztZQUNwRixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNyRCxZQUFZLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQ25GO1lBQ0QscUJBQXFCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDakYsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEQsWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNoRjtZQUNELHFCQUFxQixDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8scUJBQXFCLENBQUM7SUFDakMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Um91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7TW5nQWN0aW9uUm91dGVDb21wb25lbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uJztcbmltcG9ydCB7QU1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50LCBNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZXZpZXcnO1xuaW1wb3J0IHtJVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRldGFpbHNEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvciwgVGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnMsIFBlcm1pc3Npb25zfSBmcm9tICcuLi9zZWN1cml0eS9tb2RlbCc7XG5pbXBvcnQge01uZ1JvdXRlckRhdGF9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7Um91dGVCdWlsZGVyfSBmcm9tICcuL3JvdXRlLWJ1aWxkZXInO1xuXG5leHBvcnQgY2xhc3MgVGFibGV2aWV3Um91dGVCdWlsZGVyPEMgZXh0ZW5kcyBBTW5nVGFibGV2aWV3Um91dGVDb21wb25lbnQ8YW55LCBhbnk+PiB7XG4gICAgcHJpdmF0ZSBkZXNjcmlwdG9yPzogVGFibGV2aWV3RGVzY3JpcHRvcjxhbnk+O1xuICAgIHByaXZhdGUgZGF0YVByb3ZpZGVyPzogSVRhYmxldmlld0RhdGFQcm92aWRlcjxhbnksIGFueT47XG4gICAgcHJpdmF0ZSBhY3Rpb25zPzogQXJyYXk8QWN0aW9uRGVzY3JpcHRvcjxhbnk+PjtcblxuICAgIHByaXZhdGUgY29tcG9uZW50PzogVHlwZTxDPjtcblxuICAgIHByaXZhdGUgaGFzRGV0YWlscyA9IHRydWU7XG4gICAgcHJpdmF0ZSBkZXRhaWxzUGF0aCA9ICc6aXRlbUlkJztcbiAgICBwcml2YXRlIGhhc0VkaXQgPSB0cnVlO1xuICAgIHByaXZhdGUgZWRpdFBhdGggPSAnOml0ZW1JZC9lZGl0JztcbiAgICBwcml2YXRlIGhhc0FkZCA9IHRydWU7XG4gICAgcHJpdmF0ZSBhZGRQYXRoID0gJ2FkZCc7XG5cbiAgICBwcml2YXRlIHBlcm1pc3Npb25zPzoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBBUGVybWlzc2lvbnM7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBwYXRoOiBzdHJpbmcpIHt9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnQ8QyBleHRlbmRzIEFNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudDxhbnksIGFueT4+KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPEM+KTogVGFibGV2aWV3Um91dGVCdWlsZGVyPEM+IHtcbiAgICAgICAgY29uc3QgaW5zdCA9IG5ldyBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXI8Qz4ocGF0aCk7XG4gICAgICAgIGluc3QuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICByZXR1cm4gaW5zdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb20oXG4gICAgICAgIHBhdGg6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxhbnk+LFxuICAgICAgICBkYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8YW55LCBhbnk+LFxuICAgICAgICBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPGFueT4+XG4gICAgKTogVGFibGV2aWV3Um91dGVCdWlsZGVyPG5ldmVyPiB7XG4gICAgICAgIGNvbnN0IGluc3QgPSBuZXcgVGFibGV2aWV3Um91dGVCdWlsZGVyPG5ldmVyPihwYXRoKTtcbiAgICAgICAgaW5zdC5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgaW5zdC5kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIGluc3QuYWN0aW9ucyA9IGFjdGlvbnM7XG5cbiAgICAgICAgaW5zdC5oYXNEZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIGluc3QuaGFzQWRkID0gZmFsc2U7XG4gICAgICAgIGluc3QuaGFzRWRpdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBpbnN0LmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGluc3QuaGFzRGV0YWlscyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBpbnN0Lmhhc0FkZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgaW5zdC5oYXNFZGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0O1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGV0YWlscyhoYXNEZXRhaWxzID0gdHJ1ZSwgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMsIHBhdGg/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oYXNEZXRhaWxzID0gaGFzRGV0YWlscztcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhQZXJtaXNzaW9ucyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBlcm1pc3Npb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxzUGF0aCA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZGQoaGFzQWRkID0gdHJ1ZSwgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMsIHBhdGg/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oYXNBZGQgPSBoYXNBZGQ7XG4gICAgICAgIGlmIChwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy53aXRoUGVybWlzc2lvbnModW5kZWZpbmVkLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkUGF0aCA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0KGhhc0VkaXQgPSB0cnVlLCBwZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucywgcGF0aD86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhhc0VkaXQgPSBoYXNFZGl0O1xuICAgICAgICBpZiAocGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFBlcm1pc3Npb25zKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFBhdGggPSBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGVybWlzc2lvbnMocmVhZD86IEFQZXJtaXNzaW9ucywgYWRkPzogQVBlcm1pc3Npb25zLCBlZGl0PzogQVBlcm1pc3Npb25zLCBkZWxldD86IEFQZXJtaXNzaW9ucywgZGV0YWlscz86IEFQZXJtaXNzaW9ucyk6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVhZCkge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1tQZXJtaXNzaW9ucy5BY3Rpb25UeXBlcy5SRUFEXSA9IHJlYWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFkZCkge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1tQZXJtaXNzaW9ucy5BY3Rpb25UeXBlcy5BRERdID0gYWRkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlZGl0KSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zW1Blcm1pc3Npb25zLkFjdGlvblR5cGVzLkVESVRdID0gZWRpdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVsZXQpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNbUGVybWlzc2lvbnMuQWN0aW9uVHlwZXMuREVMRVRFXSA9IGRlbGV0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChkZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zW1Blcm1pc3Npb25zLkFjdGlvblR5cGVzLkRFVEFJTFNdID0gZGV0YWlscztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBlcm1pc3Npb25zT3RoZXIoa2V5OiBzdHJpbmcsIHBlcm1pc3Npb25zOiBBUGVybWlzc2lvbnMpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1trZXldID0gcGVybWlzc2lvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUGVybWlzc2lvbnNPYmplY3QocGVybWlzc2lvbnM6IHtba2V5OiBzdHJpbmddOiBBUGVybWlzc2lvbnN9KTogdGhpcyB7XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnMgPSBwZXJtaXNzaW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkKCk6IFJvdXRlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9Sb3V0ZUJ1aWxkZXIoKS5idWlsZFJvdXRlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvUm91dGVCdWlsZGVyKCk6IFJvdXRlQnVpbGRlciB7XG4gICAgICAgIGNvbnN0IHRhYmxldmlld1JvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGVGcm9tUm91dGUoe1xuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgY29tcG9uZW50OiB0aGlzLmNvbXBvbmVudCA/IHRoaXMuY29tcG9uZW50IDogTW5nVGFibGV2aWV3Um91dGVDb21wb25lbnRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhOiBNbmdSb3V0ZXJEYXRhID0ge307XG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJvdXRlRGF0YS50YWJsZXZpZXcgPSB7XG4gICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogdGhpcy5kZXNjcmlwdG9yISxcbiAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXI6IHRoaXMuZGF0YVByb3ZpZGVyIVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLmFjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByb3V0ZURhdGEudGFibGV2aWV3LmFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9ucyA9IHsuLi50aGlzLnBlcm1pc3Npb25zfTtcbiAgICAgICAgfVxuICAgICAgICB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIud2l0aERhdGEocm91dGVEYXRhKTtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltQZXJtaXNzaW9ucy5BY3Rpb25UeXBlcy5SRUFEXSkge1xuICAgICAgICAgICAgdGFibGV2aWV3Um91dGVCdWlsZGVyLndpdGhQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zW1Blcm1pc3Npb25zLkFjdGlvblR5cGVzLlJFQURdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxpc3Qgcm91dGVcbiAgICAgICAgY29uc3Qgcm9vdENoaWxkUm91dGVCdWlsZGVyID0gUm91dGVCdWlsZGVyLmNyZWF0ZSgnJywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucz8uW1Blcm1pc3Npb25zLkFjdGlvblR5cGVzLlJFQURdKSB7XG4gICAgICAgICAgICByb290Q2hpbGRSb3V0ZUJ1aWxkZXIud2l0aFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnNbUGVybWlzc2lvbnMuQWN0aW9uVHlwZXMuUkVBRF0pO1xuICAgICAgICB9XG4gICAgICAgIHRhYmxldmlld1JvdXRlQnVpbGRlci5hZGRDaGlsZEJ1aWxkZXIocm9vdENoaWxkUm91dGVCdWlsZGVyKTtcblxuICAgICAgICAvLyBhZGQgcm91dGVcbiAgICAgICAgaWYgKHRoaXMuaGFzQWRkKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZUJ1aWxkZXIgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlKHRoaXMuYWRkUGF0aCwgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltQZXJtaXNzaW9ucy5BY3Rpb25UeXBlcy5BRERdKSB7XG4gICAgICAgICAgICAgICAgcm91dGVCdWlsZGVyLndpdGhQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zW1Blcm1pc3Npb25zLkFjdGlvblR5cGVzLkFERF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGV2aWV3Um91dGVCdWlsZGVyLmFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc0RldGFpbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGUodGhpcy5kZXRhaWxzUGF0aCwgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltQZXJtaXNzaW9ucy5BY3Rpb25UeXBlcy5ERVRBSUxTXSkge1xuICAgICAgICAgICAgICAgIHJvdXRlQnVpbGRlci53aXRoUGVybWlzc2lvbnModGhpcy5wZXJtaXNzaW9uc1tQZXJtaXNzaW9ucy5BY3Rpb25UeXBlcy5ERVRBSUxTXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIuYWRkQ2hpbGRCdWlsZGVyKHJvdXRlQnVpbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzRWRpdCkge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVCdWlsZGVyID0gUm91dGVCdWlsZGVyLmNyZWF0ZSh0aGlzLmVkaXRQYXRoLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucz8uW1Blcm1pc3Npb25zLkFjdGlvblR5cGVzLkVESVRdKSB7XG4gICAgICAgICAgICAgICAgcm91dGVCdWlsZGVyLndpdGhQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zW1Blcm1pc3Npb25zLkFjdGlvblR5cGVzLkVESVRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxldmlld1JvdXRlQnVpbGRlci5hZGRDaGlsZEJ1aWxkZXIocm91dGVCdWlsZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXI7XG4gICAgfVxufVxuIl19
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGV2aWV3LXJvdXRlLWJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JvdXRlci90YWJsZXZpZXctcm91dGUtYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUM3RCxPQUFPLEVBQUMsZ0NBQWdDLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RSxPQUFPLEVBQThCLDBCQUEwQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFaEcsT0FBTyxFQUFtQix5QkFBeUIsRUFBRSw2QkFBNkIsRUFBRSwwQkFBMEIsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUczSixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFN0MsTUFBTSxPQUFPLHFCQUFxQjtJQW1COUIsWUFBNEIsSUFBWTtRQUFaLFNBQUksR0FBSixJQUFJLENBQVE7UUFaaEMsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixnQkFBVyxHQUFHLFNBQVMsQ0FBQztRQUN4QixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsYUFBUSxHQUFHLGNBQWMsQ0FBQztRQUMxQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2QsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixjQUFTLEdBQUcsSUFBSSxDQUFDO0lBTWtCLENBQUM7SUFFckMsTUFBTSxDQUFDLGFBQWEsQ0FBa0QsSUFBWSxFQUFFLFNBQWtCO1FBQ3pHLE1BQU0sSUFBSSxHQUFHLElBQUkscUJBQXFCLENBQUksSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLE1BQU0sQ0FBQyxJQUFJLENBQ2QsSUFBWSxFQUNaLFVBQW9DLEVBQ3BDLFlBQThDLEVBQzlDLE9BQXFDO1FBRXJDLE1B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QUFDLEVBQUU7Z0JBQzlELFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2FBQzVGO1lBQ0QscUJBQXFCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZEO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLHVCQUF1QixDQUFDLENBQUM7WUFDakYsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsZ0NBQWdDLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzNELFlBQVksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3pGO1lBQ0QscUJBQXFCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ3ZEO1FBRUQsT0FBTyxxQkFBcUIsQ0FBQztJQUNqQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24nO1xuaW1wb3J0IHtUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllc30gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmltcG9ydCB7QU1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50LCBNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy90YWJsZXZpZXcnO1xuaW1wb3J0IHtJVGFibGV2aWV3RGF0YVByb3ZpZGVyfSBmcm9tICcuLi9kYXRhLXByb3ZpZGVycyc7XG5pbXBvcnQge0FjdGlvbkRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckRldGFpbHNEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvciwgVGFibGV2aWV3RGVzY3JpcHRvcn0gZnJvbSAnLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtBUGVybWlzc2lvbnN9IGZyb20gJy4uL3NlY3VyaXR5L21vZGVsJztcbmltcG9ydCB7TW5nUm91dGVyRGF0YX0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHtSb3V0ZUJ1aWxkZXJ9IGZyb20gJy4vcm91dGUtYnVpbGRlcic7XG5cbmV4cG9ydCBjbGFzcyBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXI8QyBleHRlbmRzIEFNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudDxhbnksIGFueT4+IHtcbiAgICBwcml2YXRlIGRlc2NyaXB0b3I/OiBUYWJsZXZpZXdEZXNjcmlwdG9yPGFueT47XG4gICAgcHJpdmF0ZSBkYXRhUHJvdmlkZXI/OiBJVGFibGV2aWV3RGF0YVByb3ZpZGVyPGFueSwgYW55PjtcbiAgICBwcml2YXRlIGFjdGlvbnM/OiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPGFueT4+O1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnQ/OiBUeXBlPEM+O1xuXG4gICAgcHJpdmF0ZSBoYXNEZXRhaWxzID0gdHJ1ZTtcbiAgICBwcml2YXRlIGRldGFpbHNQYXRoID0gJzppdGVtSWQnO1xuICAgIHByaXZhdGUgaGFzRWRpdCA9IHRydWU7XG4gICAgcHJpdmF0ZSBlZGl0UGF0aCA9ICc6aXRlbUlkL2VkaXQnO1xuICAgIHByaXZhdGUgaGFzQWRkID0gdHJ1ZTtcbiAgICBwcml2YXRlIGFkZFBhdGggPSAnYWRkJztcbiAgICBwcml2YXRlIGhhc0RlbGV0ZSA9IHRydWU7XG5cbiAgICBwcml2YXRlIHBlcm1pc3Npb25zPzoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBBUGVybWlzc2lvbnM7XG4gICAgfTtcblxuICAgIHByaXZhdGUgY29uc3RydWN0b3IocHJpdmF0ZSBwYXRoOiBzdHJpbmcpIHt9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb21Db21wb25lbnQ8QyBleHRlbmRzIEFNbmdUYWJsZXZpZXdSb3V0ZUNvbXBvbmVudDxhbnksIGFueT4+KHBhdGg6IHN0cmluZywgY29tcG9uZW50OiBUeXBlPEM+KTogVGFibGV2aWV3Um91dGVCdWlsZGVyPEM+IHtcbiAgICAgICAgY29uc3QgaW5zdCA9IG5ldyBUYWJsZXZpZXdSb3V0ZUJ1aWxkZXI8Qz4ocGF0aCk7XG4gICAgICAgIGluc3QuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgICAgICByZXR1cm4gaW5zdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGZyb20oXG4gICAgICAgIHBhdGg6IHN0cmluZyxcbiAgICAgICAgZGVzY3JpcHRvcjogVGFibGV2aWV3RGVzY3JpcHRvcjxhbnk+LFxuICAgICAgICBkYXRhUHJvdmlkZXI6IElUYWJsZXZpZXdEYXRhUHJvdmlkZXI8YW55LCBhbnk+LFxuICAgICAgICBhY3Rpb25zOiBBcnJheTxBY3Rpb25EZXNjcmlwdG9yPGFueT4+XG4gICAgKTogVGFibGV2aWV3Um91dGVCdWlsZGVyPG5ldmVyPiB7XG4gICAgICAgIGNvbnN0IGluc3QgPSBuZXcgVGFibGV2aWV3Um91dGVCdWlsZGVyPG5ldmVyPihwYXRoKTtcbiAgICAgICAgaW5zdC5kZXNjcmlwdG9yID0gZGVzY3JpcHRvcjtcbiAgICAgICAgaW5zdC5kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIGluc3QuYWN0aW9ucyA9IGFjdGlvbnM7XG5cbiAgICAgICAgaW5zdC5oYXNEZXRhaWxzID0gZmFsc2U7XG4gICAgICAgIGluc3QuaGFzQWRkID0gZmFsc2U7XG4gICAgICAgIGluc3QuaGFzRWRpdCA9IGZhbHNlO1xuICAgICAgICBmb3IgKGNvbnN0IGFjdGlvbiBvZiBpbnN0LmFjdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgIGluc3QuaGFzRGV0YWlscyA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgICAgICBpbnN0Lmhhc0FkZCA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgaW5zdC5oYXNFZGl0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0O1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVhZE9ubHkocGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMpOiB0aGlzIHtcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhQZXJtaXNzaW9ucyhwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy53aXRoQWRkKGZhbHNlKTtcbiAgICAgICAgdGhpcy53aXRoRWRpdChmYWxzZSk7XG4gICAgICAgIHRoaXMud2l0aERlbGV0ZShmYWxzZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGV0YWlscyhoYXNEZXRhaWxzID0gdHJ1ZSwgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMsIHBhdGg/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oYXNEZXRhaWxzID0gaGFzRGV0YWlscztcbiAgICAgICAgaWYgKHBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLndpdGhQZXJtaXNzaW9ucyh1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBlcm1pc3Npb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGF0aCkge1xuICAgICAgICAgICAgdGhpcy5kZXRhaWxzUGF0aCA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhBZGQoaGFzQWRkID0gdHJ1ZSwgcGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnMsIHBhdGg/OiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5oYXNBZGQgPSBoYXNBZGQ7XG4gICAgICAgIGlmIChwZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy53aXRoUGVybWlzc2lvbnModW5kZWZpbmVkLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkUGF0aCA9IHBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0KGhhc0VkaXQgPSB0cnVlLCBwZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucywgcGF0aD86IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLmhhc0VkaXQgPSBoYXNFZGl0O1xuICAgICAgICBpZiAocGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFBlcm1pc3Npb25zKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBwZXJtaXNzaW9ucyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdFBhdGggPSBwYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGVsZXRlKGhhc0RlbGV0ZSA9IHRydWUsIHBlcm1pc3Npb25zPzogQVBlcm1pc3Npb25zKTogdGhpcyB7XG4gICAgICAgIHRoaXMuaGFzRGVsZXRlID0gaGFzRGVsZXRlO1xuICAgICAgICBpZiAocGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIHRoaXMud2l0aFBlcm1pc3Npb25zKHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHBlcm1pc3Npb25zKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBlcm1pc3Npb25zKHJlYWQ/OiBBUGVybWlzc2lvbnMsIGFkZD86IEFQZXJtaXNzaW9ucywgZWRpdD86IEFQZXJtaXNzaW9ucywgZGVsZXQ/OiBBUGVybWlzc2lvbnMsIGRldGFpbHM/OiBBUGVybWlzc2lvbnMpOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0ge307XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlYWQpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuUkVBRF0gPSByZWFkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgICAgIHRoaXMucGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuQUREXSA9IGFkZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZWRpdCkge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5FRElUXSA9IGVkaXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlbGV0KSB7XG4gICAgICAgICAgICB0aGlzLnBlcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkRFTEVURV0gPSBkZWxldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSA9IGRldGFpbHM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhQZXJtaXNzaW9uc090aGVyKGtleTogc3RyaW5nLCBwZXJtaXNzaW9uczogQVBlcm1pc3Npb25zKTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5wZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgdGhpcy5wZXJtaXNzaW9ucyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVybWlzc2lvbnNba2V5XSA9IHBlcm1pc3Npb25zO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBlcm1pc3Npb25zT2JqZWN0KHBlcm1pc3Npb25zOiB7W2tleTogc3RyaW5nXTogQVBlcm1pc3Npb25zfSk6IHRoaXMge1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25zID0gcGVybWlzc2lvbnM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBidWlsZCgpOiBSb3V0ZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvUm91dGVCdWlsZGVyKCkuYnVpbGRSb3V0ZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b1JvdXRlQnVpbGRlcigpOiBSb3V0ZUJ1aWxkZXIge1xuICAgICAgICBjb25zdCB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlRnJvbVJvdXRlKHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIGNvbXBvbmVudDogdGhpcy5jb21wb25lbnQgPyB0aGlzLmNvbXBvbmVudCA6IE1uZ1RhYmxldmlld1JvdXRlQ29tcG9uZW50XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJvdXRlRGF0YTogTW5nUm91dGVyRGF0YSA9IHt9O1xuICAgICAgICBpZiAoIXRoaXMuY29tcG9uZW50KSB7XG4gICAgICAgICAgICByb3V0ZURhdGEudGFibGV2aWV3ID0ge1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0b3I6IHRoaXMuZGVzY3JpcHRvciEsXG4gICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiB0aGlzLmRhdGFQcm92aWRlciFcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy5hY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgcm91dGVEYXRhLnRhYmxldmlldy5hY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnBlcm1pc3Npb25zKSB7XG4gICAgICAgICAgICByb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnMgPSB7Li4udGhpcy5wZXJtaXNzaW9uc307XG4gICAgICAgIH1cbiAgICAgICAgcm91dGVEYXRhLnRhYmxldmlld0FjdGlvbnMgPSB7XG4gICAgICAgICAgICBoYXNBZGQ6IHRoaXMuaGFzQWRkLFxuICAgICAgICAgICAgaGFzRWRpdDogdGhpcy5oYXNFZGl0LFxuICAgICAgICAgICAgaGFzRGV0YWlsczogdGhpcy5oYXNEZXRhaWxzLFxuICAgICAgICAgICAgaGFzRGVsZXRlOiB0aGlzLmhhc0RlbGV0ZVxuICAgICAgICB9O1xuICAgICAgICB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIud2l0aERhdGEocm91dGVEYXRhKTtcbiAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5SRUFEXSkge1xuICAgICAgICAgICAgdGFibGV2aWV3Um91dGVCdWlsZGVyLndpdGhQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLlJFQURdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxpc3Qgcm91dGVcbiAgICAgICAgY29uc3Qgcm9vdENoaWxkUm91dGVCdWlsZGVyID0gUm91dGVCdWlsZGVyLmNyZWF0ZSgnJywgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICByb290Q2hpbGRSb3V0ZUJ1aWxkZXIud2l0aERhdGEoey4uLnJvdXRlRGF0YX0pO1xuICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucz8uW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLlJFQURdKSB7XG4gICAgICAgICAgICByb290Q2hpbGRSb3V0ZUJ1aWxkZXIud2l0aFBlcm1pc3Npb25zKHRoaXMucGVybWlzc2lvbnNbVGFibGV2aWV3QWN0aW9uRGVmYXVsdENhdGVnb3JpZXMuUkVBRF0pO1xuICAgICAgICB9XG4gICAgICAgIHRhYmxldmlld1JvdXRlQnVpbGRlci5hZGRDaGlsZEJ1aWxkZXIocm9vdENoaWxkUm91dGVCdWlsZGVyKTtcblxuICAgICAgICAvLyBhZGQgcm91dGVcbiAgICAgICAgaWYgKHRoaXMuaGFzQWRkKSB7XG4gICAgICAgICAgICBjb25zdCByb3V0ZUJ1aWxkZXIgPSBSb3V0ZUJ1aWxkZXIuY3JlYXRlKHRoaXMuYWRkUGF0aCwgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5BRERdKSB7XG4gICAgICAgICAgICAgICAgcm91dGVCdWlsZGVyLndpdGhQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkFERF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGV2aWV3Um91dGVCdWlsZGVyLmFkZENoaWxkQnVpbGRlcihyb3V0ZUJ1aWxkZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhhc0RldGFpbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvdXRlQnVpbGRlciA9IFJvdXRlQnVpbGRlci5jcmVhdGUodGhpcy5kZXRhaWxzUGF0aCwgTW5nQWN0aW9uUm91dGVDb21wb25lbnQpO1xuICAgICAgICAgICAgaWYgKHRoaXMucGVybWlzc2lvbnM/LltUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSkge1xuICAgICAgICAgICAgICAgIHJvdXRlQnVpbGRlci53aXRoUGVybWlzc2lvbnModGhpcy5wZXJtaXNzaW9uc1tUYWJsZXZpZXdBY3Rpb25EZWZhdWx0Q2F0ZWdvcmllcy5ERVRBSUxTXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXIuYWRkQ2hpbGRCdWlsZGVyKHJvdXRlQnVpbGRlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzRWRpdCkge1xuICAgICAgICAgICAgY29uc3Qgcm91dGVCdWlsZGVyID0gUm91dGVCdWlsZGVyLmNyZWF0ZSh0aGlzLmVkaXRQYXRoLCBNbmdBY3Rpb25Sb3V0ZUNvbXBvbmVudCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wZXJtaXNzaW9ucz8uW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkVESVRdKSB7XG4gICAgICAgICAgICAgICAgcm91dGVCdWlsZGVyLndpdGhQZXJtaXNzaW9ucyh0aGlzLnBlcm1pc3Npb25zW1RhYmxldmlld0FjdGlvbkRlZmF1bHRDYXRlZ29yaWVzLkVESVRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxldmlld1JvdXRlQnVpbGRlci5hZGRDaGlsZEJ1aWxkZXIocm91dGVCdWlsZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YWJsZXZpZXdSb3V0ZUJ1aWxkZXI7XG4gICAgfVxufVxuIl19
|
|
@@ -546,4 +546,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
|
|
|
546
546
|
type: Inject,
|
|
547
547
|
args: [ACTION_EDITOR_DIALOG_COMPONENT_SETTING]
|
|
548
548
|
}] }]; } });
|
|
549
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQWEsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHMUssT0FBTyxFQUFtQixzQkFBc0IsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RixPQUFPLEVBQUMsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHN0csT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJakUsT0FBTyxFQUFDLHNDQUFzQyxFQUFDLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7O0FBR2hFLE1BQU0sT0FBTyx3QkFBd0I7SUFHakMsWUFDWSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFNBQTJCLEVBQzNCLG9CQUE2QyxFQUM3QyxpQkFBdUMsRUFDdkMsV0FBa0MsRUFDbEMsV0FBK0IsRUFDaUIsNEJBQXVDO1FBVHZGLGFBQVEsR0FBUixRQUFRLENB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QztnQkFDRCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsRUFBRSxFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDcEU7U0FDSjtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLEtBQVc7UUFDL0IsTUFBTSxXQUFXLEdBQWE7WUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksY0FBYztZQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxlQUFlO1lBQzFDLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUNGLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO1lBQ3BDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNqRCxXQUFXLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7cUhBaG9CUSx3QkFBd0Isa1RBYXJCLHNDQUFzQzt5SEFiekMsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVU7OzBCQWNGLE1BQU07MkJBQUMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlciwgVXJsVHJlZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWd9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge09ic2VydmFibGUsIGZyb20sIG1lcmdlTWFwLCBvZiwgc3dpdGNoTWFwLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmlsdGVyLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7QWN0aW9uQ29udGV4dCwgQWN0aW9uQ29udGV4dFZhbGlkYXRpb24sIEFjdGlvbkluc3RhbmNlLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge01uZ1RhYmxlQ2VsbENsaWNrRXZlbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFibGV2aWV3L21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgVGFibGVEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0FjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbi9hY3Rpb24tY29uZmlybWF0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sIEFjdGlvbkVkaXRvckRpYWxvZ1NpemVFbnVtLCBBY3Rpb25UeXBlRW51bX0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNbmdFcnJvcn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nUGFyYW1ldHJpemVQaXBlfSBmcm9tICcuLi9waXBlcyc7XG5pbXBvcnQge0kxOG5VdGlscywgTm90aWZpY2F0aW9uVXRpbCwgU3RyaW5nVXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdFcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4vZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElOR30gZnJvbSAnLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGRlYnVnID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogTW5nQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycm9yTWFwcGVyOiBNbmdFcnJvck1hcHBlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJpemU6IE1uZ1BhcmFtZXRyaXplUGlwZSxcbiAgICAgICAgQEluamVjdChBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORykgcHJpdmF0ZSBkZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT5cbiAgICApIHtcbiAgICAgICAgLy8gdGhpcy5kZWJ1ZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8VD4sIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBhY3Rpb24uZGF0YVByb3ZpZGVyID8/IHBhcmFtZXRlcnMudmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPihhY3Rpb24sIHBhcmFtZXRlcnMsIGN0eERhdGFQcm92aWRlciwgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZUFjdGlvbkNvbnRleHQ8VCwgUz4oXG4gICAgICAgIGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBpbnN0YW5jZS5hY3Rpb24uZGF0YVByb3ZpZGVyID8/IHBhcmFtZXRlcnMudmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PFQsIFM+KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAncnVuJywgY3R4RGF0YVByb3ZpZGVyLCB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQpO1xuICAgICAgICBjdHgucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgIGluc3RhbmNlLm5ld0NvbnRleHQoY3R4KTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSBJdGVtIGluc3RhbmNlIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGNvbnRleHQgcHJlcGFyYXRpb24gd2FzIGNhbGxlZC5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lci9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIEFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dEZvckVkaXRvcjxULCBTPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6ICdzdWJtaXQnIHwgJ2ZldGNoJyxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGNvbnN0IGVkaXRvckFjdGlvbiA9IGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICBsZXQgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlciAmJiBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4RGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyID0gcGFyYW1ldGVycy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGlmICh2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciBhcyBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PFQsIFM+KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCBmdW5jdGlvbk5hbWUsIGN0eERhdGFQcm92aWRlciwgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24gY29udGV4dCBieSBzdWJtaXR0aW5nIGV4ZWN1dGlvbiByZXN1bHRzL2Vycm9ycyB0byBjb250ZXh0LCB3YXRjaGluZyBvdmVyIGluc3RhbmNlIHJlc3VsdHMvZXJyb3JzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsXG4gICAgICogcnVubmluZyBuZXh0L2Vycm9yIGFjdGlvbiBhbmQgdHJpZ2dlcmluZyBkaXNtaXNzIG9mIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBFZGl0b3IgZGF0YSBwcm92aWRlciBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5BY3Rpb25Db250ZXh0PFQsIFM+KGN0eDogQWN0aW9uQ29udGV4dDxULCBTPik6IE9ic2VydmFibGU8VCB8IG51bGwgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgaXNNYWluUnVuRm4gPSBjdHguZnVuY3Rpb25OYW1lID09PSAnc3VibWl0JyB8fCBjdHguZnVuY3Rpb25OYW1lID09PSAncnVuJztcbiAgICAgICAgbGV0IGFjdGlvbkVkaXRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgICAgICBsZXQgZm5PYnM6IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pID0+IE9ic2VydmFibGU8VCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAgICAgICBzd2l0Y2ggKGN0eC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uRWRpdG9yLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgU3VibWl0IGZ1bmN0aW9uIGZvciBhY3Rpb24gJHthY3Rpb25FZGl0b3IuYWN0aW9uTmFtZUxvbmd9IGNhbm5vdCBiZSBpbnZva2VkLmApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3Iuc3VibWl0RnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgICAgIGZuT2JzID0gYWN0aW9uRWRpdG9yLmZldGNoRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdydW4nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmbk9icyA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXRPYnMgPSBvZih2b2lkIDApLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbWFpbiBydW4gZnVuY3Rpb24sIGFsc28gc2V0IGxvYWRpbmcgdG8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmlzUnVuTG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaFN0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdGFydCBjb250ZXh0IGV4ZWN1dGlvbiB0byBtYXJrIGV4ZWN1dGlvbiBsb2FkaW5nXG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvblN0YXJ0KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZm5PYnMoY3R4KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVyZ2VNYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbmV4dCBzdGF0ZSBkZXBlbmRpbmcgb24gcnVuXG4gICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gaXNNYWluUnVuRm4gPyBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQgOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVuZDtcbiAgICAgICAgICAgICAgICAvLyBzZXQgZXhlY3V0aW9uIHJlc3VsdFxuICAgICAgICAgICAgICAgIGN0eC5leGVjdXRpb25OZXh0KHJ1blJlc3VsdCwgaXNNYWluUnVuRm4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBmaW5hbCByZXN1bHQgb24gbWFpbiBydW4gZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5yZXN1bHQgPSBydW5SZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycz8uaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBhZnRlciBydW4gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIG5ldyBzdGF0ZSBmb3IgbmV4dCBhY3Rpb24gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRBY3Rpb25JbnN0YW5jZSA9IHRoaXMuYWN0aXZhdGVBY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVycyhjdHgucGFyYW1ldGVycy5pdGVtSWQsIHJ1blJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoUm91dGUoY3R4LnBhcmFtZXRlcnMucm91dGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKGN0eC5wYXJhbWV0ZXJzLnZpZXdDb250YWluZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UgYXMgQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlID0gbmV4dEFjdGlvbkluc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2VzcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvbkVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihydW5SZXN1bHQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBydW5SZXN1bHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm0gZXJyb3IgdG8gbW5nIGFjdGlvbiBlcnJvclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGxldCBlcnJvck9icyA9IG9mKHZvaWQgMCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmlzUnVuTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGVycm9yIG5vdGlmaWNhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4Lmluc3RhbmNlLmFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXJyb3Iubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBlcnJvciBhY3Rpb24gaWYgcnVuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbm5vdCBzdGFydCB3aXRoIHRyaWdnZXIsIGJlY2F1c2Ugcm91dGluZyBtaWdodCBiZSBwcm9ibGVtYXRpYyAobG91c2luZyBwcmV2aW91cyByZXN1bHRzIGV0Yy4pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckFjdGlvbkluc3RhbmNlID0gdGhpcy5hY3RpdmF0ZUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGlvblBhcmFtZXRlcnMoY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHgucGFyYW1ldGVycy5pdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEoY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhSb3V0ZShjdHgucGFyYW1ldGVycy5yb3V0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQoY3R4LnBhcmFtZXRlcnMuc291cmNlQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIoY3R4LnBhcmFtZXRlcnMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3JBY3Rpb25JbnN0YW5jZSA9IGVycm9yQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck9icyA9IGVycm9yQWN0aW9uSW5zdGFuY2Uuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB2b2lkIDApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbGlzdGUgYW5kIG1hcCBvbmx5IHRvIG1hcmsgaW5zdGFuY2Ugc3RhdGUgYXMgZmluaXNoZWQgZXJyb3Igc3RhdGVcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JPYnMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlYWN0aXZhdGUgYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGhyb3cgZXJyb3IgdG8gcHJvcGFnYXRlIGZ1cmhlclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0T2JzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gbmV4dCBldmVudGAsIHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gZXJyb3IgZXZlbnRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJldE9icztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24ncyBzdWJtaXQgKD1tYWluIHJ1bikgZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRWRpdG9yIGRhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybiBBY3Rpb24gY29udGV4dCBmb3Igc3VibWl0ICg9cnVuKSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yU2F2ZTxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBpbnN0YW5jZSBpZiBub24gcHJvdmlkZWRcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IEFjdGlvbkluc3RhbmNlPFQsIFM+KGFjdGlvbiwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdzdWJtaXQnLCBkYXRhUHJvdmlkZXIsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICB0aGlzLnJ1bkFjdGlvbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgc2VydmljZSBpbnN0YW5jZSBvZiBkYXRhIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0YVByb3ZpZGVyU2VydmljZTxULCBTPihkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+KTogUyB8IG51bGwge1xuICAgICAgICBpZiAoZGF0YVByb3ZpZGVyPy5zZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0PFM+KGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWRpdG9yIGFjdGlvbidzIGZldGNoIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQWN0aW9uIGNvbnRleHQgZm9yIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JGZXRjaDxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBpbnN0YW5jZSBpZiBub24gcHJvdmlkZWRcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IEFjdGlvbkluc3RhbmNlPFQsIFM+KGFjdGlvbiwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgIHRoaXMucnVuQWN0aW9uQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24ncyBtYWluIHJ1biBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQgcnVuLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlciBmb3IgY29udGV4dCBydW4uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybiBBY3Rpb24gY29udGV4dCBmb3IgcnVuIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5BY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQsIHRoaXMuZGVidWcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVBY3Rpb25Db250ZXh0KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCBkYXRhUHJvdmlkZXIsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29tcG9uZW50ID0gcGFyYW1ldGVycz8uc291cmNlQ29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGFjdGlvbi5ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yIGFzIEFjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I8VD47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50Py5nZXRDb25maXJtYXRpb25TZXJ2aWNlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGNvbXBvbmVudCAke3NvdXJjZUNvbXBvbmVudH0gc2hvdWxkIGJlIGltcGxlbWVudGluZyBJQ29uZmlybWF0aW9uU2VydmljZSBpbnRlcmZhY2UgdG8gYmUgYWJsZSB0byBwcm92aWRlIGNvbmZpcm1hdGlvbiBmdW5jdGlvbmFsaXR5LmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcGFyYW1ldGVycy5pdGVtO1xuXG4gICAgICAgICAgICBjb25zdCBzcmNDb25maXJtQ29tcG9uZW50ID0gc291cmNlQ29tcG9uZW50IGFzIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlO1xuICAgICAgICAgICAgbGV0IGNvbmZpcm1QYXJhbXM6IENvbmZpcm1hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbiksXG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRJY29uID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvblN0eWxlLmdldEJ1dHRvbkNsYXNzKCksXG4gICAgICAgICAgICAgICAgcmVqZWN0VmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWplY3RJY29uOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uU3R5bGUuZ2V0QnV0dG9uQ2xhc3MoKSxcbiAgICAgICAgICAgICAgICBjbG9zZU9uRXNjYXBlOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLmNsb3NlT25Fc2NhcGVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5oZWFkZXIgPSBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS50aXRsZScsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IudGl0bGUsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IubWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLm1lc3NhZ2UnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLm1lc3NhZ2UsIFN0cmluZ1V0aWwuZXNjYXBlSHRtbEFueShpdGVtKSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRMYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPSBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5hY2NlcHQnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdExhYmVsLCBpdGVtLCAnZ2VuZXJhbC55ZXMnKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdExhYmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLnJlamVjdCcsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0TGFiZWwsIGl0ZW0sICdnZW5lcmFsLm5vJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RMYWJlbCA9PT0gbnVsbCAmJiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEljb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UhLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuQ29uZmlybWF0aW9uRW5kQWNjZXB0O1xuICAgICAgICAgICAgICAgIHRoaXMucnVuQWN0aW9uQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlIS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvbkVuZFJlamVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24oaW5zdGFuY2UhKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcyA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4oY29udGV4dCwgY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQuY29uZmlybWF0aW9uID0gY29uZmlybVBhcmFtcztcbiAgICAgICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuQ29uZmlybWF0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgIHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpLmNvbmZpcm0oY29uZmlybVBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJ1bkFjdGlvbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbiAoaW4gY2FzZSBvZiBkaWFsb2csIGRpYWxvZyB3aWxsIGJlIG9wZW5lZCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBhY3RpdmF0aW9uIG9mIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmF0ZUFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25JbnN0YW5jZTxULCBTPiB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25TdGFydCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UuYWN0aXZhdGlvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICAvLyBzdGFydCBhY3RpdmF0aW9uIGluc3RhbmNlXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0O1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgbGV0IGRpYWxvZ0NvbXBvbmVudCA9IHRoaXMuZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudDtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDbGFzc05hbWUgPSAnJztcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lID0gYWN0aW9uLmRpYWxvZ0NsYXNzTmFtZSA/PyAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nJztcbiAgICAgICAgICAgICAgICBsZXQgZGlhbG9nU2l6ZUNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLmRpYWxvZ1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEaWFsb2dTaXplRW51bS5FeHRyYVNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nU2l6ZUNsYXNzTmFtZSA9ICdtbmctYWN0aW9uLWVkaXRvci1kaWFsb2cteHMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uRWRpdG9yRGlhbG9nU2l6ZUVudW0uU21hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dTaXplQ2xhc3NOYW1lID0gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZy1zbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEaWFsb2dTaXplRW51bS5MYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1NpemVDbGFzc05hbWUgPSAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nLWxnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkVkaXRvckRpYWxvZ1NpemVFbnVtLkV4dHJhTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dTaXplQ2xhc3NOYW1lID0gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZy14bCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEaWFsb2dTaXplRW51bS5Ob3JtYWw6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpYWxvZ1NpemVDbGFzc05hbWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZSArPSBgICR7ZGlhbG9nU2l6ZUNsYXNzTmFtZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQgPSBhY3Rpb24uZWRpdG9yQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzOiBkaWFsb2dDbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5hY3Rpb25JbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYub25DbG9zZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKGluc3RhbmNlISwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYgPSBkaWFsb2dSZWY7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgcGFyYW1ldGVycywgdW5kZWZpbmVkLCBpbnN0YW5jZSwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIGFjdGlvbiBieSBjaG9vc2luZyBmaW5hbCBzdGF0ZSwgY2xvc2luZyBkaWFsb2cgYW5kIGNvbXBsZXRpbmcgYWxsIHN1YmplY3RzIGluIGluc3RhbmNlIGFuZCBjb250ZXh0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGZyb21EaWFsb2dMaXN0ZW5lciBEZWFjdGl2YXRpb24gY2FsbGVkIGZyb20gZGlhbG9nIGxpc3RlbmVyLCBpbiB0aGlzIGNhc2UgZGVhY3RpdmF0aW9uIGhhcHBlbnMgb25seSBpZiB0cnVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWFjdGl2YXRlQWN0aW9uPFQsIFM+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPiwgZnJvbURpYWxvZ0xpc3RlbmVyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFmcm9tRGlhbG9nTGlzdGVuZXIgJiYgaW5zdGFuY2Uuc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25JbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IGFscmVhZHkgZmluaXNoZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaW5hbFN0YXRlOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5yZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2VzcztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuZXJyb3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpYWxvZyA9IHR5cGVvZiBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIGlmIChoYXNEaWFsb2cgJiYgIWZyb21EaWFsb2dMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGlmIChmaW5hbFN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHN0YXRlIGlzIGZpbmlzaCBhbmQgbm90IGNhbGxlZCBmcm9tIGRpYWxvZyBsaXN0ZW5lciwgY2xvc2UgdGhlIGRpYWxvZyBmaXJzdCB3aGljaCB3aWxsIHJldHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCB0aGVuIGZpbmlzaCBpdFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmIS5jbG9zZShpbnN0YW5jZS5yZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlcnJvciBhbmQgZGlzbWlzc2VkIG11c3QgYm90aCBoYXZlIGZyb21EaWFsb2dMaXN0ZW5lciB0byBiZSBhYmxlIHRvIGZpbmlzaFxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBmaW5hbCBzdGF0ZSBvbiBpbnN0YW5jZVxuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IGZpbmFsU3RhdGU7XG4gICAgICAgIC8vIGNvbXBsZXRlIGFsbCBzdWJqZWN0c1xuICAgICAgICBpbnN0YW5jZS5maW5pc2goKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gZnJvbSB0YWJsZSByb3cgY2xpY2sgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBldmVudCBUYXJnZXQgdGFibGUgY2xpY2sgZXZlbnQuXG4gICAgICogQHBhcmFtIHJvdXRlIEN1cnJlbnRseSBhY3RpdmF0ZSByb3V0ZS5cbiAgICAgKiBAcGFyYW0gdGFibGVEZXNjcmlwdG9yIFRhYmxlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGRhdGFLZXlQcm9wZXJ0eSBEYXRhIGtleSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlclJvd0NsaWNrQWN0aW9uPFQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGV2ZW50OiBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+LFxuICAgICAgICByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICB0YWJsZURlc2NyaXB0b3I/OiBUYWJsZURlc2NyaXB0b3I8VD4sXG4gICAgICAgIGRhdGFLZXlQcm9wZXJ0eT86IHN0cmluZ1xuICAgICkge1xuICAgICAgICBjb25zdCBpZFByb3BlcnR5ID0gZGF0YUtleVByb3BlcnR5ID8/IHRhYmxlRGVzY3JpcHRvcj8uZGF0YUtleVByb3BlcnR5ID8/IGFjdGlvbj8ubW9kZWw/LmlkUHJvcGVydHlOYW1lID8/IGRhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgaWYgKCFpZFByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBjbGljayBhY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZUxvbmd9IGNhbiBub3QgYmUgdHJpZ2dlcmVkLCBiZWNhdXNlIGlkIHByb3BlcnR5IGNvdWxkIG5vdCBiZSBmb3VuZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJdGVtID0gZXZlbnQ/LnJvd0l0ZW0gYXMgYW55O1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgbmV3IEFjdGlvblBhcmFtZXRlcnM8VD4ocm93SXRlbVtpZFByb3BlcnR5XSwgZXZlbnQucm93SXRlbSkud2l0aFJvdXRlKHJvdXRlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIHdpdGggcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGFjdGlvbiBleGVjdXRpb24gdG8gY29uc3RydWN0IG5ldyByb3V0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQWN0aW9uIGluc3RhbmNlIC0gaWYgbm9uIHByb3ZpZGVkIGluIHBhcmFtZXRlcnMsIHRoZSBuZXdseSBjcmVhdGVkIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJBY3Rpb248VCwgUz4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LCBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+KTogQWN0aW9uSW5zdGFuY2U8VCwgUz4ge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIHVuZGVmaW5lZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIGluc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybDogVXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gYWN0aW9uLnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgLy8gVE9ETzogZG9udCBzdHJpcCAnLycsIGJ1dCB1c2UgaXQgYWNjb3JkaW5nbHkgd2l0aCBBbmd1bGFyJ3Mgcm91dGVyIHBhdHRlcm5zICgvLCAuLywgLi4vKVxuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25VcmxTZWdtZW50cyA9IHRoaXMucGFyYW1ldHJpemUudHJhbnNmb3JtKGFjdGlvblVybCwgcGFyYW1ldGVycy5pdGVtSWQsIHBhcmFtZXRlcnMuaXRlbSwgcGFyYW1ldGVycy5hY3Rpb25EYXRhKS5zcGxpdCgnLycpO1xuXG4gICAgICAgICAgICBpbnN0YW5jZS50cmlnZ2VyUm91dGVOYXZpZ2F0aW9uID0gZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYmFzZVVybCwgLi4uYWN0aW9uVXJsU2VnbWVudHNdLCB7cmVsYXRpdmVUbzogcGFyYW1ldGVycy5yb3V0ZSwgcXVlcnlQYXJhbXM6IHBhcnNlZFVybC5xdWVyeVBhcmFtc30pKTtcblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5UcmlnZ2VyRW5kO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIG9uIHJvdXRlIHRyaWdnZXJlZCBhY3Rpb24gYnkgdHJ5aW5nIHRvIHJlcm91dGUgYmFjayB0byBsb2NhdGlvbiB3aGVyZSBhY3Rpb24gd2FzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWFjdGl2YXRlT25Sb3V0ZVRyaWdnZXJlZEFjdGlvbjxULCBTPihpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4pIHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c0xvY2F0aW9uKCkpIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIHNvIGJhY2sgY2FuIGJlIG5vcm1hbGx5IGNhbGxlZFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIGZpZ3VyZSBvdXQgdGhlIGJhc2UgdXJsIGJ5IGVsaW1pbmF0aW5nIGFjdGlvbiBzcGVjaWZpYyB1cmxcbiAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gdXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB1cmxQYXRoU2VnbWVudHMuc2xpY2UoMCwgdXJsUGF0aFNlZ21lbnRzLmxlbmd0aCAtIGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aCkuam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC8ke3JlZGlyZWN0VXJsfWAsIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gZXJyb3Igb2YgYW55IHR5cGUgdG8gbW5nIGVycm9yIGJ5IHVzaW5nIGVycm9yIG1hcHBlciB0aGF0IGNvdWxkIGJlIHByb3ZpZGVkIGJ5IGZpbmFsIHByb2plY3QuXG4gICAgICogQHBhcmFtIGVycm9yIGVycm9yIG9mIGFueSB0eXBlLlxuICAgICAqXG4gICAgICogQHJldHVybiBtYXBwZWQgTW5nRXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIHRvTW5nQWN0aW9uRXJyb3IoZXJyb3I/OiBhbnkpOiBNbmdFcnJvciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yOiBNbmdFcnJvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lID8/ICdVbmtub3duRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXNEZXNjcmlwdGlvbiA9IGVycm9yLnN0YXR1c1RleHQ7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci51cmwgPSBlcnJvci51cmwgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yTWFwcGVyLnRvTW5nRXJyb3IoZXJyb3IsIGFjdGlvbkVycm9yKTtcbiAgICB9XG59XG4iXX0=
|
|
549
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL2FjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFpQixNQUFNLGVBQWUsQ0FBQztBQU1qRSxPQUFPLEVBQWEsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMzRSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLGFBQWEsRUFBRSx1QkFBdUIsRUFBRSxjQUFjLEVBQUUsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQTZCLE1BQU0sNkJBQTZCLENBQUM7QUFHMUssT0FBTyxFQUFtQixzQkFBc0IsRUFBa0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUV6RixPQUFPLEVBQUMsMkJBQTJCLEVBQUUsMEJBQTBCLEVBQUUsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFHN0csT0FBTyxFQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFJakUsT0FBTyxFQUFDLHNDQUFzQyxFQUFDLE1BQU0sVUFBVSxDQUFDOzs7Ozs7Ozs7O0FBR2hFLE1BQU0sT0FBTyx3QkFBd0I7SUFHakMsWUFDWSxRQUFrQixFQUNsQixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsbUJBQXdDLEVBQ3hDLFNBQTJCLEVBQzNCLG9CQUE2QyxFQUM3QyxpQkFBdUMsRUFDdkMsV0FBa0MsRUFDbEMsV0FBK0IsRUFDaUIsNEJBQXVDO1FBVHZGLGFBQVEsR0FBUixRQUFRLENB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QztnQkFDRCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQy9DLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLFdBQVcsRUFBRSxFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7YUFDcEU7U0FDSjtJQUNMLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLEtBQVc7UUFDL0IsTUFBTSxXQUFXLEdBQWE7WUFDMUIsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLElBQUksY0FBYztZQUNuQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sSUFBSSxlQUFlO1lBQzFDLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUNGLElBQUksS0FBSyxZQUFZLGlCQUFpQixFQUFFO1lBQ3BDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNsQyxXQUFXLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUNqRCxXQUFXLENBQUMsR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksU0FBUyxDQUFDO1NBQzVDO1FBQ0QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7cUhBaG9CUSx3QkFBd0Isa1RBYXJCLHNDQUFzQzt5SEFiekMsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVU7OzBCQWNGLE1BQU07MkJBQUMsc0NBQXNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwRXJyb3JSZXNwb25zZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBUeXBlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGUsIFJvdXRlciwgVXJsVHJlZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0RpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb25maWd9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQge09ic2VydmFibGUsIGZyb20sIG1lcmdlTWFwLCBvZiwgc3dpdGNoTWFwLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgZmlsdGVyLCBmaXJzdCwgbWFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7QWN0aW9uQ29udGV4dCwgQWN0aW9uQ29udGV4dFZhbGlkYXRpb24sIEFjdGlvbkluc3RhbmNlLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4uL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5pbXBvcnQge01uZ1RhYmxlQ2VsbENsaWNrRXZlbnR9IGZyb20gJy4uL2NvbXBvbmVudHMvdGFibGV2aWV3L21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgVGFibGVEZXNjcmlwdG9yfSBmcm9tICcuLi9kZXNjcmlwdG9ycyc7XG5pbXBvcnQge0FjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3J9IGZyb20gJy4uL2Rlc2NyaXB0b3JzL2FjdGlvbi9hY3Rpb24tY29uZmlybWF0aW9uLmRlc2NyaXB0b3InO1xuaW1wb3J0IHtBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sIEFjdGlvbkVkaXRvckRpYWxvZ1NpemVFbnVtLCBBY3Rpb25UeXBlRW51bX0gZnJvbSAnLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNbmdFcnJvcn0gZnJvbSAnLi4vbW9kZWxzJztcbmltcG9ydCB7TW5nUGFyYW1ldHJpemVQaXBlfSBmcm9tICcuLi9waXBlcyc7XG5pbXBvcnQge0kxOG5VdGlscywgTm90aWZpY2F0aW9uVXRpbCwgU3RyaW5nVXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtNbmdDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdFcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4vZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtNbmdOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElOR30gZnJvbSAnLi90b2tlbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcml2YXRlIGRlYnVnID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maXJtYXRpb25TZXJ2aWNlOiBDb25maXJtYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb25maWd1cmF0aW9uU2VydmljZTogTW5nQ29uZmlndXJhdGlvblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmF2aWdhdGlvblNlcnZpY2U6IE1uZ05hdmlnYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGVycm9yTWFwcGVyOiBNbmdFcnJvck1hcHBlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcGFyYW1ldHJpemU6IE1uZ1BhcmFtZXRyaXplUGlwZSxcbiAgICAgICAgQEluamVjdChBQ1RJT05fRURJVE9SX0RJQUxPR19DT01QT05FTlRfU0VUVElORykgcHJpdmF0ZSBkZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50OiBUeXBlPGFueT5cbiAgICApIHtcbiAgICAgICAgLy8gdGhpcy5kZWJ1ZyA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8VD4sIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz4pOiBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBhY3Rpb24uZGF0YVByb3ZpZGVyID8/IHBhcmFtZXRlcnMudmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxULCBTPihhY3Rpb24sIHBhcmFtZXRlcnMsIGN0eERhdGFQcm92aWRlciwgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcHJlcGFyZUFjdGlvbkNvbnRleHQ8VCwgUz4oXG4gICAgICAgIGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBpbnN0YW5jZS5hY3Rpb24uZGF0YVByb3ZpZGVyID8/IHBhcmFtZXRlcnMudmlld0NvbnRhaW5lcj8uZ2V0RGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PFQsIFM+KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAncnVuJywgY3R4RGF0YVByb3ZpZGVyLCB0aGlzLmdldERhdGFQcm92aWRlclNlcnZpY2UoY3R4RGF0YVByb3ZpZGVyKSA/PyB1bmRlZmluZWQpO1xuICAgICAgICBjdHgucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgIGluc3RhbmNlLm5ld0NvbnRleHQoY3R4KTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSBJdGVtIGluc3RhbmNlIChpZiBleGlzdHMpLlxuICAgICAqIEBwYXJhbSBpdGVtSWQgSXRlbSBpZCAoaWYgZXhpc3RzKS5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICogQHBhcmFtIHNvdXJjZUNvbXBvbmVudCBTb3VyY2UgY29tcG9uZW50IGZyb20gd2hlcmUgdGhlIGNvbnRleHQgcHJlcGFyYXRpb24gd2FzIGNhbGxlZC5cbiAgICAgKiBAcGFyYW0gdmlld0NvbnRhaW5lciBWaWV3IGNvbnRhaW5lci9zZXJ2aWNlLlxuICAgICAqIEBwYXJhbSBhY3Rpb25EYXRhIEFkZGl0aW9uYWwgYWN0aW9uIGRhdGEuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dEZvckVkaXRvcjxULCBTPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6ICdzdWJtaXQnIHwgJ2ZldGNoJyxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGNvbnN0IGVkaXRvckFjdGlvbiA9IGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICBsZXQgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlciAmJiBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSBlZGl0b3JBY3Rpb24uZGF0YVByb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3R4RGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyID0gcGFyYW1ldGVycy52aWV3Q29udGFpbmVyPy5nZXREYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgICAgIGlmICh2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciBhcyBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PFQsIFM+KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCBmdW5jdGlvbk5hbWUsIGN0eERhdGFQcm92aWRlciwgdGhpcy5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24gY29udGV4dCBieSBzdWJtaXR0aW5nIGV4ZWN1dGlvbiByZXN1bHRzL2Vycm9ycyB0byBjb250ZXh0LCB3YXRjaGluZyBvdmVyIGluc3RhbmNlIHJlc3VsdHMvZXJyb3JzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsXG4gICAgICogcnVubmluZyBuZXh0L2Vycm9yIGFjdGlvbiBhbmQgdHJpZ2dlcmluZyBkaXNtaXNzIG9mIGFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBFZGl0b3IgZGF0YSBwcm92aWRlciBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5BY3Rpb25Db250ZXh0PFQsIFM+KGN0eDogQWN0aW9uQ29udGV4dDxULCBTPik6IE9ic2VydmFibGU8VCB8IG51bGwgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgaXNNYWluUnVuRm4gPSBjdHguZnVuY3Rpb25OYW1lID09PSAnc3VibWl0JyB8fCBjdHguZnVuY3Rpb25OYW1lID09PSAncnVuJztcbiAgICAgICAgbGV0IGFjdGlvbkVkaXRvcjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPjtcblxuICAgICAgICBsZXQgZm5PYnM6IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pID0+IE9ic2VydmFibGU8VCB8IG51bGwgfCB1bmRlZmluZWQ+O1xuICAgICAgICBzd2l0Y2ggKGN0eC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0aW9uRWRpdG9yLnN1Ym1pdEZ1bmN0aW9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihgU3VibWl0IGZ1bmN0aW9uIGZvciBhY3Rpb24gJHthY3Rpb25FZGl0b3IuYWN0aW9uTmFtZUxvbmd9IGNhbm5vdCBiZSBpbnZva2VkLmApKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3Iuc3VibWl0RnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdmZXRjaCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgICAgICAgICAgICAgIGZuT2JzID0gYWN0aW9uRWRpdG9yLmZldGNoRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdydW4nOlxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBmbk9icyA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXRPYnMgPSBvZih2b2lkIDApLnBpcGUoXG4gICAgICAgICAgICBmaXJzdCgpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbWFpbiBydW4gZnVuY3Rpb24sIGFsc28gc2V0IGxvYWRpbmcgdG8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmlzUnVuTG9hZGluZ1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaFN0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBzdGFydCBjb250ZXh0IGV4ZWN1dGlvbiB0byBtYXJrIGV4ZWN1dGlvbiBsb2FkaW5nXG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvblN0YXJ0KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZm5PYnMoY3R4KTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWVyZ2VNYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAvLyBzZXQgbmV4dCBzdGF0ZSBkZXBlbmRpbmcgb24gcnVuXG4gICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gaXNNYWluUnVuRm4gPyBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5FbmQgOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GZXRjaEVuZDtcbiAgICAgICAgICAgICAgICAvLyBzZXQgZXhlY3V0aW9uIHJlc3VsdFxuICAgICAgICAgICAgICAgIGN0eC5leGVjdXRpb25OZXh0KHJ1blJlc3VsdCwgaXNNYWluUnVuRm4pO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBmaW5hbCByZXN1bHQgb24gbWFpbiBydW4gZXhlY3V0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5yZXN1bHQgPSBydW5SZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5pc1J1bkxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBub3RpZmljYXRpb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuTm90aWZpY2F0aW9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm5vdGlmaWNhdGlvbiA9IE5vdGlmaWNhdGlvblV0aWwuYWN0aW9uTm90aWZpY2F0aW9uU3VjY2VzcyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgucGFyYW1ldGVycz8uaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBhZnRlciBydW4gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIG5ldyBzdGF0ZSBmb3IgbmV4dCBhY3Rpb24gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLk5leHRBY3Rpb25TdGFydDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRBY3Rpb25JbnN0YW5jZSA9IHRoaXMuYWN0aXZhdGVBY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uUGFyYW1ldGVyczx1bmtub3duPihjdHgucGFyYW1ldGVycy5pdGVtSWQsIHJ1blJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGN0eC5wYXJhbWV0ZXJzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoUm91dGUoY3R4LnBhcmFtZXRlcnMucm91dGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKGN0eC5wYXJhbWV0ZXJzLnZpZXdDb250YWluZXIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UgYXMgQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlID0gbmV4dEFjdGlvbkluc3RhbmNlO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc3RhdGUgPT4gc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2VzcyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvbkVuZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihydW5SZXN1bHQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBydW5SZXN1bHQ7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm0gZXJyb3IgdG8gbW5nIGFjdGlvbiBlcnJvclxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbkVycm9yID0gdGhpcy50b01uZ0FjdGlvbkVycm9yKGVycik7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGxldCBlcnJvck9icyA9IG9mKHZvaWQgMCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWFpblJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmlzUnVuTG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIGVycm9yIG5vdGlmaWNhdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3R4Lmluc3RhbmNlLmFjdGlvbi5oYXNSdW5Ob3RpZmljYXRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRXJyb3Iubm90aWZpY2F0aW9uID0gTm90aWZpY2F0aW9uVXRpbC5hY3Rpb25Ob3RpZmljYXRpb25FcnJvcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5mdW5jdGlvbk5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBlcnJvciBhY3Rpb24gaWYgcnVuXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbm5vdCBzdGFydCB3aXRoIHRyaWdnZXIsIGJlY2F1c2Ugcm91dGluZyBtaWdodCBiZSBwcm9ibGVtYXRpYyAobG91c2luZyBwcmV2aW91cyByZXN1bHRzIGV0Yy4pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckFjdGlvbkluc3RhbmNlID0gdGhpcy5hY3RpdmF0ZUFjdGlvbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGlvblBhcmFtZXRlcnM8dW5rbm93bj4oY3R4LnBhcmFtZXRlcnMuaXRlbUlkLCBjdHgucGFyYW1ldGVycy5pdGVtKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFjdGlvbkRhdGEoY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhSb3V0ZShjdHgucGFyYW1ldGVycy5yb3V0ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQoY3R4LnBhcmFtZXRlcnMuc291cmNlQ29tcG9uZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIoY3R4LnBhcmFtZXRlcnMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3JBY3Rpb25JbnN0YW5jZSA9IGVycm9yQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck9icyA9IGVycm9yQWN0aW9uSW5zdGFuY2Uuc3RhdGUkLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3MpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB2b2lkIDApXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gbGlzdGUgYW5kIG1hcCBvbmx5IHRvIG1hcmsgaW5zdGFuY2Ugc3RhdGUgYXMgZmluaXNoZWQgZXJyb3Igc3RhdGVcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JPYnMucGlwZShcbiAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRlYWN0aXZhdGUgYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGhyb3cgZXJyb3IgdG8gcHJvcGFnYXRlIGZ1cmhlclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgYWN0aW9uRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0T2JzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gbmV4dCBldmVudGAsIHJlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gZXJyb3IgZXZlbnRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJldE9icztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGVkaXRvciBhY3Rpb24ncyBzdWJtaXQgKD1tYWluIHJ1bikgZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRWRpdG9yIGRhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybiBBY3Rpb24gY29udGV4dCBmb3Igc3VibWl0ICg9cnVuKSBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcnVuRWRpdG9yU2F2ZTxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBpbnN0YW5jZSBpZiBub24gcHJvdmlkZWRcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IEFjdGlvbkluc3RhbmNlPFQsIFM+KGFjdGlvbiwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdzdWJtaXQnLCBkYXRhUHJvdmlkZXIsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICB0aGlzLnJ1bkFjdGlvbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgc2VydmljZSBpbnN0YW5jZSBvZiBkYXRhIHByb3ZpZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0RGF0YVByb3ZpZGVyU2VydmljZTxULCBTPihkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIFM+KTogUyB8IG51bGwge1xuICAgICAgICBpZiAoZGF0YVByb3ZpZGVyPy5zZXJ2aWNlVHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0PFM+KGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJ1bnMgZWRpdG9yIGFjdGlvbidzIGZldGNoIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQWN0aW9uIGNvbnRleHQgZm9yIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5FZGl0b3JGZXRjaDxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIFM+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25Db250ZXh0PFQsIFM+IHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgLy8gY3JlYXRlIG5ldyBpbnN0YW5jZSBpZiBub24gcHJvdmlkZWRcbiAgICAgICAgICAgIGluc3RhbmNlID0gbmV3IEFjdGlvbkluc3RhbmNlPFQsIFM+KGFjdGlvbiwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgIHRoaXMucnVuQWN0aW9uQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24ncyBtYWluIHJ1biBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQgcnVuLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlciBmb3IgY29udGV4dCBydW4uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybiBBY3Rpb24gY29udGV4dCBmb3IgcnVuIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW5BY3Rpb248VCwgUz4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxUPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPHVua25vd24sIHVua25vd24+XG4gICAgKTogQWN0aW9uQ29udGV4dDxULCBTPiB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQsIHRoaXMuZGVidWcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnByZXBhcmVBY3Rpb25Db250ZXh0KGluc3RhbmNlLCBwYXJhbWV0ZXJzLCBkYXRhUHJvdmlkZXIsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuICAgICAgICBpZiAoYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29tcG9uZW50ID0gcGFyYW1ldGVycz8uc291cmNlQ29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGFjdGlvbi5ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yIGFzIEFjdGlvbkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3I8VD47XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc291cmNlQ29tcG9uZW50Py5nZXRDb25maXJtYXRpb25TZXJ2aWNlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBzb3VyY2VDb21wb25lbnQ/LmdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgU291cmNlIGNvbXBvbmVudCAke3NvdXJjZUNvbXBvbmVudH0gc2hvdWxkIGJlIGltcGxlbWVudGluZyBJQ29uZmlybWF0aW9uU2VydmljZSBpbnRlcmZhY2UgdG8gYmUgYWJsZSB0byBwcm92aWRlIGNvbmZpcm1hdGlvbiBmdW5jdGlvbmFsaXR5LmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gcGFyYW1ldGVycy5pdGVtO1xuXG4gICAgICAgICAgICBjb25zdCBzcmNDb25maXJtQ29tcG9uZW50ID0gc291cmNlQ29tcG9uZW50IGFzIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlO1xuICAgICAgICAgICAgbGV0IGNvbmZpcm1QYXJhbXM6IENvbmZpcm1hdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBrZXk6IHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZUluc3RhbmNlS2V5KGFjdGlvbiksXG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRJY29uID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBhY2NlcHRCdXR0b25TdHlsZUNsYXNzOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvblN0eWxlLmdldEJ1dHRvbkNsYXNzKCksXG4gICAgICAgICAgICAgICAgcmVqZWN0VmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICByZWplY3RJY29uOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uU3R5bGUuZ2V0QnV0dG9uQ2xhc3MoKSxcbiAgICAgICAgICAgICAgICBjbG9zZU9uRXNjYXBlOiBjb25maXJtYXRpb25EZXNjcmlwdG9yLmNsb3NlT25Fc2NhcGVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnRpdGxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5oZWFkZXIgPSBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS50aXRsZScsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IudGl0bGUsIGl0ZW0sICdnZW5lcmFsLmNvbmZpcm1hdGlvbicpID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IubWVzc2FnZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgIEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLm1lc3NhZ2UnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLm1lc3NhZ2UsIFN0cmluZ1V0aWwuZXNjYXBlSHRtbEFueShpdGVtKSwgJ2dlbmVyYWwuY29uZmlybWF0aW9uJykgPz9cbiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRMYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPSBJMThuVXRpbHMuQWN0aW9uLmdldCh0aGlzLnRyYW5zbGF0ZSwgYWN0aW9uLCAnY29uZmlybS5hY2NlcHQnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdExhYmVsLCBpdGVtLCAnZ2VuZXJhbC55ZXMnKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEljb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdEljb24gPSBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdExhYmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0KHRoaXMudHJhbnNsYXRlLCBhY3Rpb24sICdjb25maXJtLnJlamVjdCcsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0TGFiZWwsIGl0ZW0sICdnZW5lcmFsLm5vJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RMYWJlbCA9PT0gbnVsbCAmJiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEljb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdFZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlybVBhcmFtcy5hY2NlcHQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UhLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuQ29uZmlybWF0aW9uRW5kQWNjZXB0O1xuICAgICAgICAgICAgICAgIHRoaXMucnVuQWN0aW9uQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGluc3RhbmNlIS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvbkVuZFJlamVjdDtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGVBY3Rpb24oaW5zdGFuY2UhKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcyA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4oY29udGV4dCwgY29uZmlybVBhcmFtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRleHQuY29uZmlybWF0aW9uID0gY29uZmlybVBhcmFtcztcbiAgICAgICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuQ29uZmlybWF0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgIHNyY0NvbmZpcm1Db21wb25lbnQuZ2V0Q29uZmlybWF0aW9uU2VydmljZSgpLmNvbmZpcm0oY29uZmlybVBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJ1bkFjdGlvbkNvbnRleHQoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbiAoaW4gY2FzZSBvZiBkaWFsb2csIGRpYWxvZyB3aWxsIGJlIG9wZW5lZCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBhY3RpdmF0aW9uIG9mIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmF0ZUFjdGlvbjxULCBTPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8dW5rbm93biwgdW5rbm93bj5cbiAgICApOiBBY3Rpb25JbnN0YW5jZTxULCBTPiB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25TdGFydCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2UuYWN0aXZhdGlvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICAvLyBzdGFydCBhY3RpdmF0aW9uIGluc3RhbmNlXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0O1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgbGV0IGRpYWxvZ0NvbXBvbmVudCA9IHRoaXMuZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudDtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDbGFzc05hbWUgPSAnJztcbiAgICAgICAgICAgIGlmIChhY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lID0gYWN0aW9uLmRpYWxvZ0NsYXNzTmFtZSA/PyAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nJztcbiAgICAgICAgICAgICAgICBsZXQgZGlhbG9nU2l6ZUNsYXNzTmFtZSA9ICcnO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLmRpYWxvZ1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEaWFsb2dTaXplRW51bS5FeHRyYVNtYWxsOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nU2l6ZUNsYXNzTmFtZSA9ICdtbmctYWN0aW9uLWVkaXRvci1kaWFsb2cteHMnO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQWN0aW9uRWRpdG9yRGlhbG9nU2l6ZUVudW0uU21hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dTaXplQ2xhc3NOYW1lID0gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZy1zbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEaWFsb2dTaXplRW51bS5MYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ1NpemVDbGFzc05hbWUgPSAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nLWxnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIEFjdGlvbkVkaXRvckRpYWxvZ1NpemVFbnVtLkV4dHJhTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dTaXplQ2xhc3NOYW1lID0gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZy14bCc7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBY3Rpb25FZGl0b3JEaWFsb2dTaXplRW51bS5Ob3JtYWw6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRpYWxvZ1NpemVDbGFzc05hbWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZSArPSBgICR7ZGlhbG9nU2l6ZUNsYXNzTmFtZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQgPSBhY3Rpb24uZWRpdG9yQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGRpYWxvZ0NvbmZpZzogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzOiBkaWFsb2dDbGFzc05hbWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YS5hY3Rpb25JbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYub25DbG9zZS5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWFjdGl2YXRlQWN0aW9uKGluc3RhbmNlISwgdHJ1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYgPSBkaWFsb2dSZWY7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucnVuQWN0aW9uPFQsIFM+KGFjdGlvbiwgcGFyYW1ldGVycywgdW5kZWZpbmVkLCBpbnN0YW5jZSwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIGFjdGlvbiBieSBjaG9vc2luZyBmaW5hbCBzdGF0ZSwgY2xvc2luZyBkaWFsb2cgYW5kIGNvbXBsZXRpbmcgYWxsIHN1YmplY3RzIGluIGluc3RhbmNlIGFuZCBjb250ZXh0cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGZyb21EaWFsb2dMaXN0ZW5lciBEZWFjdGl2YXRpb24gY2FsbGVkIGZyb20gZGlhbG9nIGxpc3RlbmVyLCBpbiB0aGlzIGNhc2UgZGVhY3RpdmF0aW9uIGhhcHBlbnMgb25seSBpZiB0cnVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWFjdGl2YXRlQWN0aW9uPFQsIFM+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxULCBTPiwgZnJvbURpYWxvZ0xpc3RlbmVyID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCFmcm9tRGlhbG9nTGlzdGVuZXIgJiYgaW5zdGFuY2Uuc3RhdGUgPj0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBBY3Rpb25JbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IGFscmVhZHkgZmluaXNoZWRgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaW5hbFN0YXRlOiBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5yZXN1bHQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2VzcztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuZXJyb3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRXJyb3I7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoRGlzbWlzc2VkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpYWxvZyA9IHR5cGVvZiBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIGlmIChoYXNEaWFsb2cgJiYgIWZyb21EaWFsb2dMaXN0ZW5lcikge1xuICAgICAgICAgICAgICAgIGlmIChmaW5hbFN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHN0YXRlIGlzIGZpbmlzaCBhbmQgbm90IGNhbGxlZCBmcm9tIGRpYWxvZyBsaXN0ZW5lciwgY2xvc2UgdGhlIGRpYWxvZyBmaXJzdCB3aGljaCB3aWxsIHJldHJpZ2dlciB0aGlzIGZ1bmN0aW9uLCB0aGVuIGZpbmlzaCBpdFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmIS5jbG9zZShpbnN0YW5jZS5yZXN1bHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBlcnJvciBhbmQgZGlzbWlzc2VkIG11c3QgYm90aCBoYXZlIGZyb21EaWFsb2dMaXN0ZW5lciB0byBiZSBhYmxlIHRvIGZpbmlzaFxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNldCBmaW5hbCBzdGF0ZSBvbiBpbnN0YW5jZVxuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IGZpbmFsU3RhdGU7XG4gICAgICAgIC8vIGNvbXBsZXRlIGFsbCBzdWJqZWN0c1xuICAgICAgICBpbnN0YW5jZS5maW5pc2goKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gZnJvbSB0YWJsZSByb3cgY2xpY2sgcG9zaXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBldmVudCBUYXJnZXQgdGFibGUgY2xpY2sgZXZlbnQuXG4gICAgICogQHBhcmFtIHJvdXRlIEN1cnJlbnRseSBhY3RpdmF0ZSByb3V0ZS5cbiAgICAgKiBAcGFyYW0gdGFibGVEZXNjcmlwdG9yIFRhYmxlIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIGRhdGFLZXlQcm9wZXJ0eSBEYXRhIGtleSBwcm9wZXJ0eS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdHJpZ2dlclJvd0NsaWNrQWN0aW9uPFQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sXG4gICAgICAgIGV2ZW50OiBNbmdUYWJsZUNlbGxDbGlja0V2ZW50PFQ+LFxuICAgICAgICByb3V0ZT86IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICB0YWJsZURlc2NyaXB0b3I/OiBUYWJsZURlc2NyaXB0b3I8VD4sXG4gICAgICAgIGRhdGFLZXlQcm9wZXJ0eT86IHN0cmluZ1xuICAgICkge1xuICAgICAgICBjb25zdCBpZFByb3BlcnR5ID0gZGF0YUtleVByb3BlcnR5ID8/IHRhYmxlRGVzY3JpcHRvcj8uZGF0YUtleVByb3BlcnR5ID8/IGFjdGlvbj8ubW9kZWw/LmlkUHJvcGVydHlOYW1lID8/IGRhdGFLZXlQcm9wZXJ0eTtcbiAgICAgICAgaWYgKCFpZFByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdyBjbGljayBhY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZUxvbmd9IGNhbiBub3QgYmUgdHJpZ2dlcmVkLCBiZWNhdXNlIGlkIHByb3BlcnR5IGNvdWxkIG5vdCBiZSBmb3VuZC5gKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dJdGVtID0gZXZlbnQ/LnJvd0l0ZW0gYXMgYW55O1xuICAgICAgICByZXR1cm4gdGhpcy50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgbmV3IEFjdGlvblBhcmFtZXRlcnM8VD4ocm93SXRlbVtpZFByb3BlcnR5XSwgZXZlbnQucm93SXRlbSkud2l0aFJvdXRlKHJvdXRlKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJpZ2dlcnMgYWN0aW9uIHdpdGggcGFyYW1ldGVycy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGFjdGlvbiBleGVjdXRpb24gdG8gY29uc3RydWN0IG5ldyByb3V0ZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4gQWN0aW9uIGluc3RhbmNlIC0gaWYgbm9uIHByb3ZpZGVkIGluIHBhcmFtZXRlcnMsIHRoZSBuZXdseSBjcmVhdGVkIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHVibGljIHRyaWdnZXJBY3Rpb248VCwgUz4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFQ+LCBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPFQ+KTogQWN0aW9uSW5zdGFuY2U8VCwgUz4ge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxULCBTPihhY3Rpb24sIHVuZGVmaW5lZCwgdGhpcy5kZWJ1Zyk7XG4gICAgICAgIGluc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzID0gcGFyYW1ldGVycztcbiAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFVybDogVXJsVHJlZSA9IHRoaXMucm91dGVyLnBhcnNlVXJsKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgICAgICBsZXQgYWN0aW9uVXJsID0gYWN0aW9uLnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgLy8gVE9ETzogZG9udCBzdHJpcCAnLycsIGJ1dCB1c2UgaXQgYWNjb3JkaW5nbHkgd2l0aCBBbmd1bGFyJ3Mgcm91dGVyIHBhdHRlcm5zICgvLCAuLywgLi4vKVxuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25VcmxTZWdtZW50cyA9IHRoaXMucGFyYW1ldHJpemUudHJhbnNmb3JtKGFjdGlvblVybCwgcGFyYW1ldGVycy5pdGVtSWQsIHBhcmFtZXRlcnMuaXRlbSwgcGFyYW1ldGVycy5hY3Rpb25EYXRhKS5zcGxpdCgnLycpO1xuXG4gICAgICAgICAgICBpbnN0YW5jZS50cmlnZ2VyUm91dGVOYXZpZ2F0aW9uID0gZnJvbSh0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYmFzZVVybCwgLi4uYWN0aW9uVXJsU2VnbWVudHNdLCB7cmVsYXRpdmVUbzogcGFyYW1ldGVycy5yb3V0ZSwgcXVlcnlQYXJhbXM6IHBhcnNlZFVybC5xdWVyeVBhcmFtc30pKTtcblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5UcmlnZ2VyRW5kO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZhdGVBY3Rpb24oYWN0aW9uLCBwYXJhbWV0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlYWN0aXZhdGVzIG9uIHJvdXRlIHRyaWdnZXJlZCBhY3Rpb24gYnkgdHJ5aW5nIHRvIHJlcm91dGUgYmFjayB0byBsb2NhdGlvbiB3aGVyZSBhY3Rpb24gd2FzIHRyaWdnZXJlZC5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWFjdGl2YXRlT25Sb3V0ZVRyaWdnZXJlZEFjdGlvbjxULCBTPihpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8VCwgUz4pIHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRQcmV2aW91c0xvY2F0aW9uKCkpIHtcbiAgICAgICAgICAgIC8vIHRoZXJlIGFyZSBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIHNvIGJhY2sgY2FuIGJlIG5vcm1hbGx5IGNhbGxlZFxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGVyZSBpcyBubyBpbnRlcm5hbCBoaXN0b3J5IHJlY29yZHMsIGZpZ3VyZSBvdXQgdGhlIGJhc2UgdXJsIGJ5IGVsaW1pbmF0aW5nIGFjdGlvbiBzcGVjaWZpYyB1cmxcbiAgICAgICAgICAgIGxldCB1cmwgPSB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldEN1cnJlbnRMb2NhdGlvbigpO1xuICAgICAgICAgICAgaWYgKCF1cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmJhY2soKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdXJsLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gdXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXS5zcGxpdCgnLycpO1xuICAgICAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgICAgIGlmIChhY3Rpb25Vcmwuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gYWN0aW9uVXJsLnNwbGl0KCcvJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RVcmwgPSB1cmxQYXRoU2VnbWVudHMuc2xpY2UoMCwgdXJsUGF0aFNlZ21lbnRzLmxlbmd0aCAtIGFjdGlvblVybFNlZ21lbnRzLmxlbmd0aCkuam9pbignLycpO1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC8ke3JlZGlyZWN0VXJsfWAsIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gZXJyb3Igb2YgYW55IHR5cGUgdG8gbW5nIGVycm9yIGJ5IHVzaW5nIGVycm9yIG1hcHBlciB0aGF0IGNvdWxkIGJlIHByb3ZpZGVkIGJ5IGZpbmFsIHByb2plY3QuXG4gICAgICogQHBhcmFtIGVycm9yIGVycm9yIG9mIGFueSB0eXBlLlxuICAgICAqXG4gICAgICogQHJldHVybiBtYXBwZWQgTW5nRXJyb3IuXG4gICAgICovXG4gICAgcHVibGljIHRvTW5nQWN0aW9uRXJyb3IoZXJyb3I/OiBhbnkpOiBNbmdFcnJvciB7XG4gICAgICAgIGNvbnN0IGFjdGlvbkVycm9yOiBNbmdFcnJvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGVycm9yPy5uYW1lID8/ICdVbmtub3duRXJyb3InLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yXG4gICAgICAgIH07XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKSB7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXMgPSBlcnJvci5zdGF0dXM7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci5zdGF0dXNEZXNjcmlwdGlvbiA9IGVycm9yLnN0YXR1c1RleHQ7XG4gICAgICAgICAgICBhY3Rpb25FcnJvci51cmwgPSBlcnJvci51cmwgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmVycm9yTWFwcGVyLnRvTW5nRXJyb3IoZXJyb3IsIGFjdGlvbkVycm9yKTtcbiAgICB9XG59XG4iXX0=
|