@sapui5/sap.fe.templates 1.148.1 → 1.148.3
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/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +13 -3
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +7 -3
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +1 -0
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +20 -2
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +22 -1
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +3 -2
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.ts +4 -1
- package/src/sap/fe/templates/ObjectPage/manifest.json +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/ExpandedHeading.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +7 -3
- package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +4 -4
- package/src/sap/fe/templates/library.js +1 -1
package/package.json
CHANGED
|
@@ -375,12 +375,22 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/base/ClassSupport",
|
|
|
375
375
|
Information: {
|
|
376
376
|
id: 0,
|
|
377
377
|
count: 0
|
|
378
|
+
},
|
|
379
|
+
Success: {
|
|
380
|
+
id: 0,
|
|
381
|
+
count: 0
|
|
382
|
+
},
|
|
383
|
+
None: {
|
|
384
|
+
id: 0,
|
|
385
|
+
count: 0
|
|
378
386
|
}
|
|
379
387
|
};
|
|
380
388
|
message = messages.reduce((acc, currentValue) => {
|
|
381
389
|
const currentType = currentValue.getType();
|
|
382
|
-
|
|
383
|
-
messageStats[
|
|
390
|
+
const currentStats = messageStats[currentType] ?? messageStats.Information;
|
|
391
|
+
const accStats = messageStats[acc.getType()] ?? messageStats.Information;
|
|
392
|
+
acc.setType(currentStats.id > accStats.id ? currentType : acc.getType());
|
|
393
|
+
currentStats.count++;
|
|
384
394
|
return acc;
|
|
385
395
|
}, new Message({
|
|
386
396
|
type: MessageType.Information
|
|
@@ -640,4 +650,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/uid", "sap/fe/base/ClassSupport",
|
|
|
640
650
|
}(ExtensionAPI)) || _class);
|
|
641
651
|
return ObjectPageExtensionAPI;
|
|
642
652
|
}, false);
|
|
643
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2NsYXNzIiwiX0V4dGVuc2lvbkFQSSIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiaXNOYXZpZ2F0aW5nVG9TdWJTZWN0aW9uIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJyZWZyZXNoIiwidlBhdGgiLCJvQmluZGluZ0NvbnRleHQiLCJfdmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJvQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1NpZGVFZmZlY3RzIiwidGFyZ2V0UHJvcGVydGllcyIsInRhcmdldEVudGl0aWVzIiwidW5kZWZpbmVkIiwicHVzaCIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiYWxsUGF0aHMiLCJpc0FycmF5Iiwib3duZXJDb21wb25lbnQiLCJfY29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsInBhdGgiLCJraW5kIiwiZ2V0T2JqZWN0IiwicmVqZWN0IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInNUYWJsZUlkIiwidGFibGUiLCJieUlkIiwiaXNBIiwiZ2V0UGFyZW50Iiwic2hvd1NpZGVDb250ZW50Iiwic1N1YlNlY3Rpb25LZXkiLCJiU2hvdyIsInNCbG9ja0lEIiwiZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRCIsIm9CbG9jayIsInNDdXJyZW50QnJlYWtwb2ludCIsImdldEN1cnJlbnRCcmVha3BvaW50IiwiYkJsb2NrU3RhdGUiLCJnZXRTaG93U2lkZUNvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJzZXRTaG93TWFpbkNvbnRlbnQiLCJfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoIiwiaW50ZXJuYWxNb2RlbENvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInZpZXdDb250ZXh0UGF0aCIsInJlcGxhY2UiLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlc09yU3RyaXAiLCJfc2hvd01lc3NhZ2VzIiwic2hvd0N1c3RvbU1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJyZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImN1c3RvbU1lc3NhZ2VTdHJpcElkIiwiZ2V0SWQiLCJ1aWQiLCJhZGRTdHlsZUNsYXNzIiwiYWRkQ3VzdG9tTWVzc2FnZVN0cmlwVG9QYWdlIiwibWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQiLCJoZWFkZXJDb250YWluZXIiLCJpbnNlcnRJbnRvQWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbk5hbWUiLCJjb250cm9sVG9JbnNlcnQiLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImNvbnRlbnRBcnJheSIsImluc2VydEFnZ3JlZ2F0aW9uIiwiY2xvbmUiLCJyZW1vdmVGcm9tQWdncmVnYXRpb24iLCJpZE1hdGNoZXIiLCJjb250cm9sVG9SZW1vdmUiLCJmaW5kIiwiY29udHJvbCIsInJlbW92ZUFnZ3JlZ2F0aW9uIiwiZGVzdHJveSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwiY3JlYXRlTWVzc2FnZUl0ZW0iLCJtZXNzYWdlIiwic0Rlc2NyaXB0aW9uVXJsIiwiZ2V0RGVzY3JpcHRpb25VcmwiLCJNZXNzYWdlSXRlbSIsInRpdGxlIiwiZ2V0TWVzc2FnZSIsImRlc2NyaXB0aW9uIiwiZ2V0RGVzY3JpcHRpb24iLCJ0eXBlIiwiZ2V0VHlwZSIsImxvbmd0ZXh0VXJsIiwic3VidGl0bGUiLCJnZXRBZGRpdGlvbmFsVGV4dCIsImdyb3VwTmFtZSIsImFjdGl2ZVRpdGxlIiwiZ2V0Q29udHJvbElkcyIsImNyZWF0ZU1lc3NhZ2VQb3BvdmVyIiwibWVzc2FnZUl0ZW1zIiwicG9wb3ZlciIsIk1lc3NhZ2VQb3BvdmVyIiwiaXRlbXMiLCJzaG93TWVzc2FnZVBvcG92ZXIiLCJldmVudCIsIm1lc3NhZ2VJdGVtIiwic291cmNlQ29udHJvbCIsImdldFNvdXJjZSIsImFkZERlcGVuZGVudCIsIm9wZW5CeSIsIm1lc3NhZ2VzIiwib3JpZ2luIiwidmlldyIsImludGVybmFsTW9kZWwiLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJoYXNEZXNjcmlwdGlvblVybCIsImlzRWRpdE1vZGUiLCJnZXRJc0VkaXRhYmxlIiwib2JqZWN0UGFnZSIsImdldENvbnRlbnQiLCJoZWFkZXJUaXRsZSIsImdldEhlYWRlclRpdGxlIiwiYWxsU3RyaXBzIiwiZ2V0U25hcHBlZENvbnRlbnQiLCJnZXRFeHBhbmRlZENvbnRlbnQiLCJmaWx0ZXIiLCJpdGVtIiwiTWVzc2FnZVN0cmlwIiwiZm9yRWFjaCIsInN0cmlwIiwiZ2V0TGluayIsImRlc3Ryb3lMaW5rIiwibGluayIsIkxpbmsiLCJ0ZXh0IiwiZ2V0VGV4dCIsInByZXNzIiwic2V0TGluayIsImVyciIsIkxvZyIsIndhcm5pbmciLCJtZXNzYWdlU3RhdHMiLCJFcnJvciIsImlkIiwiY291bnQiLCJXYXJuaW5nIiwiSW5mb3JtYXRpb24iLCJyZWR1Y2UiLCJhY2MiLCJjdXJyZW50VmFsdWUiLCJjdXJyZW50VHlwZSIsInNldFR5cGUiLCJNZXNzYWdlIiwiTWVzc2FnZVR5cGUiLCJzZXRNZXNzYWdlIiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiYW5ub3VuY2UiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsImVycm9yIiwiaGlkZU1lc3NhZ2UiLCJzZXRSZWNvbW1lbmRhdGlvbnMiLCJkYXRhIiwicmVjb21tZW5kYXRpb25IZWxwZXIiLCJ0cmFuc2Zvcm1SZWNvbW1lbmRhdGlvbnNGb3JJbnRlcm5hbFN0b3JhZ2UiLCJzZXRBc1NlY3Rpb25UaXRsZU93bmVyIiwic2VjdGlvbiIsIm9yaWdpbmFsQ29udHJvbCIsInJldXNlQ29tcG9uZW50IiwiY29udGFpbmVyIiwiY29udHJvbFBhcmVudCIsImdldFZpc2libGVTdWJTZWN0aW9ucyIsImFkanVzdEZvclNpbmdsZUNvbnRlbnQiLCJtdWx0aXBsZVN1YlNlY3Rpb25zV2l0aFJldXNlQ29tcG9uZW50Iiwic2hvd05hdmlnYXRpb25FcnJvciIsInNUaXRsZSIsIk1lc3NhZ2VCb3giLCJuYXZpZ2F0ZVRvRmlyc3RTZWN0aW9uIiwib2JqZWN0UGFnZUxheW91dCIsInNlY3Rpb25zIiwiZ2V0U2VjdGlvbnMiLCJmaXJzdFNlY3Rpb24iLCJzdWJTZWN0aW9ucyIsImdldFN1YlNlY3Rpb25zIiwiZmlyc3RTdWJTZWN0aW9uIiwic3ViU2VjdGlvbkZ1bGxJZCIsInNldFNlbGVjdGVkU2VjdGlvbiIsImZpcmVOYXZpZ2F0ZSIsInN1YlNlY3Rpb24iLCJuYXZpZ2F0ZVRvU3ViU2VjdGlvbiIsInNlY3Rpb25PclN1YlNlY3Rpb25JZCIsInJlc2V0TmF2aWdhdGlvbkZsYWciLCJkZWxheU1zIiwic2V0VGltZW91dCIsImdldERvbVJlZiIsImdldFZpc2libGUiLCJ0YXJnZXRTdWJTZWN0aW9uIiwidGFyZ2V0U2VjdGlvbiIsImlzTmF2aWdhdGluZ1RvU2VjdGlvbiIsImhhc1ZhbGlkVGFyZ2V0Iiwic2VjdGlvbkZ1bGxJZCIsInNjcm9sbFRvU2VjdGlvbiIsInBhcmVudFNlY3Rpb24iLCJwYXJlbnRTZWN0aW9uRnVsbElkIiwiaXNQYXJlbnRTZWN0aW9uU2VsZWN0ZWQiLCJnZXRTZWxlY3RlZFNlY3Rpb24iLCJhdHRlbXB0cyIsIm1heEF0dGVtcHRzIiwiY2hlY2tTdWJzZWN0aW9uUmVhZHkiLCJzdWJTZWN0aW9uRG9tIiwic2Nyb2xsVGFyZ2V0IiwiRXh0ZW5zaW9uQVBJIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFeHRlbnNpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBnZXRTaWRlQ29udGVudExheW91dElEIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9JRFwiO1xuaW1wb3J0IEV4dGVuc2lvbkFQSSBmcm9tIFwic2FwL2ZlL2NvcmUvRXh0ZW5zaW9uQVBJXCI7XG5pbXBvcnQgdHlwZSB7IEluQ29tcGxldGVuZXNzSW5mb1R5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHsgcmVjb21tZW5kYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IFJlc291cmNlTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVzb3VyY2VNb2RlbEhlbHBlclwiO1xuaW1wb3J0IHR5cGUgUmV1c2VDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1JldXNlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBTZWN0aW9uIGZyb20gXCJzYXAvZmUvbWFjcm9zL2NvbnRyb2xzL1NlY3Rpb25cIjtcbmltcG9ydCB0eXBlIFRhYmxlQVBJIGZyb20gXCJzYXAvZmUvbWFjcm9zL1RhYmxlXCI7XG5pbXBvcnQgTGluayBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IE1lc3NhZ2VCb3ggZnJvbSBcInNhcC9tL01lc3NhZ2VCb3hcIjtcbmltcG9ydCBNZXNzYWdlSXRlbSBmcm9tIFwic2FwL20vTWVzc2FnZUl0ZW1cIjtcbmltcG9ydCBNZXNzYWdlUG9wb3ZlciBmcm9tIFwic2FwL20vTWVzc2FnZVBvcG92ZXJcIjtcbmltcG9ydCBNZXNzYWdlU3RyaXAgZnJvbSBcInNhcC9tL01lc3NhZ2VTdHJpcFwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgSW52aXNpYmxlTWVzc2FnZSBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlTWVzc2FnZVwiO1xuaW1wb3J0IHsgSW52aXNpYmxlTWVzc2FnZU1vZGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IE1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgdHlwZSBEeW5hbWljU2lkZUNvbnRlbnQgZnJvbSBcInNhcC91aS9sYXlvdXQvRHluYW1pY1NpZGVDb250ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvbWRjL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFRhYmxlIGZyb20gXCJzYXAvdWkvbWRjL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVNlY3Rpb25cIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VTdWJTZWN0aW9uIGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlU3ViU2VjdGlvblwiO1xuXG4vKipcbiAqIEV4dGVuc2lvbiBBUEkgZm9yIG9iamVjdCBwYWdlcyBvbiBTQVAgRmlvcmkgZWxlbWVudHMgZm9yIE9EYXRhIFY0LlxuICpcbiAqIFRvIGNvcnJlY3RseSBpbnRlZ3JhdGUgeW91ciBhcHAgZXh0ZW5zaW9uIGNvZGluZyB3aXRoIFNBUCBGaW9yaSBlbGVtZW50cywgdXNlIG9ubHkgdGhlIGV4dGVuc2lvbkFQSSBvZiBTQVAgRmlvcmkgZWxlbWVudHMuIERvbid0IGFjY2VzcyBvciBtYW5pcHVsYXRlIGNvbnRyb2xzLCBwcm9wZXJ0aWVzLCBtb2RlbHMsIG9yIG90aGVyIGludGVybmFsIG9iamVjdHMgY3JlYXRlZCBieSB0aGUgU0FQIEZpb3JpIGVsZW1lbnRzIGZyYW1ld29yay5cbiAqIEBwdWJsaWNcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBmaW5hbFxuICogQHNpbmNlIDEuNzkuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2UuRXh0ZW5zaW9uQVBJXCIpXG5jbGFzcyBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIGV4dGVuZHMgRXh0ZW5zaW9uQVBJIHtcblx0LyoqXG5cdCAqIElEIG9mIHRoZSBhY3RpdmUgY3VzdG9tIE1lc3NhZ2VTdHJpcCBmb3IgcHJvZ3JhbW1hdGljIHJlbW92YWwuXG5cdCAqL1xuXHRwcml2YXRlIGN1c3RvbU1lc3NhZ2VTdHJpcElkPzogc3RyaW5nO1xuXG5cdC8qKlxuXHQgKiBGbGFnIHRvIHByZXZlbnQgY29uY3VycmVudCBuYXZpZ2F0ZVRvU3ViU2VjdGlvbiBjYWxscy5cblx0ICogU2V0IHRvIHRydWUgd2hlbiBuYXZpZ2F0aW9uIHN0YXJ0cywgcmVzZXQgYWZ0ZXIgbmF2aWdhdGlvbiBjb21wbGV0ZXMgKGluY2x1ZGluZyBwb2xsaW5nKS5cblx0ICovXG5cdHByaXZhdGUgaXNOYXZpZ2F0aW5nVG9TdWJTZWN0aW9uID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIFJlZnJlc2hlcyBlaXRoZXIgdGhlIHdob2xlIG9iamVjdCBwYWdlIG9yIG9ubHkgcGFydHMgb2YgaXQuXG5cdCAqIEBwYXJhbSBbdlBhdGhdIFBhdGggb3IgYXJyYXkgb2YgcGF0aHMgcmVmZXJyaW5nIHRvIGVudGl0aWVzIG9yIHByb3BlcnRpZXMgdG8gYmUgcmVmcmVzaGVkLlxuXHQgKiBJZiBvbWl0dGVkLCB0aGUgd2hvbGUgb2JqZWN0IHBhZ2UgaXMgcmVmcmVzaGVkLiBUaGUgcGF0aCBcIlwiIHJlZnJlc2hlcyB0aGUgZW50aXR5IGFzc2lnbmVkIHRvIHRoZSBvYmplY3QgcGFnZVxuXHQgKiB3aXRob3V0IG5hdmlnYXRpb24uXG5cdCAqIEByZXR1cm5zIFJlc29sdmVkIG9uY2UgdGhlIGRhdGEgaXMgcmVmcmVzaGVkIG9yIHJlamVjdGVkIGlmIHRoZSByZXF1ZXN0IGZhaWxlZFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyByZWZyZXNoKHZQYXRoPzogc3RyaW5nIHwgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0aWYgKCFvQmluZGluZ0NvbnRleHQpIHtcblx0XHRcdC8vIG5vdGhpbmcgdG8gYmUgcmVmcmVzaGVkIC0gZG8gbm90IGJsb2NrIHRoZSBhcHAhXG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fdmlldyksXG5cdFx0XHRvU2lkZUVmZmVjdHNTZXJ2aWNlID0gb0FwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUYXJnZXRUeXBlID0ge1xuXHRcdFx0XHR0YXJnZXRQcm9wZXJ0aWVzOiBbXSxcblx0XHRcdFx0dGFyZ2V0RW50aXRpZXM6IFtdXG5cdFx0XHR9O1xuXG5cdFx0aWYgKHZQYXRoID09PSB1bmRlZmluZWQgfHwgdlBhdGggPT09IG51bGwpIHtcblx0XHRcdC8vIHdlIGp1c3QgYWRkIGFuIGVtcHR5IHBhdGggd2hpY2ggc2hvdWxkIHJlZnJlc2ggdGhlIHBhZ2Ugd2l0aCBhbGwgZGVwZW5kZW50IGJpbmRpbmdzXG5cdFx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMucHVzaCh7XG5cdFx0XHRcdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBcIlwiXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgYWxsUGF0aHMgPSBBcnJheS5pc0FycmF5KHZQYXRoKSA/IHZQYXRoIDogW3ZQYXRoXTtcblx0XHRcdGNvbnN0IG93bmVyQ29tcG9uZW50ID0gdGhpcy5fY29udHJvbGxlci5nZXRPd25lckNvbXBvbmVudCgpIGFzIHVua25vd24gYXMge1xuXHRcdFx0XHRnZXRDb250ZXh0UGF0aDogKCkgPT4gc3RyaW5nO1xuXHRcdFx0XHRnZXRFbnRpdHlTZXQ6ICgpID0+IHN0cmluZztcblx0XHRcdH07XG5cdFx0XHRjb25zdCBjb250ZXh0UGF0aCA9IG93bmVyQ29tcG9uZW50LmdldENvbnRleHRQYXRoKCkgfHwgYC8ke293bmVyQ29tcG9uZW50LmdldEVudGl0eVNldCgpfWA7XG5cblx0XHRcdGZvciAoY29uc3QgcGF0aCBvZiBhbGxQYXRocykge1xuXHRcdFx0XHRpZiAocGF0aCA9PT0gXCJcIikge1xuXHRcdFx0XHRcdC8vIGFuIGVtcHR5IHBhdGggc2hhbGwgcmVmcmVzaCB0aGUgZW50aXR5IHdpdGhvdXQgZGVwZW5kZW5jaWVzIHdoaWNoIG1lYW5zICogZm9yIHRoZSBtb2RlbFxuXHRcdFx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzLnB1c2goXCIqXCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnN0IGtpbmQgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgJHtjb250ZXh0UGF0aH0vJHtwYXRofS8ka2luZGApO1xuXG5cdFx0XHRcdFx0aWYgKGtpbmQgPT09IFwiTmF2aWdhdGlvblByb3BlcnR5XCIpIHtcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0JE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHBhdGhcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoa2luZCkge1xuXHRcdFx0XHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXMucHVzaChwYXRoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KGAke3BhdGh9IGlzIG5vdCBhIHZhbGlkIHBhdGggdG8gYmUgcmVmcmVzaGVkYCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvU2lkZUVmZmVjdHNTZXJ2aWNlLnJlcXVlc3RTaWRlRWZmZWN0cyhbLi4ub1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzLCAuLi5vU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllc10sIG9CaW5kaW5nQ29udGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGlzdCBlbnRyaWVzIGN1cnJlbnRseSBzZWxlY3RlZCBmb3IgdGhlIHRhYmxlLlxuXHQgKiBAcGFyYW0gc1RhYmxlSWQgVGhlIElEIGlkZW50aWZ5aW5nIHRoZSB0YWJsZSB0aGUgc2VsZWN0ZWQgY29udGV4dCBpcyByZXF1ZXN0ZWQgZm9yXG5cdCAqIEByZXR1cm5zIEFycmF5IGNvbnRhaW5pbmcgdGhlIHNlbGVjdGVkIGNvbnRleHRzXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldFNlbGVjdGVkQ29udGV4dHMoc1RhYmxlSWQ6IHN0cmluZyk6IE9EYXRhVjRDb250ZXh0W10ge1xuXHRcdGxldCB0YWJsZSA9IHRoaXMuX3ZpZXcuYnlJZChzVGFibGVJZCk7XG5cdFx0aWYgKHRhYmxlPy5pc0E8VGFibGU+KFwic2FwLnVpLm1kYy5UYWJsZVwiKSkge1xuXHRcdFx0dGFibGUgPSB0YWJsZS5nZXRQYXJlbnQoKSBhcyBUYWJsZUFQSTtcblx0XHR9XG5cdFx0aWYgKHRhYmxlPy5pc0EoXCJzYXAuZmUubWFjcm9zLlRhYmxlXCIpKSB7XG5cdFx0XHRyZXR1cm4gKHRhYmxlIGFzIFRhYmxlQVBJKS5nZXRTZWxlY3RlZENvbnRleHRzKCk7XG5cdFx0fVxuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyBvciBoaWRlcyB0aGUgc2lkZSBjb250ZW50IG9mIGFuIG9iamVjdCBwYWdlLlxuXHQgKiBAcGFyYW0gc1N1YlNlY3Rpb25LZXkgS2V5IG9mIHRoZSBzaWRlIGNvbnRlbnQgZnJhZ21lbnQgYXMgZGVmaW5lZCBpbiB0aGUgbWFuaWZlc3QuanNvblxuXHQgKiBAcGFyYW0gW2JTaG93XSBPcHRpb25hbCBCb29sZWFuIGZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSBzaWRlIGNvbnRlbnRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2hvd1NpZGVDb250ZW50KHNTdWJTZWN0aW9uS2V5OiBzdHJpbmcsIGJTaG93PzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IHNCbG9ja0lEID0gZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRChzU3ViU2VjdGlvbktleSksXG5cdFx0XHRvQmxvY2sgPSB0aGlzLl92aWV3LmJ5SWQoc0Jsb2NrSUQpIGFzIER5bmFtaWNTaWRlQ29udGVudDtcblxuXHRcdGlmICghb0Jsb2NrKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc0N1cnJlbnRCcmVha3BvaW50ID0gb0Jsb2NrLmdldEN1cnJlbnRCcmVha3BvaW50KCk7XG5cdFx0Y29uc3QgYkJsb2NrU3RhdGUgPSBiU2hvdyA9PT0gdW5kZWZpbmVkID8gIW9CbG9jay5nZXRTaG93U2lkZUNvbnRlbnQoKSA6IGJTaG93O1xuXG5cdFx0Ly8gT24gc21hbGwgc2NyZWVucyAoUyBicmVha3BvaW50KSwgc2lkZSBjb250ZW50IHNob3VsZCByZXBsYWNlIG1haW4gY29udGVudFxuXHRcdGlmIChzQ3VycmVudEJyZWFrcG9pbnQgPT09IFwiU1wiKSB7XG5cdFx0XHRpZiAoYkJsb2NrU3RhdGUpIHtcblx0XHRcdFx0Ly8gU2hvdyBzaWRlIGNvbnRlbnQsIGhpZGUgbWFpbiBjb250ZW50XG5cdFx0XHRcdG9CbG9jay5zZXRTaG93U2lkZUNvbnRlbnQodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0XHRvQmxvY2suc2V0U2hvd01haW5Db250ZW50KGZhbHNlLCBmYWxzZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBIaWRlIHNpZGUgY29udGVudCwgc2hvdyBtYWluIGNvbnRlbnRcblx0XHRcdFx0b0Jsb2NrLnNldFNob3dTaWRlQ29udGVudChmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHRvQmxvY2suc2V0U2hvd01haW5Db250ZW50KHRydWUsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT24gbGFyZ2VyIHNjcmVlbnMsIHNob3cgc2lkZSBjb250ZW50IGFsb25nc2lkZSBtYWluIGNvbnRlbnRcblx0XHRcdC8vIEFsd2F5cyBrZWVwIG1haW4gY29udGVudCB2aXNpYmxlIG9uIGxhcmdlIHNjcmVlbnNcblx0XHRcdG9CbG9jay5zZXRTaG93TWFpbkNvbnRlbnQodHJ1ZSwgZmFsc2UpO1xuXHRcdFx0b0Jsb2NrLnNldFNob3dTaWRlQ29udGVudChiQmxvY2tTdGF0ZSwgZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBib3VuZCBjb250ZXh0IG9mIHRoZSBjdXJyZW50IG9iamVjdCBwYWdlLlxuXHQgKiBAcmV0dXJucyBDb250ZXh0IGJvdW5kIHRvIHRoZSBvYmplY3QgcGFnZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRCaW5kaW5nQ29udGV4dCgpOiBDb250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBCdWlsZCB0aGUgaW50ZXJuYWwgY29udGV4dCBwYXRoIG9mIHRoZSBNZXNzYWdlU3RyaXAgY29udHJvbC5cblx0ICogQHJldHVybnMgVGhlIGludGVybmFsIGJpbmRpbmcgY29udGV4dCBwYXRoIGZvciB0aGUgbWVzc2FnZVN0cmlwXG5cdCAqL1xuXHRfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW50ZXJuYWxNb2RlbENvbnRleHRQYXRoID0gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpPy5nZXRQYXRoKCk7XG5cdFx0Y29uc3Qgdmlld0NvbnRleHRQYXRoID0gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCk7XG5cdFx0cmV0dXJuIGludGVybmFsTW9kZWxDb250ZXh0UGF0aCAmJiB2aWV3Q29udGV4dFBhdGhcblx0XHRcdD8gYCR7aW50ZXJuYWxNb2RlbENvbnRleHRQYXRofS9NZXNzYWdlU3RyaXAvJHt2aWV3Q29udGV4dFBhdGgucmVwbGFjZSgvXFwvL2csIFwiLVwiKX1gXG5cdFx0XHQ6IFwiXCI7XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgdGhlIG1lc3NhZ2Ugc3RyaXAgYmV0d2VlbiB0aGUgdGl0bGUgYW5kIHRoZSBoZWFkZXIgb2YgdGhlIE9iamVjdFBhZ2UuIElmIG9ubHkgb25lIG1lc3NhZ2UgaXMgcHJvdmlkZWQsIGl0IGlzIGRpc3BsYXllZCBkaXJlY3RseSBpbiB0aGUgbWVzc2FnZSBzdHJpcC4gSWYgbXVsdGlwbGUgbWVzc2FnZXMgYXJlIHByb3ZpZGVkLCB0aGV5IGFyZSBwcmlvcml0aXplZCBieSB0aGUgb3JkZXI6IEVycm9yLCBXYXJuaW5nLCBhbmQgSW5mb3JtYXRpb24gYW5kIGEgY29ycmVzcG9uZGluZyBnZW5lcmljIHRleHQgaXMgZGlzcGxheWVkOlxuXHQgKiAtIEVycm9yOiBcIlRoZSBvYmplY3QgY29udGFpbnMgZXJyb3JzLlwiXG5cdCAqIC0gV2FybmluZzogXCJUaGUgb2JqZWN0IGNvbnRhaW5zIHdhcm5pbmdzLlwiXG5cdCAqIC0gSW5mb3JtYXRpb246IFwiVGhlIG9iamVjdCBjb250YWlucyBtZXNzYWdlcy5cIlxuXHQgKiBJZiBhIGJhY2stZW5kIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgd2l0aCBhIHRhcmdldCBwb2ludGluZyB0byB0aGUgT2JqZWN0IFBhZ2UsIGl0IGlzIGRpc3BsYXllZCBpbiB0aGUgbWVzc2FnZSBzdHJpcCwgb3ZlcnJpZGluZyBhbnkgZXhpc3RpbmcgbWVzc2FnZSBvciBtZXNzYWdlIHN0cmlwLiBJZiBtdWx0aXBsZSBiYWNrLWVuZCBtZXNzYWdlcyBhcmUgcmVjZWl2ZWQsIHRoZSBtZXNzYWdlIHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgaXMgZGlzcGxheWVkIHdpdGggYSBnZW5lcmljIHRleHQgYXMgZGVzY3JpYmVkIGFib3ZlLlxuXHQgKiBAcGFyYW0gIG1lc3NhZ2VzT3JTdHJpcCBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWQgb3IgYSBNZXNzYWdlU3RyaXAgY29udHJvbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzaG93TWVzc2FnZXMobWVzc2FnZXNPclN0cmlwOiBNZXNzYWdlW10gfCBNZXNzYWdlU3RyaXApOiB2b2lkIHtcblx0XHRpZiAoQXJyYXkuaXNBcnJheShtZXNzYWdlc09yU3RyaXApKSB7XG5cdFx0XHR0aGlzLl9zaG93TWVzc2FnZXMobWVzc2FnZXNPclN0cmlwKTtcblx0XHR9IGVsc2UgaWYgKG1lc3NhZ2VzT3JTdHJpcC5pc0EoXCJzYXAubS5NZXNzYWdlU3RyaXBcIikpIHtcblx0XHRcdHRoaXMuc2hvd0N1c3RvbU1lc3NhZ2VTdHJpcChtZXNzYWdlc09yU3RyaXApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTaG93cyBhIGN1c3RvbSBNZXNzYWdlU3RyaXAgY29udHJvbCBwcm92aWRlZCBieSB0aGUgYXBwbGljYXRpb24uXG5cdCAqIEVuc3VyZXMgbXV0dWFsIGV4Y2x1c2l2aXR5IHdpdGggdGhlIE1lc3NhZ2VTdHJpcCByZW5kZXJlZCBieSB0aGUgb2JqZWN0IHBhZ2Ugdmlldy5cblx0ICogQHBhcmFtIG1lc3NhZ2VTdHJpcCBNZXNzYWdlU3RyaXAgY29udHJvbFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0cHJpdmF0ZSBzaG93Q3VzdG9tTWVzc2FnZVN0cmlwKG1lc3NhZ2VTdHJpcDogTWVzc2FnZVN0cmlwKTogdm9pZCB7XG5cdFx0Y29uc3QgbWVzc2FnZVN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLl92aWV3XG5cdFx0XHQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKVxuXHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdGlmICghbWVzc2FnZVN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR0aGlzLnJlbW92ZUN1c3RvbU1lc3NhZ2VTdHJpcCgpOyAvLyBSZW1vdmUgYW55IGV4aXN0aW5nIGN1c3RvbSBtZXNzYWdlIHN0cmlwIGJlZm9yZSBhZGRpbmcgbmV3IG9uZVxuXG5cdFx0Ly8gSGlkZSBmcmFtZXdvcmsgZ2VuZXJhdGVkIG1lc3NhZ2Ugc3RyaXAgdG8gZW5zdXJlIG11dHVhbCBleGNsdXNpdml0eVxuXHRcdG1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BCYWNrZW5kTWVzc2FnZVZpc2libGVcIiwgZmFsc2UpO1xuXHRcdG1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BDdXN0b21NZXNzYWdlVmlzaWJsZVwiLCBmYWxzZSk7XG5cblx0XHR0aGlzLmN1c3RvbU1lc3NhZ2VTdHJpcElkID0gbWVzc2FnZVN0cmlwLmdldElkKCkgfHwgdWlkKCk7IC8vIFN0b3JlIHJlZmVyZW5jZSBmb3IgcHJvZ3JhbW1hdGljIHJlbW92YWxcblxuXHRcdG1lc3NhZ2VTdHJpcC5hZGRTdHlsZUNsYXNzKFwic2FwVWlTbWFsbE1hcmdpblRvcFwiKTtcblx0XHR0aGlzLmFkZEN1c3RvbU1lc3NhZ2VTdHJpcFRvUGFnZShtZXNzYWdlU3RyaXAsIG1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgY3VzdG9tIE1lc3NhZ2VTdHJpcCB0byB0aGUgcGFnZSBsYXlvdXQgaW4gdGhlIGhlYWRlciBjb250YWluZXIgc3VjaCBhcyBpbiBleHBhbmRlZCBhbmQgc25hcHBlZCBjb250ZW50LlxuXHQgKiBAcGFyYW0gbWVzc2FnZVN0cmlwIFRoZSBNZXNzYWdlU3RyaXAgY29udHJvbCB0byBhZGRcblx0ICogQHBhcmFtIG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0XG5cdCAqL1xuXHRwcml2YXRlIGFkZEN1c3RvbU1lc3NhZ2VTdHJpcFRvUGFnZShtZXNzYWdlU3RyaXA6IE1lc3NhZ2VTdHJpcCwgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQ6IENvbnRleHQpOiB2b2lkIHtcblx0XHRjb25zdCBoZWFkZXJDb250YWluZXIgPSB0aGlzLl92aWV3LmJ5SWQoXCJmZTo6T2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiKTtcblx0XHRpZiAoaGVhZGVyQ29udGFpbmVyKSB7XG5cdFx0XHRjb25zdCBpbnNlcnRJbnRvQWdncmVnYXRpb24gPSAoYWdncmVnYXRpb25OYW1lOiBzdHJpbmcsIGNvbnRyb2xUb0luc2VydDogTWVzc2FnZVN0cmlwKTogdm9pZCA9PiB7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uQ29udGVudCA9IGhlYWRlckNvbnRhaW5lci5nZXRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWUpO1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25Db250ZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udGVudEFycmF5ID0gQXJyYXkuaXNBcnJheShhZ2dyZWdhdGlvbkNvbnRlbnQpID8gYWdncmVnYXRpb25Db250ZW50IDogW2FnZ3JlZ2F0aW9uQ29udGVudF07XG5cdFx0XHRcdFx0aGVhZGVyQ29udGFpbmVyLmluc2VydEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uTmFtZSwgY29udHJvbFRvSW5zZXJ0LCBjb250ZW50QXJyYXkubGVuZ3RoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdGluc2VydEludG9BZ2dyZWdhdGlvbihcImV4cGFuZGVkQ29udGVudFwiLCBtZXNzYWdlU3RyaXApO1xuXHRcdFx0aW5zZXJ0SW50b0FnZ3JlZ2F0aW9uKFwic25hcHBlZENvbnRlbnRcIiwgbWVzc2FnZVN0cmlwLmNsb25lKCkpO1xuXG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIk9QQ3VzdG9tTWVzc2FnZVN0cmlwVmlzaWJsZVwiLCB0cnVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlcyB0aGUgYWN0aXZlIGN1c3RvbSBNZXNzYWdlU3RyaXAgcHJvZ3JhbW1hdGljYWxseS5cblx0ICovXG5cdHByaXZhdGUgcmVtb3ZlQ3VzdG9tTWVzc2FnZVN0cmlwKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5jdXN0b21NZXNzYWdlU3RyaXBJZCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZpbmQgYW5kIHJlbW92ZSB0aGUgY3VzdG9tIG1lc3NhZ2Ugc3RyaXAgZnJvbSBoZWFkZXIgY29udGFpbmVyXG5cdFx0Y29uc3QgaGVhZGVyQ29udGFpbmVyID0gdGhpcy5fdmlldy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIik7XG5cdFx0aWYgKGhlYWRlckNvbnRhaW5lcikge1xuXHRcdFx0Y29uc3QgcmVtb3ZlRnJvbUFnZ3JlZ2F0aW9uID0gKGFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLCBpZE1hdGNoZXI6IChjb250cm9sSWQ6IHN0cmluZykgPT4gYm9vbGVhbik6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSBoZWFkZXJDb250YWluZXIuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25OYW1lKSBhcyBDb250cm9sW107XG5cdFx0XHRcdGlmIChhZ2dyZWdhdGlvbkNvbnRlbnQpIHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sVG9SZW1vdmUgPSBhZ2dyZWdhdGlvbkNvbnRlbnQuZmluZCgoY29udHJvbCkgPT4gaWRNYXRjaGVyKGNvbnRyb2wuZ2V0SWQoKSkpO1xuXHRcdFx0XHRcdGlmIChjb250cm9sVG9SZW1vdmUpIHtcblx0XHRcdFx0XHRcdGhlYWRlckNvbnRhaW5lci5yZW1vdmVBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWUsIGNvbnRyb2xUb1JlbW92ZSk7XG5cdFx0XHRcdFx0XHRjb250cm9sVG9SZW1vdmUuZGVzdHJveSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdHJlbW92ZUZyb21BZ2dyZWdhdGlvbihcImV4cGFuZGVkQ29udGVudFwiLCAoY29udHJvbElkKSA9PiBjb250cm9sSWQgPT09IHRoaXMuY3VzdG9tTWVzc2FnZVN0cmlwSWQpO1xuXHRcdFx0cmVtb3ZlRnJvbUFnZ3JlZ2F0aW9uKFwic25hcHBlZENvbnRlbnRcIiwgKGNvbnRyb2xJZCkgPT4gY29udHJvbElkLmluY2x1ZGVzKHRoaXMuY3VzdG9tTWVzc2FnZVN0cmlwSWQgKyBcIi1fX2Nsb25lXCIpKTtcblx0XHR9XG5cblx0XHR0aGlzLmN1c3RvbU1lc3NhZ2VTdHJpcElkID0gdW5kZWZpbmVkO1xuXG5cdFx0Y29uc3QgbWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQgPSB0aGlzLl92aWV3XG5cdFx0XHQuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKVxuXHRcdFx0LmJpbmRDb250ZXh0KHRoaXMuX2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpKVxuXHRcdFx0LmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdGlmIChtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEN1c3RvbU1lc3NhZ2VTdHJpcFZpc2libGVcIiwgZmFsc2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgTWVzc2FnZUl0ZW0gZnJvbSBhIE1lc3NhZ2UgaW5zdGFuY2UuXG5cdCAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIG9iamVjdCBjb250YWluaW5nIHRleHQsIHR5cGUsIGRlc2NyaXB0aW9uLCBldGMuXG5cdCAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIE1lc3NhZ2VJdGVtIGluc3RhbmNlIGZvciB0aGUgTWVzc2FnZVBvcG92ZXIuXG5cdCAqL1xuXHRwcml2YXRlIGNyZWF0ZU1lc3NhZ2VJdGVtKG1lc3NhZ2U6IE1lc3NhZ2UpOiBNZXNzYWdlSXRlbSB7XG5cdFx0Y29uc3Qgc0Rlc2NyaXB0aW9uVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBtZXNzYWdlLmdldERlc2NyaXB0aW9uVXJsPy4oKTtcblxuXHRcdHJldHVybiBuZXcgTWVzc2FnZUl0ZW0oe1xuXHRcdFx0dGl0bGU6IG1lc3NhZ2UuZ2V0TWVzc2FnZSgpLFxuXHRcdFx0ZGVzY3JpcHRpb246IG1lc3NhZ2UuZ2V0RGVzY3JpcHRpb24oKSxcblx0XHRcdHR5cGU6IG1lc3NhZ2UuZ2V0VHlwZSgpLFxuXHRcdFx0bG9uZ3RleHRVcmw6IHNEZXNjcmlwdGlvblVybCxcblx0XHRcdHN1YnRpdGxlOiBtZXNzYWdlLmdldEFkZGl0aW9uYWxUZXh0Py4oKSxcblx0XHRcdGdyb3VwTmFtZTogXCJUX01FU1NBR0VfQlVUVE9OX1NBUEZFX01FU1NBR0VfR1JPVVBfR0VORVJBTFwiLFxuXHRcdFx0YWN0aXZlVGl0bGU6ICEhbWVzc2FnZS5nZXRDb250cm9sSWRzPy4oKS5sZW5ndGhcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgTWVzc2FnZVBvcG92ZXIgZm9yIGEgc2V0IG9mIE1lc3NhZ2VJdGVtcyBhbmQgYXR0YWNoZXNcblx0ICogYW4gYXN5bmMgZGVzY3JpcHRpb24gaGFuZGxlciB0byBsb2FkIGxvbmcgdGV4dCB3aGVuIG5lZWRlZC5cblx0ICogQHBhcmFtIG1lc3NhZ2VJdGVtcyBBcnJheSBvZiBNZXNzYWdlSXRlbXMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBwb3BvdmVyLlxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBNZXNzYWdlUG9wb3ZlciBpbnN0YW5jZS5cblx0ICovXG5cdGNyZWF0ZU1lc3NhZ2VQb3BvdmVyKG1lc3NhZ2VJdGVtczogTWVzc2FnZUl0ZW0pOiBNZXNzYWdlUG9wb3ZlciB7XG5cdFx0Y29uc3QgcG9wb3ZlciA9IG5ldyBNZXNzYWdlUG9wb3Zlcih7XG5cdFx0XHRpdGVtczogbWVzc2FnZUl0ZW1zXG5cdFx0fSkgYXMgTWVzc2FnZVBvcG92ZXI7XG5cdFx0cmV0dXJuIHBvcG92ZXI7XG5cdH1cblxuXHQvKipcblx0ICogT3BlbnMgYSBNZXNzYWdlUG9wb3ZlciBmb3IgdGhlIHByb3ZpZGVkIG1lc3NhZ2VzLCBhbmNob3JlZCB0byB0aGVcblx0ICogc291cmNlIGNvbnRyb2wgb2YgdGhlIFVJNSBldmVudC5cblx0ICogQHBhcmFtIGV2ZW50IFRoZSBVSTUgZXZlbnQgZnJvbSB0aGUgY29udHJvbCB0aGF0IHRyaWdnZXJzIHRoZSBwb3BvdmVyLlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBBcnJheSBvZiBNZXNzYWdlIG9iamVjdHMgdG8gYmUgc2hvd24gaW4gdGhlIHBvcG92ZXIuXG5cdCAqIEByZXR1cm5zIFRoZSBNZXNzYWdlUG9wb3ZlciB0aGF0IHdhcyBvcGVuZWQuXG5cdCAqL1xuXHRzaG93TWVzc2FnZVBvcG92ZXIoZXZlbnQ6IFVJNUV2ZW50LCBtZXNzYWdlOiBNZXNzYWdlW10pOiBNZXNzYWdlUG9wb3ZlciB7XG5cdFx0Y29uc3QgbWVzc2FnZUl0ZW0gPSB0aGlzLmNyZWF0ZU1lc3NhZ2VJdGVtKG1lc3NhZ2VbMF0pO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSB0aGlzLmNyZWF0ZU1lc3NhZ2VQb3BvdmVyKG1lc3NhZ2VJdGVtKTtcblx0XHRjb25zdCBzb3VyY2VDb250cm9sID0gZXZlbnQuZ2V0U291cmNlPy4oKSBhcyBDb250cm9sO1xuXHRcdHNvdXJjZUNvbnRyb2w/LmFkZERlcGVuZGVudChwb3BvdmVyKTtcblx0XHRwb3BvdmVyLm9wZW5CeShzb3VyY2VDb250cm9sKTtcblx0XHRyZXR1cm4gcG9wb3Zlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBEaXNwbGF5cyB0aGUgbWVzc2FnZSBzdHJpcCBiZXR3ZWVuIHRoZSB0aXRsZSBhbmQgdGhlIGhlYWRlciBvZiB0aGUgT2JqZWN0UGFnZS5cblx0ICogQHBhcmFtIG1lc3NhZ2VzIFRoZSBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZFxuXHQgKiBAcGFyYW0gb3JpZ2luIFRoZSBvcmlnaW4gb2YgdGhlIG1lc3NhZ2UuIEl0IG1heSBjb21lIGZyb20gYSBiYWNrLWVuZCBtZXNzYWdlIG9yIGEgY3VzdG9tIG1lc3NhZ2Vcblx0ICovXG5cdF9zaG93TWVzc2FnZXMobWVzc2FnZXM6IE1lc3NhZ2VbXSwgb3JpZ2luOiBcIkJhY2tlbmRcIiB8IFwiQ3VzdG9tXCIgPSBcIkN1c3RvbVwiKTogdm9pZCB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdC8vIE9ubHkgaWYgdGhlcmUgYXJlIG1lc3NhZ2VzIHRvIHNob3csIHdlIHJlbW92ZSBjdXN0b20gbWVzc2FnZSBzdHJpcC5cblx0XHRcdFx0Ly8gVGhpcyB3YXkgd2UgZW5zdXJlIHRoYXQgd2UgZG9uJ3QgaW50ZXJmZXJlIHdpdGggY3VzdG9tIG1lc3NhZ2Ugc3RyaXAncyBsaWZlY3lsZSB1bnRpbCB0aGVyZSBhcmUgbmV3IG1lc3NhZ2VzIHRvIHNob3cgaW4gdGhlIHN0YW5kYXJkIG1lc3NhZ2Ugc3RyaXAuXG5cdFx0XHRcdHRoaXMucmVtb3ZlQ3VzdG9tTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLl92aWV3O1xuXHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IHZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gaW50ZXJuYWxNb2RlbC5iaW5kQ29udGV4dCh0aGlzLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cdFx0XHRpZiAoIW1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHJlc291cmNlTW9kZWwgPSBSZXNvdXJjZU1vZGVsSGVscGVyLmdldFJlc291cmNlTW9kZWwodmlldyk7XG5cdFx0XHRsZXQgbWVzc2FnZTogTWVzc2FnZSB8IG51bGwgPSBtZXNzYWdlc1swXSB8fCBudWxsO1xuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QJHtvcmlnaW59TWVzc2FnZVZpc2libGVgLCAhIW1lc3NhZ2UpO1xuXHRcdFx0c3dpdGNoIChtZXNzYWdlcy5sZW5ndGgpIHtcblx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzWzBdO1xuXHRcdFx0XHRcdGNvbnN0IGhhc0Rlc2NyaXB0aW9uVXJsID0gISFtZXNzYWdlPy5nZXREZXNjcmlwdGlvblVybCgpO1xuXHRcdFx0XHRcdGNvbnN0IGlzRWRpdE1vZGUgPSBDb21tb25VdGlscy5nZXRJc0VkaXRhYmxlKHZpZXcpO1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvYmplY3RQYWdlID0gdmlldy5nZXRDb250ZW50KCk/LlswXSBhcyBPYmplY3RQYWdlTGF5b3V0O1xuXHRcdFx0XHRcdFx0Y29uc3QgaGVhZGVyVGl0bGUgPSBvYmplY3RQYWdlLmdldEhlYWRlclRpdGxlKCkgYXMgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZTtcblxuXHRcdFx0XHRcdFx0Ly8gQ29sbGVjdCBhbGwgTWVzc2FnZVN0cmlwcyAoZXhjbHVkaW5nIENvbGxhYm9yYXRpb24gU3RyaXBzKVxuXHRcdFx0XHRcdFx0Y29uc3QgYWxsU3RyaXBzID0gW1xuXHRcdFx0XHRcdFx0XHQuLi4oaGVhZGVyVGl0bGUuZ2V0U25hcHBlZENvbnRlbnQ/LigpIHx8IFtdKSxcblx0XHRcdFx0XHRcdFx0Li4uKGhlYWRlclRpdGxlLmdldEV4cGFuZGVkQ29udGVudD8uKCkgfHwgW10pXG5cdFx0XHRcdFx0XHRdLmZpbHRlcihcblx0XHRcdFx0XHRcdFx0KGl0ZW0pOiBpdGVtIGlzIE1lc3NhZ2VTdHJpcCA9PiBpdGVtIGluc3RhbmNlb2YgTWVzc2FnZVN0cmlwICYmICFpdGVtLmdldElkKCk/LmluY2x1ZGVzKFwiQ29sbGFib3JhdGlvblN0cmlwXCIpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBPbmx5IGFkZCBsaW5rcyB3aGVuIG1lc3NhZ2UgaXMgZnJvbSBCYWNrZW5kLCBpbiBEaXNwbGF5IG1vZGUsIGFuZCBoYXMgYSBkZXNjcmlwdGlvbiBVUkxcblx0XHRcdFx0XHRcdGlmIChvcmlnaW4gPT09IFwiQmFja2VuZFwiICYmICFpc0VkaXRNb2RlICYmIGhhc0Rlc2NyaXB0aW9uVXJsKSB7XG5cdFx0XHRcdFx0XHRcdGFsbFN0cmlwcy5mb3JFYWNoKChzdHJpcCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdC8vIEFsd2F5cyBkZXN0cm95IHRoZSBleGlzdGluZyBsaW5rIGJlZm9yZSBjcmVhdGluZyBhIG5ldyBvbmVcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RyaXAuZ2V0TGluaygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRzdHJpcC5kZXN0cm95TGluaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRjb25zdCBsaW5rID0gbmV3IExpbmsoe1xuXHRcdFx0XHRcdFx0XHRcdFx0dGV4dDogcmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19NRVNTQUdFX0hBTkRMSU5HX1NBUEZFX0VSUk9SX01FU1NBR0VfU1RSSVBfTElOS19URVhUXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M6IChldmVudDogVUk1RXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zaG93TWVzc2FnZVBvcG92ZXIoZXZlbnQsIFttZXNzYWdlIV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHN0cmlwLnNldExpbmsobGluayk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGxpbmtzIHdoZW4gbm90IGFwcGxpY2FibGVcblx0XHRcdFx0XHRcdFx0YWxsU3RyaXBzLmZvckVhY2goKHN0cmlwKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHN0cmlwLmdldExpbmsoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaXAuZGVzdHJveUxpbmsoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdFx0TG9nLndhcm5pbmcoXCJVbmFibGUgdG8gYXR0YWNoIGxpbmsgdG8gT2JqZWN0UGFnZSBNZXNzYWdlU3RyaXBcIiwgZXJyIGFzIEVycm9yKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y29uc3QgbWVzc2FnZVN0YXRzOiB7IFtrZXk6IHN0cmluZ106IHsgaWQ6IG51bWJlcjsgY291bnQ6IG51bWJlciB9IH0gPSB7XG5cdFx0XHRcdFx0XHRFcnJvcjogeyBpZDogMiwgY291bnQ6IDAgfSxcblx0XHRcdFx0XHRcdFdhcm5pbmc6IHsgaWQ6IDEsIGNvdW50OiAwIH0sXG5cdFx0XHRcdFx0XHRJbmZvcm1hdGlvbjogeyBpZDogMCwgY291bnQ6IDAgfVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzLnJlZHVjZShcblx0XHRcdFx0XHRcdChhY2MsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50VHlwZSA9IGN1cnJlbnRWYWx1ZS5nZXRUeXBlKCk7XG5cdFx0XHRcdFx0XHRcdGFjYy5zZXRUeXBlKG1lc3NhZ2VTdGF0c1tjdXJyZW50VHlwZV0uaWQgPiBtZXNzYWdlU3RhdHNbYWNjLmdldFR5cGUoKV0uaWQgPyBjdXJyZW50VHlwZSA6IGFjYy5nZXRUeXBlKCkpO1xuXHRcdFx0XHRcdFx0XHRtZXNzYWdlU3RhdHNbY3VycmVudFR5cGVdLmNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhY2M7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bmV3IE1lc3NhZ2UoeyB0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiB9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKG9yaWdpbiA9PT0gXCJCYWNrZW5kXCIgJiYgIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodmlldykpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBPUCR7b3JpZ2lufU1lc3NhZ2VWaXNpYmxlYCwgZmFsc2UpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1Ake29yaWdpbn1NZXNzYWdlVmlzaWJsZWAsICEhbWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2VTdGF0cy5FcnJvci5jb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0TWVzc2FnZShyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJPQkpFQ1RQQUdFU1RBVEVfRVJST1JcIikpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAobWVzc2FnZVN0YXRzLldhcm5pbmcuY291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlLnNldE1lc3NhZ2UocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiT0JKRUNUUEFHRVNUQVRFX1dBUk5JTkdcIikpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlLnNldE1lc3NhZ2UocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiT0JKRUNUUEFHRVNUQVRFX0lORk9STUFUSU9OXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1Ake29yaWdpbn1NZXNzYWdlVGV4dGAsIG1lc3NhZ2UgPyBtZXNzYWdlLmdldE1lc3NhZ2UoKSA6IG51bGwpO1xuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QJHtvcmlnaW59TWVzc2FnZVR5cGVgLCBtZXNzYWdlID8gbWVzc2FnZS5nZXRUeXBlKCkgOiBudWxsKTtcblx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShtZXNzYWdlLmdldE1lc3NhZ2UoKSwgSW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBkaXNwbGF5IE9iamVjdFBhZ2UgbWVzc2FnZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGlkZXMgdGhlIG1lc3NhZ2Ugc3RyaXAgYmVsb3cgdGhlIGFuY2hvciBiYXIuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGhpZGVNZXNzYWdlKCk6IHZvaWQge1xuXHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5fdmlld1xuXHRcdFx0LmdldE1vZGVsKFwiaW50ZXJuYWxcIilcblx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QQ3VzdG9tTWVzc2FnZVZpc2libGVgLCBmYWxzZSk7XG5cdFx0dGhpcy5yZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUgcmVjb21tZW5kYXRpb24gZGF0YSBkZXRhaWxzLCB0cmFuc2Zvcm0gaXQsIGFuZCB1cGRhdGUgdGhlIGludGVybmFsIG1vZGVsLlxuXHQgKiBAcGFyYW0gZGF0YSBSZWNvbW1lbmRhdGlvbiBkYXRhIGZvciB0aGUgYXBwXG5cdCAqL1xuXHRzZXRSZWNvbW1lbmRhdGlvbnMoZGF0YTogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSk6IHZvaWQge1xuXHRcdHJlY29tbWVuZGF0aW9uSGVscGVyLnRyYW5zZm9ybVJlY29tbWVuZGF0aW9uc0ZvckludGVybmFsU3RvcmFnZShkYXRhKTtcblx0XHR0aGlzLl92aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiLCBkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGEgY29udHJvbCB0byBiZSB0aGUgdGl0bGUgb3duZXIgb2YgaXRzIHNlY3Rpb24vc3Vic2VjdGlvbi4gQXMgdGhlIHRpdGxlIG93bmVycyBvZiBzdGFuZGFyZCBzdWJzZWN0aW9ucyBhcmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgY3VzdG9tIHNlY3Rpb24vc3Vic2VjdGlvbi5cblx0ICogVGhlIHRpdGxlIG93bmVyIGNhbiBiZSBlaXRoZXIgb25lIG9mIHRoZSBzdGFuZGFyZCBidWlsZGluZyBibG9ja3MgKEZvcm0sIENoYXJ0LCBUYWJsZSksIG9yIHJldXNlIGNvbXBvbmVudHMsIG9yIHNhcC5tLlRpdGxlLlxuXHQgKiBUaGUgZnJhbWV3b3JrIGFkYXB0cyB0aGUgdmFsdWUgb2YgdGhlc2UgcHJvcGVydGllcyB0byBiZSBhbGlnbmVkIHdpdGggdGhlIHRpdGxlIHRoYXQgaXMgc2hvd24gaW4gdGhlIGFuY2hvciBiYXIgKG9yIGljb24gdGFiIGJhcikgZm9yIHRoZSBzZWN0aW9uLiBNb3Jlb3ZlciwgdGhlIHRpdGxlIG9mIHRoZSBzdWJzZWN0aW9uIChhbmQgaWYgYXBwbGljYWJsZSBhbHNvIG9mIHRoZSBzZWN0aW9uKSBpcyBoaWRkZW4gaW4gb3JkZXIgdG8gcHJldmVudCByZWR1bmRhbnQgdGl0bGVzLCBpZiB0aGUgc3Vic2VjdGlvbiBwb3NzZXNzZXMgYSB0aXRsZSBvd25lci5cblx0ICogSGludDogSWYgeW91IGNob29zZSB0byBzZXQgc2FwLm0uVGl0bGUgYXMgdGhlIHRpdGxlIG93bmVyLCBzdHlsaW5nIGFkanVzdG1lbnRzIG1heSBiZSByZXF1aXJlZCBpbiB0aGUgY3VzdG9tIHZpZXcuIEZvciBleGFtcGxlLCBpZiBzYXAubS5UaXRsZSBpcyBzZXQgYXMgdGl0bGUgb3duZXIgd2hpY2ggYmVsb25ncyB0byBzYXAubS5PdmVyZmxvd1Rvb2xiYXIgb3IgdG8gc2FwLm0uVG9vbGJhciwgdGhlbiB0aGUg4oCYZGVzaWdu4oCZIHByb3BlcnR5IG9mIHRoZSB0b29sYmFyIGNvbnRyb2wgaXMgdG8gYmUgc2V0IHRvIOKAmFRyYW5zcGFyZW504oCZLlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgc2luZ2xlIGNvbnRlbnQgY29udHJvbCBjYW4gYmUgZWl0aGVyIG9uZSBvZiB0aGUgc3RhbmRhcmQgYnVpbGRpbmcgYmxvY2tzIChGb3JtLCBDaGFydCwgVGFibGUpLCBvciByZXVzZSBjb21wb25lbnRzLCBvciBzYXAubS5UaXRsZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0QXNTZWN0aW9uVGl0bGVPd25lcihjb250cm9sOiBNYW5hZ2VkT2JqZWN0KTogdm9pZCB7XG5cdFx0bGV0IHNlY3Rpb247XG5cdFx0Y29uc3Qgb3JpZ2luYWxDb250cm9sID0gY29udHJvbDtcblx0XHRsZXQgcmV1c2VDb21wb25lbnQ7XG5cdFx0d2hpbGUgKGNvbnRyb2wpIHtcblx0XHRcdGlmIChjb250cm9sLmlzQTxTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuU2VjdGlvblwiKSkge1xuXHRcdFx0XHRzZWN0aW9uID0gY29udHJvbDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udHJvbC5pc0E8UmV1c2VDb21wb25lbnQ+KFwic2FwLmZlLmNvcmUuUmV1c2VDb21wb25lbnRcIikpIHtcblx0XHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuY29udGFpbmVyLmdldFBhcmVudCgpIGFzIENvbnRyb2w7XG5cdFx0XHRcdHJldXNlQ29tcG9uZW50ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRyb2xQYXJlbnQgPSBjb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKGNvbnRyb2xQYXJlbnQpIHtcblx0XHRcdFx0Y29udHJvbCA9IGNvbnRyb2xQYXJlbnQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNlY3Rpb24pIHtcblx0XHRcdGlmIChyZXVzZUNvbXBvbmVudCAmJiBzZWN0aW9uLmdldFZpc2libGVTdWJTZWN0aW9ucygpLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0c2VjdGlvbi5hZGp1c3RGb3JTaW5nbGVDb250ZW50KG9yaWdpbmFsQ29udHJvbCwgeyBtdWx0aXBsZVN1YlNlY3Rpb25zV2l0aFJldXNlQ29tcG9uZW50OiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VjdGlvbi5hZGp1c3RGb3JTaW5nbGVDb250ZW50KG9yaWdpbmFsQ29udHJvbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBuYXZpZ2F0aW9uIHRvIGEgc2VjdGlvbiBmYWlscy5cblx0ICovXG5cdHByaXZhdGUgc2hvd05hdmlnYXRpb25FcnJvcigpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMuX3ZpZXcpO1xuXHRcdGNvbnN0IHNUaXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIpO1xuXHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byB0aGUgZmlyc3Qgc2VjdGlvbiBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIFVzZWQgYXMgYSBmYWxsYmFjayB3aGVuIHRoZSB0YXJnZXQgc2VjdGlvbiBpcyBub3QgZm91bmQgb3IgaW52YWxpZC5cblx0ICogQHBhcmFtIG9iamVjdFBhZ2VMYXlvdXQgVGhlIE9iamVjdFBhZ2VMYXlvdXQgY29udHJvbCB0byBuYXZpZ2F0ZSB3aXRoaW5cblx0ICovXG5cdHByaXZhdGUgbmF2aWdhdGVUb0ZpcnN0U2VjdGlvbihvYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0KTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VjdGlvbnMgPSBvYmplY3RQYWdlTGF5b3V0LmdldFNlY3Rpb25zKCk7XG5cdFx0aWYgKCFzZWN0aW9ucyB8fCBzZWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmaXJzdFNlY3Rpb24gPSBzZWN0aW9uc1swXTtcblx0XHRjb25zdCBzdWJTZWN0aW9ucyA9IGZpcnN0U2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdGlmICghc3ViU2VjdGlvbnMgfHwgc3ViU2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmlyc3RTdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbMF07XG5cdFx0Y29uc3Qgc3ViU2VjdGlvbkZ1bGxJZCA9IGZpcnN0U3ViU2VjdGlvbi5nZXRJZCgpO1xuXG5cdFx0aWYgKCFzdWJTZWN0aW9uRnVsbElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0b2JqZWN0UGFnZUxheW91dC5zZXRTZWxlY3RlZFNlY3Rpb24oc3ViU2VjdGlvbkZ1bGxJZCk7XG5cdFx0b2JqZWN0UGFnZUxheW91dC5maXJlTmF2aWdhdGUoe1xuXHRcdFx0c2VjdGlvbjogZmlyc3RTZWN0aW9uLFxuXHRcdFx0c3ViU2VjdGlvbjogZmlyc3RTdWJTZWN0aW9uXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGUgdG8gYSBzcGVjaWZpYyBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gd2l0aGluIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIFdvcmtzIHdpdGggT2JqZWN0IFBhZ2UgbGF5b3V0cyBhbmQgb3RoZXIgc2VjdGlvbi1iYXNlZCBsYXlvdXRzLlxuXHQgKiBJZiB0aGUgdGFyZ2V0IHNlY3Rpb24gaXMgbm90IGZvdW5kIG9yIGludmFsaWQsIHRoZSBhcHAgYXV0b21hdGljYWxseSBmYWxscyBiYWNrIHRvIHRoZSBmaXJzdCBhdmFpbGFibGUgc2VjdGlvbi5cblx0ICogQHBhcmFtIHNlY3Rpb25PclN1YlNlY3Rpb25JZCBUaGUgSUQgb2YgdGhlIHRhcmdldCBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gKHdpdGhvdXQgYSB2aWV3IHByZWZpeCwgZm9yIGV4YW1wbGUsIFwiZmU6OkZhY2V0U2VjdGlvbjo6VHJhdmVsRGF0YVwiIG9yIFwiZmU6OlN1YlNlY3Rpb246OkRldGFpbHNcIilcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGVUb1N1YlNlY3Rpb24oc2VjdGlvbk9yU3ViU2VjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHQvLyBHdWFyZCBhZ2FpbnN0IGNvbmN1cnJlbnQgbmF2aWdhdGlvbiBjYWxscyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG5cdFx0Ly8gZnJvbSBtdWx0aXBsZSBwb2xsaW5nIG1lY2hhbmlzbXMgKFZpZXdTdGF0ZS5hcHBseSBhbmQgT2JqZWN0UGFnZUNvbnRyb2xsZXIuX25hdmlnYXRlVG9UYXJnZXRTZWN0aW9uKVxuXHRcdGlmICh0aGlzLmlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbiA9IHRydWU7XG5cblx0XHQvLyBIZWxwZXIgdG8gcmVzZXQgbmF2aWdhdGlvbiBmbGFnIGFmdGVyIGEgZGVsYXlcblx0XHRjb25zdCByZXNldE5hdmlnYXRpb25GbGFnID0gKGRlbGF5TXM6IG51bWJlcik6IHZvaWQgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nVG9TdWJTZWN0aW9uID0gZmFsc2U7XG5cdFx0XHR9LCBkZWxheU1zKTtcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIEZpbmQgdGhlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdFx0XHRjb25zdCBvYmplY3RQYWdlTGF5b3V0ID0gdGhpcy5fdmlldy5nZXRDb250ZW50KClbMF0gYXMgT2JqZWN0UGFnZUxheW91dCB8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCFvYmplY3RQYWdlTGF5b3V0IHx8ICFvYmplY3RQYWdlTGF5b3V0LmdldERvbVJlZigpKSB7XG5cdFx0XHRcdC8vIE9iamVjdFBhZ2VMYXlvdXQgbm90IGF2YWlsYWJsZSBvciBkZXN0cm95ZWQgLSBzaWxlbnRseSByZXR1cm4gZHVyaW5nIG5hdmlnYXRpb24gdHJhbnNpdGlvbnNcblx0XHRcdFx0Ly8gVGhpcyBpcyBleHBlY3RlZCB3aGVuIFZpZXdTdGF0ZS5hcHBseSBydW5zIG9uIGEgdmlldyBiZWluZyBuYXZpZ2F0ZWQgYXdheSBmcm9tXG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nVG9TdWJTZWN0aW9uID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWN0aW9uT3JTdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0dGhpcy5uYXZpZ2F0ZVRvRmlyc3RTZWN0aW9uKG9iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdFx0XHRyZXNldE5hdmlnYXRpb25GbGFnKDEwMCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29udHJvbCA9IHRoaXMuX3ZpZXcuYnlJZChzZWN0aW9uT3JTdWJTZWN0aW9uSWQpO1xuXG5cdFx0XHRpZiAoIWNvbnRyb2wgfHwgIShjb250cm9sIGFzIENvbnRyb2wpLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHR0aGlzLm5hdmlnYXRlVG9GaXJzdFNlY3Rpb24ob2JqZWN0UGFnZUxheW91dCk7XG5cdFx0XHRcdHRoaXMuc2hvd05hdmlnYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXNldE5hdmlnYXRpb25GbGFnKDEwMCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHRhcmdldFN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHRhcmdldFNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IGlzTmF2aWdhdGluZ1RvU2VjdGlvbiA9IGZhbHNlOyAvLyBUcmFjayBpZiBvcmlnaW5hbCB0YXJnZXQgd2FzIGEgU2VjdGlvbiAobm90IFN1YlNlY3Rpb24pXG5cblx0XHRcdC8vIENoZWNrIGlmIGNvbnRyb2wgaXMgYSBTdWJTZWN0aW9uIG9yIFNlY3Rpb25cblx0XHRcdGlmIChjb250cm9sLmlzQTxPYmplY3RQYWdlU3ViU2VjdGlvbj4oXCJzYXAudXhhcC5PYmplY3RQYWdlU3ViU2VjdGlvblwiKSkge1xuXHRcdFx0XHR0YXJnZXRTdWJTZWN0aW9uID0gY29udHJvbDtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8T2JqZWN0UGFnZVNlY3Rpb24+KFwic2FwLnV4YXAuT2JqZWN0UGFnZVNlY3Rpb25cIikpIHtcblx0XHRcdFx0dGFyZ2V0U2VjdGlvbiA9IGNvbnRyb2w7XG5cdFx0XHRcdGlzTmF2aWdhdGluZ1RvU2VjdGlvbiA9IHRydWU7XG5cdFx0XHRcdC8vIElmIGl0J3MgYSBzZWN0aW9uLCBnZXQgdGhlIGZpcnN0IHN1YnNlY3Rpb24gKGlmIGF2YWlsYWJsZSlcblx0XHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBjb250cm9sLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRhcmdldFN1YlNlY3Rpb24gPSBzdWJTZWN0aW9ucy5sZW5ndGggPiAwID8gc3ViU2VjdGlvbnNbMF0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFZhbGlkYXRlIHdlIGhhdmUgZWl0aGVyIGEgc2VjdGlvbiBvciBzdWJzZWN0aW9uXG5cdFx0XHRjb25zdCBoYXNWYWxpZFRhcmdldCA9IHRhcmdldFN1YlNlY3Rpb24gfHwgdGFyZ2V0U2VjdGlvbjtcblx0XHRcdGlmICghaGFzVmFsaWRUYXJnZXQgfHwgKHRhcmdldFN1YlNlY3Rpb24gJiYgIXRhcmdldFN1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSkge1xuXHRcdFx0XHR0aGlzLm5hdmlnYXRlVG9GaXJzdFNlY3Rpb24ob2JqZWN0UGFnZUxheW91dCk7XG5cdFx0XHRcdHRoaXMuc2hvd05hdmlnYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXNldE5hdmlnYXRpb25GbGFnKDEwMCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHNlY3Rpb24gYnV0IG5vIHN1YnNlY3Rpb24gKGxhenkgbG9hZGluZyBzY2VuYXJpbyksIHNjcm9sbCBkaXJlY3RseSB0byB0aGUgc2VjdGlvblxuXHRcdFx0aWYgKHRhcmdldFNlY3Rpb24gJiYgIXRhcmdldFN1YlNlY3Rpb24pIHtcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbkZ1bGxJZCA9IHRhcmdldFNlY3Rpb24uZ2V0SWQoKTtcblx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zY3JvbGxUb1NlY3Rpb24oc2VjdGlvbkZ1bGxJZCwgMCk7XG5cdFx0XHRcdHJlc2V0TmF2aWdhdGlvbkZsYWcoMTAwKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCB0YXJnZXRTdWJTZWN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZFxuXHRcdFx0Ly8gKHdlJ3ZlIGFscmVhZHkgcmV0dXJuZWQgaWYgaXQgd2FzIHVuZGVmaW5lZCB3aXRoIGEgdmFsaWQgdGFyZ2V0U2VjdGlvbilcblx0XHRcdGlmICghdGFyZ2V0U3ViU2VjdGlvbikge1xuXHRcdFx0XHQvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBzYXRpc2ZpZXMgVHlwZVNjcmlwdFxuXHRcdFx0XHR0aGlzLmlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbiA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5vdGU6IHdlIGludGVudGlvbmFsbHkgZG8gbm90IGNoZWNrIGdldFZpc2libGUoKSBoZXJlLlxuXHRcdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIHRvIGEgc3Vic2VjdGlvbiBpbiBhbiBpbmFjdGl2ZSBJY29uVGFiQmFyIHRhYiwgdGhlIHN1YnNlY3Rpb24gaXMgbm90IHlldCB2aXNpYmxlLlxuXHRcdFx0Ly8gc2V0U2VsZWN0ZWRTZWN0aW9uIHdpbGwgYWN0aXZhdGUgdGhlIHBhcmVudCBzZWN0aW9uIGFuZCBtYWtlIHRoZSBzdWJzZWN0aW9uIHZpc2libGUuXG5cblx0XHRcdC8vIEdldCB0aGUgZnVsbCBzdWJzZWN0aW9uIElEIChpbmNsdWRpbmcgdmlldyBwcmVmaXgpXG5cdFx0XHRjb25zdCBzdWJTZWN0aW9uRnVsbElkID0gdGFyZ2V0U3ViU2VjdGlvbi5nZXRJZCgpO1xuXG5cdFx0XHRpZiAoIXN1YlNlY3Rpb25GdWxsSWQpIHtcblx0XHRcdFx0dGhpcy5pc05hdmlnYXRpbmdUb1N1YlNlY3Rpb24gPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwYXJlbnRTZWN0aW9uID0gdGFyZ2V0U3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdGNvbnN0IHBhcmVudFNlY3Rpb25GdWxsSWQgPSBwYXJlbnRTZWN0aW9uLmdldElkKCk7XG5cdFx0XHRjb25zdCBpc1BhcmVudFNlY3Rpb25TZWxlY3RlZCA9IG9iamVjdFBhZ2VMYXlvdXQuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkgPT09IHBhcmVudFNlY3Rpb25GdWxsSWQ7XG5cblx0XHRcdGlmICghaXNQYXJlbnRTZWN0aW9uU2VsZWN0ZWQgJiYgIWlzTmF2aWdhdGluZ1RvU2VjdGlvbikge1xuXHRcdFx0XHQvLyBXaGVuIG5hdmlnYXRpbmcgdG8gYSBzdWJzZWN0aW9uIGluIGFuIGluYWN0aXZlIHNlY3Rpb24sIHdlIG11c3QgZmlyc3QgYWN0aXZhdGVcblx0XHRcdFx0Ly8gdGhlIHBhcmVudCBzZWN0aW9uLCB0aGVuIHdhaXQgZm9yIHN1YnNlY3Rpb24gdG8gYmUgcmVhZHkgYmVmb3JlIHNjcm9sbGluZyB0byBpdFxuXHRcdFx0XHRvYmplY3RQYWdlTGF5b3V0LnNjcm9sbFRvU2VjdGlvbihwYXJlbnRTZWN0aW9uRnVsbElkLCAwKTtcblxuXHRcdFx0XHQvLyBQb2xsIGZvciBzdWJzZWN0aW9uIERPTSB0byBiZSByZWFkeSBhZnRlciBwYXJlbnQgc2VjdGlvbiBhY3RpdmF0aW9uXG5cdFx0XHRcdC8vIFJlbGF0ZWQ6IGhlbHBlcnMvU2VjdGlvbk5hdmlnYXRpb25IZWxwZXIudHMgKHVzZWQgYnkgVmlld1N0YXRlLmFwcGx5IGFuZCBPYmplY3RQYWdlQ29udHJvbGxlci5uYXZpZ2F0ZVRvVGFyZ2V0U2VjdGlvbilcblx0XHRcdFx0Ly8gVGhpcyBwb2xsaW5nIGRpZmZlcnM6IGNoZWNrcyBET00gcmVhZGluZXNzIChiaW5hcnkpLCBub3Qgc2VjdGlvbiBJRCBzdGFiaWxpdHlcblx0XHRcdFx0bGV0IGF0dGVtcHRzID0gMDtcblx0XHRcdFx0Y29uc3QgbWF4QXR0ZW1wdHMgPSAxMDtcblx0XHRcdFx0Y29uc3QgY2hlY2tTdWJzZWN0aW9uUmVhZHkgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0YXR0ZW1wdHMrKztcblx0XHRcdFx0XHRjb25zdCBzdWJTZWN0aW9uRG9tID0gdGFyZ2V0U3ViU2VjdGlvbi5nZXREb21SZWYoKTtcblx0XHRcdFx0XHRpZiAoc3ViU2VjdGlvbkRvbSkge1xuXHRcdFx0XHRcdFx0Ly8gU3Vic2VjdGlvbiBpcyByZWFkeSwgc2Nyb2xsIHRvIGl0XG5cdFx0XHRcdFx0XHRvYmplY3RQYWdlTGF5b3V0LnNjcm9sbFRvU2VjdGlvbihzdWJTZWN0aW9uRnVsbElkLCAwKTtcblx0XHRcdFx0XHRcdHJlc2V0TmF2aWdhdGlvbkZsYWcoMTAwKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGF0dGVtcHRzIDwgbWF4QXR0ZW1wdHMpIHtcblx0XHRcdFx0XHRcdC8vIE5vdCByZWFkeSB5ZXQsIGNoZWNrIGFnYWluXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrU3Vic2VjdGlvblJlYWR5LCA1MCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRpbWVvdXQgLSB0cnkgc2Nyb2xsaW5nIGFueXdheVxuXHRcdFx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zY3JvbGxUb1NlY3Rpb24oc3ViU2VjdGlvbkZ1bGxJZCwgMCk7XG5cdFx0XHRcdFx0XHRyZXNldE5hdmlnYXRpb25GbGFnKDEwMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQvLyBTdGFydCBjaGVja2luZyBhZnRlciAxMDBtcyBpbml0aWFsIGRlbGF5XG5cdFx0XHRcdHNldFRpbWVvdXQoY2hlY2tTdWJzZWN0aW9uUmVhZHksIDEwMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBQYXJlbnQgc2VjdGlvbiBhbHJlYWR5IHNlbGVjdGVkIG9yIG5hdmlnYXRpbmcgdG8gc2VjdGlvbiAtIHNjcm9sbCBkaXJlY3RseVxuXHRcdFx0XHRjb25zdCBzY3JvbGxUYXJnZXQgPSBpc05hdmlnYXRpbmdUb1NlY3Rpb24gPyBwYXJlbnRTZWN0aW9uRnVsbElkIDogc3ViU2VjdGlvbkZ1bGxJZDtcblx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zY3JvbGxUb1NlY3Rpb24oc2Nyb2xsVGFyZ2V0LCAwKTtcblx0XHRcdFx0cmVzZXROYXZpZ2F0aW9uRmxhZygxMDApO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbiA9IGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztFQWtDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFSQSxJQVVNQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQzQkMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDLEVBQUFELElBQUEsQ0FBQUUsTUFBQSwwQkFBQUMsYUFBQTtJQUFBLFNBQUFKLHVCQUFBO01BQUEsSUFBQUssS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQUQsYUFBQSxDQUFBUSxJQUFBLFVBQUFILElBQUE7TUFFMUQ7QUFDRDtBQUNBO01BR0M7QUFDRDtBQUNBO0FBQ0E7TUFIQ0osS0FBQSxDQUlRUSx3QkFBd0IsR0FBRyxLQUFLO01BQUEsT0FBQVIsS0FBQTtJQUFBO0lBQUFTLGNBQUEsQ0FBQWQsc0JBQUEsRUFBQUksYUFBQTtJQUFBLElBQUFXLE1BQUEsR0FBQWYsc0JBQUEsQ0FBQWdCLFNBQUE7SUFFeEM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQVBDRCxNQUFBLENBUU1FLE9BQU8sR0FBYixlQUFNQSxPQUFPQSxDQUFDQyxLQUF5QixFQUFpQjtNQUN2RCxNQUFNQyxlQUFlLEdBQUcsSUFBSSxDQUFDQyxLQUFLLENBQUNDLGlCQUFpQixDQUFDLENBQUM7TUFDdEQsSUFBSSxDQUFDRixlQUFlLEVBQUU7UUFDckI7UUFDQSxPQUFPRyxPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BQ3pCO01BQ0EsTUFBTUMsYUFBYSxHQUFHQyxXQUFXLENBQUNDLGVBQWUsQ0FBQyxJQUFJLENBQUNOLEtBQUssQ0FBQztRQUM1RE8sbUJBQW1CLEdBQUdILGFBQWEsQ0FBQ0kscUJBQXFCLENBQUMsQ0FBQztRQUMzREMsVUFBVSxHQUFHVixlQUFlLENBQUNXLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFlBQVksQ0FBQyxDQUFDO1FBQ3REQyxZQUFtQyxHQUFHO1VBQ3JDQyxnQkFBZ0IsRUFBRSxFQUFFO1VBQ3BCQyxjQUFjLEVBQUU7UUFDakIsQ0FBQztNQUVGLElBQUloQixLQUFLLEtBQUtpQixTQUFTLElBQUlqQixLQUFLLEtBQUssSUFBSSxFQUFFO1FBQzFDO1FBQ0FjLFlBQVksQ0FBQ0UsY0FBYyxDQUFDRSxJQUFJLENBQUM7VUFDaENDLHVCQUF1QixFQUFFO1FBQzFCLENBQUMsQ0FBQztNQUNILENBQUMsTUFBTTtRQUNOLE1BQU1DLFFBQVEsR0FBRzVCLEtBQUssQ0FBQzZCLE9BQU8sQ0FBQ3JCLEtBQUssQ0FBQyxHQUFHQSxLQUFLLEdBQUcsQ0FBQ0EsS0FBSyxDQUFDO1FBQ3ZELE1BQU1zQixjQUFjLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUNDLGlCQUFpQixDQUFDLENBR3pEO1FBQ0QsTUFBTUMsV0FBVyxHQUFHSCxjQUFjLENBQUNJLGNBQWMsQ0FBQyxDQUFDLElBQUksSUFBSUosY0FBYyxDQUFDSyxZQUFZLENBQUMsQ0FBQyxFQUFFO1FBRTFGLEtBQUssTUFBTUMsSUFBSSxJQUFJUixRQUFRLEVBQUU7VUFDNUIsSUFBSVEsSUFBSSxLQUFLLEVBQUUsRUFBRTtZQUNoQjtZQUNBZCxZQUFZLENBQUNDLGdCQUFnQixDQUFDRyxJQUFJLENBQUMsR0FBRyxDQUFDO1VBQ3hDLENBQUMsTUFBTTtZQUNOLE1BQU1XLElBQUksR0FBR2xCLFVBQVUsQ0FBQ21CLFNBQVMsQ0FBQyxHQUFHTCxXQUFXLElBQUlHLElBQUksUUFBUSxDQUFDO1lBRWpFLElBQUlDLElBQUksS0FBSyxvQkFBb0IsRUFBRTtjQUNsQ2YsWUFBWSxDQUFDRSxjQUFjLENBQUNFLElBQUksQ0FBQztnQkFDaENDLHVCQUF1QixFQUFFUztjQUMxQixDQUFDLENBQUM7WUFDSCxDQUFDLE1BQU0sSUFBSUMsSUFBSSxFQUFFO2NBQ2hCZixZQUFZLENBQUNDLGdCQUFnQixDQUFDRyxJQUFJLENBQUNVLElBQUksQ0FBQztZQUN6QyxDQUFDLE1BQU07Y0FDTixPQUFPeEIsT0FBTyxDQUFDMkIsTUFBTSxDQUFDLEdBQUdILElBQUksc0NBQXNDLENBQUM7WUFDckU7VUFDRDtRQUNEO01BQ0Q7TUFDQSxPQUFPbkIsbUJBQW1CLENBQUN1QixrQkFBa0IsQ0FBQyxDQUFDLEdBQUdsQixZQUFZLENBQUNFLGNBQWMsRUFBRSxHQUFHRixZQUFZLENBQUNDLGdCQUFnQixDQUFDLEVBQUVkLGVBQWUsQ0FBQztJQUNuSTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBSixNQUFBLENBTUFvQyxtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFDQyxRQUFnQixFQUFvQjtNQUN2RCxJQUFJQyxLQUFLLEdBQUcsSUFBSSxDQUFDakMsS0FBSyxDQUFDa0MsSUFBSSxDQUFDRixRQUFRLENBQUM7TUFDckMsSUFBSUMsS0FBSyxFQUFFRSxHQUFHLENBQVEsa0JBQWtCLENBQUMsRUFBRTtRQUMxQ0YsS0FBSyxHQUFHQSxLQUFLLENBQUNHLFNBQVMsQ0FBQyxDQUFhO01BQ3RDO01BQ0EsSUFBSUgsS0FBSyxFQUFFRSxHQUFHLENBQUMscUJBQXFCLENBQUMsRUFBRTtRQUN0QyxPQUFRRixLQUFLLENBQWNGLG1CQUFtQixDQUFDLENBQUM7TUFDakQ7TUFDQSxPQUFPLEVBQUU7SUFDVjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBcEMsTUFBQSxDQU1BMEMsZUFBZSxHQUFmLFNBQUFBLGVBQWVBLENBQUNDLGNBQXNCLEVBQUVDLEtBQWUsRUFBUTtNQUM5RCxNQUFNQyxRQUFRLEdBQUdDLHNCQUFzQixDQUFDSCxjQUFjLENBQUM7UUFDdERJLE1BQU0sR0FBRyxJQUFJLENBQUMxQyxLQUFLLENBQUNrQyxJQUFJLENBQUNNLFFBQVEsQ0FBdUI7TUFFekQsSUFBSSxDQUFDRSxNQUFNLEVBQUU7UUFDWjtNQUNEO01BRUEsTUFBTUMsa0JBQWtCLEdBQUdELE1BQU0sQ0FBQ0Usb0JBQW9CLENBQUMsQ0FBQztNQUN4RCxNQUFNQyxXQUFXLEdBQUdOLEtBQUssS0FBS3hCLFNBQVMsR0FBRyxDQUFDMkIsTUFBTSxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDLEdBQUdQLEtBQUs7O01BRTlFO01BQ0EsSUFBSUksa0JBQWtCLEtBQUssR0FBRyxFQUFFO1FBQy9CLElBQUlFLFdBQVcsRUFBRTtVQUNoQjtVQUNBSCxNQUFNLENBQUNLLGtCQUFrQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUM7VUFDdENMLE1BQU0sQ0FBQ00sa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQztRQUN4QyxDQUFDLE1BQU07VUFDTjtVQUNBTixNQUFNLENBQUNLLGtCQUFrQixDQUFDLEtBQUssRUFBRSxLQUFLLENBQUM7VUFDdkNMLE1BQU0sQ0FBQ00sa0JBQWtCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQztRQUN2QztNQUNELENBQUMsTUFBTTtRQUNOO1FBQ0E7UUFDQU4sTUFBTSxDQUFDTSxrQkFBa0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDO1FBQ3RDTixNQUFNLENBQUNLLGtCQUFrQixDQUFDRixXQUFXLEVBQUUsS0FBSyxDQUFDO01BQzlDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFsRCxNQUFBLENBS0FNLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUEsRUFBK0I7TUFDL0MsT0FBTyxJQUFJLENBQUNELEtBQUssQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFOLE1BQUEsQ0FJQXNELGtDQUFrQyxHQUFsQyxTQUFBQSxrQ0FBa0NBLENBQUEsRUFBVztNQUM1QyxNQUFNQyx3QkFBd0IsR0FBRyxJQUFJLENBQUNsRCxLQUFLLENBQUNDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxFQUFFa0QsT0FBTyxDQUFDLENBQUM7TUFDcEYsTUFBTUMsZUFBZSxHQUFHLElBQUksQ0FBQ3BELEtBQUssQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQyxFQUFFa0QsT0FBTyxDQUFDLENBQUM7TUFDakUsT0FBT0Qsd0JBQXdCLElBQUlFLGVBQWUsR0FDL0MsR0FBR0Ysd0JBQXdCLGlCQUFpQkUsZUFBZSxDQUFDQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQ2pGLEVBQUU7SUFDTjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBMUQsTUFBQSxDQVNBMkQsWUFBWSxHQUFaLFNBQUFBLFlBQVlBLENBQUNDLGVBQXlDLEVBQVE7TUFDN0QsSUFBSWpFLEtBQUssQ0FBQzZCLE9BQU8sQ0FBQ29DLGVBQWUsQ0FBQyxFQUFFO1FBQ25DLElBQUksQ0FBQ0MsYUFBYSxDQUFDRCxlQUFlLENBQUM7TUFDcEMsQ0FBQyxNQUFNLElBQUlBLGVBQWUsQ0FBQ3BCLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1FBQ3JELElBQUksQ0FBQ3NCLHNCQUFzQixDQUFDRixlQUFlLENBQUM7TUFDN0M7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBNUQsTUFBQSxDQU1ROEQsc0JBQXNCLEdBQTlCLFNBQVFBLHNCQUFzQkEsQ0FBQ0MsWUFBMEIsRUFBUTtNQUNoRSxNQUFNQyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUMzRCxLQUFLLENBQ2pEVSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQ3BCa0QsV0FBVyxDQUFDLElBQUksQ0FBQ1gsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLENBQ3REWSxlQUFlLENBQUMsQ0FBQztNQUNuQixJQUFJLENBQUNGLGdDQUFnQyxFQUFFO1FBQ3RDO01BQ0Q7TUFFQSxJQUFJLENBQUNHLHdCQUF3QixDQUFDLENBQUMsQ0FBQyxDQUFDOztNQUVqQztNQUNBSCxnQ0FBZ0MsQ0FBQ0ksV0FBVyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQztNQUM5RUosZ0NBQWdDLENBQUNJLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUM7TUFFN0UsSUFBSSxDQUFDQyxvQkFBb0IsR0FBR04sWUFBWSxDQUFDTyxLQUFLLENBQUMsQ0FBQyxJQUFJQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O01BRTNEUixZQUFZLENBQUNTLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQztNQUNqRCxJQUFJLENBQUNDLDJCQUEyQixDQUFDVixZQUFZLEVBQUVDLGdDQUFnQyxDQUFDO0lBQ2pGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBaEUsTUFBQSxDQUtReUUsMkJBQTJCLEdBQW5DLFNBQVFBLDJCQUEyQkEsQ0FBQ1YsWUFBMEIsRUFBRVcsZ0NBQXlDLEVBQVE7TUFDaEgsTUFBTUMsZUFBZSxHQUFHLElBQUksQ0FBQ3RFLEtBQUssQ0FBQ2tDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQztNQUMzRSxJQUFJb0MsZUFBZSxFQUFFO1FBQ3BCLE1BQU1DLHFCQUFxQixHQUFHQSxDQUFDQyxlQUF1QixFQUFFQyxlQUE2QixLQUFXO1VBQy9GLE1BQU1DLGtCQUFrQixHQUFHSixlQUFlLENBQUNLLGNBQWMsQ0FBQ0gsZUFBZSxDQUFDO1VBQzFFLElBQUlFLGtCQUFrQixFQUFFO1lBQ3ZCLE1BQU1FLFlBQVksR0FBR3RGLEtBQUssQ0FBQzZCLE9BQU8sQ0FBQ3VELGtCQUFrQixDQUFDLEdBQUdBLGtCQUFrQixHQUFHLENBQUNBLGtCQUFrQixDQUFDO1lBQ2xHSixlQUFlLENBQUNPLGlCQUFpQixDQUFDTCxlQUFlLEVBQUVDLGVBQWUsRUFBRUcsWUFBWSxDQUFDeEYsTUFBTSxDQUFDO1VBQ3pGO1FBQ0QsQ0FBQztRQUNEbUYscUJBQXFCLENBQUMsaUJBQWlCLEVBQUViLFlBQVksQ0FBQztRQUN0RGEscUJBQXFCLENBQUMsZ0JBQWdCLEVBQUViLFlBQVksQ0FBQ29CLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFFN0RULGdDQUFnQyxDQUFDTixXQUFXLENBQUMsNkJBQTZCLEVBQUUsSUFBSSxDQUFDO01BQ2xGO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQXBFLE1BQUEsQ0FHUW1FLHdCQUF3QixHQUFoQyxTQUFRQSx3QkFBd0JBLENBQUEsRUFBUztNQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDRSxvQkFBb0IsRUFBRTtRQUMvQjtNQUNEOztNQUVBO01BQ0EsTUFBTU0sZUFBZSxHQUFHLElBQUksQ0FBQ3RFLEtBQUssQ0FBQ2tDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQztNQUMzRSxJQUFJb0MsZUFBZSxFQUFFO1FBQ3BCLE1BQU1TLHFCQUFxQixHQUFHQSxDQUFDUCxlQUF1QixFQUFFUSxTQUF5QyxLQUFXO1VBQzNHLE1BQU1OLGtCQUFrQixHQUFHSixlQUFlLENBQUNLLGNBQWMsQ0FBQ0gsZUFBZSxDQUFjO1VBQ3ZGLElBQUlFLGtCQUFrQixFQUFFO1lBQ3ZCLE1BQU1PLGVBQWUsR0FBR1Asa0JBQWtCLENBQUNRLElBQUksQ0FBRUMsT0FBTyxJQUFLSCxTQUFTLENBQUNHLE9BQU8sQ0FBQ2xCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4RixJQUFJZ0IsZUFBZSxFQUFFO2NBQ3BCWCxlQUFlLENBQUNjLGlCQUFpQixDQUFDWixlQUFlLEVBQUVTLGVBQWUsQ0FBQztjQUNuRUEsZUFBZSxDQUFDSSxPQUFPLENBQUMsQ0FBQztZQUMxQjtVQUNEO1FBQ0QsQ0FBQztRQUNETixxQkFBcUIsQ0FBQyxpQkFBaUIsRUFBR08sU0FBUyxJQUFLQSxTQUFTLEtBQUssSUFBSSxDQUFDdEIsb0JBQW9CLENBQUM7UUFDaEdlLHFCQUFxQixDQUFDLGdCQUFnQixFQUFHTyxTQUFTLElBQUtBLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ3ZCLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxDQUFDO01BQ25IO01BRUEsSUFBSSxDQUFDQSxvQkFBb0IsR0FBR2pELFNBQVM7TUFFckMsTUFBTXNELGdDQUFnQyxHQUFHLElBQUksQ0FBQ3JFLEtBQUssQ0FDakRVLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FDcEJrRCxXQUFXLENBQUMsSUFBSSxDQUFDWCxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsQ0FDdERZLGVBQWUsQ0FBQyxDQUFDO01BQ25CLElBQUlRLGdDQUFnQyxFQUFFO1FBQ3JDQSxnQ0FBZ0MsQ0FBQ04sV0FBVyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQztNQUNuRjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBcEUsTUFBQSxDQUtRNkYsaUJBQWlCLEdBQXpCLFNBQVFBLGlCQUFpQkEsQ0FBQ0MsT0FBZ0IsRUFBZTtNQUN4RCxNQUFNQyxlQUFtQyxHQUFHRCxPQUFPLENBQUNFLGlCQUFpQixHQUFHLENBQUM7TUFFekUsT0FBTyxJQUFJQyxXQUFXLENBQUM7UUFDdEJDLEtBQUssRUFBRUosT0FBTyxDQUFDSyxVQUFVLENBQUMsQ0FBQztRQUMzQkMsV0FBVyxFQUFFTixPQUFPLENBQUNPLGNBQWMsQ0FBQyxDQUFDO1FBQ3JDQyxJQUFJLEVBQUVSLE9BQU8sQ0FBQ1MsT0FBTyxDQUFDLENBQUM7UUFDdkJDLFdBQVcsRUFBRVQsZUFBZTtRQUM1QlUsUUFBUSxFQUFFWCxPQUFPLENBQUNZLGlCQUFpQixHQUFHLENBQUM7UUFDdkNDLFNBQVMsRUFBRSw4Q0FBOEM7UUFDekRDLFdBQVcsRUFBRSxDQUFDLENBQUNkLE9BQU8sQ0FBQ2UsYUFBYSxHQUFHLENBQUMsQ0FBQ3BIO01BQzFDLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFPLE1BQUEsQ0FNQThHLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUNDLFlBQXlCLEVBQWtCO01BQy9ELE1BQU1DLE9BQU8sR0FBRyxJQUFJQyxjQUFjLENBQUM7UUFDbENDLEtBQUssRUFBRUg7TUFDUixDQUFDLENBQW1CO01BQ3BCLE9BQU9DLE9BQU87SUFDZjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUFoSCxNQUFBLENBT0FtSCxrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUFDQyxLQUFlLEVBQUV0QixPQUFrQixFQUFrQjtNQUN2RSxNQUFNdUIsV0FBVyxHQUFHLElBQUksQ0FBQ3hCLGlCQUFpQixDQUFDQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdEQsTUFBTWtCLE9BQU8sR0FBRyxJQUFJLENBQUNGLG9CQUFvQixDQUFDTyxXQUFXLENBQUM7TUFDdEQsTUFBTUMsYUFBYSxHQUFHRixLQUFLLENBQUNHLFNBQVMsR0FBRyxDQUFZO01BQ3BERCxhQUFhLEVBQUVFLFlBQVksQ0FBQ1IsT0FBTyxDQUFDO01BQ3BDQSxPQUFPLENBQUNTLE1BQU0sQ0FBQ0gsYUFBYSxDQUFDO01BQzdCLE9BQU9OLE9BQU87SUFDZjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWhILE1BQUEsQ0FLQTZELGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFDNkQsUUFBbUIsRUFBaUQ7TUFBQSxJQUEvQ0MsTUFBNEIsR0FBQW5JLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUE0QixTQUFBLEdBQUE1QixTQUFBLE1BQUcsUUFBUTtNQUN6RSxJQUFJO1FBQ0gsSUFBSWtJLFFBQVEsQ0FBQ2pJLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDeEI7VUFDQTtVQUNBLElBQUksQ0FBQzBFLHdCQUF3QixDQUFDLENBQUM7UUFDaEM7UUFFQSxNQUFNeUQsSUFBSSxHQUFHLElBQUksQ0FBQ3ZILEtBQUs7UUFDdkIsTUFBTXdILGFBQWEsR0FBR0QsSUFBSSxDQUFDN0csUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUMvQyxNQUFNMkQsZ0NBQWdDLEdBQUdtRCxhQUFhLENBQUM1RCxXQUFXLENBQUMsSUFBSSxDQUFDWCxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsQ0FBQ1ksZUFBZSxDQUFDLENBQUM7UUFDL0gsSUFBSSxDQUFDUSxnQ0FBZ0MsRUFBRTtVQUN0QztRQUNEO1FBQ0EsTUFBTW9ELGFBQWEsR0FBR0MsbUJBQW1CLENBQUNDLGdCQUFnQixDQUFDSixJQUFJLENBQUM7UUFDaEUsSUFBSTlCLE9BQXVCLEdBQUc0QixRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSTtRQUNqRGhELGdDQUFnQyxDQUFDTixXQUFXLENBQUMsS0FBS3VELE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDN0IsT0FBTyxDQUFDO1FBQ3BGLFFBQVE0QixRQUFRLENBQUNqSSxNQUFNO1VBQ3RCLEtBQUssQ0FBQztZQUNMO1VBQ0QsS0FBSyxDQUFDO1lBQ0xxRyxPQUFPLEdBQUc0QixRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3JCLE1BQU1PLGlCQUFpQixHQUFHLENBQUMsQ0FBQ25DLE9BQU8sRUFBRUUsaUJBQWlCLENBQUMsQ0FBQztZQUN4RCxNQUFNa0MsVUFBVSxHQUFHeEgsV0FBVyxDQUFDeUgsYUFBYSxDQUFDUCxJQUFJLENBQUM7WUFDbEQsSUFBSTtjQUNILE1BQU1RLFVBQVUsR0FBR1IsSUFBSSxDQUFDUyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBcUI7Y0FDN0QsTUFBTUMsV0FBVyxHQUFHRixVQUFVLENBQUNHLGNBQWMsQ0FBQyxDQUFpQzs7Y0FFL0U7Y0FDQSxNQUFNQyxTQUFTLEdBQUcsQ0FDakIsSUFBSUYsV0FBVyxDQUFDRyxpQkFBaUIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQzVDLElBQUlILFdBQVcsQ0FBQ0ksa0JBQWtCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUM3QyxDQUFDQyxNQUFNLENBQ05DLElBQUksSUFBMkJBLElBQUksWUFBWUMsWUFBWSxJQUFJLENBQUNELElBQUksQ0FBQ3RFLEtBQUssQ0FBQyxDQUFDLEVBQUVzQixRQUFRLENBQUMsb0JBQW9CLENBQzdHLENBQUM7O2NBRUQ7Y0FDQSxJQUFJK0IsTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDTyxVQUFVLElBQUlELGlCQUFpQixFQUFFO2dCQUM3RE8sU0FBUyxDQUFDTSxPQUFPLENBQUVDLEtBQUssSUFBSztrQkFDNUI7a0JBQ0EsSUFBSUEsS0FBSyxDQUFDQyxPQUFPLENBQUMsQ0FBQyxFQUFFO29CQUNwQkQsS0FBSyxDQUFDRSxXQUFXLENBQUMsQ0FBQztrQkFDcEI7a0JBQ0EsTUFBTUMsSUFBSSxHQUFHLElBQUlDLElBQUksQ0FBQztvQkFDckJDLElBQUksRUFBRXRCLGFBQWEsQ0FBQ3VCLE9BQU8sQ0FBQyx3REFBd0QsQ0FBQztvQkFDckZDLEtBQUssRUFBR2xDLEtBQWUsSUFBVztzQkFDakMsSUFBSSxDQUFDRCxrQkFBa0IsQ0FBQ0MsS0FBSyxFQUFFLENBQUN0QixPQUFPLENBQUUsQ0FBQztvQkFDM0M7a0JBQ0QsQ0FBQyxDQUFDO2tCQUNGaUQsS0FBSyxDQUFDUSxPQUFPLENBQUNMLElBQUksQ0FBQztnQkFDcEIsQ0FBQyxDQUFDO2NBQ0gsQ0FBQyxNQUFNO2dCQUNOO2dCQUNBVixTQUFTLENBQUNNLE9BQU8sQ0FBRUMsS0FBSyxJQUFLO2tCQUM1QixJQUFJQSxLQUFLLENBQUNDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7b0JBQ3BCRCxLQUFLLENBQUNFLFdBQVcsQ0FBQyxDQUFDO2tCQUNwQjtnQkFDRCxDQUFDLENBQUM7Y0FDSDtZQUNELENBQUMsQ0FBQyxPQUFPTyxHQUFHLEVBQUU7Y0FDYkMsR0FBRyxDQUFDQyxPQUFPLENBQUMsa0RBQWtELEVBQUVGLEdBQVksQ0FBQztZQUM5RTtZQUNBO1VBQ0Q7WUFDQyxNQUFNRyxZQUE4RCxHQUFHO2NBQ3RFQyxLQUFLLEVBQUU7Z0JBQUVDLEVBQUUsRUFBRSxDQUFDO2dCQUFFQyxLQUFLLEVBQUU7Y0FBRSxDQUFDO2NBQzFCQyxPQUFPLEVBQUU7Z0JBQUVGLEVBQUUsRUFBRSxDQUFDO2dCQUFFQyxLQUFLLEVBQUU7Y0FBRSxDQUFDO2NBQzVCRSxXQUFXLEVBQUU7Z0JBQUVILEVBQUUsRUFBRSxDQUFDO2dCQUFFQyxLQUFLLEVBQUU7Y0FBRTtZQUNoQyxDQUFDO1lBQ0RoRSxPQUFPLEdBQUc0QixRQUFRLENBQUN1QyxNQUFNLENBQ3hCLENBQUNDLEdBQUcsRUFBRUMsWUFBWSxLQUFLO2NBQ3RCLE1BQU1DLFdBQVcsR0FBR0QsWUFBWSxDQUFDNUQsT0FBTyxDQUFDLENBQUM7Y0FDMUMyRCxHQUFHLENBQUNHLE9BQU8sQ0FBQ1YsWUFBWSxDQUFDUyxXQUFXLENBQUMsQ0FBQ1AsRUFBRSxHQUFHRixZQUFZLENBQUNPLEdBQUcsQ0FBQzNELE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQ3NELEVBQUUsR0FBR08sV0FBVyxHQUFHRixHQUFHLENBQUMzRCxPQUFPLENBQUMsQ0FBQyxDQUFDO2NBQ3hHb0QsWUFBWSxDQUFDUyxXQUFXLENBQUMsQ0FBQ04sS0FBSyxFQUFFO2NBQ2pDLE9BQU9JLEdBQUc7WUFDWCxDQUFDLEVBQ0QsSUFBSUksT0FBTyxDQUFDO2NBQUVoRSxJQUFJLEVBQUVpRSxXQUFXLENBQUNQO1lBQVksQ0FBQyxDQUM5QyxDQUFDO1lBQ0QsSUFBSXJDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQ2pILFdBQVcsQ0FBQ3lILGFBQWEsQ0FBQ1AsSUFBSSxDQUFDLEVBQUU7Y0FDN0RsRCxnQ0FBZ0MsQ0FBQ04sV0FBVyxDQUFDLEtBQUt1RCxNQUFNLGdCQUFnQixFQUFFLEtBQUssQ0FBQztZQUNqRixDQUFDLE1BQU07Y0FDTmpELGdDQUFnQyxDQUFDTixXQUFXLENBQUMsS0FBS3VELE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDN0IsT0FBTyxDQUFDO1lBQ3JGO1lBRUEsSUFBSTZELFlBQVksQ0FBQ0MsS0FBSyxDQUFDRSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2NBQ2pDaEUsT0FBTyxDQUFDMEUsVUFBVSxDQUFDMUMsYUFBYSxDQUFDdUIsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDbkUsQ0FBQyxNQUFNLElBQUlNLFlBQVksQ0FBQ0ksT0FBTyxDQUFDRCxLQUFLLEdBQUcsQ0FBQyxFQUFFO2NBQzFDaEUsT0FBTyxDQUFDMEUsVUFBVSxDQUFDMUMsYUFBYSxDQUFDdUIsT0FBTyxDQUFDLHlCQUF5QixDQUFDLENBQUM7WUFDckUsQ0FBQyxNQUFNO2NBQ052RCxPQUFPLENBQUMwRSxVQUFVLENBQUMxQyxhQUFhLENBQUN1QixPQUFPLENBQUMsNkJBQTZCLENBQUMsQ0FBQztZQUN6RTtRQUNGO1FBQ0EzRSxnQ0FBZ0MsQ0FBQ04sV0FBVyxDQUFDLEtBQUt1RCxNQUFNLGFBQWEsRUFBRTdCLE9BQU8sR0FBR0EsT0FBTyxDQUFDSyxVQUFVLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM3R3pCLGdDQUFnQyxDQUFDTixXQUFXLENBQUMsS0FBS3VELE1BQU0sYUFBYSxFQUFFN0IsT0FBTyxHQUFHQSxPQUFPLENBQUNTLE9BQU8sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzFHLElBQUlULE9BQU8sRUFBRTtVQUNaMkUsZ0JBQWdCLENBQUNDLFdBQVcsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQzdFLE9BQU8sQ0FBQ0ssVUFBVSxDQUFDLENBQUMsRUFBRXlFLG9CQUFvQixDQUFDQyxTQUFTLENBQUM7UUFDOUY7TUFDRCxDQUFDLENBQUMsT0FBT3JCLEdBQUcsRUFBRTtRQUNiQyxHQUFHLENBQUNxQixLQUFLLENBQUMsbUNBQW1DLENBQUM7TUFDL0M7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUE5SyxNQUFBLENBSUErSyxXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQSxFQUFTO01BQ25CLE1BQU1yRyxnQ0FBZ0MsR0FBRyxJQUFJLENBQUNyRSxLQUFLLENBQ2pEVSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQ3BCa0QsV0FBVyxDQUFDLElBQUksQ0FBQ1gsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLENBQ3REWSxlQUFlLENBQUMsQ0FBRTtNQUNwQlEsZ0NBQWdDLENBQUNOLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUM7TUFDN0UsSUFBSSxDQUFDRCx3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQW5FLE1BQUEsQ0FJQWdMLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUNDLElBQTRCLEVBQVE7TUFDdERDLG9CQUFvQixDQUFDQywwQ0FBMEMsQ0FBQ0YsSUFBSSxDQUFDO01BQ3JFLElBQUksQ0FBQzVLLEtBQUssQ0FBQ1UsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDcUQsV0FBVyxDQUFDLHNCQUFzQixFQUFFNkcsSUFBSSxDQUFDO0lBQzFFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBakwsTUFBQSxDQVFBb0wsc0JBQXNCLEdBQXRCLFNBQUFBLHNCQUFzQkEsQ0FBQzVGLE9BQXNCLEVBQVE7TUFDcEQsSUFBSTZGLE9BQU87TUFDWCxNQUFNQyxlQUFlLEdBQUc5RixPQUFPO01BQy9CLElBQUkrRixjQUFjO01BQ2xCLE9BQU8vRixPQUFPLEVBQUU7UUFDZixJQUFJQSxPQUFPLENBQUNoRCxHQUFHLENBQVUsZ0NBQWdDLENBQUMsRUFBRTtVQUMzRDZJLE9BQU8sR0FBRzdGLE9BQU87VUFDakI7UUFDRDtRQUNBLElBQUlBLE9BQU8sQ0FBQ2hELEdBQUcsQ0FBaUIsNEJBQTRCLENBQUMsRUFBRTtVQUM5RGdELE9BQU8sR0FBR0EsT0FBTyxDQUFDZ0csU0FBUyxDQUFDL0ksU0FBUyxDQUFDLENBQVk7VUFDbEQ4SSxjQUFjLEdBQUcsSUFBSTtRQUN0QjtRQUNBLE1BQU1FLGFBQWEsR0FBR2pHLE9BQU8sQ0FBQy9DLFNBQVMsQ0FBQyxDQUFDO1FBQ3pDLElBQUlnSixhQUFhLEVBQUU7VUFDbEJqRyxPQUFPLEdBQUdpRyxhQUFhO1FBQ3hCLENBQUMsTUFBTTtVQUNOO1FBQ0Q7TUFDRDtNQUNBLElBQUlKLE9BQU8sRUFBRTtRQUNaLElBQUlFLGNBQWMsSUFBSUYsT0FBTyxDQUFDSyxxQkFBcUIsQ0FBQyxDQUFDLENBQUNqTSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1VBQ2pFNEwsT0FBTyxDQUFDTSxzQkFBc0IsQ0FBQ0wsZUFBZSxFQUFFO1lBQUVNLHFDQUFxQyxFQUFFO1VBQUssQ0FBQyxDQUFDO1FBQ2pHLENBQUMsTUFBTTtVQUNOUCxPQUFPLENBQUNNLHNCQUFzQixDQUFDTCxlQUFlLENBQUM7UUFDaEQ7TUFDRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUF0TCxNQUFBLENBR1E2TCxtQkFBbUIsR0FBM0IsU0FBUUEsbUJBQW1CQSxDQUFBLEVBQVM7TUFDbkMsTUFBTS9ELGFBQWEsR0FBR0MsbUJBQW1CLENBQUNDLGdCQUFnQixDQUFDLElBQUksQ0FBQzNILEtBQUssQ0FBQztNQUN0RSxNQUFNeUwsTUFBTSxHQUFHaEUsYUFBYSxDQUFDdUIsT0FBTyxDQUFDLHFDQUFxQyxDQUFDO01BQzNFSSxHQUFHLENBQUNxQixLQUFLLENBQUNnQixNQUFNLENBQUM7TUFDakJDLFVBQVUsQ0FBQ2pCLEtBQUssQ0FBQ2dCLE1BQU0sQ0FBQztJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTlMLE1BQUEsQ0FLUWdNLHNCQUFzQixHQUE5QixTQUFRQSxzQkFBc0JBLENBQUNDLGdCQUFrQyxFQUFRO01BQ3hFLE1BQU1DLFFBQVEsR0FBR0QsZ0JBQWdCLENBQUNFLFdBQVcsQ0FBQyxDQUFDO01BQy9DLElBQUksQ0FBQ0QsUUFBUSxJQUFJQSxRQUFRLENBQUN6TSxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3ZDO01BQ0Q7TUFFQSxNQUFNMk0sWUFBWSxHQUFHRixRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ2hDLE1BQU1HLFdBQVcsR0FBR0QsWUFBWSxDQUFDRSxjQUFjLENBQUMsQ0FBQztNQUNqRCxJQUFJLENBQUNELFdBQVcsSUFBSUEsV0FBVyxDQUFDNU0sTUFBTSxLQUFLLENBQUMsRUFBRTtRQUM3QztNQUNEO01BRUEsTUFBTThNLGVBQWUsR0FBR0YsV0FBVyxDQUFDLENBQUMsQ0FBQztNQUN0QyxNQUFNRyxnQkFBZ0IsR0FBR0QsZUFBZSxDQUFDakksS0FBSyxDQUFDLENBQUM7TUFFaEQsSUFBSSxDQUFDa0ksZ0JBQWdCLEVBQUU7UUFDdEI7TUFDRDtNQUVBUCxnQkFBZ0IsQ0FBQ1Esa0JBQWtCLENBQUNELGdCQUFnQixDQUFDO01BQ3JEUCxnQkFBZ0IsQ0FBQ1MsWUFBWSxDQUFDO1FBQzdCckIsT0FBTyxFQUFFZSxZQUFZO1FBQ3JCTyxVQUFVLEVBQUVKO01BQ2IsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBdk0sTUFBQSxDQU9BNE0sb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQ0MscUJBQTZCLEVBQVE7TUFDekQ7TUFDQTtNQUNBLElBQUksSUFBSSxDQUFDL00sd0JBQXdCLEVBQUU7UUFDbEM7TUFDRDtNQUNBLElBQUksQ0FBQ0Esd0JBQXdCLEdBQUcsSUFBSTs7TUFFcEM7TUFDQSxNQUFNZ04sbUJBQW1CLEdBQUlDLE9BQWUsSUFBVztRQUN0REMsVUFBVSxDQUFDLE1BQU07VUFDaEIsSUFBSSxDQUFDbE4sd0JBQXdCLEdBQUcsS0FBSztRQUN0QyxDQUFDLEVBQUVpTixPQUFPLENBQUM7TUFDWixDQUFDO01BRUQsSUFBSTtRQUNIO1FBQ0EsTUFBTWQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDNUwsS0FBSyxDQUFDZ0ksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQWlDO1FBRW5GLElBQUksQ0FBQzRELGdCQUFnQixJQUFJLENBQUNBLGdCQUFnQixDQUFDZ0IsU0FBUyxDQUFDLENBQUMsRUFBRTtVQUN2RDtVQUNBO1VBQ0EsSUFBSSxDQUFDbk4sd0JBQXdCLEdBQUcsS0FBSztVQUNyQztRQUNEO1FBRUEsSUFBSSxDQUFDK00scUJBQXFCLEVBQUU7VUFDM0IsSUFBSSxDQUFDYixzQkFBc0IsQ0FBQ0MsZ0JBQWdCLENBQUM7VUFDN0NhLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztVQUN4QjtRQUNEO1FBRUEsTUFBTXRILE9BQU8sR0FBRyxJQUFJLENBQUNuRixLQUFLLENBQUNrQyxJQUFJLENBQUNzSyxxQkFBcUIsQ0FBQztRQUV0RCxJQUFJLENBQUNySCxPQUFPLElBQUksQ0FBRUEsT0FBTyxDQUFhMEgsVUFBVSxDQUFDLENBQUMsRUFBRTtVQUNuRCxJQUFJLENBQUNsQixzQkFBc0IsQ0FBQ0MsZ0JBQWdCLENBQUM7VUFDN0MsSUFBSSxDQUFDSixtQkFBbUIsQ0FBQyxDQUFDO1VBQzFCaUIsbUJBQW1CLENBQUMsR0FBRyxDQUFDO1VBQ3hCO1FBQ0Q7UUFFQSxJQUFJSyxnQkFBa0Q7UUFDdEQsSUFBSUMsYUFBNEM7UUFDaEQsSUFBSUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDLENBQUM7O1FBRW5DO1FBQ0EsSUFBSTdILE9BQU8sQ0FBQ2hELEdBQUcsQ0FBdUIsK0JBQStCLENBQUMsRUFBRTtVQUN2RTJLLGdCQUFnQixHQUFHM0gsT0FBTztRQUMzQixDQUFDLE1BQU0sSUFBSUEsT0FBTyxDQUFDaEQsR0FBRyxDQUFvQiw0QkFBNEIsQ0FBQyxFQUFFO1VBQ3hFNEssYUFBYSxHQUFHNUgsT0FBTztVQUN2QjZILHFCQUFxQixHQUFHLElBQUk7VUFDNUI7VUFDQSxNQUFNaEIsV0FBVyxHQUFHN0csT0FBTyxDQUFDOEcsY0FBYyxDQUFDLENBQUM7VUFDNUNhLGdCQUFnQixHQUFHZCxXQUFXLENBQUM1TSxNQUFNLEdBQUcsQ0FBQyxHQUFHNE0sV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHakwsU0FBUztRQUN2RTs7UUFFQTtRQUNBLE1BQU1rTSxjQUFjLEdBQUdILGdCQUFnQixJQUFJQyxhQUFhO1FBQ3hELElBQUksQ0FBQ0UsY0FBYyxJQUFLSCxnQkFBZ0IsSUFBSSxDQUFDQSxnQkFBZ0IsQ0FBQ0QsVUFBVSxDQUFDLENBQUUsRUFBRTtVQUM1RSxJQUFJLENBQUNsQixzQkFBc0IsQ0FBQ0MsZ0JBQWdCLENBQUM7VUFDN0MsSUFBSSxDQUFDSixtQkFBbUIsQ0FBQyxDQUFDO1VBQzFCaUIsbUJBQW1CLENBQUMsR0FBRyxDQUFDO1VBQ3hCO1FBQ0Q7O1FBRUE7UUFDQSxJQUFJTSxhQUFhLElBQUksQ0FBQ0QsZ0JBQWdCLEVBQUU7VUFDdkMsTUFBTUksYUFBYSxHQUFHSCxhQUFhLENBQUM5SSxLQUFLLENBQUMsQ0FBQztVQUMzQzJILGdCQUFnQixDQUFDdUIsZUFBZSxDQUFDRCxhQUFhLEVBQUUsQ0FBQyxDQUFDO1VBQ2xEVCxtQkFBbUIsQ0FBQyxHQUFHLENBQUM7VUFDeEI7UUFDRDs7UUFFQTtRQUNBO1FBQ0EsSUFBSSxDQUFDSyxnQkFBZ0IsRUFBRTtVQUN0QjtVQUNBLElBQUksQ0FBQ3JOLHdCQUF3QixHQUFHLEtBQUs7VUFDckM7UUFDRDs7UUFFQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxNQUFNME0sZ0JBQWdCLEdBQUdXLGdCQUFnQixDQUFDN0ksS0FBSyxDQUFDLENBQUM7UUFFakQsSUFBSSxDQUFDa0ksZ0JBQWdCLEVBQUU7VUFDdEIsSUFBSSxDQUFDMU0sd0JBQXdCLEdBQUcsS0FBSztVQUNyQztRQUNEO1FBRUEsTUFBTTJOLGFBQWEsR0FBR04sZ0JBQWdCLENBQUMxSyxTQUFTLENBQUMsQ0FBc0I7UUFDdkUsTUFBTWlMLG1CQUFtQixHQUFHRCxhQUFhLENBQUNuSixLQUFLLENBQUMsQ0FBQztRQUNqRCxNQUFNcUosdUJBQXVCLEdBQUcxQixnQkFBZ0IsQ0FBQzJCLGtCQUFrQixDQUFDLENBQUMsS0FBS0YsbUJBQW1CO1FBRTdGLElBQUksQ0FBQ0MsdUJBQXVCLElBQUksQ0FBQ04scUJBQXFCLEVBQUU7VUFDdkQ7VUFDQTtVQUNBcEIsZ0JBQWdCLENBQUN1QixlQUFlLENBQUNFLG1CQUFtQixFQUFFLENBQUMsQ0FBQzs7VUFFeEQ7VUFDQTtVQUNBO1VBQ0EsSUFBSUcsUUFBUSxHQUFHLENBQUM7VUFDaEIsTUFBTUMsV0FBVyxHQUFHLEVBQUU7VUFDdEIsTUFBTUMsb0JBQW9CLEdBQUdBLENBQUEsS0FBWTtZQUN4Q0YsUUFBUSxFQUFFO1lBQ1YsTUFBTUcsYUFBYSxHQUFHYixnQkFBZ0IsQ0FBQ0YsU0FBUyxDQUFDLENBQUM7WUFDbEQsSUFBSWUsYUFBYSxFQUFFO2NBQ2xCO2NBQ0EvQixnQkFBZ0IsQ0FBQ3VCLGVBQWUsQ0FBQ2hCLGdCQUFnQixFQUFFLENBQUMsQ0FBQztjQUNyRE0sbUJBQW1CLENBQUMsR0FBRyxDQUFDO1lBQ3pCLENBQUMsTUFBTSxJQUFJZSxRQUFRLEdBQUdDLFdBQVcsRUFBRTtjQUNsQztjQUNBZCxVQUFVLENBQUNlLG9CQUFvQixFQUFFLEVBQUUsQ0FBQztZQUNyQyxDQUFDLE1BQU07Y0FDTjtjQUNBOUIsZ0JBQWdCLENBQUN1QixlQUFlLENBQUNoQixnQkFBZ0IsRUFBRSxDQUFDLENBQUM7Y0FDckRNLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztZQUN6QjtVQUNELENBQUM7VUFDRDtVQUNBRSxVQUFVLENBQUNlLG9CQUFvQixFQUFFLEdBQUcsQ0FBQztRQUN0QyxDQUFDLE1BQU07VUFDTjtVQUNBLE1BQU1FLFlBQVksR0FBR1oscUJBQXFCLEdBQUdLLG1CQUFtQixHQUFHbEIsZ0JBQWdCO1VBQ25GUCxnQkFBZ0IsQ0FBQ3VCLGVBQWUsQ0FBQ1MsWUFBWSxFQUFFLENBQUMsQ0FBQztVQUNqRG5CLG1CQUFtQixDQUFDLEdBQUcsQ0FBQztRQUN6QjtNQUNELENBQUMsQ0FBQyxPQUFPaEMsS0FBSyxFQUFFO1FBQ2YsSUFBSSxDQUFDaEwsd0JBQXdCLEdBQUcsS0FBSztNQUN0QztJQUNELENBQUM7SUFBQSxPQUFBYixzQkFBQTtFQUFBLEVBam9CbUNpUCxZQUFZLE1BQUE5TyxNQUFBO0VBQUEsT0Fvb0JsQ0gsc0JBQXNCO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
653
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3RQYWdlRXh0ZW5zaW9uQVBJIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2NsYXNzIiwiX0V4dGVuc2lvbkFQSSIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiaXNOYXZpZ2F0aW5nVG9TdWJTZWN0aW9uIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJyZWZyZXNoIiwidlBhdGgiLCJvQmluZGluZ0NvbnRleHQiLCJfdmlldyIsImdldEJpbmRpbmdDb250ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJvQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJvU2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwib01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib1NpZGVFZmZlY3RzIiwidGFyZ2V0UHJvcGVydGllcyIsInRhcmdldEVudGl0aWVzIiwidW5kZWZpbmVkIiwicHVzaCIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiYWxsUGF0aHMiLCJpc0FycmF5Iiwib3duZXJDb21wb25lbnQiLCJfY29udHJvbGxlciIsImdldE93bmVyQ29tcG9uZW50IiwiY29udGV4dFBhdGgiLCJnZXRDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsInBhdGgiLCJraW5kIiwiZ2V0T2JqZWN0IiwicmVqZWN0IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiZ2V0U2VsZWN0ZWRDb250ZXh0cyIsInNUYWJsZUlkIiwidGFibGUiLCJieUlkIiwiaXNBIiwiZ2V0UGFyZW50Iiwic2hvd1NpZGVDb250ZW50Iiwic1N1YlNlY3Rpb25LZXkiLCJiU2hvdyIsInNCbG9ja0lEIiwiZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRCIsIm9CbG9jayIsInNDdXJyZW50QnJlYWtwb2ludCIsImdldEN1cnJlbnRCcmVha3BvaW50IiwiYkJsb2NrU3RhdGUiLCJnZXRTaG93U2lkZUNvbnRlbnQiLCJzZXRTaG93U2lkZUNvbnRlbnQiLCJzZXRTaG93TWFpbkNvbnRlbnQiLCJfZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoIiwiaW50ZXJuYWxNb2RlbENvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInZpZXdDb250ZXh0UGF0aCIsInJlcGxhY2UiLCJzaG93TWVzc2FnZXMiLCJtZXNzYWdlc09yU3RyaXAiLCJfc2hvd01lc3NhZ2VzIiwic2hvd0N1c3RvbU1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0IiwiYmluZENvbnRleHQiLCJnZXRCb3VuZENvbnRleHQiLCJyZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAiLCJzZXRQcm9wZXJ0eSIsImN1c3RvbU1lc3NhZ2VTdHJpcElkIiwiZ2V0SWQiLCJ1aWQiLCJhZGRTdHlsZUNsYXNzIiwiYWRkQ3VzdG9tTWVzc2FnZVN0cmlwVG9QYWdlIiwibWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQiLCJoZWFkZXJDb250YWluZXIiLCJpbnNlcnRJbnRvQWdncmVnYXRpb24iLCJhZ2dyZWdhdGlvbk5hbWUiLCJjb250cm9sVG9JbnNlcnQiLCJhZ2dyZWdhdGlvbkNvbnRlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImNvbnRlbnRBcnJheSIsImluc2VydEFnZ3JlZ2F0aW9uIiwiY2xvbmUiLCJyZW1vdmVGcm9tQWdncmVnYXRpb24iLCJpZE1hdGNoZXIiLCJjb250cm9sVG9SZW1vdmUiLCJmaW5kIiwiY29udHJvbCIsInJlbW92ZUFnZ3JlZ2F0aW9uIiwiZGVzdHJveSIsImNvbnRyb2xJZCIsImluY2x1ZGVzIiwiY3JlYXRlTWVzc2FnZUl0ZW0iLCJtZXNzYWdlIiwic0Rlc2NyaXB0aW9uVXJsIiwiZ2V0RGVzY3JpcHRpb25VcmwiLCJNZXNzYWdlSXRlbSIsInRpdGxlIiwiZ2V0TWVzc2FnZSIsImRlc2NyaXB0aW9uIiwiZ2V0RGVzY3JpcHRpb24iLCJ0eXBlIiwiZ2V0VHlwZSIsImxvbmd0ZXh0VXJsIiwic3VidGl0bGUiLCJnZXRBZGRpdGlvbmFsVGV4dCIsImdyb3VwTmFtZSIsImFjdGl2ZVRpdGxlIiwiZ2V0Q29udHJvbElkcyIsImNyZWF0ZU1lc3NhZ2VQb3BvdmVyIiwibWVzc2FnZUl0ZW1zIiwicG9wb3ZlciIsIk1lc3NhZ2VQb3BvdmVyIiwiaXRlbXMiLCJzaG93TWVzc2FnZVBvcG92ZXIiLCJldmVudCIsIm1lc3NhZ2VJdGVtIiwic291cmNlQ29udHJvbCIsImdldFNvdXJjZSIsImFkZERlcGVuZGVudCIsIm9wZW5CeSIsIm1lc3NhZ2VzIiwib3JpZ2luIiwidmlldyIsImludGVybmFsTW9kZWwiLCJyZXNvdXJjZU1vZGVsIiwiUmVzb3VyY2VNb2RlbEhlbHBlciIsImdldFJlc291cmNlTW9kZWwiLCJoYXNEZXNjcmlwdGlvblVybCIsImlzRWRpdE1vZGUiLCJnZXRJc0VkaXRhYmxlIiwib2JqZWN0UGFnZSIsImdldENvbnRlbnQiLCJoZWFkZXJUaXRsZSIsImdldEhlYWRlclRpdGxlIiwiYWxsU3RyaXBzIiwiZ2V0U25hcHBlZENvbnRlbnQiLCJnZXRFeHBhbmRlZENvbnRlbnQiLCJmaWx0ZXIiLCJpdGVtIiwiTWVzc2FnZVN0cmlwIiwiZm9yRWFjaCIsInN0cmlwIiwiZ2V0TGluayIsImRlc3Ryb3lMaW5rIiwibGluayIsIkxpbmsiLCJ0ZXh0IiwiZ2V0VGV4dCIsInByZXNzIiwic2V0TGluayIsImVyciIsIkxvZyIsIndhcm5pbmciLCJtZXNzYWdlU3RhdHMiLCJFcnJvciIsImlkIiwiY291bnQiLCJXYXJuaW5nIiwiSW5mb3JtYXRpb24iLCJTdWNjZXNzIiwiTm9uZSIsInJlZHVjZSIsImFjYyIsImN1cnJlbnRWYWx1ZSIsImN1cnJlbnRUeXBlIiwiY3VycmVudFN0YXRzIiwiYWNjU3RhdHMiLCJzZXRUeXBlIiwiTWVzc2FnZSIsIk1lc3NhZ2VUeXBlIiwic2V0TWVzc2FnZSIsIkludmlzaWJsZU1lc3NhZ2UiLCJnZXRJbnN0YW5jZSIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJlcnJvciIsImhpZGVNZXNzYWdlIiwic2V0UmVjb21tZW5kYXRpb25zIiwiZGF0YSIsInJlY29tbWVuZGF0aW9uSGVscGVyIiwidHJhbnNmb3JtUmVjb21tZW5kYXRpb25zRm9ySW50ZXJuYWxTdG9yYWdlIiwic2V0QXNTZWN0aW9uVGl0bGVPd25lciIsInNlY3Rpb24iLCJvcmlnaW5hbENvbnRyb2wiLCJyZXVzZUNvbXBvbmVudCIsImNvbnRhaW5lciIsImNvbnRyb2xQYXJlbnQiLCJnZXRWaXNpYmxlU3ViU2VjdGlvbnMiLCJhZGp1c3RGb3JTaW5nbGVDb250ZW50IiwibXVsdGlwbGVTdWJTZWN0aW9uc1dpdGhSZXVzZUNvbXBvbmVudCIsInNob3dOYXZpZ2F0aW9uRXJyb3IiLCJzVGl0bGUiLCJNZXNzYWdlQm94IiwibmF2aWdhdGVUb0ZpcnN0U2VjdGlvbiIsIm9iamVjdFBhZ2VMYXlvdXQiLCJzZWN0aW9ucyIsImdldFNlY3Rpb25zIiwiZmlyc3RTZWN0aW9uIiwic3ViU2VjdGlvbnMiLCJnZXRTdWJTZWN0aW9ucyIsImZpcnN0U3ViU2VjdGlvbiIsInN1YlNlY3Rpb25GdWxsSWQiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJmaXJlTmF2aWdhdGUiLCJzdWJTZWN0aW9uIiwibmF2aWdhdGVUb1N1YlNlY3Rpb24iLCJzZWN0aW9uT3JTdWJTZWN0aW9uSWQiLCJyZXNldE5hdmlnYXRpb25GbGFnIiwiZGVsYXlNcyIsInNldFRpbWVvdXQiLCJnZXREb21SZWYiLCJnZXRWaXNpYmxlIiwidGFyZ2V0U3ViU2VjdGlvbiIsInRhcmdldFNlY3Rpb24iLCJpc05hdmlnYXRpbmdUb1NlY3Rpb24iLCJoYXNWYWxpZFRhcmdldCIsInNlY3Rpb25GdWxsSWQiLCJzY3JvbGxUb1NlY3Rpb24iLCJwYXJlbnRTZWN0aW9uIiwicGFyZW50U2VjdGlvbkZ1bGxJZCIsImlzUGFyZW50U2VjdGlvblNlbGVjdGVkIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwiYXR0ZW1wdHMiLCJtYXhBdHRlbXB0cyIsImNoZWNrU3Vic2VjdGlvblJlYWR5Iiwic3ViU2VjdGlvbkRvbSIsInNjcm9sbFRhcmdldCIsIkV4dGVuc2lvbkFQSSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRXh0ZW5zaW9uQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHsgZ2V0U2lkZUNvbnRlbnRMYXlvdXRJRCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvSURcIjtcbmltcG9ydCBFeHRlbnNpb25BUEkgZnJvbSBcInNhcC9mZS9jb3JlL0V4dGVuc2lvbkFQSVwiO1xuaW1wb3J0IHR5cGUgeyBJbkNvbXBsZXRlbmVzc0luZm9UeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB7IHJlY29tbWVuZGF0aW9uSGVscGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCBSZXNvdXJjZU1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIFJldXNlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9SZXVzZUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1RhcmdldFR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgU2VjdGlvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jb250cm9scy9TZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBUYWJsZUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UYWJsZVwiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgTWVzc2FnZUl0ZW0gZnJvbSBcInNhcC9tL01lc3NhZ2VJdGVtXCI7XG5pbXBvcnQgTWVzc2FnZVBvcG92ZXIgZnJvbSBcInNhcC9tL01lc3NhZ2VQb3BvdmVyXCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvbS9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCBNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgRHluYW1pY1NpZGVDb250ZW50IGZyb20gXCJzYXAvdWkvbGF5b3V0L0R5bmFtaWNTaWRlQ29udGVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZSBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUR5bmFtaWNIZWFkZXJUaXRsZVwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZUxheW91dCBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZUxheW91dFwiO1xuaW1wb3J0IHR5cGUgT2JqZWN0UGFnZVNlY3Rpb24gZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VTZWN0aW9uXCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlU3ViU2VjdGlvbiBmcm9tIFwic2FwL3V4YXAvT2JqZWN0UGFnZVN1YlNlY3Rpb25cIjtcblxuLyoqXG4gKiBFeHRlbnNpb24gQVBJIGZvciBvYmplY3QgcGFnZXMgb24gU0FQIEZpb3JpIGVsZW1lbnRzIGZvciBPRGF0YSBWNC5cbiAqXG4gKiBUbyBjb3JyZWN0bHkgaW50ZWdyYXRlIHlvdXIgYXBwIGV4dGVuc2lvbiBjb2Rpbmcgd2l0aCBTQVAgRmlvcmkgZWxlbWVudHMsIHVzZSBvbmx5IHRoZSBleHRlbnNpb25BUEkgb2YgU0FQIEZpb3JpIGVsZW1lbnRzLiBEb24ndCBhY2Nlc3Mgb3IgbWFuaXB1bGF0ZSBjb250cm9scywgcHJvcGVydGllcywgbW9kZWxzLCBvciBvdGhlciBpbnRlcm5hbCBvYmplY3RzIGNyZWF0ZWQgYnkgdGhlIFNBUCBGaW9yaSBlbGVtZW50cyBmcmFtZXdvcmsuXG4gKiBAcHVibGljXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAZmluYWxcbiAqIEBzaW5jZSAxLjc5LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLkV4dGVuc2lvbkFQSVwiKVxuY2xhc3MgT2JqZWN0UGFnZUV4dGVuc2lvbkFQSSBleHRlbmRzIEV4dGVuc2lvbkFQSSB7XG5cdC8qKlxuXHQgKiBJRCBvZiB0aGUgYWN0aXZlIGN1c3RvbSBNZXNzYWdlU3RyaXAgZm9yIHByb2dyYW1tYXRpYyByZW1vdmFsLlxuXHQgKi9cblx0cHJpdmF0ZSBjdXN0b21NZXNzYWdlU3RyaXBJZD86IHN0cmluZztcblxuXHQvKipcblx0ICogRmxhZyB0byBwcmV2ZW50IGNvbmN1cnJlbnQgbmF2aWdhdGVUb1N1YlNlY3Rpb24gY2FsbHMuXG5cdCAqIFNldCB0byB0cnVlIHdoZW4gbmF2aWdhdGlvbiBzdGFydHMsIHJlc2V0IGFmdGVyIG5hdmlnYXRpb24gY29tcGxldGVzIChpbmNsdWRpbmcgcG9sbGluZykuXG5cdCAqL1xuXHRwcml2YXRlIGlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbiA9IGZhbHNlO1xuXG5cdC8qKlxuXHQgKiBSZWZyZXNoZXMgZWl0aGVyIHRoZSB3aG9sZSBvYmplY3QgcGFnZSBvciBvbmx5IHBhcnRzIG9mIGl0LlxuXHQgKiBAcGFyYW0gW3ZQYXRoXSBQYXRoIG9yIGFycmF5IG9mIHBhdGhzIHJlZmVycmluZyB0byBlbnRpdGllcyBvciBwcm9wZXJ0aWVzIHRvIGJlIHJlZnJlc2hlZC5cblx0ICogSWYgb21pdHRlZCwgdGhlIHdob2xlIG9iamVjdCBwYWdlIGlzIHJlZnJlc2hlZC4gVGhlIHBhdGggXCJcIiByZWZyZXNoZXMgdGhlIGVudGl0eSBhc3NpZ25lZCB0byB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogd2l0aG91dCBuYXZpZ2F0aW9uLlxuXHQgKiBAcmV0dXJucyBSZXNvbHZlZCBvbmNlIHRoZSBkYXRhIGlzIHJlZnJlc2hlZCBvciByZWplY3RlZCBpZiB0aGUgcmVxdWVzdCBmYWlsZWRcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgcmVmcmVzaCh2UGF0aD86IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5fdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGlmICghb0JpbmRpbmdDb250ZXh0KSB7XG5cdFx0XHQvLyBub3RoaW5nIHRvIGJlIHJlZnJlc2hlZCAtIGRvIG5vdCBibG9jayB0aGUgYXBwIVxuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpLFxuXHRcdFx0b1NpZGVFZmZlY3RzU2VydmljZSA9IG9BcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCksXG5cdFx0XHRvTWV0YU1vZGVsID0gb0JpbmRpbmdDb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRvU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVGFyZ2V0VHlwZSA9IHtcblx0XHRcdFx0dGFyZ2V0UHJvcGVydGllczogW10sXG5cdFx0XHRcdHRhcmdldEVudGl0aWVzOiBbXVxuXHRcdFx0fTtcblxuXHRcdGlmICh2UGF0aCA9PT0gdW5kZWZpbmVkIHx8IHZQYXRoID09PSBudWxsKSB7XG5cdFx0XHQvLyB3ZSBqdXN0IGFkZCBhbiBlbXB0eSBwYXRoIHdoaWNoIHNob3VsZCByZWZyZXNoIHRoZSBwYWdlIHdpdGggYWxsIGRlcGVuZGVudCBiaW5kaW5nc1xuXHRcdFx0b1NpZGVFZmZlY3RzLnRhcmdldEVudGl0aWVzLnB1c2goe1xuXHRcdFx0XHQkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogXCJcIlxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnN0IGFsbFBhdGhzID0gQXJyYXkuaXNBcnJheSh2UGF0aCkgPyB2UGF0aCA6IFt2UGF0aF07XG5cdFx0XHRjb25zdCBvd25lckNvbXBvbmVudCA9IHRoaXMuX2NvbnRyb2xsZXIuZ2V0T3duZXJDb21wb25lbnQoKSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0Z2V0Q29udGV4dFBhdGg6ICgpID0+IHN0cmluZztcblx0XHRcdFx0Z2V0RW50aXR5U2V0OiAoKSA9PiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3QgY29udGV4dFBhdGggPSBvd25lckNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpIHx8IGAvJHtvd25lckNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKX1gO1xuXG5cdFx0XHRmb3IgKGNvbnN0IHBhdGggb2YgYWxsUGF0aHMpIHtcblx0XHRcdFx0aWYgKHBhdGggPT09IFwiXCIpIHtcblx0XHRcdFx0XHQvLyBhbiBlbXB0eSBwYXRoIHNoYWxsIHJlZnJlc2ggdGhlIGVudGl0eSB3aXRob3V0IGRlcGVuZGVuY2llcyB3aGljaCBtZWFucyAqIGZvciB0aGUgbW9kZWxcblx0XHRcdFx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0UHJvcGVydGllcy5wdXNoKFwiKlwiKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb25zdCBraW5kID0gb01ldGFNb2RlbC5nZXRPYmplY3QoYCR7Y29udGV4dFBhdGh9LyR7cGF0aH0vJGtpbmRgKTtcblxuXHRcdFx0XHRcdGlmIChraW5kID09PSBcIk5hdmlnYXRpb25Qcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdFx0XHRvU2lkZUVmZmVjdHMudGFyZ2V0RW50aXRpZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdCROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBwYXRoXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGtpbmQpIHtcblx0XHRcdFx0XHRcdG9TaWRlRWZmZWN0cy50YXJnZXRQcm9wZXJ0aWVzLnB1c2gocGF0aCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlamVjdChgJHtwYXRofSBpcyBub3QgYSB2YWxpZCBwYXRoIHRvIGJlIHJlZnJlc2hlZGApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1NpZGVFZmZlY3RzU2VydmljZS5yZXF1ZXN0U2lkZUVmZmVjdHMoWy4uLm9TaWRlRWZmZWN0cy50YXJnZXRFbnRpdGllcywgLi4ub1NpZGVFZmZlY3RzLnRhcmdldFByb3BlcnRpZXNdLCBvQmluZGluZ0NvbnRleHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGxpc3QgZW50cmllcyBjdXJyZW50bHkgc2VsZWN0ZWQgZm9yIHRoZSB0YWJsZS5cblx0ICogQHBhcmFtIHNUYWJsZUlkIFRoZSBJRCBpZGVudGlmeWluZyB0aGUgdGFibGUgdGhlIHNlbGVjdGVkIGNvbnRleHQgaXMgcmVxdWVzdGVkIGZvclxuXHQgKiBAcmV0dXJucyBBcnJheSBjb250YWluaW5nIHRoZSBzZWxlY3RlZCBjb250ZXh0c1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRnZXRTZWxlY3RlZENvbnRleHRzKHNUYWJsZUlkOiBzdHJpbmcpOiBPRGF0YVY0Q29udGV4dFtdIHtcblx0XHRsZXQgdGFibGUgPSB0aGlzLl92aWV3LmJ5SWQoc1RhYmxlSWQpO1xuXHRcdGlmICh0YWJsZT8uaXNBPFRhYmxlPihcInNhcC51aS5tZGMuVGFibGVcIikpIHtcblx0XHRcdHRhYmxlID0gdGFibGUuZ2V0UGFyZW50KCkgYXMgVGFibGVBUEk7XG5cdFx0fVxuXHRcdGlmICh0YWJsZT8uaXNBKFwic2FwLmZlLm1hY3Jvcy5UYWJsZVwiKSkge1xuXHRcdFx0cmV0dXJuICh0YWJsZSBhcyBUYWJsZUFQSSkuZ2V0U2VsZWN0ZWRDb250ZXh0cygpO1xuXHRcdH1cblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgb3IgaGlkZXMgdGhlIHNpZGUgY29udGVudCBvZiBhbiBvYmplY3QgcGFnZS5cblx0ICogQHBhcmFtIHNTdWJTZWN0aW9uS2V5IEtleSBvZiB0aGUgc2lkZSBjb250ZW50IGZyYWdtZW50IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0Lmpzb25cblx0ICogQHBhcmFtIFtiU2hvd10gT3B0aW9uYWwgQm9vbGVhbiBmbGFnIHRvIHNob3cgb3IgaGlkZSB0aGUgc2lkZSBjb250ZW50XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNob3dTaWRlQ29udGVudChzU3ViU2VjdGlvbktleTogc3RyaW5nLCBiU2hvdz86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBzQmxvY2tJRCA9IGdldFNpZGVDb250ZW50TGF5b3V0SUQoc1N1YlNlY3Rpb25LZXkpLFxuXHRcdFx0b0Jsb2NrID0gdGhpcy5fdmlldy5ieUlkKHNCbG9ja0lEKSBhcyBEeW5hbWljU2lkZUNvbnRlbnQ7XG5cblx0XHRpZiAoIW9CbG9jaykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnN0IHNDdXJyZW50QnJlYWtwb2ludCA9IG9CbG9jay5nZXRDdXJyZW50QnJlYWtwb2ludCgpO1xuXHRcdGNvbnN0IGJCbG9ja1N0YXRlID0gYlNob3cgPT09IHVuZGVmaW5lZCA/ICFvQmxvY2suZ2V0U2hvd1NpZGVDb250ZW50KCkgOiBiU2hvdztcblxuXHRcdC8vIE9uIHNtYWxsIHNjcmVlbnMgKFMgYnJlYWtwb2ludCksIHNpZGUgY29udGVudCBzaG91bGQgcmVwbGFjZSBtYWluIGNvbnRlbnRcblx0XHRpZiAoc0N1cnJlbnRCcmVha3BvaW50ID09PSBcIlNcIikge1xuXHRcdFx0aWYgKGJCbG9ja1N0YXRlKSB7XG5cdFx0XHRcdC8vIFNob3cgc2lkZSBjb250ZW50LCBoaWRlIG1haW4gY29udGVudFxuXHRcdFx0XHRvQmxvY2suc2V0U2hvd1NpZGVDb250ZW50KHRydWUsIGZhbHNlKTtcblx0XHRcdFx0b0Jsb2NrLnNldFNob3dNYWluQ29udGVudChmYWxzZSwgZmFsc2UpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSGlkZSBzaWRlIGNvbnRlbnQsIHNob3cgbWFpbiBjb250ZW50XG5cdFx0XHRcdG9CbG9jay5zZXRTaG93U2lkZUNvbnRlbnQoZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0b0Jsb2NrLnNldFNob3dNYWluQ29udGVudCh0cnVlLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE9uIGxhcmdlciBzY3JlZW5zLCBzaG93IHNpZGUgY29udGVudCBhbG9uZ3NpZGUgbWFpbiBjb250ZW50XG5cdFx0XHQvLyBBbHdheXMga2VlcCBtYWluIGNvbnRlbnQgdmlzaWJsZSBvbiBsYXJnZSBzY3JlZW5zXG5cdFx0XHRvQmxvY2suc2V0U2hvd01haW5Db250ZW50KHRydWUsIGZhbHNlKTtcblx0XHRcdG9CbG9jay5zZXRTaG93U2lkZUNvbnRlbnQoYkJsb2NrU3RhdGUsIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYm91bmQgY29udGV4dCBvZiB0aGUgY3VycmVudCBvYmplY3QgcGFnZS5cblx0ICogQHJldHVybnMgQ29udGV4dCBib3VuZCB0byB0aGUgb2JqZWN0IHBhZ2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0QmluZGluZ0NvbnRleHQoKTogQ29udGV4dCB8IG51bGwgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLl92aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdH1cblxuXHQvKipcblx0ICogQnVpbGQgdGhlIGludGVybmFsIGNvbnRleHQgcGF0aCBvZiB0aGUgTWVzc2FnZVN0cmlwIGNvbnRyb2wuXG5cdCAqIEByZXR1cm5zIFRoZSBpbnRlcm5hbCBiaW5kaW5nIGNvbnRleHQgcGF0aCBmb3IgdGhlIG1lc3NhZ2VTdHJpcFxuXHQgKi9cblx0X2dldE1lc3NhZ2VTdHJpcEJpbmRpbmdDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGludGVybmFsTW9kZWxDb250ZXh0UGF0aCA9IHRoaXMuX3ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKT8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IHZpZXdDb250ZXh0UGF0aCA9IHRoaXMuX3ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpO1xuXHRcdHJldHVybiBpbnRlcm5hbE1vZGVsQ29udGV4dFBhdGggJiYgdmlld0NvbnRleHRQYXRoXG5cdFx0XHQ/IGAke2ludGVybmFsTW9kZWxDb250ZXh0UGF0aH0vTWVzc2FnZVN0cmlwLyR7dmlld0NvbnRleHRQYXRoLnJlcGxhY2UoL1xcLy9nLCBcIi1cIil9YFxuXHRcdFx0OiBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIHRoZSBtZXNzYWdlIHN0cmlwIGJldHdlZW4gdGhlIHRpdGxlIGFuZCB0aGUgaGVhZGVyIG9mIHRoZSBPYmplY3RQYWdlLiBJZiBvbmx5IG9uZSBtZXNzYWdlIGlzIHByb3ZpZGVkLCBpdCBpcyBkaXNwbGF5ZWQgZGlyZWN0bHkgaW4gdGhlIG1lc3NhZ2Ugc3RyaXAuIElmIG11bHRpcGxlIG1lc3NhZ2VzIGFyZSBwcm92aWRlZCwgdGhleSBhcmUgcHJpb3JpdGl6ZWQgYnkgdGhlIG9yZGVyOiBFcnJvciwgV2FybmluZywgYW5kIEluZm9ybWF0aW9uIGFuZCBhIGNvcnJlc3BvbmRpbmcgZ2VuZXJpYyB0ZXh0IGlzIGRpc3BsYXllZDpcblx0ICogLSBFcnJvcjogXCJUaGUgb2JqZWN0IGNvbnRhaW5zIGVycm9ycy5cIlxuXHQgKiAtIFdhcm5pbmc6IFwiVGhlIG9iamVjdCBjb250YWlucyB3YXJuaW5ncy5cIlxuXHQgKiAtIEluZm9ybWF0aW9uOiBcIlRoZSBvYmplY3QgY29udGFpbnMgbWVzc2FnZXMuXCJcblx0ICogSWYgYSBiYWNrLWVuZCBtZXNzYWdlIGlzIHJlY2VpdmVkIHdpdGggYSB0YXJnZXQgcG9pbnRpbmcgdG8gdGhlIE9iamVjdCBQYWdlLCBpdCBpcyBkaXNwbGF5ZWQgaW4gdGhlIG1lc3NhZ2Ugc3RyaXAsIG92ZXJyaWRpbmcgYW55IGV4aXN0aW5nIG1lc3NhZ2Ugb3IgbWVzc2FnZSBzdHJpcC4gSWYgbXVsdGlwbGUgYmFjay1lbmQgbWVzc2FnZXMgYXJlIHJlY2VpdmVkLCB0aGUgbWVzc2FnZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IGlzIGRpc3BsYXllZCB3aXRoIGEgZ2VuZXJpYyB0ZXh0IGFzIGRlc2NyaWJlZCBhYm92ZS5cblx0ICogQHBhcmFtICBtZXNzYWdlc09yU3RyaXAgVGhlIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIG9yIGEgTWVzc2FnZVN0cmlwIGNvbnRyb2xcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2hvd01lc3NhZ2VzKG1lc3NhZ2VzT3JTdHJpcDogTWVzc2FnZVtdIHwgTWVzc2FnZVN0cmlwKTogdm9pZCB7XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobWVzc2FnZXNPclN0cmlwKSkge1xuXHRcdFx0dGhpcy5fc2hvd01lc3NhZ2VzKG1lc3NhZ2VzT3JTdHJpcCk7XG5cdFx0fSBlbHNlIGlmIChtZXNzYWdlc09yU3RyaXAuaXNBKFwic2FwLm0uTWVzc2FnZVN0cmlwXCIpKSB7XG5cdFx0XHR0aGlzLnNob3dDdXN0b21NZXNzYWdlU3RyaXAobWVzc2FnZXNPclN0cmlwKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2hvd3MgYSBjdXN0b20gTWVzc2FnZVN0cmlwIGNvbnRyb2wgcHJvdmlkZWQgYnkgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBFbnN1cmVzIG11dHVhbCBleGNsdXNpdml0eSB3aXRoIHRoZSBNZXNzYWdlU3RyaXAgcmVuZGVyZWQgYnkgdGhlIG9iamVjdCBwYWdlIHZpZXcuXG5cdCAqIEBwYXJhbSBtZXNzYWdlU3RyaXAgTWVzc2FnZVN0cmlwIGNvbnRyb2xcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgc2hvd0N1c3RvbU1lc3NhZ2VTdHJpcChtZXNzYWdlU3RyaXA6IE1lc3NhZ2VTdHJpcCk6IHZvaWQge1xuXHRcdGNvbnN0IG1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5fdmlld1xuXHRcdFx0LmdldE1vZGVsKFwiaW50ZXJuYWxcIilcblx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdC5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRpZiAoIW1lc3NhZ2VTdHJpcEludGVybmFsTW9kZWxDb250ZXh0KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dGhpcy5yZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAoKTsgLy8gUmVtb3ZlIGFueSBleGlzdGluZyBjdXN0b20gbWVzc2FnZSBzdHJpcCBiZWZvcmUgYWRkaW5nIG5ldyBvbmVcblxuXHRcdC8vIEhpZGUgZnJhbWV3b3JrIGdlbmVyYXRlZCBtZXNzYWdlIHN0cmlwIHRvIGVuc3VyZSBtdXR1YWwgZXhjbHVzaXZpdHlcblx0XHRtZXNzYWdlU3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIk9QQmFja2VuZE1lc3NhZ2VWaXNpYmxlXCIsIGZhbHNlKTtcblx0XHRtZXNzYWdlU3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcIk9QQ3VzdG9tTWVzc2FnZVZpc2libGVcIiwgZmFsc2UpO1xuXG5cdFx0dGhpcy5jdXN0b21NZXNzYWdlU3RyaXBJZCA9IG1lc3NhZ2VTdHJpcC5nZXRJZCgpIHx8IHVpZCgpOyAvLyBTdG9yZSByZWZlcmVuY2UgZm9yIHByb2dyYW1tYXRpYyByZW1vdmFsXG5cblx0XHRtZXNzYWdlU3RyaXAuYWRkU3R5bGVDbGFzcyhcInNhcFVpU21hbGxNYXJnaW5Ub3BcIik7XG5cdFx0dGhpcy5hZGRDdXN0b21NZXNzYWdlU3RyaXBUb1BhZ2UobWVzc2FnZVN0cmlwLCBtZXNzYWdlU3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIGN1c3RvbSBNZXNzYWdlU3RyaXAgdG8gdGhlIHBhZ2UgbGF5b3V0IGluIHRoZSBoZWFkZXIgY29udGFpbmVyIHN1Y2ggYXMgaW4gZXhwYW5kZWQgYW5kIHNuYXBwZWQgY29udGVudC5cblx0ICogQHBhcmFtIG1lc3NhZ2VTdHJpcCBUaGUgTWVzc2FnZVN0cmlwIGNvbnRyb2wgdG8gYWRkXG5cdCAqIEBwYXJhbSBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dFxuXHQgKi9cblx0cHJpdmF0ZSBhZGRDdXN0b21NZXNzYWdlU3RyaXBUb1BhZ2UobWVzc2FnZVN0cmlwOiBNZXNzYWdlU3RyaXAsIG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0OiBDb250ZXh0KTogdm9pZCB7XG5cdFx0Y29uc3QgaGVhZGVyQ29udGFpbmVyID0gdGhpcy5fdmlldy5ieUlkKFwiZmU6Ok9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGVcIik7XG5cdFx0aWYgKGhlYWRlckNvbnRhaW5lcikge1xuXHRcdFx0Y29uc3QgaW5zZXJ0SW50b0FnZ3JlZ2F0aW9uID0gKGFnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nLCBjb250cm9sVG9JbnNlcnQ6IE1lc3NhZ2VTdHJpcCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRjb25zdCBhZ2dyZWdhdGlvbkNvbnRlbnQgPSBoZWFkZXJDb250YWluZXIuZ2V0QWdncmVnYXRpb24oYWdncmVnYXRpb25OYW1lKTtcblx0XHRcdFx0aWYgKGFnZ3JlZ2F0aW9uQ29udGVudCkge1xuXHRcdFx0XHRcdGNvbnN0IGNvbnRlbnRBcnJheSA9IEFycmF5LmlzQXJyYXkoYWdncmVnYXRpb25Db250ZW50KSA/IGFnZ3JlZ2F0aW9uQ29udGVudCA6IFthZ2dyZWdhdGlvbkNvbnRlbnRdO1xuXHRcdFx0XHRcdGhlYWRlckNvbnRhaW5lci5pbnNlcnRBZ2dyZWdhdGlvbihhZ2dyZWdhdGlvbk5hbWUsIGNvbnRyb2xUb0luc2VydCwgY29udGVudEFycmF5Lmxlbmd0aCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRpbnNlcnRJbnRvQWdncmVnYXRpb24oXCJleHBhbmRlZENvbnRlbnRcIiwgbWVzc2FnZVN0cmlwKTtcblx0XHRcdGluc2VydEludG9BZ2dyZWdhdGlvbihcInNuYXBwZWRDb250ZW50XCIsIG1lc3NhZ2VTdHJpcC5jbG9uZSgpKTtcblxuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoXCJPUEN1c3RvbU1lc3NhZ2VTdHJpcFZpc2libGVcIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIGFjdGl2ZSBjdXN0b20gTWVzc2FnZVN0cmlwIHByb2dyYW1tYXRpY2FsbHkuXG5cdCAqL1xuXHRwcml2YXRlIHJlbW92ZUN1c3RvbU1lc3NhZ2VTdHJpcCgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuY3VzdG9tTWVzc2FnZVN0cmlwSWQpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGaW5kIGFuZCByZW1vdmUgdGhlIGN1c3RvbSBtZXNzYWdlIHN0cmlwIGZyb20gaGVhZGVyIGNvbnRhaW5lclxuXHRcdGNvbnN0IGhlYWRlckNvbnRhaW5lciA9IHRoaXMuX3ZpZXcuYnlJZChcImZlOjpPYmplY3RQYWdlRHluYW1pY0hlYWRlclRpdGxlXCIpO1xuXHRcdGlmIChoZWFkZXJDb250YWluZXIpIHtcblx0XHRcdGNvbnN0IHJlbW92ZUZyb21BZ2dyZWdhdGlvbiA9IChhZ2dyZWdhdGlvbk5hbWU6IHN0cmluZywgaWRNYXRjaGVyOiAoY29udHJvbElkOiBzdHJpbmcpID0+IGJvb2xlYW4pOiB2b2lkID0+IHtcblx0XHRcdFx0Y29uc3QgYWdncmVnYXRpb25Db250ZW50ID0gaGVhZGVyQ29udGFpbmVyLmdldEFnZ3JlZ2F0aW9uKGFnZ3JlZ2F0aW9uTmFtZSkgYXMgQ29udHJvbFtdO1xuXHRcdFx0XHRpZiAoYWdncmVnYXRpb25Db250ZW50KSB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbFRvUmVtb3ZlID0gYWdncmVnYXRpb25Db250ZW50LmZpbmQoKGNvbnRyb2wpID0+IGlkTWF0Y2hlcihjb250cm9sLmdldElkKCkpKTtcblx0XHRcdFx0XHRpZiAoY29udHJvbFRvUmVtb3ZlKSB7XG5cdFx0XHRcdFx0XHRoZWFkZXJDb250YWluZXIucmVtb3ZlQWdncmVnYXRpb24oYWdncmVnYXRpb25OYW1lLCBjb250cm9sVG9SZW1vdmUpO1xuXHRcdFx0XHRcdFx0Y29udHJvbFRvUmVtb3ZlLmRlc3Ryb3koKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRyZW1vdmVGcm9tQWdncmVnYXRpb24oXCJleHBhbmRlZENvbnRlbnRcIiwgKGNvbnRyb2xJZCkgPT4gY29udHJvbElkID09PSB0aGlzLmN1c3RvbU1lc3NhZ2VTdHJpcElkKTtcblx0XHRcdHJlbW92ZUZyb21BZ2dyZWdhdGlvbihcInNuYXBwZWRDb250ZW50XCIsIChjb250cm9sSWQpID0+IGNvbnRyb2xJZC5pbmNsdWRlcyh0aGlzLmN1c3RvbU1lc3NhZ2VTdHJpcElkICsgXCItX19jbG9uZVwiKSk7XG5cdFx0fVxuXG5cdFx0dGhpcy5jdXN0b21NZXNzYWdlU3RyaXBJZCA9IHVuZGVmaW5lZDtcblxuXHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5fdmlld1xuXHRcdFx0LmdldE1vZGVsKFwiaW50ZXJuYWxcIilcblx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdC5nZXRCb3VuZENvbnRleHQoKTtcblx0XHRpZiAobWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQpIHtcblx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KFwiT1BDdXN0b21NZXNzYWdlU3RyaXBWaXNpYmxlXCIsIGZhbHNlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIE1lc3NhZ2VJdGVtIGZyb20gYSBNZXNzYWdlIGluc3RhbmNlLlxuXHQgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSBvYmplY3QgY29udGFpbmluZyB0ZXh0LCB0eXBlLCBkZXNjcmlwdGlvbiwgZXRjLlxuXHQgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBNZXNzYWdlSXRlbSBpbnN0YW5jZSBmb3IgdGhlIE1lc3NhZ2VQb3BvdmVyLlxuXHQgKi9cblx0cHJpdmF0ZSBjcmVhdGVNZXNzYWdlSXRlbShtZXNzYWdlOiBNZXNzYWdlKTogTWVzc2FnZUl0ZW0ge1xuXHRcdGNvbnN0IHNEZXNjcmlwdGlvblVybDogc3RyaW5nIHwgdW5kZWZpbmVkID0gbWVzc2FnZS5nZXREZXNjcmlwdGlvblVybD8uKCk7XG5cblx0XHRyZXR1cm4gbmV3IE1lc3NhZ2VJdGVtKHtcblx0XHRcdHRpdGxlOiBtZXNzYWdlLmdldE1lc3NhZ2UoKSxcblx0XHRcdGRlc2NyaXB0aW9uOiBtZXNzYWdlLmdldERlc2NyaXB0aW9uKCksXG5cdFx0XHR0eXBlOiBtZXNzYWdlLmdldFR5cGUoKSxcblx0XHRcdGxvbmd0ZXh0VXJsOiBzRGVzY3JpcHRpb25VcmwsXG5cdFx0XHRzdWJ0aXRsZTogbWVzc2FnZS5nZXRBZGRpdGlvbmFsVGV4dD8uKCksXG5cdFx0XHRncm91cE5hbWU6IFwiVF9NRVNTQUdFX0JVVFRPTl9TQVBGRV9NRVNTQUdFX0dST1VQX0dFTkVSQUxcIixcblx0XHRcdGFjdGl2ZVRpdGxlOiAhIW1lc3NhZ2UuZ2V0Q29udHJvbElkcz8uKCkubGVuZ3RoXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIE1lc3NhZ2VQb3BvdmVyIGZvciBhIHNldCBvZiBNZXNzYWdlSXRlbXMgYW5kIGF0dGFjaGVzXG5cdCAqIGFuIGFzeW5jIGRlc2NyaXB0aW9uIGhhbmRsZXIgdG8gbG9hZCBsb25nIHRleHQgd2hlbiBuZWVkZWQuXG5cdCAqIEBwYXJhbSBtZXNzYWdlSXRlbXMgQXJyYXkgb2YgTWVzc2FnZUl0ZW1zIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgcG9wb3Zlci5cblx0ICogQHJldHVybnMgVGhlIGNyZWF0ZWQgTWVzc2FnZVBvcG92ZXIgaW5zdGFuY2UuXG5cdCAqL1xuXHRjcmVhdGVNZXNzYWdlUG9wb3ZlcihtZXNzYWdlSXRlbXM6IE1lc3NhZ2VJdGVtKTogTWVzc2FnZVBvcG92ZXIge1xuXHRcdGNvbnN0IHBvcG92ZXIgPSBuZXcgTWVzc2FnZVBvcG92ZXIoe1xuXHRcdFx0aXRlbXM6IG1lc3NhZ2VJdGVtc1xuXHRcdH0pIGFzIE1lc3NhZ2VQb3BvdmVyO1xuXHRcdHJldHVybiBwb3BvdmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIGEgTWVzc2FnZVBvcG92ZXIgZm9yIHRoZSBwcm92aWRlZCBtZXNzYWdlcywgYW5jaG9yZWQgdG8gdGhlXG5cdCAqIHNvdXJjZSBjb250cm9sIG9mIHRoZSBVSTUgZXZlbnQuXG5cdCAqIEBwYXJhbSBldmVudCBUaGUgVUk1IGV2ZW50IGZyb20gdGhlIGNvbnRyb2wgdGhhdCB0cmlnZ2VycyB0aGUgcG9wb3Zlci5cblx0ICogQHBhcmFtIG1lc3NhZ2UgQXJyYXkgb2YgTWVzc2FnZSBvYmplY3RzIHRvIGJlIHNob3duIGluIHRoZSBwb3BvdmVyLlxuXHQgKiBAcmV0dXJucyBUaGUgTWVzc2FnZVBvcG92ZXIgdGhhdCB3YXMgb3BlbmVkLlxuXHQgKi9cblx0c2hvd01lc3NhZ2VQb3BvdmVyKGV2ZW50OiBVSTVFdmVudCwgbWVzc2FnZTogTWVzc2FnZVtdKTogTWVzc2FnZVBvcG92ZXIge1xuXHRcdGNvbnN0IG1lc3NhZ2VJdGVtID0gdGhpcy5jcmVhdGVNZXNzYWdlSXRlbShtZXNzYWdlWzBdKTtcblx0XHRjb25zdCBwb3BvdmVyID0gdGhpcy5jcmVhdGVNZXNzYWdlUG9wb3ZlcihtZXNzYWdlSXRlbSk7XG5cdFx0Y29uc3Qgc291cmNlQ29udHJvbCA9IGV2ZW50LmdldFNvdXJjZT8uKCkgYXMgQ29udHJvbDtcblx0XHRzb3VyY2VDb250cm9sPy5hZGREZXBlbmRlbnQocG9wb3Zlcik7XG5cdFx0cG9wb3Zlci5vcGVuQnkoc291cmNlQ29udHJvbCk7XG5cdFx0cmV0dXJuIHBvcG92ZXI7XG5cdH1cblxuXHQvKipcblx0ICogRGlzcGxheXMgdGhlIG1lc3NhZ2Ugc3RyaXAgYmV0d2VlbiB0aGUgdGl0bGUgYW5kIHRoZSBoZWFkZXIgb2YgdGhlIE9iamVjdFBhZ2UuXG5cdCAqIEBwYXJhbSBtZXNzYWdlcyBUaGUgbWVzc2FnZSB0byBiZSBkaXNwbGF5ZWRcblx0ICogQHBhcmFtIG9yaWdpbiBUaGUgb3JpZ2luIG9mIHRoZSBtZXNzYWdlLiBJdCBtYXkgY29tZSBmcm9tIGEgYmFjay1lbmQgbWVzc2FnZSBvciBhIGN1c3RvbSBtZXNzYWdlXG5cdCAqL1xuXHRfc2hvd01lc3NhZ2VzKG1lc3NhZ2VzOiBNZXNzYWdlW10sIG9yaWdpbjogXCJCYWNrZW5kXCIgfCBcIkN1c3RvbVwiID0gXCJDdXN0b21cIik6IHZvaWQge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAobWVzc2FnZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0XHQvLyBPbmx5IGlmIHRoZXJlIGFyZSBtZXNzYWdlcyB0byBzaG93LCB3ZSByZW1vdmUgY3VzdG9tIG1lc3NhZ2Ugc3RyaXAuXG5cdFx0XHRcdC8vIFRoaXMgd2F5IHdlIGVuc3VyZSB0aGF0IHdlIGRvbid0IGludGVyZmVyZSB3aXRoIGN1c3RvbSBtZXNzYWdlIHN0cmlwJ3MgbGlmZWN5bGUgdW50aWwgdGhlcmUgYXJlIG5ldyBtZXNzYWdlcyB0byBzaG93IGluIHRoZSBzdGFuZGFyZCBtZXNzYWdlIHN0cmlwLlxuXHRcdFx0XHR0aGlzLnJlbW92ZUN1c3RvbU1lc3NhZ2VTdHJpcCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB2aWV3ID0gdGhpcy5fdmlldztcblx0XHRcdGNvbnN0IGludGVybmFsTW9kZWwgPSB2aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIik7XG5cdFx0XHRjb25zdCBtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCA9IGludGVybmFsTW9kZWwuYmluZENvbnRleHQodGhpcy5fZ2V0TWVzc2FnZVN0cmlwQmluZGluZ0NvbnRleHRQYXRoKCkpLmdldEJvdW5kQ29udGV4dCgpO1xuXHRcdFx0aWYgKCFtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dCkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHZpZXcpO1xuXHRcdFx0bGV0IG1lc3NhZ2U6IE1lc3NhZ2UgfCBudWxsID0gbWVzc2FnZXNbMF0gfHwgbnVsbDtcblx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBPUCR7b3JpZ2lufU1lc3NhZ2VWaXNpYmxlYCwgISFtZXNzYWdlKTtcblx0XHRcdHN3aXRjaCAobWVzc2FnZXMubGVuZ3RoKSB7XG5cdFx0XHRcdGNhc2UgMDpcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdG1lc3NhZ2UgPSBtZXNzYWdlc1swXTtcblx0XHRcdFx0XHRjb25zdCBoYXNEZXNjcmlwdGlvblVybCA9ICEhbWVzc2FnZT8uZ2V0RGVzY3JpcHRpb25VcmwoKTtcblx0XHRcdFx0XHRjb25zdCBpc0VkaXRNb2RlID0gQ29tbW9uVXRpbHMuZ2V0SXNFZGl0YWJsZSh2aWV3KTtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2JqZWN0UGFnZSA9IHZpZXcuZ2V0Q29udGVudCgpPy5bMF0gYXMgT2JqZWN0UGFnZUxheW91dDtcblx0XHRcdFx0XHRcdGNvbnN0IGhlYWRlclRpdGxlID0gb2JqZWN0UGFnZS5nZXRIZWFkZXJUaXRsZSgpIGFzIE9iamVjdFBhZ2VEeW5hbWljSGVhZGVyVGl0bGU7XG5cblx0XHRcdFx0XHRcdC8vIENvbGxlY3QgYWxsIE1lc3NhZ2VTdHJpcHMgKGV4Y2x1ZGluZyBDb2xsYWJvcmF0aW9uIFN0cmlwcylcblx0XHRcdFx0XHRcdGNvbnN0IGFsbFN0cmlwcyA9IFtcblx0XHRcdFx0XHRcdFx0Li4uKGhlYWRlclRpdGxlLmdldFNuYXBwZWRDb250ZW50Py4oKSB8fCBbXSksXG5cdFx0XHRcdFx0XHRcdC4uLihoZWFkZXJUaXRsZS5nZXRFeHBhbmRlZENvbnRlbnQ/LigpIHx8IFtdKVxuXHRcdFx0XHRcdFx0XS5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdChpdGVtKTogaXRlbSBpcyBNZXNzYWdlU3RyaXAgPT4gaXRlbSBpbnN0YW5jZW9mIE1lc3NhZ2VTdHJpcCAmJiAhaXRlbS5nZXRJZCgpPy5pbmNsdWRlcyhcIkNvbGxhYm9yYXRpb25TdHJpcFwiKVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gT25seSBhZGQgbGlua3Mgd2hlbiBtZXNzYWdlIGlzIGZyb20gQmFja2VuZCwgaW4gRGlzcGxheSBtb2RlLCBhbmQgaGFzIGEgZGVzY3JpcHRpb24gVVJMXG5cdFx0XHRcdFx0XHRpZiAob3JpZ2luID09PSBcIkJhY2tlbmRcIiAmJiAhaXNFZGl0TW9kZSAmJiBoYXNEZXNjcmlwdGlvblVybCkge1xuXHRcdFx0XHRcdFx0XHRhbGxTdHJpcHMuZm9yRWFjaCgoc3RyaXApID0+IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBBbHdheXMgZGVzdHJveSB0aGUgZXhpc3RpbmcgbGluayBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHN0cmlwLmdldExpbmsoKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0c3RyaXAuZGVzdHJveUxpbmsoKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgbGluayA9IG5ldyBMaW5rKHtcblx0XHRcdFx0XHRcdFx0XHRcdHRleHQ6IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfTUVTU0FHRV9IQU5ETElOR19TQVBGRV9FUlJPUl9NRVNTQUdFX1NUUklQX0xJTktfVEVYVFwiKSxcblx0XHRcdFx0XHRcdFx0XHRcdHByZXNzOiAoZXZlbnQ6IFVJNUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc2hvd01lc3NhZ2VQb3BvdmVyKGV2ZW50LCBbbWVzc2FnZSFdKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRzdHJpcC5zZXRMaW5rKGxpbmspO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIFJlbW92ZSBsaW5rcyB3aGVuIG5vdCBhcHBsaWNhYmxlXG5cdFx0XHRcdFx0XHRcdGFsbFN0cmlwcy5mb3JFYWNoKChzdHJpcCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzdHJpcC5nZXRMaW5rKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHN0cmlwLmRlc3Ryb3lMaW5rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdFx0XHRcdExvZy53YXJuaW5nKFwiVW5hYmxlIHRvIGF0dGFjaCBsaW5rIHRvIE9iamVjdFBhZ2UgTWVzc2FnZVN0cmlwXCIsIGVyciBhcyBFcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNvbnN0IG1lc3NhZ2VTdGF0czogeyBba2V5OiBzdHJpbmddOiB7IGlkOiBudW1iZXI7IGNvdW50OiBudW1iZXIgfSB9ID0ge1xuXHRcdFx0XHRcdFx0RXJyb3I6IHsgaWQ6IDIsIGNvdW50OiAwIH0sXG5cdFx0XHRcdFx0XHRXYXJuaW5nOiB7IGlkOiAxLCBjb3VudDogMCB9LFxuXHRcdFx0XHRcdFx0SW5mb3JtYXRpb246IHsgaWQ6IDAsIGNvdW50OiAwIH0sXG5cdFx0XHRcdFx0XHRTdWNjZXNzOiB7IGlkOiAwLCBjb3VudDogMCB9LFxuXHRcdFx0XHRcdFx0Tm9uZTogeyBpZDogMCwgY291bnQ6IDAgfVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2VzLnJlZHVjZShcblx0XHRcdFx0XHRcdChhY2MsIGN1cnJlbnRWYWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBjdXJyZW50VHlwZSA9IGN1cnJlbnRWYWx1ZS5nZXRUeXBlKCk7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRTdGF0cyA9IG1lc3NhZ2VTdGF0c1tjdXJyZW50VHlwZV0gPz8gbWVzc2FnZVN0YXRzLkluZm9ybWF0aW9uO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBhY2NTdGF0cyA9IG1lc3NhZ2VTdGF0c1thY2MuZ2V0VHlwZSgpXSA/PyBtZXNzYWdlU3RhdHMuSW5mb3JtYXRpb247XG5cdFx0XHRcdFx0XHRcdGFjYy5zZXRUeXBlKGN1cnJlbnRTdGF0cy5pZCA+IGFjY1N0YXRzLmlkID8gY3VycmVudFR5cGUgOiBhY2MuZ2V0VHlwZSgpKTtcblx0XHRcdFx0XHRcdFx0Y3VycmVudFN0YXRzLmNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhY2M7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0bmV3IE1lc3NhZ2UoeyB0eXBlOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvbiB9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0aWYgKG9yaWdpbiA9PT0gXCJCYWNrZW5kXCIgJiYgIUNvbW1vblV0aWxzLmdldElzRWRpdGFibGUodmlldykpIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0LnNldFByb3BlcnR5KGBPUCR7b3JpZ2lufU1lc3NhZ2VWaXNpYmxlYCwgZmFsc2UpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1Ake29yaWdpbn1NZXNzYWdlVmlzaWJsZWAsICEhbWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKG1lc3NhZ2VTdGF0cy5FcnJvci5jb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdG1lc3NhZ2Uuc2V0TWVzc2FnZShyZXNvdXJjZU1vZGVsLmdldFRleHQoXCJPQkpFQ1RQQUdFU1RBVEVfRVJST1JcIikpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAobWVzc2FnZVN0YXRzLldhcm5pbmcuY291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlLnNldE1lc3NhZ2UocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiT0JKRUNUUEFHRVNUQVRFX1dBUk5JTkdcIikpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtZXNzYWdlLnNldE1lc3NhZ2UocmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiT0JKRUNUUEFHRVNUQVRFX0lORk9STUFUSU9OXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZXNzYWdlc3RyaXBJbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShgT1Ake29yaWdpbn1NZXNzYWdlVGV4dGAsIG1lc3NhZ2UgPyBtZXNzYWdlLmdldE1lc3NhZ2UoKSA6IG51bGwpO1xuXHRcdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QJHtvcmlnaW59TWVzc2FnZVR5cGVgLCBtZXNzYWdlID8gbWVzc2FnZS5nZXRUeXBlKCkgOiBudWxsKTtcblx0XHRcdGlmIChtZXNzYWdlKSB7XG5cdFx0XHRcdEludmlzaWJsZU1lc3NhZ2UuZ2V0SW5zdGFuY2UoKS5hbm5vdW5jZShtZXNzYWdlLmdldE1lc3NhZ2UoKSwgSW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdExvZy5lcnJvcihcIkNhbm5vdCBkaXNwbGF5IE9iamVjdFBhZ2UgbWVzc2FnZVwiKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGlkZXMgdGhlIG1lc3NhZ2Ugc3RyaXAgYmVsb3cgdGhlIGFuY2hvciBiYXIuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGhpZGVNZXNzYWdlKCk6IHZvaWQge1xuXHRcdGNvbnN0IG1lc3NhZ2VzdHJpcEludGVybmFsTW9kZWxDb250ZXh0ID0gdGhpcy5fdmlld1xuXHRcdFx0LmdldE1vZGVsKFwiaW50ZXJuYWxcIilcblx0XHRcdC5iaW5kQ29udGV4dCh0aGlzLl9nZXRNZXNzYWdlU3RyaXBCaW5kaW5nQ29udGV4dFBhdGgoKSlcblx0XHRcdC5nZXRCb3VuZENvbnRleHQoKSE7XG5cdFx0bWVzc2FnZXN0cmlwSW50ZXJuYWxNb2RlbENvbnRleHQuc2V0UHJvcGVydHkoYE9QQ3VzdG9tTWVzc2FnZVZpc2libGVgLCBmYWxzZSk7XG5cdFx0dGhpcy5yZW1vdmVDdXN0b21NZXNzYWdlU3RyaXAoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUgcmVjb21tZW5kYXRpb24gZGF0YSBkZXRhaWxzLCB0cmFuc2Zvcm0gaXQsIGFuZCB1cGRhdGUgdGhlIGludGVybmFsIG1vZGVsLlxuXHQgKiBAcGFyYW0gZGF0YSBSZWNvbW1lbmRhdGlvbiBkYXRhIGZvciB0aGUgYXBwXG5cdCAqL1xuXHRzZXRSZWNvbW1lbmRhdGlvbnMoZGF0YTogSW5Db21wbGV0ZW5lc3NJbmZvVHlwZSk6IHZvaWQge1xuXHRcdHJlY29tbWVuZGF0aW9uSGVscGVyLnRyYW5zZm9ybVJlY29tbWVuZGF0aW9uc0ZvckludGVybmFsU3RvcmFnZShkYXRhKTtcblx0XHR0aGlzLl92aWV3LmdldE1vZGVsKFwiaW50ZXJuYWxcIikuc2V0UHJvcGVydHkoXCIvcmVjb21tZW5kYXRpb25zRGF0YVwiLCBkYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIGEgY29udHJvbCB0byBiZSB0aGUgdGl0bGUgb3duZXIgb2YgaXRzIHNlY3Rpb24vc3Vic2VjdGlvbi4gQXMgdGhlIHRpdGxlIG93bmVycyBvZiBzdGFuZGFyZCBzdWJzZWN0aW9ucyBhcmUgZGV0ZXJtaW5lZCBhdXRvbWF0aWNhbGx5LCBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgY3VzdG9tIHNlY3Rpb24vc3Vic2VjdGlvbi5cblx0ICogVGhlIHRpdGxlIG93bmVyIGNhbiBiZSBlaXRoZXIgb25lIG9mIHRoZSBzdGFuZGFyZCBidWlsZGluZyBibG9ja3MgKEZvcm0sIENoYXJ0LCBUYWJsZSksIG9yIHJldXNlIGNvbXBvbmVudHMsIG9yIHNhcC5tLlRpdGxlLlxuXHQgKiBUaGUgZnJhbWV3b3JrIGFkYXB0cyB0aGUgdmFsdWUgb2YgdGhlc2UgcHJvcGVydGllcyB0byBiZSBhbGlnbmVkIHdpdGggdGhlIHRpdGxlIHRoYXQgaXMgc2hvd24gaW4gdGhlIGFuY2hvciBiYXIgKG9yIGljb24gdGFiIGJhcikgZm9yIHRoZSBzZWN0aW9uLiBNb3Jlb3ZlciwgdGhlIHRpdGxlIG9mIHRoZSBzdWJzZWN0aW9uIChhbmQgaWYgYXBwbGljYWJsZSBhbHNvIG9mIHRoZSBzZWN0aW9uKSBpcyBoaWRkZW4gaW4gb3JkZXIgdG8gcHJldmVudCByZWR1bmRhbnQgdGl0bGVzLCBpZiB0aGUgc3Vic2VjdGlvbiBwb3NzZXNzZXMgYSB0aXRsZSBvd25lci5cblx0ICogSGludDogSWYgeW91IGNob29zZSB0byBzZXQgc2FwLm0uVGl0bGUgYXMgdGhlIHRpdGxlIG93bmVyLCBzdHlsaW5nIGFkanVzdG1lbnRzIG1heSBiZSByZXF1aXJlZCBpbiB0aGUgY3VzdG9tIHZpZXcuIEZvciBleGFtcGxlLCBpZiBzYXAubS5UaXRsZSBpcyBzZXQgYXMgdGl0bGUgb3duZXIgd2hpY2ggYmVsb25ncyB0byBzYXAubS5PdmVyZmxvd1Rvb2xiYXIgb3IgdG8gc2FwLm0uVG9vbGJhciwgdGhlbiB0aGUg4oCYZGVzaWdu4oCZIHByb3BlcnR5IG9mIHRoZSB0b29sYmFyIGNvbnRyb2wgaXMgdG8gYmUgc2V0IHRvIOKAmFRyYW5zcGFyZW504oCZLlxuXHQgKiBAcGFyYW0gY29udHJvbCBUaGUgc2luZ2xlIGNvbnRlbnQgY29udHJvbCBjYW4gYmUgZWl0aGVyIG9uZSBvZiB0aGUgc3RhbmRhcmQgYnVpbGRpbmcgYmxvY2tzIChGb3JtLCBDaGFydCwgVGFibGUpLCBvciByZXVzZSBjb21wb25lbnRzLCBvciBzYXAubS5UaXRsZS5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0c2V0QXNTZWN0aW9uVGl0bGVPd25lcihjb250cm9sOiBNYW5hZ2VkT2JqZWN0KTogdm9pZCB7XG5cdFx0bGV0IHNlY3Rpb247XG5cdFx0Y29uc3Qgb3JpZ2luYWxDb250cm9sID0gY29udHJvbDtcblx0XHRsZXQgcmV1c2VDb21wb25lbnQ7XG5cdFx0d2hpbGUgKGNvbnRyb2wpIHtcblx0XHRcdGlmIChjb250cm9sLmlzQTxTZWN0aW9uPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuU2VjdGlvblwiKSkge1xuXHRcdFx0XHRzZWN0aW9uID0gY29udHJvbDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udHJvbC5pc0E8UmV1c2VDb21wb25lbnQ+KFwic2FwLmZlLmNvcmUuUmV1c2VDb21wb25lbnRcIikpIHtcblx0XHRcdFx0Y29udHJvbCA9IGNvbnRyb2wuY29udGFpbmVyLmdldFBhcmVudCgpIGFzIENvbnRyb2w7XG5cdFx0XHRcdHJldXNlQ29tcG9uZW50ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvbnRyb2xQYXJlbnQgPSBjb250cm9sLmdldFBhcmVudCgpO1xuXHRcdFx0aWYgKGNvbnRyb2xQYXJlbnQpIHtcblx0XHRcdFx0Y29udHJvbCA9IGNvbnRyb2xQYXJlbnQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHNlY3Rpb24pIHtcblx0XHRcdGlmIChyZXVzZUNvbXBvbmVudCAmJiBzZWN0aW9uLmdldFZpc2libGVTdWJTZWN0aW9ucygpLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0c2VjdGlvbi5hZGp1c3RGb3JTaW5nbGVDb250ZW50KG9yaWdpbmFsQ29udHJvbCwgeyBtdWx0aXBsZVN1YlNlY3Rpb25zV2l0aFJldXNlQ29tcG9uZW50OiB0cnVlIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VjdGlvbi5hZGp1c3RGb3JTaW5nbGVDb250ZW50KG9yaWdpbmFsQ29udHJvbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERpc3BsYXlzIGFuIGVycm9yIG1lc3NhZ2Ugd2hlbiBuYXZpZ2F0aW9uIHRvIGEgc2VjdGlvbiBmYWlscy5cblx0ICovXG5cdHByaXZhdGUgc2hvd05hdmlnYXRpb25FcnJvcigpOiB2b2lkIHtcblx0XHRjb25zdCByZXNvdXJjZU1vZGVsID0gUmVzb3VyY2VNb2RlbEhlbHBlci5nZXRSZXNvdXJjZU1vZGVsKHRoaXMuX3ZpZXcpO1xuXHRcdGNvbnN0IHNUaXRsZSA9IHJlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUk9VVElOR19OQVZJR0FUSU9OX0RJU0FCTEVEX1RJVExFXCIpO1xuXHRcdExvZy5lcnJvcihzVGl0bGUpO1xuXHRcdE1lc3NhZ2VCb3guZXJyb3Ioc1RpdGxlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byB0aGUgZmlyc3Qgc2VjdGlvbiBvZiB0aGUgb2JqZWN0IHBhZ2UuXG5cdCAqIFVzZWQgYXMgYSBmYWxsYmFjayB3aGVuIHRoZSB0YXJnZXQgc2VjdGlvbiBpcyBub3QgZm91bmQgb3IgaW52YWxpZC5cblx0ICogQHBhcmFtIG9iamVjdFBhZ2VMYXlvdXQgVGhlIE9iamVjdFBhZ2VMYXlvdXQgY29udHJvbCB0byBuYXZpZ2F0ZSB3aXRoaW5cblx0ICovXG5cdHByaXZhdGUgbmF2aWdhdGVUb0ZpcnN0U2VjdGlvbihvYmplY3RQYWdlTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0KTogdm9pZCB7XG5cdFx0Y29uc3Qgc2VjdGlvbnMgPSBvYmplY3RQYWdlTGF5b3V0LmdldFNlY3Rpb25zKCk7XG5cdFx0aWYgKCFzZWN0aW9ucyB8fCBzZWN0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb25zdCBmaXJzdFNlY3Rpb24gPSBzZWN0aW9uc1swXTtcblx0XHRjb25zdCBzdWJTZWN0aW9ucyA9IGZpcnN0U2VjdGlvbi5nZXRTdWJTZWN0aW9ucygpO1xuXHRcdGlmICghc3ViU2VjdGlvbnMgfHwgc3ViU2VjdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29uc3QgZmlyc3RTdWJTZWN0aW9uID0gc3ViU2VjdGlvbnNbMF07XG5cdFx0Y29uc3Qgc3ViU2VjdGlvbkZ1bGxJZCA9IGZpcnN0U3ViU2VjdGlvbi5nZXRJZCgpO1xuXG5cdFx0aWYgKCFzdWJTZWN0aW9uRnVsbElkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0b2JqZWN0UGFnZUxheW91dC5zZXRTZWxlY3RlZFNlY3Rpb24oc3ViU2VjdGlvbkZ1bGxJZCk7XG5cdFx0b2JqZWN0UGFnZUxheW91dC5maXJlTmF2aWdhdGUoe1xuXHRcdFx0c2VjdGlvbjogZmlyc3RTZWN0aW9uLFxuXHRcdFx0c3ViU2VjdGlvbjogZmlyc3RTdWJTZWN0aW9uXG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGUgdG8gYSBzcGVjaWZpYyBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gd2l0aGluIHRoZSBjdXJyZW50IHBhZ2UuXG5cdCAqIFdvcmtzIHdpdGggT2JqZWN0IFBhZ2UgbGF5b3V0cyBhbmQgb3RoZXIgc2VjdGlvbi1iYXNlZCBsYXlvdXRzLlxuXHQgKiBJZiB0aGUgdGFyZ2V0IHNlY3Rpb24gaXMgbm90IGZvdW5kIG9yIGludmFsaWQsIHRoZSBhcHAgYXV0b21hdGljYWxseSBmYWxscyBiYWNrIHRvIHRoZSBmaXJzdCBhdmFpbGFibGUgc2VjdGlvbi5cblx0ICogQHBhcmFtIHNlY3Rpb25PclN1YlNlY3Rpb25JZCBUaGUgSUQgb2YgdGhlIHRhcmdldCBzZWN0aW9uIG9yIHN1YnNlY3Rpb24gKHdpdGhvdXQgYSB2aWV3IHByZWZpeCwgZm9yIGV4YW1wbGUsIFwiZmU6OkZhY2V0U2VjdGlvbjo6VHJhdmVsRGF0YVwiIG9yIFwiZmU6OlN1YlNlY3Rpb246OkRldGFpbHNcIilcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGVUb1N1YlNlY3Rpb24oc2VjdGlvbk9yU3ViU2VjdGlvbklkOiBzdHJpbmcpOiB2b2lkIHtcblx0XHQvLyBHdWFyZCBhZ2FpbnN0IGNvbmN1cnJlbnQgbmF2aWdhdGlvbiBjYWxscyB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzXG5cdFx0Ly8gZnJvbSBtdWx0aXBsZSBwb2xsaW5nIG1lY2hhbmlzbXMgKFZpZXdTdGF0ZS5hcHBseSBhbmQgT2JqZWN0UGFnZUNvbnRyb2xsZXIuX25hdmlnYXRlVG9UYXJnZXRTZWN0aW9uKVxuXHRcdGlmICh0aGlzLmlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbiA9IHRydWU7XG5cblx0XHQvLyBIZWxwZXIgdG8gcmVzZXQgbmF2aWdhdGlvbiBmbGFnIGFmdGVyIGEgZGVsYXlcblx0XHRjb25zdCByZXNldE5hdmlnYXRpb25GbGFnID0gKGRlbGF5TXM6IG51bWJlcik6IHZvaWQgPT4ge1xuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nVG9TdWJTZWN0aW9uID0gZmFsc2U7XG5cdFx0XHR9LCBkZWxheU1zKTtcblx0XHR9O1xuXG5cdFx0dHJ5IHtcblx0XHRcdC8vIEZpbmQgdGhlIE9iamVjdCBQYWdlIExheW91dCBjb250cm9sXG5cdFx0XHRjb25zdCBvYmplY3RQYWdlTGF5b3V0ID0gdGhpcy5fdmlldy5nZXRDb250ZW50KClbMF0gYXMgT2JqZWN0UGFnZUxheW91dCB8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCFvYmplY3RQYWdlTGF5b3V0IHx8ICFvYmplY3RQYWdlTGF5b3V0LmdldERvbVJlZigpKSB7XG5cdFx0XHRcdC8vIE9iamVjdFBhZ2VMYXlvdXQgbm90IGF2YWlsYWJsZSBvciBkZXN0cm95ZWQgLSBzaWxlbnRseSByZXR1cm4gZHVyaW5nIG5hdmlnYXRpb24gdHJhbnNpdGlvbnNcblx0XHRcdFx0Ly8gVGhpcyBpcyBleHBlY3RlZCB3aGVuIFZpZXdTdGF0ZS5hcHBseSBydW5zIG9uIGEgdmlldyBiZWluZyBuYXZpZ2F0ZWQgYXdheSBmcm9tXG5cdFx0XHRcdHRoaXMuaXNOYXZpZ2F0aW5nVG9TdWJTZWN0aW9uID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzZWN0aW9uT3JTdWJTZWN0aW9uSWQpIHtcblx0XHRcdFx0dGhpcy5uYXZpZ2F0ZVRvRmlyc3RTZWN0aW9uKG9iamVjdFBhZ2VMYXlvdXQpO1xuXHRcdFx0XHRyZXNldE5hdmlnYXRpb25GbGFnKDEwMCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgY29udHJvbCA9IHRoaXMuX3ZpZXcuYnlJZChzZWN0aW9uT3JTdWJTZWN0aW9uSWQpO1xuXG5cdFx0XHRpZiAoIWNvbnRyb2wgfHwgIShjb250cm9sIGFzIENvbnRyb2wpLmdldFZpc2libGUoKSkge1xuXHRcdFx0XHR0aGlzLm5hdmlnYXRlVG9GaXJzdFNlY3Rpb24ob2JqZWN0UGFnZUxheW91dCk7XG5cdFx0XHRcdHRoaXMuc2hvd05hdmlnYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXNldE5hdmlnYXRpb25GbGFnKDEwMCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0bGV0IHRhcmdldFN1YlNlY3Rpb246IE9iamVjdFBhZ2VTdWJTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IHRhcmdldFNlY3Rpb246IE9iamVjdFBhZ2VTZWN0aW9uIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IGlzTmF2aWdhdGluZ1RvU2VjdGlvbiA9IGZhbHNlOyAvLyBUcmFjayBpZiBvcmlnaW5hbCB0YXJnZXQgd2FzIGEgU2VjdGlvbiAobm90IFN1YlNlY3Rpb24pXG5cblx0XHRcdC8vIENoZWNrIGlmIGNvbnRyb2wgaXMgYSBTdWJTZWN0aW9uIG9yIFNlY3Rpb25cblx0XHRcdGlmIChjb250cm9sLmlzQTxPYmplY3RQYWdlU3ViU2VjdGlvbj4oXCJzYXAudXhhcC5PYmplY3RQYWdlU3ViU2VjdGlvblwiKSkge1xuXHRcdFx0XHR0YXJnZXRTdWJTZWN0aW9uID0gY29udHJvbDtcblx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5pc0E8T2JqZWN0UGFnZVNlY3Rpb24+KFwic2FwLnV4YXAuT2JqZWN0UGFnZVNlY3Rpb25cIikpIHtcblx0XHRcdFx0dGFyZ2V0U2VjdGlvbiA9IGNvbnRyb2w7XG5cdFx0XHRcdGlzTmF2aWdhdGluZ1RvU2VjdGlvbiA9IHRydWU7XG5cdFx0XHRcdC8vIElmIGl0J3MgYSBzZWN0aW9uLCBnZXQgdGhlIGZpcnN0IHN1YnNlY3Rpb24gKGlmIGF2YWlsYWJsZSlcblx0XHRcdFx0Y29uc3Qgc3ViU2VjdGlvbnMgPSBjb250cm9sLmdldFN1YlNlY3Rpb25zKCk7XG5cdFx0XHRcdHRhcmdldFN1YlNlY3Rpb24gPSBzdWJTZWN0aW9ucy5sZW5ndGggPiAwID8gc3ViU2VjdGlvbnNbMF0gOiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFZhbGlkYXRlIHdlIGhhdmUgZWl0aGVyIGEgc2VjdGlvbiBvciBzdWJzZWN0aW9uXG5cdFx0XHRjb25zdCBoYXNWYWxpZFRhcmdldCA9IHRhcmdldFN1YlNlY3Rpb24gfHwgdGFyZ2V0U2VjdGlvbjtcblx0XHRcdGlmICghaGFzVmFsaWRUYXJnZXQgfHwgKHRhcmdldFN1YlNlY3Rpb24gJiYgIXRhcmdldFN1YlNlY3Rpb24uZ2V0VmlzaWJsZSgpKSkge1xuXHRcdFx0XHR0aGlzLm5hdmlnYXRlVG9GaXJzdFNlY3Rpb24ob2JqZWN0UGFnZUxheW91dCk7XG5cdFx0XHRcdHRoaXMuc2hvd05hdmlnYXRpb25FcnJvcigpO1xuXHRcdFx0XHRyZXNldE5hdmlnYXRpb25GbGFnKDEwMCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHNlY3Rpb24gYnV0IG5vIHN1YnNlY3Rpb24gKGxhenkgbG9hZGluZyBzY2VuYXJpbyksIHNjcm9sbCBkaXJlY3RseSB0byB0aGUgc2VjdGlvblxuXHRcdFx0aWYgKHRhcmdldFNlY3Rpb24gJiYgIXRhcmdldFN1YlNlY3Rpb24pIHtcblx0XHRcdFx0Y29uc3Qgc2VjdGlvbkZ1bGxJZCA9IHRhcmdldFNlY3Rpb24uZ2V0SWQoKTtcblx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zY3JvbGxUb1NlY3Rpb24oc2VjdGlvbkZ1bGxJZCwgMCk7XG5cdFx0XHRcdHJlc2V0TmF2aWdhdGlvbkZsYWcoMTAwKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBdCB0aGlzIHBvaW50LCB0YXJnZXRTdWJTZWN0aW9uIGlzIGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZFxuXHRcdFx0Ly8gKHdlJ3ZlIGFscmVhZHkgcmV0dXJuZWQgaWYgaXQgd2FzIHVuZGVmaW5lZCB3aXRoIGEgdmFsaWQgdGFyZ2V0U2VjdGlvbilcblx0XHRcdGlmICghdGFyZ2V0U3ViU2VjdGlvbikge1xuXHRcdFx0XHQvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBzYXRpc2ZpZXMgVHlwZVNjcmlwdFxuXHRcdFx0XHR0aGlzLmlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbiA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5vdGU6IHdlIGludGVudGlvbmFsbHkgZG8gbm90IGNoZWNrIGdldFZpc2libGUoKSBoZXJlLlxuXHRcdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIHRvIGEgc3Vic2VjdGlvbiBpbiBhbiBpbmFjdGl2ZSBJY29uVGFiQmFyIHRhYiwgdGhlIHN1YnNlY3Rpb24gaXMgbm90IHlldCB2aXNpYmxlLlxuXHRcdFx0Ly8gc2V0U2VsZWN0ZWRTZWN0aW9uIHdpbGwgYWN0aXZhdGUgdGhlIHBhcmVudCBzZWN0aW9uIGFuZCBtYWtlIHRoZSBzdWJzZWN0aW9uIHZpc2libGUuXG5cblx0XHRcdC8vIEdldCB0aGUgZnVsbCBzdWJzZWN0aW9uIElEIChpbmNsdWRpbmcgdmlldyBwcmVmaXgpXG5cdFx0XHRjb25zdCBzdWJTZWN0aW9uRnVsbElkID0gdGFyZ2V0U3ViU2VjdGlvbi5nZXRJZCgpO1xuXG5cdFx0XHRpZiAoIXN1YlNlY3Rpb25GdWxsSWQpIHtcblx0XHRcdFx0dGhpcy5pc05hdmlnYXRpbmdUb1N1YlNlY3Rpb24gPSBmYWxzZTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwYXJlbnRTZWN0aW9uID0gdGFyZ2V0U3ViU2VjdGlvbi5nZXRQYXJlbnQoKSBhcyBPYmplY3RQYWdlU2VjdGlvbjtcblx0XHRcdGNvbnN0IHBhcmVudFNlY3Rpb25GdWxsSWQgPSBwYXJlbnRTZWN0aW9uLmdldElkKCk7XG5cdFx0XHRjb25zdCBpc1BhcmVudFNlY3Rpb25TZWxlY3RlZCA9IG9iamVjdFBhZ2VMYXlvdXQuZ2V0U2VsZWN0ZWRTZWN0aW9uKCkgPT09IHBhcmVudFNlY3Rpb25GdWxsSWQ7XG5cblx0XHRcdGlmICghaXNQYXJlbnRTZWN0aW9uU2VsZWN0ZWQgJiYgIWlzTmF2aWdhdGluZ1RvU2VjdGlvbikge1xuXHRcdFx0XHQvLyBXaGVuIG5hdmlnYXRpbmcgdG8gYSBzdWJzZWN0aW9uIGluIGFuIGluYWN0aXZlIHNlY3Rpb24sIHdlIG11c3QgZmlyc3QgYWN0aXZhdGVcblx0XHRcdFx0Ly8gdGhlIHBhcmVudCBzZWN0aW9uLCB0aGVuIHdhaXQgZm9yIHN1YnNlY3Rpb24gdG8gYmUgcmVhZHkgYmVmb3JlIHNjcm9sbGluZyB0byBpdFxuXHRcdFx0XHRvYmplY3RQYWdlTGF5b3V0LnNjcm9sbFRvU2VjdGlvbihwYXJlbnRTZWN0aW9uRnVsbElkLCAwKTtcblxuXHRcdFx0XHQvLyBQb2xsIGZvciBzdWJzZWN0aW9uIERPTSB0byBiZSByZWFkeSBhZnRlciBwYXJlbnQgc2VjdGlvbiBhY3RpdmF0aW9uXG5cdFx0XHRcdC8vIFJlbGF0ZWQ6IGhlbHBlcnMvU2VjdGlvbk5hdmlnYXRpb25IZWxwZXIudHMgKHVzZWQgYnkgVmlld1N0YXRlLmFwcGx5IGFuZCBPYmplY3RQYWdlQ29udHJvbGxlci5uYXZpZ2F0ZVRvVGFyZ2V0U2VjdGlvbilcblx0XHRcdFx0Ly8gVGhpcyBwb2xsaW5nIGRpZmZlcnM6IGNoZWNrcyBET00gcmVhZGluZXNzIChiaW5hcnkpLCBub3Qgc2VjdGlvbiBJRCBzdGFiaWxpdHlcblx0XHRcdFx0bGV0IGF0dGVtcHRzID0gMDtcblx0XHRcdFx0Y29uc3QgbWF4QXR0ZW1wdHMgPSAxMDtcblx0XHRcdFx0Y29uc3QgY2hlY2tTdWJzZWN0aW9uUmVhZHkgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0YXR0ZW1wdHMrKztcblx0XHRcdFx0XHRjb25zdCBzdWJTZWN0aW9uRG9tID0gdGFyZ2V0U3ViU2VjdGlvbi5nZXREb21SZWYoKTtcblx0XHRcdFx0XHRpZiAoc3ViU2VjdGlvbkRvbSkge1xuXHRcdFx0XHRcdFx0Ly8gU3Vic2VjdGlvbiBpcyByZWFkeSwgc2Nyb2xsIHRvIGl0XG5cdFx0XHRcdFx0XHRvYmplY3RQYWdlTGF5b3V0LnNjcm9sbFRvU2VjdGlvbihzdWJTZWN0aW9uRnVsbElkLCAwKTtcblx0XHRcdFx0XHRcdHJlc2V0TmF2aWdhdGlvbkZsYWcoMTAwKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGF0dGVtcHRzIDwgbWF4QXR0ZW1wdHMpIHtcblx0XHRcdFx0XHRcdC8vIE5vdCByZWFkeSB5ZXQsIGNoZWNrIGFnYWluXG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KGNoZWNrU3Vic2VjdGlvblJlYWR5LCA1MCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFRpbWVvdXQgLSB0cnkgc2Nyb2xsaW5nIGFueXdheVxuXHRcdFx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zY3JvbGxUb1NlY3Rpb24oc3ViU2VjdGlvbkZ1bGxJZCwgMCk7XG5cdFx0XHRcdFx0XHRyZXNldE5hdmlnYXRpb25GbGFnKDEwMCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHQvLyBTdGFydCBjaGVja2luZyBhZnRlciAxMDBtcyBpbml0aWFsIGRlbGF5XG5cdFx0XHRcdHNldFRpbWVvdXQoY2hlY2tTdWJzZWN0aW9uUmVhZHksIDEwMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBQYXJlbnQgc2VjdGlvbiBhbHJlYWR5IHNlbGVjdGVkIG9yIG5hdmlnYXRpbmcgdG8gc2VjdGlvbiAtIHNjcm9sbCBkaXJlY3RseVxuXHRcdFx0XHRjb25zdCBzY3JvbGxUYXJnZXQgPSBpc05hdmlnYXRpbmdUb1NlY3Rpb24gPyBwYXJlbnRTZWN0aW9uRnVsbElkIDogc3ViU2VjdGlvbkZ1bGxJZDtcblx0XHRcdFx0b2JqZWN0UGFnZUxheW91dC5zY3JvbGxUb1NlY3Rpb24oc2Nyb2xsVGFyZ2V0LCAwKTtcblx0XHRcdFx0cmVzZXROYXZpZ2F0aW9uRmxhZygxMDApO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHR0aGlzLmlzTmF2aWdhdGluZ1RvU3ViU2VjdGlvbiA9IGZhbHNlO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBPYmplY3RQYWdlRXh0ZW5zaW9uQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztFQWtDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFSQSxJQVVNQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQzQkMsY0FBYyxDQUFDLDBDQUEwQyxDQUFDLEVBQUFELElBQUEsQ0FBQUUsTUFBQSwwQkFBQUMsYUFBQTtJQUFBLFNBQUFKLHVCQUFBO01BQUEsSUFBQUssS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQUQsYUFBQSxDQUFBUSxJQUFBLFVBQUFILElBQUE7TUFFMUQ7QUFDRDtBQUNBO01BR0M7QUFDRDtBQUNBO0FBQ0E7TUFIQ0osS0FBQSxDQUlRUSx3QkFBd0IsR0FBRyxL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
|
|
@@ -407,13 +407,17 @@ class ObjectPageExtensionAPI extends ExtensionAPI {
|
|
|
407
407
|
const messageStats: { [key: string]: { id: number; count: number } } = {
|
|
408
408
|
Error: { id: 2, count: 0 },
|
|
409
409
|
Warning: { id: 1, count: 0 },
|
|
410
|
-
Information: { id: 0, count: 0 }
|
|
410
|
+
Information: { id: 0, count: 0 },
|
|
411
|
+
Success: { id: 0, count: 0 },
|
|
412
|
+
None: { id: 0, count: 0 }
|
|
411
413
|
};
|
|
412
414
|
message = messages.reduce(
|
|
413
415
|
(acc, currentValue) => {
|
|
414
416
|
const currentType = currentValue.getType();
|
|
415
|
-
|
|
416
|
-
messageStats[
|
|
417
|
+
const currentStats = messageStats[currentType] ?? messageStats.Information;
|
|
418
|
+
const accStats = messageStats[acc.getType()] ?? messageStats.Information;
|
|
419
|
+
acc.setType(currentStats.id > accStats.id ? currentType : acc.getType());
|
|
420
|
+
currentStats.count++;
|
|
417
421
|
return acc;
|
|
418
422
|
},
|
|
419
423
|
new Message({ type: MessageType.Information })
|
|
@@ -52,6 +52,7 @@
|
|
|
52
52
|
>
|
|
53
53
|
<uxap:landmarkInfo>
|
|
54
54
|
<uxap:ObjectPageAccessibleLandmarkInfo
|
|
55
|
+
rootRole="{= ${internal>/hasUShell} ? 'Region' : 'Main'}"
|
|
55
56
|
headerRole="{= ${internal>/hasUShell} ? 'None' : 'Banner'}"
|
|
56
57
|
headerLabel="{sap.fe.i18n>T_COMMON_OBJECT_PAGE_HEADER}"
|
|
57
58
|
footerLabel="{sap.fe.i18n>T_COMMON_OBJECT_PAGE_FOOTER}"
|