diff --git a/sites/admin-cabinet/assets/js/pbx/PbxAPI/extensionsAPI.js b/sites/admin-cabinet/assets/js/pbx/PbxAPI/extensionsAPI.js
index 58ee8abfd..64f4bc166 100644
--- a/sites/admin-cabinet/assets/js/pbx/PbxAPI/extensionsAPI.js
+++ b/sites/admin-cabinet/assets/js/pbx/PbxAPI/extensionsAPI.js
@@ -39,10 +39,15 @@ var Extensions = {
* This function drops all caches if data changes.
*/
cbOnDataChanged: function cbOnDataChanged() {
- sessionStorage.removeItem('/pbxcore/api/extensions/getForSelect?type=all');
- sessionStorage.removeItem('/pbxcore/api/extensions/getForSelect?type=route');
- sessionStorage.removeItem('/pbxcore/api/extensions/getForSelect?type=internal');
- sessionStorage.removeItem('/pbxcore/api/extensions/getForSelect?type=phones');
+ var pattern = '/pbxcore/api/extensions/getForSelect';
+
+ for (var i = 0; i < sessionStorage.length; i++) {
+ var key = sessionStorage.key(i); // Check if the key matches the pattern
+
+ if (key && key.startsWith(pattern)) {
+ sessionStorage.removeItem(key);
+ }
+ }
},
/**
@@ -438,4 +443,4 @@ var Extensions = {
$(document).ready(function () {
Extensions.initialize();
});
-//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QYnhBUEkvZXh0ZW5zaW9uc0FQSS5qcyJdLCJuYW1lcyI6WyJFeHRlbnNpb25zIiwiaW5pdGlhbGl6ZSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYk9uRGF0YUNoYW5nZWQiLCJzZXNzaW9uU3RvcmFnZSIsInJlbW92ZUl0ZW0iLCJmb3JtYXREcm9wZG93blJlc3VsdHMiLCJyZXNwb25zZSIsImFkZEVtcHR5IiwiZm9ybWF0dGVkUmVzcG9uc2UiLCJzdWNjZXNzIiwicmVzdWx0cyIsInB1c2giLCJuYW1lIiwidmFsdWUiLCJ0eXBlIiwidHlwZUxvY2FsaXplZCIsIiQiLCJlYWNoIiwiZGF0YSIsImluZGV4IiwiaXRlbSIsImdldERyb3Bkb3duU2V0dGluZ3NXaXRoRW1wdHkiLCJjYk9uQ2hhbmdlIiwiYXBpU2V0dGluZ3MiLCJ1cmwiLCJQYnhBcGkiLCJleHRlbnNpb25zR2V0Rm9yU2VsZWN0IiwidXJsRGF0YSIsIm9uUmVzcG9uc2UiLCJvbkNoYW5nZSIsInBhcnNlSW50IiwiZHJvcGRvd24iLCJpZ25vcmVDYXNlIiwiZnVsbFRleHRTZWFyY2giLCJmaWx0ZXJSZW1vdGVEYXRhIiwic2F2ZVJlbW90ZURhdGEiLCJmb3JjZVNlbGVjdGlvbiIsImhpZGVEaXZpZGVycyIsInRlbXBsYXRlcyIsIm1lbnUiLCJjdXN0b21Ecm9wZG93bk1lbnUiLCJnZXREcm9wZG93blNldHRpbmdzV2l0aG91dEVtcHR5IiwiZ2V0RHJvcGRvd25TZXR0aW5nc0ZvclJvdXRpbmciLCJnZXREcm9wZG93blNldHRpbmdzT25seUludGVybmFsV2l0aG91dEVtcHR5IiwiZ2V0RHJvcGRvd25TZXR0aW5nc09ubHlJbnRlcm5hbFdpdGhFbXB0eSIsImNoZWNrQXZhaWxhYmlsaXR5Iiwib2xkTnVtYmVyIiwibmV3TnVtYmVyIiwiY3NzQ2xhc3NOYW1lIiwidXNlcklkIiwibGVuZ3RoIiwicGFyZW50IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsImFwaSIsImV4dGVuc2lvbnNBdmFpbGFibGUiLCJzdGF0ZUNvbnRleHQiLCJvbiIsIm51bWJlciIsInN1Y2Nlc3NUZXN0Iiwib25TdWNjZXNzIiwibWVzc2FnZSIsImdsb2JhbFRyYW5zbGF0ZSIsImV4X1RoaXNOdW1iZXJJc05vdEZyZWUiLCJ1bmRlZmluZWQiLCJodG1sIiwiZ2V0UGhvbmVFeHRlbnNpb25zIiwiY2FsbEJhY2siLCJmaWVsZHMiLCJ2YWx1ZXMiLCJvbGRUeXBlIiwib3B0aW9uIiwibWF5YmVUZXh0IiwidGV4dCIsIm1heWJlRGlzYWJsZWQiLCJkaXNhYmxlZCIsInVwZGF0ZVBob25lc1JlcHJlc2VudCIsImh0bWxDbGFzcyIsIiRwcmVwcm9jZXNzZWRPYmplY3RzIiwibnVtYmVycyIsImVsIiwicmVwcmVzZW50IiwiZ2V0SXRlbSIsImluZGV4T2YiLCJFeHRlbnNpb25zR2V0UGhvbmVzUmVwcmVzZW50IiwiY2JBZnRlckdldFBob25lc1JlcHJlc2VudCIsInJlc3VsdCIsInNldEl0ZW0iLCJ1cGRhdGVQaG9uZVJlcHJlc2VudCIsImRvY3VtZW50IiwicmVhZHkiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUEsVUFBVSxHQUFHO0FBRWY7QUFDSjtBQUNBO0FBQ0E7QUFDSUMsRUFBQUEsVUFOZSx3QkFNRjtBQUNUQyxJQUFBQSxNQUFNLENBQUNDLGdCQUFQLENBQXdCLG1CQUF4QixFQUE2Q0gsVUFBVSxDQUFDSSxlQUF4RDtBQUNILEdBUmM7O0FBVWY7QUFDSjtBQUNBO0FBQ0E7QUFDSUEsRUFBQUEsZUFkZSw2QkFjRztBQUNkQyxJQUFBQSxjQUFjLENBQUNDLFVBQWYsQ0FBMEIsK0NBQTFCO0FBQ0FELElBQUFBLGNBQWMsQ0FBQ0MsVUFBZixDQUEwQixpREFBMUI7QUFDQUQsSUFBQUEs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QUFkLEVBQXNCdUIsU0FBckQ7QUFDSDs7QUFDRGpFLFFBQUFBLENBQUMsQ0FBQ2dFLEVBQUQsQ0FBRCxDQUFNNUIsV0FBTixDQUFrQnlCLFNBQWxCO0FBQ0gsT0FQRDtBQVFIO0FBQ0osR0F4WGM7O0FBMFhmO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDSVcsRUFBQUEsb0JBL1hlLGdDQStYTTlCLE1BL1hOLEVBK1hjO0FBQ3pCLFFBQU1xQixPQUFPLEdBQUcsRUFBaEI7QUFDQUEsSUFBQUEsT0FBTyxDQUFDcEUsSUFBUixDQUFhK0MsTUFBYjtBQUNBakMsSUFBQUEsTUFBTSxDQUFDMkQsNEJBQVAsQ0FBb0NMLE9BQXBDLEVBQTRDLFVBQUN6RSxRQUFELEVBQVk7QUFDcEQ7QUFDSTtBQUNBLFlBQUlBLFFBQVEsS0FBSzBELFNBQWIsSUFDRzFELFFBQVEsQ0FBQ2dGLE1BQVQsS0FBb0IsSUFEdkIsSUFFR2hGLFFBQVEsQ0FBQ1ksSUFBVCxDQUFjd0MsTUFBZCxNQUEwQk0sU0FGakMsRUFFNEM7QUFDeEM7QUFDQTdELFVBQUFBLGNBQWMsQ0FBQ29GLE9BQWYsQ0FBdUI3QixNQUF2QixFQUErQnBELFFBQVEsQ0FBQ1ksSUFBVCxDQUFjd0MsTUFBZCxFQUFzQnVCLFNBQXJEO0FBQ0g7QUFDSjtBQUNKLEtBVkQ7QUFXSDtBQTdZYyxDQUFuQjtBQWlaQTtBQUNBO0FBQ0E7O0FBQ0FqRSxDQUFDLENBQUN5RSxRQUFELENBQUQsQ0FBWUMsS0FBWixDQUFrQixZQUFNO0FBQ3BCNUYsRUFBQUEsVUFBVSxDQUFDQyxVQUFYO0FBQ0gsQ0FGRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBNaWtvUEJYIC0gZnJlZSBwaG9uZSBzeXN0ZW0gZm9yIHNtYWxsIGJ1c2luZXNzXG4gKiBDb3B5cmlnaHQgwqkgMjAxNy0yMDIzIEFsZXhleSBQb3J0bm92IGFuZCBOaWtvbGF5IEJla2V0b3ZcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2ZcbiAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGVcbiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uXG4gKiBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LlxuICovXG5cbi8qIGdsb2JhbCBnbG9iYWxSb290VXJsLCBzZXNzaW9uU3RvcmFnZSwgUGJ4QXBpICovXG5cblxuLyoqXG4gKiBUaGlzIG1vZHVsZSBlbmNhcHN1bGF0ZXMgYSBjb2xsZWN0aW9uIG9mIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGV4dGVuc2lvbnMuXG4gKlxuICogQG1vZHVsZSBFeHRlbnNpb25zXG4gKi9cbmNvbnN0IEV4dGVuc2lvbnMgPSB7XG5cbiAgICAvKipcbiAgICAgKiBJbml0aWFsaXplcyB0aGUgRXh0ZW5zaW9ucyBvYmplY3QuXG4gICAgICogQWRkcyBhbiBldmVudCBsaXN0ZW5lciBmb3IgJ0NvbmZpZ0RhdGFDaGFuZ2VkJyBldmVudC5cbiAgICAgKi9cbiAgICBpbml0aWFsaXplKCkge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignQ29uZmlnRGF0YUNoYW5nZWQnLCBFeHRlbnNpb25zLmNiT25EYXRhQ2hhbmdlZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgdHJpZ2dlcmVkIHdoZW4gQ29uZmlnRGF0YUNoYW5nZWQgZXZlbnQgaXMgZmlyZWQuXG4gICAgICogVGhpcyBmdW5jdGlvbiBkcm9wcyBhbGwgY2FjaGVzIGlmIGRhdGEgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBjYk9uRGF0YUNoYW5nZWQoKSB7XG4gICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oJy9wYnhjb3JlL2FwaS9leHRlbnNpb25zL2dldEZvclNlbGVjdD90eXBlPWFsbCcpO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCcvcGJ4Y29yZS9hcGkvZXh0ZW5zaW9ucy9nZXRGb3JTZWxlY3Q/dHlwZT1yb3V0ZScpO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCcvcGJ4Y29yZS9hcGkvZXh0ZW5zaW9ucy9nZXRGb3JTZWxlY3Q/dHlwZT1pbnRlcm5hbCcpO1xuICAgICAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKCcvcGJ4Y29yZS9hcGkvZXh0ZW5zaW9ucy9nZXRGb3JTZWxlY3Q/dHlwZT1waG9uZXMnKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRm9ybWF0cyB0aGUgZHJvcGRvd24gcmVzdWx0cyBieSBhZGRpbmcgbmVjZXNzYXJ5IGRhdGEuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2UgLSBSZXNwb25zZSBmcm9tIHRoZSBzZXJ2ZXIuXG4gICAgICogQHBhcmFtIHtCb29sZWFufSBhZGRFbXB0eSAtIEEgZmxhZyB0byBkZWNpZGUgaWYgYW4gZW1wdHkgb2JqZWN0IG5lZWRzIHRvIGJlIGFkZGVkIHRvIHRoZSByZXN1bHQuXG4gICAgICogQHJldHVybiB7T2JqZWN0fSBmb3JtYXR0ZWRSZXNwb25zZSAtIFRoZSBmb3JtYXR0ZWQgcmVzcG9uc2UuXG4gICAgICovXG4gICAgZm9ybWF0RHJvcGRvd25SZXN1bHRzKHJlc3BvbnNlLCBhZGRFbXB0eSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRSZXNwb25zZSA9IHtcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICAgICAgcmVzdWx0czogW10sXG4gICAgICAgIH07XG4gICAgICAgIGlmIChhZGRFbXB0eSkge1xuICAgICAgICAgICAgZm9ybWF0dGVkUmVzcG9uc2UucmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnLScsXG4gICAgICAgICAgICAgICAgdmFsdWU6IC0xLFxuICAgICAgICAgICAgICAgIHR5cGU6ICcnLFxuICAgICAgICAgICAgICAgIHR5cGVMb2NhbGl6ZWQ6ICcnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGZvcm1hdHRlZFJlc3BvbnNlLnN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgJC5lYWNoKHJlc3BvbnNlLmRhdGEsIChpbmRleCwgaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlZFJlc3BvbnNlLnJlc3VsdHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZUxvY2FsaXplZDogaXRlbS50eXBlTG9jYWxpemVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkUmVzcG9uc2U7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgZHJvcGRvd24gc2V0dGluZ3MgZm9yIGV4dGVuc2lvbnMgd2l0aCBhbiBlbXB0eSBmaWVsZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYk9uQ2hhbmdlIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZHJvcGRvd24gc2VsZWN0aW9uIGNoYW5nZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRyb3Bkb3duIHNldHRpbmdzLlxuICAgICAqL1xuICAgIGdldERyb3Bkb3duU2V0dGluZ3NXaXRoRW1wdHkoY2JPbkNoYW5nZSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFwaVNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBQYnhBcGkuZXh0ZW5zaW9uc0dldEZvclNlbGVjdCxcbiAgICAgICAgICAgICAgICB1cmxEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhbGwnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBjYWNoZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGhyb3R0bGU6IDQwMCxcbiAgICAgICAgICAgICAgICBvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHRlbnNpb25zLmZvcm1hdERyb3Bkb3duUmVzdWx0cyhyZXNwb25zZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNoYW5nZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZUludCh2YWx1ZSwgMTApID09PSAtMSkgJCh0aGlzKS5kcm9wZG93bignY2xlYXInKTtcbiAgICAgICAgICAgICAgICBpZiAoY2JPbkNoYW5nZSAhPT0gbnVsbCkgY2JPbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgZmlsdGVyUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIHNhdmVSZW1vdGVEYXRhOiB0cnVlLFxuICAgICAgICAgICAgZm9yY2VTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgLy8gZGlyZWN0aW9uOiAnZG93bndhcmQnLFxuICAgICAgICAgICAgaGlkZURpdmlkZXJzOiAnZW1wdHknLFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgbWVudTogRXh0ZW5zaW9ucy5jdXN0b21Ecm9wZG93bk1lbnUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGRyb3Bkb3duIHNldHRpbmdzIGZvciBleHRlbnNpb25zIHdpdGhvdXQgYW4gZW1wdHkgZmllbGQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2JPbkNoYW5nZSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRyb3Bkb3duIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkcm9wZG93biBzZXR0aW5ncy5cbiAgICAgKi9cbiAgICBnZXREcm9wZG93blNldHRpbmdzV2l0aG91dEVtcHR5KGNiT25DaGFuZ2UgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcGlTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIHVybDogUGJ4QXBpLmV4dGVuc2lvbnNHZXRGb3JTZWxlY3QsXG4gICAgICAgICAgICAgICAgdXJsRGF0YToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYWxsJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXh0ZW5zaW9ucy5mb3JtYXREcm9wZG93blJlc3VsdHMocmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlnbm9yZUNhc2U6IHRydWUsXG4gICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbHRlclJlbW90ZURhdGE6IHRydWUsXG4gICAgICAgICAgICBzYXZlUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIGZvcmNlU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGhpZGVEaXZpZGVyczogJ2VtcHR5JyxcbiAgICAgICAgICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiT25DaGFuZ2UgIT09IG51bGwpIGNiT25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIG1lbnU6IEV4dGVuc2lvbnMuY3VzdG9tRHJvcGRvd25NZW51LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBkcm9wZG93biBzZXR0aW5ncyBmb3Igcm91dGluZyBleHRlbnNpb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiT25DaGFuZ2UgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkcm9wZG93biBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZHJvcGRvd24gc2V0dGluZ3MuXG4gICAgICovXG4gICAgZ2V0RHJvcGRvd25TZXR0aW5nc0ZvclJvdXRpbmcoY2JPbkNoYW5nZSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFwaVNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBQYnhBcGkuZXh0ZW5zaW9uc0dldEZvclNlbGVjdCxcbiAgICAgICAgICAgICAgICB1cmxEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdyb3V0aW5nJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIHRocm90dGxlOiA0MDAsXG4gICAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXh0ZW5zaW9ucy5mb3JtYXREcm9wZG93blJlc3VsdHMocmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlnbm9yZUNhc2U6IHRydWUsXG4gICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbHRlclJlbW90ZURhdGE6IHRydWUsXG4gICAgICAgICAgICBzYXZlUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIGZvcmNlU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIGRpcmVjdGlvbjogJ2Rvd253YXJkJyxcbiAgICAgICAgICAgIGhpZGVEaXZpZGVyczogJ2VtcHR5JyxcbiAgICAgICAgICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiT25DaGFuZ2UgIT09IG51bGwpIGNiT25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIG1lbnU6IEV4dGVuc2lvbnMuY3VzdG9tRHJvcGRvd25NZW51LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBkcm9wZG93biBzZXR0aW5ncyBmb3IgaW50ZXJuYWwgZXh0ZW5zaW9ucyB3aXRob3V0IGFuIGVtcHR5IGZpZWxkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiT25DaGFuZ2UgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkcm9wZG93biBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZHJvcGRvd24gc2V0dGluZ3MuXG4gICAgICovXG4gICAgZ2V0RHJvcGRvd25TZXR0aW5nc09ubHlJbnRlcm5hbFdpdGhvdXRFbXB0eShjYk9uQ2hhbmdlID0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXBpU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICB1cmw6IFBieEFwaS5leHRlbnNpb25zR2V0Rm9yU2VsZWN0LFxuICAgICAgICAgICAgICAgIHVybERhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ludGVybmFsJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIHRocm90dGxlOiA0MDAsXG4gICAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXh0ZW5zaW9ucy5mb3JtYXREcm9wZG93blJlc3VsdHMocmVzcG9uc2UsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlnbm9yZUNhc2U6IHRydWUsXG4gICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbHRlclJlbW90ZURhdGE6IHRydWUsXG4gICAgICAgICAgICBzYXZlUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIGZvcmNlU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIGRpcmVjdGlvbjogJ2Rvd253YXJkJyxcbiAgICAgICAgICAgIGhpZGVEaXZpZGVyczogJ2VtcHR5JyxcbiAgICAgICAgICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNiT25DaGFuZ2UgIT09IG51bGwpIGNiT25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIG1lbnU6IEV4dGVuc2lvbnMuY3VzdG9tRHJvcGRvd25NZW51LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBkcm9wZG93biBzZXR0aW5ncyBmb3IgaW50ZXJuYWwgZXh0ZW5zaW9ucyB3aXRoIGFuIGVtcHR5IGZpZWxkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiT25DaGFuZ2UgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkcm9wZG93biBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZHJvcGRvd24gc2V0dGluZ3MuXG4gICAgICovXG4gICAgZ2V0RHJvcGRvd25TZXR0aW5nc09ubHlJbnRlcm5hbFdpdGhFbXB0eShjYk9uQ2hhbmdlID0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXBpU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICB1cmw6IFBieEFwaS5leHRlbnNpb25zR2V0Rm9yU2VsZWN0LFxuICAgICAgICAgICAgICAgIHVybERhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2ludGVybmFsJ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8gY2FjaGU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIC8vIHRocm90dGxlOiA0MDAsXG4gICAgICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRXh0ZW5zaW9ucy5mb3JtYXREcm9wZG93blJlc3VsdHMocmVzcG9uc2UsIHRydWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VJbnQodmFsdWUsIDEwKSA9PT0gLTEpICQodGhpcykuZHJvcGRvd24oJ2NsZWFyJyk7XG4gICAgICAgICAgICAgICAgaWYgKGNiT25DaGFuZ2UgIT09IG51bGwpIGNiT25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlnbm9yZUNhc2U6IHRydWUsXG4gICAgICAgICAgICBmdWxsVGV4dFNlYXJjaDogdHJ1ZSxcbiAgICAgICAgICAgIGZpbHRlclJlbW90ZURhdGE6IHRydWUsXG4gICAgICAgICAgICBzYXZlUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIGZvcmNlU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIC8vIGRpcmVjdGlvbjogJ2Rvd253YXJkJyxcbiAgICAgICAgICAgIGhpZGVEaXZpZGVyczogJ2VtcHR5JyxcbiAgICAgICAgICAgIHRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAgIG1lbnU6IEV4dGVuc2lvbnMuY3VzdG9tRHJvcGRvd25NZW51LFxuICAgICAgICAgICAgfSxcblxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIG5ldyBleHRlbnNpb24gbnVtYmVyIGlzIGF2YWlsYWJsZS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb2xkTnVtYmVyIC0gVGhlIG9yaWdpbmFsIGV4dGVuc2lvbiBudW1iZXIuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld051bWJlciAtIFRoZSBuZXcgZXh0ZW5zaW9uIG51bWJlciB0byBjaGVjay5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gY3NzQ2xhc3NOYW1lIC0gVGhlIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgaW5wdXQgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdXNlcklkIC0gVGhlIElEIG9mIHRoZSB1c2VyIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXh0ZW5zaW9uLlxuICAgICAqL1xuICAgIGNoZWNrQXZhaWxhYmlsaXR5KG9sZE51bWJlciwgbmV3TnVtYmVyLCBjc3NDbGFzc05hbWUgPSAnZXh0ZW5zaW9uJywgdXNlcklkID0gJycpIHtcbiAgICAgICAgaWYgKG9sZE51bWJlciA9PT0gbmV3TnVtYmVyIHx8IG5ld051bWJlci5sZW5ndGg9PT0wKSB7XG4gICAgICAgICAgICAkKGAudWkuaW5wdXQuJHtjc3NDbGFzc05hbWV9YCkucGFyZW50KCkucmVtb3ZlQ2xhc3MoJ2Vycm9yJyk7XG4gICAgICAgICAgICAkKGAjJHtjc3NDbGFzc05hbWV9LWVycm9yYCkuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgICQuYXBpKHtcbiAgICAgICAgICAgIHVybDogUGJ4QXBpLmV4dGVuc2lvbnNBdmFpbGFibGUsXG4gICAgICAgICAgICBzdGF0ZUNvbnRleHQ6IGAudWkuaW5wdXQuJHtjc3NDbGFzc05hbWV9YCxcbiAgICAgICAgICAgIG9uOiAnbm93JyxcbiAgICAgICAgICAgIHVybERhdGE6IHtcbiAgICAgICAgICAgICAgICBudW1iZXI6IG5ld051bWJlclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN1Y2Nlc3NUZXN0OiBQYnhBcGkuc3VjY2Vzc1Rlc3QsXG4gICAgICAgICAgICBvblN1Y2Nlc3MocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YVsnYXZhaWxhYmxlJ109PT10cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICQoYC51aS5pbnB1dC4ke2Nzc0NsYXNzTmFtZX1gKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgJChgIyR7Y3NzQ2xhc3NOYW1lfS1lcnJvcmApLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzZXJJZC5sZW5ndGggPiAwICYmIHJlc3BvbnNlLmRhdGFbJ3VzZXJJZCddID09PSB1c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgJChgLnVpLmlucHV0LiR7Y3NzQ2xhc3NOYW1lfWApLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICAkKGAjJHtjc3NDbGFzc05hbWV9LWVycm9yYCkuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQoYC51aS5pbnB1dC4ke2Nzc0NsYXNzTmFtZX1gKS5wYXJlbnQoKS5hZGRDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPWAke2dsb2JhbFRyYW5zbGF0ZS5leF9UaGlzTnVtYmVySXNOb3RGcmVlfTombmJzcGA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxUcmFuc2xhdGVbcmVzcG9uc2UuZGF0YVsncmVwcmVzZW50J11dIT09dW5kZWZpbmVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBnbG9iYWxUcmFuc2xhdGVbcmVzcG9uc2UuZGF0YVsncmVwcmVzZW50J11dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPXJlc3BvbnNlLmRhdGFbJ3JlcHJlc2VudCddO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICQoYCMke2Nzc0NsYXNzTmFtZX0tZXJyb3JgKS5yZW1vdmVDbGFzcygnaGlkZGVuJykuaHRtbChtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyBwaG9uZSBleHRlbnNpb25zLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxCYWNrIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgcGhvbmUgZXh0ZW5zaW9ucyBoYXZlIGJlZW4gcmV0cmlldmVkLlxuICAgICAqL1xuICAgIGdldFBob25lRXh0ZW5zaW9ucyhjYWxsQmFjaykge1xuICAgICAgICAkLmFwaSh7XG4gICAgICAgICAgICB1cmw6IFBieEFwaS5leHRlbnNpb25zR2V0Rm9yU2VsZWN0LFxuICAgICAgICAgICAgdXJsRGF0YToge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdwaG9uZXMnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb246ICdub3cnLFxuICAgICAgICAgICAgb25SZXNwb25zZShyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBFeHRlbnNpb25zLmZvcm1hdERyb3Bkb3duUmVzdWx0cyhyZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uU3VjY2VzcyhyZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIGNhbGxCYWNrKHJlc3BvbnNlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIEhUTUwgc3RyaW5nIGZvciBhIGN1c3RvbSBkcm9wZG93biBtZW51LlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSAtIFRoZSByZXNwb25zZSBjb250YWluaW5nIGRyb3Bkb3duIG1lbnUgb3B0aW9ucy5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gZmllbGRzIC0gVGhlIGZpZWxkcyBpbiB0aGUgcmVzcG9uc2UgdG8gdXNlIGZvciB0aGUgbWVudSBvcHRpb25zLlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBIVE1MIHN0cmluZyBmb3IgdGhlIGN1c3RvbSBkcm9wZG93biBtZW51LlxuICAgICAqL1xuICAgIGN1c3RvbURyb3Bkb3duTWVudShyZXNwb25zZSwgZmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IHJlc3BvbnNlW2ZpZWxkcy52YWx1ZXNdIHx8IHt9O1xuICAgICAgICBsZXQgaHRtbCA9ICcnO1xuICAgICAgICBsZXQgb2xkVHlwZSA9ICcnO1xuICAgICAgICAkLmVhY2godmFsdWVzLCAoaW5kZXgsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbi50eXBlICE9PSBvbGRUeXBlKSB7XG4gICAgICAgICAgICAgICAgb2xkVHlwZSA9IG9wdGlvbi50eXBlO1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9XCJkaXZpZGVyXCI+PC9kaXY+JztcbiAgICAgICAgICAgICAgICBodG1sICs9ICdcdDxkaXYgY2xhc3M9XCJoZWFkZXJcIj4nO1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJ1x0PGkgY2xhc3M9XCJ0YWdzIGljb25cIj48L2k+JztcbiAgICAgICAgICAgICAgICBodG1sICs9IG9wdGlvbi50eXBlTG9jYWxpemVkO1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtYXliZVRleHQgPSAob3B0aW9uW2ZpZWxkcy50ZXh0XSkgPyBgZGF0YS10ZXh0PVwiJHtvcHRpb25bZmllbGRzLnRleHRdfVwiYCA6ICcnO1xuICAgICAgICAgICAgY29uc3QgbWF5YmVEaXNhYmxlZCA9IChvcHRpb25bZmllbGRzLmRpc2FibGVkXSkgPyAnZGlzYWJsZWQgJyA6ICcnO1xuICAgICAgICAgICAgaHRtbCArPSBgPGRpdiBjbGFzcz1cIiR7bWF5YmVEaXNhYmxlZH1pdGVtXCIgZGF0YS12YWx1ZT1cIiR7b3B0aW9uW2ZpZWxkcy52YWx1ZV19XCIke21heWJlVGV4dH0+YDtcbiAgICAgICAgICAgIGh0bWwgKz0gb3B0aW9uW2ZpZWxkcy5uYW1lXTtcbiAgICAgICAgICAgIGh0bWwgKz0gJzwvZGl2Pic7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaHRtbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHBob25lIHJlcHJlc2VudGF0aW9ucyBmb3IgSFRNTCBlbGVtZW50cyB3aXRoIGEgc3BlY2lmaWMgY2xhc3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaHRtbENsYXNzIC0gVGhlIEhUTUwgY2xhc3MgdG8gaWRlbnRpZnkgZWxlbWVudHMgZm9yIHVwZGF0ZS5cbiAgICAgKi9cbiAgICB1cGRhdGVQaG9uZXNSZXByZXNlbnQoaHRtbENsYXNzKSB7XG4gICAgICAgIGNvbnN0ICRwcmVwcm9jZXNzZWRPYmplY3RzID0gJChgLiR7aHRtbENsYXNzfWApO1xuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgZWxlbWVudHMgdG8gcHJvY2Vzc1xuICAgICAgICBpZiAoJHByZXByb2Nlc3NlZE9iamVjdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1iZXJzID0gW107XG5cbiAgICAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCBhbmQgdXBkYXRlIHJlcHJlc2VudGF0aW9ucyBpZiBhdmFpbGFibGVcbiAgICAgICAgJHByZXByb2Nlc3NlZE9iamVjdHMuZWFjaCgoaW5kZXgsIGVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSAkKGVsKS50ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCByZXByZXNlbnQgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKG51bWJlcik7XG4gICAgICAgICAgICBpZiAocmVwcmVzZW50KSB7XG4gICAgICAgICAgICAgICAgJChlbCkuaHRtbChyZXByZXNlbnQpO1xuICAgICAgICAgICAgICAgICQoZWwpLnJlbW92ZUNsYXNzKGh0bWxDbGFzcyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bWJlcnMuaW5kZXhPZihudW1iZXIpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG51bWJlcnMucHVzaChudW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgbnVtYmVycyB0byBmZXRjaCByZXByZXNlbnRhdGlvbnMgZm9yXG4gICAgICAgIGlmIChudW1iZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmV0Y2ggcGhvbmUgcmVwcmVzZW50YXRpb25zIHVzaW5nIEFQSSBjYWxsXG4gICAgICAgIFBieEFwaS5FeHRlbnNpb25zR2V0UGhvbmVzUmVwcmVzZW50KG51bWJlcnMsXG4gICAgICAgICAgICAocmVzcG9uc2UpPT57XG4gICAgICAgICAgICAgICAgRXh0ZW5zaW9ucy5jYkFmdGVyR2V0UGhvbmVzUmVwcmVzZW50KHJlc3BvbnNlLCBodG1sQ2xhc3MpXG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIGFmdGVyIGZldGNoaW5nIHBob25lIHJlcHJlc2VudGF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSAtIFRoZSByZXNwb25zZSBvYmplY3QgZnJvbSB0aGUgQVBJIGNhbGwuXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGh0bWxDbGFzcyAtIFRoZSBIVE1MIGNsYXNzIGZvciBlbGVtZW50IGlkZW50aWZpY2F0aW9uLlxuICAgICAqL1xuICAgIGNiQWZ0ZXJHZXRQaG9uZXNSZXByZXNlbnQocmVzcG9uc2UsIGh0bWxDbGFzcyl7XG4gICAgICAgIGNvbnN0ICRwcmVwcm9jZXNzZWRPYmplY3RzID0gJChgLiR7aHRtbENsYXNzfWApO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSByZXNwb25zZSBpcyB2YWxpZCBhbmQgcHJvY2VzcyBlbGVtZW50cyBhY2NvcmRpbmdseVxuICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCAmJiByZXNwb25zZS5yZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgICAgICRwcmVwcm9jZXNzZWRPYmplY3RzLmVhY2goKGluZGV4LCBlbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9ICQoZWwpLnRleHQoKTtcbiAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UuZGF0YVtudW1iZXJdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgJChlbCkuaHRtbChyZXNwb25zZS5kYXRhW251bWJlcl0ucmVwcmVzZW50KTtcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShudW1iZXIsIHJlc3BvbnNlLmRhdGFbbnVtYmVyXS5yZXByZXNlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAkKGVsKS5yZW1vdmVDbGFzcyhodG1sQ2xhc3MpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhIHBob25lIG51bWJlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBudW1iZXIgLSBUaGUgcGhvbmUgbnVtYmVyIHRvIHVwZGF0ZS5cbiAgICAgKi9cbiAgICB1cGRhdGVQaG9uZVJlcHJlc2VudChudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbnVtYmVycyA9IFtdO1xuICAgICAgICBudW1iZXJzLnB1c2gobnVtYmVyKTtcbiAgICAgICAgUGJ4QXBpLkV4dGVuc2lvbnNHZXRQaG9uZXNSZXByZXNlbnQobnVtYmVycywocmVzcG9uc2UpPT57XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGlzIHZhbGlkIGFuZCBjb250YWlucyB0aGUgcmVxdWlyZWQgZGF0YVxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICYmIHJlc3BvbnNlLnJlc3VsdCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAmJiByZXNwb25zZS5kYXRhW251bWJlcl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSB0aGUgcGhvbmUgcmVwcmVzZW50YXRpb24gaW4gc2Vzc2lvbiBzdG9yYWdlXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0obnVtYmVyLCByZXNwb25zZS5kYXRhW251bWJlcl0ucmVwcmVzZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfSxcblxufTtcblxuLyoqXG4gKiAgSW5pdGlhbGl6ZSBFeHRlbnNpb24gb2JqZWN0IG9uIGRvY3VtZW50IHJlYWR5XG4gKi9cbiQoZG9jdW1lbnQpLnJlYWR5KCgpID0+IHtcbiAgICBFeHRlbnNpb25zLmluaXRpYWxpemUoKTtcbn0pO1xuIl19
\ No newline at end of file
+//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9QYnhBUEkvZXh0ZW5zaW9uc0FQSS5qcyJdLCJuYW1lcyI6WyJFeHRlbnNpb25zIiwiaW5pdGlhbGl6ZSIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJjYk9uRGF0YUNoYW5nZWQiLCJwYXR0ZXJuIiwiaSIsInNlc3Npb25TdG9yYWdlIiwibGVuZ3RoIiwia2V5Iiwic3RhcnRzV2l0aCIsInJlbW92ZUl0ZW0iLCJmb3JtYXREcm9wZG93blJlc3VsdHMiLCJyZXNwb25zZSIsImFkZEVtcHR5IiwiZm9ybWF0dGVkUmVzcG9uc2UiLCJzdWNjZXNzIiwicmVzdWx0cyIsInB1c2giLCJuYW1lIiwidmFsdWUiLCJ0eXBlIiwidHlwZUxvY2FsaXplZCIsIiQiLCJlYWNoIiwiZGF0YSIsImluZGV4IiwiaXRlbSIsImdldERyb3Bkb3duU2V0dGluZ3NXaXRoRW1wdHkiLCJjYk9uQ2hhbmdlIiwiYXBpU2V0dGluZ3MiLCJ1cmwiLCJQYnhBcGkiLCJleHRlbnNpb25zR2V0Rm9yU2VsZWN0IiwidXJsRGF0YSIsIm9uUmVzcG9uc2UiLCJvbkNoYW5nZSIsInBhcnNlSW50IiwiZHJvcGRvd24iLCJpZ25vcmVDYXNlIiwiZnVsbFRleHRTZWFyY2giLCJmaWx0ZXJSZW1vdGVEYXRhIiwic2F2ZVJlbW90ZURhdGEiLCJmb3JjZVNlbGVjdGlvbiIsImhpZGVEaXZpZGVycyIsInRlbXBsYXRlcyIsIm1lbnUiLCJjdXN0b21Ecm9wZG93bk1lbnUiLCJnZXREcm9wZG93blNldHRpbmdzV2l0aG91dEVtcHR5IiwiZ2V0RHJvcGRvd25TZXR0aW5nc0ZvclJvdXRpbmciLCJnZXREcm9wZG93blNldHRpbmdzT25seUludGVybmFsV2l0aG91dEVtcHR5IiwiZ2V0RHJvcGRvd25TZXR0aW5nc09ubHlJbnRlcm5hbFdpdGhFbXB0eSIsImNoZWNrQXZhaWxhYmlsaXR5Iiwib2xkTnVtYmVyIiwibmV3TnVtYmVyIiwiY3NzQ2xhc3NOYW1lIiwidXNlcklkIiwicGFyZW50IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsImFwaSIsImV4dGVuc2lvbnNBdmFpbGFibGUiLCJzdGF0ZUNvbnRleHQiLCJvbiIsIm51bWJlciIsInN1Y2Nlc3NUZXN0Iiwib25TdWNjZXNzIiwibWVzc2FnZSIsImdsb2JhbFRyYW5zbGF0ZSIsImV4X1RoaXNOdW1iZXJJc05vdEZyZWUiLCJ1bmRlZmluZWQiLCJodG1sIiwiZ2V0UGhvbmVFeHRlbnNpb25zIiwiY2FsbEJhY2siLCJmaWVsZHMiLCJ2YWx1ZXMiLCJvbGRUeXBlIiwib3B0aW9uIiwibWF5YmVUZXh0IiwidGV4dCIsIm1heWJlRGlzYWJsZWQiLCJkaXNhYmxlZCIsInVwZGF0ZVBob25lc1JlcHJlc2VudCIsImh0bWxDbGFzcyIsIiRwcmVwcm9jZXNzZWRPYmplY3RzIiwibnVtYmVycyIsImVsIiwicmVwcmVzZW50IiwiZ2V0SXRlbSIsImluZGV4T2YiLCJFeHRlbnNpb25zR2V0UGhvbmVzUmVwcmVzZW50IiwiY2JBZnRlckdldFBob25lc1JlcHJlc2VudCIsInJlc3VsdCIsInNldEl0ZW0iLCJ1cGRhdGVQaG9uZVJlcHJlc2VudCIsImRvY3VtZW50IiwicmVhZHkiXSwibWFwcGluZ3MiOiI7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTUEsVUFBVSxHQUFHO0FBRWY7QUFDSjtBQUNBO0FBQ0E7QUFDSUMsRUFBQUEsVUFOZSx3QkFNRjtBQUNUQyxJQUFBQSxNQUFNLENBQUNDLGdCQUFQLENBQXdCLG1CQUF4QixFQUE2Q0gsVUFBVSxDQUFDSSxlQUF4RDtBQUNILEdBUmM7O0FBVWY7QUFDSjtBQUNBO0FBQ0E7QUFDSUEsRUFBQUEsZUFkZSw2QkFjRztBQUNkLFFBQU1DLE9BQU8sR0FBRyxzQ0FBaEI7O0FBQ0EsU0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBYixF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IHBob25lIHN5c3RlbSBmb3Igc21hbGwgYnVzaW5lc3NcbiAqIENvcHlyaWdodCDCqSAyMDE3LTIwMjMgQWxleGV5IFBvcnRub3YgYW5kIE5pa29sYXkgQmVrZXRvdlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXG4gKlxuICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsXG4gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZlxuICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS5cbiAqIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uXG4gKi9cblxuLyogZ2xvYmFsIGdsb2JhbFJvb3RVcmwsIHNlc3Npb25TdG9yYWdlLCBQYnhBcGkgKi9cblxuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGVuY2Fwc3VsYXRlcyBhIGNvbGxlY3Rpb24gb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZXh0ZW5zaW9ucy5cbiAqXG4gKiBAbW9kdWxlIEV4dGVuc2lvbnNcbiAqL1xuY29uc3QgRXh0ZW5zaW9ucyA9IHtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBFeHRlbnNpb25zIG9iamVjdC5cbiAgICAgKiBBZGRzIGFuIGV2ZW50IGxpc3RlbmVyIGZvciAnQ29uZmlnRGF0YUNoYW5nZWQnIGV2ZW50LlxuICAgICAqL1xuICAgIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdDb25maWdEYXRhQ2hhbmdlZCcsIEV4dGVuc2lvbnMuY2JPbkRhdGFDaGFuZ2VkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyB0cmlnZ2VyZWQgd2hlbiBDb25maWdEYXRhQ2hhbmdlZCBldmVudCBpcyBmaXJlZC5cbiAgICAgKiBUaGlzIGZ1bmN0aW9uIGRyb3BzIGFsbCBjYWNoZXMgaWYgZGF0YSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIGNiT25EYXRhQ2hhbmdlZCgpIHtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9ICcvcGJ4Y29yZS9hcGkvZXh0ZW5zaW9ucy9nZXRGb3JTZWxlY3QnO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlc3Npb25TdG9yYWdlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzZXNzaW9uU3RvcmFnZS5rZXkoaSk7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBrZXkgbWF0Y2hlcyB0aGUgcGF0dGVyblxuICAgICAgICAgICAgaWYgKGtleSAmJiBrZXkuc3RhcnRzV2l0aChwYXR0ZXJuKSkge1xuICAgICAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGb3JtYXRzIHRoZSBkcm9wZG93biByZXN1bHRzIGJ5IGFkZGluZyBuZWNlc3NhcnkgZGF0YS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZXNwb25zZSAtIFJlc3BvbnNlIGZyb20gdGhlIHNlcnZlci5cbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGFkZEVtcHR5IC0gQSBmbGFnIHRvIGRlY2lkZSBpZiBhbiBlbXB0eSBvYmplY3QgbmVlZHMgdG8gYmUgYWRkZWQgdG8gdGhlIHJlc3VsdC5cbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IGZvcm1hdHRlZFJlc3BvbnNlIC0gVGhlIGZvcm1hdHRlZCByZXNwb25zZS5cbiAgICAgKi9cbiAgICBmb3JtYXREcm9wZG93blJlc3VsdHMocmVzcG9uc2UsIGFkZEVtcHR5KSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFJlc3BvbnNlID0ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICByZXN1bHRzOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGFkZEVtcHR5KSB7XG4gICAgICAgICAgICBmb3JtYXR0ZWRSZXNwb25zZS5yZXN1bHRzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6ICctJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogLTEsXG4gICAgICAgICAgICAgICAgdHlwZTogJycsXG4gICAgICAgICAgICAgICAgdHlwZUxvY2FsaXplZDogJycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgICAgZm9ybWF0dGVkUmVzcG9uc2Uuc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICAkLmVhY2gocmVzcG9uc2UuZGF0YSwgKGluZGV4LCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkUmVzcG9uc2UucmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogaXRlbS50eXBlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlTG9jYWxpemVkOiBpdGVtLnR5cGVMb2NhbGl6ZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWRSZXNwb25zZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29uc3RydWN0cyBkcm9wZG93biBzZXR0aW5ncyBmb3IgZXh0ZW5zaW9ucyB3aXRoIGFuIGVtcHR5IGZpZWxkLlxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNiT25DaGFuZ2UgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBkcm9wZG93biBzZWxlY3Rpb24gY2hhbmdlcy5cbiAgICAgKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgZHJvcGRvd24gc2V0dGluZ3MuXG4gICAgICovXG4gICAgZ2V0RHJvcGRvd25TZXR0aW5nc1dpdGhFbXB0eShjYk9uQ2hhbmdlID0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXBpU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICB1cmw6IFBieEFwaS5leHRlbnNpb25zR2V0Rm9yU2VsZWN0LFxuICAgICAgICAgICAgICAgIHVybERhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2FsbCdcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vIGNhY2hlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAvLyB0aHJvdHRsZTogNDAwLFxuICAgICAgICAgICAgICAgIG9uUmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEV4dGVuc2lvbnMuZm9ybWF0RHJvcGRvd25SZXN1bHRzKHJlc3BvbnNlLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2hhbmdlKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlSW50KHZhbHVlLCAxMCkgPT09IC0xKSAkKHRoaXMpLmRyb3Bkb3duKCdjbGVhcicpO1xuICAgICAgICAgICAgICAgIGlmIChjYk9uQ2hhbmdlICE9PSBudWxsKSBjYk9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpZ25vcmVDYXNlOiB0cnVlLFxuICAgICAgICAgICAgZnVsbFRleHRTZWFyY2g6IHRydWUsXG4gICAgICAgICAgICBmaWx0ZXJSZW1vdGVEYXRhOiB0cnVlLFxuICAgICAgICAgICAgc2F2ZVJlbW90ZURhdGE6IHRydWUsXG4gICAgICAgICAgICBmb3JjZVNlbGVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAvLyBkaXJlY3Rpb246ICdkb3dud2FyZCcsXG4gICAgICAgICAgICBoaWRlRGl2aWRlcnM6ICdlbXB0eScsXG4gICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcbiAgICAgICAgICAgICAgICBtZW51OiBFeHRlbnNpb25zLmN1c3RvbURyb3Bkb3duTWVudSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENvbnN0cnVjdHMgZHJvcGRvd24gc2V0dGluZ3MgZm9yIGV4dGVuc2lvbnMgd2l0aG91dCBhbiBlbXB0eSBmaWVsZC5cbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYk9uQ2hhbmdlIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aGUgZHJvcGRvd24gc2VsZWN0aW9uIGNoYW5nZXMuXG4gICAgICogQHJldHVybnMge09iamVjdH0gVGhlIGRyb3Bkb3duIHNldHRpbmdzLlxuICAgICAqL1xuICAgIGdldERyb3Bkb3duU2V0dGluZ3NXaXRob3V0RW1wdHkoY2JPbkNoYW5nZSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFwaVNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBQYnhBcGkuZXh0ZW5zaW9uc0dldEZvclNlbGVjdCxcbiAgICAgICAgICAgICAgICB1cmxEYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdhbGwnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHRlbnNpb25zLmZvcm1hdERyb3Bkb3duUmVzdWx0cyhyZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgZmlsdGVyUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIHNhdmVSZW1vdGVEYXRhOiB0cnVlLFxuICAgICAgICAgICAgZm9yY2VTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgaGlkZURpdmlkZXJzOiAnZW1wdHknLFxuICAgICAgICAgICAgb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2JPbkNoYW5nZSAhPT0gbnVsbCkgY2JPbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgbWVudTogRXh0ZW5zaW9ucy5jdXN0b21Ecm9wZG93bk1lbnUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGRyb3Bkb3duIHNldHRpbmdzIGZvciByb3V0aW5nIGV4dGVuc2lvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2JPbkNoYW5nZSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRyb3Bkb3duIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkcm9wZG93biBzZXR0aW5ncy5cbiAgICAgKi9cbiAgICBnZXREcm9wZG93blNldHRpbmdzRm9yUm91dGluZyhjYk9uQ2hhbmdlID0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXBpU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICB1cmw6IFBieEFwaS5leHRlbnNpb25zR2V0Rm9yU2VsZWN0LFxuICAgICAgICAgICAgICAgIHVybERhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3JvdXRpbmcnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBjYWNoZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGhyb3R0bGU6IDQwMCxcbiAgICAgICAgICAgICAgICBvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHRlbnNpb25zLmZvcm1hdERyb3Bkb3duUmVzdWx0cyhyZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgZmlsdGVyUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIHNhdmVSZW1vdGVEYXRhOiB0cnVlLFxuICAgICAgICAgICAgZm9yY2VTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgLy8gZGlyZWN0aW9uOiAnZG93bndhcmQnLFxuICAgICAgICAgICAgaGlkZURpdmlkZXJzOiAnZW1wdHknLFxuICAgICAgICAgICAgb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2JPbkNoYW5nZSAhPT0gbnVsbCkgY2JPbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgbWVudTogRXh0ZW5zaW9ucy5jdXN0b21Ecm9wZG93bk1lbnUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGRyb3Bkb3duIHNldHRpbmdzIGZvciBpbnRlcm5hbCBleHRlbnNpb25zIHdpdGhvdXQgYW4gZW1wdHkgZmllbGQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2JPbkNoYW5nZSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRyb3Bkb3duIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkcm9wZG93biBzZXR0aW5ncy5cbiAgICAgKi9cbiAgICBnZXREcm9wZG93blNldHRpbmdzT25seUludGVybmFsV2l0aG91dEVtcHR5KGNiT25DaGFuZ2UgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcGlTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIHVybDogUGJ4QXBpLmV4dGVuc2lvbnNHZXRGb3JTZWxlY3QsXG4gICAgICAgICAgICAgICAgdXJsRGF0YToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW50ZXJuYWwnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBjYWNoZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGhyb3R0bGU6IDQwMCxcbiAgICAgICAgICAgICAgICBvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHRlbnNpb25zLmZvcm1hdERyb3Bkb3duUmVzdWx0cyhyZXNwb25zZSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgZmlsdGVyUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIHNhdmVSZW1vdGVEYXRhOiB0cnVlLFxuICAgICAgICAgICAgZm9yY2VTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgLy8gZGlyZWN0aW9uOiAnZG93bndhcmQnLFxuICAgICAgICAgICAgaGlkZURpdmlkZXJzOiAnZW1wdHknLFxuICAgICAgICAgICAgb25DaGFuZ2UodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2JPbkNoYW5nZSAhPT0gbnVsbCkgY2JPbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgbWVudTogRXh0ZW5zaW9ucy5jdXN0b21Ecm9wZG93bk1lbnUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb25zdHJ1Y3RzIGRyb3Bkb3duIHNldHRpbmdzIGZvciBpbnRlcm5hbCBleHRlbnNpb25zIHdpdGggYW4gZW1wdHkgZmllbGQuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2JPbkNoYW5nZSAtIFRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhlIGRyb3Bkb3duIHNlbGVjdGlvbiBjaGFuZ2VzLlxuICAgICAqIEByZXR1cm5zIHtPYmplY3R9IFRoZSBkcm9wZG93biBzZXR0aW5ncy5cbiAgICAgKi9cbiAgICBnZXREcm9wZG93blNldHRpbmdzT25seUludGVybmFsV2l0aEVtcHR5KGNiT25DaGFuZ2UgPSBudWxsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhcGlTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIHVybDogUGJ4QXBpLmV4dGVuc2lvbnNHZXRGb3JTZWxlY3QsXG4gICAgICAgICAgICAgICAgdXJsRGF0YToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnaW50ZXJuYWwnXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAvLyBjYWNoZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgLy8gdGhyb3R0bGU6IDQwMCxcbiAgICAgICAgICAgICAgICBvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFeHRlbnNpb25zLmZvcm1hdERyb3Bkb3duUmVzdWx0cyhyZXNwb25zZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbkNoYW5nZSh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZUludCh2YWx1ZSwgMTApID09PSAtMSkgJCh0aGlzKS5kcm9wZG93bignY2xlYXInKTtcbiAgICAgICAgICAgICAgICBpZiAoY2JPbkNoYW5nZSAhPT0gbnVsbCkgY2JPbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaWdub3JlQ2FzZTogdHJ1ZSxcbiAgICAgICAgICAgIGZ1bGxUZXh0U2VhcmNoOiB0cnVlLFxuICAgICAgICAgICAgZmlsdGVyUmVtb3RlRGF0YTogdHJ1ZSxcbiAgICAgICAgICAgIHNhdmVSZW1vdGVEYXRhOiB0cnVlLFxuICAgICAgICAgICAgZm9yY2VTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICAgICAgLy8gZGlyZWN0aW9uOiAnZG93bndhcmQnLFxuICAgICAgICAgICAgaGlkZURpdmlkZXJzOiAnZW1wdHknLFxuICAgICAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICAgICAgbWVudTogRXh0ZW5zaW9ucy5jdXN0b21Ecm9wZG93bk1lbnUsXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgIH07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgbmV3IGV4dGVuc2lvbiBudW1iZXIgaXMgYXZhaWxhYmxlLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvbGROdW1iZXIgLSBUaGUgb3JpZ2luYWwgZXh0ZW5zaW9uIG51bWJlci5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmV3TnVtYmVyIC0gVGhlIG5ldyBleHRlbnNpb24gbnVtYmVyIHRvIGNoZWNrLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjc3NDbGFzc05hbWUgLSBUaGUgQ1NTIGNsYXNzIG5hbWUgZm9yIHRoZSBpbnB1dCBlbGVtZW50LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB1c2VySWQgLSBUaGUgSUQgb2YgdGhlIHVzZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBleHRlbnNpb24uXG4gICAgICovXG4gICAgY2hlY2tBdmFpbGFiaWxpdHkob2xkTnVtYmVyLCBuZXdOdW1iZXIsIGNzc0NsYXNzTmFtZSA9ICdleHRlbnNpb24nLCB1c2VySWQgPSAnJykge1xuICAgICAgICBpZiAob2xkTnVtYmVyID09PSBuZXdOdW1iZXIgfHwgbmV3TnVtYmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgJChgLnVpLmlucHV0LiR7Y3NzQ2xhc3NOYW1lfWApLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdlcnJvcicpO1xuICAgICAgICAgICAgJChgIyR7Y3NzQ2xhc3NOYW1lfS1lcnJvcmApLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAkLmFwaSh7XG4gICAgICAgICAgICB1cmw6IFBieEFwaS5leHRlbnNpb25zQXZhaWxhYmxlLFxuICAgICAgICAgICAgc3RhdGVDb250ZXh0OiBgLnVpLmlucHV0LiR7Y3NzQ2xhc3NOYW1lfWAsXG4gICAgICAgICAgICBvbjogJ25vdycsXG4gICAgICAgICAgICB1cmxEYXRhOiB7XG4gICAgICAgICAgICAgICAgbnVtYmVyOiBuZXdOdW1iZXJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdWNjZXNzVGVzdDogUGJ4QXBpLnN1Y2Nlc3NUZXN0LFxuICAgICAgICAgICAgb25TdWNjZXNzKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGFbJ2F2YWlsYWJsZSddID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICQoYC51aS5pbnB1dC4ke2Nzc0NsYXNzTmFtZX1gKS5wYXJlbnQoKS5yZW1vdmVDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgJChgIyR7Y3NzQ2xhc3NOYW1lfS1lcnJvcmApLmFkZENsYXNzKCdoaWRkZW4nKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzZXJJZC5sZW5ndGggPiAwICYmIHJlc3BvbnNlLmRhdGFbJ3VzZXJJZCddID09PSB1c2VySWQpIHtcbiAgICAgICAgICAgICAgICAgICAgJChgLnVpLmlucHV0LiR7Y3NzQ2xhc3NOYW1lfWApLnBhcmVudCgpLnJlbW92ZUNsYXNzKCdlcnJvcicpO1xuICAgICAgICAgICAgICAgICAgICAkKGAjJHtjc3NDbGFzc05hbWV9LWVycm9yYCkuYWRkQ2xhc3MoJ2hpZGRlbicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQoYC51aS5pbnB1dC4ke2Nzc0NsYXNzTmFtZX1gKS5wYXJlbnQoKS5hZGRDbGFzcygnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1lc3NhZ2UgPSBgJHtnbG9iYWxUcmFuc2xhdGUuZXhfVGhpc051bWJlcklzTm90RnJlZX06Jm5ic3BgO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsVHJhbnNsYXRlW3Jlc3BvbnNlLmRhdGFbJ3JlcHJlc2VudCddXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gZ2xvYmFsVHJhbnNsYXRlW3Jlc3BvbnNlLmRhdGFbJ3JlcHJlc2VudCddXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gcmVzcG9uc2UuZGF0YVsncmVwcmVzZW50J107XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgJChgIyR7Y3NzQ2xhc3NOYW1lfS1lcnJvcmApLnJlbW92ZUNsYXNzKCdoaWRkZW4nKS5odG1sKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHBob25lIGV4dGVuc2lvbnMuXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbEJhY2sgLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRoZSBwaG9uZSBleHRlbnNpb25zIGhhdmUgYmVlbiByZXRyaWV2ZWQuXG4gICAgICovXG4gICAgZ2V0UGhvbmVFeHRlbnNpb25zKGNhbGxCYWNrKSB7XG4gICAgICAgICQuYXBpKHtcbiAgICAgICAgICAgIHVybDogUGJ4QXBpLmV4dGVuc2lvbnNHZXRGb3JTZWxlY3QsXG4gICAgICAgICAgICB1cmxEYXRhOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3Bob25lcydcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbjogJ25vdycsXG4gICAgICAgICAgICBvblJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEV4dGVuc2lvbnMuZm9ybWF0RHJvcGRvd25SZXN1bHRzKHJlc3BvbnNlLCBmYWxzZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25TdWNjZXNzKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgY2FsbEJhY2socmVzcG9uc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gSFRNTCBzdHJpbmcgZm9yIGEgY3VzdG9tIGRyb3Bkb3duIG1lbnUuXG4gICAgICogQHBhcmFtIHtPYmplY3R9IHJlc3BvbnNlIC0gVGhlIHJlc3BvbnNlIGNvbnRhaW5pbmcgZHJvcGRvd24gbWVudSBvcHRpb25zLlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBmaWVsZHMgLSBUaGUgZmllbGRzIGluIHRoZSByZXNwb25zZSB0byB1c2UgZm9yIHRoZSBtZW51IG9wdGlvbnMuXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVGhlIEhUTUwgc3RyaW5nIGZvciB0aGUgY3VzdG9tIGRyb3Bkb3duIG1lbnUuXG4gICAgICovXG4gICAgY3VzdG9tRHJvcGRvd25NZW51KHJlc3BvbnNlLCBmaWVsZHMpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gcmVzcG9uc2VbZmllbGRzLnZhbHVlc10gfHwge307XG4gICAgICAgIGxldCBodG1sID0gJyc7XG4gICAgICAgIGxldCBvbGRUeXBlID0gJyc7XG4gICAgICAgICQuZWFjaCh2YWx1ZXMsIChpbmRleCwgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9uLnR5cGUgIT09IG9sZFR5cGUpIHtcbiAgICAgICAgICAgICAgICBvbGRUeXBlID0gb3B0aW9uLnR5cGU7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz1cImRpdmlkZXJcIj48L2Rpdj4nO1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gJ1x0PGRpdiBjbGFzcz1cImhlYWRlclwiPic7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnXHQ8aSBjbGFzcz1cInRhZ3MgaWNvblwiPjwvaT4nO1xuICAgICAgICAgICAgICAgIGh0bWwgKz0gb3B0aW9uLnR5cGVMb2NhbGl6ZWQ7XG4gICAgICAgICAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1heWJlVGV4dCA9IChvcHRpb25bZmllbGRzLnRleHRdKSA/IGBkYXRhLXRleHQ9XCIke29wdGlvbltmaWVsZHMudGV4dF19XCJgIDogJyc7XG4gICAgICAgICAgICBjb25zdCBtYXliZURpc2FibGVkID0gKG9wdGlvbltmaWVsZHMuZGlzYWJsZWRdKSA/ICdkaXNhYmxlZCAnIDogJyc7XG4gICAgICAgICAgICBodG1sICs9IGA8ZGl2IGNsYXNzPVwiJHttYXliZURpc2FibGVkfWl0ZW1cIiBkYXRhLXZhbHVlPVwiJHtvcHRpb25bZmllbGRzLnZhbHVlXX1cIiR7bWF5YmVUZXh0fT5gO1xuICAgICAgICAgICAgaHRtbCArPSBvcHRpb25bZmllbGRzLm5hbWVdO1xuICAgICAgICAgICAgaHRtbCArPSAnPC9kaXY+JztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBodG1sO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgcGhvbmUgcmVwcmVzZW50YXRpb25zIGZvciBIVE1MIGVsZW1lbnRzIHdpdGggYSBzcGVjaWZpYyBjbGFzcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3MgLSBUaGUgSFRNTCBjbGFzcyB0byBpZGVudGlmeSBlbGVtZW50cyBmb3IgdXBkYXRlLlxuICAgICAqL1xuICAgIHVwZGF0ZVBob25lc1JlcHJlc2VudChodG1sQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgJHByZXByb2Nlc3NlZE9iamVjdHMgPSAkKGAuJHtodG1sQ2xhc3N9YCk7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBlbGVtZW50cyB0byBwcm9jZXNzXG4gICAgICAgIGlmICgkcHJlcHJvY2Vzc2VkT2JqZWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bWJlcnMgPSBbXTtcblxuICAgICAgICAvLyBJdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50IGFuZCB1cGRhdGUgcmVwcmVzZW50YXRpb25zIGlmIGF2YWlsYWJsZVxuICAgICAgICAkcHJlcHJvY2Vzc2VkT2JqZWN0cy5lYWNoKChpbmRleCwgZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9ICQoZWwpLnRleHQoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcHJlc2VudCA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0obnVtYmVyKTtcbiAgICAgICAgICAgIGlmIChyZXByZXNlbnQpIHtcbiAgICAgICAgICAgICAgICAkKGVsKS5odG1sKHJlcHJlc2VudCk7XG4gICAgICAgICAgICAgICAgJChlbCkucmVtb3ZlQ2xhc3MoaHRtbENsYXNzKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtYmVycy5pbmRleE9mKG51bWJlcikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVycy5wdXNoKG51bWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBudW1iZXJzIHRvIGZldGNoIHJlcHJlc2VudGF0aW9ucyBmb3JcbiAgICAgICAgaWYgKG51bWJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGZXRjaCBwaG9uZSByZXByZXNlbnRhdGlvbnMgdXNpbmcgQVBJIGNhbGxcbiAgICAgICAgUGJ4QXBpLkV4dGVuc2lvbnNHZXRQaG9uZXNSZXByZXNlbnQobnVtYmVycyxcbiAgICAgICAgICAgIChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIEV4dGVuc2lvbnMuY2JBZnRlckdldFBob25lc1JlcHJlc2VudChyZXNwb25zZSwgaHRtbENsYXNzKVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBhZnRlciBmZXRjaGluZyBwaG9uZSByZXByZXNlbnRhdGlvbnMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVzcG9uc2UgLSBUaGUgcmVzcG9uc2Ugb2JqZWN0IGZyb20gdGhlIEFQSSBjYWxsLlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBodG1sQ2xhc3MgLSBUaGUgSFRNTCBjbGFzcyBmb3IgZWxlbWVudCBpZGVudGlmaWNhdGlvbi5cbiAgICAgKi9cbiAgICBjYkFmdGVyR2V0UGhvbmVzUmVwcmVzZW50KHJlc3BvbnNlLCBodG1sQ2xhc3MpIHtcbiAgICAgICAgY29uc3QgJHByZXByb2Nlc3NlZE9iamVjdHMgPSAkKGAuJHtodG1sQ2xhc3N9YCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHJlc3BvbnNlIGlzIHZhbGlkIGFuZCBwcm9jZXNzIGVsZW1lbnRzIGFjY29yZGluZ2x5XG4gICAgICAgIGlmIChyZXNwb25zZSAhPT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLnJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgJHByZXByb2Nlc3NlZE9iamVjdHMuZWFjaCgoaW5kZXgsIGVsKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gJChlbCkudGV4dCgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhW251bWJlcl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAkKGVsKS5odG1sKHJlc3BvbnNlLmRhdGFbbnVtYmVyXS5yZXByZXNlbnQpO1xuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKG51bWJlciwgcmVzcG9uc2UuZGF0YVtudW1iZXJdLnJlcHJlc2VudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICQoZWwpLnJlbW92ZUNsYXNzKGh0bWxDbGFzcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGUgdGhlIHJlcHJlc2VudGF0aW9uIG9mIGEgcGhvbmUgbnVtYmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG51bWJlciAtIFRoZSBwaG9uZSBudW1iZXIgdG8gdXBkYXRlLlxuICAgICAqL1xuICAgIHVwZGF0ZVBob25lUmVwcmVzZW50KG51bWJlcikge1xuICAgICAgICBjb25zdCBudW1iZXJzID0gW107XG4gICAgICAgIG51bWJlcnMucHVzaChudW1iZXIpO1xuICAgICAgICBQYnhBcGkuRXh0ZW5zaW9uc0dldFBob25lc1JlcHJlc2VudChudW1iZXJzLCAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaXMgdmFsaWQgYW5kIGNvbnRhaW5zIHRoZSByZXF1aXJlZCBkYXRhXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgJiYgcmVzcG9uc2UucmVzdWx0ID09PSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICYmIHJlc3BvbnNlLmRhdGFbbnVtYmVyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRoZSBwaG9uZSByZXByZXNlbnRhdGlvbiBpbiBzZXNzaW9uIHN0b3JhZ2VcbiAgICAgICAgICAgICAgICAgICAgc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShudW1iZXIsIHJlc3BvbnNlLmRhdGFbbnVtYmVyXS5yZXByZXNlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9LFxuXG59O1xuXG4vKipcbiAqICBJbml0aWFsaXplIEV4dGVuc2lvbiBvYmplY3Qgb24gZG9jdW1lbnQgcmVhZHlcbiAqL1xuJChkb2N1bWVudCkucmVhZHkoKCkgPT4ge1xuICAgIEV4dGVuc2lvbnMuaW5pdGlhbGl6ZSgpO1xufSk7XG4iXX0=
\ No newline at end of file
diff --git a/sites/admin-cabinet/assets/js/src/PbxAPI/extensionsAPI.js b/sites/admin-cabinet/assets/js/src/PbxAPI/extensionsAPI.js
index c836b2b45..5a01861c2 100644
--- a/sites/admin-cabinet/assets/js/src/PbxAPI/extensionsAPI.js
+++ b/sites/admin-cabinet/assets/js/src/PbxAPI/extensionsAPI.js
@@ -39,10 +39,15 @@ const Extensions = {
* This function drops all caches if data changes.
*/
cbOnDataChanged() {
- sessionStorage.removeItem('/pbxcore/api/extensions/getForSelect?type=all');
- sessionStorage.removeItem('/pbxcore/api/extensions/getForSelect?type=route');
- sessionStorage.removeItem('/pbxcore/api/extensions/getForSelect?type=internal');
- sessionStorage.removeItem('/pbxcore/api/extensions/getForSelect?type=phones');
+ const pattern = '/pbxcore/api/extensions/getForSelect';
+ for (let i = 0; i < sessionStorage.length; i++) {
+ const key = sessionStorage.key(i);
+
+ // Check if the key matches the pattern
+ if (key && key.startsWith(pattern)) {
+ sessionStorage.removeItem(key);
+ }
+ }
},
/**
@@ -259,7 +264,7 @@ const Extensions = {
* @param {string} userId - The ID of the user associated with the extension.
*/
checkAvailability(oldNumber, newNumber, cssClassName = 'extension', userId = '') {
- if (oldNumber === newNumber || newNumber.length===0) {
+ if (oldNumber === newNumber || newNumber.length === 0) {
$(`.ui.input.${cssClassName}`).parent().removeClass('error');
$(`#${cssClassName}-error`).addClass('hidden');
return;
@@ -273,7 +278,7 @@ const Extensions = {
},
successTest: PbxApi.successTest,
onSuccess(response) {
- if (response.data['available']===true) {
+ if (response.data['available'] === true) {
$(`.ui.input.${cssClassName}`).parent().removeClass('error');
$(`#${cssClassName}-error`).addClass('hidden');
} else if (userId.length > 0 && response.data['userId'] === userId) {
@@ -281,11 +286,11 @@ const Extensions = {
$(`#${cssClassName}-error`).addClass('hidden');
} else {
$(`.ui.input.${cssClassName}`).parent().addClass('error');
- let message =`${globalTranslate.ex_ThisNumberIsNotFree}: `;
- if (globalTranslate[response.data['represent']]!==undefined){
+ let message = `${globalTranslate.ex_ThisNumberIsNotFree}: `;
+ if (globalTranslate[response.data['represent']] !== undefined) {
message = globalTranslate[response.data['represent']];
} else {
- message +=response.data['represent'];
+ message += response.data['represent'];
}
$(`#${cssClassName}-error`).removeClass('hidden').html(message);
}
@@ -374,7 +379,7 @@ const Extensions = {
// Fetch phone representations using API call
PbxApi.ExtensionsGetPhonesRepresent(numbers,
- (response)=>{
+ (response) => {
Extensions.cbAfterGetPhonesRepresent(response, htmlClass)
}
);
@@ -386,7 +391,7 @@ const Extensions = {
* @param {Object} response - The response object from the API call.
* @param {string} htmlClass - The HTML class for element identification.
*/
- cbAfterGetPhonesRepresent(response, htmlClass){
+ cbAfterGetPhonesRepresent(response, htmlClass) {
const $preprocessedObjects = $(`.${htmlClass}`);
// Check if the response is valid and process elements accordingly
@@ -410,7 +415,7 @@ const Extensions = {
updatePhoneRepresent(number) {
const numbers = [];
numbers.push(number);
- PbxApi.ExtensionsGetPhonesRepresent(numbers,(response)=>{
+ PbxApi.ExtensionsGetPhonesRepresent(numbers, (response) => {
{
// Check if the response is valid and contains the required data
if (response !== undefined
diff --git a/src/AdminCabinet/Forms/BaseForm.php b/src/AdminCabinet/Forms/BaseForm.php
index ea6be70b5..ae6cb8b69 100644
--- a/src/AdminCabinet/Forms/BaseForm.php
+++ b/src/AdminCabinet/Forms/BaseForm.php
@@ -19,12 +19,14 @@
namespace MikoPBX\AdminCabinet\Forms;
-
use MikoPBX\Common\Providers\PBXConfModulesProvider;
use MikoPBX\Modules\Config\WebUIConfigInterface;
use Phalcon\Forms\Element\TextArea;
use Phalcon\Forms\Form;
+/**
+ * @property \MikoPBX\Common\Providers\TranslationProvider translation
+ */
abstract class BaseForm extends Form
{
diff --git a/src/AdminCabinet/Forms/GeneralSettingsEditForm.php b/src/AdminCabinet/Forms/GeneralSettingsEditForm.php
index 5e00d3117..8a460fbb9 100644
--- a/src/AdminCabinet/Forms/GeneralSettingsEditForm.php
+++ b/src/AdminCabinet/Forms/GeneralSettingsEditForm.php
@@ -69,7 +69,7 @@ public function initialize($entity = null, $options = null): void
case 'PBXFeatureDigitTimeout':
case 'PBXFeatureAtxferNoAnswerTimeout':
case '***ALL NUMBERIC ABOVE***':
- $this->add(new Numeric($key, ['value' => $value, 'style'=>'width:100px;']));
+ $this->add(new Numeric($key, ['value' => $value, 'style'=>'width:130px;']));
break;
case PbxSettingsConstants::SSH_PASSWORD:
$this->add(new Password($key, ['value' => self::HIDDEN_PASSWORD]));
diff --git a/src/Common/Messages/az.php b/src/Common/Messages/az.php
index 1fa6620c7..f5cfe2a02 100644
--- a/src/Common/Messages/az.php
+++ b/src/Common/Messages/az.php
@@ -1116,9 +1116,9 @@
'ex_Danish' => 'Dansk',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 rəqəm',
'cr_pinCode' => 'Konfransın PIN kodu',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => 'Ən son jurnal faylını əldə edin',
'sd_ToolTipAutoUpdate' => 'Ekran məzmununu avtomatik yeniləyin',
'sd_ToolTipErase' => 'Faylı təmizləyin',
+ 'ex_dropdownCategory_PARKING' => 'parkinq yerləri',
];
diff --git a/src/Common/Messages/cs.php b/src/Common/Messages/cs.php
index d1cdcab5e..2a627c238 100644
--- a/src/Common/Messages/cs.php
+++ b/src/Common/Messages/cs.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'March' => 'Březen',
'April' => 'Duben',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_v2' => 'Chyby autorizace SIP',
'f2b_Jail_asterisk_security_log_v2' => 'Chyby autorizace SIP (security_log)',
'f2b_Jail_asterisk_error_v2' => 'Chyby autorizace SIP (chyba)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 číslic',
'cr_pinCode' => 'Konferenční PIN',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => 'Získejte nejnovější soubor protokolu',
'sd_ToolTipAutoUpdate' => 'Automaticky aktualizovat obsah obrazovky',
'sd_ToolTipErase' => 'Vymazat soubor',
+ 'ex_dropdownCategory_PARKING' => 'parkovací místa',
];
diff --git a/src/Common/Messages/da.php b/src/Common/Messages/da.php
index 119335436..b7a2e92dc 100644
--- a/src/Common/Messages/da.php
+++ b/src/Common/Messages/da.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'Oct' => 'oktober',
'Nov' => 'november',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'SIP-godkendelsesfejl (security_log)',
'f2b_Jail_asterisk_error_v2' => 'SIP-godkendelsesfejl (fejl)',
'f2b_Jail_asterisk_public_v2' => 'SIP-godkendelsesfejl (offentlige)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 cifre',
'cr_pinCode' => 'Konference PIN',
@@ -1200,4 +1200,5 @@
'sd_ToolTipErase' => 'Ryd fil',
'sd_ToolTipDownload' => 'Download logfil',
'sd_ToolTipRefresh' => 'Hent den seneste logfil',
+ 'ex_dropdownCategory_PARKING' => 'parkeringspladser',
];
diff --git a/src/Common/Messages/de.php b/src/Common/Messages/de.php
index ae7f0730a..b9790e47c 100644
--- a/src/Common/Messages/de.php
+++ b/src/Common/Messages/de.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'January' => 'Januar',
'February' => 'Februar',
@@ -1121,7 +1121,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'SIP-Autorisierungsfehler (security_log)',
'f2b_Jail_asterisk_error_v2' => 'SIP-Autorisierungsfehler (Fehler)',
'f2b_Jail_asterisk_public_v2' => 'SIP-Autorisierungsfehler (öffentlich)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 Ziffern',
'cr_pinCode' => 'Konferenz-PIN',
@@ -1203,4 +1203,5 @@
'sd_ToolTipRefresh' => 'Holen Sie sich die neueste Protokolldatei',
'sd_ToolTipAutoUpdate' => 'Bildschirminhalte automatisch aktualisieren',
'sd_ToolTipErase' => 'Datei löschen',
+ 'ex_dropdownCategory_PARKING' => 'Parkplätze',
];
diff --git a/src/Common/Messages/el.php b/src/Common/Messages/el.php
index c5cf440b0..afe28806e 100644
--- a/src/Common/Messages/el.php
+++ b/src/Common/Messages/el.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'Now' => 'Τώρα',
'Today' => 'Σήμερα',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'Σφάλματα εξουσιοδότησης SIP (security_log)',
'f2b_Jail_asterisk_error_v2' => 'Σφάλματα εξουσιοδότησης SIP (σφάλμα)',
'f2b_Jail_asterisk_public_v2' => 'Σφάλματα εξουσιοδότησης SIP (δημόσια)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 ψηφία',
'cr_pinCode' => 'PIN συνδιάσκεψης',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => 'Λάβετε το πιο πρόσφατο αρχείο καταγραφής',
'sd_ToolTipAutoUpdate' => 'Αυτόματη ενημέρωση περιεχομένου οθόνης',
'sd_ToolTipErase' => 'Καθαρο ΑΡΧΕΙΟ',
+ 'ex_dropdownCategory_PARKING' => 'θέσεις στάθμευσης',
];
diff --git a/src/Common/Messages/en.php b/src/Common/Messages/en.php
index d60080c2e..37bab8ba1 100644
--- a/src/Common/Messages/en.php
+++ b/src/Common/Messages/en.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'January' => 'January',
'February' => 'February',
@@ -1121,7 +1121,7 @@
'f2b_Jail_asterisk_v2' => 'SIP authorization errors',
'f2b_Jail_asterisk_error_v2' => 'SIP authorization errors (error)',
'f2b_Jail_asterisk_public_v2' => 'SIP authorization errors (public)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 digits',
'cr_pinCode' => 'Conference PIN',
@@ -1203,4 +1203,5 @@
'sd_ToolTipRefresh' => 'Get the latest log file',
'sd_ToolTipAutoUpdate' => 'Automatically update screen content',
'sd_ToolTipErase' => 'Clear file',
+ 'ex_dropdownCategory_PARKING' => 'parking slots',
];
diff --git a/src/Common/Messages/es.php b/src/Common/Messages/es.php
index 921b91bf9..93338dc90 100644
--- a/src/Common/Messages/es.php
+++ b/src/Common/Messages/es.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'mm_SSHConsole' => 'Consola SSH',
'ex_Email' => 'Correo electrónico',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'Errores de autorización SIP (security_log)',
'f2b_Jail_asterisk_error_v2' => 'Errores de autorización SIP (error)',
'f2b_Jail_asterisk_v2' => 'Errores de autorización SIP',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 dígitos',
'cr_pinCode' => 'PIN de conferencia',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => 'Obtenga el archivo de registro más reciente',
'sd_ToolTipAutoUpdate' => 'Actualizar automáticamente el contenido de la pantalla',
'sd_ToolTipErase' => 'Archivo vacio',
+ 'ex_dropdownCategory_PARKING' => 'plazas de aparcamiento',
];
diff --git a/src/Common/Messages/fr.php b/src/Common/Messages/fr.php
index 0dcca4db5..b24a8ce22 100644
--- a/src/Common/Messages/fr.php
+++ b/src/Common/Messages/fr.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'January' => 'Janvier',
'sntry_SuccessMessage' => 'Merci pour votre aide!',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_ami_v2' => 'Erreurs d\'autorisation AMI ou AJAM',
'f2b_Jail_asterisk_v2' => 'Erreurs d\'autorisation SIP',
'f2b_Jail_asterisk_security_log_v2' => 'Erreurs d\'autorisation SIP (security_log)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 chiffres',
'cr_pinCode' => 'NIP de la conférence',
@@ -1200,4 +1200,5 @@
'sd_ToolTipDownload' => 'Télécharger le fichier journal',
'sd_ToolTipRefresh' => 'Obtenez le dernier fichier journal',
'sd_ToolTipAutoUpdate' => 'Mettre à jour automatiquement le contenu de l\'écran',
+ 'ex_dropdownCategory_PARKING' => 'places de stationnement',
];
diff --git a/src/Common/Messages/it.php b/src/Common/Messages/it.php
index 639d70323..9dc2dc888 100644
--- a/src/Common/Messages/it.php
+++ b/src/Common/Messages/it.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'BreadcrumbAsteriskManagersmodify' => 'Configurazione dell\'account',
'or_PatternToMatch' => 'La regola funzionerà se',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_error_v2' => 'Errori di autorizzazione SIP (errore)',
'f2b_Jail_asterisk_v2' => 'Errori di autorizzazione SIP',
'f2b_Jail_asterisk_public_v2' => 'Errori di autorizzazione SIP (pubblici)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 cifre',
'cr_pinCode' => 'PIN conferenza',
@@ -1200,4 +1200,5 @@
'sd_ToolTipDownload' => 'Scarica il file di registro',
'sd_ToolTipRefresh' => 'Ottieni il file di registro più recente',
'sd_ToolTipAutoUpdate' => 'Aggiorna automaticamente il contenuto dello schermo',
+ 'ex_dropdownCategory_PARKING' => 'posti auto',
];
diff --git a/src/Common/Messages/ja.php b/src/Common/Messages/ja.php
index 2cc3c4808..332aa1cfe 100644
--- a/src/Common/Messages/ja.php
+++ b/src/Common/Messages/ja.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'November' => '11月',
'December' => '12月',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'SIP 認証エラー (security_log)',
'f2b_Jail_asterisk_error_v2' => 'SIP認証エラー(エラー)',
'f2b_Jail_asterisk_public_v2' => 'SIP 認証エラー (パブリック)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11桁',
'cr_pinCode' => '会議暗証番号',
@@ -1200,4 +1200,5 @@
'sd_ToolTipDownload' => 'ログファイルをダウンロードする',
'sd_ToolTipRefresh' => '最新のログファイルを取得する',
'sd_ToolTipErase' => 'クリアファイル',
+ 'ex_dropdownCategory_PARKING' => '駐車スロット',
];
diff --git a/src/Common/Messages/ka.php b/src/Common/Messages/ka.php
index 39ea785e8..25b563347 100644
--- a/src/Common/Messages/ka.php
+++ b/src/Common/Messages/ka.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'qf_Qualify' => 'შეინარჩუნეთ NAT სესია',
'qf_Frequency' => 'გაგზავნის სიხშირე წამებში:',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'SIP ავტორიზაციის შეცდომები (security_log)',
'f2b_Jail_asterisk_error_v2' => 'SIP ავტორიზაციის შეცდომები (შეცდომა)',
'f2b_Jail_asterisk_public_v2' => 'SIP ავტორიზაციის შეცდომები (საჯარო)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 ციფრი',
'cr_pinCode' => 'კონფერენციის PIN',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => 'მიიღეთ უახლესი ჟურნალის ფაილი',
'sd_ToolTipAutoUpdate' => 'ეკრანის შინაარსის ავტომატურად განახლება',
'sd_ToolTipErase' => 'ფაილის გასუფთავება',
+ 'ex_dropdownCategory_PARKING' => 'პარკირების ადგილები',
];
diff --git a/src/Common/Messages/nl.php b/src/Common/Messages/nl.php
index e4fa6ee72..4ab8ddceb 100644
--- a/src/Common/Messages/nl.php
+++ b/src/Common/Messages/nl.php
@@ -1125,7 +1125,7 @@
'Subnet masks are to be entered as bit counts (as in CIDR notation).' => 'Subnetmasker in CIDR-indeling (1-32)',
'mm_Update' => 'PBX-update',
'adv_PopupHeader' => 'De volgende problemen zijn gevonden:',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Romana',
'upd_EnterIHaveBackupPhrasePreText' => 'Voer de volgende zin in het invoerveld in om het systeem bij te werken:',
'upd_EnterIHaveBackupPhrase' => 'Ja, ik heb een back-up',
@@ -1162,7 +1162,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
/*
* MikoPBX - free phone system for small business
@@ -1250,4 +1250,5 @@
'sd_ToolTipDownload' => 'Logbestand downloaden',
'sd_ToolTipRefresh' => 'Haal het nieuwste logbestand op',
'sd_ToolTipErase' => 'Bestand wissen',
+ 'ex_dropdownCategory_PARKING' => 'parkeerplaatsen',
];
diff --git a/src/Common/Messages/pl.php b/src/Common/Messages/pl.php
index 42f0b0c7b..360229dca 100644
--- a/src/Common/Messages/pl.php
+++ b/src/Common/Messages/pl.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'tf_ActionPlayMessage' => 'Odtwórz plik %message%',
'tf_ActionTransferToExtension' => 'Przekaż rozmowę do %extension% ',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_public_v2' => 'Błędy autoryzacji SIP (publiczne)',
'f2b_Jail_asterisk_ami_v2' => 'Błędy autoryzacji AMI lub AJAM',
'f2b_Jail_asterisk_security_log_v2' => 'Błędy autoryzacji SIP (security_log)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 cyfr',
'cr_pinCode' => 'PIN konferencji',
@@ -1200,4 +1200,5 @@
'sd_ToolTipErase' => 'Wyczyść plik',
'sd_ToolTipDownload' => 'Pobierz plik dziennika',
'sd_ToolTipRefresh' => 'Pobierz najnowszy plik dziennika',
+ 'ex_dropdownCategory_PARKING' => 'miejsca parkingowe',
];
diff --git a/src/Common/Messages/pt.php b/src/Common/Messages/pt.php
index 237e3dda6..f0b50644a 100644
--- a/src/Common/Messages/pt.php
+++ b/src/Common/Messages/pt.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'сal_Last30Days' => 'Últimos 30 dias',
'сal_LastWeek' => 'Últimos 7 dias',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'Erros de autorização SIP (security_log)',
'f2b_Jail_asterisk_error_v2' => 'Erros de autorização SIP (erro)',
'f2b_Jail_asterisk_public_v2' => 'Erros de autorização SIP (público)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 dígitos',
'cr_pinCode' => 'PIN de conferência',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => 'Obtenha o arquivo de log mais recente',
'sd_ToolTipAutoUpdate' => 'Atualizar automaticamente o conteúdo da tela',
'sd_ToolTipErase' => 'Arquivo limpo',
+ 'ex_dropdownCategory_PARKING' => 'vagas de estacionamento',
];
diff --git a/src/Common/Messages/pt_BR.php b/src/Common/Messages/pt_BR.php
index 4b2ab0bc6..be661e9ec 100644
--- a/src/Common/Messages/pt_BR.php
+++ b/src/Common/Messages/pt_BR.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'Apr' => 'Abr',
'Mar' => 'Mar',
@@ -1117,7 +1117,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'Erros de autorização SIP (security_log)',
'f2b_Jail_asterisk_error_v2' => 'Erros de autorização SIP (erro)',
'f2b_Jail_asterisk_public_v2' => 'Erros de autorização SIP (público)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 dígitos',
'cr_pinCode' => 'PIN de conferência',
@@ -1199,4 +1199,5 @@
'sd_ToolTipRefresh' => 'Obtenha o arquivo de log mais recente',
'sd_ToolTipAutoUpdate' => 'Atualizar automaticamente o conteúdo da tela',
'sd_ToolTipErase' => 'Arquivo limpo',
+ 'ex_dropdownCategory_PARKING' => 'vagas de estacionamento',
];
diff --git a/src/Common/Messages/ro.php b/src/Common/Messages/ro.php
index f847be0c1..ca1bb05ca 100644
--- a/src/Common/Messages/ro.php
+++ b/src/Common/Messages/ro.php
@@ -1111,7 +1111,7 @@
'ex_Romanian' => 'Romană',
'upd_EnterIHaveBackupPhrasePreText' => 'Pentru a actualiza sistemul, introduceți următoarea frază în câmpul de introducere:',
'upd_EnterIHaveBackupPhrase' => 'Da, am o copie de rezervă',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'gs_SetPasswordError' => 'Parola - %password% nu poate fi utilizată, este prezentă în dicționarul de parole simple.',
'adv_WebPasswordWeak' => 'Parola simplă de administrator în interfața web schimbați',
'adv_SshPasswordWeak' => 'Parola simplă a contului SSH modificare',
@@ -1145,7 +1145,7 @@
'ex_Swedish' => 'Svenska',
'ex_Vietnamese' => 'Tiếng việt',
'ex_Chinese' => '中国人',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Dutch' => 'Nederlands',
'ex_Czech' => 'Čeština',
'ex_Georgian' => 'ქართველი',
@@ -1233,4 +1233,5 @@
'sd_ToolTipDownload' => 'Descărcați fișierul jurnal',
'sd_ToolTipRefresh' => 'Obțineți cel mai recent fișier jurnal',
'sd_ToolTipAutoUpdate' => 'Actualizați automat conținutul ecranului',
+ 'ex_dropdownCategory_PARKING' => 'locuri de parcare',
];
diff --git a/src/Common/Messages/ru.php b/src/Common/Messages/ru.php
index 6393e6d8c..ad00f980b 100644
--- a/src/Common/Messages/ru.php
+++ b/src/Common/Messages/ru.php
@@ -36,9 +36,9 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'January' => 'Январь',
'February' => 'Февраль',
diff --git a/src/Common/Messages/sv.php b/src/Common/Messages/sv.php
index df996ed9f..5c7040cfc 100644
--- a/src/Common/Messages/sv.php
+++ b/src/Common/Messages/sv.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'ex_Online' => 'ansluten',
'am_TableColumnDescription' => 'Anmärkningar',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'SIP-auktoriseringsfel (security_log)',
'f2b_Jail_asterisk_error_v2' => 'SIP-auktoriseringsfel (fel)',
'f2b_Jail_asterisk_public_v2' => 'SIP-auktoriseringsfel (offentliga)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 siffror',
'cr_pinCode' => 'Konferens-PIN',
@@ -1200,4 +1200,5 @@
'sd_ToolTipAutoUpdate' => 'Uppdatera skärminnehåll automatiskt',
'sd_ToolTipErase' => 'Rensa filen',
'sd_ToolTipDownload' => 'Ladda ner loggfil',
+ 'ex_dropdownCategory_PARKING' => 'parkeringsplatser',
];
diff --git a/src/Common/Messages/tr.php b/src/Common/Messages/tr.php
index aefe310f1..fce753b6a 100644
--- a/src/Common/Messages/tr.php
+++ b/src/Common/Messages/tr.php
@@ -1135,7 +1135,7 @@
'f2b_Jail_asterisk_v2' => 'SIP yetkilendirme hataları',
'f2b_Jail_asterisk_security_log_v2' => 'SIP yetkilendirme hataları (security_log)',
'f2b_Jail_asterisk_error_v2' => 'SIP yetkilendirme hataları (hata)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 basamak',
'cr_pinCode' => 'Konferans PIN\'i',
@@ -1217,4 +1217,5 @@
'sd_ToolTipErase' => 'Dosyayı temizle',
'sd_ToolTipDownload' => 'Günlük dosyasını indir',
'sd_ToolTipRefresh' => 'En son günlük dosyasını alın',
+ 'ex_dropdownCategory_PARKING' => 'park yuvaları',
];
diff --git a/src/Common/Messages/uk.php b/src/Common/Messages/uk.php
index cf10bb5ee..be91ed2df 100644
--- a/src/Common/Messages/uk.php
+++ b/src/Common/Messages/uk.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'January' => 'Січень',
'February' => 'Лютий',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_security_log_v2' => 'Помилки авторизації SIP (security_log)',
'f2b_Jail_asterisk_public_v2' => 'Помилки авторизації SIP (public)',
'f2b_Jail_asterisk_error_v2' => 'Помилки авторизації SIP (error)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 цифр',
'cr_pinCode' => 'PIN код конференції',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => 'Отримати останню версію лог файлу',
'sd_ToolTipAutoUpdate' => 'Автоматично оновлювати вміст на екрані',
'sd_ToolTipErase' => 'Очистити файл',
+ 'ex_dropdownCategory_PARKING' => 'Слоти паркування',
];
diff --git a/src/Common/Messages/vi.php b/src/Common/Messages/vi.php
index beefd29aa..970b10455 100644
--- a/src/Common/Messages/vi.php
+++ b/src/Common/Messages/vi.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'upd_UploadInProgress' => 'Đang tải xuống tệp cập nhật …',
'upd_UpgradeInProgress' => 'Các tập tin hệ thống đang được cập nhật …',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_error_v2' => 'Lỗi ủy quyền SIP (lỗi)',
'f2b_Jail_asterisk_public_v2' => 'Lỗi ủy quyền SIP (công khai)',
'f2b_Jail_asterisk_security_log_v2' => 'Lỗi ủy quyền SIP (security_log)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11 chữ số',
'cr_pinCode' => 'mã PIN hội nghị',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => 'Nhận tệp nhật ký mới nhất',
'sd_ToolTipErase' => 'Xóa tập tin',
'sd_ToolTipAutoUpdate' => 'Tự động cập nhật nội dung màn hình',
+ 'ex_dropdownCategory_PARKING' => 'chỗ đậu xe',
];
diff --git a/src/Common/Messages/zh_Hans.php b/src/Common/Messages/zh_Hans.php
index 1b5802294..0b8574fd2 100644
--- a/src/Common/Messages/zh_Hans.php
+++ b/src/Common/Messages/zh_Hans.php
@@ -53,7 +53,7 @@
'ex_Dutch' => 'Nederlands',
'ex_Swedish' => 'Svenska',
'ex_Czech' => 'Čeština',
- 'ex_Turkish' => 'Türk',
+ 'ex_Turkish' => 'Türkçe',
'ex_Georgian' => 'ქართველი',
'March' => '三月',
'April' => '四月',
@@ -1118,7 +1118,7 @@
'f2b_Jail_asterisk_public_v2' => 'SIP 授权错误(公开)',
'f2b_Jail_asterisk_security_log_v2' => 'SIP 授权错误(security_log)',
'f2b_Jail_asterisk_error_v2' => 'SIP授权错误(错误)',
- 'ex_Azərbaycan' => 'Azərbaycan',
+ 'ex_Azerbaijan' => 'Azərbaycan',
'ex_Romanian' => 'Română',
'gs_ElevenDigthts' => '11位',
'cr_pinCode' => '会议密码',
@@ -1200,4 +1200,5 @@
'sd_ToolTipRefresh' => '获取最新的日志文件',
'sd_ToolTipAutoUpdate' => '自动更新屏幕内容',
'sd_ToolTipErase' => '清除文件',
+ 'ex_dropdownCategory_PARKING' => '停车位',
];
diff --git a/src/PBXCoreREST/Lib/Extensions/DataStructure.php b/src/PBXCoreREST/Lib/Extensions/DataStructure.php
index c6dafeb66..67b84c04f 100644
--- a/src/PBXCoreREST/Lib/Extensions/DataStructure.php
+++ b/src/PBXCoreREST/Lib/Extensions/DataStructure.php
@@ -97,9 +97,6 @@ public function __construct(array $data)
}
// Fill empty values
- if (empty($this->number)) {
- $this->number = Extensions::getNextInternalNumber();
- }
if (empty($this->sip_uniqid)) {
$this->sip_uniqid = Sip::generateUniqueID();
}
@@ -115,14 +112,23 @@ public function __construct(array $data)
if (empty($this->sip_dtmfmode)) {
$this->sip_dtmfmode='auto';
}
- if (empty($this->mobile_dialstring)) {
- $this->mobile_dialstring = preg_replace('/\D/', '', $this->mobile_number);
+
+ // Sanitize extension
+ if (!empty($this->number)){
+ $this->number = preg_replace('/\D/', '', $this->number);
+ }
+ if (empty($this->number)) {
+ $this->number = Extensions::getNextInternalNumber();
}
- // Sanitize mobile numbers for storage or further processing
+ // Sanitize mobile numbers
if (!empty($this->mobile_number)){
$this->mobile_number = preg_replace('/\D/', '', $this->mobile_number);
}
+ if (empty($this->mobile_dialstring)) {
+ $this->mobile_dialstring = $this->mobile_number;
+ }
+
if (!empty($this->fwd_forwarding)){
$this->fwd_forwarding = preg_replace('/\D/', '', $this->fwd_forwarding);
}
@@ -132,6 +138,7 @@ public function __construct(array $data)
if (!empty($this->fwd_forwardingonbusy)){
$this->fwd_forwardingonbusy = preg_replace('/\D/', '', $this->fwd_forwardingonbusy);
}
+
}
/**
diff --git a/src/PBXCoreREST/Lib/Extensions/Dropdowns.php b/src/PBXCoreREST/Lib/Extensions/Dropdowns.php
index 8a8940881..1a2ec7c00 100644
--- a/src/PBXCoreREST/Lib/Extensions/Dropdowns.php
+++ b/src/PBXCoreREST/Lib/Extensions/Dropdowns.php
@@ -100,10 +100,30 @@ private static function getQueryParametersByType(string $type): array
break;
case 'phones':
$parameters['conditions'] .= ' AND type IN ({ids:array})';
- $parameters['bind']['ids'] = [Extensions::TYPE_SIP, Extensions::TYPE_EXTERNAL];
+ $parameters['bind']['ids'] = [
+ Extensions::TYPE_SIP,
+ Extensions::TYPE_EXTERNAL
+ ];
break;
case 'internal':
- $parameters['conditions'] .= ' AND type = "' . Extensions::TYPE_SIP . '"';
+ $parameters['conditions'] .= ' AND type IN ({ids:array})';
+ $parameters['bind']['ids'] = [
+ Extensions::TYPE_SIP
+ ];
+ break;
+ case 'routing':
+ $parameters['conditions'] .= ' AND type IN ({ids:array})';
+ $parameters['bind']['ids'] = [
+ Extensions::TYPE_SIP,
+ Extensions::TYPE_EXTERNAL,
+ Extensions::TYPE_MODULES,
+ Extensions::TYPE_CONFERENCE,
+ Extensions::TYPE_DIALPLAN_APPLICATION,
+ Extensions::TYPE_IVR_MENU,
+ Extensions::TYPE_QUEUE,
+ Extensions::TYPE_SYSTEM,
+ // Extensions::TYPE_PARKING,
+ ];
break;
}
diff --git a/tests/AdminCabinet/Tests/CheckDropdownsOnAddExtensions.php b/tests/AdminCabinet/Tests/CheckDropdownsOnAddExtensions.php
new file mode 100644
index 000000000..92ac1b686
--- /dev/null
+++ b/tests/AdminCabinet/Tests/CheckDropdownsOnAddExtensions.php
@@ -0,0 +1,111 @@
+.
+ */
+
+namespace MikoPBX\Tests\AdminCabinet\Tests;
+
+use MikoPBX\Tests\AdminCabinet\Lib\MikoPBXTestsBase;
+
+class CheckDropdownsOnAddExtensions extends MikoPBXTestsBase
+{
+ /**
+ * @depends testLogin
+ * @dataProvider additionProvider
+ *
+ * @param $params
+ *
+ * @throws \Facebook\WebDriver\Exception\NoSuchElementException
+ * @throws \Facebook\WebDriver\Exception\TimeoutException
+ */
+ public function testDropdowns($params): void
+ {
+
+ // Routing
+ $this->clickSidebarMenuItemByHref('/admin-cabinet/incoming-routes/index/');
+ $this->clickButtonByHref('/admin-cabinet/incoming-routes/modify');
+
+ $elementFound = $this->checkIfElementExistOnDropdownMenu('extension', $params['number']);
+
+ //Asserts
+ if ($elementFound){
+ $this->fail('Found menuitem ' . $params['number'] .' before creating it on Incoming routes modify '. PHP_EOL);
+ }
+
+ // Extensions
+ $this->clickSidebarMenuItemByHref('/admin-cabinet/extensions/index/');
+ $this->clickButtonByHref('/admin-cabinet/extensions/modify');
+
+ $this->changeTabOnCurrentPage('routing');
+ $elementFound = $this->checkIfElementExistOnDropdownMenu('fwd_forwarding', $params['number']);
+
+ //Asserts
+ if ($elementFound){
+ $this->fail('Found menuitem ' . $params['number'] .' before creating it on Extension routing tab '. PHP_EOL);
+ }
+
+ $createExtension = new CreateExtensionsTest();
+ $createExtension->testCreateExtensions($this->additionProvider());
+
+
+
+ // Routing
+ $this->clickSidebarMenuItemByHref('/admin-cabinet/incoming-routes/index/');
+ $this->clickButtonByHref('/admin-cabinet/incoming-routes/modify');
+
+ $elementFound = $this->checkIfElementExistOnDropdownMenu('extension', $params['number']);
+
+ //Asserts
+ if (!$elementFound){
+ $this->fail('Not found menuitem ' . $params['number'] .' after creating it on Incoming routes modify '. PHP_EOL);
+ }
+
+ // Extensions
+ $this->clickSidebarMenuItemByHref('/admin-cabinet/extensions/index/');
+ $this->clickButtonByHref('/admin-cabinet/extensions/modify');
+
+ $this->changeTabOnCurrentPage('routing');
+ $elementFound = $this->checkIfElementExistOnDropdownMenu('fwd_forwarding', $params['number']);
+
+ //Asserts
+ if (!$elementFound){
+ $this->fail('Not found menuitem ' . $params['number'] .' after creating it on Extension routing tab '. PHP_EOL);
+ }
+
+ }
+
+ /**
+ * Dataset provider
+ * @return array
+ */
+ public function additionProvider(): array
+ {
+ return [
+ 'number' => 245,
+ 'email' => 'ntele@miko.ru',
+ 'username' => 'Nikita Telegrafov',
+ 'mobile' => '79051454089',
+ 'secret' => '23542354wet',
+ 'sip_enableRecording'=>false,
+ 'sip_dtmfmode'=>'auto_info',
+ 'sip_networkfilterid'=>'none',
+ 'sip_transport'=>'udp',
+ 'sip_manualattributes'=>'',
+
+ ];
+ }
+}
\ No newline at end of file
diff --git a/tests/AdminCabinet/Tests/DeleteExtensionTest.php b/tests/AdminCabinet/Tests/DeleteExtensionTest.php
index 2b2c4e2c5..af9c3bbfd 100644
--- a/tests/AdminCabinet/Tests/DeleteExtensionTest.php
+++ b/tests/AdminCabinet/Tests/DeleteExtensionTest.php
@@ -31,7 +31,7 @@ class DeleteExtensionTest extends MikoPBXTestsBase
*
* @param array $params;
*/
- public function testDeleteExtension($params):void
+ public function testDeleteExtension(array $params):void
{
$this->clickSidebarMenuItemByHref('/admin-cabinet/extensions/index/');
$this->clickModifyButtonOnRowWithText($params['username']);
diff --git a/tests/AdminCabinet/phpunit.xml b/tests/AdminCabinet/phpunit.xml
index b62bec9ee..5ffd2556b 100644
--- a/tests/AdminCabinet/phpunit.xml
+++ b/tests/AdminCabinet/phpunit.xml
@@ -1,9 +1,19 @@
@@ -42,6 +52,7 @@
Tests/DeleteProviderTest.php
Tests/ChangeLicenseKeyTest.php
Tests/InstallModulesTest.php
+ Tests/CheckDropdownsOnAddExtensions.php
\ No newline at end of file