@linid-dm/directory-manager-client-core
Version:
Core package by providing a set of angular components for the Directory Manager app.
120 lines • 15.5 kB
JavaScript
/**
* Copyright (C) 2020-2024 Linagora
*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, either version 3 of the License, or (at your option) any
* later version, provided you comply with the Additional Terms applicable for
* LinID Directory Manager software by LINAGORA pursuant to Section 7 of the GNU
* Affero General Public License, subsections (b), (c), and (e), pursuant to
* which these Appropriate Legal Notices must notably (i) retain the display of
* the "LinID™" trademark/logo at the top of the interface window, the display
* of the “You are using the Open Source and free version of LinID™, powered by
* Linagora © 2009–2013. Contribute to LinID R&D by subscribing to an Enterprise
* offer!” infobox and in the e-mails sent with the Program, notice appended to
* any type of outbound messages (e.g. e-mail and meeting requests) as well as
* in the LinID Directory Manager user interface, (ii) retain all hypertext
* links between LinID Directory Manager and https://linid.org/, as well as
* between LINAGORA and LINAGORA.com, and (iii) refrain from infringing LINAGORA
* intellectual property rights over its trademarks and commercial brands. Other
* Additional Terms apply, see <http://www.linagora.com/licenses/> for more
* details.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License and
* its applicable Additional Terms for LinID Directory Manager along with this
* program. If not, see <http://www.gnu.org/licenses/> for the GNU Affero
* General Public License version 3 and <http://www.linagora.com/licenses/> for
* the Additional Terms applicable to the LinID Directory Manager software.
*/
import { isLinkObject } from '../helpers/data-table.helper';
import { CHECK_ATTRIBUTE_PRESENCE, EComponentName, EScimOperator, } from '../interfaces/data.interface';
export function getSearchRequestScimBody(attributes) {
let scimBody = {
schemas: ['urn:ietf:params:scim:api:messages:2.0:SearchRequest'],
};
if (!!attributes) {
scimBody = { ...scimBody, attributes };
}
return scimBody;
}
/**
* Performs the simple search for each field type.
*
* @export
* @param {string} searchFormValue - A simple string value corresponding to the search.
* @param {string[]} [filteredEntryFields] - A list of fields used on filtering.
* @returns {string}
*/
export function simpleSearchFormDataElement(searchFormValue, filteredEntryFields) {
let filterScim = '';
filteredEntryFields.forEach((columnId, index) => {
filterScim =
filterScim +
getAttributeScimFilter(columnId, EScimOperator.CO, searchFormValue);
if (index < filteredEntryFields.length - 1) {
filterScim = filterScim + ' OR ';
}
});
return filterScim;
}
/**
* Get the scim filter for an attribute and its value
*
* @export
* @param {string} attributeModelRef - the id of an attribute
* @param {string} operator - scim filter operator (cf EScimOperator)
* @param {string} value - attribute value (not specified if operator is "pr")
* @returns {string} the scim filter
*/
export function getAttributeScimFilter(attributeModelRef, operator, value = null) {
if (value) {
return attributeModelRef + ' ' + operator + ' ' + '"' + value + '"';
}
else {
return attributeModelRef + ' ' + operator;
}
}
export function getChipValue(chip) {
return isLinkObject(chip.value)
? chip.value.id
: chip.value;
}
export function isAttributeValueMatchingChip(chipValue, attributeValue, attributeConfig) {
let isMatching = false;
const componentName = attributeConfig.value.field.componentName;
switch (componentName) {
case EComponentName.select:
isMatching =
chipValue !== CHECK_ATTRIBUTE_PRESENCE
? chipValue === attributeValue
: true;
break;
case EComponentName.datepicker:
case EComponentName.slideToggle:
case EComponentName.autocomplete:
isMatching = chipValue === attributeValue;
break;
case EComponentName.input:
if (attributeConfig.value.field.props.type === 'date') {
isMatching = chipValue === attributeValue;
}
else {
isMatching = attributeValue.includes(chipValue);
}
break;
default:
isMatching = attributeValue.includes(chipValue);
break;
}
return isMatching;
}
const matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g;
export function escapeStringRegexp(str) {
return str.replace(matchOperatorsRe, '\\$&');
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2xpYnMvY2xpZW50LWNvcmUvc3JjL2xpYi9zaGFyZWQvaGVscGVycy9zZWFyY2guaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUU1RCxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxhQUFhLEdBRWQsTUFBTSw4QkFBOEIsQ0FBQztBQUd0QyxNQUFNLFVBQVUsd0JBQXdCLENBQUMsVUFBcUI7SUFDNUQsSUFBSSxRQUFRLEdBQVE7UUFDbEIsT0FBTyxFQUFFLENBQUMscURBQXFELENBQUM7S0FDakUsQ0FBQztJQUNGLElBQUksQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pCLFFBQVEsR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFDRCxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSwyQkFBMkIsQ0FDekMsZUFBdUIsRUFDdkIsbUJBQTZCO0lBRTdCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUNwQixtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDOUMsVUFBVTtZQUNSLFVBQVU7Z0JBQ1Ysc0JBQXNCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFFLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDdEUsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzNDLFVBQVUsR0FBRyxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ25DLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsaUJBQXlCLEVBQ3pCLFFBQWdCLEVBQ2hCLFFBQWdCLElBQUk7SUFFcEIsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNWLE9BQU8saUJBQWlCLEdBQUcsR0FBRyxHQUFHLFFBQVEsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDdEUsQ0FBQztTQUFNLENBQUM7UUFDTixPQUFPLGlCQUFpQixHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUM7SUFDNUMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQXlCO0lBQ3BELE9BQU8sWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFFLElBQUksQ0FBQyxLQUFlLENBQUMsRUFBRTtRQUMxQixDQUFDLENBQUUsSUFBSSxDQUFDLEtBQTBCLENBQUM7QUFDdkMsQ0FBQztBQUVELE1BQU0sVUFBVSw0QkFBNEIsQ0FDMUMsU0FBMkIsRUFDM0IsY0FBZ0MsRUFDaEMsZUFBMkI7SUFFM0IsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLE1BQU0sYUFBYSxHQUFXLGVBQWUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQztJQUN4RSxRQUFRLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLEtBQUssY0FBYyxDQUFDLE1BQU07WUFDeEIsVUFBVTtnQkFDUixTQUFTLEtBQUssd0JBQXdCO29CQUNwQyxDQUFDLENBQUMsU0FBUyxLQUFLLGNBQWM7b0JBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDWCxNQUFNO1FBQ1IsS0FBSyxjQUFjLENBQUMsVUFBVSxDQUFDO1FBQy9CLEtBQUssY0FBYyxDQUFDLFdBQVcsQ0FBQztRQUNoQyxLQUFLLGNBQWMsQ0FBQyxZQUFZO1lBQzlCLFVBQVUsR0FBRyxTQUFTLEtBQUssY0FBYyxDQUFDO1lBQzFDLE1BQU07UUFFUixLQUFLLGNBQWMsQ0FBQyxLQUFLO1lBQ3ZCLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDdEQsVUFBVSxHQUFHLFNBQVMsS0FBSyxjQUFjLENBQUM7WUFDNUMsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLFVBQVUsR0FBSSxjQUF5QixDQUFDLFFBQVEsQ0FBQyxTQUFtQixDQUFDLENBQUM7WUFDeEUsQ0FBQztZQUNELE1BQU07UUFFUjtZQUNFLFVBQVUsR0FBSSxjQUF5QixDQUFDLFFBQVEsQ0FBQyxTQUFtQixDQUFDLENBQUM7WUFDdEUsTUFBTTtJQUNWLENBQUM7SUFDRCxPQUFPLFVBQVUsQ0FBQztBQUNwQixDQUFDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQztBQUUvQyxNQUFNLFVBQVUsa0JBQWtCLENBQUMsR0FBVztJQUM1QyxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjQgTGluYWdvcmFcbiAqXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlclxuICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlXG4gKiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueVxuICogbGF0ZXIgdmVyc2lvbiwgcHJvdmlkZWQgeW91IGNvbXBseSB3aXRoIHRoZSBBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgZm9yXG4gKiBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBzb2Z0d2FyZSBieSBMSU5BR09SQSBwdXJzdWFudCB0byBTZWN0aW9uIDcgb2YgdGhlIEdOVVxuICogQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHN1YnNlY3Rpb25zIChiKSwgKGMpLCBhbmQgKGUpLCBwdXJzdWFudCB0b1xuICogd2hpY2ggdGhlc2UgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyBtdXN0IG5vdGFibHkgKGkpIHJldGFpbiB0aGUgZGlzcGxheSBvZlxuICogdGhlIFwiTGluSUTihKJcIiB0cmFkZW1hcmsvbG9nbyBhdCB0aGUgdG9wIG9mIHRoZSBpbnRlcmZhY2Ugd2luZG93LCB0aGUgZGlzcGxheVxuICogb2YgdGhlIOKAnFlvdSBhcmUgdXNpbmcgdGhlIE9wZW4gU291cmNlIGFuZCBmcmVlIHZlcnNpb24gb2YgTGluSUTihKIsIHBvd2VyZWQgYnlcbiAqIExpbmFnb3JhIMKpIDIwMDnigJMyMDEzLiBDb250cmlidXRlIHRvIExpbklEIFImRCBieSBzdWJzY3JpYmluZyB0byBhbiBFbnRlcnByaXNlXG4gKiBvZmZlciHigJ0gaW5mb2JveCBhbmQgaW4gdGhlIGUtbWFpbHMgc2VudCB3aXRoIHRoZSBQcm9ncmFtLCBub3RpY2UgYXBwZW5kZWQgdG9cbiAqIGFueSB0eXBlIG9mIG91dGJvdW5kIG1lc3NhZ2VzIChlLmcuIGUtbWFpbCBhbmQgbWVldGluZyByZXF1ZXN0cykgYXMgd2VsbCBhc1xuICogaW4gdGhlIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIHVzZXIgaW50ZXJmYWNlLCAoaWkpIHJldGFpbiBhbGwgaHlwZXJ0ZXh0XG4gKiBsaW5rcyBiZXR3ZWVuIExpbklEIERpcmVjdG9yeSBNYW5hZ2VyIGFuZCBodHRwczovL2xpbmlkLm9yZy8sIGFzIHdlbGwgYXNcbiAqIGJldHdlZW4gTElOQUdPUkEgYW5kIExJTkFHT1JBLmNvbSwgYW5kIChpaWkpIHJlZnJhaW4gZnJvbSBpbmZyaW5naW5nIExJTkFHT1JBXG4gKiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG92ZXIgaXRzIHRyYWRlbWFya3MgYW5kIGNvbW1lcmNpYWwgYnJhbmRzLiBPdGhlclxuICogQWRkaXRpb25hbCBUZXJtcyBhcHBseSwgc2VlIDxodHRwOi8vd3d3LmxpbmFnb3JhLmNvbS9saWNlbnNlcy8+IGZvciBtb3JlXG4gKiBkZXRhaWxzLlxuICpcbiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVFxuICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1NcbiAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmVcbiAqIGRldGFpbHMuXG4gKlxuICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZFxuICogaXRzIGFwcGxpY2FibGUgQWRkaXRpb25hbCBUZXJtcyBmb3IgTGluSUQgRGlyZWN0b3J5IE1hbmFnZXIgYWxvbmcgd2l0aCB0aGlzXG4gKiBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4gZm9yIHRoZSBHTlUgQWZmZXJvXG4gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMyBhbmQgPGh0dHA6Ly93d3cubGluYWdvcmEuY29tL2xpY2Vuc2VzLz4gZm9yXG4gKiB0aGUgQWRkaXRpb25hbCBUZXJtcyBhcHBsaWNhYmxlIHRvIHRoZSBMaW5JRCBEaXJlY3RvcnkgTWFuYWdlciBzb2Z0d2FyZS5cbiAqL1xuXG5pbXBvcnQgeyBpc0xpbmtPYmplY3QgfSBmcm9tICcuLi9oZWxwZXJzL2RhdGEtdGFibGUuaGVscGVyJztcbmltcG9ydCB7IElBdHRyaWJ1dGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NvbmZpZ3MuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIENIRUNLX0FUVFJJQlVURV9QUkVTRU5DRSxcbiAgRUNvbXBvbmVudE5hbWUsXG4gIEVTY2ltT3BlcmF0b3IsXG4gIElMaW5rLFxufSBmcm9tICcuLi9pbnRlcmZhY2VzL2RhdGEuaW50ZXJmYWNlJztcbmltcG9ydCB7IElBZHZhbmNlZFNlYXJjaENoaXAgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3VpLmludGVyZmFjZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXF1ZXN0U2NpbUJvZHkoYXR0cmlidXRlcz86IHN0cmluZ1tdKTogYW55IHtcbiAgbGV0IHNjaW1Cb2R5OiBhbnkgPSB7XG4gICAgc2NoZW1hczogWyd1cm46aWV0ZjpwYXJhbXM6c2NpbTphcGk6bWVzc2FnZXM6Mi4wOlNlYXJjaFJlcXVlc3QnXSxcbiAgfTtcbiAgaWYgKCEhYXR0cmlidXRlcykge1xuICAgIHNjaW1Cb2R5ID0geyAuLi5zY2ltQm9keSwgYXR0cmlidXRlcyB9O1xuICB9XG4gIHJldHVybiBzY2ltQm9keTtcbn1cblxuLyoqXG4gKiBQZXJmb3JtcyB0aGUgc2ltcGxlIHNlYXJjaCBmb3IgZWFjaCBmaWVsZCB0eXBlLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hGb3JtVmFsdWUgLSBBIHNpbXBsZSBzdHJpbmcgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgc2VhcmNoLlxuICogQHBhcmFtIHtzdHJpbmdbXX0gW2ZpbHRlcmVkRW50cnlGaWVsZHNdIC0gQSBsaXN0IG9mIGZpZWxkcyB1c2VkIG9uIGZpbHRlcmluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW1wbGVTZWFyY2hGb3JtRGF0YUVsZW1lbnQoXG4gIHNlYXJjaEZvcm1WYWx1ZTogc3RyaW5nLFxuICBmaWx0ZXJlZEVudHJ5RmllbGRzOiBzdHJpbmdbXVxuKTogc3RyaW5nIHtcbiAgbGV0IGZpbHRlclNjaW0gPSAnJztcbiAgZmlsdGVyZWRFbnRyeUZpZWxkcy5mb3JFYWNoKChjb2x1bW5JZCwgaW5kZXgpID0+IHtcbiAgICBmaWx0ZXJTY2ltID1cbiAgICAgIGZpbHRlclNjaW0gK1xuICAgICAgZ2V0QXR0cmlidXRlU2NpbUZpbHRlcihjb2x1bW5JZCwgRVNjaW1PcGVyYXRvci5DTywgc2VhcmNoRm9ybVZhbHVlKTtcbiAgICBpZiAoaW5kZXggPCBmaWx0ZXJlZEVudHJ5RmllbGRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIGZpbHRlclNjaW0gPSBmaWx0ZXJTY2ltICsgJyBPUiAnO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmaWx0ZXJTY2ltO1xufVxuXG4vKipcbiAqICBHZXQgdGhlIHNjaW0gZmlsdGVyIGZvciBhbiBhdHRyaWJ1dGUgYW5kIGl0cyB2YWx1ZVxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyaWJ1dGVNb2RlbFJlZiAtIHRoZSBpZCBvZiBhbiBhdHRyaWJ1dGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBvcGVyYXRvciAtIHNjaW0gZmlsdGVyIG9wZXJhdG9yIChjZiBFU2NpbU9wZXJhdG9yKVxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlIC0gYXR0cmlidXRlIHZhbHVlIChub3Qgc3BlY2lmaWVkIGlmIG9wZXJhdG9yIGlzIFwicHJcIilcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBzY2ltIGZpbHRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0cmlidXRlU2NpbUZpbHRlcihcbiAgYXR0cmlidXRlTW9kZWxSZWY6IHN0cmluZyxcbiAgb3BlcmF0b3I6IHN0cmluZyxcbiAgdmFsdWU6IHN0cmluZyA9IG51bGxcbik6IHN0cmluZyB7XG4gIGlmICh2YWx1ZSkge1xuICAgIHJldHVybiBhdHRyaWJ1dGVNb2RlbFJlZiArICcgJyArIG9wZXJhdG9yICsgJyAnICsgJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYXR0cmlidXRlTW9kZWxSZWYgKyAnICcgKyBvcGVyYXRvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpcFZhbHVlKGNoaXA6IElBZHZhbmNlZFNlYXJjaENoaXApOiBzdHJpbmcgfCBib29sZWFuIHtcbiAgcmV0dXJuIGlzTGlua09iamVjdChjaGlwLnZhbHVlKVxuICAgID8gKGNoaXAudmFsdWUgYXMgSUxpbmspLmlkXG4gICAgOiAoY2hpcC52YWx1ZSBhcyBzdHJpbmcgfCBib29sZWFuKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQXR0cmlidXRlVmFsdWVNYXRjaGluZ0NoaXAoXG4gIGNoaXBWYWx1ZTogc3RyaW5nIHwgYm9vbGVhbixcbiAgYXR0cmlidXRlVmFsdWU6IHN0cmluZyB8IGJvb2xlYW4sXG4gIGF0dHJpYnV0ZUNvbmZpZzogSUF0dHJpYnV0ZVxuKTogYm9vbGVhbiB7XG4gIGxldCBpc01hdGNoaW5nID0gZmFsc2U7XG4gIGNvbnN0IGNvbXBvbmVudE5hbWU6IHN0cmluZyA9IGF0dHJpYnV0ZUNvbmZpZy52YWx1ZS5maWVsZC5jb21wb25lbnROYW1lO1xuICBzd2l0Y2ggKGNvbXBvbmVudE5hbWUpIHtcbiAgICBjYXNlIEVDb21wb25lbnROYW1lLnNlbGVjdDpcbiAgICAgIGlzTWF0Y2hpbmcgPVxuICAgICAgICBjaGlwVmFsdWUgIT09IENIRUNLX0FUVFJJQlVURV9QUkVTRU5DRVxuICAgICAgICAgID8gY2hpcFZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZVxuICAgICAgICAgIDogdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgRUNvbXBvbmVudE5hbWUuZGF0ZXBpY2tlcjpcbiAgICBjYXNlIEVDb21wb25lbnROYW1lLnNsaWRlVG9nZ2xlOlxuICAgIGNhc2UgRUNvbXBvbmVudE5hbWUuYXV0b2NvbXBsZXRlOlxuICAgICAgaXNNYXRjaGluZyA9IGNoaXBWYWx1ZSA9PT0gYXR0cmlidXRlVmFsdWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgRUNvbXBvbmVudE5hbWUuaW5wdXQ6XG4gICAgICBpZiAoYXR0cmlidXRlQ29uZmlnLnZhbHVlLmZpZWxkLnByb3BzLnR5cGUgPT09ICdkYXRlJykge1xuICAgICAgICBpc01hdGNoaW5nID0gY2hpcFZhbHVlID09PSBhdHRyaWJ1dGVWYWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTWF0Y2hpbmcgPSAoYXR0cmlidXRlVmFsdWUgYXMgc3RyaW5nKS5pbmNsdWRlcyhjaGlwVmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlzTWF0Y2hpbmcgPSAoYXR0cmlidXRlVmFsdWUgYXMgc3RyaW5nKS5pbmNsdWRlcyhjaGlwVmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBpc01hdGNoaW5nO1xufVxuXG5jb25zdCBtYXRjaE9wZXJhdG9yc1JlID0gL1t8XFxcXHt9KClbXFxdXiQrKj8uXS9nO1xuXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlU3RyaW5nUmVnZXhwKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShtYXRjaE9wZXJhdG9yc1JlLCAnXFxcXCQmJyk7XG59XG4iXX0=