@sapui5/sap.fe.core 1.136.11 → 1.136.13
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/core/.library +1 -1
- package/src/sap/fe/core/AppStateHandler.js +8 -2
- package/src/sap/fe/core/AppStateHandler.ts +9 -1
- package/src/sap/fe/core/TemplateComponent.js +1 -1
- package/src/sap/fe/core/TemplateComponent.ts +1 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +73 -23
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +113 -43
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +7 -4
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +8 -5
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +1 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -0
- package/src/sap/fe/core/controllerextensions/Routing.js +6 -2
- package/src/sap/fe/core/controllerextensions/Routing.ts +4 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +8 -1
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +8 -0
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +1 -0
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +15 -5
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +29 -1
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +32 -0
- package/src/sap/fe/core/converters/controls/Common/Action.js +3 -2
- package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -1
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +31 -36
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +47 -57
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +4 -3
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +3 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.js +4 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +4 -1
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_ko.properties +3 -3
- package/src/sap/fe/core/messagebundle_uk.properties +2 -2
- package/src/sap/fe/core/messagebundle_vi.properties +4 -4
- package/src/sap/fe/core/rootView/Fcl.controller.js +1 -1
- package/src/sap/fe/core/rootView/Fcl.controller.ts +6 -1
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +17 -29
- package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +23 -26
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -5
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +12 -6
|
@@ -86,6 +86,7 @@ export type CreateParameters = {
|
|
|
86
86
|
createAtEnd?: boolean;
|
|
87
87
|
parentContext?: ODataV4Context;
|
|
88
88
|
creationDialogFields?: string[];
|
|
89
|
+
requestAtLeast?: string[];
|
|
89
90
|
};
|
|
90
91
|
|
|
91
92
|
export type CancelParameters = { cancelButton: Button; skipDiscardPopover: boolean; beforeCancelCallBack?: Function };
|
|
@@ -325,6 +326,7 @@ class TransactionHelper {
|
|
|
325
326
|
* @param [inParameters.keepTransientContextOnFailed] If set, the context stays in the list if the POST failed and POST will be repeated with the next change
|
|
326
327
|
* @param [inParameters.inactive] If set, the context is set as inactive for empty rows
|
|
327
328
|
* @param [inParameters.skipParameterDialog] Skips the action parameter dialog
|
|
329
|
+
* @param [inParameters.requestAtLeast] The parent control (view) for the creation
|
|
328
330
|
* @param appComponent The app component
|
|
329
331
|
* @param resourceModel The resource model
|
|
330
332
|
* @param messageHandler The message handler extension
|
|
@@ -364,6 +366,11 @@ class TransactionHelper {
|
|
|
364
366
|
resourceModel,
|
|
365
367
|
fromCopyPaste
|
|
366
368
|
);
|
|
369
|
+
// Load the properties that are part of the 'requestAtLeast' annotation from the table (if any)
|
|
370
|
+
// In case of createInPlace for a TreeTable, the new context might not be part of the listBinding (because of filters) --> we don't request the properties
|
|
371
|
+
if (newDocumentContext?.getBinding() !== undefined && parameters.requestAtLeast && parameters.requestAtLeast.length > 0) {
|
|
372
|
+
await newDocumentContext.requestProperty(parameters.requestAtLeast);
|
|
373
|
+
}
|
|
367
374
|
await messageHandler.showMessageDialog({ control: parameters.parentControl, unHoldKey: messageHandlingKey });
|
|
368
375
|
return newDocumentContext!;
|
|
369
376
|
} catch (error: unknown) {
|
|
@@ -1036,6 +1043,7 @@ class TransactionHelper {
|
|
|
1036
1043
|
* @param messageHandler The message handler extension
|
|
1037
1044
|
* @param isNewObject True if we're trying to cancel a newly created object
|
|
1038
1045
|
* @param skipConfirmationMsg
|
|
1046
|
+
* @param isStandardSave
|
|
1039
1047
|
* @returns Promise resolves with ???
|
|
1040
1048
|
* @final
|
|
1041
1049
|
*/
|
|
@@ -374,6 +374,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
|
|
|
374
374
|
case "Edm.Int16":
|
|
375
375
|
case "Edm.Int32":
|
|
376
376
|
case "Edm.Int64":
|
|
377
|
+
case "Edm.Decimal":
|
|
377
378
|
defaultValues[name] = 0;
|
|
378
379
|
break;
|
|
379
380
|
default:
|
|
@@ -416,4 +417,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/deepClone", "sap/fe/core/library",
|
|
|
416
417
|
_exports = ODataOperation;
|
|
417
418
|
return _exports;
|
|
418
419
|
}, false);
|
|
419
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFjdGlvbk5hbWUiLCJhY3Rpb25IZWxwZXIiLCJnZXRBY3Rpb25OYW1lIiwiaXNBY3Rpb24iLCJhY3Rpb24iLCJzaWRlRWZmZWN0cyIsImFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJjb250ZXh0cyIsImlzRnVuY3Rpb24iLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJvRGF0YVN0cmljdEhhbmRsaW5nIiwiT0RhdGFTdHJpY3RIYW5kbGluZyIsImxhYmVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uU3RyaWN0UmVzcG9uc2UiLCJvblZhbGlkYXRpb24iLCJvblN0cmljdFZhbGlkYXRpb24iLCJiaW5kIiwib25DYW5jZWwiLCJvblN0cmljdENhbmNlbCIsImRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMiLCJzZXRCaW5kaW5nUGFyYW1ldGVycyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZGVlcENsb25lIiwiZW5oYW5jZSRzZWxlY3QiLCJleGlzdGluZ1NlbGVjdCIsIiRzZWxlY3QiLCJzcGxpdCIsInJldHVybkVudGl0eVR5cGUiLCJtZXRhTW9kZWwiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1lc3NhZ2VzUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiZ2V0UGF0aCIsImlzU2FtZUVudGl0eSIsInJldHVybkNvbGxlY3Rpb24iLCJzb3VyY2VFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsIm5hbWUiLCJpbmNsdWRlcyIsIiQkaW5oZXJpdEV4cGFuZFNlbGVjdCIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJDaGFuZ2VTZXQiLCJleGVjdXRlQ2hhbmdlc2V0IiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0IiwicHVzaCIsInNldFBhcmFtZXRlcnNWYWx1ZSIsImdyb3VwSWQiLCJwcm9taXNlcyIsImludm9rZSIsImRlZmF1bHRTdWJtaXQiLCJhZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwiY3VycmVudFByb21pc2VWYWx1ZXMiLCJhbGwiLCJtYXAiLCJjb250ZXh0IiwiZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbiIsInJlZHVjZSIsInByb21pc2UiLCJpZCIsInJlc29sdmUiLCJmaW5hbEdyb3VwSWQiLCJnZXRVcGRhdGVHcm91cElkIiwib3BlcmF0aW9uUHJvbWlzZSIsImVuaGFuY2VTaWRlRWZmZWN0cyIsInJldHVybmVkQ29udGV4dCIsImdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uIiwib3JpZ2luIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJzb21lIiwicGFnZVZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwiZGlhbG9nIiwiZmlyc3RJdGVyYXRpb25SZXNvbHZlIiwiZmlyc3RJdGVyYXRpb25SZWplY3QiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJyZWplY3QiLCJpc0FQSU1vZGUiLCJhZGQiLCJzaWRlRWZmZWN0c0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib3BlcmF0aW9uSW52b2tlIiwiaWdub3JlRVRhZyIsImhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmciLCJzdWJtaXRCYXRjaCIsInJlcGxhY2VXaXRoUlZDIiwicmFjZSIsIm9uQWZ0ZXJPRGF0YUludm9rZSIsImJvdW5kQ29udGV4dCIsInJldHJpZ2dlckZhaWxlZENvbnRleHRzIiwiaW5kZXgiLCJmYWlsZWRDb250ZXh0Iiwic3VibWl0Iiwic2l6ZSIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsInN1Ym1pdE9uTW9kZWwiLCJvbk9EYXRhU3VibWl0IiwiaXNTdHJpY3RDYW5jZWxlZCIsImlzQ2FuY2VsZWQiLCJkZWxldGUiLCJzdGFydHNXaXRoIiwic3VibWl0TW9kZSIsImdldE1hbmlmZXN0RW50cnkiLCJtb2RlbHMiLCJzZXR0aW5ncyIsImdyb3VwUHJvcGVydGllcyIsIlN1Ym1pdE1vZGUiLCJBdXRvIiwiRGlyZWN0IiwiZmlyc3RTdWJtaXQiLCJkZWZlcnJlZFN1Ym1pdCIsImRlZmF1bHRWYWx1ZXMiLCJwYXJhbWV0ZXJzVmFsdWVzIiwicGFyYW1ldGVyIiwidHlwZSIsInNldFBhcmFtZXRlciIsImxvY2FsUHJvbWlzZSIsInNpZGVFZmZlY3RzU2VydmljZSIsImRpc2FibGVTaWRlRWZmZWN0cyIsImNvbmNhdCIsInRyaWdnZXJBY3Rpb25zIiwiZXhlY3V0ZUFjdGlvbiIsInBhdGhFeHByZXNzaW9ucyIsIm9uUmVxdWVzdFNpZGVFZmZlY3RzIiwiaW5mbyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT0RhdGFPcGVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25JbXBvcnQsIEFjdGlvblBhcmFtZXRlciwgQWN0aW9uIGFzIEVkbUFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBTdWJtaXRNb2RlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvU3VibWl0TW9kZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcIi4uL2RyYWZ0XCI7XG5pbXBvcnQgT0RhdGFTdHJpY3RIYW5kbGluZyBmcm9tIFwiLi9PRGF0YVN0cmljdEhhbmRsaW5nXCI7XG5pbXBvcnQgYWN0aW9uSGVscGVyIGZyb20gXCIuL2FjdGlvbkhlbHBlclwiO1xuXG5jb25zdCBJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25SZXN1bHQgPSB7XG5cdHJldHVybmVkQ29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRib3VuZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT0RhdGFPcGVyYXRpb24ge1xuXHRwcml2YXRlIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nczogT0RhdGFDb250ZXh0QmluZGluZ1tdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBmaXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYXBpR3JvdXBJZHNUb1N1Ym1pdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBzaWRlRWZmZWN0czogQWN0aW9uU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYmluZGluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdHByaXZhdGUgbmV2ZXJTdWJtaXR0ZWQgPSB0cnVlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb0RhdGFTdHJpY3RIYW5kbGluZzogT0RhdGFTdHJpY3RIYW5kbGluZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGZhaWxlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25Qcm9taXNlczogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+W10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0XHRcdGRpc2FibGVTaWRlRWZmZWN0cz86IGJvb2xlYW47XG5cdFx0XHRnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25TdHJpY3RWYWxpZGF0aW9uPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlclxuXHRcdFx0XHRvblN0cmljdENhbmNlbD86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgc3RyaWN0IGhhbmRsaW5nIGlzIGNhbmNlbGVkIGJ5IHRoZSBlbmQgdXNlclxuXHRcdFx0XHRvblN0cmljdFJlc3BvbnNlPzogKG1lc3NhZ2VzNDEyOiBNZXNzYWdlW10pID0+IHZvaWQ7IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIGJhY2tlbmQgcmV0dXJucyAgNDEyIG1lc3NhZ2VzIChzdHJpY3QgaGFuZGxpbmcpXG5cdFx0XHRcdG9uT0RhdGFSZXNwb25zZT86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBhbGwgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWRcblx0XHRcdFx0b25PRGF0YVN1Ym1pdD86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgYmF0Y2ggaXMgc3VibWl0dGVkIChyZXF1ZXN0IHNlbnQgdG8gdGhlIGJhY2sgZW5kKVxuXHRcdFx0XHRvbkFmdGVyT0RhdGFJbnZva2U/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHByb21pc2Ugb2YgaW52b2tlIG1ldGhvZCBvZiB0aGUgb0RhdGFDb250ZXh0QmluZGluZyBpcyByZXNvbHZlZFxuXHRcdFx0XHRvbkFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gZmlyc3QgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWQgKGJlZm9yZSBzdHJpY3QgaGFuZGxpbmcgb3IgZmluYWwgcmVzcG9uc2UgaWYgbm8gNDEyIGFyZSByZWNlaXZlZClcblx0XHRcdFx0b25SZXF1ZXN0U2lkZUVmZmVjdHM/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gc2lkZUVmZmVjdHMgYXJlIHRyaWdnZXJlZFxuXHRcdFx0fTtcblx0XHRcdHBhcmFtZXRlcnNWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHR9LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0aW9uUHJvcGVydGllczoge1xuXHRcdFx0ZW5oYW5jZSRzZWxlY3Q/OiBib29sZWFuO1xuXHRcdFx0Z3JvdXBJZD86IHN0cmluZztcblx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRcdFx0ZGVmZXJyZWRTdWJtaXQ/OiBib29sZWFuO1xuXHRcdFx0aWdub3JlRVRhZz86IGJvb2xlYW47XG5cdFx0XHRyZXBsYWNlV2l0aFJWQz86IGJvb2xlYW47XG5cdFx0fSA9IHt9XG5cdCkge1xuXHRcdHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25OYW1lKGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSA/IHRoaXMub3BlcmF0aW9uIDogdGhpcy5vcGVyYXRpb24uYWN0aW9uKTtcblxuXHRcdHRoaXMuc2lkZUVmZmVjdHMgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdC5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHRoaXMuYWN0aW9uTmFtZSwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoISh0aGlzLm9wZXJhdGlvbiBhcyBFZG1BY3Rpb24pLmlzRnVuY3Rpb24gJiYgdGhpcy5wYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZyAhPT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nID0gbmV3IE9EYXRhU3RyaWN0SGFuZGxpbmcoe1xuXHRcdFx0XHRhcHBDb21wb25lbnQ6IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQsXG5cdFx0XHRcdGNvbnRleHRzOiB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMsXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnBhcmFtZXRlcnMubGFiZWwgPz8gdGhpcy5hY3Rpb25OYW1lLFxuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcsXG5cdFx0XHRcdGV2ZW50czoge1xuXHRcdFx0XHRcdG9uUmVzcG9uc2U6IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uU3RyaWN0UmVzcG9uc2UsXG5cdFx0XHRcdFx0b25WYWxpZGF0aW9uOiB0aGlzLm9uU3RyaWN0VmFsaWRhdGlvbi5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdG9uQ2FuY2VsOiB0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdENhbmNlbFxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5kZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk7XG5cdFx0dGhpcy5zZXRCaW5kaW5nUGFyYW1ldGVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmb3IgdGhlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwcml2YXRlIHNldEJpbmRpbmdQYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdHRoaXMuYmluZGluZ1BhcmFtZXRlcnMgPSBkZWVwQ2xvbmUodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmJpbmRpbmdQYXJhbWV0ZXJzID8/IHt9KTtcblxuXHRcdGlmIChcblx0XHRcdGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSAmJlxuXHRcdFx0IXRoaXMub3BlcmF0aW9uLmlzRnVuY3Rpb24gJiZcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggJiZcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5lbmhhbmNlJHNlbGVjdCA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmdTZWxlY3QgPSAodGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRcdGNvbnN0IHJldHVybkVudGl0eVR5cGUgPSB0aGlzLm9wZXJhdGlvbi5yZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG1ldGFNb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSkhO1xuXHRcdFx0Y29uc3QgaXNTYW1lRW50aXR5ID1cblx0XHRcdFx0IXRoaXMub3BlcmF0aW9uLnJldHVybkNvbGxlY3Rpb24gJiYgISFyZXR1cm5FbnRpdHlUeXBlICYmIHRoaXMub3BlcmF0aW9uLnNvdXJjZUVudGl0eVR5cGUgPT09IHJldHVybkVudGl0eVR5cGU7XG5cdFx0XHRpZiAoaXNTYW1lRW50aXR5KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQvKiBUaGUgZm9ybWVyIGxvZ2ljIGNoZWNrZWQgaWYgdGhlIG1lc3NhZ2VzUGF0aCBpcyBjb250YWluZWQgaW50byB0aGUgU2lkZUVmZmVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRoZSBjaGVjayB3YXMgaW52YWxpZCAoYWx3YXlzIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9uIHdlIGRvbid0IGNoZWNrIHRoZSBTaWRlRWZmZWN0cy4uXG5cdFx0XHRcdFx0ICAgXG5cdFx0XHRcdFx0ICAgdGhpcy5zaWRlRWZmZWN0cyAmJlxuXHRcdFx0XHRcdCAgIG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHRcdCAgICh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucyA/PyBbXSkuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIFttZXNzYWdlc1BhdGgsIFwiKlwiXS5pbmNsdWRlcyhleHApKSovXG5cdFx0XHRcdFx0bWVzc2FnZXNQYXRoICYmXG5cdFx0XHRcdFx0ISFyZXR1cm5FbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBtZXNzYWdlc1BhdGgpICYmXG5cdFx0XHRcdFx0IWV4aXN0aW5nU2VsZWN0LmluY2x1ZGVzKG1lc3NhZ2VzUGF0aClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gdGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHQ/IGAke3RoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHttZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0OiBtZXNzYWdlc1BhdGg7XG5cblx0XHRcdFx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiQkaW5oZXJpdEV4cGFuZFNlbGVjdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdGlmICghaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pKSB7XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSB0aGlzLm9wZXJhdGlvbi5hY3Rpb24ucGFyYW1ldGVycztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9SZW1vdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBwYXJhbWV0ZXJzIGxpc3Rcblx0XHRcdHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycyA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25QYXJhbWV0ZXJzKHRoaXMub3BlcmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBvcGVyYXRpb25Db250ZXh0QmluZGluZyBvZiB0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncykge1xuXHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuY2xlYXIoKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncyA9IFtdO1xuXHRcdHRoaXMuZmFpbGVkQ29udGV4dHMgPSBbXTtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCByZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IHRoaXMuZXhlY3V0ZUNoYW5nZXNldCgpXG5cdFx0XHRcdFx0OiB0aGlzLmV4ZWN1dGVTZXF1ZW50aWFsbHkoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3RoaXMuZXhlY3V0ZUltcG9ydCgpXSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVJlc3BvbnNlPy4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgaW1wb3J0IG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlSW1wb3J0KCk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQ29udGV4dCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5iaW5kQ29udGV4dChgLyR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHR0aGlzLnNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBncm91cElkID0gdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQgPz8gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBwcm9taXNlcyA9IFt0aGlzLmludm9rZShvcGVyYXRpb25Db250ZXh0LCBncm91cElkKV07XG5cblx0XHR0aGlzLmRlZmF1bHRTdWJtaXQoZ3JvdXBJZCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRjb25zdCBjdXJyZW50UHJvbWlzZVZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZXNbMF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgb24gb25lIGNoYW5nZXNldC5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNoYW5nZXNldCgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKGFzeW5jIChjb250ZXh0KSA9PlxuXHRcdFx0dGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dCwgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQpXG5cdFx0KTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5tYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzKCk7XG5cdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9ucyBzZXF1ZW50aWFsbHkuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25zXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVTZXF1ZW50aWFsbHkoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHQvLyBzZXJpYWxpemF0aW9uOiBleGVjdXRlQm91bmRPcGVyYXRpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQsIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkID8/IGBhcGlNb2RlJHtpZCArIDF9YCkpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgYm91bmQgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgYm91bmQgY29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYCR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgdGhpcy5iaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZmluYWxHcm91cElkID0gZ3JvdXBJZCA/PyBvcGVyYXRpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRjb25zdCBvcGVyYXRpb25Qcm9taXNlID0gdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZmluYWxHcm91cElkKTtcblx0XHRwcm9taXNlcy5wdXNoKG9wZXJhdGlvblByb21pc2UpO1xuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChmaW5hbEdyb3VwSWQpO1xuXHRcdFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIG9wZXJhdGlvblByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5oYW5jZXMgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqXG5cdCAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgY3JlYXRlZCB0byBleGVjdXRlIHRoZSBhY3Rpb24uIEJ5IGRlZmF1bHQsIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEJlY2F1c2Ugb2YgdGhpcyBkZXBlbmRlbmN5LCB3aGVuIGEgU2lkZUVmZmVjdHMgaXMgZXhlY3V0ZWQgb24gdGhlXG5cdCAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gSXQgbWVhbnMgZXZlbiBpZiB0aGUgZHJhZnQgcmVsYXRlZCB0byB0aGUgYWN0aW9uXG5cdCAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG5cdCAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuXHQgKiByZWNlaXZlZCBiZWNhdXNlIHdlIGFzayB0byByZWZyZXNoIGEgcHJvcGVydHkgb24gYW4gdW5rbm93biBlbnRpdHkuXG5cdCAqXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cblx0ICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyBpc3N1ZXMgd2l0aCBnaG9zdCBvRGF0YUNvbnRleHRCaW5kaW5nIGxpbmtlZCB0byBkZXN0cm95ZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBlbmhhbmNlU2lkZUVmZmVjdHMob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIHJldHVybmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAocmV0dXJuZWRDb250ZXh0ICYmIHRoaXMucGFyYW1ldGVycy5naG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudDtcblx0XHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgb25lIG9mIHRoZSBwYWdlcyBvciBhbiBvcGVuIGRpYWxvZyB1c2VzIHRoZSByZXR1cm5lZCBjb250ZXh0LlxuXHRcdFx0XHQvLyBJZiBub3QsIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlcXVlc3RlZC5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSByZXR1cm5lZENvbnRleHQpIHx8XG5cdFx0XHRcdFx0SW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuc29tZSgoZGlhbG9nKSA9PiBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW10pO1xuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLnJlcGxhY2VXaXRoUlZDXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNDb250ZXh0LCBncm91cElkLCBbb3BlcmF0aW9uSW52b2tlXSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLnJhY2UoW29wZXJhdGlvbkludm9rZSwgc3RyaWN0SGFuZGxpbmdQcm9taXNlXSk7XG5cblx0XHRcdHJldHVybmVkQ29udGV4dCA9IGF3YWl0IG9wZXJhdGlvbkludm9rZTtcblx0XHRcdHRoaXMuZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQpO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVqZWN0KGVycm9yKTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHR0aGlzLmZhaWxlZENvbnRleHRzLnB1c2goY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhSW52b2tlPy4ob3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXR1cm5lZENvbnRleHQsXG5cdFx0XHRib3VuZENvbnRleHQ6IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIHZhbGlkYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIG9uU3RyaWN0VmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFZhbGlkYXRpb24/LigpO1xuXHRcdHRoaXMucmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIGluIGNhc2Ugb2Ygc3RyaWN0IGhhbmRsaW5nLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmV3IG9wZXJhdGlvbnMgYXJlIHJlc29sdmVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vUmV0cnkgdGhlIGFjdGlvbiBleGVjdXRpb24gaW4gY2FzZSBvZiBzdHJpY3QgaGFuZGxpbmcgYW5kIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmYWlsZWQgY29udGV4dCAoZ2l2ZSBpdCBhbm90aGVyIHRyeSB0byBzdWNjZWVkKVxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0Zm9yIChjb25zdCBmYWlsZWRDb250ZXh0IG9mIHRoaXMuZmFpbGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGZhaWxlZENvbnRleHQsIGBhcGlSZXRyaWdnZXIke2luZGV4ICsgMX1gKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gMDtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuc2V0UGFyYW1ldGVyKG5hbWUsIGRlZmF1bHRWYWx1ZXNbbmFtZV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXF1ZXN0cyB0aGUgc2lkZSBlZmZlY3RzIGZvciB0aGUgYWN0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCAgVGhlIGNvbnRleHQgb2YgdGhlIFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSBncm91cElkICBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHBhcmFtIGxvY2FsUHJvbWlzZSBUaGUgcHJvbWlzZSBvZiB0aGUgaW52b2tlZCBhY3Rpb25cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIHNpZGUgZWZmZWN0XG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJlcXVlc3RTaWRlRWZmZWN0cyhjb250ZXh0OiBPRGF0YVY0Q29udGV4dCwgZ3JvdXBJZDogc3RyaW5nLCBsb2NhbFByb21pc2U/OiBQcm9taXNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBzaWRlRWZmZWN0c1NlcnZpY2UgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50LmdldFNpZGVFZmZlY3RzU2VydmljZSgpO1xuXHRcdGxldCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gbG9jYWxQcm9taXNlID8/IFtdO1xuXHRcdC8vIHRyaWdnZXIgYWN0aW9ucyBmcm9tIHNpZGUgZWZmZWN0c1xuXHRcdGlmICh0aGlzLnNpZGVFZmZlY3RzICYmICF0aGlzLnBhcmFtZXRlcnMuZGlzYWJsZVNpZGVFZmZlY3RzID09PSB0cnVlKSB7XG5cdFx0XHRwcm9taXNlcyA9IHByb21pc2VzLmNvbmNhdChcblx0XHRcdFx0KHRoaXMuc2lkZUVmZmVjdHMudHJpZ2dlckFjdGlvbnMgPz8gW10pLm1hcChhc3luYyAoYWN0aW9uKSA9PlxuXHRcdFx0XHRcdHNpZGVFZmZlY3RzU2VydmljZS5leGVjdXRlQWN0aW9uKGFjdGlvbiwgY29udGV4dCwgeyBzdWJtaXRCYXRjaDogZmFsc2UsIGdyb3VwSWQgfSlcblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnNcblx0XHRcdFx0XHQ/IHNpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHModGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMsIGNvbnRleHQsIGdyb3VwSWQpXG5cdFx0XHRcdFx0OiBbXVxuXHRcdFx0KTtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMucGF0aEV4cHJlc3Npb25zKSB7XG5cdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25SZXF1ZXN0U2lkZUVmZmVjdHM/Lih0aGlzLnNpZGVFZmZlY3RzLCB0aGlzLm9wZXJhdGlvbiwgcHJvbWlzZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRMb2cuaW5mbyhcIkVycm9yIHdoaWxlIHJlcXVlc3Rpbmcgc2lkZSBlZmZlY3RzIGZvciB0aGUgb3BlcmF0aW9uIFwiICsgdGhpcy5hY3Rpb25OYW1lLCBlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7RUFtQkEsTUFBTUEsa0JBQWtCLEdBQUdDLFNBQVMsQ0FBQ0Qsa0JBQWtCO0VBQUMsSUFPbkNFLGNBQWM7SUF1QmxDLFNBQUFBLGVBQ2tCQyxTQUFtQyxFQUNuQ0MsVUFvQmhCLEVBU0E7TUFBQSxJQVJnQkMsbUJBT2hCLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHLENBQUMsQ0FBQztNQUFBLEtBcERDRyx3QkFBd0IsR0FBMEIsRUFBRTtNQUFBLEtBRTNDQyx3QkFBd0IsR0FBdUIsRUFBRTtNQUFBLEtBRWpEQyxtQkFBbUIsR0FBZ0IsSUFBSUMsR0FBRyxDQUFDLENBQUM7TUFBQSxLQU1yREMsaUJBQWlCLEdBQTRCLENBQUMsQ0FBQztNQUFBLEtBRS9DQyxtQkFBbUIsR0FBc0IsRUFBRTtNQUFBLEtBRTNDQyxjQUFjLEdBQUcsSUFBSTtNQUFBLEtBSXJCQyxjQUFjLEdBQXFCLEVBQUU7TUFBQSxLQUVyQ0MsaUJBQWlCLEdBQStCLEVBQUU7TUFBQSxLQUd4Q2QsU0FBbUMsR0FBbkNBLFNBQW1DO01BQUEsS0FDbkNDLFVBb0JoQixHQXBCZ0JBLFVBb0JoQjtNQUFBLEtBQ2dCQyxtQkFPaEIsR0FQZ0JBLG1CQU9oQjtNQUVELElBQUksQ0FBQ2EsVUFBVSxHQUFHQyxZQUFZLENBQUNDLGFBQWEsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ2xCLFNBQVMsQ0FBQyxHQUFHLElB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
|
|
420
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnZvY2F0aW9uR3JvdXBpbmciLCJGRUxpYnJhcnkiLCJPRGF0YU9wZXJhdGlvbiIsIm9wZXJhdGlvbiIsInBhcmFtZXRlcnMiLCJvcGVyYXRpb25Qcm9wZXJ0aWVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwib3BlcmF0aW9uQ29udGV4dEJpbmRpbmdzIiwiZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zIiwiYXBpR3JvdXBJZHNUb1N1Ym1pdCIsIlNldCIsImJpbmRpbmdQYXJhbWV0ZXJzIiwib3BlcmF0aW9uUGFyYW1ldGVycyIsIm5ldmVyU3VibWl0dGVkIiwiZmFpbGVkQ29udGV4dHMiLCJvcGVyYXRpb25Qcm9taXNlcyIsImFjdGlvbk5hbWUiLCJhY3Rpb25IZWxwZXIiLCJnZXRBY3Rpb25OYW1lIiwiaXNBY3Rpb24iLCJhY3Rpb24iLCJzaWRlRWZmZWN0cyIsImFwcENvbXBvbmVudCIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldE9EYXRhQWN0aW9uU2lkZUVmZmVjdHMiLCJjb250ZXh0cyIsImlzRnVuY3Rpb24iLCJkaXNhYmxlU3RyaWN0SGFuZGxpbmciLCJvRGF0YVN0cmljdEhhbmRsaW5nIiwiT0RhdGFTdHJpY3RIYW5kbGluZyIsImxhYmVsIiwiaW52b2NhdGlvbkdyb3VwaW5nIiwiZXZlbnRzIiwib25SZXNwb25zZSIsIm9uU3RyaWN0UmVzcG9uc2UiLCJvblZhbGlkYXRpb24iLCJvblN0cmljdFZhbGlkYXRpb24iLCJiaW5kIiwib25DYW5jZWwiLCJvblN0cmljdENhbmNlbCIsImRlZmluZU9wZXJhdGlvblBhcmFtZXRlcnMiLCJzZXRCaW5kaW5nUGFyYW1ldGVycyIsIl9leHBvcnRzIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZGVlcENsb25lIiwiZW5oYW5jZSRzZWxlY3QiLCJleGlzdGluZ1NlbGVjdCIsIiRzZWxlY3QiLCJzcGxpdCIsInJldHVybkVudGl0eVR5cGUiLCJtZXRhTW9kZWwiLCJtb2RlbCIsImdldE1ldGFNb2RlbCIsIm1lc3NhZ2VzUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWVzc2FnZXNQYXRoIiwiZ2V0UGF0aCIsImlzU2FtZUVudGl0eSIsInJldHVybkNvbGxlY3Rpb24iLCJzb3VyY2VFbnRpdHlUeXBlIiwiZW50aXR5UHJvcGVydGllcyIsImZpbmQiLCJwcm9wZXJ0eSIsIm5hbWUiLCJpbmNsdWRlcyIsIiQkaW5oZXJpdEV4cGFuZFNlbGVjdCIsImdldEFjdGlvblBhcmFtZXRlcnMiLCJjbGVhciIsIm9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIiwiZGVzdHJveSIsImV4ZWN1dGUiLCJyZXN1bHQiLCJDaGFuZ2VTZXQiLCJleGVjdXRlQ2hhbmdlc2V0IiwiZXhlY3V0ZVNlcXVlbnRpYWxseSIsIlByb21pc2UiLCJhbGxTZXR0bGVkIiwiZXhlY3V0ZUltcG9ydCIsImVycm9yIiwiTG9nIiwib25PRGF0YVJlc3BvbnNlIiwib3BlcmF0aW9uQ29udGV4dCIsImJpbmRDb250ZXh0IiwicHVzaCIsInNldFBhcmFtZXRlcnNWYWx1ZSIsImdyb3VwSWQiLCJwcm9taXNlcyIsImludm9rZSIsImRlZmF1bHRTdWJtaXQiLCJhZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uIiwiY3VycmVudFByb21pc2VWYWx1ZXMiLCJhbGwiLCJtYXAiLCJjb250ZXh0IiwiZXhlY3V0ZUJvdW5kT3BlcmF0aW9uIiwibWFuYWdlU3RyaWN0SGFuZGxpbmdGYWlscyIsIm9uQWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbiIsInJlZHVjZSIsInByb21pc2UiLCJpZCIsInJlc29sdmUiLCJmaW5hbEdyb3VwSWQiLCJnZXRVcGRhdGVHcm91cElkIiwib3BlcmF0aW9uUHJvbWlzZSIsImVuaGFuY2VTaWRlRWZmZWN0cyIsInJldHVybmVkQ29udGV4dCIsImdob3N0Q29udGV4dEJpbmRpbmdQcm90ZWN0aW9uIiwib3JpZ2luIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZ2V0SW5zdGFuY2VkVmlld3MiLCJzb21lIiwicGFnZVZpZXciLCJnZXRCaW5kaW5nQ29udGV4dCIsIkluc3RhbmNlTWFuYWdlciIsImdldE9wZW5EaWFsb2dzIiwiZGlhbG9nIiwiZmlyc3RJdGVyYXRpb25SZXNvbHZlIiwiZmlyc3RJdGVyYXRpb25SZWplY3QiLCJzdHJpY3RIYW5kbGluZ1Byb21pc2UiLCJyZWplY3QiLCJpc0FQSU1vZGUiLCJhZGQiLCJzaWRlRWZmZWN0c0NvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib3BlcmF0aW9uSW52b2tlIiwiaWdub3JlRVRhZyIsImhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmciLCJzdWJtaXRCYXRjaCIsInJlcGxhY2VXaXRoUlZDIiwicmFjZSIsIm9uQWZ0ZXJPRGF0YUludm9rZSIsImJvdW5kQ29udGV4dCIsInJldHJpZ2dlckZhaWxlZENvbnRleHRzIiwiaW5kZXgiLCJmYWlsZWRDb250ZXh0Iiwic3VibWl0Iiwic2l6ZSIsIkFycmF5IiwiZnJvbSIsInZhbHVlcyIsInN1Ym1pdE9uTW9kZWwiLCJvbk9EYXRhU3VibWl0IiwiaXNTdHJpY3RDYW5jZWxlZCIsImlzQ2FuY2VsZWQiLCJkZWxldGUiLCJzdGFydHNXaXRoIiwic3VibWl0TW9kZSIsImdldE1hbmlmZXN0RW50cnkiLCJtb2RlbHMiLCJzZXR0aW5ncyIsImdyb3VwUHJvcGVydGllcyIsIlN1Ym1pdE1vZGUiLCJBdXRvIiwiRGlyZWN0IiwiZmlyc3RTdWJtaXQiLCJkZWZlcnJlZFN1Ym1pdCIsImRlZmF1bHRWYWx1ZXMiLCJwYXJhbWV0ZXJzVmFsdWVzIiwicGFyYW1ldGVyIiwidHlwZSIsInNldFBhcmFtZXRlciIsImxvY2FsUHJvbWlzZSIsInNpZGVFZmZlY3RzU2VydmljZSIsImRpc2FibGVTaWRlRWZmZWN0cyIsImNvbmNhdCIsInRyaWdnZXJBY3Rpb25zIiwiZXhlY3V0ZUFjdGlvbiIsInBhdGhFeHByZXNzaW9ucyIsIm9uUmVxdWVzdFNpZGVFZmZlY3RzIiwiaW5mbyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiT0RhdGFPcGVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb25JbXBvcnQsIEFjdGlvblBhcmFtZXRlciwgQWN0aW9uIGFzIEVkbUFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBGRUxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBJbnN0YW5jZU1hbmFnZXIgZnJvbSBcInNhcC9tL0luc3RhbmNlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUNvbnRleHRCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFDb250ZXh0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBTdWJtaXRNb2RlIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvU3VibWl0TW9kZVwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc0FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB0eXBlIHsgQWN0aW9uU2lkZUVmZmVjdHNUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQmluZENvbnRleHRQYXJhbWV0ZXJzIH0gZnJvbSBcIi4uL2RyYWZ0XCI7XG5pbXBvcnQgT0RhdGFTdHJpY3RIYW5kbGluZyBmcm9tIFwiLi9PRGF0YVN0cmljdEhhbmRsaW5nXCI7XG5pbXBvcnQgYWN0aW9uSGVscGVyIGZyb20gXCIuL2FjdGlvbkhlbHBlclwiO1xuXG5jb25zdCBJbnZvY2F0aW9uR3JvdXBpbmcgPSBGRUxpYnJhcnkuSW52b2NhdGlvbkdyb3VwaW5nO1xuXG5leHBvcnQgdHlwZSBPcGVyYXRpb25SZXN1bHQgPSB7XG5cdHJldHVybmVkQ29udGV4dD86IE9EYXRhVjRDb250ZXh0O1xuXHRib3VuZENvbnRleHQ6IE9EYXRhVjRDb250ZXh0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT0RhdGFPcGVyYXRpb24ge1xuXHRwcml2YXRlIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nczogT0RhdGFDb250ZXh0QmluZGluZ1tdID0gW107XG5cblx0cHJpdmF0ZSByZWFkb25seSBmaXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnM6IFByb21pc2U8dW5rbm93bj5bXSA9IFtdO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYXBpR3JvdXBJZHNUb1N1Ym1pdDogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG5cblx0cHJpdmF0ZSByZWFkb25seSBzaWRlRWZmZWN0czogQWN0aW9uU2lkZUVmZmVjdHNUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgYWN0aW9uTmFtZTogc3RyaW5nO1xuXG5cdHByaXZhdGUgYmluZGluZ1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25QYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJbXSA9IFtdO1xuXG5cdHByaXZhdGUgbmV2ZXJTdWJtaXR0ZWQgPSB0cnVlO1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgb0RhdGFTdHJpY3RIYW5kbGluZzogT0RhdGFTdHJpY3RIYW5kbGluZyB8IHVuZGVmaW5lZDtcblxuXHRwcml2YXRlIGZhaWxlZENvbnRleHRzOiBPRGF0YVY0Q29udGV4dFtdID0gW107XG5cblx0cHJpdmF0ZSBvcGVyYXRpb25Qcm9taXNlczogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+W10gPSBbXTtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHRwcml2YXRlIHJlYWRvbmx5IG9wZXJhdGlvbjogRWRtQWN0aW9uIHwgQWN0aW9uSW1wb3J0LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgcGFyYW1ldGVyczoge1xuXHRcdFx0YXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQ7XG5cdFx0XHRjb250ZXh0czogT0RhdGFWNENvbnRleHRbXTtcblx0XHRcdG1vZGVsOiBPRGF0YU1vZGVsO1xuXHRcdFx0aW52b2NhdGlvbkdyb3VwaW5nPzogc3RyaW5nO1xuXHRcdFx0ZGlzYWJsZVN0cmljdEhhbmRsaW5nPzogYm9vbGVhbjtcblx0XHRcdGRpc2FibGVTaWRlRWZmZWN0cz86IGJvb2xlYW47XG5cdFx0XHRnaG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbj86IGJvb2xlYW47XG5cdFx0XHRsYWJlbD86IHN0cmluZztcblx0XHRcdGV2ZW50cz86IHtcblx0XHRcdFx0b25TdHJpY3RWYWxpZGF0aW9uPzogRnVuY3Rpb247IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIHRoZSBzdHJpY3QgaGFuZGxpbmcgaXMgdmFsaWRhdGVkIGJ5IHRoZSBlbmQgdXNlclxuXHRcdFx0XHRvblN0cmljdENhbmNlbD86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgc3RyaWN0IGhhbmRsaW5nIGlzIGNhbmNlbGVkIGJ5IHRoZSBlbmQgdXNlclxuXHRcdFx0XHRvblN0cmljdFJlc3BvbnNlPzogKG1lc3NhZ2VzNDEyOiBNZXNzYWdlW10pID0+IHZvaWQ7IC8vZXZlbnRzIHRyaWdnZXJlZCB3aGVuIGJhY2tlbmQgcmV0dXJucyAgNDEyIG1lc3NhZ2VzIChzdHJpY3QgaGFuZGxpbmcpXG5cdFx0XHRcdG9uT0RhdGFSZXNwb25zZT86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiBhbGwgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWRcblx0XHRcdFx0b25PRGF0YVN1Ym1pdD86IEZ1bmN0aW9uOyAvL2V2ZW50cyB0cmlnZ2VyZWQgd2hlbiB0aGUgYmF0Y2ggaXMgc3VibWl0dGVkIChyZXF1ZXN0IHNlbnQgdG8gdGhlIGJhY2sgZW5kKVxuXHRcdFx0XHRvbkFmdGVyT0RhdGFJbnZva2U/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gdGhlIHByb21pc2Ugb2YgaW52b2tlIG1ldGhvZCBvZiB0aGUgb0RhdGFDb250ZXh0QmluZGluZyBpcyByZXNvbHZlZFxuXHRcdFx0XHRvbkFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gZmlyc3QgcmVzcG9uc2VzIHJlbGF0ZWQgdG8gdGhlIEZpb3JpIGVsZW1lbnQgb3BlcmF0aW9ucyBhcmUgcmVjZWl2ZWQgKGJlZm9yZSBzdHJpY3QgaGFuZGxpbmcgb3IgZmluYWwgcmVzcG9uc2UgaWYgbm8gNDEyIGFyZSByZWNlaXZlZClcblx0XHRcdFx0b25SZXF1ZXN0U2lkZUVmZmVjdHM/OiBGdW5jdGlvbjsgLy9ldmVudHMgdHJpZ2dlcmVkIHdoZW4gc2lkZUVmZmVjdHMgYXJlIHRyaWdnZXJlZFxuXHRcdFx0fTtcblx0XHRcdHBhcmFtZXRlcnNWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblx0XHR9LFxuXHRcdHByaXZhdGUgcmVhZG9ubHkgb3BlcmF0aW9uUHJvcGVydGllczoge1xuXHRcdFx0ZW5oYW5jZSRzZWxlY3Q/OiBib29sZWFuO1xuXHRcdFx0Z3JvdXBJZD86IHN0cmluZztcblx0XHRcdGJpbmRpbmdQYXJhbWV0ZXJzPzogQmluZENvbnRleHRQYXJhbWV0ZXJzO1xuXHRcdFx0ZGVmZXJyZWRTdWJtaXQ/OiBib29sZWFuO1xuXHRcdFx0aWdub3JlRVRhZz86IGJvb2xlYW47XG5cdFx0XHRyZXBsYWNlV2l0aFJWQz86IGJvb2xlYW47XG5cdFx0fSA9IHt9XG5cdCkge1xuXHRcdHRoaXMuYWN0aW9uTmFtZSA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25OYW1lKGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSA/IHRoaXMub3BlcmF0aW9uIDogdGhpcy5vcGVyYXRpb24uYWN0aW9uKTtcblxuXHRcdHRoaXMuc2lkZUVmZmVjdHMgPSB0aGlzLnBhcmFtZXRlcnMuYXBwQ29tcG9uZW50XG5cdFx0XHQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKClcblx0XHRcdC5nZXRPRGF0YUFjdGlvblNpZGVFZmZlY3RzKHRoaXMuYWN0aW9uTmFtZSwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzLmxlbmd0aCA/IHRoaXMucGFyYW1ldGVycy5jb250ZXh0c1swXSA6IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAoISh0aGlzLm9wZXJhdGlvbiBhcyBFZG1BY3Rpb24pLmlzRnVuY3Rpb24gJiYgdGhpcy5wYXJhbWV0ZXJzLmRpc2FibGVTdHJpY3RIYW5kbGluZyAhPT0gdHJ1ZSkge1xuXHRcdFx0dGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nID0gbmV3IE9EYXRhU3RyaWN0SGFuZGxpbmcoe1xuXHRcdFx0XHRhcHBDb21wb25lbnQ6IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQsXG5cdFx0XHRcdGNvbnRleHRzOiB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMsXG5cdFx0XHRcdGxhYmVsOiB0aGlzLnBhcmFtZXRlcnMubGFiZWwgPz8gdGhpcy5hY3Rpb25OYW1lLFxuXHRcdFx0XHRpbnZvY2F0aW9uR3JvdXBpbmc6IHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcsXG5cdFx0XHRcdGV2ZW50czoge1xuXHRcdFx0XHRcdG9uUmVzcG9uc2U6IHRoaXMucGFyYW1ldGVycy5ldmVudHM/Lm9uU3RyaWN0UmVzcG9uc2UsXG5cdFx0XHRcdFx0b25WYWxpZGF0aW9uOiB0aGlzLm9uU3RyaWN0VmFsaWRhdGlvbi5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdG9uQ2FuY2VsOiB0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdENhbmNlbFxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0dGhpcy5kZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk7XG5cdFx0dGhpcy5zZXRCaW5kaW5nUGFyYW1ldGVycygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmb3IgdGhlIG9wZXJhdGlvbnMuXG5cdCAqL1xuXHRwcml2YXRlIHNldEJpbmRpbmdQYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdHRoaXMuYmluZGluZ1BhcmFtZXRlcnMgPSBkZWVwQ2xvbmUodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmJpbmRpbmdQYXJhbWV0ZXJzID8/IHt9KTtcblxuXHRcdGlmIChcblx0XHRcdGlzQWN0aW9uKHRoaXMub3BlcmF0aW9uKSAmJlxuXHRcdFx0IXRoaXMub3BlcmF0aW9uLmlzRnVuY3Rpb24gJiZcblx0XHRcdHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGggJiZcblx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5lbmhhbmNlJHNlbGVjdCA9PT0gdHJ1ZVxuXHRcdCkge1xuXHRcdFx0Y29uc3QgZXhpc3RpbmdTZWxlY3QgPSAodGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0IGFzIHN0cmluZyB8IHVuZGVmaW5lZCk/LnNwbGl0KFwiLFwiKSA/PyBbXTtcblx0XHRcdGNvbnN0IHJldHVybkVudGl0eVR5cGUgPSB0aGlzLm9wZXJhdGlvbi5yZXR1cm5FbnRpdHlUeXBlO1xuXHRcdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5wYXJhbWV0ZXJzLm1vZGVsLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0Y29uc3QgbWVzc2FnZXNQYXRoID0gTW9kZWxIZWxwZXIuZ2V0TWVzc2FnZXNQYXRoKG1ldGFNb2RlbCwgdGhpcy5wYXJhbWV0ZXJzLmNvbnRleHRzWzBdLmdldFBhdGgoKSkhO1xuXHRcdFx0Y29uc3QgaXNTYW1lRW50aXR5ID1cblx0XHRcdFx0IXRoaXMub3BlcmF0aW9uLnJldHVybkNvbGxlY3Rpb24gJiYgISFyZXR1cm5FbnRpdHlUeXBlICYmIHRoaXMub3BlcmF0aW9uLnNvdXJjZUVudGl0eVR5cGUgPT09IHJldHVybkVudGl0eVR5cGU7XG5cdFx0XHRpZiAoaXNTYW1lRW50aXR5KSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQvKiBUaGUgZm9ybWVyIGxvZ2ljIGNoZWNrZWQgaWYgdGhlIG1lc3NhZ2VzUGF0aCBpcyBjb250YWluZWQgaW50byB0aGUgU2lkZUVmZmVjdHNcbiAgICAgICAgICAgICAgICAgICAgICAgYnV0IHRoZSBjaGVjayB3YXMgaW52YWxpZCAoYWx3YXlzIHRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgIFRvIGJlIGNvbXBsaWFudCB3aXRoIGZvcm1lciB2ZXJzaW9uIHdlIGRvbid0IGNoZWNrIHRoZSBTaWRlRWZmZWN0cy4uXG5cdFx0XHRcdFx0ICAgXG5cdFx0XHRcdFx0ICAgdGhpcy5zaWRlRWZmZWN0cyAmJlxuXHRcdFx0XHRcdCAgIG1lc3NhZ2VzUGF0aCAmJlxuXHRcdFx0XHRcdCAgICh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucyA/PyBbXSkuc29tZSgoZXhwKSA9PiB0eXBlb2YgZXhwID09PSBcInN0cmluZ1wiICYmIFttZXNzYWdlc1BhdGgsIFwiKlwiXS5pbmNsdWRlcyhleHApKSovXG5cdFx0XHRcdFx0bWVzc2FnZXNQYXRoICYmXG5cdFx0XHRcdFx0ISFyZXR1cm5FbnRpdHlUeXBlPy5lbnRpdHlQcm9wZXJ0aWVzLmZpbmQoKHByb3BlcnR5KSA9PiBwcm9wZXJ0eS5uYW1lID09PSBtZXNzYWdlc1BhdGgpICYmXG5cdFx0XHRcdFx0IWV4aXN0aW5nU2VsZWN0LmluY2x1ZGVzKG1lc3NhZ2VzUGF0aClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0ID0gdGhpcy5iaW5kaW5nUGFyYW1ldGVycy4kc2VsZWN0XG5cdFx0XHRcdFx0XHQ/IGAke3RoaXMuYmluZGluZ1BhcmFtZXRlcnMuJHNlbGVjdH0sJHttZXNzYWdlc1BhdGh9YFxuXHRcdFx0XHRcdFx0OiBtZXNzYWdlc1BhdGg7XG5cblx0XHRcdFx0XHR0aGlzLmJpbmRpbmdQYXJhbWV0ZXJzLiQkaW5oZXJpdEV4cGFuZFNlbGVjdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRGVmaW5lcyB0aGUgcGFyYW1ldGVycyBvZiB0aGUgb3BlcmF0aW9uLlxuXHQgKi9cblx0cHJpdmF0ZSBkZWZpbmVPcGVyYXRpb25QYXJhbWV0ZXJzKCk6IHZvaWQge1xuXHRcdGlmICghaXNBY3Rpb24odGhpcy5vcGVyYXRpb24pKSB7XG5cdFx0XHR0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMgPSB0aGlzLm9wZXJhdGlvbi5hY3Rpb24ucGFyYW1ldGVycztcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9SZW1vdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVycyBmcm9tIHRoZSBwYXJhbWV0ZXJzIGxpc3Rcblx0XHRcdHRoaXMub3BlcmF0aW9uUGFyYW1ldGVycyA9IGFjdGlvbkhlbHBlci5nZXRBY3Rpb25QYXJhbWV0ZXJzKHRoaXMub3BlcmF0aW9uKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xlYXIoKTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBvcGVyYXRpb25Db250ZXh0QmluZGluZyBvZiB0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncykge1xuXHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZGVzdHJveSgpO1xuXHRcdH1cblx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuY2xlYXIoKTtcblx0XHR0aGlzLm9wZXJhdGlvbkNvbnRleHRCaW5kaW5ncyA9IFtdO1xuXHRcdHRoaXMuZmFpbGVkQ29udGV4dHMgPSBbXTtcblx0XHR0aGlzLm9wZXJhdGlvblByb21pc2VzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0YXN5bmMgZXhlY3V0ZSgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdGxldCByZXN1bHQ6IFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXTtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0cmVzdWx0ID0gYXdhaXQgKHRoaXMucGFyYW1ldGVycy5pbnZvY2F0aW9uR3JvdXBpbmcgPT09IEludm9jYXRpb25Hcm91cGluZy5DaGFuZ2VTZXRcblx0XHRcdFx0XHQ/IHRoaXMuZXhlY3V0ZUNoYW5nZXNldCgpXG5cdFx0XHRcdFx0OiB0aGlzLmV4ZWN1dGVTZXF1ZW50aWFsbHkoKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXN1bHQgPSBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3RoaXMuZXhlY3V0ZUltcG9ydCgpXSk7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGV4ZWN1dGluZyBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVJlc3BvbnNlPy4oKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgaW1wb3J0IG9wZXJhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlSW1wb3J0KCk6IFByb21pc2U8T3BlcmF0aW9uUmVzdWx0PiB7XG5cdFx0Y29uc3Qgb3BlcmF0aW9uQ29udGV4dCA9IHRoaXMucGFyYW1ldGVycy5tb2RlbC5iaW5kQ29udGV4dChgLyR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHR0aGlzLnNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBncm91cElkID0gdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQgPz8gXCJhY3Rpb25JbXBvcnRcIjtcblx0XHRjb25zdCBwcm9taXNlcyA9IFt0aGlzLmludm9rZShvcGVyYXRpb25Db250ZXh0LCBncm91cElkKV07XG5cblx0XHR0aGlzLmRlZmF1bHRTdWJtaXQoZ3JvdXBJZCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHRhd2FpdCB0aGlzLmFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTtcblx0XHRjb25zdCBjdXJyZW50UHJvbWlzZVZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRyZXR1cm4gY3VycmVudFByb21pc2VWYWx1ZXNbMF07XG5cdH1cblxuXHQvKipcblx0ICogRXhlY3V0ZXMgdGhlIG9wZXJhdGlvbnMgb24gb25lIGNoYW5nZXNldC5cblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvbnNcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgZXhlY3V0ZUNoYW5nZXNldCgpOiBQcm9taXNlPFByb21pc2VTZXR0bGVkUmVzdWx0PE9wZXJhdGlvblJlc3VsdD5bXT4ge1xuXHRcdHRoaXMub3BlcmF0aW9uUHJvbWlzZXMgPSB0aGlzLnBhcmFtZXRlcnMuY29udGV4dHMubWFwKGFzeW5jIChjb250ZXh0KSA9PlxuXHRcdFx0dGhpcy5leGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dCwgdGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmdyb3VwSWQpXG5cdFx0KTtcblx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMpO1xuXHRcdGF3YWl0IHRoaXMuYWZ0ZXJPRGF0YU9wZXJhdGlvbkV4ZWN1dGlvbigpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGFmdGVyT0RhdGFPcGVyYXRpb25FeGVjdXRpb24oKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5tYW5hZ2VTdHJpY3RIYW5kbGluZ0ZhaWxzKCk7XG5cdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uPy4oKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgb3BlcmF0aW9ucyBzZXF1ZW50aWFsbHkuXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIG9mIHRoZSBvcGVyYXRpb25zXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGV4ZWN1dGVTZXF1ZW50aWFsbHkoKTogUHJvbWlzZTxQcm9taXNlU2V0dGxlZFJlc3VsdDxPcGVyYXRpb25SZXN1bHQ+W10+IHtcblx0XHQvLyBzZXJpYWxpemF0aW9uOiBleGVjdXRlQm91bmRPcGVyYXRpb24gdG8gYmUgY2FsbGVkIGZvciBlYWNoIGVudHJ5IG9ubHkgYWZ0ZXIgdGhlIHByb21pc2UgcmV0dXJuZWQgZnJvbSB0aGUgb25lIGJlZm9yZSBoYXMgYmVlbiByZXNvbHZlZFxuXHRcdGF3YWl0IHRoaXMucGFyYW1ldGVycy5jb250ZXh0cy5yZWR1Y2UoYXN5bmMgKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBpZDogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0XHRhd2FpdCBwcm9taXNlO1xuXHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGNvbnRleHQsIHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5ncm91cElkID8/IGBhcGlNb2RlJHtpZCArIDF9YCkpO1xuXHRcdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHRoaXMuZmlyc3RJdGVyYXRpb25PcGVyYXRpb25zKTtcblx0XHR9LCBQcm9taXNlLnJlc29sdmUoKSk7XG5cdFx0YXdhaXQgdGhpcy5hZnRlck9EYXRhT3BlcmF0aW9uRXhlY3V0aW9uKCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZCh0aGlzLm9wZXJhdGlvblByb21pc2VzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgYm91bmQgb3BlcmF0aW9uLlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgYm91bmQgY29udGV4dFxuXHQgKiBAcGFyYW0gZ3JvdXBJZCBUaGUgZ3JvdXBJZCBvZiB0aGUgYmF0Y2hcblx0ICogQHJldHVybnMgVGhlIHByb21pc2Ugb2YgdGhlIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBleGVjdXRlQm91bmRPcGVyYXRpb24oY29udGV4dDogT0RhdGFWNENvbnRleHQsIGdyb3VwSWQ/OiBzdHJpbmcpOiBQcm9taXNlPE9wZXJhdGlvblJlc3VsdD4ge1xuXHRcdGNvbnN0IG9wZXJhdGlvbkNvbnRleHQgPSB0aGlzLnBhcmFtZXRlcnMubW9kZWwuYmluZENvbnRleHQoYCR7dGhpcy5hY3Rpb25OYW1lfSguLi4pYCwgY29udGV4dCwgdGhpcy5iaW5kaW5nUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5vcGVyYXRpb25Db250ZXh0QmluZGluZ3MucHVzaChvcGVyYXRpb25Db250ZXh0KTtcblx0XHRjb25zdCBwcm9taXNlczogUHJvbWlzZTx1bmtub3duPltdID0gW107XG5cdFx0dGhpcy5zZXRQYXJhbWV0ZXJzVmFsdWUob3BlcmF0aW9uQ29udGV4dCk7XG5cdFx0Y29uc3QgZmluYWxHcm91cElkID0gZ3JvdXBJZCA/PyBvcGVyYXRpb25Db250ZXh0LmdldFVwZGF0ZUdyb3VwSWQoKTtcblx0XHRjb25zdCBvcGVyYXRpb25Qcm9taXNlID0gdGhpcy5pbnZva2Uob3BlcmF0aW9uQ29udGV4dCwgZmluYWxHcm91cElkKTtcblx0XHRwcm9taXNlcy5wdXNoKG9wZXJhdGlvblByb21pc2UpO1xuXHRcdHRoaXMuZGVmYXVsdFN1Ym1pdChmaW5hbEdyb3VwSWQpO1xuXHRcdFByb21pc2UuYWxsU2V0dGxlZChwcm9taXNlcyk7XG5cdFx0cmV0dXJuIG9wZXJhdGlvblByb21pc2U7XG5cdH1cblxuXHQvKipcblx0ICogRW5oYW5jZXMgdGhlIHNpZGUgZWZmZWN0cyBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqXG5cdCAqIFdoZW4gYSBuZXcgZW50aXR5IGlzIGNyZWF0ZWQgdXNpbmcgYSBEYXRhRmllbGRGb3JBY3Rpb24sIGEgbmV3XG5cdCAqIG9EYXRhQ29udGV4dEJpbmRpbmcgaXMgY3JlYXRlZCB0byBleGVjdXRlIHRoZSBhY3Rpb24uIEJ5IGRlZmF1bHQsIHRoaXNcblx0ICogb0RhdGFDb250ZXh0QmluZGluZyBpcyByZWxhdGl2ZSB0byB0aGUgT2RhdGFMaXN0QmluZGluZyBvZiB0aGUgdGFibGUuXG5cdCAqXG5cdCAqIEJlY2F1c2Ugb2YgdGhpcyBkZXBlbmRlbmN5LCB3aGVuIGEgU2lkZUVmZmVjdHMgaXMgZXhlY3V0ZWQgb24gdGhlXG5cdCAqIGNvbnRleHQgaW50byB0aGUgT2RhdGFMaXN0QmluZGluZyB3aGVyZSB0aGUgb0RhdGFDb250ZXh0QmluZGluZyB3YXMgYm91bmQsIHRoaXMgU2lkZUVmZmVjdHMgaXMgYWxzbyB0cmlnZ2VyZWQgb24gdGhpc1xuXHQgKiBvRGF0YUNvbnRleHRCaW5kaW5nLiBXZSBkb24ndCBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGVcblx0ICogb0RhdGFDb250ZXh0QmluZGluZy4gSXQgbWVhbnMgZXZlbiBpZiB0aGUgZHJhZnQgcmVsYXRlZCB0byB0aGUgYWN0aW9uXG5cdCAqIGlzIHJlbW92ZWQsIHRoZSBvZGF0YUNvbnRleHRCaW5kaW5nIGlzIHN0aWxsIHRoZXJlLCBzbyBpZiBhIFNpZGVFZmZlY3RzXG5cdCAqIGlzIGV4ZWN1dGVkIG9uIHRoZSBzb3VyY2UgdGFyZ2V0IGludG8gb0RhdGFDb250ZXh0QmluZGluZywgYW4gZXJyb3IgZnJvbSB0aGUgYmFjayBlbmQgd2lsbCBiZVxuXHQgKiByZWNlaXZlZCBiZWNhdXNlIHdlIGFzayB0byByZWZyZXNoIGEgcHJvcGVydHkgb24gYW4gdW5rbm93biBlbnRpdHkuXG5cdCAqXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyBhcmUgcmVxdWVzdGVkIG9ubHkgaWYgdGhlIHBhZ2UgaXMgc3RpbGwgb3Blbi5cblx0ICogVGhpcyBhdm9pZHMgZ2VuZXJhdGluZyBpc3N1ZXMgd2l0aCBnaG9zdCBvRGF0YUNvbnRleHRCaW5kaW5nIGxpbmtlZCB0byBkZXN0cm95ZWQgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb25cblx0ICogQHBhcmFtIHJldHVybmVkQ29udGV4dCBUaGUgcmV0dXJuZWQgY29udGV4dCBvZiB0aGlzIG9wZXJhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBlbmhhbmNlU2lkZUVmZmVjdHMob3BlcmF0aW9uQ29udGV4dEJpbmRpbmc6IE9EYXRhQ29udGV4dEJpbmRpbmcsIHJldHVybmVkQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHRpZiAocmV0dXJuZWRDb250ZXh0ICYmIHRoaXMucGFyYW1ldGVycy5naG9zdENvbnRleHRCaW5kaW5nUHJvdGVjdGlvbiA9PT0gdHJ1ZSkge1xuXHRcdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5wYXJhbWV0ZXJzLmFwcENvbXBvbmVudDtcblx0XHRcdGNvbnN0IG9yaWdpbiA9IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cy5iaW5kKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nKTtcblx0XHRcdG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLnJlcXVlc3RTaWRlRWZmZWN0cyA9IGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgb25lIG9mIHRoZSBwYWdlcyBvciBhbiBvcGVuIGRpYWxvZyB1c2VzIHRoZSByZXR1cm5lZCBjb250ZXh0LlxuXHRcdFx0XHQvLyBJZiBub3QsIHNpZGUgZWZmZWN0cyBhcmUgbm90IHJlcXVlc3RlZC5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGFwcENvbXBvbmVudFxuXHRcdFx0XHRcdFx0LmdldFJvb3RWaWV3Q29udHJvbGxlcigpXG5cdFx0XHRcdFx0XHQuZ2V0SW5zdGFuY2VkVmlld3MoKVxuXHRcdFx0XHRcdFx0LnNvbWUoKHBhZ2VWaWV3OiBWaWV3KSA9PiBwYWdlVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpID09PSByZXR1cm5lZENvbnRleHQpIHx8XG5cdFx0XHRcdFx0SW5zdGFuY2VNYW5hZ2VyLmdldE9wZW5EaWFsb2dzKCkuc29tZSgoZGlhbG9nKSA9PiBkaWFsb2cuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gcmV0dXJuZWRDb250ZXh0KVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEludm9rZXMgdGhlIG9wZXJhdGlvbiBvbiB0aGUgY29udGV4dC5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqIEBwYXJhbSBncm91cElkIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgb3BlcmF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIGludm9rZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZywgZ3JvdXBJZDogc3RyaW5nKTogUHJvbWlzZTxPcGVyYXRpb25SZXN1bHQ+IHtcblx0XHRsZXQgcmV0dXJuZWRDb250ZXh0O1xuXHRcdGxldCBmaXJzdEl0ZXJhdGlvblJlc29sdmUhOiBGdW5jdGlvbjtcblx0XHRsZXQgZmlyc3RJdGVyYXRpb25SZWplY3QhOiBGdW5jdGlvbjtcblx0XHRjb25zdCBzdHJpY3RIYW5kbGluZ1Byb21pc2UgPSBuZXcgUHJvbWlzZTx1bmtub3duPihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmaXJzdEl0ZXJhdGlvblJlc29sdmUgPSByZXNvbHZlO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdFx0dGhpcy5maXJzdEl0ZXJhdGlvbk9wZXJhdGlvbnMucHVzaChzdHJpY3RIYW5kbGluZ1Byb21pc2UpO1xuXHRcdGlmIChncm91cElkICYmIHRoaXMuaXNBUElNb2RlKGdyb3VwSWQpKSB7XG5cdFx0XHR0aGlzLmFwaUdyb3VwSWRzVG9TdWJtaXQuYWRkKGdyb3VwSWQpO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgc2lkZUVmZmVjdHNDb250ZXh0ID1cblx0XHRcdFx0KG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldENvbnRleHQoKSBhcyBPRGF0YVY0Q29udGV4dCB8IHVuZGVmaW5lZCkgPz8gb3BlcmF0aW9uQ29udGV4dEJpbmRpbmcuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRjb25zdCBvcGVyYXRpb25JbnZva2UgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5pbnZva2UoXG5cdFx0XHRcdGdyb3VwSWQsXG5cdFx0XHRcdHRoaXMub3BlcmF0aW9uUHJvcGVydGllcy5pZ25vcmVFVGFnLFxuXHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmc/LmhhbmRsZU9kYXRhU3RyaWN0SGFuZGxpbmcuYmluZChcblx0XHRcdFx0XHR0aGlzLm9EYXRhU3RyaWN0SGFuZGxpbmcsXG5cdFx0XHRcdFx0b3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsXG5cdFx0XHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlLFxuXHRcdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucmVxdWVzdFNpZGVFZmZlY3RzKHNpZGVFZmZlY3RzQ29udGV4dCwgZ3JvdXBJZCwgW10pO1xuXHRcdFx0XHRcdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0KSxcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLnJlcGxhY2VXaXRoUlZDXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMoc2lkZUVmZmVjdHNDb250ZXh0LCBncm91cElkLCBbb3BlcmF0aW9uSW52b2tlXSk7XG5cdFx0XHRhd2FpdCBQcm9taXNlLnJhY2UoW29wZXJhdGlvbkludm9rZSwgc3RyaWN0SGFuZGxpbmdQcm9taXNlXSk7XG5cblx0XHRcdHJldHVybmVkQ29udGV4dCA9IGF3YWl0IG9wZXJhdGlvbkludm9rZTtcblx0XHRcdHRoaXMuZW5oYW5jZVNpZGVFZmZlY3RzKG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLCByZXR1cm5lZENvbnRleHQpO1xuXHRcdFx0Zmlyc3RJdGVyYXRpb25SZXNvbHZlKCk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGZpcnN0SXRlcmF0aW9uUmVqZWN0KGVycm9yKTtcblx0XHRcdGNvbnN0IGNvbnRleHQgPSBvcGVyYXRpb25Db250ZXh0QmluZGluZy5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAoY29udGV4dCkge1xuXHRcdFx0XHR0aGlzLmZhaWxlZENvbnRleHRzLnB1c2goY29udGV4dCBhcyBPRGF0YVY0Q29udGV4dCk7XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0YXdhaXQgdGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25BZnRlck9EYXRhSW52b2tlPy4ob3BlcmF0aW9uQ29udGV4dEJpbmRpbmcsIGdyb3VwSWQpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRyZXR1cm5lZENvbnRleHQsXG5cdFx0XHRib3VuZENvbnRleHQ6IG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nLmdldEJvdW5kQ29udGV4dCgpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgTWFuYWdlcyB0aGUgc3RyaWN0IGhhbmRsaW5nIHZhbGlkYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIG9uU3RyaWN0VmFsaWRhdGlvbigpOiB2b2lkIHtcblx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblN0cmljdFZhbGlkYXRpb24/LigpO1xuXHRcdHRoaXMucmV0cmlnZ2VyRmFpbGVkQ29udGV4dHMoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiAgVHJpZ2dlcnMgdGhlIGZhaWxlZCBvcGVyYXRpb25zIGluIGNhc2Ugb2Ygc3RyaWN0IGhhbmRsaW5nLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2ZWQgd2hlbiB0aGUgbmV3IG9wZXJhdGlvbnMgYXJlIHJlc29sdmVkXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIHJldHJpZ2dlckZhaWxlZENvbnRleHRzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vUmV0cnkgdGhlIGFjdGlvbiBleGVjdXRpb24gaW4gY2FzZSBvZiBzdHJpY3QgaGFuZGxpbmcgYW5kIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBmYWlsZWQgY29udGV4dCAoZ2l2ZSBpdCBhbm90aGVyIHRyeSB0byBzdWNjZWVkKVxuXHRcdGlmICh0aGlzLnBhcmFtZXRlcnMuaW52b2NhdGlvbkdyb3VwaW5nICE9PSBJbnZvY2F0aW9uR3JvdXBpbmcuQ2hhbmdlU2V0KSB7XG5cdFx0XHRsZXQgaW5kZXggPSAwO1xuXHRcdFx0Zm9yIChjb25zdCBmYWlsZWRDb250ZXh0IG9mIHRoaXMuZmFpbGVkQ29udGV4dHMpIHtcblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0dGhpcy5vcGVyYXRpb25Qcm9taXNlcy5wdXNoKHRoaXMuZXhlY3V0ZUJvdW5kT3BlcmF0aW9uKGZhaWxlZENvbnRleHQsIGBhcGlSZXRyaWdnZXIke2luZGV4ICsgMX1gKSk7XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQodGhpcy5vcGVyYXRpb25Qcm9taXNlcyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFN1Ym1pdHMgdGhlIGJhdGNoIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICovXG5cdHB1YmxpYyBzdWJtaXQoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5ldmVyU3VibWl0dGVkIHx8IHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5zaXplID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGZvciAoY29uc3QgZ3JvdXBJZCBvZiBBcnJheS5mcm9tKHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC52YWx1ZXMoKSkpIHtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdH1cblxuXHQvKipcblx0ICogIElzIHN0cmljdCBoYW5kbGluZyBjYW5jZWxlZC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBpdCBpcyBjYW5jZWxlZCwgb3RoZXJ3aXNlIGZhbHNlXG5cdCAqL1xuXHRwdWJsaWMgaXNTdHJpY3RDYW5jZWxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5vRGF0YVN0cmljdEhhbmRsaW5nPy5pc0NhbmNlbGVkKCkgPz8gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogU3VibWl0cyB0aGUgYmF0Y2ggYXQgdGhlIG1vZGVsIGxldmVsIHJlbGF0ZWQgdG8gdGhlIGdyb3VwSWQgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIHN1Ym1pdE9uTW9kZWwoZ3JvdXBJZDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5wYXJhbWV0ZXJzLm1vZGVsLnN1Ym1pdEJhdGNoKGdyb3VwSWQpO1xuXHRcdHRoaXMuYXBpR3JvdXBJZHNUb1N1Ym1pdC5kZWxldGUoZ3JvdXBJZCk7XG5cdH1cblxuXHQvKipcblx0ICogSXMgdGhlIFN1Ym1pdE1vZGUgb2YgdGhlIGdyb3VwSWQgc2V0IHRvIEFQSS5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIFN1Ym1pdE1vZGUgaXMgc2V0IHRvIEFQSSwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRwcml2YXRlIGlzQVBJTW9kZShncm91cElkPzogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0aWYgKCFncm91cElkKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChncm91cElkLnN0YXJ0c1dpdGgoXCIkYXV0b1wiKSB8fCBncm91cElkLnN0YXJ0c1dpdGgoXCIkZGlyZWN0XCIpIHx8IGdyb3VwSWQuc3RhcnRzV2l0aChcIiRzaW5nbGVcIikpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3Qgc3VibWl0TW9kZSA9IChcblx0XHRcdHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik/Lm1vZGVsc1tcIlwiXT8uc2V0dGluZ3MgYXNcblx0XHRcdFx0fCB7IGdyb3VwUHJvcGVydGllcz86IFJlY29yZDxzdHJpbmcsIHsgc3VibWl0OiBTdWJtaXRNb2RlIH0+IH1cblx0XHRcdFx0fCB1bmRlZmluZWRcblx0XHQpPy5ncm91cFByb3BlcnRpZXM/Lltncm91cElkXT8uc3VibWl0O1xuXG5cdFx0aWYgKHN1Ym1pdE1vZGUgPT09IHVuZGVmaW5lZCB8fCBbU3VibWl0TW9kZS5BdXRvLCBTdWJtaXRNb2RlLkRpcmVjdF0uaW5jbHVkZXMoc3VibWl0TW9kZSkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeGVjdXRlcyB0aGUgc3VibWl0IG9mIHRoZSBvcGVyYXRpb24gaWYgdGhlIHN1Ym1pdE1vZGUgaXMgb24gQVBJIGFuZCBkZWZlcnJlZFN1Ym1pdCBpcyBub3Qgc2V0IHRvIHRydWVcblx0ICogVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbC5cblx0ICogQHBhcmFtIGdyb3VwSWQgVGhlIGdyb3VwSWQgb2YgdGhlIGJhdGNoXG5cdCAqL1xuXHRwcml2YXRlIGRlZmF1bHRTdWJtaXQoZ3JvdXBJZD86IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IGZpcnN0U3VibWl0ID0gdGhpcy5uZXZlclN1Ym1pdHRlZDtcblx0XHRjb25zdCBpc0FQSU1vZGUgPSB0aGlzLmlzQVBJTW9kZShncm91cElkKTtcblx0XHRpZiAoIWlzQVBJTW9kZSkge1xuXHRcdFx0Ly8gVGhlIHN1Ym1pdEJhdGNoIGlzIHNraXBwZWQgaWYgdGhlIGdyb3VwSWQgaXMgJGF1dG8gb3IgJGRpcmVjdCBzaW5jZSBkb25lIGJ5IHRoZSBtb2RlbFxuXHRcdFx0dGhpcy5uZXZlclN1Ym1pdHRlZCA9IGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vcGVyYXRpb25Qcm9wZXJ0aWVzLmRlZmVycmVkU3VibWl0ICE9PSB0cnVlICYmIGdyb3VwSWQpIHtcblx0XHRcdHRoaXMubmV2ZXJTdWJtaXR0ZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3VibWl0T25Nb2RlbChncm91cElkKTtcblx0XHR9XG5cdFx0aWYgKGZpcnN0U3VibWl0ICYmICF0aGlzLm5ldmVyU3VibWl0dGVkKSB7XG5cdFx0XHQvL1RyaWdnZXIgdGhlIGNhbGxiYWNrIG9ubHkgb25jZVxuXHRcdFx0dGhpcy5wYXJhbWV0ZXJzLmV2ZW50cz8ub25PRGF0YVN1Ym1pdD8uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqICBTZXRzIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIHBhcmFtZXRlcnMgb2YgdGhlIG9wZXJhdGlvbi5cblx0ICogQHBhcmFtIG9wZXJhdGlvbkNvbnRleHRCaW5kaW5nIFRoZSBvcGVyYXRpb24gY29udGV4dCBiaW5kaW5nXG5cdCAqL1xuXHRwcml2YXRlIHNldFBhcmFtZXRlcnNWYWx1ZShvcGVyYXRpb25Db250ZXh0QmluZGluZzogT0RhdGFDb250ZXh0QmluZGluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBkZWZhdWx0VmFsdWVzID0gdGhpcy5wYXJhbWV0ZXJzLnBhcmFtZXRlcnNWYWx1ZXMgPz8ge307XG5cdFx0XHRmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiB0aGlzLm9wZXJhdGlvblBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IHBhcmFtZXRlci5uYW1lO1xuXHRcdFx0XHRpZiAoIWRlZmF1bHRWYWx1ZXNbbmFtZV0pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKHBhcmFtZXRlci50eXBlKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLlN0cmluZ1wiOlxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0VmFsdWVzW25hbWVdID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRjYXNlIFwiRWRtLkJvb2xlYW5cIjpcblx0XHRcdFx0XHRcdFx0ZGVmYXVsdFZhbHVlc1tuYW1lXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJFZG0uQnl0ZVwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQxNlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQzMlwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5JbnQ2NFwiOlxuXHRcdFx0XHRcdFx0Y2FzZSBcIkVkbS5EZWNpbWFsXCI6XG5cdFx0XHRcdFx0XHRcdGRlZmF1bHRWYWx1ZXNbbmFtZV0gPSAwO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRvcGVyYXRpb25Db250ZXh0QmluZGluZy5zZXRQYXJhbWV0ZXIobmFtZSwgZGVmYXVsdFZhbHVlc1tuYW1lXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3RzIHRoZSBzaWRlIGVmZmVjdHMgZm9yIHRoZSBhY3Rpb24uXG5cdCAqIEBwYXJhbSBjb250ZXh0ICBUaGUgY29udGV4dCBvZiB0aGUgU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIGdyb3VwSWQgIFRoZSBncm91cElkIG9mIHRoZSBiYXRjaFxuXHQgKiBAcGFyYW0gbG9jYWxQcm9taXNlIFRoZSBwcm9taXNlIG9mIHRoZSBpbnZva2VkIGFjdGlvblxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSBvZiB0aGUgc2lkZSBlZmZlY3Rcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgcmVxdWVzdFNpZGVFZmZlY3RzKGNvbnRleHQ6IE9EYXRhVjRDb250ZXh0LCBncm91cElkOiBzdHJpbmcsIGxvY2FsUHJvbWlzZT86IFByb21pc2U8dW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHNpZGVFZmZlY3RzU2VydmljZSA9IHRoaXMucGFyYW1ldGVycy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk7XG5cdFx0bGV0IHByb21pc2VzOiBQcm9taXNlPHVua25vd24+W10gPSBsb2NhbFByb21pc2UgPz8gW107XG5cdFx0Ly8gdHJpZ2dlciBhY3Rpb25zIGZyb20gc2lkZSBlZmZlY3RzXG5cdFx0aWYgKHRoaXMuc2lkZUVmZmVjdHMgJiYgIXRoaXMucGFyYW1ldGVycy5kaXNhYmxlU2lkZUVmZmVjdHMgPT09IHRydWUpIHtcblx0XHRcdHByb21pc2VzID0gcHJvbWlzZXMuY29uY2F0KFxuXHRcdFx0XHQodGhpcy5zaWRlRWZmZWN0cy50cmlnZ2VyQWN0aW9ucyA/PyBbXSkubWFwKGFzeW5jIChhY3Rpb24pID0+XG5cdFx0XHRcdFx0c2lkZUVmZmVjdHNTZXJ2aWNlLmV4ZWN1dGVBY3Rpb24oYWN0aW9uLCBjb250ZXh0LCB7IHN1Ym1pdEJhdGNoOiBmYWxzZSwgZ3JvdXBJZCB9KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9uc1xuXHRcdFx0XHRcdD8gc2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyh0aGlzLnNpZGVFZmZlY3RzLnBhdGhFeHByZXNzaW9ucywgY29udGV4dCwgZ3JvdXBJZClcblx0XHRcdFx0XHQ6IFtdXG5cdFx0XHQpO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0YXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRcdFx0XHRpZiAodGhpcy5zaWRlRWZmZWN0cy5wYXRoRXhwcmVzc2lvbnMpIHtcblx0XHRcdFx0XHR0aGlzLnBhcmFtZXRlcnMuZXZlbnRzPy5vblJlcXVlc3RTaWRlRWZmZWN0cz8uKHRoaXMuc2lkZUVmZmVjdHMsIHRoaXMub3BlcmF0aW9uLCBwcm9taXNlcyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5pbmZvKFwiRXJyb3Igd2hpbGUgcmVxdWVzdGluZyBzaWRlIGVmZmVjdHMgZm9yIHRoZSBvcGVyYXRpb24gXCIgKyB0aGlzLmFjdGlvbk5hbWUsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztFQW1CQSxNQUFNQSxrQkFBa0IsR0FBR0MsU0FBUyxDQUFDRCxrQkFBa0I7RUFBQyxJQU9uQ0UsY0FBYztJQXVCbEMsU0FBQUEsZUFDa0JDLFNBQW1DLEVBQ25DQyxVQW9CaEIsRUFTQTtNQUFBLElBUmdCQyxtQkFPaEIsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BQUcsQ0FBQyxDQUFDO01BQUEsS0FwRENHLHdCQUF3QixHQUEwQixFQUFFO01BQUEsS0FFM0NDLHdCQUF3QixHQUF1QixFQUFFO01BQUEsS0FFakRDLG1CQUFtQixHQUFnQixJQUFJQyxHQUFHLENBQUMsQ0FBQztNQUFBLEtBTXJEQyxpQkFBaUIsR0FBNEIsQ0FBQyxDQUFDO01BQUEsS0FFL0NDLG1CQUFtQixHQUFzQixFQUFFO01BQUEsS0FFM0NDLGNBQWMsR0FBRyxJQUFJO01BQUEsS0FJckJDLGNBQWMsR0FBcUIsRUFBRTtNQUFBLEtBRXJDQyxpQkFBaUIsR0FBK0IsRUFBRTtNQUFBLEtBR3hDZCxTQUFtQyxHQUFuQ0EsU0FBbUM7TUFBQSxLQUNuQ0MsVUFvQmhCLEdBcEJnQkEsVUFvQmhCO01BQUEsS0FDZ0JDLG1CQU9oQixHQVBnQkEsbUJBT2hCO01BRUQsSUFBSSxDQUFDYSxVQUFVLEdBQUdDLFlBQVksQ0FBQ0MsYUFBYSxDQUFDQyxRQUFR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
|