UNPKG

matrix-react-sdk

Version:
82 lines (77 loc) 14.1 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.monitorSyncedPushRules = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _matrix = require("matrix-js-sdk/src/matrix"); var _pushprocessor = require("matrix-js-sdk/src/pushprocessor"); var _logger = require("matrix-js-sdk/src/logger"); var _notifications = require("../../notifications"); var _updatePushRuleActions = require("./updatePushRuleActions"); function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } /* Copyright 2024 New Vector Ltd. Copyright 2023 The Matrix.org Foundation C.I.C. SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const pushRuleAndKindToAnnotated = ruleAndKind => ruleAndKind ? _objectSpread(_objectSpread({}, ruleAndKind.rule), {}, { kind: ruleAndKind.kind }) : undefined; /** * Checks that any synced rules that exist a given rule are in sync * And updates any that are out of sync * Ignores ruleIds that do not exist for the user * @param matrixClient - cli * @param pushProcessor - processor used to retrieve current state of rules * @param ruleId - primary rule * @param definition - VectorPushRuleDefinition of the primary rule */ const monitorSyncedRule = async (matrixClient, pushProcessor, ruleId, definition) => { const primaryRule = pushRuleAndKindToAnnotated(pushProcessor.getPushRuleAndKindById(ruleId)); if (!primaryRule) { return; } const syncedRules = definition.syncedRuleIds?.map(ruleId => pushRuleAndKindToAnnotated(pushProcessor.getPushRuleAndKindById(ruleId))).filter(n => Boolean(n)); // no synced rules to manage if (!syncedRules?.length) { return; } const primaryRuleVectorState = definition.ruleToVectorState(primaryRule); const outOfSyncRules = syncedRules.filter(syncedRule => syncedRule.enabled !== primaryRule.enabled || definition.ruleToVectorState(syncedRule) !== primaryRuleVectorState); if (outOfSyncRules.length) { await (0, _updatePushRuleActions.updateExistingPushRulesWithActions)(matrixClient, // eslint-disable-next-line camelcase, @typescript-eslint/naming-convention outOfSyncRules.map(({ rule_id }) => rule_id), primaryRule.enabled ? primaryRule.actions : undefined); } }; /** * On changes to m.push_rules account data, * check that synced push rules are in sync with their primary rule, * and update any out of sync rules. * synced rules are defined in VectorPushRulesDefinitions * If updating a rule fails for any reason, * the error is caught and handled silently * @param accountDataEvent - MatrixEvent * @param matrixClient - cli * @returns Resolves when updates are complete */ const monitorSyncedPushRules = async (accountDataEvent, matrixClient) => { if (accountDataEvent?.getType() !== _matrix.EventType.PushRules) { return; } const pushProcessor = new _pushprocessor.PushProcessor(matrixClient); Object.entries(_notifications.VectorPushRulesDefinitions).forEach(async ([ruleId, definition]) => { try { await monitorSyncedRule(matrixClient, pushProcessor, ruleId, definition); } catch (error) { _logger.logger.error(`Failed to fully synchronise push rules for ${ruleId}`, error); } }); }; exports.monitorSyncedPushRules = monitorSyncedPushRules; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWF0cml4IiwicmVxdWlyZSIsIl9wdXNocHJvY2Vzc29yIiwiX2xvZ2dlciIsIl9ub3RpZmljYXRpb25zIiwiX3VwZGF0ZVB1c2hSdWxlQWN0aW9ucyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJkZWZhdWx0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsInB1c2hSdWxlQW5kS2luZFRvQW5ub3RhdGVkIiwicnVsZUFuZEtpbmQiLCJydWxlIiwia2luZCIsInVuZGVmaW5lZCIsIm1vbml0b3JTeW5jZWRSdWxlIiwibWF0cml4Q2xpZW50IiwicHVzaFByb2Nlc3NvciIsInJ1bGVJZCIsImRlZmluaXRpb24iLCJwcmltYXJ5UnVsZSIsImdldFB1c2hSdWxlQW5kS2luZEJ5SWQiLCJzeW5jZWRSdWxlcyIsInN5bmNlZFJ1bGVJZHMiLCJtYXAiLCJuIiwiQm9vbGVhbiIsInByaW1hcnlSdWxlVmVjdG9yU3RhdGUiLCJydWxlVG9WZWN0b3JTdGF0ZSIsIm91dE9mU3luY1J1bGVzIiwic3luY2VkUnVsZSIsImVuYWJsZWQiLCJ1cGRhdGVFeGlzdGluZ1B1c2hSdWxlc1dpdGhBY3Rpb25zIiwicnVsZV9pZCIsImFjdGlvbnMiLCJtb25pdG9yU3luY2VkUHVzaFJ1bGVzIiwiYWNjb3VudERhdGFFdmVudCIsImdldFR5cGUiLCJFdmVudFR5cGUiLCJQdXNoUnVsZXMiLCJQdXNoUHJvY2Vzc29yIiwiZW50cmllcyIsIlZlY3RvclB1c2hSdWxlc0RlZmluaXRpb25zIiwiZXJyb3IiLCJsb2dnZXIiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3V0aWxzL3B1c2hSdWxlcy9tb25pdG9yU3luY2VkUHVzaFJ1bGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG5Db3B5cmlnaHQgMjAyNCBOZXcgVmVjdG9yIEx0ZC5cbkNvcHlyaWdodCAyMDIzIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCB7IE1hdHJpeENsaWVudCwgTWF0cml4RXZlbnQsIEV2ZW50VHlwZSwgUnVsZUlkLCBJQW5ub3RhdGVkUHVzaFJ1bGUgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBQdXNoUHJvY2Vzc29yIH0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL3B1c2hwcm9jZXNzb3JcIjtcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gXCJtYXRyaXgtanMtc2RrL3NyYy9sb2dnZXJcIjtcblxuaW1wb3J0IHsgVmVjdG9yUHVzaFJ1bGVzRGVmaW5pdGlvbnMsIFZlY3RvclB1c2hSdWxlRGVmaW5pdGlvbiB9IGZyb20gXCIuLi8uLi9ub3RpZmljYXRpb25zXCI7XG5pbXBvcnQgeyB1cGRhdGVFeGlzdGluZ1B1c2hSdWxlc1dpdGhBY3Rpb25zIH0gZnJvbSBcIi4vdXBkYXRlUHVzaFJ1bGVBY3Rpb25zXCI7XG5cbmNvbnN0IHB1c2hSdWxlQW5kS2luZFRvQW5ub3RhdGVkID0gKFxuICAgIHJ1bGVBbmRLaW5kOiBSZXR1cm5UeXBlPFB1c2hQcm9jZXNzb3JbXCJnZXRQdXNoUnVsZUFuZEtpbmRCeUlkXCJdPixcbik6IElBbm5vdGF0ZWRQdXNoUnVsZSB8IHVuZGVmaW5lZCA9PlxuICAgIHJ1bGVBbmRLaW5kXG4gICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5ydWxlQW5kS2luZC5ydWxlLFxuICAgICAgICAgICAgICBraW5kOiBydWxlQW5kS2luZC5raW5kLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgYW55IHN5bmNlZCBydWxlcyB0aGF0IGV4aXN0IGEgZ2l2ZW4gcnVsZSBhcmUgaW4gc3luY1xuICogQW5kIHVwZGF0ZXMgYW55IHRoYXQgYXJlIG91dCBvZiBzeW5jXG4gKiBJZ25vcmVzIHJ1bGVJZHMgdGhhdCBkbyBub3QgZXhpc3QgZm9yIHRoZSB1c2VyXG4gKiBAcGFyYW0gbWF0cml4Q2xpZW50IC0gY2xpXG4gKiBAcGFyYW0gcHVzaFByb2Nlc3NvciAtIHByb2Nlc3NvciB1c2VkIHRvIHJldHJpZXZlIGN1cnJlbnQgc3RhdGUgb2YgcnVsZXNcbiAqIEBwYXJhbSBydWxlSWQgLSBwcmltYXJ5IHJ1bGVcbiAqIEBwYXJhbSBkZWZpbml0aW9uIC0gVmVjdG9yUHVzaFJ1bGVEZWZpbml0aW9uIG9mIHRoZSBwcmltYXJ5IHJ1bGVcbiAqL1xuY29uc3QgbW9uaXRvclN5bmNlZFJ1bGUgPSBhc3luYyAoXG4gICAgbWF0cml4Q2xpZW50OiBNYXRyaXhDbGllbnQsXG4gICAgcHVzaFByb2Nlc3NvcjogUHVzaFByb2Nlc3NvcixcbiAgICBydWxlSWQ6IFJ1bGVJZCB8IHN0cmluZyxcbiAgICBkZWZpbml0aW9uOiBWZWN0b3JQdXNoUnVsZURlZmluaXRpb24sXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBjb25zdCBwcmltYXJ5UnVsZSA9IHB1c2hSdWxlQW5kS2luZFRvQW5ub3RhdGVkKHB1c2hQcm9jZXNzb3IuZ2V0UHVzaFJ1bGVBbmRLaW5kQnlJZChydWxlSWQpKTtcblxuICAgIGlmICghcHJpbWFyeVJ1bGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzeW5jZWRSdWxlczogSUFubm90YXRlZFB1c2hSdWxlW10gfCB1bmRlZmluZWQgPSBkZWZpbml0aW9uLnN5bmNlZFJ1bGVJZHNcbiAgICAgICAgPy5tYXAoKHJ1bGVJZCkgPT4gcHVzaFJ1bGVBbmRLaW5kVG9Bbm5vdGF0ZWQocHVzaFByb2Nlc3Nvci5nZXRQdXNoUnVsZUFuZEtpbmRCeUlkKHJ1bGVJZCkpKVxuICAgICAgICAuZmlsdGVyKChuPzogSUFubm90YXRlZFB1c2hSdWxlKTogbiBpcyBJQW5ub3RhdGVkUHVzaFJ1bGUgPT4gQm9vbGVhbihuKSk7XG5cbiAgICAvLyBubyBzeW5jZWQgcnVsZXMgdG8gbWFuYWdlXG4gICAgaWYgKCFzeW5jZWRSdWxlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwcmltYXJ5UnVsZVZlY3RvclN0YXRlID0gZGVmaW5pdGlvbi5ydWxlVG9WZWN0b3JTdGF0ZShwcmltYXJ5UnVsZSk7XG5cbiAgICBjb25zdCBvdXRPZlN5bmNSdWxlcyA9IHN5bmNlZFJ1bGVzLmZpbHRlcihcbiAgICAgICAgKHN5bmNlZFJ1bGUpID0+XG4gICAgICAgICAgICBzeW5jZWRSdWxlLmVuYWJsZWQgIT09IHByaW1hcnlSdWxlLmVuYWJsZWQgfHxcbiAgICAgICAgICAgIGRlZmluaXRpb24ucnVsZVRvVmVjdG9yU3RhdGUoc3luY2VkUnVsZSkgIT09IHByaW1hcnlSdWxlVmVjdG9yU3RhdGUsXG4gICAgKTtcblxuICAgIGlmIChvdXRPZlN5bmNSdWxlcy5sZW5ndGgpIHtcbiAgICAgICAgYXdhaXQgdXBkYXRlRXhpc3RpbmdQdXNoUnVsZXNXaXRoQWN0aW9ucyhcbiAgICAgICAgICAgIG1hdHJpeENsaWVudCxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2UsIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICAgICAgICAgb3V0T2ZTeW5jUnVsZXMubWFwKCh7IHJ1bGVfaWQgfSkgPT4gcnVsZV9pZCksXG4gICAgICAgICAgICBwcmltYXJ5UnVsZS5lbmFibGVkID8gcHJpbWFyeVJ1bGUuYWN0aW9ucyA6IHVuZGVmaW5lZCxcbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIE9uIGNoYW5nZXMgdG8gbS5wdXNoX3J1bGVzIGFjY291bnQgZGF0YSxcbiAqIGNoZWNrIHRoYXQgc3luY2VkIHB1c2ggcnVsZXMgYXJlIGluIHN5bmMgd2l0aCB0aGVpciBwcmltYXJ5IHJ1bGUsXG4gKiBhbmQgdXBkYXRlIGFueSBvdXQgb2Ygc3luYyBydWxlcy5cbiAqIHN5bmNlZCBydWxlcyBhcmUgZGVmaW5lZCBpbiBWZWN0b3JQdXNoUnVsZXNEZWZpbml0aW9uc1xuICogSWYgdXBkYXRpbmcgYSBydWxlIGZhaWxzIGZvciBhbnkgcmVhc29uLFxuICogdGhlIGVycm9yIGlzIGNhdWdodCBhbmQgaGFuZGxlZCBzaWxlbnRseVxuICogQHBhcmFtIGFjY291bnREYXRhRXZlbnQgLSBNYXRyaXhFdmVudFxuICogQHBhcmFtIG1hdHJpeENsaWVudCAtIGNsaVxuICogQHJldHVybnMgUmVzb2x2ZXMgd2hlbiB1cGRhdGVzIGFyZSBjb21wbGV0ZVxuICovXG5leHBvcnQgY29uc3QgbW9uaXRvclN5bmNlZFB1c2hSdWxlcyA9IGFzeW5jIChcbiAgICBhY2NvdW50RGF0YUV2ZW50OiBNYXRyaXhFdmVudCB8IHVuZGVmaW5lZCxcbiAgICBtYXRyaXhDbGllbnQ6IE1hdHJpeENsaWVudCxcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGlmIChhY2NvdW50RGF0YUV2ZW50Py5nZXRUeXBlKCkgIT09IEV2ZW50VHlwZS5QdXNoUnVsZXMpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBwdXNoUHJvY2Vzc29yID0gbmV3IFB1c2hQcm9jZXNzb3IobWF0cml4Q2xpZW50KTtcblxuICAgIE9iamVjdC5lbnRyaWVzKFZlY3RvclB1c2hSdWxlc0RlZmluaXRpb25zKS5mb3JFYWNoKGFzeW5jIChbcnVsZUlkLCBkZWZpbml0aW9uXSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgbW9uaXRvclN5bmNlZFJ1bGUobWF0cml4Q2xpZW50LCBwdXNoUHJvY2Vzc29yLCBydWxlSWQsIGRlZmluaXRpb24pO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gZnVsbHkgc3luY2hyb25pc2UgcHVzaCBydWxlcyBmb3IgJHtydWxlSWR9YCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE9BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLGNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLGNBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLHNCQUFBLEdBQUFKLE9BQUE7QUFBNkUsU0FBQUssUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENBQUEsYUFBQUMsQ0FBQSxNQUFBQSxDQUFBLEdBQUFZLFNBQUEsQ0FBQUMsTUFBQSxFQUFBYixDQUFBLFVBQUFDLENBQUEsV0FBQVcsU0FBQSxDQUFBWixDQUFBLElBQUFZLFNBQUEsQ0FBQVosQ0FBQSxRQUFBQSxDQUFBLE9BQUFGLE9BQUEsQ0FBQUksTUFBQSxDQUFBRCxDQUFBLE9BQUFhLE9BQUEsV0FBQWQsQ0FBQSxRQUFBZSxnQkFBQSxDQUFBQyxPQUFBLEVBQUFqQixDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxDQUFBRCxDQUFBLFNBQUFFLE1BQUEsQ0FBQWUseUJBQUEsR0FBQWYsTUFBQSxDQUFBZ0IsZ0JBQUEsQ0FBQW5CLENBQUEsRUFBQUcsTUFBQSxDQUFBZSx5QkFBQSxDQUFBaEIsQ0FBQSxLQUFBSCxPQUFBLENBQUFJLE1BQUEsQ0FBQUQsQ0FBQSxHQUFBYSxPQUFBLFdBQUFkLENBQUEsSUFBQUUsTUFBQSxDQUFBaUIsY0FBQSxDQUFBcEIsQ0FBQSxFQUFBQyxDQUFBLEVBQUFFLE1BQUEsQ0FBQUssd0JBQUEsQ0FBQU4sQ0FBQSxFQUFBRCxDQUFBLGlCQUFBRCxDQUFBLElBYjdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBU0EsTUFBTXFCLDBCQUEwQixHQUM1QkMsV0FBZ0UsSUFFaEVBLFdBQVcsR0FBQVYsYUFBQSxDQUFBQSxhQUFBLEtBRUVVLFdBQVcsQ0FBQ0MsSUFBSTtFQUNuQkMsSUFBSSxFQUFFRixXQUFXLENBQUNFO0FBQUksS0FFMUJDLFNBQVM7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU1DLGlCQUFpQixHQUFHLE1BQUFBLENBQ3RCQyxZQUEwQixFQUMxQkMsYUFBNEIsRUFDNUJDLE1BQXVCLEVBQ3ZCQyxVQUFvQyxLQUNwQjtFQUNoQixNQUFNQyxXQUFXLEdBQUdWLDBCQUEwQixDQUFDTyxhQUFhLENBQUNJLHNCQUFzQixDQUFDSCxNQUFNLENBQUMsQ0FBQztFQUU1RixJQUFJLENBQUNFLFdBQVcsRUFBRTtJQUNkO0VBQ0o7RUFDQSxNQUFNRSxXQUE2QyxHQUFHSCxVQUFVLENBQUNJLGFBQWEsRUFDeEVDLEdBQUcsQ0FBRU4sTUFBTSxJQUFLUiwwQkFBMEIsQ0FBQ08sYUFBYSxDQUFDSSxzQkFBc0IsQ0FBQ0gsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUMxRnRCLE1BQU0sQ0FBRTZCLENBQXNCLElBQThCQyxPQUFPLENBQUNELENBQUMsQ0FBQyxDQUFDOztFQUU1RTtFQUNBLElBQUksQ0FBQ0gsV0FBVyxFQUFFbkIsTUFBTSxFQUFFO0lBQ3RCO0VBQ0o7RUFFQSxNQUFNd0Isc0JBQXNCLEdBQUdSLFVBQVUsQ0FBQ1MsaUJBQWlCLENBQUNSLFdBQVcsQ0FBQztFQUV4RSxNQUFNUyxjQUFjLEdBQUdQLFdBQVcsQ0FBQzFCLE1BQU0sQ0FDcENrQyxVQUFVLElBQ1BBLFVBQVUsQ0FBQ0MsT0FBTyxLQUFLWCxXQUFXLENBQUNXLE9BQU8sSUFDMUNaLFVBQVUsQ0FBQ1MsaUJBQWlCLENBQUNFLFVBQVUsQ0FBQyxLQUFLSCxzQkFDckQsQ0FBQztFQUVELElBQUlFLGNBQWMsQ0FBQzFCLE1BQU0sRUFBRTtJQUN2QixNQUFNLElBQUE2Qix5REFBa0MsRUFDcENoQixZQUFZO0lBQ1o7SUFDQWEsY0FBYyxDQUFDTCxHQUFHLENBQUMsQ0FBQztNQUFFUztJQUFRLENBQUMsS0FBS0EsT0FBTyxDQUFDLEVBQzVDYixXQUFXLENBQUNXLE9BQU8sR0FBR1gsV0FBVyxDQUFDYyxPQUFPLEdBQUdwQixTQUNoRCxDQUFDO0VBQ0w7QUFDSixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNcUIsc0JBQXNCLEdBQUcsTUFBQUEsQ0FDbENDLGdCQUF5QyxFQUN6Q3BCLFlBQTBCLEtBQ1Y7RUFDaEIsSUFBSW9CLGdCQUFnQixFQUFFQyxPQUFPLENBQUMsQ0FBQyxLQUFLQyxpQkFBUyxDQUFDQyxTQUFTLEVBQUU7SUFDckQ7RUFDSjtFQUNBLE1BQU10QixhQUFhLEdBQUcsSUFBSXVCLDRCQUFhLENBQUN4QixZQUFZLENBQUM7RUFFckR4QixNQUFNLENBQUNpRCxPQUFPLENBQUNDLHlDQUEwQixDQUFDLENBQUN0QyxPQUFPLENBQUMsT0FBTyxDQUFDYyxNQUFNLEVBQUVDLFVBQVUsQ0FBQyxLQUFLO0lBQy9FLElBQUk7TUFDQSxNQUFNSixpQkFBaUIsQ0FBQ0MsWUFBWSxFQUFFQyxhQUFhLEVBQUVDLE1BQU0sRUFBRUMsVUFBVSxDQUFDO0lBQzVFLENBQUMsQ0FBQyxPQUFPd0IsS0FBSyxFQUFFO01BQ1pDLGNBQU0sQ0FBQ0QsS0FBSyxDQUFDLDhDQUE4Q3pCLE1BQU0sRUFBRSxFQUFFeUIsS0FBSyxDQUFDO0lBQy9FO0VBQ0osQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQUFDRSxPQUFBLENBQUFWLHNCQUFBLEdBQUFBLHNCQUFBIiwiaWdub3JlTGlzdCI6W119