@pie-element/math-inline 12.2.2-beta.4 → 12.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -28
- package/configure/CHANGELOG.md +48 -28
- package/configure/lib/general-config-block.js +3 -3
- package/configure/lib/general-config-block.js.map +1 -1
- package/configure/lib/response.js +7 -7
- package/configure/lib/response.js.map +1 -1
- package/configure/package.json +7 -7
- package/controller/CHANGELOG.md +3 -47
- package/controller/package.json +1 -1
- package/lib/main.js +7 -7
- package/lib/main.js.map +1 -1
- package/lib/simple-question-block.js +2 -2
- package/lib/simple-question-block.js.map +1 -1
- package/package.json +6 -6
- package/configure/lib/__tests__/configure.test.js +0 -237
- package/controller/lib/__tests__/index.test.js +0 -1416
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/main.test.js +0 -516
- package/lib/__tests__/simple-question-block.test.js +0 -129
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
5
|
-
var React = _interopRequireWildcard(require("react"));
|
|
6
|
-
var _react2 = require("@testing-library/react");
|
|
7
|
-
var _mathInputMathlive = require("@pie-lib/math-input-mathlive");
|
|
8
|
-
var _mathToolbar = require("@pie-lib/math-toolbar");
|
|
9
|
-
var _simpleQuestionBlock = _interopRequireDefault(require("../simple-question-block"));
|
|
10
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
-
jest.mock('@pie-lib/math-input-mathlive', () => ({
|
|
12
|
-
mq: {
|
|
13
|
-
Static: props => /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
|
|
14
|
-
"data-testid": "mq-static"
|
|
15
|
-
}, props))
|
|
16
|
-
}
|
|
17
|
-
}));
|
|
18
|
-
jest.mock('@pie-lib/math-toolbar', () => ({
|
|
19
|
-
MathToolbar: props => /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
|
|
20
|
-
"data-testid": "math-toolbar"
|
|
21
|
-
}, props))
|
|
22
|
-
}));
|
|
23
|
-
describe('SimpleQuestionBlock', () => {
|
|
24
|
-
const defaultProps = {
|
|
25
|
-
model: {
|
|
26
|
-
config: {
|
|
27
|
-
mode: 'advanced',
|
|
28
|
-
feedback: {
|
|
29
|
-
correct: {
|
|
30
|
-
default: 'Correct',
|
|
31
|
-
type: 'none'
|
|
32
|
-
},
|
|
33
|
-
incorrect: {
|
|
34
|
-
default: 'Incorrect',
|
|
35
|
-
type: 'none'
|
|
36
|
-
},
|
|
37
|
-
partial: {
|
|
38
|
-
default: 'Nearly',
|
|
39
|
-
type: 'none'
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
equationEditor: 'miscellaneous',
|
|
43
|
-
expression: 'n = {\\embed{answerBlock}[answerBlock1]}',
|
|
44
|
-
question: '<p>The binomial <math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>x</mi><mo>−</mo><mn>2</mn> </math> is a factor of the polynomial below.</p><p><span class="equation-block"><math xmlns="http://www.w3.org/1998/Math/MathML"> <mi>f</mi><mo stretchy="false">(</mo><mi>x</mi><mo stretchy="false">)</mo><mo>=</mo><msup> <mi>x</mi> <mn>3</mn> </msup> <mo>+</mo><msup> <mi>x</mi> <mn>2</mn> </msup> <mo>+</mo><mi>n</mi><mi>x</mi><mo>+</mo><mn>10</mn> </math> </span></p><p>What is the value of <span class="variable">n</span>? Use the on-screen keyboard to type the correct answer in the box.</p>',
|
|
45
|
-
note: 'The answer shown above is the primary correct answer specified by the author for this item, but other answers may also be recognized as correct.',
|
|
46
|
-
responses: [{
|
|
47
|
-
answer: 'n=-11',
|
|
48
|
-
id: 'answerBlock1',
|
|
49
|
-
alternates: {},
|
|
50
|
-
validation: 'literal'
|
|
51
|
-
}],
|
|
52
|
-
response: {
|
|
53
|
-
answer: 'n=-11',
|
|
54
|
-
id: 'answerBlock1',
|
|
55
|
-
alternates: {},
|
|
56
|
-
validation: 'literal'
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
correctness: {},
|
|
61
|
-
showCorrect: false,
|
|
62
|
-
session: {
|
|
63
|
-
response: 'sessionResponse'
|
|
64
|
-
},
|
|
65
|
-
onSimpleResponseChange: jest.fn(),
|
|
66
|
-
onSubFieldFocus: jest.fn(),
|
|
67
|
-
showKeypad: true
|
|
68
|
-
};
|
|
69
|
-
const wrapper = (props = {}) => {
|
|
70
|
-
return (0, _react2.render)(/*#__PURE__*/React.createElement(_simpleQuestionBlock.default, (0, _extends2.default)({}, defaultProps, props)));
|
|
71
|
-
};
|
|
72
|
-
const createInstance = (props = {}) => {
|
|
73
|
-
const instanceProps = {
|
|
74
|
-
...defaultProps,
|
|
75
|
-
...props
|
|
76
|
-
};
|
|
77
|
-
const instance = new _simpleQuestionBlock.default(instanceProps);
|
|
78
|
-
instance.setState = jest.fn(state => {
|
|
79
|
-
Object.assign(instance.state, typeof state === 'function' ? state(instance.state) : state);
|
|
80
|
-
});
|
|
81
|
-
return instance;
|
|
82
|
-
};
|
|
83
|
-
it('renders correctly for not showing correct mode', () => {
|
|
84
|
-
const {
|
|
85
|
-
queryByTestId
|
|
86
|
-
} = wrapper();
|
|
87
|
-
expect(queryByTestId('mq-static')).not.toBeInTheDocument();
|
|
88
|
-
expect(queryByTestId('math-toolbar')).toBeInTheDocument();
|
|
89
|
-
});
|
|
90
|
-
it('renders correctly for showing correct mode', () => {
|
|
91
|
-
const {
|
|
92
|
-
queryByTestId
|
|
93
|
-
} = wrapper({
|
|
94
|
-
showCorrect: true
|
|
95
|
-
});
|
|
96
|
-
expect(queryByTestId('mq-static')).toBeInTheDocument();
|
|
97
|
-
expect(queryByTestId('math-toolbar')).not.toBeInTheDocument();
|
|
98
|
-
});
|
|
99
|
-
it('correctly keeps the keypad open', () => {
|
|
100
|
-
const instance = createInstance();
|
|
101
|
-
instance.onFocus();
|
|
102
|
-
expect(defaultProps.onSubFieldFocus).toHaveBeenCalledWith(instance.mathToolBarId);
|
|
103
|
-
expect(instance.props.showKeypad).toEqual(true);
|
|
104
|
-
instance.mathToolBarContainsTarget = () => true;
|
|
105
|
-
instance.handleClick();
|
|
106
|
-
expect(instance.props.showKeypad).toEqual(true);
|
|
107
|
-
});
|
|
108
|
-
it('correctly hides the keypad', () => {
|
|
109
|
-
const instance = createInstance();
|
|
110
|
-
instance.onFocus();
|
|
111
|
-
expect(defaultProps.onSubFieldFocus).toHaveBeenCalledWith(instance.mathToolBarId);
|
|
112
|
-
expect(instance.props.showKeypad).toEqual(true);
|
|
113
|
-
|
|
114
|
-
// Simulate clicking outside the toolbar (to hide the keypad)
|
|
115
|
-
instance.mathToolBarContainsTarget = () => false;
|
|
116
|
-
instance.handleClick();
|
|
117
|
-
|
|
118
|
-
// Create new instance with showKeypad: false to simulate parent component reaction
|
|
119
|
-
const newInstance = createInstance({
|
|
120
|
-
showKeypad: false
|
|
121
|
-
});
|
|
122
|
-
expect(newInstance.props.showKeypad).toEqual(false);
|
|
123
|
-
});
|
|
124
|
-
it('does not call session change on render', () => {
|
|
125
|
-
wrapper();
|
|
126
|
-
expect(defaultProps.onSimpleResponseChange).not.toHaveBeenCalled();
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfbWF0aElucHV0TWF0aGxpdmUiLCJfbWF0aFRvb2xiYXIiLCJfc2ltcGxlUXVlc3Rpb25CbG9jayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJkZWZhdWx0IiwiaGFzIiwiZ2V0Iiwic2V0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJqZXN0IiwibW9jayIsIm1xIiwiU3RhdGljIiwicHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiTWF0aFRvb2xiYXIiLCJkZXNjcmliZSIsImRlZmF1bHRQcm9wcyIsIm1vZGVsIiwiY29uZmlnIiwibW9kZSIsImZlZWRiYWNrIiwiY29ycmVjdCIsInR5cGUiLCJpbmNvcnJlY3QiLCJwYXJ0aWFsIiwiZXF1YXRpb25FZGl0b3IiLCJleHByZXNzaW9uIiwicXVlc3Rpb24iLCJub3RlIiwicmVzcG9uc2VzIiwiYW5zd2VyIiwiaWQiLCJhbHRlcm5hdGVzIiwidmFsaWRhdGlvbiIsInJlc3BvbnNlIiwiY29ycmVjdG5lc3MiLCJzaG93Q29ycmVjdCIsInNlc3Npb24iLCJvblNpbXBsZVJlc3BvbnNlQ2hhbmdlIiwiZm4iLCJvblN1YkZpZWxkRm9jdXMiLCJzaG93S2V5cGFkIiwid3JhcHBlciIsInJlbmRlciIsImNyZWF0ZUluc3RhbmNlIiwiaW5zdGFuY2VQcm9wcyIsImluc3RhbmNlIiwiU2ltcGxlUXVlc3Rpb25CbG9jayIsInNldFN0YXRlIiwic3RhdGUiLCJhc3NpZ24iLCJpdCIsInF1ZXJ5QnlUZXN0SWQiLCJleHBlY3QiLCJub3QiLCJ0b0JlSW5UaGVEb2N1bWVudCIsIm9uRm9jdXMiLCJ0b0hhdmVCZWVuQ2FsbGVkV2l0aCIsIm1hdGhUb29sQmFySWQiLCJ0b0VxdWFsIiwibWF0aFRvb2xCYXJDb250YWluc1RhcmdldCIsImhhbmRsZUNsaWNrIiwibmV3SW5zdGFuY2UiLCJ0b0hhdmVCZWVuQ2FsbGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9zaW1wbGUtcXVlc3Rpb24tYmxvY2sudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIgfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCB7IG1xIH0gZnJvbSAnQHBpZS1saWIvbWF0aC1pbnB1dC1tYXRobGl2ZSc7XG5pbXBvcnQgeyBNYXRoVG9vbGJhciB9IGZyb20gJ0BwaWUtbGliL21hdGgtdG9vbGJhcic7XG5pbXBvcnQgU2ltcGxlUXVlc3Rpb25CbG9jayBmcm9tICcuLi9zaW1wbGUtcXVlc3Rpb24tYmxvY2snO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL21hdGgtaW5wdXQtbWF0aGxpdmUnLCAoKSA9PiAoe1xuICBtcToge1xuICAgIFN0YXRpYzogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwibXEtc3RhdGljXCIgey4uLnByb3BzfSAvPixcbiAgfSxcbn0pKTtcblxuamVzdC5tb2NrKCdAcGllLWxpYi9tYXRoLXRvb2xiYXInLCAoKSA9PiAoe1xuICBNYXRoVG9vbGJhcjogKHByb3BzKSA9PiA8ZGl2IGRhdGEtdGVzdGlkPVwibWF0aC10b29sYmFyXCIgey4uLnByb3BzfSAvPixcbn0pKTtcblxuZGVzY3JpYmUoJ1NpbXBsZVF1ZXN0aW9uQmxvY2snLCAoKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRQcm9wcyA9IHtcbiAgICBtb2RlbDoge1xuICAgICAgY29uZmlnOiB7XG4gICAgICAgIG1vZGU6ICdhZHZhbmNlZCcsXG4gICAgICAgIGZlZWRiYWNrOiB7XG4gICAgICAgICAgY29ycmVjdDoge1xuICAgICAgICAgICAgZGVmYXVsdDogJ0NvcnJlY3QnLFxuICAgICAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5jb3JyZWN0OiB7XG4gICAgICAgICAgICBkZWZhdWx0OiAnSW5jb3JyZWN0JyxcbiAgICAgICAgICAgIHR5cGU6ICdub25lJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcnRpYWw6IHtcbiAgICAgICAgICAgIGRlZmF1bHQ6ICdOZWFybHknLFxuICAgICAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGVxdWF0aW9uRWRpdG9yOiAnbWlzY2VsbGFuZW91cycsXG4gICAgICAgIGV4cHJlc3Npb246ICduID0ge1xcXFxlbWJlZHthbnN3ZXJCbG9ja31bYW5zd2VyQmxvY2sxXX0nLFxuICAgICAgICBxdWVzdGlvbjpcbiAgICAgICAgICAnPHA+VGhlIGJpbm9taWFsIDxtYXRoIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiPiA8bWk+eDwvbWk+PG1vPiYjODcyMjs8L21vPjxtbj4yPC9tbj4gPC9tYXRoPiBpcyBhIGZhY3RvciBvZiB0aGUgcG9seW5vbWlhbCBiZWxvdy48L3A+PHA+PHNwYW4gY2xhc3M9XCJlcXVhdGlvbi1ibG9ja1wiPjxtYXRoIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiPiA8bWk+ZjwvbWk+PG1vIHN0cmV0Y2h5PVwiZmFsc2VcIj4oPC9tbz48bWk+eDwvbWk+PG1vIHN0cmV0Y2h5PVwiZmFsc2VcIj4pPC9tbz48bW8+PTwvbW8+PG1zdXA+IDxtaT54PC9taT4gPG1uPjM8L21uPiA8L21zdXA+IDxtbz4rPC9tbz48bXN1cD4gPG1pPng8L21pPiA8bW4+MjwvbW4+IDwvbXN1cD4gPG1vPis8L21vPjxtaT5uPC9taT48bWk+eDwvbWk+PG1vPis8L21vPjxtbj4xMDwvbW4+IDwvbWF0aD4gPC9zcGFuPjwvcD48cD5XaGF0IGlzIHRoZSB2YWx1ZSBvZiA8c3BhbiBjbGFzcz1cInZhcmlhYmxlXCI+bjwvc3Bhbj4/IFVzZSB0aGUgb24tc2NyZWVuIGtleWJvYXJkJiMxNjA7dG8gdHlwZSB0aGUgY29ycmVjdCBhbnN3ZXIgaW4gdGhlIGJveC48L3A+JyxcbiAgICAgICAgbm90ZTogJ1RoZSBhbnN3ZXIgc2hvd24gYWJvdmUgaXMgdGhlIHByaW1hcnkgY29ycmVjdCBhbnN3ZXIgc3BlY2lmaWVkIGJ5IHRoZSBhdXRob3IgZm9yIHRoaXMgaXRlbSwgYnV0IG90aGVyIGFuc3dlcnMgbWF5IGFsc28gYmUgcmVjb2duaXplZCBhcyBjb3JyZWN0LicsXG4gICAgICAgIHJlc3BvbnNlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFuc3dlcjogJ249LTExJyxcbiAgICAgICAgICAgIGlkOiAnYW5zd2VyQmxvY2sxJyxcbiAgICAgICAgICAgIGFsdGVybmF0ZXM6IHt9LFxuICAgICAgICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIHJlc3BvbnNlOiB7XG4gICAgICAgICAgYW5zd2VyOiAnbj0tMTEnLFxuICAgICAgICAgIGlkOiAnYW5zd2VyQmxvY2sxJyxcbiAgICAgICAgICBhbHRlcm5hdGVzOiB7fSxcbiAgICAgICAgICB2YWxpZGF0aW9uOiAnbGl0ZXJhbCcsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgY29ycmVjdG5lc3M6IHt9LFxuICAgIHNob3dDb3JyZWN0OiBmYWxzZSxcbiAgICBzZXNzaW9uOiB7XG4gICAgICByZXNwb25zZTogJ3Nlc3Npb25SZXNwb25zZScsXG4gICAgfSxcbiAgICBvblNpbXBsZVJlc3BvbnNlQ2hhbmdlOiBqZXN0LmZuKCksXG4gICAgb25TdWJGaWVsZEZvY3VzOiBqZXN0LmZuKCksXG4gICAgc2hvd0tleXBhZDogdHJ1ZSxcbiAgfTtcblxuICBjb25zdCB3cmFwcGVyID0gKHByb3BzID0ge30pID0+IHtcbiAgICByZXR1cm4gcmVuZGVyKDxTaW1wbGVRdWVzdGlvbkJsb2NrIHsuLi5kZWZhdWx0UHJvcHN9IHsuLi5wcm9wc30gLz4pO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZUluc3RhbmNlID0gKHByb3BzID0ge30pID0+IHtcbiAgICBjb25zdCBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgLi4uZGVmYXVsdFByb3BzLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBTaW1wbGVRdWVzdGlvbkJsb2NrKGluc3RhbmNlUHJvcHMpO1xuICAgIGluc3RhbmNlLnNldFN0YXRlID0gamVzdC5mbigoc3RhdGUpID0+IHtcbiAgICAgIE9iamVjdC5hc3NpZ24oaW5zdGFuY2Uuc3RhdGUsIHR5cGVvZiBzdGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IHN0YXRlKGluc3RhbmNlLnN0YXRlKSA6IHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH07XG5cbiAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IGZvciBub3Qgc2hvd2luZyBjb3JyZWN0IG1vZGUnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBxdWVyeUJ5VGVzdElkIH0gPSB3cmFwcGVyKCk7XG5cbiAgICBleHBlY3QocXVlcnlCeVRlc3RJZCgnbXEtc3RhdGljJykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChxdWVyeUJ5VGVzdElkKCdtYXRoLXRvb2xiYXInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IGZvciBzaG93aW5nIGNvcnJlY3QgbW9kZScsICgpID0+IHtcbiAgICBjb25zdCB7IHF1ZXJ5QnlUZXN0SWQgfSA9IHdyYXBwZXIoeyBzaG93Q29ycmVjdDogdHJ1ZSB9KTtcblxuICAgIGV4cGVjdChxdWVyeUJ5VGVzdElkKCdtcS1zdGF0aWMnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3QocXVlcnlCeVRlc3RJZCgnbWF0aC10b29sYmFyJykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnY29ycmVjdGx5IGtlZXBzIHRoZSBrZXlwYWQgb3BlbicsICgpID0+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNyZWF0ZUluc3RhbmNlKCk7XG5cbiAgICBpbnN0YW5jZS5vbkZvY3VzKCk7XG4gICAgZXhwZWN0KGRlZmF1bHRQcm9wcy5vblN1YkZpZWxkRm9jdXMpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKGluc3RhbmNlLm1hdGhUb29sQmFySWQpO1xuICAgIGV4cGVjdChpbnN0YW5jZS5wcm9wcy5zaG93S2V5cGFkKS50b0VxdWFsKHRydWUpO1xuXG4gICAgaW5zdGFuY2UubWF0aFRvb2xCYXJDb250YWluc1RhcmdldCA9ICgpID0+IHRydWU7XG4gICAgaW5zdGFuY2UuaGFuZGxlQ2xpY2soKTtcblxuICAgIGV4cGVjdChpbnN0YW5jZS5wcm9wcy5zaG93S2V5cGFkKS50b0VxdWFsKHRydWUpO1xuICB9KTtcblxuICBpdCgnY29ycmVjdGx5IGhpZGVzIHRoZSBrZXlwYWQnLCAoKSA9PiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSgpO1xuXG4gICAgaW5zdGFuY2Uub25Gb2N1cygpO1xuICAgIGV4cGVjdChkZWZhdWx0UHJvcHMub25TdWJGaWVsZEZvY3VzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChpbnN0YW5jZS5tYXRoVG9vbEJhcklkKTtcbiAgICBleHBlY3QoaW5zdGFuY2UucHJvcHMuc2hvd0tleXBhZCkudG9FcXVhbCh0cnVlKTtcblxuICAgIC8vIFNpbXVsYXRlIGNsaWNraW5nIG91dHNpZGUgdGhlIHRvb2xiYXIgKHRvIGhpZGUgdGhlIGtleXBhZClcbiAgICBpbnN0YW5jZS5tYXRoVG9vbEJhckNvbnRhaW5zVGFyZ2V0ID0gKCkgPT4gZmFsc2U7XG4gICAgaW5zdGFuY2UuaGFuZGxlQ2xpY2soKTtcblxuICAgIC8vIENyZWF0ZSBuZXcgaW5zdGFuY2Ugd2l0aCBzaG93S2V5cGFkOiBmYWxzZSB0byBzaW11bGF0ZSBwYXJlbnQgY29tcG9uZW50IHJlYWN0aW9uXG4gICAgY29uc3QgbmV3SW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSh7IHNob3dLZXlwYWQ6IGZhbHNlIH0pO1xuXG4gICAgZXhwZWN0KG5ld0luc3RhbmNlLnByb3BzLnNob3dLZXlwYWQpLnRvRXF1YWwoZmFsc2UpO1xuICB9KTtcblxuICBpdCgnZG9lcyBub3QgY2FsbCBzZXNzaW9uIGNoYW5nZSBvbiByZW5kZXInLCAoKSA9PiB7XG4gICAgd3JhcHBlcigpO1xuICAgIGV4cGVjdChkZWZhdWx0UHJvcHMub25TaW1wbGVSZXNwb25zZUNoYW5nZSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGtCQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxvQkFBQSxHQUFBQyxzQkFBQSxDQUFBTCxPQUFBO0FBQTJELFNBQUFELHdCQUFBTyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBVCx1QkFBQSxZQUFBQSxDQUFBTyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEsTUFBQUYsQ0FBQSxHQUFBTCxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxRQUFBRyxDQUFBLENBQUFL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
|