@sapui5/sap.fe.test 1.105.0 → 1.106.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.test",
3
- "version": "1.105.0",
3
+ "version": "1.106.0",
4
4
  "description": "SAPUI5 Library sap.fe.test",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "SAP SE (https://www.sap.com)",
@@ -6,7 +6,7 @@
6
6
  <copyright>SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.105.0</version>
9
+ <version>1.106.0</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.test</documentation>
12
12
 
@@ -16,6 +16,7 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
16
16
  _isFilterBarHidden: jest.fn(),
17
17
  _isMultiMode: jest.fn(),
18
18
  _getMultiModeControl: jest.fn(),
19
+ _getFilterBarVariantControl: jest.fn(),
19
20
  _hasMultiVisualizations: jest.fn(),
20
21
  _shouldAutoTriggerSearch: jest.fn(),
21
22
  _getTable: jest.fn(),
@@ -61,4 +62,4 @@ sap.ui.define(["@sap-ux/jest-mock-ui5/dist/generic", "sap/fe/core/controllerexte
61
62
  _exports.mockFilterBar = mockFilterBar;
62
63
  return _exports;
63
64
  }, false);
64
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2NrTGlzdFJlcG9ydENvbnRyb2xsZXIiLCJsaXN0UmVwb3J0IiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJqZXN0IiwiZm4iLCJfZ2V0Q29udHJvbHMiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJfaXNNdWx0aU1vZGUiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldFRhYmxlIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiX2VkaXRGbG93IiwibW9jayIsIkludGVybmFsRWRpdEZsb3ciLCJPYmplY3QiLCJhc3NpZ24iLCJQYWdlQ29udHJvbGxlciIsIm1vY2tPYmplY3RQYWdlQ29udHJvbGxlciIsIm9iamVjdFBhZ2UiLCJnZXRTdGlja3lFZGl0TW9kZSIsIm1vY2tDb250ZXh0Rm9yRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiY29udHJvbGxlciIsImJhc2UiLCJ2aWV3IiwiZ2V0VmlldyIsIm1vY2tlZEJhc2UiLCJtb2NrRmlsdGVyQmFyIiwiZmlsdGVyQmFyIiwiRmlsdGVyQmFyIiwid2FpdEZvckluaXRpYWxpemF0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGZU1vY2tzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTW9ja2VkSW5zdGFuY2UsIFVJNUluc3RhbmNlVHlwZSwgV2l0aE1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IHsgbW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgSW50ZXJuYWxFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxFZGl0Rmxvd1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5cbmludGVyZmFjZSBDb21tb25Db250cm9sbGVyVHlwZSB7XG5cdGdldEV4dGVuc2lvbkFQSTogYW55O1xuXHRfZWRpdEZsb3c6IFdpdGhNb2NrPEludGVybmFsRWRpdEZsb3c+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSB7XG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sOiBhbnk7XG5cdF9nZXRDb250cm9sczogYW55O1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW46IGFueTtcblx0X2lzTXVsdGlNb2RlOiBhbnk7XG5cdF9nZXRNdWx0aU1vZGVDb250cm9sOiBhbnk7XG5cdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBhbnk7XG5cdF9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaDogYW55O1xuXHRfZ2V0VGFibGU6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPYmplY3RQYWdlQ29udHJvbGxlclR5cGUge1xuXHRnZXRTdGlja3lFZGl0TW9kZTogYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0xpc3RSZXBvcnRDb250cm9sbGVyKCk6IFdpdGhNb2NrPENvbnRyb2xsZXIgJiBQYWdlQ29udHJvbGxlciAmIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiB7XG5cdC8vIG1hbnVhbGx5IGFkZCBMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyIGZ1bmN0aW9ucyBzaW5jZSBJIGFtIHVuYWJsZSB0byBpbXBvcnQgdGhlIHByb3RvdHlwZVxuXHRjb25zdCBsaXN0UmVwb3J0OiBNb2NrZWRJbnN0YW5jZTxMaXN0UmVwb3J0Q29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZT4gPSB7XG5cdFx0X2dldEZpbHRlckJhckNvbnRyb2w6IGplc3QuZm4oKSxcblx0XHRfZ2V0Q29udHJvbHM6IGplc3QuZm4oKSxcblx0XHRfaXNGaWx0ZXJCYXJIaWRkZW46IGplc3QuZm4oKSxcblx0XHRfaXNNdWx0aU1vZGU6IGplc3QuZm4oKSxcblx0XHRfZ2V0TXVsdGlNb2RlQ29udHJvbDogamVzdC5mbigpLFxuXHRcdF9oYXNNdWx0aVZpc3VhbGl6YXRpb25zOiBqZXN0LmZuKCksXG5cdFx0X3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoOiBqZXN0LmZuKCksXG5cdFx0X2dldFRhYmxlOiBqZXN0LmZuKCksXG5cdFx0Z2V0RXh0ZW5zaW9uQVBJOiBqZXN0LmZuKCksXG5cdFx0X2VkaXRGbG93OiBtb2NrKEludGVybmFsRWRpdEZsb3cpIGFzIGFueVxuXHR9O1xuXHRyZXR1cm4gT2JqZWN0LmFzc2lnbihtb2NrKFBhZ2VDb250cm9sbGVyKSBhcyBhbnksIGxpc3RSZXBvcnQpIGFzIFdpdGhNb2NrPFxuXHRcdENvbnRyb2xsZXIgJiBQYWdlQ29udHJvbGxlciAmIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlXG5cdD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb2NrT2JqZWN0UGFnZUNvbnRyb2xsZXIoKTogV2l0aE1vY2s8Q29udHJvbGxlciAmIFBhZ2VDb250cm9sbGVyICYgT2JqZWN0UGFnZUNvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGU+IHtcblx0Ly8gbWFudWFsbHkgYWRkIExpc3RSZXBvcnRDb250cm9sbGVyLmNvbnRyb2xsZXIgZnVuY3Rpb25zIHNpbmNlIEkgYW0gdW5hYmxlIHRvIGltcG9ydCB0aGUgcHJvdG90eXBlXG5cdGNvbnN0IG9iamVjdFBhZ2U6IE1vY2tlZEluc3RhbmNlPE9iamVjdFBhZ2VDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiA9IHtcblx0XHRnZXRTdGlja3lFZGl0TW9kZTogamVzdC5mbigpLFxuXHRcdGdldEV4dGVuc2lvbkFQSTogamVzdC5mbigpLFxuXHRcdF9lZGl0RmxvdzogbW9jayhJbnRlcm5hbEVkaXRGbG93KSBhcyBhbnlcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obW9jayhQYWdlQ29udHJvbGxlcikgYXMgYW55LCBvYmplY3RQYWdlKSBhcyBXaXRoTW9jazxcblx0XHRDb250cm9sbGVyICYgUGFnZUNvbnRyb2xsZXIgJiBPYmplY3RQYWdlQ29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZVxuXHQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0NvbnRleHRGb3JFeHRlbnNpb248RVhUIGV4dGVuZHMgb2JqZWN0LCBCQVNFIGV4dGVuZHMgb2JqZWN0Pihcblx0ZXh0ZW5zaW9uOiBFWFQsXG5cdGNvbnRyb2xsZXI6IFdpdGhNb2NrPENvbnRyb2xsZXI+LFxuXHRiYXNlPzogQkFTRVxuKTogV2l0aE1vY2s8RVhUICYgVUk1SW5zdGFuY2VUeXBlPEJBU0U+PiB7XG5cdGNvbnN0IHZpZXcgPSBjb250cm9sbGVyLmdldFZpZXcoKTtcblx0KGV4dGVuc2lvbiBhcyBhbnkpLmdldFZpZXcgPSAoKSA9PiB2aWV3O1xuXHRjb25zdCBtb2NrZWRCYXNlID0gbW9jayhiYXNlIHx8IHt9KTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obW9ja2VkQmFzZSwgZXh0ZW5zaW9uKSBhcyBXaXRoTW9jazxFWFQgJiBVSTVJbnN0YW5jZVR5cGU8QkFTRT4+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja0ZpbHRlckJhcigpOiBXaXRoTW9jazxcblx0RmlsdGVyQmFyICYgeyB3YWl0Rm9ySW5pdGlhbGl6YXRpb246IEZ1bmN0aW9uOyBfYlNlYXJjaFRyaWdnZXJlZDogQm9vbGVhbjsgX2dldENvbmRpdGlvbk1vZGVsOiBGdW5jdGlvbiB9XG4+IHtcblx0Y29uc3QgZmlsdGVyQmFyID0gbW9jayhGaWx0ZXJCYXIpIGFzIFdpdGhNb2NrPFxuXHRcdEZpbHRlckJhciAmIHsgd2FpdEZvckluaXRpYWxpemF0aW9uOiBGdW5jdGlvbjsgX2JTZWFyY2hUcmlnZ2VyZWQ6IEJvb2xlYW47IF9nZXRDb25kaXRpb25Nb2RlbDogRnVuY3Rpb24gfVxuXHQ+O1xuXHRmaWx0ZXJCYXIubW9jay53YWl0Rm9ySW5pdGlhbGl6YXRpb24gPSBqZXN0LmZuKCk7XG5cdHJldHVybiBmaWx0ZXJCYXI7XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7RUEyQk8sU0FBU0Esd0JBQVQsR0FBNkg7SUFDbkk7SUFDQSxJQUFNQyxVQUEyRSxHQUFHO01BQ25GQyxvQkFBb0IsRUFBRUMsSUFBSSxDQUFDQyxFQUFMLEVBRDZEO01BRW5GQyxZQUFZLEVBQUVGLElBQUksQ0FBQ0MsRUFBTCxFQUZxRTtNQUduRkUsa0JBQWtCLEVBQUVILElBQUksQ0FBQ0MsRUFBTCxFQUgrRDtNQUluRkcsWUFBWSxFQUFFSixJQUFJLENBQUNDLEVBQUwsRUFKcUU7TUFLbkZJLG9CQUFvQixFQUFFTCxJQUFJLENBQUNDLEVBQUwsRUFMNkQ7TUFNbkZLLHVCQUF1QixFQUFFTixJQUFJLENBQUNDLEVBQUwsRUFOMEQ7TUFPbkZNLHdCQUF3QixFQUFFUCxJQUFJLENBQUNDLEVBQUwsRUFQeUQ7TUFRbkZPLFNBQVMsRUFBRVIsSUFBSSxDQUFDQyxFQUFMLEVBUndFO01BU25GUSxlQUFlLEVBQUVULElBQUksQ0FBQ0MsRUFBTCxFQVRrRTtNQVVuRlMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLGdCQUFEO0lBVm9FLENBQXBGO0lBWUEsT0FBT0MsTUFBTSxDQUFDQyxNQUFQLENBQWNILElBQUksQ0FBQ0ksY0FBRCxDQUFsQixFQUEyQ2pCLFVBQTNDLENBQVA7RUFHQTs7OztFQUVNLFNBQVNrQix3QkFBVCxHQUE2SDtJQUNuSTtJQUNBLElBQU1DLFVBQTJFLEdBQUc7TUFDbkZDLGlCQUFpQixFQUFFbEIsSUFBSSxDQUFDQyxFQUFMLEVBRGdFO01BRW5GUSxlQUFlLEVBQUVULElBQUksQ0FBQ0MsRUFBTCxFQUZrRTtNQUduRlMsU0FBUyxFQUFFQyxJQUFJLENBQUNDLGdCQUFEO0lBSG9FLENBQXBGO0lBS0EsT0FBT0MsTUFBTSxDQUFDQyxNQUFQLENBQWNILElBQUksQ0FBQ0ksY0FBRCxDQUFsQixFQUEyQ0UsVUFBM0MsQ0FBUDtFQUdBOzs7O0VBRU0sU0FBU0UsdUJBQVQsQ0FDTkMsU0FETSxFQUVOQyxVQUZNLEVBR05DLElBSE0sRUFJa0M7SUFDeEMsSUFBTUMsSUFBSSxHQUFHRixVQUFVLENBQUNHLE9BQVgsRUFBYjs7SUFDQ0osU0FBRCxDQUFtQkksT0FBbkIsR0FBNkI7TUFBQSxPQUFNRCxJQUFOO0lBQUEsQ0FBN0I7O0lBQ0EsSUFBTUUsVUFBVSxHQUFHZCxJQUFJLENBQUNXLElBQUksSUFBSSxFQUFULENBQXZCO0lBQ0EsT0FBT1QsTUFBTSxDQUFDQyxNQUFQLENBQWNXLFVBQWQsRUFBMEJMLFNBQTFCLENBQVA7RUFDQTs7OztFQUVNLFNBQVNNLGFBQVQsR0FFTDtJQUNELElBQU1DLFNBQVMsR0FBR2hCLElBQUksQ0FBQ2lCLFNBQUQsQ0FBdEI7SUFHQUQsU0FBUyxDQUFDaEIsSUFBVixDQUFla0IscUJBQWYsR0FBdUM3QixJQUFJLENBQUNDLEVBQUwsRUFBdkM7SUFDQSxPQUFPMEIsU0FBUDtFQUNBIn0=
65
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtb2NrTGlzdFJlcG9ydENvbnRyb2xsZXIiLCJsaXN0UmVwb3J0IiwiX2dldEZpbHRlckJhckNvbnRyb2wiLCJqZXN0IiwiZm4iLCJfZ2V0Q29udHJvbHMiLCJfaXNGaWx0ZXJCYXJIaWRkZW4iLCJfaXNNdWx0aU1vZGUiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsIl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiX3Nob3VsZEF1dG9UcmlnZ2VyU2VhcmNoIiwiX2dldFRhYmxlIiwiZ2V0RXh0ZW5zaW9uQVBJIiwiX2VkaXRGbG93IiwibW9jayIsIkludGVybmFsRWRpdEZsb3ciLCJPYmplY3QiLCJhc3NpZ24iLCJQYWdlQ29udHJvbGxlciIsIm1vY2tPYmplY3RQYWdlQ29udHJvbGxlciIsIm9iamVjdFBhZ2UiLCJnZXRTdGlja3lFZGl0TW9kZSIsIm1vY2tDb250ZXh0Rm9yRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiY29udHJvbGxlciIsImJhc2UiLCJ2aWV3IiwiZ2V0VmlldyIsIm1vY2tlZEJhc2UiLCJtb2NrRmlsdGVyQmFyIiwiZmlsdGVyQmFyIiwiRmlsdGVyQmFyIiwid2FpdEZvckluaXRpYWxpemF0aW9uIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGZU1vY2tzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTW9ja2VkSW5zdGFuY2UsIFVJNUluc3RhbmNlVHlwZSwgV2l0aE1vY2sgfSBmcm9tIFwiQHNhcC11eC9qZXN0LW1vY2stdWk1L2Rpc3QvZ2VuZXJpY1wiO1xuaW1wb3J0IHsgbW9jayB9IGZyb20gXCJAc2FwLXV4L2plc3QtbW9jay11aTUvZGlzdC9nZW5lcmljXCI7XG5pbXBvcnQgSW50ZXJuYWxFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxFZGl0Rmxvd1wiO1xuaW1wb3J0IFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbGxlciBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5cbmludGVyZmFjZSBDb21tb25Db250cm9sbGVyVHlwZSB7XG5cdGdldEV4dGVuc2lvbkFQSTogYW55O1xuXHRfZWRpdEZsb3c6IFdpdGhNb2NrPEludGVybmFsRWRpdEZsb3c+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RSZXBvcnRDb250cm9sbGVyVHlwZSB7XG5cdF9nZXRGaWx0ZXJCYXJDb250cm9sOiBhbnk7XG5cdF9nZXRDb250cm9sczogYW55O1xuXHRfaXNGaWx0ZXJCYXJIaWRkZW46IGFueTtcblx0X2lzTXVsdGlNb2RlOiBhbnk7XG5cdF9nZXRNdWx0aU1vZGVDb250cm9sOiBhbnk7XG5cdF9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbDogYW55O1xuXHRfaGFzTXVsdGlWaXN1YWxpemF0aW9uczogYW55O1xuXHRfc2hvdWxkQXV0b1RyaWdnZXJTZWFyY2g6IGFueTtcblx0X2dldFRhYmxlOiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0UGFnZUNvbnRyb2xsZXJUeXBlIHtcblx0Z2V0U3RpY2t5RWRpdE1vZGU6IGFueTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tMaXN0UmVwb3J0Q29udHJvbGxlcigpOiBXaXRoTW9jazxDb250cm9sbGVyICYgUGFnZUNvbnRyb2xsZXIgJiBMaXN0UmVwb3J0Q29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZT4ge1xuXHQvLyBtYW51YWxseSBhZGQgTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlciBmdW5jdGlvbnMgc2luY2UgSSBhbSB1bmFibGUgdG8gaW1wb3J0IHRoZSBwcm90b3R5cGVcblx0Y29uc3QgbGlzdFJlcG9ydDogTW9ja2VkSW5zdGFuY2U8TGlzdFJlcG9ydENvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGU+ID0ge1xuXHRcdF9nZXRGaWx0ZXJCYXJDb250cm9sOiBqZXN0LmZuKCksXG5cdFx0X2dldENvbnRyb2xzOiBqZXN0LmZuKCksXG5cdFx0X2lzRmlsdGVyQmFySGlkZGVuOiBqZXN0LmZuKCksXG5cdFx0X2lzTXVsdGlNb2RlOiBqZXN0LmZuKCksXG5cdFx0X2dldE11bHRpTW9kZUNvbnRyb2w6IGplc3QuZm4oKSxcblx0XHRfZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2w6IGplc3QuZm4oKSxcblx0XHRfaGFzTXVsdGlWaXN1YWxpemF0aW9uczogamVzdC5mbigpLFxuXHRcdF9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaDogamVzdC5mbigpLFxuXHRcdF9nZXRUYWJsZTogamVzdC5mbigpLFxuXHRcdGdldEV4dGVuc2lvbkFQSTogamVzdC5mbigpLFxuXHRcdF9lZGl0RmxvdzogbW9jayhJbnRlcm5hbEVkaXRGbG93KSBhcyBhbnlcblx0fTtcblx0cmV0dXJuIE9iamVjdC5hc3NpZ24obW9jayhQYWdlQ29udHJvbGxlcikgYXMgYW55LCBsaXN0UmVwb3J0KSBhcyBXaXRoTW9jazxcblx0XHRDb250cm9sbGVyICYgUGFnZUNvbnRyb2xsZXIgJiBMaXN0UmVwb3J0Q29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZVxuXHQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbW9ja09iamVjdFBhZ2VDb250cm9sbGVyKCk6IFdpdGhNb2NrPENvbnRyb2xsZXIgJiBQYWdlQ29udHJvbGxlciAmIE9iamVjdFBhZ2VDb250cm9sbGVyVHlwZSAmIENvbW1vbkNvbnRyb2xsZXJUeXBlPiB7XG5cdC8vIG1hbnVhbGx5IGFkZCBMaXN0UmVwb3J0Q29udHJvbGxlci5jb250cm9sbGVyIGZ1bmN0aW9ucyBzaW5jZSBJIGFtIHVuYWJsZSB0byBpbXBvcnQgdGhlIHByb3RvdHlwZVxuXHRjb25zdCBvYmplY3RQYWdlOiBNb2NrZWRJbnN0YW5jZTxPYmplY3RQYWdlQ29udHJvbGxlclR5cGUgJiBDb21tb25Db250cm9sbGVyVHlwZT4gPSB7XG5cdFx0Z2V0U3RpY2t5RWRpdE1vZGU6IGplc3QuZm4oKSxcblx0XHRnZXRFeHRlbnNpb25BUEk6IGplc3QuZm4oKSxcblx0XHRfZWRpdEZsb3c6IG1vY2soSW50ZXJuYWxFZGl0RmxvdykgYXMgYW55XG5cdH07XG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1vY2soUGFnZUNvbnRyb2xsZXIpIGFzIGFueSwgb2JqZWN0UGFnZSkgYXMgV2l0aE1vY2s8XG5cdFx0Q29udHJvbGxlciAmIFBhZ2VDb250cm9sbGVyICYgT2JqZWN0UGFnZUNvbnRyb2xsZXJUeXBlICYgQ29tbW9uQ29udHJvbGxlclR5cGVcblx0Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tDb250ZXh0Rm9yRXh0ZW5zaW9uPEVYVCBleHRlbmRzIG9iamVjdCwgQkFTRSBleHRlbmRzIG9iamVjdD4oXG5cdGV4dGVuc2lvbjogRVhULFxuXHRjb250cm9sbGVyOiBXaXRoTW9jazxDb250cm9sbGVyPixcblx0YmFzZT86IEJBU0Vcbik6IFdpdGhNb2NrPEVYVCAmIFVJNUluc3RhbmNlVHlwZTxCQVNFPj4ge1xuXHRjb25zdCB2aWV3ID0gY29udHJvbGxlci5nZXRWaWV3KCk7XG5cdChleHRlbnNpb24gYXMgYW55KS5nZXRWaWV3ID0gKCkgPT4gdmlldztcblx0Y29uc3QgbW9ja2VkQmFzZSA9IG1vY2soYmFzZSB8fCB7fSk7XG5cdHJldHVybiBPYmplY3QuYXNzaWduKG1vY2tlZEJhc2UsIGV4dGVuc2lvbikgYXMgV2l0aE1vY2s8RVhUICYgVUk1SW5zdGFuY2VUeXBlPEJBU0U+Pjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vY2tGaWx0ZXJCYXIoKTogV2l0aE1vY2s8XG5cdEZpbHRlckJhciAmIHsgd2FpdEZvckluaXRpYWxpemF0aW9uOiBGdW5jdGlvbjsgX2JTZWFyY2hUcmlnZ2VyZWQ6IEJvb2xlYW47IF9nZXRDb25kaXRpb25Nb2RlbDogRnVuY3Rpb24gfVxuPiB7XG5cdGNvbnN0IGZpbHRlckJhciA9IG1vY2soRmlsdGVyQmFyKSBhcyBXaXRoTW9jazxcblx0XHRGaWx0ZXJCYXIgJiB7IHdhaXRGb3JJbml0aWFsaXphdGlvbjogRnVuY3Rpb247IF9iU2VhcmNoVHJpZ2dlcmVkOiBCb29sZWFuOyBfZ2V0Q29uZGl0aW9uTW9kZWw6IEZ1bmN0aW9uIH1cblx0Pjtcblx0ZmlsdGVyQmFyLm1vY2sud2FpdEZvckluaXRpYWxpemF0aW9uID0gamVzdC5mbigpO1xuXHRyZXR1cm4gZmlsdGVyQmFyO1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7O0VBNEJPLFNBQVNBLHdCQUFULEdBQTZIO0lBQ25JO0lBQ0EsSUFBTUMsVUFBMkUsR0FBRztNQUNuRkMsb0JBQW9CLEVBQUVDLElBQUksQ0FBQ0MsRUFBTCxFQUQ2RDtNQUVuRkMsWUFBWSxFQUFFRixJQUFJLENBQUNDLEVBQUwsRUFGcUU7TUFHbkZFLGtCQUFrQixFQUFFSCxJQUFJLENBQUNDLEVBQUwsRUFIK0Q7TUFJbkZHLFlBQVksRUFBRUosSUFBSSxDQUFDQyxFQUFMLEVBSnFFO01BS25GSSxvQkFBb0IsRUFBRUwsSUFBSSxDQUFDQyxFQUFMLEVBTDZEO01BTW5GSywyQkFBMkIsRUFBRU4sSUFBSSxDQUFDQyxFQUFMLEVBTnNEO01BT25GTSx1QkFBdUIsRUFBRVAsSUFBSSxDQUFDQyxFQUFMLEVBUDBEO01BUW5GTyx3QkFBd0IsRUFBRVIsSUFBSSxDQUFDQyxFQUFMLEVBUnlEO01BU25GUSxTQUFTLEVBQUVULElBQUksQ0FBQ0MsRUFBTCxFQVR3RTtNQVVuRlMsZUFBZSxFQUFFVixJQUFJLENBQUNDLEVBQUwsRUFWa0U7TUFXbkZVLFNBQVMsRUFBRUMsSUFBSSxDQUFDQyxnQkFBRDtJQVhvRSxDQUFwRjtJQWFBLE9BQU9DLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSCxJQUFJLENBQUNJLGNBQUQsQ0FBbEIsRUFBMkNsQixVQUEzQyxDQUFQO0VBR0E7Ozs7RUFFTSxTQUFTbUIsd0JBQVQsR0FBNkg7SUFDbkk7SUFDQSxJQUFNQyxVQUEyRSxHQUFHO01BQ25GQyxpQkFBaUIsRUFBRW5CLElBQUksQ0FBQ0MsRUFBTCxFQURnRTtNQUVuRlMsZUFBZSxFQUFFVixJQUFJLENBQUNDLEVBQUwsRUFGa0U7TUFHbkZVLFNBQVMsRUFBRUMsSUFBSSxDQUFDQyxnQkFBRDtJQUhvRSxDQUFwRjtJQUtBLE9BQU9DLE1BQU0sQ0FBQ0MsTUFBUCxDQUFjSCxJQUFJLENBQUNJLGNBQUQsQ0FBbEIsRUFBMkNFLFVBQTNDLENBQVA7RUFHQTs7OztFQUVNLFNBQVNFLHVCQUFULENBQ05DLFNBRE0sRUFFTkMsVUFGTSxFQUdOQyxJQUhNLEVBSWtDO0lBQ3hDLElBQU1DLElBQUksR0FBR0YsVUFBVSxDQUFDRyxPQUFYLEVBQWI7O0lBQ0NKLFNBQUQsQ0FBbUJJLE9BQW5CLEdBQTZCO01BQUEsT0FBTUQsSUFBTjtJQUFBLENBQTdCOztJQUNBLElBQU1FLFVBQVUsR0FBR2QsSUFBSSxDQUFDVyxJQUFJLElBQUksRUFBVCxDQUF2QjtJQUNBLE9BQU9ULE1BQU0sQ0FBQ0MsTUFBUCxDQUFjVyxVQUFkLEVBQTBCTCxTQUExQixDQUFQO0VBQ0E7Ozs7RUFFTSxTQUFTTSxhQUFULEdBRUw7SUFDRCxJQUFNQyxTQUFTLEdBQUdoQixJQUFJLENBQUNpQixTQUFELENBQXRCO0lBR0FELFNBQVMsQ0FBQ2hCLElBQVYsQ0FBZWtCLHFCQUFmLEdBQXVDOUIsSUFBSSxDQUFDQyxFQUFMLEVBQXZDO0lBQ0EsT0FBTzJCLFNBQVA7RUFDQSJ9
@@ -16,6 +16,7 @@ export interface ListReportControllerType {
16
16
  _isFilterBarHidden: any;
17
17
  _isMultiMode: any;
18
18
  _getMultiModeControl: any;
19
+ _getFilterBarVariantControl: any;
19
20
  _hasMultiVisualizations: any;
20
21
  _shouldAutoTriggerSearch: any;
21
22
  _getTable: any;
@@ -33,6 +34,7 @@ export function mockListReportController(): WithMock<Controller & PageController
33
34
  _isFilterBarHidden: jest.fn(),
34
35
  _isMultiMode: jest.fn(),
35
36
  _getMultiModeControl: jest.fn(),
37
+ _getFilterBarVariantControl: jest.fn(),
36
38
  _hasMultiVisualizations: jest.fn(),
37
39
  _shouldAutoTriggerSearch: jest.fn(),
38
40
  _getTable: jest.fn(),
@@ -196,6 +196,8 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
196
196
  return formatXML(xmlString);
197
197
  };
