@pie-element/math-inline 7.1.0-next.1 → 7.1.1-next.12
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/LICENSE.md +5 -0
- package/configure/lib/configure.js +1 -1
- package/configure/lib/defaults.js +1 -1
- package/configure/lib/general-config-block.js +1 -1
- package/configure/lib/index.js +1 -1
- package/configure/lib/response.js +1 -1
- package/configure/lib/utils.js +1 -1
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +1 -1
- package/controller/lib/utils.js +1 -1
- package/lib/index.js +1 -1
- package/lib/main.js +1 -1
- package/lib/print.js +1 -1
- package/lib/simple-question-block.js +1 -1
- package/lib/utils.js +1 -1
- package/module/configure.js +16523 -0
- package/module/controller.js +4551 -0
- package/module/element.js +8125 -44
- package/module/manifest.json +1 -1
- package/module/print.js +8125 -44
- package/package.json +2 -2
- package/configure/lib/__tests__/configure.test.js +0 -249
- package/controller/lib/__tests__/index.test.js +0 -2344
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/main.test.js +0 -303
- package/lib/__tests__/simple-question-block.test.js +0 -115
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "7.1.
|
|
7
|
+
"version": "7.1.1-next.12+d6e6b99aa",
|
|
8
8
|
"main": "lib/index.js",
|
|
9
9
|
"description": "",
|
|
10
10
|
"scripts": {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
},
|
|
26
26
|
"author": "",
|
|
27
27
|
"license": "ISC",
|
|
28
|
-
"gitHead": "
|
|
28
|
+
"gitHead": "d6e6b99aa4f47ea97a77e25492b6c4e0a5f4e9ad",
|
|
29
29
|
"module": "src/index.js",
|
|
30
30
|
"exports": {
|
|
31
31
|
".": "./src/index.js",
|
|
@@ -1,249 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
6
|
-
|
|
7
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
8
|
-
|
|
9
|
-
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
-
|
|
11
|
-
var React = _interopRequireWildcard(require("react"));
|
|
12
|
-
|
|
13
|
-
var _configure = _interopRequireWildcard(require("../configure"));
|
|
14
|
-
|
|
15
|
-
var _generalConfigBlock = _interopRequireDefault(require("../general-config-block"));
|
|
16
|
-
|
|
17
|
-
var _configUi = require("@pie-lib/pie-toolbox/config-ui");
|
|
18
|
-
|
|
19
|
-
var _testUtils = require("@pie-lib/pie-toolbox/test-utils");
|
|
20
|
-
|
|
21
|
-
var _response = _interopRequireDefault(require("../response"));
|
|
22
|
-
|
|
23
|
-
var _mathToolbar = require("@pie-lib/pie-toolbox/math-toolbar");
|
|
24
|
-
|
|
25
|
-
var _editableHtml = require("@pie-lib/pie-toolbox/editable-html");
|
|
26
|
-
|
|
27
|
-
var _enzyme = require("enzyme");
|
|
28
|
-
|
|
29
|
-
var _defaults = _interopRequireDefault(require("../defaults"));
|
|
30
|
-
|
|
31
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
32
|
-
|
|
33
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
34
|
-
|
|
35
|
-
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
36
|
-
|
|
37
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
38
|
-
|
|
39
|
-
jest.mock('@pie-lib/pie-toolbox/config-ui', function () {
|
|
40
|
-
return {
|
|
41
|
-
InputContainer: function InputContainer(props) {
|
|
42
|
-
return /*#__PURE__*/React.createElement("div", null, props.children);
|
|
43
|
-
},
|
|
44
|
-
InputCheckbox: function InputCheckbox(props) {
|
|
45
|
-
return /*#__PURE__*/React.createElement("div", null, props.children);
|
|
46
|
-
},
|
|
47
|
-
FeedbackConfig: function FeedbackConfig(props) {
|
|
48
|
-
return /*#__PURE__*/React.createElement("div", null, props.children);
|
|
49
|
-
},
|
|
50
|
-
layout: {
|
|
51
|
-
ConfigLayout: function ConfigLayout(props) {
|
|
52
|
-
return /*#__PURE__*/React.createElement("div", null, props.children);
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
settings: {
|
|
56
|
-
Panel: function Panel(props) {
|
|
57
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
58
|
-
onChange: props.onChange
|
|
59
|
-
});
|
|
60
|
-
},
|
|
61
|
-
toggle: jest.fn(),
|
|
62
|
-
radio: jest.fn()
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
});
|
|
66
|
-
jest.mock('@pie-lib/pie-toolbox/math-toolbar', function () {
|
|
67
|
-
return {
|
|
68
|
-
MathToolbar: function MathToolbar() {
|
|
69
|
-
return /*#__PURE__*/React.createElement("div", null);
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
});
|
|
73
|
-
jest.mock('@pie-framework/mathquill', function () {
|
|
74
|
-
return {
|
|
75
|
-
StaticMath: jest.fn().mockReturnValue({
|
|
76
|
-
latex: jest.fn()
|
|
77
|
-
}),
|
|
78
|
-
registerEmbed: jest.fn(),
|
|
79
|
-
getInterface: jest.fn().mockReturnThis()
|
|
80
|
-
};
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
var Mathquill = require('@pie-framework/mathquill');
|
|
84
|
-
|
|
85
|
-
var defaultProps = {
|
|
86
|
-
model: {
|
|
87
|
-
id: '1',
|
|
88
|
-
promptEnabled: true,
|
|
89
|
-
feedbackEnabled: true,
|
|
90
|
-
element: 'math-inline',
|
|
91
|
-
responseType: 'Advanced Multi',
|
|
92
|
-
feedback: {
|
|
93
|
-
correct: {
|
|
94
|
-
"default": 'Correct',
|
|
95
|
-
type: 'none'
|
|
96
|
-
},
|
|
97
|
-
incorrect: {
|
|
98
|
-
"default": 'Incorrect',
|
|
99
|
-
type: 'none'
|
|
100
|
-
},
|
|
101
|
-
partial: {
|
|
102
|
-
"default": 'Nearly',
|
|
103
|
-
type: 'none'
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
equationEditor: '3',
|
|
107
|
-
expression: '{{response}} = {{response}} \\text{eggs}',
|
|
108
|
-
question: '<p>Sam sells baskets of eggs at his farm stand. He sold 12 baskets and wrote the number sentence below to show how many eggs he sold in all.</p><p><span class="equation-block"><math xmlns="http://www.w3.org/1998/Math/MathML" >\n <mrow>\n <mn>12</mn><mo>×</mo><mo>□</mo><mo>=</mo><mn>72</mn>\n </mrow>\n</math> </span></p><p>What <span class="relative-emphasis">division</span> number sentence can be used to show how many eggs were in each basket?</p><p>Use the on-screen keyboard to type your number sentence and answer in the box.</p>',
|
|
109
|
-
response: {
|
|
110
|
-
answer: '72\\div12=6\\text{eggs}',
|
|
111
|
-
alternates: {
|
|
112
|
-
1: '6=72\\div12\\text{eggs}',
|
|
113
|
-
2: '\\frac{72}{12}=6\\text{eggs}',
|
|
114
|
-
3: '6=\\frac{72}{12}\\text{eggs}'
|
|
115
|
-
},
|
|
116
|
-
validation: 'literal'
|
|
117
|
-
},
|
|
118
|
-
responses: [{
|
|
119
|
-
id: '1',
|
|
120
|
-
answer: '72\\div12=6\\text{eggs}',
|
|
121
|
-
alternates: {
|
|
122
|
-
1: '6=72\\div12\\text{eggs}',
|
|
123
|
-
2: '\\frac{72}{12}=6\\text{eggs}',
|
|
124
|
-
3: '6=\\frac{72}{12}\\text{eggs}'
|
|
125
|
-
},
|
|
126
|
-
validation: 'literal'
|
|
127
|
-
}],
|
|
128
|
-
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.',
|
|
129
|
-
customKeys: ['\\left(\\right)', '\\frac{}{}', 'x\\frac{}{}'],
|
|
130
|
-
configure: _defaults["default"].configure
|
|
131
|
-
},
|
|
132
|
-
configuration: _defaults["default"].configuration
|
|
133
|
-
};
|
|
134
|
-
describe('Configure', function () {
|
|
135
|
-
var wrapper;
|
|
136
|
-
var component;
|
|
137
|
-
beforeEach(function () {
|
|
138
|
-
wrapper = (0, _testUtils.shallowChild)(_configure["default"], defaultProps, 2);
|
|
139
|
-
});
|
|
140
|
-
it('renders correctly', function () {
|
|
141
|
-
component = wrapper();
|
|
142
|
-
expect(component.find(_generalConfigBlock["default"]).length).toEqual(1);
|
|
143
|
-
expect(component.find(_configUi.FeedbackConfig).length).toEqual(1);
|
|
144
|
-
});
|
|
145
|
-
it('renders correctly with snapshot', function () {
|
|
146
|
-
component = wrapper();
|
|
147
|
-
expect(component).toMatchSnapshot();
|
|
148
|
-
});
|
|
149
|
-
it('changeTeacherInstructions calls onModelChange', function () {
|
|
150
|
-
var onModelChanged = jest.fn();
|
|
151
|
-
var component = (0, _enzyme.shallow)( /*#__PURE__*/React.createElement(_configure.Configure, (0, _extends2["default"])({
|
|
152
|
-
onModelChanged: onModelChanged,
|
|
153
|
-
classes: {}
|
|
154
|
-
}, _defaults["default"])));
|
|
155
|
-
component.instance().changeTeacherInstructions('Teacher Instructions');
|
|
156
|
-
expect(onModelChanged).toBeCalledWith(expect.objectContaining({
|
|
157
|
-
teacherInstructions: 'Teacher Instructions'
|
|
158
|
-
}));
|
|
159
|
-
});
|
|
160
|
-
});
|
|
161
|
-
describe('GeneralConfigBlock', function () {
|
|
162
|
-
var wrapper;
|
|
163
|
-
var props;
|
|
164
|
-
var component;
|
|
165
|
-
beforeEach(function () {
|
|
166
|
-
props = {
|
|
167
|
-
model: defaultProps.model,
|
|
168
|
-
promptEnabled: true,
|
|
169
|
-
configuration: _defaults["default"].configuration,
|
|
170
|
-
onChange: jest.fn(),
|
|
171
|
-
imageSupport: {},
|
|
172
|
-
uploadSoundSupport: {}
|
|
173
|
-
};
|
|
174
|
-
wrapper = (0, _testUtils.shallowChild)(_generalConfigBlock["default"], props, 1);
|
|
175
|
-
});
|
|
176
|
-
it('renders correctly', function () {
|
|
177
|
-
component = wrapper();
|
|
178
|
-
expect(component.find(_configUi.InputContainer).length).toBeGreaterThan(1);
|
|
179
|
-
expect(component.find(_response["default"]).length).toEqual(1);
|
|
180
|
-
expect(component.find(_mathToolbar.MathToolbar).length).toEqual(1);
|
|
181
|
-
expect(component.find(_editableHtml.EditableHtml).length).toEqual(1);
|
|
182
|
-
expect(Mathquill.getInterface().registerEmbed).toHaveBeenCalled();
|
|
183
|
-
component = wrapper({
|
|
184
|
-
model: _objectSpread(_objectSpread({}, props.model), {}, {
|
|
185
|
-
responseType: 'Simple'
|
|
186
|
-
})
|
|
187
|
-
});
|
|
188
|
-
expect(component.find(_configUi.InputContainer).length).toBeGreaterThan(1);
|
|
189
|
-
expect(component.find(_response["default"]).length).toEqual(1);
|
|
190
|
-
expect(component.find(_editableHtml.EditableHtml).length).toEqual(1);
|
|
191
|
-
expect(component.find(_mathToolbar.MathToolbar).length).toEqual(0);
|
|
192
|
-
});
|
|
193
|
-
it('renders correctly with snapshot', function () {
|
|
194
|
-
component = wrapper();
|
|
195
|
-
expect(component).toMatchSnapshot();
|
|
196
|
-
});
|
|
197
|
-
it('updates advanced model correctly', function () {
|
|
198
|
-
var onChange = jest.fn();
|
|
199
|
-
var component = wrapper(_objectSpread(_objectSpread({}, props), {}, {
|
|
200
|
-
onChange: onChange
|
|
201
|
-
}));
|
|
202
|
-
component.instance().onResponseChange({
|
|
203
|
-
answer: 'something',
|
|
204
|
-
id: 'r1'
|
|
205
|
-
}, 0);
|
|
206
|
-
expect(onChange).toBeCalledWith(_objectSpread(_objectSpread({}, props.model), {}, {
|
|
207
|
-
responses: [{
|
|
208
|
-
id: 'r1',
|
|
209
|
-
answer: 'something'
|
|
210
|
-
}]
|
|
211
|
-
}));
|
|
212
|
-
});
|
|
213
|
-
it('builds out internal state correctly based on expression provided', function () {
|
|
214
|
-
component = wrapper();
|
|
215
|
-
expect(component.state()).toEqual({
|
|
216
|
-
showKeypad: false,
|
|
217
|
-
responseIdCounter: 2,
|
|
218
|
-
responseAreas: {
|
|
219
|
-
r1: {
|
|
220
|
-
value: ''
|
|
221
|
-
},
|
|
222
|
-
r2: {
|
|
223
|
-
value: ''
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
component = wrapper(_objectSpread(_objectSpread({}, props), {}, {
|
|
228
|
-
model: _objectSpread(_objectSpread({}, props.model), {}, {
|
|
229
|
-
expression: props.model.expression + ' {{response}} '
|
|
230
|
-
})
|
|
231
|
-
}));
|
|
232
|
-
expect(component.state()).toEqual({
|
|
233
|
-
showKeypad: false,
|
|
234
|
-
responseIdCounter: 3,
|
|
235
|
-
responseAreas: {
|
|
236
|
-
r1: {
|
|
237
|
-
value: ''
|
|
238
|
-
},
|
|
239
|
-
r2: {
|
|
240
|
-
value: ''
|
|
241
|
-
},
|
|
242
|
-
r3: {
|
|
243
|
-
value: ''
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
});
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vY29uZmlndXJlLnRlc3QuanMiXSwibmFtZXMiOlsiamVzdCIsIm1vY2siLCJJbnB1dENvbnRhaW5lciIsInByb3BzIiwiY2hpbGRyZW4iLCJJbnB1dENoZWNrYm94IiwiRmVlZGJhY2tDb25maWciLCJsYXlvdXQiLCJDb25maWdMYXlvdXQiLCJzZXR0aW5ncyIsIlBhbmVsIiwib25DaGFuZ2UiLCJ0b2dnbGUiLCJmbiIsInJhZGlvIiwiTWF0aFRvb2xiYXIiLCJTdGF0aWNNYXRoIiwibW9ja1JldHVyblZhbHVlIiwibGF0ZXgiLCJyZWdpc3RlckVtYmVkIiwiZ2V0SW50ZXJmYWNlIiwibW9ja1JldHVyblRoaXMiLCJNYXRocXVpbGwiLCJyZXF1aXJlIiwiZGVmYXVsdFByb3BzIiwibW9kZWwiLCJpZCIsInByb21wdEVuYWJsZWQiLCJmZWVkYmFja0VuYWJsZWQiLCJlbGVtZW50IiwicmVzcG9uc2VUeXBlIiwiZmVlZGJhY2siLCJjb3JyZWN0IiwidHlwZSIsImluY29ycmVjdCIsInBhcnRpYWwiLCJlcXVhdGlvbkVkaXRvciIsImV4cHJlc3Npb24iLCJxdWVzdGlvbiIsInJlc3BvbnNlIiwiYW5zd2VyIiwiYWx0ZXJuYXRlcyIsInZhbGlkYXRpb24iLCJyZXNwb25zZXMiLCJub3RlIiwiY3VzdG9tS2V5cyIsImNvbmZpZ3VyZSIsImRlZmF1bHRWYWx1ZXMiLCJjb25maWd1cmF0aW9uIiwiZGVzY3JpYmUiLCJ3cmFwcGVyIiwiY29tcG9uZW50IiwiYmVmb3JlRWFjaCIsIkNvbmZpZ3VyZSIsIml0IiwiZXhwZWN0IiwiZmluZCIsIkdlbmVyYWxDb25maWdCbG9jayIsImxlbmd0aCIsInRvRXF1YWwiLCJ0b01hdGNoU25hcHNob3QiLCJvbk1vZGVsQ2hhbmdlZCIsImluc3RhbmNlIiwiY2hhbmdlVGVhY2hlckluc3RydWN0aW9ucyIsInRvQmVDYWxsZWRXaXRoIiwib2JqZWN0Q29udGFpbmluZyIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJpbWFnZVN1cHBvcnQiLCJ1cGxvYWRTb3VuZFN1cHBvcnQiLCJ0b0JlR3JlYXRlclRoYW4iLCJSZXNwb25zZSIsIkVkaXRhYmxlSHRtbCIsInRvSGF2ZUJlZW5DYWxsZWQiLCJvblJlc3BvbnNlQ2hhbmdlIiwic3RhdGUiLCJzaG93S2V5cGFkIiwicmVzcG9uc2VJZENvdW50ZXIiLCJyZXNwb25zZUFyZWFzIiwicjEiLCJ2YWx1ZSIsInIyIiwicjMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFJQTs7Ozs7Ozs7OztBQUVBQSxJQUFJLENBQUNDLElBQUwsQ0FBVSxnQ0FBVixFQUE0QztBQUFBLFNBQU87QUFDakRDLElBQUFBLGNBQWMsRUFBRSx3QkFBQ0MsS0FBRDtBQUFBLDBCQUFXLGlDQUFNQSxLQUFLLENBQUNDLFFBQVosQ0FBWDtBQUFBLEtBRGlDO0FBRWpEQyxJQUFBQSxhQUFhLEVBQUUsdUJBQUNGLEtBQUQ7QUFBQSwwQkFBVyxpQ0FBTUEsS0FBSyxDQUFDQyxRQUFaLENBQVg7QUFBQSxLQUZrQztBQUdqREUsSUFBQUEsY0FBYyxFQUFFLHdCQUFDSCxLQUFEO0FBQUEsMEJBQVcsaUNBQU1BLEtBQUssQ0FBQ0MsUUFBWixDQUFYO0FBQUEsS0FIaUM7QUFJakRHLElBQUFBLE1BQU0sRUFBRTtBQUNOQyxNQUFBQSxZQUFZLEVBQUUsc0JBQUNMLEtBQUQ7QUFBQSw0QkFBVyxpQ0FBTUEsS0FBSyxDQUFDQyxRQUFaLENBQVg7QUFBQTtBQURSLEtBSnlDO0FBT2pESyxJQUFBQSxRQUFRLEVBQUU7QUFDUkMsTUFBQUEsS0FBSyxFQUFFLGVBQUNQLEtBQUQ7QUFBQSw0QkFBVztBQUFLLFVBQUEsUUFBUSxFQUFFQSxLQUFLLENBQUNRO0FBQXJCLFVBQVg7QUFBQSxPQURDO0FBRVJDLE1BQUFBLE1BQU0sRUFBRVosSUFBSSxDQUFDYSxFQUFMLEVBRkE7QUFHUkMsTUFBQUEsS0FBSyxFQUFFZCxJ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O0FBQ0ZGLFVBQUFBLEtBQUssRUFBRTtBQURMO0FBUFM7QUFIaUIsS0FBbEM7QUFlRCxHQXZDQyxDQUFGO0FBd0NELENBckdPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgQ29uZmlndXJlLCB7IENvbmZpZ3VyZSBhcyBDb25maWd1cmVOb3RTdHlsZWQgfSBmcm9tICcuLi9jb25maWd1cmUnO1xuaW1wb3J0IEdlbmVyYWxDb25maWdCbG9jayBmcm9tICcuLi9nZW5lcmFsLWNvbmZpZy1ibG9jayc7XG5pbXBvcnQgeyBJbnB1dENvbnRhaW5lciwgSW5wdXRDaGVja2JveCB9IGZyb20gJ0BwaWUtbGliL3BpZS10b29sYm94L2NvbmZpZy11aSc7XG5pbXBvcnQgeyBzaGFsbG93Q2hpbGQgfSBmcm9tICdAcGllLWxpYi9waWUtdG9vbGJveC90ZXN0LXV0aWxzJztcbmltcG9ydCBSZXNwb25zZSBmcm9tICcuLi9yZXNwb25zZSc7XG5pbXBvcnQgeyBNYXRoVG9vbGJhciB9IGZyb20gJ0BwaWUtbGliL3BpZS10b29sYm94L21hdGgtdG9vbGJhcic7XG5pbXBvcnQge0VkaXRhYmxlSHRtbH0gZnJvbSAnQHBpZS1saWIvcGllLXRvb2xib3gvZWRpdGFibGUtaHRtbCc7XG5pbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcblxuaW1wb3J0IHsgRmVlZGJhY2tDb25maWcsIGxheW91dCwgc2V0dGluZ3MgfSBmcm9tICdAcGllLWxpYi9waWUtdG9vbGJveC9jb25maWctdWknO1xuXG5pbXBvcnQgZGVmYXVsdFZhbHVlcyBmcm9tICcuLi9kZWZhdWx0cyc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvcGllLXRvb2xib3gvY29uZmlnLXVpJywgKCkgPT4gKHtcbiAgSW5wdXRDb250YWluZXI6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICBJbnB1dENoZWNrYm94OiAocHJvcHMpID0+IDxkaXY+e3Byb3BzLmNoaWxkcmVufTwvZGl2PixcbiAgRmVlZGJhY2tDb25maWc6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICBsYXlvdXQ6IHtcbiAgICBDb25maWdMYXlvdXQ6IChwcm9wcykgPT4gPGRpdj57cHJvcHMuY2hpbGRyZW59PC9kaXY+LFxuICB9LFxuICBzZXR0aW5nczoge1xuICAgIFBhbmVsOiAocHJvcHMpID0+IDxkaXYgb25DaGFuZ2U9e3Byb3BzLm9uQ2hhbmdlfSAvPixcbiAgICB0b2dnbGU6IGplc3QuZm4oKSxcbiAgICByYWRpbzogamVzdC5mbigpLFxuICB9LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL3BpZS10b29sYm94L21hdGgtdG9vbGJhcicsICgpID0+ICh7XG4gIE1hdGhUb29sYmFyOiAoKSA9PiA8ZGl2IC8+LFxufSkpO1xuXG5qZXN0Lm1vY2soJ0BwaWUtZnJhbWV3b3JrL21hdGhxdWlsbCcsICgpID0+ICh7XG4gIFN0YXRpY01hdGg6IGplc3QuZm4oKS5tb2NrUmV0dXJuVmFsdWUoe1xuICAgIGxhdGV4OiBqZXN0LmZuKCksXG4gIH0pLFxuICByZWdpc3RlckVtYmVkOiBqZXN0LmZuKCksXG4gIGdldEludGVyZmFjZTogamVzdC5mbigpLm1vY2tSZXR1cm5UaGlzKCksXG59KSk7XG5jb25zdCBNYXRocXVpbGwgPSByZXF1aXJlKCdAcGllLWZyYW1ld29yay9tYXRocXVpbGwnKTtcblxuY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICBtb2RlbDoge1xuICAgIGlkOiAnMScsXG4gICAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgICBmZWVkYmFja0VuYWJsZWQ6IHRydWUsXG4gICAgZWxlbWVudDogJ21hdGgtaW5saW5lJyxcbiAgICByZXNwb25zZVR5cGU6ICdBZHZhbmNlZCBNdWx0aScsXG4gICAgZmVlZGJhY2s6IHtcbiAgICAgIGNvcnJlY3Q6IHtcbiAgICAgICAgZGVmYXVsdDogJ0NvcnJlY3QnLFxuICAgICAgICB0eXBlOiAnbm9uZScsXG4gICAgICB9LFxuICAgICAgaW5jb3JyZWN0OiB7XG4gICAgICAgIGRlZmF1bHQ6ICdJbmNvcnJlY3QnLFxuICAgICAgICB0eXBlOiAnbm9uZScsXG4gICAgICB9LFxuICAgICAgcGFydGlhbDoge1xuICAgICAgICBkZWZhdWx0OiAnTmVhcmx5JyxcbiAgICAgICAgdHlwZTogJ25vbmUnLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGVxdWF0aW9uRWRpdG9yOiAnMycsXG4gICAgZXhwcmVzc2lvbjogJ3t7cmVzcG9uc2V9fSA9IHt7cmVzcG9uc2V9fSBcXFxcdGV4dHtlZ2dzfScsXG4gICAgcXVlc3Rpb246XG4gICAgICAnPHA+U2FtIHNlbGxzIGJhc2tldHMgb2YgZWdncyBhdCBoaXMgZmFybSBzdGFuZC4gSGUgc29sZCAxMiBiYXNrZXRzIGFuZCB3cm90ZSB0aGUgbnVtYmVyIHNlbnRlbmNlIGJlbG93IHRvIHNob3cgaG93IG1hbnkgZWdncyBoZSBzb2xkIGluIGFsbC48L3A+PHA+PHNwYW4gY2xhc3M9XCJlcXVhdGlvbi1ibG9ja1wiPjxtYXRoIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTFwiID5cXG4gPG1yb3c+XFxuICA8bW4+MTI8L21uPjxtbz4mI3gwMEQ3OzwvbW8+PG1vPiYjeDI1QTE7PC9tbz48bW8+PTwvbW8+PG1uPjcyPC9tbj5cXG4gPC9tcm93PlxcbjwvbWF0aD4gPC9zcGFuPjwvcD48cD5XaGF0IDxzcGFuIGNsYXNzPVwicmVsYXRpdmUtZW1waGFzaXNcIj5kaXZpc2lvbjwvc3Bhbj4gbnVtYmVyIHNlbnRlbmNlIGNhbiBiZSB1c2VkIHRvIHNob3cgaG93IG1hbnkgZWdncyB3ZXJlIGluIGVhY2ggYmFza2V0PzwvcD48cD5Vc2UgdGhlIG9uLXNjcmVlbiBrZXlib2FyZCB0byB0eXBlIHlvdXIgbnVtYmVyIHNlbnRlbmNlIGFuZCBhbnN3ZXIgaW4gdGhlIGJveC48L3A+JyxcbiAgICByZXNwb25zZToge1xuICAgICAgYW5zd2VyOiAnNzJcXFxcZGl2MTI9NlxcXFx0ZXh0e2VnZ3N9JyxcbiAgICAgIGFsdGVybmF0ZXM6IHtcbiAgICAgICAgMTogJzY9NzJcXFxcZGl2MTJcXFxcdGV4dHtlZ2dzfScsXG4gICAgICAgIDI6ICdcXFxcZnJhY3s3Mn17MTJ9PTZcXFxcdGV4dHtlZ2dzfScsXG4gICAgICAgIDM6ICc2PVxcXFxmcmFjezcyfXsxMn1cXFxcdGV4dHtlZ2dzfScsXG4gICAgICB9LFxuICAgICAgdmFsaWRhdGlvbjogJ2xpdGVyYWwnLFxuICAgIH0sXG4gICAgcmVzcG9uc2VzOiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAnMScsXG4gICAgICAgIGFuc3dlcjogJzcyXFxcXGRpdjEyPTZcXFxcdGV4dHtlZ2dzfScsXG4gICAgICAgIGFsdGVybmF0ZXM6IHtcbiAgICAgICAgICAxOiAnNj03MlxcXFxkaXYxMlxcXFx0ZXh0e2VnZ3N9JyxcbiAgICAgICAgICAyOiAnXFxcXGZyYWN7NzJ9ezEyfT02XFxcXHRleHR7ZWdnc30nLFxuICAgICAgICAgIDM6ICc2PVxcXFxmcmFjezcyfXsxMn1cXFxcdGV4dHtlZ2dzfScsXG4gICAgICAgIH0sXG4gICAgICAgIHZhbGlkYXRpb246ICdsaXRlcmFsJyxcbiAgICAgIH0sXG4gICAgXSxcbiAgICBub3RlOiAnVGhlIGFuc3dlciBzaG93biBhYm92ZSBpcyB0aGUgcHJpbWFyeSBjb3JyZWN0IGFuc3dlciBzcGVjaWZpZWQgYnkgdGhlIGF1dGhvciBmb3IgdGhpcyBpdGVtLCBidXQgb3RoZXIgYW5zd2VycyBtYXkgYWxzbyBiZSByZWNvZ25pemVkIGFzIGNvcnJlY3QuJyxcbiAgICBjdXN0b21LZXlzOiBbJ1xcXFxsZWZ0KFxcXFxyaWdodCknLCAnXFxcXGZyYWN7fXt9JywgJ3hcXFxcZnJhY3t9e30nXSxcbiAgICBjb25maWd1cmU6IGRlZmF1bHRWYWx1ZXMuY29uZmlndXJlLFxuICB9LFxuICBjb25maWd1cmF0aW9uOiBkZWZhdWx0VmFsdWVzLmNvbmZpZ3VyYXRpb24sXG59O1xuXG5kZXNjcmliZSgnQ29uZmlndXJlJywgKCkgPT4ge1xuICBsZXQgd3JhcHBlcjtcbiAgbGV0IGNvbXBvbmVudDtcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICB3cmFwcGVyID0gc2hhbGxvd0NoaWxkKENvbmZpZ3VyZSwgZGVmYXVsdFByb3BzLCAyKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIGNvbXBvbmVudCA9IHdyYXBwZXIoKTtcblxuICAgIGV4cGVjdChjb21wb25lbnQuZmluZChHZW5lcmFsQ29uZmlnQmxvY2spLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QoY29tcG9uZW50LmZpbmQoRmVlZGJhY2tDb25maWcpLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdpdGggc25hcHNob3QnLCAoKSA9PiB7XG4gICAgY29tcG9uZW50ID0gd3JhcHBlcigpO1xuXG4gICAgZXhwZWN0KGNvbXBvbmVudCkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0pO1xuXG4gIGl0KCdjaGFuZ2VUZWFjaGVySW5zdHJ1Y3Rpb25zIGNhbGxzIG9uTW9kZWxDaGFuZ2UnLCAoKSA9PiB7XG4gICAgY29uc3Qgb25Nb2RlbENoYW5nZWQgPSBqZXN0LmZuKCk7XG4gICAgY29uc3QgY29tcG9uZW50ID0gc2hhbGxvdyg8Q29uZmlndXJlTm90U3R5bGVkIG9uTW9kZWxDaGFuZ2VkPXtvbk1vZGVsQ2hhbmdlZH0gY2xhc3Nlcz17e319IHsuLi5kZWZhdWx0VmFsdWVzfSAvPik7XG5cbiAgICBjb21wb25lbnQuaW5zdGFuY2UoKS5jaGFuZ2VUZWFjaGVySW5zdHJ1Y3Rpb25zKCdUZWFjaGVyIEluc3RydWN0aW9ucycpO1xuXG4gICAgZXhwZWN0KG9uTW9kZWxDaGFuZ2VkKS50b0JlQ2FsbGVkV2l0aChcbiAgICAgIGV4cGVjdC5vYmplY3RDb250YWluaW5nKHtcbiAgICAgICAgdGVhY2hlckluc3RydWN0aW9uczogJ1RlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgIH0pLFxuICAgICk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdHZW5lcmFsQ29uZmlnQmxvY2snLCAoKSA9PiB7XG4gIGxldCB3cmFwcGVyO1xuICBsZXQgcHJvcHM7XG4gIGxldCBjb21wb25lbnQ7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgcHJvcHMgPSB7XG4gICAgICBtb2RlbDogZGVmYXVsdFByb3BzLm1vZGVsLFxuICAgICAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYXRpb246IGRlZmF1bHRWYWx1ZXMuY29uZmlndXJhdGlvbixcbiAgICAgIG9uQ2hhbmdlOiBqZXN0LmZuKCksXG4gICAgICBpbWFnZVN1cHBvcnQ6IHt9LFxuICAgICAgdXBsb2FkU291bmRTdXBwb3J0OiB7fSxcbiAgICB9O1xuXG4gICAgd3JhcHBlciA9IHNoYWxsb3dDaGlsZChHZW5lcmFsQ29uZmlnQmxvY2ssIHByb3BzLCAxKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5JywgKCkgPT4ge1xuICAgIGNvbXBvbmVudCA9IHdyYXBwZXIoKTtcblxuICAgIGV4cGVjdChjb21wb25lbnQuZmluZChJbnB1dENvbnRhaW5lcikubGVuZ3RoKS50b0JlR3JlYXRlclRoYW4oMSk7XG4gICAgZXhwZWN0KGNvbXBvbmVudC5maW5kKFJlc3BvbnNlKS5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGNvbXBvbmVudC5maW5kKE1hdGhUb29sYmFyKS5sZW5ndGgpLnRvRXF1YWwoMSk7XG4gICAgZXhwZWN0KGNvbXBvbmVudC5maW5kKEVkaXRhYmxlSHRtbCkubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChNYXRocXVpbGwuZ2V0SW50ZXJmYWNlKCkucmVnaXN0ZXJFbWJlZCkudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgY29tcG9uZW50ID0gd3JhcHBlcih7IG1vZGVsOiB7IC4uLnByb3BzLm1vZGVsLCByZXNwb25zZVR5cGU6ICdTaW1wbGUnIH0gfSk7XG5cbiAgICBleHBlY3QoY29tcG9uZW50LmZpbmQoSW5wdXRDb250YWluZXIpLmxlbmd0aCkudG9CZUdyZWF0ZXJUaGFuKDEpO1xuICAgIGV4cGVjdChjb21wb25lbnQuZmluZChSZXNwb25zZSkubGVuZ3RoKS50b0VxdWFsKDEpO1xuICAgIGV4cGVjdChjb21wb25lbnQuZmluZChFZGl0YWJsZUh0bWwpLmxlbmd0aCkudG9FcXVhbCgxKTtcbiAgICBleHBlY3QoY29tcG9uZW50LmZpbmQoTWF0aFRvb2xiYXIpLmxlbmd0aCkudG9FcXVhbCgwKTtcbiAgfSk7XG5cbiAgaXQoJ3JlbmRlcnMgY29ycmVjdGx5IHdpdGggc25hcHNob3QnLCAoKSA9PiB7XG4gICAgY29tcG9uZW50ID0gd3JhcHBlcigpO1xuXG4gICAgZXhwZWN0KGNvbXBvbmVudCkudG9NYXRjaFNuYXBzaG90KCk7XG4gIH0pO1xuXG4gIGl0KCd1cGRhdGVzIGFkdmFuY2VkIG1vZGVsIGNvcnJlY3RseScsICgpID0+IHtcbiAgICBjb25zdCBvbkNoYW5nZSA9IGplc3QuZm4oKTtcbiAgICBjb25zdCBjb21wb25lbnQgPSB3cmFwcGVyKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgb25DaGFuZ2UsXG4gICAgfSk7XG5cbiAgICBjb21wb25lbnQuaW5zdGFuY2UoKS5vblJlc3BvbnNlQ2hhbmdlKHsgYW5zd2VyOiAnc29tZXRoaW5nJywgaWQ6ICdyMScgfSwgMCk7XG5cbiAgICBleHBlY3Qob25DaGFuZ2UpLnRvQmVDYWxsZWRXaXRoKHtcbiAgICAgIC4uLnByb3BzLm1vZGVsLFxuICAgICAgcmVzcG9uc2VzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ3IxJyxcbiAgICAgICAgICBhbnN3ZXI6ICdzb21ldGhpbmcnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgaXQoJ2J1aWxkcyBvdXQgaW50ZXJuYWwgc3RhdGUgY29ycmVjdGx5IGJhc2VkIG9uIGV4cHJlc3Npb24gcHJvdmlkZWQnLCAoKSA9PiB7XG4gICAgY29tcG9uZW50ID0gd3JhcHBlcigpO1xuXG4gICAgZXhwZWN0KGNvbXBvbmVudC5zdGF0ZSgpKS50b0VxdWFsKHtcbiAgICAgIHNob3dLZXlwYWQ6IGZhbHNlLFxuICAgICAgcmVzcG9uc2VJZENvdW50ZXI6IDIsXG4gICAgICByZXNwb25zZUFyZWFzOiB7XG4gICAgICAgIHIxOiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICB9LFxuICAgICAgICByMjoge1xuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb21wb25lbnQgPSB3cmFwcGVyKHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgbW9kZWw6IHtcbiAgICAgICAgLi4ucHJvcHMubW9kZWwsXG4gICAgICAgIGV4cHJlc3Npb246IHByb3BzLm1vZGVsLmV4cHJlc3Npb24gKyAnIHt7cmVzcG9uc2V9fSAnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGV4cGVjdChjb21wb25lbnQuc3RhdGUoKSkudG9FcXVhbCh7XG4gICAgICBzaG93S2V5cGFkOiBmYWxzZSxcbiAgICAgIHJlc3BvbnNlSWRDb3VudGVyOiAzLFxuICAgICAgcmVzcG9uc2VBcmVhczoge1xuICAgICAgICByMToge1xuICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgcjI6IHtcbiAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIH0sXG4gICAgICAgIHIzOiB7XG4gICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|