matrix-react-sdk
Version:
SDK for matrix.org using React
141 lines (132 loc) • 18.4 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.DEFAULTS = void 0;
exports.parseSsoRedirectOptions = parseSsoRedirectOptions;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _lodash = require("lodash");
var _SnakedObject = require("./utils/SnakedObject");
var _objects = require("./utils/objects");
/*
Copyright 2024 New Vector Ltd.
Copyright 2019-2022 The Matrix.org Foundation C.I.C.
Copyright 2016 OpenMarket Ltd
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
// see element-web config.md for docs, or the IConfigOptions interface for dev docs
const DEFAULTS = exports.DEFAULTS = {
brand: "Element",
help_url: "https://element.io/help",
help_encryption_url: "https://element.io/help#encryption",
integrations_ui_url: "https://scalar.vector.im/",
integrations_rest_url: "https://scalar.vector.im/api",
uisi_autorageshake_app: "element-auto-uisi",
show_labs_settings: false,
force_verification: false,
jitsi: {
preferred_domain: "meet.element.io"
},
element_call: {
url: "https://call.element.io",
use_exclusively: false,
participant_limit: 8,
brand: "Element Call"
},
// @ts-ignore - we deliberately use the camelCase version here so we trigger
// the fallback behaviour. If we used the snake_case version then we'd break
// everyone's config which has the camelCase property because our default would
// be preferred over their config.
desktopBuilds: {
available: true,
logo: require("../res/img/element-desktop-logo.svg").default,
url: "https://element.io/get-started"
},
voice_broadcast: {
chunk_length: 2 * 60,
// two minutes
max_length: 4 * 60 * 60 // four hours
},
feedback: {
existing_issues_url: "https://github.com/vector-im/element-web/issues?q=is%3Aopen+is%3Aissue+sort%3Areactions-%2B1-desc",
new_issue_url: "https://github.com/vector-im/element-web/issues/new/choose"
},
desktop_builds: {
available: true,
logo: "vector-icons/1024.png",
url: "https://element.io/download",
url_macos: "https://packages.element.io/desktop/install/macos/Element.dmg",
url_win64: "https://packages.element.io/desktop/install/win32/x64/Element%20Setup.exe",
url_win32: "https://packages.element.io/desktop/install/win32/ia32/Element%20Setup.exe",
url_linux: "https://element.io/download#linux"
},
mobile_builds: {
ios: "https://apps.apple.com/app/vector/id1083446067",
android: "https://play.google.com/store/apps/details?id=im.vector.app",
fdroid: "https://f-droid.org/repository/browse/?fdid=im.vector.app"
}
};
function mergeConfig(config, changes) {
// return { ...config, ...changes };
return (0, _lodash.mergeWith)((0, _objects.objectClone)(config), changes, (objValue, srcValue) => {
// Don't merge arrays, prefer values from newer object
if (Array.isArray(objValue)) {
return srcValue;
}
// Don't allow objects to get nulled out, this will break our types
if ((0, _objects.isObject)(objValue) && !(0, _objects.isObject)(srcValue)) {
return objValue;
}
});
}
class SdkConfig {
static setInstance(i) {
SdkConfig.instance = i;
SdkConfig.fallback = new _SnakedObject.SnakedObject(i);
// For debugging purposes
window.mxReactSdkConfig = i;
}
static get(key, altCaseName) {
if (key === undefined) {
// safe to cast as a fallback - we want to break the runtime contract in this case
return SdkConfig.instance || {};
}
return SdkConfig.fallback.get(key, altCaseName);
}
static getObject(key, altCaseName) {
const val = SdkConfig.get(key, altCaseName);
if ((0, _objects.isObject)(val)) {
return new _SnakedObject.SnakedObject(val);
}
// return the same type for sensitive callers (some want `undefined` specifically)
return val === undefined ? undefined : null;
}
static put(cfg) {
SdkConfig.setInstance(mergeConfig(DEFAULTS, cfg));
}
/**
* Resets the config.
*/
static reset() {
SdkConfig.setInstance(mergeConfig(DEFAULTS, {})); // safe to cast - defaults will be applied
}
static add(cfg) {
SdkConfig.put(mergeConfig(SdkConfig.get(), cfg));
}
}
exports.default = SdkConfig;
(0, _defineProperty2.default)(SdkConfig, "instance", void 0);
(0, _defineProperty2.default)(SdkConfig, "fallback", void 0);
function parseSsoRedirectOptions(config) {
// Ignore deprecated options if the config is using new ones
if (config.sso_redirect_options) return config.sso_redirect_options;
// We can cheat here because the default is false anyways
if (config.sso_immediate_redirect) return {
immediate: true
};
// Default: do nothing
return {};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwicmVxdWlyZSIsIl9TbmFrZWRPYmplY3QiLCJfb2JqZWN0cyIsIkRFRkFVTFRTIiwiZXhwb3J0cyIsImJyYW5kIiwiaGVscF91cmwiLCJoZWxwX2VuY3J5cHRpb25fdXJsIiwiaW50ZWdyYXRpb25zX3VpX3VybCIsImludGVncmF0aW9uc19yZXN0X3VybCIsInVpc2lfYXV0b3JhZ2VzaGFrZV9hcHAiLCJzaG93X2xhYnNfc2V0dGluZ3MiLCJmb3JjZV92ZXJpZmljYXRpb24iLCJqaXRzaSIsInByZWZlcnJlZF9kb21haW4iLCJlbGVtZW50X2NhbGwiLCJ1cmwiLCJ1c2VfZXhjbHVzaXZlbHkiLCJwYXJ0aWNpcGFudF9saW1pdCIsImRlc2t0b3BCdWlsZHMiLCJhdmFpbGFibGUiLCJsb2dvIiwiZGVmYXVsdCIsInZvaWNlX2Jyb2FkY2FzdCIsImNodW5rX2xlbmd0aCIsIm1heF9sZW5ndGgiLCJmZWVkYmFjayIsImV4aXN0aW5nX2lzc3Vlc191cmwiLCJuZXdfaXNzdWVfdXJsIiwiZGVza3RvcF9idWlsZHMiLCJ1cmxfbWFjb3MiLCJ1cmxfd2luNjQiLCJ1cmxfd2luMzIiLCJ1cmxfbGludXgiLCJtb2JpbGVfYnVpbGRzIiwiaW9zIiwiYW5kcm9pZCIsImZkcm9pZCIsIm1lcmdlQ29uZmlnIiwiY29uZmlnIiwiY2hhbmdlcyIsIm1lcmdlV2l0aCIsIm9iamVjdENsb25lIiwib2JqVmFsdWUiLCJzcmNWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsImlzT2JqZWN0IiwiU2RrQ29uZmlnIiwic2V0SW5zdGFuY2UiLCJpIiwiaW5zdGFuY2UiLCJmYWxsYmFjayIsIlNuYWtlZE9iamVjdCIsIndpbmRvdyIsIm14UmVhY3RTZGtDb25maWciLCJnZXQiLCJrZXkiLCJhbHRDYXNlTmFtZSIsInVuZGVmaW5lZCIsImdldE9iamVjdCIsInZhbCIsInB1dCIsImNmZyIsInJlc2V0IiwiYWRkIiwiX2RlZmluZVByb3BlcnR5MiIsInBhcnNlU3NvUmVkaXJlY3RPcHRpb25zIiwic3NvX3JlZGlyZWN0X29wdGlvbnMiLCJzc29faW1tZWRpYXRlX3JlZGlyZWN0IiwiaW1tZWRpYXRlIl0sInNvdXJjZXMiOlsiLi4vc3JjL1Nka0NvbmZpZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAxOS0yMDIyIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5Db3B5cmlnaHQgMjAxNiBPcGVuTWFya2V0IEx0ZFxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG5pbXBvcnQgeyBPcHRpb25hbCB9IGZyb20gXCJtYXRyaXgtZXZlbnRzLXNka1wiO1xuaW1wb3J0IHsgbWVyZ2VXaXRoIH0gZnJvbSBcImxvZGFzaFwiO1xuXG5pbXBvcnQgeyBTbmFrZWRPYmplY3QgfSBmcm9tIFwiLi91dGlscy9TbmFrZWRPYmplY3RcIjtcbmltcG9ydCB7IElDb25maWdPcHRpb25zLCBJU3NvUmVkaXJlY3RPcHRpb25zIH0gZnJvbSBcIi4vSUNvbmZpZ09wdGlvbnNcIjtcbmltcG9ydCB7IGlzT2JqZWN0LCBvYmplY3RDbG9uZSB9IGZyb20gXCIuL3V0aWxzL29iamVjdHNcIjtcbmltcG9ydCB7IERlZXBSZWFkb25seSwgRGVmYXVsdGl6ZSB9IGZyb20gXCIuL0B0eXBlcy9jb21tb25cIjtcblxuLy8gc2VlIGVsZW1lbnQtd2ViIGNvbmZpZy5tZCBmb3IgZG9jcywgb3IgdGhlIElDb25maWdPcHRpb25zIGludGVyZmFjZSBmb3IgZGV2IGRvY3NcbmV4cG9ydCBjb25zdCBERUZBVUxUUzogRGVlcFJlYWRvbmx5PElDb25maWdPcHRpb25zPiA9IHtcbiAgICBicmFuZDogXCJFbGVtZW50XCIsXG4gICAgaGVscF91cmw6IFwiaHR0cHM6Ly9lbGVtZW50LmlvL2hlbHBcIixcbiAgICBoZWxwX2VuY3J5cHRpb25fdXJsOiBcImh0dHBzOi8vZWxlbWVudC5pby9oZWxwI2VuY3J5cHRpb25cIixcbiAgICBpbnRlZ3JhdGlvbnNfdWlfdXJsOiBcImh0dHBzOi8vc2NhbGFyLnZlY3Rvci5pbS9cIixcbiAgICBpbnRlZ3JhdGlvbnNfcmVzdF91cmw6IFwiaHR0cHM6Ly9zY2FsYXIudmVjdG9yLmltL2FwaVwiLFxuICAgIHVpc2lfYXV0b3JhZ2VzaGFrZV9hcHA6IFwiZWxlbWVudC1hdXRvLXVpc2lcIixcbiAgICBzaG93X2xhYnNfc2V0dGluZ3M6IGZhbHNlLFxuICAgIGZvcmNlX3ZlcmlmaWNhdGlvbjogZmFsc2UsXG5cbiAgICBqaXRzaToge1xuICAgICAgICBwcmVmZXJyZWRfZG9tYWluOiBcIm1lZXQuZWxlbWVudC5pb1wiLFxuICAgIH0sXG4gICAgZWxlbWVudF9jYWxsOiB7XG4gICAgICAgIHVybDogXCJodHRwczovL2NhbGwuZWxlbWVudC5pb1wiLFxuICAgICAgICB1c2VfZXhjbHVzaXZlbHk6IGZhbHNlLFxuICAgICAgICBwYXJ0aWNpcGFudF9saW1pdDogOCxcbiAgICAgICAgYnJhbmQ6IFwiRWxlbWVudCBDYWxsXCIsXG4gICAgfSxcblxuICAgIC8vIEB0cy1pZ25vcmUgLSB3ZSBkZWxpYmVyYXRlbHkgdXNlIHRoZSBjYW1lbENhc2UgdmVyc2lvbiBoZXJlIHNvIHdlIHRyaWdnZXJcbiAgICAvLyB0aGUgZmFsbGJhY2sgYmVoYXZpb3VyLiBJZiB3ZSB1c2VkIHRoZSBzbmFrZV9jYXNlIHZlcnNpb24gdGhlbiB3ZSdkIGJyZWFrXG4gICAgLy8gZXZlcnlvbmUncyBjb25maWcgd2hpY2ggaGFzIHRoZSBjYW1lbENhc2UgcHJvcGVydHkgYmVjYXVzZSBvdXIgZGVmYXVsdCB3b3VsZFxuICAgIC8vIGJlIHByZWZlcnJlZCBvdmVyIHRoZWlyIGNvbmZpZy5cbiAgICBkZXNrdG9wQnVpbGRzOiB7XG4gICAgICAgIGF2YWlsYWJsZTogdHJ1ZSxcbiAgICAgICAgbG9nbzogcmVxdWlyZShcIi4uL3Jlcy9pbWcvZWxlbWVudC1kZXNrdG9wLWxvZ28uc3ZnXCIpLmRlZmF1bHQsXG4gICAgICAgIHVybDogXCJodHRwczovL2VsZW1lbnQuaW8vZ2V0LXN0YXJ0ZWRcIixcbiAgICB9LFxuICAgIHZvaWNlX2Jyb2FkY2FzdDoge1xuICAgICAgICBjaHVua19sZW5ndGg6IDIgKiA2MCwgLy8gdHdvIG1pbnV0ZXNcbiAgICAgICAgbWF4X2xlbmd0aDogNCAqIDYwICogNjAsIC8vIGZvdXIgaG91cnNcbiAgICB9LFxuXG4gICAgZmVlZGJhY2s6IHtcbiAgICAgICAgZXhpc3RpbmdfaXNzdWVzX3VybDpcbiAgICAgICAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tL3ZlY3Rvci1pbS9lbGVtZW50LXdlYi9pc3N1ZXM/cT1pcyUzQW9wZW4raXMlM0Fpc3N1ZStzb3J0JTNBcmVhY3Rpb25zLSUyQjEtZGVzY1wiLFxuICAgICAgICBuZXdfaXNzdWVfdXJsOiBcImh0dHBzOi8vZ2l0aHViLmNvbS92ZWN0b3ItaW0vZWxlbWVudC13ZWIvaXNzdWVzL25ldy9jaG9vc2VcIixcbiAgICB9LFxuXG4gICAgZGVza3RvcF9idWlsZHM6IHtcbiAgICAgICAgYXZhaWxhYmxlOiB0cnVlLFxuICAgICAgICBsb2dvOiBcInZlY3Rvci1pY29ucy8xMDI0LnBuZ1wiLFxuICAgICAgICB1cmw6IFwiaHR0cHM6Ly9lbGVtZW50LmlvL2Rvd25sb2FkXCIsXG4gICAgICAgIHVybF9tYWNvczogXCJodHRwczovL3BhY2thZ2VzLmVsZW1lbnQuaW8vZGVza3RvcC9pbnN0YWxsL21hY29zL0VsZW1lbnQuZG1nXCIsXG4gICAgICAgIHVybF93aW42NDogXCJodHRwczovL3BhY2thZ2VzLmVsZW1lbnQuaW8vZGVza3RvcC9pbnN0YWxsL3dpbjMyL3g2NC9FbGVtZW50JTIwU2V0dXAuZXhlXCIsXG4gICAgICAgIHVybF93aW4zMjogXCJodHRwczovL3BhY2thZ2VzLmVsZW1lbnQuaW8vZGVza3RvcC9pbnN0YWxsL3dpbjMyL2lhMzIvRWxlbWVudCUyMFNldHVwLmV4ZVwiLFxuICAgICAgICB1cmxfbGludXg6IFwiaHR0cHM6Ly9lbGVtZW50LmlvL2Rvd25sb2FkI2xpbnV4XCIsXG4gICAgfSxcbiAgICBtb2JpbGVfYnVpbGRzOiB7XG4gICAgICAgIGlvczogXCJodHRwczovL2FwcHMuYXBwbGUuY29tL2FwcC92ZWN0b3IvaWQxMDgzNDQ2MDY3XCIsXG4gICAgICAgIGFuZHJvaWQ6IFwiaHR0cHM6Ly9wbGF5Lmdvb2dsZS5jb20vc3RvcmUvYXBwcy9kZXRhaWxzP2lkPWltLnZlY3Rvci5hcHBcIixcbiAgICAgICAgZmRyb2lkOiBcImh0dHBzOi8vZi1kcm9pZC5vcmcvcmVwb3NpdG9yeS9icm93c2UvP2ZkaWQ9aW0udmVjdG9yLmFwcFwiLFxuICAgIH0sXG59O1xuXG5leHBvcnQgdHlwZSBDb25maWdPcHRpb25zID0gRGVmYXVsdGl6ZTxJQ29uZmlnT3B0aW9ucywgdHlwZW9mIERFRkFVTFRTPjtcblxuZnVuY3Rpb24gbWVyZ2VDb25maWcoXG4gICAgY29uZmlnOiBEZWVwUmVhZG9ubHk8SUNvbmZpZ09wdGlvbnM+LFxuICAgIGNoYW5nZXM6IERlZXBSZWFkb25seTxQYXJ0aWFsPElDb25maWdPcHRpb25zPj4sXG4pOiBEZWVwUmVhZG9ubHk8SUNvbmZpZ09wdGlvbnM+IHtcbiAgICAvLyByZXR1cm4geyAuLi5jb25maWcsIC4uLmNoYW5nZXMgfTtcbiAgICByZXR1cm4gbWVyZ2VXaXRoKG9iamVjdENsb25lKGNvbmZpZyksIGNoYW5nZXMsIChvYmpWYWx1ZSwgc3JjVmFsdWUpID0+IHtcbiAgICAgICAgLy8gRG9uJ3QgbWVyZ2UgYXJyYXlzLCBwcmVmZXIgdmFsdWVzIGZyb20gbmV3ZXIgb2JqZWN0XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KG9ialZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHNyY1ZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRG9uJ3QgYWxsb3cgb2JqZWN0cyB0byBnZXQgbnVsbGVkIG91dCwgdGhpcyB3aWxsIGJyZWFrIG91ciB0eXBlc1xuICAgICAgICBpZiAoaXNPYmplY3Qob2JqVmFsdWUpICYmICFpc09iamVjdChzcmNWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpWYWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuXG50eXBlIE9iamVjdFR5cGU8SyBleHRlbmRzIGtleW9mIElDb25maWdPcHRpb25zPiA9IElDb25maWdPcHRpb25zW0tdIGV4dGVuZHMgb2JqZWN0XG4gICAgPyBTbmFrZWRPYmplY3Q8Tm9uTnVsbGFibGU8SUNvbmZpZ09wdGlvbnNbS10+PlxuICAgIDogT3B0aW9uYWw8U25ha2VkT2JqZWN0PE5vbk51bGxhYmxlPElDb25maWdPcHRpb25zW0tdPj4+O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZGtDb25maWcge1xuICAgIHByaXZhdGUgc3RhdGljIGluc3RhbmNlOiBEZWVwUmVhZG9ubHk8SUNvbmZpZ09wdGlvbnM+O1xuICAgIHByaXZhdGUgc3RhdGljIGZhbGxiYWNrOiBTbmFrZWRPYmplY3Q8RGVlcFJlYWRvbmx5PElDb25maWdPcHRpb25zPj47XG5cbiAgICBwcml2YXRlIHN0YXRpYyBzZXRJbnN0YW5jZShpOiBEZWVwUmVhZG9ubHk8SUNvbmZpZ09wdGlvbnM+KTogdm9pZCB7XG4gICAgICAgIFNka0NvbmZpZy5pbnN0YW5jZSA9IGk7XG4gICAgICAgIFNka0NvbmZpZy5mYWxsYmFjayA9IG5ldyBTbmFrZWRPYmplY3QoaSk7XG5cbiAgICAgICAgLy8gRm9yIGRlYnVnZ2luZyBwdXJwb3Nlc1xuICAgICAgICB3aW5kb3cubXhSZWFjdFNka0NvbmZpZyA9IGk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXQoKTogSUNvbmZpZ09wdGlvbnM7XG4gICAgcHVibGljIHN0YXRpYyBnZXQ8SyBleHRlbmRzIGtleW9mIElDb25maWdPcHRpb25zPihrZXk6IEssIGFsdENhc2VOYW1lPzogc3RyaW5nKTogSUNvbmZpZ09wdGlvbnNbS107XG4gICAgcHVibGljIHN0YXRpYyBnZXQ8SyBleHRlbmRzIGtleW9mIElDb25maWdPcHRpb25zID0gbmV2ZXI+KFxuICAgICAgICBrZXk/OiBLLFxuICAgICAgICBhbHRDYXNlTmFtZT86IHN0cmluZyxcbiAgICApOiBEZWVwUmVhZG9ubHk8SUNvbmZpZ09wdGlvbnM+IHwgRGVlcFJlYWRvbmx5PElDb25maWdPcHRpb25zPltLXSB7XG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gc2FmZSB0byBjYXN0IGFzIGEgZmFsbGJhY2sgLSB3ZSB3YW50IHRvIGJyZWFrIHRoZSBydW50aW1lIGNvbnRyYWN0IGluIHRoaXMgY2FzZVxuICAgICAgICAgICAgcmV0dXJuIFNka0NvbmZpZy5pbnN0YW5jZSB8fCA8SUNvbmZpZ09wdGlvbnM+e307XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFNka0NvbmZpZy5mYWxsYmFjay5nZXQoa2V5LCBhbHRDYXNlTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRPYmplY3Q8SyBleHRlbmRzIGtleW9mIElDb25maWdPcHRpb25zPihrZXk6IEssIGFsdENhc2VOYW1lPzogc3RyaW5nKTogT2JqZWN0VHlwZTxLPiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IFNka0NvbmZpZy5nZXQoa2V5LCBhbHRDYXNlTmFtZSk7XG4gICAgICAgIGlmIChpc09iamVjdCh2YWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNuYWtlZE9iamVjdCh2YWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmV0dXJuIHRoZSBzYW1lIHR5cGUgZm9yIHNlbnNpdGl2ZSBjYWxsZXJzIChzb21lIHdhbnQgYHVuZGVmaW5lZGAgc3BlY2lmaWNhbGx5KVxuICAgICAgICByZXR1cm4gKHZhbCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogbnVsbCkgYXMgT2JqZWN0VHlwZTxLPjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHB1dChjZmc6IERlZXBSZWFkb25seTxDb25maWdPcHRpb25zPik6IHZvaWQge1xuICAgICAgICBTZGtDb25maWcuc2V0SW5zdGFuY2UobWVyZ2VDb25maWcoREVGQVVMVFMsIGNmZykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgY29uZmlnLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIFNka0NvbmZpZy5zZXRJbnN0YW5jZShtZXJnZUNvbmZpZyhERUZBVUxUUywge30pKTsgLy8gc2FmZSB0byBjYXN0IC0gZGVmYXVsdHMgd2lsbCBiZSBhcHBsaWVkXG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBhZGQoY2ZnOiBQYXJ0aWFsPENvbmZpZ09wdGlvbnM+KTogdm9pZCB7XG4gICAgICAgIFNka0NvbmZpZy5wdXQobWVyZ2VDb25maWcoU2RrQ29uZmlnLmdldCgpLCBjZmcpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNzb1JlZGlyZWN0T3B0aW9ucyhjb25maWc6IElDb25maWdPcHRpb25zKTogSVNzb1JlZGlyZWN0T3B0aW9ucyB7XG4gICAgLy8gSWdub3JlIGRlcHJlY2F0ZWQgb3B0aW9ucyBpZiB0aGUgY29uZmlnIGlzIHVzaW5nIG5ldyBvbmVzXG4gICAgaWYgKGNvbmZpZy5zc29fcmVkaXJlY3Rfb3B0aW9ucykgcmV0dXJuIGNvbmZpZy5zc29fcmVkaXJlY3Rfb3B0aW9ucztcblxuICAgIC8vIFdlIGNhbiBjaGVhdCBoZXJlIGJlY2F1c2UgdGhlIGRlZmF1bHQgaXMgZmFsc2UgYW55d2F5c1xuICAgIGlmIChjb25maWcuc3NvX2ltbWVkaWF0ZV9yZWRpcmVjdCkgcmV0dXJuIHsgaW1tZWRpYXRlOiB0cnVlIH07XG5cbiAgICAvLyBEZWZhdWx0OiBkbyBub3RoaW5nXG4gICAgcmV0dXJuIHt9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7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Q0FBQztJQUNuRDtJQUNBLE9BQU9ILFNBQVMsQ0FBQ0ksUUFBUSxDQUFDSSxHQUFHLENBQUNDLEdBQUcsRUFBRUMsV0FBVyxDQUFDO0VBQ25EO0VBRUEsT0FBY0UsU0FBU0EsQ0FBaUNILEdBQU0sRUFBRUMsV0FBb0IsRUFBaUI7SUFDakcsTUFBTUcsR0FBRyxHQUFHYixTQUFTLENBQUNRLEdBQUcsQ0FBQ0MsR0FBRyxFQUFFQyxXQUFXLENBQUM7SUFDM0MsSUFBSSxJQUFBWCxpQkFBUSxFQUFDYyxHQUFHLENBQUMsRUFBRTtNQUNmLE9BQU8sSUFBSVIsMEJBQVksQ0FBQ1EsR0FBRyxDQUFDO0lBQ2hDOztJQUVBO0lBQ0EsT0FBUUEsR0FBRyxLQUFLRixTQUFTLEdBQUdBLFNBQVMsR0FBRyxJQUFJO0VBQ2hEO0VBRUEsT0FBY0csR0FBR0EsQ0FBQ0MsR0FBZ0MsRUFBUTtJQUN0RGYsU0FBUyxDQUFDQyxXQUFXLENBQUNYLFdBQVcsQ0FBQ25DLFFBQVEsRUFBRTRELEdBQUcsQ0FBQyxDQUFDO0VBQ3JEOztFQUVBO0FBQ0o7QUFDQTtFQUNJLE9BQWNDLEtBQUtBLENBQUEsRUFBUztJQUN4QmhCLFNBQVMsQ0FBQ0MsV0FBVyxDQUFDWCxXQUFXLENBQUNuQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7RUFDdEQ7RUFFQSxPQUFjOEQsR0FBR0EsQ0FBQ0YsR0FBMkIsRUFBUTtJQUNqRGYsU0FBUyxDQUFDYyxHQUFHLENBQUN4QixXQUFXLENBQUNVLFNBQVMsQ0FBQ1EsR0FBRyxDQUFDLENBQUMsRUFBRU8sR0FBRyxDQUFDLENBQUM7RUFDcEQ7QUFDSjtBQUFDM0QsT0FBQSxDQUFBa0IsT0FBQSxHQUFBMEIsU0FBQTtBQUFBLElBQUFrQixnQkFBQSxDQUFBNUMsT0FBQSxFQWpEb0IwQixTQUFTO0FBQUEsSUFBQWtCLGdCQUFBLENBQUE1QyxPQUFBLEVBQVQwQixTQUFTO0FBbUR2QixTQUFTbUIsdUJBQXVCQSxDQUFDNUIsTUFBc0IsRUFBdUI7RUFDakY7RUFDQSxJQUFJQSxNQUFNLENBQUM2QixvQkFBb0IsRUFBRSxPQUFPN0IsTUFBTSxDQUFDNkIsb0JBQW9COztFQUVuRTtFQUNBLElBQUk3QixNQUFNLENBQUM4QixzQkFBc0IsRUFBRSxPQUFPO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUM7O0VBRTdEO0VBQ0EsT0FBTyxDQUFDLENBQUM7QUFDYiIsImlnbm9yZUxpc3QiOltdfQ==