@pie-element/select-text 6.5.26-next.2 → 6.6.0
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 +34 -0
- package/LICENSE.md +5 -0
- package/configure/CHANGELOG.md +28 -0
- package/configure/lib/defaultConfiguration.js +3 -2
- package/configure/lib/defaultConfiguration.js.map +1 -1
- package/configure/lib/design.js +45 -3
- package/configure/lib/design.js.map +1 -1
- package/configure/lib/index.js +3 -3
- package/configure/lib/index.js.map +1 -1
- package/configure/lib/utils.js +16 -4
- package/configure/lib/utils.js.map +1 -1
- package/configure/package.json +5 -5
- package/controller/CHANGELOG.md +18 -0
- package/controller/lib/defaults.js +1 -1
- package/controller/lib/index.js +33 -2
- package/controller/lib/index.js.map +1 -1
- package/controller/package.json +2 -2
- package/lib/index.js +1 -1
- package/lib/main.js +1 -1
- package/lib/print.js +1 -1
- package/lib/utils.js +1 -1
- package/module/configure.js +2797 -0
- package/module/controller.js +19165 -0
- package/module/demo.js +287 -0
- package/module/element.js +2521 -0
- package/module/index.html +21 -0
- package/module/manifest.json +14 -0
- package/module/print-demo.js +325 -0
- package/module/print.html +18 -0
- package/module/print.js +2481 -0
- package/package.json +6 -6
- package/configure/lib/__tests__/design.test.js +0 -219
- package/controller/lib/__tests__/index.test.js +0 -833
- package/docs/demo/pie.manifest.json +0 -11
- package/lib/__tests__/index.test.js +0 -91
- package/lib/__tests__/main.test.js +0 -83
package/package.json
CHANGED
|
@@ -4,22 +4,22 @@
|
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
6
|
"repository": "pie-framework/pie-elements",
|
|
7
|
-
"version": "6.
|
|
7
|
+
"version": "6.6.0",
|
|
8
8
|
"description": "",
|
|
9
9
|
"dependencies": {
|
|
10
10
|
"@material-ui/core": "^3.9.2",
|
|
11
11
|
"@pie-framework/pie-player-events": "^0.1.0",
|
|
12
|
-
"@pie-lib/correct-answer-toggle": "^2.3.
|
|
13
|
-
"@pie-lib/math-rendering": "^2.
|
|
14
|
-
"@pie-lib/render-ui": "^4.12.
|
|
15
|
-
"@pie-lib/text-select": "^1.8.
|
|
12
|
+
"@pie-lib/correct-answer-toggle": "^2.3.36",
|
|
13
|
+
"@pie-lib/math-rendering": "^2.4.0",
|
|
14
|
+
"@pie-lib/render-ui": "^4.12.6",
|
|
15
|
+
"@pie-lib/text-select": "^1.8.15",
|
|
16
16
|
"prop-types": "^15.6.1",
|
|
17
17
|
"react": "^16.8.1",
|
|
18
18
|
"react-dom": "^16.8.1"
|
|
19
19
|
},
|
|
20
20
|
"author": "",
|
|
21
21
|
"license": "ISC",
|
|
22
|
-
"gitHead": "
|
|
22
|
+
"gitHead": "87c4247b2cca04380c8638f88e57bba47fb6c06a",
|
|
23
23
|
"scripts": {
|
|
24
24
|
"postpublish": "../../scripts/postpublish"
|
|
25
25
|
},
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
6
|
-
|
|
7
|
-
var _enzyme = require("enzyme");
|
|
8
|
-
|
|
9
|
-
var _react = _interopRequireDefault(require("react"));
|
|
10
|
-
|
|
11
|
-
var _design = require("../design");
|
|
12
|
-
|
|
13
|
-
var _defaultConfiguration = _interopRequireDefault(require("../defaultConfiguration"));
|
|
14
|
-
|
|
15
|
-
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; }
|
|
16
|
-
|
|
17
|
-
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; }
|
|
18
|
-
|
|
19
|
-
jest.mock('@pie-lib/config-ui', function () {
|
|
20
|
-
return {
|
|
21
|
-
layout: {
|
|
22
|
-
ConfigLayout: function ConfigLayout(props) {
|
|
23
|
-
return /*#__PURE__*/_react["default"].createElement("div", null, props.children);
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
settings: {
|
|
27
|
-
Panel: function Panel(props) {
|
|
28
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
29
|
-
oChangeModel: props.onChange
|
|
30
|
-
});
|
|
31
|
-
},
|
|
32
|
-
toggle: jest.fn(),
|
|
33
|
-
radio: jest.fn()
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
});
|
|
37
|
-
jest.mock('lodash/debounce', function () {
|
|
38
|
-
return function (fn) {
|
|
39
|
-
return fn;
|
|
40
|
-
};
|
|
41
|
-
});
|
|
42
|
-
describe('design', function () {
|
|
43
|
-
var w;
|
|
44
|
-
var onChange;
|
|
45
|
-
var onPromptChanged;
|
|
46
|
-
var onRationaleChanged;
|
|
47
|
-
|
|
48
|
-
var getModel = function getModel() {
|
|
49
|
-
return {
|
|
50
|
-
tokens: []
|
|
51
|
-
};
|
|
52
|
-
};
|
|
53
|
-
|
|
54
|
-
beforeEach(function () {
|
|
55
|
-
onChange = jest.fn();
|
|
56
|
-
onPromptChanged = jest.fn();
|
|
57
|
-
onRationaleChanged = jest.fn();
|
|
58
|
-
w = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_design.Design, {
|
|
59
|
-
model: getModel(),
|
|
60
|
-
configuration: _defaultConfiguration["default"].configuration,
|
|
61
|
-
classes: {},
|
|
62
|
-
className: 'foo',
|
|
63
|
-
onModelChanged: onChange,
|
|
64
|
-
onPromptChanged: onPromptChanged,
|
|
65
|
-
onRationaleChanged: onRationaleChanged
|
|
66
|
-
}));
|
|
67
|
-
});
|
|
68
|
-
describe('snapshot', function () {
|
|
69
|
-
it('renders all items with defaultProps', function () {
|
|
70
|
-
expect(w).toMatchSnapshot();
|
|
71
|
-
});
|
|
72
|
-
it('tokenizer renders with html entities', function () {
|
|
73
|
-
expect((0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_design.Design, {
|
|
74
|
-
model: {
|
|
75
|
-
text: '<p>“Lucy?? Are you using your time wisely to plan your project?!!!” Mr. Wilson asked.</p><p>Lucy looked a little confused at first. Ã Then she grinned and proudly stated, “Why, yes I am! I plan to make a bird feeder for that tree out our window!”</p>',
|
|
76
|
-
tokens: []
|
|
77
|
-
},
|
|
78
|
-
configuration: _defaultConfiguration["default"].configuration,
|
|
79
|
-
classes: {},
|
|
80
|
-
className: 'foo',
|
|
81
|
-
onModelChanged: onChange,
|
|
82
|
-
onPromptChanged: onPromptChanged,
|
|
83
|
-
onRationaleChanged: onRationaleChanged
|
|
84
|
-
}))).toMatchSnapshot();
|
|
85
|
-
});
|
|
86
|
-
it('renders all items except feedback', function () {
|
|
87
|
-
var defaultConfiguration = _defaultConfiguration["default"].configuration;
|
|
88
|
-
defaultConfiguration.feedback.settings = false;
|
|
89
|
-
var wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_design.Design, {
|
|
90
|
-
model: getModel(),
|
|
91
|
-
configuration: defaultConfiguration,
|
|
92
|
-
classes: {},
|
|
93
|
-
className: 'foo',
|
|
94
|
-
onModelChanged: onChange,
|
|
95
|
-
onPromptChanged: onPromptChanged,
|
|
96
|
-
onRationaleChanged: onRationaleChanged
|
|
97
|
-
}));
|
|
98
|
-
expect(wrapper).toMatchSnapshot();
|
|
99
|
-
});
|
|
100
|
-
it('renders all items except the content input', function () {
|
|
101
|
-
var defaultConfiguration = _defaultConfiguration["default"].configuration;
|
|
102
|
-
defaultConfiguration.text.settings = false;
|
|
103
|
-
var wrapper = (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_design.Design, {
|
|
104
|
-
model: getModel(),
|
|
105
|
-
configuration: defaultConfiguration,
|
|
106
|
-
classes: {},
|
|
107
|
-
className: 'foo',
|
|
108
|
-
onModelChanged: onChange,
|
|
109
|
-
onPromptChanged: onPromptChanged,
|
|
110
|
-
onRationaleChanged: onRationaleChanged
|
|
111
|
-
}));
|
|
112
|
-
expect(wrapper).toMatchSnapshot();
|
|
113
|
-
});
|
|
114
|
-
});
|
|
115
|
-
describe('logic', function () {
|
|
116
|
-
var assert = function assert(fn, args, expected) {
|
|
117
|
-
var e = expected(getModel());
|
|
118
|
-
it("".concat(fn, " ").concat(JSON.stringify(args), " => ").concat(JSON.stringify(e)), function () {
|
|
119
|
-
var instance = w.instance();
|
|
120
|
-
instance[fn].apply(instance, args); //jest.runAllTimers();
|
|
121
|
-
|
|
122
|
-
expect(onChange).toBeCalledWith(e);
|
|
123
|
-
});
|
|
124
|
-
};
|
|
125
|
-
|
|
126
|
-
describe('changeText', function () {
|
|
127
|
-
assert('changeText', [{
|
|
128
|
-
target: {
|
|
129
|
-
value: 'foo'
|
|
130
|
-
}
|
|
131
|
-
}], function (m) {
|
|
132
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
133
|
-
text: 'foo'
|
|
134
|
-
});
|
|
135
|
-
});
|
|
136
|
-
});
|
|
137
|
-
describe('changeTokens', function () {
|
|
138
|
-
assert('changeTokens', [[{
|
|
139
|
-
start: 0,
|
|
140
|
-
end: 1,
|
|
141
|
-
text: 'f'
|
|
142
|
-
}], 'words'], function (m) {
|
|
143
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
144
|
-
maxSelections: 0,
|
|
145
|
-
tokens: [{
|
|
146
|
-
start: 0,
|
|
147
|
-
end: 1,
|
|
148
|
-
text: 'f'
|
|
149
|
-
}],
|
|
150
|
-
mode: 'words'
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
assert('changeTokens', [[{
|
|
154
|
-
start: 0,
|
|
155
|
-
end: 8,
|
|
156
|
-
text: 'Foo bar.',
|
|
157
|
-
correct: true
|
|
158
|
-
}], 'sentences'], function (m) {
|
|
159
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
160
|
-
maxSelections: 1,
|
|
161
|
-
tokens: [{
|
|
162
|
-
start: 0,
|
|
163
|
-
end: 8,
|
|
164
|
-
text: 'Foo bar.',
|
|
165
|
-
correct: true
|
|
166
|
-
}],
|
|
167
|
-
mode: 'sentences'
|
|
168
|
-
});
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
describe('changeMaxSelections', function () {
|
|
172
|
-
assert('changeMaxSelections', [{}, 4], function (m) {
|
|
173
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
174
|
-
maxSelections: 4
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
describe('changeFeedback', function () {
|
|
179
|
-
assert('changeFeedback', [{
|
|
180
|
-
correctFeedbackType: 'none'
|
|
181
|
-
}], function (m) {
|
|
182
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
183
|
-
feedback: {
|
|
184
|
-
correctFeedbackType: 'none'
|
|
185
|
-
}
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
});
|
|
189
|
-
describe('changePartialScoring', function () {
|
|
190
|
-
assert('changePartialScoring', [true], function (m) {
|
|
191
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
192
|
-
partialScoring: true
|
|
193
|
-
});
|
|
194
|
-
});
|
|
195
|
-
});
|
|
196
|
-
describe('changePrompt', function () {
|
|
197
|
-
assert('onPromptChanged', ['New Prompt'], function (m) {
|
|
198
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
199
|
-
prompt: 'New Prompt'
|
|
200
|
-
});
|
|
201
|
-
});
|
|
202
|
-
});
|
|
203
|
-
describe('changeTeacherInstructions', function () {
|
|
204
|
-
assert('onTeacherInstructionsChanged', ['New Teacher Instructions'], function (m) {
|
|
205
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
206
|
-
teacherInstructions: 'New Teacher Instructions'
|
|
207
|
-
});
|
|
208
|
-
});
|
|
209
|
-
});
|
|
210
|
-
describe('changeRationale', function () {
|
|
211
|
-
assert('onRationaleChanged', ['New Rationale'], function (m) {
|
|
212
|
-
return _objectSpread(_objectSpread({}, m), {}, {
|
|
213
|
-
rationale: 'New Rationale'
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
});
|
|
219
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vZGVzaWduLnRlc3QuanN4Il0sIm5hbWVzIjpbImplc3QiLCJtb2NrIiwibGF5b3V0IiwiQ29uZmlnTGF5b3V0IiwicHJvcHMiLCJjaGlsZHJlbiIsInNldHRpbmdzIiwiUGFuZWwiLCJvbkNoYW5nZSIsInRvZ2dsZSIsImZuIiwicmFkaW8iLCJkZXNjcmliZSIsInciLCJvblByb21wdENoYW5nZWQiLCJvblJhdGlvbmFsZUNoYW5nZWQiLCJnZXRNb2RlbCIsInRva2VucyIsImJlZm9yZUVhY2giLCJkZWZhdWx0VmFsdWVzIiwiY29uZmlndXJhdGlvbiIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwidGV4dCIsImRlZmF1bHRDb25maWd1cmF0aW9uIiwiZmVlZGJhY2siLCJ3cmFwcGVyIiwiYXNzZXJ0IiwiYXJncyIsImV4cGVjdGVkIiwiZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJpbnN0YW5jZSIsImFwcGx5IiwidG9CZUNhbGxlZFdpdGgiLCJ0YXJnZXQiLCJ2YWx1ZSIsIm0iLCJzdGFydCIsImVuZCIsIm1heFNlbGVjdGlvbnMiLCJtb2RlIiwiY29ycmVjdCIsImNvcnJlY3RGZWVkYmFja1R5cGUiLCJwYXJ0aWFsU2NvcmluZyIsInByb21wdCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJyYXRpb25hbGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7QUFFQUEsSUFBSSxDQUFDQyxJQUFMLENBQVUsb0JBQVYsRUFBZ0M7QUFBQSxTQUFPO0FBQ3JDQyxJQUFBQSxNQUFNLEVBQUU7QUFDTkMsTUFBQUEsWUFBWSxFQUFFLHNCQUFDQyxLQUFEO0FBQUEsNEJBQVcsNkNBQU1BLEtBQUssQ0FBQ0MsUUFBWixDQUFYO0FBQUE7QUFEUixLQUQ2QjtBQUlyQ0MsSUFBQUEsUUFBUSxFQUFFO0FBQ1JDLE1BQUFBLEtBQUssRUFBRSxlQUFDSCxLQUFEO0FBQUEsNEJBQVc7QUFBSyxV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T0FBakMsQ0FBTjtBQUlELEtBTE8sQ0FBUjtBQU9BbEMsSUFBQUEsUUFBUSxDQUFDLGNBQUQsRUFBaUIsWUFBTTtBQUM3QmdCLE1BQUFBLE1BQU0sQ0FBQyxpQkFBRCxFQUFvQixDQUFDLFlBQUQsQ0FBcEIsRUFBb0MsVUFBQ1csQ0FBRDtBQUFBLCtDQUNyQ0EsQ0FEcUM7QUFFeENRLFVBQUFBLE1BQU0sRUFBRTtBQUZnQztBQUFBLE9BQXBDLENBQU47QUFJRCxLQUxPLENBQVI7QUFPQW5DLElBQUFBLFFBQVEsQ0FBQywyQkFBRCxFQUE4QixZQUFNO0FBQzFDZ0IsTUFBQUEsTUFBTSxDQUNKLDhCQURJLEVBRUosQ0FBQywwQkFBRCxDQUZJLEVBR0osVUFBQ1csQ0FBRDtBQUFBLCtDQUNLQSxDQURMO0FBRUVTLFVBQUFBLG1CQUFtQixFQUFFO0FBRnZCO0FBQUEsT0FISSxDQUFOO0FBUUQsS0FUTyxDQUFSO0FBV0FwQyxJQUFBQSxRQUFRLENBQUMsaUJBQUQsRUFBb0IsWUFBTTtBQUNoQ2dCLE1BQUFBLE1BQU0sQ0FBQyxvQkFBRCxFQUF1QixDQUFDLGVBQUQsQ0FBdkIsRUFBMEMsVUFBQ1csQ0FBRDtBQUFBLCtDQUMzQ0EsQ0FEMkM7QUFFOUNVLFVBQUFBLFNBQVMsRUFBRTtBQUZtQztBQUFBLE9BQTFDLENBQU47QUFJRCxLQUxPLENBQVI7QUFNRCxHQXpGTyxDQUFSO0FBMEZELENBdExPLENBQVIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBzaGFsbG93IH0gZnJvbSAnZW56eW1lJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBEZXNpZ24gfSBmcm9tICcuLi9kZXNpZ24nO1xuaW1wb3J0IGRlZmF1bHRWYWx1ZXMgZnJvbSAnLi4vZGVmYXVsdENvbmZpZ3VyYXRpb24nO1xuXG5qZXN0Lm1vY2soJ0BwaWUtbGliL2NvbmZpZy11aScsICgpID0+ICh7XG4gIGxheW91dDoge1xuICAgIENvbmZpZ0xheW91dDogKHByb3BzKSA9PiA8ZGl2Pntwcm9wcy5jaGlsZHJlbn08L2Rpdj4sXG4gIH0sXG4gIHNldHRpbmdzOiB7XG4gICAgUGFuZWw6IChwcm9wcykgPT4gPGRpdiBvQ2hhbmdlTW9kZWw9e3Byb3BzLm9uQ2hhbmdlfSAvPixcbiAgICB0b2dnbGU6IGplc3QuZm4oKSxcbiAgICByYWRpbzogamVzdC5mbigpLFxuICB9LFxufSkpO1xuXG5qZXN0Lm1vY2soJ2xvZGFzaC9kZWJvdW5jZScsICgpID0+IChmbikgPT4gZm4pO1xuXG5kZXNjcmliZSgnZGVzaWduJywgKCkgPT4ge1xuICBsZXQgdztcbiAgbGV0IG9uQ2hhbmdlO1xuICBsZXQgb25Qcm9tcHRDaGFuZ2VkO1xuICBsZXQgb25SYXRpb25hbGVDaGFuZ2VkO1xuXG4gIGNvbnN0IGdldE1vZGVsID0gKCkgPT4gKHtcbiAgICB0b2tlbnM6IFtdLFxuICB9KTtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgb25DaGFuZ2UgPSBqZXN0LmZuKCk7XG4gICAgb25Qcm9tcHRDaGFuZ2VkID0gamVzdC5mbigpO1xuICAgIG9uUmF0aW9uYWxlQ2hhbmdlZCA9IGplc3QuZm4oKTtcbiAgICB3ID0gc2hhbGxvdyhcbiAgICAgIDxEZXNpZ25cbiAgICAgICAgbW9kZWw9e2dldE1vZGVsKCl9XG4gICAgICAgIGNvbmZpZ3VyYXRpb249e2RlZmF1bHRWYWx1ZXMuY29uZmlndXJhdGlvbn1cbiAgICAgICAgY2xhc3Nlcz17e319XG4gICAgICAgIGNsYXNzTmFtZT17J2Zvbyd9XG4gICAgICAgIG9uTW9kZWxDaGFuZ2VkPXtvbkNoYW5nZX1cbiAgICAgICAgb25Qcm9tcHRDaGFuZ2VkPXtvblByb21wdENoYW5nZWR9XG4gICAgICAgIG9uUmF0aW9uYWxlQ2hhbmdlZD17b25SYXRpb25hbGVDaGFuZ2VkfVxuICAgICAgLz5cbiAgICApO1xuICB9KTtcblxuICBkZXNjcmliZSgnc25hcHNob3QnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgYWxsIGl0ZW1zIHdpdGggZGVmYXVsdFByb3BzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHcpLnRvTWF0Y2hTbmFwc2hvdCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Rva2VuaXplciByZW5kZXJzIHdpdGggaHRtbCBlbnRpdGllcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChcbiAgICAgICAgc2hhbGxvdyhcbiAgICAgICAgICA8RGVzaWduXG4gICAgICAgICAgICBtb2RlbD17e1xuICAgICAgICAgICAgICB0ZXh0OlxuICAgICAgICAgICAgICAgICc8cD4mIzgyMjA7THVjeT8mIzYzOyBBcmUgeW91IHVzaW5nIHlvdXIgdGltZSB3aXNlbHkgdG8gcGxhbiB5b3VyIHByb2plY3Q/JiMzMzsmIzMzOyYjMzM7JiM4MjIxOyBNci4gV2lsc29uIGFza2VkLjwvcD48cD5MdWN5IGxvb2tlZCBhIGxpdHRsZSBjb25mdXNlZCBhdCBmaXJzdC4gJiMxOTU7IFRoZW4gc2hlIGdyaW5uZWQgYW5kIHByb3VkbHkgc3RhdGVkLCAmIzgyMjA7V2h5LCB5ZXMgSSBhbSEgSSBwbGFuIHRvIG1ha2UgYSBiaXJkIGZlZWRlciBmb3IgdGhhdCB0cmVlIG91dCBvdXIgd2luZG93ISYjODIyMTs8L3A+JyxcbiAgICAgICAgICAgICAgdG9rZW5zOiBbXSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0VmFsdWVzLmNvbmZpZ3VyYXRpb259XG4gICAgICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17J2Zvbyd9XG4gICAgICAgICAgICBvbk1vZGVsQ2hhbmdlZD17b25DaGFuZ2V9XG4gICAgICAgICAgICBvblByb21wdENoYW5nZWQ9e29uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICAgIG9uUmF0aW9uYWxlQ2hhbmdlZD17b25SYXRpb25hbGVDaGFuZ2VkfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgICkudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhbGwgaXRlbXMgZXhjZXB0IGZlZWRiYWNrJywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBkZWZhdWx0VmFsdWVzLmNvbmZpZ3VyYXRpb247XG5cbiAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLmZlZWRiYWNrLnNldHRpbmdzID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IHdyYXBwZXIgPSBzaGFsbG93KFxuICAgICAgICA8RGVzaWduXG4gICAgICAgICAgbW9kZWw9e2dldE1vZGVsKCl9XG4gICAgICAgICAgY29uZmlndXJhdGlvbj17ZGVmYXVsdENvbmZpZ3VyYXRpb259XG4gICAgICAgICAgY2xhc3Nlcz17e319XG4gICAgICAgICAgY2xhc3NOYW1lPXsnZm9vJ31cbiAgICAgICAgICBvbk1vZGVsQ2hhbmdlZD17b25DaGFuZ2V9XG4gICAgICAgICAgb25Qcm9tcHRDaGFuZ2VkPXtvblByb21wdENoYW5nZWR9XG4gICAgICAgICAgb25SYXRpb25hbGVDaGFuZ2VkPXtvblJhdGlvbmFsZUNoYW5nZWR9XG4gICAgICAgIC8+XG4gICAgICApO1xuXG4gICAgICBleHBlY3Qod3JhcHBlcikudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyBhbGwgaXRlbXMgZXhjZXB0IHRoZSBjb250ZW50IGlucHV0JywgKCkgPT4ge1xuICAgICAgY29uc3QgZGVmYXVsdENvbmZpZ3VyYXRpb24gPSBkZWZhdWx0VmFsdWVzLmNvbmZpZ3VyYXRpb247XG5cbiAgICAgIGRlZmF1bHRDb25maWd1cmF0aW9uLnRleHQuc2V0dGluZ3MgPSBmYWxzZTtcblxuICAgICAgY29uc3Qgd3JhcHBlciA9IHNoYWxsb3coXG4gICAgICAgIDxEZXNpZ25cbiAgICAgICAgICBtb2RlbD17Z2V0TW9kZWwoKX1cbiAgICAgICAgICBjb25maWd1cmF0aW9uPXtkZWZhdWx0Q29uZmlndXJhdGlvbn1cbiAgICAgICAgICBjbGFzc2VzPXt7fX1cbiAgICAgICAgICBjbGFzc05hbWU9eydmb28nfVxuICAgICAgICAgIG9uTW9kZWxDaGFuZ2VkPXtvbkNoYW5nZX1cbiAgICAgICAgICBvblByb21wdENoYW5nZWQ9e29uUHJvbXB0Q2hhbmdlZH1cbiAgICAgICAgICBvblJhdGlvbmFsZUNoYW5nZWQ9e29uUmF0aW9uYWxlQ2hhbmdlZH1cbiAgICAgICAgLz5cbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdCh3cmFwcGVyKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2xvZ2ljJywgKCkgPT4ge1xuICAgIGNvbnN0IGFzc2VydCA9IChmbiwgYXJncywgZXhwZWN0ZWQpID0+IHtcbiAgICAgIGNvbnN0IGUgPSBleHBlY3RlZChnZXRNb2RlbCgpKTtcblxuICAgICAgaXQoYCR7Zm59ICR7SlNPTi5zdHJpbmdpZnkoYXJncyl9ID0+ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCwgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IHcuaW5zdGFuY2UoKTtcbiAgICAgICAgaW5zdGFuY2VbZm5dLmFwcGx5KGluc3RhbmNlLCBhcmdzKTtcblxuICAgICAgICAvL2plc3QucnVuQWxsVGltZXJzKCk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0JlQ2FsbGVkV2l0aChlKTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBkZXNjcmliZSgnY2hhbmdlVGV4dCcsICgpID0+IHtcbiAgICAgIGFzc2VydCgnY2hhbmdlVGV4dCcsIFt7IHRhcmdldDogeyB2YWx1ZTogJ2ZvbycgfSB9XSwgKG0pID0+ICh7XG4gICAgICAgIC4uLm0sXG4gICAgICAgIHRleHQ6ICdmb28nLFxuICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NoYW5nZVRva2VucycsICgpID0+IHtcbiAgICAgIGFzc2VydChcbiAgICAgICAgJ2NoYW5nZVRva2VucycsXG4gICAgICAgIFtbeyBzdGFydDogMCwgZW5kOiAxLCB0ZXh0OiAnZicgfV0sICd3b3JkcyddLFxuICAgICAgICAobSkgPT4gKHtcbiAgICAgICAgICAuLi5tLFxuICAgICAgICAgIG1heFNlbGVjdGlvbnM6IDAsXG4gICAgICAgICAgdG9rZW5zOiBbeyBzdGFydDogMCwgZW5kOiAxLCB0ZXh0OiAnZicgfV0sXG4gICAgICAgICAgbW9kZTogJ3dvcmRzJyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBhc3NlcnQoXG4gICAgICAgICdjaGFuZ2VUb2tlbnMnLFxuICAgICAgICBbW3sgc3RhcnQ6IDAsIGVuZDogOCwgdGV4dDogJ0ZvbyBiYXIuJywgY29ycmVjdDogdHJ1ZSB9XSwgJ3NlbnRlbmNlcyddLFxuICAgICAgICAobSkgPT4gKHtcbiAgICAgICAgICAuLi5tLFxuICAgICAgICAgIG1heFNlbGVjdGlvbnM6IDEsXG4gICAgICAgICAgdG9rZW5zOiBbeyBzdGFydDogMCwgZW5kOiA4LCB0ZXh0OiAnRm9vIGJhci4nLCBjb3JyZWN0OiB0cnVlIH1dLFxuICAgICAgICAgIG1vZGU6ICdzZW50ZW5jZXMnLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdjaGFuZ2VNYXhTZWxlY3Rpb25zJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0KCdjaGFuZ2VNYXhTZWxlY3Rpb25zJywgW3t9LCA0XSwgKG0pID0+ICh7XG4gICAgICAgIC4uLm0sXG4gICAgICAgIG1heFNlbGVjdGlvbnM6IDQsXG4gICAgICB9KSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2hhbmdlRmVlZGJhY2snLCAoKSA9PiB7XG4gICAgICBhc3NlcnQoJ2NoYW5nZUZlZWRiYWNrJywgW3sgY29ycmVjdEZlZWRiYWNrVHlwZTogJ25vbmUnIH1dLCAobSkgPT4gKHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgZmVlZGJhY2s6IHsgY29ycmVjdEZlZWRiYWNrVHlwZTogJ25vbmUnIH0sXG4gICAgICB9KSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2hhbmdlUGFydGlhbFNjb3JpbmcnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQoJ2NoYW5nZVBhcnRpYWxTY29yaW5nJywgW3RydWVdLCAobSkgPT4gKHtcbiAgICAgICAgLi4ubSxcbiAgICAgICAgcGFydGlhbFNjb3Jpbmc6IHRydWUsXG4gICAgICB9KSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2hhbmdlUHJvbXB0JywgKCkgPT4ge1xuICAgICAgYXNzZXJ0KCdvblByb21wdENoYW5nZWQnLCBbJ05ldyBQcm9tcHQnXSwgKG0pID0+ICh7XG4gICAgICAgIC4uLm0sXG4gICAgICAgIHByb21wdDogJ05ldyBQcm9tcHQnLFxuICAgICAgfSkpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ2NoYW5nZVRlYWNoZXJJbnN0cnVjdGlvbnMnLCAoKSA9PiB7XG4gICAgICBhc3NlcnQoXG4gICAgICAgICdvblRlYWNoZXJJbnN0cnVjdGlvbnNDaGFuZ2VkJyxcbiAgICAgICAgWydOZXcgVGVhY2hlciBJbnN0cnVjdGlvbnMnXSxcbiAgICAgICAgKG0pID0+ICh7XG4gICAgICAgICAgLi4ubSxcbiAgICAgICAgICB0ZWFjaGVySW5zdHJ1Y3Rpb25zOiAnTmV3IFRlYWNoZXIgSW5zdHJ1Y3Rpb25zJyxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnY2hhbmdlUmF0aW9uYWxlJywgKCkgPT4ge1xuICAgICAgYXNzZXJ0KCdvblJhdGlvbmFsZUNoYW5nZWQnLCBbJ05ldyBSYXRpb25hbGUnXSwgKG0pID0+ICh7XG4gICAgICAgIC4uLm0sXG4gICAgICAgIHJhdGlvbmFsZTogJ05ldyBSYXRpb25hbGUnLFxuICAgICAgfSkpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|