@mediusinc/mng-commons 2.0.0-rc.1-b808fba6 → 2.0.0-rc.2-d8b4bafc
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/README.md +32 -32
- package/esm2020/index.mjs +61 -0
- package/esm2020/lib/components/action/action.component.mjs +19 -12
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +8 -6
- package/esm2020/lib/components/action/localization/data-language-dropdown.component.mjs +6 -4
- package/esm2020/lib/components/action/models/action-execution.model.mjs +9 -1
- package/esm2020/lib/components/action/route/action-route.component.mjs +6 -4
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +7 -6
- package/esm2020/lib/components/form/date-range/date-range.component.mjs +5 -5
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +7 -6
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +8 -5
- package/esm2020/lib/components/form/formly/fields/formly-field-action/formly-field-action.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +7 -6
- package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +6 -6
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +6 -6
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +6 -6
- package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
- package/esm2020/lib/components/form/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +5 -5
- package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +5 -5
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +5 -4
- package/esm2020/lib/components/layout/footer.component.mjs +5 -4
- package/esm2020/lib/components/layout/main-layout.component.mjs +7 -6
- package/esm2020/lib/components/layout/menu-item.component.mjs +10 -6
- package/esm2020/lib/components/layout/menu.component.mjs +7 -5
- package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +5 -4
- package/esm2020/lib/components/layout/topbar-user.component.mjs +7 -5
- package/esm2020/lib/components/layout/topbar.component.mjs +8 -6
- package/esm2020/lib/components/layout/version.component.mjs +6 -4
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +3 -3
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +5 -4
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +6 -4
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +9 -7
- package/esm2020/lib/components/tableview/table/table.component.mjs +9 -8
- package/esm2020/lib/components/tableview/tableview.component.mjs +10 -8
- package/esm2020/lib/descriptors/action/action.descriptor.mjs +1 -2
- package/esm2020/lib/directives/component.directive.mjs +5 -5
- package/esm2020/lib/directives/template.directive.mjs +5 -5
- package/esm2020/lib/mng-commons.module.mjs +4 -4
- package/esm2020/lib/pipes/boolean.pipe.mjs +3 -3
- package/esm2020/lib/pipes/class-map.pipe.mjs +3 -3
- package/esm2020/lib/pipes/enum.pipe.mjs +3 -3
- package/esm2020/lib/pipes/enumerate-async.pipe.mjs +6 -4
- package/esm2020/lib/pipes/enumerate.pipe.mjs +6 -4
- package/esm2020/lib/pipes/getter.pipe.mjs +3 -3
- package/esm2020/lib/pipes/i18n-property.pipe.mjs +3 -3
- package/esm2020/lib/pipes/json-path.pipe.mjs +3 -3
- package/esm2020/lib/pipes/locale-default-row-class.pipe.mjs +5 -5
- package/esm2020/lib/pipes/parametrize.pipe.mjs +3 -3
- package/esm2020/lib/pipes/template.pipe.mjs +5 -4
- package/esm2020/lib/router/routes-builder.mjs +1 -1
- package/esm2020/lib/router/tableview-route-builder.mjs +2 -2
- package/esm2020/lib/security/authorization.guard.mjs +5 -4
- package/esm2020/lib/security/authorization.service.mjs +7 -5
- package/esm2020/lib/services/action-executor.service.mjs +16 -5
- package/esm2020/lib/services/commons.service.mjs +8 -5
- package/esm2020/lib/services/configuration.service.mjs +1 -5
- package/esm2020/lib/services/internal/commons-init.service.mjs +8 -6
- package/esm2020/lib/services/navigation.service.mjs +6 -5
- package/esm2020/lib/services/router.service.mjs +5 -5
- package/esm2020/lib/services/version.service.mjs +6 -4
- package/esm2020/lib/services/view-container.component.service.mjs +5 -4
- package/esm2020/lib/types/i18n.type.mjs +2 -0
- package/esm2020/lib/types/index.mjs +2 -1
- package/esm2020/lib/utils/editor-formly.util.mjs +1 -2
- package/esm2020/lib/utils/i18n.util.mjs +49 -6
- package/esm2020/mediusinc-mng-commons.mjs +2 -2
- package/fesm2015/mediusinc-mng-commons.mjs +251 -203
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +620 -570
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/index.d.ts +40 -5
- package/lib/components/action/action.component.d.ts +2 -2
- package/lib/descriptors/editor/field.descriptor.d.ts +2 -2
- package/lib/types/i18n.type.d.ts +1 -0
- package/lib/types/index.d.ts +1 -0
- package/lib/utils/i18n.util.d.ts +31 -2
- package/package.json +13 -10
- package/scss/common/theme/designer/_components.scss +1 -1
- package/scss/common/theme/extensions/_vendor_extensions.scss +1 -1
- package/scss/mng-overrides/_layout_menu.scss +1 -1
- package/scss/mng-overrides/_theme_menu.scss +5 -0
- package/scss/mng-overrides/_theme_styles.scss +1 -0
- package/assets/i18n/en.json +0 -259
- package/assets/i18n/sl.json +0 -258
- package/assets/images/effect-ondark.png +0 -0
- package/assets/images/effect-ondark.svg +0 -38
- package/assets/images/effect-ondark@2x.png +0 -0
- package/assets/images/effect-onlight.png +0 -0
- package/assets/images/effect-onlight.svg +0 -38
- package/assets/images/effect-onlight@2x.png +0 -0
- package/assets/images/pages/exception-ondark.png +0 -0
- package/assets/images/pages/exception-onlight.png +0 -0
- package/assets/images/pages/login-ondark.png +0 -0
- package/assets/images/pages/login-onlight.png +0 -0
- package/esm2020/public-api.mjs +0 -61
- package/public-api.d.ts +0 -40
- package/version-info.json +0 -10
package/README.md
CHANGED
|
@@ -26,21 +26,21 @@ Primer konfiguracije za multi-module HTTP loader:
|
|
|
26
26
|
- HTTP loader factory:
|
|
27
27
|
```ts
|
|
28
28
|
export function i18nHttpLoaderFactory(http: HttpClient) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
return new MultiTranslateHttpLoader(http, [
|
|
30
|
+
{prefix: './assets/i18n/mng/', suffix: '.json'},
|
|
31
|
+
{prefix: './assets/i18n/', suffix: '.json'}
|
|
32
|
+
]);
|
|
33
33
|
}
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
- Konfiguracija v `AppModule`:
|
|
37
37
|
```ts
|
|
38
38
|
TranslateModule.forRoot({
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
loader: {
|
|
40
|
+
provide: TranslateLoader,
|
|
41
|
+
useFactory: i18nHttpLoaderFactory,
|
|
42
|
+
deps: [HttpClient]
|
|
43
|
+
}
|
|
44
44
|
})
|
|
45
45
|
```
|
|
46
46
|
|
|
@@ -49,7 +49,7 @@ TranslateModule.forRoot({
|
|
|
49
49
|
MngCommonsModule.forRoot({
|
|
50
50
|
app: {
|
|
51
51
|
languages: ['en', 'sl']
|
|
52
|
-
}
|
|
52
|
+
}
|
|
53
53
|
})
|
|
54
54
|
```
|
|
55
55
|
|
|
@@ -122,41 +122,41 @@ Dodajanje se v obeh primerih razlikuje.
|
|
|
122
122
|
- validator na polje lahko dodamo preko polja, kjer mu podamo ime, funkcijo in sporočilo za validacijo.
|
|
123
123
|
```typescript
|
|
124
124
|
serviceChannelsTableviewDescriptor.addField('cost.code')
|
|
125
|
-
|
|
125
|
+
.withValidator('codeValidator', control => control.value, (err, field) => 'error message');
|
|
126
126
|
```
|
|
127
127
|
- validator na skupine lahko dodamo preko
|
|
128
128
|
```typescript
|
|
129
129
|
serviceChannelsTableviewDescriptor.createFieldGroup('Service cost', 'ServiceChannelDto.fieldGroups.serviceCost')
|
|
130
|
-
|
|
130
|
+
.withValidator('serviceCostAllOrNoneFieldsRequired', this.serviceCostAllOrNoneFieldsRequired);
|
|
131
131
|
```
|
|
132
132
|
|
|
133
133
|
Ko dodajamo na grupe, moramo registrirati tudi globalno sporočilo za validacijo v `formly-translate.extension.ts`, kjer mora biti ime sporočila za validacijo enako kot napaka, ki jo nastavljamo v samem validatorju.
|
|
134
134
|
```typescript
|
|
135
135
|
export function formlyConfigProvider(translate: TranslateService): ConfigOption {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
136
|
+
return {
|
|
137
|
+
validationMessages: [
|
|
138
|
+
{ name: 'required', message: getRequiredValidationMessage(translate)},
|
|
139
|
+
...
|
|
140
|
+
// naše sporočilo, ki se imenuje serviceCostAllOrNoneFieldsRequired
|
|
141
|
+
{ name: 'serviceCostAllOrNoneFieldsRequired', message: serviceCostAllOrNoneFieldsRequiredValidatorMessage(translate)}
|
|
142
|
+
],
|
|
143
|
+
extras: { lazyRender: true },
|
|
144
|
+
wrappers: formlyWrappersConfig,
|
|
145
|
+
types: formlyTypesConfig
|
|
146
|
+
};
|
|
147
147
|
}
|
|
148
148
|
|
|
149
149
|
export function serviceCostAllOrNoneFieldsRequired(control: AbstractControl): boolean {
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
const { code, value, description } = control.value.cost;
|
|
151
|
+
const costControl = control.get('cost');
|
|
152
|
+
|
|
153
|
+
// tu vmes je še druga koda
|
|
152
154
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
costControl.get('value').setErrors({serviceCostAllOrNoneFieldsRequired: true});
|
|
158
|
-
costControl.get('description').setErrors({serviceCostAllOrNoneFieldsRequired: true});
|
|
155
|
+
// nastavimo enako napako, kot je ime sporočila
|
|
156
|
+
costControl.get('code').setErrors({serviceCostAllOrNoneFieldsRequired: true});
|
|
157
|
+
costControl.get('value').setErrors({serviceCostAllOrNoneFieldsRequired: true});
|
|
158
|
+
costControl.get('description').setErrors({serviceCostAllOrNoneFieldsRequired: true});
|
|
159
159
|
|
|
160
|
-
|
|
160
|
+
return false;
|
|
161
161
|
}
|
|
162
162
|
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of mng-commons
|
|
3
|
+
*/
|
|
4
|
+
// module
|
|
5
|
+
export * from './lib/mng-commons.module';
|
|
6
|
+
export * from './lib/provide-commons';
|
|
7
|
+
// services
|
|
8
|
+
export * from './lib/api/services';
|
|
9
|
+
export * from './lib/components/layout/services';
|
|
10
|
+
export * from './lib/services';
|
|
11
|
+
export * from './lib/services/providers';
|
|
12
|
+
// injection tokens
|
|
13
|
+
export * from './lib/services/tokens';
|
|
14
|
+
// utils
|
|
15
|
+
export * from './lib/api/utils';
|
|
16
|
+
export * from './lib/utils';
|
|
17
|
+
// components
|
|
18
|
+
export * from './lib/components/action';
|
|
19
|
+
export * from './lib/components/form';
|
|
20
|
+
export * from './lib/components/form/formly/fields';
|
|
21
|
+
export * from './lib/components/form/formly/wrappers';
|
|
22
|
+
export * from './lib/components/layout';
|
|
23
|
+
export * from './lib/components/tableview';
|
|
24
|
+
// directives
|
|
25
|
+
export * from './lib/directives';
|
|
26
|
+
// pipes
|
|
27
|
+
export * from './lib/pipes';
|
|
28
|
+
// api models
|
|
29
|
+
export * from './lib/api/models';
|
|
30
|
+
// component models
|
|
31
|
+
export * from './lib/components/action/models';
|
|
32
|
+
export * from './lib/components/form/models';
|
|
33
|
+
export * from './lib/components/tableview/models';
|
|
34
|
+
// formly
|
|
35
|
+
export * from './lib/components/form/formly/models';
|
|
36
|
+
export * from './lib/components/form/formly';
|
|
37
|
+
// data providers
|
|
38
|
+
export * from './lib/data-providers';
|
|
39
|
+
// descriptors
|
|
40
|
+
export * from './lib/descriptors';
|
|
41
|
+
export * from './lib/descriptors/action';
|
|
42
|
+
export * from './lib/descriptors/editor';
|
|
43
|
+
export * from './lib/descriptors/filter';
|
|
44
|
+
export * from './lib/descriptors/interfaces';
|
|
45
|
+
export * from './lib/descriptors/table';
|
|
46
|
+
export * from './lib/descriptors/tableview';
|
|
47
|
+
export * from './lib/descriptors/types';
|
|
48
|
+
// general models
|
|
49
|
+
export * from './lib/models';
|
|
50
|
+
// router
|
|
51
|
+
export * from './lib/router';
|
|
52
|
+
export * from './lib/router/models';
|
|
53
|
+
// security
|
|
54
|
+
export * from './lib/security';
|
|
55
|
+
export * from './lib/security/model';
|
|
56
|
+
// types
|
|
57
|
+
export * from './lib/types';
|
|
58
|
+
// styles
|
|
59
|
+
export * from './lib/styles';
|
|
60
|
+
export * from './lib/styles/models';
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxTQUFTO0FBQ1QsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFdBQVc7QUFDWCxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDBCQUEwQixDQUFDO0FBRXpDLG1CQUFtQjtBQUNuQixjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFFBQVE7QUFDUixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsYUFBYSxDQUFDO0FBRTVCLGFBQWE7QUFDYixjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLHVDQUF1QyxDQUFDO0FBQ3RELGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyw0QkFBNEIsQ0FBQztBQUUzQyxhQUFhO0FBQ2IsY0FBYyxrQkFBa0IsQ0FBQztBQUVqQyxRQUFRO0FBQ1IsY0FBYyxhQUFhLENBQUM7QUFFNUIsYUFBYTtBQUNiLGNBQWMsa0JBQWtCLENBQUM7QUFFakMsbUJBQW1CO0FBQ25CLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLG1DQUFtQyxDQUFDO0FBRWxELFNBQVM7QUFDVCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsOEJBQThCLENBQUM7QUFFN0MsaUJBQWlCO0FBQ2pCLGNBQWMsc0JBQXNCLENBQUM7QUFFckMsY0FBYztBQUNkLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx5QkFBeUIsQ0FBQztBQUV4QyxpQkFBaUI7QUFDakIsY0FBYyxjQUFjLENBQUM7QUFFN0IsU0FBUztBQUNULGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMscUJBQXFCLENBQUM7QUFFcEMsV0FBVztBQUNYLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxzQkFBc0IsQ0FBQztBQUVyQyxRQUFRO0FBQ1IsY0FBYyxhQUFhLENBQUM7QUFFNUIsU0FBUztBQUNULGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogUHVibGljIEFQSSBTdXJmYWNlIG9mIG1uZy1jb21tb25zXG4gKi9cblxuLy8gbW9kdWxlXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tbmctY29tbW9ucy5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcHJvdmlkZS1jb21tb25zJztcblxuLy8gc2VydmljZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2FwaS9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2xheW91dC9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9wcm92aWRlcnMnO1xuXG4vLyBpbmplY3Rpb24gdG9rZW5zXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy90b2tlbnMnO1xuXG4vLyB1dGlsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpL3V0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3V0aWxzJztcblxuLy8gY29tcG9uZW50c1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvZmllbGRzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZm9ybS9mb3JtbHkvd3JhcHBlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9sYXlvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZXZpZXcnO1xuXG4vLyBkaXJlY3RpdmVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kaXJlY3RpdmVzJztcblxuLy8gcGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BpcGVzJztcblxuLy8gYXBpIG1vZGVsc1xuZXhwb3J0ICogZnJvbSAnLi9saWIvYXBpL21vZGVscyc7XG5cbi8vIGNvbXBvbmVudCBtb2RlbHNcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvYWN0aW9uL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Zvcm0vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGV2aWV3L21vZGVscyc7XG5cbi8vIGZvcm1seVxuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seSc7XG5cbi8vIGRhdGEgcHJvdmlkZXJzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRhLXByb3ZpZGVycyc7XG5cbi8vIGRlc2NyaXB0b3JzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9hY3Rpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGVzY3JpcHRvcnMvZWRpdG9yJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL2ZpbHRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy9pbnRlcmZhY2VzJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL3RhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Rlc2NyaXB0b3JzL3RhYmxldmlldyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kZXNjcmlwdG9ycy90eXBlcyc7XG5cbi8vIGdlbmVyYWwgbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMnO1xuXG4vLyByb3V0ZXJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3JvdXRlcic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yb3V0ZXIvbW9kZWxzJztcblxuLy8gc2VjdXJpdHlcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlY3VyaXR5JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3NlY3VyaXR5L21vZGVsJztcblxuLy8gdHlwZXNcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzJztcblxuLy8gc3R5bGVzXG5leHBvcnQgKiBmcm9tICcuL2xpYi9zdHlsZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3R5bGVzL21vZGVscyc7XG4iXX0=
|
|
@@ -1,17 +1,22 @@
|
|
|
1
1
|
import { AsyncPipe, NgIf } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
3
|
+
import { ActivatedRoute } from '@angular/router';
|
|
4
|
+
import { TranslateService } from '@ngx-translate/core';
|
|
3
5
|
import { ConfirmationService } from 'primeng/api';
|
|
4
6
|
import { ButtonModule } from 'primeng/button';
|
|
5
7
|
import { ConfirmDialogModule } from 'primeng/confirmdialog';
|
|
8
|
+
import { Menu, MenuModule } from 'primeng/menu';
|
|
6
9
|
import { RippleModule } from 'primeng/ripple';
|
|
7
|
-
import { SlideMenuModule } from 'primeng/slidemenu';
|
|
8
10
|
import { SplitButtonModule } from 'primeng/splitbutton';
|
|
9
11
|
import { TooltipModule } from 'primeng/tooltip';
|
|
10
|
-
import { ReplaySubject, combineLatest, distinctUntilChanged, of } from 'rxjs';
|
|
11
|
-
import {
|
|
12
|
+
import { Observable, ReplaySubject, combineLatest, distinctUntilChanged, of } from 'rxjs';
|
|
13
|
+
import { MediusQueryParam } from '../../api/models';
|
|
14
|
+
import { ActionDescriptor, ActionLinkDescriptor } from '../../descriptors/action';
|
|
12
15
|
import { MngComponentDirective } from '../../directives';
|
|
13
16
|
import { MngParametrizePipe } from '../../pipes';
|
|
17
|
+
import { MngAuthorizationService } from '../../security';
|
|
14
18
|
import { Permissions } from '../../security/model';
|
|
19
|
+
import { MngActionExecutorService } from '../../services';
|
|
15
20
|
import { I18nUtils } from '../../utils';
|
|
16
21
|
import { ActionParameters } from './models';
|
|
17
22
|
import * as i0 from "@angular/core";
|
|
@@ -25,7 +30,7 @@ import * as i7 from "primeng/ripple";
|
|
|
25
30
|
import * as i8 from "primeng/tooltip";
|
|
26
31
|
import * as i9 from "primeng/confirmdialog";
|
|
27
32
|
import * as i10 from "primeng/splitbutton";
|
|
28
|
-
import * as i11 from "primeng/
|
|
33
|
+
import * as i11 from "primeng/menu";
|
|
29
34
|
export class MngActionComponent {
|
|
30
35
|
constructor(routeService, translate, authorization, actionExecutor, confirmationService, viewContainerService) {
|
|
31
36
|
this.routeService = routeService;
|
|
@@ -224,17 +229,19 @@ export class MngActionComponent {
|
|
|
224
229
|
});
|
|
225
230
|
}
|
|
226
231
|
this.tooltipSubscription?.unsubscribe();
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
232
|
+
if (this.action.button.tooltip) {
|
|
233
|
+
this.tooltipSubscription = I18nUtils.Action.getAsync(this.translate, this.action, 'tooltip', this.action.button.tooltip, this.item, undefined, undefined).subscribe({
|
|
234
|
+
next: i18n => this.tooltipSubject.next(i18n)
|
|
235
|
+
});
|
|
236
|
+
}
|
|
230
237
|
this.subactions = this.processSubactions();
|
|
231
238
|
}
|
|
232
239
|
}
|
|
233
|
-
MngActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
234
|
-
MngActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
235
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
240
|
+
MngActionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: MngActionComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.TranslateService }, { token: i3.MngAuthorizationService }, { token: i4.MngActionExecutorService }, { token: i5.ConfirmationService }, { token: i4.MngViewContainerComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
241
|
+
MngActionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.6", type: MngActionComponent, isStandalone: true, selector: "mng-action", inputs: { action: "action", item: "item", itemId: "itemId", actionData: "actionData", queryParam: "queryParam", dataProvider: "dataProvider", hostComponent: "hostComponent", routeInit: ["route", "routeInit"], inputDisabled: ["disabled", "inputDisabled"], inputLoading: ["loading", "inputLoading"], viewContainerInit: ["viewContainer", "viewContainerInit"], selectedItems: "selectedItems" }, outputs: { finishEventEmitter: "finish" }, host: { properties: { "class": "this.hostClass", "class.m-0": "this.isHostHidden" } }, providers: [ConfirmationService], viewQueries: [{ propertyName: "subactionsMenu", first: true, predicate: ["subactionsMenu"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | async)\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [label]=\"($label | async) ?? ''\"\n [icon]=\"$any(action.button.icon)\"\n [iconPos]=\"$any(action.button.iconPosition)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.url | parametrize : itemId : item : actionData)\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else customComponent\"\n pButton\n pRipple\n [icon]=\"$any(action.button.icon)\"\n [iconPos]=\"$any(action.button.iconPosition)\"\n [label]=\"($label | async) ?? ''\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | parametrize : itemId : item : actionData)\"\n [relativeTo]=\"route\"\n [queryParams]=\"actionLink.queryParams | parametrize : itemId : item : actionData\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n </ng-template>\n <ng-template #customComponent>\n <ng-container\n *ngIf=\"action.component; else splitButton\"\n [mngComponent]=\"action.component\"\n [inputs]=\"{\n action: action,\n item: item,\n itemId: itemId,\n actionData: actionData,\n enabled: $isEnabled,\n loading: $loading,\n viewContainer: viewContainer\n }\"\n (instanceCreated)=\"onCustomActionCmpInst($event)\">\n </ng-container>\n </ng-template>\n <ng-template #splitButton>\n <p-splitButton\n *ngIf=\"action.subactions.length > 0 && !action.subactionsAsMenu; else button\"\n [icon]=\"$any(action.button.icon)\"\n [iconPos]=\"$any(action.button.iconPosition)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (onClick)=\"triggerAction(action)\"\n [class]=\"buttonClass\"\n [model]=\"subactions\">\n </p-splitButton>\n </ng-template>\n <ng-template #button>\n <button\n pButton\n pRipple\n type=\"button\"\n [icon]=\"$any(action.button.icon)\"\n [iconPos]=\"$any(action.button.iconPosition)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction(action, undefined, $event)\"\n [class]=\"buttonClass\"></button>\n <p-menu #subactionsMenu [model]=\"subactions\" [popup]=\"true\" styleClass=\"mng-action-menu\"></p-menu>\n </ng-template>\n <p-confirmDialog\n *ngIf=\"action.runConfirmationDialogDescriptor\"\n [key]=\"action.actionName + '_' + cmpId\"\n [baseZIndex]=\"50\"\n appendTo=\"body\"\n [closable]=\"action.runConfirmationDialogDescriptor.closable\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i6.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i7.Ripple, selector: "[pRipple]" }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i8.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "pipe", type: MngParametrizePipe, name: "parametrize" }, { kind: "directive", type: MngComponentDirective, selector: "[mngComponent]", inputs: ["mngComponent", "inputs", "attachToHost"], outputs: ["instanceCreated"] }, { kind: "ngmodule", type: ConfirmDialogModule }, { kind: "component", type: i9.ConfirmDialog, selector: "p-confirmDialog", inputs: ["header", "icon", "message", "style", "styleClass", "maskStyleClass", "acceptIcon", "acceptLabel", "acceptAriaLabel", "acceptVisible", "rejectIcon", "rejectLabel", "rejectAriaLabel", "rejectVisible", "acceptButtonStyleClass", "rejectButtonStyleClass", "closeOnEscape", "dismissableMask", "blockScroll", "rtl", "closable", "appendTo", "key", "autoZIndex", "baseZIndex", "transitionOptions", "focusTrap", "defaultFocus", "breakpoints", "visible", "position"], outputs: ["onHide"] }, { kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i10.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MenuModule }, { kind: "component", type: i11.Menu, selector: "p-menu", inputs: ["model", "popup", "style", "styleClass", "appendTo", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
242
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: MngActionComponent, decorators: [{
|
|
236
243
|
type: Component,
|
|
237
|
-
args: [{ standalone: true, selector: 'mng-action', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, NgIf, ButtonModule, RippleModule, TooltipModule, MngParametrizePipe, MngComponentDirective, ConfirmDialogModule, SplitButtonModule,
|
|
244
|
+
args: [{ standalone: true, selector: 'mng-action', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AsyncPipe, NgIf, ButtonModule, RippleModule, TooltipModule, MngParametrizePipe, MngComponentDirective, ConfirmDialogModule, SplitButtonModule, MenuModule], providers: [ConfirmationService], template: "<ng-container *ngIf=\"($isVisible | async) && ($isPermitted | async)\">\n <a\n *ngIf=\"actionLink && actionLink.url !== ''; else routerLink\"\n pButton\n pRipple\n [label]=\"($label | async) ?? ''\"\n [icon]=\"$any(action.button.icon)\"\n [iconPos]=\"$any(action.button.iconPosition)\"\n [href]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.url | parametrize : itemId : item : actionData)\"\n [target]=\"actionLink.target\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n <ng-template #routerLink>\n <a\n *ngIf=\"actionLink; else customComponent\"\n pButton\n pRipple\n [icon]=\"$any(action.button.icon)\"\n [iconPos]=\"$any(action.button.iconPosition)\"\n [label]=\"($label | async) ?? ''\"\n [target]=\"actionLink.target\"\n [replaceUrl]=\"actionLink.replaceUrl\"\n [routerLink]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false) ? null : (actionLink.pathSegments | parametrize : itemId : item : actionData)\"\n [relativeTo]=\"route\"\n [queryParams]=\"actionLink.queryParams | parametrize : itemId : item : actionData\"\n [queryParamsHandling]=\"actionLink.queryParamsHandling\"\n [class.disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n [pTooltip]=\"$any($tooltip | async)\"\n [class]=\"buttonClass\"></a>\n </ng-template>\n <ng-template #customComponent>\n <ng-container\n *ngIf=\"action.component; else splitButton\"\n [mngComponent]=\"action.component\"\n [inputs]=\"{\n action: action,\n item: item,\n itemId: itemId,\n actionData: actionData,\n enabled: $isEnabled,\n loading: $loading,\n viewContainer: viewContainer\n }\"\n (instanceCreated)=\"onCustomActionCmpInst($event)\">\n </ng-container>\n </ng-template>\n <ng-template #splitButton>\n <p-splitButton\n *ngIf=\"action.subactions.length > 0 && !action.subactionsAsMenu; else button\"\n [icon]=\"$any(action.button.icon)\"\n [iconPos]=\"$any(action.button.iconPosition)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (onClick)=\"triggerAction(action)\"\n [class]=\"buttonClass\"\n [model]=\"subactions\">\n </p-splitButton>\n </ng-template>\n <ng-template #button>\n <button\n pButton\n pRipple\n type=\"button\"\n [icon]=\"$any(action.button.icon)\"\n [iconPos]=\"$any(action.button.iconPosition)\"\n [label]=\"($label | async) ?? ''\"\n [pTooltip]=\"$any($tooltip | async)\"\n [loading]=\"(($loading | async) ?? false) || ((inputLoading | async) ?? false)\"\n [disabled]=\"($isEnabled | async) === false || ((inputDisabled | async) ?? false)\"\n (click)=\"triggerAction(action, undefined, $event)\"\n [class]=\"buttonClass\"></button>\n <p-menu #subactionsMenu [model]=\"subactions\" [popup]=\"true\" styleClass=\"mng-action-menu\"></p-menu>\n </ng-template>\n <p-confirmDialog\n *ngIf=\"action.runConfirmationDialogDescriptor\"\n [key]=\"action.actionName + '_' + cmpId\"\n [baseZIndex]=\"50\"\n appendTo=\"body\"\n [closable]=\"action.runConfirmationDialogDescriptor.closable\"></p-confirmDialog>\n</ng-container>\n", styles: [":host{display:inline-block}\n"] }]
|
|
238
245
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.TranslateService }, { type: i3.MngAuthorizationService }, { type: i4.MngActionExecutorService }, { type: i5.ConfirmationService }, { type: i4.MngViewContainerComponentService, decorators: [{
|
|
239
246
|
type: Optional
|
|
240
247
|
}] }]; }, propDecorators: { hostClass: [{
|
|
@@ -278,4 +285,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.1", ngImpor
|
|
|
278
285
|
type: ViewChild,
|
|
279
286
|
args: ['subactionsMenu']
|
|
280
287
|
}] } });
|
|
281
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBZ0MsUUFBUSxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSTdLLE9BQU8sRUFBQyxtQkFBbUIsRUFBVyxNQUFNLGFBQWEsQ0FBQztBQUMxRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBWSxlQUFlLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM3RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFhLGFBQWEsRUFBZ0IsYUFBYSxFQUFFLG9CQUFvQixFQUFFLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUl0RyxPQUFPLEVBQW1CLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDaEYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sYUFBYSxDQUFD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Q3BDcEMsaXBIQThFQSxrRkQzQ2MsU0FBUyw4Q0FBRSxJQUFJLDRGQUFFLFlBQVksc0tBQUUsWUFBWSw2RkFBRSxhQUFhLGlXQUFFLGtCQUFrQixvREFBRSxxQkFBcUIsNElBQUUsbUJBQW1CLGtsQkFBRSxpQkFBaUIsOGtCQUFFLGVBQWU7MkZBRy9KLGtCQUFrQjtrQkFUOUIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sWUFBWSxtQkFHTCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsYUFDOUosQ0FBQyxtQkFBbUIsQ0FBQzs7MEJBZ0UzQixRQUFROzRDQTdEUyxTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBQ00sWUFBWTtzQkFBckMsV0FBVzt1QkFBQyxXQUFXO2dCQUdSLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ2lCLFNBQVM7c0JBQS9CLEtBQUs7dUJBQUMsT0FBTztnQkFDWSxhQUFhO3NCQUF0QyxLQUFLO3VCQUFDLFVBQVU7Z0JBQ1EsWUFBWTtzQkFBcEMsS0FBSzt1QkFBQyxTQUFTO2dCQUNlLGlCQUFpQjtzQkFBL0MsS0FBSzt1QkFBQyxlQUFlO2dCQUNOLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRW1CLGtCQUFrQjtzQkFBMUMsTUFBTTt1QkFBQyxRQUFRO2dCQUVvQixjQUFjO3NCQUFqRCxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lbnVJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHtDb25maXJtRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHtSaXBwbGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7U2xpZGVNZW51LCBTbGlkZU1lbnVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvc2xpZGVtZW51JztcbmltcG9ydCB7U3BsaXRCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuaW1wb3J0IHtUb29sdGlwTW9kdWxlfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uTGlua0Rlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge01uZ0NvbXBvbmVudERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBJVmlld0NvbnRhaW5lclRhYmxlfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdQYXJhbWV0cml6ZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7TW5nUm91dGVyRGF0YX0gZnJvbSAnLi4vLi4vcm91dGVyL21vZGVscyc7XG5pbXBvcnQge01uZ0F1dGhvcml6YXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWN1cml0eSc7XG5pbXBvcnQge0FQZXJtaXNzaW9ucywgUGVybWlzc2lvbnN9IGZyb20gJy4uLy4uL3NlY3VyaXR5L21vZGVsJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHRWYWxpZGF0aW9uLCBBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7SUFjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9tb2RlbHMvYWN0aW9uLWNvbXBvbmVudC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBOZ0lmLCBCdXR0b25Nb2R1bGUsIFJpcHBsZU1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgTW5nUGFyYW1ldHJpemVQaXBlLCBNbmdDb21wb25lbnREaXJlY3RpdmUsIENvbmZpcm1EaWFsb2dNb2R1bGUsIFNwbGl0QnV0dG9uTW9kdWxlLCBTbGlkZU1lbnVNb2R1bGVdLFxuICAgIHByb3ZpZGVyczogW0NvbmZpcm1hdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIE1uZ0FjdGlvbkNvbXBvbmVudDxULCBTPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIElBY3Rpb25Db25maXJtYXRpb25TZXJ2aWNlIHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgaG9zdENsYXNzID0gJ21uZy1hY3Rpb24tYnV0dG9uJztcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLm0tMCcpIGlzSG9zdEhpZGRlbiA9IGZhbHNlO1xuXG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbiE6IEFjdGlvbkRlc2NyaXB0b3I8VD47XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW0/OiBUO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtSWQ/OiBJZFR5cGU7XG4gICAgQElucHV0KCkgcHVibGljIGFjdGlvbkRhdGE/OiBBY3Rpb25EYXRhO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBxdWVyeVBhcmFtPzogTWVkaXVzUXVlcnlQYXJhbTtcbiAgICBASW5wdXQoKSBwdWJsaWMgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxULCBTPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgaG9zdENvbXBvbmVudD86IHVua25vd247XG4gICAgQElucHV0KCdyb3V0ZScpIHB1YmxpYyByb3V0ZUluaXQ/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgICBASW5wdXQoJ2Rpc2FibGVkJykgcHVibGljIGlucHV0RGlzYWJsZWQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBvZihmYWxzZSk7XG4gICAgQElucHV0KCdsb2FkaW5nJykgcHVibGljIGlucHV0TG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IG9mKGZhbHNlKTtcbiAgICBASW5wdXQoJ3ZpZXdDb250YWluZXInKSBwdWJsaWMgdmlld0NvbnRhaW5lckluaXQ/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWRJdGVtczogQXJyYXk8VD4gPSBbXTtcblxuICAgIEBPdXRwdXQoJ2ZpbmlzaCcpIHB1YmxpYyBmaW5pc2hFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPEFjdGlvbkluc3RhbmNlPFQsIFM+PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnc3ViYWN0aW9uc01lbnUnKSBwdWJsaWMgc3ViYWN0aW9uc01lbnU/OiBTbGlkZU1lbnU7XG5cbiAgICBwcml2YXRlIGxvYWRpbmdTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHVibGljICRsb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICAgIHB1YmxpYyBjbXBJZDogc3RyaW5nID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpO1xuICAgIHByaXZhdGUgaXNWaXNpYmxlU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgaXNWaXNpYmxlU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkaXNWaXNpYmxlID0gdGhpcy5pc1Zpc2libGVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSBpc1Blcm1pdHRlZFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwcml2YXRlIGlzUGVybWl0dGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkaXNQZXJtaXR0ZWQgPSB0aGlzLmlzUGVybWl0dGVkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIHByaXZhdGUgaXNFbmFibGVkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgaXNFbmFibGVkU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkaXNFbmFibGVkID0gdGhpcy5pc0VuYWJsZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSBsYWJlbFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmcgfCBudWxsPigxKTtcbiAgICBwcml2YXRlIGxhYmVsU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICAgIHB1YmxpYyAkbGFiZWwgPSB0aGlzLmxhYmVsU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgIHByaXZhdGUgdG9vbHRpcFN1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxzdHJpbmcgfCBudWxsPigxKTtcbiAgICBwcml2YXRlIHRvb2x0aXBTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICR0b29sdGlwID0gdGhpcy50b29sdGlwU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuXG4gICAgcHVibGljIHZpZXdDb250YWluZXI/OiBJVmlld0NvbnRhaW5lcjxULCBTPjtcblxuICAgIHB1YmxpYyBhY3Rpb25MaW5rPzogQWN0aW9uTGlua0Rlc2NyaXB0b3I8VD47XG4gICAgcHVibGljIGhhc05vVGl0bGUgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIHB1YmxpYyByb3V0ZSE6IEFjdGl2YXRlZFJvdXRlOyAvLyB2YWx1ZSB3aWxsIGJlIGRldGVybWluZWQgaW4gbmdPbkluaXRcbiAgICBwcml2YXRlIHJvdXRlUGVybWlzc2lvbnM/OiBBUGVybWlzc2lvbnM7XG5cbiAgICBwdWJsaWMgYnV0dG9uQ2xhc3MgPSAncC1idXR0b24tcHJpbWFyeSc7XG4gICAgcHVibGljIHN1YmFjdGlvbnM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICBwcml2YXRlIHN1YmFjdGlvblN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IEFjdGl2YXRlZFJvdXRlLFxuICAgICAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhdXRob3JpemF0aW9uOiBNbmdBdXRob3JpemF0aW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBhY3Rpb25FeGVjdXRvcjogTW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbmZpcm1hdGlvblNlcnZpY2U6IENvbmZpcm1hdGlvblNlcnZpY2UsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgdmlld0NvbnRhaW5lclNlcnZpY2U6IE1uZ1ZpZXdDb250YWluZXJDb21wb25lbnRTZXJ2aWNlPFQsIFM+IHwgbnVsbFxuICAgICkge1xuICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQoZmFsc2UpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyID0gdGhpcy52aWV3Q29udGFpbmVySW5pdCA/PyB0aGlzLnZpZXdDb250YWluZXJTZXJ2aWNlID8/IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5yb3V0ZSA9IHRoaXMucm91dGVJbml0ID8/IHRoaXMucm91dGVTZXJ2aWNlO1xuXG4gICAgICAgIHRoaXMuaGFzTm9UaXRsZSA9IHRoaXMuYWN0aW9uLmJ1dHRvbi5sYWJlbCA9PT0gbnVsbDtcbiAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmlzUGVybWl0dGVkU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICB0aGlzLmxhYmVsU3ViamVjdC5uZXh0KG51bGwpO1xuICAgICAgICB0aGlzLnRvb2x0aXBTdWJqZWN0Lm5leHQobnVsbCk7XG5cbiAgICAgICAgY29uc3Qgcm91dGVEYXRhID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhIGFzIE1uZ1JvdXRlckRhdGE7XG4gICAgICAgIGlmICh0aGlzLmFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkxpbmtEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbkxpbmsgPSB0aGlzLmFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeSAmJiByb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnMpIHtcbiAgICAgICAgICAgIGlmIChyb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnNbdGhpcy5hY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZVBlcm1pc3Npb25zID0gcm91dGVEYXRhLnRhYmxldmlld1Blcm1pc3Npb25zW3RoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NTdWJzY3JpcHRpb25zKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmNsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5ob3N0Q2xhc3MgPSB0aGlzLmFjdGlvbi5jbGFzc05hbWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaG9zdFZpc2liaWxpdHlTdWJzY3JpcHRpb24gPSBjb21iaW5lTGF0ZXN0KFt0aGlzLiRpc1Zpc2libGUsIHRoaXMuJGlzUGVybWl0dGVkXSkuc3Vic2NyaWJlKChbaXNWaXNpYmxlLCBpc1Blcm1pdHRlZF0pID0+IHtcbiAgICAgICAgICAgIHRoaXMuaXNIb3N0SGlkZGVuID0gIWlzVmlzaWJsZSB8fCAhaXNQZXJtaXR0ZWQ7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChob3N0VmlzaWJpbGl0eVN1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgdGhpcy5idXR0b25DbGFzcyA9IHRoaXMuYWN0aW9uLmJ1dHRvbi5zdHlsZUNsYXNzLmJ1aWxkKHRoaXMuaGFzTm9UaXRsZSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKGNoYW5nZXNbJ2l0ZW0nXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkgfHxcbiAgICAgICAgICAgICEoY2hhbmdlc1snaXRlbUlkJ10/LmZpcnN0Q2hhbmdlID8/IHRydWUpIHx8XG4gICAgICAgICAgICAhKGNoYW5nZXNbJ2FjdGlvbkRhdGEnXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkgfHxcbiAgICAgICAgICAgICh0aGlzLmFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbiAmJiAhKGNoYW5nZXNbJ3NlbGVjdGVkSXRlbXMnXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3Vic2NyaXB0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzUGVybWl0dGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5sYWJlbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy50b29sdGlwU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdHJpZ2dlckFjdGlvbihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8VD4sIHBhcmFtZXRlcnM/OiBBY3Rpb25QYXJhbWV0ZXJzPFQ+LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmIChhY3Rpb24uc3ViYWN0aW9uc0FzTWVudSkge1xuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25zTWVudT8udG9nZ2xlKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGlvbkRhdGEgPSB0aGlzLmFjdGlvbkRhdGEgPyB0aGlzLmFjdGlvbkRhdGEgOiB7fTtcbiAgICAgICAgYWN0aW9uRGF0YVsnY21wSWQnXSA9IHRoaXMuY21wSWQ7XG5cbiAgICAgICAgcGFyYW1ldGVycyA/Pz0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIHRoaXMuaXRlbSlcbiAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YShhY3Rpb25EYXRhKVxuICAgICAgICAgICAgLndpdGhRdWVyeVBhcmFtKHRoaXMucXVlcnlQYXJhbSlcbiAgICAgICAgICAgIC53aXRoUm91dGUodGhpcy5yb3V0ZSlcbiAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXIpXG4gICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzKVxuICAgICAgICAgICAgLndpdGhIb3N0Q29tcG9uZW50KHRoaXMuaG9zdENvbXBvbmVudClcbiAgICAgICAgICAgIC53aXRoU2VsZWN0ZWRJdGVtcyh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuXG4gICAgICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5hY3Rpb25FeGVjdXRvci50cmlnZ2VyQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycyk7XG5cbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBpbnN0YW5jZS5yZXN1bHQkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEV2ZW50RW1pdHRlci5uZXh0KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMudmlld0NvbnRhaW5lciBhcyBJVmlld0NvbnRhaW5lclRhYmxlPFQsIFM+KT8ucmVsb2FkVGFibGU/Lih7ZGF0YToge2V2ZW50OiBldmVudH19KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgaW5zdGFuY2UuZXJyb3IkLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmlzaEV2ZW50RW1pdHRlci5uZXh0KGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGluc3RhbmNlLmlzUnVuTG9hZGluZyQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdTdWJqZWN0Lm5leHQocmVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb25maXJtYXRpb25TZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtYXRpb25TZXJ2aWNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb25maXJtYXRpb25TZXJ2aWNlSW5zdGFuY2VLZXkoYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPGFueT4pIHtcbiAgICAgICAgcmV0dXJuIGAke2FjdGlvbi5hY3Rpb25OYW1lfV8ke3RoaXMuY21wSWR9YDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DdXN0b21BY3Rpb25DbXBJbnN0KGluc3RhbmNlOiBJQWN0aW9uQ29tcG9uZW50PFQ+KSB7XG4gICAgICAgIGNvbnN0IGNtcEluc3RTdWJzY3JpcHRpb24gPSBpbnN0YW5jZS50cmlnZ2VyQWN0aW9uRXZlbnRFbWl0dGVyLnN1YnNjcmliZShwYXJhbXMgPT4gdGhpcy50cmlnZ2VyQWN0aW9uKHRoaXMuYWN0aW9uLCBwYXJhbXMpKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goY21wSW5zdFN1YnNjcmlwdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcm9jZXNzU3ViYWN0aW9ucygpOiBNZW51SXRlbVtdIHtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICAgICAgICBjb25zdCBtZW51SXRlbXM6IE1lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgdGhpcy5hY3Rpb24uc3ViYWN0aW9ucztcbiAgICAgICAgZm9yIChjb25zdCBzdWJhY3Rpb24gb2YgdGhpcy5hY3Rpb24uc3ViYWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB7fSBhcyBNZW51SXRlbTtcblxuICAgICAgICAgICAgbWVudUl0ZW0uaWNvbiA9IHN1YmFjdGlvbi5idXR0b24uaWNvbiA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRoaXMudHJhbnNsYXRlLCBzdWJhY3Rpb24sICd0aXRsZScsIHN1YmFjdGlvbi5idXR0b24ubGFiZWwgPz8gdW5kZWZpbmVkLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0ubGFiZWwgPSByZXMhKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgSTE4blV0aWxzLkFjdGlvbi5nZXRBc3luYyh0aGlzLnRyYW5zbGF0ZSwgc3ViYWN0aW9uLCAndG9vbHRpcCcsIHRoaXMuYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0udG9vbHRpcCA9IHJlcyEpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQodGhpcyk7XG5cbiAgICAgICAgICAgIGlmIChzdWJhY3Rpb24uaGFzSXRlbXNTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbihzdWJhY3Rpb24sIHBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgc3ViYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLmRpc2FibGVkID0gIXJlcylcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdWJhY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgc3ViYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gKG1lbnVJdGVtLnZpc2libGUgPSByZXMpXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbWVudUl0ZW0uY29tbWFuZCA9ICgpID0+IHRoaXMudHJpZ2dlckFjdGlvbihzdWJhY3Rpb24pO1xuXG4gICAgICAgICAgICBtZW51SXRlbXMucHVzaChtZW51SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTdWJzY3JpcHRpb25zKCkge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gbmV3IEFjdGlvblBhcmFtZXRlcnModGhpcy5pdGVtSWQsIHRoaXMuaXRlbSlcbiAgICAgICAgICAgIC53aXRoQWN0aW9uRGF0YSh0aGlzLmFjdGlvbkRhdGEpXG4gICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMpO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcGFyYW1ldGVycy53aXRoU2VsZWN0ZWRJdGVtcyh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uKHRoaXMuYWN0aW9uLCBwYXJhbWV0ZXJzLCB0aGlzLmRhdGFQcm92aWRlcik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMuYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uKGNvbnRleHQpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IHRoaXMuaXNWaXNpYmxlU3ViamVjdC5uZXh0KHJlcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24ucGVybWlzc2lvbnMgIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiB0aGlzLnJvdXRlUGVybWlzc2lvbnMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLmlzUGVybWl0dGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPVxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uLnBlcm1pc3Npb25zICYmIHRoaXMucm91dGVQZXJtaXNzaW9uc1xuICAgICAgICAgICAgICAgICAgICA/IFBlcm1pc3Npb25zLkFsbC5vZih0aGlzLnJvdXRlUGVybWlzc2lvbnMsIHRoaXMuYWN0aW9uLnBlcm1pc3Npb25zKVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMucm91dGVQZXJtaXNzaW9ucyA/PyB0aGlzLmFjdGlvbi5wZXJtaXNzaW9ucyE7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbiA9IHRoaXMuYXV0aG9yaXphdGlvbi5pc1Blcm1pdHRlZChwZXJtaXNzaW9ucywgdGhpcy5yb3V0ZS5zbmFwc2hvdCwgY29udGV4dCBhcyBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjx1bmtub3duLCB1bmtub3duPikuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gdGhpcy5pc1Blcm1pdHRlZFN1YmplY3QubmV4dChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLmlzRW5hYmxlZEZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uID0gdGhpcy5hY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24oY29udGV4dCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gdGhpcy5pc0VuYWJsZWRTdWJqZWN0Lm5leHQocmVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuaGFzTm9UaXRsZSkge1xuICAgICAgICAgICAgdGhpcy5sYWJlbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxTdWJzY3JpcHRpb24gPSBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRoaXMudHJhbnNsYXRlLCB0aGlzLmFjdGlvbiwgJ3RpdGxlJywgdGhpcy5hY3Rpb24uYnV0dG9uLmxhYmVsID8/IHVuZGVmaW5lZCwgdGhpcy5pdGVtKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IGkxOG4gPT4gdGhpcy5sYWJlbFN1YmplY3QubmV4dChpMThuKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbiA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCAndG9vbHRpcCcsIHRoaXMuYWN0aW9uLmJ1dHRvbi50b29sdGlwLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiBpMThuID0+IHRoaXMudG9vbHRpcFN1YmplY3QubmV4dChpMThuKVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnN1YmFjdGlvbnMgPSB0aGlzLnByb2Nlc3NTdWJhY3Rpb25zKCk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIigkaXNWaXNpYmxlIHwgYXN5bmMpICYmICgkaXNQZXJtaXR0ZWQgfCBhc3luYylcIj5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cImFjdGlvbkxpbmsgJiYgYWN0aW9uTGluay51cmwgIT09ICcnOyBlbHNlIHJvdXRlckxpbmtcIlxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIHBSaXBwbGVcbiAgICAgICAgW2xhYmVsXT1cIigkbGFiZWwgfCBhc3luYykgPz8gJydcIlxuICAgICAgICBbaWNvbl09XCIkYW55KGFjdGlvbi5idXR0b24uaWNvbilcIlxuICAgICAgICBbaHJlZl09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKSA/IG51bGwgOiAoYWN0aW9uTGluay51cmwgfCBwYXJhbWV0cml6ZSA6IGl0ZW1JZCA6IGl0ZW0gOiBhY3Rpb25EYXRhKVwiXG4gICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCRpc0VuYWJsZWQgfCBhc3luYykgPT09IGZhbHNlIHx8ICgoaW5wdXREaXNhYmxlZCB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICBbcFRvb2x0aXBdPVwiJGFueSgkdG9vbHRpcCB8IGFzeW5jKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYT5cbiAgICA8bmctdGVtcGxhdGUgI3JvdXRlckxpbms+XG4gICAgICAgIDxhXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbkxpbms7IGVsc2UgY3VzdG9tQ29tcG9uZW50XCJcbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiKCRsYWJlbCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgICAgICBbdGFyZ2V0XT1cImFjdGlvbkxpbmsudGFyZ2V0XCJcbiAgICAgICAgICAgIFtyZXBsYWNlVXJsXT1cImFjdGlvbkxpbmsucmVwbGFjZVVybFwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKSA/IG51bGwgOiAoYWN0aW9uTGluay5wYXRoU2VnbWVudHMgfCBwYXJhbWV0cml6ZSA6IGl0ZW1JZCA6IGl0ZW0gOiBhY3Rpb25EYXRhKVwiXG4gICAgICAgICAgICBbcmVsYXRpdmVUb109XCJyb3V0ZVwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNdPVwiYWN0aW9uTGluay5xdWVyeVBhcmFtcyB8IHBhcmFtZXRyaXplIDogaXRlbUlkIDogaXRlbSA6IGFjdGlvbkRhdGFcIlxuICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zSGFuZGxpbmddPVwiYWN0aW9uTGluay5xdWVyeVBhcmFtc0hhbmRsaW5nXCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJGFueSgkdG9vbHRpcCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3NcIj48L2E+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI2N1c3RvbUNvbXBvbmVudD5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uY29tcG9uZW50OyBlbHNlIHNwbGl0QnV0dG9uXCJcbiAgICAgICAgICAgIFttbmdDb21wb25lbnRdPVwiYWN0aW9uLmNvbXBvbmVudFwiXG4gICAgICAgICAgICBbaW5wdXRzXT1cIntcbiAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgIGl0ZW1JZDogaXRlbUlkLFxuICAgICAgICAgICAgICAgIGFjdGlvbkRhdGE6IGFjdGlvbkRhdGEsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogJGlzRW5hYmxlZCxcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiAkbG9hZGluZyxcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyOiB2aWV3Q29udGFpbmVyXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChpbnN0YW5jZUNyZWF0ZWQpPVwib25DdXN0b21BY3Rpb25DbXBJbnN0KCRldmVudClcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8bmctdGVtcGxhdGUgI3NwbGl0QnV0dG9uPlxuICAgICAgICA8cC1zcGxpdEJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc3ViYWN0aW9ucy5sZW5ndGggPiAwICYmICFhY3Rpb24uc3ViYWN0aW9uc0FzTWVudTsgZWxzZSBidXR0b25cIlxuICAgICAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIkYW55KCR0b29sdGlwIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgICAgICAob25DbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbilcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCJcbiAgICAgICAgICAgIFttb2RlbF09XCJzdWJhY3Rpb25zXCI+XG4gICAgICAgIDwvcC1zcGxpdEJ1dHRvbj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBwQnV0dG9uXG4gICAgICAgICAgICBwUmlwcGxlXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIFtpY29uXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uKVwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiKCRsYWJlbCB8IGFzeW5jKSA/PyAnJ1wiXG4gICAgICAgICAgICBbcFRvb2x0aXBdPVwiJGFueSgkdG9vbHRpcCB8IGFzeW5jKVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCIoKCRsb2FkaW5nIHwgYXN5bmMpID8/IGZhbHNlKSB8fCAoKGlucHV0TG9hZGluZyB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0cmlnZ2VyQWN0aW9uKGFjdGlvbiwgdW5kZWZpbmVkLCAkZXZlbnQpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYnV0dG9uPlxuICAgICAgICA8cC1zbGlkZU1lbnUgI3N1YmFjdGlvbnNNZW51IFttb2RlbF09XCJzdWJhY3Rpb25zXCIgW3BvcHVwXT1cInRydWVcIiBbdmlld3BvcnRIZWlnaHRdPVwiMTAwXCI+PC9wLXNsaWRlTWVudT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxwLWNvbmZpcm1EaWFsb2dcbiAgICAgICAgKm5nSWY9XCJhY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvclwiXG4gICAgICAgIFtrZXldPVwiYWN0aW9uLmFjdGlvbk5hbWUgKyAnXycgKyBjbXBJZFwiXG4gICAgICAgIFtiYXNlWkluZGV4XT1cIjUwXCJcbiAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgW2Nsb3NhYmxlXT1cImFjdGlvbi5ydW5Db25maXJtYXRpb25EaWFsb2dEZXNjcmlwdG9yLmNsb3NhYmxlXCI+PC9wLWNvbmZpcm1EaWFsb2c+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
288
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9hY3Rpb24vYWN0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBZ0MsUUFBUSxFQUFFLE1BQU0sRUFBaUIsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzdLLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsbUJBQW1CLEVBQVcsTUFBTSxhQUFhLENBQUM7QUFDMUQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFDLE1BQU0sY0FBYyxDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFVBQVUsRUFBRSxhQUFhLEVBQWdCLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFdEcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDaEYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFFdkQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRS9DLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZELE9BQU8sRUFBZSxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUMvRCxPQUFPLEVBQUMsd0JBQXdCLEVBQW1DLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQXNELGdCQUFnQixFQUE2QixNQUFNLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVkzSCxNQUFNLE9BQU8sa0JBQWtCO0lBd0QzQixZQUNZLFlBQTRCLEVBQzVCLFNBQTJCLEVBQzNCLGFBQXNDLEVBQ3RDLGNBQXdDLEVBQ3hDLG1CQUF3QyxFQUM1QixvQkFBbUU7UUFML0UsaUJBQVksR0FBWixZQUFZLENBQWdCO1FBQzVCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGtCQUFhLEdBQWIsYUFBYSxDQUF5QjtRQUN0QyxtQkFBYyxHQUFkLGNBQWMsQ0FBMEI7UUFDeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUM1Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQStDO1FBN0RyRSxjQUFTLEdBQUcsbUJBQW1CLENBQUM7UUFDNUIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFXckIsa0JBQWEsR0FBd0IsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hELGlCQUFZLEdBQXdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUV2RCxrQkFBYSxHQUFhLEVBQUUsQ0FBQztRQUVwQix1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUkvRSxtQkFBYyxHQUFHLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ2hELGFBQVEsR0FBd0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVuRSxVQUFLLEdBQVcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQscUJBQWdCLEdBQUcsSUFBSSxhQUFhLENBQVUsQ0FBQyxDQUFDLENBQUM7UUFFbEQsZUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLHVCQUFrQixHQUFHLElBQUksYUFBYSxDQUFVLENBQUMsQ0FBQyxDQUFDO1FBRXBELGlCQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDbEYscUJBQWdCLEdBQUcsSUFBSSxhQUFhLENBQVUsQ0FBQyxDQUFDLENBQUM7UUFFbEQsZUFBVSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1FBQzlFLGlCQUFZLEdBQUcsSUFBSSxhQUFhLENBQWdCLENBQUMsQ0FBQyxDQUFDO1FBRXBELFdBQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7UUFDdEUsbUJBQWMsR0FBRyxJQUFJLGFBQWEsQ0FBZ0IsQ0FBQyxDQUFDLENBQUM7UUFFdEQsYUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztRQUszRSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRWxCLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUtwQyxnQkFBVyxHQUFHLGtCQUFrQixDQUFDO1FBQ2pDLGVBQVUsR0FBZSxFQUFFLENBQUM7UUFDM0IsMkJBQXNCLEdBQW1CLEVBQUUsQ0FBQztRQVVoRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU0sUUFBUTtRQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixJQUFJLElBQUksQ0FBQyxvQkFBb0IsSUFBSSxTQUFTLENBQUM7UUFDdEYsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUM7UUFFakQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRS9CLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQXFCLENBQUM7UUFDNUQsSUFBSSxJQUFJLENBQUMsTUFBTSxZQUFZLG9CQUFvQixFQUFFO1lBQzdDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztTQUNqQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxTQUFTLENBQUMsb0JBQW9CLEVBQUU7WUFDakUsSUFBSSxTQUFTLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO2dCQUMvRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUN6RjtTQUNKO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUN2QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1NBQzFDO1FBQ0QsTUFBTSwwQkFBMEIsR0FBRyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUU7WUFDMUgsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQzlCLElBQ0ksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxXQUFXLElBQUksSUFBSSxDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQztZQUN6QyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUM7WUFDN0MsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQ3JGO1lBQ0UsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDL0I7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUEyQixFQUFFLFVBQWdDLEVBQUUsS0FBYTtRQUM3RixJQUFJLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixJQUFJLENBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxPQUFPO1NBQ1Y7UUFFRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDMUQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFFakMsVUFBVSxLQUFWLFVBQVUsR0FBSyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQzthQUN0RCxjQUFjLENBQUMsVUFBVSxDQUFDO2FBQzFCLGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2FBQy9CLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO2FBQ3JCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDckMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2FBQ3pCLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7YUFDckMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxFQUFDO1FBRTNDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV2RSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7WUFDdkIsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN2QyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtvQkFDekIsSUFBSSxDQUFDLGFBQTJDLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBQyxJQUFJLEVBQUUsRUFBQyxLQUFLLEVBQUUsS0FBSyxFQUFDLEVBQUMsQ0FBQyxDQUFDO2lCQUM1RjtZQUNMLENBQUM7U0FDSixDQUFDLENBQ0wsQ0FBQztRQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNuQixRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztZQUN0QixJQUFJLEVBQUUsR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0MsQ0FBQztTQUNKLENBQUMsQ0FDTCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ25CLFFBQVEsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1lBQzdCLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDUixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQyxDQUFDO1NBQ0osQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRU0sc0JBQXNCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ3BDLENBQUM7SUFFTSxpQ0FBaUMsQ0FBQyxNQUE2QjtRQUNsRSxPQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUVNLHFCQUFxQixDQUFDLFFBQTZCO1FBQ3RELE1BQU0sbUJBQW1CLEdBQUcsUUFBUSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQzVILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztRQUVqQyxNQUFNLFNBQVMsR0FBZSxFQUFFLENBQUM7UUFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDdkIsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUM1QyxNQUFNLFFBQVEsR0FBRyxFQUFjLENBQUM7WUFFaEMsUUFBUSxDQUFDLElBQUksR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxTQUFTLENBQUM7WUFDbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNwSCxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsR0FBSSxDQUFDO2FBQ3ZDLENBQUMsQ0FDTCxDQUFDO1lBQ0YsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUM3RyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBSSxDQUFDO2FBQ3pDLENBQUMsQ0FDTCxDQUFDO1lBRUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUM7aUJBQzFELGNBQWMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2lCQUMvQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQztpQkFDbEQsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFL0IsSUFBSSxTQUFTLENBQUMsaUJBQWlCLEVBQUU7Z0JBQzdCLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDcEQ7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLDhCQUE4QixDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRTdHLElBQUksT0FBTyxTQUFTLENBQUMsaUJBQWlCLEtBQUssVUFBVSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUM1QixTQUFTLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO29CQUMzQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLENBQUM7aUJBQzFDLENBQUMsQ0FDTCxDQUFDO2FBQ0w7WUFDRCxJQUFJLE9BQU8sU0FBUyxDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFBRTtnQkFDbkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FDNUIsU0FBUyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDM0MsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztpQkFDeEMsQ0FBQyxDQUNMLENBQUM7YUFDTDtZQUVELFFBQVEsQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUV2RCxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixNQUFNLFVBQVUsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQzthQUMxRCxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUMvQixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQzthQUNsRCxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLEVBQUU7WUFDL0IsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNwRDtRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRS9HLElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixLQUFLLFVBQVUsRUFBRTtZQUNyRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDMUMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUMxRSxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUMvQyxDQUFDLENBQUM7U0FDTjtRQUNELElBQUksT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsS0FBSyxXQUFXLElBQUksT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssV0FBVyxFQUFFO1lBQ2hHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFdBQVcsR0FDYixJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO2dCQUM1QyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUNwRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBWSxDQUFDO1lBQzVELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBb0QsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDMUosSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDakQsQ0FBQyxDQUFDO1NBQ047UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsS0FBSyxVQUFVLEVBQUU7WUFDckQsSUFBSSxDQUFDLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDMUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDL0MsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNsQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDO2dCQUNqSixJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7YUFDN0MsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDeEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDNUIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDaEssSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2FBQy9DLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUMvQyxDQUFDOzsrR0E3UlEsa0JBQWtCO21HQUFsQixrQkFBa0Isa2tCQUZoQixDQUFDLG1CQUFtQixDQUFDLGlLQ3BDcEMseTNIQWtGQSxrRkQvQ2MsU0FBUyw4Q0FBRSxJQUFJLDRGQUFFLFlBQVksc0tBQUUsWUFBWSw2RkFBRSxhQUFhLGlYQUFFLGtCQUFrQixvREFBRSxxQkFBcUIsNElBQUUsbUJBQW1CLGtsQkFBRSxpQkFBaUIsOGtCQUFFLFVBQVU7MkZBRzFKLGtCQUFrQjtrQkFUOUIsU0FBUztpQ0FDTSxJQUFJLFlBQ04sWUFBWSxtQkFHTCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxxQkFBcUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLENBQUMsYUFDekosQ0FBQyxtQkFBbUIsQ0FBQzs7MEJBZ0UzQixRQUFROzRDQTdEUyxTQUFTO3NCQUE5QixXQUFXO3VCQUFDLE9BQU87Z0JBQ00sWUFBWTtzQkFBckMsV0FBVzt1QkFBQyxXQUFXO2dCQUdSLE1BQU07c0JBQXJCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFDVSxNQUFNO3NCQUFyQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSztnQkFDVSxZQUFZO3NCQUEzQixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ2lCLFNBQVM7c0JBQS9CLEtBQUs7dUJBQUMsT0FBTztnQkFDWSxhQUFhO3NCQUF0QyxLQUFLO3VCQUFDLFVBQVU7Z0JBQ1EsWUFBWTtzQkFBcEMsS0FBSzt1QkFBQyxTQUFTO2dCQUNlLGlCQUFpQjtzQkFBL0MsS0FBSzt1QkFBQyxlQUFlO2dCQUNOLGFBQWE7c0JBQTVCLEtBQUs7Z0JBRW1CLGtCQUFrQjtzQkFBMUMsTUFBTTt1QkFBQyxRQUFRO2dCQUVvQixjQUFjO3NCQUFqRCxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNQaXBlLCBOZ0lmfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvblNlcnZpY2UsIE1lbnVJdGVtfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0J1dHRvbk1vZHVsZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHtDb25maXJtRGlhbG9nTW9kdWxlfSBmcm9tICdwcmltZW5nL2NvbmZpcm1kaWFsb2cnO1xuaW1wb3J0IHtNZW51LCBNZW51TW9kdWxlfSBmcm9tICdwcmltZW5nL21lbnUnO1xuaW1wb3J0IHtSaXBwbGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvcmlwcGxlJztcbmltcG9ydCB7U3BsaXRCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuaW1wb3J0IHtUb29sdGlwTW9kdWxlfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGNvbWJpbmVMYXRlc3QsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7TWVkaXVzUXVlcnlQYXJhbX0gZnJvbSAnLi4vLi4vYXBpL21vZGVscyc7XG5pbXBvcnQge0lEYXRhUHJvdmlkZXJ9IGZyb20gJy4uLy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7QWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uTGlua0Rlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2Rlc2NyaXB0b3JzL2FjdGlvbic7XG5pbXBvcnQge01uZ0NvbXBvbmVudERpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0lWaWV3Q29udGFpbmVyLCBJVmlld0NvbnRhaW5lclRhYmxlfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHtNbmdQYXJhbWV0cml6ZVBpcGV9IGZyb20gJy4uLy4uL3BpcGVzJztcbmltcG9ydCB7TW5nUm91dGVyRGF0YX0gZnJvbSAnLi4vLi4vcm91dGVyL21vZGVscyc7XG5pbXBvcnQge01uZ0F1dGhvcml6YXRpb25TZXJ2aWNlfSBmcm9tICcuLi8uLi9zZWN1cml0eSc7XG5pbXBvcnQge0FQZXJtaXNzaW9ucywgUGVybWlzc2lvbnN9IGZyb20gJy4uLy4uL3NlY3VyaXR5L21vZGVsJztcbmltcG9ydCB7TW5nQWN0aW9uRXhlY3V0b3JTZXJ2aWNlLCBNbmdWaWV3Q29udGFpbmVyQ29tcG9uZW50U2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtJZFR5cGV9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7STE4blV0aWxzfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHRWYWxpZGF0aW9uLCBBY3Rpb25EYXRhLCBBY3Rpb25JbnN0YW5jZSwgQWN0aW9uUGFyYW1ldGVycywgSUFjdGlvbkNvbmZpcm1hdGlvblNlcnZpY2V9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7SUFjdGlvbkNvbXBvbmVudH0gZnJvbSAnLi9tb2RlbHMvYWN0aW9uLWNvbXBvbmVudC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdtbmctYWN0aW9uJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9hY3Rpb24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBOZ0lmLCBCdXR0b25Nb2R1bGUsIFJpcHBsZU1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgTW5nUGFyYW1ldHJpemVQaXBlLCBNbmdDb21wb25lbnREaXJlY3RpdmUsIENvbmZpcm1EaWFsb2dNb2R1bGUsIFNwbGl0QnV0dG9uTW9kdWxlLCBNZW51TW9kdWxlXSxcbiAgICBwcm92aWRlcnM6IFtDb25maXJtYXRpb25TZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBNbmdBY3Rpb25Db21wb25lbnQ8VCwgUz4gaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBJQWN0aW9uQ29uZmlybWF0aW9uU2VydmljZSB7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGhvc3RDbGFzcyA9ICdtbmctYWN0aW9uLWJ1dHRvbic7XG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tLTAnKSBpc0hvc3RIaWRkZW4gPSBmYWxzZTtcblxuICAgIC8vIG1ldGFkYXRhIGFuZCBlZGl0b3IgbW9kZSBpbnB1dFxuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb24hOiBBY3Rpb25EZXNjcmlwdG9yPFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtPzogVDtcbiAgICBASW5wdXQoKSBwdWJsaWMgaXRlbUlkPzogSWRUeXBlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhY3Rpb25EYXRhPzogQWN0aW9uRGF0YTtcbiAgICBASW5wdXQoKSBwdWJsaWMgcXVlcnlQYXJhbT86IE1lZGl1c1F1ZXJ5UGFyYW07XG4gICAgQElucHV0KCkgcHVibGljIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8VCwgUz47XG4gICAgQElucHV0KCkgcHVibGljIGhvc3RDb21wb25lbnQ/OiB1bmtub3duO1xuICAgIEBJbnB1dCgncm91dGUnKSBwdWJsaWMgcm91dGVJbml0PzogQWN0aXZhdGVkUm91dGU7XG4gICAgQElucHV0KCdkaXNhYmxlZCcpIHB1YmxpYyBpbnB1dERpc2FibGVkOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gb2YoZmFsc2UpO1xuICAgIEBJbnB1dCgnbG9hZGluZycpIHB1YmxpYyBpbnB1dExvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBvZihmYWxzZSk7XG4gICAgQElucHV0KCd2aWV3Q29udGFpbmVyJykgcHVibGljIHZpZXdDb250YWluZXJJbml0PzogSVZpZXdDb250YWluZXI8VCwgUz47XG4gICAgQElucHV0KCkgcHVibGljIHNlbGVjdGVkSXRlbXM6IEFycmF5PFQ+ID0gW107XG5cbiAgICBAT3V0cHV0KCdmaW5pc2gnKSBwdWJsaWMgZmluaXNoRXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxBY3Rpb25JbnN0YW5jZTxULCBTPj4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3N1YmFjdGlvbnNNZW51JykgcHVibGljIHN1YmFjdGlvbnNNZW51PzogTWVudTtcblxuICAgIHByaXZhdGUgbG9hZGluZ1N1YmplY3QgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcbiAgICBwdWJsaWMgJGxvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gICAgcHVibGljIGNtcElkOiBzdHJpbmcgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMik7XG4gICAgcHJpdmF0ZSBpc1Zpc2libGVTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBpc1Zpc2libGVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc1Zpc2libGUgPSB0aGlzLmlzVmlzaWJsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICBwcml2YXRlIGlzUGVybWl0dGVkU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PGJvb2xlYW4+KDEpO1xuICAgIHByaXZhdGUgaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc1Blcm1pdHRlZCA9IHRoaXMuaXNQZXJtaXR0ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSBpc0VuYWJsZWRTdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG4gICAgcHJpdmF0ZSBpc0VuYWJsZWRTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRpc0VuYWJsZWQgPSB0aGlzLmlzRW5hYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICBwcml2YXRlIGxhYmVsU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZyB8IG51bGw+KDEpO1xuICAgIHByaXZhdGUgbGFiZWxTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHVibGljICRsYWJlbCA9IHRoaXMubGFiZWxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG4gICAgcHJpdmF0ZSB0b29sdGlwU3ViamVjdCA9IG5ldyBSZXBsYXlTdWJqZWN0PHN0cmluZyB8IG51bGw+KDEpO1xuICAgIHByaXZhdGUgdG9vbHRpcFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwdWJsaWMgJHRvb2x0aXAgPSB0aGlzLnRvb2x0aXBTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XG5cbiAgICBwdWJsaWMgdmlld0NvbnRhaW5lcj86IElWaWV3Q29udGFpbmVyPFQsIFM+O1xuXG4gICAgcHVibGljIGFjdGlvbkxpbms/OiBBY3Rpb25MaW5rRGVzY3JpcHRvcjxUPjtcbiAgICBwdWJsaWMgaGFzTm9UaXRsZSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gICAgcHVibGljIHJvdXRlITogQWN0aXZhdGVkUm91dGU7IC8vIHZhbHVlIHdpbGwgYmUgZGV0ZXJtaW5lZCBpbiBuZ09uSW5pdFxuICAgIHByaXZhdGUgcm91dGVQZXJtaXNzaW9ucz86IEFQZXJtaXNzaW9ucztcblxuICAgIHB1YmxpYyBidXR0b25DbGFzcyA9ICdwLWJ1dHRvbi1wcmltYXJ5JztcbiAgICBwdWJsaWMgc3ViYWN0aW9uczogTWVudUl0ZW1bXSA9IFtdO1xuICAgIHByaXZhdGUgc3ViYWN0aW9uU3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlU2VydmljZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGF1dGhvcml6YXRpb246IE1uZ0F1dGhvcml6YXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFjdGlvbkV4ZWN1dG9yOiBNbmdBY3Rpb25FeGVjdXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29uZmlybWF0aW9uU2VydmljZTogQ29uZmlybWF0aW9uU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB2aWV3Q29udGFpbmVyU2VydmljZTogTW5nVmlld0NvbnRhaW5lckNvbXBvbmVudFNlcnZpY2U8VCwgUz4gfCBudWxsXG4gICAgKSB7XG4gICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnZpZXdDb250YWluZXIgPSB0aGlzLnZpZXdDb250YWluZXJJbml0ID8/IHRoaXMudmlld0NvbnRhaW5lclNlcnZpY2UgPz8gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJvdXRlID0gdGhpcy5yb3V0ZUluaXQgPz8gdGhpcy5yb3V0ZVNlcnZpY2U7XG5cbiAgICAgICAgdGhpcy5oYXNOb1RpdGxlID0gdGhpcy5hY3Rpb24uYnV0dG9uLmxhYmVsID09PSBudWxsO1xuICAgICAgICB0aGlzLmlzRW5hYmxlZFN1YmplY3QubmV4dCh0cnVlKTtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJqZWN0Lm5leHQodHJ1ZSk7XG4gICAgICAgIHRoaXMubGFiZWxTdWJqZWN0Lm5leHQobnVsbCk7XG4gICAgICAgIHRoaXMudG9vbHRpcFN1YmplY3QubmV4dChudWxsKTtcblxuICAgICAgICBjb25zdCByb3V0ZURhdGEgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEgYXMgTW5nUm91dGVyRGF0YTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uTGlua0Rlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uTGluayA9IHRoaXMuYWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLnRhYmxldmlld0NhdGVnb3J5ICYmIHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9ucykge1xuICAgICAgICAgICAgaWYgKHJvdXRlRGF0YS50YWJsZXZpZXdQZXJtaXNzaW9uc1t0aGlzLmFjdGlvbi50YWJsZXZpZXdDYXRlZ29yeV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlUGVybWlzc2lvbnMgPSByb3V0ZURhdGEudGFibGV2aWV3UGVybWlzc2lvbnNbdGhpcy5hY3Rpb24udGFibGV2aWV3Q2F0ZWdvcnldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucHJvY2Vzc1N1YnNjcmlwdGlvbnMoKTtcblxuICAgICAgICBpZiAodGhpcy5hY3Rpb24uY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmhvc3RDbGFzcyA9IHRoaXMuYWN0aW9uLmNsYXNzTmFtZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBob3N0VmlzaWJpbGl0eVN1YnNjcmlwdGlvbiA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuJGlzVmlzaWJsZSwgdGhpcy4kaXNQZXJtaXR0ZWRdKS5zdWJzY3JpYmUoKFtpc1Zpc2libGUsIGlzUGVybWl0dGVkXSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0hvc3RIaWRkZW4gPSAhaXNWaXNpYmxlIHx8ICFpc1Blcm1pdHRlZDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGhvc3RWaXNpYmlsaXR5U3Vic2NyaXB0aW9uKTtcblxuICAgICAgICB0aGlzLmJ1dHRvbkNsYXNzID0gdGhpcy5hY3Rpb24uYnV0dG9uLnN0eWxlQ2xhc3MuYnVpbGQodGhpcy5oYXNOb1RpdGxlKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoY2hhbmdlc1snaXRlbSddPy5maXJzdENoYW5nZSA/PyB0cnVlKSB8fFxuICAgICAgICAgICAgIShjaGFuZ2VzWydpdGVtSWQnXT8uZmlyc3RDaGFuZ2UgPz8gdHJ1ZSkgfHxcbiAgICAgICAgICAgICEoY2hhbmdlc1snYWN0aW9uRGF0YSddPy5maXJzdENoYW5nZSA/PyB0cnVlKSB8fFxuICAgICAgICAgICAgKHRoaXMuYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uICYmICEoY2hhbmdlc1snc2VsZWN0ZWRJdGVtcyddPy5maXJzdENoYW5nZSA/PyB0cnVlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdWJzY3JpcHRpb25zKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1Zpc2libGVTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5zdWJhY3Rpb25TdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPiwgcGFyYW1ldGVycz86IEFjdGlvblBhcmFtZXRlcnM8VD4sIGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKGFjdGlvbi5zdWJhY3Rpb25zQXNNZW51KSB7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvbnNNZW51Py50b2dnbGUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aW9uRGF0YSA9IHRoaXMuYWN0aW9uRGF0YSA/IHRoaXMuYWN0aW9uRGF0YSA6IHt9O1xuICAgICAgICBhY3Rpb25EYXRhWydjbXBJZCddID0gdGhpcy5jbXBJZDtcblxuICAgICAgICBwYXJhbWV0ZXJzID8/PSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKGFjdGlvbkRhdGEpXG4gICAgICAgICAgICAud2l0aFF1ZXJ5UGFyYW0odGhpcy5xdWVyeVBhcmFtKVxuICAgICAgICAgICAgLndpdGhSb3V0ZSh0aGlzLnJvdXRlKVxuICAgICAgICAgICAgLndpdGhWaWV3Q29udGFpbmVyKHRoaXMudmlld0NvbnRhaW5lcilcbiAgICAgICAgICAgIC53aXRoU291cmNlQ29tcG9uZW50KHRoaXMpXG4gICAgICAgICAgICAud2l0aEhvc3RDb21wb25lbnQodGhpcy5ob3N0Q29tcG9uZW50KVxuICAgICAgICAgICAgLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG5cbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmFjdGlvbkV4ZWN1dG9yLnRyaWdnZXJBY3Rpb24oYWN0aW9uLCBwYXJhbWV0ZXJzKTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIGluc3RhbmNlLnJlc3VsdCQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoRXZlbnRFbWl0dGVyLm5leHQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy52aWV3Q29udGFpbmVyIGFzIElWaWV3Q29udGFpbmVyVGFibGU8VCwgUz4pPy5yZWxvYWRUYWJsZT8uKHtkYXRhOiB7ZXZlbnQ6IGV2ZW50fX0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICBpbnN0YW5jZS5lcnJvciQuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoRXZlbnRFbWl0dGVyLm5leHQoaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgaW5zdGFuY2UuaXNSdW5Mb2FkaW5nJC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N1YmplY3QubmV4dChyZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbmZpcm1hdGlvblNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbmZpcm1hdGlvblNlcnZpY2VJbnN0YW5jZUtleShhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8YW55Pikge1xuICAgICAgICByZXR1cm4gYCR7YWN0aW9uLmFjdGlvbk5hbWV9XyR7dGhpcy5jbXBJZH1gO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkN1c3RvbUFjdGlvbkNtcEluc3QoaW5zdGFuY2U6IElBY3Rpb25Db21wb25lbnQ8VD4pIHtcbiAgICAgICAgY29uc3QgY21wSW5zdFN1YnNjcmlwdGlvbiA9IGluc3RhbmNlLnRyaWdnZXJBY3Rpb25FdmVudEVtaXR0ZXIuc3Vic2NyaWJlKHBhcmFtcyA9PiB0aGlzLnRyaWdnZXJBY3Rpb24odGhpcy5hY3Rpb24sIHBhcmFtcykpO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChjbXBJbnN0U3Vic2NyaXB0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NTdWJhY3Rpb25zKCk6IE1lbnVJdGVtW10ge1xuICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IG1lbnVJdGVtczogTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICB0aGlzLmFjdGlvbi5zdWJhY3Rpb25zO1xuICAgICAgICBmb3IgKGNvbnN0IHN1YmFjdGlvbiBvZiB0aGlzLmFjdGlvbi5zdWJhY3Rpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IHt9IGFzIE1lbnVJdGVtO1xuXG4gICAgICAgICAgICBtZW51SXRlbS5pY29uID0gc3ViYWN0aW9uLmJ1dHRvbi5pY29uID8/IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgIEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHN1YmFjdGlvbiwgJ3RpdGxlJywgc3ViYWN0aW9uLmJ1dHRvbi5sYWJlbCA/PyB1bmRlZmluZWQsIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS5sYWJlbCA9IHJlcyEpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN1YmFjdGlvblN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRoaXMudHJhbnNsYXRlLCBzdWJhY3Rpb24sICd0b29sdGlwJywgdGhpcy5hY3Rpb24uYnV0dG9uLnRvb2x0aXAsIHRoaXMuaXRlbSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogcmVzID0+IChtZW51SXRlbS50b29sdGlwID0gcmVzISlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IG5ldyBBY3Rpb25QYXJhbWV0ZXJzKHRoaXMuaXRlbUlkLCB0aGlzLml0ZW0pXG4gICAgICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgICAgICAud2l0aFZpZXdDb250YWluZXIodGhpcy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUNvbXBvbmVudCh0aGlzKTtcblxuICAgICAgICAgICAgaWYgKHN1YmFjdGlvbi5oYXNJdGVtc1NlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMud2l0aFNlbGVjdGVkSXRlbXModGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuYWN0aW9uRXhlY3V0b3IucHJlcGFyZUFjdGlvbkNvbnRleHRWYWxpZGF0aW9uKHN1YmFjdGlvbiwgcGFyYW1ldGVycywgdGhpcy5kYXRhUHJvdmlkZXIpO1xuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1YmFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBzdWJhY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24oY29udGV4dCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0uZGlzYWJsZWQgPSAhcmVzKVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIHN1YmFjdGlvbi5pc1Zpc2libGVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3ViYWN0aW9uU3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBzdWJhY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24oY29udGV4dCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiAobWVudUl0ZW0udmlzaWJsZSA9IHJlcylcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBtZW51SXRlbS5jb21tYW5kID0gKCkgPT4gdGhpcy50cmlnZ2VyQWN0aW9uKHN1YmFjdGlvbik7XG5cbiAgICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKG1lbnVJdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVudUl0ZW1zO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1N1YnNjcmlwdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBuZXcgQWN0aW9uUGFyYW1ldGVycyh0aGlzLml0ZW1JZCwgdGhpcy5pdGVtKVxuICAgICAgICAgICAgLndpdGhBY3Rpb25EYXRhKHRoaXMuYWN0aW9uRGF0YSlcbiAgICAgICAgICAgIC53aXRoVmlld0NvbnRhaW5lcih0aGlzLnZpZXdDb250YWluZXIgPz8gdW5kZWZpbmVkKVxuICAgICAgICAgICAgLndpdGhTb3VyY2VDb21wb25lbnQodGhpcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmhhc0l0ZW1zU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBwYXJhbWV0ZXJzLndpdGhTZWxlY3RlZEl0ZW1zKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5hY3Rpb25FeGVjdXRvci5wcmVwYXJlQWN0aW9uQ29udGV4dFZhbGlkYXRpb24odGhpcy5hY3Rpb24sIHBhcmFtZXRlcnMsIHRoaXMuZGF0YVByb3ZpZGVyKTtcblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuYWN0aW9uLmlzVmlzaWJsZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uID0gdGhpcy5hY3Rpb24uaXNWaXNpYmxlRnVuY3Rpb24oY29udGV4dCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXMgPT4gdGhpcy5pc1Zpc2libGVTdWJqZWN0Lm5leHQocmVzKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFjdGlvbi5wZXJtaXNzaW9ucyAhPT0gJ3VuZGVmaW5lZCcgfHwgdHlwZW9mIHRoaXMucm91dGVQZXJtaXNzaW9ucyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQZXJtaXR0ZWRTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9XG4gICAgICAgICAgICAgICAgdGhpcy5hY3Rpb24ucGVybWlzc2lvbnMgJiYgdGhpcy5yb3V0ZVBlcm1pc3Npb25zXG4gICAgICAgICAgICAgICAgICAgID8gUGVybWlzc2lvbnMuQWxsLm9mKHRoaXMucm91dGVQZXJtaXNzaW9ucywgdGhpcy5hY3Rpb24ucGVybWlzc2lvbnMpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5yb3V0ZVBlcm1pc3Npb25zID8/IHRoaXMuYWN0aW9uLnBlcm1pc3Npb25zITtcbiAgICAgICAgICAgIHRoaXMuaXNWaXNpYmxlU3Vic2NyaXB0aW9uID0gdGhpcy5hdXRob3JpemF0aW9uLmlzUGVybWl0dGVkKHBlcm1pc3Npb25zLCB0aGlzLnJvdXRlLnNuYXBzaG90LCBjb250ZXh0IGFzIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPHVua25vd24sIHVua25vd24+KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzUGVybWl0dGVkU3ViamVjdC5uZXh0KHJlcylcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5hY3Rpb24uaXNFbmFibGVkRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFbmFibGVkU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5pc0VuYWJsZWRTdWJzY3JpcHRpb24gPSB0aGlzLmFjdGlvbi5pc0VuYWJsZWRGdW5jdGlvbihjb250ZXh0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB0aGlzLmlzRW5hYmxlZFN1YmplY3QubmV4dChyZXMpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5oYXNOb1RpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmxhYmVsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5sYWJlbFN1YnNjcmlwdGlvbiA9IEkxOG5VdGlscy5BY3Rpb24uZ2V0QXN5bmModGhpcy50cmFuc2xhdGUsIHRoaXMuYWN0aW9uLCAndGl0bGUnLCB0aGlzLmFjdGlvbi5idXR0b24ubGFiZWwgPz8gdW5kZWZpbmVkLCB0aGlzLml0ZW0pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogaTE4biA9PiB0aGlzLmxhYmVsU3ViamVjdC5uZXh0KGkxOG4pXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudG9vbHRpcFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aW9uLmJ1dHRvbi50b29sdGlwKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBTdWJzY3JpcHRpb24gPSBJMThuVXRpbHMuQWN0aW9uLmdldEFzeW5jKHRoaXMudHJhbnNsYXRlLCB0aGlzLmFjdGlvbiwgJ3Rvb2x0aXAnLCB0aGlzLmFjdGlvbi5idXR0b24udG9vbHRpcCwgdGhpcy5pdGVtLCB1bmRlZmluZWQsIHVuZGVmaW5lZCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBpMThuID0+IHRoaXMudG9vbHRpcFN1YmplY3QubmV4dChpMThuKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1YmFjdGlvbnMgPSB0aGlzLnByb2Nlc3NTdWJhY3Rpb25zKCk7XG4gICAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIigkaXNWaXNpYmxlIHwgYXN5bmMpICYmICgkaXNQZXJtaXR0ZWQgfCBhc3luYylcIj5cbiAgICA8YVxuICAgICAgICAqbmdJZj1cImFjdGlvbkxpbmsgJiYgYWN0aW9uTGluay51cmwgIT09ICcnOyBlbHNlIHJvdXRlckxpbmtcIlxuICAgICAgICBwQnV0dG9uXG4gICAgICAgIHBSaXBwbGVcbiAgICAgICAgW2xhYmVsXT1cIigkbGFiZWwgfCBhc3luYykgPz8gJydcIlxuICAgICAgICBbaWNvbl09XCIkYW55KGFjdGlvbi5idXR0b24uaWNvbilcIlxuICAgICAgICBbaWNvblBvc109XCIkYW55KGFjdGlvbi5idXR0b24uaWNvblBvc2l0aW9uKVwiXG4gICAgICAgIFtocmVmXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpID8gbnVsbCA6IChhY3Rpb25MaW5rLnVybCB8IHBhcmFtZXRyaXplIDogaXRlbUlkIDogaXRlbSA6IGFjdGlvbkRhdGEpXCJcbiAgICAgICAgW3RhcmdldF09XCJhY3Rpb25MaW5rLnRhcmdldFwiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoJGlzRW5hYmxlZCB8IGFzeW5jKSA9PT0gZmFsc2UgfHwgKChpbnB1dERpc2FibGVkIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgIFtwVG9vbHRpcF09XCIkYW55KCR0b29sdGlwIHwgYXN5bmMpXCJcbiAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCI+PC9hPlxuICAgIDxuZy10ZW1wbGF0ZSAjcm91dGVyTGluaz5cbiAgICAgICAgPGFcbiAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uTGluazsgZWxzZSBjdXN0b21Db21wb25lbnRcIlxuICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgcFJpcHBsZVxuICAgICAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgIFtpY29uUG9zXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uUG9zaXRpb24pXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFt0YXJnZXRdPVwiYWN0aW9uTGluay50YXJnZXRcIlxuICAgICAgICAgICAgW3JlcGxhY2VVcmxdPVwiYWN0aW9uTGluay5yZXBsYWNlVXJsXCJcbiAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpID8gbnVsbCA6IChhY3Rpb25MaW5rLnBhdGhTZWdtZW50cyB8IHBhcmFtZXRyaXplIDogaXRlbUlkIDogaXRlbSA6IGFjdGlvbkRhdGEpXCJcbiAgICAgICAgICAgIFtyZWxhdGl2ZVRvXT1cInJvdXRlXCJcbiAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zIHwgcGFyYW1ldHJpemUgOiBpdGVtSWQgOiBpdGVtIDogYWN0aW9uRGF0YVwiXG4gICAgICAgICAgICBbcXVlcnlQYXJhbXNIYW5kbGluZ109XCJhY3Rpb25MaW5rLnF1ZXJ5UGFyYW1zSGFuZGxpbmdcIlxuICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIkYW55KCR0b29sdGlwIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzc1wiPjwvYT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tQ29tcG9uZW50PlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5jb21wb25lbnQ7IGVsc2Ugc3BsaXRCdXR0b25cIlxuICAgICAgICAgICAgW21uZ0NvbXBvbmVudF09XCJhY3Rpb24uY29tcG9uZW50XCJcbiAgICAgICAgICAgIFtpbnB1dHNdPVwie1xuICAgICAgICAgICAgICAgIGFjdGlvbjogYWN0aW9uLFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgaXRlbUlkOiBpdGVtSWQsXG4gICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiAkaXNFbmFibGVkLFxuICAgICAgICAgICAgICAgIGxvYWRpbmc6ICRsb2FkaW5nLFxuICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXI6IHZpZXdDb250YWluZXJcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgKGluc3RhbmNlQ3JlYXRlZCk9XCJvbkN1c3RvbUFjdGlvbkNtcEluc3QoJGV2ZW50KVwiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy10ZW1wbGF0ZSAjc3BsaXRCdXR0b24+XG4gICAgICAgIDxwLXNwbGl0QnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zdWJhY3Rpb25zLmxlbmd0aCA+IDAgJiYgIWFjdGlvbi5zdWJhY3Rpb25zQXNNZW51OyBlbHNlIGJ1dHRvblwiXG4gICAgICAgICAgICBbaWNvbl09XCIkYW55KGFjdGlvbi5idXR0b24uaWNvbilcIlxuICAgICAgICAgICAgW2ljb25Qb3NdPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb25Qb3NpdGlvbilcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIigkbGFiZWwgfCBhc3luYykgPz8gJydcIlxuICAgICAgICAgICAgW3BUb29sdGlwXT1cIiRhbnkoJHRvb2x0aXAgfCBhc3luYylcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIigkaXNFbmFibGVkIHwgYXN5bmMpID09PSBmYWxzZSB8fCAoKGlucHV0RGlzYWJsZWQgfCBhc3luYykgPz8gZmFsc2UpXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cInRyaWdnZXJBY3Rpb24oYWN0aW9uKVwiXG4gICAgICAgICAgICBbY2xhc3NdPVwiYnV0dG9uQ2xhc3NcIlxuICAgICAgICAgICAgW21vZGVsXT1cInN1YmFjdGlvbnNcIj5cbiAgICAgICAgPC9wLXNwbGl0QnV0dG9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLXRlbXBsYXRlICNidXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgIHBSaXBwbGVcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2ljb25dPVwiJGFueShhY3Rpb24uYnV0dG9uLmljb24pXCJcbiAgICAgICAgICAgIFtpY29uUG9zXT1cIiRhbnkoYWN0aW9uLmJ1dHRvbi5pY29uUG9zaXRpb24pXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCIoJGxhYmVsIHwgYXN5bmMpID8/ICcnXCJcbiAgICAgICAgICAgIFtwVG9vbHRpcF09XCIkYW55KCR0b29sdGlwIHwgYXN5bmMpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cIigoJGxvYWRpbmcgfCBhc3luYykgPz8gZmFsc2UpIHx8ICgoaW5wdXRMb2FkaW5nIHwgYXN5bmMpID8/IGZhbHNlKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiKCRpc0VuYWJsZWQgfCBhc3luYykgPT09IGZhbHNlIHx8ICgoaW5wdXREaXNhYmxlZCB8IGFzeW5jKSA/PyBmYWxzZSlcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRyaWdnZXJBY3Rpb24oYWN0aW9uLCB1bmRlZmluZWQsICRldmVudClcIlxuICAgICAgICAgICAgW2NsYXNzXT1cImJ1dHRvbkNsYXNzXCI+PC9idXR0b24+XG4gICAgICAgIDxwLW1lbnUgI3N1YmFjdGlvbnNNZW51IFttb2RlbF09XCJzdWJhY3Rpb25zXCIgW3BvcHVwXT1cInRydWVcIiBzdHlsZUNsYXNzPVwibW5nLWFjdGlvbi1tZW51XCI+PC9wLW1lbnU+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8cC1jb25maXJtRGlhbG9nXG4gICAgICAgICpuZ0lmPVwiYWN0aW9uLnJ1bkNvbmZpcm1hdGlvbkRpYWxvZ0Rlc2NyaXB0b3JcIlxuICAgICAgICBba2V5XT1cImFjdGlvbi5hY3Rpb25OYW1lICsgJ18nICsgY21wSWRcIlxuICAgICAgICBbYmFzZVpJbmRleF09XCI1MFwiXG4gICAgICAgIGFwcGVuZFRvPVwiYm9keVwiXG4gICAgICAgIFtjbG9zYWJsZV09XCJhY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvci5jbG9zYWJsZVwiPjwvcC1jb25maXJtRGlhbG9nPlxuPC9uZy1jb250YWluZXI+XG4iXX0=
|