@pie-element/drag-in-the-blank 8.3.2-next.3 → 8.3.2-tip-tap.1

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 CHANGED
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [8.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@8.3.1...@pie-element/drag-in-the-blank@8.3.2) (2025-10-22)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * bump libs PD-5265 ([184a978](https://github.com/pie-framework/pie-elements/commit/184a978f57a2a84dc6ba87c1eba0b92d5cdd9eae))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [8.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank@8.2.1...@pie-element/drag-in-the-blank@8.3.1) (2025-10-16)
7
18
 
8
19
 
@@ -3,6 +3,17 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [7.3.2](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.3.1...@pie-element/drag-in-the-blank-configure@7.3.2) (2025-10-22)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * bump libs PD-5265 ([184a978](https://github.com/pie-framework/pie-elements/commit/184a978f57a2a84dc6ba87c1eba0b92d5cdd9eae))
12
+
13
+
14
+
15
+
16
+
6
17
  ## [7.3.1](https://github.com/pie-framework/pie-elements/compare/@pie-element/drag-in-the-blank-configure@7.2.1...@pie-element/drag-in-the-blank-configure@7.3.1) (2025-10-16)
7
18
 
8
19
 
@@ -0,0 +1,128 @@
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 _enzyme = require("enzyme");
10
+
11
+ var _react = _interopRequireDefault(require("react"));
12
+
13
+ var _choice = _interopRequireWildcard(require("../choice"));
14
+
15
+ 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); }
16
+
17
+ 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; }
18
+
19
+ 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; }
20
+
21
+ 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; }
22
+
23
+ describe('Choice', function () {
24
+ var onClick;
25
+ var onRemoveChoice;
26
+ var connectDragSource;
27
+ var connectDragPreview;
28
+ beforeEach(function () {
29
+ onClick = jest.fn();
30
+ onRemoveChoice = jest.fn();
31
+ connectDragSource = jest.fn();
32
+ connectDragPreview = jest.fn();
33
+ });
34
+
35
+ var wrapper = function wrapper(extras) {
36
+ var props = _objectSpread({
37
+ classes: {},
38
+ key: '0',
39
+ duplicates: true,
40
+ choice: {
41
+ value: '<div>6</div>',
42
+ id: '0'
43
+ },
44
+ targetId: '0',
45
+ onClick: onClick,
46
+ onRemoveChoice: onRemoveChoice,
47
+ connectDragSource: connectDragSource,
48
+ connectDragPreview: connectDragPreview
49
+ }, extras);
50
+
51
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_choice["default"], props));
52
+ };
53
+
54
+ describe('snapshot', function () {
55
+ it('renders', function () {
56
+ var w = wrapper();
57
+ expect(w).toMatchSnapshot();
58
+ });
59
+ });
60
+ });
61
+ describe('spec', function () {
62
+ describe('canDrag', function () {
63
+ it('returns true if category has any value and is enabled', function () {
64
+ var result = _choice.tileSource.canDrag({
65
+ choice: {
66
+ value: '<div>6</div>',
67
+ id: '0'
68
+ },
69
+ disabled: false
70
+ });
71
+
72
+ expect(result).toEqual(true);
73
+ });
74
+ it('returns false if category has any value and is disabled', function () {
75
+ var jsdomAlert = window.alert; // remember the jsdom alert
76
+
77
+ window.alert = function () {};
78
+
79
+ var result = _choice.tileSource.canDrag({
80
+ choice: {
81
+ value: '<div>6</div>',
82
+ id: '0'
83
+ },
84
+ disabled: true
85
+ });
86
+
87
+ expect(result).toEqual(false);
88
+ window.alert = jsdomAlert;
89
+ });
90
+ it('returns false if category value is empty', function () {
91
+ var jsdomAlert = window.alert; // remember the jsdom alert
92
+
93
+ window.alert = function () {};
94
+
95
+ var result = _choice.tileSource.canDrag({
96
+ choice: {
97
+ value: '',
98
+ id: '0'
99
+ }
100
+ });
101
+
102
+ expect(result).toEqual(false);
103
+ window.alert = jsdomAlert;
104
+ });
105
+ });
106
+ describe('beginDrag', function () {
107
+ it('returns the proper object', function () {
108
+ var result = _choice.tileSource.beginDrag({
109
+ choice: {
110
+ value: '<div>0</div>',
111
+ id: '0'
112
+ },
113
+ instanceId: '1',
114
+ targetId: '0'
115
+ });
116
+
117
+ expect(result).toEqual({
118
+ id: '0',
119
+ instanceId: '1',
120
+ value: {
121
+ value: '<div>0</div>',
122
+ id: '0'
123
+ }
124
+ });
125
+ });
126
+ });
127
+ });
128
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vY2hvaWNlLnRlc3QuanN4Il0sIm5hbWVzIjpbImRlc2NyaWJlIiwib25DbGljayIsIm9uUmVtb3ZlQ2hvaWNlIiwiY29ubmVjdERyYWdTb3VyY2UiLCJjb25uZWN0RHJhZ1ByZXZpZXciLCJiZWZvcmVFYWNoIiwiamVzdCIsImZuIiwid3JhcHBlciIsImV4dHJhcyIsInByb3BzIiwiY2xhc3NlcyIsImtleSIsImR1cGxpY2F0ZXMiLCJjaG9pY2UiLCJ2YWx1ZSIsImlkIiwidGFyZ2V0SWQiLCJpdCIsInciLCJleHBlY3QiLCJ0b01hdGNoU25hcHNob3QiLCJyZXN1bHQiLCJ0aWxlU291cmNlIiwiY2FuRHJhZyIsImRpc2FibGVkIiwidG9FcXVhbCIsImpzZG9tQWxlcnQiLCJ3aW5kb3ciLCJhbGVydCIsImJlZ2luRHJhZyIsImluc3RhbmNlSWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7QUFFQUEsUUFBUSxDQUFDLFFBQUQsRUFBVyxZQUFNO0FBQ3ZCLE1BQUlDLE9BQUo7QUFDQSxNQUFJQyxjQUFKO0FBQ0EsTUFBSUMsaUJBQUo7QUFDQSxNQUFJQyxrQkFBSjtBQUVBQyxFQUFBQSxVQUFVLENBQUMsWUFBTTtBQUNmSixJQUFBQSxPQUFPLEdBQUdLLElBQUksQ0FBQ0MsRUFBTCxFQUFWO0FBQ0FMLElBQUFBLGNBQWMsR0FBR0ksSUFBSSxDQUFDQyxFQUFMLEVBQWpCO0FBQ0FKLElBQUFBLGlCQUFpQixHQUFHRyxJQUFJLENBQUNDLEVBQUwsRUFBcEI7QUFDQUgsSUFBQUEsa0JBQWtCLEdBQUdFLElBQUksQ0FBQ0MsRUFBTCxFQUFyQjtBQUNELEdBTFMsQ0FBVjs7QUFPQSxNQUFNQyxPQUFPLEdBQUcsU0FBVkEsT0FBVSxDQUFDQyxNQUFELEVBQVk7QUFDMUIsUUFBTUMsS0FBSztBQUNUQyxNQUFBQSxPQUFPLEVBQUUsRUFEQTtBQUVUQyxNQUFBQSxHQUFHLEVBQUUsR0FGSTtB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QUFHQyxtQkFBV08sU0FBWCxDQUFxQjtBQUNsQ2hCLFFBQUFBLE1BQU0sRUFBRTtBQUFFQyxVQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsVUFBQUEsRUFBRSxFQUFFO0FBQTdCLFNBRDBCO0FBRWxDZSxRQUFBQSxVQUFVLEVBQUUsR0FGc0I7QUFHbENkLFFBQUFBLFFBQVEsRUFBRTtBQUh3QixPQUFyQixDQUFmOztBQUtBRyxNQUFBQSxNQUFNLENBQUNFLE1BQUQsQ0FBTixDQUFlSSxPQUFmLENBQXVCO0FBQUVWLFFBQUFBLEVBQUUsRUFBRSxHQUFOO0FBQVdlLFFBQUFBLFVBQVUsRUFBRSxHQUF2QjtBQUE0QmhCLFFBQUFBLEtBQUssRUFBRTtBQUFFQSxVQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsVUFBQUEsRUFBRSxFQUFFO0FBQTdCO0FBQW5DLE9BQXZCO0FBQ0QsS0FQQyxDQUFGO0FBUUQsR0FUTyxDQUFSO0FBVUQsQ0F0Q08sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBDaG9pY2UsIHsgdGlsZVNvdXJjZSB9IGZyb20gJy4uL2Nob2ljZSc7XG5cbmRlc2NyaWJlKCdDaG9pY2UnLCAoKSA9PiB7XG4gIGxldCBvbkNsaWNrO1xuICBsZXQgb25SZW1vdmVDaG9pY2U7XG4gIGxldCBjb25uZWN0RHJhZ1NvdXJjZTtcbiAgbGV0IGNvbm5lY3REcmFnUHJldmlldztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBvbkNsaWNrID0gamVzdC5mbigpO1xuICAgIG9uUmVtb3ZlQ2hvaWNlID0gamVzdC5mbigpO1xuICAgIGNvbm5lY3REcmFnU291cmNlID0gamVzdC5mbigpO1xuICAgIGNvbm5lY3REcmFnUHJldmlldyA9IGplc3QuZm4oKTtcbiAgfSk7XG5cbiAgY29uc3Qgd3JhcHBlciA9IChleHRyYXMpID0+IHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIGNsYXNzZXM6IHt9LFxuICAgICAga2V5OiAnMCcsXG4gICAgICBkdXBsaWNhdGVzOiB0cnVlLFxuICAgICAgY2hvaWNlOiB7XG4gICAgICAgIHZhbHVlOiAnPGRpdj42PC9kaXY+JyxcbiAgICAgICAgaWQ6ICcwJyxcbiAgICAgIH0sXG4gICAgICB0YXJnZXRJZDogJzAnLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uUmVtb3ZlQ2hvaWNlLFxuICAgICAgY29ubmVjdERyYWdTb3VyY2UsXG4gICAgICBjb25uZWN0RHJhZ1ByZXZpZXcsXG4gICAgICAuLi5leHRyYXMsXG4gICAgfTtcblxuICAgIHJldHVybiBzaGFsbG93KDxDaG9pY2Ugey4uLnByb3BzfSAvPik7XG4gIH07XG4gIGRlc2NyaWJlKCdzbmFwc2hvdCcsICgpID0+IHtcbiAgICBpdCgncmVuZGVycycsICgpID0+IHtcbiAgICAgIGNvbnN0IHcgPSB3cmFwcGVyKCk7XG4gICAgICBleHBlY3QodykudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdzcGVjJywgKCkgPT4ge1xuICBkZXNjcmliZSgnY2FuRHJhZycsICgpID0+IHtcbiAgICBpdCgncmV0dXJucyB0cnVlIGlmIGNhdGVnb3J5IGhhcyBhbnkgdmFsdWUgYW5kIGlzIGVuYWJsZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aWxlU291cmNlLmNhbkRyYWcoeyBjaG9pY2U6IHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sIGRpc2FibGVkOiBmYWxzZSB9KTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBmYWxzZSBpZiBjYXRlZ29yeSBoYXMgYW55IHZhbHVlIGFuZCBpcyBkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgIGNvbnN0IGpzZG9tQWxlcnQgPSB3aW5kb3cuYWxlcnQ7IC8vIHJlbWVtYmVyIHRoZSBqc2RvbSBhbGVydFxuICAgICAgd2luZG93LmFsZXJ0ID0gKCkgPT4ge307XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRpbGVTb3VyY2UuY2FuRHJhZyh7IGNob2ljZTogeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSwgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKGZhbHNlKTtcblxuICAgICAgd2luZG93LmFsZXJ0ID0ganNkb21BbGVydDtcbiAgICB9KTtcblxuICAgIGl0KCdyZXR1cm5zIGZhbHNlIGlmIGNhdGVnb3J5IHZhbHVlIGlzIGVtcHR5JywgKCkgPT4ge1xuICAgICAgY29uc3QganNkb21BbGVydCA9IHdpbmRvdy5hbGVydDsgLy8gcmVtZW1iZXIgdGhlIGpzZG9tIGFsZXJ0XG4gICAgICB3aW5kb3cuYWxlcnQgPSAoKSA9PiB7fTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gdGlsZVNvdXJjZS5jYW5EcmFnKHsgY2hvaWNlOiB7IHZhbHVlOiAnJywgaWQ6ICcwJyB9IH0pO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbChmYWxzZSk7XG5cbiAgICAgIHdpbmRvdy5hbGVydCA9IGpzZG9tQWxlcnQ7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdiZWdpbkRyYWcnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgdGhlIHByb3BlciBvYmplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSB0aWxlU291cmNlLmJlZ2luRHJhZyh7XG4gICAgICAgIGNob2ljZTogeyB2YWx1ZTogJzxkaXY+MDwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgaW5zdGFuY2VJZDogJzEnLFxuICAgICAgICB0YXJnZXRJZDogJzAnLFxuICAgICAgfSk7XG4gICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsgaWQ6ICcwJywgaW5zdGFuY2VJZDogJzEnLCB2YWx1ZTogeyB2YWx1ZTogJzxkaXY+MDwvZGl2PicsIGlkOiAnMCcgfSB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
6
+
7
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
8
+
9
+ var _enzyme = require("enzyme");
10
+
11
+ var _react = _interopRequireDefault(require("react"));
12
+
13
+ var _choices = require("../choices");
14
+
15
+ var _defaults = _interopRequireDefault(require("../defaults"));
16
+
17
+ var _markupUtils = require("../markupUtils");
18
+
19
+ 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; }
20
+
21
+ 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; }
22
+
23
+ jest.mock('@pie-lib/config-ui', function () {
24
+ return {
25
+ choiceUtils: {
26
+ firstAvailableIndex: jest.fn()
27
+ },
28
+ settings: {
29
+ Panel: function Panel(props) {
30
+ return /*#__PURE__*/_react["default"].createElement("div", props);
31
+ },
32
+ toggle: jest.fn(),
33
+ radio: jest.fn(),
34
+ dropdown: jest.fn()
35
+ },
36
+ layout: {
37
+ ConfigLayout: function ConfigLayout(props) {
38
+ return /*#__PURE__*/_react["default"].createElement("div", null, props.children);
39
+ }
40
+ }
41
+ };
42
+ });
43
+ var model = {
44
+ markup: '{{0}} + {{1}} = 15',
45
+ prompt: '<p>Solve the equation below.</p>',
46
+ choices: [{
47
+ value: '<div>6</div>',
48
+ id: '0'
49
+ }, {
50
+ value: '<div>9</div>',
51
+ id: '1'
52
+ }, {
53
+ value: '<div>12</div>',
54
+ id: '2'
55
+ }],
56
+ choicesPosition: 'below',
57
+ correctResponse: {
58
+ 0: '0',
59
+ 1: '1'
60
+ },
61
+ duplicates: true,
62
+ alternateResponses: [['1'], ['0']],
63
+ rationale: '<p>A correct response is shown below:</p><ul><li>2/6 = 1/3</li><li>4/8 = 1/2</li><li>6/10 = 3/5</li><li>9/12 = 3/4</li></ul>'
64
+ };
65
+
66
+ var prepareModel = function prepareModel() {
67
+ var model = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
68
+
69
+ var joinedObj = _objectSpread(_objectSpread({}, _defaults["default"].model), model);
70
+
71
+ var slateMarkup = model.slateMarkup || (0, _markupUtils.createSlateMarkup)(joinedObj.markup, joinedObj.choices, joinedObj.correctResponse);
72
+ var processedMarkup = (0, _markupUtils.processMarkup)(slateMarkup);
73
+ return _objectSpread(_objectSpread({}, joinedObj), {}, {
74
+ slateMarkup: slateMarkup,
75
+ markup: processedMarkup.markup,
76
+ correctResponse: processedMarkup.correctResponse
77
+ });
78
+ };
79
+
80
+ describe('Choices', function () {
81
+ var onChange;
82
+ beforeEach(function () {
83
+ onChange = jest.fn();
84
+ });
85
+
86
+ var wrapper = function wrapper(extras) {
87
+ var defaults = _objectSpread({
88
+ onChange: onChange,
89
+ classes: {},
90
+ model: prepareModel(model),
91
+ duplicates: true
92
+ }, extras);
93
+
94
+ var props = _objectSpread({}, defaults);
95
+
96
+ return (0, _enzyme.shallow)( /*#__PURE__*/_react["default"].createElement(_choices.Choices, props), {
97
+ disableLifecycleMethods: true
98
+ });
99
+ };
100
+
101
+ describe('snapshot', function () {
102
+ it('renders with duplicates', function () {
103
+ expect(wrapper()).toMatchSnapshot();
104
+ });
105
+ it('renders without duplicates', function () {
106
+ expect(wrapper({
107
+ duplicates: false
108
+ })).toMatchSnapshot();
109
+ });
110
+ });
111
+ describe('logic', function () {
112
+ var w;
113
+ beforeEach(function () {
114
+ w = wrapper();
115
+ });
116
+ describe('onChoiceChanged', function () {
117
+ it('removes a choice if its new value is empty', function () {
118
+ w.instance().onChoiceChanged('<div>12</div>', '', '2');
119
+ expect(onChange).toBeCalledWith([{
120
+ value: '<div>6</div>',
121
+ id: '0'
122
+ }, {
123
+ value: '<div>9</div>',
124
+ id: '1'
125
+ }]);
126
+ });
127
+ it('does not add new choice if it is identical to another choice', function () {
128
+ w.instance().onChoiceChanged('', '<div>9</div>', '2');
129
+ expect(onChange).toBeCalledWith([{
130
+ value: '<div>6</div>',
131
+ id: '0'
132
+ }, {
133
+ value: '<div>9</div>',
134
+ id: '1'
135
+ }]);
136
+ });
137
+ it('does not change choice if it would be identical to another choice', function () {
138
+ w.instance().onChoiceChanged('<div>6</div>', '<div>9</div>', '0');
139
+ expect(onChange).toHaveBeenCalledTimes(0);
140
+ });
141
+ it('does not remove a choice if its new value is empty, but is used in correct response', function () {
142
+ var jsdomAlert = window.alert; // remember the jsdom alert
143
+
144
+ window.alert = function () {};
145
+
146
+ w.instance().onChoiceChanged('<div>9</div>', '', '1');
147
+ expect(onChange).not.toBeCalled();
148
+ window.alert = jsdomAlert;
149
+ });
150
+ it('does not remove a choice if its new value is empty, but is used in alternate response', function () {
151
+ var jsdomAlert = window.alert; // remember the jsdom alert
152
+
153
+ window.alert = function () {};
154
+
155
+ wrapper({
156
+ markup: '{{0}}'
157
+ }).instance().onChoiceChanged('<div>9</div>', '', '1');
158
+ expect(onChange).not.toBeCalled();
159
+ window.alert = jsdomAlert;
160
+ });
161
+ it('does not remove a choice if its new value is empty, but the old value was empty as well (at focusing a new choice without editing)', function () {
162
+ var jsdomAlert = window.alert; // remember the jsdom alert
163
+
164
+ window.alert = function () {};
165
+
166
+ wrapper({
167
+ markup: '{{0}}'
168
+ }).instance().onChoiceChanged('', '', '1');
169
+ expect(onChange).not.toBeCalled();
170
+ window.alert = jsdomAlert;
171
+ });
172
+ it('updates choices', function () {
173
+ w.instance().onChoiceChanged('<div>9</div>', '<div>3*3</div>', '1');
174
+ expect(onChange).toBeCalledWith([{
175
+ value: '<div>6</div>',
176
+ id: '0'
177
+ }, {
178
+ value: '<div>3*3</div>',
179
+ id: '1'
180
+ }, {
181
+ value: '<div>12</div>',
182
+ id: '2'
183
+ }]);
184
+ });
185
+ });
186
+ describe('onChoiceFocus', function () {
187
+ it('sets focused element id on state', function () {
188
+ w.instance().onChoiceFocus('1');
189
+ expect(w.instance().state.focusedEl).toEqual('1');
190
+ });
191
+ });
192
+ describe('onAddChoice', function () {
193
+ it('adds a choice', function () {
194
+ wrapper().instance().onAddChoice();
195
+ expect(onChange).toBeCalledWith([].concat((0, _toConsumableArray2["default"])(model.choices), [{
196
+ id: '3',
197
+ value: ''
198
+ }]));
199
+ });
200
+ });
201
+ describe('onChoiceRemove', function () {
202
+ it('removes a choice', function () {
203
+ wrapper().instance().onChoiceRemove('1');
204
+ expect(onChange).toBeCalledWith([{
205
+ value: '<div>6</div>',
206
+ id: '0'
207
+ }, {
208
+ value: '<div>12</div>',
209
+ id: '2'
210
+ }]);
211
+ });
212
+ });
213
+ describe('onChoiceRemove & onAddChoice', function () {
214
+ it('prevents duplicate IDs when adding choices after removing some', function () {
215
+ var initialWrapper = wrapper();
216
+ initialWrapper.instance().onChoiceRemove('1');
217
+ expect(onChange).toHaveBeenCalledWith([{
218
+ value: '<div>6</div>',
219
+ id: '0'
220
+ }, {
221
+ value: '<div>12</div>',
222
+ id: '2'
223
+ }]);
224
+ var updatedChoices = [{
225
+ value: '<div>6</div>',
226
+ id: '0'
227
+ }, {
228
+ value: '<div>12</div>',
229
+ id: '2'
230
+ }];
231
+ var wrapperWithUpdatedState = wrapper({
232
+ model: _objectSpread(_objectSpread({}, model), {}, {
233
+ choices: updatedChoices
234
+ })
235
+ });
236
+ wrapperWithUpdatedState.instance().onAddChoice();
237
+ expect(onChange).toHaveBeenLastCalledWith([{
238
+ value: '<div>6</div>',
239
+ id: '0'
240
+ }, {
241
+ value: '<div>12</div>',
242
+ id: '2'
243
+ }, {
244
+ id: '3',
245
+ value: ''
246
+ }]);
247
+ });
248
+ });
249
+ describe('getVisibleChoices', function () {
250
+ it('choices are null => returns []', function () {
251
+ var visibleChoices = wrapper({
252
+ model: {
253
+ choices: null
254
+ }
255
+ }).instance().getVisibleChoices();
256
+ expect(visibleChoices).toEqual([]);
257
+ });
258
+ it('duplicates = true', function () {
259
+ var choices = [{
260
+ value: '<div>6</div>',
261
+ id: '0'
262
+ }, {
263
+ value: '<div>9</div>',
264
+ id: '1'
265
+ }, {
266
+ value: '<div>12</div>',
267
+ id: '2'
268
+ }];
269
+ var visibleChoices = wrapper({
270
+ model: {
271
+ duplicates: true,
272
+ choices: choices,
273
+ correctResponse: {
274
+ 0: '0',
275
+ 1: '1'
276
+ }
277
+ }
278
+ }).instance().getVisibleChoices();
279
+ expect(visibleChoices).toEqual(choices);
280
+ });
281
+ it('duplicates = false', function () {
282
+ var choices = [{
283
+ value: '<div>6</div>',
284
+ id: '0'
285
+ }, {
286
+ value: '<div>9</div>',
287
+ id: '1'
288
+ }, {
289
+ value: '<div>12</div>',
290
+ id: '2'
291
+ }];
292
+ var visibleChoices = wrapper({
293
+ duplicates: false,
294
+ model: {
295
+ choices: choices,
296
+ correctResponse: {
297
+ 0: '0',
298
+ 1: '1'
299
+ }
300
+ }
301
+ }).instance().getVisibleChoices();
302
+ expect(visibleChoices).toEqual([{
303
+ value: '<div>12</div>',
304
+ id: '2'
305
+ }]);
306
+ });
307
+ it('duplicates = false, empty correctResponse', function () {
308
+ var choices = [{
309
+ value: '<div>6</div>',
310
+ id: '0'
311
+ }, {
312
+ value: '<div>9</div>',
313
+ id: '1'
314
+ }, {
315
+ value: '<div>12</div>',
316
+ id: '2'
317
+ }];
318
+ var visibleChoices = wrapper({
319
+ duplicates: false,
320
+ model: {
321
+ choices: choices,
322
+ correctResponse: {}
323
+ }
324
+ }).instance().getVisibleChoices();
325
+ expect(visibleChoices).toEqual(choices);
326
+ });
327
+ it('duplicates = false, correctResponse = null', function () {
328
+ var choices = [{
329
+ value: '<div>6</div>',
330
+ id: '0'
331
+ }, {
332
+ value: '<div>9</div>',
333
+ id: '1'
334
+ }, {
335
+ value: '<div>12</div>',
336
+ id: '2'
337
+ }];
338
+ var visibleChoices = wrapper({
339
+ duplicates: false,
340
+ model: {
341
+ choices: choices,
342
+ correctResponse: null
343
+ }
344
+ }).instance().getVisibleChoices();
345
+ expect(visibleChoices).toEqual(choices);
346
+ });
347
+ });
348
+ });
349
+ });
350
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vY2hvaWNlcy50ZXN0LmpzeCJdLCJuYW1lcyI6WyJqZXN0IiwibW9jayIsImNob2ljZVV0aWxzIiwiZmlyc3RBdmFpbGFibGVJbmRleCIsImZuIiwic2V0dGluZ3MiLCJQYW5lbCIsInByb3BzIiwidG9nZ2xlIiwicmFkaW8iLCJkcm9wZG93biIsImxheW91dCIsIkNvbmZpZ0xheW91dCIsImNoaWxkcmVuIiwibW9kZWwiLCJtYXJrdXAiLCJwcm9tcHQiLCJjaG9pY2VzIiwidmFsdWUiLCJpZCIsImNob2ljZXNQb3NpdGlvbiIsImNvcnJlY3RSZXNwb25zZSIsImR1cGxpY2F0ZXMiLCJhbHRlcm5hdGVSZXNwb25zZXMiLCJyYXRpb25hbGUiLCJwcmVwYXJlTW9kZWwiLCJqb2luZWRPYmoiLCJzZW5zaWJsZURlZmF1bHRzIiwic2xhdGVNYXJrdXAiLCJwcm9jZXNzZWRNYXJrdXAiLCJkZXNjcmliZSIsIm9uQ2hhbmdlIiwiYmVmb3JlRWFjaCIsIndyYXBwZXIiLCJleHRyYXMiLCJkZWZhdWx0cyIsImNsYXNzZXMiLCJkaXNhYmxlTGlmZWN5Y2xlTWV0aG9kcyIsIml0IiwiZXhwZWN0IiwidG9NYXRjaFNuYXBzaG90IiwidyIsImluc3RhbmNlIiwib25DaG9pY2VDaGFuZ2VkIiwidG9CZUNhbGxlZFdpdGgiLCJ0b0hhdmVCZWVuQ2FsbGVkVGltZXMiLCJqc2RvbUFsZXJ0Iiwid2luZG93IiwiYWxlcnQiLCJub3QiLCJ0b0JlQ2FsbGVkIiwib25DaG9pY2VGb2N1cyIsInN0YXRlIiwiZm9jdXNlZEVsIiwidG9FcXVhbCIsIm9uQWRkQ2hvaWNlIiwib25DaG9pY2VSZW1vdmUiLCJpbml0aWFsV3JhcHBlciIsInRvSGF2ZUJlZW5DYWxsZWRXaXRoIiwidXBkYXRlZENob2ljZXMiLCJ3cmFwcGVyV2l0aFVwZGF0ZWRTdGF0ZSIsInRvSGF2ZUJlZW5MYXN0Q2FsbGVkV2l0aCIsInZpc2libGVDaG9pY2VzIiwiZ2V0VmlzaWJsZUNob2ljZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7OztBQUVBQSxJQUFJLENBQUNDLElBQUwsQ0FBVSxvQkFBVixFQUFnQztBQUFBLFNBQU87QUFDckNDLElBQUFBLFdBQVcsRUFBRTtBQUNYQyxNQUFBQSxtQkFBbUIsRUFBRUgsSUFBSSxDQUFDSSxFQUFMO0FBRFYsS0FEd0I7QUFJckNDLElBQUFBLFFBQVEsRUFBRTtBQUNSQyxNQUFBQSxLQUFLLEVBQUUsZUFBQ0MsS0FBRDtBQUFBLDRCQUFXLHVDQUFTQSxLQUFULENBQVg7QUFBQSxPQURDO0FBRVJDLE1BQUFBLE1BQU0sRUFBRVIsSUFBSSxDQUFDSSxFQUFMLEVBRkE7QUFHUkssTUFBQUEsS0FBSyxFQUFFVCxJQUFJLENBQUNJLEVBQUwsRUFIQztBQUlSTSxNQUFBQSxRQUFRLEVBQUVWLElBQUksQ0FBQ0ksRUFBTDtBQUpGLEtBSjJCO0FBVXJDTyxJQUFBQSxNQUFNLEVBQUU7QUFDTkMsTUFBQUEsWUFBWSxFQUFFLHNCQUFDTCxLQUFEO0FBQUEsNEJBQVcsNkNBQU1BLEtBQUssQ0FBQ00sUUFBWixDQUFYO0FBQUE7QUFEUjtBQVY2QixHQUFQO0FBQUEsQ0FBaEM7QUFlQSxJQUFNQyxLQUFLLEdBQUc7QUFDWkMsRUFBQUEsTUFBTSxFQUFFLG9CQURJO0FBRVpDLEVBQUFBLE1BQU0sRUFBRSxrQ0FGSTtBQUdaQyxFQUFBQSxPQUFPLEVBQUUsQ0FDUDtBQUFFQyxJQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsSUFBQUEsRUFBRSxFQUFFO0FBQTdCLEdBRE8sRUFFUDtBQUFFRCxJQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsSUFBQUEsRUFBRSxFQUFFO0FBQTdCLEdBRk8sRUFHUDtBQUFFRCxJQUFBQSxLQUFLLEVBQUUsZUFBVDtBQUEwQkMsSUFBQUEsRUFBRSxFQUFFO0FBQTlCLEdBSE8sQ0FIRztBQVFaQyxFQUFBQSxlQUFlLEVBQUUsT0FSTDtBQVNaQyxFQUFBQSxlQUFlLEVBQUU7QUFDZixPQUFHLEdBRFk7QUFFZixPQUFHO0FBRlksR0FUTDtBQWFaQyxFQUFBQSxVQUFVLEVBQUUsSUFiQTtBQWNaQyxFQUFBQSxrQkFBa0IsRUFBRSxDQUFDLENBQUMsR0FBRCxDQUFELEVBQVEsQ0FBQyxHQUFELENBQVIsQ0FkUjtBQWVaQyxFQUFBQSxTQUFTLEVBQ1A7QUFoQlUsQ0FBZDs7QUFtQkEsSUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQWUsR0FBZ0I7QUFBQSxNQUFmWCxLQUFlLHVFQUFQLEVBQU87O0FBQ25DLE1BQU1ZLFNBQVMsbUNBQ1ZDLHFCQUFpQmIsS0FEUCxHQUVWQSxLQUZVLENBQWY7O0FBSUEsTUFBTWMsV0FBVyxHQUNmZCxLQUFLLENBQUNjLFdBQU4sSUFBcUIsb0NBQWtCRixTQUFTLENBQUNYLE1BQTVCLEVBQW9DVyxTQUFTLENBQUNULE9BQTlDLEVBQXVEUyxTQUFTLENBQUNMLGVBQWpFLENBRHZCO0FBRUEsTUFBTVEsZUFBZSxHQUFHLGdDQUFjRCxXQUFkLENBQXhCO0FBRUEseUNBQ0tGLFNBREw7QUFFRUUsSUFBQUEsV0FBVyxFQUFYQSxXQUZGO0FBR0ViLElBQUFBLE1BQU0sRUFBRWMsZUFBZSxDQUFDZCxNQUgxQjtBQUlFTSxJQUFBQSxlQUFlLEVBQUVRLGVBQWUsQ0FBQ1I7QUFKbkM7QUFNRCxDQWZEOztBQWlCQVMsUUFBUSxDQUFDLFNBQUQsRUFBWSxZQUFNO0FBQ3hCLE1BQUlDLFFBQUo7QUFFQUMsRUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZkQsSUFBQUEsUUFBUSxHQUFHL0IsSUFBSSxDQUFDSSxFQUFMLEVBQVg7QUFDRCxHQUZTLENBQVY7O0FBSUEsTUFBTTZCLE9BQU8sR0FBRyxTQUFWQSxPQUFVLENBQUNDLE1BQUQsRUFBWTtBQUMxQixRQUFNQyxRQUFRO0FBQ1pKLE1BQUFBLFFBQVEsRUFBUkEsUUFEWTtBQUVaSyxNQUFBQSxPQUFPLEVBQUUsRUFGRztBQUdadEIsTUFBQUEsS0FBSyxFQUFFVyxZQUFZLENBQUNYLEtBQUQsQ0FIUDtBQUlaUSxNQUFBQSxVQUFVLEVBQUU7QUFKQSxPQUtUWSxNQUxTLENBQWQ7O0FBT0EsUUFBTTNCLEtBQUsscUJBQVE0QixRQUFSLENBQVg7O0FBRUEsV0FBTyxtQ0FBUSxnQ0FBQyxnQkFBRCxFQUFhNUIsS0FBYixDQUFSLEVBQWdDO0FBQUU4QixNQUFBQSx1QkFBdUIsRUFBRTtBQUEzQixLQUFoQyxDQUFQO0FBQ0QsR0FYRDs7QUFhQVAsRUFBQUEsUUFBUSxDQUFDLFVBQUQsRUFBYSxZQUFNO0FBQ3pCUSxJQUFBQSxFQUFFLENBQUMseUJBQUQsRUFBNEIsWUFBTTtBQUNsQ0MsTUFBQUEsTUFBTSxDQUFDTixPQUFPLEVBQVIsQ0FBTixDQUFrQk8sZUFBbEI7QUFDRCxLQUZDLENBQUY7QUFJQUYsSUFBQUEsRUFBRSxDQUFDLDRCQUFELEVBQStCLFlBQU07QUFDckNDLE1BQUFBLE1BQU0sQ0FBQ04sT0FBTyxDQUFDO0FBQUVYLFFBQUFBLFVBQVUsRUFBRTtBQUFkLE9BQUQsQ0FBUixDQUFOLENBQXVDa0IsZUFBdkM7QUFDRCxLQUZDLENBQUY7QUFHRCxHQVJPLENBQVI7QUFVQVYsRUFBQUEsUUFBUSxDQUFDLE9BQUQsRUFBVSxZQUFNO0FBQ3RCLFFBQUlXLENBQUo7QUFFQVQsSUFBQUEsVUFBVSxDQUFDLFlBQU07QUFDZlMsTUFBQUEsQ0FBQyxHQUFHUixPQUFPLEVBQVg7QUFDRCxLQUZTLENBQVY7QUFJQUgsSUFBQUEsUUFBUSxDQUFDLGlCQUFELEVBQW9CLFlBQU07QUFDaENRLE1BQUFBLEVBQUUsQ0FBQyw0Q0FBRCxFQUErQyxZQUFNO0FBQ3JERyxRQUFBQSxDQUFDLENBQUNDLFFBQUYsR0FBYUMsZUFBYixDQUE2QixlQUE3QixFQUE4QyxFQUE5QyxFQUFrRCxHQUFsRDtBQUVBSixRQUFBQSxNQUFNLENBQUNSLFFBQUQsQ0FBTixDQUFpQmEsY0FBakIsQ0FBZ0MsQ0FDOUI7QUFBRTFCLFVBQUFBLEtBQUssRUFBRSxjQUFUO0FBQXlCQyxVQUFBQSxFQUFFLEVBQUU7QUFBN0IsU0FEOEIsRUFFOUI7QUFBRUQsVUFBQUEsS0FBSyxFQUFFLGNBQVQ7QUFBeUJDLFVBQUFBLEVBQUUsRUFBRTtBQUE3QixTQUY4QixDQUFoQztBQUlELE9BUEMsQ0FBRjtBQVNBbUIsTUFBQUEsRUFBRSxDQUFDLDhEQUFELEVBQWlFLFlBQU07QUFDdkVHLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhQyxlQUFiLENBQTZCLEVBQTdCLEVBQWlDLGNBQWpDLEVBQWlELEdBQWpEO0FBRUFKLFFBQUFBLE1BQU0sQ0FBQ1IsUUFBRCxDQUFOLENBQWlCYSxjQUFqQixDQUFnQyxDQUM5QjtBQUFFMUIsVUFBQUEsS0FBSyxFQUFFLGNBQVQ7QUFBeUJDLFVBQUFBLEVBQUUsRUFBRTtBQUE3QixTQUQ4QixFQUU5QjtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsVUFBQUEsRUFBRSxFQUFFO0FBQTdCLFNBRjhCLENBQWhDO0FBSUQsT0FQQyxDQUFGO0FBU0FtQixNQUFBQSxFQUFFLENBQUMsbUVBQUQsRUFBc0UsWUFBTTtBQUM1RUcsUUFBQUEsQ0FBQyxDQUFDQyxRQUFGLEdBQWFDLGVBQWIsQ0FBNkIsY0FBN0IsRUFBNkMsY0FBN0MsRUFBNkQsR0FBN0Q7QUFFQUosUUFBQUEsTUFBTSxDQUFDUixRQUFELENBQU4sQ0FBaUJjLHFCQUFqQixDQUF1QyxDQUF2QztBQUNELE9BSkMsQ0FBRjtBQU1BUCxNQUFBQSxFQUFFLENBQUMscUZBQUQsRUFBd0YsWUFBTTtBQUM5RixZQUFNUSxVQUFVLEdBQUdDLE1BQU0sQ0FBQ0MsS0FBMUIsQ0FEOEYsQ0FDN0Q7O0FBRWpDRCxRQUFBQSxNQUFNLENBQUNDLEtBQVAsR0FBZSxZQUFNLENBQUUsQ0FBdkI7O0FBRUFQLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhQyxlQUFiLENBQTZCLGNBQTdCLEVBQTZDLEVBQTdDLEVBQWlELEdBQWpEO0FBRUFKLFFBQUFBLE1BQU0sQ0FBQ1IsUUFBRCxDQUFOLENBQWlCa0IsR0FBakIsQ0FBcUJDLFVBQXJCO0FBRUFILFFBQUFBLE1BQU0sQ0FBQ0MsS0FBUCxHQUFlRixVQUFmO0FBQ0QsT0FWQyxDQUFGO0FBWUFSLE1BQUFBLEVBQUUsQ0FBQyx1RkFBRCxFQUEwRixZQUFNO0FBQ2hHLFlBQU1RLFVBQVUsR0FBR0MsTUFBTSxDQUFDQyxLQUExQixDQURnRyxDQUMvRDs7QUFFakNELFFBQUFBLE1BQU0sQ0FBQ0MsS0FBUCxHQUFlLFlBQU0sQ0FBRSxDQUF2Qjs7QUFFQWYsUUFBQUEsT0FBTyxDQUFDO0FBQUVsQixVQUFBQSxNQUFNLEVBQUU7QUFBVixTQUFELENBQVAsQ0FBNkIyQixRQUE3QixHQUF3Q0MsZUFBeEMsQ0FBd0QsY0FBeEQsRUFBd0UsRUFBeEUsRUFBNEUsR0FBNUU7QUFFQUosUUFBQUEsTUFBTSxDQUFDUixRQUFELENBQU4sQ0FBaUJrQixHQUFqQixDQUFxQkMsVUFBckI7QUFFQUgsUUFBQUEsTUFBTSxDQUFDQyxLQUFQLEdBQWVGLFVBQWY7QUFDRCxPQVZDLENBQUY7QUFZQVIsTUFBQUEsRUFBRSxDQUFDLG9JQUFELEVBQXVJLFlBQU07QUFDN0ksWUFBTVEsVUFBVSxHQUFHQyxNQUFNLENBQUNDLEtBQTFCLENBRDZJLENBQzVHOztBQUVqQ0QsUUFBQUEsTUFBTSxDQUFDQyxLQUFQLEdBQWUsWUFBTSxDQUFFLENBQXZCOztBQUVBZixRQUFBQSxPQUFPLENBQUM7QUFBRWxCLFVBQUFBLE1BQU0sRUFBRTtBQUFWLFNBQUQsQ0FBUCxDQUE2QjJCLFFBQTdCLEdBQXdDQyxlQUF4QyxDQUF3RCxFQUF4RCxFQUE0RCxFQUE1RCxFQUFnRSxHQUFoRTtBQUVBSixRQUFBQSxNQUFNLENBQUNSLFFBQUQsQ0FBTixDQUFpQmtCLEdBQWpCLENBQXFCQyxVQUFyQjtBQUVBSCxRQUFBQSxNQUFNLENBQUNDLEtBQVAsR0FBZUYsVUFBZjtBQUNELE9BVkMsQ0FBRjtBQVlBUixNQUFBQSxFQUFFLENBQUMsaUJBQUQsRUFBb0IsWUFBTTtBQUMxQkcsUUFBQUEsQ0FBQyxDQUFDQyxRQUFGLEdBQWFDLGVBQWIsQ0FBNkIsY0FBN0IsRUFBNkMsZ0JBQTdDLEVBQStELEdBQS9EO0FBRUFKLFFBQUFBLE1BQU0sQ0FBQ1IsUUFBRCxDQUFOLENBQWlCYSxjQUFqQixDQUFnQyxDQUM5QjtBQUFFMUIsVUFBQUEsS0FBSyxFQUFFLGNBQVQ7QUFBeUJDLFVBQUFBLEVBQUUsRUFBRTtBQUE3QixTQUQ4QixFQUU5QjtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsZ0JBQVQ7QUFBMkJDLFVBQUFBLEVBQUUsRUFBRTtBQUEvQixTQUY4QixFQUc5QjtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsZUFBVDtBQUEwQkMsVUFBQUEsRUFBRSxFQUFFO0FBQTlCLFNBSDhCLENBQWhDO0FBS0QsT0FSQyxDQUFGO0FBU0QsS0F0RU8sQ0FBUjtBQXdFQVcsSUFBQUEsUUFBUSxDQUFDLGVBQUQsRUFBa0IsWUFBTTtBQUM5QlEsTUFBQUEsRUFBRSxDQUFDLGtDQUFELEVBQXFDLFlBQU07QUFDM0NHLFFBQUFBLENBQUMsQ0FBQ0MsUUFBRixHQUFhUyxhQUFiLENBQTJCLEdBQTNCO0FBRUFaLFFBQUFBLE1BQU0sQ0FBQ0UsQ0FBQyxDQUFDQyxRQUFGLEdBQWFVLEtBQWIsQ0FBbUJDLFNBQXBCLENBQU4sQ0FBcUNDLE9BQXJDLENBQTZDLEdBQTdDO0FBQ0QsT0FKQyxDQUFGO0FBS0QsS0FOTyxDQUFSO0FBUUF4QixJQUFBQSxRQUFRLENBQUMsYUFBRCxFQUFnQixZQUFNO0FBQzVCUSxNQUFBQSxFQUFFLENBQUMsZUFBRCxFQUFrQixZQUFNO0FBQ3hCTCxRQUFBQSxPQUFPLEdBQUdTLFFBQVYsR0FBcUJhLFdBQXJCO0FBRUFoQixRQUFBQSxNQUFNLENBQUNSLFFBQUQsQ0FBTixDQUFpQmEsY0FBakIsK0NBQW9DOUIsS0FBSyxDQUFDRyxPQUExQyxJQUFtRDtBQUFFRSxVQUFBQSxFQUFFLEVBQUUsR0FBTjtBQUFXRCxVQUFBQSxLQUFLLEVBQUU7QUFBbEIsU0FBbkQ7QUFDRCxPQUpDLENBQUY7QUFLRCxLQU5PLENBQVI7QUFRQVksSUFBQUEsUUFBUSxDQUFDLGdCQUFELEVBQW1CLFlBQU07QUFDL0JRLE1BQUFBLEVBQUUsQ0FBQyxrQkFBRCxFQUFxQixZQUFNO0FBQzNCTCxRQUFBQSxPQUFPLEdBQUdTLFFBQVYsR0FBcUJjLGNBQXJCLENBQW9DLEdBQXBDO0FBRUFqQixRQUFBQSxNQUFNLENBQUNSLFFBQUQsQ0FBTixDQUFpQmEsY0FBakIsQ0FBZ0MsQ0FDOUI7QUFBRTFCLFVBQUFBLEtBQUssRUFBRSxjQUFUO0FBQXlCQyxVQUFBQSxFQUFFLEVBQUU7QUFBN0IsU0FEOEIsRUFFOUI7QUFBRUQsVUFBQUEsS0FBSyxFQUFFLGVBQVQ7QUFBMEJDLFVBQUFBLEVBQUUsRUFBRTtBQUE5QixTQUY4QixDQUFoQztBQUlELE9BUEMsQ0FBRjtBQVFELEtBVE8sQ0FBUjtBQVdBVyxJQUFBQSxRQUFRLENBQUMsOEJBQUQsRUFBaUMsWUFBTTtBQUM3Q1EsTUFBQUEsRUFBRSxDQUFDLGdFQUFELEVBQW1FLFlBQU07QUFDekUsWUFBTW1CLGNBQWMsR0FBR3hCLE9BQU8sRUFBOUI7QUFFQXdCLFFBQUFBLGNBQWMsQ0FBQ2YsUUFBZixHQUEwQmMsY0FBMUIsQ0FBeUMsR0FBekM7QUFFQWpCLFFBQUFBLE1BQU0sQ0FBQ1IsUUFBRCxDQUFOLENBQWlCMkIsb0JBQWpCLENBQXNDLENBQ3BDO0FBQUV4QyxVQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsVUFBQUEsRUFBRSxFQUFFO0FBQTdCLFNBRG9DLEVBRXBDO0FBQUVELFVBQUFBLEtBQUssRUFBRSxlQUFUO0FBQTBCQyxVQUFBQSxFQUFFLEVBQUU7QUFBOUIsU0FGb0MsQ0FBdEM7QUFLQSxZQUFNd0MsY0FBYyxHQUFHLENBQ3JCO0FBQUV6QyxVQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsVUFBQUEsRUFBRSxFQUFFO0FBQTdCLFNBRHFCLEVBRXJCO0FBQUVELFVBQUFBLEtBQUssRUFBRSxlQUFUO0FBQTBCQyxVQUFBQSxFQUFFLEVBQUU7QUFBOUIsU0FGcUIsQ0FBdkI7QUFLQSxZQUFNeUMsdUJBQXVCLEdBQUczQixPQUFPLENBQUM7QUFDdENuQixVQUFBQSxLQUFLLGtDQUFPQSxLQUFQO0FBQWNHLFlBQUFBLE9BQU8sRUFBRTBDO0FBQXZCO0FBRGlDLFNBQUQsQ0FBdkM7QUFJQUMsUUFBQUEsdUJBQXVCLENBQUNsQixRQUF4QixHQUFtQ2EsV0FBbkM7QUFFQWhCLFFBQUFBLE1BQU0sQ0FBQ1IsUUFBRCxDQUFOLENBQWlCOEIsd0JBQWpCLENBQTBDLENBQ3hDO0FBQUUzQyxVQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsVUFBQUEsRUFBRSxFQUFFO0FBQTdCLFNBRHdDLEVBRXhDO0FBQUVELFVBQUFBLEtBQUssRUFBRSxlQUFUO0FBQTBCQyxVQUFBQSxFQUFFLEVBQUU7QUFBOUIsU0FGd0MsRUFHeEM7QUFBRUEsVUFBQUEsRUFBRSxFQUFFLEdBQU47QUFBV0QsVUFBQUEsS0FBSyxFQUFFO0FBQWxCLFNBSHdDLENBQTFDO0FBS0QsT0ExQkMsQ0FBRjtBQTJCRCxLQTVCTyxDQUFSO0FBOEJBWSxJQUFBQSxRQUFRLENBQUMsbUJBQUQsRUFBc0IsWUFBTTtBQUNsQ1EsTUFBQUEsRUFBRSxDQUFDLGdDQUFELEVBQW1DLFlBQU07QUFDekMsWUFBTXdCLGNBQWMsR0FBRzdCLE9BQU8sQ0FBQztBQUFFbkIsVUFBQUEsS0FBSyxFQUFFO0FBQUVHLFlBQUFBLE9BQU8sRUFBRTtBQUFYO0FBQVQsU0FBRCxDQUFQLENBQ3BCeUIsUUFEb0IsR0FFcEJxQixpQkFGb0IsRUFBdkI7QUFJQXhCLFFBQUFBLE1BQU0sQ0FBQ3VCLGNBQUQsQ0FBTixDQUF1QlIsT0FBdkIsQ0FBK0IsRUFBL0I7QUFDRCxPQU5DLENBQUY7QUFRQWhCLE1BQUFBLEVBQUUsQ0FBQyxtQkFBRCxFQUFzQixZQUFNO0FBQzVCLFlBQU1yQixPQUFPLEdBQUcsQ0FDZDtBQUFFQyxVQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsVUFBQUEsRUFBRSxFQUFFO0FBQTdCLFNBRGMsRUFFZDtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsY0FBVDtBQUF5QkMsVUFBQUEsRUFBRSxFQUFFO0FBQTdCLFNBRmMsRUFHZDtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsZUFBVDtBQUEwQkMsVUFBQUEsRUFBRSxFQUFFO0FBQTlCLFNBSGMsQ0FBaEI7QUFLQSxZQUFNMkMsY0FBYyxHQUFHN0IsT0FBTyxDQUFDO0FBQzdCbkIsVUFBQUEsS0FBSyxFQUFFO0FBQ0xRLFlBQUFBLFVBQVUsRUFBRSxJQURQO0FBRUxMLFlBQUFBLE9BQU8sRUFBRUEsT0FGSjtBQUdMSSxZQUFBQSxlQUFlLEVBQUU7QUFDZixpQkFBRyxHQURZO0FBRWYsaUJBQUc7QUFGWTtBQUhaO0FBRHNCLFNBQUQsQ0FBUCxDQVVwQnFCLFFBVm9CLEdBV3BCcUIsaUJBWG9CLEVBQXZCO0FBYUF4QixRQUFBQSxNQUFNLENBQUN1QixjQUFELENBQU4sQ0FBdUJSLE9BQXZCLENBQStCckMsT0FBL0I7QUFDRCxPQXBCQyxDQUFGO0FBc0JBcUIsTUFBQUEsRUFBRSxDQUFDLG9CQUFELEVBQXVCLFlBQU07QUFDN0IsWUFBTXJCLE9BQU8sR0FBRyxDQUNkO0FBQUVDLFVBQUFBLEtBQUssRUFBRSxjQUFUO0FBQXlCQyxVQUFBQSxFQUFFLEVBQUU7QUFBN0IsU0FEYyxFQUVkO0FBQUVELFVBQUFBLEtBQUssRUFBRSxjQUFUO0FBQXlCQyxVQUFBQSxFQUFFLEVBQUU7QUFBN0IsU0FGYyxFQUdkO0FBQUVELFVBQUFBLEtBQUssRUFBRSxlQUFUO0FBQTBCQyxVQUFBQSxFQUFFLEVBQUU7QUFBOUIsU0FIYyxDQUFoQjtBQUtBLFlBQU0yQyxjQUFjLEdBQUc3QixPQUFPLENBQUM7QUFDN0JYLFVBQUFBLFVBQVUsRUFBRSxLQURpQjtBQUU3QlIsVUFBQUEsS0FBSyxFQUFFO0FBQ0xHLFlBQUFBLE9BQU8sRUFBRUEsT0FESjtBQUVMSSxZQUFBQSxlQUFlLEVBQUU7QUFDZixpQkFBRyxHQURZO0FBRWYsaUJBQUc7QUFGWTtBQUZaO0FBRnNCLFNBQUQsQ0FBUCxDQVVwQnFCLFFBVm9CLEdBV3BCcUIsaUJBWG9CLEVBQXZCO0FBYUF4QixRQUFBQSxNQUFNLENBQUN1QixjQUFELENBQU4sQ0FBdUJSLE9BQXZCLENBQStCLENBQUM7QUFBRXBDLFVBQUFBLEtBQUssRUFBRSxlQUFUO0FBQTBCQyxVQUFBQSxFQUFFLEVBQUU7QUFBOUIsU0FBRCxDQUEvQjtBQUNELE9BcEJDLENBQUY7QUFzQkFtQixNQUFBQSxFQUFFLENBQUMsMkNBQUQsRUFBOEMsWUFBTTtBQUNwRCxZQUFNckIsT0FBTyxHQUFHLENBQ2Q7QUFBRUMsVUFBQUEsS0FBSyxFQUFFLGNBQVQ7QUFBeUJDLFVBQUFBLEVBQUUsRUFBRTtBQUE3QixTQURjLEVBRWQ7QUFBRUQsVUFBQUEsS0FBSyxFQUFFLGNBQVQ7QUFBeUJDLFVBQUFBLEVBQUUsRUFBRTtBQUE3QixTQUZjLEVBR2Q7QUFBRUQsVUFBQUEsS0FBSyxFQUFFLGVBQVQ7QUFBMEJDLFVBQUFBLEVBQUUsRUFBRTtBQUE5QixTQUhjLENBQWhCO0FBS0EsWUFBTTJDLGNBQWMsR0FBRzdCLE9BQU8sQ0FBQztBQUM3QlgsVUFBQUEsVUFBVSxFQUFFLEtBRGlCO0FBRTdCUixVQUFBQSxLQUFLLEVBQUU7QUFDTEcsWUFBQUEsT0FBTyxFQUFFQSxPQURKO0FBRUxJLFlBQUFBLGVBQWUsRUFBRTtBQUZaO0FBRnNCLFNBQUQsQ0FBUCxDQU9wQnFCLFFBUG9CLEdBUXBCcUIsaUJBUm9CLEVBQXZCO0FBVUF4QixRQUFBQSxNQUFNLENBQUN1QixjQUFELENBQU4sQ0FBdUJSLE9BQXZCLENBQStCckMsT0FBL0I7QUFDRCxPQWpCQyxDQUFGO0FBbUJBcUIsTUFBQUEsRUFBRSxDQUFDLDRDQUFELEVBQStDLFlBQU07QUFDckQsWUFBTXJCLE9BQU8sR0FBRyxDQUNkO0FBQUVDLFVBQUFBLEtBQUssRUFBRSxjQUFUO0FBQXlCQyxVQUFBQSxFQUFFLEVBQUU7QUFBN0IsU0FEYyxFQUVkO0FBQUVELFVBQUFBLEtBQUssRUFBRSxjQUFUO0FBQXlCQyxVQUFBQSxFQUFFLEVBQUU7QUFBN0IsU0FGYyxFQUdkO0FBQUVELFVBQUFBLEtBQUssRUFBRSxlQUFUO0FBQTBCQyxVQUFBQSxFQUFFLEVBQUU7QUFBOUIsU0FIYyxDQUFoQjtBQUtBLFlBQU0yQyxjQUFjLEdBQUc3QixPQUFPLENBQUM7QUFDN0JYLFVBQUFBLFVBQVUsRUFBRSxLQURpQjtBQUU3QlIsVUFBQUEsS0FBSyxFQUFFO0FBQ0xHLFlBQUFBLE9BQU8sRUFBRUEsT0FESjtBQUVMSSxZQUFBQSxlQUFlLEVBQUU7QUFGWjtBQUZzQixTQUFELENBQVAsQ0FPcEJxQixRQVBvQixHQVFwQnFCLGlCQVJvQixFQUF2QjtBQVVBeEIsUUFBQUEsTUFBTSxDQUFDdUIsY0FBRCxDQUFOLENBQXVCUixPQUF2QixDQUErQnJDLE9BQS9CO0FBQ0QsT0FqQkMsQ0FBRjtBQWtCRCxLQTFGTyxDQUFSO0FBMkZELEdBbk9PLENBQVI7QUFvT0QsQ0FsUU8sQ0FBUiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNoYWxsb3cgfSBmcm9tICdlbnp5bWUnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHsgQ2hvaWNlcyB9IGZyb20gJy4uL2Nob2ljZXMnO1xuaW1wb3J0IHNlbnNpYmxlRGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMnO1xuaW1wb3J0IHsgY3JlYXRlU2xhdGVNYXJrdXAsIHByb2Nlc3NNYXJrdXAgfSBmcm9tICcuLi9tYXJrdXBVdGlscyc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvY29uZmlnLXVpJywgKCkgPT4gKHtcbiAgY2hvaWNlVXRpbHM6IHtcbiAgICBmaXJzdEF2YWlsYWJsZUluZGV4OiBqZXN0LmZuKCksXG4gIH0sXG4gIHNldHRpbmdzOiB7XG4gICAgUGFuZWw6IChwcm9wcykgPT4gPGRpdiB7Li4ucHJvcHN9IC8+LFxuICAgIHRvZ2dsZTogamVzdC5mbigpLFxuICAgIHJhZGlvOiBqZXN0LmZuKCksXG4gICAgZHJvcGRvd246IGplc3QuZm4oKSxcbiAgfSxcbiAgbGF5b3V0OiB7XG4gICAgQ29uZmlnTGF5b3V0OiAocHJvcHMpID0+IDxkaXY+e3Byb3BzLmNoaWxkcmVufTwvZGl2PixcbiAgfSxcbn0pKTtcblxuY29uc3QgbW9kZWwgPSB7XG4gIG1hcmt1cDogJ3t7MH19ICsge3sxfX0gPSAxNScsXG4gIHByb21wdDogJzxwPlNvbHZlIHRoZSBlcXVhdGlvbiBiZWxvdy48L3A+JyxcbiAgY2hvaWNlczogW1xuICAgIHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgeyB2YWx1ZTogJzxkaXY+OTwvZGl2PicsIGlkOiAnMScgfSxcbiAgICB7IHZhbHVlOiAnPGRpdj4xMjwvZGl2PicsIGlkOiAnMicgfSxcbiAgXSxcbiAgY2hvaWNlc1Bvc2l0aW9uOiAnYmVsb3cnLFxuICBjb3JyZWN0UmVzcG9uc2U6IHtcbiAgICAwOiAnMCcsXG4gICAgMTogJzEnLFxuICB9LFxuICBkdXBsaWNhdGVzOiB0cnVlLFxuICBhbHRlcm5hdGVSZXNwb25zZXM6IFtbJzEnXSwgWycwJ11dLFxuICByYXRpb25hbGU6XG4gICAgJzxwPkEgY29ycmVjdCByZXNwb25zZSBpcyBzaG93biBiZWxvdzo8L3A+PHVsPjxsaT4yLzYgPSAxLzM8L2xpPjxsaT40LzggPSAxLzI8L2xpPjxsaT42LzEwID0gMy81PC9saT48bGk+OS8xMiA9IDMvNDwvbGk+PC91bD4nLFxufTtcblxuY29uc3QgcHJlcGFyZU1vZGVsID0gKG1vZGVsID0ge30pID0+IHtcbiAgY29uc3Qgam9pbmVkT2JqID0ge1xuICAgIC4uLnNlbnNpYmxlRGVmYXVsdHMubW9kZWwsXG4gICAgLi4ubW9kZWwsXG4gIH07XG4gIGNvbnN0IHNsYXRlTWFya3VwID1cbiAgICBtb2RlbC5zbGF0ZU1hcmt1cCB8fCBjcmVhdGVTbGF0ZU1hcmt1cChqb2luZWRPYmoubWFya3VwLCBqb2luZWRPYmouY2hvaWNlcywgam9pbmVkT2JqLmNvcnJlY3RSZXNwb25zZSk7XG4gIGNvbnN0IHByb2Nlc3NlZE1hcmt1cCA9IHByb2Nlc3NNYXJrdXAoc2xhdGVNYXJrdXApO1xuXG4gIHJldHVybiB7XG4gICAgLi4uam9pbmVkT2JqLFxuICAgIHNsYXRlTWFya3VwLFxuICAgIG1hcmt1cDogcHJvY2Vzc2VkTWFya3VwLm1hcmt1cCxcbiAgICBjb3JyZWN0UmVzcG9uc2U6IHByb2Nlc3NlZE1hcmt1cC5jb3JyZWN0UmVzcG9uc2UsXG4gIH07XG59O1xuXG5kZXNjcmliZSgnQ2hvaWNlcycsICgpID0+IHtcbiAgbGV0IG9uQ2hhbmdlO1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIG9uQ2hhbmdlID0gamVzdC5mbigpO1xuICB9KTtcblxuICBjb25zdCB3cmFwcGVyID0gKGV4dHJhcykgPT4ge1xuICAgIGNvbnN0IGRlZmF1bHRzID0ge1xuICAgICAgb25DaGFuZ2UsXG4gICAgICBjbGFzc2VzOiB7fSxcbiAgICAgIG1vZGVsOiBwcmVwYXJlTW9kZWwobW9kZWwpLFxuICAgICAgZHVwbGljYXRlczogdHJ1ZSxcbiAgICAgIC4uLmV4dHJhcyxcbiAgICB9O1xuICAgIGNvbnN0IHByb3BzID0geyAuLi5kZWZhdWx0cyB9O1xuXG4gICAgcmV0dXJuIHNoYWxsb3coPENob2ljZXMgey4uLnByb3BzfSAvPiwgeyBkaXNhYmxlTGlmZWN5Y2xlTWV0aG9kczogdHJ1ZSB9KTtcbiAgfTtcblxuICBkZXNjcmliZSgnc25hcHNob3QnLCAoKSA9PiB7XG4gICAgaXQoJ3JlbmRlcnMgd2l0aCBkdXBsaWNhdGVzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHdyYXBwZXIoKSkudG9NYXRjaFNuYXBzaG90KCk7XG4gICAgfSk7XG5cbiAgICBpdCgncmVuZGVycyB3aXRob3V0IGR1cGxpY2F0ZXMnLCAoKSA9PiB7XG4gICAgICBleHBlY3Qod3JhcHBlcih7IGR1cGxpY2F0ZXM6IGZhbHNlIH0pKS50b01hdGNoU25hcHNob3QoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2xvZ2ljJywgKCkgPT4ge1xuICAgIGxldCB3O1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICB3ID0gd3JhcHBlcigpO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uQ2hvaWNlQ2hhbmdlZCcsICgpID0+IHtcbiAgICAgIGl0KCdyZW1vdmVzIGEgY2hvaWNlIGlmIGl0cyBuZXcgdmFsdWUgaXMgZW1wdHknLCAoKSA9PiB7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5vbkNob2ljZUNoYW5nZWQoJzxkaXY+MTI8L2Rpdj4nLCAnJywgJzInKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvQmVDYWxsZWRXaXRoKFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2Pjk8L2Rpdj4nLCBpZDogJzEnIH0sXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzIG5vdCBhZGQgbmV3IGNob2ljZSBpZiBpdCBpcyBpZGVudGljYWwgdG8gYW5vdGhlciBjaG9pY2UnLCAoKSA9PiB7XG4gICAgICAgIHcuaW5zdGFuY2UoKS5vbkNob2ljZUNoYW5nZWQoJycsICc8ZGl2Pjk8L2Rpdj4nLCAnMicpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9CZUNhbGxlZFdpdGgoW1xuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+OTwvZGl2PicsIGlkOiAnMScgfSxcbiAgICAgICAgXSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2RvZXMgbm90IGNoYW5nZSBjaG9pY2UgaWYgaXQgd291bGQgYmUgaWRlbnRpY2FsIHRvIGFub3RoZXIgY2hvaWNlJywgKCkgPT4ge1xuICAgICAgICB3Lmluc3RhbmNlKCkub25DaG9pY2VDaGFuZ2VkKCc8ZGl2PjY8L2Rpdj4nLCAnPGRpdj45PC9kaXY+JywgJzAnKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygwKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgcmVtb3ZlIGEgY2hvaWNlIGlmIGl0cyBuZXcgdmFsdWUgaXMgZW1wdHksIGJ1dCBpcyB1c2VkIGluIGNvcnJlY3QgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGpzZG9tQWxlcnQgPSB3aW5kb3cuYWxlcnQ7IC8vIHJlbWVtYmVyIHRoZSBqc2RvbSBhbGVydFxuXG4gICAgICAgIHdpbmRvdy5hbGVydCA9ICgpID0+IHt9O1xuXG4gICAgICAgIHcuaW5zdGFuY2UoKS5vbkNob2ljZUNoYW5nZWQoJzxkaXY+OTwvZGl2PicsICcnLCAnMScpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkubm90LnRvQmVDYWxsZWQoKTtcblxuICAgICAgICB3aW5kb3cuYWxlcnQgPSBqc2RvbUFsZXJ0O1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkb2VzIG5vdCByZW1vdmUgYSBjaG9pY2UgaWYgaXRzIG5ldyB2YWx1ZSBpcyBlbXB0eSwgYnV0IGlzIHVzZWQgaW4gYWx0ZXJuYXRlIHJlc3BvbnNlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBqc2RvbUFsZXJ0ID0gd2luZG93LmFsZXJ0OyAvLyByZW1lbWJlciB0aGUganNkb20gYWxlcnRcblxuICAgICAgICB3aW5kb3cuYWxlcnQgPSAoKSA9PiB7fTtcblxuICAgICAgICB3cmFwcGVyKHsgbWFya3VwOiAne3swfX0nIH0pLmluc3RhbmNlKCkub25DaG9pY2VDaGFuZ2VkKCc8ZGl2Pjk8L2Rpdj4nLCAnJywgJzEnKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLm5vdC50b0JlQ2FsbGVkKCk7XG5cbiAgICAgICAgd2luZG93LmFsZXJ0ID0ganNkb21BbGVydDtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZG9lcyBub3QgcmVtb3ZlIGEgY2hvaWNlIGlmIGl0cyBuZXcgdmFsdWUgaXMgZW1wdHksIGJ1dCB0aGUgb2xkIHZhbHVlIHdhcyBlbXB0eSBhcyB3ZWxsIChhdCBmb2N1c2luZyBhIG5ldyBjaG9pY2Ugd2l0aG91dCBlZGl0aW5nKScsICgpID0+IHtcbiAgICAgICAgY29uc3QganNkb21BbGVydCA9IHdpbmRvdy5hbGVydDsgLy8gcmVtZW1iZXIgdGhlIGpzZG9tIGFsZXJ0XG5cbiAgICAgICAgd2luZG93LmFsZXJ0ID0gKCkgPT4ge307XG5cbiAgICAgICAgd3JhcHBlcih7IG1hcmt1cDogJ3t7MH19JyB9KS5pbnN0YW5jZSgpLm9uQ2hvaWNlQ2hhbmdlZCgnJywgJycsICcxJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS5ub3QudG9CZUNhbGxlZCgpO1xuXG4gICAgICAgIHdpbmRvdy5hbGVydCA9IGpzZG9tQWxlcnQ7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3VwZGF0ZXMgY2hvaWNlcycsICgpID0+IHtcbiAgICAgICAgdy5pbnN0YW5jZSgpLm9uQ2hvaWNlQ2hhbmdlZCgnPGRpdj45PC9kaXY+JywgJzxkaXY+MyozPC9kaXY+JywgJzEnKTtcblxuICAgICAgICBleHBlY3Qob25DaGFuZ2UpLnRvQmVDYWxsZWRXaXRoKFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjMqMzwvZGl2PicsIGlkOiAnMScgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj4xMjwvZGl2PicsIGlkOiAnMicgfSxcbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvbkNob2ljZUZvY3VzJywgKCkgPT4ge1xuICAgICAgaXQoJ3NldHMgZm9jdXNlZCBlbGVtZW50IGlkIG9uIHN0YXRlJywgKCkgPT4ge1xuICAgICAgICB3Lmluc3RhbmNlKCkub25DaG9pY2VGb2N1cygnMScpO1xuXG4gICAgICAgIGV4cGVjdCh3Lmluc3RhbmNlKCkuc3RhdGUuZm9jdXNlZEVsKS50b0VxdWFsKCcxJyk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvbkFkZENob2ljZScsICgpID0+IHtcbiAgICAgIGl0KCdhZGRzIGEgY2hvaWNlJywgKCkgPT4ge1xuICAgICAgICB3cmFwcGVyKCkuaW5zdGFuY2UoKS5vbkFkZENob2ljZSgpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9CZUNhbGxlZFdpdGgoWy4uLm1vZGVsLmNob2ljZXMsIHsgaWQ6ICczJywgdmFsdWU6ICcnIH1dKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZGVzY3JpYmUoJ29uQ2hvaWNlUmVtb3ZlJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlbW92ZXMgYSBjaG9pY2UnLCAoKSA9PiB7XG4gICAgICAgIHdyYXBwZXIoKS5pbnN0YW5jZSgpLm9uQ2hvaWNlUmVtb3ZlKCcxJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0JlQ2FsbGVkV2l0aChbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj4xMjwvZGl2PicsIGlkOiAnMicgfSxcbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdvbkNob2ljZVJlbW92ZSAmIG9uQWRkQ2hvaWNlJywgKCkgPT4ge1xuICAgICAgaXQoJ3ByZXZlbnRzIGR1cGxpY2F0ZSBJRHMgd2hlbiBhZGRpbmcgY2hvaWNlcyBhZnRlciByZW1vdmluZyBzb21lJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBpbml0aWFsV3JhcHBlciA9IHdyYXBwZXIoKTtcblxuICAgICAgICBpbml0aWFsV3JhcHBlci5pbnN0YW5jZSgpLm9uQ2hvaWNlUmVtb3ZlKCcxJyk7XG5cbiAgICAgICAgZXhwZWN0KG9uQ2hhbmdlKS50b0hhdmVCZWVuQ2FsbGVkV2l0aChbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj4xMjwvZGl2PicsIGlkOiAnMicgfSxcbiAgICAgICAgXSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlZENob2ljZXMgPSBbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj4xMjwvZGl2PicsIGlkOiAnMicgfSxcbiAgICAgICAgXTtcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHdyYXBwZXJXaXRoVXBkYXRlZFN0YXRlID0gd3JhcHBlcih7XG4gICAgICAgICAgbW9kZWw6IHsgLi4ubW9kZWwsIGNob2ljZXM6IHVwZGF0ZWRDaG9pY2VzIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgd3JhcHBlcldpdGhVcGRhdGVkU3RhdGUuaW5zdGFuY2UoKS5vbkFkZENob2ljZSgpO1xuXG4gICAgICAgIGV4cGVjdChvbkNoYW5nZSkudG9IYXZlQmVlbkxhc3RDYWxsZWRXaXRoKFtcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj42PC9kaXY+JywgaWQ6ICcwJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICAgIHsgaWQ6ICczJywgdmFsdWU6ICcnIH1cbiAgICAgICAgXSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdnZXRWaXNpYmxlQ2hvaWNlcycsICgpID0+IHtcbiAgICAgIGl0KCdjaG9pY2VzIGFyZSBudWxsID0+IHJldHVybnMgW10nLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2libGVDaG9pY2VzID0gd3JhcHBlcih7IG1vZGVsOiB7IGNob2ljZXM6IG51bGwgfSB9KVxuICAgICAgICAgIC5pbnN0YW5jZSgpXG4gICAgICAgICAgLmdldFZpc2libGVDaG9pY2VzKCk7XG5cbiAgICAgICAgZXhwZWN0KHZpc2libGVDaG9pY2VzKS50b0VxdWFsKFtdKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZHVwbGljYXRlcyA9IHRydWUnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj45PC9kaXY+JywgaWQ6ICcxJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCB2aXNpYmxlQ2hvaWNlcyA9IHdyYXBwZXIoe1xuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICBkdXBsaWNhdGVzOiB0cnVlLFxuICAgICAgICAgICAgY2hvaWNlczogY2hvaWNlcyxcbiAgICAgICAgICAgIGNvcnJlY3RSZXNwb25zZToge1xuICAgICAgICAgICAgICAwOiAnMCcsXG4gICAgICAgICAgICAgIDE6ICcxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgICAuaW5zdGFuY2UoKVxuICAgICAgICAgIC5nZXRWaXNpYmxlQ2hvaWNlcygpO1xuXG4gICAgICAgIGV4cGVjdCh2aXNpYmxlQ2hvaWNlcykudG9FcXVhbChjaG9pY2VzKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZHVwbGljYXRlcyA9IGZhbHNlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBjaG9pY2VzID0gW1xuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjY8L2Rpdj4nLCBpZDogJzAnIH0sXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+OTwvZGl2PicsIGlkOiAnMScgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj4xMjwvZGl2PicsIGlkOiAnMicgfSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgdmlzaWJsZUNob2ljZXMgPSB3cmFwcGVyKHtcbiAgICAgICAgICBkdXBsaWNhdGVzOiBmYWxzZSxcbiAgICAgICAgICBtb2RlbDoge1xuICAgICAgICAgICAgY2hvaWNlczogY2hvaWNlcyxcbiAgICAgICAgICAgIGNvcnJlY3RSZXNwb25zZToge1xuICAgICAgICAgICAgICAwOiAnMCcsXG4gICAgICAgICAgICAgIDE6ICcxJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICAgICAuaW5zdGFuY2UoKVxuICAgICAgICAgIC5nZXRWaXNpYmxlQ2hvaWNlcygpO1xuXG4gICAgICAgIGV4cGVjdCh2aXNpYmxlQ2hvaWNlcykudG9FcXVhbChbeyB2YWx1ZTogJzxkaXY+MTI8L2Rpdj4nLCBpZDogJzInIH1dKTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZHVwbGljYXRlcyA9IGZhbHNlLCBlbXB0eSBjb3JyZWN0UmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj45PC9kaXY+JywgaWQ6ICcxJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCB2aXNpYmxlQ2hvaWNlcyA9IHdyYXBwZXIoe1xuICAgICAgICAgIGR1cGxpY2F0ZXM6IGZhbHNlLFxuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICBjaG9pY2VzOiBjaG9pY2VzLFxuICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAgIC5pbnN0YW5jZSgpXG4gICAgICAgICAgLmdldFZpc2libGVDaG9pY2VzKCk7XG5cbiAgICAgICAgZXhwZWN0KHZpc2libGVDaG9pY2VzKS50b0VxdWFsKGNob2ljZXMpO1xuICAgICAgfSk7XG5cbiAgICAgIGl0KCdkdXBsaWNhdGVzID0gZmFsc2UsIGNvcnJlY3RSZXNwb25zZSA9IG51bGwnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSBbXG4gICAgICAgICAgeyB2YWx1ZTogJzxkaXY+NjwvZGl2PicsIGlkOiAnMCcgfSxcbiAgICAgICAgICB7IHZhbHVlOiAnPGRpdj45PC9kaXY+JywgaWQ6ICcxJyB9LFxuICAgICAgICAgIHsgdmFsdWU6ICc8ZGl2PjEyPC9kaXY+JywgaWQ6ICcyJyB9LFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCB2aXNpYmxlQ2hvaWNlcyA9IHdyYXBwZXIoe1xuICAgICAgICAgIGR1cGxpY2F0ZXM6IGZhbHNlLFxuICAgICAgICAgIG1vZGVsOiB7XG4gICAgICAgICAgICBjaG9pY2VzOiBjaG9pY2VzLFxuICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBudWxsLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgICAgLmluc3RhbmNlKClcbiAgICAgICAgICAuZ2V0VmlzaWJsZUNob2ljZXMoKTtcblxuICAgICAgICBleHBlY3QodmlzaWJsZUNob2ljZXMpLnRvRXF1YWwoY2hvaWNlcyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==