UNPKG

matrix-react-sdk

Version:
221 lines (219 loc) 39.2 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _matrix = require("matrix-js-sdk/src/matrix"); var _PollStartEvent = require("matrix-js-sdk/src/extensible_events_v1/PollStartEvent"); var _ScrollableBaseModal = _interopRequireDefault(require("../dialogs/ScrollableBaseModal")); var _QuestionDialog = _interopRequireDefault(require("../dialogs/QuestionDialog")); var _Modal = _interopRequireDefault(require("../../../Modal")); var _languageHandler = require("../../../languageHandler"); var _arrays = require("../../../utils/arrays"); var _Field = _interopRequireDefault(require("./Field")); var _AccessibleButton = _interopRequireDefault(require("./AccessibleButton")); var _Spinner = _interopRequireDefault(require("./Spinner")); var _localRoom = require("../../../utils/local-room"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /* Copyright 2024 New Vector Ltd. Copyright 2021, 2022 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. */ var FocusTarget = /*#__PURE__*/function (FocusTarget) { FocusTarget[FocusTarget["Topic"] = 0] = "Topic"; FocusTarget[FocusTarget["NewOption"] = 1] = "NewOption"; return FocusTarget; }(FocusTarget || {}); const MIN_OPTIONS = 2; const MAX_OPTIONS = 20; const DEFAULT_NUM_OPTIONS = 2; const MAX_QUESTION_LENGTH = 340; const MAX_OPTION_LENGTH = 340; function creatingInitialState() { return { title: (0, _languageHandler._t)("poll|create_poll_title"), actionLabel: (0, _languageHandler._t)("poll|create_poll_action"), canSubmit: false, // need to add a question and at least one option first question: "", options: (0, _arrays.arraySeed)("", DEFAULT_NUM_OPTIONS), busy: false, kind: _matrix.M_POLL_KIND_DISCLOSED, autoFocusTarget: FocusTarget.Topic }; } function editingInitialState(editingMxEvent) { const poll = editingMxEvent.unstableExtensibleEvent; if (!poll?.isEquivalentTo(_matrix.M_POLL_START)) return creatingInitialState(); return { title: (0, _languageHandler._t)("poll|edit_poll_title"), actionLabel: (0, _languageHandler._t)("action|done"), canSubmit: true, question: poll.question.text, options: poll.answers.map(ans => ans.text), busy: false, kind: poll.kind, autoFocusTarget: FocusTarget.Topic }; } class PollCreateDialog extends _ScrollableBaseModal.default { constructor(props) { super(props); (0, _defineProperty2.default)(this, "addOptionRef", /*#__PURE__*/(0, _react.createRef)()); (0, _defineProperty2.default)(this, "onQuestionChange", e => { this.setState({ question: e.target.value }, () => this.checkCanSubmit()); }); (0, _defineProperty2.default)(this, "onOptionChange", (i, e) => { const newOptions = (0, _arrays.arrayFastClone)(this.state.options); newOptions[i] = e.target.value; this.setState({ options: newOptions }, () => this.checkCanSubmit()); }); (0, _defineProperty2.default)(this, "onOptionRemove", i => { const newOptions = (0, _arrays.arrayFastClone)(this.state.options); newOptions.splice(i, 1); this.setState({ options: newOptions }, () => this.checkCanSubmit()); }); (0, _defineProperty2.default)(this, "onOptionAdd", () => { const newOptions = (0, _arrays.arrayFastClone)(this.state.options); newOptions.push(""); this.setState({ options: newOptions, autoFocusTarget: FocusTarget.NewOption }, () => { // Scroll the button into view after the state update to ensure we don't experience // a pop-in effect, and to avoid the button getting cut off due to a mid-scroll render. this.addOptionRef.current?.scrollIntoView?.(); }); }); (0, _defineProperty2.default)(this, "onPollTypeChange", e => { this.setState({ kind: _matrix.M_POLL_KIND_DISCLOSED.matches(e.target.value) ? _matrix.M_POLL_KIND_DISCLOSED : _matrix.M_POLL_KIND_UNDISCLOSED }); }); this.state = props.editingMxEvent ? editingInitialState(props.editingMxEvent) : creatingInitialState(); } checkCanSubmit() { this.setState({ canSubmit: !this.state.busy && this.state.question.trim().length > 0 && this.state.options.filter(op => op.trim().length > 0).length >= MIN_OPTIONS }); } createEvent() { const pollStart = _PollStartEvent.PollStartEvent.from(this.state.question.trim(), this.state.options.map(a => a.trim()).filter(a => !!a), this.state.kind.name).serialize(); if (!this.props.editingMxEvent) { return pollStart; } else { return { content: { "m.new_content": pollStart.content, "m.relates_to": { rel_type: "m.replace", event_id: this.props.editingMxEvent.getId() } }, type: pollStart.type }; } } submit() { this.setState({ busy: true, canSubmit: false }); const pollEvent = this.createEvent(); (0, _localRoom.doMaybeLocalRoomAction)(this.props.room.roomId, actualRoomId => this.matrixClient.sendEvent(actualRoomId, this.props.threadId ?? null, pollEvent.type, pollEvent.content), this.matrixClient).then(() => this.props.onFinished(true)).catch(e => { console.error("Failed to post poll:", e); _Modal.default.createDialog(_QuestionDialog.default, { title: (0, _languageHandler._t)("poll|failed_send_poll_title"), description: (0, _languageHandler._t)("poll|failed_send_poll_description"), button: (0, _languageHandler._t)("action|try_again"), cancelButton: (0, _languageHandler._t)("action|cancel"), onFinished: tryAgain => { if (!tryAgain) { this.cancel(); } else { this.setState({ busy: false, canSubmit: true }); } } }); }); } cancel() { this.props.onFinished(false); } renderContent() { return /*#__PURE__*/_react.default.createElement("div", { className: "mx_PollCreateDialog" }, /*#__PURE__*/_react.default.createElement("h2", null, (0, _languageHandler._t)("poll|type_heading")), /*#__PURE__*/_react.default.createElement(_Field.default, { element: "select", value: this.state.kind.name, onChange: this.onPollTypeChange }, /*#__PURE__*/_react.default.createElement("option", { key: _matrix.M_POLL_KIND_DISCLOSED.name, value: _matrix.M_POLL_KIND_DISCLOSED.name }, (0, _languageHandler._t)("poll|type_open")), /*#__PURE__*/_react.default.createElement("option", { key: _matrix.M_POLL_KIND_UNDISCLOSED.name, value: _matrix.M_POLL_KIND_UNDISCLOSED.name }, (0, _languageHandler._t)("poll|type_closed"))), /*#__PURE__*/_react.default.createElement("p", null, pollTypeNotes(this.state.kind)), /*#__PURE__*/_react.default.createElement("h2", null, (0, _languageHandler._t)("poll|topic_heading")), /*#__PURE__*/_react.default.createElement(_Field.default, { id: "poll-topic-input", value: this.state.question, maxLength: MAX_QUESTION_LENGTH, label: (0, _languageHandler._t)("poll|topic_label"), placeholder: (0, _languageHandler._t)("poll|topic_placeholder"), onChange: this.onQuestionChange, usePlaceholderAsHint: true, disabled: this.state.busy, autoFocus: this.state.autoFocusTarget === FocusTarget.Topic }), /*#__PURE__*/_react.default.createElement("h2", null, (0, _languageHandler._t)("poll|options_heading")), this.state.options.map((op, i) => /*#__PURE__*/_react.default.createElement("div", { key: `option_${i}`, className: "mx_PollCreateDialog_option" }, /*#__PURE__*/_react.default.createElement(_Field.default, { id: `pollcreate_option_${i}`, value: op, maxLength: MAX_OPTION_LENGTH, label: (0, _languageHandler._t)("poll|options_label", { number: i + 1 }), placeholder: (0, _languageHandler._t)("poll|options_placeholder"), onChange: e => this.onOptionChange(i, e), usePlaceholderAsHint: true, disabled: this.state.busy, autoFocus: this.state.autoFocusTarget === FocusTarget.NewOption && i === this.state.options.length - 1 }), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { onClick: () => this.onOptionRemove(i), className: "mx_PollCreateDialog_removeOption", disabled: this.state.busy }))), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, { onClick: this.onOptionAdd, disabled: this.state.busy || this.state.options.length >= MAX_OPTIONS, kind: "secondary", className: "mx_PollCreateDialog_addOption", ref: this.addOptionRef }, (0, _languageHandler._t)("poll|options_add_button")), this.state.busy && /*#__PURE__*/_react.default.createElement("div", { className: "mx_PollCreateDialog_busy" }, /*#__PURE__*/_react.default.createElement(_Spinner.default, null))); } } exports.default = PollCreateDialog; function pollTypeNotes(kind) { if (_matrix.M_POLL_KIND_DISCLOSED.matches(kind.name)) { return (0, _languageHandler._t)("poll|disclosed_notes"); } else { return (0, _languageHandler._t)("poll|notes"); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfbWF0cml4IiwiX1BvbGxTdGFydEV2ZW50IiwiX1Njcm9sbGFibGVCYXNlTW9kYWwiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX1F1ZXN0aW9uRGlhbG9nIiwiX01vZGFsIiwiX2xhbmd1YWdlSGFuZGxlciIsIl9hcnJheXMiLCJfRmllbGQiLCJfQWNjZXNzaWJsZUJ1dHRvbiIsIl9TcGlubmVyIiwiX2xvY2FsUm9vbSIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIkZvY3VzVGFyZ2V0IiwiTUlOX09QVElPTlMiLCJNQVhfT1BUSU9OUyIsIkRFRkFVTFRfTlVNX09QVElPTlMiLCJNQVhfUVVFU1RJT05fTEVOR1RIIiwiTUFYX09QVElPTl9MRU5HVEgiLCJjcmVhdGluZ0luaXRpYWxTdGF0ZSIsInRpdGxlIiwiX3QiLCJhY3Rpb25MYWJlbCIsImNhblN1Ym1pdCIsInF1ZXN0aW9uIiwib3B0aW9ucyIsImFycmF5U2VlZCIsImJ1c3kiLCJraW5kIiwiTV9QT0xMX0tJTkRfRElTQ0xPU0VEIiwiYXV0b0ZvY3VzVGFyZ2V0IiwiVG9waWMiLCJlZGl0aW5nSW5pdGlhbFN0YXRlIiwiZWRpdGluZ014RXZlbnQiLCJwb2xsIiwidW5zdGFibGVFeHRlbnNpYmxlRXZlbnQiLCJpc0VxdWl2YWxlbnRUbyIsIk1fUE9MTF9TVEFSVCIsInRleHQiLCJhbnN3ZXJzIiwibWFwIiwiYW5zIiwiUG9sbENyZWF0ZURpYWxvZyIsIlNjcm9sbGFibGVCYXNlTW9kYWwiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiX2RlZmluZVByb3BlcnR5MiIsImNyZWF0ZVJlZiIsInNldFN0YXRlIiwidGFyZ2V0IiwidmFsdWUiLCJjaGVja0NhblN1Ym1pdCIsIm5ld09wdGlvbnMiLCJhcnJheUZhc3RDbG9uZSIsInN0YXRlIiwic3BsaWNlIiwicHVzaCIsIk5ld09wdGlvbiIsImFkZE9wdGlvblJlZiIsImN1cnJlbnQiLCJzY3JvbGxJbnRvVmlldyIsIm1hdGNoZXMiLCJNX1BPTExfS0lORF9VTkRJU0NMT1NFRCIsInRyaW0iLCJsZW5ndGgiLCJmaWx0ZXIiLCJvcCIsImNyZWF0ZUV2ZW50IiwicG9sbFN0YXJ0IiwiUG9sbFN0YXJ0RXZlbnQiLCJmcm9tIiwibmFtZSIsInNlcmlhbGl6ZSIsImNvbnRlbnQiLCJyZWxfdHlwZSIsImV2ZW50X2lkIiwiZ2V0SWQiLCJ0eXBlIiwic3VibWl0IiwicG9sbEV2ZW50IiwiZG9NYXliZUxvY2FsUm9vbUFjdGlvbiIsInJvb20iLCJyb29tSWQiLCJhY3R1YWxSb29tSWQiLCJtYXRyaXhDbGllbnQiLCJzZW5kRXZlbnQiLCJ0aHJlYWRJZCIsInRoZW4iLCJvbkZpbmlzaGVkIiwiY2F0Y2giLCJjb25zb2xlIiwiZXJyb3IiLCJNb2RhbCIsImNyZWF0ZURpYWxvZyIsIlF1ZXN0aW9uRGlhbG9nIiwiZGVzY3JpcHRpb24iLCJidXR0b24iLCJjYW5jZWxCdXR0b24iLCJ0cnlBZ2FpbiIsImNhbmNlbCIsInJlbmRlckNvbnRlbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiZWxlbWVudCIsIm9uQ2hhbmdlIiwib25Qb2xsVHlwZUNoYW5nZSIsImtleSIsInBvbGxUeXBlTm90ZXMiLCJpZCIsIm1heExlbmd0aCIsImxhYmVsIiwicGxhY2Vob2xkZXIiLCJvblF1ZXN0aW9uQ2hhbmdlIiwidXNlUGxhY2Vob2xkZXJBc0hpbnQiLCJkaXNhYmxlZCIsImF1dG9Gb2N1cyIsIm51bWJlciIsIm9uT3B0aW9uQ2hhbmdlIiwib25DbGljayIsIm9uT3B0aW9uUmVtb3ZlIiwib25PcHRpb25BZGQiLCJyZWYiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZWxlbWVudHMvUG9sbENyZWF0ZURpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEsIDIwMjIgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7IENoYW5nZUV2ZW50LCBjcmVhdGVSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7XG4gICAgUm9vbSxcbiAgICBNYXRyaXhFdmVudCxcbiAgICBLbm93blBvbGxLaW5kLFxuICAgIE1fUE9MTF9LSU5EX0RJU0NMT1NFRCxcbiAgICBNX1BPTExfS0lORF9VTkRJU0NMT1NFRCxcbiAgICBNX1BPTExfU1RBUlQsXG4gICAgSVBhcnRpYWxFdmVudCxcbiAgICBUaW1lbGluZUV2ZW50cyxcbn0gZnJvbSBcIm1hdHJpeC1qcy1zZGsvc3JjL21hdHJpeFwiO1xuaW1wb3J0IHsgUG9sbFN0YXJ0RXZlbnQgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvZXh0ZW5zaWJsZV9ldmVudHNfdjEvUG9sbFN0YXJ0RXZlbnRcIjtcblxuaW1wb3J0IFNjcm9sbGFibGVCYXNlTW9kYWwsIHsgSVNjcm9sbGFibGVCYXNlU3RhdGUgfSBmcm9tIFwiLi4vZGlhbG9ncy9TY3JvbGxhYmxlQmFzZU1vZGFsXCI7XG5pbXBvcnQgUXVlc3Rpb25EaWFsb2cgZnJvbSBcIi4uL2RpYWxvZ3MvUXVlc3Rpb25EaWFsb2dcIjtcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vLi4vTW9kYWxcIjtcbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IHsgYXJyYXlGYXN0Q2xvbmUsIGFycmF5U2VlZCB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9hcnJheXNcIjtcbmltcG9ydCBGaWVsZCBmcm9tIFwiLi9GaWVsZFwiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24gZnJvbSBcIi4vQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSBcIi4vU3Bpbm5lclwiO1xuaW1wb3J0IHsgZG9NYXliZUxvY2FsUm9vbUFjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi91dGlscy9sb2NhbC1yb29tXCI7XG5cbmludGVyZmFjZSBJUHJvcHMge1xuICAgIHJvb206IFJvb207XG4gICAgdGhyZWFkSWQ/OiBzdHJpbmc7XG4gICAgZWRpdGluZ014RXZlbnQ/OiBNYXRyaXhFdmVudDsgLy8gVHJ1dGh5IGlmIHdlIGFyZSBlZGl0aW5nIGFuIGV4aXN0aW5nIHBvbGxcbiAgICBvbkZpbmlzaGVkKHBvbGxDcmVhdGVkPzogYm9vbGVhbik6IHZvaWQ7XG59XG5cbmVudW0gRm9jdXNUYXJnZXQge1xuICAgIFRvcGljLFxuICAgIE5ld09wdGlvbixcbn1cbmludGVyZmFjZSBJU3RhdGUgZXh0ZW5kcyBJU2Nyb2xsYWJsZUJhc2VTdGF0ZSB7XG4gICAgcXVlc3Rpb246IHN0cmluZztcbiAgICBvcHRpb25zOiBzdHJpbmdbXTtcbiAgICBidXN5OiBib29sZWFuO1xuICAgIGtpbmQ6IEtub3duUG9sbEtpbmQ7XG4gICAgYXV0b0ZvY3VzVGFyZ2V0OiBGb2N1c1RhcmdldDtcbn1cblxuY29uc3QgTUlOX09QVElPTlMgPSAyO1xuY29uc3QgTUFYX09QVElPTlMgPSAyMDtcbmNvbnN0IERFRkFVTFRfTlVNX09QVElPTlMgPSAyO1xuY29uc3QgTUFYX1FVRVNUSU9OX0xFTkdUSCA9IDM0MDtcbmNvbnN0IE1BWF9PUFRJT05fTEVOR1RIID0gMzQwO1xuXG5mdW5jdGlvbiBjcmVhdGluZ0luaXRpYWxTdGF0ZSgpOiBJU3RhdGUge1xuICAgIHJldHVybiB7XG4gICAgICAgIHRpdGxlOiBfdChcInBvbGx8Y3JlYXRlX3BvbGxfdGl0bGVcIiksXG4gICAgICAgIGFjdGlvbkxhYmVsOiBfdChcInBvbGx8Y3JlYXRlX3BvbGxfYWN0aW9uXCIpLFxuICAgICAgICBjYW5TdWJtaXQ6IGZhbHNlLCAvLyBuZWVkIHRvIGFkZCBhIHF1ZXN0aW9uIGFuZCBhdCBsZWFzdCBvbmUgb3B0aW9uIGZpcnN0XG4gICAgICAgIHF1ZXN0aW9uOiBcIlwiLFxuICAgICAgICBvcHRpb25zOiBhcnJheVNlZWQoXCJcIiwgREVGQVVMVF9OVU1fT1BUSU9OUyksXG4gICAgICAgIGJ1c3k6IGZhbHNlLFxuICAgICAgICBraW5kOiBNX1BPTExfS0lORF9ESVNDTE9TRUQsXG4gICAgICAgIGF1dG9Gb2N1c1RhcmdldDogRm9jdXNUYXJnZXQuVG9waWMsXG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZWRpdGluZ0luaXRpYWxTdGF0ZShlZGl0aW5nTXhFdmVudDogTWF0cml4RXZlbnQpOiBJU3RhdGUge1xuICAgIGNvbnN0IHBvbGwgPSBlZGl0aW5nTXhFdmVudC51bnN0YWJsZUV4dGVuc2libGVFdmVudCBhcyBQb2xsU3RhcnRFdmVudDtcbiAgICBpZiAoIXBvbGw/LmlzRXF1aXZhbGVudFRvKE1fUE9MTF9TVEFSVCkpIHJldHVybiBjcmVhdGluZ0luaXRpYWxTdGF0ZSgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdGl0bGU6IF90KFwicG9sbHxlZGl0X3BvbGxfdGl0bGVcIiksXG4gICAgICAgIGFjdGlvbkxhYmVsOiBfdChcImFjdGlvbnxkb25lXCIpLFxuICAgICAgICBjYW5TdWJtaXQ6IHRydWUsXG4gICAgICAgIHF1ZXN0aW9uOiBwb2xsLnF1ZXN0aW9uLnRleHQsXG4gICAgICAgIG9wdGlvbnM6IHBvbGwuYW5zd2Vycy5tYXAoKGFucykgPT4gYW5zLnRleHQpLFxuICAgICAgICBidXN5OiBmYWxzZSxcbiAgICAgICAga2luZDogcG9sbC5raW5kLFxuICAgICAgICBhdXRvRm9jdXNUYXJnZXQ6IEZvY3VzVGFyZ2V0LlRvcGljLFxuICAgIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvbGxDcmVhdGVEaWFsb2cgZXh0ZW5kcyBTY3JvbGxhYmxlQmFzZU1vZGFsPElQcm9wcywgSVN0YXRlPiB7XG4gICAgcHJpdmF0ZSBhZGRPcHRpb25SZWYgPSBjcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IocHJvcHM6IElQcm9wcykge1xuICAgICAgICBzdXBlcihwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHByb3BzLmVkaXRpbmdNeEV2ZW50ID8gZWRpdGluZ0luaXRpYWxTdGF0ZShwcm9wcy5lZGl0aW5nTXhFdmVudCkgOiBjcmVhdGluZ0luaXRpYWxTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tDYW5TdWJtaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgICAgY2FuU3VibWl0OlxuICAgICAgICAgICAgICAgICF0aGlzLnN0YXRlLmJ1c3kgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlLnF1ZXN0aW9uLnRyaW0oKS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5vcHRpb25zLmZpbHRlcigob3ApID0+IG9wLnRyaW0oKS5sZW5ndGggPiAwKS5sZW5ndGggPj0gTUlOX09QVElPTlMsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25RdWVzdGlvbkNoYW5nZSA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcXVlc3Rpb246IGUudGFyZ2V0LnZhbHVlIH0sICgpID0+IHRoaXMuY2hlY2tDYW5TdWJtaXQoKSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25PcHRpb25DaGFuZ2UgPSAoaTogbnVtYmVyLCBlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gYXJyYXlGYXN0Q2xvbmUodGhpcy5zdGF0ZS5vcHRpb25zKTtcbiAgICAgICAgbmV3T3B0aW9uc1tpXSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgb3B0aW9uczogbmV3T3B0aW9ucyB9LCAoKSA9PiB0aGlzLmNoZWNrQ2FuU3VibWl0KCkpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIG9uT3B0aW9uUmVtb3ZlID0gKGk6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gYXJyYXlGYXN0Q2xvbmUodGhpcy5zdGF0ZS5vcHRpb25zKTtcbiAgICAgICAgbmV3T3B0aW9ucy5zcGxpY2UoaSwgMSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcHRpb25zOiBuZXdPcHRpb25zIH0sICgpID0+IHRoaXMuY2hlY2tDYW5TdWJtaXQoKSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25PcHRpb25BZGQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IG5ld09wdGlvbnMgPSBhcnJheUZhc3RDbG9uZSh0aGlzLnN0YXRlLm9wdGlvbnMpO1xuICAgICAgICBuZXdPcHRpb25zLnB1c2goXCJcIik7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcHRpb25zOiBuZXdPcHRpb25zLCBhdXRvRm9jdXNUYXJnZXQ6IEZvY3VzVGFyZ2V0Lk5ld09wdGlvbiB9LCAoKSA9PiB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgdGhlIGJ1dHRvbiBpbnRvIHZpZXcgYWZ0ZXIgdGhlIHN0YXRlIHVwZGF0ZSB0byBlbnN1cmUgd2UgZG9uJ3QgZXhwZXJpZW5jZVxuICAgICAgICAgICAgLy8gYSBwb3AtaW4gZWZmZWN0LCBhbmQgdG8gYXZvaWQgdGhlIGJ1dHRvbiBnZXR0aW5nIGN1dCBvZmYgZHVlIHRvIGEgbWlkLXNjcm9sbCByZW5kZXIuXG4gICAgICAgICAgICB0aGlzLmFkZE9wdGlvblJlZi5jdXJyZW50Py5zY3JvbGxJbnRvVmlldz8uKCk7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGNyZWF0ZUV2ZW50KCk6IElQYXJ0aWFsRXZlbnQ8b2JqZWN0PiB7XG4gICAgICAgIGNvbnN0IHBvbGxTdGFydCA9IFBvbGxTdGFydEV2ZW50LmZyb20oXG4gICAgICAgICAgICB0aGlzLnN0YXRlLnF1ZXN0aW9uLnRyaW0oKSxcbiAgICAgICAgICAgIHRoaXMuc3RhdGUub3B0aW9ucy5tYXAoKGEpID0+IGEudHJpbSgpKS5maWx0ZXIoKGEpID0+ICEhYSksXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmtpbmQubmFtZSxcbiAgICAgICAgKS5zZXJpYWxpemUoKTtcblxuICAgICAgICBpZiAoIXRoaXMucHJvcHMuZWRpdGluZ014RXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBwb2xsU3RhcnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgICAgICAgICAgICAgXCJtLm5ld19jb250ZW50XCI6IHBvbGxTdGFydC5jb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBcIm0ucmVsYXRlc190b1wiOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxfdHlwZTogXCJtLnJlcGxhY2VcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X2lkOiB0aGlzLnByb3BzLmVkaXRpbmdNeEV2ZW50LmdldElkKCksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiBwb2xsU3RhcnQudHlwZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc3VibWl0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgYnVzeTogdHJ1ZSwgY2FuU3VibWl0OiBmYWxzZSB9KTtcbiAgICAgICAgY29uc3QgcG9sbEV2ZW50ID0gdGhpcy5jcmVhdGVFdmVudCgpO1xuICAgICAgICBkb01heWJlTG9jYWxSb29tQWN0aW9uKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5yb29tLnJvb21JZCxcbiAgICAgICAgICAgIChhY3R1YWxSb29tSWQ6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLm1hdHJpeENsaWVudC5zZW5kRXZlbnQoXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbFJvb21JZCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy50aHJlYWRJZCA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgICBwb2xsRXZlbnQudHlwZSBhcyBrZXlvZiBUaW1lbGluZUV2ZW50cyxcbiAgICAgICAgICAgICAgICAgICAgcG9sbEV2ZW50LmNvbnRlbnQgYXMgVGltZWxpbmVFdmVudHNba2V5b2YgVGltZWxpbmVFdmVudHNdLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLm1hdHJpeENsaWVudCxcbiAgICAgICAgKVxuICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5wcm9wcy5vbkZpbmlzaGVkKHRydWUpKVxuICAgICAgICAgICAgLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkZhaWxlZCB0byBwb3N0IHBvbGw6XCIsIGUpO1xuICAgICAgICAgICAgICAgIE1vZGFsLmNyZWF0ZURpYWxvZyhRdWVzdGlvbkRpYWxvZywge1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogX3QoXCJwb2xsfGZhaWxlZF9zZW5kX3BvbGxfdGl0bGVcIiksXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBfdChcInBvbGx8ZmFpbGVkX3NlbmRfcG9sbF9kZXNjcmlwdGlvblwiKSxcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uOiBfdChcImFjdGlvbnx0cnlfYWdhaW5cIiksXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbEJ1dHRvbjogX3QoXCJhY3Rpb258Y2FuY2VsXCIpLFxuICAgICAgICAgICAgICAgICAgICBvbkZpbmlzaGVkOiAodHJ5QWdhaW46IGJvb2xlYW4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJ5QWdhaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgYnVzeTogZmFsc2UsIGNhblN1Ym1pdDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjYW5jZWwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucHJvcHMub25GaW5pc2hlZChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlbmRlckNvbnRlbnQoKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibXhfUG9sbENyZWF0ZURpYWxvZ1wiPlxuICAgICAgICAgICAgICAgIDxoMj57X3QoXCJwb2xsfHR5cGVfaGVhZGluZ1wiKX08L2gyPlxuICAgICAgICAgICAgICAgIDxGaWVsZCBlbGVtZW50PVwic2VsZWN0XCIgdmFsdWU9e3RoaXMuc3RhdGUua2luZC5uYW1lfSBvbkNoYW5nZT17dGhpcy5vblBvbGxUeXBlQ2hhbmdlfT5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBrZXk9e01fUE9MTF9LSU5EX0RJU0NMT1NFRC5uYW1lfSB2YWx1ZT17TV9QT0xMX0tJTkRfRElTQ0xPU0VELm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwicG9sbHx0eXBlX29wZW5cIil9XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGtleT17TV9QT0xMX0tJTkRfVU5ESVNDTE9TRUQubmFtZX0gdmFsdWU9e01fUE9MTF9LSU5EX1VORElTQ0xPU0VELm5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwicG9sbHx0eXBlX2Nsb3NlZFwiKX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9GaWVsZD5cbiAgICAgICAgICAgICAgICA8cD57cG9sbFR5cGVOb3Rlcyh0aGlzLnN0YXRlLmtpbmQpfTwvcD5cbiAgICAgICAgICAgICAgICA8aDI+e190KFwicG9sbHx0b3BpY19oZWFkaW5nXCIpfTwvaDI+XG4gICAgICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgICAgIGlkPVwicG9sbC10b3BpYy1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnF1ZXN0aW9ufVxuICAgICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9e01BWF9RVUVTVElPTl9MRU5HVEh9XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPXtfdChcInBvbGx8dG9waWNfbGFiZWxcIil9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtfdChcInBvbGx8dG9waWNfcGxhY2Vob2xkZXJcIil9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uUXVlc3Rpb25DaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgIHVzZVBsYWNlaG9sZGVyQXNIaW50PXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5idXN5fVxuICAgICAgICAgICAgICAgICAgICBhdXRvRm9jdXM9e3RoaXMuc3RhdGUuYXV0b0ZvY3VzVGFyZ2V0ID09PSBGb2N1c1RhcmdldC5Ub3BpY31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxoMj57X3QoXCJwb2xsfG9wdGlvbnNfaGVhZGluZ1wiKX08L2gyPlxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLm9wdGlvbnMubWFwKChvcCwgaSkgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGtleT17YG9wdGlvbl8ke2l9YH0gY2xhc3NOYW1lPVwibXhfUG9sbENyZWF0ZURpYWxvZ19vcHRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxGaWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPXtgcG9sbGNyZWF0ZV9vcHRpb25fJHtpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e29wfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heExlbmd0aD17TUFYX09QVElPTl9MRU5HVEh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e190KFwicG9sbHxvcHRpb25zX2xhYmVsXCIsIHsgbnVtYmVyOiBpICsgMSB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17X3QoXCJwb2xsfG9wdGlvbnNfcGxhY2Vob2xkZXJcIil9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9eyhlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdGhpcy5vbk9wdGlvbkNoYW5nZShpLCBlKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VQbGFjZWhvbGRlckFzSGludD17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5idXN5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUuYXV0b0ZvY3VzVGFyZ2V0ID09PSBGb2N1c1RhcmdldC5OZXdPcHRpb24gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gdGhpcy5zdGF0ZS5vcHRpb25zLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLm9uT3B0aW9uUmVtb3ZlKGkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cIm14X1BvbGxDcmVhdGVEaWFsb2dfcmVtb3ZlT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17dGhpcy5zdGF0ZS5idXN5fVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5vbk9wdGlvbkFkZH1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3RoaXMuc3RhdGUuYnVzeSB8fCB0aGlzLnN0YXRlLm9wdGlvbnMubGVuZ3RoID49IE1BWF9PUFRJT05TfVxuICAgICAgICAgICAgICAgICAgICBraW5kPVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfUG9sbENyZWF0ZURpYWxvZ19hZGRPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICByZWY9e3RoaXMuYWRkT3B0aW9uUmVmfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge190KFwicG9sbHxvcHRpb25zX2FkZF9idXR0b25cIil9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLmJ1c3kgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm14X1BvbGxDcmVhdGVEaWFsb2dfYnVzeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNwaW5uZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblBvbGxUeXBlQ2hhbmdlID0gKGU6IENoYW5nZUV2ZW50PEhUTUxTZWxlY3RFbGVtZW50Pik6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgIGtpbmQ6IE1fUE9MTF9LSU5EX0RJU0NMT1NFRC5tYXRjaGVzKGUudGFyZ2V0LnZhbHVlKSA/IE1fUE9MTF9LSU5EX0RJU0NMT1NFRCA6IE1fUE9MTF9LSU5EX1VORElTQ0xPU0VELFxuICAgICAgICB9KTtcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBwb2xsVHlwZU5vdGVzKGtpbmQ6IEtub3duUG9sbEtpbmQpOiBzdHJpbmcge1xuICAgIGlmIChNX1BPTExfS0lORF9ESVNDTE9TRUQubWF0Y2hlcyhraW5kLm5hbWUpKSB7XG4gICAgICAgIHJldHVybiBfdChcInBvbGx8ZGlzY2xvc2VkX25vdGVzXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfdChcInBvbGx8bm90ZXNcIik7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQVVBLElBQUFFLGVBQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLG9CQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7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