matrix-react-sdk
Version:
SDK for matrix.org using React
128 lines (124 loc) • 18.4 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.KeyBindingsManager = void 0;
exports.getKeyBindingsManager = getKeyBindingsManager;
exports.isKeyComboMatch = isKeyComboMatch;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _KeyBindingsDefaults = require("./KeyBindingsDefaults");
var _Keyboard = require("./Keyboard");
/*
Copyright 2024 New Vector Ltd.
Copyright 2022 Šimon Brandner <simon.bra.ag@gmail.com>
Copyright 2021 Clemens Zeidler
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
/**
* Represent a key combination.
*
* The combo is evaluated strictly, i.e. the KeyboardEvent must match exactly what is specified in the KeyCombo.
*/
/**
* Helper method to check if a KeyboardEvent matches a KeyCombo
*
* Note, this method is only exported for testing.
*/
function isKeyComboMatch(ev, combo, onMac) {
if (combo.key !== undefined) {
// When shift is pressed, letters are returned as upper case chars. In this case do a lower case comparison.
// This works for letter combos such as shift + U as well for none letter combos such as shift + Escape.
// If shift is not pressed, the toLowerCase conversion can be avoided.
if (ev.shiftKey) {
if (ev.key.toLowerCase() !== combo.key.toLowerCase()) {
return false;
}
} else if (ev.key !== combo.key) {
return false;
}
}
const comboCtrl = combo.ctrlKey ?? false;
const comboAlt = combo.altKey ?? false;
const comboShift = combo.shiftKey ?? false;
const comboMeta = combo.metaKey ?? false;
// Tests mock events may keep the modifiers undefined; convert them to booleans
const evCtrl = ev.ctrlKey ?? false;
const evAlt = ev.altKey ?? false;
const evShift = ev.shiftKey ?? false;
const evMeta = ev.metaKey ?? false;
// When ctrlOrCmd is set, the keys need do evaluated differently on PC and Mac
if (combo.ctrlOrCmdKey) {
if (onMac) {
if (!evMeta || evCtrl !== comboCtrl || evAlt !== comboAlt || evShift !== comboShift) {
return false;
}
} else {
if (!evCtrl || evMeta !== comboMeta || evAlt !== comboAlt || evShift !== comboShift) {
return false;
}
}
return true;
}
if (evMeta !== comboMeta || evCtrl !== comboCtrl || evAlt !== comboAlt || evShift !== comboShift) {
return false;
}
return true;
}
class KeyBindingsManager {
constructor() {
/**
* List of key bindings providers.
*
* Key bindings from the first provider(s) in the list will have precedence over key bindings from later providers.
*
* To overwrite the default key bindings add a new providers before the default provider, e.g. a provider for
* customized key bindings.
*/
(0, _defineProperty2.default)(this, "bindingsProviders", [_KeyBindingsDefaults.defaultBindingsProvider]);
}
/**
* Finds a matching KeyAction for a given KeyboardEvent
*/
getAction(getters, ev) {
for (const getter of getters) {
const bindings = getter();
const binding = bindings.find(it => isKeyComboMatch(ev, it.keyCombo, _Keyboard.IS_MAC));
if (binding) {
return binding.action;
}
}
return undefined;
}
getMessageComposerAction(ev) {
return this.getAction(this.bindingsProviders.map(it => it.getMessageComposerBindings), ev);
}
getAutocompleteAction(ev) {
return this.getAction(this.bindingsProviders.map(it => it.getAutocompleteBindings), ev);
}
getRoomListAction(ev) {
return this.getAction(this.bindingsProviders.map(it => it.getRoomListBindings), ev);
}
getRoomAction(ev) {
return this.getAction(this.bindingsProviders.map(it => it.getRoomBindings), ev);
}
getNavigationAction(ev) {
return this.getAction(this.bindingsProviders.map(it => it.getNavigationBindings), ev);
}
getAccessibilityAction(ev) {
return this.getAction(this.bindingsProviders.map(it => it.getAccessibilityBindings), ev);
}
getCallAction(ev) {
return this.getAction(this.bindingsProviders.map(it => it.getCallBindings), ev);
}
getLabsAction(ev) {
return this.getAction(this.bindingsProviders.map(it => it.getLabsBindings), ev);
}
}
exports.KeyBindingsManager = KeyBindingsManager;
const manager = new KeyBindingsManager();
function getKeyBindingsManager() {
return manager;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfS2V5QmluZGluZ3NEZWZhdWx0cyIsInJlcXVpcmUiLCJfS2V5Ym9hcmQiLCJpc0tleUNvbWJvTWF0Y2giLCJldiIsImNvbWJvIiwib25NYWMiLCJrZXkiLCJ1bmRlZmluZWQiLCJzaGlmdEtleSIsInRvTG93ZXJDYXNlIiwiY29tYm9DdHJsIiwiY3RybEtleSIsImNvbWJvQWx0IiwiYWx0S2V5IiwiY29tYm9TaGlmdCIsImNvbWJvTWV0YSIsIm1ldGFLZXkiLCJldkN0cmwiLCJldkFsdCIsImV2U2hpZnQiLCJldk1ldGEiLCJjdHJsT3JDbWRLZXkiLCJLZXlCaW5kaW5nc01hbmFnZXIiLCJjb25zdHJ1Y3RvciIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiZGVmYXVsdEJpbmRpbmdzUHJvdmlkZXIiLCJnZXRBY3Rpb24iLCJnZXR0ZXJzIiwiZ2V0dGVyIiwiYmluZGluZ3MiLCJiaW5kaW5nIiwiZmluZCIsIml0Iiwia2V5Q29tYm8iLCJJU19NQUMiLCJhY3Rpb24iLCJnZXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24iLCJiaW5kaW5nc1Byb3ZpZGVycyIsIm1hcCIsImdldE1lc3NhZ2VDb21wb3NlckJpbmRpbmdzIiwiZ2V0QXV0b2NvbXBsZXRlQWN0aW9uIiwiZ2V0QXV0b2NvbXBsZXRlQmluZGluZ3MiLCJnZXRSb29tTGlzdEFjdGlvbiIsImdldFJvb21MaXN0QmluZGluZ3MiLCJnZXRSb29tQWN0aW9uIiwiZ2V0Um9vbUJpbmRpbmdzIiwiZ2V0TmF2aWdhdGlvbkFjdGlvbiIsImdldE5hdmlnYXRpb25CaW5kaW5ncyIsImdldEFjY2Vzc2liaWxpdHlBY3Rpb24iLCJnZXRBY2Nlc3NpYmlsaXR5QmluZGluZ3MiLCJnZXRDYWxsQWN0aW9uIiwiZ2V0Q2FsbEJpbmRpbmdzIiwiZ2V0TGFic0FjdGlvbiIsImdldExhYnNCaW5kaW5ncyIsImV4cG9ydHMiLCJtYW5hZ2VyIiwiZ2V0S2V5QmluZGluZ3NNYW5hZ2VyIl0sInNvdXJjZXMiOlsiLi4vc3JjL0tleUJpbmRpbmdzTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMiDFoGltb24gQnJhbmRuZXIgPHNpbW9uLmJyYS5hZ0BnbWFpbC5jb20+XG5Db3B5cmlnaHQgMjAyMSBDbGVtZW5zIFplaWRsZXJcblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IHsgS2V5QmluZGluZ0FjdGlvbiB9IGZyb20gXCIuL2FjY2Vzc2liaWxpdHkvS2V5Ym9hcmRTaG9ydGN1dHNcIjtcbmltcG9ydCB7IGRlZmF1bHRCaW5kaW5nc1Byb3ZpZGVyIH0gZnJvbSBcIi4vS2V5QmluZGluZ3NEZWZhdWx0c1wiO1xuaW1wb3J0IHsgSVNfTUFDIH0gZnJvbSBcIi4vS2V5Ym9hcmRcIjtcblxuLyoqXG4gKiBSZXByZXNlbnQgYSBrZXkgY29tYmluYXRpb24uXG4gKlxuICogVGhlIGNvbWJvIGlzIGV2YWx1YXRlZCBzdHJpY3RseSwgaS5lLiB0aGUgS2V5Ym9hcmRFdmVudCBtdXN0IG1hdGNoIGV4YWN0bHkgd2hhdCBpcyBzcGVjaWZpZWQgaW4gdGhlIEtleUNvbWJvLlxuICovXG5leHBvcnQgdHlwZSBLZXlDb21ibyA9IHtcbiAgICBrZXk6IHN0cmluZztcblxuICAgIC8qKiBPbiBQQzogY3RybCBpcyBwcmVzc2VkOyBvbiBNYWM6IG1ldGEgaXMgcHJlc3NlZCAqL1xuICAgIGN0cmxPckNtZEtleT86IGJvb2xlYW47XG5cbiAgICBhbHRLZXk/OiBib29sZWFuO1xuICAgIGN0cmxLZXk/OiBib29sZWFuO1xuICAgIG1ldGFLZXk/OiBib29sZWFuO1xuICAgIHNoaWZ0S2V5PzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIEtleUJpbmRpbmcgPSB7XG4gICAgYWN0aW9uOiBLZXlCaW5kaW5nQWN0aW9uO1xuICAgIGtleUNvbWJvOiBLZXlDb21ibztcbn07XG5cbi8qKlxuICogSGVscGVyIG1ldGhvZCB0byBjaGVjayBpZiBhIEtleWJvYXJkRXZlbnQgbWF0Y2hlcyBhIEtleUNvbWJvXG4gKlxuICogTm90ZSwgdGhpcyBtZXRob2QgaXMgb25seSBleHBvcnRlZCBmb3IgdGVzdGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzS2V5Q29tYm9NYXRjaChldjogS2V5Ym9hcmRFdmVudCB8IFJlYWN0LktleWJvYXJkRXZlbnQsIGNvbWJvOiBLZXlDb21ibywgb25NYWM6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICBpZiAoY29tYm8ua2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gV2hlbiBzaGlmdCBpcyBwcmVzc2VkLCBsZXR0ZXJzIGFyZSByZXR1cm5lZCBhcyB1cHBlciBjYXNlIGNoYXJzLiBJbiB0aGlzIGNhc2UgZG8gYSBsb3dlciBjYXNlIGNvbXBhcmlzb24uXG4gICAgICAgIC8vIFRoaXMgd29ya3MgZm9yIGxldHRlciBjb21ib3Mgc3VjaCBhcyBzaGlmdCArIFUgYXMgd2VsbCBmb3Igbm9uZSBsZXR0ZXIgY29tYm9zIHN1Y2ggYXMgc2hpZnQgKyBFc2NhcGUuXG4gICAgICAgIC8vIElmIHNoaWZ0IGlzIG5vdCBwcmVzc2VkLCB0aGUgdG9Mb3dlckNhc2UgY29udmVyc2lvbiBjYW4gYmUgYXZvaWRlZC5cbiAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICBpZiAoZXYua2V5LnRvTG93ZXJDYXNlKCkgIT09IGNvbWJvLmtleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2LmtleSAhPT0gY29tYm8ua2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb21ib0N0cmwgPSBjb21iby5jdHJsS2V5ID8/IGZhbHNlO1xuICAgIGNvbnN0IGNvbWJvQWx0ID0gY29tYm8uYWx0S2V5ID8/IGZhbHNlO1xuICAgIGNvbnN0IGNvbWJvU2hpZnQgPSBjb21iby5zaGlmdEtleSA/PyBmYWxzZTtcbiAgICBjb25zdCBjb21ib01ldGEgPSBjb21iby5tZXRhS2V5ID8/IGZhbHNlO1xuICAgIC8vIFRlc3RzIG1vY2sgZXZlbnRzIG1heSBrZWVwIHRoZSBtb2RpZmllcnMgdW5kZWZpbmVkOyBjb252ZXJ0IHRoZW0gdG8gYm9vbGVhbnNcbiAgICBjb25zdCBldkN0cmwgPSBldi5jdHJsS2V5ID8/IGZhbHNlO1xuICAgIGNvbnN0IGV2QWx0ID0gZXYuYWx0S2V5ID8/IGZhbHNlO1xuICAgIGNvbnN0IGV2U2hpZnQgPSBldi5zaGlmdEtleSA/PyBmYWxzZTtcbiAgICBjb25zdCBldk1ldGEgPSBldi5tZXRhS2V5ID8/IGZhbHNlO1xuICAgIC8vIFdoZW4gY3RybE9yQ21kIGlzIHNldCwgdGhlIGtleXMgbmVlZCBkbyBldmFsdWF0ZWQgZGlmZmVyZW50bHkgb24gUEMgYW5kIE1hY1xuICAgIGlmIChjb21iby5jdHJsT3JDbWRLZXkpIHtcbiAgICAgICAgaWYgKG9uTWFjKSB7XG4gICAgICAgICAgICBpZiAoIWV2TWV0YSB8fCBldkN0cmwgIT09IGNvbWJvQ3RybCB8fCBldkFsdCAhPT0gY29tYm9BbHQgfHwgZXZTaGlmdCAhPT0gY29tYm9TaGlmdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZXZDdHJsIHx8IGV2TWV0YSAhPT0gY29tYm9NZXRhIHx8IGV2QWx0ICE9PSBjb21ib0FsdCB8fCBldlNoaWZ0ICE9PSBjb21ib1NoaWZ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChldk1ldGEgIT09IGNvbWJvTWV0YSB8fCBldkN0cmwgIT09IGNvbWJvQ3RybCB8fCBldkFsdCAhPT0gY29tYm9BbHQgfHwgZXZTaGlmdCAhPT0gY29tYm9TaGlmdCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCB0eXBlIEtleUJpbmRpbmdHZXR0ZXIgPSAoKSA9PiBLZXlCaW5kaW5nW107XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUtleUJpbmRpbmdzUHJvdmlkZXIge1xuICAgIFtrZXk6IHN0cmluZ106IEtleUJpbmRpbmdHZXR0ZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBLZXlCaW5kaW5nc01hbmFnZXIge1xuICAgIC8qKlxuICAgICAqIExpc3Qgb2Yga2V5IGJpbmRpbmdzIHByb3ZpZGVycy5cbiAgICAgKlxuICAgICAqIEtleSBiaW5kaW5ncyBmcm9tIHRoZSBmaXJzdCBwcm92aWRlcihzKSBpbiB0aGUgbGlzdCB3aWxsIGhhdmUgcHJlY2VkZW5jZSBvdmVyIGtleSBiaW5kaW5ncyBmcm9tIGxhdGVyIHByb3ZpZGVycy5cbiAgICAgKlxuICAgICAqIFRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBrZXkgYmluZGluZ3MgYWRkIGEgbmV3IHByb3ZpZGVycyBiZWZvcmUgdGhlIGRlZmF1bHQgcHJvdmlkZXIsIGUuZy4gYSBwcm92aWRlciBmb3JcbiAgICAgKiBjdXN0b21pemVkIGtleSBiaW5kaW5ncy5cbiAgICAgKi9cbiAgICBwdWJsaWMgYmluZGluZ3NQcm92aWRlcnM6IElLZXlCaW5kaW5nc1Byb3ZpZGVyW10gPSBbZGVmYXVsdEJpbmRpbmdzUHJvdmlkZXJdO1xuXG4gICAgLyoqXG4gICAgICogRmluZHMgYSBtYXRjaGluZyBLZXlBY3Rpb24gZm9yIGEgZ2l2ZW4gS2V5Ym9hcmRFdmVudFxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0QWN0aW9uKFxuICAgICAgICBnZXR0ZXJzOiBLZXlCaW5kaW5nR2V0dGVyW10sXG4gICAgICAgIGV2OiBLZXlib2FyZEV2ZW50IHwgUmVhY3QuS2V5Ym9hcmRFdmVudCxcbiAgICApOiBLZXlCaW5kaW5nQWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgZm9yIChjb25zdCBnZXR0ZXIgb2YgZ2V0dGVycykge1xuICAgICAgICAgICAgY29uc3QgYmluZGluZ3MgPSBnZXR0ZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiaW5kaW5ncy5maW5kKChpdCkgPT4gaXNLZXlDb21ib01hdGNoKGV2LCBpdC5rZXlDb21ibywgSVNfTUFDKSk7XG4gICAgICAgICAgICBpZiAoYmluZGluZykge1xuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kaW5nLmFjdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24oZXY6IEtleWJvYXJkRXZlbnQgfCBSZWFjdC5LZXlib2FyZEV2ZW50KTogS2V5QmluZGluZ0FjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGlvbihcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ3NQcm92aWRlcnMubWFwKChpdCkgPT4gaXQuZ2V0TWVzc2FnZUNvbXBvc2VyQmluZGluZ3MpLFxuICAgICAgICAgICAgZXYsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEF1dG9jb21wbGV0ZUFjdGlvbihldjogS2V5Ym9hcmRFdmVudCB8IFJlYWN0LktleWJvYXJkRXZlbnQpOiBLZXlCaW5kaW5nQWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5iaW5kaW5nc1Byb3ZpZGVycy5tYXAoKGl0KSA9PiBpdC5nZXRBdXRvY29tcGxldGVCaW5kaW5ncyksXG4gICAgICAgICAgICBldixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um9vbUxpc3RBY3Rpb24oZXY6IEtleWJvYXJkRXZlbnQgfCBSZWFjdC5LZXlib2FyZEV2ZW50KTogS2V5QmluZGluZ0FjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGlvbihcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ3NQcm92aWRlcnMubWFwKChpdCkgPT4gaXQuZ2V0Um9vbUxpc3RCaW5kaW5ncyksXG4gICAgICAgICAgICBldixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um9vbUFjdGlvbihldjogS2V5Ym9hcmRFdmVudCB8IFJlYWN0LktleWJvYXJkRXZlbnQpOiBLZXlCaW5kaW5nQWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5iaW5kaW5nc1Byb3ZpZGVycy5tYXAoKGl0KSA9PiBpdC5nZXRSb29tQmluZGluZ3MpLFxuICAgICAgICAgICAgZXYsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hdmlnYXRpb25BY3Rpb24oZXY6IEtleWJvYXJkRXZlbnQgfCBSZWFjdC5LZXlib2FyZEV2ZW50KTogS2V5QmluZGluZ0FjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGlvbihcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ3NQcm92aWRlcnMubWFwKChpdCkgPT4gaXQuZ2V0TmF2aWdhdGlvbkJpbmRpbmdzKSxcbiAgICAgICAgICAgIGV2LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRBY2Nlc3NpYmlsaXR5QWN0aW9uKGV2OiBLZXlib2FyZEV2ZW50IHwgUmVhY3QuS2V5Ym9hcmRFdmVudCk6IEtleUJpbmRpbmdBY3Rpb24gfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRBY3Rpb24oXG4gICAgICAgICAgICB0aGlzLmJpbmRpbmdzUHJvdmlkZXJzLm1hcCgoaXQpID0+IGl0LmdldEFjY2Vzc2liaWxpdHlCaW5kaW5ncyksXG4gICAgICAgICAgICBldixcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2FsbEFjdGlvbihldjogS2V5Ym9hcmRFdmVudCB8IFJlYWN0LktleWJvYXJkRXZlbnQpOiBLZXlCaW5kaW5nQWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5iaW5kaW5nc1Byb3ZpZGVycy5tYXAoKGl0KSA9PiBpdC5nZXRDYWxsQmluZGluZ3MpLFxuICAgICAgICAgICAgZXYsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExhYnNBY3Rpb24oZXY6IEtleWJvYXJkRXZlbnQgfCBSZWFjdC5LZXlib2FyZEV2ZW50KTogS2V5QmluZGluZ0FjdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFjdGlvbihcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ3NQcm92aWRlcnMubWFwKChpdCkgPT4gaXQuZ2V0TGFic0JpbmRpbmdzKSxcbiAgICAgICAgICAgIGV2LFxuICAgICAgICApO1xuICAgIH1cbn1cblxuY29uc3QgbWFuYWdlciA9IG5ldyBLZXlCaW5kaW5nc01hbmFnZXIoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleUJpbmRpbmdzTWFuYWdlcigpOiBLZXlCaW5kaW5nc01hbmFnZXIge1xuICAgIHJldHVybiBtYW5hZ2VyO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBVUEsSUFBQUEsb0JBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQVhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNFLGVBQWVBLENBQUNDLEVBQXVDLEVBQUVDLEtBQWUsRUFBRUMsS0FBYyxFQUFXO0VBQy9HLElBQUlELEtBQUssQ0FBQ0UsR0FBRyxLQUFLQyxTQUFTLEVBQUU7SUFDekI7SUFDQTtJQUNBO0lBQ0EsSUFBSUosRUFBRSxDQUFDSyxRQUFRLEVBQUU7TUFDYixJQUFJTCxFQUFFLENBQUNHLEdBQUcsQ0FBQ0csV0FBVyxDQUFDLENBQUMsS0FBS0wsS0FBSyxDQUFDRSxHQUFHLENBQUNHLFdBQVcsQ0FBQyxDQUFDLEVBQUU7UUFDbEQsT0FBTyxLQUFLO01BQ2hCO0lBQ0osQ0FBQyxNQUFNLElBQUlOLEVBQUUsQ0FBQ0csR0FBRyxLQUFLRixLQUFLLENBQUNFLEdBQUcsRUFBRTtNQUM3QixPQUFPLEtBQUs7SUFDaEI7RUFDSjtFQUVBLE1BQU1JLFNBQVMsR0FBR04sS0FBSyxDQUFDTyxPQUFPLElBQUksS0FBSztFQUN4QyxNQUFNQyxRQUFRLEdBQUdSLEtBQUssQ0FBQ1MsTUFBTSxJQUFJLEtBQUs7RUFDdEMsTUFBTUMsVUFBVSxHQUFHVixLQUFLLENBQUNJLFFBQVEsSUFBSSxLQUFLO0VBQzFDLE1BQU1PLFNBQVMsR0FBR1gsS0FBSyxDQUFDWSxPQUFPLElBQUksS0FBSztFQUN4QztFQUNBLE1BQU1DLE1BQU0sR0FBR2QsRUFBRSxDQUFDUSxPQUFPLElBQUksS0FBSztFQUNsQyxNQUFNTyxLQUFLLEdBQUdmLEVBQUUsQ0FBQ1UsTUFBTSxJQUFJLEtBQUs7RUFDaEMsTUFBTU0sT0FBTyxHQUFHaEIsRUFBRSxDQUFDSyxRQUFRLElBQUksS0FBSztFQUNwQyxNQUFNWSxNQUFNLEdBQUdqQixFQUFFLENBQUNhLE9BQU8sSUFBSSxLQUFLO0VBQ2xDO0VBQ0EsSUFBSVosS0FBSyxDQUFDaUIsWUFBWSxFQUFFO0lBQ3BCLElBQUloQixLQUFLLEVBQUU7TUFDUCxJQUFJLENBQUNlLE1BQU0sSUFBSUgsTUFBTSxLQUFLUCxTQUFTLElBQUlRLEtBQUssS0FBS04sUUFBUSxJQUFJTyxPQUFPLEtBQUtMLFVBQVUsRUFBRTtRQUNqRixPQUFPLEtBQUs7TUFDaEI7SUFDSixDQUFDLE1BQU07TUFDSCxJQUFJLENBQUNHLE1BQU0sSUFBSUcsTUFBTSxLQUFLTCxTQUFTLElBQUlHLEtBQUssS0FBS04sUUFBUSxJQUFJTyxPQUFPLEtBQUtMLFVBQVUsRUFBRTtRQUNqRixPQUFPLEtBQUs7TUFDaEI7SUFDSjtJQUNBLE9BQU8sSUFBSTtFQUNmO0VBRUEsSUFBSU0sTUFBTSxLQUFLTCxTQUFTLElBQUlFLE1BQU0sS0FBS1AsU0FBUyxJQUFJUSxLQUFLLEtBQUtOLFFBQVEsSUFBSU8sT0FBTyxLQUFLTCxVQUFVLEVBQUU7SUFDOUYsT0FBTyxLQUFLO0VBQ2hCO0VBRUEsT0FBTyxJQUFJO0FBQ2Y7QUFRTyxNQUFNUSxrQkFBa0IsQ0FBQztFQUFBQyxZQUFBO0lBQzVCO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFQSSxJQUFBQyxnQkFBQSxDQUFBQyxPQUFBLDZCQVFtRCxDQUFDQyw0Q0FBdUIsQ0FBQztFQUFBO0VBRTVFO0FBQ0o7QUFDQTtFQUNZQyxTQUFTQSxDQUNiQyxPQUEyQixFQUMzQnpCLEVBQXVDLEVBQ1g7SUFDNUIsS0FBSyxNQUFNMEIsTUFBTSxJQUFJRCxPQUFPLEVBQUU7TUFDMUIsTUFBTUUsUUFBUSxHQUFHRCxNQUFNLENBQUMsQ0FBQztNQUN6QixNQUFNRSxPQUFPLEdBQUdELFFBQVEsQ0FBQ0UsSUFBSSxDQUFFQyxFQUFFLElBQUsvQixlQUFlLENBQUNDLEVBQUUsRUFBRThCLEVBQUUsQ0FBQ0MsUUFBUSxFQUFFQyxnQkFBTSxDQUFDLENBQUM7TUFDL0UsSUFBSUosT0FBTyxFQUFFO1FBQ1QsT0FBT0EsT0FBTyxDQUFDSyxNQUFNO01BQ3pCO0lBQ0o7SUFDQSxPQUFPN0IsU0FBUztFQUNwQjtFQUVPOEIsd0JBQXdCQSxDQUFDbEMsRUFBdUMsRUFBZ0M7SUFDbkcsT0FBTyxJQUFJLENBQUN3QixTQUFTLENBQ2pCLElBQUksQ0FBQ1csaUJBQWlCLENBQUNDLEdBQUcsQ0FBRU4sRUFBRSxJQUFLQSxFQUFFLENBQUNPLDBCQUEwQixDQUFDLEVBQ2pFckMsRUFDSixDQUFDO0VBQ0w7RUFFT3NDLHFCQUFxQkEsQ0FBQ3RDLEVBQXVDLEVBQWdDO0lBQ2hHLE9BQU8sSUFBSSxDQUFDd0IsU0FBUyxDQUNqQixJQUFJLENBQUNXLGlCQUFpQixDQUFDQyxHQUFHLENBQUVOLEVBQUUsSUFBS0EsRUFBRSxDQUFDUyx1QkFBdUIsQ0FBQyxFQUM5RHZDLEVBQ0osQ0FBQztFQUNMO0VBRU93QyxpQkFBaUJBLENBQUN4QyxFQUF1QyxFQUFnQztJQUM1RixPQUFPLElBQUksQ0FBQ3dCLFNBQVMsQ0FDakIsSUFBSSxDQUFDVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFFTixFQUFFLElBQUtBLEVBQUUsQ0FBQ1csbUJBQW1CLENBQUMsRUFDMUR6QyxFQUNKLENBQUM7RUFDTDtFQUVPMEMsYUFBYUEsQ0FBQzFDLEVBQXVDLEVBQWdDO0lBQ3hGLE9BQU8sSUFBSSxDQUFDd0IsU0FBUyxDQUNqQixJQUFJLENBQUNXLGlCQUFpQixDQUFDQyxHQUFHLENBQUVOLEVBQUUsSUFBS0EsRUFBRSxDQUFDYSxlQUFlLENBQUMsRUFDdEQzQyxFQUNKLENBQUM7RUFDTDtFQUVPNEMsbUJBQW1CQSxDQUFDNUMsRUFBdUMsRUFBZ0M7SUFDOUYsT0FBTyxJQUFJLENBQUN3QixTQUFTLENBQ2pCLElBQUksQ0FBQ1csaUJBQWlCLENBQUNDLEdBQUcsQ0FBRU4sRUFBRSxJQUFLQSxFQUFFLENBQUNlLHFCQUFxQixDQUFDLEVBQzVEN0MsRUFDSixDQUFDO0VBQ0w7RUFFTzhDLHNCQUFzQkEsQ0FBQzlDLEVBQXVDLEVBQWdDO0lBQ2pHLE9BQU8sSUFBSSxDQUFDd0IsU0FBUyxDQUNqQixJQUFJLENBQUNXLGlCQUFpQixDQUFDQyxHQUFHLENBQUVOLEVBQUUsSUFBS0EsRUFBRSxDQUFDaUIsd0JBQXdCLENBQUMsRUFDL0QvQyxFQUNKLENBQUM7RUFDTDtFQUVPZ0QsYUFBYUEsQ0FBQ2hELEVBQXVDLEVBQWdDO0lBQ3hGLE9BQU8sSUFBSSxDQUFDd0IsU0FBUyxDQUNqQixJQUFJLENBQUNXLGlCQUFpQixDQUFDQyxHQUFHLENBQUVOLEVBQUUsSUFBS0EsRUFBRSxDQUFDbUIsZUFBZSxDQUFDLEVBQ3REakQsRUFDSixDQUFDO0VBQ0w7RUFFT2tELGFBQWFBLENBQUNsRCxFQUF1QyxFQUFnQztJQUN4RixPQUFPLElBQUksQ0FBQ3dCLFNBQVMsQ0FDakIsSUFBSSxDQUFDVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFFTixFQUFFLElBQUtBLEVBQUUsQ0FBQ3FCLGVBQWUsQ0FBQyxFQUN0RG5ELEVBQ0osQ0FBQztFQUNMO0FBQ0o7QUFBQ29ELE9BQUEsQ0FBQWpDLGtCQUFBLEdBQUFBLGtCQUFBO0FBRUQsTUFBTWtDLE9BQU8sR0FBRyxJQUFJbEMsa0JBQWtCLENBQUMsQ0FBQztBQUVqQyxTQUFTbUMscUJBQXFCQSxDQUFBLEVBQXVCO0VBQ3hELE9BQU9ELE9BQU87QUFDbEIiLCJpZ25vcmVMaXN0IjpbXX0=