@sapui5/sap.fe.test 1.144.0 → 1.145.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/sap/fe/test/.library +1 -1
- package/src/sap/fe/test/JestTemplatingHelper.js +19 -6
- package/src/sap/fe/test/JestTemplatingHelper.tsx +17 -5
- package/src/sap/fe/test/ObjectPage.js +6 -0
- package/src/sap/fe/test/api/DialogAssertions.js +145 -121
- package/src/sap/fe/test/api/FormActions.js +17 -0
- package/src/sap/fe/test/api/HeaderActions.js +2 -4
- package/src/sap/fe/test/api/HeaderAssertions.js +165 -6
- package/src/sap/fe/test/builder/MacroFieldBuilder.js +2 -0
- package/src/sap/fe/test/builder/MdcTableBuilder.js +3 -3
- package/src/sap/fe/test/library.js +1 -1
|
@@ -522,7 +522,9 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "@sap/cds-compiler", "fs",
|
|
|
522
522
|
},
|
|
523
523
|
data: changes
|
|
524
524
|
}));
|
|
525
|
-
jest.spyOn(Loader, "getCachedFlexData").mockReturnValue(
|
|
525
|
+
jest.spyOn(Loader, "getCachedFlexData").mockReturnValue({
|
|
526
|
+
data: changes
|
|
527
|
+
});
|
|
526
528
|
const spyOnComponent = jest.spyOn(Component, "getComponentById").mockReturnValue(oAppComponent);
|
|
527
529
|
const spyOnUtils = jest.spyOn(Utils, "getAppComponentForControl").mockReturnValue(oAppComponent);
|
|
528
530
|
await FlexState.initialize({
|
|
@@ -886,6 +888,7 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "@sap/cds-compiler", "fs",
|
|
|
886
888
|
* @param options.keepDynamicIds If set to true, dynamic IDs are not replaced with a constant value.
|
|
887
889
|
* @param options.ignoreKeys List of property, association, and event keys to ignore during serialization.
|
|
888
890
|
* @param options.ignoreBindingInfoKeys List of binding info keys to ignore during serialization.
|
|
891
|
+
* @param options.normalizeCustomData If set to true, custom data values that are objects with a "customData" property will be normalized to only include that property value.
|
|
889
892
|
* @returns A string representation of the control or array of controls.
|
|
890
893
|
*/
|
|
891
894
|
function serializeControl(controlToSerialize, options) {
|
|
@@ -898,6 +901,10 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "@sap/cds-compiler", "fs",
|
|
|
898
901
|
customData.sort((a, b) => a.getKey().localeCompare(b.getKey()));
|
|
899
902
|
control.removeAllCustomData();
|
|
900
903
|
for (const cd of customData) {
|
|
904
|
+
const cdValue = cd.getValue();
|
|
905
|
+
if (options?.normalizeCustomData === true && typeof cdValue === "object" && "customData" in cdValue) {
|
|
906
|
+
cd.setValue(cdValue.customData);
|
|
907
|
+
}
|
|
901
908
|
control.addCustomData(cd);
|
|
902
909
|
}
|
|
903
910
|
}
|
|
@@ -926,8 +933,8 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "@sap/cds-compiler", "fs",
|
|
|
926
933
|
data += `,\n${getTab(tabCount)} tooltip: ${control.mAggregations.tooltip}`;
|
|
927
934
|
}
|
|
928
935
|
data += serializeAssociations(control, tabCount, options);
|
|
929
|
-
if (options?.showCustomStyleClasses === true && control.
|
|
930
|
-
data += `,\n${getTab(tabCount)} customStyleClasses : ${control.
|
|
936
|
+
if (options?.showCustomStyleClasses === true && getCustomStyleClasses(control).length > 0) {
|
|
937
|
+
data += `,\n${getTab(tabCount)} customStyleClasses : ${getCustomStyleClasses(control).join(", ")}`;
|
|
931
938
|
}
|
|
932
939
|
data += serializeEvents(control, tabCount, options);
|
|
933
940
|
return data;
|
|
@@ -960,6 +967,10 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "@sap/cds-compiler", "fs",
|
|
|
960
967
|
}
|
|
961
968
|
}
|
|
962
969
|
_exports.serializeControl = serializeControl;
|
|
970
|
+
function getCustomStyleClasses(control) {
|
|
971
|
+
return control.aCustomStyleClasses ?? [];
|
|
972
|
+
}
|
|
973
|
+
_exports.getCustomStyleClasses = getCustomStyleClasses;
|
|
963
974
|
function serializeControlAsXML(controlToSerialize) {
|
|
964
975
|
let showCustomStyleClasses = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
965
976
|
let preferValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
@@ -1078,8 +1089,8 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "@sap/cds-compiler", "fs",
|
|
|
1078
1089
|
}
|
|
1079
1090
|
}
|
|
1080
1091
|
}
|
|
1081
|
-
if (showCustomStyleClasses && control.
|
|
1082
|
-
data += `\n${getTab(tabCount)} customStyleClasses : ${control.
|
|
1092
|
+
if (showCustomStyleClasses && getCustomStyleClasses(control).length > 0) {
|
|
1093
|
+
data += `\n${getTab(tabCount)} customStyleClasses : ${getCustomStyleClasses(control).join(", ")}`;
|
|
1083
1094
|
}
|
|
1084
1095
|
data += `\n`;
|
|
1085
1096
|
let hasAggregation = false;
|
|
@@ -1160,6 +1171,8 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "@sap/cds-compiler", "fs",
|
|
|
1160
1171
|
* @param options.content The content to use for the app Component
|
|
1161
1172
|
* @param options.componentId
|
|
1162
1173
|
* @param options.manifestSettings
|
|
1174
|
+
* @param options.feManifestSettings The SAP Fiori Elements manifest settings
|
|
1175
|
+
* @param options.guid The GUID to use for the appComponent
|
|
1163
1176
|
* @param name The name to use for the appComponent
|
|
1164
1177
|
* @param viewLevel The view level to use for the appComponent
|
|
1165
1178
|
* @returns The appcomponent and templateComponent to use for testing
|
|
@@ -1307,4 +1320,4 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "@sap/cds-compiler", "fs",
|
|
|
1307
1320
|
_exports.delayFor = delayFor;
|
|
1308
1321
|
return _exports;
|
|
1309
1322
|
}, false);
|
|
1310
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJkcmFmdEluZGljYXRvciIsInZpc3VhbGZpbHRlcnMiLCJmaWVsZGhlbHAiLCJyZXZlc2VOYW1lc3BhY2VNYXAiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicmV2ZXJzZU1hcCIsImN1cnJlbnROYW1lIiwic2VsZWN0IiwieHBhdGgiLCJ1c2VOYW1lc3BhY2VzIiwiZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwiX2dldFRlbXBsYXRlZFNlbGVjdG9yIiwieG1sZG9tIiwic2VsZWN0b3IiLCJyb290UGF0aCIsIm5vZGVOYW1lIiwic3RhcnRzV2l0aCIsIl9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzIiwic01ldGFkYXRhVXJsIiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJmYWtlU2lkZUVmZmVjdFNlcnZpY2UiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiVGVtcGxhdGVNb2RlbCIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsInNldHRpbmdzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwiYmluZGluZ0NvbnRleHRzIiwiYXBwQ29tcG9uZW50IiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJfZ2V0VGFyZ2V0SW5mb3JtYXRpb24iLCJmbiIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldERpYWdub3N0aWNzIiwidW5kZWZpbmVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE1hbmlmZXN0RW50cnkiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiZXhwZWN0IiwiZ2V0T2JqZWN0IiwidG9CZURlZmluZWQiLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9sb2FkUmVzb3VyY2VWaWV3Iiwidmlld05hbWUiLCJuYW1lIiwicmVwbGFjZSIsInZpZXciLCJMb2FkZXJFeHRlbnNpb25zIiwibG9hZFJlc291cmNlIiwiZG9jdW1lbnRFbGVtZW50IiwicnVuWFBhdGhRdWVyeSIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwibGVuZ3RoIiwidG9Ob3RIYXZlQ29udHJvbCIsInRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMiLCJ4bWwiLCJ4bWxUZXh0IiwiYmFzZTY0RW50cmllcyIsIm1hdGNoIiwiZXJyb3JNZXNzYWdlcyIsIm1hcCIsImF0b2IiLCJzbGljZSIsImpvaW4iLCJfZXhwb3J0cyIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRYTUwiLCJnZXRDb250cm9sQXR0cmlidXRlIiwiY29udHJvbFNlbGVjdG9yIiwiYXR0cmlidXRlTmFtZSIsInhtbERvbSIsIm9wdGlvbnMiLCJzZXJpYWxpemVyIiwid2luZG93IiwiWE1MU2VyaWFsaXplciIsIm5vZGUiLCJzZXJpYWxpemVUb1N0cmluZyIsIlNUQVJUIiwiRU5EIiwibGluZXMiLCJjdXJyZW50TGluZSIsImxldmVsIiwiYXR0cmlidXRlcyIsIm5ld2xpbmUiLCJwdXNoIiwicmVwZWF0IiwiYXBwZW5kQXR0cmlidXRlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJpbmNsdWRlcyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiYXBwZW5kIiwicGFyc2VyIiwicmVhZCIsImNyZWF0ZVBhcnNlciIsIm9uT3BlblRhZ1N0YXJ0Iiwib25PcGVuVGFnTmFtZSIsIm9uQXR0ck5hbWUiLCJ1bnNoaWZ0Iiwib25BdHRyVmFsdWUiLCJrZWVwRHluYW1pY0lkcyIsInJlbW92ZUR5bmFtaWNJZCIsIm9uT3BlblRhZ0VuZCIsInNlbGZDbG9zZWQiLCJvbkNsb3NlVGFnU3RhcnQiLCJvbkNsb3NlVGFnTmFtZSIsIm9uQ2xvc2VUYWdFbmQiLCJwYXJzZSIsInRyaW0iLCJjb21waWxlQ0RTIiwiY2RzVXJsIiwiYXJndW1lbnRzIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicGF0aCIsInJlc29sdmUiLCJhbGxPcHRpb25zIiwiZW50cmllcyIsImVkbXhGaWxlTmFtZSIsImZpbGVuYW1lIiwiX3JlZiIsIm9wdGlvbktleSIsIm9wdGlvblZhbHVlIiwidG9TdHJpbmciLCJiYXNlbmFtZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsInJlcXVpcmUiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwiY2xhc3NOYW1lT0RhdGFNb2RlbCIsInNjb3BlT2JqZWN0IiwiZ2V0TW9kZWwiLCJpc0EiLCJnZXRTZXJ2aWNlVXJsIiwiZ2V0U2VydmljZSIsImdldENhcGFiaWxpdGllcyIsInNlcnZpY2VJbnN0YW5jZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJmaW5kIiwiaXNzdWUiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImRhdGFNb2RlbFBhdGgiLCJjb250ZXh0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJNYW5pZmVzdFdyYXBwZXIiLCJtZXRhTW9kZWxDYWNoZSIsIm9SZXF1ZXN0b3IiLCJfTWV0YWRhdGFSZXF1ZXN0b3IiLCJjcmVhdGUiLCJPRGF0YU1ldGFNb2RlbCIsIl9yZXF1ZXN0QW5ub3RhdGlvbkNoYW5nZXMiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdJbmZvIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwiLCJtb2RlbENvbnRlbnQiLCJuYW1lZE1vZGVsc0NvbnRlbnQiLCJfZm9ybWF0dGVycyIsIlZhbHVlRm9ybWF0dGVyIiwidGV4dCIsIkludmlzaWJsZVRleHQiLCJiaW5kUHJvcGVydHkiLCJkZWZhdWx0TW9kZWwiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwiY29udGVudCIsIm1vZGVsIiwiZ2V0VGV4dCIsIlRFU1RWSUVXSUQiLCJhcHBseUZsZXhDaGFuZ2VzIiwiZmxleENoYW5nZXMiLCJyZXN1bHRYTUwiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaWQiLCJjaGFuZ2VzIiwiY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0IiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJ0eXBlIiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwib0FwcENvbXBvbmVudCIsImdldENvbXBvbmVudERhdGEiLCJnZXRNYW5pZmVzdE9iamVjdCIsImdldEVudHJ5IiwiZ2V0TG9jYWxJZCIsInNJZCIsInNweU9uQXBwU3RvcmFnZSIsInNweU9uIiwiQXBwU3RvcmFnZSIsIlByb21pc2UiLCJzcHlPbkxvYWRlciIsIkxvYWRlciIsInBhcmFtZXRlcnMiLCJsb2FkZXJDYWNoZUtleSIsInNweU9uQ29tcG9uZW50IiwiQ29tcG9uZW50Iiwic3B5T25VdGlscyIsIlV0aWxzIiwiRmxleFN0YXRlIiwiaW5pdGlhbGl6ZSIsImNvbXBvbmVudElkIiwiWG1sUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImNoYW5nZXNBcHBsaWVkIiwiZ2V0Q2hhbmdlc0Zyb21YTUwiLCJ0b0JlIiwidmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzIiwibW9ja1Jlc3RvcmUiLCJmbGF0TWFwIiwiZSIsImZpbHRlciIsImF0dHIiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCIsInRlbXBsYXRlZFhtbCIsIkRPTVBhcnNlciIsInhtbERvYyIsInBhcnNlRnJvbVN0cmluZyIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIlhNTFByZXByb2Nlc3NvciIsImZpcnN0RWxlbWVudENoaWxkIiwiZ2V0VGVtcGxhdGVkWE1MIiwianN4IiwiZGVmaW5lWE1MTmFtZXNwYWNlTWFwIiwidGVtcGxhdGVkWE1MIiwic2VyaWFsaWVkWE1MIiwibm90IiwicHJvY2Vzc1ZpZXciLCJvVmlld0RvY3VtZW50Iiwib1ByZXByb2Nlc3NlZFZpZXciLCJhc0VsZW1lbnQiLCJhc1N0cmluZyIsIm91dGVySFRNTCIsImJ1aWxkVmlldyIsInByb3BlcnRpZXMiLCJ0ZW1wbGF0ZVR5cGUiLCJ0ZW1wbGF0ZU5hbWUiLCJUZW1wbGF0ZVR5cGUiLCJMaXN0UmVwb3J0IiwiT2JqZWN0UGFnZSIsIm1ldGFkYXRhVXJsIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJBcHBTdGF0ZSIsIkNoYXJ0IiwiQ29sbGFib3JhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIk1pY3JvQ2hhcnQiLCJVU2hlbGwiLCJJbnNpZ2h0c1N1cHBvcnRlZCIsIkNvbnRleHRTaGFyaW5nU3VwcG9ydGVkIiwiU21hcnRTdW1tYXJpemUiLCJNYWdpY0ZpbHRlcmluZyIsIkRpc2FibGVJbnB1dEFzc2lzdGFuY2UiLCJIaWRkZW5EcmFmdCIsImNvbnZlcnRlclBhZ2VNb2RlbCIsImNvbnZlcnRQYWdlIiwibW9jayIsIkRpYWdub3N0aWNzIiwiaW50ZXJuYWxNb2RlbHMiLCJ2aWV3RGF0YSIsImFwcEluaXQiLCJpbml0aWFsaXplQXBwQ29tcG9uZW50IiwiY2RzRmlsZSIsIm1haW5Db250ZXh0UGF0aCIsInByb2Nlc3NlZFZpZXciLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsInJ1bkFzT3duZXIiLCJYTUxWaWV3IiwiZGVmaW5pdGlvbiIsIlZpZXdJZCIsInByb2Nlc3NGcmFnbWVudCIsInRlc3REYXRhIiwiaW5wdXRYbWwiLCJpbnB1dERvYyIsImpzb25Nb2RlbCIsInNldERhdGEiLCJyZXN1bHREb2MiLCJmcmFnbWVudHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImZyYWdtZW50IiwiaW5uZXJIVE1MIiwieG1sUmVzdWx0IiwiY2hpbGRyZW4iLCJnZXRUYWIiLCJ0YWJDb3VudCIsInRvQWRkIiwidGFiIiwiaSIsIlVJRCIsIkNPTlRST0xJRCIsImdldFByb3BlcnR5IiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eVZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEJpbmRpbmdJbmZvIiwiYmluZGluZ0RldGFpbCIsIm9PdXRwdXRGb3JtYXQiLCJ0eXBlTmFtZSIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImJpbmRpbmciLCJzZXJpYWxpemVQcm9wZXJ0aWVzIiwiaWdub3JlS2V5cyIsImdldEFsbFByb3BlcnRpZXMiLCJpbmhlcml0ZWRQcm9wZXJ0aWVzIiwiaXNQcm9wZXJ0eUluaXRpYWwiLCJzb3J0ZWRLZXlzIiwibmV3UHJvcGVydHlWYWx1ZSIsImtleSIsImlzQm91bmQiLCJpZ25vcmVCaW5kaW5nSW5mb0tleXMiLCJzZXJpYWxpemVBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbktleXMiLCJnZXRBbGxBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbktleSIsImFzc29jaWF0aW9uVmFsdWUiLCJnZXRBc3NvY2lhdGlvbiIsImFzc29jaWF0aW9uVmFsdWVFbGVtZW50IiwiTWFuYWdlZE9iamVjdE1ldGFkYXRhIiwiaXNHZW5lcmF0ZWRJZCIsInNlcmlhbGl6ZUV2ZW50cyIsImludGVybmFsVUk1RXZlbnRzIiwiZXZlbnRJZHMiLCJnZXRBbGxFdmVudHMiLCJjb25jYXQiLCJldmVudEtleSIsImhhc0xpc3RlbmVycyIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJzZXJpYWxpemVEZWxlZ2F0ZSIsInN0YXJ0Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJyZW1vdmVBbGxDdXN0b21EYXRhIiwiY2QiLCJhZGRDdXN0b21EYXRhIiwiY29udHJvbERldGFpbCIsImdldFBhcmVudCIsImluZGV4SW5QYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJlbmQiLCJtaWRkbGUiLCJnZXRJZCIsIm1BZ2dyZWdhdGlvbnMiLCJ0b29sdGlwIiwic2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyIsImFDdXN0b21TdHlsZUNsYXNzZXMiLCJzdGFydEFnZ3JlZ2F0aW9uIiwic05hbWUiLCJvdXQiLCJtQmluZGluZ0luZm9zIiwiZW5kQWdncmVnYXRpb24iLCJjb250cm9sVG9SZW5kZXIiLCJTZXJpYWxpemVyIiwic2VyaWFsaXplIiwic2VyaWFsaXplQ29udHJvbEFzWE1MIiwicHJlZmVyVmFsdWUiLCJkZWZpbmVkTmFtZXNwYWNlcyIsImdldE5hbWVzcGFjZUFsaWFzIiwiY2xhc3NOYW1lIiwibmFtZXNTcGxpdCIsInNwbGl0IiwibmFtZXNwYWNlIiwibmFtZXNwYWNlQWxpYXMiLCJuYW1lRnVsbCIsImhhc0FnZ3JlZ2F0aW9uIiwibUFnZ3JlZ2F0aW9uc0tleSIsIm1Qcm9wZXJ0aWVzIiwicHJvcE5hbWUiLCJtRXZlbnRSZWdpc3RyeSIsInVuaXF1ZUtleXMiLCJTZXQiLCJmcm9tIiwib0NvbnRyb2xLZXkiLCJ0ZW1wbGF0ZSIsImZGdW5jdGlvbiIsIm91dFhNTCIsImNyZWF0ZUF3YWl0ZXIiLCJmblJlc29sdmUiLCJteVByb21pc2UiLCJwcm9taXNlIiwicmVnaXN0ZXJNb2NrRnJhZ21lbnRzIiwiX2xlbjIiLCJfa2V5MiIsIm9yaWdpbmFsTG9hZFRlbXBsYXRlIiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGVQcm9taXNlIiwibG9hZFRlbXBsYXRlU3R1YiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImV4dGVuc2lvbiIsInBhcnNlWE1MU3RyaW5nIiwidmlld0xldmVsIiwiT0RhdGFNb2RlbCIsInByb3RvdHlwZSIsIl9fZGlybmFtZSIsImd1aWQiLCJ1aWQiLCJjZHNDb250ZW50IiwiamVzdFVJNSIsIm1vY2tVcmwiLCJwYWdlQ29udGVudCIsIlBhZ2VDb250cm9sbGVyIiwiRGVmYXVsdFBhZ2VDb250ZW50IiwiX1BhZ2VDb250cm9sbGVyIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJyZW5kZXIiLCJfanN4IiwiUGFnZSIsInNhcCIsInVpIiwiZGVmaW5lIiwiX0FwcENvbXBvbmVudCIsIkFwcENvbXBvbmVudCIsIm1ldGFkYXRhIiwibWFuaWZlc3QiLCJ0aXRsZSIsImRhdGFTb3VyY2VzIiwibWFpblNlcnZpY2UiLCJ1cmkiLCJvZGF0YVZlcnNpb24iLCJkYXRhU291cmNlIiwicm91dGluZyIsInRhcmdldHMiLCJEZWZhdWx0Iiwidmlld1R5cGUiLCJ2aWV3Q29udGVudCIsInJvdXRlcyIsInBhdHRlcm4iLCJ0YXJnZXQiLCJmZU1hbmlmZXN0U2V0dGluZ3MiLCJFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UiLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJtb2NrQXBwQ29tcG9uZW50IiwiaW5pdGlhbGl6ZWQiLCJ2IiwiZ2V0Um91dGVyIiwiZ2V0VGFyZ2V0IiwibG9hZCIsIm9iamVjdCIsImZpbmRFbGVtZW50IiwiY29sbGVjdGlvbiIsImVsZW1lbnQiLCJpdGVtIiwid2FpdEZvckV2ZW50IiwiZXZlbnROYW1lIiwiYXR0YWNoRXZlbnRPbmNlIiwiZXZlbnQiLCJrZWVwQmluZGluZ1N0cmluZ0ZvclRlc3QiLCJlbmFibGVkIiwiQmluZGluZ1BhcnNlciIsIl9rZWVwQmluZGluZ1N0cmluZ3MiLCJkZWxheUZvciIsImRlbGF5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgUmFuZ2UsIFJhbmdlcyB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9hZGVyRXh0ZW5zaW9ucyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9Mb2FkZXJFeHRlbnNpb25zXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB7IHBhcnNlWE1MU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHtcblx0VGVtcGxhdGVUeXBlLFxuXHR0eXBlIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLFxuXHR0eXBlIE1hbmlmZXN0U2V0dGluZ3NTYXBGRSxcblx0dHlwZSBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRQYWdlLCB0eXBlIElEaWFnbm9zdGljcywgdHlwZSBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCBWYWx1ZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMsIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS90ZXN0L1VJNU1vY2tIZWxwZXJcIjtcbmltcG9ydCBQYWdlIGZyb20gXCJzYXAvbS9QYWdlXCI7XG5pbXBvcnQgQmluZGluZ0luZm8gZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvLCBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RNZXRhZGF0YVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvWE1MVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCJzYXAvdWkvZmwvVXRpbHNcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IExvYWRlciBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL0xvYWRlclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgWG1sUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvcHJlcHJvY2Vzc29ycy9YbWxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IF9NZXRhZGF0YVJlcXVlc3RvciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYi9fTWV0YWRhdGFSZXF1ZXN0b3JcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCB9IGZyb20gXCIuL0plc3RGbGV4aWJpbGl0eUhlbHBlclwiO1xuXG50eXBlIFByZVByb2Nlc3NvclNldHRpbmdzVHlwZSA9IHtcblx0bW9kZWxzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB8IE9EYXRhTWV0YU1vZGVsO1xuXHR9O1xuXHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRbbmFtZTogc3RyaW5nXTogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0fTtcbn07XG50eXBlIE1vY2tGcmFnbWVudCA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRjb250ZW50OiBzdHJpbmc7XG59O1xuXG50eXBlIEplc3RUZW1wbGF0ZWRWaWV3ID0ge1xuXHRhc0VsZW1lbnQ6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdGFzU3RyaW5nOiBzdHJpbmc7XG59O1xuXG5Mb2cuc2V0TGV2ZWwoMSBhcyBhbnksIFwic2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3JcIik7XG5qZXN0LnNldFRpbWVvdXQoNDAwMDApO1xuXG5jb25zdCBuYW1lU3BhY2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdG1hY3JvOiBcInNhcC5mZS5tYWNyb3NcIixcblx0bWFjcm9TaGFyZTogXCJzYXAuZmUubWFjcm9zLnNoYXJlXCIsXG5cdG1hY3JvczogXCJzYXAuZmUubWFjcm9zXCIsXG5cdGZlQkI6IFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiLFxuXHRtYWNyb0ZpZWxkOiBcInNhcC5mZS5tYWNyb3MuZmllbGRcIixcblx0bWFjcm9kYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0bG9nOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0Y3VzdG9tRGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGNvbnRyb2w6IFwic2FwLmZlLmNvcmUuY29udHJvbHNcIixcblx0Y29udHJvbHM6IFwic2FwLmZlLm1hY3Jvcy5jb250cm9sc1wiLFxuXHRjb3JlOiBcInNhcC51aS5jb3JlXCIsXG5cdGR0OiBcInNhcC51aS5kdFwiLFxuXHRtOiBcInNhcC5tXCIsXG5cdGY6IFwic2FwLnVpLmxheW91dC5mb3JtXCIsXG5cdGZsOiBcInNhcC51aS5mbFwiLFxuXHRpbnRlcm5hbE1hY3JvOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIixcblx0bWRjOiBcInNhcC51aS5tZGNcIixcblx0YWN0aW9udG9vbGJhcjogXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXJcIixcblx0bWRjRmllbGQ6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRtZGNUYWJsZTogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdHU6IFwic2FwLnVpLnVuaWZpZWRcIixcblx0dXhhcDogXCJzYXAudXhhcFwiLFxuXHRtYWNyb01pY3JvQ2hhcnQ6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdG1pY3JvQ2hhcnQ6IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIixcblx0bWFjcm9UYWJsZTogXCJzYXAuZmUubWFjcm9zLnRhYmxlXCIsXG5cdG1kY3ZjOiBcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnRcIixcblx0bWRjdjogXCJzYXAudWkubWRjLnZhbHVlaGVscFwiLFxuXHR2YWx1ZUhlbHA6IFwic2FwLmZlLm1hY3Jvcy52YWx1ZUhlbHBcIixcblx0Y29udGVudFN3aXRjaGVyOiBcInNhcC5mZS5tYWNyb3MuY29udGVudFN3aXRjaGVyXCIsXG5cdGZpbHRlckJhcjogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhclwiLFxuXHRkcmFmdEluZGljYXRvcjogXCJzYXAuZmUubWFjcm9zLmRyYWZ0SW5kaWNhdG9yXCIsXG5cdHZpc3VhbGZpbHRlcnM6IFwic2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzXCIsXG5cdGZpZWxkaGVscDogXCJzYXAudWkuY29yZS5maWVsZGhlbHBcIlxufTtcbmNvbnN0IHJldmVzZU5hbWVzcGFjZU1hcCA9IE9iamVjdC5rZXlzKG5hbWVTcGFjZU1hcCkucmVkdWNlKChyZXZlcnNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjdXJyZW50TmFtZSkgPT4ge1xuXHRyZXZlcnNlTWFwW25hbWVTcGFjZU1hcFtjdXJyZW50TmFtZV1dID0gY3VycmVudE5hbWU7XG5cdHJldHVybiByZXZlcnNlTWFwO1xufSwge30pO1xuY29uc3Qgc2VsZWN0ID0geHBhdGgudXNlTmFtZXNwYWNlcyhuYW1lU3BhY2VNYXApO1xuXG5jb25zdCBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlID0geyBjb21wdXRlRmllbGRHcm91cElkczogKCkgPT4gW10gfTtcblxuZnVuY3Rpb24gX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbTogTm9kZSwgc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8qKlxuXHQgKiBpZiBhIHJvb3QgZWxlbWVudCBoYXMgYmVlbiBhZGRlZCBkdXJpbmcgdGhlIHRlbXBsYXRpbmcgYnkgb3VyIEplc3QgVGVtcGxhdGluZyBtZXRob2RzXG5cdCAqIHRoZSByb290IGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIHNlbGVjdG9yIHBhdGguXG5cdCAqL1xuXHRjb25zdCByb290UGF0aCA9IFwiL3Jvb3RcIjtcblx0cmV0dXJuIGAke3htbGRvbS5ub2RlTmFtZSA9PT0gXCJyb290XCIgJiYgIXNlbGVjdG9yLnN0YXJ0c1dpdGgocm9vdFBhdGgpID8gcm9vdFBhdGggOiBcIlwifSR7c2VsZWN0b3J9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MoXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8UHJlUHJvY2Vzc29yU2V0dGluZ3NUeXBlPiB7XG5cdGxldCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0aWYgKHNNZXRhZGF0YVVybCkge1xuXHRcdG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0XHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblx0XHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IGNvbnZlcnRlckNvbnRleHQ6IG5ldyBUZW1wbGF0ZU1vZGVsKHt9LCBvTWV0YU1vZGVsISkgfSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdFx0bU1vZGVsc1tzTW9kZWxOYW1lXSA9IG5ldyBUZW1wbGF0ZU1vZGVsKG1Nb2RlbHNbc01vZGVsTmFtZV0uZGF0YSwgb01ldGFNb2RlbCEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3Qgc2V0dGluZ3M6IGFueSA9IHtcblx0XHRtb2RlbHM6IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbFxuXHRcdFx0fSxcblx0XHRcdG1Nb2RlbHNcblx0XHQpLFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30sXG5cdFx0YXBwQ29tcG9uZW50OiB7XG5cdFx0XHRnZXRSb3V0aW5nU2VydmljZTogKCkgPT4gKHtcblx0XHRcdFx0X2dldFRhcmdldEluZm9ybWF0aW9uOiBqZXN0LmZuKClcblx0XHRcdH0pLFxuXHRcdFx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksXG5cdFx0XHRnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkLFxuXHRcdFx0Z2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpLFxuXHRcdFx0Z2V0TWFuaWZlc3RFbnRyeTogKCkgPT4gdW5kZWZpbmVkXG5cdFx0fVxuXHR9O1xuXG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGZha2VTaWRlRWZmZWN0U2VydmljZSA/PyBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsPy5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdHNldHRpbmdzLm1vZGVsc1tzS2V5XSA9IG9Nb2RlbDtcblx0fSk7XG5cdHJldHVybiBzZXR0aW5ncztcbn1cblxuZnVuY3Rpb24gX2xvYWRSZXNvdXJjZVZpZXcodmlld05hbWU6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRjb25zdCBuYW1lID0gdmlld05hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKSArIFwiLnZpZXcueG1sXCI7XG5cdGNvbnN0IHZpZXcgPSBMb2FkZXJFeHRlbnNpb25zLmxvYWRSZXNvdXJjZShuYW1lKTtcblx0cmV0dXJuIHZpZXcuZG9jdW1lbnRFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgcnVuWFBhdGhRdWVyeSA9IGZ1bmN0aW9uIChzZWxlY3Rvcjogc3RyaW5nLCB4bWxkb206IE5vZGUgfCB1bmRlZmluZWQpIHtcblx0cmV0dXJuIHNlbGVjdChzZWxlY3RvciwgeG1sZG9tKTtcbn07XG5cbmV4cGVjdC5leHRlbmQoe1xuXHR0b0hhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbSwgc2VsZWN0b3IpLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYGRpZCBub3QgZmluZCBjb250cm9scyBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+PSAxXG5cdFx0fTtcblx0fSxcblx0dG9Ob3RIYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBUaGVyZSBpcyBhIGNvbnRyb2wgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPT09IDBcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2tzIGZvciBlcnJvcnMgaW4gYHhtbGAgY3JlYXRlZCBkdXJpbmcgdGVtcGxhdGluZyBvZiBhbiBYTUwgc3RyaW5nIG9yXG5cdCAqIGFuIFhNTCBub2RlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrZXMgZm9yIHRoZSB4bWwgZXJyb3JzIGNyZWF0ZWQgYnkgdGhlXG5cdCAqIGZ1bmN0aW9uIFtCdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IuY3JlYXRlRXJyb3JYTUxde0BsaW5rIHNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmcuQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yI2NyZWF0ZUVycm9yWE1MfS5cblx0ICogQHBhcmFtIHhtbCBYTUwgU3RyaW5nIG9yIFhNTCBOb2RlIHRvIGJlIHRlc3RlZCBmb3IgZXJyb3JzXG5cdCAqIEByZXR1cm5zIEplc3QgTWF0Y2hlciByZXN1bHQgb2JqZWN0XG5cdCAqL1xuXHR0b0hhdmVUZW1wbGF0aW5nRXJyb3JzKHhtbDogc3RyaW5nIHwgTm9kZSkge1xuXHRcdGNvbnN0IHhtbFRleHQgPSB0eXBlb2YgeG1sID09PSBcInN0cmluZ1wiID8geG1sIDogc2VyaWFsaXplWE1MKHhtbCk7XG5cdFx0Y29uc3QgYmFzZTY0RW50cmllczogc3RyaW5nW10gPSB4bWxUZXh0Lm1hdGNoKC9CQkZcXC5iYXNlNjREZWNvZGVcXCgnKFteJ10qKSdcXCkvZ20pIHx8IChbXSBhcyBzdHJpbmdbXSk7XG5cdFx0Y29uc3QgZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBiYXNlNjRFbnRyaWVzLm1hcCgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGF0b2IobWVzc2FnZS5tYXRjaCgvKCdbXiddKikvKT8uWzBdPy5zbGljZSgxKSB8fCBcIlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0pO1xuXHRcdGlmIChlcnJvck1lc3NhZ2VzLmxlbmd0aCA8PSAwKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtZXNzYWdlOiAoKSA9PiBgWE1MIFRlbXBsYXRpbmcgd2l0aG91dCBlcnJvcnNgLFxuXHRcdFx0XHRwYXNzOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gZXJyb3JNZXNzYWdlcy5qb2luKFwiXFxuXCIpLFxuXHRcdFx0XHRwYXNzOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh4bWxTdHJpbmcpKSB7XG5cdFx0eG1sU3RyaW5nID0geG1sU3RyaW5nLmpvaW4oXCJcIik7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoY29udHJvbFNlbGVjdG9yOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlbGVjdG9yID0gYHN0cmluZygke19nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxEb20sIGNvbnRyb2xTZWxlY3Rvcil9L0Ake2F0dHJpYnV0ZU5hbWV9KWA7XG5cdHJldHVybiBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pO1xufTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIHBhcnRzIG9yIHRoZSBjb21wbGV0ZSBnaXZlbiBYTUwgRE9NIHRvIHN0cmluZy5cbiAqIEBwYXJhbSB4bWxEb20gRE9NIG5vZGUgdGhhdCBpcyB0byBiZSBzZXJpYWxpemVkLlxuICogQHBhcmFtIHNlbGVjdG9yIE9wdGlvbmFsIHNlbGVjdG9yIG9mIHN1YiBub2Rlc1xuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2VyaWFsaXphdGlvbiBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWVcbiAqIEByZXR1cm5zIFhNTCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uICh4bWxEb206IE5vZGUsIHNlbGVjdG9yPzogc3RyaW5nLCBvcHRpb25zPzogeyBrZWVwRHluYW1pY0lkcz86IGJvb2xlYW4gfSk6IHN0cmluZyB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0bGV0IHhtbFN0cmluZzogc3RyaW5nO1xuXHRpZiAoc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSkgYXMgTm9kZVtdO1xuXHRcdHhtbFN0cmluZyA9IG5vZGVzLm1hcCgobm9kZSkgPT4gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhub2RlKSkuam9pbihcIlxcblwiKTtcblx0fSBlbHNlIHtcblx0XHR4bWxTdHJpbmcgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvbSk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gWE1MIGRvY3VtZW50LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gb25seSBjb25zaWRlcnMgWE1MIHRhZ3MgYW5kIGF0dHJpYnV0ZXMsIGlnbm9yaW5nIGV2ZXJ5dGhpbmcgZWxzZSAodGV4dCwgY29tbWVudHMpLiBBZGRpdGlvbmFsbHksXG4gKiBhdHRyaWJ1dGUgdmFsdWVzIGNvbnRhaW5pbmcgYSB2YXJ5aW5nIFVJRCBhcmUgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICpcbiAqIEFuIFwiWE1MXCIgc3RyaW5nIGNvbnRhaW5pbmcgbXVsdGlwbGUgcm9vdCBlbGVtZW50cyBjYW4gYmUuXG4gKiBAcGFyYW0geG1sU3RyaW5nICBUaGUgaW5wdXQgWE1MIHN0cmluZy4gVGhpcyBmdW5jdGlvbiBhbHNvIGFjY2VwdHMgXCJYTUxcIiBzdHJpbmdzIHdpdGggbXVsdGlwbGUgcm9vdCBlbGVtZW50cy5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIFhNTCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM/OiB7IGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbiB9KTogc3RyaW5nIHtcblx0Y29uc3QgU1RBUlQgPSBcIjxfX1hNTF9fPlwiLFxuXHRcdEVORCA9IFwiPC9fX1hNTF9fPlwiLFxuXHRcdGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGxldCBjdXJyZW50TGluZSA9IFwiXCIsXG5cdFx0bGV2ZWwgPSAtMSxcblx0XHRhdHRyaWJ1dGVzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU/OiBzdHJpbmcgfVtdID0gW107XG5cblx0ZnVuY3Rpb24gbmV3bGluZSgpIHtcblx0XHRpZiAoY3VycmVudExpbmUgJiYgY3VycmVudExpbmUgIT09IFNUQVJUKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGN1cnJlbnRMaW5lKTtcblx0XHR9XG5cblx0XHRjdXJyZW50TGluZSA9IGxldmVsID4gMCA/IFwiICBcIi5yZXBlYXQobGV2ZWwpIDogXCJcIjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZEF0dHJpYnV0ZXMoKSB7XG5cdFx0aWYgKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiAhYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiAhYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiBiLm5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRsZXZlbCsrO1xuXHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuXHRcdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRcdGN1cnJlbnRMaW5lICs9IGF0dHJpYnV0ZS5uYW1lO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlLnZhbHVlKSBjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUudmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRsZXZlbC0tO1xuXHRcdFx0YXR0cmlidXRlcyA9IFtdO1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZChkYXRhOiBSYW5nZSkge1xuXHRcdGN1cnJlbnRMaW5lICs9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHR9XG5cblx0Y29uc3QgcGFyc2VyID0gY3JlYXRlUGFyc2VyKHtcblx0XHRvbk9wZW5UYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdOYW1lOiBhcHBlbmQsXG5cblx0XHRvbkF0dHJOYW1lKGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnVuc2hpZnQoeyBuYW1lOiBwYXJzZXIucmVhZChkYXRhKSB9KTtcblx0XHR9LFxuXG5cdFx0b25BdHRyVmFsdWUoZGF0YTogUmFuZ2VzLkF0dHJWYWx1ZSkge1xuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHRcdFx0aWYgKG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzICE9PSB0cnVlKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSByZW1vdmVEeW5hbWljSWQoYXR0cmlidXRlc1swXS52YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG9uT3BlblRhZ0VuZChkYXRhOiBSYW5nZXMuT3BlblRhZ0VuZCkge1xuXHRcdFx0YXBwZW5kQXR0cmlidXRlcygpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdFx0aWYgKCFkYXRhLnNlbGZDbG9zZWQpIGxldmVsKys7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25DbG9zZVRhZ05hbWU6IGFwcGVuZCxcblx0XHRvbkNsb3NlVGFnRW5kOiBhcHBlbmRcblx0fSk7XG5cblx0cGFyc2VyLnBhcnNlKFNUQVJUICsgeG1sU3RyaW5nICsgRU5EKTtcblx0cmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKiBAcGFyYW0gY2RzVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgbXVzdCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKGNkc1VybDogc3RyaW5nLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY2RzVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBlZG14Q29udGVudCA9IGNkczJlZG14KGNkc1N0cmluZywgXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zKTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKGNkc1VybCwgXCIuLlwiLCBcImdlblwiKTtcblxuXHQvLyBJZiB0aGUgY2FsbGVyIHByb3ZpZGVkIENEUyBjb21waWxlciBvcHRpb25zOiBJbmNsdWRlIHRoZW0gaW4gdGhlIGZpbGVuYW1lLiBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgcmVzdWx0cyBpZiB0aGUgc2FtZSBDRFMgc291cmNlXG5cdC8vIGZpbGUgaXMgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIGEgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIChlLmcuIGluIGEgdGVzdCBydW5uaW5nIGluIHBhcmFsbGVsKVxuXHRjb25zdCBhbGxPcHRpb25zID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucyk7XG5cdGFsbE9wdGlvbnMuc29ydCgoYSwgYikgPT4gYlswXS5sb2NhbGVDb21wYXJlKGFbMF0pKTtcblxuXHRjb25zdCBlZG14RmlsZU5hbWUgPVxuXHRcdGFsbE9wdGlvbnMucmVkdWNlKFxuXHRcdFx0KGZpbGVuYW1lLCBbb3B0aW9uS2V5LCBvcHRpb25WYWx1ZV0pID0+IGAke2ZpbGVuYW1lfSMke29wdGlvbktleX09JHtvcHRpb25WYWx1ZS50b1N0cmluZygpfSNgLFxuXHRcdFx0cGF0aC5iYXNlbmFtZShjZHNVcmwpLnJlcGxhY2UoXCIuY2RzXCIsIFwiXCIpXG5cdFx0KSArIFwiLnhtbFwiO1xuXG5cdGNvbnN0IGVkbXhGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGVkbXhGaWxlTmFtZSk7XG5cblx0ZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14RmlsZVBhdGgsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhGaWxlUGF0aDtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBDRFMgdG8gRURNWC5cbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcInNvdXJjZS5jZHNcIjogY2RzIH07XG5cblx0Ly8gYWxsb3cgdG8gaW5jbHVkZSBzdHVmZiBmcm9tIEBzYXAvY2RzL2NvbW1vblxuXHRpZiAoY2RzLmluY2x1ZGVzKFwiJ0BzYXAvY2RzL2NvbW1vbidcIikpIHtcblx0XHRzb3VyY2VzW1wiY29tbW9uLmNkc1wiXSA9IGZzLnJlYWRGaWxlU3luYyhyZXF1aXJlLnJlc29sdmUoXCJAc2FwL2Nkcy9jb21tb24uY2RzXCIpLCBcInV0Zi04XCIpO1xuXHR9XG5cblx0Y29uc3QgY3NuID0gY29tcGlsZXIuY29tcGlsZVNvdXJjZXMoc291cmNlcywge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogdHJ1ZSxcblx0XHQuLi5vcHRpb25zLFxuXHRcdHNlcnZpY2U6IHNlcnZpY2Vcblx0fTtcblxuXHRjb25zdCBlZG14ID0gY29tcGlsZXIudG8uZWRteChjc24sIGVkbXhPcHRpb25zKTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjbGFzc05hbWVPRGF0YU1vZGVsID0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiXG4pOiBQcm9taXNlPFNpZGVFZmZlY3RzU2VydmljZT4ge1xuXHRjb25zdCBzY29wZU9iamVjdCA9IHtcblx0XHRnZXRNb2RlbDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aXNBOiAoKSA9PiBjbGFzc05hbWVPRGF0YU1vZGVsID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIsXG5cdFx0XHRcdGdldE1ldGFNb2RlbDogKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBtZXRhTW9kZWw7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldFNlcnZpY2VVcmw6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGdldFNlcnZpY2U6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGdldENhcGFiaWxpdGllczogKCkgPT4gdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblx0Y29uc3Qgc2VydmljZUluc3RhbmNlID0gYXdhaXQgbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKHsgc2NvcGVPYmplY3QsIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH0pO1xuXHRyZXR1cm4gc2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc3N1ZS5pc3N1ZUNhdGVnb3J5ID09PSBpc3N1ZUNhdGVnb3J5ICYmIGlzc3VlLmlzc3VlU2V2ZXJpdHkgPT09IGlzc3VlU2V2ZXJpdHkgJiYgaXNzdWUuZGV0YWlscyA9PT0gZGV0YWlscztcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCA9IGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0bWFuaWZlc3RTZXR0aW5nczogTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xuKSB7XG5cdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBtYW5pZmVzdFNldHRpbmdzLmNvbnRleHRQYXRoXG5cdFx0PyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aCkgYXMgQ29udGV4dClcblx0XHQ6IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXR9YCkpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihcblx0XHRjb252ZXJ0ZWRUeXBlcyxcblx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKG1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdGdldEZha2VEaWFnbm9zdGljcygpLFxuXHRcdGRhdGFNb2RlbFBhdGhcblx0KTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB1bmRlZmluZWQsIHt9LCB7fSwgZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9KTtcblx0aWYgKCFtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG5ldyAoT0RhdGFNZXRhTW9kZWwgYXMgYW55KShvUmVxdWVzdG9yLCBzTWV0YWRhdGFVcmwsIHVuZGVmaW5lZCwgeyBfcmVxdWVzdEFubm90YXRpb25DaGFuZ2VzOiAoKSA9PiBbXSB9KTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiA8VCA9IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvbj4oXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHByb3BlcnR5PzogVFxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0Pjtcblx0cmV0dXJuIHRhcmdldFBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVCaW5kaW5nID0gZnVuY3Rpb24gKGJpbmRpbmdTdHJpbmc6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nSW5mby5wYXJzZShiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdJbmZvLnBhcnNlKGJpbmRpbmdTdHJpbmcsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB7XG5cdFx0XCIuXCI6IHtcblx0XHRcdF9mb3JtYXR0ZXJzOiB7XG5cdFx0XHRcdFZhbHVlRm9ybWF0dGVyOiBWYWx1ZUZvcm1hdHRlclxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikpO1xuXG5cdGlmIChuYW1lZE1vZGVsc0NvbnRlbnQpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhuYW1lZE1vZGVsc0NvbnRlbnQpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG5ldyBKU09OTW9kZWwoY29udGVudCk7XG5cdFx0XHR0ZXh0LnNldE1vZGVsKG1vZGVsLCBuYW1lKTtcblx0XHRcdHRleHQuc2V0QmluZGluZ0NvbnRleHQobW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmNvbnN0IFRFU1RWSUVXSUQgPSBcInRlc3RWaWV3SWRcIjtcblxuY29uc3QgYXBwbHlGbGV4Q2hhbmdlcyA9IGFzeW5jIGZ1bmN0aW9uIChmbGV4Q2hhbmdlczogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSwgb01ldGFNb2RlbDogTWV0YU1vZGVsLCByZXN1bHRYTUw6IGFueSkge1xuXHQvLyBwcmVmaXggSWRzXG5cdFsuLi5yZXN1bHRYTUwucXVlcnlTZWxlY3RvckFsbChcIltpZF1cIildLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRub2RlLmlkID0gYCR7VEVTVFZJRVdJRH0tLSR7bm9kZS5pZH1gO1xuXHR9KTtcblx0Y29uc3QgY2hhbmdlcyA9IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdChURVNUVklFV0lELCBmbGV4Q2hhbmdlcyk7XG5cdGNvbnN0IGFwcElkID0gXCJzb21lQ29tcG9uZW50XCI7XG5cdGNvbnN0IG9NYW5pZmVzdCA9IHtcblx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0aWQ6IGFwcElkLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvblwiLFxuXHRcdFx0Y3Jvc3NOYXZpZ2F0aW9uOiB7XG5cdFx0XHRcdG91dGJvdW5kczogW11cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IHtcblx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShnZXRGYWtlRGlhZ25vc3RpY3MoKSksXG5cdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG9NZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0Z2V0Q29tcG9uZW50RGF0YTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSksXG5cdFx0Z2V0TWFuaWZlc3RPYmplY3Q6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0RW50cnk6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIChvTWFuaWZlc3QgYXMgYW55KVtuYW1lXTtcblx0XHRcdH1cblx0XHR9KSxcblx0XHRnZXRMb2NhbElkOiBqZXN0LmZuKChzSWQpID0+IHNJZClcblx0fSBhcyB1bmtub3duIGFzIEFwcENvbXBvbmVudDtcblx0Ly9mYWtlIGNoYW5nZXNcblx0Y29uc3Qgc3B5T25BcHBTdG9yYWdlID0gamVzdC5zcHlPbihBcHBTdG9yYWdlLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblx0Y29uc3Qgc3B5T25Mb2FkZXIgPSBqZXN0LnNweU9uKExvYWRlciwgXCJnZXRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoXG5cdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdFx0bG9hZGVyQ2FjaGVLZXk6IFwiaWQtMTc2MzExODU4NjA4NC00MlwiIC8vIGFueSByYW5kb20gdmFsdWUgY2FuIGJlIHVzZWQsIGl0IGlzIHVzZWQgZm9yIGNhY2hpbmcgcHVycG9zZXNcblx0XHRcdH0sXG5cdFx0XHRkYXRhOiBjaGFuZ2VzXG5cdFx0fSlcblx0KTtcblxuXHRqZXN0LnNweU9uKExvYWRlciwgXCJnZXRDYWNoZWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoY2hhbmdlcyk7XG5cblx0Y29uc3Qgc3B5T25Db21wb25lbnQgPSBqZXN0XG5cdFx0LnNweU9uKENvbXBvbmVudCBhcyB1bmtub3duIGFzIHsgZ2V0Q29tcG9uZW50QnlJZDogKCkgPT4gQXBwQ29tcG9uZW50IH0sIFwiZ2V0Q29tcG9uZW50QnlJZFwiKVxuXHRcdC5tb2NrUmV0dXJuVmFsdWUob0FwcENvbXBvbmVudCk7XG5cdGNvbnN0IHNweU9uVXRpbHMgPSBqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cblx0Ly9Bc3NlcnQgdGhhdCBhbGwgY2hhbmdlcyBoYXZlIGJlZW4gYXBwbGllZFxuXHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoZmxleENoYW5nZXM/LmNoYW5nZXM/Lmxlbmd0aCA/PyBmbGV4Q2hhbmdlcz8udmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzPy5sZW5ndGggPz8gMCk7XG5cdHNweU9uQ29tcG9uZW50Lm1vY2tSZXN0b3JlKCk7XG5cdHNweU9uVXRpbHMubW9ja1Jlc3RvcmUoKTtcblx0c3B5T25BcHBTdG9yYWdlLm1vY2tSZXN0b3JlKCk7XG5cdHNweU9uTG9hZGVyLm1vY2tSZXN0b3JlKCk7XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2hhbmdlc0Zyb21YTUwgPSAoeG1sOiBhbnkpID0+XG5cdFsuLi54bWwucXVlcnlTZWxlY3RvckFsbChcIipcIildXG5cdFx0LmZsYXRNYXAoKGUpID0+IFsuLi5lLmF0dHJpYnV0ZXNdLm1hcCgoYSkgPT4gYS5uYW1lKSlcblx0XHQuZmlsdGVyKChhdHRyKSA9PiBhdHRyLmluY2x1ZGVzKFwic2FwLnVpLmZsLmFwcGxpZWRDaGFuZ2VzXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRpbmdSZXN1bHQgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9LFxuXHRmYWtlU2lkZUVmZmVjdFNlcnZpY2U/OiB1bmtub3duXG4pIHtcblx0aWYgKCFtTW9kZWxzW1wic2FwLmZlLmkxOG5cIl0pIHtcblx0XHRtTW9kZWxzW1wic2FwLmZlLmkxOG5cIl0gPSBjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCgpO1xuXHR9XG5cblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzID0gYXdhaXQgX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3Moc01ldGFkYXRhVXJsLCBtQmluZGluZ0NvbnRleHRzLCBtTW9kZWxzLCBmYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXG5cdC8vVGhpcyBjb250ZXh0IGZvciBtYWNybyB0ZXN0aW5nXG5cdGlmIChvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXSkge1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbXCJ0aGlzXCJdID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0bGV0IHJlc3VsdFhNTCA9IChhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncykpIGFzIGFueTtcblxuXHRpZiAoc01ldGFkYXRhVXJsICYmIGZsZXhDaGFuZ2VzKSB7XG5cdFx0Ly8gYXBwbHkgZmxleCBjaGFuZ2VzXG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRcdHJlc3VsdFhNTCA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoZmxleENoYW5nZXMsIG9NZXRhTW9kZWwsIHJlc3VsdFhNTCk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0ZWRYTUwgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93bixcblx0b3B0aW9ucz86IHsga2VlcER5bmFtaWNJZHM/OiBib29sZWFuIH1cbik6IFByb21pc2U8c3RyaW5nPiB7XG5cdHJldHVybiBqc3guZGVmaW5lWE1MTmFtZXNwYWNlTWFwKHJldmVzZU5hbWVzcGFjZU1hcCwgYXN5bmMgKCkgPT4ge1xuXHRcdGNvbnN0IHRlbXBsYXRlZFhNTCA9IGF3YWl0IGdldFRlbXBsYXRpbmdSZXN1bHQoXG5cdFx0XHR4bWxJbnB1dCxcblx0XHRcdHNNZXRhZGF0YVVybCxcblx0XHRcdG1CaW5kaW5nQ29udGV4dHMsXG5cdFx0XHRtTW9kZWxzLFxuXHRcdFx0ZmxleENoYW5nZXMsXG5cdFx0XHRmYWtlU2lkZUVmZmVjdFNlcnZpY2Vcblx0XHQpO1xuXHRcdGNvbnN0IHNlcmlhbGllZFhNTCA9IHNlcmlhbGl6ZVhNTCh0ZW1wbGF0ZWRYTUwsIHVuZGVmaW5lZCwgb3B0aW9ucyk7XG5cdFx0ZXhwZWN0KHNlcmlhbGllZFhNTCkubm90LnRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMoKTtcblx0XHRyZXR1cm4gc2VyaWFsaWVkWE1MO1xuXHR9KSBhcyB1bmtub3duIGFzIFByb21pc2U8c3RyaW5nPjtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIHZpZXcgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSB2aWV3IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSBzTWV0YWRhdGFVcmwgVXJsIG9mIHRoZSBtZXRhZGF0YS5cbiAqIEBwYXJhbSBtQmluZGluZ0NvbnRleHRzIE1hcCBvZiB0aGUgYmluZGluZ0NvbnRleHRzIHRvIHNldCBvbiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIG1Nb2RlbHMgTWFwIG9mIHRoZSBtb2RlbHMuXG4gKiBAcGFyYW0gZmxleENoYW5nZXMgT2JqZWN0IHdpdGggVUkgY2hhbmdlcyBsaWtlICdjaGFuZ2VzJyBvciAndmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzJ1xuICogQHJldHVybnMgVGVtcGxhdGVkIHZpZXcgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVmlldyhcblx0bmFtZTogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH1cbik6IFByb21pc2U8SmVzdFRlbXBsYXRlZFZpZXc+IHtcblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRjb25zdCBvVmlld0RvY3VtZW50ID0gX2xvYWRSZXNvdXJjZVZpZXcobmFtZSk7XG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscyk7XG5cdGxldCBvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKG9WaWV3RG9jdW1lbnQsIHsgbmFtZTogbmFtZSB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpO1xuXHRpZiAoZmxleENoYW5nZXMpIHtcblx0XHRvUHJlcHJvY2Vzc2VkVmlldyA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoZmxleENoYW5nZXMgPz8gW10sIG9NZXRhTW9kZWwsIG9QcmVwcm9jZXNzZWRWaWV3KTtcblx0fVxuXHRyZXR1cm4ge1xuXHRcdGFzRWxlbWVudDogb1ByZXByb2Nlc3NlZFZpZXcsXG5cdFx0YXNTdHJpbmc6IGZvcm1hdFhNTChvUHJlcHJvY2Vzc2VkVmlldz8ub3V0ZXJIVE1MIHx8IFwiXCIpXG5cdH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFZpZXcocHJvcGVydGllczoge1xuXHR0ZW1wbGF0ZU5hbWU6IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIgfCBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZVwiO1xuXHRtZXRhZGF0YVVybDogc3RyaW5nO1xuXHRjb250ZXh0UGF0aDogc3RyaW5nO1xuXHRtYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncztcblx0YmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfTtcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9O1xuXHRWaWV3SWQ/OiBzdHJpbmc7XG59KTogUHJvbWlzZTx7IHZpZXc6IFZpZXc7IGFwcENvbXBvbmVudDogQ29tcG9uZW50IH0+IHtcblx0Y29uc3QgdGVtcGxhdGVUeXBlID0gcHJvcGVydGllcy50ZW1wbGF0ZU5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIgPyBUZW1wbGF0ZVR5cGUuTGlzdFJlcG9ydCA6IFRlbXBsYXRlVHlwZS5PYmplY3RQYWdlO1xuXHRjb25zdCB2aWV3TmFtZSA9XG5cdFx0cHJvcGVydGllcy50ZW1wbGF0ZU5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCJcblx0XHRcdD8gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnQuTGlzdFJlcG9ydFwiXG5cdFx0XHQ6IFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlLk9iamVjdFBhZ2VcIjtcblx0Y29uc3QgbWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHByb3BlcnRpZXMubWV0YWRhdGFVcmwpO1xuXG5cdGNvbnN0IGVudmlyb25tZW50Q2FwYWJpbGl0aWVzOiBFbnZpcm9ubWVudENhcGFiaWxpdGllcyA9IHtcblx0XHRBcHBTdGF0ZTogdHJ1ZSxcblx0XHRDaGFydDogdHJ1ZSxcblx0XHRDb2xsYWJvcmF0aW9uOiB0cnVlLFxuXHRcdEludGVudEJhc2VkTmF2aWdhdGlvbjogZmFsc2UsXG5cdFx0TWljcm9DaGFydDogdHJ1ZSxcblx0XHRVU2hlbGw6IGZhbHNlLFxuXHRcdEluc2lnaHRzU3VwcG9ydGVkOiBmYWxzZSxcblx0XHRDb250ZXh0U2hhcmluZ1N1cHBvcnRlZDogZmFsc2UsXG5cdFx0U21hcnRTdW1tYXJpemU6IGZhbHNlLFxuXHRcdE1hZ2ljRmlsdGVyaW5nOiBmYWxzZSxcblx0XHREaXNhYmxlSW5wdXRBc3Npc3RhbmNlOiBmYWxzZSxcblx0XHRIaWRkZW5EcmFmdDogZmFsc2Vcblx0fTtcblxuXHRjb25zdCBjb252ZXJ0ZXJQYWdlTW9kZWwgPSBjb252ZXJ0UGFnZShcblx0XHR0ZW1wbGF0ZVR5cGUsXG5cdFx0bWV0YU1vZGVsLFxuXHRcdHByb3BlcnRpZXMubWFuaWZlc3RTZXR0aW5ncyxcblx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKHByb3BlcnRpZXMubWFuaWZlc3RTZXR0aW5ncyksXG5cdFx0bW9jayhEaWFnbm9zdGljcyksXG5cdFx0cHJvcGVydGllcy5jb250ZXh0UGF0aCxcblx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllc1xuXHQpO1xuXG5cdGNvbnN0IGludGVybmFsTW9kZWxzID0ge1xuXHRcdGNvbnZlcnRlckNvbnRleHQ6IHtcblx0XHRcdGRhdGE6IGNvbnZlcnRlclBhZ2VNb2RlbCxcblx0XHRcdGlzVGVtcGxhdGVNb2RlbDogdHJ1ZVxuXHRcdH0sXG5cdFx0dmlld0RhdGE6IG5ldyBKU09OTW9kZWwocHJvcGVydGllcy5tYW5pZmVzdFNldHRpbmdzKVxuXHR9O1xuXHQvL0J1aWxkIHRoZSBhcHAgY29tcG9uZW50XG5cdGNvbnN0IGFwcEluaXQgPSBhd2FpdCBpbml0aWFsaXplQXBwQ29tcG9uZW50KFxuXHRcdHtcblx0XHRcdG1hbmlmZXN0U2V0dGluZ3M6IHByb3BlcnRpZXMubWFuaWZlc3RTZXR0aW5ncyxcblx0XHRcdGNkc0ZpbGU6IHByb3BlcnRpZXMubWV0YWRhdGFVcmwsXG5cdFx0XHRtYWluQ29udGV4dFBhdGg6IHByb3BlcnRpZXMuY29udGV4dFBhdGhcblx0XHR9LFxuXHRcdHByb3BlcnRpZXMudGVtcGxhdGVOYW1lXG5cdCk7XG5cblx0Y29uc3QgcHJvY2Vzc2VkVmlldyA9IGF3YWl0IHByb2Nlc3NWaWV3KHZpZXdOYW1lLCBwcm9wZXJ0aWVzLm1ldGFkYXRhVXJsLCBwcm9wZXJ0aWVzLmJpbmRpbmdDb250ZXh0cywgaW50ZXJuYWxNb2RlbHMpO1xuXHRyZXR1cm4ge1xuXHRcdHZpZXc6IGF3YWl0IGFwcEluaXQudGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gWE1MVmlldy5jcmVhdGUoe1xuXHRcdFx0XHRkZWZpbml0aW9uOiBwcm9jZXNzZWRWaWV3LmFzU3RyaW5nLFxuXHRcdFx0XHRpZDogcHJvcGVydGllcy5WaWV3SWRcblx0XHRcdH0pO1xuXHRcdH0pLFxuXHRcdGFwcENvbXBvbmVudDogYXBwSW5pdC5hcHBDb21wb25lbnRcblx0fTtcbn1cblxuLyoqXG4gKiBQcm9jZXNzIHRoZSByZXF1ZXN0ZWQgWE1MIGZyYWdtZW50IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXG5cdGNvbnN0IGlucHV0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhpbnB1dFhtbCwgXCJ0ZXh0L3htbFwiKTtcblxuXHQvLyBidWlsZCBtb2RlbCBhbmQgYmluZGluZ3MgZm9yIGdpdmVuIHRlc3QgZGF0YVxuXHRjb25zdCBzZXR0aW5ncyA9IHtcblx0XHRtb2RlbHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB9LFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogb2JqZWN0IH0sXG5cdFx0YXBwQ29tcG9uZW50OiB7IGdldFNpZGVFZmZlY3RzU2VydmljZTogamVzdC5mbigpLCBnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkIH1cblx0fTtcblx0Zm9yIChjb25zdCBtb2RlbCBpbiB0ZXN0RGF0YSkge1xuXHRcdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRqc29uTW9kZWwuc2V0RGF0YSh0ZXN0RGF0YVttb2RlbF0pO1xuXHRcdHNldHRpbmdzLm1vZGVsc1ttb2RlbF0gPSBqc29uTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW21vZGVsXSA9IHNldHRpbmdzLm1vZGVsc1ttb2RlbF0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGRlZmF1bHRGYWtlU2lkZUVmZmVjdFNlcnZpY2UpO1xuXG5cdC8vIGV4ZWN1dGUgdGhlIHByZS1wcm9jZXNzb3Jcblx0Y29uc3QgcmVzdWx0RG9jID0gYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoaW5wdXREb2MuZmlyc3RFbGVtZW50Q2hpbGQsIHsgbmFtZSB9LCBzZXR0aW5ncyk7XG5cblx0Ly8gZXhjbHVkZSBuZXN0ZWQgZnJhZ21lbnRzIGZyb20gdGVzdCBzbmFwc2hvdHNcblx0Y29uc3QgZnJhZ21lbnRzID0gcmVzdWx0RG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiY29yZTpGcmFnbWVudFwiKSBhcyBhbnk7XG5cdGlmIChmcmFnbWVudHM/Lmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0ZnJhZ21lbnQuaW5uZXJIVE1MID0gXCJcIjtcblx0XHR9XG5cdH1cblxuXHQvLyBLZWVwIHRoZSBmcmFnbWVudCByZXN1bHQgYXMgY2hpbGQgb2Ygcm9vdCBub2RlIHdoZW4gZnJhZ21lbnQgZ2VuZXJhdGVzIG11bHRpcGxlIHJvb3QgY29udHJvbHNcblx0Y29uc3QgeG1sUmVzdWx0ID0gcmVzdWx0RG9jLmNoaWxkcmVuLmxlbmd0aCA+IDEgPyByZXN1bHREb2Mub3V0ZXJIVE1MIDogcmVzdWx0RG9jLmlubmVySFRNTDtcblxuXHRyZXR1cm4gZm9ybWF0WE1MKHhtbFJlc3VsdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgc3RyaW5nIG9mIHRhYiBjaGFyYWN0ZXJzIGZvciBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB0YWJDb3VudCBUaGUgbnVtYmVyIG9mIHRhYnMgdG8gZ2VuZXJhdGUuXG4gKiBAcGFyYW0gdG9BZGQgQWRkaXRpb25hbCB0YWJzIHRvIGFkZC5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIG9mIHRhYiBjaGFyYWN0ZXJzLlxuICovXG5mdW5jdGlvbiBnZXRUYWIodGFiQ291bnQ6IG51bWJlciwgdG9BZGQgPSAwKSB7XG5cdGxldCB0YWIgPSBcIlwiO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdHRhYiArPSBcIlxcdFwiO1xuXHR9XG5cdHJldHVybiB0YWI7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgZHluYW1pYyBJRHMgaW4gYSBzdHJpbmcgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICogQHBhcmFtIGlkIFRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUgZHluYW1pYyBJRHMuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHdpdGggZHluYW1pYyBJRHMgcmVwbGFjZWQuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUR5bmFtaWNJZChpZDogc3RyaW5nKTogc3RyaW5nIHtcblx0Y29uc3QgVUlEID0gL3VpZC0taWQtXFxkezEzfS1cXGR7MSw0fS87XG5cdGNvbnN0IENPTlRST0xJRCA9IC9pZC1cXGR7MTN9LVxcZHsxLDR9Lztcblx0cmV0dXJuIGlkLnJlcGxhY2UoVUlELCBcInVpZC0taWRcIikucmVwbGFjZShDT05UUk9MSUQsIFwiaWRcIik7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiBhIHByb3BlcnR5IGZyb20gYSBjb250cm9sLCB3aXRoIG9wdGlvbnMgdG8gaGFuZGxlIGR5bmFtaWMgSURzLlxuICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgdG8gcmV0cmlldmUgdGhlIHByb3BlcnR5IGZyb20uXG4gKiBAcGFyYW0gcHJvcGVydHlLZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmlldmUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3IgcmV0cmlldmluZyB0aGUgcHJvcGVydHkuXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5LCBvciB1bmRlZmluZWQgaWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0LlxuICovXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShcblx0Y29udHJvbDogQ29udHJvbCxcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0b3B0aW9ucz86IHtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdH1cbikge1xuXHRsZXQgcHJvcGVydHlWYWx1ZSA9IGNvbnRyb2wuZ2V0UHJvcGVydHkocHJvcGVydHlLZXkpO1xuXHRpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRwcm9wZXJ0eVZhbHVlID0gb3B0aW9ucz8ua2VlcER5bmFtaWNJZHMgIT09IHRydWUgPyByZW1vdmVEeW5hbWljSWQocHJvcGVydHlWYWx1ZSkgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdGlmIChwcm9wZXJ0eVZhbHVlID09PSBcIlwiKSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlID0gXCI8ZW1wdHlTdHJpbmc+XCI7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dHJ5IHtcblx0XHRcdHByb3BlcnR5VmFsdWUgPSBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBTdHJpbmdpZnkgbWF5IGZhaWwgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnV0IGl0J3Mgbm90IHRoZSBlbmQgb2YgdGhlIHdvcmxkXG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcm9wZXJ0eVZhbHVlO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmluZGluZyBvZiBhIHByb3BlcnR5IGZyb20gYSBjb250cm9sLlxuICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgdG8gcmV0cmlldmUgdGhlIGJpbmRpbmcgZnJvbS5cbiAqIEBwYXJhbSBwcm9wZXJ0eUtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byByZXRyaWV2ZSB0aGUgYmluZGluZyBmb3IuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3IgcmV0cmlldmluZyB0aGUgYmluZGluZy5cbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSBiaW5kaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgc3BlY2lmaWVkIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRCaW5kaW5nSW5mbyhcblx0Y29udHJvbDogQ29udHJvbCxcblx0cHJvcGVydHlLZXk6IHN0cmluZyxcblx0b3B0aW9ucz86IHtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdH1cbikge1xuXHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi4oY29udHJvbC5nZXRCaW5kaW5nSW5mbyhwcm9wZXJ0eUtleSkgYXMgUmVjb3JkPHN0cmluZywgUHJvcGVydHlCaW5kaW5nSW5mbz4pIH07XG5cdGlmIChiaW5kaW5nRGV0YWlsLnR5cGU/Lm9PdXRwdXRGb3JtYXQpIHtcblx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdH1cblx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZSkge1xuXHRcdGJpbmRpbmdEZXRhaWwudHlwZU5hbWUgPSBiaW5kaW5nRGV0YWlsLnR5cGUuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cdH1cblx0aWYgKGJpbmRpbmdEZXRhaWwuYmluZGluZykge1xuXHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLmJpbmRpbmc7XG5cdH1cblx0Y29uc3QgdmFsdWUgPSBKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKTtcblx0cmV0dXJuIG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzICE9PSB0cnVlID8gcmVtb3ZlRHluYW1pY0lkKHZhbHVlKSA6IHZhbHVlO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIHByb3BlcnRpZXMgb2YgYSBjb250cm9sIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0gY29udHJvbC5tUHJvcGVydGllcyBUaGUgcHJvcGVydGllcyBvZiB0aGUgY29udHJvbC5cbiAqIEBwYXJhbSBjb250cm9sLm1CaW5kaW5nSW5mb3MgVGhlIGJpbmRpbmcgaW5mb3JtYXRpb24gb2YgdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gdGFiQ291bnQgVGhlIGN1cnJlbnQgdGFiIGxldmVsIGZvciBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNldHRpbmdzIGZvciBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMuaW5oZXJpdGVkUHJvcGVydGllcyBJZiBzZXQgdG8gdHJ1ZSwgaW5oZXJpdGVkIHByb3BlcnRpZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlS2V5cyBMaXN0IG9mIHByb3BlcnR5IGtleXMgdG8gaWdub3JlIGR1cmluZyBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlQmluZGluZ0luZm9LZXlzIExpc3Qgb2YgYmluZGluZyBpbmZvIGtleXMgdG8gaWdub3JlIGR1cmluZyBzZXJpYWxpemF0aW9uLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRyb2wncyBwcm9wZXJ0aWVzLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVQcm9wZXJ0aWVzKFxuXHRjb250cm9sOiBDb250cm9sLFxuXHR0YWJDb3VudDogbnVtYmVyLFxuXHRvcHRpb25zPzoge1xuXHRcdGluaGVyaXRlZFByb3BlcnRpZXM/OiBib29sZWFuO1xuXHRcdGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbjtcblx0XHRpZ25vcmVLZXlzPzogc3RyaW5nW107XG5cdFx0aWdub3JlQmluZGluZ0luZm9LZXlzPzogc3RyaW5nW107XG5cdH1cbik6IHN0cmluZyB7XG5cdGxldCBkYXRhID0gXCJcIjtcblx0Y29uc3QgaWdub3JlS2V5cyA9IG9wdGlvbnM/Lmlnbm9yZUtleXMgPz8gW107XG5cdGNvbnN0IGtlZXBEeW5hbWljSWRzID0gb3B0aW9ucz8ua2VlcER5bmFtaWNJZHMgPT09IHRydWU7XG5cdGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0QWxsUHJvcGVydGllcygpKS5maWx0ZXIoKHByb3BlcnR5S2V5KSA9PiAhaWdub3JlS2V5cy5pbmNsdWRlcyhwcm9wZXJ0eUtleSkpO1xuXHRwcm9wZXJ0aWVzLnNvcnQoKTtcblx0Zm9yIChjb25zdCBwcm9wZXJ0eUtleSBvZiBwcm9wZXJ0aWVzKSB7XG5cdFx0aWYgKG9wdGlvbnM/LmluaGVyaXRlZFByb3BlcnRpZXMgPT09IHRydWUgfHwgIWNvbnRyb2wuaXNQcm9wZXJ0eUluaXRpYWwocHJvcGVydHlLZXkpKSB7XG5cdFx0XHRsZXQgcHJvcGVydHlWYWx1ZSA9IGdldFByb3BlcnR5KGNvbnRyb2wsIHByb3BlcnR5S2V5LCB7IGtlZXBEeW5hbWljSWRzIH0pO1xuXHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiICYmIHByb3BlcnR5VmFsdWUgIT09IG51bGwgJiYgIXByb3BlcnR5VmFsdWUuaXNBKSB7XG5cdFx0XHRcdGNvbnN0IHNvcnRlZEtleXMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eVZhbHVlKS5zb3J0KCk7XG5cdFx0XHRcdGNvbnN0IG5ld1Byb3BlcnR5VmFsdWUgPSB7fTtcblx0XHRcdFx0Zm9yIChjb25zdCBrZXkgb2Ygc29ydGVkS2V5cykge1xuXHRcdFx0XHRcdChuZXdQcm9wZXJ0eVZhbHVlIGFzIGFueSlba2V5XSA9IChwcm9wZXJ0eVZhbHVlIGFzIG5ldmVyKVtrZXldO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByb3BlcnR5VmFsdWUgPSBuZXdQcm9wZXJ0eVZhbHVlO1xuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtwcm9wZXJ0eUtleX06ICR7cHJvcGVydHlWYWx1ZX1gO1xuXHRcdFx0aWYgKGNvbnRyb2wuaXNCb3VuZChwcm9wZXJ0eUtleSkgJiYgIShvcHRpb25zPy5pZ25vcmVCaW5kaW5nSW5mb0tleXMgPz8gW10pLmluY2x1ZGVzKHByb3BlcnR5S2V5KSkge1xuXHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIodGFiQ291bnQpfSAke3Byb3BlcnR5S2V5fV9fQmluZGluZ0luZm86ICR7Z2V0QmluZGluZ0luZm8oY29udHJvbCwgcHJvcGVydHlLZXksIHsga2VlcER5bmFtaWNJZHMgfSl9YDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbi8qKlxuICogU2VyaWFsaXplcyB0aGUgYXNzb2NpYXRpb25zIG9mIGEgY29udHJvbCBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIHRhYkNvdW50IFRoZSBjdXJyZW50IHRhYiBsZXZlbCBmb3IgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUtleXMgTGlzdCBvZiBhc3NvY2lhdGlvbiBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250cm9sJ3MgYXNzb2NpYXRpb25zLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVBc3NvY2lhdGlvbnMoXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdHRhYkNvdW50OiBudW1iZXIsXG5cdG9wdGlvbnM/OiB7XG5cdFx0aWdub3JlS2V5cz86IHN0cmluZ1tdO1xuXHRcdGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbjtcblx0fVxuKTogc3RyaW5nIHtcblx0bGV0IGRhdGEgPSBcIlwiO1xuXHRjb25zdCBrZWVwRHluYW1pY0lkcyA9IG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzID09PSB0cnVlO1xuXHRjb25zdCBpZ25vcmVLZXlzID0gb3B0aW9ucz8uaWdub3JlS2V5cyA/PyBbXTtcblx0Y29uc3QgYXNzb2NpYXRpb25LZXlzID0gT2JqZWN0LmtleXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldEFsbEFzc29jaWF0aW9ucygpKS5maWx0ZXIoKGtleSkgPT4gIWlnbm9yZUtleXMuaW5jbHVkZXMoa2V5KSk7XG5cdGFzc29jaWF0aW9uS2V5cy5zb3J0KCk7XG5cdGZvciAoY29uc3QgYXNzb2NpYXRpb25LZXkgb2YgYXNzb2NpYXRpb25LZXlzKSB7XG5cdFx0bGV0IGFzc29jaWF0aW9uVmFsdWUgPSBjb250cm9sLmdldEFzc29jaWF0aW9uKGFzc29jaWF0aW9uS2V5LCBudWxsKTtcblx0XHRpZiAoYXNzb2NpYXRpb25WYWx1ZSkge1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBbYXNzb2NpYXRpb25WYWx1ZV07XG5cdFx0XHR9XG5cdFx0XHRpZiAoQXJyYXkuaXNBcnJheShhc3NvY2lhdGlvblZhbHVlKSAmJiBhc3NvY2lhdGlvblZhbHVlLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIGFzc29jaWF0aW9uVmFsdWVFbGVtZW50ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gTWFuYWdlZE9iamVjdE1ldGFkYXRhLmlzR2VuZXJhdGVkSWQoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQpICYmICFrZWVwRHluYW1pY0lkc1xuXHRcdFx0XHRcdFx0XHQ/IFwiX19keW5hbWljSWRcIlxuXHRcdFx0XHRcdFx0XHQ6IHJlbW92ZUR5bmFtaWNJZChhc3NvY2lhdGlvblZhbHVlRWxlbWVudCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIodGFiQ291bnQpfSAke2Fzc29jaWF0aW9uS2V5fTogJHthc3NvY2lhdGlvblZhbHVlLmpvaW4/LihcIixcIikgfHwgdW5kZWZpbmVkfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGV2ZW50cyBvZiBhIGNvbnRyb2wgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBjb250cm9sLm1FdmVudFJlZ2lzdHJ5IFRoZSBldmVudHMgb2YgdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gdGFiQ291bnQgVGhlIGN1cnJlbnQgdGFiIGxldmVsIGZvciBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIHNldHRpbmdzIGZvciBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlS2V5cyBMaXN0IG9mIGV2ZW50IGtleXMgdG8gaWdub3JlIGR1cmluZyBzZXJpYWxpemF0aW9uLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRyb2wncyBldmVudHMuXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUV2ZW50cyhcblx0Y29udHJvbDogQ29udHJvbCxcblx0dGFiQ291bnQ6IG51bWJlcixcblx0b3B0aW9ucz86IHtcblx0XHRpZ25vcmVLZXlzPzogc3RyaW5nW107XG5cdH1cbik6IHN0cmluZyB7XG5cdGxldCBkYXRhID0gXCJcIjtcblx0Y29uc3QgaW50ZXJuYWxVSTVFdmVudHMgPSBbXCJFdmVudEhhbmRsZXJDaGFuZ2VcIiwgXCJfY2hhbmdlXCJdO1xuXHRjb25zdCBpZ25vcmVLZXlzID0gb3B0aW9ucz8uaWdub3JlS2V5cyA/PyBbXTtcblx0Y29uc3QgZXZlbnRJZHMgPSBPYmplY3Qua2V5cyhjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0QWxsRXZlbnRzKCkpLmNvbmNhdChpbnRlcm5hbFVJNUV2ZW50cyk7XG5cdGV2ZW50SWRzLnNvcnQoKTtcblx0Zm9yIChjb25zdCBldmVudEtleSBvZiBldmVudElkcykge1xuXHRcdGlmIChjb250cm9sLmhhc0xpc3RlbmVycyhldmVudEtleSkgJiYgIWlnbm9yZUtleXMuaW5jbHVkZXMoZXZlbnRLZXkpKSB7XG5cdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIodGFiQ291bnQpfSAke2V2ZW50S2V5fTogdHJ1ZWA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFx0U2VyaWFsaXplcyBhIFVJNSBjb250cm9sIG9yIGFuIGFycmF5IG9mIFVJNSBjb250cm9scyBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICogQHBhcmFtIGNvbnRyb2xUb1NlcmlhbGl6ZSBUaGUgY29udHJvbCBvciBhcnJheSBvZiBjb250cm9scyB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmluaGVyaXRlZFByb3BlcnRpZXMgSWYgc2V0IHRvIHRydWUsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5zaG93Q3VzdG9tU3R5bGVDbGFzc2VzIElmIHNldCB0byB0cnVlLCBjdXN0b20gc3R5bGUgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlS2V5cyBMaXN0IG9mIHByb3BlcnR5LCBhc3NvY2lhdGlvbiwgYW5kIGV2ZW50IGtleXMgdG8gaWdub3JlIGR1cmluZyBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMuaWdub3JlQmluZGluZ0luZm9LZXlzIExpc3Qgb2YgYmluZGluZyBpbmZvIGtleXMgdG8gaWdub3JlIGR1cmluZyBzZXJpYWxpemF0aW9uLlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRyb2wgb3IgYXJyYXkgb2YgY29udHJvbHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sKFxuXHRjb250cm9sVG9TZXJpYWxpemU/OiBVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdLFxuXHRvcHRpb25zPzoge1xuXHRcdGluaGVyaXRlZFByb3BlcnRpZXM/OiBib29sZWFuO1xuXHRcdHNob3dDdXN0b21TdHlsZUNsYXNzZXM/OiBib29sZWFuO1xuXHRcdGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbjtcblx0XHRpZ25vcmVLZXlzPzogc3RyaW5nW107XG5cdFx0aWdub3JlQmluZGluZ0luZm9LZXlzPzogc3RyaW5nW107XG5cdH1cbik6IHN0cmluZyB8IHN0cmluZ1tdIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblxuXHRjb25zdCBrZWVwRHluYW1pY0lkcyA9IG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzID09PSB0cnVlO1xuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBjdXN0b21EYXRhID0gY29udHJvbC5nZXRDdXN0b21EYXRhPy4oKTtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGN1c3RvbURhdGEpICYmIGN1c3RvbURhdGEubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRjdXN0b21EYXRhLnNvcnQoKGEsIGIpID0+IGEuZ2V0S2V5KCkubG9jYWxlQ29tcGFyZShiLmdldEtleSgpKSk7XG5cdFx0XHRcdGNvbnRyb2wucmVtb3ZlQWxsQ3VzdG9tRGF0YSgpO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNkIG9mIGN1c3RvbURhdGEpIHtcblx0XHRcdFx0XHRjb250cm9sLmFkZEN1c3RvbURhdGEoY2QpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIodGFiQ291bnQpfWA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Y29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKX0oYDtcblx0XHRcdHJldHVybiBjb250cm9sRGV0YWlsO1xuXHRcdH0sXG5cdFx0ZW5kOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gXCJ9KVwiO1xuXHRcdH0sXG5cdFx0bWlkZGxlOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRsZXQgaWQgPSBjb250cm9sLmdldElkKCk7XG5cdFx0XHRpZCA9IHR5cGVvZiBpZCA9PT0gXCJzdHJpbmdcIiA/IHJlbW92ZUR5bmFtaWNJZChpZCkgOiBpZDtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkgJiYgIWtlZXBEeW5hbWljSWRzID8gXCJfX2R5bmFtaWNJZFwiIDogaWR9YDtcblx0XHRcdGRhdGEgKz0gc2VyaWFsaXplUHJvcGVydGllcyhjb250cm9sLCB0YWJDb3VudCwgb3B0aW9ucyk7XG5cdFx0XHRpZiAoY29udHJvbC5tQWdncmVnYXRpb25zPy50b29sdGlwICYmIHR5cGVvZiBjb250cm9sLm1BZ2dyZWdhdGlvbnM/LnRvb2x0aXAgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0Ly8gaW4gY2FzZSB0ZWggdG9vbHRpcCBpcyBzdG9yZWQgYSBzIHN0cmluZyB0aGUgc2VyaWFsaXphdGlvbiBuZWVkcyB0byBiZSBkb25lIG1hbnVhbGx5XG5cdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYih0YWJDb3VudCl9IHRvb2x0aXA6ICR7Y29udHJvbC5tQWdncmVnYXRpb25zLnRvb2x0aXB9YDtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gc2VyaWFsaXplQXNzb2NpYXRpb25zKGNvbnRyb2wsIHRhYkNvdW50LCBvcHRpb25zKTtcblx0XHRcdGlmIChvcHRpb25zPy5zaG93Q3VzdG9tU3R5bGVDbGFzc2VzID09PSB0cnVlICYmIGNvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcz8ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIodGFiQ291bnQpfSBjdXN0b21TdHlsZUNsYXNzZXMgOiAke2NvbnRyb2wuYUN1c3RvbVN0eWxlQ2xhc3Nlcy5qb2luKFwiLCBcIil9YDtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gc2VyaWFsaXplRXZlbnRzKGNvbnRyb2wsIHRhYkNvdW50LCBvcHRpb25zKTtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IHsgbUJpbmRpbmdJbmZvczogUmVjb3JkPHN0cmluZywgQmFzZUFnZ3JlZ2F0aW9uQmluZGluZ0luZm8+IH0sIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0ke3NOYW1lfWA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRvdXQgKz0gYD17IHBhdGg6JyR7Y29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXS5wYXRofScsIHRlbXBsYXRlOlxcbiR7Z2V0VGFiKHRhYkNvdW50KX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3V0ICs9IGA9W1xcbiR7Z2V0VGFiKHRhYkNvdW50KX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9LFxuXHRcdGVuZEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHR0YWJDb3VudC0tO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYih0YWJDb3VudCl9fWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX1dYDtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2xUb1NlcmlhbGl6ZSkpIHtcblx0XHRyZXR1cm4gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBVSTVFbGVtZW50KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1NlcmlhbGl6ZSwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sQXNYTUwoXG5cdGNvbnRyb2xUb1NlcmlhbGl6ZT86IE1hbmFnZWRPYmplY3QgfCBNYW5hZ2VkT2JqZWN0W10gfCBudWxsLFxuXHRzaG93Q3VzdG9tU3R5bGVDbGFzc2VzID0gZmFsc2UsXG5cdHByZWZlclZhbHVlID0gZmFsc2UsXG5cdGlnbm9yZUtleXM6IHN0cmluZ1tdID0gW11cbikge1xuXHRsZXQgdGFiQ291bnQgPSAwO1xuXHRjb25zdCBkZWZpbmVkTmFtZXNwYWNlczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG5cdGZ1bmN0aW9uIGdldE5hbWVzcGFjZUFsaWFzKGNsYXNzTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBuYW1lc1NwbGl0ID0gY2xhc3NOYW1lLnNwbGl0KFwiLlwiKTtcblx0XHRjb25zdCBuYW1lc3BhY2UgPSBuYW1lc1NwbGl0LnNsaWNlKDAsIC0xKTtcblx0XHRsZXQgbmFtZXNwYWNlQWxpYXMgPSBuYW1lc3BhY2VbbmFtZXNwYWNlLmxlbmd0aCAtIDFdO1xuXHRcdGlmIChyZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXSkge1xuXHRcdFx0bmFtZXNwYWNlQWxpYXMgPSByZXZlc2VOYW1lc3BhY2VNYXBbbmFtZXNwYWNlLmpvaW4oXCIuXCIpXTtcblx0XHR9XG5cdFx0aWYgKG5hbWVzcGFjZUFsaWFzID09PSB1bmRlZmluZWQpIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gXCJ0ZXN0XCI7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lc3BhY2VBbGlhcztcblx0fVxuXG5cdGNvbnN0IHNlcmlhbGl6ZURlbGVnYXRlID0ge1xuXHRcdHN0YXJ0OiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLmdldFBhcmVudCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXhJblBhcmVudCA9IChjb250cm9sLmdldFBhcmVudCgpLmdldEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUpIGFzIE1hbmFnZWRPYmplY3RbXSk/LmluZGV4T2Y/Lihjb250cm9sKTtcblx0XHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYDwke25hbWVzcGFjZUFsaWFzfToke25hbWV9XFxuYDtcblx0XHRcdGlmICghZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKSB7XG5cdFx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSA9IDE7XG5cdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCR7Z2V0VGFiKHRhYkNvdW50KX14bWxuczoke25hbWVzcGFjZUFsaWFzfT1cIiR7bmFtZVNwYWNlTWFwW25hbWVzcGFjZUFsaWFzXX1cIlxcbmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10rKztcblx0XHRcdH1cblx0XHRcdHJldHVybiBjb250cm9sRGV0YWlsO1xuXHRcdH0sXG5cdFx0ZW5kOiBmdW5jdGlvbiAoY29udHJvbDogYW55KSB7XG5cdFx0XHRjb25zdCBuYW1lRnVsbCA9IGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCk7XG5cdFx0XHRjb25zdCBuYW1lc1NwbGl0ID0gbmFtZUZ1bGwuc3BsaXQoXCIuXCIpO1xuXHRcdFx0Y29uc3QgbmFtZSA9IG5hbWVzU3BsaXRbbmFtZXNTcGxpdC5sZW5ndGggLSAxXTtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMobmFtZUZ1bGwpO1xuXHRcdFx0bGV0IGhhc0FnZ3JlZ2F0aW9uID0gZmFsc2U7XG5cdFx0XHRmb3IgKGNvbnN0IG1BZ2dyZWdhdGlvbnNLZXkgaW4gY29udHJvbC5tQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoIUFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IHVuZGVmaW5lZCkgfHxcblx0XHRcdFx0XHQoQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmIGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XS5sZW5ndGggPiAwKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRoYXNBZ2dyZWdhdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXS0tO1xuXHRcdFx0aWYgKGhhc0FnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBgPC8ke25hbWVzcGFjZUFsaWFzfToke25hbWV9PmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYC8+YDtcblx0XHRcdH1cblx0XHR9LFxuXHRcdG1pZGRsZTogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0bGV0IGlkID0gY29udHJvbC5nZXRJZCgpO1xuXHRcdFx0aWQgPSB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgPyByZW1vdmVEeW5hbWljSWQoaWQpIDogaWQ7XG5cdFx0XHRsZXQgZGF0YSA9IFwiXCI7XG5cdFx0XHRpZiAoIU1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGlkKSkge1xuXHRcdFx0XHRkYXRhID0gYGlkPVwiJHtpZH1cImA7XG5cdFx0XHR9XG5cdFx0XHRsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbnRyb2wubVByb3BlcnRpZXMpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BOYW1lKSA9PiBwcm9wTmFtZSAhPT0gXCJpZFwiKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wubUJpbmRpbmdJbmZvcykpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldEFsbEFzc29jaWF0aW9ucygpKSlcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1FdmVudFJlZ2lzdHJ5KSlcblx0XHRcdFx0LmZpbHRlcigocHJvcE5hbWUpID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKHByb3BOYW1lKSk7XG5cdFx0XHRrZXlzID0ga2V5cy5zb3J0KChhLCBiKSA9PiBhLmxvY2FsZUNvbXBhcmUoYikpO1xuXHRcdFx0Y29uc3QgdW5pcXVlS2V5cyA9IG5ldyBTZXQoa2V5cyk7XG5cdFx0XHRrZXlzID0gQXJyYXkuZnJvbSh1bmlxdWVLZXlzKTtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgb2Yga2V5cykge1xuXHRcdFx0XHRpZiAoIXByZWZlclZhbHVlICYmIGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0geyAuLi5jb250cm9sLm1CaW5kaW5nSW5mb3Nbb0NvbnRyb2xLZXldIH07XG5cdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwuYmluZGluZ1N0cmluZykge1xuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIodGFiQ291bnQpfSR7b0NvbnRyb2xLZXl9PVwiJHtiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcucmVwbGFjZShcIj5cIiwgXCImZ3Q7XCIpfVwiYDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKGJpbmRpbmdEZXRhaWwudHlwZT8ub091dHB1dEZvcm1hdCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50eXBlLm9PdXRwdXRGb3JtYXQ7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwuYmluZGluZztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnRlbXBsYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLnRlbXBsYXRlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIodGFiQ291bnQpfSR7b0NvbnRyb2xLZXl9PScke0pTT04uc3RyaW5naWZ5KGJpbmRpbmdEZXRhaWwpfSdgO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSAmJiBjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bGV0IHByb3BlcnR5VmFsdWUgPSBjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdHByb3BlcnR5VmFsdWUgPSByZW1vdmVEeW5hbWljSWQocHJvcGVydHlWYWx1ZSkucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID1cblx0XHRcdFx0XHRcdFx0dHlwZW9mIHByb3BlcnR5VmFsdWUgPT09IFwib2JqZWN0XCIgPyBKU09OLnN0cmluZ2lmeShwcm9wZXJ0eVZhbHVlKS5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKSA6IHByb3BlcnR5VmFsdWU7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0Ly8gU3RyaW5naWZ5IG1heSBmYWlsIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGJ1dCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtvQ29udHJvbEtleX09XCIke3Byb3BlcnR5VmFsdWV9XCJgO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wuZ2V0QXNzb2NpYXRpb24ob0NvbnRyb2xLZXksIG51bGwpKSB7XG5cdFx0XHRcdFx0bGV0IGFzc29jaWF0aW9uVmFsdWUgPSBjb250cm9sLmdldEFzc29jaWF0aW9uKG9Db250cm9sS2V5LCBudWxsKTtcblx0XHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkpIHtcblx0XHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBbYXNzb2NpYXRpb25WYWx1ZV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGFzc29jaWF0aW9uVmFsdWUgPSBhc3NvY2lhdGlvblZhbHVlLm1hcCgoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIlxuXHRcdFx0XHRcdFx0XHQ/IHJlbW92ZUR5bmFtaWNJZChhc3NvY2lhdGlvblZhbHVlRWxlbWVudClcblx0XHRcdFx0XHRcdFx0OiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudDtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtvQ29udHJvbEtleX09XCIkeyhhc3NvY2lhdGlvblZhbHVlPy5qb2luPy4oXCIsXCIpID8/IGFzc29jaWF0aW9uVmFsdWUpIHx8IHVuZGVmaW5lZH1cImA7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeS5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRpZiAoY29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZSkge1xuXHRcdFx0XHRcdFx0ZGF0YSArPSBgXFxuJHtnZXRUYWIodGFiQ291bnQpfSAke29Db250cm9sS2V5fT1cIiR7Y29udHJvbC5tRXZlbnRSZWdpc3RyeVtvQ29udHJvbEtleV1bMF0/LmZGdW5jdGlvbj8ubmFtZX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtvQ29udHJvbEtleX09XCJzb21lRXZlbnRIYW5kbGVyXCJgO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKHNob3dDdXN0b21TdHlsZUNsYXNzZXMgJiYgY29udHJvbC5hQ3VzdG9tU3R5bGVDbGFzc2VzPy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gY3VzdG9tU3R5bGVDbGFzc2VzIDogJHtjb250cm9sLmFDdXN0b21TdHlsZUNsYXNzZXMuam9pbihcIiwgXCIpfWA7XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IGBcXG5gO1xuXHRcdFx0bGV0IGhhc0FnZ3JlZ2F0aW9uID0gZmFsc2U7XG5cdFx0XHRmb3IgKGNvbnN0IG1BZ2dyZWdhdGlvbnNLZXkgaW4gY29udHJvbC5tQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoIUFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IHVuZGVmaW5lZCkgfHxcblx0XHRcdFx0XHQoQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmIGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XS5sZW5ndGggPiAwKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRoYXNBZ2dyZWdhdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRkYXRhICs9IFwiPlwiO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblx0XHRzdGFydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0bGV0IG91dCA9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9PCR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PmA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXHRcdFx0b3V0ICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fSxcblx0XHRlbmRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0dGFiQ291bnQtLTtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRsZXQgb3V0WE1MO1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0b3V0WE1MID0gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBNYW5hZ2VkT2JqZWN0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0WE1MID0gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTChgPHJvb3Q+JHtvdXRYTUx9PC9yb290PmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2NrRnJhZ21lbnRzKC4uLmZyYWdtZW50czogTW9ja0ZyYWdtZW50W10pOiBqZXN0LlNweUluc3RhbmNlIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb3JpZ2luYWxMb2FkVGVtcGxhdGUgPSAoWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55KS5sb2FkVGVtcGxhdGVQcm9taXNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBsb2FkVGVtcGxhdGVTdHViID0gamVzdC5zcHlPbihYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnksIFwibG9hZFRlbXBsYXRlUHJvbWlzZVwiKTtcblx0bG9hZFRlbXBsYXRlU3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0aWYgKGZyYWdtZW50Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VYTUxTdHJpbmcoZnJhZ21lbnQuY29udGVudClbMF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbExvYWRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUsIGV4dGVuc2lvbik7XG5cdH0pIGFzICgoKSA9PiBFbGVtZW50KSB8IHVuZGVmaW5lZCk7XG5cdHJldHVybiBsb2FkVGVtcGxhdGVTdHViO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYXBwQ29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmNkc0ZpbGUgVGhlIHBhdGggdG8gdGhlIENEUyBmaWxlIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMubWFpbkNvbnRleHRQYXRoIFRoZSBtYWluIGNvbnRleHQgcGF0aCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VDb250ZW50IFRoZSBwYWdlIGNvbnRlbnQgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50IFRoZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLmNvbXBvbmVudElkXG4gKiBAcGFyYW0gb3B0aW9ucy5tYW5pZmVzdFNldHRpbmdzXG4gKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSB2aWV3TGV2ZWwgVGhlIHZpZXcgbGV2ZWwgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcmV0dXJucyBUaGUgYXBwY29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB0byB1c2UgZm9yIHRlc3RpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluaXRpYWxpemVBcHBDb21wb25lbnQoXG5cdG9wdGlvbnM/OiB7XG5cdFx0Y2RzRmlsZT86IHN0cmluZztcblx0XHRjb21wb25lbnRJZD86IHN0cmluZztcblx0XHRtYWluQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdFx0cGFnZUNvbnRlbnQ/OiBGdW5jdGlvbjtcblx0XHRtYW5pZmVzdFNldHRpbmdzPzogUGFydGlhbDxMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzPjtcblx0XHRmZU1hbmlmZXN0U2V0dGluZ3M/OiBQYXJ0aWFsPE1hbmlmZXN0U2V0dGluZ3NTYXBGRT47XG5cdFx0Y29udGVudD86IFBhcnRpYWw8TGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3NbXCJjb250ZW50XCJdPjtcblx0XHRndWlkPzogc3RyaW5nO1xuXHR9LFxuXHRuYW1lPzogc3RyaW5nLFxuXHR2aWV3TGV2ZWw/OiBudW1iZXJcbik6IFByb21pc2U8eyBhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudDsgdGVtcGxhdGVDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50IH0+IHtcblx0amVzdC5zcHlPbihPRGF0YU1vZGVsLnByb3RvdHlwZSwgXCJzZXRPcHRpbWlzdGljQmF0Y2hFbmFibGVyXCIpLm1vY2tSZXR1cm5WYWx1ZSh1bmRlZmluZWQpO1xuXHRsZXQgY2RzRmlsZSA9IG9wdGlvbnM/LmNkc0ZpbGU7XG5cdGlmICghY2RzRmlsZSkge1xuXHRcdGNkc0ZpbGUgPSBjb21waWxlQ0RTKHBhdGguam9pbihfX2Rpcm5hbWUsIFwiLi9kYXRhL1Byb2R1Y3RzLmNkc1wiKSk7XG5cdH1cblx0Y29uc3QgZ3VpZCA9IG9wdGlvbnM/Lmd1aWQgPz8gdWlkKCk7XG5cdGNvbnN0IGlkID0gb3B0aW9ucz8uY29tcG9uZW50SWQgPz8gYHNhcC5mZS50ZXN0LiR7Z3VpZH1gO1xuXHRjb25zdCBjZHNDb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGNkc0ZpbGUpLnRvU3RyaW5nKCk7XG5cdHdpbmRvdy5qZXN0VUk1Lm1vY2tVcmwoYC9zYXAvZmUvY29yZS9tb2NrLyR7Z3VpZH0vJG1ldGFkYXRhP3NhcC1sYW5ndWFnZT1FTmAsIGNkc0NvbnRlbnQpO1xuXHRpZiAoIW9wdGlvbnM/LnBhZ2VDb250ZW50KSB7XG5cdFx0amVzdC5zcHlPbihQYWdlQ29udHJvbGxlci5wcm90b3R5cGUsIFwiX29uSW50ZXJuYWxBZnRlckJpbmRpbmdcIikubW9ja0ltcGxlbWVudGF0aW9uKGplc3QuZm4oKSk7XG5cdH1cblx0Y2xhc3MgRGVmYXVsdFBhZ2VDb250ZW50IGV4dGVuZHMgUGFnZUNvbnRyb2xsZXIge1xuXHRcdHJlbmRlcigpIHtcblx0XHRcdHJldHVybiA8UGFnZT48L1BhZ2U+O1xuXHRcdH1cblx0fVxuXHRzYXAudWkuZGVmaW5lKGBzYXAvZmUvdGVzdC8ke2d1aWR9L0NvbXBvbmVudGAsIFtcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiXSwgZnVuY3Rpb24gKF9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkge1xuXHRcdFwidXNlIHN0cmljdFwiO1xuXG5cdFx0cmV0dXJuIEFwcENvbXBvbmVudC5leHRlbmQoYHNhcC5mZS50ZXN0LiR7Z3VpZH0uQ29tcG9uZW50YCwge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0bWFuaWZlc3Q6IHtcblx0XHRcdFx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0XHRcdFx0aWQ6IGB0ZXN0JHtndWlkfWAsXG5cdFx0XHRcdFx0XHR0aXRsZTogXCJBcHAgVGl0bGVcIixcblx0XHRcdFx0XHRcdGRhdGFTb3VyY2VzOiB7XG5cdFx0XHRcdFx0XHRcdG1haW5TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0XHRcdFx0dXJpOiBgL3NhcC9mZS9jb3JlL21vY2svJHtndWlkfS9gLFxuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiT0RhdGFcIixcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0XHRcdFx0b2RhdGFWZXJzaW9uOiBcIjQuMFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0XHRcdFwiXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRkYXRhU291cmNlOiBcIm1haW5TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHt9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldHM6IHtcblx0XHRcdFx0XHRcdFx0XHREZWZhdWx0OiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIkNvbXBvbmVudFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogbmFtZSA/PyBcInNhcC5mZS5jb3JlLmZwbVwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IFwiRGVmYXVsdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmlld0xldmVsOiB2aWV3TGV2ZWwsXG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Li4uKG9wdGlvbnM/Lm1hbmlmZXN0U2V0dGluZ3MgPz8ge30pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvcHRpb25zPy5tYWluQ29udGV4dFBhdGggPz8gXCIvUHJvZHVjdHNcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3VHlwZTogXCJKU1hcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2aWV3Q29udGVudDogb3B0aW9ucz8ucGFnZUNvbnRlbnQgPz8gRGVmYXVsdFBhZ2VDb250ZW50LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnRlbnQ6IG9wdGlvbnM/LmNvbnRlbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0cm91dGVzOiBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogXCI6P3F1ZXJ5OlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZTogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR0YXJnZXQ6IFwiRGVmYXVsdFwiXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcInNhcC5mZVwiOiBvcHRpb25zPy5mZU1hbmlmZXN0U2V0dGluZ3MgPz8ge31cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblx0amVzdC5zcHlPbihFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UucHJvdG90eXBlLCBcImdldENhcGFiaWxpdGllc1wiKS5tb2NrUmV0dXJuVmFsdWUoRGVmYXVsdEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKTtcblx0Y29uc3QgbW9ja0FwcENvbXBvbmVudCA9IChhd2FpdCBDb21wb25lbnQuY3JlYXRlKHsgbmFtZTogYHNhcC5mZS50ZXN0LiR7Z3VpZH1gLCBpZDogaWQgfSkpIGFzIEFwcENvbXBvbmVudDtcblxuXHRhd2FpdCBtb2NrQXBwQ29tcG9uZW50LmluaXRpYWxpemVkO1xuXHRjb25zdCB2ID0gYXdhaXQgKG1vY2tBcHBDb21wb25lbnQuZ2V0Um91dGVyKCkuZ2V0VGFyZ2V0KFwiRGVmYXVsdFwiKSBhcyB7IGxvYWQ/OiBGdW5jdGlvbiB9KS5sb2FkPy4oKTtcblx0cmV0dXJuIHsgYXBwQ29tcG9uZW50OiBtb2NrQXBwQ29tcG9uZW50LCB0ZW1wbGF0ZUNvbXBvbmVudDogdi5vYmplY3QgfTtcbn1cblxuLyoqXG4gKiBGaW5kIGFuIGVsZW1lbnQgaW4gYSBjb2xsZWN0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gc2VsZWN0b3IuXG4gKiBAcGFyYW0gY29sbGVjdGlvblxuICogQHBhcmFtIHNlbGVjdG9yXG4gKiBAcmV0dXJucyBUaGUgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yIG9yIHVuZGVmaW5lZCBpZiBubyBlbGVtZW50IG1hdGNoZXMgdGhlIHNlbGVjdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kRWxlbWVudChjb2xsZWN0aW9uOiBIVE1MQ29sbGVjdGlvbiwgc2VsZWN0b3I6IChlbGVtZW50OiBIVE1MRWxlbWVudCkgPT4gYm9vbGVhbik6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBjb2xsZWN0aW9uLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3QgZWxlbWVudCA9IGNvbGxlY3Rpb24uaXRlbShpKSBhcyBIVE1MRWxlbWVudDtcblx0XHRpZiAoc2VsZWN0b3IoZWxlbWVudCkpIHtcblx0XHRcdHJldHVybiBlbGVtZW50O1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFdhaXQgZm9yIGFuIGV2ZW50IHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nLlxuICogQHBhcmFtIGNvbnRyb2xcbiAqIEBwYXJhbSBldmVudE5hbWVcbiAqIEByZXR1cm5zIEEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGV2ZW50IGlzIHJlY2VpdmVkXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yRXZlbnQ8VCBleHRlbmRzIHt9Pihjb250cm9sOiBFdmVudFByb3ZpZGVyLCBldmVudE5hbWU6IHN0cmluZyk6IFByb21pc2U8VUk1RXZlbnQ8VD4+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0Y29udHJvbC5hdHRhY2hFdmVudE9uY2UoZXZlbnROYW1lLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG5cdFx0XHRyZXNvbHZlKGV2ZW50IGFzIHVua25vd24gYXMgVUk1RXZlbnQ8VD4pO1xuXHRcdH0pO1xuXHR9KTtcbn1cblxuLyoqXG4gKiBUZWxsIHRoZSBiaW5kaW5nIHBhcnNlciB0byBrZWVwIHRoZSBiaW5kaW5nIHN0cmluZ3MgZm9yIHRlc3RpbmcuXG4gKiBAcGFyYW0gZW5hYmxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ga2VlcEJpbmRpbmdTdHJpbmdGb3JUZXN0KGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0QmluZGluZ1BhcnNlci5fa2VlcEJpbmRpbmdTdHJpbmdzID0gZW5hYmxlZDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGF5Rm9yKGRlbGF5OiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XG5cdFx0c2V0VGltZW91dChyZXNvbHZlLCBkZWxheSk7XG5cdH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxRkFBLEdBQUcsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsRUFBUyxrQ0FBa0MsQ0FBQztFQUMxREMsSUFBSSxDQUFDQyxVQUFVLENBQUMsS0FBSyxDQUFDO0VBRXRCLE1BQU1DLFlBQW9DLEdBQUc7SUFDNUNDLEtBQUssRUFBRSxlQUFlO0lBQ3RCQyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDQyxNQUFNLEVBQUUsZUFBZTtJQUN2QkMsSUFBSSxFQUFFLHVDQUF1QztJQUM3Q0MsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQ0MsU0FBUyxFQUFFLGtFQUFrRTtJQUM3RUMsR0FBRyxFQUFFLGtFQUFrRTtJQUN2RUMsVUFBVSxFQUFFLGtFQUFrRTtJQUM5RUMsT0FBTyxFQUFFLHNCQUFzQjtJQUMvQkMsUUFBUSxFQUFFLHdCQUF3QjtJQUNsQ0MsSUFBSSxFQUFFLGFBQWE7SUFDbkJDLEVBQUUsRUFBRSxXQUFXO0lBQ2ZDLENBQUMsRUFBRSxPQUFPO0lBQ1ZDLENBQUMsRUFBRSxvQkFBb0I7SUFDdkJDLEVBQUUsRUFBRSxXQUFXO0lBQ2ZDLGFBQWEsRUFBRSx3QkFBd0I7SUFDdkNDLEdBQUcsRUFBRSxZQUFZO0lBQ2pCQyxhQUFhLEVBQUUsMEJBQTBCO0lBQ3pDQyxRQUFRLEVBQUUsa0JBQWtCO0lBQzVCQyxRQUFRLEVBQUUsa0JBQWtCO0lBQzVCQyxDQUFDLEVBQUUsZ0JBQWdCO0lBQ25CQyxJQUFJLEVBQUUsVUFBVTtJQUNoQkMsZUFBZSxFQUFFLDBCQUEwQjtJQUMzQ0MsVUFBVSxFQUFFLHlCQUF5QjtJQUNyQ0MsVUFBVSxFQUFFLHFCQUFxQjtJQUNqQ0MsS0FBSyxFQUFFLDhCQUE4QjtJQUNyQ0MsSUFBSSxFQUFF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Q0FBQyxDQUFDQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQXlCQyxJQUFJLEdBQUcsQ0FBQztJQUNuRyxPQUFPO01BQUVsZSxZQUFZLEVBQUU2ZCxnQkFBZ0I7TUFBRTNLLGlCQUFpQixFQUFFNkssQ0FBQyxDQUFDSTtJQUFPLENBQUM7RUFDdkU7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBTEF2YixRQUFBLENBQUFrUSxzQkFBQSxHQUFBQSxzQkFBQTtFQU1PLFNBQVNzTCxXQUFXQSxDQUFDQyxVQUEwQixFQUFFNWYsUUFBMkMsRUFBMkI7SUFDN0gsS0FBSyxJQUFJK1YsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHNkosVUFBVSxDQUFDcmMsTUFBTSxFQUFFd1MsQ0FBQyxFQUFFLEVBQUU7TUFDM0MsTUFBTThKLE9BQU8sR0FBR0QsVUFBVSxDQUFDRSxJQUFJLENBQUMvSixDQUFDLENBQWdCO01BQ2pELElBQUkvVixRQUFRLENBQUM2ZixPQUFPLENBQUMsRUFBRTtRQUN0QixPQUFPQSxPQUFPO01BQ2Y7SUFDRDtJQUNBLE9BQU9oZSxTQUFTO0VBQ2pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUxBc0MsUUFBQSxDQUFBd2IsV0FBQSxHQUFBQSxXQUFBO0VBTU8sZUFBZUksWUFBWUEsQ0FBZXJpQixPQUFzQixFQUFFc2lCLFNBQWlCLEVBQXdCO0lBQ2pILE9BQU8sSUFBSXBRLE9BQU8sQ0FBRTVILE9BQU8sSUFBSztNQUMvQnRLLE9BQU8sQ0FBQ3VpQixlQUFlLENBQUNELFNBQVMsRUFBR0UsS0FBWSxJQUFLO1FBQ3BEbFksT0FBTyxDQUFDa1ksS0FBK0IsQ0FBQztNQUN6QyxDQUFDLENBQUM7SUFDSCxDQUFDLENBQUM7RUFDSDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtFQUhBL2IsUUFBQSxDQUFBNGIsWUFBQSxHQUFBQSxZQUFBO0VBSU8sU0FBU0ksd0JBQXdCQSxDQUFDQyxPQUFnQixFQUFRO0lBQ2hFQyxhQUFhLENBQUNDLG1CQUFtQixHQUFHRixPQUFPO0VBQzVDO0VBQUNqYyxRQUFBLENBQUFnYyx3QkFBQSxHQUFBQSx3QkFBQTtFQUVNLGVBQWVJLFFBQVFBLENBQUNDLEtBQWEsRUFBaUI7SUFDNUQsT0FBTyxJQUFJNVEsT0FBTyxDQUFRNUgsT0FBTyxJQUFLO01BQ3JDaEwsVUFBVSxDQUFDZ0wsT0FBTyxFQUFFd1ksS0FBSyxDQUFDO0lBQzNCLENBQUMsQ0FBQztFQUNIO0VBQUNyYyxRQUFBLENBQUFvYyxRQUFBLEdBQUFBLFFBQUE7RUFBQSxPQUFBcGMsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
1323
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMb2ciLCJzZXRMZXZlbCIsImplc3QiLCJzZXRUaW1lb3V0IiwibmFtZVNwYWNlTWFwIiwibWFjcm8iLCJtYWNyb1NoYXJlIiwibWFjcm9zIiwiZmVCQiIsIm1hY3JvRmllbGQiLCJtYWNyb2RhdGEiLCJsb2ciLCJjdXN0b21EYXRhIiwiY29udHJvbCIsImNvbnRyb2xzIiwiY29yZSIsImR0IiwibSIsImYiLCJmbCIsImludGVybmFsTWFjcm8iLCJtZGMiLCJhY3Rpb250b29sYmFyIiwibWRjRmllbGQiLCJtZGNUYWJsZSIsInUiLCJ1eGFwIiwibWFjcm9NaWNyb0NoYXJ0IiwibWljcm9DaGFydCIsIm1hY3JvVGFibGUiLCJtZGN2YyIsIm1kY3YiLCJ2YWx1ZUhlbHAiLCJjb250ZW50U3dpdGNoZXIiLCJmaWx0ZXJCYXIiLCJkcmFmdEluZGljYXRvciIsInZpc3VhbGZpbHRlcnMiLCJmaWVsZGhlbHAiLCJyZXZlc2VOYW1lc3BhY2VNYXAiLCJPYmplY3QiLCJrZXlzIiwicmVkdWNlIiwicmV2ZXJzZU1hcCIsImN1cnJlbnROYW1lIiwic2VsZWN0IiwieHBhdGgiLCJ1c2VOYW1lc3BhY2VzIiwiZGVmYXVsdEZha2VTaWRlRWZmZWN0U2VydmljZSIsImNvbXB1dGVGaWVsZEdyb3VwSWRzIiwiX2dldFRlbXBsYXRlZFNlbGVjdG9yIiwieG1sZG9tIiwic2VsZWN0b3IiLCJyb290UGF0aCIsIm5vZGVOYW1lIiwic3RhcnRzV2l0aCIsIl9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzIiwic01ldGFkYXRhVXJsIiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJmYWtlU2lkZUVmZmVjdFNlcnZpY2UiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJjb252ZXJ0ZXJDb250ZXh0IiwiVGVtcGxhdGVNb2RlbCIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsInNldHRpbmdzIiwibW9kZWxzIiwibWV0YU1vZGVsIiwiYmluZGluZ0NvbnRleHRzIiwiYXBwQ29tcG9uZW50IiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJfZ2V0VGFyZ2V0SW5mb3JtYXRpb24iLCJmbiIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldERpYWdub3N0aWNzIiwidW5kZWZpbmVkIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE1hbmlmZXN0RW50cnkiLCJtb2NrUmV0dXJuVmFsdWUiLCJzS2V5IiwiZXhwZWN0IiwiZ2V0T2JqZWN0IiwidG9CZURlZmluZWQiLCJvTW9kZWwiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIl9sb2FkUmVzb3VyY2VWaWV3Iiwidmlld05hbWUiLCJuYW1lIiwicmVwbGFjZSIsInZpZXciLCJMb2FkZXJFeHRlbnNpb25zIiwibG9hZFJlc291cmNlIiwiZG9jdW1lbnRFbGVtZW50IiwicnVuWFBhdGhRdWVyeSIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwibGVuZ3RoIiwidG9Ob3RIYXZlQ29udHJvbCIsInRvSGF2ZVRlbXBsYXRpbmdFcnJvcnMiLCJ4bWwiLCJ4bWxUZXh0IiwiYmFzZTY0RW50cmllcyIsIm1hdGNoIiwiZXJyb3JNZXNzYWdlcyIsIm1hcCIsImF0b2IiLCJzbGljZSIsImpvaW4iLCJfZXhwb3J0cyIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJmb3JtYXRYTUwiLCJnZXRDb250cm9sQXR0cmlidXRlIiwiY29udHJvbFNlbGVjdG9yIiwiYXR0cmlidXRlTmFtZSIsInhtbERvbSIsIm9wdGlvbnMiLCJzZXJpYWxpemVyIiwid2luZG93IiwiWE1MU2VyaWFsaXplciIsIm5vZGUiLCJzZXJpYWxpemVUb1N0cmluZyIsIlNUQVJUIiwiRU5EIiwibGluZXMiLCJjdXJyZW50TGluZSIsImxldmVsIiwiYXR0cmlidXRlcyIsIm5ld2xpbmUiLCJwdXNoIiwicmVwZWF0IiwiYXBwZW5kQXR0cmlidXRlcyIsInNvcnQiLCJhIiwiYiIsImxvY2FsZUNvbXBhcmUiLCJpbmNsdWRlcyIsImF0dHJpYnV0ZSIsInZhbHVlIiwiYXBwZW5kIiwicGFyc2VyIiwicmVhZCIsImNyZWF0ZVBhcnNlciIsIm9uT3BlblRhZ1N0YXJ0Iiwib25PcGVuVGFnTmFtZSIsIm9uQXR0ck5hbWUiLCJ1bnNoaWZ0Iiwib25BdHRyVmFsdWUiLCJrZWVwRHluYW1pY0lkcyIsInJlbW92ZUR5bmFtaWNJZCIsIm9uT3BlblRhZ0VuZCIsInNlbGZDbG9zZWQiLCJvbkNsb3NlVGFnU3RhcnQiLCJvbkNsb3NlVGFnTmFtZSIsIm9uQ2xvc2VUYWdFbmQiLCJwYXJzZSIsInRyaW0iLCJjb21waWxlQ0RTIiwiY2RzVXJsIiwiYXJndW1lbnRzIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicGF0aCIsInJlc29sdmUiLCJhbGxPcHRpb25zIiwiZW50cmllcyIsImVkbXhGaWxlTmFtZSIsImZpbGVuYW1lIiwiX3JlZiIsIm9wdGlvbktleSIsIm9wdGlvblZhbHVlIiwidG9TdHJpbmciLCJiYXNlbmFtZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsInJlcXVpcmUiLCJjc24iLCJjb21waWxlciIsImNvbXBpbGVTb3VyY2VzIiwiZWRteE9wdGlvbnMiLCJvZGF0YUZvcmVpZ25LZXlzIiwib2RhdGFGb3JtYXQiLCJvZGF0YUNvbnRhaW5tZW50IiwiZWRteCIsInRvIiwiRXJyb3IiLCJnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlIiwiY2xhc3NOYW1lT0RhdGFNb2RlbCIsInNjb3BlT2JqZWN0IiwiZ2V0TW9kZWwiLCJpc0EiLCJnZXRTZXJ2aWNlVXJsIiwiZ2V0U2VydmljZSIsImdldENhcGFiaWxpdGllcyIsInNlcnZpY2VJbnN0YW5jZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwic2NvcGVUeXBlIiwiZ2V0SW50ZXJmYWNlIiwiZ2V0RmFrZURpYWdub3N0aWNzIiwiaXNzdWVzIiwiYWRkSXNzdWUiLCJpc3N1ZUNhdGVnb3J5IiwiaXNzdWVTZXZlcml0eSIsImRldGFpbHMiLCJnZXRJc3N1ZXMiLCJjaGVja0lmSXNzdWVFeGlzdHMiLCJmaW5kIiwiaXNzdWUiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJjb252ZXJ0ZWRUeXBlcyIsImNvbnZlcnRUeXBlcyIsImRhdGFNb2RlbFBhdGgiLCJjb250ZXh0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImVudGl0eVNldCIsIkNvbnZlcnRlckNvbnRleHQiLCJNYW5pZmVzdFdyYXBwZXIiLCJtZXRhTW9kZWxDYWNoZSIsIm9SZXF1ZXN0b3IiLCJfTWV0YWRhdGFSZXF1ZXN0b3IiLCJjcmVhdGUiLCJPRGF0YU1ldGFNb2RlbCIsIl9yZXF1ZXN0QW5ub3RhdGlvbkNoYW5nZXMiLCJmZXRjaEVudGl0eUNvbnRhaW5lciIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsInByb3BlcnR5IiwidGFyZ2V0UGF0aCIsInN0YXJ0aW5nRW50aXR5U2V0IiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRPYmplY3QiLCJ0YXJnZXRFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsImNvbnRleHRMb2NhdGlvbiIsImV2YWx1YXRlQmluZGluZyIsImJpbmRpbmdTdHJpbmciLCJiaW5kaW5nRWxlbWVudCIsIkJpbmRpbmdJbmZvIiwiX2xlbiIsImFyZ3MiLCJfa2V5IiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwiLCJtb2RlbENvbnRlbnQiLCJuYW1lZE1vZGVsc0NvbnRlbnQiLCJfZm9ybWF0dGVycyIsIlZhbHVlRm9ybWF0dGVyIiwidGV4dCIsIkludmlzaWJsZVRleHQiLCJiaW5kUHJvcGVydHkiLCJkZWZhdWx0TW9kZWwiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsInNldEJpbmRpbmdDb250ZXh0IiwiY29udGVudCIsIm1vZGVsIiwiZ2V0VGV4dCIsIlRFU1RWSUVXSUQiLCJhcHBseUZsZXhDaGFuZ2VzIiwiZmxleENoYW5nZXMiLCJyZXN1bHRYTUwiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaWQiLCJjaGFuZ2VzIiwiY3JlYXRlRmxleGliaWxpdHlDaGFuZ2VzT2JqZWN0IiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJ0eXBlIiwiY3Jvc3NOYXZpZ2F0aW9uIiwib3V0Ym91bmRzIiwib0FwcENvbXBvbmVudCIsImdldENvbXBvbmVudERhdGEiLCJnZXRNYW5pZmVzdE9iamVjdCIsImdldEVudHJ5IiwiZ2V0TG9jYWxJZCIsInNJZCIsInNweU9uQXBwU3RvcmFnZSIsInNweU9uIiwiQXBwU3RvcmFnZSIsIlByb21pc2UiLCJzcHlPbkxvYWRlciIsIkxvYWRlciIsInBhcmFtZXRlcnMiLCJsb2FkZXJDYWNoZUtleSIsInNweU9uQ29tcG9uZW50IiwiQ29tcG9uZW50Iiwic3B5T25VdGlscyIsIlV0aWxzIiwiRmxleFN0YXRlIiwiaW5pdGlhbGl6ZSIsImNvbXBvbmVudElkIiwiWG1sUHJlcHJvY2Vzc29yIiwicHJvY2VzcyIsImNoYW5nZXNBcHBsaWVkIiwiZ2V0Q2hhbmdlc0Zyb21YTUwiLCJ0b0JlIiwidmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzIiwibW9ja1Jlc3RvcmUiLCJmbGF0TWFwIiwiZSIsImZpbHRlciIsImF0dHIiLCJnZXRUZW1wbGF0aW5nUmVzdWx0IiwieG1sSW5wdXQiLCJjcmVhdGVNb2NrUmVzb3VyY2VNb2RlbCIsInRlbXBsYXRlZFhtbCIsIkRPTVBhcnNlciIsInhtbERvYyIsInBhcnNlRnJvbVN0cmluZyIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIlhNTFByZXByb2Nlc3NvciIsImZpcnN0RWxlbWVudENoaWxkIiwiZ2V0VGVtcGxhdGVkWE1MIiwianN4IiwiZGVmaW5lWE1MTmFtZXNwYWNlTWFwIiwidGVtcGxhdGVkWE1MIiwic2VyaWFsaWVkWE1MIiwibm90IiwicHJvY2Vzc1ZpZXciLCJvVmlld0RvY3VtZW50Iiwib1ByZXByb2Nlc3NlZFZpZXciLCJhc0VsZW1lbnQiLCJhc1N0cmluZyIsIm91dGVySFRNTCIsImJ1aWxkVmlldyIsInByb3BlcnRpZXMiLCJ0ZW1wbGF0ZVR5cGUiLCJ0ZW1wbGF0ZU5hbWUiLCJUZW1wbGF0ZVR5cGUiLCJMaXN0UmVwb3J0IiwiT2JqZWN0UGFnZSIsIm1ldGFkYXRhVXJsIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJBcHBTdGF0ZSIsIkNoYXJ0IiwiQ29sbGFib3JhdGlvbiIsIkludGVudEJhc2VkTmF2aWdhdGlvbiIsIk1pY3JvQ2hhcnQiLCJVU2hlbGwiLCJJbnNpZ2h0c1N1cHBvcnRlZCIsIkNvbnRleHRTaGFyaW5nU3VwcG9ydGVkIiwiU21hcnRTdW1tYXJpemUiLCJNYWdpY0ZpbHRlcmluZyIsIkRpc2FibGVJbnB1dEFzc2lzdGFuY2UiLCJIaWRkZW5EcmFmdCIsImNvbnZlcnRlclBhZ2VNb2RlbCIsImNvbnZlcnRQYWdlIiwibW9jayIsIkRpYWdub3N0aWNzIiwiaW50ZXJuYWxNb2RlbHMiLCJ2aWV3RGF0YSIsImFwcEluaXQiLCJpbml0aWFsaXplQXBwQ29tcG9uZW50IiwiY2RzRmlsZSIsIm1haW5Db250ZXh0UGF0aCIsInByb2Nlc3NlZFZpZXciLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsInJ1bkFzT3duZXIiLCJYTUxWaWV3IiwiZGVmaW5pdGlvbiIsIlZpZXdJZCIsInByb2Nlc3NGcmFnbWVudCIsInRlc3REYXRhIiwiaW5wdXRYbWwiLCJpbnB1dERvYyIsImpzb25Nb2RlbCIsInNldERhdGEiLCJyZXN1bHREb2MiLCJmcmFnbWVudHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImZyYWdtZW50IiwiaW5uZXJIVE1MIiwieG1sUmVzdWx0IiwiY2hpbGRyZW4iLCJnZXRUYWIiLCJ0YWJDb3VudCIsInRvQWRkIiwidGFiIiwiaSIsIlVJRCIsIkNPTlRST0xJRCIsImdldFByb3BlcnR5IiwicHJvcGVydHlLZXkiLCJwcm9wZXJ0eVZhbHVlIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldEJpbmRpbmdJbmZvIiwiYmluZGluZ0RldGFpbCIsIm9PdXRwdXRGb3JtYXQiLCJ0eXBlTmFtZSIsImdldE1ldGFkYXRhIiwiZ2V0TmFtZSIsImJpbmRpbmciLCJzZXJpYWxpemVQcm9wZXJ0aWVzIiwiaWdub3JlS2V5cyIsImdldEFsbFByb3BlcnRpZXMiLCJpbmhlcml0ZWRQcm9wZXJ0aWVzIiwiaXNQcm9wZXJ0eUluaXRpYWwiLCJzb3J0ZWRLZXlzIiwibmV3UHJvcGVydHlWYWx1ZSIsImtleSIsImlzQm91bmQiLCJpZ25vcmVCaW5kaW5nSW5mb0tleXMiLCJzZXJpYWxpemVBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbktleXMiLCJnZXRBbGxBc3NvY2lhdGlvbnMiLCJhc3NvY2lhdGlvbktleSIsImFzc29jaWF0aW9uVmFsdWUiLCJnZXRBc3NvY2lhdGlvbiIsImFzc29jaWF0aW9uVmFsdWVFbGVtZW50IiwiTWFuYWdlZE9iamVjdE1ldGFkYXRhIiwiaXNHZW5lcmF0ZWRJZCIsInNlcmlhbGl6ZUV2ZW50cyIsImludGVybmFsVUk1RXZlbnRzIiwiZXZlbnRJZHMiLCJnZXRBbGxFdmVudHMiLCJjb25jYXQiLCJldmVudEtleSIsImhhc0xpc3RlbmVycyIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJzZXJpYWxpemVEZWxlZ2F0ZSIsInN0YXJ0Iiwic0FnZ3JlZ2F0aW9uTmFtZSIsImdldEN1c3RvbURhdGEiLCJnZXRLZXkiLCJyZW1vdmVBbGxDdXN0b21EYXRhIiwiY2QiLCJjZFZhbHVlIiwiZ2V0VmFsdWUiLCJub3JtYWxpemVDdXN0b21EYXRhIiwic2V0VmFsdWUiLCJhZGRDdXN0b21EYXRhIiwiY29udHJvbERldGFpbCIsImdldFBhcmVudCIsImluZGV4SW5QYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJlbmQiLCJtaWRkbGUiLCJnZXRJZCIsIm1BZ2dyZWdhdGlvbnMiLCJ0b29sdGlwIiwic2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyIsImdldEN1c3RvbVN0eWxlQ2xhc3NlcyIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsIm1CaW5kaW5nSW5mb3MiLCJlbmRBZ2dyZWdhdGlvbiIsImNvbnRyb2xUb1JlbmRlciIsIlNlcmlhbGl6ZXIiLCJzZXJpYWxpemUiLCJhQ3VzdG9tU3R5bGVDbGFzc2VzIiwic2VyaWFsaXplQ29udHJvbEFzWE1MIiwicHJlZmVyVmFsdWUiLCJkZWZpbmVkTmFtZXNwYWNlcyIsImdldE5hbWVzcGFjZUFsaWFzIiwiY2xhc3NOYW1lIiwibmFtZXNTcGxpdCIsInNwbGl0IiwibmFtZXNwYWNlIiwibmFtZXNwYWNlQWxpYXMiLCJuYW1lRnVsbCIsImhhc0FnZ3JlZ2F0aW9uIiwibUFnZ3JlZ2F0aW9uc0tleSIsIm1Qcm9wZXJ0aWVzIiwicHJvcE5hbWUiLCJtRXZlbnRSZWdpc3RyeSIsInVuaXF1ZUtleXMiLCJTZXQiLCJmcm9tIiwib0NvbnRyb2xLZXkiLCJ0ZW1wbGF0ZSIsImZGdW5jdGlvbiIsIm91dFhNTCIsImNyZWF0ZUF3YWl0ZXIiLCJmblJlc29sdmUiLCJteVByb21pc2UiLCJwcm9taXNlIiwicmVnaXN0ZXJNb2NrRnJhZ21lbnRzIiwiX2xlbjIiLCJfa2V5MiIsIm9yaWdpbmFsTG9hZFRlbXBsYXRlIiwiWE1MVGVtcGxhdGVQcm9jZXNzb3IiLCJsb2FkVGVtcGxhdGVQcm9taXNlIiwibG9hZFRlbXBsYXRlU3R1YiIsIm1vY2tJbXBsZW1lbnRhdGlvbiIsImV4dGVuc2lvbiIsInBhcnNlWE1MU3RyaW5nIiwidmlld0xldmVsIiwiT0RhdGFNb2RlbCIsInByb3RvdHlwZSIsIl9fZGlybmFtZSIsImd1aWQiLCJ1aWQiLCJjZHNDb250ZW50IiwiamVzdFVJNSIsIm1vY2tVcmwiLCJwYWdlQ29udGVudCIsIlBhZ2VDb250cm9sbGVyIiwiRGVmYXVsdFBhZ2VDb250ZW50IiwiX1BhZ2VDb250cm9sbGVyIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJyZW5kZXIiLCJfanN4IiwiUGFnZSIsInNhcCIsInVpIiwiZGVmaW5lIiwiX0FwcENvbXBvbmVudCIsIkFwcENvbXBvbmVudCIsIm1ldGFkYXRhIiwibWFuaWZlc3QiLCJ0aXRsZSIsImRhdGFTb3VyY2VzIiwibWFpblNlcnZpY2UiLCJ1cmkiLCJvZGF0YVZlcnNpb24iLCJkYXRhU291cmNlIiwicm91dGluZyIsInRhcmdldHMiLCJEZWZhdWx0Iiwidmlld1R5cGUiLCJ2aWV3Q29udGVudCIsInJvdXRlcyIsInBhdHRlcm4iLCJ0YXJnZXQiLCJmZU1hbmlmZXN0U2V0dGluZ3MiLCJFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UiLCJEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJtb2NrQXBwQ29tcG9uZW50IiwiaW5pdGlhbGl6ZWQiLCJ2IiwiZ2V0Um91dGVyIiwiZ2V0VGFyZ2V0IiwibG9hZCIsIm9iamVjdCIsImZpbmRFbGVtZW50IiwiY29sbGVjdGlvbiIsImVsZW1lbnQiLCJpdGVtIiwid2FpdEZvckV2ZW50IiwiZXZlbnROYW1lIiwiYXR0YWNoRXZlbnRPbmNlIiwiZXZlbnQiLCJrZWVwQmluZGluZ1N0cmluZ0ZvclRlc3QiLCJlbmFibGVkIiwiQmluZGluZ1BhcnNlciIsIl9rZWVwQmluZGluZ1N0cmluZ3MiLCJkZWxheUZvciIsImRlbGF5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgbW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCB0eXBlIHsgUmFuZ2UsIFJhbmdlcyB9IGZyb20gXCJodG1sanMtcGFyc2VyXCI7XG5pbXBvcnQgeyBjcmVhdGVQYXJzZXIgfSBmcm9tIFwiaHRtbGpzLXBhcnNlclwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9hZGVyRXh0ZW5zaW9ucyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9Mb2FkZXJFeHRlbnNpb25zXCI7XG5pbXBvcnQgdWlkIGZyb20gXCJzYXAvYmFzZS91dGlsL3VpZFwiO1xuaW1wb3J0IGpzeCBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB7IHBhcnNlWE1MU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHtcblx0VGVtcGxhdGVUeXBlLFxuXHR0eXBlIExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzLFxuXHR0eXBlIE1hbmlmZXN0U2V0dGluZ3NTYXBGRSxcblx0dHlwZSBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRQYWdlLCB0eXBlIElEaWFnbm9zdGljcywgdHlwZSBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCBWYWx1ZUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMsIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9FbnZpcm9ubWVudFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFNpZGVFZmZlY3RzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZU1vY2tSZXNvdXJjZU1vZGVsIH0gZnJvbSBcInNhcC9mZS90ZXN0L1VJNU1vY2tIZWxwZXJcIjtcbmltcG9ydCBQYWdlIGZyb20gXCJzYXAvbS9QYWdlXCI7XG5pbXBvcnQgQmluZGluZ0luZm8gZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdJbmZvXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvLCBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0TWV0YWRhdGEgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RNZXRhZGF0YVwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBVSTVFbGVtZW50IGZyb20gXCJzYXAvdWkvY29yZS9FbGVtZW50XCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFhNTFRlbXBsYXRlUHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS9YTUxUZW1wbGF0ZVByb2Nlc3NvclwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBYTUxWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvWE1MVmlld1wiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFV0aWxzIGZyb20gXCJzYXAvdWkvZmwvVXRpbHNcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IExvYWRlciBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL0xvYWRlclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgWG1sUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvZmwvaW5pdGlhbC9faW50ZXJuYWwvcHJlcHJvY2Vzc29ycy9YbWxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9NZXRhTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IF9NZXRhZGF0YVJlcXVlc3RvciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYi9fTWV0YWRhdGFSZXF1ZXN0b3JcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbmltcG9ydCB7IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdCB9IGZyb20gXCIuL0plc3RGbGV4aWJpbGl0eUhlbHBlclwiO1xuXG50eXBlIFByZVByb2Nlc3NvclNldHRpbmdzVHlwZSA9IHtcblx0bW9kZWxzOiB7XG5cdFx0W25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB8IE9EYXRhTWV0YU1vZGVsO1xuXHR9O1xuXHRiaW5kaW5nQ29udGV4dHM6IHtcblx0XHRbbmFtZTogc3RyaW5nXTogQ29udGV4dCB8IHVuZGVmaW5lZDtcblx0fTtcbn07XG50eXBlIE1vY2tGcmFnbWVudCA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRjb250ZW50OiBzdHJpbmc7XG59O1xuXG50eXBlIEplc3RUZW1wbGF0ZWRWaWV3ID0ge1xuXHRhc0VsZW1lbnQ6IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cdGFzU3RyaW5nOiBzdHJpbmc7XG59O1xuXG5Mb2cuc2V0TGV2ZWwoMSBhcyBhbnksIFwic2FwLnVpLmNvcmUudXRpbC5YTUxQcmVwcm9jZXNzb3JcIik7XG5qZXN0LnNldFRpbWVvdXQoNDAwMDApO1xuXG5jb25zdCBuYW1lU3BhY2VNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG5cdG1hY3JvOiBcInNhcC5mZS5tYWNyb3NcIixcblx0bWFjcm9TaGFyZTogXCJzYXAuZmUubWFjcm9zLnNoYXJlXCIsXG5cdG1hY3JvczogXCJzYXAuZmUubWFjcm9zXCIsXG5cdGZlQkI6IFwic2FwLmZlLmNvcmUuYnVpbGRpbmdCbG9ja3MudGVtcGxhdGluZ1wiLFxuXHRtYWNyb0ZpZWxkOiBcInNhcC5mZS5tYWNyb3MuZmllbGRcIixcblx0bWFjcm9kYXRhOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0bG9nOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0Y3VzdG9tRGF0YTogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdGNvbnRyb2w6IFwic2FwLmZlLmNvcmUuY29udHJvbHNcIixcblx0Y29udHJvbHM6IFwic2FwLmZlLm1hY3Jvcy5jb250cm9sc1wiLFxuXHRjb3JlOiBcInNhcC51aS5jb3JlXCIsXG5cdGR0OiBcInNhcC51aS5kdFwiLFxuXHRtOiBcInNhcC5tXCIsXG5cdGY6IFwic2FwLnVpLmxheW91dC5mb3JtXCIsXG5cdGZsOiBcInNhcC51aS5mbFwiLFxuXHRpbnRlcm5hbE1hY3JvOiBcInNhcC5mZS5tYWNyb3MuaW50ZXJuYWxcIixcblx0bWRjOiBcInNhcC51aS5tZGNcIixcblx0YWN0aW9udG9vbGJhcjogXCJzYXAudWkubWRjLmFjdGlvbnRvb2xiYXJcIixcblx0bWRjRmllbGQ6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRtZGNUYWJsZTogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdHU6IFwic2FwLnVpLnVuaWZpZWRcIixcblx0dXhhcDogXCJzYXAudXhhcFwiLFxuXHRtYWNyb01pY3JvQ2hhcnQ6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdG1pY3JvQ2hhcnQ6IFwic2FwLnN1aXRlLnVpLm1pY3JvY2hhcnRcIixcblx0bWFjcm9UYWJsZTogXCJzYXAuZmUubWFjcm9zLnRhYmxlXCIsXG5cdG1kY3ZjOiBcInNhcC51aS5tZGMudmFsdWVoZWxwLmNvbnRlbnRcIixcblx0bWRjdjogXCJzYXAudWkubWRjLnZhbHVlaGVscFwiLFxuXHR2YWx1ZUhlbHA6IFwic2FwLmZlLm1hY3Jvcy52YWx1ZUhlbHBcIixcblx0Y29udGVudFN3aXRjaGVyOiBcInNhcC5mZS5tYWNyb3MuY29udGVudFN3aXRjaGVyXCIsXG5cdGZpbHRlckJhcjogXCJzYXAuZmUubWFjcm9zLmZpbHRlckJhclwiLFxuXHRkcmFmdEluZGljYXRvcjogXCJzYXAuZmUubWFjcm9zLmRyYWZ0SW5kaWNhdG9yXCIsXG5cdHZpc3VhbGZpbHRlcnM6IFwic2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzXCIsXG5cdGZpZWxkaGVscDogXCJzYXAudWkuY29yZS5maWVsZGhlbHBcIlxufTtcbmNvbnN0IHJldmVzZU5hbWVzcGFjZU1hcCA9IE9iamVjdC5rZXlzKG5hbWVTcGFjZU1hcCkucmVkdWNlKChyZXZlcnNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBjdXJyZW50TmFtZSkgPT4ge1xuXHRyZXZlcnNlTWFwW25hbWVTcGFjZU1hcFtjdXJyZW50TmFtZV1dID0gY3VycmVudE5hbWU7XG5cdHJldHVybiByZXZlcnNlTWFwO1xufSwge30pO1xuY29uc3Qgc2VsZWN0ID0geHBhdGgudXNlTmFtZXNwYWNlcyhuYW1lU3BhY2VNYXApO1xuXG5jb25zdCBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlID0geyBjb21wdXRlRmllbGRHcm91cElkczogKCkgPT4gW10gfTtcblxuZnVuY3Rpb24gX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbTogTm9kZSwgc2VsZWN0b3I6IHN0cmluZyk6IHN0cmluZyB7XG5cdC8qKlxuXHQgKiBpZiBhIHJvb3QgZWxlbWVudCBoYXMgYmVlbiBhZGRlZCBkdXJpbmcgdGhlIHRlbXBsYXRpbmcgYnkgb3VyIEplc3QgVGVtcGxhdGluZyBtZXRob2RzXG5cdCAqIHRoZSByb290IGVsZW1lbnQgaXMgYWRkZWQgdG8gdGhlIHNlbGVjdG9yIHBhdGguXG5cdCAqL1xuXHRjb25zdCByb290UGF0aCA9IFwiL3Jvb3RcIjtcblx0cmV0dXJuIGAke3htbGRvbS5ub2RlTmFtZSA9PT0gXCJyb290XCIgJiYgIXNlbGVjdG9yLnN0YXJ0c1dpdGgocm9vdFBhdGgpID8gcm9vdFBhdGggOiBcIlwifSR7c2VsZWN0b3J9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gX2J1aWxkUHJlUHJvY2Vzc29yU2V0dGluZ3MoXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd25cbik6IFByb21pc2U8UHJlUHJvY2Vzc29yU2V0dGluZ3NUeXBlPiB7XG5cdGxldCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCB8IHVuZGVmaW5lZDtcblx0aWYgKHNNZXRhZGF0YVVybCkge1xuXHRcdG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0XHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblx0XHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IGNvbnZlcnRlckNvbnRleHQ6IG5ldyBUZW1wbGF0ZU1vZGVsKHt9LCBvTWV0YU1vZGVsISkgfSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdFx0bU1vZGVsc1tzTW9kZWxOYW1lXSA9IG5ldyBUZW1wbGF0ZU1vZGVsKG1Nb2RlbHNbc01vZGVsTmFtZV0uZGF0YSwgb01ldGFNb2RlbCEpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Y29uc3Qgc2V0dGluZ3M6IGFueSA9IHtcblx0XHRtb2RlbHM6IE9iamVjdC5hc3NpZ24oXG5cdFx0XHR7XG5cdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbFxuXHRcdFx0fSxcblx0XHRcdG1Nb2RlbHNcblx0XHQpLFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30sXG5cdFx0YXBwQ29tcG9uZW50OiB7XG5cdFx0XHRnZXRSb3V0aW5nU2VydmljZTogKCkgPT4gKHtcblx0XHRcdFx0X2dldFRhcmdldEluZm9ybWF0aW9uOiBqZXN0LmZuKClcblx0XHRcdH0pLFxuXHRcdFx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlOiBqZXN0LmZuKCksXG5cdFx0XHRnZXREaWFnbm9zdGljczogKCkgPT4gdW5kZWZpbmVkLFxuXHRcdFx0Z2V0U2hlbGxTZXJ2aWNlczogamVzdC5mbigpLFxuXHRcdFx0Z2V0TWFuaWZlc3RFbnRyeTogKCkgPT4gdW5kZWZpbmVkXG5cdFx0fVxuXHR9O1xuXG5cdHNldHRpbmdzLmFwcENvbXBvbmVudC5nZXRTaWRlRWZmZWN0c1NlcnZpY2UubW9ja1JldHVyblZhbHVlKGZha2VTaWRlRWZmZWN0U2VydmljZSA/PyBkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsPy5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdHNldHRpbmdzLm1vZGVsc1tzS2V5XSA9IG9Nb2RlbDtcblx0fSk7XG5cdHJldHVybiBzZXR0aW5ncztcbn1cblxuZnVuY3Rpb24gX2xvYWRSZXNvdXJjZVZpZXcodmlld05hbWU6IHN0cmluZyk6IEVsZW1lbnQge1xuXHRjb25zdCBuYW1lID0gdmlld05hbWUucmVwbGFjZSgvXFwuL2csIFwiL1wiKSArIFwiLnZpZXcueG1sXCI7XG5cdGNvbnN0IHZpZXcgPSBMb2FkZXJFeHRlbnNpb25zLmxvYWRSZXNvdXJjZShuYW1lKTtcblx0cmV0dXJuIHZpZXcuZG9jdW1lbnRFbGVtZW50O1xufVxuXG5leHBvcnQgY29uc3QgcnVuWFBhdGhRdWVyeSA9IGZ1bmN0aW9uIChzZWxlY3Rvcjogc3RyaW5nLCB4bWxkb206IE5vZGUgfCB1bmRlZmluZWQpIHtcblx0cmV0dXJuIHNlbGVjdChzZWxlY3RvciwgeG1sZG9tKTtcbn07XG5cbmV4cGVjdC5leHRlbmQoe1xuXHR0b0hhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoX2dldFRlbXBsYXRlZFNlbGVjdG9yKHhtbGRvbSwgc2VsZWN0b3IpLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYGRpZCBub3QgZmluZCBjb250cm9scyBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+PSAxXG5cdFx0fTtcblx0fSxcblx0dG9Ob3RIYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KF9nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxkb20sIHNlbGVjdG9yKSwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBUaGVyZSBpcyBhIGNvbnRyb2wgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPT09IDBcblx0XHR9O1xuXHR9LFxuXHQvKipcblx0ICogQ2hlY2tzIGZvciBlcnJvcnMgaW4gYHhtbGAgY3JlYXRlZCBkdXJpbmcgdGVtcGxhdGluZyBvZiBhbiBYTUwgc3RyaW5nIG9yXG5cdCAqIGFuIFhNTCBub2RlLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrZXMgZm9yIHRoZSB4bWwgZXJyb3JzIGNyZWF0ZWQgYnkgdGhlXG5cdCAqIGZ1bmN0aW9uIFtCdWlsZGluZ0Jsb2NrVGVtcGxhdGVQcm9jZXNzb3IuY3JlYXRlRXJyb3JYTUxde0BsaW5rIHNhcC5mZS5jb3JlLmJ1aWxkaW5nQmxvY2tzLnRlbXBsYXRpbmcuQnVpbGRpbmdCbG9ja1RlbXBsYXRlUHJvY2Vzc29yI2NyZWF0ZUVycm9yWE1MfS5cblx0ICogQHBhcmFtIHhtbCBYTUwgU3RyaW5nIG9yIFhNTCBOb2RlIHRvIGJlIHRlc3RlZCBmb3IgZXJyb3JzXG5cdCAqIEByZXR1cm5zIEplc3QgTWF0Y2hlciByZXN1bHQgb2JqZWN0XG5cdCAqL1xuXHR0b0hhdmVUZW1wbGF0aW5nRXJyb3JzKHhtbDogc3RyaW5nIHwgTm9kZSkge1xuXHRcdGNvbnN0IHhtbFRleHQgPSB0eXBlb2YgeG1sID09PSBcInN0cmluZ1wiID8geG1sIDogc2VyaWFsaXplWE1MKHhtbCk7XG5cdFx0Y29uc3QgYmFzZTY0RW50cmllczogc3RyaW5nW10gPSB4bWxUZXh0Lm1hdGNoKC9CQkZcXC5iYXNlNjREZWNvZGVcXCgnKFteJ10qKSdcXCkvZ20pIHx8IChbXSBhcyBzdHJpbmdbXSk7XG5cdFx0Y29uc3QgZXJyb3JNZXNzYWdlczogc3RyaW5nW10gPSBiYXNlNjRFbnRyaWVzLm1hcCgobWVzc2FnZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAobWVzc2FnZSAmJiBtZXNzYWdlLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0cmV0dXJuIGF0b2IobWVzc2FnZS5tYXRjaCgvKCdbXiddKikvKT8uWzBdPy5zbGljZSgxKSB8fCBcIlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0pO1xuXHRcdGlmIChlcnJvck1lc3NhZ2VzLmxlbmd0aCA8PSAwKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRtZXNzYWdlOiAoKSA9PiBgWE1MIFRlbXBsYXRpbmcgd2l0aG91dCBlcnJvcnNgLFxuXHRcdFx0XHRwYXNzOiBmYWxzZVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0bWVzc2FnZTogKCkgPT4gZXJyb3JNZXNzYWdlcy5qb2luKFwiXFxuXCIpLFxuXHRcdFx0XHRwYXNzOiB0cnVlXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pOiBzdHJpbmcge1xuXHRpZiAoQXJyYXkuaXNBcnJheSh4bWxTdHJpbmcpKSB7XG5cdFx0eG1sU3RyaW5nID0geG1sU3RyaW5nLmpvaW4oXCJcIik7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoY29udHJvbFNlbGVjdG9yOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlbGVjdG9yID0gYHN0cmluZygke19nZXRUZW1wbGF0ZWRTZWxlY3Rvcih4bWxEb20sIGNvbnRyb2xTZWxlY3Rvcil9L0Ake2F0dHJpYnV0ZU5hbWV9KWA7XG5cdHJldHVybiBydW5YUGF0aFF1ZXJ5KHNlbGVjdG9yLCB4bWxEb20pO1xufTtcblxuLyoqXG4gKiBTZXJpYWxpemUgdGhlIHBhcnRzIG9yIHRoZSBjb21wbGV0ZSBnaXZlbiBYTUwgRE9NIHRvIHN0cmluZy5cbiAqIEBwYXJhbSB4bWxEb20gRE9NIG5vZGUgdGhhdCBpcyB0byBiZSBzZXJpYWxpemVkLlxuICogQHBhcmFtIHNlbGVjdG9yIE9wdGlvbmFsIHNlbGVjdG9yIG9mIHN1YiBub2Rlc1xuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2VyaWFsaXphdGlvbiBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWVcbiAqIEByZXR1cm5zIFhNTCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uICh4bWxEb206IE5vZGUsIHNlbGVjdG9yPzogc3RyaW5nLCBvcHRpb25zPzogeyBrZWVwRHluYW1pY0lkcz86IGJvb2xlYW4gfSk6IHN0cmluZyB7XG5cdGNvbnN0IHNlcmlhbGl6ZXIgPSBuZXcgd2luZG93LlhNTFNlcmlhbGl6ZXIoKTtcblx0bGV0IHhtbFN0cmluZzogc3RyaW5nO1xuXHRpZiAoc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSkgYXMgTm9kZVtdO1xuXHRcdHhtbFN0cmluZyA9IG5vZGVzLm1hcCgobm9kZSkgPT4gc2VyaWFsaXplci5zZXJpYWxpemVUb1N0cmluZyhub2RlKSkuam9pbihcIlxcblwiKTtcblx0fSBlbHNlIHtcblx0XHR4bWxTdHJpbmcgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvbSk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcsIG9wdGlvbnMpO1xufTtcblxuLyoqXG4gKiBGb3JtYXRzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gWE1MIGRvY3VtZW50LlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gb25seSBjb25zaWRlcnMgWE1MIHRhZ3MgYW5kIGF0dHJpYnV0ZXMsIGlnbm9yaW5nIGV2ZXJ5dGhpbmcgZWxzZSAodGV4dCwgY29tbWVudHMpLiBBZGRpdGlvbmFsbHksXG4gKiBhdHRyaWJ1dGUgdmFsdWVzIGNvbnRhaW5pbmcgYSB2YXJ5aW5nIFVJRCBhcmUgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICpcbiAqIEFuIFwiWE1MXCIgc3RyaW5nIGNvbnRhaW5pbmcgbXVsdGlwbGUgcm9vdCBlbGVtZW50cyBjYW4gYmUuXG4gKiBAcGFyYW0geG1sU3RyaW5nICBUaGUgaW5wdXQgWE1MIHN0cmluZy4gVGhpcyBmdW5jdGlvbiBhbHNvIGFjY2VwdHMgXCJYTUxcIiBzdHJpbmdzIHdpdGggbXVsdGlwbGUgcm9vdCBlbGVtZW50cy5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9uc1xuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlXG4gKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIFhNTCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCBmb3JtYXRYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM/OiB7IGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbiB9KTogc3RyaW5nIHtcblx0Y29uc3QgU1RBUlQgPSBcIjxfX1hNTF9fPlwiLFxuXHRcdEVORCA9IFwiPC9fX1hNTF9fPlwiLFxuXHRcdGxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG5cdGxldCBjdXJyZW50TGluZSA9IFwiXCIsXG5cdFx0bGV2ZWwgPSAtMSxcblx0XHRhdHRyaWJ1dGVzOiB7IG5hbWU6IHN0cmluZzsgdmFsdWU/OiBzdHJpbmcgfVtdID0gW107XG5cblx0ZnVuY3Rpb24gbmV3bGluZSgpIHtcblx0XHRpZiAoY3VycmVudExpbmUgJiYgY3VycmVudExpbmUgIT09IFNUQVJUKSB7XG5cdFx0XHRsaW5lcy5wdXNoKGN1cnJlbnRMaW5lKTtcblx0XHR9XG5cblx0XHRjdXJyZW50TGluZSA9IGxldmVsID4gMCA/IFwiICBcIi5yZXBlYXQobGV2ZWwpIDogXCJcIjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZEF0dHJpYnV0ZXMoKSB7XG5cdFx0aWYgKGF0dHJpYnV0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXMuc29ydCgoYSwgYikgPT4ge1xuXHRcdFx0XHRpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiAhYi5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLnN0YXJ0c1dpdGgoXCJ4bWxuc1wiKSAmJiBiLm5hbWUuc3RhcnRzV2l0aChcInhtbG5zXCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiAhYi5uYW1lLmluY2x1ZGVzKFwiOlwiKSkge1xuXHRcdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdFx0fSBlbHNlIGlmICghYS5uYW1lLmluY2x1ZGVzKFwiOlwiKSAmJiBiLm5hbWUuaW5jbHVkZXMoXCI6XCIpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRsZXZlbCsrO1xuXHRcdFx0Zm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuXHRcdFx0XHRuZXdsaW5lKCk7XG5cdFx0XHRcdGN1cnJlbnRMaW5lICs9IGF0dHJpYnV0ZS5uYW1lO1xuXHRcdFx0XHRpZiAoYXR0cmlidXRlLnZhbHVlKSBjdXJyZW50TGluZSArPSBhdHRyaWJ1dGUudmFsdWU7XG5cdFx0XHR9XG5cdFx0XHRsZXZlbC0tO1xuXHRcdFx0YXR0cmlidXRlcyA9IFtdO1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFwcGVuZChkYXRhOiBSYW5nZSkge1xuXHRcdGN1cnJlbnRMaW5lICs9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHR9XG5cblx0Y29uc3QgcGFyc2VyID0gY3JlYXRlUGFyc2VyKHtcblx0XHRvbk9wZW5UYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bmV3bGluZSgpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdH0sXG5cblx0XHRvbk9wZW5UYWdOYW1lOiBhcHBlbmQsXG5cblx0XHRvbkF0dHJOYW1lKGRhdGE6IFJhbmdlKSB7XG5cdFx0XHRhdHRyaWJ1dGVzLnVuc2hpZnQoeyBuYW1lOiBwYXJzZXIucmVhZChkYXRhKSB9KTtcblx0XHR9LFxuXG5cdFx0b25BdHRyVmFsdWUoZGF0YTogUmFuZ2VzLkF0dHJWYWx1ZSkge1xuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHRcdFx0YXR0cmlidXRlc1swXS52YWx1ZSA9IHBhcnNlci5yZWFkKGRhdGEpO1xuXHRcdFx0aWYgKG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzICE9PSB0cnVlKSB7XG5cdFx0XHRcdGF0dHJpYnV0ZXNbMF0udmFsdWUgPSByZW1vdmVEeW5hbWljSWQoYXR0cmlidXRlc1swXS52YWx1ZSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG9uT3BlblRhZ0VuZChkYXRhOiBSYW5nZXMuT3BlblRhZ0VuZCkge1xuXHRcdFx0YXBwZW5kQXR0cmlidXRlcygpO1xuXHRcdFx0YXBwZW5kKGRhdGEpO1xuXHRcdFx0aWYgKCFkYXRhLnNlbGZDbG9zZWQpIGxldmVsKys7XG5cdFx0fSxcblxuXHRcdG9uQ2xvc2VUYWdTdGFydChkYXRhOiBSYW5nZSkge1xuXHRcdFx0bGV2ZWwtLTtcblx0XHRcdG5ld2xpbmUoKTtcblx0XHRcdGFwcGVuZChkYXRhKTtcblx0XHR9LFxuXG5cdFx0b25DbG9zZVRhZ05hbWU6IGFwcGVuZCxcblx0XHRvbkNsb3NlVGFnRW5kOiBhcHBlbmRcblx0fSk7XG5cblx0cGFyc2VyLnBhcnNlKFNUQVJUICsgeG1sU3RyaW5nICsgRU5EKTtcblx0cmV0dXJuIGxpbmVzLmpvaW4oXCJcXG5cIikudHJpbSgpO1xufTtcblxuLyoqXG4gKiBDb21waWxlIGEgQ0RTIGZpbGUgaW50byBhbiBFRE1YIGZpbGUuXG4gKiBAcGFyYW0gY2RzVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgbXVzdCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKGNkc1VybDogc3RyaW5nLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY2RzVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBlZG14Q29udGVudCA9IGNkczJlZG14KGNkc1N0cmluZywgXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zKTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKGNkc1VybCwgXCIuLlwiLCBcImdlblwiKTtcblxuXHQvLyBJZiB0aGUgY2FsbGVyIHByb3ZpZGVkIENEUyBjb21waWxlciBvcHRpb25zOiBJbmNsdWRlIHRoZW0gaW4gdGhlIGZpbGVuYW1lLiBUaGlzIHByZXZlbnRzIHVucHJlZGljdGFibGUgcmVzdWx0cyBpZiB0aGUgc2FtZSBDRFMgc291cmNlXG5cdC8vIGZpbGUgaXMgdXNlZCBzaW11bHRhbmVvdXNseSB3aXRoIGEgZGlmZmVyZW50IHNldCBvZiBvcHRpb25zIChlLmcuIGluIGEgdGVzdCBydW5uaW5nIGluIHBhcmFsbGVsKVxuXHRjb25zdCBhbGxPcHRpb25zID0gT2JqZWN0LmVudHJpZXMob3B0aW9ucyk7XG5cdGFsbE9wdGlvbnMuc29ydCgoYSwgYikgPT4gYlswXS5sb2NhbGVDb21wYXJlKGFbMF0pKTtcblxuXHRjb25zdCBlZG14RmlsZU5hbWUgPVxuXHRcdGFsbE9wdGlvbnMucmVkdWNlKFxuXHRcdFx0KGZpbGVuYW1lLCBbb3B0aW9uS2V5LCBvcHRpb25WYWx1ZV0pID0+IGAke2ZpbGVuYW1lfSMke29wdGlvbktleX09JHtvcHRpb25WYWx1ZS50b1N0cmluZygpfSNgLFxuXHRcdFx0cGF0aC5iYXNlbmFtZShjZHNVcmwpLnJlcGxhY2UoXCIuY2RzXCIsIFwiXCIpXG5cdFx0KSArIFwiLnhtbFwiO1xuXG5cdGNvbnN0IGVkbXhGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShkaXIsIGVkbXhGaWxlTmFtZSk7XG5cblx0ZnMubWtkaXJTeW5jKGRpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cblx0ZnMud3JpdGVGaWxlU3luYyhlZG14RmlsZVBhdGgsIGVkbXhDb250ZW50KTtcblx0cmV0dXJuIGVkbXhGaWxlUGF0aDtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBDRFMgdG8gRURNWC5cbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBzb3VyY2VzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBcInNvdXJjZS5jZHNcIjogY2RzIH07XG5cblx0Ly8gYWxsb3cgdG8gaW5jbHVkZSBzdHVmZiBmcm9tIEBzYXAvY2RzL2NvbW1vblxuXHRpZiAoY2RzLmluY2x1ZGVzKFwiJ0BzYXAvY2RzL2NvbW1vbidcIikpIHtcblx0XHRzb3VyY2VzW1wiY29tbW9uLmNkc1wiXSA9IGZzLnJlYWRGaWxlU3luYyhyZXF1aXJlLnJlc29sdmUoXCJAc2FwL2Nkcy9jb21tb24uY2RzXCIpLCBcInV0Zi04XCIpO1xuXHR9XG5cblx0Y29uc3QgY3NuID0gY29tcGlsZXIuY29tcGlsZVNvdXJjZXMoc291cmNlcywge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogdHJ1ZSxcblx0XHQuLi5vcHRpb25zLFxuXHRcdHNlcnZpY2U6IHNlcnZpY2Vcblx0fTtcblxuXHRjb25zdCBlZG14ID0gY29tcGlsZXIudG8uZWRteChjc24sIGVkbXhPcHRpb25zKTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKFxuXHRtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsLFxuXHRjbGFzc05hbWVPRGF0YU1vZGVsID0gXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNb2RlbFwiXG4pOiBQcm9taXNlPFNpZGVFZmZlY3RzU2VydmljZT4ge1xuXHRjb25zdCBzY29wZU9iamVjdCA9IHtcblx0XHRnZXRNb2RlbDogKCkgPT4ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0aXNBOiAoKSA9PiBjbGFzc05hbWVPRGF0YU1vZGVsID09PSBcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIsXG5cdFx0XHRcdGdldE1ldGFNb2RlbDogKCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBtZXRhTW9kZWw7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGdldFNlcnZpY2VVcmw6ICgpID0+IHVuZGVmaW5lZFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGdldFNlcnZpY2U6ICgpID0+IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGdldENhcGFiaWxpdGllczogKCkgPT4gdW5kZWZpbmVkXG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcblx0Y29uc3Qgc2VydmljZUluc3RhbmNlID0gYXdhaXQgbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKHsgc2NvcGVPYmplY3QsIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH0pO1xuXHRyZXR1cm4gc2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc3N1ZS5pc3N1ZUNhdGVnb3J5ID09PSBpc3N1ZUNhdGVnb3J5ICYmIGlzc3VlLmlzc3VlU2V2ZXJpdHkgPT09IGlzc3VlU2V2ZXJpdHkgJiYgaXNzdWUuZGV0YWlscyA9PT0gZGV0YWlscztcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCA9IGZ1bmN0aW9uIChcblx0bWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCxcblx0bWFuaWZlc3RTZXR0aW5nczogTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MgfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1xuKSB7XG5cdGNvbnN0IGNvbnZlcnRlZFR5cGVzID0gY29udmVydFR5cGVzKG1ldGFNb2RlbCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBtYW5pZmVzdFNldHRpbmdzLmNvbnRleHRQYXRoXG5cdFx0PyBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PihtZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWFuaWZlc3RTZXR0aW5ncy5jb250ZXh0UGF0aCkgYXMgQ29udGV4dClcblx0XHQ6IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+KG1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChgLyR7bWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXR9YCkpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihcblx0XHRjb252ZXJ0ZWRUeXBlcyxcblx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKG1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdGdldEZha2VEaWFnbm9zdGljcygpLFxuXHRcdGRhdGFNb2RlbFBhdGhcblx0KTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB1bmRlZmluZWQsIHt9LCB7fSwgZnVuY3Rpb24gKCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9KTtcblx0aWYgKCFtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdKSB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG5ldyAoT0RhdGFNZXRhTW9kZWwgYXMgYW55KShvUmVxdWVzdG9yLCBzTWV0YWRhdGFVcmwsIHVuZGVmaW5lZCwgeyBfcmVxdWVzdEFubm90YXRpb25DaGFuZ2VzOiAoKSA9PiBbXSB9KTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiA8VCA9IFByb3BlcnR5IHwgRW50aXR5U2V0IHwgQW55QW5ub3RhdGlvbj4oXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHByb3BlcnR5PzogVFxuKTogRGF0YU1vZGVsT2JqZWN0UGF0aDxUPiB7XG5cdGNvbnN0IHRhcmdldFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHRuYXZpZ2F0aW9uUHJvcGVydGllczogW10sXG5cdFx0dGFyZ2V0T2JqZWN0OiBwcm9wZXJ0eSxcblx0XHR0YXJnZXRFbnRpdHlTZXQ6IGVudGl0eVNldCxcblx0XHR0YXJnZXRFbnRpdHlUeXBlOiBlbnRpdHlTZXQuZW50aXR5VHlwZSxcblx0XHRjb252ZXJ0ZWRUeXBlczogY29udmVydGVkVHlwZXNcblx0fTtcblx0dGFyZ2V0UGF0aC5jb250ZXh0TG9jYXRpb24gPSB0YXJnZXRQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RW50aXR5U2V0Pjtcblx0cmV0dXJuIHRhcmdldFBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVCaW5kaW5nID0gZnVuY3Rpb24gKGJpbmRpbmdTdHJpbmc6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nSW5mby5wYXJzZShiaW5kaW5nU3RyaW5nKTtcblx0cmV0dXJuIGJpbmRpbmdFbGVtZW50LmZvcm1hdHRlci5hcHBseSh1bmRlZmluZWQsIGFyZ3MpO1xufTtcblxudHlwZSBNb2RlbENvbnRlbnQgPSB7XG5cdFtuYW1lOiBzdHJpbmddOiBhbnk7XG59O1xuXG4vKipcbiAqIEV2YWx1YXRlIGEgYmluZGluZyBhZ2FpbnN0IGEgbW9kZWwuXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdJbmZvLnBhcnNlKGJpbmRpbmdTdHJpbmcsIG51bGwsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCB7XG5cdFx0XCIuXCI6IHtcblx0XHRcdF9mb3JtYXR0ZXJzOiB7XG5cdFx0XHRcdFZhbHVlRm9ybWF0dGVyOiBWYWx1ZUZvcm1hdHRlclxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGNvbnN0IHRleHQgPSBuZXcgSW52aXNpYmxlVGV4dCgpO1xuXHR0ZXh0LmJpbmRQcm9wZXJ0eShcInRleHRcIiwgYmluZGluZ0VsZW1lbnQpO1xuXG5cdGNvbnN0IGRlZmF1bHRNb2RlbCA9IG5ldyBKU09OTW9kZWwobW9kZWxDb250ZW50KTtcblx0dGV4dC5zZXRNb2RlbChkZWZhdWx0TW9kZWwpO1xuXHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KGRlZmF1bHRNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIikpO1xuXG5cdGlmIChuYW1lZE1vZGVsc0NvbnRlbnQpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhuYW1lZE1vZGVsc0NvbnRlbnQpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG5ldyBKU09OTW9kZWwoY29udGVudCk7XG5cdFx0XHR0ZXh0LnNldE1vZGVsKG1vZGVsLCBuYW1lKTtcblx0XHRcdHRleHQuc2V0QmluZGluZ0NvbnRleHQobW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpLCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmNvbnN0IFRFU1RWSUVXSUQgPSBcInRlc3RWaWV3SWRcIjtcblxuY29uc3QgYXBwbHlGbGV4Q2hhbmdlcyA9IGFzeW5jIGZ1bmN0aW9uIChmbGV4Q2hhbmdlczogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSwgb01ldGFNb2RlbDogTWV0YU1vZGVsLCByZXN1bHRYTUw6IGFueSkge1xuXHQvLyBwcmVmaXggSWRzXG5cdFsuLi5yZXN1bHRYTUwucXVlcnlTZWxlY3RvckFsbChcIltpZF1cIildLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRub2RlLmlkID0gYCR7VEVTVFZJRVdJRH0tLSR7bm9kZS5pZH1gO1xuXHR9KTtcblx0Y29uc3QgY2hhbmdlcyA9IGNyZWF0ZUZsZXhpYmlsaXR5Q2hhbmdlc09iamVjdChURVNUVklFV0lELCBmbGV4Q2hhbmdlcyk7XG5cdGNvbnN0IGFwcElkID0gXCJzb21lQ29tcG9uZW50XCI7XG5cdGNvbnN0IG9NYW5pZmVzdCA9IHtcblx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0aWQ6IGFwcElkLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvblwiLFxuXHRcdFx0Y3Jvc3NOYXZpZ2F0aW9uOiB7XG5cdFx0XHRcdG91dGJvdW5kczogW11cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IHtcblx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShnZXRGYWtlRGlhZ25vc3RpY3MoKSksXG5cdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG9NZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0Z2V0Q29tcG9uZW50RGF0YTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSksXG5cdFx0Z2V0TWFuaWZlc3RPYmplY3Q6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0RW50cnk6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIChvTWFuaWZlc3QgYXMgYW55KVtuYW1lXTtcblx0XHRcdH1cblx0XHR9KSxcblx0XHRnZXRMb2NhbElkOiBqZXN0LmZuKChzSWQpID0+IHNJZClcblx0fSBhcyB1bmtub3duIGFzIEFwcENvbXBvbmVudDtcblx0Ly9mYWtlIGNoYW5nZXNcblx0Y29uc3Qgc3B5T25BcHBTdG9yYWdlID0gamVzdC5zcHlPbihBcHBTdG9yYWdlLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblx0Y29uc3Qgc3B5T25Mb2FkZXIgPSBqZXN0LnNweU9uKExvYWRlciwgXCJnZXRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoXG5cdFx0UHJvbWlzZS5yZXNvbHZlKHtcblx0XHRcdHBhcmFtZXRlcnM6IHtcblx0XHRcdFx0bG9hZGVyQ2FjaGVLZXk6IFwiaWQtMTc2MzExODU4NjA4NC00MlwiIC8vIGFueSByYW5kb20gdmFsdWUgY2FuIGJlIHVzZWQsIGl0IGlzIHVzZWQgZm9yIGNhY2hpbmcgcHVycG9zZXNcblx0XHRcdH0sXG5cdFx0XHRkYXRhOiBjaGFuZ2VzXG5cdFx0fSlcblx0KTtcblxuXHRqZXN0LnNweU9uKExvYWRlciwgXCJnZXRDYWNoZWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoeyBkYXRhOiBjaGFuZ2VzIH0pO1xuXG5cdGNvbnN0IHNweU9uQ29tcG9uZW50ID0gamVzdFxuXHRcdC5zcHlPbihDb21wb25lbnQgYXMgdW5rbm93biBhcyB7IGdldENvbXBvbmVudEJ5SWQ6ICgpID0+IEFwcENvbXBvbmVudCB9LCBcImdldENvbXBvbmVudEJ5SWRcIilcblx0XHQubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRjb25zdCBzcHlPblV0aWxzID0gamVzdC5zcHlPbihVdGlscywgXCJnZXRBcHBDb21wb25lbnRGb3JDb250cm9sXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0YXdhaXQgRmxleFN0YXRlLmluaXRpYWxpemUoe1xuXHRcdGNvbXBvbmVudElkOiBhcHBJZFxuXHR9KTtcblx0cmVzdWx0WE1MID0gYXdhaXQgWG1sUHJlcHJvY2Vzc29yLnByb2Nlc3MocmVzdWx0WE1MLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiLCBjb21wb25lbnRJZDogYXBwSWQsIGlkOiBURVNUVklFV0lEIH0pO1xuXG5cdC8vQXNzZXJ0IHRoYXQgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGFwcGxpZWRcblx0Y29uc3QgY2hhbmdlc0FwcGxpZWQgPSBnZXRDaGFuZ2VzRnJvbVhNTChyZXN1bHRYTUwpO1xuXHRleHBlY3QoY2hhbmdlc0FwcGxpZWQubGVuZ3RoKS50b0JlKGZsZXhDaGFuZ2VzPy5jaGFuZ2VzPy5sZW5ndGggPz8gZmxleENoYW5nZXM/LnZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz8ubGVuZ3RoID8/IDApO1xuXHRzcHlPbkNvbXBvbmVudC5tb2NrUmVzdG9yZSgpO1xuXHRzcHlPblV0aWxzLm1vY2tSZXN0b3JlKCk7XG5cdHNweU9uQXBwU3RvcmFnZS5tb2NrUmVzdG9yZSgpO1xuXHRzcHlPbkxvYWRlci5tb2NrUmVzdG9yZSgpO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfSxcblx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlPzogdW5rbm93blxuKSB7XG5cdGlmICghbU1vZGVsc1tcInNhcC5mZS5pMThuXCJdKSB7XG5cdFx0bU1vZGVsc1tcInNhcC5mZS5pMThuXCJdID0gY3JlYXRlTW9ja1Jlc291cmNlTW9kZWwoKTtcblx0fVxuXG5cdGNvbnN0IHRlbXBsYXRlZFhtbCA9IGA8cm9vdD4ke3htbElucHV0fTwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCB4bWxEb2MgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKHRlbXBsYXRlZFhtbCwgXCJ0ZXh0L3htbFwiKTtcblx0Ly8gVG8gZW5zdXJlIG91ciBtYWNybyBjYW4gdXNlICNzZXRCaW5kaW5nQ29udGV4dCB3ZSBlbnN1cmUgdGhlcmUgaXMgYSBwcmUgZXhpc3RpbmcgSlNPTk1vZGVsIGZvciBjb252ZXJ0ZXJDb250ZXh0XG5cdC8vIGlmIG5vdCBhbHJlYWR5IHBhc3NlZCB0byB0ZWggdGVtcGxhdGluZ1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IGF3YWl0IF9idWlsZFByZVByb2Nlc3NvclNldHRpbmdzKHNNZXRhZGF0YVVybCwgbUJpbmRpbmdDb250ZXh0cywgbU1vZGVscywgZmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSAoYXdhaXQgWE1MUHJlcHJvY2Vzc29yLnByb2Nlc3MoeG1sRG9jLmZpcnN0RWxlbWVudENoaWxkISwgeyBuYW1lOiBcIlRlc3QgRnJhZ21lbnRcIiB9LCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MpKSBhcyBhbnk7XG5cblx0aWYgKHNNZXRhZGF0YVVybCAmJiBmbGV4Q2hhbmdlcykge1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0XHRyZXN1bHRYTUwgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH0sXG5cdG1Nb2RlbHM6IHsgW3g6IHN0cmluZ106IGFueSB9LFxuXHRmbGV4Q2hhbmdlcz86IHsgW3g6IHN0cmluZ106IG9iamVjdFtdIH0sXG5cdGZha2VTaWRlRWZmZWN0U2VydmljZT86IHVua25vd24sXG5cdG9wdGlvbnM/OiB7IGtlZXBEeW5hbWljSWRzPzogYm9vbGVhbiB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRyZXR1cm4ganN4LmRlZmluZVhNTE5hbWVzcGFjZU1hcChyZXZlc2VOYW1lc3BhY2VNYXAsIGFzeW5jICgpID0+IHtcblx0XHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KFxuXHRcdFx0eG1sSW5wdXQsXG5cdFx0XHRzTWV0YWRhdGFVcmwsXG5cdFx0XHRtQmluZGluZ0NvbnRleHRzLFxuXHRcdFx0bU1vZGVscyxcblx0XHRcdGZsZXhDaGFuZ2VzLFxuXHRcdFx0ZmFrZVNpZGVFZmZlY3RTZXJ2aWNlXG5cdFx0KTtcblx0XHRjb25zdCBzZXJpYWxpZWRYTUwgPSBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MLCB1bmRlZmluZWQsIG9wdGlvbnMpO1xuXHRcdGV4cGVjdChzZXJpYWxpZWRYTUwpLm5vdC50b0hhdmVUZW1wbGF0aW5nRXJyb3JzKCk7XG5cdFx0cmV0dXJuIHNlcmlhbGllZFhNTDtcblx0fSkgYXMgdW5rbm93biBhcyBQcm9taXNlPHN0cmluZz47XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCB2aWV3IHdpdGggdGhlIHByb3ZpZGVkIGRhdGEuXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdmlldyB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gc01ldGFkYXRhVXJsIFVybCBvZiB0aGUgbWV0YWRhdGEuXG4gKiBAcGFyYW0gbUJpbmRpbmdDb250ZXh0cyBNYXAgb2YgdGhlIGJpbmRpbmdDb250ZXh0cyB0byBzZXQgb24gdGhlIG1vZGVscy5cbiAqIEBwYXJhbSBtTW9kZWxzIE1hcCBvZiB0aGUgbW9kZWxzLlxuICogQHBhcmFtIGZsZXhDaGFuZ2VzIE9iamVjdCB3aXRoIFVJIGNoYW5nZXMgbGlrZSAnY2hhbmdlcycgb3IgJ3ZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcydcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCB2aWV3IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1ZpZXcoXG5cdG5hbWU6IHN0cmluZyxcblx0c01ldGFkYXRhVXJsOiBzdHJpbmcsXG5cdG1CaW5kaW5nQ29udGV4dHM6IHsgW3g6IHN0cmluZ106IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0ZmxleENoYW5nZXM/OiB7IFt4OiBzdHJpbmddOiBvYmplY3RbXSB9XG4pOiBQcm9taXNlPEplc3RUZW1wbGF0ZWRWaWV3PiB7XG5cdGNvbnN0IG9NZXRhTW9kZWwgPSBhd2FpdCBnZXRNZXRhTW9kZWwoc01ldGFkYXRhVXJsKTtcblx0Y29uc3Qgb1ZpZXdEb2N1bWVudCA9IF9sb2FkUmVzb3VyY2VWaWV3KG5hbWUpO1xuXHRjb25zdCBvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSBhd2FpdCBfYnVpbGRQcmVQcm9jZXNzb3JTZXR0aW5ncyhzTWV0YWRhdGFVcmwsIG1CaW5kaW5nQ29udGV4dHMsIG1Nb2RlbHMpO1xuXHRsZXQgb1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhvVmlld0RvY3VtZW50LCB7IG5hbWU6IG5hbWUgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblx0aWYgKGZsZXhDaGFuZ2VzKSB7XG5cdFx0b1ByZXByb2Nlc3NlZFZpZXcgPSBhd2FpdCBhcHBseUZsZXhDaGFuZ2VzKGZsZXhDaGFuZ2VzID8/IFtdLCBvTWV0YU1vZGVsLCBvUHJlcHJvY2Vzc2VkVmlldyk7XG5cdH1cblx0cmV0dXJuIHtcblx0XHRhc0VsZW1lbnQ6IG9QcmVwcm9jZXNzZWRWaWV3LFxuXHRcdGFzU3RyaW5nOiBmb3JtYXRYTUwob1ByZXByb2Nlc3NlZFZpZXc/Lm91dGVySFRNTCB8fCBcIlwiKVxuXHR9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRWaWV3KHByb3BlcnRpZXM6IHtcblx0dGVtcGxhdGVOYW1lOiBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiIHwgXCJzYXAuZmUudGVtcGxhdGVzLk9iamVjdFBhZ2VcIjtcblx0bWV0YWRhdGFVcmw6IHN0cmluZztcblx0Y29udGV4dFBhdGg6IHN0cmluZztcblx0bWFuaWZlc3RTZXR0aW5nczogQmFzZU1hbmlmZXN0U2V0dGluZ3M7XG5cdGJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogc3RyaW5nIH07XG5cdGZsZXhDaGFuZ2VzPzogeyBbeDogc3RyaW5nXTogb2JqZWN0W10gfTtcblx0Vmlld0lkPzogc3RyaW5nO1xufSk6IFByb21pc2U8eyB2aWV3OiBWaWV3OyBhcHBDb21wb25lbnQ6IENvbXBvbmVudCB9PiB7XG5cdGNvbnN0IHRlbXBsYXRlVHlwZSA9IHByb3BlcnRpZXMudGVtcGxhdGVOYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiID8gVGVtcGxhdGVUeXBlLkxpc3RSZXBvcnQgOiBUZW1wbGF0ZVR5cGUuT2JqZWN0UGFnZTtcblx0Y29uc3Qgdmlld05hbWUgPVxuXHRcdHByb3BlcnRpZXMudGVtcGxhdGVOYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiXG5cdFx0XHQ/IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0Lkxpc3RSZXBvcnRcIlxuXHRcdFx0OiBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZS5PYmplY3RQYWdlXCI7XG5cdGNvbnN0IG1ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChwcm9wZXJ0aWVzLm1ldGFkYXRhVXJsKTtcblxuXHRjb25zdCBlbnZpcm9ubWVudENhcGFiaWxpdGllczogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXMgPSB7XG5cdFx0QXBwU3RhdGU6IHRydWUsXG5cdFx0Q2hhcnQ6IHRydWUsXG5cdFx0Q29sbGFib3JhdGlvbjogdHJ1ZSxcblx0XHRJbnRlbnRCYXNlZE5hdmlnYXRpb246IGZhbHNlLFxuXHRcdE1pY3JvQ2hhcnQ6IHRydWUsXG5cdFx0VVNoZWxsOiBmYWxzZSxcblx0XHRJbnNpZ2h0c1N1cHBvcnRlZDogZmFsc2UsXG5cdFx0Q29udGV4dFNoYXJpbmdTdXBwb3J0ZWQ6IGZhbHNlLFxuXHRcdFNtYXJ0U3VtbWFyaXplOiBmYWxzZSxcblx0XHRNYWdpY0ZpbHRlcmluZzogZmFsc2UsXG5cdFx0RGlzYWJsZUlucHV0QXNzaXN0YW5jZTogZmFsc2UsXG5cdFx0SGlkZGVuRHJhZnQ6IGZhbHNlXG5cdH07XG5cblx0Y29uc3QgY29udmVydGVyUGFnZU1vZGVsID0gY29udmVydFBhZ2UoXG5cdFx0dGVtcGxhdGVUeXBlLFxuXHRcdG1ldGFNb2RlbCxcblx0XHRwcm9wZXJ0aWVzLm1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0bmV3IE1hbmlmZXN0V3JhcHBlcihwcm9wZXJ0aWVzLm1hbmlmZXN0U2V0dGluZ3MpLFxuXHRcdG1vY2soRGlhZ25vc3RpY3MpLFxuXHRcdHByb3BlcnRpZXMuY29udGV4dFBhdGgsXG5cdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXNcblx0KTtcblxuXHRjb25zdCBpbnRlcm5hbE1vZGVscyA9IHtcblx0XHRjb252ZXJ0ZXJDb250ZXh0OiB7XG5cdFx0XHRkYXRhOiBjb252ZXJ0ZXJQYWdlTW9kZWwsXG5cdFx0XHRpc1RlbXBsYXRlTW9kZWw6IHRydWVcblx0XHR9LFxuXHRcdHZpZXdEYXRhOiBuZXcgSlNPTk1vZGVsKHByb3BlcnRpZXMubWFuaWZlc3RTZXR0aW5ncylcblx0fTtcblx0Ly9CdWlsZCB0aGUgYXBwIGNvbXBvbmVudFxuXHRjb25zdCBhcHBJbml0ID0gYXdhaXQgaW5pdGlhbGl6ZUFwcENvbXBvbmVudChcblx0XHR7XG5cdFx0XHRtYW5pZmVzdFNldHRpbmdzOiBwcm9wZXJ0aWVzLm1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0XHRjZHNGaWxlOiBwcm9wZXJ0aWVzLm1ldGFkYXRhVXJsLFxuXHRcdFx0bWFpbkNvbnRleHRQYXRoOiBwcm9wZXJ0aWVzLmNvbnRleHRQYXRoXG5cdFx0fSxcblx0XHRwcm9wZXJ0aWVzLnRlbXBsYXRlTmFtZVxuXHQpO1xuXG5cdGNvbnN0IHByb2Nlc3NlZFZpZXcgPSBhd2FpdCBwcm9jZXNzVmlldyh2aWV3TmFtZSwgcHJvcGVydGllcy5tZXRhZGF0YVVybCwgcHJvcGVydGllcy5iaW5kaW5nQ29udGV4dHMsIGludGVybmFsTW9kZWxzKTtcblx0cmV0dXJuIHtcblx0XHR2aWV3OiBhd2FpdCBhcHBJbml0LnRlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIFhNTFZpZXcuY3JlYXRlKHtcblx0XHRcdFx0ZGVmaW5pdGlvbjogcHJvY2Vzc2VkVmlldy5hc1N0cmluZyxcblx0XHRcdFx0aWQ6IHByb3BlcnRpZXMuVmlld0lkXG5cdFx0XHR9KTtcblx0XHR9KSxcblx0XHRhcHBDb21wb25lbnQ6IGFwcEluaXQuYXBwQ29tcG9uZW50XG5cdH07XG59XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICogQHBhcmFtIG5hbWUgRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGZyYWdtZW50IHRvIGJlIHRlc3RlZC5cbiAqIEBwYXJhbSB0ZXN0RGF0YSBUZXN0IGRhdGEgY29uc2lzdGluZ1xuICogQHJldHVybnMgVGVtcGxhdGVkIGZyYWdtZW50IGFzIHN0cmluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0ZyYWdtZW50KG5hbWU6IHN0cmluZywgdGVzdERhdGE6IHsgW21vZGVsOiBzdHJpbmddOiBvYmplY3QgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cdGNvbnN0IGlucHV0WG1sID0gYDxyb290Pjxjb3JlOkZyYWdtZW50IGZyYWdtZW50TmFtZT1cIiR7bmFtZX1cIiB0eXBlPVwiWE1MXCIgeG1sbnM6Y29yZT1cInNhcC51aS5jb3JlXCIgLz48L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblxuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9LFxuXHRcdGFwcENvbXBvbmVudDogeyBnZXRTaWRlRWZmZWN0c1NlcnZpY2U6IGplc3QuZm4oKSwgZ2V0RGlhZ25vc3RpY3M6ICgpID0+IHVuZGVmaW5lZCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXHRzZXR0aW5ncy5hcHBDb21wb25lbnQuZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlLm1vY2tSZXR1cm5WYWx1ZShkZWZhdWx0RmFrZVNpZGVFZmZlY3RTZXJ2aWNlKTtcblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIikgYXMgYW55O1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxSZXN1bHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHN0cmluZyBvZiB0YWIgY2hhcmFjdGVycyBmb3IgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0gdGFiQ291bnQgVGhlIG51bWJlciBvZiB0YWJzIHRvIGdlbmVyYXRlLlxuICogQHBhcmFtIHRvQWRkIEFkZGl0aW9uYWwgdGFicyB0byBhZGQuXG4gKiBAcmV0dXJucyBBIHN0cmluZyBvZiB0YWIgY2hhcmFjdGVycy5cbiAqL1xuZnVuY3Rpb24gZ2V0VGFiKHRhYkNvdW50OiBudW1iZXIsIHRvQWRkID0gMCkge1xuXHRsZXQgdGFiID0gXCJcIjtcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0YWJDb3VudCArIHRvQWRkOyBpKyspIHtcblx0XHR0YWIgKz0gXCJcXHRcIjtcblx0fVxuXHRyZXR1cm4gdGFiO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIGR5bmFtaWMgSURzIGluIGEgc3RyaW5nIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqIEBwYXJhbSBpZCBUaGUgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGR5bmFtaWMgSURzLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB3aXRoIGR5bmFtaWMgSURzIHJlcGxhY2VkLlxuICovXG5mdW5jdGlvbiByZW1vdmVEeW5hbWljSWQoaWQ6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IFVJRCA9IC91aWQtLWlkLVxcZHsxM30tXFxkezEsNH0vO1xuXHRjb25zdCBDT05UUk9MSUQgPSAvaWQtXFxkezEzfS1cXGR7MSw0fS87XG5cdHJldHVybiBpZC5yZXBsYWNlKFVJRCwgXCJ1aWQtLWlkXCIpLnJlcGxhY2UoQ09OVFJPTElELCBcImlkXCIpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBwcm9wZXJ0eSBmcm9tIGEgY29udHJvbCwgd2l0aCBvcHRpb25zIHRvIGhhbmRsZSBkeW5hbWljIElEcy5cbiAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIHRvIHJldHJpZXZlIHRoZSBwcm9wZXJ0eSBmcm9tLlxuICogQHBhcmFtIHByb3BlcnR5S2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIHJldHJpZXZlLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHJldHJpZXZpbmcgdGhlIHByb3BlcnR5LlxuICogQHBhcmFtIG9wdGlvbnMua2VlcER5bmFtaWNJZHMgSWYgc2V0IHRvIHRydWUsIGR5bmFtaWMgSURzIGFyZSBub3QgcmVwbGFjZWQgd2l0aCBhIGNvbnN0YW50IHZhbHVlLlxuICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eSwgb3IgdW5kZWZpbmVkIGlmIHRoZSBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdC5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcGVydHkoXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdHByb3BlcnR5S2V5OiBzdHJpbmcsXG5cdG9wdGlvbnM/OiB7XG5cdFx0a2VlcER5bmFtaWNJZHM/OiBib29sZWFuO1xuXHR9XG4pIHtcblx0bGV0IHByb3BlcnR5VmFsdWUgPSBjb250cm9sLmdldFByb3BlcnR5KHByb3BlcnR5S2V5KTtcblx0aWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cHJvcGVydHlWYWx1ZSA9IG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzICE9PSB0cnVlID8gcmVtb3ZlRHluYW1pY0lkKHByb3BlcnR5VmFsdWUpIDogcHJvcGVydHlWYWx1ZTtcblx0XHRpZiAocHJvcGVydHlWYWx1ZSA9PT0gXCJcIikge1xuXHRcdFx0cHJvcGVydHlWYWx1ZSA9IFwiPGVtcHR5U3RyaW5nPlwiO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHRyeSB7XG5cdFx0XHRwcm9wZXJ0eVZhbHVlID0gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gU3RyaW5naWZ5IG1heSBmYWlsIGZvciBjaXJjdWxhciByZWZlcmVuY2VzIGJ1dCBpdCdzIG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZFxuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJvcGVydHlWYWx1ZTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJpbmRpbmcgb2YgYSBwcm9wZXJ0eSBmcm9tIGEgY29udHJvbC5cbiAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIHRvIHJldHJpZXZlIHRoZSBiaW5kaW5nIGZyb20uXG4gKiBAcGFyYW0gcHJvcGVydHlLZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gcmV0cmlldmUgdGhlIGJpbmRpbmcgZm9yLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHJldHJpZXZpbmcgdGhlIGJpbmRpbmcuXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgYmluZGluZyBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0QmluZGluZ0luZm8oXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdHByb3BlcnR5S2V5OiBzdHJpbmcsXG5cdG9wdGlvbnM/OiB7XG5cdFx0a2VlcER5bmFtaWNJZHM/OiBib29sZWFuO1xuXHR9XG4pIHtcblx0Y29uc3QgYmluZGluZ0RldGFpbCA9IHsgLi4uKGNvbnRyb2wuZ2V0QmluZGluZ0luZm8ocHJvcGVydHlLZXkpIGFzIFJlY29yZDxzdHJpbmcsIFByb3BlcnR5QmluZGluZ0luZm8+KSB9O1xuXHRpZiAoYmluZGluZ0RldGFpbC50eXBlPy5vT3V0cHV0Rm9ybWF0KSB7XG5cdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHR9XG5cdGlmIChiaW5kaW5nRGV0YWlsLnR5cGUpIHtcblx0XHRiaW5kaW5nRGV0YWlsLnR5cGVOYW1lID0gYmluZGluZ0RldGFpbC50eXBlLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHR9XG5cdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmcpIHtcblx0XHRkZWxldGUgYmluZGluZ0RldGFpbC5iaW5kaW5nO1xuXHR9XG5cdGNvbnN0IHZhbHVlID0gSlNPTi5zdHJpbmdpZnkoYmluZGluZ0RldGFpbCk7XG5cdHJldHVybiBvcHRpb25zPy5rZWVwRHluYW1pY0lkcyAhPT0gdHJ1ZSA/IHJlbW92ZUR5bmFtaWNJZCh2YWx1ZSkgOiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBwcm9wZXJ0aWVzIG9mIGEgY29udHJvbCBpbnRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIGNvbnRyb2wubVByb3BlcnRpZXMgVGhlIHByb3BlcnRpZXMgb2YgdGhlIGNvbnRyb2wuXG4gKiBAcGFyYW0gY29udHJvbC5tQmluZGluZ0luZm9zIFRoZSBiaW5kaW5nIGluZm9ybWF0aW9uIG9mIHRoZSBjb250cm9sLlxuICogQHBhcmFtIHRhYkNvdW50IFRoZSBjdXJyZW50IHRhYiBsZXZlbCBmb3IgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmluaGVyaXRlZFByb3BlcnRpZXMgSWYgc2V0IHRvIHRydWUsIGluaGVyaXRlZCBwcm9wZXJ0aWVzIGFyZSBpbmNsdWRlZCBpbiB0aGUgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUtleXMgTGlzdCBvZiBwcm9wZXJ0eSBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUJpbmRpbmdJbmZvS2V5cyBMaXN0IG9mIGJpbmRpbmcgaW5mbyBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250cm9sJ3MgcHJvcGVydGllcy5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplUHJvcGVydGllcyhcblx0Y29udHJvbDogQ29udHJvbCxcblx0dGFiQ291bnQ6IG51bWJlcixcblx0b3B0aW9ucz86IHtcblx0XHRpbmhlcml0ZWRQcm9wZXJ0aWVzPzogYm9vbGVhbjtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdFx0aWdub3JlS2V5cz86IHN0cmluZ1tdO1xuXHRcdGlnbm9yZUJpbmRpbmdJbmZvS2V5cz86IHN0cmluZ1tdO1xuXHR9XG4pOiBzdHJpbmcge1xuXHRsZXQgZGF0YSA9IFwiXCI7XG5cdGNvbnN0IGlnbm9yZUtleXMgPSBvcHRpb25zPy5pZ25vcmVLZXlzID8/IFtdO1xuXHRjb25zdCBrZWVwRHluYW1pY0lkcyA9IG9wdGlvbnM/LmtlZXBEeW5hbWljSWRzID09PSB0cnVlO1xuXHRjb25zdCBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldEFsbFByb3BlcnRpZXMoKSkuZmlsdGVyKChwcm9wZXJ0eUtleSkgPT4gIWlnbm9yZUtleXMuaW5jbHVkZXMocHJvcGVydHlLZXkpKTtcblx0cHJvcGVydGllcy5zb3J0KCk7XG5cdGZvciAoY29uc3QgcHJvcGVydHlLZXkgb2YgcHJvcGVydGllcykge1xuXHRcdGlmIChvcHRpb25zPy5pbmhlcml0ZWRQcm9wZXJ0aWVzID09PSB0cnVlIHx8ICFjb250cm9sLmlzUHJvcGVydHlJbml0aWFsKHByb3BlcnR5S2V5KSkge1xuXHRcdFx0bGV0IHByb3BlcnR5VmFsdWUgPSBnZXRQcm9wZXJ0eShjb250cm9sLCBwcm9wZXJ0eUtleSwgeyBrZWVwRHluYW1pY0lkcyB9KTtcblx0XHRcdGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBwcm9wZXJ0eVZhbHVlICE9PSBudWxsICYmICFwcm9wZXJ0eVZhbHVlLmlzQSkge1xuXHRcdFx0XHRjb25zdCBzb3J0ZWRLZXlzID0gT2JqZWN0LmtleXMocHJvcGVydHlWYWx1ZSkuc29ydCgpO1xuXHRcdFx0XHRjb25zdCBuZXdQcm9wZXJ0eVZhbHVlID0ge307XG5cdFx0XHRcdGZvciAoY29uc3Qga2V5IG9mIHNvcnRlZEtleXMpIHtcblx0XHRcdFx0XHQobmV3UHJvcGVydHlWYWx1ZSBhcyBhbnkpW2tleV0gPSAocHJvcGVydHlWYWx1ZSBhcyBuZXZlcilba2V5XTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gbmV3UHJvcGVydHlWYWx1ZTtcblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYih0YWJDb3VudCl9ICR7cHJvcGVydHlLZXl9OiAke3Byb3BlcnR5VmFsdWV9YDtcblx0XHRcdGlmIChjb250cm9sLmlzQm91bmQocHJvcGVydHlLZXkpICYmICEob3B0aW9ucz8uaWdub3JlQmluZGluZ0luZm9LZXlzID8/IFtdKS5pbmNsdWRlcyhwcm9wZXJ0eUtleSkpIHtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtwcm9wZXJ0eUtleX1fX0JpbmRpbmdJbmZvOiAke2dldEJpbmRpbmdJbmZvKGNvbnRyb2wsIHByb3BlcnR5S2V5LCB7IGtlZXBEeW5hbWljSWRzIH0pfWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG4vKipcbiAqIFNlcmlhbGl6ZXMgdGhlIGFzc29jaWF0aW9ucyBvZiBhIGNvbnRyb2wgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSB0YWJDb3VudCBUaGUgY3VycmVudCB0YWIgbGV2ZWwgZm9yIGluZGVudGF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVLZXlzIExpc3Qgb2YgYXNzb2NpYXRpb24ga2V5cyB0byBpZ25vcmUgZHVyaW5nIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5rZWVwRHluYW1pY0lkcyBJZiBzZXQgdG8gdHJ1ZSwgZHluYW1pYyBJRHMgYXJlIG5vdCByZXBsYWNlZCB3aXRoIGEgY29uc3RhbnQgdmFsdWUuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbCdzIGFzc29jaWF0aW9ucy5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQXNzb2NpYXRpb25zKFxuXHRjb250cm9sOiBDb250cm9sLFxuXHR0YWJDb3VudDogbnVtYmVyLFxuXHRvcHRpb25zPzoge1xuXHRcdGlnbm9yZUtleXM/OiBzdHJpbmdbXTtcblx0XHRrZWVwRHluYW1pY0lkcz86IGJvb2xlYW47XG5cdH1cbik6IHN0cmluZyB7XG5cdGxldCBkYXRhID0gXCJcIjtcblx0Y29uc3Qga2VlcER5bmFtaWNJZHMgPSBvcHRpb25zPy5rZWVwRHluYW1pY0lkcyA9PT0gdHJ1ZTtcblx0Y29uc3QgaWdub3JlS2V5cyA9IG9wdGlvbnM/Lmlnbm9yZUtleXMgPz8gW107XG5cdGNvbnN0IGFzc29jaWF0aW9uS2V5cyA9IE9iamVjdC5rZXlzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXRBbGxBc3NvY2lhdGlvbnMoKSkuZmlsdGVyKChrZXkpID0+ICFpZ25vcmVLZXlzLmluY2x1ZGVzKGtleSkpO1xuXHRhc3NvY2lhdGlvbktleXMuc29ydCgpO1xuXHRmb3IgKGNvbnN0IGFzc29jaWF0aW9uS2V5IG9mIGFzc29jaWF0aW9uS2V5cykge1xuXHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5nZXRBc3NvY2lhdGlvbihhc3NvY2lhdGlvbktleSwgbnVsbCk7XG5cdFx0aWYgKGFzc29jaWF0aW9uVmFsdWUpIHtcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShhc3NvY2lhdGlvblZhbHVlKSkge1xuXHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYXNzb2NpYXRpb25WYWx1ZSkgJiYgYXNzb2NpYXRpb25WYWx1ZS5sZW5ndGggIT09IDApIHtcblx0XHRcdFx0YXNzb2NpYXRpb25WYWx1ZSA9IGFzc29jaWF0aW9uVmFsdWUubWFwKChhc3NvY2lhdGlvblZhbHVlRWxlbWVudDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBhc3NvY2lhdGlvblZhbHVlRWxlbWVudCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0cmV0dXJuIE1hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50KSAmJiAha2VlcER5bmFtaWNJZHNcblx0XHRcdFx0XHRcdFx0PyBcIl9fZHluYW1pY0lkXCJcblx0XHRcdFx0XHRcdFx0OiByZW1vdmVEeW5hbWljSWQoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHthc3NvY2lhdGlvbktleX06ICR7YXNzb2NpYXRpb25WYWx1ZS5qb2luPy4oXCIsXCIpIHx8IHVuZGVmaW5lZH1gO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBTZXJpYWxpemVzIHRoZSBldmVudHMgb2YgYSBjb250cm9sIGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0gY29udHJvbCBUaGUgY29udHJvbCB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0gY29udHJvbC5tRXZlbnRSZWdpc3RyeSBUaGUgZXZlbnRzIG9mIHRoZSBjb250cm9sLlxuICogQHBhcmFtIHRhYkNvdW50IFRoZSBjdXJyZW50IHRhYiBsZXZlbCBmb3IgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25hbCBzZXR0aW5ncyBmb3Igc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUtleXMgTGlzdCBvZiBldmVudCBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250cm9sJ3MgZXZlbnRzLlxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVFdmVudHMoXG5cdGNvbnRyb2w6IENvbnRyb2wsXG5cdHRhYkNvdW50OiBudW1iZXIsXG5cdG9wdGlvbnM/OiB7XG5cdFx0aWdub3JlS2V5cz86IHN0cmluZ1tdO1xuXHR9XG4pOiBzdHJpbmcge1xuXHRsZXQgZGF0YSA9IFwiXCI7XG5cdGNvbnN0IGludGVybmFsVUk1RXZlbnRzID0gW1wiRXZlbnRIYW5kbGVyQ2hhbmdlXCIsIFwiX2NoYW5nZVwiXTtcblx0Y29uc3QgaWdub3JlS2V5cyA9IG9wdGlvbnM/Lmlnbm9yZUtleXMgPz8gW107XG5cdGNvbnN0IGV2ZW50SWRzID0gT2JqZWN0LmtleXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldEFsbEV2ZW50cygpKS5jb25jYXQoaW50ZXJuYWxVSTVFdmVudHMpO1xuXHRldmVudElkcy5zb3J0KCk7XG5cdGZvciAoY29uc3QgZXZlbnRLZXkgb2YgZXZlbnRJZHMpIHtcblx0XHRpZiAoY29udHJvbC5oYXNMaXN0ZW5lcnMoZXZlbnRLZXkpICYmICFpZ25vcmVLZXlzLmluY2x1ZGVzKGV2ZW50S2V5KSkge1xuXHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtldmVudEtleX06IHRydWVgO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBcdFNlcmlhbGl6ZXMgYSBVSTUgY29udHJvbCBvciBhbiBhcnJheSBvZiBVSTUgY29udHJvbHMgaW50byBhIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSBjb250cm9sVG9TZXJpYWxpemUgVGhlIGNvbnRyb2wgb3IgYXJyYXkgb2YgY29udHJvbHMgdG8gc2VyaWFsaXplLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9uYWwgc2V0dGluZ3MgZm9yIHNlcmlhbGl6YXRpb24uXG4gKiBAcGFyYW0gb3B0aW9ucy5pbmhlcml0ZWRQcm9wZXJ0aWVzIElmIHNldCB0byB0cnVlLCBpbmhlcml0ZWQgcHJvcGVydGllcyB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSBzZXJpYWxpemF0aW9uLlxuICogQHBhcmFtIG9wdGlvbnMuc2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyBJZiBzZXQgdG8gdHJ1ZSwgY3VzdG9tIHN0eWxlIGNsYXNzZXMgd2lsbCBiZSBpbmNsdWRlZCBpbiB0aGUgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmtlZXBEeW5hbWljSWRzIElmIHNldCB0byB0cnVlLCBkeW5hbWljIElEcyBhcmUgbm90IHJlcGxhY2VkIHdpdGggYSBjb25zdGFudCB2YWx1ZS5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUtleXMgTGlzdCBvZiBwcm9wZXJ0eSwgYXNzb2NpYXRpb24sIGFuZCBldmVudCBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLmlnbm9yZUJpbmRpbmdJbmZvS2V5cyBMaXN0IG9mIGJpbmRpbmcgaW5mbyBrZXlzIHRvIGlnbm9yZSBkdXJpbmcgc2VyaWFsaXphdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zLm5vcm1hbGl6ZUN1c3RvbURhdGEgSWYgc2V0IHRvIHRydWUsIGN1c3RvbSBkYXRhIHZhbHVlcyB0aGF0IGFyZSBvYmplY3RzIHdpdGggYSBcImN1c3RvbURhdGFcIiBwcm9wZXJ0eSB3aWxsIGJlIG5vcm1hbGl6ZWQgdG8gb25seSBpbmNsdWRlIHRoYXQgcHJvcGVydHkgdmFsdWUuXG4gKiBAcmV0dXJucyBBIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29udHJvbCBvciBhcnJheSBvZiBjb250cm9scy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbnRyb2woXG5cdGNvbnRyb2xUb1NlcmlhbGl6ZT86IFVJNUVsZW1lbnQgfCBVSTVFbGVtZW50W10sXG5cdG9wdGlvbnM/OiB7XG5cdFx0aW5oZXJpdGVkUHJvcGVydGllcz86IGJvb2xlYW47XG5cdFx0c2hvd0N1c3RvbVN0eWxlQ2xhc3Nlcz86IGJvb2xlYW47XG5cdFx0a2VlcER5bmFtaWNJZHM/OiBib29sZWFuO1xuXHRcdGlnbm9yZUtleXM/OiBzdHJpbmdbXTtcblx0XHRpZ25vcmVCaW5kaW5nSW5mb0tleXM/OiBzdHJpbmdbXTtcblx0XHRub3JtYWxpemVDdXN0b21EYXRhPzogYm9vbGVhbjtcblx0fVxuKTogc3RyaW5nIHwgc3RyaW5nW10ge1xuXHRsZXQgdGFiQ291bnQgPSAwO1xuXG5cdGNvbnN0IGtlZXBEeW5hbWljSWRzID0gb3B0aW9ucz8ua2VlcER5bmFtaWNJZHMgPT09IHRydWU7XG5cdGNvbnN0IHNlcmlhbGl6ZURlbGVnYXRlID0ge1xuXHRcdHN0YXJ0OiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGNvbnN0IGN1c3RvbURhdGEgPSBjb250cm9sLmdldEN1c3RvbURhdGE/LigpO1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoY3VzdG9tRGF0YSkgJiYgY3VzdG9tRGF0YS5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdGN1c3RvbURhdGEuc29ydCgoYSwgYikgPT4gYS5nZXRLZXkoKS5sb2NhbGVDb21wYXJlKGIuZ2V0S2V5KCkpKTtcblx0XHRcdFx0Y29udHJvbC5yZW1vdmVBbGxDdXN0b21EYXRhKCk7XG5cdFx0XHRcdGZvciAoY29uc3QgY2Qgb2YgY3VzdG9tRGF0YSkge1xuXHRcdFx0XHRcdGNvbnN0IGNkVmFsdWUgPSBjZC5nZXRWYWx1ZSgpO1xuXHRcdFx0XHRcdGlmIChvcHRpb25zPy5ub3JtYWxpemVDdXN0b21EYXRhID09PSB0cnVlICYmIHR5cGVvZiBjZFZhbHVlID09PSBcIm9iamVjdFwiICYmIFwiY3VzdG9tRGF0YVwiIGluIGNkVmFsdWUpIHtcblx0XHRcdFx0XHRcdGNkLnNldFZhbHVlKGNkVmFsdWUuY3VzdG9tRGF0YSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnRyb2wuYWRkQ3VzdG9tRGF0YShjZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLmdldFBhcmVudCgpKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5kZXhJblBhcmVudCA9IChjb250cm9sLmdldFBhcmVudCgpLmdldEFnZ3JlZ2F0aW9uKHNBZ2dyZWdhdGlvbk5hbWUpIGFzIE1hbmFnZWRPYmplY3RbXSk/LmluZGV4T2Y/Lihjb250cm9sKTtcblx0XHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnRyb2xEZXRhaWwgKz0gYCxcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gcmVtb3ZlRHluYW1pY0lkKGlkKSA6IGlkO1xuXHRcdFx0bGV0IGRhdGEgPSBge2lkOiAke01hbmFnZWRPYmplY3RNZXRhZGF0YS5pc0dlbmVyYXRlZElkKGlkKSAmJiAha2VlcER5bmFtaWNJZHMgPyBcIl9fZHluYW1pY0lkXCIgOiBpZH1gO1xuXHRcdFx0ZGF0YSArPSBzZXJpYWxpemVQcm9wZXJ0aWVzKGNvbnRyb2wsIHRhYkNvdW50LCBvcHRpb25zKTtcblx0XHRcdGlmIChjb250cm9sLm1BZ2dyZWdhdGlvbnM/LnRvb2x0aXAgJiYgdHlwZW9mIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucz8udG9vbHRpcCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHQvLyBpbiBjYXNlIHRlaCB0b29sdGlwIGlzIHN0b3JlZCBhIHMgc3RyaW5nIHRoZSBzZXJpYWxpemF0aW9uIG5lZWRzIHRvIGJlIGRvbmUgbWFudWFsbHlcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gdG9vbHRpcDogJHtjb250cm9sLm1BZ2dyZWdhdGlvbnMudG9vbHRpcH1gO1xuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBzZXJpYWxpemVBc3NvY2lhdGlvbnMoY29udHJvbCwgdGFiQ291bnQsIG9wdGlvbnMpO1xuXHRcdFx0aWYgKG9wdGlvbnM/LnNob3dDdXN0b21TdHlsZUNsYXNzZXMgPT09IHRydWUgJiYgZ2V0Q3VzdG9tU3R5bGVDbGFzc2VzKGNvbnRyb2wpLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gY3VzdG9tU3R5bGVDbGFzc2VzIDogJHtnZXRDdXN0b21TdHlsZUNsYXNzZXMoY29udHJvbCkuam9pbihcIiwgXCIpfWA7XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IHNlcmlhbGl6ZUV2ZW50cyhjb250cm9sLCB0YWJDb3VudCwgb3B0aW9ucyk7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiB7IG1CaW5kaW5nSW5mb3M6IFJlY29yZDxzdHJpbmcsIEJhc2VBZ2dyZWdhdGlvbkJpbmRpbmdJbmZvPiB9LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgb3V0ID0gYCxcXG4ke2dldFRhYih0YWJDb3VudCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblxuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0b3V0ICs9IGA9eyBwYXRoOicke2NvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0ucGF0aH0nLCB0ZW1wbGF0ZTpcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fSxcblx0XHRlbmRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0dGFiQ291bnQtLTtcblx0XHRcdGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3Nbc05hbWVdKSB7XG5cdFx0XHRcdHJldHVybiBgXFxuJHtnZXRUYWIodGFiQ291bnQpfX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYih0YWJDb3VudCl9XWA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogVUk1RWxlbWVudCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VzdG9tU3R5bGVDbGFzc2VzKGNvbnRyb2w6IENvbnRyb2wpIHtcblx0cmV0dXJuIChjb250cm9sIGFzIHVua25vd24gYXMgeyBhQ3VzdG9tU3R5bGVDbGFzc2VzOiBzdHJpbmdbXSB9KS5hQ3VzdG9tU3R5bGVDbGFzc2VzID8/IFtdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplQ29udHJvbEFzWE1MKFxuXHRjb250cm9sVG9TZXJpYWxpemU/OiBNYW5hZ2VkT2JqZWN0IHwgTWFuYWdlZE9iamVjdFtdIHwgbnVsbCxcblx0c2hvd0N1c3RvbVN0eWxlQ2xhc3NlcyA9IGZhbHNlLFxuXHRwcmVmZXJWYWx1ZSA9IGZhbHNlLFxuXHRpZ25vcmVLZXlzOiBzdHJpbmdbXSA9IFtdXG4pIHtcblx0bGV0IHRhYkNvdW50ID0gMDtcblx0Y29uc3QgZGVmaW5lZE5hbWVzcGFjZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuXHRmdW5jdGlvbiBnZXROYW1lc3BhY2VBbGlhcyhjbGFzc05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgbmFtZXNTcGxpdCA9IGNsYXNzTmFtZS5zcGxpdChcIi5cIik7XG5cdFx0Y29uc3QgbmFtZXNwYWNlID0gbmFtZXNTcGxpdC5zbGljZSgwLCAtMSk7XG5cdFx0bGV0IG5hbWVzcGFjZUFsaWFzID0gbmFtZXNwYWNlW25hbWVzcGFjZS5sZW5ndGggLSAxXTtcblx0XHRpZiAocmV2ZXNlTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV0pIHtcblx0XHRcdG5hbWVzcGFjZUFsaWFzID0gcmV2ZXNlTmFtZXNwYWNlTWFwW25hbWVzcGFjZS5qb2luKFwiLlwiKV07XG5cdFx0fVxuXHRcdGlmIChuYW1lc3BhY2VBbGlhcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRuYW1lc3BhY2VBbGlhcyA9IFwidGVzdFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZXNwYWNlQWxpYXM7XG5cdH1cblxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pPy5pbmRleE9mPy4oY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IG5hbWVGdWxsID0gY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKTtcblx0XHRcdGNvbnN0IG5hbWVzU3BsaXQgPSBuYW1lRnVsbC5zcGxpdChcIi5cIik7XG5cdFx0XHRjb25zdCBuYW1lID0gbmFtZXNTcGxpdFtuYW1lc1NwbGl0Lmxlbmd0aCAtIDFdO1xuXHRcdFx0Y29uc3QgbmFtZXNwYWNlQWxpYXMgPSBnZXROYW1lc3BhY2VBbGlhcyhuYW1lRnVsbCk7XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGA8JHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfVxcbmA7XG5cdFx0XHRpZiAoIWRlZmluZWROYW1lc3BhY2VzW25hbWVzcGFjZUFsaWFzXSkge1xuXHRcdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10gPSAxO1xuXHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2dldFRhYih0YWJDb3VudCl9eG1sbnM6JHtuYW1lc3BhY2VBbGlhc309XCIke25hbWVTcGFjZU1hcFtuYW1lc3BhY2VBbGlhc119XCJcXG5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmaW5lZE5hbWVzcGFjZXNbbmFtZXNwYWNlQWxpYXNdKys7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0Y29uc3QgbmFtZUZ1bGwgPSBjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpO1xuXHRcdFx0Y29uc3QgbmFtZXNTcGxpdCA9IG5hbWVGdWxsLnNwbGl0KFwiLlwiKTtcblx0XHRcdGNvbnN0IG5hbWUgPSBuYW1lc1NwbGl0W25hbWVzU3BsaXQubGVuZ3RoIC0gMV07XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKG5hbWVGdWxsKTtcblx0XHRcdGxldCBoYXNBZ2dyZWdhdGlvbiA9IGZhbHNlO1xuXHRcdFx0Zm9yIChjb25zdCBtQWdncmVnYXRpb25zS2V5IGluIGNvbnRyb2wubUFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0KCFBcnJheS5pc0FycmF5KGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSkgJiZcblx0XHRcdFx0XHRcdGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XSAhPT0gbnVsbCAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSB1bmRlZmluZWQpIHx8XG5cdFx0XHRcdFx0KEFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJiBjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0ubGVuZ3RoID4gMClcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0aGFzQWdncmVnYXRpb24gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkZWZpbmVkTmFtZXNwYWNlc1tuYW1lc3BhY2VBbGlhc10tLTtcblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gYDwvJHtuYW1lc3BhY2VBbGlhc306JHtuYW1lfT5gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGAvPmA7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBpZCA9IGNvbnRyb2wuZ2V0SWQoKTtcblx0XHRcdGlkID0gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiID8gcmVtb3ZlRHluYW1pY0lkKGlkKSA6IGlkO1xuXHRcdFx0bGV0IGRhdGEgPSBcIlwiO1xuXHRcdFx0aWYgKCFNYW5hZ2VkT2JqZWN0TWV0YWRhdGEuaXNHZW5lcmF0ZWRJZChpZCkpIHtcblx0XHRcdFx0ZGF0YSA9IGBpZD1cIiR7aWR9XCJgO1xuXHRcdFx0fVxuXHRcdFx0bGV0IGtleXMgPSBPYmplY3Qua2V5cyhjb250cm9sLm1Qcm9wZXJ0aWVzKVxuXHRcdFx0XHQuZmlsdGVyKChwcm9wTmFtZSkgPT4gcHJvcE5hbWUgIT09IFwiaWRcIilcblx0XHRcdFx0LmNvbmNhdChPYmplY3Qua2V5cyhjb250cm9sLm1CaW5kaW5nSW5mb3MpKVxuXHRcdFx0XHQuY29uY2F0KE9iamVjdC5rZXlzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXRBbGxBc3NvY2lhdGlvbnMoKSkpXG5cdFx0XHRcdC5jb25jYXQoT2JqZWN0LmtleXMoY29udHJvbC5tRXZlbnRSZWdpc3RyeSkpXG5cdFx0XHRcdC5maWx0ZXIoKHByb3BOYW1lKSA9PiAhaWdub3JlS2V5cy5pbmNsdWRlcyhwcm9wTmFtZSkpO1xuXHRcdFx0a2V5cyA9IGtleXMuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcblx0XHRcdGNvbnN0IHVuaXF1ZUtleXMgPSBuZXcgU2V0KGtleXMpO1xuXHRcdFx0a2V5cyA9IEFycmF5LmZyb20odW5pcXVlS2V5cyk7XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IG9mIGtleXMpIHtcblx0XHRcdFx0aWYgKCFwcmVmZXJWYWx1ZSAmJiBjb250cm9sLm1CaW5kaW5nSW5mb3MuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ0RldGFpbCA9IHsgLi4uY29udHJvbC5tQmluZGluZ0luZm9zW29Db250cm9sS2V5XSB9O1xuXHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLmJpbmRpbmdTdHJpbmcpIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0ke29Db250cm9sS2V5fT1cIiR7YmluZGluZ0RldGFpbC5iaW5kaW5nU3RyaW5nLnJlcGxhY2UoXCI+XCIsIFwiJmd0O1wiKX1cImA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmIChiaW5kaW5nRGV0YWlsLnR5cGU/Lm9PdXRwdXRGb3JtYXQpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGJpbmRpbmdEZXRhaWwudHlwZS5vT3V0cHV0Rm9ybWF0O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC5iaW5kaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBiaW5kaW5nRGV0YWlsLmJpbmRpbmc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoYmluZGluZ0RldGFpbC50ZW1wbGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgYmluZGluZ0RldGFpbC50ZW1wbGF0ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0ke29Db250cm9sS2V5fT0nJHtKU09OLnN0cmluZ2lmeShiaW5kaW5nRGV0YWlsKX0nYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkgJiYgY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV0gIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGxldCBwcm9wZXJ0eVZhbHVlID0gY29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVZhbHVlID0gcmVtb3ZlRHluYW1pY0lkKHByb3BlcnR5VmFsdWUpLnJlcGxhY2UoL1wiL2csIFwiJnF1b3Q7XCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0cHJvcGVydHlWYWx1ZSA9XG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBwcm9wZXJ0eVZhbHVlID09PSBcIm9iamVjdFwiID8gSlNPTi5zdHJpbmdpZnkocHJvcGVydHlWYWx1ZSkucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIikgOiBwcm9wZXJ0eVZhbHVlO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdC8vIFN0cmluZ2lmeSBtYXkgZmFpbCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlcyBidXQgaXQncyBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9ICR7b0NvbnRyb2xLZXl9PVwiJHtwcm9wZXJ0eVZhbHVlfVwiYDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLmdldEFzc29jaWF0aW9uKG9Db250cm9sS2V5LCBudWxsKSkge1xuXHRcdFx0XHRcdGxldCBhc3NvY2lhdGlvblZhbHVlID0gY29udHJvbC5nZXRBc3NvY2lhdGlvbihvQ29udHJvbEtleSwgbnVsbCk7XG5cdFx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGFzc29jaWF0aW9uVmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gW2Fzc29jaWF0aW9uVmFsdWVdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRhc3NvY2lhdGlvblZhbHVlID0gYXNzb2NpYXRpb25WYWx1ZS5tYXAoKGFzc29jaWF0aW9uVmFsdWVFbGVtZW50OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdHJldHVybiB0eXBlb2YgYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQgPT09IFwic3RyaW5nXCJcblx0XHRcdFx0XHRcdFx0PyByZW1vdmVEeW5hbWljSWQoYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQpXG5cdFx0XHRcdFx0XHRcdDogYXNzb2NpYXRpb25WYWx1ZUVsZW1lbnQ7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9ICR7b0NvbnRyb2xLZXl9PVwiJHsoYXNzb2NpYXRpb25WYWx1ZT8uam9pbj8uKFwiLFwiKSA/PyBhc3NvY2lhdGlvblZhbHVlKSB8fCB1bmRlZmluZWR9XCJgO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUV2ZW50UmVnaXN0cnkuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2wubUV2ZW50UmVnaXN0cnlbb0NvbnRyb2xLZXldWzBdPy5mRnVuY3Rpb24/Lm5hbWUpIHtcblx0XHRcdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gJHtvQ29udHJvbEtleX09XCIke2NvbnRyb2wubUV2ZW50UmVnaXN0cnlbb0NvbnRyb2xLZXldWzBdPy5mRnVuY3Rpb24/Lm5hbWV9XCJgO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkYXRhICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9ICR7b0NvbnRyb2xLZXl9PVwic29tZUV2ZW50SGFuZGxlclwiYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChzaG93Q3VzdG9tU3R5bGVDbGFzc2VzICYmIGdldEN1c3RvbVN0eWxlQ2xhc3Nlcyhjb250cm9sKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGRhdGEgKz0gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX0gY3VzdG9tU3R5bGVDbGFzc2VzIDogJHtnZXRDdXN0b21TdHlsZUNsYXNzZXMoY29udHJvbCkuam9pbihcIiwgXCIpfWA7XG5cdFx0XHR9XG5cdFx0XHRkYXRhICs9IGBcXG5gO1xuXHRcdFx0bGV0IGhhc0FnZ3JlZ2F0aW9uID0gZmFsc2U7XG5cdFx0XHRmb3IgKGNvbnN0IG1BZ2dyZWdhdGlvbnNLZXkgaW4gY29udHJvbC5tQWdncmVnYXRpb25zKSB7XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHQoIUFycmF5LmlzQXJyYXkoY29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldKSAmJlxuXHRcdFx0XHRcdFx0Y29udHJvbC5tQWdncmVnYXRpb25zW21BZ2dyZWdhdGlvbnNLZXldICE9PSBudWxsICYmXG5cdFx0XHRcdFx0XHRjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0gIT09IHVuZGVmaW5lZCkgfHxcblx0XHRcdFx0XHQoQXJyYXkuaXNBcnJheShjb250cm9sLm1BZ2dyZWdhdGlvbnNbbUFnZ3JlZ2F0aW9uc0tleV0pICYmIGNvbnRyb2wubUFnZ3JlZ2F0aW9uc1ttQWdncmVnYXRpb25zS2V5XS5sZW5ndGggPiAwKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRoYXNBZ2dyZWdhdGlvbiA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChoYXNBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRkYXRhICs9IFwiPlwiO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fSxcblx0XHRzdGFydEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBuYW1lc3BhY2VBbGlhcyA9IGdldE5hbWVzcGFjZUFsaWFzKGNvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCkpO1xuXHRcdFx0bGV0IG91dCA9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9PCR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PmA7XG5cdFx0XHR0YWJDb3VudCsrO1xuXHRcdFx0b3V0ICs9IGBcXG4ke2dldFRhYih0YWJDb3VudCl9YDtcblx0XHRcdHJldHVybiBvdXQ7XG5cdFx0fSxcblx0XHRlbmRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc05hbWU6IHN0cmluZykge1xuXHRcdFx0dGFiQ291bnQtLTtcblx0XHRcdGNvbnN0IG5hbWVzcGFjZUFsaWFzID0gZ2V0TmFtZXNwYWNlQWxpYXMoY29udHJvbC5nZXRNZXRhZGF0YSgpLmdldE5hbWUoKSk7XG5cdFx0XHRpZiAoY29udHJvbC5tQmluZGluZ0luZm9zW3NOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKHRhYkNvdW50KX08LyR7bmFtZXNwYWNlQWxpYXN9OiR7c05hbWV9PlxcbmA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRsZXQgb3V0WE1MO1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0b3V0WE1MID0gY29udHJvbFRvU2VyaWFsaXplLm1hcCgoY29udHJvbFRvUmVuZGVyOiBNYW5hZ2VkT2JqZWN0KSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvUmVuZGVyLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3V0WE1MID0gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cblx0cmV0dXJuIGZvcm1hdFhNTChgPHJvb3Q+JHtvdXRYTUx9PC9yb290PmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJNb2NrRnJhZ21lbnRzKC4uLmZyYWdtZW50czogTW9ja0ZyYWdtZW50W10pOiBqZXN0LlNweUluc3RhbmNlIHtcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcblx0Y29uc3Qgb3JpZ2luYWxMb2FkVGVtcGxhdGUgPSAoWE1MVGVtcGxhdGVQcm9jZXNzb3IgYXMgYW55KS5sb2FkVGVtcGxhdGVQcm9taXNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuXHRjb25zdCBsb2FkVGVtcGxhdGVTdHViID0gamVzdC5zcHlPbihYTUxUZW1wbGF0ZVByb2Nlc3NvciBhcyBhbnksIFwibG9hZFRlbXBsYXRlUHJvbWlzZVwiKTtcblx0bG9hZFRlbXBsYXRlU3R1Yi5tb2NrSW1wbGVtZW50YXRpb24oKCh0ZW1wbGF0ZU5hbWU6IHN0cmluZywgZXh0ZW5zaW9uOiBzdHJpbmcpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0aWYgKGZyYWdtZW50Lm5hbWUgPT09IHRlbXBsYXRlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gcGFyc2VYTUxTdHJpbmcoZnJhZ21lbnQuY29udGVudClbMF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBvcmlnaW5hbExvYWRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUsIGV4dGVuc2lvbik7XG5cdH0pIGFzICgoKSA9PiBFbGVtZW50KSB8IHVuZGVmaW5lZCk7XG5cdHJldHVybiBsb2FkVGVtcGxhdGVTdHViO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgYW4gYXBwQ29tcG9uZW50IGFuZCB0ZW1wbGF0ZUNvbXBvbmVudCB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICogQHBhcmFtIG9wdGlvbnNcbiAqIEBwYXJhbSBvcHRpb25zLmNkc0ZpbGUgVGhlIHBhdGggdG8gdGhlIENEUyBmaWxlIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIG9wdGlvbnMubWFpbkNvbnRleHRQYXRoIFRoZSBtYWluIGNvbnRleHQgcGF0aCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLnBhZ2VDb250ZW50IFRoZSBwYWdlIGNvbnRlbnQgdG8gdXNlIGZvciB0aGUgYXBwQ29tcG9uZW50XG4gKiBAcGFyYW0gb3B0aW9ucy5jb250ZW50IFRoZSBjb250ZW50IHRvIHVzZSBmb3IgdGhlIGFwcCBDb21wb25lbnRcbiAqIEBwYXJhbSBvcHRpb25zLmNvbXBvbmVudElkXG4gKiBAcGFyYW0gb3B0aW9ucy5tYW5pZmVzdFNldHRpbmdzXG4gKiBAcGFyYW0gb3B0aW9ucy5mZU1hbmlmZXN0U2V0dGluZ3MgVGhlIFNBUCBGaW9yaSBFbGVtZW50cyBtYW5pZmVzdCBzZXR0aW5nc1xuICogQHBhcmFtIG9wdGlvbnMuZ3VpZCBUaGUgR1VJRCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIHRvIHVzZSBmb3IgdGhlIGFwcENvbXBvbmVudFxuICogQHBhcmFtIHZpZXdMZXZlbCBUaGUgdmlldyBsZXZlbCB0byB1c2UgZm9yIHRoZSBhcHBDb21wb25lbnRcbiAqIEByZXR1cm5zIFRoZSBhcHBjb21wb25lbnQgYW5kIHRlbXBsYXRlQ29tcG9uZW50IHRvIHVzZSBmb3IgdGVzdGluZ1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5pdGlhbGl6ZUFwcENvbXBvbmVudChcblx0b3B0aW9ucz86IHtcblx0XHRjZHNGaWxlPzogc3RyaW5nO1xuXHRcdGNvbXBvbmVudElkPzogc3RyaW5nO1xuXHRcdG1haW5Db250ZXh0UGF0aD86IHN0cmluZztcblx0XHRwYWdlQ29udGVudD86IEZ1bmN0aW9uO1xuXHRcdG1hbmlmZXN0U2V0dGluZ3M/OiBQYXJ0aWFsPExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3M+O1xuXHRcdGZlTWFuaWZlc3RTZXR0aW5ncz86IFBhcnRpYWw8TWFuaWZlc3RTZXR0aW5nc1NhcEZFPjtcblx0XHRjb250ZW50PzogUGFydGlhbDxMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5nc1tcImNvbnRlbnRcIl0gfCBPYmplY3RQYWdlTWFuaWZlc3RTZXR0aW5nc1tcImNvbnRlbnRcIl0+O1xuXHRcdGd1aWQ/OiBzdHJpbmc7XG5cdH0sXG5cdG5hbWU/OiBzdHJpbmcsXG5cdHZpZXdMZXZlbD86IG51bWJlclxuKTogUHJvbWlzZTx7IGFwcENvbXBvbmVudDogQXBwQ29tcG9uZW50OyB0ZW1wbGF0ZUNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQgfT4ge1xuXHRqZXN0LnNweU9uKE9EYXRhTW9kZWwucHJvdG90eXBlLCBcInNldE9wdGltaXN0aWNCYXRjaEVuYWJsZXJcIikubW9ja1JldHVyblZhbHVlKHVuZGVmaW5lZCk7XG5cdGxldCBjZHNGaWxlID0gb3B0aW9ucz8uY2RzRmlsZTtcblx0aWYgKCFjZHNGaWxlKSB7XG5cdFx0Y2RzRmlsZSA9IGNvbXBpbGVDRFMocGF0aC5qb2luKF9fZGlybmFtZSwgXCIuL2RhdGEvUHJvZHVjdHMuY2RzXCIpKTtcblx0fVxuXHRjb25zdCBndWlkID0gb3B0aW9ucz8uZ3VpZCA/PyB1aWQoKTtcblx0Y29uc3QgaWQgPSBvcHRpb25zPy5jb21wb25lbnRJZCA/PyBgc2FwLmZlLnRlc3QuJHtndWlkfWA7XG5cdGNvbnN0IGNkc0NvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoY2RzRmlsZSkudG9TdHJpbmcoKTtcblx0d2luZG93Lmplc3RVSTUubW9ja1VybChgL3NhcC9mZS9jb3JlL21vY2svJHtndWlkfS8kbWV0YWRhdGE/c2FwLWxhbmd1YWdlPUVOYCwgY2RzQ29udGVudCk7XG5cdGlmICghb3B0aW9ucz8ucGFnZUNvbnRlbnQpIHtcblx0XHRqZXN0LnNweU9uKFBhZ2VDb250cm9sbGVyLnByb3RvdHlwZSwgXCJfb25JbnRlcm5hbEFmdGVyQmluZGluZ1wiKS5tb2NrSW1wbGVtZW50YXRpb24oamVzdC5mbigpKTtcblx0fVxuXHRjbGFzcyBEZWZhdWx0UGFnZUNvbnRlbnQgZXh0ZW5kcyBQYWdlQ29udHJvbGxlciB7XG5cdFx0cmVuZGVyKCkge1xuXHRcdFx0cmV0dXJuIDxQYWdlPjwvUGFnZT47XG5cdFx0fVxuXHR9XG5cdHNhcC51aS5kZWZpbmUoYHNhcC9mZS90ZXN0LyR7Z3VpZH0vQ29tcG9uZW50YCwgW1wic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCJdLCBmdW5jdGlvbiAoX0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KSB7XG5cdFx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0XHRyZXR1cm4gQXBwQ29tcG9uZW50LmV4dGVuZChgc2FwLmZlLnRlc3QuJHtndWlkfS5Db21wb25lbnRgLCB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRtYW5pZmVzdDoge1xuXHRcdFx0XHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRcdFx0XHRpZDogYHRlc3Qke2d1aWR9YCxcblx0XHRcdFx0XHRcdHRpdGxlOiBcIkFwcCBUaXRsZVwiLFxuXHRcdFx0XHRcdFx0ZGF0YVNvdXJjZXM6IHtcblx0XHRcdFx0XHRcdFx0bWFpblNlcnZpY2U6IHtcblx0XHRcdFx0XHRcdFx0XHR1cmk6IGAvc2FwL2ZlL2NvcmUvbW9jay8ke2d1aWR9L2AsXG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogXCJPRGF0YVwiLFxuXHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvZGF0YVZlcnNpb246IFwiNC4wXCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwic2FwLnVpNVwiOiB7XG5cdFx0XHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRcdFx0XCJcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFTb3VyY2U6IFwibWFpblNlcnZpY2VcIixcblx0XHRcdFx0XHRcdFx0XHRzZXR0aW5nczoge31cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdHJvdXRpbmc6IHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0czoge1xuXHRcdFx0XHRcdFx0XHRcdERlZmF1bHQ6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGU6IFwiQ29tcG9uZW50XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBuYW1lID8/IFwic2FwLmZlLmNvcmUuZnBtXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogXCJEZWZhdWx0XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR2aWV3TGV2ZWw6IHZpZXdMZXZlbCxcblx0XHRcdFx0XHRcdFx0XHRcdG9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQuLi4ob3B0aW9ucz8ubWFuaWZlc3RTZXR0aW5ncyA/PyB7fSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9wdGlvbnM/Lm1haW5Db250ZXh0UGF0aCA/PyBcIi9Qcm9kdWN0c1wiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpZXdUeXBlOiBcIkpTWFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZpZXdDb250ZW50OiBvcHRpb25zPy5wYWdlQ29udGVudCA/PyBEZWZhdWx0UGFnZUNvbnRlbnQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29udGVudDogb3B0aW9ucz8uY29udGVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRyb3V0ZXM6IFtcblx0XHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBcIjo/cXVlcnk6XCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBcIkRlZmF1bHRcIixcblx0XHRcdFx0XHRcdFx0XHRcdHRhcmdldDogXCJEZWZhdWx0XCJcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFwic2FwLmZlXCI6IG9wdGlvbnM/LmZlTWFuaWZlc3RTZXR0aW5ncyA/PyB7fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXHRqZXN0LnNweU9uKEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZS5wcm90b3R5cGUsIFwiZ2V0Q2FwYWJpbGl0aWVzXCIpLm1vY2tSZXR1cm5WYWx1ZShEZWZhdWx0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMpO1xuXHRjb25zdCBtb2NrQXBwQ29tcG9uZW50ID0gKGF3YWl0IENvbXBvbmVudC5jcmVhdGUoeyBuYW1lOiBgc2FwLmZlLnRlc3QuJHtndWlkfWAsIGlkOiBpZCB9KSkgYXMgQXBwQ29tcG9uZW50O1xuXG5cdGF3YWl0IG1vY2tBcHBDb21wb25lbnQuaW5pdGlhbGl6ZWQ7XG5cdGNvbnN0IHYgPSBhd2FpdCAobW9ja0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKS5nZXRUYXJnZXQoXCJEZWZhdWx0XCIpIGFzIHsgbG9hZD86IEZ1bmN0aW9uIH0pLmxvYWQ/LigpO1xuXHRyZXR1cm4geyBhcHBDb21wb25lbnQ6IG1vY2tBcHBDb21wb25lbnQsIHRlbXBsYXRlQ29tcG9uZW50OiB2Lm9iamVjdCB9O1xufVxuXG4vKipcbiAqIEZpbmQgYW4gZWxlbWVudCBpbiBhIGNvbGxlY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBzZWxlY3Rvci5cbiAqIEBwYXJhbSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gc2VsZWN0b3JcbiAqIEByZXR1cm5zIFRoZSBlbGVtZW50IHRoYXQgbWF0Y2hlcyB0aGUgc2VsZWN0b3Igb3IgdW5kZWZpbmVkIGlmIG5vIGVsZW1lbnQgbWF0Y2hlcyB0aGUgc2VsZWN0b3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRFbGVtZW50KGNvbGxlY3Rpb246IEhUTUxDb2xsZWN0aW9uLCBzZWxlY3RvcjogKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiBib29sZWFuKTogSFRNTEVsZW1lbnQgfCB1bmRlZmluZWQge1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBpKyspIHtcblx0XHRjb25zdCBlbGVtZW50ID0gY29sbGVjdGlvbi5pdGVtKGkpIGFzIEhUTUxFbGVtZW50O1xuXHRcdGlmIChzZWxlY3RvcihlbGVtZW50KSkge1xuXHRcdFx0cmV0dXJuIGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogV2FpdCBmb3IgYW4gZXZlbnQgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gKiBAcGFyYW0gY29udHJvbFxuICogQHBhcmFtIGV2ZW50TmFtZVxuICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZXZlbnQgaXMgcmVjZWl2ZWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JFdmVudDxUIGV4dGVuZHMge30+KGNvbnRyb2w6IEV2ZW50UHJvdmlkZXIsIGV2ZW50TmFtZTogc3RyaW5nKTogUHJvbWlzZTxVSTVFdmVudDxUPj4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRjb250cm9sLmF0dGFjaEV2ZW50T25jZShldmVudE5hbWUsIChldmVudDogRXZlbnQpID0+IHtcblx0XHRcdHJlc29sdmUoZXZlbnQgYXMgdW5rbm93biBhcyBVSTVFdmVudDxUPik7XG5cdFx0fSk7XG5cdH0pO1xufVxuXG4vKipcbiAqIFRlbGwgdGhlIGJpbmRpbmcgcGFyc2VyIHRvIGtlZXAgdGhlIGJpbmRpbmcgc3RyaW5ncyBmb3IgdGVzdGluZy5cbiAqIEBwYXJhbSBlbmFibGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBrZWVwQmluZGluZ1N0cmluZ0ZvclRlc3QoZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuXHRCaW5kaW5nUGFyc2VyLl9rZWVwQmluZGluZ1N0cmluZ3MgPSBlbmFibGVkO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsYXlGb3IoZGVsYXk6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuXHRyZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcblx0XHRzZXRUaW1lb3V0KHJlc29sdmUsIGRlbGF5KTtcblx0fSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXFGQUEsR0FBRyxDQUFDQyxRQUFRLENBQUMsQ0FBQyxFQUFTLGtDQUFrQyxDQUFDO0VBQzFEQyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxLQUFLLENBQUM7RUFFdEIsTUFBTUMsWUFBb0MsR0FBRztJQUM1Q0MsS0FBSyxFQUFFLGVBQWU7SUFDdEJDLFVBQVUsRUFBRSxxQkFBcUI7SUFDakNDLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCQyxJQUFJLEVBQUUsdUNBQXVDO0lBQzdDQyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDQyxTQUFTLEVBQUUsa0VBQWtFO0lBQzdFQyxHQUFHLEVBQUUsa0VBQWtFO0lBQ3ZFQyxVQUFVLEVBQUUsa0VBQWtFO0lBQzlFQyxPQUFPLEVBQUUsc0JBQXNCO0lBQy9CQyxRQUFRLEVBQUUsd0JBQXdCO0lBQ2xDQyxJQUFJLEVBQUUsYUFBYTtJQUNuQkMsRUFBRSxFQUFFLFdBQVc7SUFDZkMsQ0FBQyxFQUFFLE9BQU87SUFDVkMsQ0FBQyxFQUFFLG9CQUFvQjtJQUN2QkMsRUFBRSxFQUFFLFdBQVc7SUFDZkMsYUFBYSxFQUFFLHdCQUF3QjtJQUN2Q0MsR0FBRyxFQUFFLFlBQVk7SUFDakJDLGFBQWEsRUFBRSwwQkFBMEI7SUFDekNDLFFBQVEsRUFBRSxrQkFBa0I7SUFDNUJDLFFBQVEsRUFBRSxrQkFBa0I7SUFDNUJDLENBQUMsRUFBRSxnQkFBZ0I7SUFDbkJDLElBQUksRUFBRSxVQUFVO0lBQ2hCQyxlQUFlLEVBQUUsMEJBQTBCO0lBQzNDQyxVQUFVLEVBQUUseUJBQXlCO0lBQ3JDQyxVQUFVLEVBQUUscUJBQXFCO0lBQ2pDQyxLQUFLLEVBQUUsOEJBQThCO0lBQ3JDQyxJQUFJLEVBQUUsc0JBQXNCO0lBQzVCQyxTQUFTLEVBQUUseUJBQXlCO0lBQ3BDQyxlQUFlLEVBQUUsK0JBQStCO0lBQ2hEQyxTQUFTLEVB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
|