@sapui5/sap.fe.templates 1.138.0 → 1.139.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/manifest.json +1 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +92 -61
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +12 -3
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +13 -2
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +36 -8
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +25 -11
- package/src/sap/fe/templates/ListReport/designtime/ListReport.designtime.js +3 -1
- package/src/sap/fe/templates/ListReport/designtime/ListReport.designtime.ts +2 -0
- package/src/sap/fe/templates/ListReport/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/Component.js +14 -22
- package/src/sap/fe/templates/ObjectPage/Component.ts +5 -9
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +3 -4
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +7 -53
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +6 -55
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +21 -17
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +19 -14
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.js +16 -6
- package/src/sap/fe/templates/ObjectPage/components/CollaborationDraft.tsx +15 -5
- package/src/sap/fe/templates/ObjectPage/components/DraftToggle.js +30 -15
- package/src/sap/fe/templates/ObjectPage/components/DraftToggle.tsx +14 -4
- package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.js +3 -1
- package/src/sap/fe/templates/ObjectPage/designtime/ObjectPage.designtime.ts +2 -0
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Actions.fragment.xml +25 -6
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +7 -2
- package/src/sap/fe/templates/library.js +1 -1
- package/src/sap/fe/templates/messagebundle.properties +5 -6
- package/src/sap/fe/templates/messagebundle_ar.properties +2 -2
- package/src/sap/fe/templates/messagebundle_bg.properties +2 -2
- package/src/sap/fe/templates/messagebundle_ca.properties +1 -1
- package/src/sap/fe/templates/messagebundle_cnr.properties +2 -2
- package/src/sap/fe/templates/messagebundle_cs.properties +1 -1
- package/src/sap/fe/templates/messagebundle_da.properties +2 -2
- package/src/sap/fe/templates/messagebundle_de.properties +2 -2
- package/src/sap/fe/templates/messagebundle_en.properties +2 -2
- package/src/sap/fe/templates/messagebundle_en_GB.properties +2 -2
- package/src/sap/fe/templates/messagebundle_en_US_saprigi.properties +2 -4
- package/src/sap/fe/templates/messagebundle_es.properties +1 -1
- package/src/sap/fe/templates/messagebundle_es_MX.properties +1 -1
- package/src/sap/fe/templates/messagebundle_et.properties +1 -1
- package/src/sap/fe/templates/messagebundle_fi.properties +2 -2
- package/src/sap/fe/templates/messagebundle_fr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_fr_CA.properties +3 -3
- package/src/sap/fe/templates/messagebundle_hi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_hr.properties +2 -2
- package/src/sap/fe/templates/messagebundle_hu.properties +2 -2
- package/src/sap/fe/templates/messagebundle_id.properties +1 -1
- package/src/sap/fe/templates/messagebundle_it.properties +2 -2
- package/src/sap/fe/templates/messagebundle_ja.properties +1 -1
- package/src/sap/fe/templates/messagebundle_kk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ko.properties +1 -1
- package/src/sap/fe/templates/messagebundle_lt.properties +1 -1
- package/src/sap/fe/templates/messagebundle_lv.properties +2 -2
- package/src/sap/fe/templates/messagebundle_mk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_no.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pl.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pt.properties +1 -1
- package/src/sap/fe/templates/messagebundle_pt_PT.properties +1 -1
- package/src/sap/fe/templates/messagebundle_ro.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sh.properties +2 -2
- package/src/sap/fe/templates/messagebundle_sk.properties +2 -2
- package/src/sap/fe/templates/messagebundle_sl.properties +1 -1
- package/src/sap/fe/templates/messagebundle_sr.properties +2 -2
- package/src/sap/fe/templates/messagebundle_sv.properties +1 -1
- package/src/sap/fe/templates/messagebundle_th.properties +2 -2
- package/src/sap/fe/templates/messagebundle_tr.properties +1 -1
- package/src/sap/fe/templates/messagebundle_uk.properties +1 -1
- package/src/sap/fe/templates/messagebundle_vi.properties +1 -1
- package/src/sap/fe/templates/messagebundle_zh_CN.properties +1 -1
- package/src/sap/fe/templates/messagebundle_zh_TW.properties +1 -1
|
@@ -31,10 +31,11 @@ import { getInvolvedDataModelObjects } from "sap/fe/core/converters/MetaModelCon
|
|
|
31
31
|
import type { PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
|
|
32
32
|
import type { BaseAction, CustomAction } from "sap/fe/core/converters/controls/Common/Action";
|
|
33
33
|
import type { AnnotationFormElement } from "sap/fe/core/converters/controls/Common/Form";
|
|
34
|
-
import type { FieldGroupFacet } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
|
|
34
|
+
import type { FieldGroupFacet, HeaderFormData } from "sap/fe/core/converters/controls/ObjectPage/HeaderFacet";
|
|
35
35
|
import type { DataVisualizationSubSection } from "sap/fe/core/converters/controls/ObjectPage/SubSection";
|
|
36
36
|
import { Draft, UI } from "sap/fe/core/helpers/BindingHelper";
|
|
37
37
|
import ModelHelper from "sap/fe/core/helpers/ModelHelper";
|
|
38
|
+
import * as StableIdHelper from "sap/fe/core/helpers/StableIdHelper";
|
|
38
39
|
import { getTitleBindingExpression } from "sap/fe/core/helpers/TitleHelper";
|
|
39
40
|
import type { ViewData } from "sap/fe/core/services/TemplatedViewServiceFactory";
|
|
40
41
|
import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
|
|
@@ -569,25 +570,14 @@ export const createBindingForAlternateAndSecondaryKeys = function (dataModelObje
|
|
|
569
570
|
};
|
|
570
571
|
|
|
571
572
|
/**
|
|
572
|
-
* Method to check whether a FieldGroup consists of only 1 DataField with MultiLine
|
|
573
|
+
* Method to check whether a FieldGroup consists of only 1 DataField with MultiLine text annotation.
|
|
573
574
|
* @param aFormElements A collection of form elements used in the current field group
|
|
574
|
-
* @returns Returns true if only 1 data field with Multiline
|
|
575
|
+
* @returns Returns true if only 1 data field with Multiline text annotation exists.
|
|
575
576
|
*/
|
|
576
577
|
export const doesFieldGroupContainOnlyOneMultiLineDataField = function (aFormElements: AnnotationFormElement[]): boolean {
|
|
577
578
|
return aFormElements && aFormElements.length === 1 && !!aFormElements[0].isValueMultilineText;
|
|
578
579
|
};
|
|
579
580
|
|
|
580
|
-
/*
|
|
581
|
-
* Get visiblity of breadcrumbs.
|
|
582
|
-
*
|
|
583
|
-
* @function
|
|
584
|
-
* @param {Object} [oViewData] ViewData model
|
|
585
|
-
* returns {*} Expression or Boolean value
|
|
586
|
-
*/
|
|
587
|
-
export const getVisibleExpressionForBreadcrumbs = function (oViewData: ViewData): string | boolean | undefined {
|
|
588
|
-
return oViewData.showBreadCrumbs && oViewData.fclEnabled !== undefined ? "{fclhelper>/breadCrumbIsVisible}" : oViewData.showBreadCrumbs;
|
|
589
|
-
};
|
|
590
|
-
|
|
591
581
|
/**
|
|
592
582
|
*
|
|
593
583
|
* @param viewData Specifies the ViewData model
|
|
@@ -955,4 +945,19 @@ export function getHeaderLevel(subSection: DataVisualizationSubSection, isMoreCo
|
|
|
955
945
|
}
|
|
956
946
|
}
|
|
957
947
|
|
|
948
|
+
/**
|
|
949
|
+
* Gets the aria-labelledby attribute for the header formelement.
|
|
950
|
+
* @param headerFormData
|
|
951
|
+
* @param formElementIdPrefix
|
|
952
|
+
* @returns The string for the aria-labelledby attribute
|
|
953
|
+
*/
|
|
954
|
+
export const getHeaderFormAriaLabelledBy = function (headerFormData: HeaderFormData, formElementIdPrefix: string): string {
|
|
955
|
+
let titleId = "";
|
|
956
|
+
if (headerFormData.label) {
|
|
957
|
+
titleId = StableIdHelper.generate([headerFormData.id, "Title"]);
|
|
958
|
+
}
|
|
959
|
+
const labelId = StableIdHelper.generate([formElementIdPrefix, "Label"]);
|
|
960
|
+
return titleId ? `${titleId},${labelId}` : labelId;
|
|
961
|
+
};
|
|
962
|
+
|
|
958
963
|
getFooterVisibilityExpression.requiresIContext = true;
|
|
@@ -127,7 +127,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
|
|
|
127
127
|
* @param event The event object of the invite button
|
|
128
128
|
*/
|
|
129
129
|
_this.inviteUser = async event => {
|
|
130
|
-
const users = []
|
|
130
|
+
const users = [],
|
|
131
|
+
newlyInvitedUsers = [];
|
|
131
132
|
const source = event.getSource();
|
|
132
133
|
const bindingContext = source.getBindingContext();
|
|
133
134
|
const contexts = (_this.manageDialogUserTable?.getBinding("rows")).getContexts();
|
|
@@ -136,14 +137,22 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
|
|
|
136
137
|
UserID: context.getProperty("id"),
|
|
137
138
|
UserAccessRole: "O" // For now according to UX every user retrieves the owner role
|
|
138
139
|
});
|
|
140
|
+
if (context.getProperty("status") === UserStatus.NotYetInvited) {
|
|
141
|
+
newlyInvitedUsers.push(context.getProperty("id"));
|
|
142
|
+
}
|
|
139
143
|
});
|
|
140
144
|
try {
|
|
141
145
|
// We request the number of invited users after the share action to see how many users were really invited
|
|
142
146
|
const results = await Promise.all([shareObject(bindingContext, users), _this.requestInvitedUsersInDraft()]);
|
|
143
|
-
const
|
|
147
|
+
const newUsers = [];
|
|
148
|
+
results[1].forEach(invitedUser => {
|
|
149
|
+
if (newlyInvitedUsers.includes(invitedUser.getProperty("UserID"))) {
|
|
150
|
+
newUsers.push(invitedUser);
|
|
151
|
+
}
|
|
152
|
+
});
|
|
144
153
|
const messageHandler = _this.getPageController().messageHandler;
|
|
145
154
|
await messageHandler.showMessageDialog();
|
|
146
|
-
switch (
|
|
155
|
+
switch (newUsers.length) {
|
|
147
156
|
case 0:
|
|
148
157
|
MessageToast.show(_this.getTranslatedText("C_COLLABORATIONDRAFT_INVITATION_SUCCESS_TOAST_NO_USER", [_this.getSharedItemName(bindingContext)]));
|
|
149
158
|
break;
|
|
@@ -151,7 +160,7 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
|
|
|
151
160
|
MessageToast.show(_this.getTranslatedText("C_COLLABORATIONDRAFT_INVITATION_SUCCESS_TOAST", [_this.getSharedItemName(bindingContext)]));
|
|
152
161
|
break;
|
|
153
162
|
default:
|
|
154
|
-
MessageToast.show(_this.getTranslatedText("C_COLLABORATIONDRAFT_INVITATION_SUCCESS_TOAST_PLURAL", [
|
|
163
|
+
MessageToast.show(_this.getTranslatedText("C_COLLABORATIONDRAFT_INVITATION_SUCCESS_TOAST_PLURAL", [newUsers.length.toString(), _this.getSharedItemName(bindingContext)]));
|
|
155
164
|
}
|
|
156
165
|
} catch {
|
|
157
166
|
MessageToast.show(_this.getTranslatedText("C_COLLABORATIONDRAFT_INVITATION_FAILED_TOAST"));
|
|
@@ -509,7 +518,8 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
|
|
|
509
518
|
_proto.requestInvitedUsersInDraft = async function requestInvitedUsersInDraft() {
|
|
510
519
|
const model = this.getModel();
|
|
511
520
|
const parameters = {
|
|
512
|
-
$select: "UserID,UserDescription,UserEditingState"
|
|
521
|
+
$select: "UserID,UserDescription,UserEditingState",
|
|
522
|
+
$$groupId: "$auto.Workers"
|
|
513
523
|
};
|
|
514
524
|
const invitedUserList = model?.bindList(`${this.getBindingContext()?.getPath()}/DraftAdministrativeData/DraftAdministrativeUser`, undefined, [], [], parameters);
|
|
515
525
|
|
|
@@ -626,4 +636,4 @@ sap.ui.define(["sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe
|
|
|
626
636
|
_exports = CollaborationDraft;
|
|
627
637
|
return _exports;
|
|
628
638
|
}, false);
|
|
629
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVU0VSU19QQVJBTUVURVJTIiwiVVNFUl9JRF9QQVJBTUVURVIiLCJDb2xsYWJvcmF0aW9uRHJhZnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsInJlcXVpcmVkIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1aWxkaW5nQmxvY2siLCJwcm9wcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJzaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzIiwiZXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJ1c2VyRGV0YWlsc1BvcG92ZXIiLCJnZXRVc2VyRGV0YWlsc1BvcG92ZXIiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib3BlbkJ5IiwibWFuYWdlQ29sbGFib3JhdGlvbiIsIm1hbmFnZURpYWxvZyIsImdldE1hbmFnZURpYWxvZyIsInJlYWRJbnZpdGVkVXNlcnMiLCJvcGVuIiwiZm9ybWF0VXNlclN0YXR1cyIsInVzZXJTdGF0dXMiLCJVc2VyU3RhdHVzIiwiQ3VycmVudGx5RWRpdGluZyIsImdldFRyYW5zbGF0ZWRUZXh0IiwiQ2hhbmdlc01hZGUiLCJOb0NoYW5nZXNNYWRlIiwiTm90WWV0SW52aXRlZCIsImFkZFVzZXJGaWVsZENoYW5nZWQiLCJ1c2VySW5wdXQiLCJnZXRQYXJhbWV0ZXIiLCJ0aGVuIiwibmV3VXNlcklkIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJpbnZpdGVkVXNlcnMiLCJnZXRQcm9wZXJ0eSIsIm5ld1VzZXIiLCJpZCIsIm5hbWUiLCJmaW5kSW5kZXgiLCJ1c2VyIiwic2V0VmFsdWVTdGF0ZSIsInNldFZhbHVlU3RhdGVUZXh0IiwiYWRkVXNlciIsImJpbmQiLCJjYXRjaCIsImludml0ZVVzZXIiLCJ1c2VycyIsImJpbmRpbmdDb250ZXh0IiwiY29udGV4dHMiLCJtYW5hZ2VEaWFsb2dVc2VyVGFibGUiLCJnZXRCaW5kaW5nIiwiZ2V0Q29udGV4dHMiLCJmb3JFYWNoIiwiY29udGV4dCIsInB1c2giLCJVc2VySUQiLCJVc2VyQWNjZXNzUm9sZSIsInJlc3VsdHMiLCJQcm9taXNlIiwiYWxsIiwic2hhcmVPYmplY3QiLCJyZXF1ZXN0SW52aXRlZFVzZXJzSW5EcmFmdCIsIm51bWJlck9mTmV3SW52aXRlZFVzZXJzIiwibGVuZ3RoIiwibWVzc2FnZUhhbmRsZXIiLCJnZXRQYWdlQ29udHJvbGxlciIsInNob3dNZXNzYWdlRGlhbG9nIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldFNoYXJlZEl0ZW1OYW1lIiwidG9TdHJpbmciLCJjbG9zZU1hbmFnZURpYWxvZyIsImN1cnJlbnRVc2VyTGlzdCIsImFjdGl2ZVVzZXJzIiwiZ2V0TW9kZWwiLCJtZSIsIkNvbGxhYm9yYXRpb25VdGlscyIsImdldE1lIiwiZ2V0QXBwQ29tcG9uZW50IiwidXNlckNvbnRleHQiLCJ1c2VyRGF0YSIsImdldE9iamVjdCIsImlzTWUiLCJpc0FjdGl2ZSIsImZpbmQiLCJ1IiwidXNlckRlc2NyaXB0aW9uIiwiVXNlckRlc2NyaXB0aW9uIiwiaW5pdGlhbHMiLCJmb3JtYXRJbml0aWFscyIsImdldFRleHQiLCJVc2VyRWRpdGluZ1N0YXRlIiwiSW5Qcm9ncmVzcyIsInN0YXR1cyIsImNvbG9yIiwiZ2V0VXNlckNvbG9yIiwic2V0UHJvcGVydHkiLCJlIiwiY2xvc2UiLCJkZXN0cm95IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfb3duZXJDb21wb25lbnQiLCJfY29udHJvbExvYWRlZCIsIlByb21pc2VLZWVwZXIiLCJHcmlkVGFibGVDb250cm9sIiwidW5kZWZpbmVkIiwiTGliIiwibG9hZCIsImRlZmF1bHQiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiR3JpZFRhYmxlQ29sdW1uQ29udHJvbCIsImNvbnRleHRPYmplY3QiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsInJlc29sdmUiLCJfanN4IiwiUmVzcG9uc2l2ZVBvcG92ZXIiLCJzaG93SGVhZGVyIiwiY2xhc3MiLCJwbGFjZW1lbnQiLCJjaGlsZHJlbiIsIl9qc3hzIiwiSEJveCIsIkF2YXRhciIsImRpc3BsYXlTaXplIiwiYmFja2dyb3VuZENvbG9yIiwiVkJveCIsIkxhYmVsIiwidGV4dCIsImFkZERlcGVuZGVudCIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0SW52aXRhdGlvbkRpYWxvZ1RpdGxlRXhwQmluZGluZyIsImhvcml6b250YWxTY3JvbGxpbmciLCJ2ZXJ0aWNhbFNjcm9sbGluZyIsImNvbnRlbnRXaWR0aCIsInN0cmV0Y2giLCJDb21tb25IZWxwZXIiLCJpc0Rlc2t0b3AiLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwiZW5hYmxlZCIsInBhcnRzIiwicGF0aCIsImZvcm1hdHRlciIsImZvcm1hdEludml0ZUJ1dHRvbiIsImVuZEJ1dHRvbiIsIndpZHRoIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJzaG93Q2xvc2VCdXR0b24iLCJnZXRNYW5hZ2VEaWFsb2dBZGRVc2VyU2VjdGlvbiIsImdldE1hbmFnZURpYWxvZ1VzZXJUYWJsZSIsImJpbmRFbGVtZW50IiwibW9kZWwiLCJnZXRNYW5hZ2VEaWFsb2dVc2VyVGFibGVDb2x1bW5zIiwiX0ZyYWdtZW50IiwidGVtcGxhdGUiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJsYWJlbCIsIlRleHQiLCJPYmplY3RTdGF0dXMiLCJzdGF0ZSIsImZvcm1hdFVzZXJTdGF0dXNDb2xvciIsImljb24iLCJyZW1vdmVVc2VyIiwidmlzaWJsZSIsInJvd3MiLCJ2aXNpYmxlUm93Q291bnQiLCJ2aXNpYmxlUm93Q291bnRNb2RlIiwic2VsZWN0aW9uTW9kZSIsImNvbHVtbnMiLCJGaWVsZCIsInZhbHVlIiwiYWRkaXRpb25hbFZhbHVlIiwiZGlzcGxheSIsInZhbHVlSGVscCIsInBsYWNlaG9sZGVyIiwiY2hhbmdlIiwiZGVwZW5kZW50cyIsIlZhbHVlSGVscCIsImRlbGVnYXRlIiwiZ2V0VmFsdWVIZWxwRGVsZWdhdGUiLCJ2YWxpZGF0ZUlucHV0IiwidHlwZWFoZWFkIiwiTURDUG9wb3ZlciIsIk1UYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJ1c2VBc1ZhbHVlSGVscCIsImRpYWxvZyIsIk1EQ0RpYWxvZyIsIlZhbHVlU3RhdGUiLCJTdWNjZXNzIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwibmJVc2VycyIsInNvbWUiLCJ0cmFuc2llbnQiLCJpdGVtIiwiZGVsZXRlVXNlcklEIiwiZmlsdGVyIiwicGFyYW1ldGVycyIsIiRzZWxlY3QiLCJpbnZpdGVkVXNlckxpc3QiLCJiaW5kTGlzdCIsImdldFBhdGgiLCJyZXF1ZXN0Q29udGV4dHMiLCJoZWFkZXJJbmZvIiwidGFyZ2V0RW50aXR5VHlwZSIsImFubm90YXRpb25zIiwiVUkiLCJIZWFkZXJJbmZvIiwic2hhcmVkSXRlbU5hbWUiLCJUaXRsZSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiVmFsdWUiLCJUeXBlTmFtZSIsImFjdGlvbk5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJTaGFyZUFjdGlvbiIsImFjdGlvbiIsInJlc29sdmVQYXRoIiwidXNlclBhcmFtZXRlcnMiLCJwYXJhbSIsInBheWxvYWQiLCJwcm9wZXJ0eVBhdGgiLCJxdWFsaWZpZXJzIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJwYXJhbXMiLCJ0aXRsZUV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJjb2xsYWJvcmF0aW9uRm9ybWF0dGVyIiwiZ2V0Rm9ybWF0dGVkVGV4dCIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0SW52aXRlQnV0dG9uIiwic3JjIiwiX2dldE93bmVyIiwiZ2V0TWV0YU1vZGVsIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIml0ZW1zIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29sbGFib3JhdGlvbkRyYWZ0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgQWN0aW9uIGFzIFZvY2FidWxhcnlBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIERhdGFGaWVsZFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZm9ybWF0UmVzdWx0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHR5cGUgeyBCYWNrZW5kVXNlciwgVXNlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCB7XG5cdENvbGxhYm9yYXRpb25VdGlscyxcblx0VXNlckVkaXRpbmdTdGF0ZSxcblx0VXNlclN0YXR1cyxcblx0c2hhcmVPYmplY3Rcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IGNvbGxhYm9yYXRpb25Gb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvQ29sbGFib3JhdGlvbkZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUhlbHBQYXlsb2FkIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IEF2YXRhciBmcm9tIFwic2FwL20vQXZhdGFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBSZXNwb25zaXZlUG9wb3ZlciBmcm9tIFwic2FwL20vUmVzcG9uc2l2ZVBvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHsgVmFsdWVTdGF0ZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCBNRENEaWFsb2cgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL0RpYWxvZ1wiO1xuaW1wb3J0IE1EQ1BvcG92ZXIgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL1BvcG92ZXJcIjtcbmltcG9ydCBNVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTVRhYmxlXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBJbnRlZ2VyIGZyb20gXCJzYXAvdWkvbW9kZWwvdHlwZS9JbnRlZ2VyXCI7XG5pbXBvcnQgdHlwZSBHcmlkVGFibGVDb2x1bW4gZnJvbSBcInNhcC91aS90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIEdyaWRUYWJsZSBmcm9tIFwic2FwL3VpL3RhYmxlL1RhYmxlXCI7XG5cbmNvbnN0IFVTRVJTX1BBUkFNRVRFUlMgPSBcIlVzZXJzXCI7XG5jb25zdCBVU0VSX0lEX1BBUkFNRVRFUiA9IFwiVXNlcklEXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb21wb25lbnRzLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGlvbkRyYWZ0IGV4dGVuZHMgQnVpbGRpbmdCbG9jayB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH0pXG5cdHB1YmxpYyBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHB1YmxpYyBpZD86IHN0cmluZztcblxuXHRwcml2YXRlIGNvbnRleHRPYmplY3Q/OiBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD47XG5cblx0cHJpdmF0ZSB1c2VyRGV0YWlsc1BvcG92ZXI/OiBSZXNwb25zaXZlUG9wb3ZlcjtcblxuXHRwcml2YXRlIG1hbmFnZURpYWxvZz86IERpYWxvZztcblxuXHRwcml2YXRlIG1hbmFnZURpYWxvZ1VzZXJUYWJsZT86IFRhYmxlO1xuXG5cdHByaXZhdGUgc3RhdGljIEdyaWRUYWJsZUNvbnRyb2w6IHR5cGVvZiBHcmlkVGFibGU7XG5cblx0cHJpdmF0ZSBzdGF0aWMgR3JpZFRhYmxlQ29sdW1uQ29udHJvbDogdHlwZW9mIEdyaWRUYWJsZUNvbHVtbjtcblxuXHRwcml2YXRlIF9jb250cm9sTG9hZGVkPzogUHJvbWlzZUtlZXBlcjx2b2lkPjtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPENvbGxhYm9yYXRpb25EcmFmdD4sIG90aGVycz86IFByb3BlcnRpZXNPZjxDb2xsYWJvcmF0aW9uRHJhZnQ+KSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdH1cblxuXHRhc3luYyBvbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9jb250cm9sTG9hZGVkID0gbmV3IFByb21pc2VLZWVwZXIoKTtcblx0XHRpZiAoQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbnRyb2wgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YXdhaXQgTGliLmxvYWQoeyBuYW1lOiBcInNhcC51aS50YWJsZVwiIH0pO1xuXHRcdFx0Y29uc3QgeyBkZWZhdWx0OiBHcmlkVGFibGVDb250cm9sIH0gPSBhd2FpdCBpbXBvcnQoXCJzYXAvdWkvdGFibGUvVGFibGVcIik7XG5cdFx0XHRDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29udHJvbCA9IEdyaWRUYWJsZUNvbnRyb2w7XG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IEdyaWRUYWJsZUNvbHVtbkNvbnRyb2wgfSA9IGF3YWl0IGltcG9ydChcInNhcC91aS90YWJsZS9Db2x1bW5cIik7XG5cdFx0XHRDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCA9IEdyaWRUYWJsZUNvbHVtbkNvbnRyb2w7XG5cdFx0fVxuXHRcdHRoaXMuY29udGV4dE9iamVjdCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCh0aGlzLmNvbnRleHRQYXRoKTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR0aGlzLl9jb250cm9sTG9hZGVkLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBhbmQgc2hvdyB0aGUgdXNlciBkZXRhaWxzIHBvcG92ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0XG5cdCAqL1xuXHRzaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzID0gKGV2ZW50OiBFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkID0+IHtcblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRpZiAoIXRoaXMudXNlckRldGFpbHNQb3BvdmVyKSB7XG5cdFx0XHR0aGlzLnVzZXJEZXRhaWxzUG9wb3ZlciA9IHRoaXMuZ2V0VXNlckRldGFpbHNQb3BvdmVyKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy51c2VyRGV0YWlsc1BvcG92ZXI/LnNldEJpbmRpbmdDb250ZXh0KHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LCBcImludGVybmFsXCIpO1xuXHRcdHRoaXMudXNlckRldGFpbHNQb3BvdmVyPy5vcGVuQnkoc291cmNlKTtcblx0fTtcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdXNlciBkZXRhaWxzIHBvcG92ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldFVzZXJEZXRhaWxzUG9wb3ZlcigpOiBSZXNwb25zaXZlUG9wb3ZlciB7XG5cdFx0Y29uc3QgdXNlckRldGFpbHNQb3BvdmVyID0gKFxuXHRcdFx0PFJlc3BvbnNpdmVQb3BvdmVyIHNob3dIZWFkZXI9e2ZhbHNlfSBjbGFzcz1cInNhcFVpQ29udGVudFBhZGRpbmdcIiBwbGFjZW1lbnQ9XCJCb3R0b21cIj5cblx0XHRcdFx0PEhCb3g+XG5cdFx0XHRcdFx0PEF2YXRhciBpbml0aWFscz1cIntpbnRlcm5hbD5pbml0aWFsc31cIiBkaXNwbGF5U2l6ZT1cIlNcIiBiYWNrZ3JvdW5kQ29sb3I9XCJ7aW50ZXJuYWw+Y29sb3J9XCIgLz5cblx0XHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQmVnaW5cIiB0ZXh0PVwie2ludGVybmFsPm5hbWV9XCIgLz5cblx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQmVnaW5cIiB0ZXh0PVwie2ludGVybmFsPmlkfVwiIC8+XG5cdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHQ8L1Jlc3BvbnNpdmVQb3BvdmVyPlxuXHRcdCk7XG5cblx0XHR0aGlzLmFkZERlcGVuZGVudCh1c2VyRGV0YWlsc1BvcG92ZXIpO1xuXG5cdFx0cmV0dXJuIHVzZXJEZXRhaWxzUG9wb3Zlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbWFuYWdlIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdG1hbmFnZUNvbGxhYm9yYXRpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0aWYgKCF0aGlzLm1hbmFnZURpYWxvZykge1xuXHRcdFx0dGhpcy5tYW5hZ2VEaWFsb2cgPSB0aGlzLmdldE1hbmFnZURpYWxvZygpO1xuXHRcdH1cblxuXHRcdHRoaXMucmVhZEludml0ZWRVc2VycygpO1xuXHRcdHRoaXMubWFuYWdlRGlhbG9nPy5vcGVuKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1hbmFnZSBkaWFsb2cgdXNlZCB0byBpbnZpdGUgZnVydGhlciB1c2Vycy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0TWFuYWdlRGlhbG9nKCk6IERpYWxvZyB7XG5cdFx0Y29uc3QgbWFuYWdlRGlhbG9nID0gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5nZXRJbnZpdGF0aW9uRGlhbG9nVGl0bGVFeHBCaW5kaW5nKCl9XG5cdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9XCJGYWxzZVwiXG5cdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nPVwiRmFsc2VcIlxuXHRcdFx0XHRjb250ZW50V2lkdGg9XCIzNWVtXCJcblx0XHRcdFx0c3RyZXRjaD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCJmYWxzZVwiIDogXCJ0cnVlXCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fRElBTE9HX0NPTkZJUk1BVElPTlwiKX1cblx0XHRcdFx0XHRcdFx0cHJlc3M9e3RoaXMuaW52aXRlVXNlcn1cblx0XHRcdFx0XHRcdFx0dHlwZT1cIkVtcGhhc2l6ZWRcIlxuXHRcdFx0XHRcdFx0XHRlbmFibGVkPXt7XG5cdFx0XHRcdFx0XHRcdFx0cGFydHM6IFt7IHBhdGg6IFwiaW50ZXJuYWw+aW52aXRlZFVzZXJzL2xlbmd0aFwiIH0sIHsgcGF0aDogXCJpbnRlcm5hbD5pbnZpdGVkVXNlcnNcIiB9XSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHRoaXMuZm9ybWF0SW52aXRlQnV0dG9uXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9JTlZJVEFUSU9OX0RJQUxPR19DQU5DRUxcIil9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLmNsb3NlTWFuYWdlRGlhbG9nfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpblwiPlxuXHRcdFx0XHRcdFx0XHQ8VkJveCB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfSU5WSVRBVElPTl9NRVNTQUdFU1RSSVBcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiSW5mb3JtYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU1lZGl1bU1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fSU5QVVRfTEFCRUxcIil9IHJlcXVpcmVkPXt0cnVlfSAvPlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRNYW5hZ2VEaWFsb2dBZGRVc2VyU2VjdGlvbigpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRNYW5hZ2VEaWFsb2dVc2VyVGFibGUoKX1cblx0XHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpO1xuXG5cdFx0dGhpcy5hZGREZXBlbmRlbnQobWFuYWdlRGlhbG9nKTtcblx0XHRtYW5hZ2VEaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0bW9kZWw6IFwiaW50ZXJuYWxcIixcblx0XHRcdHBhdGg6IFwiY29sbGFib3JhdGlvblwiXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gbWFuYWdlRGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybmluZyB0aGUgdGFibGUgY29sdW1uIHdpdGggdGhlIGxpc3Qgb2YgaW52aXRlZCB1c2Vycy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0TWFuYWdlRGlhbG9nVXNlclRhYmxlQ29sdW1ucygpOiBHcmlkVGFibGVDb2x1bW5bXSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCB3aWR0aD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCIxMCVcIiA6IFwiM2VtXCJ9PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKFxuXHRcdFx0XHRcdFx0XHQ8SEJveCBhbGlnbkl0ZW1zPVwiQ2VudGVyXCIganVzdGlmeUNvbnRlbnQ9XCJTcGFjZUJldHdlZW5cIj5cblx0XHRcdFx0XHRcdFx0XHQ8QXZhdGFyIGRpc3BsYXlTaXplPVwiWFNcIiBiYWNrZ3JvdW5kQ29sb3I9XCJ7aW50ZXJuYWw+Y29sb3J9XCIgaW5pdGlhbHM9XCJ7aW50ZXJuYWw+aW5pdGlhbHN9XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbHVtbkNvbnRyb2w+XG5cdFx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCB3aWR0aD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCIzNSVcIiA6IFwiNmVtXCJ9PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYWJlbDogPFRleHQgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fVEFCTEVfVVNFUl9DT0xVTU5cIil9IC8+LFxuXHRcdFx0XHRcdFx0dGVtcGxhdGU6IDxUZXh0IHRleHQ9XCJ7aW50ZXJuYWw+bmFtZX1cIiAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbHVtbkNvbnRyb2w+XG5cdFx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCB3aWR0aD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCI0NiVcIiA6IFwiOWVtXCJ9PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYWJlbDogPFRleHQgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fVEFCTEVfVVNFUl9TVEFUVVNfQ09MVU1OXCIpfSAvPixcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiAoXG5cdFx0XHRcdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZT17eyBwYXRoOiBcImludGVybmFsPnN0YXR1c1wiLCBmb3JtYXR0ZXI6IHRoaXMuZm9ybWF0VXNlclN0YXR1c0NvbG9yIH19XG5cdFx0XHRcdFx0XHRcdFx0dGV4dD17eyBwYXRoOiBcImludGVybmFsPnN0YXR1c1wiLCBmb3JtYXR0ZXI6IHRoaXMuZm9ybWF0VXNlclN0YXR1cyB9fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbHVtbkNvbnRyb2w+XG5cdFx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCB3aWR0aD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCI4JVwiIDogXCIzZW1cIn0+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiAoXG5cdFx0XHRcdFx0XHRcdDxIQm94PlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdGljb249XCJzYXAtaWNvbjovL2RlY2xpbmVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLnJlbW92ZVVzZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiez0gISEke2ludGVybmFsPnRyYW5zaWVudH0gfVwiXG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbHVtbkNvbnRyb2w+XG5cdFx0XHQ8Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRhYmxlIHdpdGggdGhlIGxpc3Qgb2YgaW52aXRlZCB1c2Vycy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0TWFuYWdlRGlhbG9nVXNlclRhYmxlKCk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHR0aGlzLm1hbmFnZURpYWxvZ1VzZXJUYWJsZSA9IChcblx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29udHJvbFxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRyb3dzPXt7IHBhdGg6IFwiaW50ZXJuYWw+aW52aXRlZFVzZXJzXCIgfX1cblx0XHRcdFx0dmlzaWJsZVJvd0NvdW50PXtDb21tb25IZWxwZXIuaXNEZXNrdG9wKCkgPyBcIjVcIiA6IFwiM1wifVxuXHRcdFx0XHR2aXNpYmxlUm93Q291bnRNb2RlPVwiRml4ZWRcIlxuXHRcdFx0XHRzZWxlY3Rpb25Nb2RlPVwiTm9uZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y29sdW1uczogdGhpcy5nZXRNYW5hZ2VEaWFsb2dVc2VyVGFibGVDb2x1bW5zKClcblx0XHRcdFx0fX1cblx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbnRyb2w+XG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy5tYW5hZ2VEaWFsb2dVc2VyVGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc2VjdGlvbiBvbiB0aGUgZGlhbG9nIHJlbGF0ZWQgdG8gdGhlIHVzZXIgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldE1hbmFnZURpYWxvZ0FkZFVzZXJTZWN0aW9uKCk6IEhCb3gge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8SEJveCBjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQm90dG9tXCIgd2lkdGg9XCIxMDAlXCI+XG5cdFx0XHRcdDxGaWVsZFxuXHRcdFx0XHRcdHZhbHVlPVwie2ludGVybmFsPlVzZXJJRH1cIlxuXHRcdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZT1cIntpbnRlcm5hbD5Vc2VyRGVzY3JpcHRpb259XCJcblx0XHRcdFx0XHRkaXNwbGF5PVwiRGVzY3JpcHRpb25WYWx1ZVwiXG5cdFx0XHRcdFx0d2lkdGg9XCIyMGVtXCJcblx0XHRcdFx0XHRyZXF1aXJlZD17dHJ1ZX1cblx0XHRcdFx0XHR2YWx1ZUhlbHA9XCJ1c2VyVmFsdWVIZWxwXCJcblx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fSU5QVVRfUExBQ0VIT0xERVJcIil9XG5cdFx0XHRcdFx0Y2hhbmdlPXt0aGlzLmFkZFVzZXJGaWVsZENoYW5nZWR9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHQ8VmFsdWVIZWxwIGlkPVwidXNlclZhbHVlSGVscFwiIGRlbGVnYXRlPXt0aGlzLmdldFZhbHVlSGVscERlbGVnYXRlKCl9IHZhbGlkYXRlSW5wdXQ9e3RydWV9PlxuXHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlYWhlYWQ6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PE1EQ1BvcG92ZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PE1UYWJsZSBjYXNlU2Vuc2l0aXZlPVwidHJ1ZVwiIHVzZUFzVmFsdWVIZWxwPVwiZmFsc2VcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L01EQ1BvcG92ZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nOiA8TURDRGlhbG9nIC8+XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0PC9WYWx1ZUhlbHA+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9GaWVsZD5cblx0XHRcdDwvSEJveD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvcm1hdHRlciB0byBzZXQgdGhlIHVzZXIgc3RhdHVzIGRlcGVuZGluZyBvbiB0aGUgZWRpdGluZyBzdGF0dXMuXG5cdCAqIEBwYXJhbSB1c2VyU3RhdHVzIFRoZSBlZGl0aW5nIHN0YXR1cyBvZiB0aGUgdXNlclxuXHQgKiBAcmV0dXJucyBUaGUgdXNlciBzdGF0dXNcblx0ICovXG5cdGZvcm1hdFVzZXJTdGF0dXMgPSAodXNlclN0YXR1czogVXNlclN0YXR1cyk6IHN0cmluZyA9PiB7XG5cdFx0c3dpdGNoICh1c2VyU3RhdHVzKSB7XG5cdFx0XHRjYXNlIFVzZXJTdGF0dXMuQ3VycmVudGx5RWRpdGluZzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9VU0VSX0NVUlJFTlRMWV9FRElUSU5HXCIpO1xuXHRcdFx0Y2FzZSBVc2VyU3RhdHVzLkNoYW5nZXNNYWRlOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX1VTRVJfQ0hBTkdFU19NQURFXCIpO1xuXHRcdFx0Y2FzZSBVc2VyU3RhdHVzLk5vQ2hhbmdlc01hZGU6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfVVNFUl9OT19DSEFOR0VTX01BREVcIik7XG5cdFx0XHRjYXNlIFVzZXJTdGF0dXMuTm90WWV0SW52aXRlZDpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfVVNFUl9OT1RfWUVUX0lOVklURURcIik7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBGb3JtYXR0ZXIgdG8gc2V0IHRoZSB1c2VyIGNvbG9yIGRlcGVuZGluZyBvbiB0aGUgZWRpdGluZyBzdGF0dXMuXG5cdCAqIEBwYXJhbSB1c2VyU3RhdHVzIFRoZSBlZGl0aW5nIHN0YXR1cyBvZiB0aGUgdXNlclxuXHQgKiBAcmV0dXJucyBUaGUgdXNlciBzdGF0dXMgY29sb3Jcblx0ICovXG5cdGZvcm1hdFVzZXJTdGF0dXNDb2xvcih1c2VyU3RhdHVzOiBVc2VyU3RhdHVzKTogVmFsdWVTdGF0ZSB7XG5cdFx0c3dpdGNoICh1c2VyU3RhdHVzKSB7XG5cdFx0XHRjYXNlIFVzZXJTdGF0dXMuQ3VycmVudGx5RWRpdGluZzpcblx0XHRcdFx0cmV0dXJuIFZhbHVlU3RhdGUuU3VjY2Vzcztcblx0XHRcdGNhc2UgVXNlclN0YXR1cy5DaGFuZ2VzTWFkZTpcblx0XHRcdFx0cmV0dXJuIFZhbHVlU3RhdGUuV2FybmluZztcblx0XHRcdGNhc2UgVXNlclN0YXR1cy5Ob0NoYW5nZXNNYWRlOlxuXHRcdFx0Y2FzZSBVc2VyU3RhdHVzLk5vdFlldEludml0ZWQ6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVmFsdWVTdGF0ZS5JbmZvcm1hdGlvbjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9ybWF0dGVyIHRvIGVuYWJsZSB0aGUgaW52aXRlIGJ1dHRvbiBkZXBlbmRpbmcgb24gdGhlIGludml0ZWQgdXNlcnMgc3RhdHVzLlxuXHQgKiBAcGFyYW0gbmJVc2VycyBOdW1iZXIgb2YgdXNlcnNcblx0ICogQHBhcmFtIGludml0ZWRVc2VycyBMaXN0IG9mIHRoZSBpbnZpdGVkIHVzZXJzXG5cdCAqIEByZXR1cm5zIFRydWUgb3IgRmFsc2Vcblx0ICovXG5cdGZvcm1hdEludml0ZUJ1dHRvbihuYlVzZXJzOiBJbnRlZ2VyIHwgdW5kZWZpbmVkLCBpbnZpdGVkVXNlcnM6IFVzZXJbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdGlmICghbmJVc2Vycykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gISFpbnZpdGVkVXNlcnM/LnNvbWUoKHVzZXIpID0+IHVzZXIuc3RhdHVzID09PSAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhlIGFkZGVkIHVzZXIgdG8gdGhlIGxpc3Qgb2YgaW52aXRlZCB1c2Vycy5cblx0ICogQHBhcmFtIHVzZXJJbnB1dCBUaGUgdXNlciB0byBiZSBpbnZpdGVkXG5cdCAqIEBwYXJhbSBpbnZpdGVkVXNlcnMgVGhlIHVzZXJzIGFscmVhZHkgaW52aXRlZFxuXHQgKiBAcGFyYW0gbmV3VXNlciBUaGUgdXNlciB0byBiZSBpbnZpdGVkXG5cdCAqL1xuXHRhZGRVc2VyKHVzZXJJbnB1dDogRmllbGQsIGludml0ZWRVc2VyczogVXNlcltdLCBuZXdVc2VyOiBVc2VyKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB1c2VySW5wdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBhY3RpdmVVc2VycyA9ICh1c2VySW5wdXQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpb24vYWN0aXZlVXNlcnNcIik7XG5cdFx0bmV3VXNlci5uYW1lID0gbmV3VXNlci5uYW1lIHx8IG5ld1VzZXIuaWQ7XG5cdFx0bmV3VXNlci5pbml0aWFscyA9IENvbGxhYm9yYXRpb25VdGlscy5mb3JtYXRJbml0aWFscyhuZXdVc2VyLm5hbWUpO1xuXHRcdG5ld1VzZXIuY29sb3IgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VXNlckNvbG9yKG5ld1VzZXIuaWQsIGFjdGl2ZVVzZXJzLCBpbnZpdGVkVXNlcnMpO1xuXHRcdG5ld1VzZXIudHJhbnNpZW50ID0gdHJ1ZTtcblx0XHRuZXdVc2VyLnN0YXR1cyA9IFVzZXJTdGF0dXMuTm90WWV0SW52aXRlZDtcblx0XHRpbnZpdGVkVXNlcnMucHVzaChuZXdVc2VyKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImludml0ZWRVc2Vyc1wiLCBpbnZpdGVkVXNlcnMpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiVXNlcklEXCIsIFwiXCIpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiVXNlckRlc2NyaXB0aW9uXCIsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhbHVlIHN0YXRlIG9mIHRoZSB1c2VyIGZpZWxkIHdoZW5ldmVyIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IG9mIHRoZSB1c2VyIGlucHV0XG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSB2YWx1ZSBzdGF0ZSB3YXMgc2V0LlxuXHQgKi9cblx0YWRkVXNlckZpZWxkQ2hhbmdlZCA9IGFzeW5jIChldmVudDogRmllbGQkQ2hhbmdlRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCB1c2VySW5wdXQgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRyZXR1cm4gZXZlbnRcblx0XHRcdC5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpXG5cdFx0XHQ/LnRoZW4oXG5cdFx0XHRcdGZ1bmN0aW9uICh0aGlzOiBDb2xsYWJvcmF0aW9uRHJhZnQsIG5ld1VzZXJJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB1c2VySW5wdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0XHRjb25zdCBpbnZpdGVkVXNlcnM6IFVzZXJbXSA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiaW52aXRlZFVzZXJzXCIpIHx8IFtdO1xuXHRcdFx0XHRcdGNvbnN0IG5ld1VzZXI6IFVzZXIgPSB7XG5cdFx0XHRcdFx0XHRpZDogaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiVXNlcklEXCIpLFxuXHRcdFx0XHRcdFx0bmFtZTogaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiVXNlckRlc2NyaXB0aW9uXCIpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRpZiAoaW52aXRlZFVzZXJzLmZpbmRJbmRleCgodXNlcikgPT4gdXNlci5pZCA9PT0gbmV3VXNlcklkKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHR1c2VySW5wdXQuc2V0VmFsdWVTdGF0ZShcIkVycm9yXCIpO1xuXHRcdFx0XHRcdFx0dXNlcklucHV0LnNldFZhbHVlU3RhdGVUZXh0KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9JTlZJVEFUSU9OX1VTRVJfRVJST1JcIikpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHQhKFxuXHRcdFx0XHRcdFx0XHRpbnZpdGVkVXNlcnMuZmluZEluZGV4KCh1c2VyKSA9PiB1c2VyLmlkID09PSBuZXdVc2VyLmlkKSA+IC0xIHx8XG5cdFx0XHRcdFx0XHRcdChuZXdVc2VyLmlkID09PSBuZXdVc2VyLm5hbWUgJiYgbmV3VXNlci5pZCA9PT0gXCJcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRoaXMuYWRkVXNlcih1c2VySW5wdXQsIGludml0ZWRVc2VycywgbmV3VXNlcik7XG5cdFx0XHRcdFx0XHR1c2VySW5wdXQuc2V0VmFsdWVTdGF0ZShcIk5vbmVcIik7XG5cdFx0XHRcdFx0XHR1c2VySW5wdXQuc2V0VmFsdWVTdGF0ZVRleHQoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LmJpbmQodGhpcylcblx0XHRcdClcblx0XHRcdC5jYXRjaChcblx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IENvbGxhYm9yYXRpb25EcmFmdCk6IHZvaWQge1xuXHRcdFx0XHRcdHVzZXJJbnB1dC5zZXRWYWx1ZVN0YXRlKFwiV2FybmluZ1wiKTtcblx0XHRcdFx0XHR1c2VySW5wdXQuc2V0VmFsdWVTdGF0ZVRleHQodGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fVVNFUl9OT1RfRk9VTkRcIikpO1xuXHRcdFx0XHR9LmJpbmQodGhpcylcblx0XHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gcmVtb3ZlIGEgdXNlciBmcm9tIHRoZSBsaXN0IG9mIGludml0ZWQgdXNlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3Qgb2YgdGhlIHJlbW92ZSBidXR0b25cblx0ICovXG5cdHJlbW92ZVVzZXIoZXZlbnQ6IEV2ZW50PHt9LCBCdXR0b24+KTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gaXRlbT8uZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik7XG5cdFx0Y29uc3QgZGVsZXRlVXNlcklEID0gaXRlbT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJpZFwiKTtcblx0XHRsZXQgaW52aXRlZFVzZXJzOiBVc2VyW10gPSBpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb2xsYWJvcmF0aW9uL2ludml0ZWRVc2Vyc1wiKTtcblx0XHRpbnZpdGVkVXNlcnMgPSBpbnZpdGVkVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiB1c2VyLmlkICE9PSBkZWxldGVVc2VySUQpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbGxhYm9yYXRpb24vaW52aXRlZFVzZXJzXCIsIGludml0ZWRVc2Vycyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbCB0aGUgc2hhcmUgYWN0aW9uIHRvIHVwZGF0ZSB0aGUgbGlzdCBvZiBpbnZpdGVkIHVzZXJzLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdCBvZiB0aGUgaW52aXRlIGJ1dHRvblxuXHQgKi9cblx0aW52aXRlVXNlciA9IGFzeW5jIChldmVudDogRXZlbnQ8e30sIEJ1dHRvbj4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCB1c2VyczogQmFja2VuZFVzZXJbXSA9IFtdO1xuXHRcdGNvbnN0IHNvdXJjZSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGJpbmRpbmdDb250ZXh0ID0gc291cmNlLmdldEJpbmRpbmdDb250ZXh0KCkgYXMgQ29udGV4dDtcblx0XHRjb25zdCBjb250ZXh0cyA9ICh0aGlzLm1hbmFnZURpYWxvZ1VzZXJUYWJsZT8uZ2V0QmluZGluZyhcInJvd3NcIikgYXMgT0RhdGFMaXN0QmluZGluZykuZ2V0Q29udGV4dHMoKTtcblx0XHRjb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uIChjb250ZXh0KSB7XG5cdFx0XHR1c2Vycy5wdXNoKHtcblx0XHRcdFx0VXNlcklEOiBjb250ZXh0LmdldFByb3BlcnR5KFwiaWRcIiksXG5cdFx0XHRcdFVzZXJBY2Nlc3NSb2xlOiBcIk9cIiAvLyBGb3Igbm93IGFjY29yZGluZyB0byBVWCBldmVyeSB1c2VyIHJldHJpZXZlcyB0aGUgb3duZXIgcm9sZVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHR0cnkge1xuXHRcdFx0Ly8gV2UgcmVxdWVzdCB0aGUgbnVtYmVyIG9mIGludml0ZWQgdXNlcnMgYWZ0ZXIgdGhlIHNoYXJlIGFjdGlvbiB0byBzZWUgaG93IG1hbnkgdXNlcnMgd2VyZSByZWFsbHkgaW52aXRlZFxuXHRcdFx0Y29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKFtzaGFyZU9iamVjdChiaW5kaW5nQ29udGV4dCwgdXNlcnMpLCB0aGlzLnJlcXVlc3RJbnZpdGVkVXNlcnNJbkRyYWZ0KCldKTtcblx0XHRcdGNvbnN0IG51bWJlck9mTmV3SW52aXRlZFVzZXJzID0gY29udGV4dHMubGVuZ3RoIC0gcmVzdWx0c1sxXS5sZW5ndGg7XG5cdFx0XHRjb25zdCBtZXNzYWdlSGFuZGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSEubWVzc2FnZUhhbmRsZXI7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXG5cdFx0XHRzd2l0Y2ggKG51bWJlck9mTmV3SW52aXRlZFVzZXJzKSB7XG5cdFx0XHRcdGNhc2UgMDpcblx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9JTlZJVEFUSU9OX1NVQ0NFU1NfVE9BU1RfTk9fVVNFUlwiLCBbXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0U2hhcmVkSXRlbU5hbWUoYmluZGluZ0NvbnRleHQpXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9JTlZJVEFUSU9OX1NVQ0NFU1NfVE9BU1RcIiwgW3RoaXMuZ2V0U2hhcmVkSXRlbU5hbWUoYmluZGluZ0NvbnRleHQpXSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdE1lc3NhZ2VUb2FzdC5zaG93KFxuXHRcdFx0XHRcdFx0dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fU1VDQ0VTU19UT0FTVF9QTFVSQUxcIiwgW1xuXHRcdFx0XHRcdFx0XHRudW1iZXJPZk5ld0ludml0ZWRVc2Vycy50b1N0cmluZygpLFxuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFNoYXJlZEl0ZW1OYW1lKGJpbmRpbmdDb250ZXh0KVxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2gge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fRkFJTEVEX1RPQVNUXCIpKTtcblx0XHR9XG5cdFx0dGhpcy5jbG9zZU1hbmFnZURpYWxvZygpO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRoZSBsaXN0IG9mIHVzZXJzIHRoYXQgYXJlIGFscmVhZHkgaW52aXRlZCBpbiB0aGUgZHJhZnQuXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2l0aCB0aGUgbGlzdCBvZiB1c2VyIGNvbnRleHRzLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyByZXF1ZXN0SW52aXRlZFVzZXJzSW5EcmFmdCgpOiBQcm9taXNlPENvbnRleHRbXT4ge1xuXHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB7XG5cdFx0XHQkc2VsZWN0OiBcIlVzZXJJRCxVc2VyRGVzY3JpcHRpb24sVXNlckVkaXRpbmdTdGF0ZVwiXG5cdFx0fTtcblx0XHRjb25zdCBpbnZpdGVkVXNlckxpc3QgPSBtb2RlbD8uYmluZExpc3QoXG5cdFx0XHRgJHt0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRBZG1pbmlzdHJhdGl2ZVVzZXJgLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0W10sXG5cdFx0XHRbXSxcblx0XHRcdHBhcmFtZXRlcnNcblx0XHQpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0XHQvLyBmb3Igbm93IHdlIHNldCBhIGxpbWl0IHRvIDEwMC4gdGhlcmUgc2hvdWxkbid0IGJlIG1vcmUgdGhhbiBhIGZld1xuXHRcdHJldHVybiBpbnZpdGVkVXNlckxpc3QucmVxdWVzdENvbnRleHRzKDAsIDEwMCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVhZHMgdGhlIGN1cnJlbnRseSBpbnZpdGVkIHVzZXIgYW5kIHN0b3JlIGl0IGluIHRoZSBpbnRlcm5hbCBtb2RlbC5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIG9uY2UgdGhlIHVzZXJzIGFyZSByZWFkLlxuXHQgKi9cblx0cmVhZEludml0ZWRVc2VycyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VXNlckxpc3QgPSBhd2FpdCB0aGlzLnJlcXVlc3RJbnZpdGVkVXNlcnNJbkRyYWZ0KCk7XG5cdFx0XHRjb25zdCBpbnZpdGVkVXNlcnM6IFVzZXJbXSA9IFtdO1xuXHRcdFx0Y29uc3QgYWN0aXZlVXNlcnMgPSB0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpb24vYWN0aXZlVXNlcnNcIikgfHwgW107XG5cdFx0XHRjb25zdCBtZSA9IENvbGxhYm9yYXRpb25VdGlscy5nZXRNZSh0aGlzLmdldEFwcENvbXBvbmVudCgpISk7XG5cdFx0XHRsZXQgdXNlclN0YXR1czogVXNlclN0YXR1cztcblx0XHRcdGlmIChjdXJyZW50VXNlckxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjdXJyZW50VXNlckxpc3QuZm9yRWFjaCgodXNlckNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB1c2VyRGF0YSA9IHVzZXJDb250ZXh0LmdldE9iamVjdCgpIGFzIEJhY2tlbmRVc2VyO1xuXHRcdFx0XHRcdGNvbnN0IGlzTWU6IGJvb2xlYW4gPSBtZT8uaWQgPT09IHVzZXJEYXRhLlVzZXJJRDtcblx0XHRcdFx0XHRjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVVzZXJzLmZpbmQoKHU6IFVzZXIpID0+IHUuaWQgPT09IHVzZXJEYXRhLlVzZXJJRCk7XG5cdFx0XHRcdFx0bGV0IHVzZXJEZXNjcmlwdGlvbiA9IHVzZXJEYXRhLlVzZXJEZXNjcmlwdGlvbiB8fCB1c2VyRGF0YS5Vc2VySUQ7XG5cdFx0XHRcdFx0Y29uc3QgaW5pdGlhbHMgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZm9ybWF0SW5pdGlhbHModXNlckRlc2NyaXB0aW9uKTtcblx0XHRcdFx0XHR1c2VyRGVzY3JpcHRpb24gPSBpc01lID8gYCR7Q29sbGFib3JhdGlvblV0aWxzLmdldFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9NRVwiLCB1c2VyRGVzY3JpcHRpb24pfWAgOiB1c2VyRGVzY3JpcHRpb247XG5cdFx0XHRcdFx0aWYgKGlzQWN0aXZlKSB7XG5cdFx0XHRcdFx0XHR1c2VyU3RhdHVzID0gVXNlclN0YXR1cy5DdXJyZW50bHlFZGl0aW5nO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodXNlckRhdGEuVXNlckVkaXRpbmdTdGF0ZSA9PT0gVXNlckVkaXRpbmdTdGF0ZS5JblByb2dyZXNzKSB7XG5cdFx0XHRcdFx0XHR1c2VyU3RhdHVzID0gVXNlclN0YXR1cy5DaGFuZ2VzTWFkZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dXNlclN0YXR1cyA9IFVzZXJTdGF0dXMuTm9DaGFuZ2VzTWFkZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCB1c2VyOiBVc2VyID0ge1xuXHRcdFx0XHRcdFx0aWQ6IHVzZXJEYXRhLlVzZXJJRCxcblx0XHRcdFx0XHRcdG5hbWU6IHVzZXJEZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdHN0YXR1czogdXNlclN0YXR1cyxcblx0XHRcdFx0XHRcdGNvbG9yOiBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VXNlckNvbG9yKHVzZXJEYXRhLlVzZXJJRCwgYWN0aXZlVXNlcnMsIGludml0ZWRVc2VycyksXG5cdFx0XHRcdFx0XHRpbml0aWFsczogaW5pdGlhbHMsXG5cdFx0XHRcdFx0XHRtZTogaXNNZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aW52aXRlZFVzZXJzLnB1c2godXNlcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9ub3QgeWV0IHNoYXJlZCwganVzdCBhZGQgbWVcblx0XHRcdFx0aW52aXRlZFVzZXJzLnB1c2gobWUpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb2xsYWJvcmF0aW9uL1VzZXJJRFwiLCBcIlwiKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29sbGFib3JhdGlvbi9Vc2VyRGVzY3JpcHRpb25cIiwgXCJcIik7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbGxhYm9yYXRpb24vaW52aXRlZFVzZXJzXCIsIGludml0ZWRVc2Vycyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX1JFQURJTkdfVVNFUl9GQUlMRURcIikpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogR2V0IHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdG8gYmUgc2hhcmVkLlxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdG8gYmUgc2hhcmVkLlxuXHQgKi9cblx0Z2V0U2hhcmVkSXRlbU5hbWUoYmluZGluZ0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGhlYWRlckluZm8gPSB0aGlzLmNvbnRleHRPYmplY3Q/LnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckluZm87XG5cdFx0bGV0IHNoYXJlZEl0ZW1OYW1lID0gXCJcIjtcblx0XHRjb25zdCB0aXRsZSA9IGhlYWRlckluZm8/LlRpdGxlO1xuXHRcdGlmIChcblx0XHRcdHRpdGxlICYmXG5cdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkVHlwZXM+KHRpdGxlLCBbXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbixcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbkdyb3VwLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwsXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0XSlcblx0XHQpIHtcblx0XHRcdHNoYXJlZEl0ZW1OYW1lID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGl0bGUuVmFsdWUpID8gYmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkodGl0bGUuVmFsdWUucGF0aCkgOiB0aXRsZS5WYWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNoYXJlZEl0ZW1OYW1lIHx8IChoZWFkZXJJbmZvPy5UeXBlTmFtZSBhcyB1bmtub3duIGFzIHN0cmluZykgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGRlbGVnYXRlIHBheWxvYWQgZm9yIHRoZSB1c2VyIGZpZWxkIHZhbHVlIGhlbHAuXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBoZWxwIGRlbGVnYXRlIHBheWxvYWRcblx0ICovXG5cdGdldFZhbHVlSGVscERlbGVnYXRlKCk6IHsgbmFtZTogc3RyaW5nOyBwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkIH0ge1xuXHRcdC8vIFRoZSBub24gbnVsbCBhc3NlcnRpb24gaXMgc2FmZSBoZXJlLCBiZWNhdXNlIHRoZSBhY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGFubm90YXRpb24gaXMgcHJlc2VudFxuXHRcdGNvbnN0IGFjdGlvbk5hbWUgPSAoXG5cdFx0XHR0aGlzLmNvbnRleHRPYmplY3Q/LnRhcmdldEVudGl0eVNldCEuYW5ub3RhdGlvbnMuQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vblxuXHRcdCkuRHJhZnRSb290IS5TaGFyZUFjdGlvbiEudG9TdHJpbmcoKTtcblx0XHQvLyBXZSBhcmUgYWxzbyBzdXJlIHRoYXQgdGhlIGFjdGlvbiBleGlzdFxuXHRcdGNvbnN0IGFjdGlvbiA9IHRoaXMuY29udGV4dE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChhY3Rpb25OYW1lKSBhcyBWb2NhYnVsYXJ5QWN0aW9uO1xuXHRcdC8vIEJ5IGRlZmluaXRpb24gdGhlIGFjdGlvbiBoYXMgYSBwYXJhbWV0ZXIgd2l0aCB0aGUgbmFtZSBcIlVzZXJzXCJcblx0XHRjb25zdCB1c2VyUGFyYW1ldGVycyA9IGFjdGlvbi5wYXJhbWV0ZXJzLmZpbmQoKHBhcmFtKSA9PiBwYXJhbS5uYW1lID09PSBVU0VSU19QQVJBTUVURVJTKSE7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGAvJHt1c2VyUGFyYW1ldGVycy50eXBlfS8ke1VTRVJfSURfUEFSQU1FVEVSfWAsXG5cdFx0XHRcdHF1YWxpZmllcnM6IHt9LFxuXHRcdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IFwiXCIsXG5cdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZSB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIG9mIHRoZSBJbnZpdGF0aW9uIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGRpYWxvZyB0aXRsZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdGdldEludml0YXRpb25EaWFsb2dUaXRsZUV4cEJpbmRpbmcoKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGNvbnN0IGhlYWRlckluZm8gPSB0aGlzLmNvbnRleHRPYmplY3Q/LnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckluZm87XG5cdFx0Y29uc3QgdGl0bGUgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oKGhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZCB8IHVuZGVmaW5lZCk/LlZhbHVlLCBbXSwgXCJcIik7XG5cdFx0Y29uc3QgcGFyYW1zID0gW1wiQ19DT0xMQUJPUkFUSU9ORFJBRlRfSU5WSVRBVElPTl9ESUFMT0dcIiwgaGVhZGVySW5mbz8uVHlwZU5hbWUudG9TdHJpbmcoKSwgdGl0bGVdO1xuXHRcdGNvbnN0IHRpdGxlRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbXMsIGNvbGxhYm9yYXRpb25Gb3JtYXR0ZXIuZ2V0Rm9ybWF0dGVkVGV4dCk7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRpdGxlRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjbG9zZSB0aGUgbWFuYWdlIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdGNsb3NlTWFuYWdlRGlhbG9nID0gKCk6IHZvaWQgPT4ge1xuXHRcdHRoaXMubWFuYWdlRGlhbG9nPy5jbG9zZSgpO1xuXHRcdHRoaXMubWFuYWdlRGlhbG9nPy5kZXN0cm95KCk7XG5cdFx0ZGVsZXRlIHRoaXMubWFuYWdlRGlhbG9nO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbnZpdGUgYnV0dG9uIGlmIHRoZXJlJ3MgYSBzaGFyZSBhY3Rpb24gb24gcm9vdCBsZXZlbC5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0SW52aXRlQnV0dG9uKCk6IEhCb3gge1xuXHRcdGlmICgodGhpcy5jb250ZXh0T2JqZWN0Py50YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zLkNvbW1vbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24pPy5EcmFmdFJvb3Q/LlNoYXJlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8SEJveCB2aXNpYmxlPVwie3VpPi9pc0VkaXRhYmxlfVwiIGFsaWduSXRlbXM9XCJDZW50ZXJcIiBqdXN0aWZ5Q29udGVudD1cIlN0YXJ0XCI+XG5cdFx0XHRcdFx0PEF2YXRhciBiYWNrZ3JvdW5kQ29sb3I9XCJUaWxlSWNvblwiIHNyYz1cInNhcC1pY29uOi8vYWRkLWVtcGxveWVlXCIgZGlzcGxheVNpemU9XCJYU1wiIHByZXNzPXt0aGlzLm1hbmFnZUNvbGxhYm9yYXRpb259IC8+XG5cdFx0XHRcdDwvSEJveD5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiA8SEJveCAvPjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBidWlsZGluZyBibG9jay5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Y3JlYXRlQ29udGVudCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5fZ2V0T3duZXIoKT8uZ2V0TWV0YU1vZGVsKCkgJiYgTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQodGhpcy5fZ2V0T3duZXIoKSEuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8SEJveD5cblx0XHRcdFx0XHQ8SEJveFxuXHRcdFx0XHRcdFx0aXRlbXM9e3sgcGF0aDogXCJpbnRlcm5hbD4vY29sbGFib3JhdGlvbi9hY3RpdmVVc2Vyc1wiIH19XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpbkJlZ2luXCJcblx0XHRcdFx0XHRcdHZpc2libGU9XCJ7PSAke3VpPi9pc0VkaXRhYmxlfSAmYW1wOyZhbXA7ICR7aW50ZXJuYWw+L2NvbGxhYm9yYXRpb24vY29ubmVjdGVkfSB9XCJcblx0XHRcdFx0XHRcdGFsaWduSXRlbXM9XCJDZW50ZXJcIlxuXHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9XCJTdGFydFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEF2YXRhclxuXHRcdFx0XHRcdFx0XHRpbml0aWFscz1cIntpbnRlcm5hbD5pbml0aWFsc31cIlxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5U2l6ZT1cIlhTXCJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yPVwie2ludGVybmFsPmNvbG9yfVwiXG5cdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLnNob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHR7dGhpcy5nZXRJbnZpdGVCdXR0b24oKX1cblx0XHRcdFx0PC9IQm94PlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNEQSxNQUFNQSxnQkFBZ0IsR0FBRyxPQUFPO0VBQ2hDLE1BQU1DLGlCQUFpQixHQUFHLFFBQVE7RUFBQyxJQUdkQyxrQkFBa0IsSUFBQUMsSUFBQSxHQUR0Q0MsY0FBYyxDQUFDLDJEQUEyRCxDQUFDLEVBQUFDLEtBQUEsR0FFMUVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsUUFBUTtJQUFFQyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc1Q0gsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSixJQUFBLENBQUFPLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQWlCN0IsU0FBQVYsbUJBQVlXLEtBQXVDLEVBQUVDLE1BQXlDLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQy9GQSxLQUFBLEdBQUFILGNB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
|
|
639
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVU0VSU19QQVJBTUVURVJTIiwiVVNFUl9JRF9QQVJBTUVURVIiLCJDb2xsYWJvcmF0aW9uRHJhZnQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsInJlcXVpcmVkIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0J1aWxkaW5nQmxvY2siLCJwcm9wcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJzaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzIiwiZXZlbnQiLCJzb3VyY2UiLCJnZXRTb3VyY2UiLCJ1c2VyRGV0YWlsc1BvcG92ZXIiLCJnZXRVc2VyRGV0YWlsc1BvcG92ZXIiLCJzZXRCaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib3BlbkJ5IiwibWFuYWdlQ29sbGFib3JhdGlvbiIsIm1hbmFnZURpYWxvZyIsImdldE1hbmFnZURpYWxvZyIsInJlYWRJbnZpdGVkVXNlcnMiLCJvcGVuIiwiZm9ybWF0VXNlclN0YXR1cyIsInVzZXJTdGF0dXMiLCJVc2VyU3RhdHVzIiwiQ3VycmVudGx5RWRpdGluZyIsImdldFRyYW5zbGF0ZWRUZXh0IiwiQ2hhbmdlc01hZGUiLCJOb0NoYW5nZXNNYWRlIiwiTm90WWV0SW52aXRlZCIsImFkZFVzZXJGaWVsZENoYW5nZWQiLCJ1c2VySW5wdXQiLCJnZXRQYXJhbWV0ZXIiLCJ0aGVuIiwibmV3VXNlcklkIiwiaW50ZXJuYWxNb2RlbENvbnRleHQiLCJpbnZpdGVkVXNlcnMiLCJnZXRQcm9wZXJ0eSIsIm5ld1VzZXIiLCJpZCIsIm5hbWUiLCJmaW5kSW5kZXgiLCJ1c2VyIiwic2V0VmFsdWVTdGF0ZSIsInNldFZhbHVlU3RhdGVUZXh0IiwiYWRkVXNlciIsImJpbmQiLCJjYXRjaCIsImludml0ZVVzZXIiLCJ1c2VycyIsIm5ld2x5SW52aXRlZFVzZXJzIiwiYmluZGluZ0NvbnRleHQiLCJjb250ZXh0cyIsIm1hbmFnZURpYWxvZ1VzZXJUYWJsZSIsImdldEJpbmRpbmciLCJnZXRDb250ZXh0cyIsImZvckVhY2giLCJjb250ZXh0IiwicHVzaCIsIlVzZXJJRCIsIlVzZXJBY2Nlc3NSb2xlIiwicmVzdWx0cyIsIlByb21pc2UiLCJhbGwiLCJzaGFyZU9iamVjdCIsInJlcXVlc3RJbnZpdGVkVXNlcnNJbkRyYWZ0IiwibmV3VXNlcnMiLCJpbnZpdGVkVXNlciIsImluY2x1ZGVzIiwibWVzc2FnZUhhbmRsZXIiLCJnZXRQYWdlQ29udHJvbGxlciIsInNob3dNZXNzYWdlRGlhbG9nIiwibGVuZ3RoIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsImdldFNoYXJlZEl0ZW1OYW1lIiwidG9TdHJpbmciLCJjbG9zZU1hbmFnZURpYWxvZyIsImN1cnJlbnRVc2VyTGlzdCIsImFjdGl2ZVVzZXJzIiwiZ2V0TW9kZWwiLCJtZSIsIkNvbGxhYm9yYXRpb25VdGlscyIsImdldE1lIiwiZ2V0QXBwQ29tcG9uZW50IiwidXNlckNvbnRleHQiLCJ1c2VyRGF0YSIsImdldE9iamVjdCIsImlzTWUiLCJpc0FjdGl2ZSIsImZpbmQiLCJ1IiwidXNlckRlc2NyaXB0aW9uIiwiVXNlckRlc2NyaXB0aW9uIiwiaW5pdGlhbHMiLCJmb3JtYXRJbml0aWFscyIsImdldFRleHQiLCJVc2VyRWRpdGluZ1N0YXRlIiwiSW5Qcm9ncmVzcyIsInN0YXR1cyIsImNvbG9yIiwiZ2V0VXNlckNvbG9yIiwic2V0UHJvcGVydHkiLCJlIiwiY2xvc2UiLCJkZXN0cm95IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfb3duZXJDb21wb25lbnQiLCJfY29udHJvbExvYWRlZCIsIlByb21pc2VLZWVwZXIiLCJHcmlkVGFibGVDb250cm9sIiwidW5kZWZpbmVkIiwiTGliIiwibG9hZCIsImRlZmF1bHQiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwiR3JpZFRhYmxlQ29sdW1uQ29udHJvbCIsImNvbnRleHRPYmplY3QiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiY29udGV4dFBhdGgiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsInJlc29sdmUiLCJfanN4IiwiUmVzcG9uc2l2ZVBvcG92ZXIiLCJzaG93SGVhZGVyIiwiY2xhc3MiLCJwbGFjZW1lbnQiLCJjaGlsZHJlbiIsIl9qc3hzIiwiSEJveCIsIkF2YXRhciIsImRpc3BsYXlTaXplIiwiYmFja2dyb3VuZENvbG9yIiwiVkJveCIsIkxhYmVsIiwidGV4dCIsImFkZERlcGVuZGVudCIsIkRpYWxvZyIsInRpdGxlIiwiZ2V0SW52aXRhdGlvbkRpYWxvZ1RpdGxlRXhwQmluZGluZyIsImhvcml6b250YWxTY3JvbGxpbmciLCJ2ZXJ0aWNhbFNjcm9sbGluZyIsImNvbnRlbnRXaWR0aCIsInN0cmV0Y2giLCJDb21tb25IZWxwZXIiLCJpc0Rlc2t0b3AiLCJiZWdpbkJ1dHRvbiIsIkJ1dHRvbiIsInByZXNzIiwiZW5hYmxlZCIsInBhcnRzIiwicGF0aCIsImZvcm1hdHRlciIsImZvcm1hdEludml0ZUJ1dHRvbiIsImVuZEJ1dHRvbiIsIndpZHRoIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJzaG93Q2xvc2VCdXR0b24iLCJnZXRNYW5hZ2VEaWFsb2dBZGRVc2VyU2VjdGlvbiIsImdldE1hbmFnZURpYWxvZ1VzZXJUYWJsZSIsImJpbmRFbGVtZW50IiwibW9kZWwiLCJnZXRNYW5hZ2VEaWFsb2dVc2VyVGFibGVDb2x1bW5zIiwiX0ZyYWdtZW50IiwidGVtcGxhdGUiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJsYWJlbCIsIlRleHQiLCJPYmplY3RTdGF0dXMiLCJzdGF0ZSIsImZvcm1hdFVzZXJTdGF0dXNDb2xvciIsImljb24iLCJyZW1vdmVVc2VyIiwidmlzaWJsZSIsInJvd3MiLCJ2aXNpYmxlUm93Q291bnQiLCJ2aXNpYmxlUm93Q291bnRNb2RlIiwic2VsZWN0aW9uTW9kZSIsImNvbHVtbnMiLCJGaWVsZCIsInZhbHVlIiwiYWRkaXRpb25hbFZhbHVlIiwiZGlzcGxheSIsInZhbHVlSGVscCIsInBsYWNlaG9sZGVyIiwiY2hhbmdlIiwiZGVwZW5kZW50cyIsIlZhbHVlSGVscCIsImRlbGVnYXRlIiwiZ2V0VmFsdWVIZWxwRGVsZWdhdGUiLCJ2YWxpZGF0ZUlucHV0IiwidHlwZWFoZWFkIiwiTURDUG9wb3ZlciIsIk1UYWJsZSIsImNhc2VTZW5zaXRpdmUiLCJ1c2VBc1ZhbHVlSGVscCIsImRpYWxvZyIsIk1EQ0RpYWxvZyIsIlZhbHVlU3RhdGUiLCJTdWNjZXNzIiwiV2FybmluZyIsIkluZm9ybWF0aW9uIiwibmJVc2VycyIsInNvbWUiLCJ0cmFuc2llbnQiLCJpdGVtIiwiZGVsZXRlVXNlcklEIiwiZmlsdGVyIiwicGFyYW1ldGVycyIsIiRzZWxlY3QiLCIkJGdyb3VwSWQiLCJpbnZpdGVkVXNlckxpc3QiLCJiaW5kTGlzdCIsImdldFBhdGgiLCJyZXF1ZXN0Q29udGV4dHMiLCJoZWFkZXJJbmZvIiwidGFyZ2V0RW50aXR5VHlwZSIsImFubm90YXRpb25zIiwiVUkiLCJIZWFkZXJJbmZvIiwic2hhcmVkSXRlbU5hbWUiLCJUaXRsZSIsImlzQW5ub3RhdGlvbk9mVHlwZSIsImlzUGF0aEFubm90YXRpb25FeHByZXNzaW9uIiwiVmFsdWUiLCJUeXBlTmFtZSIsImFjdGlvbk5hbWUiLCJ0YXJnZXRFbnRpdHlTZXQiLCJDb21tb24iLCJEcmFmdFJvb3QiLCJTaGFyZUFjdGlvbiIsImFjdGlvbiIsInJlc29sdmVQYXRoIiwidXNlclBhcmFtZXRlcnMiLCJwYXJhbSIsInBheWxvYWQiLCJwcm9wZXJ0eVBhdGgiLCJxdWFsaWZpZXJzIiwidmFsdWVIZWxwUXVhbGlmaWVyIiwiaXNBY3Rpb25QYXJhbWV0ZXJEaWFsb2ciLCJnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24iLCJwYXJhbXMiLCJ0aXRsZUV4cHJlc3Npb24iLCJmb3JtYXRSZXN1bHQiLCJjb2xsYWJvcmF0aW9uRm9ybWF0dGVyIiwiZ2V0Rm9ybWF0dGVkVGV4dCIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0SW52aXRlQnV0dG9uIiwic3JjIiwiX2dldE93bmVyIiwiZ2V0TWV0YU1vZGVsIiwiTW9kZWxIZWxwZXIiLCJpc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZCIsIml0ZW1zIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29sbGFib3JhdGlvbkRyYWZ0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgQWN0aW9uIGFzIFZvY2FidWxhcnlBY3Rpb24gfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQ29tbW9uX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhRmllbGQsIERhdGFGaWVsZFR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHsgVUlBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgZm9ybWF0UmVzdWx0LCBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IHR5cGUgeyBCYWNrZW5kVXNlciwgVXNlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9jb2xsYWJvcmF0aW9uL0NvbGxhYm9yYXRpb25Db21tb25cIjtcbmltcG9ydCB7XG5cdENvbGxhYm9yYXRpb25VdGlscyxcblx0VXNlckVkaXRpbmdTdGF0ZSxcblx0VXNlclN0YXR1cyxcblx0c2hhcmVPYmplY3Rcbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkNvbW1vblwiO1xuaW1wb3J0IGNvbGxhYm9yYXRpb25Gb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvQ29sbGFib3JhdGlvbkZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE1vZGVsQ29udGV4dCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCB7IGlzQW5ub3RhdGlvbk9mVHlwZSwgaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9UeXBlR3VhcmRzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQ29tbW9uSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL0NvbW1vbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgeyBWYWx1ZUhlbHBQYXlsb2FkIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvdmFsdWVoZWxwL1ZhbHVlTGlzdEhlbHBlclwiO1xuaW1wb3J0IEF2YXRhciBmcm9tIFwic2FwL20vQXZhdGFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IE1lc3NhZ2VUb2FzdCBmcm9tIFwic2FwL20vTWVzc2FnZVRvYXN0XCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBSZXNwb25zaXZlUG9wb3ZlciBmcm9tIFwic2FwL20vUmVzcG9uc2l2ZVBvcG92ZXJcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvbS9UYWJsZVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBWQm94IGZyb20gXCJzYXAvbS9WQm94XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBMaWIgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHsgVmFsdWVTdGF0ZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkJENoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC91aS9tZGMvRmllbGRcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwic2FwL3VpL21kYy9GaWVsZFwiO1xuaW1wb3J0IFZhbHVlSGVscCBmcm9tIFwic2FwL3VpL21kYy9WYWx1ZUhlbHBcIjtcbmltcG9ydCBNRENEaWFsb2cgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL0RpYWxvZ1wiO1xuaW1wb3J0IE1EQ1BvcG92ZXIgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL1BvcG92ZXJcIjtcbmltcG9ydCBNVGFibGUgZnJvbSBcInNhcC91aS9tZGMvdmFsdWVoZWxwL2NvbnRlbnQvTVRhYmxlXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBJbnRlZ2VyIGZyb20gXCJzYXAvdWkvbW9kZWwvdHlwZS9JbnRlZ2VyXCI7XG5pbXBvcnQgdHlwZSBHcmlkVGFibGVDb2x1bW4gZnJvbSBcInNhcC91aS90YWJsZS9Db2x1bW5cIjtcbmltcG9ydCB0eXBlIEdyaWRUYWJsZSBmcm9tIFwic2FwL3VpL3RhYmxlL1RhYmxlXCI7XG5cbmNvbnN0IFVTRVJTX1BBUkFNRVRFUlMgPSBcIlVzZXJzXCI7XG5jb25zdCBVU0VSX0lEX1BBUkFNRVRFUiA9IFwiVXNlcklEXCI7XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5jb21wb25lbnRzLkNvbGxhYm9yYXRpb25EcmFmdFwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sbGFib3JhdGlvbkRyYWZ0IGV4dGVuZHMgQnVpbGRpbmdCbG9jayB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIsIHJlcXVpcmVkOiB0cnVlIH0pXG5cdHB1YmxpYyBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdHB1YmxpYyBpZD86IHN0cmluZztcblxuXHRwcml2YXRlIGNvbnRleHRPYmplY3Q/OiBEYXRhTW9kZWxPYmplY3RQYXRoPEVudGl0eVNldD47XG5cblx0cHJpdmF0ZSB1c2VyRGV0YWlsc1BvcG92ZXI/OiBSZXNwb25zaXZlUG9wb3ZlcjtcblxuXHRwcml2YXRlIG1hbmFnZURpYWxvZz86IERpYWxvZztcblxuXHRwcml2YXRlIG1hbmFnZURpYWxvZ1VzZXJUYWJsZT86IFRhYmxlO1xuXG5cdHByaXZhdGUgc3RhdGljIEdyaWRUYWJsZUNvbnRyb2w6IHR5cGVvZiBHcmlkVGFibGU7XG5cblx0cHJpdmF0ZSBzdGF0aWMgR3JpZFRhYmxlQ29sdW1uQ29udHJvbDogdHlwZW9mIEdyaWRUYWJsZUNvbHVtbjtcblxuXHRwcml2YXRlIF9jb250cm9sTG9hZGVkPzogUHJvbWlzZUtlZXBlcjx2b2lkPjtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPENvbGxhYm9yYXRpb25EcmFmdD4sIG90aGVycz86IFByb3BlcnRpZXNPZjxDb2xsYWJvcmF0aW9uRHJhZnQ+KSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdH1cblxuXHRhc3luYyBvbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9jb250cm9sTG9hZGVkID0gbmV3IFByb21pc2VLZWVwZXIoKTtcblx0XHRpZiAoQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbnRyb2wgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0YXdhaXQgTGliLmxvYWQoeyBuYW1lOiBcInNhcC51aS50YWJsZVwiIH0pO1xuXHRcdFx0Y29uc3QgeyBkZWZhdWx0OiBHcmlkVGFibGVDb250cm9sIH0gPSBhd2FpdCBpbXBvcnQoXCJzYXAvdWkvdGFibGUvVGFibGVcIik7XG5cdFx0XHRDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29udHJvbCA9IEdyaWRUYWJsZUNvbnRyb2w7XG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IEdyaWRUYWJsZUNvbHVtbkNvbnRyb2wgfSA9IGF3YWl0IGltcG9ydChcInNhcC91aS90YWJsZS9Db2x1bW5cIik7XG5cdFx0XHRDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCA9IEdyaWRUYWJsZUNvbHVtbkNvbnRyb2w7XG5cdFx0fVxuXHRcdHRoaXMuY29udGV4dE9iamVjdCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCh0aGlzLmNvbnRleHRQYXRoKTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0XHR0aGlzLl9jb250cm9sTG9hZGVkLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBhbmQgc2hvdyB0aGUgdXNlciBkZXRhaWxzIHBvcG92ZXIuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0XG5cdCAqL1xuXHRzaG93Q29sbGFib3JhdGlvblVzZXJEZXRhaWxzID0gKGV2ZW50OiBFdmVudDx7fSwgQ29udHJvbD4pOiB2b2lkID0+IHtcblx0XHRjb25zdCBzb3VyY2UgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRpZiAoIXRoaXMudXNlckRldGFpbHNQb3BvdmVyKSB7XG5cdFx0XHR0aGlzLnVzZXJEZXRhaWxzUG9wb3ZlciA9IHRoaXMuZ2V0VXNlckRldGFpbHNQb3BvdmVyKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy51c2VyRGV0YWlsc1BvcG92ZXI/LnNldEJpbmRpbmdDb250ZXh0KHNvdXJjZS5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0LCBcImludGVybmFsXCIpO1xuXHRcdHRoaXMudXNlckRldGFpbHNQb3BvdmVyPy5vcGVuQnkoc291cmNlKTtcblx0fTtcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdXNlciBkZXRhaWxzIHBvcG92ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldFVzZXJEZXRhaWxzUG9wb3ZlcigpOiBSZXNwb25zaXZlUG9wb3ZlciB7XG5cdFx0Y29uc3QgdXNlckRldGFpbHNQb3BvdmVyID0gKFxuXHRcdFx0PFJlc3BvbnNpdmVQb3BvdmVyIHNob3dIZWFkZXI9e2ZhbHNlfSBjbGFzcz1cInNhcFVpQ29udGVudFBhZGRpbmdcIiBwbGFjZW1lbnQ9XCJCb3R0b21cIj5cblx0XHRcdFx0PEhCb3g+XG5cdFx0XHRcdFx0PEF2YXRhciBpbml0aWFscz1cIntpbnRlcm5hbD5pbml0aWFsc31cIiBkaXNwbGF5U2l6ZT1cIlNcIiBiYWNrZ3JvdW5kQ29sb3I9XCJ7aW50ZXJuYWw+Y29sb3J9XCIgLz5cblx0XHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQmVnaW5cIiB0ZXh0PVwie2ludGVybmFsPm5hbWV9XCIgLz5cblx0XHRcdFx0XHRcdDxMYWJlbCBjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQmVnaW5cIiB0ZXh0PVwie2ludGVybmFsPmlkfVwiIC8+XG5cdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHQ8L0hCb3g+XG5cdFx0XHQ8L1Jlc3BvbnNpdmVQb3BvdmVyPlxuXHRcdCk7XG5cblx0XHR0aGlzLmFkZERlcGVuZGVudCh1c2VyRGV0YWlsc1BvcG92ZXIpO1xuXG5cdFx0cmV0dXJuIHVzZXJEZXRhaWxzUG9wb3Zlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHRvIGNyZWF0ZSBhbmQgb3BlbiB0aGUgbWFuYWdlIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdG1hbmFnZUNvbGxhYm9yYXRpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0aWYgKCF0aGlzLm1hbmFnZURpYWxvZykge1xuXHRcdFx0dGhpcy5tYW5hZ2VEaWFsb2cgPSB0aGlzLmdldE1hbmFnZURpYWxvZygpO1xuXHRcdH1cblxuXHRcdHRoaXMucmVhZEludml0ZWRVc2VycygpO1xuXHRcdHRoaXMubWFuYWdlRGlhbG9nPy5vcGVuKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG1hbmFnZSBkaWFsb2cgdXNlZCB0byBpbnZpdGUgZnVydGhlciB1c2Vycy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0TWFuYWdlRGlhbG9nKCk6IERpYWxvZyB7XG5cdFx0Y29uc3QgbWFuYWdlRGlhbG9nID0gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5nZXRJbnZpdGF0aW9uRGlhbG9nVGl0bGVFeHBCaW5kaW5nKCl9XG5cdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9XCJGYWxzZVwiXG5cdFx0XHRcdHZlcnRpY2FsU2Nyb2xsaW5nPVwiRmFsc2VcIlxuXHRcdFx0XHRjb250ZW50V2lkdGg9XCIzNWVtXCJcblx0XHRcdFx0c3RyZXRjaD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCJmYWxzZVwiIDogXCJ0cnVlXCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YmVnaW5CdXR0b246IChcblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fRElBTE9HX0NPTkZJUk1BVElPTlwiKX1cblx0XHRcdFx0XHRcdFx0cHJlc3M9e3RoaXMuaW52aXRlVXNlcn1cblx0XHRcdFx0XHRcdFx0dHlwZT1cIkVtcGhhc2l6ZWRcIlxuXHRcdFx0XHRcdFx0XHRlbmFibGVkPXt7XG5cdFx0XHRcdFx0XHRcdFx0cGFydHM6IFt7IHBhdGg6IFwiaW50ZXJuYWw+aW52aXRlZFVzZXJzL2xlbmd0aFwiIH0sIHsgcGF0aDogXCJpbnRlcm5hbD5pbnZpdGVkVXNlcnNcIiB9XSxcblx0XHRcdFx0XHRcdFx0XHRmb3JtYXR0ZXI6IHRoaXMuZm9ybWF0SW52aXRlQnV0dG9uXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0ZW5kQnV0dG9uOiAoXG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9JTlZJVEFUSU9OX0RJQUxPR19DQU5DRUxcIil9XG5cdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLmNsb3NlTWFuYWdlRGlhbG9nfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDxWQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpblwiPlxuXHRcdFx0XHRcdFx0XHQ8VkJveCB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8TWVzc2FnZVN0cmlwXG5cdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfSU5WSVRBVElPTl9NRVNTQUdFU1RSSVBcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlPVwiSW5mb3JtYXRpb25cIlxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaU1lZGl1bU1hcmdpbkJvdHRvbVwiXG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdFx0XHQ8TGFiZWwgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fSU5QVVRfTEFCRUxcIil9IHJlcXVpcmVkPXt0cnVlfSAvPlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRNYW5hZ2VEaWFsb2dBZGRVc2VyU2VjdGlvbigpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRNYW5hZ2VEaWFsb2dVc2VyVGFibGUoKX1cblx0XHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpO1xuXG5cdFx0dGhpcy5hZGREZXBlbmRlbnQobWFuYWdlRGlhbG9nKTtcblx0XHRtYW5hZ2VEaWFsb2cuYmluZEVsZW1lbnQoe1xuXHRcdFx0bW9kZWw6IFwiaW50ZXJuYWxcIixcblx0XHRcdHBhdGg6IFwiY29sbGFib3JhdGlvblwiXG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gbWFuYWdlRGlhbG9nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybmluZyB0aGUgdGFibGUgY29sdW1uIHdpdGggdGhlIGxpc3Qgb2YgaW52aXRlZCB1c2Vycy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0TWFuYWdlRGlhbG9nVXNlclRhYmxlQ29sdW1ucygpOiBHcmlkVGFibGVDb2x1bW5bXSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDw+XG5cdFx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCB3aWR0aD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCIxMCVcIiA6IFwiM2VtXCJ9PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHR0ZW1wbGF0ZTogKFxuXHRcdFx0XHRcdFx0XHQ8SEJveCBhbGlnbkl0ZW1zPVwiQ2VudGVyXCIganVzdGlmeUNvbnRlbnQ9XCJTcGFjZUJldHdlZW5cIj5cblx0XHRcdFx0XHRcdFx0XHQ8QXZhdGFyIGRpc3BsYXlTaXplPVwiWFNcIiBiYWNrZ3JvdW5kQ29sb3I9XCJ7aW50ZXJuYWw+Y29sb3J9XCIgaW5pdGlhbHM9XCJ7aW50ZXJuYWw+aW5pdGlhbHN9XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbHVtbkNvbnRyb2w+XG5cdFx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCB3aWR0aD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCIzNSVcIiA6IFwiNmVtXCJ9PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYWJlbDogPFRleHQgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fVEFCTEVfVVNFUl9DT0xVTU5cIil9IC8+LFxuXHRcdFx0XHRcdFx0dGVtcGxhdGU6IDxUZXh0IHRleHQ9XCJ7aW50ZXJuYWw+bmFtZX1cIiAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbHVtbkNvbnRyb2w+XG5cdFx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCB3aWR0aD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCI0NiVcIiA6IFwiOWVtXCJ9PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYWJlbDogPFRleHQgdGV4dD17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fVEFCTEVfVVNFUl9TVEFUVVNfQ09MVU1OXCIpfSAvPixcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiAoXG5cdFx0XHRcdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZT17eyBwYXRoOiBcImludGVybmFsPnN0YXR1c1wiLCBmb3JtYXR0ZXI6IHRoaXMuZm9ybWF0VXNlclN0YXR1c0NvbG9yIH19XG5cdFx0XHRcdFx0XHRcdFx0dGV4dD17eyBwYXRoOiBcImludGVybmFsPnN0YXR1c1wiLCBmb3JtYXR0ZXI6IHRoaXMuZm9ybWF0VXNlclN0YXR1cyB9fVxuXHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbHVtbkNvbnRyb2w+XG5cdFx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29sdW1uQ29udHJvbCB3aWR0aD17Q29tbW9uSGVscGVyLmlzRGVza3RvcCgpID8gXCI4JVwiIDogXCIzZW1cIn0+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdHRlbXBsYXRlOiAoXG5cdFx0XHRcdFx0XHRcdDxIQm94PlxuXHRcdFx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0XHRcdGljb249XCJzYXAtaWNvbjovL2RlY2xpbmVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLnJlbW92ZVVzZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPVwiez0gISEke2ludGVybmFsPnRyYW5zaWVudH0gfVwiXG5cdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbHVtbkNvbnRyb2w+XG5cdFx0XHQ8Lz5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRhYmxlIHdpdGggdGhlIGxpc3Qgb2YgaW52aXRlZCB1c2Vycy5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0TWFuYWdlRGlhbG9nVXNlclRhYmxlKCk6IFRhYmxlIHwgdW5kZWZpbmVkIHtcblx0XHR0aGlzLm1hbmFnZURpYWxvZ1VzZXJUYWJsZSA9IChcblx0XHRcdDxDb2xsYWJvcmF0aW9uRHJhZnQuR3JpZFRhYmxlQ29udHJvbFxuXHRcdFx0XHR3aWR0aD1cIjEwMCVcIlxuXHRcdFx0XHRyb3dzPXt7IHBhdGg6IFwiaW50ZXJuYWw+aW52aXRlZFVzZXJzXCIgfX1cblx0XHRcdFx0dmlzaWJsZVJvd0NvdW50PXtDb21tb25IZWxwZXIuaXNEZXNrdG9wKCkgPyBcIjVcIiA6IFwiM1wifVxuXHRcdFx0XHR2aXNpYmxlUm93Q291bnRNb2RlPVwiRml4ZWRcIlxuXHRcdFx0XHRzZWxlY3Rpb25Nb2RlPVwiTm9uZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y29sdW1uczogdGhpcy5nZXRNYW5hZ2VEaWFsb2dVc2VyVGFibGVDb2x1bW5zKClcblx0XHRcdFx0fX1cblx0XHRcdDwvQ29sbGFib3JhdGlvbkRyYWZ0LkdyaWRUYWJsZUNvbnRyb2w+XG5cdFx0KTtcblx0XHRyZXR1cm4gdGhpcy5tYW5hZ2VEaWFsb2dVc2VyVGFibGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgc2VjdGlvbiBvbiB0aGUgZGlhbG9nIHJlbGF0ZWQgdG8gdGhlIHVzZXIgZmllbGQuXG5cdCAqIEByZXR1cm5zIFRoZSBjb250cm9sIHRyZWVcblx0ICovXG5cdGdldE1hbmFnZURpYWxvZ0FkZFVzZXJTZWN0aW9uKCk6IEhCb3gge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8SEJveCBjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQm90dG9tXCIgd2lkdGg9XCIxMDAlXCI+XG5cdFx0XHRcdDxGaWVsZFxuXHRcdFx0XHRcdHZhbHVlPVwie2ludGVybmFsPlVzZXJJRH1cIlxuXHRcdFx0XHRcdGFkZGl0aW9uYWxWYWx1ZT1cIntpbnRlcm5hbD5Vc2VyRGVzY3JpcHRpb259XCJcblx0XHRcdFx0XHRkaXNwbGF5PVwiRGVzY3JpcHRpb25WYWx1ZVwiXG5cdFx0XHRcdFx0d2lkdGg9XCIyMGVtXCJcblx0XHRcdFx0XHRyZXF1aXJlZD17dHJ1ZX1cblx0XHRcdFx0XHR2YWx1ZUhlbHA9XCJ1c2VyVmFsdWVIZWxwXCJcblx0XHRcdFx0XHRwbGFjZWhvbGRlcj17dGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fSU5QVVRfUExBQ0VIT0xERVJcIil9XG5cdFx0XHRcdFx0Y2hhbmdlPXt0aGlzLmFkZFVzZXJGaWVsZENoYW5nZWR9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHQ8VmFsdWVIZWxwIGlkPVwidXNlclZhbHVlSGVscFwiIGRlbGVnYXRlPXt0aGlzLmdldFZhbHVlSGVscERlbGVnYXRlKCl9IHZhbGlkYXRlSW5wdXQ9e3RydWV9PlxuXHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlYWhlYWQ6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0PE1EQ1BvcG92ZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0PE1UYWJsZSBjYXNlU2Vuc2l0aXZlPVwidHJ1ZVwiIHVzZUFzVmFsdWVIZWxwPVwiZmFsc2VcIiAvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8L01EQ1BvcG92ZXI+XG5cdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGlhbG9nOiA8TURDRGlhbG9nIC8+XG5cdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0PC9WYWx1ZUhlbHA+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9GaWVsZD5cblx0XHRcdDwvSEJveD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZvcm1hdHRlciB0byBzZXQgdGhlIHVzZXIgc3RhdHVzIGRlcGVuZGluZyBvbiB0aGUgZWRpdGluZyBzdGF0dXMuXG5cdCAqIEBwYXJhbSB1c2VyU3RhdHVzIFRoZSBlZGl0aW5nIHN0YXR1cyBvZiB0aGUgdXNlclxuXHQgKiBAcmV0dXJucyBUaGUgdXNlciBzdGF0dXNcblx0ICovXG5cdGZvcm1hdFVzZXJTdGF0dXMgPSAodXNlclN0YXR1czogVXNlclN0YXR1cyk6IHN0cmluZyA9PiB7XG5cdFx0c3dpdGNoICh1c2VyU3RhdHVzKSB7XG5cdFx0XHRjYXNlIFVzZXJTdGF0dXMuQ3VycmVudGx5RWRpdGluZzpcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9VU0VSX0NVUlJFTlRMWV9FRElUSU5HXCIpO1xuXHRcdFx0Y2FzZSBVc2VyU3RhdHVzLkNoYW5nZXNNYWRlOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX1VTRVJfQ0hBTkdFU19NQURFXCIpO1xuXHRcdFx0Y2FzZSBVc2VyU3RhdHVzLk5vQ2hhbmdlc01hZGU6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfVVNFUl9OT19DSEFOR0VTX01BREVcIik7XG5cdFx0XHRjYXNlIFVzZXJTdGF0dXMuTm90WWV0SW52aXRlZDpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfVVNFUl9OT1RfWUVUX0lOVklURURcIik7XG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBGb3JtYXR0ZXIgdG8gc2V0IHRoZSB1c2VyIGNvbG9yIGRlcGVuZGluZyBvbiB0aGUgZWRpdGluZyBzdGF0dXMuXG5cdCAqIEBwYXJhbSB1c2VyU3RhdHVzIFRoZSBlZGl0aW5nIHN0YXR1cyBvZiB0aGUgdXNlclxuXHQgKiBAcmV0dXJucyBUaGUgdXNlciBzdGF0dXMgY29sb3Jcblx0ICovXG5cdGZvcm1hdFVzZXJTdGF0dXNDb2xvcih1c2VyU3RhdHVzOiBVc2VyU3RhdHVzKTogVmFsdWVTdGF0ZSB7XG5cdFx0c3dpdGNoICh1c2VyU3RhdHVzKSB7XG5cdFx0XHRjYXNlIFVzZXJTdGF0dXMuQ3VycmVudGx5RWRpdGluZzpcblx0XHRcdFx0cmV0dXJuIFZhbHVlU3RhdGUuU3VjY2Vzcztcblx0XHRcdGNhc2UgVXNlclN0YXR1cy5DaGFuZ2VzTWFkZTpcblx0XHRcdFx0cmV0dXJuIFZhbHVlU3RhdGUuV2FybmluZztcblx0XHRcdGNhc2UgVXNlclN0YXR1cy5Ob0NoYW5nZXNNYWRlOlxuXHRcdFx0Y2FzZSBVc2VyU3RhdHVzLk5vdFlldEludml0ZWQ6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gVmFsdWVTdGF0ZS5JbmZvcm1hdGlvbjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRm9ybWF0dGVyIHRvIGVuYWJsZSB0aGUgaW52aXRlIGJ1dHRvbiBkZXBlbmRpbmcgb24gdGhlIGludml0ZWQgdXNlcnMgc3RhdHVzLlxuXHQgKiBAcGFyYW0gbmJVc2VycyBOdW1iZXIgb2YgdXNlcnNcblx0ICogQHBhcmFtIGludml0ZWRVc2VycyBMaXN0IG9mIHRoZSBpbnZpdGVkIHVzZXJzXG5cdCAqIEByZXR1cm5zIFRydWUgb3IgRmFsc2Vcblx0ICovXG5cdGZvcm1hdEludml0ZUJ1dHRvbihuYlVzZXJzOiBJbnRlZ2VyIHwgdW5kZWZpbmVkLCBpbnZpdGVkVXNlcnM6IFVzZXJbXSB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuXHRcdGlmICghbmJVc2Vycykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gISFpbnZpdGVkVXNlcnM/LnNvbWUoKHVzZXIpID0+IHVzZXIuc3RhdHVzID09PSAwKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgdGhlIGFkZGVkIHVzZXIgdG8gdGhlIGxpc3Qgb2YgaW52aXRlZCB1c2Vycy5cblx0ICogQHBhcmFtIHVzZXJJbnB1dCBUaGUgdXNlciB0byBiZSBpbnZpdGVkXG5cdCAqIEBwYXJhbSBpbnZpdGVkVXNlcnMgVGhlIHVzZXJzIGFscmVhZHkgaW52aXRlZFxuXHQgKiBAcGFyYW0gbmV3VXNlciBUaGUgdXNlciB0byBiZSBpbnZpdGVkXG5cdCAqL1xuXHRhZGRVc2VyKHVzZXJJbnB1dDogRmllbGQsIGludml0ZWRVc2VyczogVXNlcltdLCBuZXdVc2VyOiBVc2VyKTogdm9pZCB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB1c2VySW5wdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRjb25zdCBhY3RpdmVVc2VycyA9ICh1c2VySW5wdXQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWwpLmdldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpb24vYWN0aXZlVXNlcnNcIik7XG5cdFx0bmV3VXNlci5uYW1lID0gbmV3VXNlci5uYW1lIHx8IG5ld1VzZXIuaWQ7XG5cdFx0bmV3VXNlci5pbml0aWFscyA9IENvbGxhYm9yYXRpb25VdGlscy5mb3JtYXRJbml0aWFscyhuZXdVc2VyLm5hbWUpO1xuXHRcdG5ld1VzZXIuY29sb3IgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VXNlckNvbG9yKG5ld1VzZXIuaWQsIGFjdGl2ZVVzZXJzLCBpbnZpdGVkVXNlcnMpO1xuXHRcdG5ld1VzZXIudHJhbnNpZW50ID0gdHJ1ZTtcblx0XHRuZXdVc2VyLnN0YXR1cyA9IFVzZXJTdGF0dXMuTm90WWV0SW52aXRlZDtcblx0XHRpbnZpdGVkVXNlcnMucHVzaChuZXdVc2VyKTtcblx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImludml0ZWRVc2Vyc1wiLCBpbnZpdGVkVXNlcnMpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiVXNlcklEXCIsIFwiXCIpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiVXNlckRlc2NyaXB0aW9uXCIsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHZhbHVlIHN0YXRlIG9mIHRoZSB1c2VyIGZpZWxkIHdoZW5ldmVyIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgb2JqZWN0IG9mIHRoZSB1c2VyIGlucHV0XG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCBvbmNlIHRoZSB2YWx1ZSBzdGF0ZSB3YXMgc2V0LlxuXHQgKi9cblx0YWRkVXNlckZpZWxkQ2hhbmdlZCA9IGFzeW5jIChldmVudDogRmllbGQkQ2hhbmdlRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCB1c2VySW5wdXQgPSBldmVudC5nZXRTb3VyY2UoKTtcblx0XHRyZXR1cm4gZXZlbnRcblx0XHRcdC5nZXRQYXJhbWV0ZXIoXCJwcm9taXNlXCIpXG5cdFx0XHQ/LnRoZW4oXG5cdFx0XHRcdGZ1bmN0aW9uICh0aGlzOiBDb2xsYWJvcmF0aW9uRHJhZnQsIG5ld1VzZXJJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHQgPSB1c2VySW5wdXQuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdFx0XHRjb25zdCBpbnZpdGVkVXNlcnM6IFVzZXJbXSA9IGludGVybmFsTW9kZWxDb250ZXh0LmdldFByb3BlcnR5KFwiaW52aXRlZFVzZXJzXCIpIHx8IFtdO1xuXHRcdFx0XHRcdGNvbnN0IG5ld1VzZXI6IFVzZXIgPSB7XG5cdFx0XHRcdFx0XHRpZDogaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiVXNlcklEXCIpLFxuXHRcdFx0XHRcdFx0bmFtZTogaW50ZXJuYWxNb2RlbENvbnRleHQ/LmdldFByb3BlcnR5KFwiVXNlckRlc2NyaXB0aW9uXCIpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRpZiAoaW52aXRlZFVzZXJzLmZpbmRJbmRleCgodXNlcikgPT4gdXNlci5pZCA9PT0gbmV3VXNlcklkKSA+IC0xKSB7XG5cdFx0XHRcdFx0XHR1c2VySW5wdXQuc2V0VmFsdWVTdGF0ZShcIkVycm9yXCIpO1xuXHRcdFx0XHRcdFx0dXNlcklucHV0LnNldFZhbHVlU3RhdGVUZXh0KHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9JTlZJVEFUSU9OX1VTRVJfRVJST1JcIikpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0XHQhKFxuXHRcdFx0XHRcdFx0XHRpbnZpdGVkVXNlcnMuZmluZEluZGV4KCh1c2VyKSA9PiB1c2VyLmlkID09PSBuZXdVc2VyLmlkKSA+IC0xIHx8XG5cdFx0XHRcdFx0XHRcdChuZXdVc2VyLmlkID09PSBuZXdVc2VyLm5hbWUgJiYgbmV3VXNlci5pZCA9PT0gXCJcIilcblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdHRoaXMuYWRkVXNlcih1c2VySW5wdXQsIGludml0ZWRVc2VycywgbmV3VXNlcik7XG5cdFx0XHRcdFx0XHR1c2VySW5wdXQuc2V0VmFsdWVTdGF0ZShcIk5vbmVcIik7XG5cdFx0XHRcdFx0XHR1c2VySW5wdXQuc2V0VmFsdWVTdGF0ZVRleHQoXCJcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LmJpbmQodGhpcylcblx0XHRcdClcblx0XHRcdC5jYXRjaChcblx0XHRcdFx0ZnVuY3Rpb24gKHRoaXM6IENvbGxhYm9yYXRpb25EcmFmdCk6IHZvaWQge1xuXHRcdFx0XHRcdHVzZXJJbnB1dC5zZXRWYWx1ZVN0YXRlKFwiV2FybmluZ1wiKTtcblx0XHRcdFx0XHR1c2VySW5wdXQuc2V0VmFsdWVTdGF0ZVRleHQodGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX0lOVklUQVRJT05fVVNFUl9OT1RfRk9VTkRcIikpO1xuXHRcdFx0XHR9LmJpbmQodGhpcylcblx0XHRcdCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgdG8gcmVtb3ZlIGEgdXNlciBmcm9tIHRoZSBsaXN0IG9mIGludml0ZWQgdXNlci5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCBvYmplY3Qgb2YgdGhlIHJlbW92ZSBidXR0b25cblx0ICovXG5cdHJlbW92ZVVzZXIoZXZlbnQ6IEV2ZW50PHt9LCBCdXR0b24+KTogdm9pZCB7XG5cdFx0Y29uc3QgaXRlbSA9IGV2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0ID0gaXRlbT8uZ2V0QmluZGluZ0NvbnRleHQoXCJwYWdlSW50ZXJuYWxcIik7XG5cdFx0Y29uc3QgZGVsZXRlVXNlcklEID0gaXRlbT8uZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UHJvcGVydHkoXCJpZFwiKTtcblx0XHRsZXQgaW52aXRlZFVzZXJzOiBVc2VyW10gPSBpbnRlcm5hbE1vZGVsQ29udGV4dD8uZ2V0UHJvcGVydHkoXCJjb2xsYWJvcmF0aW9uL2ludml0ZWRVc2Vyc1wiKTtcblx0XHRpbnZpdGVkVXNlcnMgPSBpbnZpdGVkVXNlcnMuZmlsdGVyKCh1c2VyKSA9PiB1c2VyLmlkICE9PSBkZWxldGVVc2VySUQpO1xuXHRcdGludGVybmFsTW9kZWxDb250ZXh0Py5zZXRQcm9wZXJ0eShcImNvbGxhYm9yYXRpb24vaW52aXRlZFVzZXJzXCIsIGludml0ZWRVc2Vycyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsbCB0aGUgc2hhcmUgYWN0aW9uIHRvIHVwZGF0ZSB0aGUgbGlzdCBvZiBpbnZpdGVkIHVzZXJzLlxuXHQgKiBAcGFyYW0gZXZlbnQgVGhlIGV2ZW50IG9iamVjdCBvZiB0aGUgaW52aXRlIGJ1dHRvblxuXHQgKi9cblx0aW52aXRlVXNlciA9IGFzeW5jIChldmVudDogRXZlbnQ8e30sIEJ1dHRvbj4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCB1c2VyczogQmFja2VuZFVzZXJbXSA9IFtdLFxuXHRcdFx0bmV3bHlJbnZpdGVkVXNlcnM6IHN0cmluZ1tdID0gW107XG5cdFx0Y29uc3Qgc291cmNlID0gZXZlbnQuZ2V0U291cmNlKCk7XG5cdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBzb3VyY2UuZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0O1xuXHRcdGNvbnN0IGNvbnRleHRzID0gKHRoaXMubWFuYWdlRGlhbG9nVXNlclRhYmxlPy5nZXRCaW5kaW5nKFwicm93c1wiKSBhcyBPRGF0YUxpc3RCaW5kaW5nKS5nZXRDb250ZXh0cygpO1xuXHRcdGNvbnRleHRzLmZvckVhY2goZnVuY3Rpb24gKGNvbnRleHQpIHtcblx0XHRcdHVzZXJzLnB1c2goe1xuXHRcdFx0XHRVc2VySUQ6IGNvbnRleHQuZ2V0UHJvcGVydHkoXCJpZFwiKSxcblx0XHRcdFx0VXNlckFjY2Vzc1JvbGU6IFwiT1wiIC8vIEZvciBub3cgYWNjb3JkaW5nIHRvIFVYIGV2ZXJ5IHVzZXIgcmV0cmlldmVzIHRoZSBvd25lciByb2xlXG5cdFx0XHR9KTtcblx0XHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwic3RhdHVzXCIpID09PSBVc2VyU3RhdHVzLk5vdFlldEludml0ZWQpIHtcblx0XHRcdFx0bmV3bHlJbnZpdGVkVXNlcnMucHVzaChjb250ZXh0LmdldFByb3BlcnR5KFwiaWRcIikpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIFdlIHJlcXVlc3QgdGhlIG51bWJlciBvZiBpbnZpdGVkIHVzZXJzIGFmdGVyIHRoZSBzaGFyZSBhY3Rpb24gdG8gc2VlIGhvdyBtYW55IHVzZXJzIHdlcmUgcmVhbGx5IGludml0ZWRcblx0XHRcdGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChbc2hhcmVPYmplY3QoYmluZGluZ0NvbnRleHQsIHVzZXJzKSwgdGhpcy5yZXF1ZXN0SW52aXRlZFVzZXJzSW5EcmFmdCgpXSk7XG5cdFx0XHRjb25zdCBuZXdVc2VyczogQ29udGV4dFtdID0gW107XG5cdFx0XHRyZXN1bHRzWzFdLmZvckVhY2goKGludml0ZWRVc2VyKSA9PiB7XG5cdFx0XHRcdGlmIChuZXdseUludml0ZWRVc2Vycy5pbmNsdWRlcyhpbnZpdGVkVXNlci5nZXRQcm9wZXJ0eShcIlVzZXJJRFwiKSkpIHtcblx0XHRcdFx0XHRuZXdVc2Vycy5wdXNoKGludml0ZWRVc2VyKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25zdCBtZXNzYWdlSGFuZGxlciA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKSEubWVzc2FnZUhhbmRsZXI7XG5cdFx0XHRhd2FpdCBtZXNzYWdlSGFuZGxlci5zaG93TWVzc2FnZURpYWxvZygpO1xuXG5cdFx0XHRzd2l0Y2ggKG5ld1VzZXJzLmxlbmd0aCkge1xuXHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXG5cdFx0XHRcdFx0XHR0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfSU5WSVRBVElPTl9TVUNDRVNTX1RPQVNUX05PX1VTRVJcIiwgW1xuXHRcdFx0XHRcdFx0XHR0aGlzLmdldFNoYXJlZEl0ZW1OYW1lKGJpbmRpbmdDb250ZXh0KVxuXHRcdFx0XHRcdFx0XSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0TWVzc2FnZVRvYXN0LnNob3coXG5cdFx0XHRcdFx0XHR0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfSU5WSVRBVElPTl9TVUNDRVNTX1RPQVNUXCIsIFt0aGlzLmdldFNoYXJlZEl0ZW1OYW1lKGJpbmRpbmdDb250ZXh0KV0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyhcblx0XHRcdFx0XHRcdHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9JTlZJVEFUSU9OX1NVQ0NFU1NfVE9BU1RfUExVUkFMXCIsIFtcblx0XHRcdFx0XHRcdFx0bmV3VXNlcnMubGVuZ3RoLnRvU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdHRoaXMuZ2V0U2hhcmVkSXRlbU5hbWUoYmluZGluZ0NvbnRleHQpXG5cdFx0XHRcdFx0XHRdKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRNZXNzYWdlVG9hc3Quc2hvdyh0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiQ19DT0xMQUJPUkFUSU9ORFJBRlRfSU5WSVRBVElPTl9GQUlMRURfVE9BU1RcIikpO1xuXHRcdH1cblx0XHR0aGlzLmNsb3NlTWFuYWdlRGlhbG9nKCk7XG5cdH07XG5cblx0LyoqXG5cdCAqIEZldGNoZXMgdGhlIGxpc3Qgb2YgdXNlcnMgdGhhdCBhcmUgYWxyZWFkeSBpbnZpdGVkIGluIHRoZSBkcmFmdC5cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aXRoIHRoZSBsaXN0IG9mIHVzZXIgY29udGV4dHMuXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJlcXVlc3RJbnZpdGVkVXNlcnNJbkRyYWZ0KCk6IFByb21pc2U8Q29udGV4dFtdPiB7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG5cdFx0Y29uc3QgcGFyYW1ldGVycyA9IHtcblx0XHRcdCRzZWxlY3Q6IFwiVXNlcklELFVzZXJEZXNjcmlwdGlvbixVc2VyRWRpdGluZ1N0YXRlXCIsXG5cdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uV29ya2Vyc1wiXG5cdFx0fTtcblx0XHRjb25zdCBpbnZpdGVkVXNlckxpc3QgPSBtb2RlbD8uYmluZExpc3QoXG5cdFx0XHRgJHt0aGlzLmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKX0vRHJhZnRBZG1pbmlzdHJhdGl2ZURhdGEvRHJhZnRBZG1pbmlzdHJhdGl2ZVVzZXJgLFxuXHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0W10sXG5cdFx0XHRbXSxcblx0XHRcdHBhcmFtZXRlcnNcblx0XHQpIGFzIE9EYXRhTGlzdEJpbmRpbmc7XG5cblx0XHQvLyBmb3Igbm93IHdlIHNldCBhIGxpbWl0IHRvIDEwMC4gdGhlcmUgc2hvdWxkbid0IGJlIG1vcmUgdGhhbiBhIGZld1xuXHRcdHJldHVybiBpbnZpdGVkVXNlckxpc3QucmVxdWVzdENvbnRleHRzKDAsIDEwMCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVhZHMgdGhlIGN1cnJlbnRseSBpbnZpdGVkIHVzZXIgYW5kIHN0b3JlIGl0IGluIHRoZSBpbnRlcm5hbCBtb2RlbC5cblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIG9uY2UgdGhlIHVzZXJzIGFyZSByZWFkLlxuXHQgKi9cblx0cmVhZEludml0ZWRVc2VycyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRjb25zdCBpbnRlcm5hbE1vZGVsQ29udGV4dCA9IHRoaXMuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VXNlckxpc3QgPSBhd2FpdCB0aGlzLnJlcXVlc3RJbnZpdGVkVXNlcnNJbkRyYWZ0KCk7XG5cdFx0XHRjb25zdCBpbnZpdGVkVXNlcnM6IFVzZXJbXSA9IFtdO1xuXHRcdFx0Y29uc3QgYWN0aXZlVXNlcnMgPSB0aGlzLmdldE1vZGVsKFwiaW50ZXJuYWxcIik/LmdldFByb3BlcnR5KFwiL2NvbGxhYm9yYXRpb24vYWN0aXZlVXNlcnNcIikgfHwgW107XG5cdFx0XHRjb25zdCBtZSA9IENvbGxhYm9yYXRpb25VdGlscy5nZXRNZSh0aGlzLmdldEFwcENvbXBvbmVudCgpISk7XG5cdFx0XHRsZXQgdXNlclN0YXR1czogVXNlclN0YXR1cztcblx0XHRcdGlmIChjdXJyZW50VXNlckxpc3QubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjdXJyZW50VXNlckxpc3QuZm9yRWFjaCgodXNlckNvbnRleHQpID0+IHtcblx0XHRcdFx0XHRjb25zdCB1c2VyRGF0YSA9IHVzZXJDb250ZXh0LmdldE9iamVjdCgpIGFzIEJhY2tlbmRVc2VyO1xuXHRcdFx0XHRcdGNvbnN0IGlzTWU6IGJvb2xlYW4gPSBtZT8uaWQgPT09IHVzZXJEYXRhLlVzZXJJRDtcblx0XHRcdFx0XHRjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVVzZXJzLmZpbmQoKHU6IFVzZXIpID0+IHUuaWQgPT09IHVzZXJEYXRhLlVzZXJJRCk7XG5cdFx0XHRcdFx0bGV0IHVzZXJEZXNjcmlwdGlvbiA9IHVzZXJEYXRhLlVzZXJEZXNjcmlwdGlvbiB8fCB1c2VyRGF0YS5Vc2VySUQ7XG5cdFx0XHRcdFx0Y29uc3QgaW5pdGlhbHMgPSBDb2xsYWJvcmF0aW9uVXRpbHMuZm9ybWF0SW5pdGlhbHModXNlckRlc2NyaXB0aW9uKTtcblx0XHRcdFx0XHR1c2VyRGVzY3JpcHRpb24gPSBpc01lID8gYCR7Q29sbGFib3JhdGlvblV0aWxzLmdldFRleHQoXCJDX0NPTExBQk9SQVRJT05EUkFGVF9NRVwiLCB1c2VyRGVzY3JpcHRpb24pfWAgOiB1c2VyRGVzY3JpcHRpb247XG5cdFx0XHRcdFx0aWYgKGlzQWN0aXZlKSB7XG5cdFx0XHRcdFx0XHR1c2VyU3RhdHVzID0gVXNlclN0YXR1cy5DdXJyZW50bHlFZGl0aW5nO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAodXNlckRhdGEuVXNlckVkaXRpbmdTdGF0ZSA9PT0gVXNlckVkaXRpbmdTdGF0ZS5JblByb2dyZXNzKSB7XG5cdFx0XHRcdFx0XHR1c2VyU3RhdHVzID0gVXNlclN0YXR1cy5DaGFuZ2VzTWFkZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dXNlclN0YXR1cyA9IFVzZXJTdGF0dXMuTm9DaGFuZ2VzTWFkZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjb25zdCB1c2VyOiBVc2VyID0ge1xuXHRcdFx0XHRcdFx0aWQ6IHVzZXJEYXRhLlVzZXJJRCxcblx0XHRcdFx0XHRcdG5hbWU6IHVzZXJEZXNjcmlwdGlvbixcblx0XHRcdFx0XHRcdHN0YXR1czogdXNlclN0YXR1cyxcblx0XHRcdFx0XHRcdGNvbG9yOiBDb2xsYWJvcmF0aW9uVXRpbHMuZ2V0VXNlckNvbG9yKHVzZXJEYXRhLlVzZXJJRCwgYWN0aXZlVXNlcnMsIGludml0ZWRVc2VycyksXG5cdFx0XHRcdFx0XHRpbml0aWFsczogaW5pdGlhbHMsXG5cdFx0XHRcdFx0XHRtZTogaXNNZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0aW52aXRlZFVzZXJzLnB1c2godXNlcik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9ub3QgeWV0IHNoYXJlZCwganVzdCBhZGQgbWVcblx0XHRcdFx0aW52aXRlZFVzZXJzLnB1c2gobWUpO1xuXHRcdFx0fVxuXHRcdFx0aW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJjb2xsYWJvcmF0aW9uL1VzZXJJRFwiLCBcIlwiKTtcblx0XHRcdGludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiY29sbGFib3JhdGlvbi9Vc2VyRGVzY3JpcHRpb25cIiwgXCJcIik7XG5cdFx0XHRpbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImNvbGxhYm9yYXRpb24vaW52aXRlZFVzZXJzXCIsIGludml0ZWRVc2Vycyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TWVzc2FnZVRvYXN0LnNob3codGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIkNfQ09MTEFCT1JBVElPTkRSQUZUX1JFQURJTkdfVVNFUl9GQUlMRURcIikpO1xuXHRcdH1cblx0fTtcblxuXHQvKipcblx0ICogR2V0IHRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdG8gYmUgc2hhcmVkLlxuXHQgKiBAcGFyYW0gYmluZGluZ0NvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIHBhZ2UuXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBvYmplY3QgdG8gYmUgc2hhcmVkLlxuXHQgKi9cblx0Z2V0U2hhcmVkSXRlbU5hbWUoYmluZGluZ0NvbnRleHQ6IENvbnRleHQpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGhlYWRlckluZm8gPSB0aGlzLmNvbnRleHRPYmplY3Q/LnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckluZm87XG5cdFx0bGV0IHNoYXJlZEl0ZW1OYW1lID0gXCJcIjtcblx0XHRjb25zdCB0aXRsZSA9IGhlYWRlckluZm8/LlRpdGxlO1xuXHRcdGlmIChcblx0XHRcdHRpdGxlICYmXG5cdFx0XHRpc0Fubm90YXRpb25PZlR5cGU8RGF0YUZpZWxkVHlwZXM+KHRpdGxlLCBbXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZCxcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbixcblx0XHRcdFx0VUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEFjdGlvbkdyb3VwLFxuXHRcdFx0XHRVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGgsXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmwsXG5cdFx0XHRcdFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aFxuXHRcdFx0XSlcblx0XHQpIHtcblx0XHRcdHNoYXJlZEl0ZW1OYW1lID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odGl0bGUuVmFsdWUpID8gYmluZGluZ0NvbnRleHQuZ2V0UHJvcGVydHkodGl0bGUuVmFsdWUucGF0aCkgOiB0aXRsZS5WYWx1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHNoYXJlZEl0ZW1OYW1lIHx8IChoZWFkZXJJbmZvPy5UeXBlTmFtZSBhcyB1bmtub3duIGFzIHN0cmluZykgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGRlbGVnYXRlIHBheWxvYWQgZm9yIHRoZSB1c2VyIGZpZWxkIHZhbHVlIGhlbHAuXG5cdCAqIEByZXR1cm5zIFRoZSB2YWx1ZSBoZWxwIGRlbGVnYXRlIHBheWxvYWRcblx0ICovXG5cdGdldFZhbHVlSGVscERlbGVnYXRlKCk6IHsgbmFtZTogc3RyaW5nOyBwYXlsb2FkOiBWYWx1ZUhlbHBQYXlsb2FkIH0ge1xuXHRcdC8vIFRoZSBub24gbnVsbCBhc3NlcnRpb24gaXMgc2FmZSBoZXJlLCBiZWNhdXNlIHRoZSBhY3Rpb24gaXMgb25seSBhdmFpbGFibGUgaWYgdGhlIGFubm90YXRpb24gaXMgcHJlc2VudFxuXHRcdGNvbnN0IGFjdGlvbk5hbWUgPSAoXG5cdFx0XHR0aGlzLmNvbnRleHRPYmplY3Q/LnRhcmdldEVudGl0eVNldCEuYW5ub3RhdGlvbnMuQ29tbW9uIGFzIEVudGl0eVNldEFubm90YXRpb25zX0NvbW1vblxuXHRcdCkuRHJhZnRSb290IS5TaGFyZUFjdGlvbiEudG9TdHJpbmcoKTtcblx0XHQvLyBXZSBhcmUgYWxzbyBzdXJlIHRoYXQgdGhlIGFjdGlvbiBleGlzdFxuXHRcdGNvbnN0IGFjdGlvbiA9IHRoaXMuY29udGV4dE9iamVjdD8udGFyZ2V0RW50aXR5VHlwZS5yZXNvbHZlUGF0aChhY3Rpb25OYW1lKSBhcyBWb2NhYnVsYXJ5QWN0aW9uO1xuXHRcdC8vIEJ5IGRlZmluaXRpb24gdGhlIGFjdGlvbiBoYXMgYSBwYXJhbWV0ZXIgd2l0aCB0aGUgbmFtZSBcIlVzZXJzXCJcblx0XHRjb25zdCB1c2VyUGFyYW1ldGVycyA9IGFjdGlvbi5wYXJhbWV0ZXJzLmZpbmQoKHBhcmFtKSA9PiBwYXJhbS5uYW1lID09PSBVU0VSU19QQVJBTUVURVJTKSE7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZTogXCJzYXAvZmUvbWFjcm9zL3ZhbHVlaGVscC9WYWx1ZUhlbHBEZWxlZ2F0ZVwiLFxuXHRcdFx0cGF5bG9hZDoge1xuXHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGAvJHt1c2VyUGFyYW1ldGVycy50eXBlfS8ke1VTRVJfSURfUEFSQU1FVEVSfWAsXG5cdFx0XHRcdHF1YWxpZmllcnM6IHt9LFxuXHRcdFx0XHR2YWx1ZUhlbHBRdWFsaWZpZXI6IFwiXCIsXG5cdFx0XHRcdGlzQWN0aW9uUGFyYW1ldGVyRGlhbG9nOiB0cnVlXG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZSB0aGUgZXhwcmVzc2lvbiBiaW5kaW5nIG9mIHRoZSBJbnZpdGF0aW9uIGRpYWxvZy5cblx0ICogQHJldHVybnMgVGhlIGRpYWxvZyB0aXRsZSBiaW5kaW5nIGV4cHJlc3Npb25cblx0ICovXG5cdGdldEludml0YXRpb25EaWFsb2dUaXRsZUV4cEJpbmRpbmcoKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGNvbnN0IGhlYWRlckluZm8gPSB0aGlzLmNvbnRleHRPYmplY3Q/LnRhcmdldEVudGl0eVR5cGUuYW5ub3RhdGlvbnMuVUk/LkhlYWRlckluZm87XG5cdFx0Y29uc3QgdGl0bGUgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oKGhlYWRlckluZm8/LlRpdGxlIGFzIERhdGFGaWVsZCB8IHVuZGVmaW5lZCk/LlZhbHVlLCBbXSwgXCJcIik7XG5cdFx0Y29uc3QgcGFyYW1zID0gW1wiQ19DT0xMQUJPUkFUSU9ORFJBRlRfSU5WSVRBVElPTl9ESUFMT0dcIiwgaGVhZGVySW5mbz8uVHlwZU5hbWUudG9TdHJpbmcoKSwgdGl0bGVdO1xuXHRcdGNvbnN0IHRpdGxlRXhwcmVzc2lvbiA9IGZvcm1hdFJlc3VsdChwYXJhbXMsIGNvbGxhYm9yYXRpb25Gb3JtYXR0ZXIuZ2V0Rm9ybWF0dGVkVGV4dCk7XG5cdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKHRpdGxlRXhwcmVzc2lvbik7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB0byBjbG9zZSB0aGUgbWFuYWdlIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdGNsb3NlTWFuYWdlRGlhbG9nID0gKCk6IHZvaWQgPT4ge1xuXHRcdHRoaXMubWFuYWdlRGlhbG9nPy5jbG9zZSgpO1xuXHRcdHRoaXMubWFuYWdlRGlhbG9nPy5kZXN0cm95KCk7XG5cdFx0ZGVsZXRlIHRoaXMubWFuYWdlRGlhbG9nO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbnZpdGUgYnV0dG9uIGlmIHRoZXJlJ3MgYSBzaGFyZSBhY3Rpb24gb24gcm9vdCBsZXZlbC5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Z2V0SW52aXRlQnV0dG9uKCk6IEhCb3gge1xuXHRcdGlmICgodGhpcy5jb250ZXh0T2JqZWN0Py50YXJnZXRFbnRpdHlTZXQ/LmFubm90YXRpb25zLkNvbW1vbiBhcyBFbnRpdHlTZXRBbm5vdGF0aW9uc19Db21tb24pPy5EcmFmdFJvb3Q/LlNoYXJlQWN0aW9uKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8SEJveCB2aXNpYmxlPVwie3VpPi9pc0VkaXRhYmxlfVwiIGFsaWduSXRlbXM9XCJDZW50ZXJcIiBqdXN0aWZ5Q29udGVudD1cIlN0YXJ0XCI+XG5cdFx0XHRcdFx0PEF2YXRhciBiYWNrZ3JvdW5kQ29sb3I9XCJUaWxlSWNvblwiIHNyYz1cInNhcC1pY29uOi8vYWRkLWVtcGxveWVlXCIgZGlzcGxheVNpemU9XCJYU1wiIHByZXNzPXt0aGlzLm1hbmFnZUNvbGxhYm9yYXRpb259IC8+XG5cdFx0XHRcdDwvSEJveD5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiA8SEJveCAvPjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY29udGVudCBvZiB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBidWlsZGluZyBibG9jay5cblx0ICogQHJldHVybnMgVGhlIGNvbnRyb2wgdHJlZVxuXHQgKi9cblx0Y3JlYXRlQ29udGVudCgpOiBDb250cm9sIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAodGhpcy5fZ2V0T3duZXIoKT8uZ2V0TWV0YU1vZGVsKCkgJiYgTW9kZWxIZWxwZXIuaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQodGhpcy5fZ2V0T3duZXIoKSEuZ2V0TWV0YU1vZGVsKCkpKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8SEJveD5cblx0XHRcdFx0XHQ8SEJveFxuXHRcdFx0XHRcdFx0aXRlbXM9e3sgcGF0aDogXCJpbnRlcm5hbD4vY29sbGFib3JhdGlvbi9hY3RpdmVVc2Vyc1wiIH19XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpbkJlZ2luXCJcblx0XHRcdFx0XHRcdHZpc2libGU9XCJ7PSAke3VpPi9pc0VkaXRhYmxlfSAmYW1wOyZhbXA7ICR7aW50ZXJuYWw+L2NvbGxhYm9yYXRpb24vY29ubmVjdGVkfSB9XCJcblx0XHRcdFx0XHRcdGFsaWduSXRlbXM9XCJDZW50ZXJcIlxuXHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9XCJTdGFydFwiXG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEF2YXRhclxuXHRcdFx0XHRcdFx0XHRpbml0aWFscz1cIntpbnRlcm5hbD5pbml0aWFsc31cIlxuXHRcdFx0XHRcdFx0XHRkaXNwbGF5U2l6ZT1cIlhTXCJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZENvbG9yPVwie2ludGVybmFsPmNvbG9yfVwiXG5cdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLnNob3dDb2xsYWJvcmF0aW9uVXNlckRldGFpbHN9XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHR7dGhpcy5nZXRJbnZpdGVCdXR0b24oKX1cblx0XHRcdFx0PC9IQm94PlxuXHRcdFx0KTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXNEQSxNQUFNQSxnQkFBZ0IsR0FBRyxPQUFPO0VBQ2hDLE1BQU1DLGlCQUFpQixHQUFHLFFBQVE7RUFBQyxJQUdkQyxrQkFBa0IsSUFBQUMsSUFBQSxHQUR0Q0MsY0FBYyxDQUFDLDJEQUEyRCxDQUFDLEVBQUFDLEtBQUEsR0FFMUVDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUUsUUFBUTtJQUFFQyxRQUFRLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc1Q0gsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSixJQUFBLENBQUFPLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQWlCN0IsU0FBQVYsbUJBQVlXLEtBQXVDLEVBQUVDLE1BQXlDLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQy9GQSxLQUFBLEdBQUFILGNBQUEsQ0FBQUksSUFBQSxPQUFNSCxLQUFLLEVBQUVDLE1BQU0sQ0FBQztNQUFDRywwQkFBQSxDQUFBRixLQUFBLGlCQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxRQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFpQnRCO0FBQ0Q7QUFDQTtBQUNBO01BSENBLEtBQUEsQ0FJQUssNEJBQTRCLEdBQUlDLEtBQXlCLElBQVc7UUFDbkUsTUFBTUMsTUFBTSxHQUFHRCxLQUFLLENBQUNFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQ1IsS0FBQSxDQUFLUyxrQkFBa0IsRUFBRTtVQUM3QlQsS0FBQSxDQUFLUyxrQkFBa0IsR0FBR1QsS0FBQSxDQUFLVSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3ZEO1FBRUFWLEtBQUEsQ0FBS1Msa0JBQWtCLEVBQUVFLGlCQUFpQixDQUFDSixNQUFNLENBQUNLLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUEwQixVQUFVLENBQUM7UUFDcEhaLEtBQUEsQ0FBS1Msa0JBQWtCLEVBQUVJLE1BQU0sQ0FBQ04sTUFBTSxDQUFDO01BQ3hDLENBQUM7TUF3QkQ7QUFDRDtBQUNBO0FBQ0E7TUFIQ1AsS0FBQSxDQUlBYyxtQkFBbUIsR0FBRyxNQUFZO1FBQ2pDLElBQUksQ0FBQ2QsS0FBQSxDQUFLZSxZQUFZLEVBQUU7VUFDdkJmLEtBQUEsQ0FBS2UsWUFBWSxHQUFHZixLQUFBLENBQUtnQixlQUFlLENBQUMsQ0FBQztRQUMzQztRQUVBaEIsS0FBQSxDQUFLaUIsZ0JBQWdCLENBQUMsQ0FBQztRQUN2QmpCLEtBQUEsQ0FBS2UsWUFBWSxFQUFFRyxJQUFJLENBQUMsQ0FBQztNQUMxQixDQUFDO01BMEtEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7TUFKQ2xCLEtBQUEsQ0FLQW1CLGdCQUFnQixHQUFJQyxVQUFzQixJQUFhO1FBQ3RELFFBQVFBLFVBQVU7VUFDakIsS0FBS0MsVUFBVSxDQUFDQyxnQkFBZ0I7WUFDL0IsT0FBT3RCLEtBQUEsQ0FBS3VCLGlCQUFpQixDQUFDLDZDQUE2QyxDQUFDO1VBQzdFLEtBQUtGLFVBQVUsQ0FBQ0csV0FBVztZQUMxQixPQUFPeEIsS0FBQSxDQUFLdUIsaUJBQWlCLENBQUMsd0NBQXdDLENBQUM7VUFDeEUsS0FBS0YsVUFBVSxDQUFDSSxhQUFhO1lBQzVCLE9BQU96QixLQUFBLENBQUt1QixpQkFBaUIsQ0FBQywyQ0FBMkMsQ0FBQztVQUMzRSxLQUFLRixVQUFVLENBQUNLLGFBQWE7VUFDN0I7WUFDQyxPQUFPMUIsS0FBQSxDQUFLdUIsaUJBQWlCLENBQUMsMkNBQTJDLENBQUM7UUFDNUU7TUFDRCxDQUFDO01BcUREO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7TUFKQ3ZCLEtBQUEsQ0FLQTJCLG1CQUFtQixHQUFHLE1BQU9yQixLQUF3QixJQUFvQjtRQUN4RSxNQUFNc0IsU0FBUyxHQUFHdEIsS0FBSyxDQUFDRSxTQUFTLENBQUMsQ0FBQztRQUNuQyxPQUFPRixLQUFLLENBQ1Z1QixZQUFZLENBQUMsU0FBUyxDQUFDLEVBQ3RCQyxJQUFJLENBQ0wsVUFBb0NDLFNBQWlCLEVBQVE7VUFDNUQsTUFBTUMsb0JBQW9CLEdBQUdKLFNBQVMsQ0FBQ2hCLGlCQUFpQixDQUFDLFVBQVUsQ0FBeUI7VUFDNUYsTUFBTXFCLFlBQW9CLEdBQUdELG9CQUFvQixDQUFDRSxXQUFXLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRTtVQUNuRixNQUFNQyxPQUFhLEdBQUc7WUFDckJDLEVBQUUsRUFBRUosb0JBQW9CLEVBQUVFLFdBQVcsQ0FBQyxRQUFRLENBQUM7WUFDL0NHLElBQUksRUFBRUwsb0JBQW9CLEVBQUVFLFdBQVcsQ0FBQyxpQkFBaUI7VUFDMUQsQ0FBQztVQUNELElBQUlELFlBQVksQ0FBQ0ssU0FBUyxDQUFFQyxJQUFJLElBQUtBLElBQUksQ0FBQ0gsRUFBRSxLQUFLTCxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTtZQUNqRUgsU0FBUyxDQUFDWSxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQ2hDWixTQUFTLENBQUNhLGlCQUFpQixDQUFDLElBQUksQ0FBQ2xCLGlCQUFpQixDQUFDLDRDQUE0QyxDQUFDLENBQUM7VUFDbEcsQ0FBQyxNQUFNLElBQ04sRUFDQ1UsWUFBWSxDQUFDSyxTQUFTLENBQUVDLElBQUksSUFBS0EsSUFBSSxDQUFDSCxFQUFFLEtBQUtELE9BQU8sQ0FBQ0MsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQzVERCxPQUFPLENBQUNDLEVBQUUsS0FBS0QsT0FBTyxDQUFDRSxJQUFJLElBQUlGLE9BQU8sQ0FBQ0MsRUFBRSxLQUFLLEVBQUcsQ0FDbEQsRUFDQTtZQUNELElBQUksQ0FBQ00sT0FBTyxDQUFDZCxTQUFTLEVBQUVLLFlBQVksRUFBRUUsT0FBTyxDQUFDO1lBQzlDUCxTQUFTLENBQUNZLGFBQWEsQ0FBQyxNQUFNLENBQUM7WUFDL0JaLFNBQVMsQ0FBQ2EsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1VBQ2hDO1FBQ0QsQ0FBQyxDQUFDRSxJQUFJLENBQUEzQyxLQUFLLENBQ1osQ0FBQyxDQUNBNEMsS0FBSyxDQUNMLFlBQTBDO1VBQ3pDaEIsU0FBUyxDQUFDWSxhQUFhLENBQUMsU0FBUyxDQUFDO1VBQ2xDWixTQUFTLENBQUNhLGlCQUFpQixDQUFDLElBQUksQ0FBQ2xCLGlCQUFpQixDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFDdEcsQ0FBQyxDQUFDb0IsSUFBSSxDQUFBM0MsS0FBSyxDQUNaLENBQUM7TUFDSCxDQUFDO01BZUQ7QUFDRDtBQUNBO0FBQ0E7TUFIQ0EsS0FBQSxDQUlBNkMsVUFBVSxHQUFHLE1BQU92QyxLQUF3QixJQUFvQjtRQUMvRCxNQUFNd0MsS0FBb0IsR0FBRyxFQUFFO1VBQzlCQyxpQkFBMkIsR0FBRyxFQUFFO1FBQ2pDLE1BQU14QyxNQUFNLEdBQUdELEtBQUssQ0FBQ0UsU0FBUyxDQUFDLENBQUM7UUFDaEMsTUFBTXdDLGNBQWMsR0FBR3pDLE1BQU0sQ0FBQ0ssaUJBQWlCLENBQUMsQ0FBWTtRQUM1RCxNQUFNcUMsUUFBUSxHQUFHLENBQUNqRCxLQUFBLENBQUtrRCxxQkFBcUIsRUFBRUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFzQkMsV0FBVyxDQUFDLENBQUM7UUFDbkdILFFBQVEsQ0FBQ0ksT0FBTyxDQUFDLFVBQVVDLE9BQU8sRUFBRTtVQUNuQ1IsS0FBSyxDQUFDUyxJQUFJLENBQUM7WUFDVkMsTUFBTSxFQUFFRixPQUFPLENBQUNwQixXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2pDdUIsY0FBYyxFQUFFLEdBQUcsQ0FBQztVQUNyQixDQUFDLENBQUM7VUFDRixJQUFJSCxPQUFPLENBQUNwQixXQUFXLENBQUMsUUFBUSxDQUFDLEtBQUtiLFVBQVUsQ0FBQ0ssYUFBYSxFQUFFO1lBQy9EcUIsaUJBQWlCLENBQUNRLElBQUksQ0FBQ0QsT0FBTyxDQUFDcEIsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1VBQ2xEO1FBQ0QsQ0FBQyxDQUFDO1FBRUYsSUFBSTtVQUNIO1VBQ0EsTUFBTXdCLE9BQU8sR0FBRyxNQUFNQyxPQUFPLENBQUNDLEdBQUcsQ0FBQyxDQUFDQyxXQUFXLENBQUNiLGNBQWMsRUFBRUYsS0FBSyxDQUFDLEVBQUU5QyxLQUFBLENBQUs4RCwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUMxRyxNQUFNQyxRQUFtQixHQUFHLEVBQUU7VUFDOUJMLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ0wsT0FBTyxDQUFFVyxXQUFXLElBQUs7WUFDbkMsSUFBSWpCLGlCQUFpQixDQUFDa0IsUUFBUSxDQUFDRCxXQUFXLENBQUM5QixXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRTtjQUNsRTZCLFFBQVEsQ0FBQ1IsSUFBSSxDQUFDUyxXQUFXLENBQUM7WUFDM0I7VUFDRCxDQUFDLENBQUM7VUFDRixNQUFNRSxjQUFjLEdBQUdsRSxLQUFBLENBQUttRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUVELGNBQWM7VUFDL0QsTUFBTUEsY0FBYyxDQUFDRSxpQkFBaUIsQ0FBQyxDQUFDO1VBRXhDLFFBQVFMLFFBQVEsQ0FBQ00sTUFBTTtZQUN0QixLQUFLLENBQUM7Y0FDTEMsWUFBWSxDQUFDQyxJQUFJLENBQ2hCdkUsS0FBQSxDQUFLdUIsaUJBQWlCLENBQUMsdURBQXVELEVBQUUsQ0FDL0V2QixLQUFBLENBQUt3RSxpQkFBaUIsQ0FBQ3hCLGNBQWMsQ0FBQyxDQUN0QyxDQUNGLENBQUM7Y0FDRDtZQUNELEtBQUssQ0FBQztjQUNMc0IsWUFBWSxDQUFDQyxJQUFJLENBQ2hCdkUsS0FBQSxDQUFLdUIsaUJBQWlCLENBQUMsK0NBQStDLEVBQUUsQ0FBQ3ZCLEtBQUEsQ0FBS3dFLGlCQUFpQixDQUFDeEIsY0FBYyxDQUFDLENBQUMsQ0FDakgsQ0FBQztjQUNEO1lBQ0Q7Y0FDQ3NCLFlBQVksQ0FBQ0MsSUFBSSxDQUNoQnZFLEtBQUEsQ0FBS3VCLGlCQUFpQixDQUFDLHNEQUFzRCxFQUFFLENBQzlFd0MsUUFBUSxDQUFDTSxNQUFNLENBQUNJLFFBQVEsQ0FBQyxDQUFDLEVBQzFCekUsS0FBQSxDQUFLd0UsaUJBQWlCLENBQUN4QixjQUFjLENBQUMsQ0FDdEMsQ0FDRixDQUFDO1VBQ0g7UUFDRCxDQUFDLENBQUMsTUFBTTtVQUNQc0IsWUFBWSxDQUFDQyxJQUFJLENBQUN2RSxLQUFBLENBQUt1QixpQkFBaUIsQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO1FBQzFGO1FBQ0F2QixLQUFBLENBQUswRSxpQkFBaUIsQ0FBQyxDQUFDO01BQ3pCLENBQUM7TUF3QkQ7QUFDRDtBQUNBO0FBQ0E7TUFIQzFFLEtBQUEsQ0FJQWlCLGdCQUFnQixHQUFHLFlBQTJCO1FBQzdDLE1BQU1lLG9CQUFvQixHQUFHaEMsS0FBQSxDQUFLWSxpQkFBaUIsQ0FBQyxVQUFVLENBQXlCO1FBRXZGLElBQUk7VUFDSCxNQUFNK0QsZUFBZSxHQUFHLE1BQU0zRSxLQUFBLENBQUs4RCwwQkFBMEIsQ0FBQyxDQUFDO1VBQy9ELE1BQU03QixZQUFvQixHQUFHLEVBQUU7VUFDL0IsTUFBTTJDLFdBQVcsR0FBRzVFLEtBQUEsQ0FBSzZFLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTNDLFdBQVcsQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLEVBQUU7VUFDOUYsTUFBTTRDLEVBQUUsR0FBR0Msa0JBQWtCLENBQUNDLEtBQUssQ0FBQ2hGLEtBQUEsQ0FBS2lGLGVBQWUsQ0FBQyxDQUFFLENBQUM7VUFDNUQsSUFBSTdELFVBQXNCO1VBQzFCLElBQUl1RCxlQUFlLENBQUNOLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0JNLGVBQWUsQ0FBQ3RCLE9BQU8sQ0FBRTZCLFdBQVcsSUFBSztjQUN4QyxNQUFNQyxRQUFRLEdBQUdELFdBQVcsQ0FBQ0UsU0FBUyxDQUFDLENBQWdCO2NBQ3ZELE1BQU1DLElBQWEsR0FBR1AsRUFBRSxFQUFFMUMsRUFBRSxLQUFLK0MsUUFBUSxDQUFDM0IsTUFBTTtjQUNoRCxNQUFNOEIsUUFBUSxHQUFHVixXQUFXLENBQUNXLElBQUksQ0FBRUMsQ0FBTyxJQUFLQSxDQUFDLENBQUNwRCxFQUFFLEtBQUsrQyxRQUFRLENBQUMzQixNQUFNLENBQUM7Y0FDeEUsSUFBSWlDLGVBQWUsR0FBR04sUUFBUSxDQUFDTyxlQUFlLElBQUlQLFFBQVEsQ0FBQzNCLE1BQU07Y0FDakUsTUFBTW1DLFFBQVEsR0FBR1osa0JBQWtCLENBQUNhLGNBQWMsQ0FBQ0gsZUFBZSxDQUFDO2NBQ25FQSxlQUFlLEdBQUdKLElBQUksR0FBRyxHQUFHTixrQkFBa0IsQ0FBQ2MsT0FBTyxDQUFDLHlCQUF5QixFQUFFSixlQUFlLENBQUMsRUFBRSxHQUFHQSxlQUFlO2NBQ3RILElBQUlILFFBQVEsRUFBRTtnQkFDYmxFLFVBQVUsR0FBR0MsVUFBVSxDQUFDQyxnQkFBZ0I7Y0FDekMsQ0FBQyxNQUFNLElBQUk2RCxRQUFRLENBQUNXLGdCQUFnQixLQUFLQSxnQkFBZ0IsQ0FBQ0MsVUFBVSxFQUFFO2dCQUNyRTNFLFVBQVUsR0FBR0MsVUFBVSxDQUFDRyxXQUFXO2NBQ3BDLENBQUMsTUFBTTtnQkFDTkosVUFBVSxHQUFHQyxVQUFVLENBQUNJLGFBQWE7Y0FDdEM7Y0FFQSxNQUFNYyxJQUFVLEdBQUc7Z0JBQ2xCSCxFQUFFLEVBQUUrQyxRQUFRLENBQUMzQixNQUFNO2dCQUNuQm5CLElBQUksRUFBRW9ELGVBQWU7Z0JBQ3JCTyxNQUFNLEVBQUU1RSxVQUFVO2dCQUNsQjZFLEtBQUssRUFBRWxCLGtCQUFrQixDQUFDbUIsWUFBWSxDQUFDZixRQUFRLENBQUMzQixNQUFNLEVBQUVvQixXQUFXLEVBQUUzQyxZQUFZLENBQUM7Z0JBQ2xGMEQsUUFBUSxFQUFFQSxRQUFRO2dCQUNsQmIsRUFBRSxFQUFFTztjQUNMLENBQUM7Y0FDRHBELFlBQVksQ0FBQ3NCLElBQUksQ0FBQ2hCLElBQUksQ0FBQztZQUN4QixDQUFDLENBQUM7VUFDSCxDQUFDLE1BQU07WUFDTjtZQUNBTixZQUFZLENBQUNzQixJQUFJLENBQUN1QixFQUFFLENBQUM7VUFDdEI7VUFDQTlDLG9CQUFvQixDQUFDbUUsV0FBVyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsQ0FBQztVQUM1RG5FLG9CQUFvQixDQUFDbUUsV0FBVyxDQUFDLCtCQUErQixFQUFFLEVBQUUsQ0FBQztVQUNyRW5FLG9CQUFvQixDQUFDbUUsV0FBVyxDQUFDLDRCQUE0QixFQUFFbEUsWUFBWSxDQUFDO1FBQzdFLENBQUMsQ0FBQyxPQUFPbUUsQ0FBQyxFQUFFO1VBQ1g5QixZQUFZLENBQUNDLElBQUksQ0FBQ3ZFLEtBQUEsQ0FBS3VCLGlCQUFpQixDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDdEY7TUFDRCxDQUFDO01BaUVEO0FBQ0Q7QUFDQTtBQUNBO01BSEN2QixLQUFBLENBSUEwRSxpQkFBaUIsR0FBRyxNQUFZO1FBQy9CMUUsS0FBQSxDQUFLZSxZQUFZLEVBQUVzRixLQUFLLENBQUMsQ0FBQztRQUMxQnJHLEtBQUEsQ0FBS2UsWUFBWSxFQUFFdUYsT0FBTyxDQUFDLENBQUM7UUFDNUIsT0FBT3RHLEtBQUEsQ0FBS2UsWUFBWTtNQUN6QixDQUFDO01BQUEsT0FBQWYsS0FBQTtJQS9pQkQ7SUFBQ3VHLFFBQUEsR0FBQXBILGtCQUFBO0lBQUFxSCxjQUFBLENBQUFySCxrQkFBQSxFQUFBVSxjQUFBO0lBQUEsSUFBQTRHLE1BQUEsR0FBQXRILGtCQUFBLENBQUF1SCxTQUFBO0lBQUFELE1BQUEsQ0FFS0UsbUJBQW1CLEdBQXpCLGVBQU1BLG1CQUFtQkEsQ0FBQ0MsZUFBa0MsRUFBaUI7TUFDNUUsSUFBSSxDQUFDQyxjQUFjLEdBQUcsSUFBSUMsYUFBYSxDQUFDLENBQUM7TUFDekMsSUFBSTNILGtCQUFrQixDQUFDNEgsZ0JBQWdCLEtBQUtDLFNBQVMsRUFBRTtRQUN0RCxNQUFNQyxHQUFHLENBQUNDLElBQUksQ0FBQztVQUFFN0UsSUFBSSxFQUFFO1FBQWUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU07VUFBRThFLE9BQU8sRUFBRUo7UUFBaUIsQ0FBQyxHQUFHLE1BQU1LLG1CQUFBLENBQU8sb0JBQW9CLENBQUM7UUFDeEVqSSxrQkFBa0IsQ0FBQzRILGdCQUFnQixHQUFHQSxnQkFBZ0I7UUFDdEQsTUFBTTtVQUFFSSxPQUFPLEVBQUVFO1FBQXVCLENBQUMsR0FBRyxNQUFNRCxtQkFBQSxDQUFPLHFCQUFxQixDQUFDO1FBQy9Fakksa0JBQWtCLENBQUNrSSxzQkFBc0IsR0FBR0Esc0JBQXNCO01BQ25FO01BQ0EsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQztNQUNsRSxJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJLENBQUNDLGFBQWEsQ0FBQyxDQUFDO01BQ25DLElBQUksQ0FBQ2IsY0FBYyxDQUFDYyxPQUFPLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBZ0JEO0FBQ0Q7QUFDQTtBQUNBO0lBSENsQixNQUFBLENBSUEvRixxQkFBcUIsR0FBckIsU0FBQUEscUJBQXFCQSxDQUFBLEVBQXNCO01BQzFDLE1BQU1ELGtCQUFrQixHQUN2Qm1ILElBQUEsQ0FBQ0MsaUJBQWlCO1FBQUNDLFVBQVUsRUFBRSxLQUFNO1FBQUNDLEtBQUssRUFBQyxxQkFBcUI7UUFBQ0MsU0FBUyxFQUFDLFFBQVE7UUFBQUMsUUFBQSxFQUNuRkMsS0FBQSxDQUFDQyxJQUFJO1VBQUFGLFFBQUEsR0FDSkwsSUFBQSxDQUFDUSxNQUFNO1lBQUN6QyxRQUFRLEVBQUMscUJBQXFCO1lBQUMwQyxXQUFXLEVBQUMsR0FBRztZQUFDQyxlQUFlLEVBQUM7VUFBa0IsQ0FBRSxDQUFDLEVBQzVGSixLQUFBLENBQUNLLElBQUk7WUFBQU4sUUFBQSxHQUNKTCxJQUFBLENBQUNZLEtBQUs7Y0FBQ1QsS0FBSyxFQUFDLHdCQUF3QjtjQUFDVSxJQUFJLEVBQUM7WUFBaUIsQ0FBRSxDQUFDLEVBQy9EYixJQUFBLENBQUNZLEtBQUs7Y0FBQ1QsS0FBSyxFQUFDLHdCQUF3QjtjQUFDVSxJQUFJLEVBQUM7WUFBZSxDQUFFLENBQUM7VUFBQSxDQUN4RCxDQUFDO1FBQUEsQ0FDRjtNQUFDLENBQ1csQ0FDbkI7TUFFRCxJQUFJLENBQUNDLFlBQVksQ0FBQ2pJLGtCQUFrQixDQUFDO01BRXJDLE9BQU9BLGtCQUFrQjtJQUMxQixDQUFDO0lBZUQ7QUFDRDtBQUNBO0FBQ0E7SUFIQ2dHLE1BQUEsQ0FJQXpGLGVBQWUsR0FBZixTQUFBQSxlQUFlQSxDQUFBLEVBQVc7TUFDekIsTUFBTUQsWUFBWSxHQUNqQjZHLElBQUEsQ0FBQ2UsTUFBTTtRQUNOQyxLQUFLLEVBQUUsSUFBSSxDQUFDQyxrQ0FBa0MsQ0FBQyxDQUFFO1FBQ2pEQyxtQkFBbUIsRUFBQyxPQUFPO1FBQzNCQyxpQkFBaUIsRUFBQyxPQUFPO1FBQ3pCQyxZQUFZLEVBQUMsTUFBTTtRQUNuQkMsT0FBTyxFQUFFQyxZQUFZLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxHQUFHLE1BQU87UUFBQWxCLFFBQUEsRUFFcEQ7VUFDQW1CLFdBQVcsRUFDVnhCLElBQUEsQ0FBQ3lCLE1BQU07WUFDTlosSUFBSSxFQUFFLElBQUksQ0FBQ2xILGlCQUFpQixDQUFDLHFEQUFxRCxDQUFFO1lBQ3BGK0gsS0FBSyxFQUFFLElBQUksQ0FBQ3pHLFVBQVc7WUFDdkJyRCxJQUFJLEVBQUMsWUFBWTtZQUNqQitKLE9BQU8sRUFBRTtjQUNSQyxLQUFLLEVBQUUsQ0FBQztnQkFBRUMsSUFBSSxFQUFFO2NBQStCLENBQUMsRUFBRTtnQkFBRUEsSUFBSSxFQUFFO2NBQXdCLENBQUMsQ0FBQztjQUNwRkMsU0FBUyxFQUFFLElBQUksQ0FBQ0M7WUFDakI7VUFBRSxDQUNGLENBQ0Q7VUFDREMsU0FBUyxFQUNSaEMsSUFBQSxDQUFDeUIsTUFBTTtZQUNOWixJQUFJLEVBQUUsSUFBSSxDQUFDbEgsaUJBQWlCLENBQUMsK0NBQStDLENBQUU7WUFDOUUrSCxLQUFLLEVBQUUsSUFBSSxDQUFDNUU7VUFBa0IsQ0FDOUIsQ0FDRDtVQUNEK0MsT0FBTyxFQUNOUyxLQUFBLENBQUNLLElBQUk7WUFBQ1IsS0FBSyxFQUFDLGtCQUFrQjtZQUFBRSxRQUFBLEdBQzdCTCxJQUFBLENBQUNXLElBQUk7Y0FBQ3NCLEtBQUssRUFBQyxNQUFNO2NBQUE1QixRQUFBLEVBQ2pCTCxJQUFBLENBQUNrQyxZQUFZO2dCQUNackIsSUFBSSxFQUFFLElBQUksQ0FBQ2xILGlCQUFpQixDQUFDLDhDQUE4QyxDQUFFO2dCQUM3RS9CLElBQUksRUFBQyxhQUFhO2dCQUNsQnVLLFFBQVEsRUFBRSxJQUFLO2dCQUNmQyxlQUFlLEVBQUUsS0FBTTtnQkFDdkJqQyxLQUFLLEVBQUM7Y0FBeUIsQ0FDL0I7WUFBQyxDQUNHLENBQUMsRUFDUEgsSUFBQSxDQUFDWSxLQUFLO2NBQUNDLElBQUksRUFBRSxJQUFJLENBQUNsSCxpQkFBaUIsQ0FBQyw2Q0FBNkMsQ0FBRTtjQUFDOUIsUUFBUSxFQUFFO1lBQUssQ0FBRSxDQUFDLEVBQ3JHLElBQUksQ0FBQ3dLLDZCQUE2QixDQUFDLENBQUMsRUFDcEMsSUFBSSxDQUFDQyx3QkFBd0IsQ0FBQyxDQUFDO1VBQUEsQ0FDM0I7UUFFUjtNQUFDLENBQ00sQ0FDUjtNQUVELElBQUksQ0FBQ3hCLFlBQVksQ0FBQzNILFlBQVksQ0FBQztNQUMvQkEsWUFBWSxDQUFDb0osV0FBVyxDQUFDO1FBQ3hCQyxLQUFLLEVBQUUsVUFBVTtRQUNqQlgsSUFBSSxFQUFFO01BQ1AsQ0FBQyxDQUFDO01BRUYsT0FBTzFJLFlBQVk7SUFDcEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBMEYsTUFBQSxDQUlBNEQsK0JBQStCLEdBQS9CLFNBQUFBLCtCQUErQkEsQ0FBQSxFQUFzQjtNQUNwRCxPQUNDbkMsS0FBQSxDQUFBb0MsU0FBQTtRQUFBckMsUUFBQSxHQUNDTCxJQUFBLENBQUN6SSxrQkFBa0IsQ0FBQ2tJLHNCQUFzQjtVQUFDd0MsS0FBSyxFQUFFWCxZQUFZLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQU07VUFBQWxCLFFBQUEsRUFDekY7WUFDQXNDLFFBQVEsRUFDUDNDLElBQUEsQ0FBQ08sSUFBSTtjQUFDcUMsVUFBVSxFQUFDLFFBQVE7Y0FBQ0MsY0FBYyxFQUFDLGNBQWM7Y0FBQXhDLFFBQUEsRUFDdERMLElBQUEsQ0FBQ1EsTUFBTTtnQkFBQ0MsV0FBVyxFQUFDLElBQUk7Z0JBQUNDLGVBQWUsRUFBQyxrQkFBa0I7Z0JBQUMzQyxRQUFRLEVBQUM7Y0FBcUIsQ0FBRTtZQUFDLENBQ3hGO1VBRVI7UUFBQyxDQUN5QyxDQUFDLEVBQzVDaUMsSUFBQSxDQUFDekksa0JBQWtCLENBQUNrSSxzQkFBc0I7VUFBQ3dDLEtBQUssRUFBRVgsWUFBWSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEtBQUssR0FBRyxLQUFNO1VBQUFsQixRQUFBLEVBQ3pGO1lBQ0F5QyxLQUFLLEVBQUU5QyxJQUFBLENBQUMrQyxJQUFJO2NBQUNsQyxJQUFJLEVBQUUsSUFBSSxDQUFDbEgsaUJBQWlCLENBQUMsbURBQW1EO1lBQUUsQ0FBRSxDQUFDO1lBQ2xHZ0osUUFBUSxFQUFFM0MsSUFBQSxDQUFDK0MsSUFBSTtjQUFDbEMsSUFBSSxFQUFDO1lBQWlCLENBQUU7VUFDekM7UUFBQyxDQUN5QyxDQUFDLEVBQzVDYixJQUFBLENBQUN6SSxrQkFBa0IsQ0FBQ2tJLHNCQUFzQjtVQUFDd0MsS0FBSyxFQUFFWCxZQUFZLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxHQUFHLEtBQU07VUFBQWxCLFFBQUEsRUFDekY7WUFDQXlDLEtBQUssRUFBRTlDLElBQUEsQ0FBQytDLElBQUk7Y0FBQ2xDLElBQUksRUFBRSxJQUFJLENBQUNsSCxpQkFBaUIsQ0FBQywwREFBMEQ7WUFBRSxDQUFFLENBQUM7WUFDekdnSixRQUFRLEVBQ1AzQyxJQUFBLENBQUNnRCxZQUFZO2NBQ1pDLEtBQUssRUFBRTtnQkFBRXBCLElBQUksRUFBRSxpQkFBaUI7Z0JBQUVDLFNBQVMsRUFBRSxJQUFJLENBQUNvQjtjQUFzQixDQUFFO2NBQzFFckMsSUFBSSxFQUFFO2dCQUFFZ0IsSUFBSSxFQUFFLGlCQUFpQjtnQkFBRUMsU0FBUyxFQUFFLElBQUksQ0FBQ3ZJO2NBQWlCO1lBQUUsQ0FDcEU7VUFFSDtRQUFDLENBQ3lDLENBQUMsRUFDNUN5RyxJQUFBLENBQUN6SSxrQkFBa0IsQ0FBQ2tJLHNCQUFzQjtVQUFDd0MsS0FBSyxFQUFFWCxZQUFZLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQU07VUFBQWxCLFFBQUEsRUFDeEY7WUFDQXNDLFFBQVEsRUFDUDNDLElBQUEsQ0FBQ08sSUFBSTtjQUFBRixRQUFBLEVBQ0pMLElBQUEsQ0FBQ3lCLE1BQU07Z0JBQ04wQixJQUFJLEVBQUMsb0JBQW9CO2dCQUN6QnZMLElBQUksRUFBQyxhQUFhO2dCQUNsQjhKLEtBQUssRUFBRSxJQUFJLENBQUMwQixVQUFXO2dCQUN2QkMsT0FBTyxFQUFDO2NBQThCLENBQ3RDO1lBQUMsQ0FDRztVQUVSO1FBQUMsQ0FDeUMsQ0FBQztNQUFBLENBQzNDLENBQUM7SUFFTDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF4RSxNQUFBLENBSUF5RCx3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFBLEVBQXNCO01BQzdDLElBQUksQ0FBQ2hILHFCQUFxQixHQUN6QjBFLElBQUEsQ0FBQ3pJLGtCQUFrQixDQUFDNEgsZ0JBQWdCO1FBQ25DOEMsS0FBSyxFQUFDLE1BQU07UUFDWnFCLElBQUksRUFBRTtVQUFFekIsSUFBSSxFQUFFO1FBQXdCLENBQUU7UUFDeEMwQixlQUFlLEVBQUVqQyxZQUFZLENBQUNDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUk7UUFDdERpQyxtQkFBbUIsRUFBQyxPQUFPO1FBQzNCQyxhQUFhLEVBQUMsTUFBTTtRQUFBcEQsUUFBQSxFQUVuQjtVQUNBcUQsT0FBTyxFQUFFLElBQUksQ0FBQ2pCLCtCQUErQixDQUFDO1FBQy9DO01BQUMsQ0FDbUMsQ0FDckM7TUFDRCxPQUFPLElBQUksQ0FBQ25ILHFCQUFxQjtJQUNsQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF1RCxNQUFBLENBSUF3RCw2QkFBNkIsR0FBN0IsU0FBQUEsNkJBQTZCQSxDQUFBLEVBQVM7TUFDckMsT0FDQ3JDLElBQUEsQ0FBQ08sSUFBSTtRQUFDSixLQUFLLEVBQUMseUJBQXlCO1FBQUM4QixLQUFLLEVBQUMsTUFBTTtRQUFBNUIsUUFBQSxFQUNqREwsSUFBQSxDQUFDMkQsS0FBSztVQUNMQyxLQUFLLEVBQUMsbUJBQW1CO1VBQ3pCQyxlQUFlLEVBQUMsNEJBQTRCO1VBQzVDQyxPQUFPLEVBQUMsa0JBQWtCO1VBQzFCN0IsS0FBSyxFQUFDLE1BQU07VUFDWnBLLFFBQVEsRUFBRSxJQUFLO1VBQ2ZrTSxTQUFTLEVBQUMsZUFBZTtVQUN6QkMsV0FBVyxFQUFFLElBQUksQ0FBQ3JLLGlCQUFpQixDQUFDLG1EQUFtRCxDQUFFO1VBQ3pGc0ssTUFBTSxFQUFFLElBQUksQ0FBQ2xLLG1CQUFvQjtVQUFBc0csUUFBQSxFQUVoQztZQUNBNkQsVUFBVSxFQUNUbEUsSUFBQSxDQUFDbUUsU0FBUztjQUFDM0osRUFBRSxFQUFDLGVBQWU7Y0FBQzRKLFFBQVEsRUFBRSxJQUFJLENBQUNDLG9CQUFvQixDQUFDLENBQUU7Y0FBQ0MsYUFBYSxFQUFFLElBQUs7Y0FBQWpFLFFBQUEsRUFDdkY7Z0JBQ0FrRSxTQUFTLEVBQ1J2RSxJQUFBLENBQUN3RSxVQUFVO2tCQUFBbkUsUUFBQSxFQUNWTCxJQUFBLENBQUN5RSxNQUFNO29CQUFDQyxhQUFhLEVBQUMsTUFBTTtvQkFBQ0MsY0FBYyxFQUFDO2tCQUFPLENBQUU7Z0JBQUMsQ0FDM0MsQ0FDWjtnQkFDREMsTUFBTSxFQUFFNUUsSUFBQSxDQUFDNkUsU0FBUyxJQUFFO2NBQ3JCO1lBQUMsQ0FDUztVQUViO1FBQUMsQ0FDSztNQUFDLENBQ0gsQ0FBQztJQUVULENBQUM7SUFxQkQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUpDaEcsTUFBQSxDQUtBcUUscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQzFKLFVBQXNCLEVBQWM7TUFDekQsUUFBUUEsVUFBVTtRQUNqQixLQUFLQyxVQUFVLENBQUNDLGdCQUFnQjtVQUMvQixPQUFPb0wsVUFBVSxDQUFDQyxPQUFPO1FBQzFCLEtBQUt0TCxVQUFVLENBQUNHLFdBQVc7VUFDMUIsT0FBT2tMLFVBQVUsQ0FBQ0UsT0FBTztRQUMxQixLQUFLdkwsVUFBVSxDQUFDSSxhQUFhO1FBQzdCLEtBQUtKLFVBQVUsQ0FBQ0ssYUFBYTtRQUM3QjtVQUNDLE9BQU9nTCxVQUFVLENBQUNHLFdBQVc7TUFDL0I7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBcEcsTUFBQSxDQU1Ba0Qsa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQ21ELE9BQTRCLEVBQUU3SyxZQUFnQyxFQUFXO01BQzNGLElBQUksQ0FBQzZLLE9BQU8sRUFBRTtRQUNiLE9BQU8sS0FBSztNQUNiO01BQ0EsT0FBTyxDQUFDLENBQUM3SyxZQUFZLEVBQUU4SyxJQUFJLENBQUV4SyxJQUFJLElBQUtBLElBQUksQ0FBQ3lELE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDekQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQVMsTUFBQSxDQU1BL0QsT0FBTyxHQUFQLFNBQUFBLE9BQU9BLENBQUNkLFNBQWdCLEVBQUVLLFlBQW9CLEVBQUVFLE9BQWEsRUFBUTtNQUNwRSxNQUFNSCxvQkFBb0IsR0FBR0osU0FBUyxDQUFDaEIsaUJBQWlCLENBQUMsVUFBVSxDQUF5QjtNQUM1RixNQUFNZ0UsV0FBVyxHQUFJaEQsU0FBUyxDQUFDaUQsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFlM0MsV0FBVyxDQUFDLDRCQUE0QixDQUFDO01BQzNHQyxPQUFPLENBQUNFLElBQUksR0FBR0YsT0FBTyxDQUFDRSxJQUFJLElBQUlGLE9BQU8sQ0FBQ0MsRUFBRTtNQUN6Q0QsT0FBTyxDQUFDd0QsUUFBUSxHQUFHWixrQkFBa0IsQ0FBQ2EsY0FBYyxDQUFDekQsT0FBTyxDQUFDRSxJQUFJLENBQUM7TUFDbEVGLE9BQU8sQ0FBQzhELEtBQUssR0FBR2xCLGtCQUFrQixDQUFDbUIsWUFBWSxDQUFDL0QsT0FBTyxDQUFDQyxFQUFFLEVBQUV3QyxXQUFXLEVBQUUzQyxZQUFZLENBQUM7TUFDdEZFLE9BQU8sQ0FBQzZLLFNBQVMsR0FBRyxJQUFJO01BQ3hCN0ssT0FBTyxDQUFDNkQsTUFBTSxHQUFHM0UsVUFBVSxDQUFDSyxhQUFhO01BQ3pDTyxZQUFZLENBQUNzQixJQUFJLENBQUNwQixPQUFPLENBQUM7TUFDMUJILG9CQUFvQixDQUFDbUUsV0FBVyxDQUFDLGNBQWMsRUFBRWxFLFlBQVksQ0FBQztNQUM5REQsb0JBQW9CLENBQUNtRSxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQztNQUM5Q25FLG9CQUFvQixDQUFDbUUsV0FBVyxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBMENEO0FBQ0Q7QUFDQTtBQUNBO0lBSENNLE1BQUEsQ0FJQXVFLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFDMUssS0FBd0IsRUFBUTtNQUMxQyxNQUFNMk0sSUFBSSxHQUFHM00sS0FBSyxDQUFDRSxTQUFTLENBQUMsQ0FBQztNQUM5QixNQUFNd0Isb0JBQW9CLEdBQUdpTCxJQUFJLEVBQUVyTSxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7TUFDcEUsTUFBTXNNLFlBQVksR0FBR0QsSUFBSSxFQUFFck0saUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUVzQixXQUFXLENBQUMsSUFBSSxDQUFDO01BQzNFLElBQUlELFlBQW9CLEdBQUdELG9CQUFvQixFQUFFRSxXQUFXLENBQUMsNEJBQTRCLENBQUM7TUFDMUZELFlBQVksR0FBR0EsWUFBWSxDQUFDa0wsTUFBTSxDQUFFNUssSUFBSSxJQUFLQSxJQUFJLENBQUNILEVBQUUsS0FBSzhLLFlBQVksQ0FBQztNQUN0RWxMLG9CQUFvQixFQUFFbUUsV0FBVyxDQUFDLDRCQUE0QixFQUFFbEUsWUFBWSxDQUFDO0lBQzlFLENBQUM7SUE2REQ7QUFDRDtBQUNBO0FBQ0E7SUFIQ3dFLE1BQUEsQ0FJYzNDLDBCQUEwQixHQUF4QyxlQUFjQSwwQkFBMEJBLENBQUEsRUFBdUI7TUFDOUQsTUFBTXNHLEtBQUssR0FBRyxJQUFJLENBQUN2RixRQUFRLENBQUMsQ0FBQztNQUM3QixNQUFNdUksVUFBVSxHQUFHO1FBQ2xCQyxPQUFPLEVBQUUseUNBQXlDO1FBQ2xEQyxTQUFTLEVBQUU7TUFDWixDQUFDO01BQ0QsTUFBTUMsZUFBZSxHQUFHbkQsS0FBSyxFQUFFb0QsUUFBUSxDQUN0QyxHQUFHLElBQUksQ0FBQzVNLGlCQUFpQixDQUFDLENBQUMsRUFBRTZNLE9BQU8sQ0FBQyxDQUFDLGtEQUFrRCxFQUN4RnpHLFNBQVMsRUFDVCxFQUFFLEVBQ0YsRUFBRSxFQUNGb0csVUFDRCxDQUFxQjs7TUFFckI7TUFDQSxPQUFPRyxlQUFlLENBQUNHLGVBQWUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO0lBQy9DLENBQUM7SUFxREQ7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUpDakgsTUFBQSxDQUtBakMsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQ3hCLGNBQXVCLEVBQVU7TUFDbEQsTUFBTTJLLFVBQVUsR0FBRyxJQUFJLENBQUNyRyxhQUFhLEVBQUVzRyxnQkFBZ0IsQ0FBQ0MsV0FBVyxDQUFDQyxFQUFFLEVBQUVDLFVBQVU7TUFDbEYsSUFBSUMsY0FBYyxHQUFHLEVBQUU7TUFDdkIsTUFBTXBGLEtBQUssR0FBRytFLFVBQVUsRUFBRU0sS0FBSztNQUMvQixJQUNDckYsS0FBSyxJQUNMc0Ysa0JBQWtCLENBQWlCdEYsS0FBSyxFQUFFLHFYQVF6QyxDQUFDLEVBQ0Q7UUFDRG9GLGNBQWMsR0FBR0csMEJBQTBCLENBQUN2RixLQUFLLENBQUN3RixLQUFLLENBQUMsR0FBR3BMLGNBQWMsQ0FBQ2QsV0FBVyxDQUFDMEcsS0FBSyxDQUFDd0YsS0FBSyxDQUFDM0UsSUFBSSxDQUFDLEdBQUdiLEtBQUssQ0FBQ3dGLEtBQUs7TUFDdEg7TUFDQSxPQUFPSixjQUFjLElBQUtMLFVBQVUsRUFBRVUsUUFBOEIsSUFBSSxFQUFFO0lBQzNFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTVILE1BQUEsQ0FJQXdGLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUEsRUFBZ0Q7TUFDbkU7TUFDQSxNQUFNcUMsVUFBVSxHQUFHLENBQ2xCLElBQUksQ0FBQ2hILGFBQWEsRUFBRWlILGVBQWUsQ0FBRVYsV0FBVyxDQUFDVyxNQUFNLEVBQ3REQyxTQUFTLENBQUVDLFdBQVcsQ0FBRWpLLFFBQVEsQ0FBQyxDQUFDO01BQ3BDO01BQ0EsTUFBTWtLLE1BQU0sR0FBRyxJQUFJLENBQUNySCxhQUFhLEVBQUVzRyxnQkFBZ0IsQ0FBQ2dCLFdBQVcsQ0FBQ04sVUFBVSxDQUFxQjtNQUMvRjtNQUNBLE1BQU1PLGNBQWMsR0FBR0YsTUFBTSxDQUFDdkIsVUFBVSxDQUFDN0gsSUFBSSxDQUFFdUosS0FBSyxJQUFLQSxLQUFLLENBQUN6TSxJQUFJLEtBQUtwRCxnQkFBZ0IsQ0FBRTtNQUUxRixPQUFPO1FBQ05vRCxJQUFJLEVBQUUsMkNBQTJDO1FBQ2pEME0sT0FBTyxFQUFFO1VBQ1JDLFlBQVksRUFBRSxJQUFJSCxjQUFjLENBQUNyUCxJQUFJLElBQUlOLGlCQUFpQixFQUFFO1VBQzVEK1AsVUFBVSxFQUFFLENBQUMsQ0FBQztVQUNkQyxrQkFBa0IsRUFBRSxFQUFFO1VBQ3RCQyx1QkFBdUIsRUFBRTtRQUMxQjtNQUNELENBQUM7SUFDRjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUExSSxNQUFBLENBSUFvQyxrQ0FBa0MsR0FBbEMsU0FBQUEsa0NBQWtDQSxDQUFBLEVBQXFDO01BQ3RFLE1BQU04RSxVQUFVLEdBQUcsSUFBSSxDQUFDckcsYUFBYSxFQUFFc0csZ0JBQWdCLENBQUNDLFdBQVcsQ0FBQ0MsRUFBRSxFQUFFQyxVQUFVO01BQ2xGLE1BQU1uRixLQUFLLEdBQUd3RywyQkFBMkIsQ0FBRXpCLFVBQVUsRUFBRU0sS0FBSyxFQUE0QkcsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7TUFDdEcsTUFBTWlCLE1BQU0sR0FBRyxDQUFDLHdDQUF3QyxFQUFFMUIsVUFBVSxFQUFFVSxRQUFRLENBQUM1SixRQUFRLENBQUMsQ0FBQyxFQUFFbUUsS0FBSyxDQUFDO01BQ2pHLE1BQU0wRyxlQUFlLEdBQUdDLFlBQVksQ0FBQ0YsTUFBTSxFQUFFRyxzQkFBc0IsQ0FBQ0MsZ0JBQWdCLENBQUM7TUFDckYsT0FBT0MsaUJBQWlCLENBQUNKLGVBQWUsQ0FBQztJQUMxQyxDQUFDO0lBWUQ7QUFDRDtBQUNBO0FBQ0E7SUFIQzdJLE1BQUEsQ0FJQWtKLGVBQWUsR0FBZixTQUFBQSxlQUFlQSxDQUFBLEVBQVM7TUFDdkIsSUFBSyxJQUFJLENBQUNySSxhQUFhLEVBQUVpSCxlQUFlLEVBQUVWLFdBQVcsQ0FBQ1csTUFBTSxFQUFrQ0MsU0FBUyxFQUFFQyxXQUFXLEVBQUU7UUFDckgsT0FDQzlHLElBQUEsQ0FBQ08sSUFBSTtVQUFDOEMsT0FBTyxFQUFDLGtCQUFrQjtVQUFDVCxVQUFVLEVBQUMsUUFBUTtVQUFDQyxjQUFjLEVBQUMsT0FBTztVQUFBeEMsUUFBQSxFQUMxRUwsSUFBQSxDQUFDUSxNQUFNO1lBQUNFLGVBQWUsRUFBQyxVQUFVO1lBQUNzSCxHQUFHLEVBQUMseUJBQXlCO1lBQUN2SCxXQUFXLEVBQUMsSUFBSTtZQUFDaUIsS0FBSyxFQUFFLElBQUksQ0FBQ3hJO1VBQW9CLENBQUU7UUFBQyxDQUNoSCxDQUFDO01BRVQsQ0FBQyxNQUFNO1FBQ04sT0FBTzhHLElBQUEsQ0FBQ08sSUFBSSxJQUFFLENBQUM7TUFDaEI7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUExQixNQUFBLENBSUFpQixhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQSxFQUF3QjtNQUNwQyxJQUFJLElBQUksQ0FBQ21JLFNBQVMsQ0FBQyxDQUFDLEVBQUVDLFlBQVksQ0FBQyxDQUFDLElBQUlDLFdBQVcsQ0FBQ0MsNkJBQTZCLENBQUMsSUFBSSxDQUFDSCxTQUFTLENBQUMsQ0FBQyxDQUFFQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDcEgsT0FDQzVILEtBQUEsQ0FBQ0MsSUFBSTtVQUFBRixRQUFBLEdBQ0pMLElBQUEsQ0FBQ08sSUFBSTtZQUNKOEgsS0FBSyxFQUFFO2NBQUV4RyxJQUFJLEVBQUU7WUFBc0MsQ0FBRTtZQUN2RDFCLEtBQUssRUFBQyxzQkFBc0I7WUFDNUJrRCxPQUFPLEVBQUMsZ0VBQXdFO1lBQ2hGVCxVQUFVLEVBQUMsUUFBUTtZQUNuQkMsY0FBYyxFQUFDLE9BQU87WUFBQXhDLFFBQUEsRUFFdEJMLElBQUEsQ0FBQ1EsTUFBTTtjQUNOekMsUUFBUSxFQUFDLHFCQUFxQjtjQUM5QjBDLFdBQVcsRUFBQyxJQUFJO2NBQ2hCQyxlQUFlLEVBQUMsa0JBQWtCO2NBQ2xDZ0IsS0FBSyxFQUFFLElBQUksQ0FBQ2pKO1lBQTZCLENBQ3pDO1VBQUMsQ0FDRyxDQUFDLEVBQ04sSUFBSSxDQUFDc1AsZUFBZSxDQUFDLENBQUM7UUFBQSxDQUNsQixDQUFDO01BRVQ7SUFDRCxDQUFDO0lBQUEsT0FBQXhRLGtCQUFBO0VBQUEsRUFsbkI4QytRLGFBQWEsR0FBQS9QLFdBQUEsR0FBQWdRLHlCQUFBLENBQUF2USxPQUFBLENBQUE4RyxTQUFBLGtCQUFBcEgsS0FBQTtJQUFBOFEsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFuUSxZQUFBLEdBQUErUCx5QkFBQSxDQUFBdlEsT0FBQSxDQUFBOEcsU0FBQSxTQUFBaEgsS0FBQTtJQUFBMFEsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUEzUSxPQUFBLE1BQUFELE1BQUE7RUFBQTRHLFFBQUEsR0FBQXBILGtCQUFBO0VBQUEsT0FBQW9ILFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -440,7 +440,8 @@ export default class CollaborationDraft extends BuildingBlock {
|
|
|
440
440
|
* @param event The event object of the invite button
|
|
441
441
|
*/
|
|
442
442
|
inviteUser = async (event: Event<{}, Button>): Promise<void> => {
|
|
443
|
-
const users: BackendUser[] = []
|
|
443
|
+
const users: BackendUser[] = [],
|
|
444
|
+
newlyInvitedUsers: string[] = [];
|
|
444
445
|
const source = event.getSource();
|
|
445
446
|
const bindingContext = source.getBindingContext() as Context;
|
|
446
447
|
const contexts = (this.manageDialogUserTable?.getBinding("rows") as ODataListBinding).getContexts();
|
|
@@ -449,16 +450,24 @@ export default class CollaborationDraft extends BuildingBlock {
|
|
|
449
450
|
UserID: context.getProperty("id"),
|
|
450
451
|
UserAccessRole: "O" // For now according to UX every user retrieves the owner role
|
|
451
452
|
});
|
|
453
|
+
if (context.getProperty("status") === UserStatus.NotYetInvited) {
|
|
454
|
+
newlyInvitedUsers.push(context.getProperty("id"));
|
|
455
|
+
}
|
|
452
456
|
});
|
|
453
457
|
|
|
454
458
|
try {
|
|
455
459
|
// We request the number of invited users after the share action to see how many users were really invited
|
|
456
460
|
const results = await Promise.all([shareObject(bindingContext, users), this.requestInvitedUsersInDraft()]);
|
|
457
|
-
const
|
|
461
|
+
const newUsers: Context[] = [];
|
|
462
|
+
results[1].forEach((invitedUser) => {
|
|
463
|
+
if (newlyInvitedUsers.includes(invitedUser.getProperty("UserID"))) {
|
|
464
|
+
newUsers.push(invitedUser);
|
|
465
|
+
}
|
|
466
|
+
});
|
|
458
467
|
const messageHandler = this.getPageController()!.messageHandler;
|
|
459
468
|
await messageHandler.showMessageDialog();
|
|
460
469
|
|
|
461
|
-
switch (
|
|
470
|
+
switch (newUsers.length) {
|
|
462
471
|
case 0:
|
|
463
472
|
MessageToast.show(
|
|
464
473
|
this.getTranslatedText("C_COLLABORATIONDRAFT_INVITATION_SUCCESS_TOAST_NO_USER", [
|
|
@@ -474,7 +483,7 @@ export default class CollaborationDraft extends BuildingBlock {
|
|
|
474
483
|
default:
|
|
475
484
|
MessageToast.show(
|
|
476
485
|
this.getTranslatedText("C_COLLABORATIONDRAFT_INVITATION_SUCCESS_TOAST_PLURAL", [
|
|
477
|
-
|
|
486
|
+
newUsers.length.toString(),
|
|
478
487
|
this.getSharedItemName(bindingContext)
|
|
479
488
|
])
|
|
480
489
|
);
|
|
@@ -492,7 +501,8 @@ export default class CollaborationDraft extends BuildingBlock {
|
|
|
492
501
|
private async requestInvitedUsersInDraft(): Promise<Context[]> {
|
|
493
502
|
const model = this.getModel();
|
|
494
503
|
const parameters = {
|
|
495
|
-
$select: "UserID,UserDescription,UserEditingState"
|
|
504
|
+
$select: "UserID,UserDescription,UserEditingState",
|
|
505
|
+
$$groupId: "$auto.Workers"
|
|
496
506
|
};
|
|
497
507
|
const invitedUserList = model?.bindList(
|
|
498
508
|
`${this.getBindingContext()?.getPath()}/DraftAdministrativeData/DraftAdministrativeUser`,
|