@mediusinc/mng-commons 0.6.1 → 0.8.0-rc.1
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/assets/i18n/en.json +3 -3
- package/assets/i18n/sl.json +3 -3
- package/esm2020/lib/api/models/builders/query-param.builder.mjs +59 -53
- package/esm2020/lib/api/models/filter-match-type.model.mjs +24 -24
- package/esm2020/lib/api/models/filter-param.model.mjs +32 -32
- package/esm2020/lib/api/models/index.mjs +8 -8
- package/esm2020/lib/api/models/mappers.mjs +12 -12
- package/esm2020/lib/api/models/query-mode.model.mjs +17 -17
- package/esm2020/lib/api/models/query-param.model.mjs +67 -67
- package/esm2020/lib/api/models/query-result.model.mjs +17 -17
- package/esm2020/lib/api/models/serialization.model.mjs +1 -1
- package/esm2020/lib/api/services/api.abstract.service.mjs +55 -55
- package/esm2020/lib/api/services/crud-api.abstract.service.mjs +66 -66
- package/esm2020/lib/api/services/get-all-api.abstract.service.mjs +22 -22
- package/esm2020/lib/api/services/index.mjs +3 -3
- package/esm2020/lib/api/utils/index.mjs +2 -2
- package/esm2020/lib/api/utils/medius-rest.util.mjs +152 -126
- package/esm2020/lib/api/utils/object-serializer.util.mjs +243 -243
- package/esm2020/lib/components/action/action.component.mjs +174 -161
- package/esm2020/lib/components/action/editor/action-editor.component.mjs +230 -236
- package/esm2020/lib/components/action/index.mjs +3 -3
- package/esm2020/lib/components/action/models/action-confirmation-service.model.mjs +1 -1
- package/esm2020/lib/components/action/models/action-execution.model.mjs +231 -59
- package/esm2020/lib/components/action/models/index.mjs +2 -2
- package/esm2020/lib/components/action/route/action-route.component.mjs +125 -127
- package/esm2020/lib/components/form/autocomplete/autocomplete.component.mjs +268 -268
- package/esm2020/lib/components/form/dropdown/dropdown.component.mjs +160 -160
- package/esm2020/lib/components/form/editor/form-editor.component.mjs +189 -189
- package/esm2020/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +18 -18
- package/esm2020/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +43 -43
- package/esm2020/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +24 -24
- package/esm2020/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.mjs +79 -56
- package/esm2020/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.mjs +16 -16
- package/esm2020/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +179 -179
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +156 -165
- package/esm2020/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +126 -126
- package/esm2020/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +16 -16
- package/esm2020/lib/components/form/formly/fields/index.mjs +9 -9
- package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +14 -14
- package/esm2020/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.mjs +14 -14
- package/esm2020/lib/components/form/formly/wrappers/index.mjs +2 -2
- package/esm2020/lib/components/form/index.mjs +3 -3
- package/esm2020/lib/components/form/models/form-editor.event.mjs +34 -34
- package/esm2020/lib/components/form/models/index.mjs +1 -1
- package/esm2020/lib/components/layout/breadcrumb.component.mjs +16 -16
- package/esm2020/lib/components/layout/footer.component.mjs +16 -16
- package/esm2020/lib/components/layout/index.mjs +6 -6
- package/esm2020/lib/components/layout/main-layout.component.mjs +51 -51
- package/esm2020/lib/components/layout/menu-item.component.mjs +216 -216
- package/esm2020/lib/components/layout/menu.component.mjs +19 -19
- package/esm2020/lib/components/layout/services/index.mjs +1 -1
- package/esm2020/lib/components/layout/services/main-layout.component.service.mjs +192 -192
- package/esm2020/lib/components/layout/topbar.component.mjs +57 -57
- package/esm2020/lib/components/tableview/index.mjs +6 -6
- package/esm2020/lib/components/tableview/models/index.mjs +1 -1
- package/esm2020/lib/components/tableview/models/table.event.mjs +15 -15
- package/esm2020/lib/components/tableview/route/tableview-route.abstract.component.mjs +35 -35
- package/esm2020/lib/components/tableview/route/tableview-route.component.mjs +53 -53
- package/esm2020/lib/components/tableview/table/column-filter/column-filter.component.mjs +102 -85
- package/esm2020/lib/components/tableview/table/column-value/column-value.component.mjs +41 -41
- package/esm2020/lib/components/tableview/table/table.component.mjs +430 -339
- package/esm2020/lib/components/tableview/tableview.component.mjs +89 -97
- package/esm2020/lib/config/formly.config.mjs +172 -163
- package/esm2020/lib/config/index.mjs +1 -1
- package/esm2020/lib/config/models/index.mjs +1 -1
- package/esm2020/lib/config/models/mng-config.model.mjs +1 -1
- package/esm2020/lib/data-providers/base.data-provider.mjs +16 -16
- package/esm2020/lib/data-providers/editor.data-provider.mjs +36 -36
- package/esm2020/lib/data-providers/index.mjs +5 -5
- package/esm2020/lib/data-providers/lookup.data-provider.mjs +15 -15
- package/esm2020/lib/data-providers/table.data-provider.mjs +16 -16
- package/esm2020/lib/data-providers/tableview.data-provider.mjs +16 -16
- package/esm2020/lib/descriptors/action.descriptor.mjs +623 -600
- package/esm2020/lib/descriptors/column.descriptor.mjs +228 -197
- package/esm2020/lib/descriptors/editor.descriptor.mjs +154 -154
- package/esm2020/lib/descriptors/field-validation.descriptor.mjs +20 -20
- package/esm2020/lib/descriptors/field.descriptor.interface.mjs +1 -1
- package/esm2020/lib/descriptors/field.descriptor.mjs +823 -793
- package/esm2020/lib/descriptors/filter.descriptor.mjs +295 -237
- package/esm2020/lib/descriptors/index.mjs +11 -11
- package/esm2020/lib/descriptors/lookup.descriptor.mjs +1 -1
- package/esm2020/lib/descriptors/model.descriptor.mjs +33 -33
- package/esm2020/lib/descriptors/table.descriptor.mjs +214 -171
- package/esm2020/lib/descriptors/tableview.descriptor.mjs +134 -134
- package/esm2020/lib/directives/component.directive.mjs +43 -43
- package/esm2020/lib/directives/index.mjs +2 -2
- package/esm2020/lib/directives/template.directive.mjs +27 -27
- package/esm2020/lib/mng-commons.module.mjs +426 -426
- package/esm2020/lib/models/column-value.model.mjs +1 -1
- package/esm2020/lib/models/enum.model.mjs +1 -1
- package/esm2020/lib/models/error.model.mjs +1 -1
- package/esm2020/lib/models/index.mjs +6 -6
- package/esm2020/lib/models/menu.model.mjs +1 -1
- package/esm2020/lib/models/user.model.mjs +1 -1
- package/esm2020/lib/models/view-container.model.mjs +1 -1
- package/esm2020/lib/pipes/boolean.pipe.mjs +26 -26
- package/esm2020/lib/pipes/enum.pipe.mjs +24 -24
- package/esm2020/lib/pipes/i18n-property.pipe.mjs +17 -17
- package/esm2020/lib/pipes/index.mjs +5 -5
- package/esm2020/lib/pipes/json-path.pipe.mjs +79 -79
- package/esm2020/lib/pipes/link-formatter.pipe.mjs +38 -38
- package/esm2020/lib/router/index.mjs +1 -1
- package/esm2020/lib/router/models/index.mjs +1 -1
- package/esm2020/lib/router/models/router.model.mjs +1 -1
- package/esm2020/lib/router/route-builder.mjs +431 -431
- package/esm2020/lib/services/action-executor.service.mjs +535 -361
- package/esm2020/lib/services/commons.service.mjs +344 -344
- package/esm2020/lib/services/configuration.service.mjs +110 -110
- package/esm2020/lib/services/error-mapper.service.mjs +13 -13
- package/esm2020/lib/services/index.mjs +6 -6
- package/esm2020/lib/services/internal/commons-init.provider.mjs +3 -3
- package/esm2020/lib/services/internal/commons-init.service.mjs +43 -43
- package/esm2020/lib/services/internal/index.mjs +2 -2
- package/esm2020/lib/services/navigation.service.mjs +47 -47
- package/esm2020/lib/services/providers/config-service.provider.mjs +29 -29
- package/esm2020/lib/services/providers/formly-config.provider.mjs +30 -30
- package/esm2020/lib/services/providers/index.mjs +2 -2
- package/esm2020/lib/services/tokens/browser-storage.token.mjs +5 -5
- package/esm2020/lib/services/tokens/commons-init.token.mjs +2 -2
- package/esm2020/lib/services/tokens/default-setting.token.mjs +2 -2
- package/esm2020/lib/services/tokens/index.mjs +4 -4
- package/esm2020/lib/services/tokens/module-config.token.mjs +2 -2
- package/esm2020/lib/services/view-container.component.service.mjs +34 -34
- package/esm2020/lib/types/index.mjs +2 -2
- package/esm2020/lib/types/type.decorator.mjs +12 -12
- package/esm2020/lib/types/type.model.mjs +2 -2
- package/esm2020/lib/utils/action-data-provider.util.mjs +116 -116
- package/esm2020/lib/utils/editor-formly.util.mjs +205 -202
- package/esm2020/lib/utils/enum.util.mjs +82 -82
- package/esm2020/lib/utils/i18n.util.mjs +232 -232
- package/esm2020/lib/utils/index.mjs +7 -7
- package/esm2020/lib/utils/model.util.mjs +59 -59
- package/esm2020/lib/utils/notification.util.mjs +45 -45
- package/esm2020/lib/utils/route.util.mjs +23 -23
- package/esm2020/lib/utils/styles.util.mjs +41 -0
- package/esm2020/lib/utils/type.util.mjs +76 -76
- package/esm2020/mediusinc-mng-commons.mjs +4 -4
- package/esm2020/public-api.mjs +39 -39
- package/fesm2015/mediusinc-mng-commons.mjs +9702 -8977
- package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
- package/fesm2020/mediusinc-mng-commons.mjs +9574 -8848
- package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
- package/lib/api/models/builders/query-param.builder.d.ts +13 -12
- package/lib/api/models/filter-match-type.model.d.ts +23 -23
- package/lib/api/models/filter-param.model.d.ts +23 -23
- package/lib/api/models/index.d.ts +8 -8
- package/lib/api/models/mappers.d.ts +6 -6
- package/lib/api/models/query-mode.model.d.ts +16 -16
- package/lib/api/models/query-param.model.d.ts +31 -31
- package/lib/api/models/query-result.model.d.ts +23 -23
- package/lib/api/models/serialization.model.d.ts +8 -8
- package/lib/api/services/api.abstract.service.d.ts +24 -24
- package/lib/api/services/crud-api.abstract.service.d.ts +22 -22
- package/lib/api/services/get-all-api.abstract.service.d.ts +11 -11
- package/lib/api/services/index.d.ts +3 -3
- package/lib/api/utils/index.d.ts +2 -2
- package/lib/api/utils/medius-rest.util.d.ts +14 -12
- package/lib/api/utils/object-serializer.util.d.ts +33 -33
- package/lib/components/action/action.component.d.ts +66 -65
- package/lib/components/action/editor/action-editor.component.d.ts +62 -59
- package/lib/components/action/index.d.ts +3 -3
- package/lib/components/action/models/action-confirmation-service.model.d.ts +6 -6
- package/lib/components/action/models/action-execution.model.d.ts +126 -57
- package/lib/components/action/models/index.d.ts +2 -2
- package/lib/components/action/route/action-route.component.d.ts +31 -31
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +53 -53
- package/lib/components/form/dropdown/dropdown.component.d.ts +44 -44
- package/lib/components/form/editor/form-editor.component.d.ts +45 -45
- package/lib/components/form/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +12 -12
- package/lib/components/form/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +14 -14
- package/lib/components/form/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +12 -12
- package/lib/components/form/formly/fields/formly-field-input/formly-field-input.component.d.ts +19 -14
- package/lib/components/form/formly/fields/formly-field-label/formly-field-label.component.d.ts +6 -6
- package/lib/components/form/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +44 -44
- package/lib/components/form/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +22 -25
- package/lib/components/form/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +37 -37
- package/lib/components/form/formly/fields/formly-field-tabs/formly-field-tabs.component.d.ts +6 -6
- package/lib/components/form/formly/fields/index.d.ts +9 -9
- package/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +6 -6
- package/lib/components/form/formly/wrappers/formly-table-wrapper/formly-table-wrapper.component.d.ts +6 -6
- package/lib/components/form/formly/wrappers/index.d.ts +2 -2
- package/lib/components/form/index.d.ts +3 -3
- package/lib/components/form/models/form-editor.event.d.ts +37 -37
- package/lib/components/form/models/index.d.ts +1 -1
- package/lib/components/layout/breadcrumb.component.d.ts +8 -8
- package/lib/components/layout/footer.component.d.ts +9 -9
- package/lib/components/layout/index.d.ts +6 -6
- package/lib/components/layout/main-layout.component.d.ts +20 -20
- package/lib/components/layout/menu-item.component.d.ts +37 -37
- package/lib/components/layout/menu.component.d.ts +10 -10
- package/lib/components/layout/services/index.d.ts +1 -1
- package/lib/components/layout/services/main-layout.component.service.d.ts +65 -65
- package/lib/components/layout/topbar.component.d.ts +24 -24
- package/lib/components/tableview/index.d.ts +6 -6
- package/lib/components/tableview/models/index.d.ts +1 -1
- package/lib/components/tableview/models/table.event.d.ts +17 -17
- package/lib/components/tableview/route/tableview-route.abstract.component.d.ts +19 -19
- package/lib/components/tableview/route/tableview-route.component.d.ts +18 -18
- package/lib/components/tableview/table/column-filter/column-filter.component.d.ts +31 -29
- package/lib/components/tableview/table/column-value/column-value.component.d.ts +17 -17
- package/lib/components/tableview/table/table.component.d.ts +104 -93
- package/lib/components/tableview/tableview.component.d.ts +37 -39
- package/lib/config/formly.config.d.ts +15 -15
- package/lib/config/index.d.ts +1 -1
- package/lib/config/models/index.d.ts +1 -1
- package/lib/config/models/mng-config.model.d.ts +34 -34
- package/lib/data-providers/base.data-provider.d.ts +14 -14
- package/lib/data-providers/editor.data-provider.d.ts +25 -25
- package/lib/data-providers/index.d.ts +5 -5
- package/lib/data-providers/lookup.data-provider.d.ts +14 -14
- package/lib/data-providers/table.data-provider.d.ts +14 -14
- package/lib/data-providers/tableview.data-provider.d.ts +15 -15
- package/lib/descriptors/action.descriptor.d.ts +277 -270
- package/lib/descriptors/column.descriptor.d.ts +76 -66
- package/lib/descriptors/editor.descriptor.d.ts +44 -44
- package/lib/descriptors/field-validation.descriptor.d.ts +18 -18
- package/lib/descriptors/field.descriptor.d.ts +326 -314
- package/lib/descriptors/field.descriptor.interface.d.ts +9 -9
- package/lib/descriptors/filter.descriptor.d.ts +127 -108
- package/lib/descriptors/index.d.ts +11 -11
- package/lib/descriptors/lookup.descriptor.d.ts +17 -17
- package/lib/descriptors/model.descriptor.d.ts +15 -15
- package/lib/descriptors/table.descriptor.d.ts +80 -63
- package/lib/descriptors/tableview.descriptor.d.ts +42 -42
- package/lib/directives/component.directive.d.ts +16 -16
- package/lib/directives/index.d.ts +2 -2
- package/lib/directives/template.directive.d.ts +13 -13
- package/lib/mng-commons.module.d.ts +86 -86
- package/lib/models/column-value.model.d.ts +4 -4
- package/lib/models/enum.model.d.ts +6 -6
- package/lib/models/error.model.d.ts +14 -14
- package/lib/models/index.d.ts +6 -6
- package/lib/models/menu.model.d.ts +25 -25
- package/lib/models/user.model.d.ts +8 -8
- package/lib/models/view-container.model.d.ts +6 -6
- package/lib/pipes/boolean.pipe.d.ts +7 -7
- package/lib/pipes/enum.pipe.d.ts +8 -8
- package/lib/pipes/i18n-property.pipe.d.ts +8 -8
- package/lib/pipes/index.d.ts +5 -5
- package/lib/pipes/json-path.pipe.d.ts +13 -13
- package/lib/pipes/link-formatter.pipe.d.ts +11 -11
- package/lib/router/index.d.ts +1 -1
- package/lib/router/models/index.d.ts +1 -1
- package/lib/router/models/router.model.d.ts +22 -22
- package/lib/router/route-builder.d.ts +86 -86
- package/lib/services/action-executor.service.d.ts +149 -104
- package/lib/services/commons.service.d.ts +72 -72
- package/lib/services/configuration.service.d.ts +36 -36
- package/lib/services/error-mapper.service.d.ts +7 -7
- package/lib/services/index.d.ts +6 -6
- package/lib/services/internal/commons-init.provider.d.ts +3 -3
- package/lib/services/internal/commons-init.service.d.ts +16 -16
- package/lib/services/internal/index.d.ts +2 -2
- package/lib/services/navigation.service.d.ts +14 -14
- package/lib/services/providers/config-service.provider.d.ts +6 -6
- package/lib/services/providers/formly-config.provider.d.ts +4 -4
- package/lib/services/providers/index.d.ts +2 -2
- package/lib/services/tokens/browser-storage.token.d.ts +2 -2
- package/lib/services/tokens/commons-init.token.d.ts +3 -3
- package/lib/services/tokens/default-setting.token.d.ts +2 -2
- package/lib/services/tokens/index.d.ts +4 -4
- package/lib/services/tokens/module-config.token.d.ts +3 -3
- package/lib/services/view-container.component.service.d.ts +22 -22
- package/lib/types/index.d.ts +2 -2
- package/lib/types/type.decorator.d.ts +4 -4
- package/lib/types/type.model.d.ts +20 -17
- package/lib/utils/action-data-provider.util.d.ts +16 -17
- package/lib/utils/editor-formly.util.d.ts +10 -10
- package/lib/utils/enum.util.d.ts +50 -50
- package/lib/utils/i18n.util.d.ts +56 -56
- package/lib/utils/index.d.ts +7 -7
- package/lib/utils/model.util.d.ts +8 -8
- package/lib/utils/notification.util.d.ts +11 -11
- package/lib/utils/route.util.d.ts +4 -4
- package/lib/utils/styles.util.d.ts +14 -0
- package/lib/utils/type.util.d.ts +36 -36
- package/mediusinc-mng-commons-0.8.0-rc.1.tgz +0 -0
- package/mediusinc-mng-commons.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +28 -28
- package/scss/common/theme/designer/_components.scss +1 -1
- package/scss/mng-overrides/_theme_datatable.scss +57 -0
- package/scss/mng-overrides/_theme_forms.scss +16 -0
- package/scss/mng-overrides/_theme_styles.scss +1 -0
- package/scss/mng-overrides/_theme_tableview.scss +0 -43
|
@@ -1,600 +1,623 @@
|
|
|
1
|
-
import { of
|
|
2
|
-
import { DataProvider, EditorDataProvider } from '../data-providers';
|
|
3
|
-
import { ActionDataProviderUtil, TypeUtil } from '../utils';
|
|
4
|
-
import { ModelDescriptor } from './';
|
|
5
|
-
export class ActionDescriptor {
|
|
6
|
-
constructor(model, actionName, parentType, parentProperty) {
|
|
7
|
-
this._type = ActionTypeEnum.Direct;
|
|
8
|
-
this._activationTrigger = ActionActivationTriggerEnum.OnClick;
|
|
9
|
-
this._position = ActionPositionEnum.ToolbarRight;
|
|
10
|
-
this._level = ActionLevelEnum.Default;
|
|
11
|
-
this._routeUrl = null;
|
|
12
|
-
this._className = '';
|
|
13
|
-
this._size = ActionDescriptor.SizeEnum.Normal;
|
|
14
|
-
this._isStyleText = false;
|
|
15
|
-
this._isStyleOutlined = false;
|
|
16
|
-
this._isStyleRaised = false;
|
|
17
|
-
this._hasRunConfirmation = false;
|
|
18
|
-
this._hasRunNotificationSuccess = true;
|
|
19
|
-
this._hasRunNotificationError = true;
|
|
20
|
-
this._model = model;
|
|
21
|
-
this._actionName = actionName;
|
|
22
|
-
if ((parentType && !parentProperty) || (!parentProperty && parentProperty)) {
|
|
23
|
-
throw new Error(`Provide both the parent type and parent property or none: ${parentType}, ${parentProperty}.`);
|
|
24
|
-
}
|
|
25
|
-
this._parentType = parentType;
|
|
26
|
-
this._parentTypeName = parentType ? TypeUtil.findTypeName(parentType) : undefined;
|
|
27
|
-
this._parentProperty = parentProperty;
|
|
28
|
-
if (this._parentTypeName || this._model) {
|
|
29
|
-
this._i18nModelActionBaseKey = this._parentTypeName
|
|
30
|
-
? `${this._parentTypeName}.actions.${this._parentProperty}_${actionName}`
|
|
31
|
-
: `${this._model.typeName}.actions.${actionName}`;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
return this;
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
this.
|
|
182
|
-
this
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
this
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
this.
|
|
194
|
-
return this;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
this._title =
|
|
210
|
-
return this;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
this.
|
|
218
|
-
return this;
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
this.
|
|
222
|
-
this
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
this.
|
|
244
|
-
this
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
this.
|
|
258
|
-
this.
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
this
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
this.
|
|
284
|
-
this
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
}
|
|
341
|
-
|
|
342
|
-
if (!this.
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
return this;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
|
-
return this.
|
|
358
|
-
}
|
|
359
|
-
|
|
360
|
-
this.
|
|
361
|
-
return this;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
this.
|
|
365
|
-
return this;
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
this.
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
return this;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
this.
|
|
401
|
-
this
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
return this
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
this.
|
|
445
|
-
this.
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
this
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
ActionEditorAddDescriptor
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
this.
|
|
467
|
-
this.
|
|
468
|
-
this.
|
|
469
|
-
this.
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
this.
|
|
493
|
-
this.
|
|
494
|
-
this.
|
|
495
|
-
this.
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
}
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
this.
|
|
517
|
-
this.
|
|
518
|
-
this.
|
|
519
|
-
this.
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
this.
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
this.
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
return this;
|
|
562
|
-
}
|
|
563
|
-
|
|
564
|
-
this._isStyleLink
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
(
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
}
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBYSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBR2hELE9BQU8sRUFBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQXFDLE1BQU0sbUJBQW1CLENBQUM7QUFFdkcsT0FBTyxFQUFDLHNCQUFzQixFQUFFLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMxRCxPQUFPLEVBQW1CLGVBQWUsRUFBQyxNQUFNLElBQUksQ0FBQztBQUVyRCxNQUFNLE9BQU8sZ0JBQWdCO0lBNkN6QixZQUFZLEtBQWdDLEVBQUUsVUFBa0IsRUFBRSxVQUEyQixFQUFFLGNBQXVCO1FBckM1RyxVQUFLLEdBQW1CLGNBQWMsQ0FBQyxNQUFNLENBQUM7UUFDOUMsdUJBQWtCLEdBQWdDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQztRQUN0RixjQUFTLEdBQXVCLGtCQUFrQixDQUFDLFlBQVksQ0FBQztRQUNoRSxXQUFNLEdBQW9CLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFFbEQsY0FBUyxHQUFrQixJQUFJLENBQUM7UUFLaEMsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixVQUFLLEdBQThCLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDcEUsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBT3pCLHdCQUFtQixHQUFHLEtBQUssQ0FBQztRQVExQiwrQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFJcEMsNkJBQXdCLEdBQUcsSUFBSSxDQUFDO1FBS3BDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxX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Y2VzQ29udGVudCI6WyJpbXBvcnQge1R5cGV9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtQYXJhbXMsIFF1ZXJ5UGFyYW1zSGFuZGxpbmd9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7Q29uZmlybWF0aW9ufSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge09ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtBY3Rpb25FeGVjQ29udGV4dH0gZnJvbSAnLi4vY29tcG9uZW50cy9hY3Rpb24vbW9kZWxzJztcbmltcG9ydCB7RGF0YVByb3ZpZGVyLCBFZGl0b3JEYXRhUHJvdmlkZXIsIElEYXRhUHJvdmlkZXIsIElFZGl0b3JEYXRhUHJvdmlkZXJ9IGZyb20gJy4uL2RhdGEtcHJvdmlkZXJzJztcbmltcG9ydCB7Q2xhc3NUeXBlLCBJZFR5cGV9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7QWN0aW9uRGF0YVByb3ZpZGVyVXRpbCwgVHlwZVV0aWx9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7RWRpdG9yRGVzY3JpcHRvciwgTW9kZWxEZXNjcmlwdG9yfSBmcm9tICcuLyc7XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX21vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD4gfCBudWxsO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50VHlwZT86IENsYXNzVHlwZTxhbnk+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50VHlwZU5hbWU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wYXJlbnRQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX3R5cGU6IEFjdGlvblR5cGVFbnVtID0gQWN0aW9uVHlwZUVudW0uRGlyZWN0O1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGlvblRyaWdnZXI6IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PbkNsaWNrO1xuICAgIHByb3RlY3RlZCBfcG9zaXRpb246IEFjdGlvblBvc2l0aW9uRW51bSA9IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQ7XG4gICAgcHJvdGVjdGVkIF9sZXZlbDogQWN0aW9uTGV2ZWxFbnVtID0gQWN0aW9uTGV2ZWxFbnVtLkRlZmF1bHQ7XG5cbiAgICBwcm90ZWN0ZWQgX3JvdXRlVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHByb3RlY3RlZCBfdGl0bGU/OiBzdHJpbmcgfCBudWxsO1xuICAgIHByb3RlY3RlZCBfaWNvbj86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvdGVjdGVkIF90b29sdGlwPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm90ZWN0ZWQgX2NsYXNzTmFtZSA9ICcnO1xuICAgIHByb3RlY3RlZCBfc2l6ZTogQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bSA9IEFjdGlvbkRlc2NyaXB0b3IuU2l6ZUVudW0uTm9ybWFsO1xuICAgIHByb3RlY3RlZCBfaXNTdHlsZVRleHQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2lzU3R5bGVPdXRsaW5lZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfaXNTdHlsZVJhaXNlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIF9kYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgcHJvdGVjdGVkIF9ydW5GdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSURhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkIHwgbnVsbD47XG4gICAgcHJvdGVjdGVkIF9pc1Zpc2libGVGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSURhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgICBwcm90ZWN0ZWQgX2lzRW5hYmxlZEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gICAgcHJpdmF0ZSBfaGFzUnVuQ29uZmlybWF0aW9uID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfcnVuQ29uZmlybWF0aW9uSWNvbj86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25UaXRsZT86IHN0cmluZztcbiAgICBwcml2YXRlIF9ydW5Db25maXJtYXRpb25NZXNzYWdlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuPzogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+LCBjb25maXJtQ29uZmlnOiBDb25maXJtYXRpb24pID0+IENvbmZpcm1hdGlvbjtcblxuICAgIHByb3RlY3RlZCBfaGFzUnVuTm90aWZpY2F0aW9uU3VjY2VzcyA9IHRydWU7XG4gICAgcHJpdmF0ZSBfcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlPzogc3RyaW5nO1xuICAgIHByaXZhdGUgX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBfaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IgPSB0cnVlO1xuICAgIHByaXZhdGUgX3J1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGU/OiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBfcnVuTm90aWZpY2F0aW9uRXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPiB8IG51bGwsIGFjdGlvbk5hbWU6IHN0cmluZywgcGFyZW50VHlwZT86IENsYXNzVHlwZTxhbnk+LCBwYXJlbnRQcm9wZXJ0eT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLl9hY3Rpb25OYW1lID0gYWN0aW9uTmFtZTtcblxuICAgICAgICBpZiAoKHBhcmVudFR5cGUgJiYgIXBhcmVudFByb3BlcnR5KSB8fCAoIXBhcmVudFByb3BlcnR5ICYmIHBhcmVudFByb3BlcnR5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlIGJvdGggdGhlIHBhcmVudCB0eXBlIGFuZCBwYXJlbnQgcHJvcGVydHkgb3Igbm9uZTogJHtwYXJlbnRUeXBlfSwgJHtwYXJlbnRQcm9wZXJ0eX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XG4gICAgICAgIHRoaXMuX3BhcmVudFR5cGVOYW1lID0gcGFyZW50VHlwZSA/IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShwYXJlbnRUeXBlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fcGFyZW50UHJvcGVydHkgPSBwYXJlbnRQcm9wZXJ0eTtcblxuICAgICAgICBpZiAodGhpcy5fcGFyZW50VHlwZU5hbWUgfHwgdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXkgPSB0aGlzLl9wYXJlbnRUeXBlTmFtZVxuICAgICAgICAgICAgICAgID8gYCR7dGhpcy5fcGFyZW50VHlwZU5hbWV9LmFjdGlvbnMuJHt0aGlzLl9wYXJlbnRQcm9wZXJ0eX1fJHthY3Rpb25OYW1lfWBcbiAgICAgICAgICAgICAgICA6IGAke3RoaXMuX21vZGVsIS50eXBlTmFtZX0uYWN0aW9ucy4ke2FjdGlvbk5hbWV9YDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhcmVudFR5cGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyZW50VHlwZU5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRQcm9wZXJ0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFByb3BlcnR5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaTE4bk1vZGVsQWN0aW9uQmFzZUtleSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0eXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2YXRpb25UcmlnZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZhdGlvblRyaWdnZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwb3NpdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGV2ZWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sZXZlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJvdXRlVXJsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm91dGVVcmw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaWNvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ljb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB0b29sdGlwKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9vbHRpcDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGRhdGFQcm92aWRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFQcm92aWRlcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1J1bkZ1bmN0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3J1bkZ1bmN0aW9uID09PSAnZnVuY3Rpb24nO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuRnVuY3Rpb24oKTogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQgfCBudWxsPiB7XG4gICAgICAgIGlmICghdGhpcy5fcnVuRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUnVuIGZ1bmN0aW9uIGlzIG5vdCBkZWZpbmVkIGFuZCBjYW5ub3QgYmUgaW52b2tlZCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5GdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzVmlzaWJsZUZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc0VuYWJsZWRGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRW5hYmxlZEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGlvbk5hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGFzc05hbWU7XG4gICAgfVxuXG4gICAgZ2V0IGlzU3R5bGVUZXh0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTdHlsZVRleHQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzU3R5bGVPdXRsaW5lZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3R5bGVPdXRsaW5lZDtcbiAgICB9XG5cbiAgICBnZXQgaXNTdHlsZVJhaXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3R5bGVSYWlzZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzaXplKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZUV4dHJhU21hbGwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBBY3Rpb25EZXNjcmlwdG9yLlNpemVFbnVtLkV4dHJhU21hbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVTbWFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEFjdGlvbkRlc2NyaXB0b3IuU2l6ZUVudW0uU21hbGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVMYXJnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEFjdGlvbkRlc2NyaXB0b3IuU2l6ZUVudW0uTGFyZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1NpemVFeHRyYUxhcmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bS5FeHRyYUxhcmdlO1xuICAgIH1cblxuICAgIGdldCBoYXNSdW5Db25maXJtYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSdW5Db25maXJtYXRpb247XG4gICAgfVxuXG4gICAgZ2V0IHJ1bkNvbmZpcm1hdGlvbkljb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25JY29uO1xuICAgIH1cblxuICAgIGdldCBydW5Db25maXJtYXRpb25UaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvblRpdGxlO1xuICAgIH1cblxuICAgIGdldCBydW5Db25maXJtYXRpb25NZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uTWVzc2FnZTtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZTtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25SZWplY3RUaXRsZTtcbiAgICB9XG5cbiAgICBnZXQgcnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25Db25maWdNYXBGbjtcbiAgICB9XG5cbiAgICBnZXQgaGFzUnVuTm90aWZpY2F0aW9uU3VjY2VzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZTtcbiAgICB9XG5cbiAgICBnZXQgcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZTtcbiAgICB9XG5cbiAgICBnZXQgaGFzUnVuTm90aWZpY2F0aW9uRXJyb3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25FcnJvcjtcbiAgICB9XG5cbiAgICBnZXQgcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGU7XG4gICAgfVxuXG4gICAgZ2V0IHJ1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGRhdGEgcHJvdmlkZXIgaWYgbm8gbW9kZWwgdHlwZSBpcyBwcm92aWRlZCBmb3IgYWN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBuZXcgRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZCB8IG51bGw+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3J1bkZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXNWaXNpYmxlRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzVmlzaWJsZUZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSXNFbmFibGVkRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPGJvb2xlYW4+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzRW5hYmxlZEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm91dGVUcmlnZ2VyKHJvdXRlVXJsOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGlvblRyaWdnZXIgPSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZTtcbiAgICAgICAgdGhpcy5fcm91dGVVcmwgPSByb3V0ZVVybDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhMZXZlbChsZXZlbDogQWN0aW9uTGV2ZWxFbnVtKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlcyBkZWZhdWx0IHRpdGxlIGtleSB3aXRoIG1vZGVsIGFjdGlvbiBrZXkgKCR7bW9kZWwudHlwZU5hbWV9LmFjdGlvbnMuJHthY3Rpb25OYW1lfSkuIE5vdCByZWxldmFudCBpZiBwYXJlbnRUeXBlIG5hbWUgaXMgcHJvdmlkZWQuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhNb2RlbFRpdGxlKCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IGAke3RoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXl9LnRpdGxlYDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgdGl0bGUga2V5ICgke2FjdGlvbk5hbWV9LnRpdGxlKS4gSWYgbnVsbCwgbm8gdGl0bGUgd2lsbCBiZSBzaG93bi5cbiAgICAgKiBAcGFyYW0gdGl0bGUgVGl0bGUgaTE4biBrZXkgb3IgdGl0bGUuXG4gICAgICovXG4gICAgcHVibGljIHdpdGhUaXRsZSh0aXRsZTogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRpdGxlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEljb24oaWNvbjogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pY29uID0gaWNvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUb29sdGlwKHRvb2x0aXA6IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdGl0bGUgPSB0b29sdGlwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aENsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2l6ZShzaXplOiBBY3Rpb25EZXNjcmlwdG9yLlNpemVFbnVtID0gQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bS5Ob3JtYWwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc2l6ZSA9IHNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU3R5bGUoc3R5bGVUZXh0ID0gZmFsc2UsIHN0eWxlT3V0bGluZWQgPSBmYWxzZSwgc3R5bGVSYWlzZWQgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9pc1N0eWxlVGV4dCA9IHN0eWxlVGV4dDtcbiAgICAgICAgdGhpcy5faXNTdHlsZU91dGxpbmVkID0gc3R5bGVPdXRsaW5lZDtcbiAgICAgICAgdGhpcy5faXNTdHlsZVJhaXNlZCA9IHN0eWxlUmFpc2VkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFBvc2l0aW9uKHBvc2l0aW9uOiBBY3Rpb25Qb3NpdGlvbkVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBwb3NpdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgY29uZmlybWF0aW9uIGRpYWxvZ3VlIHRvIHRoZSBhY3Rpb25cbiAgICAgKiBAcGFyYW0gaWNvbiB0aGUgaWNvbiB0byBkaXNwbGF5IG9uIHRoZSBjb25maXJtYXRpb24gZGlhbG9ndWVcbiAgICAgKiBAcGFyYW0gdGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBjb25maXJtYXRpb24gZGlhbG9ndWVcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSB0aGUgbWVzc2FnZSBvbiB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ3VlXG4gICAgICogQHBhcmFtIGFjY2VwdFRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgYWNjZXB0aW5nIGJ1dHRvblxuICAgICAqIEBwYXJhbSByZWplY3RUaXRsZSB0aGUgdGl0bGUgb2YgdGhlIHJlamVjdGluZyBidXR0b25cbiAgICAgKiBAcGFyYW0gcnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4gZnVuY3Rpb24gdXNlZCB0byBnZW5lcmF0ZSB0aGUgY29uZmlybWF0aW9uIGRpYWxvZ3VlLiAqKldBUk5JTkcqKiBjaGFuZ2luZyB0aGUgKmFjY2VwdCogYW5kICpyZWplY3QqIG1ldGhvZHMgb2YgdGhlICpjb25maXJtQ29uZmlnKiBwYXJhbWV0ZXJcbiAgICAgKiBtYXkgbGVhZCB0byB1bmV4cGVjdGVkIGJlaGF2aW91clxuICAgICAqL1xuICAgIHB1YmxpYyB3aXRoUnVuQ29uZmlybWF0aW9uKFxuICAgICAgICBpY29uID0gJ3BpIHBpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJyxcbiAgICAgICAgdGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICAgIGFjY2VwdFRpdGxlPzogc3RyaW5nLFxuICAgICAgICByZWplY3RUaXRsZT86IHN0cmluZyxcbiAgICAgICAgcnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4/OiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElEYXRhUHJvdmlkZXI8VCwgYW55Pj4sIGNvbmZpcm1Db25maWc6IENvbmZpcm1hdGlvbikgPT4gQ29uZmlybWF0aW9uXG4gICAgKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc1J1bkNvbmZpcm1hdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvbkljb24gPSBpY29uO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25UaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25NZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGUgPSBhY2NlcHRUaXRsZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGUgPSByZWplY3RUaXRsZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4gPSBydW5Db25maXJtYXRpb25Db25maWdNYXBGbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5Ob3RpZmljYXRpb25TdWNjZXNzKHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBoYXNOb3RpZmljYXRpb24gPSB0cnVlKSB7XG4gICAgICAgIHRoaXMuX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MgPSBoYXNOb3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5Ob3RpZmljYXRpb25FcnJvcih0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgaGFzTm90aWZpY2F0aW9uID0gdHJ1ZSkge1xuICAgICAgICB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25FcnJvciA9IGhhc05vdGlmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb25EZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBTaXplRW51bSB7XG4gICAgICAgIEV4dHJhU21hbGwsXG4gICAgICAgIFNtYWxsLFxuICAgICAgICBOb3JtYWwsXG4gICAgICAgIExhcmdlLFxuICAgICAgICBFeHRyYUxhcmdlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uU2ltcGxlRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGFjdGlvbk5hbWU6IHN0cmluZywgbW9kZWxUeXBlPzogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbW9kZWxUeXBlID8gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpIDogbnVsbDtcbiAgICAgICAgc3VwZXIobW9kZWwsIGFjdGlvbk5hbWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9lZGl0b3JBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcbiAgICBwcm90ZWN0ZWQgX2VkaXRvclRpdGxlPzogc3RyaW5nIHwgbnVsbCA9IHVuZGVmaW5lZDtcblxuICAgIHByb3RlY3RlZCBfaGFzRmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2RpYWxvZ1NpemU6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IuRGlhbG9nU2l6ZUVudW0gPSBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLkRpYWxvZ1NpemVFbnVtLk5vcm1hbDtcbiAgICBwcm90ZWN0ZWQgX2RpYWxvZ0NsYXNzTmFtZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgIHByb3RlY3RlZCBfZmV0Y2hGdW5jdGlvbj86IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUPjtcbiAgICBwcm90ZWN0ZWQgX3N1Ym1pdEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgYW55LCBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIGFueT4+KSA9PiBPYnNlcnZhYmxlPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9lZGl0b3JDb21wb25lbnQ/OiBUeXBlPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIHBhcmVudFR5cGU/OiBDbGFzc1R5cGU8YW55PiwgcGFyZW50UHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yRGVzY3JpcHRvci5tb2RlbCwgYWN0aW9uTmFtZSwgcGFyZW50VHlwZSwgcGFyZW50UHJvcGVydHkpO1xuICAgICAgICB0aGlzLl90eXBlID0gQWN0aW9uVHlwZUVudW0uRWRpdG9yO1xuICAgICAgICB0aGlzLl9lZGl0b3JEZXNjcmlwdG9yID0gZWRpdG9yRGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fZWRpdG9yQWN0aW9ucy5wdXNoKG5ldyBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yKHRoaXMpLCBuZXcgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcih0aGlzLCBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yLlR5cGVFbnVtLkNhbmNlbCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JUaXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlhbG9nU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpYWxvZ1NpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWFsb2dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBydW5GdW5jdGlvbigpOiAoY3R4OiBBY3Rpb25FeGVjQ29udGV4dDxULCBhbnksIElEYXRhUHJvdmlkZXI8VCwgYW55Pj4pID0+IE9ic2VydmFibGU8VD4ge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1biBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCBpbiBlZGl0b3IgYWN0aW9uLiBVc2Ugc3VibWl0IGZ1bmN0aW9uIGluc3RlYWQhJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmZXRjaEZ1bmN0aW9uKCk6IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIGFueSwgSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+PikgPT4gT2JzZXJ2YWJsZTxUPiB7XG4gICAgICAgIGlmICghdGhpcy5fZmV0Y2hGdW5jdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGZXRjaCBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQgZm9yIGZ1bmN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZX0sIHVzaW5nIGRlZmF1bHQgYW5kIHJldHVybmluZyBjb250ZXh0IGl0ZW1gLCBjdHguZGF0YT8uaXRlbSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9mKGN0eC5kYXRhPy5pdGVtID8gY3R4LmRhdGEuaXRlbSA6ICh7fSBhcyBUKSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9mZXRjaEZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgc3VibWl0RnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckFjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JBY3Rpb25zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yQ29tcG9uZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yQ29tcG9uZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yVGl0bGUodGl0bGU6IHN0cmluZyB8IG51bGwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyOiBJRWRpdG9yRGF0YVByb3ZpZGVyPFQsIGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIGlmICghdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHNldCBkYXRhIHByb3ZpZGVyIGlmIG5vIG1vZGVsIHR5cGUgaXMgcHJvdmlkZWQgZm9yIGFjdGlvbiAke3RoaXMuX2FjdGlvbk5hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbC50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlhbG9nU2l6ZShzaXplID0gQWN0aW9uRWRpdG9yRGVzY3JpcHRvci5EaWFsb2dTaXplRW51bS5Ob3JtYWwpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZGlhbG9nU2l6ZSA9IHNpemU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRGlhbG9nQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ0NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSURhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKGZuIGFzIChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEZldGNoRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkV4ZWNDb250ZXh0PFQsIFMsIElFZGl0b3JEYXRhUHJvdmlkZXI8VCwgUz4+KSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ZldGNoRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTdWJtaXRGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uRXhlY0NvbnRleHQ8VCwgUywgSUVkaXRvckRhdGFQcm92aWRlcjxULCBTPj4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc3VibWl0RnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGZXRjaE5vdGlmaWNhdGlvbkVycm9yKHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBoYXNOb3RpZmljYXRpb24gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0ZldGNoTm90aWZpY2F0aW9uU3VjY2VzcyA9IGhhc05vdGlmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5fZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5fZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9lZGl0b3JBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JBY3Rpb25zKGFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9lZGl0b3JBY3Rpb25zID0gYWN0aW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JDb21wb25lbnQoZWRpdG9yQ29tcG9uZW50OiBUeXBlPGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yQ29tcG9uZW50ID0gZWRpdG9yQ29tcG9uZW50O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gRGlhbG9nU2l6ZUVudW0ge1xuICAgICAgICBFeHRyYVNtYWxsLFxuICAgICAgICBTbWFsbCxcbiAgICAgICAgTm9ybWFsLFxuICAgICAgICBMYXJnZSxcbiAgICAgICAgRXh0cmFMYXJnZVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JBY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3VibWl0VHlwZTogQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvci5UeXBlRW51bTtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiwgc3VibWl0VHlwZSA9IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IuVHlwZUVudW0uU3VibWl0KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckFjdGlvbi5tb2RlbCwgc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvci5UeXBlRW51bS5TdWJtaXQgPyAnc3VibWl0JyA6ICdjYW5jZWwnKTtcbiAgICAgICAgdGhpcy5fZWRpdG9yQWN0aW9uID0gZWRpdG9yQWN0aW9uO1xuICAgICAgICB0aGlzLl9zdWJtaXRUeXBlID0gc3VibWl0VHlwZTtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQ7XG4gICAgICAgIHRoaXMuX2lzU3R5bGVUZXh0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN1Ym1pdFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRUeXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIFN1Ym1pdCxcbiAgICAgICAgQ2FuY2VsXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRGV0YWlsc0Rlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9OQU1FID0gJ2RldGFpbHMnO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvci5BQ1RJT05fTkFNRSk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dDbGljayk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignOml0ZW1JZCcpO1xuICAgICAgICB0aGlzLndpdGhGZXRjaEZ1bmN0aW9uKGN0eCA9PlxuICAgICAgICAgICAgY3R4LmRhdGFQcm92aWRlcj8uZmV0Y2ggJiYgY3R4LmRhdGE/Lml0ZW1JZFxuICAgICAgICAgICAgICAgID8gY3R4LmRhdGFQcm92aWRlci5mZXRjaChjdHguZGF0YT8uaXRlbUlkLCBjdHguc2VydmljZUluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdGhyb3dFcnJvcihuZXcgRXJyb3IoYERhdGEgcHJvdmlkZXIgZmV0Y2ggZnVuY3Rpb24gb3IgaXRlbSBpZCAke2N0eC5kYXRhPy5pdGVtSWR9IGlzIG1pc3NpbmcuYCkpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMud2l0aEVkaXRvckFjdGlvbnMoW25ldyBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yKHRoaXMsIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IuVHlwZUVudW0uQ2FuY2VsKV0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlcnZpY2VGZXRjaEZ1bmN0aW9uKHNlcnZpY2VUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNlcnZpY2VGZXRjaEZ1bmN0aW9uPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+LCBmZXRjaEZuPzogKGlkOiBJZFR5cGUsIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBFZGl0b3JEYXRhUHJvdmlkZXIodGhpcy5fbW9kZWwhLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgaWYgKGZldGNoRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoRmV0Y2goZmV0Y2hGbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBBQ1RJT05fTkFNRSA9ICdhZGQnO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9yLkFDVElPTl9OQU1FKTtcbiAgICAgICAgdGhpcy53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlRvb2xiYXJMZWZ0KTtcbiAgICAgICAgdGhpcy53aXRoUm91dGVUcmlnZ2VyKCdhZGQnKTtcbiAgICAgICAgdGhpcy53aXRoU3VibWl0RnVuY3Rpb24oQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5DcmVhdGVPckZhaWwpO1xuICAgICAgICB0aGlzLndpdGhMZXZlbChBY3Rpb25MZXZlbEVudW0uU3VjY2Vzcyk7XG4gICAgICAgIHRoaXMud2l0aEljb24oJ3BpIHBpLXBsdXMnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTZXJ2aWNlU3VibWl0RnVuY3Rpb24oc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZVN1Ym1pdEZ1bmN0aW9uPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+LCBjcmVhdGVGbj86IChpdGVtPzogVCwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4sIGZldGNoRm4/OiAoaWQ6IElkVHlwZSwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbCEudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICBpZiAoY3JlYXRlRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoQ3JlYXRlKGNyZWF0ZUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmV0Y2hGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhGZXRjaChmZXRjaEZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiB7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBBQ1RJT05fTkFNRSA9ICdlZGl0JztcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3IuQUNUSU9OX05BTUUpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lKTtcbiAgICAgICAgdGhpcy53aXRoVGl0bGUobnVsbCk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignOml0ZW1JZC9lZGl0Jyk7XG4gICAgICAgIHRoaXMud2l0aEZldGNoRnVuY3Rpb24oQWN0aW9uRGF0YVByb3ZpZGVyVXRpbC5ydW5GZXRjaE9yRmFpbCk7XG4gICAgICAgIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuVXBkYXRlT3JGYWlsKTtcbiAgICAgICAgdGhpcy53aXRoSWNvbigncGkgcGktcGVuY2lsJyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhTZXJ2aWNlVHlwZTxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU2VydmljZVN1Ym1pdEZ1bmN0aW9uKHNlcnZpY2VUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNlcnZpY2VTdWJtaXRGdW5jdGlvbjxTPihcbiAgICAgICAgc2VydmljZVR5cGU6IFR5cGU8Uz4sXG4gICAgICAgIHVwZGF0ZUZuPzogKGlkOiBJZFR5cGUsIGl0ZW0/OiBULCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPixcbiAgICAgICAgZmV0Y2hGbj86IChpZDogSWRUeXBlLCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPlxuICAgICk6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgRWRpdG9yRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsIS50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIGlmICh1cGRhdGVGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhVcGRhdGUodXBkYXRlRm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmZXRjaEZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aEZldGNoKGZldGNoRm4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRGVsZXRlRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNUSU9OX05BTUUgPSAnZGVsZXRlJztcblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIobW9kZWwsIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3IuQUNUSU9OX05BTUUpO1xuICAgICAgICB0aGlzLndpdGhQb3NpdGlvbihBY3Rpb25Qb3NpdGlvbkVudW0uUm93SW5saW5lKTtcbiAgICAgICAgdGhpcy53aXRoVGl0bGUobnVsbCk7XG4gICAgICAgIHRoaXMud2l0aFJ1bkZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuRGVsZXRlT3JGYWlsKTtcbiAgICAgICAgdGhpcy53aXRoTGV2ZWwoQWN0aW9uTGV2ZWxFbnVtLkRhbmdlcik7XG4gICAgICAgIHRoaXMud2l0aEljb24oJ3BpIHBpLXRyYXNoJyk7XG4gICAgICAgIHRoaXMud2l0aFJ1bkNvbmZpcm1hdGlvbih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlcnZpY2VEZWxldGVGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlRGVsZXRlRnVuY3Rpb248Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4sIGRlbGV0ZUZuPzogKGlkOiBJZFR5cGUsIGl0ZW0/OiBULCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgRWRpdG9yRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsIS50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIGlmIChkZWxldGVGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhEZWxldGUoZGVsZXRlRm4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uTGlua0Rlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcml2YXRlIF91cmwgPSAnJztcbiAgICBwcml2YXRlIF9wYXRoU2VnbWVudHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBfcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gICAgcHJpdmF0ZSBfcXVlcnlQYXJhbXNIYW5kbGluZz86IFF1ZXJ5UGFyYW1zSGFuZGxpbmc7XG4gICAgcHJpdmF0ZSBfcmVwbGFjZVVybCA9IGZhbHNlO1xuICAgIHByaXZhdGUgX3RhcmdldCA9ICdfc2VsZic7XG4gICAgcHJpdmF0ZSBfaXNTdHlsZUxpbmsgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKG1vZGVsOiBNb2RlbERlc2NyaXB0b3I8VD4gfCBudWxsID0gbnVsbCwgYWN0aW9uTmFtZSA9ICdsaW5rJykge1xuICAgICAgICBzdXBlcihtb2RlbCwgYWN0aW9uTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHBhdGhTZWdtZW50cygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXRoU2VnbWVudHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBxdWVyeVBhcmFtcygpOiBQYXJhbXMgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcnlQYXJhbXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBxdWVyeVBhcmFtc0hhbmRsaW5nKCk6IFF1ZXJ5UGFyYW1zSGFuZGxpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcXVlcnlQYXJhbXNIYW5kbGluZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJlcGxhY2VVcmwoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBsYWNlVXJsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGFyZ2V0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl90YXJnZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1N0eWxlTGluaygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3R5bGVMaW5rO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSHJlZih1cmw6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl91cmwgPSB1cmw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUm91dGVyTGluayguLi5wYXRoU2VnbWVudHM6IHN0cmluZ1tdKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3BhdGhTZWdtZW50cyA9IHBhdGhTZWdtZW50cztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogUGFyYW1zLCBxdWVyeVBhcmFtc0hhbmRsaW5nPzogUXVlcnlQYXJhbXNIYW5kbGluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9xdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zO1xuICAgICAgICB0aGlzLl9xdWVyeVBhcmFtc0hhbmRsaW5nID0gcXVlcnlQYXJhbXNIYW5kbGluZztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSZXBsYWNlVXJsKHJlcGxhY2VVcmwgPSBmYWxzZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9yZXBsYWNlVXJsID0gcmVwbGFjZVVybDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhUYXJnZXQodGFyZ2V0OiAnX3NlbGYnIHwgJ19ibGFuaycgPSAnX3NlbGYnKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RhcmdldCA9IHRhcmdldDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTdHlsZUxpbmsoaXNTdHlsZUxpbms6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNTdHlsZUxpbmsgPSBpc1N0eWxlTGluaztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgZW51bSBBY3Rpb25Qb3NpdGlvbkVudW0ge1xuICAgIFRvb2xiYXJMZWZ0LFxuICAgIFRvb2xiYXJSaWdodCxcbiAgICBUYWJsZUhlYWRlcixcbiAgICBSb3dJbmxpbmUsXG4gICAgUm93Q2xpY2ssXG4gICAgRm9vdGVyTGVmdCxcbiAgICBGb290ZXJSaWdodFxufVxuXG5leHBvcnQgZW51bSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0ge1xuICAgIE9uQ2xpY2ssIC8vIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZm9yIGFjdGl2YXRpb24gb24gY2xpY2tcbiAgICBPblJvdXRlIC8vIGFjdGlvbiBpcyB0cmlnZ2VyZWQgZm9yIGFjdGl2YXRpb24gYnkgcm91dGUgdXJsXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvblR5cGVFbnVtIHtcbiAgICBEaXJlY3QsIC8vIGFjdGlvbiBpcyBkaXJlY3RseSBhY3RpdmF0ZWQgYW5kIGV4ZWN1dGVkXG4gICAgRXZlbnQsIC8vIGFjdGlvbiBpcyBleGVjdXRlZCBieSBvdXRwdXR0aW5nIGV2ZW50LCBubyBhZGRpdGlvbmFsIGFjdGl2YXRpb24gaXMgZG9uZVxuICAgIEVkaXRvciAvLyBlZGl0b3IgcHJvdmlkaW5nIG1pZGRsZSBzdGVwIGZvciBhY3RpdmF0aW9uXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvbkxldmVsRW51bSB7XG4gICAgRGVmYXVsdCxcbiAgICBQcmltYXJ5LFxuICAgIFNlY29uZGFyeSxcbiAgICBJbmZvLFxuICAgIEhlbHAsXG4gICAgU3VjY2VzcyxcbiAgICBXYXJuaW5nLFxuICAgIERhbmdlclxufVxuIl19
|
|
1
|
+
import { of } from 'rxjs';
|
|
2
|
+
import { DataProvider, EditorDataProvider } from '../data-providers';
|
|
3
|
+
import { ActionDataProviderUtil, TypeUtil } from '../utils';
|
|
4
|
+
import { ModelDescriptor } from './';
|
|
5
|
+
export class ActionDescriptor {
|
|
6
|
+
constructor(model, actionName, parentType, parentProperty) {
|
|
7
|
+
this._type = ActionTypeEnum.Direct;
|
|
8
|
+
this._activationTrigger = ActionActivationTriggerEnum.OnClick;
|
|
9
|
+
this._position = ActionPositionEnum.ToolbarRight;
|
|
10
|
+
this._level = ActionLevelEnum.Default;
|
|
11
|
+
this._routeUrl = null;
|
|
12
|
+
this._className = '';
|
|
13
|
+
this._size = ActionDescriptor.SizeEnum.Normal;
|
|
14
|
+
this._isStyleText = false;
|
|
15
|
+
this._isStyleOutlined = false;
|
|
16
|
+
this._isStyleRaised = false;
|
|
17
|
+
this._hasRunConfirmation = false;
|
|
18
|
+
this._hasRunNotificationSuccess = true;
|
|
19
|
+
this._hasRunNotificationError = true;
|
|
20
|
+
this._model = model;
|
|
21
|
+
this._actionName = actionName;
|
|
22
|
+
if ((parentType && !parentProperty) || (!parentProperty && parentProperty)) {
|
|
23
|
+
throw new Error(`Provide both the parent type and parent property or none: ${parentType}, ${parentProperty}.`);
|
|
24
|
+
}
|
|
25
|
+
this._parentType = parentType;
|
|
26
|
+
this._parentTypeName = parentType ? TypeUtil.findTypeName(parentType) : undefined;
|
|
27
|
+
this._parentProperty = parentProperty;
|
|
28
|
+
if (this._parentTypeName || this._model) {
|
|
29
|
+
this._i18nModelActionBaseKey = this._parentTypeName
|
|
30
|
+
? `${this._parentTypeName}.actions.${this._parentProperty}_${actionName}`
|
|
31
|
+
: `${this._model.typeName}.actions.${actionName}`;
|
|
32
|
+
}
|
|
33
|
+
let displayName = actionName;
|
|
34
|
+
if (this._model)
|
|
35
|
+
displayName = `${this._model.typeName}.${displayName}`;
|
|
36
|
+
if (this._parentTypeName) {
|
|
37
|
+
displayName = `${this._parentTypeName}.${this._parentProperty}_${displayName}`;
|
|
38
|
+
}
|
|
39
|
+
this._actionNameLong = displayName;
|
|
40
|
+
}
|
|
41
|
+
get model() {
|
|
42
|
+
return this._model;
|
|
43
|
+
}
|
|
44
|
+
get parentTypeName() {
|
|
45
|
+
return this._parentTypeName;
|
|
46
|
+
}
|
|
47
|
+
get parentProperty() {
|
|
48
|
+
return this._parentProperty;
|
|
49
|
+
}
|
|
50
|
+
get i18nModelActionBaseKey() {
|
|
51
|
+
return this._i18nModelActionBaseKey;
|
|
52
|
+
}
|
|
53
|
+
get type() {
|
|
54
|
+
return this._type;
|
|
55
|
+
}
|
|
56
|
+
get activationTrigger() {
|
|
57
|
+
return this._activationTrigger;
|
|
58
|
+
}
|
|
59
|
+
get position() {
|
|
60
|
+
return this._position;
|
|
61
|
+
}
|
|
62
|
+
get level() {
|
|
63
|
+
return this._level;
|
|
64
|
+
}
|
|
65
|
+
get routeUrl() {
|
|
66
|
+
return this._routeUrl;
|
|
67
|
+
}
|
|
68
|
+
get title() {
|
|
69
|
+
return this._title;
|
|
70
|
+
}
|
|
71
|
+
get icon() {
|
|
72
|
+
return this._icon;
|
|
73
|
+
}
|
|
74
|
+
get tooltip() {
|
|
75
|
+
return this._tooltip;
|
|
76
|
+
}
|
|
77
|
+
get dataProvider() {
|
|
78
|
+
return this._dataProvider;
|
|
79
|
+
}
|
|
80
|
+
get hasRunFunction() {
|
|
81
|
+
return typeof this._runFunction === 'function';
|
|
82
|
+
}
|
|
83
|
+
get runFunction() {
|
|
84
|
+
if (!this._runFunction) {
|
|
85
|
+
throw new Error('Run function is not defined and cannot be invoked');
|
|
86
|
+
}
|
|
87
|
+
return this._runFunction;
|
|
88
|
+
}
|
|
89
|
+
get isVisibleFunction() {
|
|
90
|
+
return this._isVisibleFunction;
|
|
91
|
+
}
|
|
92
|
+
get isEnabledFunction() {
|
|
93
|
+
return this._isEnabledFunction;
|
|
94
|
+
}
|
|
95
|
+
get actionName() {
|
|
96
|
+
return this._actionName;
|
|
97
|
+
}
|
|
98
|
+
get actionNameLong() {
|
|
99
|
+
return this._actionNameLong;
|
|
100
|
+
}
|
|
101
|
+
get className() {
|
|
102
|
+
return this._className;
|
|
103
|
+
}
|
|
104
|
+
get isStyleText() {
|
|
105
|
+
return this._isStyleText;
|
|
106
|
+
}
|
|
107
|
+
get isStyleOutlined() {
|
|
108
|
+
return this._isStyleOutlined;
|
|
109
|
+
}
|
|
110
|
+
get isStyleRaised() {
|
|
111
|
+
return this._isStyleRaised;
|
|
112
|
+
}
|
|
113
|
+
get size() {
|
|
114
|
+
return this._size;
|
|
115
|
+
}
|
|
116
|
+
get isSizeExtraSmall() {
|
|
117
|
+
return this._size === ActionDescriptor.SizeEnum.ExtraSmall;
|
|
118
|
+
}
|
|
119
|
+
get isSizeSmall() {
|
|
120
|
+
return this._size === ActionDescriptor.SizeEnum.Small;
|
|
121
|
+
}
|
|
122
|
+
get isSizeLarge() {
|
|
123
|
+
return this._size === ActionDescriptor.SizeEnum.Large;
|
|
124
|
+
}
|
|
125
|
+
get isSizeExtraLarge() {
|
|
126
|
+
return this._size === ActionDescriptor.SizeEnum.ExtraLarge;
|
|
127
|
+
}
|
|
128
|
+
get hasRunConfirmation() {
|
|
129
|
+
return this._hasRunConfirmation;
|
|
130
|
+
}
|
|
131
|
+
get runConfirmationIcon() {
|
|
132
|
+
return this._runConfirmationIcon;
|
|
133
|
+
}
|
|
134
|
+
get runConfirmationTitle() {
|
|
135
|
+
return this._runConfirmationTitle;
|
|
136
|
+
}
|
|
137
|
+
get runConfirmationMessage() {
|
|
138
|
+
return this._runConfirmationMessage;
|
|
139
|
+
}
|
|
140
|
+
get runConfirmationAcceptTitle() {
|
|
141
|
+
return this._runConfirmationAcceptTitle;
|
|
142
|
+
}
|
|
143
|
+
get runConfirmationRejectTitle() {
|
|
144
|
+
return this._runConfirmationRejectTitle;
|
|
145
|
+
}
|
|
146
|
+
get runConfirmationConfigMapFn() {
|
|
147
|
+
return this._runConfirmationConfigMapFn;
|
|
148
|
+
}
|
|
149
|
+
get hasRunNotificationSuccess() {
|
|
150
|
+
return this._hasRunNotificationSuccess;
|
|
151
|
+
}
|
|
152
|
+
get runNotificationSuccessTitle() {
|
|
153
|
+
return this._runNotificationSuccessTitle;
|
|
154
|
+
}
|
|
155
|
+
get runNotificationSuccessMessage() {
|
|
156
|
+
return this._runNotificationSuccessMessage;
|
|
157
|
+
}
|
|
158
|
+
get hasRunNotificationError() {
|
|
159
|
+
return this._hasRunNotificationError;
|
|
160
|
+
}
|
|
161
|
+
get runNotificationErrorTitle() {
|
|
162
|
+
return this._runNotificationErrorTitle;
|
|
163
|
+
}
|
|
164
|
+
get runNotificationErrorMessage() {
|
|
165
|
+
return this._runNotificationErrorMessage;
|
|
166
|
+
}
|
|
167
|
+
get afterRunAction() {
|
|
168
|
+
return this._afterRunAction;
|
|
169
|
+
}
|
|
170
|
+
get onRunErrorAction() {
|
|
171
|
+
return this._onRunErrorAction;
|
|
172
|
+
}
|
|
173
|
+
withDataProvider(dataProvider) {
|
|
174
|
+
this._dataProvider = dataProvider;
|
|
175
|
+
return this;
|
|
176
|
+
}
|
|
177
|
+
withServiceType(serviceType) {
|
|
178
|
+
if (!this._model) {
|
|
179
|
+
throw new Error(`Cannot set data provider if no model type is provided for action ${this._actionName}`);
|
|
180
|
+
}
|
|
181
|
+
this._dataProvider = new DataProvider(this._model.type, serviceType);
|
|
182
|
+
return this;
|
|
183
|
+
}
|
|
184
|
+
withRunFunction(fn) {
|
|
185
|
+
this._runFunction = fn;
|
|
186
|
+
return this;
|
|
187
|
+
}
|
|
188
|
+
withIsVisibleFunction(fn) {
|
|
189
|
+
this._isVisibleFunction = fn;
|
|
190
|
+
return this;
|
|
191
|
+
}
|
|
192
|
+
withIsEnabledFunction(fn) {
|
|
193
|
+
this._isEnabledFunction = fn;
|
|
194
|
+
return this;
|
|
195
|
+
}
|
|
196
|
+
withRouteTrigger(routeUrl) {
|
|
197
|
+
this._activationTrigger = ActionActivationTriggerEnum.OnRoute;
|
|
198
|
+
this._routeUrl = routeUrl;
|
|
199
|
+
return this;
|
|
200
|
+
}
|
|
201
|
+
withLevel(level) {
|
|
202
|
+
this._level = level;
|
|
203
|
+
return this;
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Overrides default title key with model action key (${model.typeName}.actions.${actionName}). Not relevant if parentType name is provided.
|
|
207
|
+
*/
|
|
208
|
+
withModelTitle() {
|
|
209
|
+
this._title = `${this._i18nModelActionBaseKey}.title`;
|
|
210
|
+
return this;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Overrides default title key (${actionName}.title). If null, no title will be shown.
|
|
214
|
+
* @param title Title i18n key or title.
|
|
215
|
+
*/
|
|
216
|
+
withTitle(title) {
|
|
217
|
+
this._title = title;
|
|
218
|
+
return this;
|
|
219
|
+
}
|
|
220
|
+
withIcon(icon) {
|
|
221
|
+
this._icon = icon;
|
|
222
|
+
return this;
|
|
223
|
+
}
|
|
224
|
+
withTooltip(tooltip) {
|
|
225
|
+
this._title = tooltip;
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
withClassName(className) {
|
|
229
|
+
this._className = className;
|
|
230
|
+
return this;
|
|
231
|
+
}
|
|
232
|
+
withSize(size = ActionDescriptor.SizeEnum.Normal) {
|
|
233
|
+
this._size = size;
|
|
234
|
+
return this;
|
|
235
|
+
}
|
|
236
|
+
withStyle(styleText = false, styleOutlined = false, styleRaised = false) {
|
|
237
|
+
this._isStyleText = styleText;
|
|
238
|
+
this._isStyleOutlined = styleOutlined;
|
|
239
|
+
this._isStyleRaised = styleRaised;
|
|
240
|
+
return this;
|
|
241
|
+
}
|
|
242
|
+
withPosition(position) {
|
|
243
|
+
this._position = position;
|
|
244
|
+
return this;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Add a confirmation dialogue to the action
|
|
248
|
+
* @param icon the icon to display on the confirmation dialogue
|
|
249
|
+
* @param title the title of the confirmation dialogue
|
|
250
|
+
* @param message the message on the confirmation dialogue
|
|
251
|
+
* @param acceptTitle the title of the accepting button
|
|
252
|
+
* @param rejectTitle the title of the rejecting button
|
|
253
|
+
* @param runConfirmationConfigMapFn function used to generate the confirmation dialogue. **WARNING** changing the *accept* and *reject* methods of the *confirmConfig* parameter
|
|
254
|
+
* may lead to unexpected behaviour
|
|
255
|
+
*/
|
|
256
|
+
withRunConfirmation(icon = 'pi pi-exclamation-triangle', title, message, acceptTitle, rejectTitle, runConfirmationConfigMapFn) {
|
|
257
|
+
this._hasRunConfirmation = true;
|
|
258
|
+
this._runConfirmationIcon = icon;
|
|
259
|
+
this._runConfirmationTitle = title;
|
|
260
|
+
this._runConfirmationMessage = message;
|
|
261
|
+
this._runConfirmationAcceptTitle = acceptTitle;
|
|
262
|
+
this._runConfirmationRejectTitle = rejectTitle;
|
|
263
|
+
this._runConfirmationConfigMapFn = runConfirmationConfigMapFn;
|
|
264
|
+
return this;
|
|
265
|
+
}
|
|
266
|
+
withRunNotificationSuccess(title, message, hasNotification = true) {
|
|
267
|
+
this._hasRunNotificationSuccess = hasNotification;
|
|
268
|
+
this._runNotificationSuccessTitle = title;
|
|
269
|
+
this._runNotificationSuccessMessage = message;
|
|
270
|
+
return this;
|
|
271
|
+
}
|
|
272
|
+
withRunNotificationError(title, message, hasNotification = true) {
|
|
273
|
+
this._hasRunNotificationError = hasNotification;
|
|
274
|
+
this._runNotificationErrorTitle = title;
|
|
275
|
+
this._runNotificationErrorMessage = message;
|
|
276
|
+
return this;
|
|
277
|
+
}
|
|
278
|
+
withAfterRunAction(action) {
|
|
279
|
+
this._afterRunAction = action;
|
|
280
|
+
return this;
|
|
281
|
+
}
|
|
282
|
+
withOnRunErrorAction(action) {
|
|
283
|
+
this._onRunErrorAction = action;
|
|
284
|
+
return this;
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
(function (ActionDescriptor) {
|
|
288
|
+
let SizeEnum;
|
|
289
|
+
(function (SizeEnum) {
|
|
290
|
+
SizeEnum[SizeEnum["ExtraSmall"] = 0] = "ExtraSmall";
|
|
291
|
+
SizeEnum[SizeEnum["Small"] = 1] = "Small";
|
|
292
|
+
SizeEnum[SizeEnum["Normal"] = 2] = "Normal";
|
|
293
|
+
SizeEnum[SizeEnum["Large"] = 3] = "Large";
|
|
294
|
+
SizeEnum[SizeEnum["ExtraLarge"] = 4] = "ExtraLarge";
|
|
295
|
+
})(SizeEnum = ActionDescriptor.SizeEnum || (ActionDescriptor.SizeEnum = {}));
|
|
296
|
+
})(ActionDescriptor || (ActionDescriptor = {}));
|
|
297
|
+
export class ActionSimpleDescriptor extends ActionDescriptor {
|
|
298
|
+
constructor(actionName, modelType, idProperty, titleProperty) {
|
|
299
|
+
const model = modelType ? new ModelDescriptor(modelType, idProperty, titleProperty) : null;
|
|
300
|
+
super(model, actionName);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
export class ActionEditorDescriptor extends ActionDescriptor {
|
|
304
|
+
constructor(editorDescriptor, actionName, parentType, parentProperty) {
|
|
305
|
+
super(editorDescriptor.model, actionName, parentType, parentProperty);
|
|
306
|
+
this._editorActions = [];
|
|
307
|
+
this._editorTitle = undefined;
|
|
308
|
+
this._hasFetchNotificationSuccess = false;
|
|
309
|
+
this._dialogSize = ActionEditorDescriptor.DialogSizeEnum.Normal;
|
|
310
|
+
this._type = ActionTypeEnum.Editor;
|
|
311
|
+
this._editorDescriptor = editorDescriptor;
|
|
312
|
+
this._editorActions.push(new ActionEditorSubmitDescriptor(this), new ActionEditorSubmitDescriptor(this, ActionEditorSubmitDescriptor.TypeEnum.Cancel));
|
|
313
|
+
}
|
|
314
|
+
get editorTitle() {
|
|
315
|
+
return this._editorTitle;
|
|
316
|
+
}
|
|
317
|
+
get editorDescriptor() {
|
|
318
|
+
return this._editorDescriptor;
|
|
319
|
+
}
|
|
320
|
+
get dialogSize() {
|
|
321
|
+
return this._dialogSize;
|
|
322
|
+
}
|
|
323
|
+
get dialogClassName() {
|
|
324
|
+
return this._dialogClassName;
|
|
325
|
+
}
|
|
326
|
+
get hasFetchNotificationSuccess() {
|
|
327
|
+
return this._hasFetchNotificationSuccess;
|
|
328
|
+
}
|
|
329
|
+
get fetchNotificationSuccessTitle() {
|
|
330
|
+
return this._fetchNotificationSuccessTitle;
|
|
331
|
+
}
|
|
332
|
+
get fetchNotificationSuccessMessage() {
|
|
333
|
+
return this._fetchNotificationSuccessMessage;
|
|
334
|
+
}
|
|
335
|
+
get dataProvider() {
|
|
336
|
+
return this._dataProvider;
|
|
337
|
+
}
|
|
338
|
+
get runFunction() {
|
|
339
|
+
throw new Error('Run function cannot be used in editor action. Use submit function instead!');
|
|
340
|
+
}
|
|
341
|
+
get fetchFunction() {
|
|
342
|
+
if (!this._fetchFunction) {
|
|
343
|
+
return ctx => {
|
|
344
|
+
console.debug(`Fetch function is not provided for function ${this._actionNameLong}, using default and returning context item`, ctx.parameters?.item);
|
|
345
|
+
return of(ctx.parameters?.item ? ctx.parameters.item : {});
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
return this._fetchFunction;
|
|
349
|
+
}
|
|
350
|
+
get submitFunction() {
|
|
351
|
+
return this._submitFunction;
|
|
352
|
+
}
|
|
353
|
+
get editorActions() {
|
|
354
|
+
return this._editorActions;
|
|
355
|
+
}
|
|
356
|
+
get editorComponent() {
|
|
357
|
+
return this._editorComponent;
|
|
358
|
+
}
|
|
359
|
+
withEditorTitle(title) {
|
|
360
|
+
this._editorTitle = title;
|
|
361
|
+
return this;
|
|
362
|
+
}
|
|
363
|
+
withDataProvider(dataProvider) {
|
|
364
|
+
this._dataProvider = dataProvider;
|
|
365
|
+
return this;
|
|
366
|
+
}
|
|
367
|
+
withServiceType(serviceType) {
|
|
368
|
+
if (!this._model) {
|
|
369
|
+
throw new Error(`Cannot set data provider if no model type is provided for action ${this._actionName}`);
|
|
370
|
+
}
|
|
371
|
+
this._dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
372
|
+
return this;
|
|
373
|
+
}
|
|
374
|
+
withDialogSize(size = ActionEditorDescriptor.DialogSizeEnum.Normal) {
|
|
375
|
+
this._dialogSize = size;
|
|
376
|
+
return this;
|
|
377
|
+
}
|
|
378
|
+
withDialogClassName(className) {
|
|
379
|
+
this._dialogClassName = className;
|
|
380
|
+
return this;
|
|
381
|
+
}
|
|
382
|
+
withRunFunction(fn) {
|
|
383
|
+
return this.withSubmitFunction(fn);
|
|
384
|
+
}
|
|
385
|
+
withFetchFunction(fn) {
|
|
386
|
+
this._fetchFunction = fn;
|
|
387
|
+
return this;
|
|
388
|
+
}
|
|
389
|
+
withSubmitFunction(fn) {
|
|
390
|
+
this._submitFunction = fn;
|
|
391
|
+
return this;
|
|
392
|
+
}
|
|
393
|
+
withFetchNotificationError(title, message, hasNotification = true) {
|
|
394
|
+
this._hasFetchNotificationSuccess = hasNotification;
|
|
395
|
+
this._fetchNotificationSuccessTitle = title;
|
|
396
|
+
this._fetchNotificationSuccessMessage = message;
|
|
397
|
+
return this;
|
|
398
|
+
}
|
|
399
|
+
withEditorAction(action) {
|
|
400
|
+
this._editorActions.push(action);
|
|
401
|
+
return this;
|
|
402
|
+
}
|
|
403
|
+
withEditorActions(actions) {
|
|
404
|
+
this._editorActions = actions;
|
|
405
|
+
return this;
|
|
406
|
+
}
|
|
407
|
+
withEditorComponent(editorComponent) {
|
|
408
|
+
this._editorComponent = editorComponent;
|
|
409
|
+
return this;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
(function (ActionEditorDescriptor) {
|
|
413
|
+
let DialogSizeEnum;
|
|
414
|
+
(function (DialogSizeEnum) {
|
|
415
|
+
DialogSizeEnum[DialogSizeEnum["ExtraSmall"] = 0] = "ExtraSmall";
|
|
416
|
+
DialogSizeEnum[DialogSizeEnum["Small"] = 1] = "Small";
|
|
417
|
+
DialogSizeEnum[DialogSizeEnum["Normal"] = 2] = "Normal";
|
|
418
|
+
DialogSizeEnum[DialogSizeEnum["Large"] = 3] = "Large";
|
|
419
|
+
DialogSizeEnum[DialogSizeEnum["ExtraLarge"] = 4] = "ExtraLarge";
|
|
420
|
+
})(DialogSizeEnum = ActionEditorDescriptor.DialogSizeEnum || (ActionEditorDescriptor.DialogSizeEnum = {}));
|
|
421
|
+
})(ActionEditorDescriptor || (ActionEditorDescriptor = {}));
|
|
422
|
+
export class ActionEditorSubmitDescriptor extends ActionDescriptor {
|
|
423
|
+
constructor(editorAction, submitType = ActionEditorSubmitDescriptor.TypeEnum.Submit) {
|
|
424
|
+
super(editorAction.model, submitType === ActionEditorSubmitDescriptor.TypeEnum.Submit ? 'submit' : 'cancel');
|
|
425
|
+
this._editorAction = editorAction;
|
|
426
|
+
this._submitType = submitType;
|
|
427
|
+
this._position = ActionPositionEnum.FooterRight;
|
|
428
|
+
this._isStyleText = true;
|
|
429
|
+
}
|
|
430
|
+
get submitType() {
|
|
431
|
+
return this._submitType;
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
(function (ActionEditorSubmitDescriptor) {
|
|
435
|
+
let TypeEnum;
|
|
436
|
+
(function (TypeEnum) {
|
|
437
|
+
TypeEnum[TypeEnum["Submit"] = 0] = "Submit";
|
|
438
|
+
TypeEnum[TypeEnum["Cancel"] = 1] = "Cancel";
|
|
439
|
+
})(TypeEnum = ActionEditorSubmitDescriptor.TypeEnum || (ActionEditorSubmitDescriptor.TypeEnum = {}));
|
|
440
|
+
})(ActionEditorSubmitDescriptor || (ActionEditorSubmitDescriptor = {}));
|
|
441
|
+
export class ActionEditorDetailsDescriptor extends ActionEditorDescriptor {
|
|
442
|
+
constructor(editorDescriptor) {
|
|
443
|
+
super(editorDescriptor, ActionEditorDetailsDescriptor.ACTION_NAME);
|
|
444
|
+
this.withPosition(ActionPositionEnum.RowClick);
|
|
445
|
+
this.withRouteTrigger(':itemId');
|
|
446
|
+
this.withFetchFunction(ActionDataProviderUtil.runFetchOrFail);
|
|
447
|
+
this.withEditorActions([new ActionEditorSubmitDescriptor(this, ActionEditorSubmitDescriptor.TypeEnum.Cancel)]);
|
|
448
|
+
}
|
|
449
|
+
withServiceType(serviceType) {
|
|
450
|
+
return this.withServiceFetchFunction(serviceType);
|
|
451
|
+
}
|
|
452
|
+
withServiceFetchFunction(serviceType, fetchFn) {
|
|
453
|
+
const dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
454
|
+
if (fetchFn) {
|
|
455
|
+
dataProvider.withFetch(fetchFn);
|
|
456
|
+
}
|
|
457
|
+
this._dataProvider = dataProvider;
|
|
458
|
+
return this;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
ActionEditorDetailsDescriptor.ACTION_NAME = 'details';
|
|
462
|
+
export class ActionEditorAddDescriptor extends ActionEditorDescriptor {
|
|
463
|
+
constructor(editorDescriptor) {
|
|
464
|
+
super(editorDescriptor, ActionEditorAddDescriptor.ACTION_NAME);
|
|
465
|
+
this.withPosition(ActionPositionEnum.ToolbarLeft);
|
|
466
|
+
this.withRouteTrigger('add');
|
|
467
|
+
this.withSubmitFunction(ActionDataProviderUtil.runCreateOrFail);
|
|
468
|
+
this.withLevel(ActionLevelEnum.Success);
|
|
469
|
+
this.withIcon('pi pi-plus');
|
|
470
|
+
}
|
|
471
|
+
withServiceType(serviceType) {
|
|
472
|
+
return this.withServiceSubmitFunction(serviceType);
|
|
473
|
+
}
|
|
474
|
+
withServiceSubmitFunction(serviceType, createFn, fetchFn) {
|
|
475
|
+
const dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
476
|
+
if (createFn) {
|
|
477
|
+
dataProvider.withCreate(createFn);
|
|
478
|
+
}
|
|
479
|
+
if (fetchFn) {
|
|
480
|
+
dataProvider.withFetch(fetchFn);
|
|
481
|
+
}
|
|
482
|
+
this._dataProvider = dataProvider;
|
|
483
|
+
return this;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
ActionEditorAddDescriptor.ACTION_NAME = 'add';
|
|
487
|
+
export class ActionEditorEditDescriptor extends ActionEditorDescriptor {
|
|
488
|
+
constructor(editorDescriptor) {
|
|
489
|
+
super(editorDescriptor, ActionEditorEditDescriptor.ACTION_NAME);
|
|
490
|
+
this.withPosition(ActionPositionEnum.RowInline);
|
|
491
|
+
this.withTitle(null);
|
|
492
|
+
this.withRouteTrigger(':itemId/edit');
|
|
493
|
+
this.withFetchFunction(ActionDataProviderUtil.runFetchOrFail);
|
|
494
|
+
this.withSubmitFunction(ActionDataProviderUtil.runUpdateOrFail);
|
|
495
|
+
this.withIcon('pi pi-pencil');
|
|
496
|
+
}
|
|
497
|
+
withServiceType(serviceType) {
|
|
498
|
+
return this.withServiceSubmitFunction(serviceType);
|
|
499
|
+
}
|
|
500
|
+
withServiceSubmitFunction(serviceType, updateFn, fetchFn) {
|
|
501
|
+
const dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
502
|
+
if (updateFn) {
|
|
503
|
+
dataProvider.withUpdate(updateFn);
|
|
504
|
+
}
|
|
505
|
+
if (fetchFn) {
|
|
506
|
+
dataProvider.withFetch(fetchFn);
|
|
507
|
+
}
|
|
508
|
+
this._dataProvider = dataProvider;
|
|
509
|
+
return this;
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
ActionEditorEditDescriptor.ACTION_NAME = 'edit';
|
|
513
|
+
export class ActionDeleteDescriptor extends ActionDescriptor {
|
|
514
|
+
constructor(model) {
|
|
515
|
+
super(model, ActionDeleteDescriptor.ACTION_NAME);
|
|
516
|
+
this.withPosition(ActionPositionEnum.RowInline);
|
|
517
|
+
this.withTitle(null);
|
|
518
|
+
this.withRunFunction(ActionDataProviderUtil.runDeleteOrFail);
|
|
519
|
+
this.withLevel(ActionLevelEnum.Danger);
|
|
520
|
+
this.withIcon('pi pi-trash');
|
|
521
|
+
this.withRunConfirmation(undefined);
|
|
522
|
+
}
|
|
523
|
+
withServiceType(serviceType) {
|
|
524
|
+
return this.withServiceDeleteFunction(serviceType);
|
|
525
|
+
}
|
|
526
|
+
withServiceDeleteFunction(serviceType, deleteFn) {
|
|
527
|
+
const dataProvider = new EditorDataProvider(this._model.type, serviceType);
|
|
528
|
+
if (deleteFn) {
|
|
529
|
+
dataProvider.withDelete(deleteFn);
|
|
530
|
+
}
|
|
531
|
+
this._dataProvider = dataProvider;
|
|
532
|
+
return this;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
ActionDeleteDescriptor.ACTION_NAME = 'delete';
|
|
536
|
+
export class ActionLinkDescriptor extends ActionDescriptor {
|
|
537
|
+
constructor(model = null, actionName = 'link') {
|
|
538
|
+
super(model, actionName);
|
|
539
|
+
this._url = '';
|
|
540
|
+
this._pathSegments = [];
|
|
541
|
+
this._replaceUrl = false;
|
|
542
|
+
this._target = '_self';
|
|
543
|
+
this._isStyleLink = false;
|
|
544
|
+
}
|
|
545
|
+
get url() {
|
|
546
|
+
return this._url;
|
|
547
|
+
}
|
|
548
|
+
get pathSegments() {
|
|
549
|
+
return this._pathSegments;
|
|
550
|
+
}
|
|
551
|
+
get queryParams() {
|
|
552
|
+
return this._queryParams;
|
|
553
|
+
}
|
|
554
|
+
get queryParamsHandling() {
|
|
555
|
+
return this._queryParamsHandling;
|
|
556
|
+
}
|
|
557
|
+
get replaceUrl() {
|
|
558
|
+
return this._replaceUrl;
|
|
559
|
+
}
|
|
560
|
+
get target() {
|
|
561
|
+
return this._target;
|
|
562
|
+
}
|
|
563
|
+
get isStyleLink() {
|
|
564
|
+
return this._isStyleLink;
|
|
565
|
+
}
|
|
566
|
+
withHref(url) {
|
|
567
|
+
this._url = url;
|
|
568
|
+
return this;
|
|
569
|
+
}
|
|
570
|
+
withRouterLink(...pathSegments) {
|
|
571
|
+
this._pathSegments = pathSegments;
|
|
572
|
+
return this;
|
|
573
|
+
}
|
|
574
|
+
withQueryParams(queryParams, queryParamsHandling) {
|
|
575
|
+
this._queryParams = queryParams;
|
|
576
|
+
this._queryParamsHandling = queryParamsHandling;
|
|
577
|
+
return this;
|
|
578
|
+
}
|
|
579
|
+
withReplaceUrl(replaceUrl = false) {
|
|
580
|
+
this._replaceUrl = replaceUrl;
|
|
581
|
+
return this;
|
|
582
|
+
}
|
|
583
|
+
withTarget(target = '_self') {
|
|
584
|
+
this._target = target;
|
|
585
|
+
return this;
|
|
586
|
+
}
|
|
587
|
+
withStyleLink(isStyleLink) {
|
|
588
|
+
this._isStyleLink = isStyleLink;
|
|
589
|
+
return this;
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
export var ActionPositionEnum;
|
|
593
|
+
(function (ActionPositionEnum) {
|
|
594
|
+
ActionPositionEnum[ActionPositionEnum["ToolbarLeft"] = 0] = "ToolbarLeft";
|
|
595
|
+
ActionPositionEnum[ActionPositionEnum["ToolbarRight"] = 1] = "ToolbarRight";
|
|
596
|
+
ActionPositionEnum[ActionPositionEnum["TableHeader"] = 2] = "TableHeader";
|
|
597
|
+
ActionPositionEnum[ActionPositionEnum["RowInline"] = 3] = "RowInline";
|
|
598
|
+
ActionPositionEnum[ActionPositionEnum["RowClick"] = 4] = "RowClick";
|
|
599
|
+
ActionPositionEnum[ActionPositionEnum["FooterLeft"] = 5] = "FooterLeft";
|
|
600
|
+
ActionPositionEnum[ActionPositionEnum["FooterRight"] = 6] = "FooterRight";
|
|
601
|
+
})(ActionPositionEnum || (ActionPositionEnum = {}));
|
|
602
|
+
export var ActionActivationTriggerEnum;
|
|
603
|
+
(function (ActionActivationTriggerEnum) {
|
|
604
|
+
ActionActivationTriggerEnum[ActionActivationTriggerEnum["OnClick"] = 0] = "OnClick";
|
|
605
|
+
ActionActivationTriggerEnum[ActionActivationTriggerEnum["OnRoute"] = 1] = "OnRoute"; // action is triggered for activation by route url
|
|
606
|
+
})(ActionActivationTriggerEnum || (ActionActivationTriggerEnum = {}));
|
|
607
|
+
export var ActionTypeEnum;
|
|
608
|
+
(function (ActionTypeEnum) {
|
|
609
|
+
ActionTypeEnum[ActionTypeEnum["Direct"] = 0] = "Direct";
|
|
610
|
+
ActionTypeEnum[ActionTypeEnum["Editor"] = 1] = "Editor"; // editor providing middle step for activation
|
|
611
|
+
})(ActionTypeEnum || (ActionTypeEnum = {}));
|
|
612
|
+
export var ActionLevelEnum;
|
|
613
|
+
(function (ActionLevelEnum) {
|
|
614
|
+
ActionLevelEnum[ActionLevelEnum["Default"] = 0] = "Default";
|
|
615
|
+
ActionLevelEnum[ActionLevelEnum["Primary"] = 1] = "Primary";
|
|
616
|
+
ActionLevelEnum[ActionLevelEnum["Secondary"] = 2] = "Secondary";
|
|
617
|
+
ActionLevelEnum[ActionLevelEnum["Info"] = 3] = "Info";
|
|
618
|
+
ActionLevelEnum[ActionLevelEnum["Help"] = 4] = "Help";
|
|
619
|
+
ActionLevelEnum[ActionLevelEnum["Success"] = 5] = "Success";
|
|
620
|
+
ActionLevelEnum[ActionLevelEnum["Warning"] = 6] = "Warning";
|
|
621
|
+
ActionLevelEnum[ActionLevelEnum["Danger"] = 7] = "Danger";
|
|
622
|
+
})(ActionLevelEnum || (ActionLevelEnum = {}));
|
|
623
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmRlc2NyaXB0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2Rlc2NyaXB0b3JzL2FjdGlvbi5kZXNjcmlwdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBYSxFQUFFLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFDLFlBQVksRUFBRSxrQkFBa0IsRUFBcUMsTUFBTSxtQkFBbUIsQ0FBQztBQUV2RyxPQUFPLEVBQUMsc0JBQXNCLEVBQUUsUUFBUSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQzFELE9BQU8sRUFBbUIsZUFBZSxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBRXJELE1BQU0sT0FBTyxnQkFBZ0I7SUFpRHpCLFlBQVksS0FBZ0MsRUFBRSxVQUFrQixFQUFFLFVBQTJCLEVBQUUsY0FBdUI7UUF4QzVHLFVBQUssR0FBbUIsY0FBYyxDQUFDLE1BQU0sQ0FBQztRQUM5Qyx1QkFBa0IsR0FBZ0MsMkJBQTJCLENBQUMsT0FBTyxDQUFDO1FBQ3RGLGNBQVMsR0FBdUIsa0JBQWtCLENBQUMsWUFBWSxDQUFDO1FBQ2hFLFdBQU0sR0FBb0IsZUFBZSxDQUFDLE9BQU8sQ0FBQztRQUVsRCxjQUFTLEdBQWtCLElBQUksQ0FBQztRQUtoQyxlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLFVBQUssR0FBOEIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNwRSxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFPdkIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBUTVCLCtCQUEwQixHQUFHLElBQUksQ0FBQztRQUlsQyw2QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFRdEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxV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O0lBQ1AsbUZBQU8sQ0FBQSxDQUFDLGtEQUFrRDtBQUM5RCxDQUFDLEVBSFcsMkJBQTJCLEtBQTNCLDJCQUEyQixRQUd0QztBQUVELE1BQU0sQ0FBTixJQUFZLGNBR1g7QUFIRCxXQUFZLGNBQWM7SUFDdEIsdURBQU0sQ0FBQTtJQUNOLHVEQUFNLENBQUEsQ0FBQyw4Q0FBOEM7QUFDekQsQ0FBQyxFQUhXLGNBQWMsS0FBZCxjQUFjLFFBR3pCO0FBRUQsTUFBTSxDQUFOLElBQVksZUFTWDtBQVRELFdBQVksZUFBZTtJQUN2QiwyREFBTyxDQUFBO0lBQ1AsMkRBQU8sQ0FBQTtJQUNQLCtEQUFTLENBQUE7SUFDVCxxREFBSSxDQUFBO0lBQ0oscURBQUksQ0FBQTtJQUNKLDJEQUFPLENBQUE7SUFDUCwyREFBTyxDQUFBO0lBQ1AseURBQU0sQ0FBQTtBQUNWLENBQUMsRUFUVyxlQUFlLEtBQWYsZUFBZSxRQVMxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BhcmFtcywgUXVlcnlQYXJhbXNIYW5kbGluZ30gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtDb25maXJtYXRpb259IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgb2Z9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0FjdGlvbkNvbnRleHQsIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9ufSBmcm9tICcuLi9jb21wb25lbnRzL2FjdGlvbi9tb2RlbHMnO1xuaW1wb3J0IHtEYXRhUHJvdmlkZXIsIEVkaXRvckRhdGFQcm92aWRlciwgSURhdGFQcm92aWRlciwgSUVkaXRvckRhdGFQcm92aWRlcn0gZnJvbSAnLi4vZGF0YS1wcm92aWRlcnMnO1xuaW1wb3J0IHtDbGFzc1R5cGUsIElkVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLCBUeXBlVXRpbH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHtFZGl0b3JEZXNjcmlwdG9yLCBNb2RlbERlc2NyaXB0b3J9IGZyb20gJy4vJztcblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfbW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPiB8IG51bGw7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hY3Rpb25OYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9hY3Rpb25OYW1lTG9uZzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50VHlwZT86IENsYXNzVHlwZTxhbnk+O1xuICAgIHByb3RlY3RlZCByZWFkb25seSBfcGFyZW50VHlwZU5hbWU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IF9wYXJlbnRQcm9wZXJ0eT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXk/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX3R5cGU6IEFjdGlvblR5cGVFbnVtID0gQWN0aW9uVHlwZUVudW0uRGlyZWN0O1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGlvblRyaWdnZXI6IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PbkNsaWNrO1xuICAgIHByb3RlY3RlZCBfcG9zaXRpb246IEFjdGlvblBvc2l0aW9uRW51bSA9IEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyUmlnaHQ7XG4gICAgcHJvdGVjdGVkIF9sZXZlbDogQWN0aW9uTGV2ZWxFbnVtID0gQWN0aW9uTGV2ZWxFbnVtLkRlZmF1bHQ7XG5cbiAgICBwcm90ZWN0ZWQgX3JvdXRlVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgIHByb3RlY3RlZCBfdGl0bGU/OiBzdHJpbmcgfCBudWxsO1xuICAgIHByb3RlY3RlZCBfaWNvbj86IHN0cmluZyB8IG51bGw7XG4gICAgcHJvdGVjdGVkIF90b29sdGlwPzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm90ZWN0ZWQgX2NsYXNzTmFtZSA9ICcnO1xuICAgIHByb3RlY3RlZCBfc2l6ZTogQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bSA9IEFjdGlvbkRlc2NyaXB0b3IuU2l6ZUVudW0uTm9ybWFsO1xuICAgIHByb3RlY3RlZCBfaXNTdHlsZVRleHQgPSBmYWxzZTtcbiAgICBwcm90ZWN0ZWQgX2lzU3R5bGVPdXRsaW5lZCA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfaXNTdHlsZVJhaXNlZCA9IGZhbHNlO1xuXG4gICAgcHJvdGVjdGVkIF9kYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPFQsIGFueT47XG4gICAgcHJvdGVjdGVkIF9ydW5GdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkIHwgbnVsbD47XG4gICAgcHJvdGVjdGVkIF9pc1Zpc2libGVGdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPFQsIGFueT4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gICAgcHJvdGVjdGVkIF9pc0VuYWJsZWRGdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPFQsIGFueT4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICBwcm90ZWN0ZWQgX2hhc1J1bkNvbmZpcm1hdGlvbiA9IGZhbHNlO1xuICAgIHByb3RlY3RlZCBfcnVuQ29uZmlybWF0aW9uSWNvbj86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3J1bkNvbmZpcm1hdGlvblRpdGxlPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcnVuQ29uZmlybWF0aW9uTWVzc2FnZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX3J1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcnVuQ29uZmlybWF0aW9uUmVqZWN0VGl0bGU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9ydW5Db25maXJtYXRpb25Db25maWdNYXBGbj86IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PiwgY29uZmlybUNvbmZpZzogQ29uZmlybWF0aW9uKSA9PiBDb25maXJtYXRpb247XG5cbiAgICBwcm90ZWN0ZWQgX2hhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MgPSB0cnVlO1xuICAgIHByb3RlY3RlZCBfcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlPzogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBfcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2hhc1J1bk5vdGlmaWNhdGlvbkVycm9yID0gdHJ1ZTtcbiAgICBwcm90ZWN0ZWQgX3J1bk5vdGlmaWNhdGlvbkVycm9yVGl0bGU/OiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIF9ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2FmdGVyUnVuQWN0aW9uPzogQWN0aW9uRGVzY3JpcHRvcjx1bmtub3duPjtcbiAgICBwcm90ZWN0ZWQgX29uUnVuRXJyb3JBY3Rpb24/OiBBY3Rpb25EZXNjcmlwdG9yPHVua25vd24+O1xuXG4gICAgY29uc3RydWN0b3IobW9kZWw6IE1vZGVsRGVzY3JpcHRvcjxUPiB8IG51bGwsIGFjdGlvbk5hbWU6IHN0cmluZywgcGFyZW50VHlwZT86IENsYXNzVHlwZTxhbnk+LCBwYXJlbnRQcm9wZXJ0eT86IHN0cmluZykge1xuICAgICAgICB0aGlzLl9tb2RlbCA9IG1vZGVsO1xuICAgICAgICB0aGlzLl9hY3Rpb25OYW1lID0gYWN0aW9uTmFtZTtcblxuICAgICAgICBpZiAoKHBhcmVudFR5cGUgJiYgIXBhcmVudFByb3BlcnR5KSB8fCAoIXBhcmVudFByb3BlcnR5ICYmIHBhcmVudFByb3BlcnR5KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlIGJvdGggdGhlIHBhcmVudCB0eXBlIGFuZCBwYXJlbnQgcHJvcGVydHkgb3Igbm9uZTogJHtwYXJlbnRUeXBlfSwgJHtwYXJlbnRQcm9wZXJ0eX0uYCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcGFyZW50VHlwZSA9IHBhcmVudFR5cGU7XG4gICAgICAgIHRoaXMuX3BhcmVudFR5cGVOYW1lID0gcGFyZW50VHlwZSA/IFR5cGVVdGlsLmZpbmRUeXBlTmFtZShwYXJlbnRUeXBlKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5fcGFyZW50UHJvcGVydHkgPSBwYXJlbnRQcm9wZXJ0eTtcblxuICAgICAgICBpZiAodGhpcy5fcGFyZW50VHlwZU5hbWUgfHwgdGhpcy5fbW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuX2kxOG5Nb2RlbEFjdGlvbkJhc2VLZXkgPSB0aGlzLl9wYXJlbnRUeXBlTmFtZVxuICAgICAgICAgICAgICAgID8gYCR7dGhpcy5fcGFyZW50VHlwZU5hbWV9LmFjdGlvbnMuJHt0aGlzLl9wYXJlbnRQcm9wZXJ0eX1fJHthY3Rpb25OYW1lfWBcbiAgICAgICAgICAgICAgICA6IGAke3RoaXMuX21vZGVsIS50eXBlTmFtZX0uYWN0aW9ucy4ke2FjdGlvbk5hbWV9YDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGlzcGxheU5hbWUgPSBhY3Rpb25OYW1lO1xuICAgICAgICBpZiAodGhpcy5fbW9kZWwpIGRpc3BsYXlOYW1lID0gYCR7dGhpcy5fbW9kZWwudHlwZU5hbWV9LiR7ZGlzcGxheU5hbWV9YDtcbiAgICAgICAgaWYgKHRoaXMuX3BhcmVudFR5cGVOYW1lKSB7XG4gICAgICAgICAgICBkaXNwbGF5TmFtZSA9IGAke3RoaXMuX3BhcmVudFR5cGVOYW1lfS4ke3RoaXMuX3BhcmVudFByb3BlcnR5fV8ke2Rpc3BsYXlOYW1lfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fYWN0aW9uTmFtZUxvbmcgPSBkaXNwbGF5TmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXJlbnRUeXBlTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcmVudFR5cGVOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcGFyZW50UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJlbnRQcm9wZXJ0eTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGkxOG5Nb2RlbEFjdGlvbkJhc2VLZXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pMThuTW9kZWxBY3Rpb25CYXNlS2V5O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmF0aW9uVHJpZ2dlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2YXRpb25UcmlnZ2VyO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcG9zaXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wb3NpdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGxldmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGV2ZWw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByb3V0ZVVybCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JvdXRlVXJsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGljb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pY29uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdG9vbHRpcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Rvb2x0aXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNSdW5GdW5jdGlvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9ydW5GdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bkZ1bmN0aW9uKCk6IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkIHwgbnVsbD4ge1xuICAgICAgICBpZiAoIXRoaXMuX3J1bkZ1bmN0aW9uKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1J1biBmdW5jdGlvbiBpcyBub3QgZGVmaW5lZCBhbmQgY2Fubm90IGJlIGludm9rZWQnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcnVuRnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBpc1Zpc2libGVGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmlzaWJsZUZ1bmN0aW9uO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNFbmFibGVkRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0VuYWJsZWRGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGlvbk5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25OYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgYWN0aW9uTmFtZUxvbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3Rpb25OYW1lTG9uZztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGNsYXNzTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsYXNzTmFtZTtcbiAgICB9XG5cbiAgICBnZXQgaXNTdHlsZVRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1N0eWxlVGV4dDtcbiAgICB9XG5cbiAgICBnZXQgaXNTdHlsZU91dGxpbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTdHlsZU91dGxpbmVkO1xuICAgIH1cblxuICAgIGdldCBpc1N0eWxlUmFpc2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNTdHlsZVJhaXNlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHNpemUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTaXplRXh0cmFTbWFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IEFjdGlvbkRlc2NyaXB0b3IuU2l6ZUVudW0uRXh0cmFTbWFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZVNtYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bS5TbWFsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZUxhcmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2l6ZSA9PT0gQWN0aW9uRGVzY3JpcHRvci5TaXplRW51bS5MYXJnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGlzU2l6ZUV4dHJhTGFyZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaXplID09PSBBY3Rpb25EZXNjcmlwdG9yLlNpemVFbnVtLkV4dHJhTGFyZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNSdW5Db25maXJtYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSdW5Db25maXJtYXRpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBydW5Db25maXJtYXRpb25JY29uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uSWNvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bkNvbmZpcm1hdGlvblRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uVGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBydW5Db25maXJtYXRpb25NZXNzYWdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bkNvbmZpcm1hdGlvbkFjY2VwdFRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuQ29uZmlybWF0aW9uQWNjZXB0VGl0bGU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBydW5Db25maXJtYXRpb25SZWplY3RUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bkNvbmZpcm1hdGlvblJlamVjdFRpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Db25maXJtYXRpb25Db25maWdNYXBGbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25TdWNjZXNzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9ydW5Ob3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzUnVuTm90aWZpY2F0aW9uRXJyb3I7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBydW5Ob3RpZmljYXRpb25FcnJvclRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHJ1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bk5vdGlmaWNhdGlvbkVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGFmdGVyUnVuQWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWZ0ZXJSdW5BY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBvblJ1bkVycm9yQWN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fb25SdW5FcnJvckFjdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERhdGFQcm92aWRlcihkYXRhUHJvdmlkZXI6IElEYXRhUHJvdmlkZXI8VCwgYW55Pik6IHRoaXMge1xuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgaWYgKCF0aGlzLl9tb2RlbCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgc2V0IGRhdGEgcHJvdmlkZXIgaWYgbm8gbW9kZWwgdHlwZSBpcyBwcm92aWRlZCBmb3IgYWN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBuZXcgRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5GdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dDxULCBTPikgPT4gT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkIHwgbnVsbD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcnVuRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc1Zpc2libGVGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dFZhbGlkYXRpb248VCwgUz4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNWaXNpYmxlRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhJc0VuYWJsZWRGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dFZhbGlkYXRpb248VCwgUz4pID0+IE9ic2VydmFibGU8Ym9vbGVhbj4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faXNFbmFibGVkRnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSb3V0ZVRyaWdnZXIocm91dGVVcmw6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9hY3RpdmF0aW9uVHJpZ2dlciA9IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlO1xuICAgICAgICB0aGlzLl9yb3V0ZVVybCA9IHJvdXRlVXJsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aExldmVsKGxldmVsOiBBY3Rpb25MZXZlbEVudW0pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fbGV2ZWwgPSBsZXZlbDtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIGRlZmF1bHQgdGl0bGUga2V5IHdpdGggbW9kZWwgYWN0aW9uIGtleSAoJHttb2RlbC50eXBlTmFtZX0uYWN0aW9ucy4ke2FjdGlvbk5hbWV9KS4gTm90IHJlbGV2YW50IGlmIHBhcmVudFR5cGUgbmFtZSBpcyBwcm92aWRlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aE1vZGVsVGl0bGUoKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gYCR7dGhpcy5faTE4bk1vZGVsQWN0aW9uQmFzZUtleX0udGl0bGVgO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZXMgZGVmYXVsdCB0aXRsZSBrZXkgKCR7YWN0aW9uTmFtZX0udGl0bGUpLiBJZiBudWxsLCBubyB0aXRsZSB3aWxsIGJlIHNob3duLlxuICAgICAqIEBwYXJhbSB0aXRsZSBUaXRsZSBpMThuIGtleSBvciB0aXRsZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgd2l0aFRpdGxlKHRpdGxlOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX3RpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoSWNvbihpY29uOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2ljb24gPSBpY29uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFRvb2x0aXAodG9vbHRpcDogc3RyaW5nIHwgbnVsbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl90aXRsZSA9IHRvb2x0aXA7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoQ2xhc3NOYW1lKGNsYXNzTmFtZTogc3RyaW5nKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2NsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTaXplKHNpemU6IEFjdGlvbkRlc2NyaXB0b3IuU2l6ZUVudW0gPSBBY3Rpb25EZXNjcmlwdG9yLlNpemVFbnVtLk5vcm1hbCk6IHRoaXMge1xuICAgICAgICB0aGlzLl9zaXplID0gc2l6ZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTdHlsZShzdHlsZVRleHQgPSBmYWxzZSwgc3R5bGVPdXRsaW5lZCA9IGZhbHNlLCBzdHlsZVJhaXNlZCA9IGZhbHNlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzU3R5bGVUZXh0ID0gc3R5bGVUZXh0O1xuICAgICAgICB0aGlzLl9pc1N0eWxlT3V0bGluZWQgPSBzdHlsZU91dGxpbmVkO1xuICAgICAgICB0aGlzLl9pc1N0eWxlUmFpc2VkID0gc3R5bGVSYWlzZWQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUG9zaXRpb24ocG9zaXRpb246IEFjdGlvblBvc2l0aW9uRW51bSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wb3NpdGlvbiA9IHBvc2l0aW9uO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGQgYSBjb25maXJtYXRpb24gZGlhbG9ndWUgdG8gdGhlIGFjdGlvblxuICAgICAqIEBwYXJhbSBpY29uIHRoZSBpY29uIHRvIGRpc3BsYXkgb24gdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2d1ZVxuICAgICAqIEBwYXJhbSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2d1ZVxuICAgICAqIEBwYXJhbSBtZXNzYWdlIHRoZSBtZXNzYWdlIG9uIHRoZSBjb25maXJtYXRpb24gZGlhbG9ndWVcbiAgICAgKiBAcGFyYW0gYWNjZXB0VGl0bGUgdGhlIHRpdGxlIG9mIHRoZSBhY2NlcHRpbmcgYnV0dG9uXG4gICAgICogQHBhcmFtIHJlamVjdFRpdGxlIHRoZSB0aXRsZSBvZiB0aGUgcmVqZWN0aW5nIGJ1dHRvblxuICAgICAqIEBwYXJhbSBydW5Db25maXJtYXRpb25Db25maWdNYXBGbiBmdW5jdGlvbiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBjb25maXJtYXRpb24gZGlhbG9ndWUuICoqV0FSTklORyoqIGNoYW5naW5nIHRoZSAqYWNjZXB0KiBhbmQgKnJlamVjdCogbWV0aG9kcyBvZiB0aGUgKmNvbmZpcm1Db25maWcqIHBhcmFtZXRlclxuICAgICAqIG1heSBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3VyXG4gICAgICovXG4gICAgcHVibGljIHdpdGhSdW5Db25maXJtYXRpb24oXG4gICAgICAgIGljb24gPSAncGkgcGktZXhjbGFtYXRpb24tdHJpYW5nbGUnLFxuICAgICAgICB0aXRsZT86IHN0cmluZyxcbiAgICAgICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICAgICAgYWNjZXB0VGl0bGU/OiBzdHJpbmcsXG4gICAgICAgIHJlamVjdFRpdGxlPzogc3RyaW5nLFxuICAgICAgICBydW5Db25maXJtYXRpb25Db25maWdNYXBGbj86IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PiwgY29uZmlybUNvbmZpZzogQ29uZmlybWF0aW9uKSA9PiBDb25maXJtYXRpb25cbiAgICApOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzUnVuQ29uZmlybWF0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fcnVuQ29uZmlybWF0aW9uSWNvbiA9IGljb247XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvblRpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX3J1bkNvbmZpcm1hdGlvbk1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25BY2NlcHRUaXRsZSA9IGFjY2VwdFRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25SZWplY3RUaXRsZSA9IHJlamVjdFRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Db25maXJtYXRpb25Db25maWdNYXBGbiA9IHJ1bkNvbmZpcm1hdGlvbkNvbmZpZ01hcEZuO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJ1bk5vdGlmaWNhdGlvblN1Y2Nlc3ModGl0bGU/OiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIGhhc05vdGlmaWNhdGlvbiA9IHRydWUpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5faGFzUnVuTm90aWZpY2F0aW9uU3VjY2VzcyA9IGhhc05vdGlmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5fcnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlID0gdGl0bGU7XG4gICAgICAgIHRoaXMuX3J1bk5vdGlmaWNhdGlvblN1Y2Nlc3NNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhSdW5Ob3RpZmljYXRpb25FcnJvcih0aXRsZT86IHN0cmluZywgbWVzc2FnZT86IHN0cmluZywgaGFzTm90aWZpY2F0aW9uID0gdHJ1ZSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9oYXNSdW5Ob3RpZmljYXRpb25FcnJvciA9IGhhc05vdGlmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5fcnVuTm90aWZpY2F0aW9uRXJyb3JUaXRsZSA9IHRpdGxlO1xuICAgICAgICB0aGlzLl9ydW5Ob3RpZmljYXRpb25FcnJvck1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEFmdGVyUnVuQWN0aW9uPFJUPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3I8UlQ+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2FmdGVyUnVuQWN0aW9uID0gYWN0aW9uIGFzIEFjdGlvbkRlc2NyaXB0b3I8dW5rbm93bj47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoT25SdW5FcnJvckFjdGlvbjxSVD4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9yPFJUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9vblJ1bkVycm9yQWN0aW9uID0gYWN0aW9uIGFzIEFjdGlvbkRlc2NyaXB0b3I8dW5rbm93bj47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb25EZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBTaXplRW51bSB7XG4gICAgICAgIEV4dHJhU21hbGwsXG4gICAgICAgIFNtYWxsLFxuICAgICAgICBOb3JtYWwsXG4gICAgICAgIExhcmdlLFxuICAgICAgICBFeHRyYUxhcmdlXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uU2ltcGxlRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkRlc2NyaXB0b3I8VD4ge1xuICAgIGNvbnN0cnVjdG9yKGFjdGlvbk5hbWU6IHN0cmluZywgbW9kZWxUeXBlPzogQ2xhc3NUeXBlPFQ+LCBpZFByb3BlcnR5Pzogc3RyaW5nLCB0aXRsZVByb3BlcnR5Pzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gbW9kZWxUeXBlID8gbmV3IE1vZGVsRGVzY3JpcHRvcjxUPihtb2RlbFR5cGUsIGlkUHJvcGVydHksIHRpdGxlUHJvcGVydHkpIDogbnVsbDtcbiAgICAgICAgc3VwZXIobW9kZWwsIGFjdGlvbk5hbWUpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9lZGl0b3JBY3Rpb25zOiBBY3Rpb25EZXNjcmlwdG9yPFQ+W10gPSBbXTtcbiAgICBwcm90ZWN0ZWQgX2VkaXRvclRpdGxlPzogc3RyaW5nIHwgbnVsbCA9IHVuZGVmaW5lZDtcblxuICAgIHByb3RlY3RlZCBfaGFzRmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzID0gZmFsc2U7XG4gICAgcHJvdGVjdGVkIF9mZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZT86IHN0cmluZztcbiAgICBwcm90ZWN0ZWQgX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmc7XG5cbiAgICBwcm90ZWN0ZWQgX2RpYWxvZ1NpemU6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IuRGlhbG9nU2l6ZUVudW0gPSBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yLkRpYWxvZ1NpemVFbnVtLk5vcm1hbDtcbiAgICBwcm90ZWN0ZWQgX2RpYWxvZ0NsYXNzTmFtZT86IHN0cmluZztcblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBfZGF0YVByb3ZpZGVyPzogSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+O1xuICAgIHByb3RlY3RlZCBfZmV0Y2hGdW5jdGlvbj86IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgYW55PikgPT4gT2JzZXJ2YWJsZTxUPjtcbiAgICBwcm90ZWN0ZWQgX3N1Ym1pdEZ1bmN0aW9uPzogKGN0eDogQWN0aW9uQ29udGV4dDxULCBhbnk+KSA9PiBPYnNlcnZhYmxlPFQ+O1xuXG4gICAgcHJvdGVjdGVkIF9lZGl0b3JDb21wb25lbnQ/OiBUeXBlPGFueT47XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+LCBhY3Rpb25OYW1lOiBzdHJpbmcsIHBhcmVudFR5cGU/OiBDbGFzc1R5cGU8YW55PiwgcGFyZW50UHJvcGVydHk/OiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yRGVzY3JpcHRvci5tb2RlbCwgYWN0aW9uTmFtZSwgcGFyZW50VHlwZSwgcGFyZW50UHJvcGVydHkpO1xuICAgICAgICB0aGlzLl90eXBlID0gQWN0aW9uVHlwZUVudW0uRWRpdG9yO1xuICAgICAgICB0aGlzLl9lZGl0b3JEZXNjcmlwdG9yID0gZWRpdG9yRGVzY3JpcHRvcjtcbiAgICAgICAgdGhpcy5fZWRpdG9yQWN0aW9ucy5wdXNoKG5ldyBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yKHRoaXMpLCBuZXcgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcih0aGlzLCBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yLlR5cGVFbnVtLkNhbmNlbCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZWRpdG9yVGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JUaXRsZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckRlc2NyaXB0b3IoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGl0b3JEZXNjcmlwdG9yO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZGlhbG9nU2l6ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RpYWxvZ1NpemU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBkaWFsb2dDbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaWFsb2dDbGFzc05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBoYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3NUaXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2U7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBkYXRhUHJvdmlkZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhUHJvdmlkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIGdldCBydW5GdW5jdGlvbigpOiAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIHVua25vd24+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSdW4gZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgaW4gZWRpdG9yIGFjdGlvbi4gVXNlIHN1Ym1pdCBmdW5jdGlvbiBpbnN0ZWFkIScpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZmV0Y2hGdW5jdGlvbigpOiAoY3R4OiBBY3Rpb25Db250ZXh0PFQsIHVua25vd24+KSA9PiBPYnNlcnZhYmxlPFQ+IHtcbiAgICAgICAgaWYgKCF0aGlzLl9mZXRjaEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gY3R4ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKGBGZXRjaCBmdW5jdGlvbiBpcyBub3QgcHJvdmlkZWQgZm9yIGZ1bmN0aW9uICR7dGhpcy5fYWN0aW9uTmFtZUxvbmd9LCB1c2luZyBkZWZhdWx0IGFuZCByZXR1cm5pbmcgY29udGV4dCBpdGVtYCwgY3R4LnBhcmFtZXRlcnM/Lml0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycz8uaXRlbSA/IGN0eC5wYXJhbWV0ZXJzLml0ZW0gOiAoe30gYXMgVCkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZmV0Y2hGdW5jdGlvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN1Ym1pdEZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3VibWl0RnVuY3Rpb247XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBlZGl0b3JBY3Rpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZWRpdG9yQWN0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGVkaXRvckNvbXBvbmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkaXRvckNvbXBvbmVudDtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEVkaXRvclRpdGxlKHRpdGxlOiBzdHJpbmcgfCBudWxsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2VkaXRvclRpdGxlID0gdGl0bGU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlcjogSUVkaXRvckRhdGFQcm92aWRlcjxULCBhbnk+KTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhTZXJ2aWNlVHlwZTxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICBpZiAoIXRoaXMuX21vZGVsKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBzZXQgZGF0YSBwcm92aWRlciBpZiBubyBtb2RlbCB0eXBlIGlzIHByb3ZpZGVkIGZvciBhY3Rpb24gJHt0aGlzLl9hY3Rpb25OYW1lfWApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IG5ldyBFZGl0b3JEYXRhUHJvdmlkZXIodGhpcy5fbW9kZWwudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpYWxvZ1NpemUoc2l6ZSA9IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IuRGlhbG9nU2l6ZUVudW0uTm9ybWFsKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2RpYWxvZ1NpemUgPSBzaXplO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aERpYWxvZ0NsYXNzTmFtZShjbGFzc05hbWU6IHN0cmluZyk6IHRoaXMge1xuICAgICAgICB0aGlzLl9kaWFsb2dDbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoUnVuRnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKGZuIGFzIChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pID0+IE9ic2VydmFibGU8VD4pO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRmV0Y2hGdW5jdGlvbjxTPihmbjogKGN0eDogQWN0aW9uQ29udGV4dDxULCBTPikgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9mZXRjaEZ1bmN0aW9uID0gZm47XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU3VibWl0RnVuY3Rpb248Uz4oZm46IChjdHg6IEFjdGlvbkNvbnRleHQ8VCwgUz4pID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fc3VibWl0RnVuY3Rpb24gPSBmbjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhGZXRjaE5vdGlmaWNhdGlvbkVycm9yKHRpdGxlPzogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBoYXNOb3RpZmljYXRpb24gPSB0cnVlKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2hhc0ZldGNoTm90aWZpY2F0aW9uU3VjY2VzcyA9IGhhc05vdGlmaWNhdGlvbjtcbiAgICAgICAgdGhpcy5fZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGUgPSB0aXRsZTtcbiAgICAgICAgdGhpcy5fZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoRWRpdG9yQWN0aW9uKGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvcjxUPik6IHRoaXMge1xuICAgICAgICB0aGlzLl9lZGl0b3JBY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JBY3Rpb25zKGFjdGlvbnM6IEFjdGlvbkRlc2NyaXB0b3I8VD5bXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9lZGl0b3JBY3Rpb25zID0gYWN0aW9ucztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhFZGl0b3JDb21wb25lbnQoZWRpdG9yQ29tcG9uZW50OiBUeXBlPGFueT4pOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fZWRpdG9yQ29tcG9uZW50ID0gZWRpdG9yQ29tcG9uZW50O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciB7XG4gICAgZXhwb3J0IGVudW0gRGlhbG9nU2l6ZUVudW0ge1xuICAgICAgICBFeHRyYVNtYWxsLFxuICAgICAgICBTbWFsbCxcbiAgICAgICAgTm9ybWFsLFxuICAgICAgICBMYXJnZSxcbiAgICAgICAgRXh0cmFMYXJnZVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9lZGl0b3JBY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD47XG4gICAgcHJpdmF0ZSByZWFkb25seSBfc3VibWl0VHlwZTogQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvci5UeXBlRW51bTtcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckFjdGlvbjogQWN0aW9uRWRpdG9yRGVzY3JpcHRvcjxUPiwgc3VibWl0VHlwZSA9IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3IuVHlwZUVudW0uU3VibWl0KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckFjdGlvbi5tb2RlbCwgc3VibWl0VHlwZSA9PT0gQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvci5UeXBlRW51bS5TdWJtaXQgPyAnc3VibWl0JyA6ICdjYW5jZWwnKTtcbiAgICAgICAgdGhpcy5fZWRpdG9yQWN0aW9uID0gZWRpdG9yQWN0aW9uO1xuICAgICAgICB0aGlzLl9zdWJtaXRUeXBlID0gc3VibWl0VHlwZTtcbiAgICAgICAgdGhpcy5fcG9zaXRpb24gPSBBY3Rpb25Qb3NpdGlvbkVudW0uRm9vdGVyUmlnaHQ7XG4gICAgICAgIHRoaXMuX2lzU3R5bGVUZXh0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHN1Ym1pdFR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJtaXRUeXBlO1xuICAgIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yIHtcbiAgICBleHBvcnQgZW51bSBUeXBlRW51bSB7XG4gICAgICAgIFN1Ym1pdCxcbiAgICAgICAgQ2FuY2VsXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yRGV0YWlsc0Rlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9OQU1FID0gJ2RldGFpbHMnO1xuXG4gICAgY29uc3RydWN0b3IoZWRpdG9yRGVzY3JpcHRvcjogRWRpdG9yRGVzY3JpcHRvcjxUPikge1xuICAgICAgICBzdXBlcihlZGl0b3JEZXNjcmlwdG9yLCBBY3Rpb25FZGl0b3JEZXRhaWxzRGVzY3JpcHRvci5BQ1RJT05fTkFNRSk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Sb3dDbGljayk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignOml0ZW1JZCcpO1xuICAgICAgICB0aGlzLndpdGhGZXRjaEZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuRmV0Y2hPckZhaWwpO1xuICAgICAgICB0aGlzLndpdGhFZGl0b3JBY3Rpb25zKFtuZXcgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcih0aGlzLCBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yLlR5cGVFbnVtLkNhbmNlbCldKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTZXJ2aWNlRmV0Y2hGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlRmV0Y2hGdW5jdGlvbjxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPiwgZmV0Y2hGbj86IChpZDogSWRUeXBlLCBzZXJ2aWNlPzogUykgPT4gT2JzZXJ2YWJsZTxUPik6IHRoaXMge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSBuZXcgRWRpdG9yRGF0YVByb3ZpZGVyKHRoaXMuX21vZGVsIS50eXBlLCBzZXJ2aWNlVHlwZSk7XG4gICAgICAgIGlmIChmZXRjaEZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aEZldGNoKGZldGNoRm4pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2RhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNUSU9OX05BTUUgPSAnYWRkJztcblxuICAgIGNvbnN0cnVjdG9yKGVkaXRvckRlc2NyaXB0b3I6IEVkaXRvckRlc2NyaXB0b3I8VD4pIHtcbiAgICAgICAgc3VwZXIoZWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvci5BQ1RJT05fTkFNRSk7XG4gICAgICAgIHRoaXMud2l0aFBvc2l0aW9uKEFjdGlvblBvc2l0aW9uRW51bS5Ub29sYmFyTGVmdCk7XG4gICAgICAgIHRoaXMud2l0aFJvdXRlVHJpZ2dlcignYWRkJyk7XG4gICAgICAgIHRoaXMud2l0aFN1Ym1pdEZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuQ3JlYXRlT3JGYWlsKTtcbiAgICAgICAgdGhpcy53aXRoTGV2ZWwoQWN0aW9uTGV2ZWxFbnVtLlN1Y2Nlc3MpO1xuICAgICAgICB0aGlzLndpdGhJY29uKCdwaSBwaS1wbHVzJyk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHdpdGhTZXJ2aWNlVHlwZTxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPik6IHRoaXMge1xuICAgICAgICByZXR1cm4gdGhpcy53aXRoU2VydmljZVN1Ym1pdEZ1bmN0aW9uKHNlcnZpY2VUeXBlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFNlcnZpY2VTdWJtaXRGdW5jdGlvbjxTPihzZXJ2aWNlVHlwZTogVHlwZTxTPiwgY3JlYXRlRm4/OiAoaXRlbT86IFQsIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFQ+LCBmZXRjaEZuPzogKGlkOiBJZFR5cGUsIHNlcnZpY2U/OiBTKSA9PiBPYnNlcnZhYmxlPFQ+KTogdGhpcyB7XG4gICAgICAgIGNvbnN0IGRhdGFQcm92aWRlciA9IG5ldyBFZGl0b3JEYXRhUHJvdmlkZXIodGhpcy5fbW9kZWwhLnR5cGUsIHNlcnZpY2VUeXBlKTtcbiAgICAgICAgaWYgKGNyZWF0ZUZuKSB7XG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIud2l0aENyZWF0ZShjcmVhdGVGbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZldGNoRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoRmV0Y2goZmV0Y2hGbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvcjxUPiBleHRlbmRzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3I8VD4ge1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQUNUSU9OX05BTUUgPSAnZWRpdCc7XG5cbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JEZXNjcmlwdG9yOiBFZGl0b3JEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvckRlc2NyaXB0b3IsIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9yLkFDVElPTl9OQU1FKTtcbiAgICAgICAgdGhpcy53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZSk7XG4gICAgICAgIHRoaXMud2l0aFRpdGxlKG51bGwpO1xuICAgICAgICB0aGlzLndpdGhSb3V0ZVRyaWdnZXIoJzppdGVtSWQvZWRpdCcpO1xuICAgICAgICB0aGlzLndpdGhGZXRjaEZ1bmN0aW9uKEFjdGlvbkRhdGFQcm92aWRlclV0aWwucnVuRmV0Y2hPckZhaWwpO1xuICAgICAgICB0aGlzLndpdGhTdWJtaXRGdW5jdGlvbihBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1blVwZGF0ZU9yRmFpbCk7XG4gICAgICAgIHRoaXMud2l0aEljb24oJ3BpIHBpLXBlbmNpbCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSB3aXRoU2VydmljZVR5cGU8Uz4oc2VydmljZVR5cGU6IFR5cGU8Uz4pOiB0aGlzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2l0aFNlcnZpY2VTdWJtaXRGdW5jdGlvbihzZXJ2aWNlVHlwZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdpdGhTZXJ2aWNlU3VibWl0RnVuY3Rpb248Uz4oXG4gICAgICAgIHNlcnZpY2VUeXBlOiBUeXBlPFM+LFxuICAgICAgICB1cGRhdGVGbj86IChpZDogSWRUeXBlLCBpdGVtPzogVCwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4sXG4gICAgICAgIGZldGNoRm4/OiAoaWQ6IElkVHlwZSwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD5cbiAgICApOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbCEudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICBpZiAodXBkYXRlRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoVXBkYXRlKHVwZGF0ZUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmV0Y2hGbikge1xuICAgICAgICAgICAgZGF0YVByb3ZpZGVyLndpdGhGZXRjaChmZXRjaEZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3I8VD4gZXh0ZW5kcyBBY3Rpb25EZXNjcmlwdG9yPFQ+IHtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFDVElPTl9OQU1FID0gJ2RlbGV0ZSc7XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+KSB7XG4gICAgICAgIHN1cGVyKG1vZGVsLCBBY3Rpb25EZWxldGVEZXNjcmlwdG9yLkFDVElPTl9OQU1FKTtcbiAgICAgICAgdGhpcy53aXRoUG9zaXRpb24oQWN0aW9uUG9zaXRpb25FbnVtLlJvd0lubGluZSk7XG4gICAgICAgIHRoaXMud2l0aFRpdGxlKG51bGwpO1xuICAgICAgICB0aGlzLndpdGhSdW5GdW5jdGlvbihBY3Rpb25EYXRhUHJvdmlkZXJVdGlsLnJ1bkRlbGV0ZU9yRmFpbCk7XG4gICAgICAgIHRoaXMud2l0aExldmVsKEFjdGlvbkxldmVsRW51bS5EYW5nZXIpO1xuICAgICAgICB0aGlzLndpdGhJY29uKCdwaSBwaS10cmFzaCcpO1xuICAgICAgICB0aGlzLndpdGhSdW5Db25maXJtYXRpb24odW5kZWZpbmVkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgd2l0aFNlcnZpY2VUeXBlPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+KTogdGhpcyB7XG4gICAgICAgIHJldHVybiB0aGlzLndpdGhTZXJ2aWNlRGVsZXRlRnVuY3Rpb24oc2VydmljZVR5cGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU2VydmljZURlbGV0ZUZ1bmN0aW9uPFM+KHNlcnZpY2VUeXBlOiBUeXBlPFM+LCBkZWxldGVGbj86IChpZDogSWRUeXBlLCBpdGVtPzogVCwgc2VydmljZT86IFMpID0+IE9ic2VydmFibGU8VD4pOiB0aGlzIHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gbmV3IEVkaXRvckRhdGFQcm92aWRlcih0aGlzLl9tb2RlbCEudHlwZSwgc2VydmljZVR5cGUpO1xuICAgICAgICBpZiAoZGVsZXRlRm4pIHtcbiAgICAgICAgICAgIGRhdGFQcm92aWRlci53aXRoRGVsZXRlKGRlbGV0ZUZuKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEFjdGlvbkxpbmtEZXNjcmlwdG9yPFQ+IGV4dGVuZHMgQWN0aW9uRGVzY3JpcHRvcjxUPiB7XG4gICAgcHJpdmF0ZSBfdXJsID0gJyc7XG4gICAgcHJpdmF0ZSBfcGF0aFNlZ21lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgX3F1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIHByaXZhdGUgX3F1ZXJ5UGFyYW1zSGFuZGxpbmc/OiBRdWVyeVBhcmFtc0hhbmRsaW5nO1xuICAgIHByaXZhdGUgX3JlcGxhY2VVcmwgPSBmYWxzZTtcbiAgICBwcml2YXRlIF90YXJnZXQgPSAnX3NlbGYnO1xuICAgIHByaXZhdGUgX2lzU3R5bGVMaW5rID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogTW9kZWxEZXNjcmlwdG9yPFQ+IHwgbnVsbCA9IG51bGwsIGFjdGlvbk5hbWUgPSAnbGluaycpIHtcbiAgICAgICAgc3VwZXIobW9kZWwsIGFjdGlvbk5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl91cmw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwYXRoU2VnbWVudHMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGF0aFNlZ21lbnRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcXVlcnlQYXJhbXMoKTogUGFyYW1zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1zO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcXVlcnlQYXJhbXNIYW5kbGluZygpOiBRdWVyeVBhcmFtc0hhbmRsaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1zSGFuZGxpbmc7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCByZXBsYWNlVXJsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVwbGFjZVVybDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRhcmdldCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFyZ2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaXNTdHlsZUxpbmsoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1N0eWxlTGluaztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aEhyZWYodXJsOiBzdHJpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fdXJsID0gdXJsO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBwdWJsaWMgd2l0aFJvdXRlckxpbmsoLi4ucGF0aFNlZ21lbnRzOiBzdHJpbmdbXSk6IHRoaXMge1xuICAgICAgICB0aGlzLl9wYXRoU2VnbWVudHMgPSBwYXRoU2VnbWVudHM7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IFBhcmFtcywgcXVlcnlQYXJhbXNIYW5kbGluZz86IFF1ZXJ5UGFyYW1zSGFuZGxpbmcpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcXVlcnlQYXJhbXMgPSBxdWVyeVBhcmFtcztcbiAgICAgICAgdGhpcy5fcXVlcnlQYXJhbXNIYW5kbGluZyA9IHF1ZXJ5UGFyYW1zSGFuZGxpbmc7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoUmVwbGFjZVVybChyZXBsYWNlVXJsID0gZmFsc2UpOiB0aGlzIHtcbiAgICAgICAgdGhpcy5fcmVwbGFjZVVybCA9IHJlcGxhY2VVcmw7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoVGFyZ2V0KHRhcmdldDogJ19zZWxmJyB8ICdfYmxhbmsnID0gJ19zZWxmJyk6IHRoaXMge1xuICAgICAgICB0aGlzLl90YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHB1YmxpYyB3aXRoU3R5bGVMaW5rKGlzU3R5bGVMaW5rOiBib29sZWFuKTogdGhpcyB7XG4gICAgICAgIHRoaXMuX2lzU3R5bGVMaW5rID0gaXNTdHlsZUxpbms7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uUG9zaXRpb25FbnVtIHtcbiAgICBUb29sYmFyTGVmdCxcbiAgICBUb29sYmFyUmlnaHQsXG4gICAgVGFibGVIZWFkZXIsXG4gICAgUm93SW5saW5lLFxuICAgIFJvd0NsaWNrLFxuICAgIEZvb3RlckxlZnQsXG4gICAgRm9vdGVyUmlnaHRcbn1cblxuZXhwb3J0IGVudW0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtIHtcbiAgICBPbkNsaWNrLCAvLyBhY3Rpb24gaXMgdHJpZ2dlcmVkIGZvciBhY3RpdmF0aW9uIG9uIGNsaWNrXG4gICAgT25Sb3V0ZSAvLyBhY3Rpb24gaXMgdHJpZ2dlcmVkIGZvciBhY3RpdmF0aW9uIGJ5IHJvdXRlIHVybFxufVxuXG5leHBvcnQgZW51bSBBY3Rpb25UeXBlRW51bSB7XG4gICAgRGlyZWN0LCAvLyBhY3Rpb24gaXMgZGlyZWN0bHkgYWN0aXZhdGVkIGFuZCBleGVjdXRlZFxuICAgIEVkaXRvciAvLyBlZGl0b3IgcHJvdmlkaW5nIG1pZGRsZSBzdGVwIGZvciBhY3RpdmF0aW9uXG59XG5cbmV4cG9ydCBlbnVtIEFjdGlvbkxldmVsRW51bSB7XG4gICAgRGVmYXVsdCxcbiAgICBQcmltYXJ5LFxuICAgIFNlY29uZGFyeSxcbiAgICBJbmZvLFxuICAgIEhlbHAsXG4gICAgU3VjY2VzcyxcbiAgICBXYXJuaW5nLFxuICAgIERhbmdlclxufVxuIl19
|