198
198
 
199
+ _exports.serializeXML = serializeXML;
200
+
199
201
  var formatXML = function (xmlString) {
200
202
  return format(xmlString, {
201
203
  parser: "xml",
@@ -245,9 +247,15 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
245
247
  function cds2edmx(cds) {
246
248
  var service = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "sap.fe.test.JestService";
247
249
  var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
248
- var csn = compiler.compileSources({
249
- "string.cds": cds
250
- }, {});
250
+ var sources = {
251
+ "source.cds": cds
252
+ }; // allow to include stuff from @sap/cds/common
253
+
254
+ if (cds.includes("'@sap/cds/common'")) {
255
+ sources["common.cds"] = fs.readFileSync(require.resolve("@sap/cds/common.cds"), "utf-8");
256
+ }
257
+
258
+ var csn = compiler.compileSources(sources, {});
251
259
 
252
260
  var edmxOptions = _objectSpread(_objectSpread({
253
261
  odataForeignKeys: true,
@@ -582,10 +590,12 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
582
590
  var controlDetail = "";
583
591
 
584
592
  if (sAggregationName) {
585
- var indexInParent = control.getParent().getAggregation(sAggregationName).indexOf(control);
593
+ if (control.getParent()) {
594
+ var indexInParent = control.getParent().getAggregation(sAggregationName).indexOf(control);
586
595
 
587
- if (indexInParent > 0) {
588
- controlDetail += ",\n".concat(getTab());
596
+ if (indexInParent > 0) {
597
+ controlDetail += ",\n".concat(getTab());
598
+ }
589
599
  }
590
600
  }
591
601
 
@@ -621,12 +631,23 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
621
631
  startAggregation: function (control, sName) {
622
632
  var out = ",\n".concat(getTab()).concat(sName);
623
633
  tabCount++;
624
- out += "=[\n".concat(getTab());
634
+
635
+ if (control.mBindingInfos[sName]) {
636
+ out += "={ path:'".concat(control.mBindingInfos[sName].path, "', template:\n").concat(getTab());
637
+ } else {
638
+ out += "=[\n".concat(getTab());
639
+ }
640
+
625
641
  return out;
626
642
  },
627
- endAggregation: function () {
643
+ endAggregation: function (control, sName) {
628
644
  tabCount--;
629
- return "\n".concat(getTab(), "]");
645
+
646
+ if (control.mBindingInfos[sName]) {
647
+ return "\n".concat(getTab(), "}");
648
+ } else {
649
+ return "\n".concat(getTab(), "]");
650
+ }
630
651
  }
631
652
  };
632
653
 
@@ -655,4 +676,4 @@ sap.ui.define(["@sap/cds-compiler", "fs", "path", "prettier", "sap/base/Log", "s
655
676
  _exports.createAwaiter = createAwaiter;
656
677
  return _exports;
657
678
  }, false);
658
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9jZXNzRnJhZ21lbnQiLCJuYW1lIiwidGVzdERhdGEiLCJpbnB1dFhtbCIsInBhcnNlciIsIndpbmRvdyIsIkRPTVBhcnNlciIsImlucHV0RG9jIiwicGFyc2VGcm9tU3RyaW5nIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJiaW5kaW5nQ29udGV4dHMiLCJtb2RlbCIsImpzb25Nb2RlbCIsIkpTT05Nb2RlbCIsInNldERhdGEiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInJlc3VsdERvYyIsImZyYWdtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGVuZ3RoIiwiZnJhZ21lbnQiLCJpbm5lckhUTUwiLCJ4bWxSZXN1bHQiLCJjaGlsZHJlbiIsIm91dGVySFRNTCIsImZvcm1hdFhtbCIsImZpbHRlciIsIm5vZGUiLCJ0eXBlIiwicmVxdWlyZSIsIkxvZyIsInNldExldmVsIiwiamVzdCIsInNldFRpbWVvdXQiLCJuYW1lU3BhY2VNYXAiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJyZWdpc3Rlck1hY3JvIiwibWFjcm9NZXRhZGF0YSIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsInVucmVnaXN0ZXJNYWNybyIsInBsdWdJbiIsIm5hbWVzcGFjZSIsInB1YmxpY05hbWVzcGFjZSIsInJ1blhQYXRoUXVlcnkiLCJzZWxlY3RvciIsInhtbGRvbSIsImV4cGVjdCIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwidG9Ob3RIYXZlQ29udHJvbCIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwieG1sRm9ybWF0dGVkIiwiZm9ybWF0WE1MIiwicmVwbGFjZSIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwic2VyaWFsaXplciIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZvcm1hdCIsInhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiZWRteEZpbGVOYW1lIiwicGF0aCIsImJhc2VuYW1lIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicmVzb2x2ZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwiY3NuIiwiY29tcGlsZXIiLCJjb21waWxlU291cmNlcyIsImVkbXhPcHRpb25zIiwib2RhdGFGb3JlaWduS2V5cyIsIm9kYXRhRm9ybWF0Iiwib2RhdGFDb250YWlubWVudCIsImVkbXgiLCJ0byIsIkVycm9yIiwiZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwic01ldGFkYXRhVXJsIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwidW5kZWZpbmVkIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsIk9iamVjdCIsImVudHJpZXMiLCJjb250ZW50IiwiZ2V0VGV4dCIsIlRFU1RWSUVXSUQiLCJhcHBseUZsZXhDaGFuZ2VzIiwiYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsInJlc3VsdFhNTCIsImNyZWF0ZUNoYW5nZXNPYmplY3QiLCJjaGFuZ2VzIiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJpZCIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm9BcHBDb21wb25lbnQiLCJnZXREaWFnbm9zdGljcyIsImZuIiwibW9ja1JldHVyblZhbHVlIiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJzcHlPbiIsIkFwcFN0b3JhZ2UiLCJQcm9taXNlIiwiQ29tcG9uZW50IiwiVXRpbHMiLCJGbGV4U3RhdGUiLCJpbml0aWFsaXplIiwiY29tcG9uZW50SWQiLCJYbWxQcmVwcm9jZXNzb3IiLCJnZXRDaGFuZ2VzRnJvbVhNTCIsInhtbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmbGF0TWFwIiwiZSIsImF0dHJpYnV0ZXMiLCJtYXAiLCJhIiwiYXR0ciIsImluY2x1ZGVzIiwiZ2V0VGVtcGxhdGluZ1Jlc3VsdCIsInhtbElucHV0IiwibUJpbmRpbmdDb250ZXh0cyIsIm1Nb2RlbHMiLCJ0ZW1wbGF0ZWRYbWwiLCJ4bWxEb2MiLCJoYXNPd25Qcm9wZXJ0eSIsImFzc2lnbiIsIlRlbXBsYXRlTW9kZWwiLCJrZXlzIiwiZm9yRWFjaCIsInNNb2RlbE5hbWUiLCJpc1RlbXBsYXRlTW9kZWwiLCJkYXRhIiwib1ByZXByb2Nlc3NvclNldHRpbmdzIiwibWV0YU1vZGVsIiwic0tleSIsImdldE9iamVjdCIsInRvQmVEZWZpbmVkIiwib01vZGVsIiwiY2hhbmdlc0FwcGxpZWQiLCJ0b0JlIiwiZ2V0VGVtcGxhdGVkWE1MIiwic2VyaWFsaXplQ29udHJvbCIsImNvbnRyb2xUb1NlcmlhbGl6ZSIsInRhYkNvdW50IiwiZ2V0VGFiIiwidG9BZGQiLCJ0YWIiLCJpIiwic2VyaWFsaXplRGVsZWdhdGUiLCJzdGFydCIsImNvbnRyb2wiLCJzQWdncmVnYXRpb25OYW1lIiwiY29udHJvbERldGFpbCIsImluZGV4SW5QYXJlbnQiLCJnZXRQYXJlbnQiLCJnZXRBZ2dyZWdhdGlvbiIsImluZGV4T2YiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJlbmQiLCJtaWRkbGUiLCJnZXRJZCIsIm9Db250cm9sS2V5IiwibVByb3BlcnRpZXMiLCJtQmluZGluZ0luZm9zIiwiYmluZGluZ0RldGFpbCIsInBhcnRzIiwiYmluZGluZ0luZm8iLCJtQXNzb2NpYXRpb25zIiwic3RhcnRBZ2dyZWdhdGlvbiIsInNOYW1lIiwib3V0IiwiZW5kQWdncmVnYXRpb24iLCJjb250cm9sVG9SZW5kZXIiLCJTZXJpYWxpemVyIiwic2VyaWFsaXplIiwiY3JlYXRlQXdhaXRlciIsImZuUmVzb2x2ZSIsIm15UHJvbWlzZSIsInByb21pc2UiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkplc3RUZW1wbGF0aW5nSGVscGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW55QW5ub3RhdGlvbiwgQ29udmVydGVkTWV0YWRhdGEsIEVudGl0eVNldCwgUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBjb21waWxlciBmcm9tIFwiQHNhcC9jZHMtY29tcGlsZXJcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHR5cGUgeyBSZXF1aXJlZE9wdGlvbnMgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJwcmV0dGllclwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tSdW50aW1lXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IElzc3VlQ2F0ZWdvcnksIElzc3VlU2V2ZXJpdHkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0lzc3VlTWFuYWdlclwiO1xuaW1wb3J0IHR5cGUgeyBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncywgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgU2lkZUVmZmVjdHNGYWN0b3J5IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgVGVtcGxhdGVNb2RlbCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgSW52aXNpYmxlVGV4dCBmcm9tIFwic2FwL3VpL2NvcmUvSW52aXNpYmxlVGV4dFwiO1xuaW1wb3J0IFNlcmlhbGl6ZXIgZnJvbSBcInNhcC91aS9jb3JlL3V0aWwvc2VyaWFsaXplci9TZXJpYWxpemVyXCI7XG5pbXBvcnQgWE1MUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL1hNTFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEZsZXhTdGF0ZSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9mbGV4U3RhdGUvRmxleFN0YXRlXCI7XG5pbXBvcnQgWG1sUHJlcHJvY2Vzc29yIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvX2ludGVybmFsL3ByZXByb2Nlc3NvcnMvWG1sUHJlcHJvY2Vzc29yXCI7XG5pbXBvcnQgQXBwU3RvcmFnZSBmcm9tIFwic2FwL3VpL2ZsL2luaXRpYWwvX2ludGVybmFsL1N0b3JhZ2VcIjtcbmltcG9ydCBVdGlscyBmcm9tIFwic2FwL3VpL2ZsL1V0aWxzXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTWV0YU1vZGVsXCI7XG5pbXBvcnQgX01ldGFkYXRhUmVxdWVzdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvbGliL19NZXRhZGF0YVJlcXVlc3RvclwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB4cGF0aCBmcm9tIFwieHBhdGhcIjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG5jb25zdCBmb3JtYXRYbWwgPSByZXF1aXJlKFwieG1sLWZvcm1hdHRlclwiKTtcblxuTG9nLnNldExldmVsKDEgYXMgYW55LCBcInNhcC51aS5jb3JlLnV0aWwuWE1MUHJlcHJvY2Vzc29yXCIpO1xuamVzdC5zZXRUaW1lb3V0KDQwMDAwKTtcblxuY29uc3QgbmFtZVNwYWNlTWFwID0ge1xuXHRcIm1hY3Jvc1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb1wiOiBcInNhcC5mZS5tYWNyb3NcIixcblx0XCJtYWNyb2RhdGFcIjogXCJodHRwOi8vc2NoZW1hcy5zYXAuY29tL3NhcHVpNS9leHRlbnNpb24vc2FwLnVpLmNvcmUuQ3VzdG9tRGF0YS8xXCIsXG5cdFwibG9nXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcInVuaXR0ZXN0XCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvcHJlcHJvY2Vzc29yZXh0ZW5zaW9uL3NhcC5mZS51bml0dGVzdGluZy8xXCIsXG5cdFwiY29udHJvbFwiOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xzXCIsXG5cdFwiY29yZVwiOiBcInNhcC51aS5jb3JlXCIsXG5cdFwibVwiOiBcInNhcC5tXCIsXG5cdFwiZlwiOiBcInNhcC51aS5sYXlvdXQuZm9ybVwiLFxuXHRcImludGVybmFsTWFjcm9cIjogXCJzYXAuZmUubWFjcm9zLmludGVybmFsXCIsXG5cdFwibWRjXCI6IFwic2FwLnVpLm1kY1wiLFxuXHRcIm1kY2F0XCI6IFwic2FwLnVpLm1kYy5hY3Rpb250b29sYmFyXCIsXG5cdFwibWRjRmllbGRcIjogXCJzYXAudWkubWRjLmZpZWxkXCIsXG5cdFwibWRjVGFibGVcIjogXCJzYXAudWkubWRjLnRhYmxlXCIsXG5cdFwidVwiOiBcInNhcC51aS51bmlmaWVkXCIsXG5cdFwibWFjcm9NaWNyb0NoYXJ0XCI6IFwic2FwLmZlLm1hY3Jvcy5taWNyb2NoYXJ0XCIsXG5cdFwibWljcm9DaGFydFwiOiBcInNhcC5zdWl0ZS51aS5taWNyb2NoYXJ0XCIsXG5cdFwibWFjcm9UYWJsZVwiOiBcInNhcC5mZS5tYWNyb3MudGFibGVcIlxufTtcbmNvbnN0IHNlbGVjdCA9IHhwYXRoLnVzZU5hbWVzcGFjZXMobmFtZVNwYWNlTWFwKTtcblxuZXhwb3J0IGNvbnN0IHJlZ2lzdGVyTWFjcm8gPSBmdW5jdGlvbiAobWFjcm9NZXRhZGF0YTogYW55KSB7XG5cdHJlZ2lzdGVyQnVpbGRpbmdCbG9jayhtYWNyb01ldGFkYXRhKTtcbn07XG5leHBvcnQgY29uc3QgdW5yZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEubmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHRpZiAobWFjcm9NZXRhZGF0YS5wdWJsaWNOYW1lc3BhY2UpIHtcblx0XHRYTUxQcmVwcm9jZXNzb3IucGx1Z0luKG51bGwsIG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlLCBtYWNyb01ldGFkYXRhLm5hbWUpO1xuXHR9XG59O1xuZXhwb3J0IGNvbnN0IHJ1blhQYXRoUXVlcnkgPSBmdW5jdGlvbiAoc2VsZWN0b3I6IHN0cmluZywgeG1sZG9tOiBOb2RlIHwgdW5kZWZpbmVkKSB7XG5cdHJldHVybiBzZWxlY3Qoc2VsZWN0b3IsIHhtbGRvbSk7XG59O1xuXG5leHBlY3QuZXh0ZW5kKHtcblx0dG9IYXZlQ29udHJvbCh4bWxkb20sIHNlbGVjdG9yKSB7XG5cdFx0Y29uc3Qgbm9kZXMgPSBydW5YUGF0aFF1ZXJ5KGAvcm9vdCR7c2VsZWN0b3J9YCwgeG1sZG9tKTtcblx0XHRyZXR1cm4ge1xuXHRcdFx0bWVzc2FnZTogKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBvdXRwdXRYbWwgPSBzZXJpYWxpemVYTUwoeG1sZG9tKTtcblx0XHRcdFx0cmV0dXJuIGBkaWQgbm90IGZpbmQgY29udHJvbHMgbWF0Y2hpbmcgJHtzZWxlY3Rvcn0gaW4gZ2VuZXJhdGVkIHhtbDpcXG4gJHtvdXRwdXRYbWx9YDtcblx0XHRcdH0sXG5cdFx0XHRwYXNzOiBub2RlcyAmJiBub2Rlcy5sZW5ndGggPj0gMVxuXHRcdH07XG5cdH0sXG5cdHRvTm90SGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgVGhlcmUgaXMgYSBjb250cm9sIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID09PSAwXG5cdFx0fTtcblx0fVxufSk7XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRCdWlsZGluZ0Jsb2NrWE1MID0gZnVuY3Rpb24gKHhtbFN0cmluZzogc3RyaW5nIHwgc3RyaW5nW10pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoeG1sU3RyaW5nKSkge1xuXHRcdHhtbFN0cmluZyA9IHhtbFN0cmluZy5qb2luKFwiXCIpO1xuXHR9XG5cdGxldCB4bWxGb3JtYXR0ZWQgPSBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcblx0eG1sRm9ybWF0dGVkID0geG1sRm9ybWF0dGVkLnJlcGxhY2UoL3VpZC0taWQtWzAtOV17MTN9LVswLTldezEsMn0vZywgXCJ1aWQtLWlkXCIpO1xuXHRyZXR1cm4geG1sRm9ybWF0dGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnRyb2xBdHRyaWJ1dGUgPSBmdW5jdGlvbiAoY29udHJvbFNlbGVjdG9yOiBzdHJpbmcsIGF0dHJpYnV0ZU5hbWU6IHN0cmluZywgeG1sRG9tOiBOb2RlKSB7XG5cdGNvbnN0IHNlbGVjdG9yID0gYHN0cmluZygvcm9vdCR7Y29udHJvbFNlbGVjdG9yfS9AJHthdHRyaWJ1dGVOYW1lfSlgO1xuXHRyZXR1cm4gcnVuWFBhdGhRdWVyeShzZWxlY3RvciwgeG1sRG9tKTtcbn07XG5cbmNvbnN0IHNlcmlhbGl6ZVhNTCA9IGZ1bmN0aW9uICh4bWxEb206IE5vZGUpIHtcblx0Y29uc3Qgc2VyaWFsaXplciA9IG5ldyB3aW5kb3cuWE1MU2VyaWFsaXplcigpO1xuXHRjb25zdCB4bWxTdHJpbmcgPSBzZXJpYWxpemVyLnNlcmlhbGl6ZVRvU3RyaW5nKHhtbERvbSk7XG5cdHJldHVybiBmb3JtYXRYTUwoeG1sU3RyaW5nKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRYTUwgPSBmdW5jdGlvbiAoeG1sU3RyaW5nOiBzdHJpbmcpIHtcblx0cmV0dXJuIGZvcm1hdChcblx0XHR4bWxTdHJpbmcsXG5cdFx0eyBwYXJzZXI6IFwieG1sXCIsIHhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eTogXCJpZ25vcmVcIiB9IGFzIFBhcnRpYWw8UmVxdWlyZWRPcHRpb25zPiAvKiBvcHRpb25zIGJ5IHRoZSBQcmV0dGllciBYTUwgcGx1Z2luICovXG5cdCk7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgYSBDRFMgZmlsZSBpbnRvIGFuIEVETVggZmlsZS5cbiAqXG4gKiBAcGFyYW0gY2RzVXJsIFRoZSBwYXRoIHRvIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIENEUyBkZWZpbml0aW9uLiBUaGlzIGZpbGUgbXVzdCBkZWNsYXJlIHRoZSBuYW1lc3BhY2VcbiAqIHNhcC5mZS50ZXN0IGFuZCBhIHNlcnZpY2UgSmVzdFNlcnZpY2VcbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHBhcmFtIGVkbXhGaWxlTmFtZSBBbGxvd3MgeW91IHRvIG92ZXJyaWRlIHRoZSBuYW1lIG9mIHRoZSBjb21waWxlZCBFRE1YIG1ldGFkYXRhIGZpbGVcbiAqIEByZXR1cm5zIFRoZSBwYXRoIG9mIHRoZSBnZW5lcmF0ZWQgRURNWFxuICovXG5leHBvcnQgY29uc3QgY29tcGlsZUNEUyA9IGZ1bmN0aW9uIChcblx0Y2RzVXJsOiBzdHJpbmcsXG5cdG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9LFxuXHRlZG14RmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGNkc1VybCkucmVwbGFjZShcIi5jZHNcIiwgXCIueG1sXCIpXG4pIHtcblx0Y29uc3QgY2RzU3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGNkc1VybCwgXCJ1dGYtOFwiKTtcblx0Y29uc3QgZWRteENvbnRlbnQgPSBjZHMyZWRteChjZHNTdHJpbmcsIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIiwgb3B0aW9ucyk7XG5cdGNvbnN0IGRpciA9IHBhdGgucmVzb2x2ZShjZHNVcmwsIFwiLi5cIiwgXCJnZW5cIik7XG5cblx0Y29uc3QgZWRteEZpbGVQYXRoID0gcGF0aC5yZXNvbHZlKGRpciwgZWRteEZpbGVOYW1lKTtcblxuXHRmcy5ta2RpclN5bmMoZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuXHRmcy53cml0ZUZpbGVTeW5jKGVkbXhGaWxlUGF0aCwgZWRteENvbnRlbnQpO1xuXHRyZXR1cm4gZWRteEZpbGVQYXRoO1xufTtcblxuLyoqXG4gKiBDb21waWxlIENEUyB0byBFRE1YLlxuICpcbiAqIEBwYXJhbSBjZHMgVGhlIENEUyBtb2RlbC4gSXQgbXVzdCBkZWZpbmUgYXQgbGVhc3Qgb25lIHNlcnZpY2UuXG4gKiBAcGFyYW0gc2VydmljZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIHNlcnZpY2UgdG8gYmUgY29tcGlsZWQuIERlZmF1bHRzIHRvIFwic2FwLmZlLnRlc3QuSmVzdFNlcnZpY2VcIi5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIGNyZWF0aW5nIHRoZSBFRE1YIG91dHB1dFxuICogQHJldHVybnMgVGhlIGNvbXBpbGVkIHNlcnZpY2UgbW9kZWwgYXMgRURNWC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNkczJlZG14KGNkczogc3RyaW5nLCBzZXJ2aWNlID0gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7fSkge1xuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyh7IFwic3RyaW5nLmNkc1wiOiBjZHMgfSwge30pO1xuXG5cdGNvbnN0IGVkbXhPcHRpb25zOiBjb21waWxlci5PRGF0YU9wdGlvbnMgPSB7XG5cdFx0b2RhdGFGb3JlaWduS2V5czogdHJ1ZSxcblx0XHRvZGF0YUZvcm1hdDogXCJzdHJ1Y3R1cmVkXCIsXG5cdFx0b2RhdGFDb250YWlubWVudDogZmFsc2UsXG5cdFx0Li4ub3B0aW9ucyxcblx0XHRzZXJ2aWNlOiBzZXJ2aWNlXG5cdH07XG5cblx0Y29uc3QgZWRteCA9IGNvbXBpbGVyLnRvLmVkbXgoY3NuLCBlZG14T3B0aW9ucyk7XG5cdGlmICghZWRteCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ29tcGlsYXRpb24gZmFpbGVkLiBIaW50OiBNYWtlIHN1cmUgdGhhdCB0aGUgQ0RTIG1vZGVsIGRlZmluZXMgc2VydmljZSAke3NlcnZpY2V9LmApO1xuXHR9XG5cdHJldHVybiBlZG14O1xufVxuXG5leHBvcnQgY29uc3QgZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSA9IGFzeW5jIGZ1bmN0aW9uIChvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCk6IFByb21pc2U8YW55PiB7XG5cdGNvbnN0IG9TZXJ2aWNlQ29udGV4dCA9IHsgc2NvcGVPYmplY3Q6IHt9LCBzY29wZVR5cGU6IFwiXCIsIHNldHRpbmdzOiB7fSB9O1xuXHRyZXR1cm4gbmV3IFNpZGVFZmZlY3RzRmFjdG9yeSgpLmNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dCkudGhlbihmdW5jdGlvbiAob1NlcnZpY2VJbnN0YW5jZTogYW55KSB7XG5cdFx0Y29uc3Qgb0plc3RTaWRlRWZmZWN0c1NlcnZpY2UgPSBvU2VydmljZUluc3RhbmNlLmdldEludGVyZmFjZSgpO1xuXHRcdG9KZXN0U2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzY29wZU9iamVjdDoge1xuXHRcdFx0XHRcdGdldE1vZGVsOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRnZXRNZXRhTW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gb01ldGFNb2RlbDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fTtcblx0XHRyZXR1cm4gb0plc3RTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZha2VEaWFnbm9zdGljcyA9IGZ1bmN0aW9uICgpOiBJRGlhZ25vc3RpY3Mge1xuXHRjb25zdCBpc3N1ZXM6IGFueVtdID0gW107XG5cdHJldHVybiB7XG5cdFx0YWRkSXNzdWUoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogdm9pZCB7XG5cdFx0XHRpc3N1ZXMucHVzaCh7XG5cdFx0XHRcdGlzc3VlQ2F0ZWdvcnksXG5cdFx0XHRcdGlzc3VlU2V2ZXJpdHksXG5cdFx0XHRcdGRldGFpbHNcblx0XHRcdH0pO1xuXHRcdH0sXG5cdFx0Z2V0SXNzdWVzKCk6IGFueVtdIHtcblx0XHRcdHJldHVybiBpc3N1ZXM7XG5cdFx0fSxcblx0XHRjaGVja0lmSXNzdWVFeGlzdHMoaXNzdWVDYXRlZ29yeTogSXNzdWVDYXRlZ29yeSwgaXNzdWVTZXZlcml0eTogSXNzdWVTZXZlcml0eSwgZGV0YWlsczogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0XHRyZXR1cm4gaXNzdWVzLmZpbmQoKGlzc3VlKSA9PiB7XG5cdFx0XHRcdHJldHVybiBpc3N1ZS5pc3N1ZUNhdGVnb3J5ID09PSBpc3N1ZUNhdGVnb3J5ICYmIGlzc3VlLmlzc3VlU2V2ZXJpdHkgPT09IGlzc3VlU2V2ZXJpdHkgJiYgaXNzdWUuZGV0YWlscyA9PT0gZGV0YWlscztcblx0XHRcdH0pO1xuXHRcdH1cblx0fTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yVGVzdCA9IGZ1bmN0aW9uIChcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhLFxuXHRtYW5pZmVzdFNldHRpbmdzOiBMaXN0UmVwb3J0TWFuaWZlc3RTZXR0aW5ncyB8IE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzXG4pIHtcblx0Y29uc3QgZW50aXR5U2V0ID0gY29udmVydGVkVHlwZXMuZW50aXR5U2V0cy5maW5kKChlcykgPT4gZXMubmFtZSA9PT0gbWFuaWZlc3RTZXR0aW5ncy5lbnRpdHlTZXQpO1xuXHRjb25zdCBkYXRhTW9kZWxQYXRoID0gZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aEZvclByb3BlcnR5KGVudGl0eVNldCBhcyBFbnRpdHlTZXQsIGNvbnZlcnRlZFR5cGVzLCBlbnRpdHlTZXQpO1xuXHRyZXR1cm4gbmV3IENvbnZlcnRlckNvbnRleHQoY29udmVydGVkVHlwZXMsIG1hbmlmZXN0U2V0dGluZ3MsIGdldEZha2VEaWFnbm9zdGljcygpLCBtZXJnZSwgZGF0YU1vZGVsUGF0aCk7XG59O1xuY29uc3QgbWV0YU1vZGVsQ2FjaGU6IGFueSA9IHt9O1xuZXhwb3J0IGNvbnN0IGdldE1ldGFNb2RlbCA9IGFzeW5jIGZ1bmN0aW9uIChzTWV0YWRhdGFVcmw6IHN0cmluZykge1xuXHRjb25zdCBvUmVxdWVzdG9yID0gX01ldGFkYXRhUmVxdWVzdG9yLmNyZWF0ZSh7fSwgXCI0LjBcIiwge30pO1xuXHRpZiAoIW1ldGFNb2RlbENhY2hlW3NNZXRhZGF0YVVybF0pIHtcblx0XHRjb25zdCBvTWV0YU1vZGVsID0gbmV3IChPRGF0YU1ldGFNb2RlbCBhcyBhbnkpKG9SZXF1ZXN0b3IsIHNNZXRhZGF0YVVybCwgdW5kZWZpbmVkLCBudWxsKTtcblx0XHRhd2FpdCBvTWV0YU1vZGVsLmZldGNoRW50aXR5Q29udGFpbmVyKCk7XG5cdFx0bWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSA9IG9NZXRhTW9kZWw7XG5cdH1cblxuXHRyZXR1cm4gbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkgPSBmdW5jdGlvbiAoXG5cdGVudGl0eVNldDogRW50aXR5U2V0LFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdHByb3BlcnR5PzogUHJvcGVydHkgfCBFbnRpdHlTZXQgfCBBbnlBbm5vdGF0aW9uXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoIHtcblx0Y29uc3QgdGFyZ2V0UGF0aDogRGF0YU1vZGVsT2JqZWN0UGF0aCA9IHtcblx0XHRzdGFydGluZ0VudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHR0YXJnZXRPYmplY3Q6IHByb3BlcnR5LFxuXHRcdHRhcmdldEVudGl0eVNldDogZW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGVudGl0eVNldC5lbnRpdHlUeXBlLFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHR0YXJnZXRQYXRoLmNvbnRleHRMb2NhdGlvbiA9IHRhcmdldFBhdGg7XG5cdHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlQmluZGluZyA9IGZ1bmN0aW9uIChiaW5kaW5nU3RyaW5nOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKSB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRyZXR1cm4gYmluZGluZ0VsZW1lbnQuZm9ybWF0dGVyLmFwcGx5KHVuZGVmaW5lZCwgYXJncyk7XG59O1xuXG50eXBlIE1vZGVsQ29udGVudCA9IHtcblx0W25hbWU6IHN0cmluZ106IGFueTtcbn07XG5cbi8qKlxuICogRXZhbHVhdGUgYSBiaW5kaW5nIGFnYWluc3QgYSBtb2RlbC5cbiAqXG4gKiBAcGFyYW0gYmluZGluZ1N0cmluZyBUaGUgYmluZGluZyBzdHJpbmcuXG4gKiBAcGFyYW0gbW9kZWxDb250ZW50IENvbnRlbnQgb2YgdGhlIGRlZmF1bHQgbW9kZWwgdG8gdXNlIGZvciBldmFsdWF0aW9uLlxuICogQHBhcmFtIG5hbWVkTW9kZWxzQ29udGVudCBDb250ZW50cyBvZiBhZGRpdGlvbmFsLCBuYW1lZCBtb2RlbHMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGV2YWx1YXRlZCBiaW5kaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXZhbHVhdGVCaW5kaW5nV2l0aE1vZGVsKFxuXHRiaW5kaW5nU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdG1vZGVsQ29udGVudDogTW9kZWxDb250ZW50LFxuXHRuYW1lZE1vZGVsc0NvbnRlbnQ/OiB7IFttb2RlbE5hbWU6IHN0cmluZ106IE1vZGVsQ29udGVudCB9XG4pOiBzdHJpbmcge1xuXHRjb25zdCBiaW5kaW5nRWxlbWVudCA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihiaW5kaW5nU3RyaW5nKTtcblx0Y29uc3QgdGV4dCA9IG5ldyBJbnZpc2libGVUZXh0KCk7XG5cdHRleHQuYmluZFByb3BlcnR5KFwidGV4dFwiLCBiaW5kaW5nRWxlbWVudCk7XG5cblx0Y29uc3QgZGVmYXVsdE1vZGVsID0gbmV3IEpTT05Nb2RlbChtb2RlbENvbnRlbnQpO1xuXHR0ZXh0LnNldE1vZGVsKGRlZmF1bHRNb2RlbCk7XG5cdHRleHQuc2V0QmluZGluZ0NvbnRleHQoZGVmYXVsdE1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0KTtcblxuXHRpZiAobmFtZWRNb2RlbHNDb250ZW50KSB7XG5cdFx0Zm9yIChjb25zdCBbbmFtZSwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMobmFtZWRNb2RlbHNDb250ZW50KSkge1xuXHRcdFx0Y29uc3QgbW9kZWwgPSBuZXcgSlNPTk1vZGVsKGNvbnRlbnQpO1xuXHRcdFx0dGV4dC5zZXRNb2RlbChtb2RlbCwgbmFtZSk7XG5cdFx0XHR0ZXh0LnNldEJpbmRpbmdDb250ZXh0KG1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0LCBuYW1lKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGV4dC5nZXRUZXh0KCk7XG59XG5cbmNvbnN0IFRFU1RWSUVXSUQgPSBcInRlc3RWaWV3SWRcIjtcblxuZXhwb3J0IGNvbnN0IGFwcGx5RmxleENoYW5nZXMgPSBhc3luYyBmdW5jdGlvbiAoXG5cdGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM6IGFueVtdLFxuXHRvTWV0YU1vZGVsOiBNZXRhTW9kZWwsXG5cdHJlc3VsdFhNTDogYW55LFxuXHRjcmVhdGVDaGFuZ2VzT2JqZWN0OiBGdW5jdGlvblxuKSB7XG5cdGNvbnN0IGNoYW5nZXMgPSBjcmVhdGVDaGFuZ2VzT2JqZWN0KFRFU1RWSUVXSUQsIGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMpO1xuXHRjb25zdCBhcHBJZCA9IFwic29tZUNvbXBvbmVudFwiO1xuXHRjb25zdCBvTWFuaWZlc3QgPSB7XG5cdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdGlkOiBhcHBJZCxcblx0XHRcdHR5cGU6IFwiYXBwbGljYXRpb25cIixcblx0XHRcdGNyb3NzTmF2aWdhdGlvbjoge1xuXHRcdFx0XHRvdXRib3VuZHM6IFtdXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRjb25zdCBvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQgPSB7XG5cdFx0Z2V0RGlhZ25vc3RpY3M6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoZ2V0RmFrZURpYWdub3N0aWNzKCkpLFxuXHRcdGdldE1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldE1ldGFNb2RlbDogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShvTWV0YU1vZGVsKVxuXHRcdH0pLFxuXHRcdGdldENvbXBvbmVudERhdGE6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe30pLFxuXHRcdGdldE1hbmlmZXN0T2JqZWN0OiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKHtcblx0XHRcdGdldEVudHJ5OiBmdW5jdGlvbiAobmFtZTogc3RyaW5nKSB7XG5cdFx0XHRcdHJldHVybiAob01hbmlmZXN0IGFzIGFueSlbbmFtZV07XG5cdFx0XHR9XG5cdFx0fSlcblx0fSBhcyB1bmtub3duIGFzIEFwcENvbXBvbmVudDtcblx0Ly9mYWtlIGNoYW5nZXNcblx0amVzdC5zcHlPbihBcHBTdG9yYWdlLCBcImxvYWRGbGV4RGF0YVwiKS5tb2NrUmV0dXJuVmFsdWUoUHJvbWlzZS5yZXNvbHZlKGNoYW5nZXMpKTtcblx0amVzdC5zcHlPbihDb21wb25lbnQsIFwiZ2V0XCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0amVzdC5zcHlPbihVdGlscywgXCJnZXRBcHBDb21wb25lbnRGb3JDb250cm9sXCIpLm1vY2tSZXR1cm5WYWx1ZShvQXBwQ29tcG9uZW50KTtcblx0YXdhaXQgRmxleFN0YXRlLmluaXRpYWxpemUoe1xuXHRcdGNvbXBvbmVudElkOiBhcHBJZFxuXHR9KTtcblx0cmVzdWx0WE1MID0gYXdhaXQgWG1sUHJlcHJvY2Vzc29yLnByb2Nlc3MocmVzdWx0WE1MLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiLCBjb21wb25lbnRJZDogYXBwSWQsIGlkOiBURVNUVklFV0lEIH0pO1xuXHRyZXR1cm4gcmVzdWx0WE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENoYW5nZXNGcm9tWE1MID0gKHhtbDogYW55KSA9PlxuXHRbLi4ueG1sLnF1ZXJ5U2VsZWN0b3JBbGwoXCIqXCIpXVxuXHRcdC5mbGF0TWFwKChlKSA9PiBbLi4uZS5hdHRyaWJ1dGVzXS5tYXAoKGEpID0+IGEubmFtZSkpXG5cdFx0LmZpbHRlcigoYXR0cikgPT4gYXR0ci5pbmNsdWRlcyhcInNhcC51aS5mbC5hcHBsaWVkQ2hhbmdlc1wiKSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0aW5nUmVzdWx0ID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM/OiBhbnlbXSxcblx0Y3JlYXRlQ2hhbmdlc09iamVjdD86IEZ1bmN0aW9uXG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWG1sID0gYDxyb290PiR7eG1sSW5wdXR9PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IHhtbERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcodGVtcGxhdGVkWG1sLCBcInRleHQveG1sXCIpO1xuXHQvLyBUbyBlbnN1cmUgb3VyIG1hY3JvIGNhbiB1c2UgI3NldEJpbmRpbmdDb250ZXh0IHdlIGVuc3VyZSB0aGVyZSBpcyBhIHByZSBleGlzdGluZyBKU09OTW9kZWwgZm9yIGNvbnZlcnRlckNvbnRleHRcblx0Ly8gaWYgbm90IGFscmVhZHkgcGFzc2VkIHRvIHRlaCB0ZW1wbGF0aW5nXG5cblx0Y29uc3Qgb01ldGFNb2RlbCA9IGF3YWl0IGdldE1ldGFNb2RlbChzTWV0YWRhdGFVcmwpO1xuXHRpZiAoIW1Nb2RlbHMuaGFzT3duUHJvcGVydHkoXCJjb252ZXJ0ZXJDb250ZXh0XCIpKSB7XG5cdFx0bU1vZGVscyA9IE9iamVjdC5hc3NpZ24obU1vZGVscywgeyBcImNvbnZlcnRlckNvbnRleHRcIjogbmV3IFRlbXBsYXRlTW9kZWwoe30sIG9NZXRhTW9kZWwpIH0pO1xuXHR9XG5cblx0T2JqZWN0LmtleXMobU1vZGVscykuZm9yRWFjaChmdW5jdGlvbiAoc01vZGVsTmFtZSkge1xuXHRcdGlmIChtTW9kZWxzW3NNb2RlbE5hbWVdICYmIG1Nb2RlbHNbc01vZGVsTmFtZV0uaXNUZW1wbGF0ZU1vZGVsKSB7XG5cdFx0XHRtTW9kZWxzW3NNb2RlbE5hbWVdID0gbmV3IFRlbXBsYXRlTW9kZWwobU1vZGVsc1tzTW9kZWxOYW1lXS5kYXRhLCBvTWV0YU1vZGVsKTtcblx0XHR9XG5cdH0pO1xuXG5cdGNvbnN0IG9QcmVwcm9jZXNzb3JTZXR0aW5nczogYW55ID0ge1xuXHRcdG1vZGVsczogT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0bWV0YU1vZGVsOiBvTWV0YU1vZGVsXG5cdFx0XHR9LFxuXHRcdFx0bU1vZGVsc1xuXHRcdCksXG5cdFx0YmluZGluZ0NvbnRleHRzOiB7fVxuXHR9O1xuXG5cdC8vSW5qZWN0IG1vZGVscyBhbmQgYmluZGluZ0NvbnRleHRzXG5cdE9iamVjdC5rZXlzKG1CaW5kaW5nQ29udGV4dHMpLmZvckVhY2goZnVuY3Rpb24gKHNLZXkpIHtcblx0XHQvKiBBc3NlcnQgdG8gbWFrZSBzdXJlIHRoZSBhbm5vdGF0aW9ucyBhcmUgaW4gdGhlIHRlc3QgbWV0YWRhdGEgLT4gYXZvaWQgbWlzbGVhZGluZyB0ZXN0cyAqL1xuXHRcdGV4cGVjdCh0eXBlb2Ygb01ldGFNb2RlbC5nZXRPYmplY3QobUJpbmRpbmdDb250ZXh0c1tzS2V5XSkpLnRvQmVEZWZpbmVkKCk7XG5cdFx0Y29uc3Qgb01vZGVsID0gbU1vZGVsc1tzS2V5XSB8fCBvTWV0YU1vZGVsO1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbc0tleV0gPSBvTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobUJpbmRpbmdDb250ZXh0c1tzS2V5XSk7IC8vVmFsdWUgaXMgc1BhdGhcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW3NLZXldID0gb01vZGVsO1xuXHR9KTtcblxuXHQvL1RoaXMgY29udGV4dCBmb3IgbWFjcm8gdGVzdGluZ1xuXHRpZiAob1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0pIHtcblx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW1widGhpc1wiXSA9IG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbXCJ0aGlzXCJdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblx0fVxuXG5cdGxldCByZXN1bHRYTUwgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2Vzcyh4bWxEb2MuZmlyc3RFbGVtZW50Q2hpbGQhLCB7IG5hbWU6IFwiVGVzdCBGcmFnbWVudFwiIH0sIG9QcmVwcm9jZXNzb3JTZXR0aW5ncyk7XG5cblx0aWYgKGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMgJiYgY3JlYXRlQ2hhbmdlc09iamVjdCkge1xuXHRcdC8vIHByZWZpeCBJZHNcblx0XHRbLi4ucmVzdWx0WE1MLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbaWRdXCIpXS5mb3JFYWNoKChub2RlKSA9PiB7XG5cdFx0XHRub2RlLmlkID0gYCR7VEVTVFZJRVdJRH0tLSR7bm9kZS5pZH1gO1xuXHRcdH0pO1xuXHRcdC8vIGFwcGx5IGZsZXggY2hhbmdlc1xuXHRcdHJlc3VsdFhNTCA9IGF3YWl0IGFwcGx5RmxleENoYW5nZXMoYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcywgb01ldGFNb2RlbCwgcmVzdWx0WE1MLCBjcmVhdGVDaGFuZ2VzT2JqZWN0KTtcblx0XHQvL0Fzc2VydCB0aGF0IGFsbCBjaGFuZ2VzIGhhdmUgYmVlbiBhcHBsaWVkXG5cdFx0Y29uc3QgY2hhbmdlc0FwcGxpZWQgPSBnZXRDaGFuZ2VzRnJvbVhNTChyZXN1bHRYTUwpO1xuXHRcdGV4cGVjdChjaGFuZ2VzQXBwbGllZC5sZW5ndGgpLnRvQmUoYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcy5sZW5ndGgpO1xuXHR9XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcGxhdGVkWE1MID0gYXN5bmMgZnVuY3Rpb24gKFxuXHR4bWxJbnB1dDogc3RyaW5nLFxuXHRzTWV0YWRhdGFVcmw6IHN0cmluZyxcblx0bUJpbmRpbmdDb250ZXh0czogeyBbeDogc3RyaW5nXTogYW55OyBlbnRpdHlTZXQ/OiBzdHJpbmcgfSxcblx0bU1vZGVsczogeyBbeDogc3RyaW5nXTogYW55IH0sXG5cdGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXM/OiBhbnlbXSxcblx0Y3JlYXRlQ2hhbmdlc09iamVjdD86IEZ1bmN0aW9uXG4pIHtcblx0Y29uc3QgdGVtcGxhdGVkWE1MID0gYXdhaXQgZ2V0VGVtcGxhdGluZ1Jlc3VsdChcblx0XHR4bWxJbnB1dCxcblx0XHRzTWV0YWRhdGFVcmwsXG5cdFx0bUJpbmRpbmdDb250ZXh0cyxcblx0XHRtTW9kZWxzLFxuXHRcdGFWYXJpYW50RGVwZW5kZW50Q29udHJvbENoYW5nZXMsXG5cdFx0Y3JlYXRlQ2hhbmdlc09iamVjdFxuXHQpO1xuXHRyZXR1cm4gc2VyaWFsaXplWE1MKHRlbXBsYXRlZFhNTCk7XG59O1xuXG4vKipcbiAqIFByb2Nlc3MgdGhlIHJlcXVlc3RlZCBYTUwgZnJhZ21lbnQgd2l0aCB0aGUgcHJvdmlkZWQgZGF0YS5cbiAqXG4gKiBAcGFyYW0gbmFtZSBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgdGVzdGVkLlxuICogQHBhcmFtIHRlc3REYXRhIFRlc3QgZGF0YSBjb25zaXN0aW5nXG4gKiBAcmV0dXJucyBUZW1wbGF0ZWQgZnJhZ21lbnQgYXMgc3RyaW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzRnJhZ21lbnQobmFtZTogc3RyaW5nLCB0ZXN0RGF0YTogeyBbbW9kZWw6IHN0cmluZ106IG9iamVjdCB9KTogUHJvbWlzZTxzdHJpbmc+IHtcblx0Y29uc3QgaW5wdXRYbWwgPSBgPHJvb3Q+PGNvcmU6RnJhZ21lbnQgZnJhZ21lbnROYW1lPVwiJHtuYW1lfVwiIHR5cGU9XCJYTUxcIiB4bWxuczpjb3JlPVwic2FwLnVpLmNvcmVcIiAvPjwvcm9vdD5gO1xuXHRjb25zdCBwYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpO1xuXHRjb25zdCBpbnB1dERvYyA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoaW5wdXRYbWwsIFwidGV4dC94bWxcIik7XG5cblx0Ly8gYnVpbGQgbW9kZWwgYW5kIGJpbmRpbmdzIGZvciBnaXZlbiB0ZXN0IGRhdGFcblx0Y29uc3Qgc2V0dGluZ3MgPSB7XG5cdFx0bW9kZWxzOiB7fSBhcyB7IFtuYW1lOiBzdHJpbmddOiBKU09OTW9kZWwgfSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IG9iamVjdCB9XG5cdH07XG5cdGZvciAoY29uc3QgbW9kZWwgaW4gdGVzdERhdGEpIHtcblx0XHRjb25zdCBqc29uTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0anNvbk1vZGVsLnNldERhdGEodGVzdERhdGFbbW9kZWxdKTtcblx0XHRzZXR0aW5ncy5tb2RlbHNbbW9kZWxdID0ganNvbk1vZGVsO1xuXHRcdHNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1ttb2RlbF0gPSBzZXR0aW5ncy5tb2RlbHNbbW9kZWxdLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSBhcyBDb250ZXh0O1xuXHR9XG5cblx0Ly8gZXhlY3V0ZSB0aGUgcHJlLXByb2Nlc3NvclxuXHRjb25zdCByZXN1bHREb2MgPSBhd2FpdCBYTUxQcmVwcm9jZXNzb3IucHJvY2VzcyhpbnB1dERvYy5maXJzdEVsZW1lbnRDaGlsZCwgeyBuYW1lIH0sIHNldHRpbmdzKTtcblxuXHQvLyBleGNsdWRlIG5lc3RlZCBmcmFnbWVudHMgZnJvbSB0ZXN0IHNuYXBzaG90c1xuXHRjb25zdCBmcmFnbWVudHMgPSByZXN1bHREb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJjb3JlOkZyYWdtZW50XCIpO1xuXHRpZiAoZnJhZ21lbnRzPy5sZW5ndGggPiAwKSB7XG5cdFx0Zm9yIChjb25zdCBmcmFnbWVudCBvZiBmcmFnbWVudHMpIHtcblx0XHRcdGZyYWdtZW50LmlubmVySFRNTCA9IFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Ly8gS2VlcCB0aGUgZnJhZ21lbnQgcmVzdWx0IGFzIGNoaWxkIG9mIHJvb3Qgbm9kZSB3aGVuIGZyYWdtZW50IGdlbmVyYXRlcyBtdWx0aXBsZSByb290IGNvbnRyb2xzXG5cdGNvbnN0IHhtbFJlc3VsdCA9IHJlc3VsdERvYy5jaGlsZHJlbi5sZW5ndGggPiAxID8gcmVzdWx0RG9jLm91dGVySFRNTCA6IHJlc3VsdERvYy5pbm5lckhUTUw7XG5cblx0cmV0dXJuIGZvcm1hdFhtbCh4bWxSZXN1bHQsIHtcblx0XHRmaWx0ZXI6IChub2RlOiBhbnkpID0+IG5vZGUudHlwZSAhPT0gXCJDb21tZW50XCJcblx0fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVDb250cm9sKGNvbnRyb2xUb1NlcmlhbGl6ZTogQ29udHJvbCB8IENvbnRyb2xbXSkge1xuXHRsZXQgdGFiQ291bnQgPSAwO1xuXHRmdW5jdGlvbiBnZXRUYWIodG9BZGQ6IG51bWJlciA9IDApIHtcblx0XHRsZXQgdGFiID0gXCJcIjtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRhYkNvdW50ICsgdG9BZGQ7IGkrKykge1xuXHRcdFx0dGFiICs9IFwiXFx0XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0YWI7XG5cdH1cblx0Y29uc3Qgc2VyaWFsaXplRGVsZWdhdGUgPSB7XG5cdFx0c3RhcnQ6IGZ1bmN0aW9uIChjb250cm9sOiBDb250cm9sLCBzQWdncmVnYXRpb25OYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBjb250cm9sRGV0YWlsID0gXCJcIjtcblx0XHRcdGlmIChzQWdncmVnYXRpb25OYW1lKSB7XG5cdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKSEuZ2V0QWdncmVnYXRpb24oc0FnZ3JlZ2F0aW9uTmFtZSkgYXMgTWFuYWdlZE9iamVjdFtdKS5pbmRleE9mKGNvbnRyb2wpO1xuXHRcdFx0XHRpZiAoaW5kZXhJblBhcmVudCA+IDApIHtcblx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb250cm9sRGV0YWlsICs9IGAke2NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9KGA7XG5cdFx0XHRyZXR1cm4gY29udHJvbERldGFpbDtcblx0XHR9LFxuXHRcdGVuZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIFwifSlcIjtcblx0XHR9LFxuXHRcdG1pZGRsZTogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSkge1xuXHRcdFx0bGV0IGRhdGEgPSBge2lkOiAke2NvbnRyb2wuZ2V0SWQoKX1gO1xuXHRcdFx0Zm9yIChjb25zdCBvQ29udHJvbEtleSBpbiBjb250cm9sLm1Qcm9wZXJ0aWVzKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Qcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtjb250cm9sLm1Qcm9wZXJ0aWVzW29Db250cm9sS2V5XX1gO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRjb25zdCBiaW5kaW5nRGV0YWlsID0gY29udHJvbC5tQmluZGluZ0luZm9zW29Db250cm9sS2V5XTtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06IGZvcm1hdHRlcigke2JpbmRpbmdEZXRhaWwucGFydHMubWFwKFxuXHRcdFx0XHRcdFx0KGJpbmRpbmdJbmZvOiBhbnkpID0+IGBcXG4ke2dldFRhYigxKX0ke2JpbmRpbmdJbmZvLm1vZGVsID8gYmluZGluZ0luZm8ubW9kZWwgOiBcIlwifT4ke2JpbmRpbmdJbmZvLnBhdGh9YFxuXHRcdFx0XHRcdCl9KWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tQXNzb2NpYXRpb25zKSB7XG5cdFx0XHRcdGlmIChjb250cm9sLm1Bc3NvY2lhdGlvbnMuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiAke2NvbnRyb2wubUFzc29jaWF0aW9uc1tvQ29udHJvbEtleV1bMF19YDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGF0YSArPSBgYDtcblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH0sXG5cdFx0c3RhcnRBZ2dyZWdhdGlvbjogZnVuY3Rpb24gKGNvbnRyb2w6IENvbnRyb2wsIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblx0XHRcdG91dCArPSBgPVtcXG4ke2dldFRhYigpfWA7XG5cdFx0XHRyZXR1cm4gb3V0O1xuXHRcdH0sXG5cdFx0ZW5kQWdncmVnYXRpb246IGZ1bmN0aW9uICgpIHtcblx0XHRcdHRhYkNvdW50LS07XG5cdFx0XHRyZXR1cm4gYFxcbiR7Z2V0VGFiKCl9XWA7XG5cdFx0fVxuXHR9O1xuXHRpZiAoQXJyYXkuaXNBcnJheShjb250cm9sVG9TZXJpYWxpemUpKSB7XG5cdFx0cmV0dXJuIGNvbnRyb2xUb1NlcmlhbGl6ZS5tYXAoKGNvbnRyb2xUb1JlbmRlcjogQ29udHJvbCkgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBTZXJpYWxpemVyKGNvbnRyb2xUb1JlbmRlciwgc2VyaWFsaXplRGVsZWdhdGUpLnNlcmlhbGl6ZSgpO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9TZXJpYWxpemUsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXdhaXRlcigpIHtcblx0bGV0IGZuUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXHRjb25zdCBteVByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdGZuUmVzb2x2ZSA9IHJlc29sdmU7XG5cdH0pO1xuXHRyZXR1cm4geyBwcm9taXNlOiBteVByb21pc2UsIHJlc29sdmU6IGZuUmVzb2x2ZSB9O1xufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUE0YUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFDc0JBLGUsYUFBZ0JDLEksRUFBY0MsUTtRQUF3RDtNQUMzRyxJQUFNQyxRQUFRLGlEQUF5Q0YsSUFBekMseURBQWQ7TUFDQSxJQUFNRyxNQUFNLEdBQUcsSUFBSUMsTUFBTSxDQUFDQyxTQUFYLEVBQWY7TUFDQSxJQUFNQyxRQUFRLEdBQUdILE1BQU0sQ0FBQ0ksZUFBUCxDQUF1QkwsUUFBdkIsRUFBaUMsVUFBakMsQ0FBakIsQ0FIMkcsQ0FLM0c7O01BQ0EsSUFBTU0sUUFBUSxHQUFHO1FBQ2hCQyxNQUFNLEVBQUUsRUFEUTtRQUVoQkMsZUFBZSxFQUFFO01BRkQsQ0FBakI7O01BSUEsS0FBSyxJQUFNQyxPQUFYLElBQW9CVixRQUFwQixFQUE4QjtRQUM3QixJQUFNVyxTQUFTLEdBQUcsSUFBSUMsU0FBSixFQUFsQjtRQUNBRCxTQUFTLENBQUNFLE9BQVYsQ0FBa0JiLFFBQVEsQ0FBQ1UsT0FBRCxDQUExQjtRQUNBSCxRQUFRLENBQUNDLE1BQVQsQ0FBZ0JFLE9BQWhCLElBQXlCQyxTQUF6QjtRQUNBSixRQUFRLENBQUNFLGVBQVQsQ0FBeUJDLE9BQXpCLElBQWtDSCxRQUFRLENBQUNDLE1BQVQsQ0FBZ0JFLE9BQWhCLEVBQXVCSSxvQkFBdkIsQ0FBNEMsR0FBNUMsQ0FBbEM7TUFDQSxDQWYwRyxDQWlCM0c7OztNQWpCMkcsdUJBa0JuRkMsZUFBZSxDQUFDQyxPQUFoQixDQUF3QlgsUUFBUSxDQUFDWSxpQkFBakMsRUFBb0Q7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
679
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcm9jZXNzRnJhZ21lbnQiLCJuYW1lIiwidGVzdERhdGEiLCJpbnB1dFhtbCIsInBhcnNlciIsIndpbmRvdyIsIkRPTVBhcnNlciIsImlucHV0RG9jIiwicGFyc2VGcm9tU3RyaW5nIiwic2V0dGluZ3MiLCJtb2RlbHMiLCJiaW5kaW5nQ29udGV4dHMiLCJtb2RlbCIsImpzb25Nb2RlbCIsIkpTT05Nb2RlbCIsInNldERhdGEiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIlhNTFByZXByb2Nlc3NvciIsInByb2Nlc3MiLCJmaXJzdEVsZW1lbnRDaGlsZCIsInJlc3VsdERvYyIsImZyYWdtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwibGVuZ3RoIiwiZnJhZ21lbnQiLCJpbm5lckhUTUwiLCJ4bWxSZXN1bHQiLCJjaGlsZHJlbiIsIm91dGVySFRNTCIsImZvcm1hdFhtbCIsImZpbHRlciIsIm5vZGUiLCJ0eXBlIiwicmVxdWlyZSIsIkxvZyIsInNldExldmVsIiwiamVzdCIsInNldFRpbWVvdXQiLCJuYW1lU3BhY2VNYXAiLCJzZWxlY3QiLCJ4cGF0aCIsInVzZU5hbWVzcGFjZXMiLCJyZWdpc3Rlck1hY3JvIiwibWFjcm9NZXRhZGF0YSIsInJlZ2lzdGVyQnVpbGRpbmdCbG9jayIsInVucmVnaXN0ZXJNYWNybyIsInBsdWdJbiIsIm5hbWVzcGFjZSIsInB1YmxpY05hbWVzcGFjZSIsInJ1blhQYXRoUXVlcnkiLCJzZWxlY3RvciIsInhtbGRvbSIsImV4cGVjdCIsImV4dGVuZCIsInRvSGF2ZUNvbnRyb2wiLCJub2RlcyIsIm1lc3NhZ2UiLCJvdXRwdXRYbWwiLCJzZXJpYWxpemVYTUwiLCJwYXNzIiwidG9Ob3RIYXZlQ29udHJvbCIsImZvcm1hdEJ1aWxkaW5nQmxvY2tYTUwiLCJ4bWxTdHJpbmciLCJBcnJheSIsImlzQXJyYXkiLCJqb2luIiwieG1sRm9ybWF0dGVkIiwiZm9ybWF0WE1MIiwicmVwbGFjZSIsImdldENvbnRyb2xBdHRyaWJ1dGUiLCJjb250cm9sU2VsZWN0b3IiLCJhdHRyaWJ1dGVOYW1lIiwieG1sRG9tIiwic2VyaWFsaXplciIsIlhNTFNlcmlhbGl6ZXIiLCJzZXJpYWxpemVUb1N0cmluZyIsImZvcm1hdCIsInhtbFdoaXRlc3BhY2VTZW5zaXRpdml0eSIsImNvbXBpbGVDRFMiLCJjZHNVcmwiLCJvcHRpb25zIiwiZWRteEZpbGVOYW1lIiwicGF0aCIsImJhc2VuYW1lIiwiY2RzU3RyaW5nIiwiZnMiLCJyZWFkRmlsZVN5bmMiLCJlZG14Q29udGVudCIsImNkczJlZG14IiwiZGlyIiwicmVzb2x2ZSIsImVkbXhGaWxlUGF0aCIsIm1rZGlyU3luYyIsInJlY3Vyc2l2ZSIsIndyaXRlRmlsZVN5bmMiLCJjZHMiLCJzZXJ2aWNlIiwic291cmNlcyIsImluY2x1ZGVzIiwiY3NuIiwiY29tcGlsZXIiLCJjb21waWxlU291cmNlcyIsImVkbXhPcHRpb25zIiwib2RhdGFGb3JlaWduS2V5cyIsIm9kYXRhRm9ybWF0Iiwib2RhdGFDb250YWlubWVudCIsImVkbXgiLCJ0byIsIkVycm9yIiwiZ2V0RmFrZVNpZGVFZmZlY3RzU2VydmljZSIsIm9NZXRhTW9kZWwiLCJvU2VydmljZUNvbnRleHQiLCJzY29wZU9iamVjdCIsInNjb3BlVHlwZSIsIlNpZGVFZmZlY3RzRmFjdG9yeSIsImNyZWF0ZUluc3RhbmNlIiwidGhlbiIsIm9TZXJ2aWNlSW5zdGFuY2UiLCJvSmVzdFNpZGVFZmZlY3RzU2VydmljZSIsImdldEludGVyZmFjZSIsImdldENvbnRleHQiLCJnZXRNb2RlbCIsImdldE1ldGFNb2RlbCIsImdldEZha2VEaWFnbm9zdGljcyIsImlzc3VlcyIsImFkZElzc3VlIiwiaXNzdWVDYXRlZ29yeSIsImlzc3VlU2V2ZXJpdHkiLCJkZXRhaWxzIiwicHVzaCIsImdldElzc3VlcyIsImNoZWNrSWZJc3N1ZUV4aXN0cyIsImZpbmQiLCJpc3N1ZSIsImdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0IiwiY29udmVydGVkVHlwZXMiLCJtYW5pZmVzdFNldHRpbmdzIiwiZW50aXR5U2V0IiwiZW50aXR5U2V0cyIsImVzIiwiZGF0YU1vZGVsUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSIsIkNvbnZlcnRlckNvbnRleHQiLCJtZXJnZSIsIm1ldGFNb2RlbENhY2hlIiwic01ldGFkYXRhVXJsIiwib1JlcXVlc3RvciIsIl9NZXRhZGF0YVJlcXVlc3RvciIsImNyZWF0ZSIsIk9EYXRhTWV0YU1vZGVsIiwidW5kZWZpbmVkIiwiZmV0Y2hFbnRpdHlDb250YWluZXIiLCJwcm9wZXJ0eSIsInRhcmdldFBhdGgiLCJzdGFydGluZ0VudGl0eVNldCIsIm5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0RW50aXR5U2V0IiwidGFyZ2V0RW50aXR5VHlwZSIsImVudGl0eVR5cGUiLCJjb250ZXh0TG9jYXRpb24iLCJldmFsdWF0ZUJpbmRpbmciLCJiaW5kaW5nU3RyaW5nIiwiYmluZGluZ0VsZW1lbnQiLCJCaW5kaW5nUGFyc2VyIiwiY29tcGxleFBhcnNlciIsImFyZ3MiLCJmb3JtYXR0ZXIiLCJhcHBseSIsImV2YWx1YXRlQmluZGluZ1dpdGhNb2RlbCIsIm1vZGVsQ29udGVudCIsIm5hbWVkTW9kZWxzQ29udGVudCIsInRleHQiLCJJbnZpc2libGVUZXh0IiwiYmluZFByb3BlcnR5IiwiZGVmYXVsdE1vZGVsIiwic2V0TW9kZWwiLCJzZXRCaW5kaW5nQ29udGV4dCIsIk9iamVjdCIsImVudHJpZXMiLCJjb250ZW50IiwiZ2V0VGV4dCIsIlRFU1RWSUVXSUQiLCJhcHBseUZsZXhDaGFuZ2VzIiwiYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyIsInJlc3VsdFhNTCIsImNyZWF0ZUNoYW5nZXNPYmplY3QiLCJjaGFuZ2VzIiwiYXBwSWQiLCJvTWFuaWZlc3QiLCJpZCIsImNyb3NzTmF2aWdhdGlvbiIsIm91dGJvdW5kcyIsIm9BcHBDb21wb25lbnQiLCJnZXREaWFnbm9zdGljcyIsImZuIiwibW9ja1JldHVyblZhbHVlIiwiZ2V0Q29tcG9uZW50RGF0YSIsImdldE1hbmlmZXN0T2JqZWN0IiwiZ2V0RW50cnkiLCJzcHlPbiIsIkFwcFN0b3JhZ2UiLCJQcm9taXNlIiwiQ29tcG9uZW50IiwiVXRpbHMiLCJGbGV4U3RhdGUiLCJpbml0aWFsaXplIiwiY29tcG9uZW50SWQiLCJYbWxQcmVwcm9jZXNzb3IiLCJnZXRDaGFuZ2VzRnJvbVhNTCIsInhtbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmbGF0TWFwIiwiZSIsImF0dHJpYnV0ZXMiLCJtYXAiLCJhIiwiYXR0ciIsImdldFRlbXBsYXRpbmdSZXN1bHQiLCJ4bWxJbnB1dCIsIm1CaW5kaW5nQ29udGV4dHMiLCJtTW9kZWxzIiwidGVtcGxhdGVkWG1sIiwieG1sRG9jIiwiaGFzT3duUHJvcGVydHkiLCJhc3NpZ24iLCJUZW1wbGF0ZU1vZGVsIiwia2V5cyIsImZvckVhY2giLCJzTW9kZWxOYW1lIiwiaXNUZW1wbGF0ZU1vZGVsIiwiZGF0YSIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsIm1ldGFNb2RlbCIsInNLZXkiLCJnZXRPYmplY3QiLCJ0b0JlRGVmaW5lZCIsIm9Nb2RlbCIsImNoYW5nZXNBcHBsaWVkIiwidG9CZSIsImdldFRlbXBsYXRlZFhNTCIsInNlcmlhbGl6ZUNvbnRyb2wiLCJjb250cm9sVG9TZXJpYWxpemUiLCJ0YWJDb3VudCIsImdldFRhYiIsInRvQWRkIiwidGFiIiwiaSIsInNlcmlhbGl6ZURlbGVnYXRlIiwic3RhcnQiLCJjb250cm9sIiwic0FnZ3JlZ2F0aW9uTmFtZSIsImNvbnRyb2xEZXRhaWwiLCJnZXRQYXJlbnQiLCJpbmRleEluUGFyZW50IiwiZ2V0QWdncmVnYXRpb24iLCJpbmRleE9mIiwiZ2V0TWV0YWRhdGEiLCJnZXROYW1lIiwiZW5kIiwibWlkZGxlIiwiZ2V0SWQiLCJvQ29udHJvbEtleSIsIm1Qcm9wZXJ0aWVzIiwibUJpbmRpbmdJbmZvcyIsImJpbmRpbmdEZXRhaWwiLCJwYXJ0cyIsImJpbmRpbmdJbmZvIiwibUFzc29jaWF0aW9ucyIsInN0YXJ0QWdncmVnYXRpb24iLCJzTmFtZSIsIm91dCIsImVuZEFnZ3JlZ2F0aW9uIiwiY29udHJvbFRvUmVuZGVyIiwiU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsImNyZWF0ZUF3YWl0ZXIiLCJmblJlc29sdmUiLCJteVByb21pc2UiLCJwcm9taXNlIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJKZXN0VGVtcGxhdGluZ0hlbHBlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFueUFubm90YXRpb24sIENvbnZlcnRlZE1ldGFkYXRhLCBFbnRpdHlTZXQsIFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgY29tcGlsZXIgZnJvbSBcIkBzYXAvY2RzLWNvbXBpbGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB0eXBlIHsgUmVxdWlyZWRPcHRpb25zIH0gZnJvbSBcInByZXR0aWVyXCI7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tIFwicHJldHRpZXJcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB7IHJlZ2lzdGVyQnVpbGRpbmdCbG9jayB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrUnVudGltZVwiO1xuaW1wb3J0IENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBJc3N1ZUNhdGVnb3J5LCBJc3N1ZVNldmVyaXR5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9Jc3N1ZU1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgTGlzdFJlcG9ydE1hbmlmZXN0U2V0dGluZ3MsIE9iamVjdFBhZ2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IFNpZGVFZmZlY3RzRmFjdG9yeSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IFRlbXBsYXRlTW9kZWwgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgRGF0YU1vZGVsT2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEludmlzaWJsZVRleHQgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZVRleHRcIjtcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCJzYXAvdWkvY29yZS91dGlsL3NlcmlhbGl6ZXIvU2VyaWFsaXplclwiO1xuaW1wb3J0IFhNTFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2NvcmUvdXRpbC9YTUxQcmVwcm9jZXNzb3JcIjtcbmltcG9ydCBGbGV4U3RhdGUgZnJvbSBcInNhcC91aS9mbC9hcHBseS9faW50ZXJuYWwvZmxleFN0YXRlL0ZsZXhTdGF0ZVwiO1xuaW1wb3J0IFhtbFByZXByb2Nlc3NvciBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L19pbnRlcm5hbC9wcmVwcm9jZXNzb3JzL1htbFByZXByb2Nlc3NvclwiO1xuaW1wb3J0IEFwcFN0b3JhZ2UgZnJvbSBcInNhcC91aS9mbC9pbml0aWFsL19pbnRlcm5hbC9TdG9yYWdlXCI7XG5pbXBvcnQgVXRpbHMgZnJvbSBcInNhcC91aS9mbC9VdGlsc1wiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IE1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01ldGFNb2RlbFwiO1xuaW1wb3J0IF9NZXRhZGF0YVJlcXVlc3RvciBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L2xpYi9fTWV0YWRhdGFSZXF1ZXN0b3JcIjtcbmltcG9ydCBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgeHBhdGggZnJvbSBcInhwYXRoXCI7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuY29uc3QgZm9ybWF0WG1sID0gcmVxdWlyZShcInhtbC1mb3JtYXR0ZXJcIik7XG5cbkxvZy5zZXRMZXZlbCgxIGFzIGFueSwgXCJzYXAudWkuY29yZS51dGlsLlhNTFByZXByb2Nlc3NvclwiKTtcbmplc3Quc2V0VGltZW91dCg0MDAwMCk7XG5cbmNvbnN0IG5hbWVTcGFjZU1hcCA9IHtcblx0XCJtYWNyb3NcIjogXCJzYXAuZmUubWFjcm9zXCIsXG5cdFwibWFjcm9cIjogXCJzYXAuZmUubWFjcm9zXCIsXG5cdFwibWFjcm9kYXRhXCI6IFwiaHR0cDovL3NjaGVtYXMuc2FwLmNvbS9zYXB1aTUvZXh0ZW5zaW9uL3NhcC51aS5jb3JlLkN1c3RvbURhdGEvMVwiLFxuXHRcImxvZ1wiOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L2V4dGVuc2lvbi9zYXAudWkuY29yZS5DdXN0b21EYXRhLzFcIixcblx0XCJ1bml0dGVzdFwiOiBcImh0dHA6Ly9zY2hlbWFzLnNhcC5jb20vc2FwdWk1L3ByZXByb2Nlc3NvcmV4dGVuc2lvbi9zYXAuZmUudW5pdHRlc3RpbmcvMVwiLFxuXHRcImNvbnRyb2xcIjogXCJzYXAuZmUuY29yZS5jb250cm9sc1wiLFxuXHRcImNvcmVcIjogXCJzYXAudWkuY29yZVwiLFxuXHRcIm1cIjogXCJzYXAubVwiLFxuXHRcImZcIjogXCJzYXAudWkubGF5b3V0LmZvcm1cIixcblx0XCJpbnRlcm5hbE1hY3JvXCI6IFwic2FwLmZlLm1hY3Jvcy5pbnRlcm5hbFwiLFxuXHRcIm1kY1wiOiBcInNhcC51aS5tZGNcIixcblx0XCJtZGNhdFwiOiBcInNhcC51aS5tZGMuYWN0aW9udG9vbGJhclwiLFxuXHRcIm1kY0ZpZWxkXCI6IFwic2FwLnVpLm1kYy5maWVsZFwiLFxuXHRcIm1kY1RhYmxlXCI6IFwic2FwLnVpLm1kYy50YWJsZVwiLFxuXHRcInVcIjogXCJzYXAudWkudW5pZmllZFwiLFxuXHRcIm1hY3JvTWljcm9DaGFydFwiOiBcInNhcC5mZS5tYWNyb3MubWljcm9jaGFydFwiLFxuXHRcIm1pY3JvQ2hhcnRcIjogXCJzYXAuc3VpdGUudWkubWljcm9jaGFydFwiLFxuXHRcIm1hY3JvVGFibGVcIjogXCJzYXAuZmUubWFjcm9zLnRhYmxlXCJcbn07XG5jb25zdCBzZWxlY3QgPSB4cGF0aC51c2VOYW1lc3BhY2VzKG5hbWVTcGFjZU1hcCk7XG5cbmV4cG9ydCBjb25zdCByZWdpc3Rlck1hY3JvID0gZnVuY3Rpb24gKG1hY3JvTWV0YWRhdGE6IGFueSkge1xuXHRyZWdpc3RlckJ1aWxkaW5nQmxvY2sobWFjcm9NZXRhZGF0YSk7XG59O1xuZXhwb3J0IGNvbnN0IHVucmVnaXN0ZXJNYWNybyA9IGZ1bmN0aW9uIChtYWNyb01ldGFkYXRhOiBhbnkpIHtcblx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBtYWNyb01ldGFkYXRhLm5hbWVzcGFjZSwgbWFjcm9NZXRhZGF0YS5uYW1lKTtcblx0aWYgKG1hY3JvTWV0YWRhdGEucHVibGljTmFtZXNwYWNlKSB7XG5cdFx0WE1MUHJlcHJvY2Vzc29yLnBsdWdJbihudWxsLCBtYWNyb01ldGFkYXRhLnB1YmxpY05hbWVzcGFjZSwgbWFjcm9NZXRhZGF0YS5uYW1lKTtcblx0fVxufTtcbmV4cG9ydCBjb25zdCBydW5YUGF0aFF1ZXJ5ID0gZnVuY3Rpb24gKHNlbGVjdG9yOiBzdHJpbmcsIHhtbGRvbTogTm9kZSB8IHVuZGVmaW5lZCkge1xuXHRyZXR1cm4gc2VsZWN0KHNlbGVjdG9yLCB4bWxkb20pO1xufTtcblxuZXhwZWN0LmV4dGVuZCh7XG5cdHRvSGF2ZUNvbnRyb2woeG1sZG9tLCBzZWxlY3Rvcikge1xuXHRcdGNvbnN0IG5vZGVzID0gcnVuWFBhdGhRdWVyeShgL3Jvb3Qke3NlbGVjdG9yfWAsIHhtbGRvbSk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG1lc3NhZ2U6ICgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3V0cHV0WG1sID0gc2VyaWFsaXplWE1MKHhtbGRvbSk7XG5cdFx0XHRcdHJldHVybiBgZGlkIG5vdCBmaW5kIGNvbnRyb2xzIG1hdGNoaW5nICR7c2VsZWN0b3J9IGluIGdlbmVyYXRlZCB4bWw6XFxuICR7b3V0cHV0WG1sfWA7XG5cdFx0XHR9LFxuXHRcdFx0cGFzczogbm9kZXMgJiYgbm9kZXMubGVuZ3RoID49IDFcblx0XHR9O1xuXHR9LFxuXHR0b05vdEhhdmVDb250cm9sKHhtbGRvbSwgc2VsZWN0b3IpIHtcblx0XHRjb25zdCBub2RlcyA9IHJ1blhQYXRoUXVlcnkoYC9yb290JHtzZWxlY3Rvcn1gLCB4bWxkb20pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRtZXNzYWdlOiAoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG91dHB1dFhtbCA9IHNlcmlhbGl6ZVhNTCh4bWxkb20pO1xuXHRcdFx0XHRyZXR1cm4gYFRoZXJlIGlzIGEgY29udHJvbCBtYXRjaGluZyAke3NlbGVjdG9yfSBpbiBnZW5lcmF0ZWQgeG1sOlxcbiAke291dHB1dFhtbH1gO1xuXHRcdFx0fSxcblx0XHRcdHBhc3M6IG5vZGVzICYmIG5vZGVzLmxlbmd0aCA9PT0gMFxuXHRcdH07XG5cdH1cbn0pO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0QnVpbGRpbmdCbG9ja1hNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZyB8IHN0cmluZ1tdKSB7XG5cdGlmIChBcnJheS5pc0FycmF5KHhtbFN0cmluZykpIHtcblx0XHR4bWxTdHJpbmcgPSB4bWxTdHJpbmcuam9pbihcIlwiKTtcblx0fVxuXHRsZXQgeG1sRm9ybWF0dGVkID0gZm9ybWF0WE1MKHhtbFN0cmluZyk7XG5cdHhtbEZvcm1hdHRlZCA9IHhtbEZvcm1hdHRlZC5yZXBsYWNlKC91aWQtLWlkLVswLTldezEzfS1bMC05XXsxLDJ9L2csIFwidWlkLS1pZFwiKTtcblx0cmV0dXJuIHhtbEZvcm1hdHRlZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb250cm9sQXR0cmlidXRlID0gZnVuY3Rpb24gKGNvbnRyb2xTZWxlY3Rvcjogc3RyaW5nLCBhdHRyaWJ1dGVOYW1lOiBzdHJpbmcsIHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZWxlY3RvciA9IGBzdHJpbmcoL3Jvb3Qke2NvbnRyb2xTZWxlY3Rvcn0vQCR7YXR0cmlidXRlTmFtZX0pYDtcblx0cmV0dXJuIHJ1blhQYXRoUXVlcnkoc2VsZWN0b3IsIHhtbERvbSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplWE1MID0gZnVuY3Rpb24gKHhtbERvbTogTm9kZSkge1xuXHRjb25zdCBzZXJpYWxpemVyID0gbmV3IHdpbmRvdy5YTUxTZXJpYWxpemVyKCk7XG5cdGNvbnN0IHhtbFN0cmluZyA9IHNlcmlhbGl6ZXIuc2VyaWFsaXplVG9TdHJpbmcoeG1sRG9tKTtcblx0cmV0dXJuIGZvcm1hdFhNTCh4bWxTdHJpbmcpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdFhNTCA9IGZ1bmN0aW9uICh4bWxTdHJpbmc6IHN0cmluZykge1xuXHRyZXR1cm4gZm9ybWF0KFxuXHRcdHhtbFN0cmluZyxcblx0XHR7IHBhcnNlcjogXCJ4bWxcIiwgeG1sV2hpdGVzcGFjZVNlbnNpdGl2aXR5OiBcImlnbm9yZVwiIH0gYXMgUGFydGlhbDxSZXF1aXJlZE9wdGlvbnM+IC8qIG9wdGlvbnMgYnkgdGhlIFByZXR0aWVyIFhNTCBwbHVnaW4gKi9cblx0KTtcbn07XG5cbi8qKlxuICogQ29tcGlsZSBhIENEUyBmaWxlIGludG8gYW4gRURNWCBmaWxlLlxuICpcbiAqIEBwYXJhbSBjZHNVcmwgVGhlIHBhdGggdG8gdGhlIGZpbGUgY29udGFpbmluZyB0aGUgQ0RTIGRlZmluaXRpb24uIFRoaXMgZmlsZSBtdXN0IGRlY2xhcmUgdGhlIG5hbWVzcGFjZVxuICogc2FwLmZlLnRlc3QgYW5kIGEgc2VydmljZSBKZXN0U2VydmljZVxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcGFyYW0gZWRteEZpbGVOYW1lIEFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlIG5hbWUgb2YgdGhlIGNvbXBpbGVkIEVETVggbWV0YWRhdGEgZmlsZVxuICogQHJldHVybnMgVGhlIHBhdGggb2YgdGhlIGdlbmVyYXRlZCBFRE1YXG4gKi9cbmV4cG9ydCBjb25zdCBjb21waWxlQ0RTID0gZnVuY3Rpb24gKFxuXHRjZHNVcmw6IHN0cmluZyxcblx0b3B0aW9uczogY29tcGlsZXIuT0RhdGFPcHRpb25zID0ge30sXG5cdGVkbXhGaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoY2RzVXJsKS5yZXBsYWNlKFwiLmNkc1wiLCBcIi54bWxcIilcbikge1xuXHRjb25zdCBjZHNTdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoY2RzVXJsLCBcInV0Zi04XCIpO1xuXHRjb25zdCBlZG14Q29udGVudCA9IGNkczJlZG14KGNkc1N0cmluZywgXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLCBvcHRpb25zKTtcblx0Y29uc3QgZGlyID0gcGF0aC5yZXNvbHZlKGNkc1VybCwgXCIuLlwiLCBcImdlblwiKTtcblxuXHRjb25zdCBlZG14RmlsZVBhdGggPSBwYXRoLnJlc29sdmUoZGlyLCBlZG14RmlsZU5hbWUpO1xuXG5cdGZzLm1rZGlyU3luYyhkaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuXG5cdGZzLndyaXRlRmlsZVN5bmMoZWRteEZpbGVQYXRoLCBlZG14Q29udGVudCk7XG5cdHJldHVybiBlZG14RmlsZVBhdGg7XG59O1xuXG4vKipcbiAqIENvbXBpbGUgQ0RTIHRvIEVETVguXG4gKlxuICogQHBhcmFtIGNkcyBUaGUgQ0RTIG1vZGVsLiBJdCBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VydmljZS5cbiAqIEBwYXJhbSBzZXJ2aWNlIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgc2VydmljZSB0byBiZSBjb21waWxlZC4gRGVmYXVsdHMgdG8gXCJzYXAuZmUudGVzdC5KZXN0U2VydmljZVwiLlxuICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhlIEVETVggb3V0cHV0XG4gKiBAcmV0dXJucyBUaGUgY29tcGlsZWQgc2VydmljZSBtb2RlbCBhcyBFRE1YLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2RzMmVkbXgoY2RzOiBzdHJpbmcsIHNlcnZpY2UgPSBcInNhcC5mZS50ZXN0Lkplc3RTZXJ2aWNlXCIsIG9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IHNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IFwic291cmNlLmNkc1wiOiBjZHMgfTtcblxuXHQvLyBhbGxvdyB0byBpbmNsdWRlIHN0dWZmIGZyb20gQHNhcC9jZHMvY29tbW9uXG5cdGlmIChjZHMuaW5jbHVkZXMoXCInQHNhcC9jZHMvY29tbW9uJ1wiKSkge1xuXHRcdHNvdXJjZXNbXCJjb21tb24uY2RzXCJdID0gZnMucmVhZEZpbGVTeW5jKHJlcXVpcmUucmVzb2x2ZShcIkBzYXAvY2RzL2NvbW1vbi5jZHNcIiksIFwidXRmLThcIik7XG5cdH1cblxuXHRjb25zdCBjc24gPSBjb21waWxlci5jb21waWxlU291cmNlcyhzb3VyY2VzLCB7fSk7XG5cblx0Y29uc3QgZWRteE9wdGlvbnM6IGNvbXBpbGVyLk9EYXRhT3B0aW9ucyA9IHtcblx0XHRvZGF0YUZvcmVpZ25LZXlzOiB0cnVlLFxuXHRcdG9kYXRhRm9ybWF0OiBcInN0cnVjdHVyZWRcIixcblx0XHRvZGF0YUNvbnRhaW5tZW50OiBmYWxzZSxcblx0XHQuLi5vcHRpb25zLFxuXHRcdHNlcnZpY2U6IHNlcnZpY2Vcblx0fTtcblxuXHRjb25zdCBlZG14ID0gY29tcGlsZXIudG8uZWRteChjc24sIGVkbXhPcHRpb25zKTtcblx0aWYgKCFlZG14KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBDb21waWxhdGlvbiBmYWlsZWQuIEhpbnQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSBDRFMgbW9kZWwgZGVmaW5lcyBzZXJ2aWNlICR7c2VydmljZX0uYCk7XG5cdH1cblx0cmV0dXJuIGVkbXg7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRGYWtlU2lkZUVmZmVjdHNTZXJ2aWNlID0gYXN5bmMgZnVuY3Rpb24gKG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogUHJvbWlzZTxhbnk+IHtcblx0Y29uc3Qgb1NlcnZpY2VDb250ZXh0ID0geyBzY29wZU9iamVjdDoge30sIHNjb3BlVHlwZTogXCJcIiwgc2V0dGluZ3M6IHt9IH07XG5cdHJldHVybiBuZXcgU2lkZUVmZmVjdHNGYWN0b3J5KCkuY3JlYXRlSW5zdGFuY2Uob1NlcnZpY2VDb250ZXh0KS50aGVuKGZ1bmN0aW9uIChvU2VydmljZUluc3RhbmNlOiBhbnkpIHtcblx0XHRjb25zdCBvSmVzdFNpZGVFZmZlY3RzU2VydmljZSA9IG9TZXJ2aWNlSW5zdGFuY2UuZ2V0SW50ZXJmYWNlKCk7XG5cdFx0b0plc3RTaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udGV4dCA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNjb3BlT2JqZWN0OiB7XG5cdFx0XHRcdFx0Z2V0TW9kZWw6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdGdldE1ldGFNb2RlbDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBvTWV0YU1vZGVsO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHJldHVybiBvSmVzdFNpZGVFZmZlY3RzU2VydmljZTtcblx0fSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RmFrZURpYWdub3N0aWNzID0gZnVuY3Rpb24gKCk6IElEaWFnbm9zdGljcyB7XG5cdGNvbnN0IGlzc3VlczogYW55W10gPSBbXTtcblx0cmV0dXJuIHtcblx0XHRhZGRJc3N1ZShpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGlzc3Vlcy5wdXNoKHtcblx0XHRcdFx0aXNzdWVDYXRlZ29yeSxcblx0XHRcdFx0aXNzdWVTZXZlcml0eSxcblx0XHRcdFx0ZGV0YWlsc1xuXHRcdFx0fSk7XG5cdFx0fSxcblx0XHRnZXRJc3N1ZXMoKTogYW55W10ge1xuXHRcdFx0cmV0dXJuIGlzc3Vlcztcblx0XHR9LFxuXHRcdGNoZWNrSWZJc3N1ZUV4aXN0cyhpc3N1ZUNhdGVnb3J5OiBJc3N1ZUNhdGVnb3J5LCBpc3N1ZVNldmVyaXR5OiBJc3N1ZVNldmVyaXR5LCBkZXRhaWxzOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRcdHJldHVybiBpc3N1ZXMuZmluZCgoaXNzdWUpID0+IHtcblx0XHRcdFx0cmV0dXJuIGlzc3VlLmlzc3VlQ2F0ZWdvcnkgPT09IGlzc3VlQ2F0ZWdvcnkgJiYgaXNzdWUuaXNzdWVTZXZlcml0eSA9PT0gaXNzdWVTZXZlcml0eSAmJiBpc3N1ZS5kZXRhaWxzID09PSBkZXRhaWxzO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnRlckNvbnRleHRGb3JUZXN0ID0gZnVuY3Rpb24gKFxuXHRjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdG1hbmlmZXN0U2V0dGluZ3M6IExpc3RSZXBvcnRNYW5pZmVzdFNldHRpbmdzIHwgT2JqZWN0UGFnZU1hbmlmZXN0U2V0dGluZ3Ncbikge1xuXHRjb25zdCBlbnRpdHlTZXQgPSBjb252ZXJ0ZWRUeXBlcy5lbnRpdHlTZXRzLmZpbmQoKGVzKSA9PiBlcy5uYW1lID09PSBtYW5pZmVzdFNldHRpbmdzLmVudGl0eVNldCk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGggPSBnZXREYXRhTW9kZWxPYmplY3RQYXRoRm9yUHJvcGVydHkoZW50aXR5U2V0IGFzIEVudGl0eVNldCwgY29udmVydGVkVHlwZXMsIGVudGl0eVNldCk7XG5cdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChjb252ZXJ0ZWRUeXBlcywgbWFuaWZlc3RTZXR0aW5ncywgZ2V0RmFrZURpYWdub3N0aWNzKCksIG1lcmdlLCBkYXRhTW9kZWxQYXRoKTtcbn07XG5jb25zdCBtZXRhTW9kZWxDYWNoZTogYW55ID0ge307XG5leHBvcnQgY29uc3QgZ2V0TWV0YU1vZGVsID0gYXN5bmMgZnVuY3Rpb24gKHNNZXRhZGF0YVVybDogc3RyaW5nKSB7XG5cdGNvbnN0IG9SZXF1ZXN0b3IgPSBfTWV0YWRhdGFSZXF1ZXN0b3IuY3JlYXRlKHt9LCBcIjQuMFwiLCB7fSk7XG5cdGlmICghbWV0YU1vZGVsQ2FjaGVbc01ldGFkYXRhVXJsXSkge1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBuZXcgKE9EYXRhTWV0YU1vZGVsIGFzIGFueSkob1JlcXVlc3Rvciwgc01ldGFkYXRhVXJsLCB1bmRlZmluZWQsIG51bGwpO1xuXHRcdGF3YWl0IG9NZXRhTW9kZWwuZmV0Y2hFbnRpdHlDb250YWluZXIoKTtcblx0XHRtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdID0gb01ldGFNb2RlbDtcblx0fVxuXG5cdHJldHVybiBtZXRhTW9kZWxDYWNoZVtzTWV0YWRhdGFVcmxdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFNb2RlbE9iamVjdFBhdGhGb3JQcm9wZXJ0eSA9IGZ1bmN0aW9uIChcblx0ZW50aXR5U2V0OiBFbnRpdHlTZXQsXG5cdGNvbnZlcnRlZFR5cGVzOiBDb252ZXJ0ZWRNZXRhZGF0YSxcblx0cHJvcGVydHk/OiBQcm9wZXJ0eSB8IEVudGl0eVNldCB8IEFueUFubm90YXRpb25cbik6IERhdGFNb2RlbE9iamVjdFBhdGgge1xuXHRjb25zdCB0YXJnZXRQYXRoOiBEYXRhTW9kZWxPYmplY3RQYXRoID0ge1xuXHRcdHN0YXJ0aW5nRW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdHRhcmdldE9iamVjdDogcHJvcGVydHksXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBlbnRpdHlTZXQsXG5cdFx0dGFyZ2V0RW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0Y29udmVydGVkVHlwZXM6IGNvbnZlcnRlZFR5cGVzXG5cdH07XG5cdHRhcmdldFBhdGguY29udGV4dExvY2F0aW9uID0gdGFyZ2V0UGF0aDtcblx0cmV0dXJuIHRhcmdldFBhdGg7XG59O1xuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVCaW5kaW5nID0gZnVuY3Rpb24gKGJpbmRpbmdTdHJpbmc6IHN0cmluZywgLi4uYXJnczogYW55W10pIHtcblx0Y29uc3QgYmluZGluZ0VsZW1lbnQgPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoYmluZGluZ1N0cmluZyk7XG5cdHJldHVybiBiaW5kaW5nRWxlbWVudC5mb3JtYXR0ZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTtcbn07XG5cbnR5cGUgTW9kZWxDb250ZW50ID0ge1xuXHRbbmFtZTogc3RyaW5nXTogYW55O1xufTtcblxuLyoqXG4gKiBFdmFsdWF0ZSBhIGJpbmRpbmcgYWdhaW5zdCBhIG1vZGVsLlxuICpcbiAqIEBwYXJhbSBiaW5kaW5nU3RyaW5nIFRoZSBiaW5kaW5nIHN0cmluZy5cbiAqIEBwYXJhbSBtb2RlbENvbnRlbnQgQ29udGVudCBvZiB0aGUgZGVmYXVsdCBtb2RlbCB0byB1c2UgZm9yIGV2YWx1YXRpb24uXG4gKiBAcGFyYW0gbmFtZWRNb2RlbHNDb250ZW50IENvbnRlbnRzIG9mIGFkZGl0aW9uYWwsIG5hbWVkIG1vZGVscyB0byB1c2UuXG4gKiBAcmV0dXJucyBUaGUgZXZhbHVhdGVkIGJpbmRpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBldmFsdWF0ZUJpbmRpbmdXaXRoTW9kZWwoXG5cdGJpbmRpbmdTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZCxcblx0bW9kZWxDb250ZW50OiBNb2RlbENvbnRlbnQsXG5cdG5hbWVkTW9kZWxzQ29udGVudD86IHsgW21vZGVsTmFtZTogc3RyaW5nXTogTW9kZWxDb250ZW50IH1cbik6IHN0cmluZyB7XG5cdGNvbnN0IGJpbmRpbmdFbGVtZW50ID0gQmluZGluZ1BhcnNlci5jb21wbGV4UGFyc2VyKGJpbmRpbmdTdHJpbmcpO1xuXHRjb25zdCB0ZXh0ID0gbmV3IEludmlzaWJsZVRleHQoKTtcblx0dGV4dC5iaW5kUHJvcGVydHkoXCJ0ZXh0XCIsIGJpbmRpbmdFbGVtZW50KTtcblxuXHRjb25zdCBkZWZhdWx0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1vZGVsQ29udGVudCk7XG5cdHRleHQuc2V0TW9kZWwoZGVmYXVsdE1vZGVsKTtcblx0dGV4dC5zZXRCaW5kaW5nQ29udGV4dChkZWZhdWx0TW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQpO1xuXG5cdGlmIChuYW1lZE1vZGVsc0NvbnRlbnQpIHtcblx0XHRmb3IgKGNvbnN0IFtuYW1lLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhuYW1lZE1vZGVsc0NvbnRlbnQpKSB7XG5cdFx0XHRjb25zdCBtb2RlbCA9IG5ldyBKU09OTW9kZWwoY29udGVudCk7XG5cdFx0XHR0ZXh0LnNldE1vZGVsKG1vZGVsLCBuYW1lKTtcblx0XHRcdHRleHQuc2V0QmluZGluZ0NvbnRleHQobW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQsIG5hbWUpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0ZXh0LmdldFRleHQoKTtcbn1cblxuY29uc3QgVEVTVFZJRVdJRCA9IFwidGVzdFZpZXdJZFwiO1xuXG5leHBvcnQgY29uc3QgYXBwbHlGbGV4Q2hhbmdlcyA9IGFzeW5jIGZ1bmN0aW9uIChcblx0YVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlczogYW55W10sXG5cdG9NZXRhTW9kZWw6IE1ldGFNb2RlbCxcblx0cmVzdWx0WE1MOiBhbnksXG5cdGNyZWF0ZUNoYW5nZXNPYmplY3Q6IEZ1bmN0aW9uXG4pIHtcblx0Y29uc3QgY2hhbmdlcyA9IGNyZWF0ZUNoYW5nZXNPYmplY3QoVEVTVFZJRVdJRCwgYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyk7XG5cdGNvbnN0IGFwcElkID0gXCJzb21lQ29tcG9uZW50XCI7XG5cdGNvbnN0IG9NYW5pZmVzdCA9IHtcblx0XHRcInNhcC5hcHBcIjoge1xuXHRcdFx0aWQ6IGFwcElkLFxuXHRcdFx0dHlwZTogXCJhcHBsaWNhdGlvblwiLFxuXHRcdFx0Y3Jvc3NOYXZpZ2F0aW9uOiB7XG5cdFx0XHRcdG91dGJvdW5kczogW11cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGNvbnN0IG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCA9IHtcblx0XHRnZXREaWFnbm9zdGljczogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZShnZXRGYWtlRGlhZ25vc3RpY3MoKSksXG5cdFx0Z2V0TW9kZWw6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0TWV0YU1vZGVsOiBqZXN0LmZuKCkubW9ja1JldHVyblZhbHVlKG9NZXRhTW9kZWwpXG5cdFx0fSksXG5cdFx0Z2V0Q29tcG9uZW50RGF0YTogamVzdC5mbigpLm1vY2tSZXR1cm5WYWx1ZSh7fSksXG5cdFx0Z2V0TWFuaWZlc3RPYmplY3Q6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuXHRcdFx0Z2V0RW50cnk6IGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcpIHtcblx0XHRcdFx0cmV0dXJuIChvTWFuaWZlc3QgYXMgYW55KVtuYW1lXTtcblx0XHRcdH1cblx0XHR9KVxuXHR9IGFzIHVua25vd24gYXMgQXBwQ29tcG9uZW50O1xuXHQvL2Zha2UgY2hhbmdlc1xuXHRqZXN0LnNweU9uKEFwcFN0b3JhZ2UsIFwibG9hZEZsZXhEYXRhXCIpLm1vY2tSZXR1cm5WYWx1ZShQcm9taXNlLnJlc29sdmUoY2hhbmdlcykpO1xuXHRqZXN0LnNweU9uKENvbXBvbmVudCwgXCJnZXRcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRqZXN0LnNweU9uKFV0aWxzLCBcImdldEFwcENvbXBvbmVudEZvckNvbnRyb2xcIikubW9ja1JldHVyblZhbHVlKG9BcHBDb21wb25lbnQpO1xuXHRhd2FpdCBGbGV4U3RhdGUuaW5pdGlhbGl6ZSh7XG5cdFx0Y29tcG9uZW50SWQ6IGFwcElkXG5cdH0pO1xuXHRyZXN1bHRYTUwgPSBhd2FpdCBYbWxQcmVwcm9jZXNzb3IucHJvY2VzcyhyZXN1bHRYTUwsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIsIGNvbXBvbmVudElkOiBhcHBJZCwgaWQ6IFRFU1RWSUVXSUQgfSk7XG5cdHJldHVybiByZXN1bHRYTUw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2hhbmdlc0Zyb21YTUwgPSAoeG1sOiBhbnkpID0+XG5cdFsuLi54bWwucXVlcnlTZWxlY3RvckFsbChcIipcIildXG5cdFx0LmZsYXRNYXAoKGUpID0+IFsuLi5lLmF0dHJpYnV0ZXNdLm1hcCgoYSkgPT4gYS5uYW1lKSlcblx0XHQuZmlsdGVyKChhdHRyKSA9PiBhdHRyLmluY2x1ZGVzKFwic2FwLnVpLmZsLmFwcGxpZWRDaGFuZ2VzXCIpKTtcblxuZXhwb3J0IGNvbnN0IGdldFRlbXBsYXRpbmdSZXN1bHQgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0YVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz86IGFueVtdLFxuXHRjcmVhdGVDaGFuZ2VzT2JqZWN0PzogRnVuY3Rpb25cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYbWwgPSBgPHJvb3Q+JHt4bWxJbnB1dH08L3Jvb3Q+YDtcblx0Y29uc3QgcGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcblx0Y29uc3QgeG1sRG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyh0ZW1wbGF0ZWRYbWwsIFwidGV4dC94bWxcIik7XG5cdC8vIFRvIGVuc3VyZSBvdXIgbWFjcm8gY2FuIHVzZSAjc2V0QmluZGluZ0NvbnRleHQgd2UgZW5zdXJlIHRoZXJlIGlzIGEgcHJlIGV4aXN0aW5nIEpTT05Nb2RlbCBmb3IgY29udmVydGVyQ29udGV4dFxuXHQvLyBpZiBub3QgYWxyZWFkeSBwYXNzZWQgdG8gdGVoIHRlbXBsYXRpbmdcblxuXHRjb25zdCBvTWV0YU1vZGVsID0gYXdhaXQgZ2V0TWV0YU1vZGVsKHNNZXRhZGF0YVVybCk7XG5cdGlmICghbU1vZGVscy5oYXNPd25Qcm9wZXJ0eShcImNvbnZlcnRlckNvbnRleHRcIikpIHtcblx0XHRtTW9kZWxzID0gT2JqZWN0LmFzc2lnbihtTW9kZWxzLCB7IFwiY29udmVydGVyQ29udGV4dFwiOiBuZXcgVGVtcGxhdGVNb2RlbCh7fSwgb01ldGFNb2RlbCkgfSk7XG5cdH1cblxuXHRPYmplY3Qua2V5cyhtTW9kZWxzKS5mb3JFYWNoKGZ1bmN0aW9uIChzTW9kZWxOYW1lKSB7XG5cdFx0aWYgKG1Nb2RlbHNbc01vZGVsTmFtZV0gJiYgbU1vZGVsc1tzTW9kZWxOYW1lXS5pc1RlbXBsYXRlTW9kZWwpIHtcblx0XHRcdG1Nb2RlbHNbc01vZGVsTmFtZV0gPSBuZXcgVGVtcGxhdGVNb2RlbChtTW9kZWxzW3NNb2RlbE5hbWVdLmRhdGEsIG9NZXRhTW9kZWwpO1xuXHRcdH1cblx0fSk7XG5cblx0Y29uc3Qgb1ByZXByb2Nlc3NvclNldHRpbmdzOiBhbnkgPSB7XG5cdFx0bW9kZWxzOiBPYmplY3QuYXNzaWduKFxuXHRcdFx0e1xuXHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWxcblx0XHRcdH0sXG5cdFx0XHRtTW9kZWxzXG5cdFx0KSxcblx0XHRiaW5kaW5nQ29udGV4dHM6IHt9XG5cdH07XG5cblx0Ly9JbmplY3QgbW9kZWxzIGFuZCBiaW5kaW5nQ29udGV4dHNcblx0T2JqZWN0LmtleXMobUJpbmRpbmdDb250ZXh0cykuZm9yRWFjaChmdW5jdGlvbiAoc0tleSkge1xuXHRcdC8qIEFzc2VydCB0byBtYWtlIHN1cmUgdGhlIGFubm90YXRpb25zIGFyZSBpbiB0aGUgdGVzdCBtZXRhZGF0YSAtPiBhdm9pZCBtaXNsZWFkaW5nIHRlc3RzICovXG5cdFx0ZXhwZWN0KHR5cGVvZiBvTWV0YU1vZGVsLmdldE9iamVjdChtQmluZGluZ0NvbnRleHRzW3NLZXldKSkudG9CZURlZmluZWQoKTtcblx0XHRjb25zdCBvTW9kZWwgPSBtTW9kZWxzW3NLZXldIHx8IG9NZXRhTW9kZWw7XG5cdFx0b1ByZXByb2Nlc3NvclNldHRpbmdzLmJpbmRpbmdDb250ZXh0c1tzS2V5XSA9IG9Nb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtQmluZGluZ0NvbnRleHRzW3NLZXldKTsgLy9WYWx1ZSBpcyBzUGF0aFxuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5tb2RlbHNbc0tleV0gPSBvTW9kZWw7XG5cdH0pO1xuXG5cdC8vVGhpcyBjb250ZXh0IGZvciBtYWNybyB0ZXN0aW5nXG5cdGlmIChvUHJlcHJvY2Vzc29yU2V0dGluZ3MubW9kZWxzW1widGhpc1wiXSkge1xuXHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncy5iaW5kaW5nQ29udGV4dHNbXCJ0aGlzXCJdID0gb1ByZXByb2Nlc3NvclNldHRpbmdzLm1vZGVsc1tcInRoaXNcIl0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXHR9XG5cblx0bGV0IHJlc3VsdFhNTCA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKHhtbERvYy5maXJzdEVsZW1lbnRDaGlsZCEsIHsgbmFtZTogXCJUZXN0IEZyYWdtZW50XCIgfSwgb1ByZXByb2Nlc3NvclNldHRpbmdzKTtcblxuXHRpZiAoYVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyAmJiBjcmVhdGVDaGFuZ2VzT2JqZWN0KSB7XG5cdFx0Ly8gcHJlZml4IElkc1xuXHRcdFsuLi5yZXN1bHRYTUwucXVlcnlTZWxlY3RvckFsbChcIltpZF1cIildLmZvckVhY2goKG5vZGUpID0+IHtcblx0XHRcdG5vZGUuaWQgPSBgJHtURVNUVklFV0lEfS0tJHtub2RlLmlkfWA7XG5cdFx0fSk7XG5cdFx0Ly8gYXBwbHkgZmxleCBjaGFuZ2VzXG5cdFx0cmVzdWx0WE1MID0gYXdhaXQgYXBwbHlGbGV4Q2hhbmdlcyhhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzLCBvTWV0YU1vZGVsLCByZXN1bHRYTUwsIGNyZWF0ZUNoYW5nZXNPYmplY3QpO1xuXHRcdC8vQXNzZXJ0IHRoYXQgYWxsIGNoYW5nZXMgaGF2ZSBiZWVuIGFwcGxpZWRcblx0XHRjb25zdCBjaGFuZ2VzQXBwbGllZCA9IGdldENoYW5nZXNGcm9tWE1MKHJlc3VsdFhNTCk7XG5cdFx0ZXhwZWN0KGNoYW5nZXNBcHBsaWVkLmxlbmd0aCkudG9CZShhVmFyaWFudERlcGVuZGVudENvbnRyb2xDaGFuZ2VzLmxlbmd0aCk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdFhNTDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0ZWRYTUwgPSBhc3luYyBmdW5jdGlvbiAoXG5cdHhtbElucHV0OiBzdHJpbmcsXG5cdHNNZXRhZGF0YVVybDogc3RyaW5nLFxuXHRtQmluZGluZ0NvbnRleHRzOiB7IFt4OiBzdHJpbmddOiBhbnk7IGVudGl0eVNldD86IHN0cmluZyB9LFxuXHRtTW9kZWxzOiB7IFt4OiBzdHJpbmddOiBhbnkgfSxcblx0YVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcz86IGFueVtdLFxuXHRjcmVhdGVDaGFuZ2VzT2JqZWN0PzogRnVuY3Rpb25cbikge1xuXHRjb25zdCB0ZW1wbGF0ZWRYTUwgPSBhd2FpdCBnZXRUZW1wbGF0aW5nUmVzdWx0KFxuXHRcdHhtbElucHV0LFxuXHRcdHNNZXRhZGF0YVVybCxcblx0XHRtQmluZGluZ0NvbnRleHRzLFxuXHRcdG1Nb2RlbHMsXG5cdFx0YVZhcmlhbnREZXBlbmRlbnRDb250cm9sQ2hhbmdlcyxcblx0XHRjcmVhdGVDaGFuZ2VzT2JqZWN0XG5cdCk7XG5cdHJldHVybiBzZXJpYWxpemVYTUwodGVtcGxhdGVkWE1MKTtcbn07XG5cbi8qKlxuICogUHJvY2VzcyB0aGUgcmVxdWVzdGVkIFhNTCBmcmFnbWVudCB3aXRoIHRoZSBwcm92aWRlZCBkYXRhLlxuICpcbiAqIEBwYXJhbSBuYW1lIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSB0ZXN0ZWQuXG4gKiBAcGFyYW0gdGVzdERhdGEgVGVzdCBkYXRhIGNvbnNpc3RpbmdcbiAqIEByZXR1cm5zIFRlbXBsYXRlZCBmcmFnbWVudCBhcyBzdHJpbmdcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGcmFnbWVudChuYW1lOiBzdHJpbmcsIHRlc3REYXRhOiB7IFttb2RlbDogc3RyaW5nXTogb2JqZWN0IH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXHRjb25zdCBpbnB1dFhtbCA9IGA8cm9vdD48Y29yZTpGcmFnbWVudCBmcmFnbWVudE5hbWU9XCIke25hbWV9XCIgdHlwZT1cIlhNTFwiIHhtbG5zOmNvcmU9XCJzYXAudWkuY29yZVwiIC8+PC9yb290PmA7XG5cdGNvbnN0IHBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKCk7XG5cdGNvbnN0IGlucHV0RG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhpbnB1dFhtbCwgXCJ0ZXh0L3htbFwiKTtcblxuXHQvLyBidWlsZCBtb2RlbCBhbmQgYmluZGluZ3MgZm9yIGdpdmVuIHRlc3QgZGF0YVxuXHRjb25zdCBzZXR0aW5ncyA9IHtcblx0XHRtb2RlbHM6IHt9IGFzIHsgW25hbWU6IHN0cmluZ106IEpTT05Nb2RlbCB9LFxuXHRcdGJpbmRpbmdDb250ZXh0czoge30gYXMgeyBbbmFtZTogc3RyaW5nXTogb2JqZWN0IH1cblx0fTtcblx0Zm9yIChjb25zdCBtb2RlbCBpbiB0ZXN0RGF0YSkge1xuXHRcdGNvbnN0IGpzb25Nb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRqc29uTW9kZWwuc2V0RGF0YSh0ZXN0RGF0YVttb2RlbF0pO1xuXHRcdHNldHRpbmdzLm1vZGVsc1ttb2RlbF0gPSBqc29uTW9kZWw7XG5cdFx0c2V0dGluZ3MuYmluZGluZ0NvbnRleHRzW21vZGVsXSA9IHNldHRpbmdzLm1vZGVsc1ttb2RlbF0uY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIGFzIENvbnRleHQ7XG5cdH1cblxuXHQvLyBleGVjdXRlIHRoZSBwcmUtcHJvY2Vzc29yXG5cdGNvbnN0IHJlc3VsdERvYyA9IGF3YWl0IFhNTFByZXByb2Nlc3Nvci5wcm9jZXNzKGlucHV0RG9jLmZpcnN0RWxlbWVudENoaWxkLCB7IG5hbWUgfSwgc2V0dGluZ3MpO1xuXG5cdC8vIGV4Y2x1ZGUgbmVzdGVkIGZyYWdtZW50cyBmcm9tIHRlc3Qgc25hcHNob3RzXG5cdGNvbnN0IGZyYWdtZW50cyA9IHJlc3VsdERvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImNvcmU6RnJhZ21lbnRcIik7XG5cdGlmIChmcmFnbWVudHM/Lmxlbmd0aCA+IDApIHtcblx0XHRmb3IgKGNvbnN0IGZyYWdtZW50IG9mIGZyYWdtZW50cykge1xuXHRcdFx0ZnJhZ21lbnQuaW5uZXJIVE1MID0gXCJcIjtcblx0XHR9XG5cdH1cblxuXHQvLyBLZWVwIHRoZSBmcmFnbWVudCByZXN1bHQgYXMgY2hpbGQgb2Ygcm9vdCBub2RlIHdoZW4gZnJhZ21lbnQgZ2VuZXJhdGVzIG11bHRpcGxlIHJvb3QgY29udHJvbHNcblx0Y29uc3QgeG1sUmVzdWx0ID0gcmVzdWx0RG9jLmNoaWxkcmVuLmxlbmd0aCA+IDEgPyByZXN1bHREb2Mub3V0ZXJIVE1MIDogcmVzdWx0RG9jLmlubmVySFRNTDtcblxuXHRyZXR1cm4gZm9ybWF0WG1sKHhtbFJlc3VsdCwge1xuXHRcdGZpbHRlcjogKG5vZGU6IGFueSkgPT4gbm9kZS50eXBlICE9PSBcIkNvbW1lbnRcIlxuXHR9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvbnRyb2woY29udHJvbFRvU2VyaWFsaXplOiBDb250cm9sIHwgQ29udHJvbFtdKSB7XG5cdGxldCB0YWJDb3VudCA9IDA7XG5cdGZ1bmN0aW9uIGdldFRhYih0b0FkZDogbnVtYmVyID0gMCkge1xuXHRcdGxldCB0YWIgPSBcIlwiO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGFiQ291bnQgKyB0b0FkZDsgaSsrKSB7XG5cdFx0XHR0YWIgKz0gXCJcXHRcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRhYjtcblx0fVxuXHRjb25zdCBzZXJpYWxpemVEZWxlZ2F0ZSA9IHtcblx0XHRzdGFydDogZnVuY3Rpb24gKGNvbnRyb2w6IGFueSwgc0FnZ3JlZ2F0aW9uTmFtZTogc3RyaW5nKSB7XG5cdFx0XHRsZXQgY29udHJvbERldGFpbCA9IFwiXCI7XG5cdFx0XHRpZiAoc0FnZ3JlZ2F0aW9uTmFtZSkge1xuXHRcdFx0XHRpZiAoY29udHJvbC5nZXRQYXJlbnQoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGluZGV4SW5QYXJlbnQgPSAoY29udHJvbC5nZXRQYXJlbnQoKS5nZXRBZ2dyZWdhdGlvbihzQWdncmVnYXRpb25OYW1lKSBhcyBNYW5hZ2VkT2JqZWN0W10pLmluZGV4T2YoY29udHJvbCk7XG5cdFx0XHRcdFx0aWYgKGluZGV4SW5QYXJlbnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sRGV0YWlsICs9IGAsXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbERldGFpbCArPSBgJHtjb250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfShgO1xuXHRcdFx0cmV0dXJuIGNvbnRyb2xEZXRhaWw7XG5cdFx0fSxcblx0XHRlbmQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBcIn0pXCI7XG5cdFx0fSxcblx0XHRtaWRkbGU6IGZ1bmN0aW9uIChjb250cm9sOiBhbnkpIHtcblx0XHRcdGxldCBkYXRhID0gYHtpZDogJHtjb250cm9sLmdldElkKCl9YDtcblx0XHRcdGZvciAoY29uc3Qgb0NvbnRyb2xLZXkgaW4gY29udHJvbC5tUHJvcGVydGllcykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShvQ29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRkYXRhICs9IGAsXFxuJHtnZXRUYWIoKX0gJHtvQ29udHJvbEtleX06ICR7Y29udHJvbC5tUHJvcGVydGllc1tvQ29udHJvbEtleV19YDtcblx0XHRcdFx0fSBlbHNlIGlmIChjb250cm9sLm1CaW5kaW5nSW5mb3MuaGFzT3duUHJvcGVydHkob0NvbnRyb2xLZXkpKSB7XG5cdFx0XHRcdFx0Y29uc3QgYmluZGluZ0RldGFpbCA9IGNvbnRyb2wubUJpbmRpbmdJbmZvc1tvQ29udHJvbEtleV07XG5cdFx0XHRcdFx0ZGF0YSArPSBgLFxcbiR7Z2V0VGFiKCl9ICR7b0NvbnRyb2xLZXl9OiBmb3JtYXR0ZXIoJHtiaW5kaW5nRGV0YWlsLnBhcnRzLm1hcChcblx0XHRcdFx0XHRcdChiaW5kaW5nSW5mbzogYW55KSA9PiBgXFxuJHtnZXRUYWIoMSl9JHtiaW5kaW5nSW5mby5tb2RlbCA/IGJpbmRpbmdJbmZvLm1vZGVsIDogXCJcIn0+JHtiaW5kaW5nSW5mby5wYXRofWBcblx0XHRcdFx0XHQpfSlgO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGNvbnN0IG9Db250cm9sS2V5IGluIGNvbnRyb2wubUFzc29jaWF0aW9ucykge1xuXHRcdFx0XHRpZiAoY29udHJvbC5tQXNzb2NpYXRpb25zLmhhc093blByb3BlcnR5KG9Db250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGRhdGEgKz0gYCxcXG4ke2dldFRhYigpfSAke29Db250cm9sS2V5fTogJHtjb250cm9sLm1Bc3NvY2lhdGlvbnNbb0NvbnRyb2xLZXldWzBdfWA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGRhdGEgKz0gYGA7XG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9LFxuXHRcdHN0YXJ0QWdncmVnYXRpb246IGZ1bmN0aW9uIChjb250cm9sOiBhbnksIHNOYW1lOiBzdHJpbmcpIHtcblx0XHRcdGxldCBvdXQgPSBgLFxcbiR7Z2V0VGFiKCl9JHtzTmFtZX1gO1xuXHRcdFx0dGFiQ291bnQrKztcblxuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0b3V0ICs9IGA9eyBwYXRoOicke2NvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0ucGF0aH0nLCB0ZW1wbGF0ZTpcXG4ke2dldFRhYigpfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvdXQgKz0gYD1bXFxuJHtnZXRUYWIoKX1gO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG91dDtcblx0XHR9LFxuXHRcdGVuZEFnZ3JlZ2F0aW9uOiBmdW5jdGlvbiAoY29udHJvbDogYW55LCBzTmFtZTogc3RyaW5nKSB7XG5cdFx0XHR0YWJDb3VudC0tO1xuXHRcdFx0aWYgKGNvbnRyb2wubUJpbmRpbmdJbmZvc1tzTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfX1gO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGBcXG4ke2dldFRhYigpfV1gO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKEFycmF5LmlzQXJyYXkoY29udHJvbFRvU2VyaWFsaXplKSkge1xuXHRcdHJldHVybiBjb250cm9sVG9TZXJpYWxpemUubWFwKChjb250cm9sVG9SZW5kZXI6IENvbnRyb2wpID0+IHtcblx0XHRcdHJldHVybiBuZXcgU2VyaWFsaXplcihjb250cm9sVG9SZW5kZXIsIHNlcmlhbGl6ZURlbGVnYXRlKS5zZXJpYWxpemUoKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmV3IFNlcmlhbGl6ZXIoY29udHJvbFRvU2VyaWFsaXplLCBzZXJpYWxpemVEZWxlZ2F0ZSkuc2VyaWFsaXplKCk7XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF3YWl0ZXIoKSB7XG5cdGxldCBmblJlc29sdmUhOiBGdW5jdGlvbjtcblx0Y29uc3QgbXlQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRmblJlc29sdmUgPSByZXNvbHZlO1xuXHR9KTtcblx0cmV0dXJuIHsgcHJvbWlzZTogbXlQcm9taXNlLCByZXNvbHZlOiBmblJlc29sdmUgfTtcbn1cbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBbWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO01BQ3NCQSxlLGFBQWdCQyxJLEVB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
@@ -110,7 +110,7 @@ export const getControlAttribute = function (controlSelector: string, attributeN
110
110
  return runXPathQuery(selector, xmlDom);
111
111
  };
112
112
 
113
- const serializeXML = function (xmlDom: Node) {
113
+ export const serializeXML = function (xmlDom: Node) {
114
114
  const serializer = new window.XMLSerializer();
115
115
  const xmlString = serializer.serializeToString(xmlDom);
116
116
  return formatXML(xmlString);
@@ -158,7 +158,14 @@ export const compileCDS = function (
158
158
  * @returns The compiled service model as EDMX.
159
159
  */
160
160
  export function cds2edmx(cds: string, service = "sap.fe.test.JestService", options: compiler.ODataOptions = {}) {
161
- const csn = compiler.compileSources({ "string.cds": cds }, {});
161
+ const sources: Record<string, string> = { "source.cds": cds };
162
+
163
+ // allow to include stuff from @sap/cds/common
164
+ if (cds.includes("'@sap/cds/common'")) {
165
+ sources["common.cds"] = fs.readFileSync(require.resolve("@sap/cds/common.cds"), "utf-8");
166
+ }
167
+
168
+ const csn = compiler.compileSources(sources, {});
162
169
 
163
170
  const edmxOptions: compiler.ODataOptions = {
164
171
  odataForeignKeys: true,
@@ -479,12 +486,14 @@ export function serializeControl(controlToSerialize: Control | Control[]) {
479
486
  return tab;
480
487
  }
481
488
  const serializeDelegate = {
482
- start: function (control: Control, sAggregationName: string) {
489
+ start: function (control: any, sAggregationName: string) {
483
490
  let controlDetail = "";
484
491
  if (sAggregationName) {
485
- const indexInParent = (control.getParent()!.getAggregation(sAggregationName) as ManagedObject[]).indexOf(control);
486
- if (indexInParent > 0) {
487
- controlDetail += `,\n${getTab()}`;
492
+ if (control.getParent()) {
493
+ const indexInParent = (control.getParent().getAggregation(sAggregationName) as ManagedObject[]).indexOf(control);
494
+ if (indexInParent > 0) {
495
+ controlDetail += `,\n${getTab()}`;
496
+ }
488
497
  }
489
498
  }
490
499
  controlDetail += `${control.getMetadata().getName()}(`;
@@ -513,15 +522,24 @@ export function serializeControl(controlToSerialize: Control | Control[]) {
513
522
  data += ``;
514
523
  return data;
515
524
  },
516
- startAggregation: function (control: Control, sName: string) {
525
+ startAggregation: function (control: any, sName: string) {
517
526
  let out = `,\n${getTab()}${sName}`;
518
527
  tabCount++;
519
- out += `=[\n${getTab()}`;
528
+
529
+ if (control.mBindingInfos[sName]) {
530
+ out += `={ path:'${control.mBindingInfos[sName].path}', template:\n${getTab()}`;
531
+ } else {
532
+ out += `=[\n${getTab()}`;
533
+ }
520
534
  return out;
521
535
  },
522
- endAggregation: function () {
536
+ endAggregation: function (control: any, sName: string) {
523
537
  tabCount--;
524
- return `\n${getTab()}]`;
538
+ if (control.mBindingInfos[sName]) {
539
+ return `\n${getTab()}}`;
540
+ } else {
541
+ return `\n${getTab()}]`;
542
+ }
525
543
  }
526
544
  };
527
545
  if (Array.isArray(controlToSerialize)) {
@@ -242,7 +242,8 @@ sap.ui.define(
242
242
  {
243
243
  viewNamespace: "sap.fe.templates",
244
244
  autoWait: true,
245
- timeout: 120,
245
+ timeout: 30,
246
+ pollingInterval: 50,
246
247
  logLevel: "ERROR",
247
248
  disableHistoryOverride: true,
248
249
  asyncPolling: true
@@ -18,8 +18,7 @@ sap.ui.define(
18
18
  "sap/fe/test/api/HeaderActions",
19
19
  "sap/fe/test/api/HeaderAssertions",
20
20
  "sap/fe/test/api/FormActions",
21
- "sap/fe/test/api/FormAssertions",
22
- "sap/fe/test/api/APIHelper"
21
+ "sap/fe/test/api/FormAssertions"
23
22
  ],
24
23
  function (
25
24
  mergeObjects,
@@ -35,8 +34,7 @@ sap.ui.define(
35
34
  HeaderActions,
36
35
  HeaderAssertions,
37
36
  FormActions,
38
- FormAssertions,
39
- APIHelper
37
+ FormAssertions
40
38
  ) {
41
39
  "use strict";
42
40
 
@@ -143,6 +141,7 @@ sap.ui.define(
143
141
  ObjectPageLayoutId = ViewId + "--fe::ObjectPage",
144
142
  OPHeaderId = "fe::HeaderFacet",
145
143
  OPHeaderContentId = "fe::ObjectPage-OPHeaderContent",
144
+ OPHeaderContentContainerId = ViewId + "--fe::HeaderContentContainer",
146
145
  OPFooterId = "fe::FooterBar",
147
146
  OPSectionIdPrefix = "fe::FacetSection",
148
147
  OPSubSectionIdPrefix = "fe::FacetSubSection",
@@ -183,7 +182,7 @@ sap.ui.define(
183
182
  * @public
184
183
  */
185
184
  onTable: function (vTableIdentifier) {
186
- if (!Utils.isOfType(vTableIdentifier, String)) {
185
+ if (!Utils.isOfType(vTableIdentifier, String) && !vTableIdentifier.id) {
187
186
  vTableIdentifier = { id: getTableId(vTableIdentifier.property, vTableIdentifier.qualifier) };
188
187
  }
189
188
  return this._onTable(vTableIdentifier);
@@ -199,6 +198,20 @@ sap.ui.define(
199
198
  id: sChartId
200
199
  });
201
200
  },
201
+ /**
202
+ * Returns a {@link sap.fe.test.api.FilterBarActions} instance.
203
+ *
204
+ * @param {sap.fe.test.api.FilterBarIdentifier | string} vFilterBarIdentifier The identifier of the filterbar
205
+ * @returns {sap.fe.test.api.FilterBarActions} The available filter bar actions
206
+ * @function
207
+ * @alias sap.fe.test.ListReport.actions#onFilterBar
208
+ * @public
209
+ */
210
+ onFilterBar: function (vFilterBarIdentifier) {
211
+ var vIdentifier =
212
+ typeof vFilterBarIdentifier === "string" ? { id: vFilterBarIdentifier } : vFilterBarIdentifier;
213
+ return this._onFilterBar(vIdentifier);
214
+ },
202
215
  /**
203
216
  * Returns a {@link sap.fe.test.api.FooterActionsOP} instance.
204
217
  *
@@ -225,6 +238,7 @@ sap.ui.define(
225
238
  id: ObjectPageLayoutId,
226
239
  headerId: OPHeaderId,
227
240
  headerContentId: OPHeaderContentId,
241
+ headerContentContainerId: OPHeaderContentContainerId,
228
242
  viewId: ViewId,
229
243
  paginatorId: PaginatorId,
230
244
  breadCrumbId: BreadCrumbId
@@ -276,6 +290,14 @@ sap.ui.define(
276
290
  .description("Pressing 'More Links' button")
277
291
  .execute();
278
292
  },
293
+ iClickQuickViewCancelButton: function () {
294
+ return OpaBuilder.create(this)
295
+ .hasType("sap.m.Button")
296
+ .has("Cancek")
297
+ .doPress()
298
+ .description("Pressing Quickview 'Cancel' button")
299
+ .execute();
300
+ },
279
301
  iClickQuickViewTitleLink: function (sText) {
280
302
  return OpaBuilder.create(this)
281
303
  .hasType("sap.m.Link")
@@ -399,7 +421,15 @@ sap.ui.define(
399
421
  * @private
400
422
  */
401
423
  iOpenSectionWithTitle: function (sName) {
402
- return this.iGoToSection(sName);
424
+ return OpaBuilder.create(this)
425
+ .timeout(1)
426
+ .check(function () {
427
+ return false;
428
+ })
429
+ .error(
430
+ "Test function iOpenSectionWithTitle() is deprecated - please use function iGoToSection() with the same parameters"
431
+ )
432
+ .execute();
403
433
  },
404
434
 
405
435
  iEnterValueForFieldInEditableHeader: function (sValue) {
@@ -485,7 +515,7 @@ sap.ui.define(
485
515
  * @public
486
516
  */
487
517
  onTable: function (vTableIdentifier) {
488
- if (!Utils.isOfType(vTableIdentifier, String)) {
518
+ if (!Utils.isOfType(vTableIdentifier, String) && !vTableIdentifier.id) {
489
519
  vTableIdentifier = { id: getTableId(vTableIdentifier.property, vTableIdentifier.qualifier) };
490
520
  }
491
521
  return this._onTable(vTableIdentifier);
@@ -501,6 +531,20 @@ sap.ui.define(
501
531
  id: sChartId
502
532
  });
503
533
  },
534
+ /**
535
+ * Returns a {@link sap.fe.test.api.FilterBarAssertions} instance.
536
+ *
537
+ * @param {sap.fe.test.api.FilterBarIdentifier | string} vFilterBarIdentifier The identifier of the filterbar
538
+ * @returns {sap.fe.test.api.FilterBarAssertions} The available filter bar assertions
539
+ * @function
540
+ * @alias sap.fe.test.ListReport.assertions#onFilterBar
541
+ * @public
542
+ */
543
+ onFilterBar: function (vFilterBarIdentifier) {
544
+ var vIdentifier =
545
+ typeof vFilterBarIdentifier === "string" ? { id: vFilterBarIdentifier } : vFilterBarIdentifier;
546
+ return this._onFilterBar(vIdentifier);
547
+ },
504
548
  /**
505
549
  * Returns a {@link sap.fe.test.api.FooterAssertionsOP} instance.
506
550
  *
@@ -525,6 +569,7 @@ sap.ui.define(
525
569
  id: ObjectPageLayoutId,
526
570
  headerId: OPHeaderId,
527
571
  headerContentId: OPHeaderContentId,
572
+ headerContentContainerId: OPHeaderContentContainerId,
528
573
  viewId: ViewId,
529
574
  paginatorId: PaginatorId,
530
575
  breadCrumbId: BreadCrumbId
@@ -817,11 +862,19 @@ sap.ui.define(
817
862
  .hasType("sap.m.MessageView")
818
863
  .check(function (oMessageView) {
819
864
  var messages = oMessageView[0].getItems();
865
+ var aNewBoundMessagesInfo = [];
866
+ if (aBoundMessagesInfo instanceof Array) {
867
+ aNewBoundMessagesInfo = aBoundMessagesInfo;
868
+ } else {
869
+ Object.keys(aBoundMessagesInfo).map(function (oElement) {
870
+ aNewBoundMessagesInfo.push(aBoundMessagesInfo[oElement]);
871
+ });
872
+ }
820
873
  return (
821
- messages[0].getGroupName() === aBoundMessagesInfo[0].GroupLabel &&
822
- messages[1].getGroupName() === aBoundMessagesInfo[1].GroupLabel &&
823
- messages[0].getTitle() === aBoundMessagesInfo[0].MessageText &&
824
- messages[1].getTitle() === aBoundMessagesInfo[1].MessageText
874
+ messages[0].getGroupName() === aNewBoundMessagesInfo[0].GroupLabel &&
875
+ messages[1].getGroupName() === aNewBoundMessagesInfo[1].GroupLabel &&
876
+ messages[0].getTitle() === aNewBoundMessagesInfo[0].MessageText &&
877
+ messages[1].getTitle() === aNewBoundMessagesInfo[1].MessageText
825
878
  );
826
879
  }, true)
827
880
  .isDialogElement(true)
@@ -64,6 +64,7 @@ sap.ui.define(["sap/ui/test/OpaBuilder", "sap/ui/test/Opa5", "sap/fe/test/Utils"
64
64
  */
65
65
  iOpenNavigationMenu: function () {
66
66
  return OpaBuilder.create(this)
67
+ .pollingInterval(1000) // the shell needs some time to prepare the navigation menu
67
68
  .hasId("shellAppTitle")
68
69
  .doPress()
69
70
  .description("Expanding Shell Navigation Menu")
@@ -52,11 +52,17 @@ sap.ui.define(
52
52
  oBuilder.has(OpaBuilder.Matchers.children(this._getBuilderForFieldGroup(vFieldIdentifier)));
53
53
  }
54
54
 
55
- return oBuilder
56
- .has(OpaBuilder.Matchers.children(this._getBuilderForFormElement(vFieldIdentifier)))
57
- .has(FEBuilder.Matchers.singleElement())
58
- .has(OpaBuilder.Matchers.children(this.createFieldMatcher(vFieldIdentifier)))
59
- .has(FEBuilder.Matchers.singleElement());
55
+ if (vFieldIdentifier.connectedFields) {
56
+ return oBuilder
57
+ .has(OpaBuilder.Matchers.children(this._getBuilderForFormElement(vFieldIdentifier)))
58
+ .has(FEBuilder.Matchers.singleElement());
59
+ } else {
60
+ return oBuilder
61
+ .has(OpaBuilder.Matchers.children(this._getBuilderForFormElement(vFieldIdentifier)))
62
+ .has(FEBuilder.Matchers.singleElement())
63
+ .has(OpaBuilder.Matchers.children(this.createFieldMatcher(vFieldIdentifier)))
64
+ .has(FEBuilder.Matchers.singleElement());
65
+ }
60
66
  };
61
67
 
62
68
  FormAPI.prototype._getBuilderForFormElement = function (vFieldIdentifier) {
@@ -88,6 +88,28 @@ sap.ui.define(
88
88
  return OpaBuilder.create(this.getOpaInstance()).hasId(sHeaderContentId);
89
89
  };
90
90
 
91
+ /**
92
+ * Helper method for creating an OpaBuilder of the Object Page Layout.
93
+ *
94
+ * @param {string} sObjectPageLayoutId The identifier of <code>sap.uxap.ObjectPageLayout</code> control
95
+ * @returns {object} OpaBuilder object
96
+ * @ui5-restricted
97
+ */
98
+ HeaderAPI.prototype.getObjectPageLayoutBuilder = function (sObjectPageLayoutId) {
99
+ return FEBuilder.create(this.getOpaInstance()).hasType("sap.uxap.ObjectPageLayout").hasId(sObjectPageLayoutId);
100
+ };
101
+
102
+ /**
103
+ * Helper method for creating an OpaBuilder of the Object Page Header Content Container.
104
+ *
105
+ * @param {string} sObjectPageHeaderContentContainerId The identifier of <code>sap.m.FlexBox</code> control
106
+ * @returns {object} OpaBuilder object
107
+ * @ui5-restricted
108
+ */
109
+ HeaderAPI.prototype.getObjectPageHeaderContentContainerBuilder = function (sObjectPageHeaderContentContainerId) {
110
+ return FEBuilder.create(this.getOpaInstance()).hasType("sap.m.FlexBox").hasId(sObjectPageHeaderContentContainerId);
111
+ };
112
+
91
113
  HeaderAPI.prototype.getFieldGroupFieldId = function (vFieldIdentifier, sViewId) {
92
114
  var sId = "fe::HeaderFacet";
93
115
 
@@ -22,6 +22,7 @@ sap.ui.define(
22
22
  var HeaderActions = function (oHeaderBuilder, vHeaderDescription) {
23
23
  this._sObjectPageLayoutId = vHeaderDescription.id;
24
24
  this._sHeaderContentId = vHeaderDescription.headerContentId;
25
+ this._sHeaderContentContainerId = vHeaderDescription.headerContentContainerId;
25
26
  this._sViewId = vHeaderDescription.viewId;
26
27
  this._sPaginatorId = vHeaderDescription.paginatorId;
27
28
  this._sBreadCrumbId = vHeaderDescription.breadCrumbId;
@@ -218,7 +219,7 @@ sap.ui.define(
218
219
  */
219
220
  HeaderActions.prototype.iClickLink = function (vLinkIdentifier) {
220
221
  // TODO this function needs to aligned with onForm().iClickLink - for now vLinkIdentifier must be the link text!
221
- var oHeaderContentBuilder = this.getObjectPageDynamicHeaderContentBuilder(this._sHeaderContentId);
222
+ var oHeaderContentBuilder = this.getObjectPageHeaderContentContainerBuilder(this._sHeaderContentContainerId);
222
223
  return this.prepareResult(
223
224
  oHeaderContentBuilder
224
225
  .has(OpaBuilder.Matchers.children(FEBuilder.create().hasType("sap.m.Link").hasProperties({ text: vLinkIdentifier })))
@@ -30,6 +30,7 @@ sap.ui.define(
30
30
  this._sObjectPageLayoutId = vHeaderDescription.id;
31
31
  this._sHeaderId = vHeaderDescription.headerId;
32
32
  this._sHeaderContentId = vHeaderDescription.headerContentId;
33
+ this._sHeaderContentContainerId = vHeaderDescription.headerContentContainerId;
33
34
  this._sViewId = vHeaderDescription.viewId;
34
35
  this._sPaginatorId = vHeaderDescription.paginatorId;
35
36
  this._sBreadCrumbId = vHeaderDescription.breadCrumbId;
@@ -343,7 +344,7 @@ sap.ui.define(
343
344
  */
344
345
  HeaderAssertions.prototype.iCheckHeaderFacet = function (vFacetIdentifier, mState) {
345
346
  var aArguments = Utils.parseArguments([[Object, String], Object], arguments),
346
- oHeaderContentBuilder = this.getObjectPageDynamicHeaderContentBuilder(this._sHeaderContentId),
347
+ oHeaderContentBuilder = this.getObjectPageHeaderContentContainerBuilder(this._sHeaderContentContainerId),
347
348
  sId = new RegExp("fe::HeaderFacetContainer::" + vFacetIdentifier.facetId + "$");
348
349
 
349
350
  if (vFacetIdentifier.custom) {
@@ -455,7 +456,7 @@ sap.ui.define(
455
456
  HeaderAssertions.prototype.iCheckLink = function (vLinkIdentifier, mState) {
456
457
  // TODO this function needs to aligned with onForm().iCheckLink - for now vLinkIdentifier must be the link text!
457
458
  var aArguments = Utils.parseArguments([String, Object], arguments),
458
- oHeaderContentBuilder = this.getObjectPageDynamicHeaderContentBuilder(this._sHeaderContentId);
459
+ oHeaderContentBuilder = this.getObjectPageHeaderContentContainerBuilder(this._sHeaderContentContainerId);
459
460
  return this.prepareResult(
460
461
  oHeaderContentBuilder
461
462
  .has(
@@ -46,7 +46,7 @@ sap.ui.define(
46
46
  }
47
47
 
48
48
  function _getMainControls(oContent) {
49
- if (oContent.isA("sap.fe.macros.FieldAPI")) {
49
+ if (oContent.isA("sap.fe.macros.field.FieldAPI")) {
50
50
  return _getMainControls(oContent.getContent());
51
51
  }
52
52
 
@@ -54,6 +54,7 @@ sap.ui.define(
54
54
  });
55
55
 
56
56
  return OpaBuilder.create(this)
57
+ .timeout(60) // allow some time (redeployment on the Java stack is slow)
57
58
  .check(function () {
58
59
  return bSuccess;
59
60
  })
@@ -21,9 +21,9 @@ sap.ui.define(["sap/ui/core/Core", "sap/ui/core/library"], function (Core, _libr
21
21
  controls: [],
22
22
  elements: [],
23
23
  // eslint-disable-next-line no-template-curly-in-string
24
- version: "1.105.0",
24
+ version: "1.106.0",
25
25
  noLibraryCSS: true
26
26
  });
27
27
  return thisLib;
28
28
  }, false);
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0aGlzTGliIiwiQ29yZSIsImluaXRMaWJyYXJ5IiwibmFtZSIsImRlcGVuZGVuY2llcyIsInR5cGVzIiwiaW50ZXJmYWNlcyIsImNvbnRyb2xzIiwiZWxlbWVudHMiLCJ2ZXJzaW9uIiwibm9MaWJyYXJ5Q1NTIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJsaWJyYXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiAhICR7Y29weXJpZ2h0fVxuICovXG5cbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5cbi8qKlxuICogVGVzdCBsaWJyYXJ5IGZvciBTQVAgRmlvcmkgZWxlbWVudHNcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAbmFtZSBzYXAuZmUudGVzdFxuICogQHB1YmxpY1xuICovXG5cbi8vIGxpYnJhcnkgZGVwZW5kZW5jaWVzXG5jb25zdCB0aGlzTGliID0gQ29yZS5pbml0TGlicmFyeSh7XG5cdG5hbWU6IFwic2FwLmZlLnRlc3RcIixcblx0ZGVwZW5kZW5jaWVzOiBbXCJzYXAudWkuY29yZVwiXSxcblx0dHlwZXM6IFtdLFxuXHRpbnRlcmZhY2VzOiBbXSxcblx0Y29udHJvbHM6IFtdLFxuXHRlbGVtZW50czogW10sXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmdcblx0dmVyc2lvbjogXCIke3ZlcnNpb259XCIsXG5cdG5vTGlicmFyeUNTUzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHRoaXNMaWI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUVBO0VBQ0EsSUFBTUEsT0FBTyxHQUFHQyxJQUFJLENBQUNDLFdBQUwsQ0FBaUI7SUFDaENDLElBQUksRUFBRSxhQUQwQjtJQUVoQ0MsWUFBWSxFQUFFLENBQUMsYUFBRCxDQUZrQjtJQUdoQ0MsS0FBSyxFQUFFLEVBSHlCO0lBSWhDQyxVQUFVLEVBQUUsRUFKb0I7SUFLaENDLFFBQVEsRUFBRSxFQUxzQjtJQU1oQ0MsUUFBUSxFQUFFLEVBTnNCO0lBT2hDO0lBQ0FDLE9BQU8sRUFBRSxZQVJ1QjtJQVNoQ0MsWUFBWSxFQUFFO0VBVGtCLENBQWpCLENBQWhCO1NBWWVWLE8ifQ==
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0aGlzTGliIiwiQ29yZSIsImluaXRMaWJyYXJ5IiwibmFtZSIsImRlcGVuZGVuY2llcyIsInR5cGVzIiwiaW50ZXJmYWNlcyIsImNvbnRyb2xzIiwiZWxlbWVudHMiLCJ2ZXJzaW9uIiwibm9MaWJyYXJ5Q1NTIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJsaWJyYXJ5LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5cbi8qKlxuICogVGVzdCBsaWJyYXJ5IGZvciBTQVAgRmlvcmkgZWxlbWVudHNcbiAqXG4gKiBAbmFtZXNwYWNlXG4gKiBAbmFtZSBzYXAuZmUudGVzdFxuICogQHB1YmxpY1xuICovXG5cbi8vIGxpYnJhcnkgZGVwZW5kZW5jaWVzXG5jb25zdCB0aGlzTGliID0gQ29yZS5pbml0TGlicmFyeSh7XG5cdG5hbWU6IFwic2FwLmZlLnRlc3RcIixcblx0ZGVwZW5kZW5jaWVzOiBbXCJzYXAudWkuY29yZVwiXSxcblx0dHlwZXM6IFtdLFxuXHRpbnRlcmZhY2VzOiBbXSxcblx0Y29udHJvbHM6IFtdLFxuXHRlbGVtZW50czogW10sXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmdcblx0dmVyc2lvbjogXCIke3ZlcnNpb259XCIsXG5cdG5vTGlicmFyeUNTUzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHRoaXNMaWI7XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7RUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUVBO0VBQ0EsSUFBTUEsT0FBTyxHQUFHQyxJQUFJLENBQUNDLFdBQUwsQ0FBaUI7SUFDaENDLElBQUksRUFBRSxhQUQwQjtJQUVoQ0MsWUFBWSxFQUFFLENBQUMsYUFBRCxDQUZrQjtJQUdoQ0MsS0FBSyxFQUFFLEVBSHlCO0lBSWhDQyxVQUFVLEVBQUUsRUFKb0I7SUFLaENDLFFBQVEsRUFBRSxFQUxzQjtJQU1oQ0MsUUFBUSxFQUFFLEVBTnNCO0lBT2hDO0lBQ0FDLE9BQU8sRUFBRSxZQVJ1QjtJQVNoQ0MsWUFBWSxFQUFFO0VBVGtCLENBQWpCLENBQWhCO1NBWWVWLE8ifQ==
@@ -1,7 +1,3 @@
1
- /*
2
- * ! ${copyright}
3
- */
4
-
5
1
  import Core from "sap/ui/core/Core";
6
2
  import "sap/ui/core/library";
7
3