@pie-element/categorize 12.0.0-beta.0 → 12.0.0-beta.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.
Files changed (72) hide show
  1. package/CHANGELOG.md +0 -11
  2. package/configure/CHANGELOG.md +0 -11
  3. package/configure/lib/__tests__/main.test.js +100 -0
  4. package/configure/lib/__tests__/utils.js +39 -0
  5. package/configure/lib/defaults.js +1 -1
  6. package/configure/lib/design/__tests__/builder.test.js +34 -0
  7. package/configure/lib/design/__tests__/buttons.test.js +36 -0
  8. package/configure/lib/design/__tests__/header.test.js +37 -0
  9. package/configure/lib/design/__tests__/index.test.js +125 -0
  10. package/configure/lib/design/__tests__/input-header.test.js +41 -0
  11. package/configure/lib/design/builder.js +1 -1
  12. package/configure/lib/design/buttons.js +1 -1
  13. package/configure/lib/design/categories/RowLabel.js +3 -3
  14. package/configure/lib/design/categories/RowLabel.js.map +1 -1
  15. package/configure/lib/design/categories/__tests__/alternateResponses.test.js +93 -0
  16. package/configure/lib/design/categories/__tests__/category.test.js +65 -0
  17. package/configure/lib/design/categories/__tests__/choice-preview.test.js +52 -0
  18. package/configure/lib/design/categories/__tests__/droppable-placeholder.test.js +63 -0
  19. package/configure/lib/design/categories/__tests__/index.test.js +91 -0
  20. package/configure/lib/design/categories/alternateResponses.js +1 -1
  21. package/configure/lib/design/categories/category.js +1 -1
  22. package/configure/lib/design/categories/choice-preview.js +1 -1
  23. package/configure/lib/design/categories/droppable-placeholder.js +1 -1
  24. package/configure/lib/design/categories/index.js +1 -1
  25. package/configure/lib/design/choices/__tests__/choice.test.js +62 -0
  26. package/configure/lib/design/choices/__tests__/config.test.js +66 -0
  27. package/configure/lib/design/choices/__tests__/index.test.js +70 -0
  28. package/configure/lib/design/choices/choice.js +1 -1
  29. package/configure/lib/design/choices/config.js +1 -1
  30. package/configure/lib/design/choices/index.js +1 -1
  31. package/configure/lib/design/header.js +1 -1
  32. package/configure/lib/design/index.js +5 -5
  33. package/configure/lib/design/index.js.map +1 -1
  34. package/configure/lib/design/input-header.js +3 -3
  35. package/configure/lib/design/input-header.js.map +1 -1
  36. package/configure/lib/design/utils.js +1 -1
  37. package/configure/lib/index.js +1 -1
  38. package/configure/lib/main.js +1 -1
  39. package/configure/lib/utils.js +1 -1
  40. package/configure/package.json +9 -9
  41. package/controller/CHANGELOG.md +0 -11
  42. package/controller/lib/__tests__/index.test.js +526 -0
  43. package/controller/lib/defaults.js +1 -1
  44. package/controller/lib/index.js +1 -1
  45. package/controller/lib/utils.js +1 -1
  46. package/controller/package.json +5 -5
  47. package/docs/demo/.pie/.configure/package.json +10 -0
  48. package/docs/demo/.pie/.configure/yarn.lock +2181 -0
  49. package/docs/demo/.pie/.controllers/package.json +10 -0
  50. package/docs/demo/.pie/.controllers/yarn.lock +110 -0
  51. package/docs/demo/.pie/info.entry.js +89 -0
  52. package/docs/demo/.pie/info.webpack.config.js +119 -0
  53. package/docs/demo/.pie/package.json +10 -0
  54. package/docs/demo/.pie/yarn.lock +2190 -0
  55. package/docs/demo/pie.manifest.json +11 -0
  56. package/lib/__tests__/index.test.js +197 -0
  57. package/lib/categorize/__tests__/categories.test.js +138 -0
  58. package/lib/categorize/__tests__/category.test.js +137 -0
  59. package/lib/categorize/__tests__/choice.test.js +88 -0
  60. package/lib/categorize/__tests__/choices.test.js +118 -0
  61. package/lib/categorize/__tests__/droppable-placeholder.test.js +96 -0
  62. package/lib/categorize/__tests__/grid-content.test.js +48 -0
  63. package/lib/categorize/__tests__/index.test.js +152 -0
  64. package/lib/categorize/categories.js +1 -1
  65. package/lib/categorize/category.js +1 -1
  66. package/lib/categorize/choice.js +1 -1
  67. package/lib/categorize/choices.js +1 -1
  68. package/lib/categorize/droppable-placeholder.js +1 -1
  69. package/lib/categorize/grid-content.js +1 -1
  70. package/lib/categorize/index.js +1 -1
  71. package/lib/index.js +1 -1
  72. package/package.json +10 -10
@@ -0,0 +1,526 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _index = require("../index");
5
+ var _react = _interopRequireDefault(require("react"));
6
+ jest.mock('@pie-lib/categorize', () => ({
7
+ // used this algorithm in order to control the value of correct; check `fakeCorrect` below
8
+ buildState: (mockedCategories, choices, answers) => ({
9
+ categories: mockedCategories,
10
+ correct: mockedCategories === answers
11
+ })
12
+ }));
13
+ jest.mock('@pie-lib/feedback', () => ({
14
+ getFeedbackForCorrectness: () => new Promise(resolve => resolve('This is getFeedbackForCorrectness response.'))
15
+ }));
16
+ jest.mock('@pie-lib/controller-utils', () => ({
17
+ ...jest.requireActual('@pie-lib/controller-utils'),
18
+ getShuffledChoices: (choices, session, updateSession, key) => {
19
+ const currentShuffled = ((session || {}).shuffledValues || []).filter(v => v);
20
+ if (session && !currentShuffled.length && updateSession && typeof updateSession === 'function') {
21
+ updateSession();
22
+ }
23
+ return choices;
24
+ },
25
+ partialScoring: {
26
+ enabled: (config, env) => {
27
+ config = config || {};
28
+ env = env || {};
29
+ if (config.partialScoring === false) {
30
+ return false;
31
+ }
32
+ if (env.partialScoring === false) {
33
+ return false;
34
+ }
35
+ return true;
36
+ }
37
+ }
38
+ }));
39
+ const categories = [{
40
+ id: '1',
41
+ label: 'One'
42
+ }];
43
+ const choices = [{
44
+ id: '1',
45
+ content: 'Foo'
46
+ }, {
47
+ id: '2',
48
+ content: 'Bar'
49
+ }];
50
+ const category10 = {
51
+ id: '10',
52
+ label: 'SUM=10'
53
+ };
54
+ const category11 = {
55
+ id: '11',
56
+ label: 'SUM=11'
57
+ };
58
+ const choice3 = {
59
+ id: '3',
60
+ content: '3'
61
+ };
62
+ const choice4 = {
63
+ id: '4',
64
+ content: '4'
65
+ };
66
+ const choice5 = {
67
+ id: '5',
68
+ content: '5'
69
+ };
70
+ const choice6 = {
71
+ id: '6',
72
+ content: '6'
73
+ };
74
+ const choice7 = {
75
+ id: '7',
76
+ content: '7'
77
+ };
78
+ const scoringCorrectResponseNoAlternates = [{
79
+ category: '10',
80
+ choices: ['3', '7']
81
+ }, {
82
+ category: '11',
83
+ choices: ['4', '7']
84
+ }];
85
+ const scoringCorrectResponseWithAlternates = [{
86
+ category: '10',
87
+ choices: ['3', '7'],
88
+ alternateResponses: [['4', '6']]
89
+ }, {
90
+ category: '11',
91
+ choices: ['4', '7'],
92
+ alternateResponses: [['5', '6']]
93
+ }];
94
+ const makeQuestion = extras => ({
95
+ categories,
96
+ choices,
97
+ correctResponse: [{
98
+ category: '1',
99
+ choices: ['1', '2']
100
+ }],
101
+ lockChoiceOrder: true,
102
+ ...extras
103
+ });
104
+ describe('controller', () => {
105
+ let question = makeQuestion();
106
+ describe('model', () => {
107
+ it('returns model', async () => {
108
+ const result = await (0, _index.model)(question, {}, {
109
+ mode: 'gather'
110
+ }, jest.fn());
111
+ expect(result).toMatchObject({
112
+ ...question,
113
+ correctResponse: undefined
114
+ });
115
+ });
116
+ it('returns model in evaluate mode', async () => {
117
+ const result = await (0, _index.model)(question, {}, {
118
+ mode: 'evaluate'
119
+ }, jest.fn());
120
+ expect(result).toMatchObject({
121
+ ...question,
122
+ correctness: 'incorrect'
123
+ });
124
+ });
125
+ it('feedback: returns proper feedback in evaluate mode', async () => {
126
+ const result = await (0, _index.model)({
127
+ ...question,
128
+ feedbackEnabled: true
129
+ }, {}, {
130
+ mode: 'evaluate'
131
+ }, jest.fn());
132
+ expect(result.feedback).toEqual('This is getFeedbackForCorrectness response.');
133
+ });
134
+ it('feedback: returns proper feedback if feedback is not enabled', async () => {
135
+ const result = await (0, _index.model)({
136
+ ...question,
137
+ feedbackEnabled: false
138
+ }, {}, {
139
+ mode: 'evaluate'
140
+ }, jest.fn());
141
+ expect(result.feedback).toEqual(undefined);
142
+ });
143
+ it('feedback: returns proper feedback in gather mode', async () => {
144
+ const result = await (0, _index.model)(question, {}, {
145
+ mode: 'gather'
146
+ }, jest.fn());
147
+ expect(result.feedback).toEqual(undefined);
148
+ });
149
+ describe('disabled', () => {
150
+ it('disabled false for gather', async () => {
151
+ const result = await (0, _index.model)(question, {}, {
152
+ mode: 'gather'
153
+ }, jest.fn());
154
+ expect(result).toMatchObject({
155
+ disabled: false
156
+ });
157
+ });
158
+ it('disabled true for view', async () => {
159
+ const result = await (0, _index.model)(question, {}, {
160
+ mode: 'view'
161
+ }, jest.fn());
162
+ expect(result).toMatchObject({
163
+ disabled: true
164
+ });
165
+ });
166
+ it('disabled true for evaluate', async () => {
167
+ const result = await (0, _index.model)(question, {}, {
168
+ mode: 'evaluate'
169
+ }, jest.fn());
170
+ expect(result).toMatchObject({
171
+ disabled: true
172
+ });
173
+ });
174
+ });
175
+ it('adds correctResponse for evaluate', async () => {
176
+ const result = await (0, _index.model)(question, {}, {
177
+ mode: 'evaluate'
178
+ }, jest.fn());
179
+ expect(result).toMatchObject({
180
+ correctResponse: [{
181
+ category: '1',
182
+ choices: ['1', '2']
183
+ }]
184
+ });
185
+ });
186
+ it('adds default config', async () => {
187
+ const result = await (0, _index.model)(question, {}, {
188
+ mode: 'gather'
189
+ }, jest.fn());
190
+ expect(result).toMatchObject({
191
+ categoriesPerRow: 2,
192
+ choicesLabel: ''
193
+ });
194
+ });
195
+ describe('model - with updateSession', () => {
196
+ it('calls updateSession', async () => {
197
+ const session = {
198
+ id: '1',
199
+ element: 'categorize-element'
200
+ };
201
+ const env = {
202
+ mode: 'gather'
203
+ };
204
+ const updateSession = jest.fn().mockResolvedValue();
205
+ await (0, _index.model)({
206
+ id: '1',
207
+ element: 'categorize-element',
208
+ ...question,
209
+ lockChoiceOrder: false
210
+ }, session, env, updateSession);
211
+ expect(updateSession).toHaveBeenCalled();
212
+ });
213
+ });
214
+ });
215
+ describe('correct response', () => {
216
+ it('returns correct response if env is correct', async () => {
217
+ const sess = await (0, _index.createCorrectResponseSession)(question, {
218
+ mode: 'gather',
219
+ role: 'instructor'
220
+ });
221
+ expect(sess).toEqual({
222
+ answers: [{
223
+ category: '1',
224
+ choices: ['1', '2']
225
+ }],
226
+ id: 1
227
+ });
228
+ });
229
+ it('returns null env is student', async () => {
230
+ const noResult = await (0, _index.createCorrectResponseSession)(question, {
231
+ mode: 'gather',
232
+ role: 'student'
233
+ });
234
+ expect(noResult).toBeNull();
235
+ });
236
+ });
237
+ const mC1 = [{
238
+ id: '10',
239
+ label: 'SUM=10',
240
+ correct: true,
241
+ choices: [{
242
+ ...choice3,
243
+ correct: true
244
+ }, {
245
+ ...choice7,
246
+ correct: true
247
+ }]
248
+ }, {
249
+ id: '11',
250
+ label: 'SUM=11',
251
+ correct: false,
252
+ choices: [{
253
+ ...choice3,
254
+ correct: true
255
+ }, {
256
+ ...choice7,
257
+ correct: false
258
+ }]
259
+ }];
260
+ const mC2 = [{
261
+ id: '10',
262
+ label: 'SUM=10',
263
+ correct: true,
264
+ choices: [{
265
+ ...choice3,
266
+ correct: true
267
+ }, {
268
+ ...choice7,
269
+ correct: true
270
+ }]
271
+ }, {
272
+ id: '11',
273
+ label: 'SUM=11',
274
+ correct: true,
275
+ choices: [{
276
+ ...choice3,
277
+ correct: true
278
+ }, {
279
+ ...choice7,
280
+ correct: true
281
+ }]
282
+ }];
283
+ const mC3 = [{
284
+ id: '10',
285
+ label: 'SUM=10',
286
+ correct: true,
287
+ choices: [{
288
+ ...choice3,
289
+ correct: true
290
+ }, {
291
+ ...choice3,
292
+ correct: false
293
+ }, {
294
+ ...choice7,
295
+ correct: true
296
+ }]
297
+ }, {
298
+ id: '11',
299
+ label: 'SUM=11',
300
+ correct: true,
301
+ choices: [{
302
+ ...choice3,
303
+ correct: true
304
+ }, {
305
+ ...choice7,
306
+ correct: true
307
+ }]
308
+ }];
309
+ const mC4 = [{
310
+ id: '10',
311
+ label: 'SUM=10',
312
+ correct: true,
313
+ choices: [{
314
+ ...choice3,
315
+ correct: true
316
+ }, {
317
+ ...choice3,
318
+ correct: false
319
+ }, {
320
+ ...choice7,
321
+ correct: true
322
+ }]
323
+ }, {
324
+ id: '11',
325
+ label: 'SUM=11',
326
+ correct: true,
327
+ choices: [{
328
+ ...choice3,
329
+ correct: true
330
+ }, {
331
+ ...choice7,
332
+ correct: true
333
+ }, {
334
+ ...choice7,
335
+ correct: false
336
+ }]
337
+ }];
338
+ const mC5 = [{
339
+ id: '10',
340
+ label: 'SUM=10',
341
+ correct: false,
342
+ choices: [{
343
+ ...choice3,
344
+ correct: false
345
+ }, {
346
+ ...choice3,
347
+ correct: false
348
+ }, {
349
+ ...choice7,
350
+ correct: false
351
+ }]
352
+ }, {
353
+ id: '11',
354
+ label: 'SUM=11',
355
+ correct: false,
356
+ choices: [{
357
+ ...choice3,
358
+ correct: false
359
+ }, {
360
+ ...choice7,
361
+ correct: false
362
+ }, {
363
+ ...choice7,
364
+ correct: false
365
+ }]
366
+ }];
367
+ describe('getCorrectness', () => {
368
+ it('mode: gather -> resolves undefined', () => {
369
+ expect((0, _index.getCorrectness)(question, {}, {
370
+ mode: 'gather'
371
+ })).resolves.toEqual(undefined);
372
+ });
373
+ it('mode: view -> resolves undefined', () => {
374
+ expect((0, _index.getCorrectness)(question, {}, {
375
+ mode: 'view'
376
+ })).resolves.toEqual(undefined);
377
+ });
378
+ const sessionCorrect = {
379
+ answers: mC2
380
+ };
381
+ const sessionPartially = {
382
+ answers: mC1
383
+ };
384
+ it.each`
385
+ session | categories | expected
386
+ ${undefined} | ${mC1} | ${'incorrect'}
387
+ ${null} | ${mC1} | ${'incorrect'}
388
+ ${{}} | ${mC1} | ${'incorrect'}
389
+ ${sessionCorrect} | ${mC2} | ${'correct'}
390
+ ${sessionPartially} | ${mC1} | ${'partially-correct'}
391
+ `('mode: evaluate -> resolves $expected if session is $session', async ({
392
+ session,
393
+ categories,
394
+ expected
395
+ }) => {
396
+ const res = await (0, _index.getCorrectness)({
397
+ ...question,
398
+ partialScoring: true,
399
+ categories,
400
+ correctResponse: scoringCorrectResponseNoAlternates
401
+ }, session, {
402
+ mode: 'evaluate'
403
+ });
404
+ expect(res).toEqual(expected);
405
+ });
406
+ });
407
+ describe('getTotalScore', () => {
408
+ it.each`
409
+ partialScoring | mockedCategories | fakeCorrect | expected
410
+ ${true} | ${mC1} | ${false} | ${0}
411
+ ${false} | ${mC1} | ${false} | ${0}
412
+ ${true} | ${mC1} | ${true} | ${1}
413
+ ${false} | ${mC1} | ${true} | ${1}
414
+ `('With Alternates, partialScoring = $partialScoring -> dychotomous: $expected', ({
415
+ partialScoring,
416
+ mockedCategories,
417
+ fakeCorrect,
418
+ expected
419
+ }) => {
420
+ const totalScore = (0, _index.getTotalScore)({
421
+ ...question,
422
+ partialScoring,
423
+ categories: mockedCategories,
424
+ correctResponse: scoringCorrectResponseWithAlternates
425
+ }, {
426
+ answers: fakeCorrect ? mockedCategories : []
427
+ }, {});
428
+ expect(totalScore).toEqual(expected);
429
+ });
430
+ it.each`
431
+ partialScoring | mockedCategories | expected
432
+ ${true} | ${mC1} | ${0.75}
433
+ ${false} | ${mC1} | ${0}
434
+ ${true} | ${mC2} | ${1}
435
+ ${false} | ${mC2} | ${0}
436
+ ${true} | ${mC3} | ${0.75}
437
+ ${true} | ${mC4} | ${0.5}
438
+ ${true} | ${mC5} | ${0}
439
+ `('Without Alternates, partialScoring = $partialScoring -> $expected', ({
440
+ partialScoring,
441
+ mockedCategories,
442
+ expected
443
+ }) => {
444
+ const totalScore = (0, _index.getTotalScore)({
445
+ ...question,
446
+ partialScoring,
447
+ categories: mockedCategories,
448
+ correctResponse: scoringCorrectResponseNoAlternates
449
+ }, {
450
+ answers: []
451
+ }, {});
452
+ expect(totalScore).toEqual(expected);
453
+ });
454
+ });
455
+ describe('getPartialScore', () => {
456
+ it.each`
457
+ mockedCategories | expected
458
+ ${mC1} | ${0.75}
459
+ ${mC2} | ${1}
460
+ ${mC3} | ${0.75}
461
+ ${mC4} | ${0.5}
462
+ ${mC5} | ${0}
463
+ `('Without Alternates, partialScoring = $partialScoring -> $expected', ({
464
+ mockedCategories,
465
+ expected
466
+ }) => {
467
+ const totalScore = (0, _index.getPartialScore)(scoringCorrectResponseNoAlternates, mockedCategories);
468
+ expect(totalScore).toEqual(expected);
469
+ });
470
+ });
471
+ describe('outcome', () => {
472
+ describe('mode: gather', () => {
473
+ it('rejects with an error for gather', () => {
474
+ expect((0, _index.outcome)(question, {}, {
475
+ mode: 'gather'
476
+ })).rejects.toEqual(expect.any(Error));
477
+ });
478
+ });
479
+ describe('mode: view', () => {
480
+ it('rejects with an error for gather', () => {
481
+ expect((0, _index.outcome)(question, {}, {
482
+ mode: 'view'
483
+ })).rejects.toEqual(expect.any(Error));
484
+ });
485
+ });
486
+ describe('mode: evaluate', () => {
487
+ it.each`
488
+ partialScoring | envPartialScoring | expected
489
+ ${true} | ${undefined} | ${{
490
+ empty: false,
491
+ score: 0.75
492
+ }}
493
+ ${false} | ${undefined} | ${{
494
+ empty: false,
495
+ score: 1
496
+ }}
497
+ ${true} | ${false} | ${{
498
+ empty: false,
499
+ score: 1
500
+ }}
501
+ ${false} | ${true} | ${{
502
+ empty: false,
503
+ score: 1
504
+ }}
505
+ `('element.partialScoring = $partialScoring, env.partialScoring = $envPartialScoring', async ({
506
+ partialScoring,
507
+ envPartialScoring,
508
+ expected
509
+ }) => {
510
+ const result = await (0, _index.outcome)({
511
+ ...question,
512
+ partialScoring,
513
+ correctResponse: scoringCorrectResponseNoAlternates,
514
+ categories: mC1
515
+ }, {
516
+ answers: mC1
517
+ }, {
518
+ mode: 'evaluate',
519
+ partialScoring: envPartialScoring
520
+ });
521
+ expect(result).toEqual(expected);
522
+ });
523
+ });
524
+ });
525
+ });
526
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaW5kZXgiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImplc3QiLCJtb2NrIiwiYnVpbGRTdGF0ZSIsIm1vY2tlZENhdGVnb3JpZXMiLCJjaG9pY2VzIiwiYW5zd2VycyIsImNhdGVnb3JpZXMiLCJjb3JyZWN0IiwiZ2V0RmVlZGJhY2tGb3JDb3JyZWN0bmVzcyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVxdWlyZUFjdHVhbCIsImdldFNodWZmbGVkQ2hvaWNlcyIsInNlc3Npb24iLCJ1cGRhdGVTZXNzaW9uIiwia2V5IiwiY3VycmVudFNodWZmbGVkIiwic2h1ZmZsZWRWYWx1ZXMiLCJmaWx0ZXIiLCJ2IiwibGVuZ3RoIiwicGFydGlhbFNjb3JpbmciLCJlbmFibGVkIiwiY29uZmlnIiwiZW52IiwiaWQiLCJsYWJlbCIsImNvbnRlbnQiLCJjYXRlZ29yeTEwIiwiY2F0ZWdvcnkxMSIsImNob2ljZTMiLCJjaG9pY2U0IiwiY2hvaWNlNSIsImNob2ljZTYiLCJjaG9pY2U3Iiwic2NvcmluZ0NvcnJlY3RSZXNwb25zZU5vQWx0ZXJuYXRlcyIsImNhdGVnb3J5Iiwic2NvcmluZ0NvcnJlY3RSZXNwb25zZVdpdGhBbHRlcm5hdGVzIiwiYWx0ZXJuYXRlUmVzcG9uc2VzIiwibWFrZVF1ZXN0aW9uIiwiZXh0cmFzIiwiY29ycmVjdFJlc3BvbnNlIiwibG9ja0Nob2ljZU9yZGVyIiwiZGVzY3JpYmUiLCJxdWVzdGlvbiIsIml0IiwicmVzdWx0IiwibW9kZWwiLCJtb2RlIiwiZm4iLCJleHBlY3QiLCJ0b01hdGNoT2JqZWN0IiwidW5kZWZpbmVkIiwiY29ycmVjdG5lc3MiLCJmZWVkYmFja0VuYWJsZWQiLCJmZWVkYmFjayIsInRvRXF1YWwiLCJkaXNhYmxlZCIsImNhdGVnb3JpZXNQZXJSb3ciLCJjaG9pY2VzTGFiZWwiLCJlbGVtZW50IiwibW9ja1Jlc29sdmVkVmFsdWUiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwic2VzcyIsImNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24iLCJyb2xlIiwibm9SZXN1bHQiLCJ0b0JlTnVsbCIsIm1DMSIsIm1DMiIsIm1DMyIsIm1DNCIsIm1DNSIsImdldENvcnJlY3RuZXNzIiwicmVzb2x2ZXMiLCJzZXNzaW9uQ29ycmVjdCIsInNlc3Npb25QYXJ0aWFsbHkiLCJlYWNoIiwiZXhwZWN0ZWQiLCJyZXMiLCJmYWtlQ29ycmVjdCIsInRvdGFsU2NvcmUiLCJnZXRUb3RhbFNjb3JlIiwiZ2V0UGFydGlhbFNjb3JlIiwib3V0Y29tZSIsInJlamVjdHMiLCJhbnkiLCJFcnJvciIsImVtcHR5Iiwic2NvcmUiLCJlbnZQYXJ0aWFsU2NvcmluZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vaW5kZXgudGVzdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtb2RlbCwgb3V0Y29tZSwgZ2V0Q29ycmVjdG5lc3MsIGNyZWF0ZUNvcnJlY3RSZXNwb25zZVNlc3Npb24sIGdldFRvdGFsU2NvcmUsIGdldFBhcnRpYWxTY29yZSB9IGZyb20gJy4uL2luZGV4JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5cbmplc3QubW9jaygnQHBpZS1saWIvY2F0ZWdvcml6ZScsICgpID0+ICh7XG4gIC8vIHVzZWQgdGhpcyBhbGdvcml0aG0gaW4gb3JkZXIgdG8gY29udHJvbCB0aGUgdmFsdWUgb2YgY29ycmVjdDsgY2hlY2sgYGZha2VDb3JyZWN0YCBiZWxvd1xuICBidWlsZFN0YXRlOiAobW9ja2VkQ2F0ZWdvcmllcywgY2hvaWNlcywgYW5zd2VycykgPT4gKHtcbiAgICBjYXRlZ29yaWVzOiBtb2NrZWRDYXRlZ29yaWVzLFxuICAgIGNvcnJlY3Q6IG1vY2tlZENhdGVnb3JpZXMgPT09IGFuc3dlcnMsXG4gIH0pLFxufSkpO1xuamVzdC5tb2NrKCdAcGllLWxpYi9mZWVkYmFjaycsICgpID0+ICh7XG4gIGdldEZlZWRiYWNrRm9yQ29ycmVjdG5lc3M6ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiByZXNvbHZlKCdUaGlzIGlzIGdldEZlZWRiYWNrRm9yQ29ycmVjdG5lc3MgcmVzcG9uc2UuJykpLFxufSkpO1xuamVzdC5tb2NrKCdAcGllLWxpYi9jb250cm9sbGVyLXV0aWxzJywgKCkgPT4gKHtcbiAgLi4uamVzdC5yZXF1aXJlQWN0dWFsKCdAcGllLWxpYi9jb250cm9sbGVyLXV0aWxzJyksXG4gIGdldFNodWZmbGVkQ2hvaWNlczogKGNob2ljZXMsIHNlc3Npb24sIHVwZGF0ZVNlc3Npb24sIGtleSkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTaHVmZmxlZCA9ICgoc2Vzc2lvbiB8fCB7fSkuc2h1ZmZsZWRWYWx1ZXMgfHwgW10pLmZpbHRlcigodikgPT4gdik7XG5cbiAgICBpZiAoc2Vzc2lvbiAmJiAhY3VycmVudFNodWZmbGVkLmxlbmd0aCAmJiB1cGRhdGVTZXNzaW9uICYmIHR5cGVvZiB1cGRhdGVTZXNzaW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1cGRhdGVTZXNzaW9uKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNob2ljZXM7XG4gIH0sXG4gIHBhcnRpYWxTY29yaW5nOiB7XG4gICAgZW5hYmxlZDogKGNvbmZpZywgZW52KSA9PiB7XG4gICAgICBjb25maWcgPSBjb25maWcgfHwge307XG4gICAgICBlbnYgPSBlbnYgfHwge307XG5cbiAgICAgIGlmIChjb25maWcucGFydGlhbFNjb3JpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGVudi5wYXJ0aWFsU2NvcmluZyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICB9LFxufSkpO1xuXG5jb25zdCBjYXRlZ29yaWVzID0gW3sgaWQ6ICcxJywgbGFiZWw6ICdPbmUnIH1dO1xuY29uc3QgY2hvaWNlcyA9IFtcbiAgeyBpZDogJzEnLCBjb250ZW50OiAnRm9vJyB9LFxuICB7IGlkOiAnMicsIGNvbnRlbnQ6ICdCYXInIH0sXG5dO1xuXG5jb25zdCBjYXRlZ29yeTEwID0geyBpZDogJzEwJywgbGFiZWw6ICdTVU09MTAnIH07XG5jb25zdCBjYXRlZ29yeTExID0geyBpZDogJzExJywgbGFiZWw6ICdTVU09MTEnIH07XG5cbmNvbnN0IGNob2ljZTMgPSB7IGlkOiAnMycsIGNvbnRlbnQ6ICczJyB9O1xuY29uc3QgY2hvaWNlNCA9IHsgaWQ6ICc0JywgY29udGVudDogJzQnIH07XG5jb25zdCBjaG9pY2U1ID0geyBpZDogJzUnLCBjb250ZW50OiAnNScgfTtcbmNvbnN0IGNob2ljZTYgPSB7IGlkOiAnNicsIGNvbnRlbnQ6ICc2JyB9O1xuY29uc3QgY2hvaWNlNyA9IHsgaWQ6ICc3JywgY29udGVudDogJzcnIH07XG5jb25zdCBzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzID0gW1xuICB7IGNhdGVnb3J5OiAnMTAnLCBjaG9pY2VzOiBbJzMnLCAnNyddIH0sXG4gIHsgY2F0ZWdvcnk6ICcxMScsIGNob2ljZXM6IFsnNCcsICc3J10gfSxcbl07XG5jb25zdCBzY29yaW5nQ29ycmVjdFJlc3BvbnNlV2l0aEFsdGVybmF0ZXMgPSBbXG4gIHsgY2F0ZWdvcnk6ICcxMCcsIGNob2ljZXM6IFsnMycsICc3J10sIGFsdGVybmF0ZVJlc3BvbnNlczogW1snNCcsICc2J11dIH0sXG4gIHsgY2F0ZWdvcnk6ICcxMScsIGNob2ljZXM6IFsnNCcsICc3J10sIGFsdGVybmF0ZVJlc3BvbnNlczogW1snNScsICc2J11dIH0sXG5dO1xuXG5jb25zdCBtYWtlUXVlc3Rpb24gPSAoZXh0cmFzKSA9PiAoe1xuICBjYXRlZ29yaWVzLFxuICBjaG9pY2VzLFxuICBjb3JyZWN0UmVzcG9uc2U6IFt7IGNhdGVnb3J5OiAnMScsIGNob2ljZXM6IFsnMScsICcyJ10gfV0sXG4gIGxvY2tDaG9pY2VPcmRlcjogdHJ1ZSxcbiAgLi4uZXh0cmFzLFxufSk7XG5cbmRlc2NyaWJlKCdjb250cm9sbGVyJywgKCkgPT4ge1xuICBsZXQgcXVlc3Rpb24gPSBtYWtlUXVlc3Rpb24oKTtcblxuICBkZXNjcmliZSgnbW9kZWwnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgbW9kZWwnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QoeyAuLi5xdWVzdGlvbiwgY29ycmVjdFJlc3BvbnNlOiB1bmRlZmluZWQgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBtb2RlbCBpbiBldmFsdWF0ZSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICdldmFsdWF0ZScgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3QoeyAuLi5xdWVzdGlvbiwgY29ycmVjdG5lc3M6ICdpbmNvcnJlY3QnIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2ZlZWRiYWNrOiByZXR1cm5zIHByb3BlciBmZWVkYmFjayBpbiBldmFsdWF0ZSBtb2RlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwoeyAuLi5xdWVzdGlvbiwgZmVlZGJhY2tFbmFibGVkOiB0cnVlIH0sIHt9LCB7IG1vZGU6ICdldmFsdWF0ZScgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZmVlZGJhY2spLnRvRXF1YWwoJ1RoaXMgaXMgZ2V0RmVlZGJhY2tGb3JDb3JyZWN0bmVzcyByZXNwb25zZS4nKTtcbiAgICB9KTtcblxuICAgIGl0KCdmZWVkYmFjazogcmV0dXJucyBwcm9wZXIgZmVlZGJhY2sgaWYgZmVlZGJhY2sgaXMgbm90IGVuYWJsZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChcbiAgICAgICAge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIHt9LFxuICAgICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgICAgamVzdC5mbigpLFxuICAgICAgKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZmVlZGJhY2spLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdmZWVkYmFjazogcmV0dXJucyBwcm9wZXIgZmVlZGJhY2sgaW4gZ2F0aGVyIG1vZGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQuZmVlZGJhY2spLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdkaXNhYmxlZCcsICgpID0+IHtcbiAgICAgIGl0KCdkaXNhYmxlZCBmYWxzZSBmb3IgZ2F0aGVyJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwgamVzdC5mbigpKTtcbiAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaE9iamVjdCh7IGRpc2FibGVkOiBmYWxzZSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpdCgnZGlzYWJsZWQgdHJ1ZSBmb3IgdmlldycsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgbW9kZWwocXVlc3Rpb24sIHt9LCB7IG1vZGU6ICd2aWV3JyB9LCBqZXN0LmZuKCkpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHsgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2Rpc2FibGVkIHRydWUgZm9yIGV2YWx1YXRlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCBqZXN0LmZuKCkpO1xuICAgICAgICBleHBlY3QocmVzdWx0KS50b01hdGNoT2JqZWN0KHsgZGlzYWJsZWQ6IHRydWUgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGl0KCdhZGRzIGNvcnJlY3RSZXNwb25zZSBmb3IgZXZhbHVhdGUnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2V2YWx1YXRlJyB9LCBqZXN0LmZuKCkpO1xuICAgICAgZXhwZWN0KHJlc3VsdCkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGNvcnJlY3RSZXNwb25zZTogW3sgY2F0ZWdvcnk6ICcxJywgY2hvaWNlczogWycxJywgJzInXSB9XSxcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaXQoJ2FkZHMgZGVmYXVsdCBjb25maWcnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBtb2RlbChxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSwgamVzdC5mbigpKTtcbiAgICAgIGV4cGVjdChyZXN1bHQpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBjYXRlZ29yaWVzUGVyUm93OiAyLFxuICAgICAgICBjaG9pY2VzTGFiZWw6ICcnLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbW9kZWwgLSB3aXRoIHVwZGF0ZVNlc3Npb24nLCAoKSA9PiB7XG4gICAgICBpdCgnY2FsbHMgdXBkYXRlU2Vzc2lvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHsgaWQ6ICcxJywgZWxlbWVudDogJ2NhdGVnb3JpemUtZWxlbWVudCcgfTtcbiAgICAgICAgY29uc3QgZW52ID0geyBtb2RlOiAnZ2F0aGVyJyB9O1xuICAgICAgICBjb25zdCB1cGRhdGVTZXNzaW9uID0gamVzdC5mbigpLm1vY2tSZXNvbHZlZFZhbHVlKCk7XG4gICAgICAgIGF3YWl0IG1vZGVsKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnMScsXG4gICAgICAgICAgICBlbGVtZW50OiAnY2F0ZWdvcml6ZS1lbGVtZW50JyxcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgbG9ja0Nob2ljZU9yZGVyOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlc3Npb24sXG4gICAgICAgICAgZW52LFxuICAgICAgICAgIHVwZGF0ZVNlc3Npb24sXG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdCh1cGRhdGVTZXNzaW9uKS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2NvcnJlY3QgcmVzcG9uc2UnLCAoKSA9PiB7XG4gICAgaXQoJ3JldHVybnMgY29ycmVjdCByZXNwb25zZSBpZiBlbnYgaXMgY29ycmVjdCcsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3MgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnaW5zdHJ1Y3RvcicsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChzZXNzKS50b0VxdWFsKHtcbiAgICAgICAgYW5zd2VyczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnMScsXG4gICAgICAgICAgICBjaG9pY2VzOiBbJzEnLCAnMiddLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGlkOiAxLFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgncmV0dXJucyBudWxsIGVudiBpcyBzdHVkZW50JywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3Qgbm9SZXN1bHQgPSBhd2FpdCBjcmVhdGVDb3JyZWN0UmVzcG9uc2VTZXNzaW9uKHF1ZXN0aW9uLCB7XG4gICAgICAgIG1vZGU6ICdnYXRoZXInLFxuICAgICAgICByb2xlOiAnc3R1ZGVudCcsXG4gICAgICB9KTtcbiAgICAgIGV4cGVjdChub1Jlc3VsdCkudG9CZU51bGwoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgY29uc3QgbUMxID0gW1xuICAgIHtcbiAgICAgIGlkOiAnMTAnLFxuICAgICAgbGFiZWw6ICdTVU09MTAnLFxuICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgbGFiZWw6ICdTVU09MTEnLFxuICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IG1DMiA9IFtcbiAgICB7XG4gICAgICBpZDogJzEwJyxcbiAgICAgIGxhYmVsOiAnU1VNPTEwJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBpZDogJzExJyxcbiAgICAgIGxhYmVsOiAnU1VNPTExJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgIF0sXG4gICAgfSxcbiAgXTtcbiAgY29uc3QgbUMzID0gW1xuICAgIHtcbiAgICAgIGlkOiAnMTAnLFxuICAgICAgbGFiZWw6ICdTVU09MTAnLFxuICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gICAge1xuICAgICAgaWQ6ICcxMScsXG4gICAgICBsYWJlbDogJ1NVTT0xMScsXG4gICAgICBjb3JyZWN0OiB0cnVlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IHRydWUgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IG1DNCA9IFtcbiAgICB7XG4gICAgICBpZDogJzEwJyxcbiAgICAgIGxhYmVsOiAnU1VNPTEwJyxcbiAgICAgIGNvcnJlY3Q6IHRydWUsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgbGFiZWw6ICdTVU09MTEnLFxuICAgICAgY29ycmVjdDogdHJ1ZSxcbiAgICAgIGNob2ljZXM6IFtcbiAgICAgICAgeyAuLi5jaG9pY2UzLCBjb3JyZWN0OiB0cnVlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlNywgY29ycmVjdDogdHJ1ZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG4gIGNvbnN0IG1DNSA9IFtcbiAgICB7XG4gICAgICBpZDogJzEwJyxcbiAgICAgIGxhYmVsOiAnU1VNPTEwJyxcbiAgICAgIGNvcnJlY3Q6IGZhbHNlLFxuICAgICAgY2hvaWNlczogW1xuICAgICAgICB7IC4uLmNob2ljZTMsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGlkOiAnMTEnLFxuICAgICAgbGFiZWw6ICdTVU09MTEnLFxuICAgICAgY29ycmVjdDogZmFsc2UsXG4gICAgICBjaG9pY2VzOiBbXG4gICAgICAgIHsgLi4uY2hvaWNlMywgY29ycmVjdDogZmFsc2UgfSxcbiAgICAgICAgeyAuLi5jaG9pY2U3LCBjb3JyZWN0OiBmYWxzZSB9LFxuICAgICAgICB7IC4uLmNob2ljZTcsIGNvcnJlY3Q6IGZhbHNlIH0sXG4gICAgICBdLFxuICAgIH0sXG4gIF07XG5cbiAgZGVzY3JpYmUoJ2dldENvcnJlY3RuZXNzJywgKCkgPT4ge1xuICAgIGl0KCdtb2RlOiBnYXRoZXIgLT4gcmVzb2x2ZXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldENvcnJlY3RuZXNzKHF1ZXN0aW9uLCB7fSwgeyBtb2RlOiAnZ2F0aGVyJyB9KSkucmVzb2x2ZXMudG9FcXVhbCh1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ21vZGU6IHZpZXcgLT4gcmVzb2x2ZXMgdW5kZWZpbmVkJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldENvcnJlY3RuZXNzKHF1ZXN0aW9uLCB7fSwgeyBtb2RlOiAndmlldycgfSkpLnJlc29sdmVzLnRvRXF1YWwodW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlc3Npb25Db3JyZWN0ID0geyBhbnN3ZXJzOiBtQzIgfTtcbiAgICBjb25zdCBzZXNzaW9uUGFydGlhbGx5ID0geyBhbnN3ZXJzOiBtQzEgfTtcblxuICAgIGl0LmVhY2hgXG4gICAgICBzZXNzaW9uICAgICAgICAgICAgIHwgY2F0ZWdvcmllcyB8IGV4cGVjdGVkXG4gICAgICAke3VuZGVmaW5lZH0gICAgICAgIHwgJHttQzF9ICAgICB8ICR7J2luY29ycmVjdCd9XG4gICAgICAke251bGx9ICAgICAgICAgICAgIHwgJHttQzF9ICAgICB8ICR7J2luY29ycmVjdCd9XG4gICAgICAke3t9fSAgICAgICAgICAgICAgIHwgJHttQzF9ICAgICB8ICR7J2luY29ycmVjdCd9XG4gICAgICAke3Nlc3Npb25Db3JyZWN0fSAgIHwgJHttQzJ9ICAgICB8ICR7J2NvcnJlY3QnfVxuICAgICAgJHtzZXNzaW9uUGFydGlhbGx5fSB8ICR7bUMxfSAgICAgfCAkeydwYXJ0aWFsbHktY29ycmVjdCd9XG4gICAgYCgnbW9kZTogZXZhbHVhdGUgLT4gcmVzb2x2ZXMgJGV4cGVjdGVkIGlmIHNlc3Npb24gaXMgJHNlc3Npb24nLCBhc3luYyAoeyBzZXNzaW9uLCBjYXRlZ29yaWVzLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBnZXRDb3JyZWN0bmVzcyhcbiAgICAgICAge1xuICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgIHBhcnRpYWxTY29yaW5nOiB0cnVlLFxuICAgICAgICAgIGNhdGVnb3JpZXMsXG4gICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzLFxuICAgICAgICB9LFxuICAgICAgICBzZXNzaW9uLFxuICAgICAgICB7IG1vZGU6ICdldmFsdWF0ZScgfSxcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChyZXMpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZ2V0VG90YWxTY29yZScsICgpID0+IHtcbiAgICBpdC5lYWNoYFxuICAgICAgcGFydGlhbFNjb3JpbmcgfCBtb2NrZWRDYXRlZ29yaWVzIHwgZmFrZUNvcnJlY3QgfCBleHBlY3RlZFxuICAgICAgJHt0cnVlfSAgICAgICAgfCAke21DMX0gICAgICAgICAgIHwgJHtmYWxzZX0gICAgfCAkezB9XG4gICAgICAke2ZhbHNlfSAgICAgICB8ICR7bUMxfSAgICAgICAgICAgfCAke2ZhbHNlfSAgICB8ICR7MH1cbiAgICAgICR7dHJ1ZX0gICAgICAgIHwgJHttQzF9ICAgICAgICAgICB8ICR7dHJ1ZX0gICAgIHwgJHsxfVxuICAgICAgJHtmYWxzZX0gICAgICAgfCAke21DMX0gICAgICAgICAgIHwgJHt0cnVlfSAgICAgfCAkezF9XG4gICAgYChcbiAgICAgICdXaXRoIEFsdGVybmF0ZXMsIHBhcnRpYWxTY29yaW5nID0gJHBhcnRpYWxTY29yaW5nIC0+IGR5Y2hvdG9tb3VzOiAkZXhwZWN0ZWQnLFxuICAgICAgKHsgcGFydGlhbFNjb3JpbmcsIG1vY2tlZENhdGVnb3JpZXMsIGZha2VDb3JyZWN0LCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsU2NvcmUgPSBnZXRUb3RhbFNjb3JlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgcGFydGlhbFNjb3JpbmcsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBtb2NrZWRDYXRlZ29yaWVzLFxuICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBzY29yaW5nQ29ycmVjdFJlc3BvbnNlV2l0aEFsdGVybmF0ZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7IGFuc3dlcnM6IGZha2VDb3JyZWN0ID8gbW9ja2VkQ2F0ZWdvcmllcyA6IFtdIH0sXG4gICAgICAgICAge30sXG4gICAgICAgICk7XG5cbiAgICAgICAgZXhwZWN0KHRvdGFsU2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgaXQuZWFjaGBcbiAgICAgIHBhcnRpYWxTY29yaW5nIHwgbW9ja2VkQ2F0ZWdvcmllcyB8IGV4cGVjdGVkXG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUMxfSAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAke2ZhbHNlfSAgICAgICB8ICR7bUMxfSAgICAgICAgICAgfCAkezB9XG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUMyfSAgICAgICAgICAgfCAkezF9XG4gICAgICAke2ZhbHNlfSAgICAgICB8ICR7bUMyfSAgICAgICAgICAgfCAkezB9XG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUMzfSAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAke3RydWV9ICAgICAgICB8ICR7bUM0fSAgICAgICAgICAgfCAkezAuNX1cbiAgICAgICR7dHJ1ZX0gICAgICAgIHwgJHttQzV9ICAgICAgICAgICB8ICR7MH1cbiAgICBgKFxuICAgICAgJ1dpdGhvdXQgQWx0ZXJuYXRlcywgcGFydGlhbFNjb3JpbmcgPSAkcGFydGlhbFNjb3JpbmcgLT4gJGV4cGVjdGVkJyxcbiAgICAgICh7IHBhcnRpYWxTY29yaW5nLCBtb2NrZWRDYXRlZ29yaWVzLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdGFsU2NvcmUgPSBnZXRUb3RhbFNjb3JlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLnF1ZXN0aW9uLFxuICAgICAgICAgICAgcGFydGlhbFNjb3JpbmcsXG4gICAgICAgICAgICBjYXRlZ29yaWVzOiBtb2NrZWRDYXRlZ29yaWVzLFxuICAgICAgICAgICAgY29ycmVjdFJlc3BvbnNlOiBzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgeyBhbnN3ZXJzOiBbXSB9LFxuICAgICAgICAgIHt9LFxuICAgICAgICApO1xuXG4gICAgICAgIGV4cGVjdCh0b3RhbFNjb3JlKS50b0VxdWFsKGV4cGVjdGVkKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2dldFBhcnRpYWxTY29yZScsICgpID0+IHtcbiAgICBpdC5lYWNoYFxuICAgICAgbW9ja2VkQ2F0ZWdvcmllcyB8IGV4cGVjdGVkXG4gICAgICAke21DMX0gICAgICAgICAgIHwgJHswLjc1fVxuICAgICAgJHttQzJ9ICAgICAgICAgICB8ICR7MX1cbiAgICAgICR7bUMzfSAgICAgICAgICAgfCAkezAuNzV9XG4gICAgICAke21DNH0gICAgICAgICAgIHwgJHswLjV9XG4gICAgICAke21DNX0gICAgICAgICAgIHwgJHswfVxuICAgIGAoJ1dpdGhvdXQgQWx0ZXJuYXRlcywgcGFydGlhbFNjb3JpbmcgPSAkcGFydGlhbFNjb3JpbmcgLT4gJGV4cGVjdGVkJywgKHsgbW9ja2VkQ2F0ZWdvcmllcywgZXhwZWN0ZWQgfSkgPT4ge1xuICAgICAgY29uc3QgdG90YWxTY29yZSA9IGdldFBhcnRpYWxTY29yZShzY29yaW5nQ29ycmVjdFJlc3BvbnNlTm9BbHRlcm5hdGVzLCBtb2NrZWRDYXRlZ29yaWVzKTtcblxuICAgICAgZXhwZWN0KHRvdGFsU2NvcmUpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnb3V0Y29tZScsICgpID0+IHtcbiAgICBkZXNjcmliZSgnbW9kZTogZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgaXQoJ3JlamVjdHMgd2l0aCBhbiBlcnJvciBmb3IgZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgICBleHBlY3Qob3V0Y29tZShxdWVzdGlvbiwge30sIHsgbW9kZTogJ2dhdGhlcicgfSkpLnJlamVjdHMudG9FcXVhbChleHBlY3QuYW55KEVycm9yKSk7XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdtb2RlOiB2aWV3JywgKCkgPT4ge1xuICAgICAgaXQoJ3JlamVjdHMgd2l0aCBhbiBlcnJvciBmb3IgZ2F0aGVyJywgKCkgPT4ge1xuICAgICAgICBleHBlY3Qob3V0Y29tZShxdWVzdGlvbiwge30sIHsgbW9kZTogJ3ZpZXcnIH0pKS5yZWplY3RzLnRvRXF1YWwoZXhwZWN0LmFueShFcnJvcikpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBkZXNjcmliZSgnbW9kZTogZXZhbHVhdGUnLCAoKSA9PiB7XG4gICAgICBpdC5lYWNoYFxuICAgICAgICBwYXJ0aWFsU2NvcmluZyB8IGVudlBhcnRpYWxTY29yaW5nIHwgZXhwZWN0ZWRcbiAgICAgICAgJHt0cnVlfSAgICAgICAgfCAke3VuZGVmaW5lZH0gICAgICB8ICR7eyBlbXB0eTogZmFsc2UsIHNjb3JlOiAwLjc1IH19XG4gICAgICAgICR7ZmFsc2V9ICAgICAgIHwgJHt1bmRlZmluZWR9ICAgICAgfCAke3sgZW1wdHk6IGZhbHNlLCBzY29yZTogMSB9fVxuICAgICAgICAke3RydWV9ICAgICAgICB8ICR7ZmFsc2V9ICAgICAgICAgIHwgJHt7IGVtcHR5OiBmYWxzZSwgc2NvcmU6IDEgfX1cbiAgICAgICAgJHtmYWxzZX0gICAgICAgfCAke3RydWV9ICAgICAgICAgICB8ICR7eyBlbXB0eTogZmFsc2UsIHNjb3JlOiAxIH19XG4gICAgICBgKFxuICAgICAgICAnZWxlbWVudC5wYXJ0aWFsU2NvcmluZyA9ICRwYXJ0aWFsU2NvcmluZywgZW52LnBhcnRpYWxTY29yaW5nID0gJGVudlBhcnRpYWxTY29yaW5nJyxcbiAgICAgICAgYXN5bmMgKHsgcGFydGlhbFNjb3JpbmcsIGVudlBhcnRpYWxTY29yaW5nLCBleHBlY3RlZCB9KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3V0Y29tZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4ucXVlc3Rpb24sXG4gICAgICAgICAgICAgIHBhcnRpYWxTY29yaW5nLFxuICAgICAgICAgICAgICBjb3JyZWN0UmVzcG9uc2U6IHNjb3JpbmdDb3JyZWN0UmVzcG9uc2VOb0FsdGVybmF0ZXMsXG4gICAgICAgICAgICAgIGNhdGVnb3JpZXM6IG1DMSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFuc3dlcnM6IG1DMSB9LFxuICAgICAgICAgICAgeyBtb2RlOiAnZXZhbHVhdGUnLCBwYXJ0aWFsU2NvcmluZzogZW52UGFydGlhbFNjb3JpbmcgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoZXhwZWN0ZWQpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUFHLElBQUksQ0FBQ0MsSUFBSSxDQUFDLHFCQUFxQixFQUFFLE9BQU87RUFDdEM7RUFDQUMsVUFBVSxFQUFFQSxDQUFDQyxnQkFBZ0IsRUFBRUMsT0FBTyxFQUFFQyxPQUFPLE1BQU07SUFDbkRDLFVBQVUsRUFBRUgsZ0JBQWdCO0lBQzVCSSxPQUFPLEVBQUVKLGdCQUFnQixLQUFLRTtFQUNoQyxDQUFDO0FBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDSEwsSUFBSSxDQUFDQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsT0FBTztFQUNwQ08seUJBQXlCLEVBQUVBLENBQUEsS0FBTSxJQUFJQyxPQUFPLENBQUVDLE9BQU8sSUFBS0EsT0FBTyxDQUFDLDZDQUE2QyxDQUFDO0FBQ2xILENBQUMsQ0FBQyxDQUFDO0FBQ0hWLElBQUksQ0FBQ0MsSUFBSSxDQUFDLDJCQUEyQixFQUFFLE9BQU87RUFDNUMsR0FBR0QsSUFBSSxDQUFDVyxhQUFhLENBQUMsMkJBQTJCLENBQUM7RUFDbERDLGtCQUFrQixFQUFFQSxDQUFDUixPQUFPLEVBQUVTLE9BQU8sRUFBRUMsYUFBYSxFQUFFQyxHQUFHLEtBQUs7SUFDNUQsTUFBTUMsZUFBZSxHQUFHLENBQUMsQ0FBQ0gsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFSSxjQUFjLElBQUksRUFBRSxFQUFFQyxNQUFNLENBQUVDLENBQUMsSUFBS0EsQ0FBQyxDQUFDO0lBRS9FLElBQUlOLE9BQU8sSUFBSSxDQUFDRyxlQUFlLENBQUNJLE1BQU0sSUFBSU4sYUFBYSxJQUFJLE9BQU9BLGFBQWEsS0FBSyxVQUFVLEVBQUU7TUFDOUZBLGFBQWEsQ0FBQyxDQUFDO0lBQ2pCO0lBRUEsT0FBT1YsT0FBTztFQUNoQixDQUFDO0VBQ0RpQixjQUFjLEVBQUU7SUFDZEMsT0FBTyxFQUFFQSxDQUFDQyxNQUFNLEVBQUVDLEdBQUcsS0FBSztNQUN4QkQsTUFBTSxHQUFHQSxNQUFNLElBQUksQ0FBQyxDQUFDO01BQ3JCQyxHQUFHLEdBQUdBLEdBQUcsSUFBSSxDQUFDLENBQUM7TUFFZixJQUFJRCxNQUFNLENBQUNGLGNBQWMsS0FBSyxLQUFLLEVBQUU7UUFDbkMsT0FBTyxLQUFLO01BQ2Q7TUFFQSxJQUFJRyxHQUFHLENBQUNILGNBQWMsS0FBSyxLQUFLLEVBQUU7UUFDaEMsT0FBTyxLQUFLO01BQ2Q7TUFFQSxPQUFPLElBQUk7SUFDYjtFQUNGO0FBQ0YsQ0FBQyxDQUFDLENBQUM7QUFFSCxNQUFNZixVQUFVLEdBQUcsQ0FBQztFQUFFbUIsRUFBRSxFQUFFLEdBQUc7RUFBRUMsS0FBSyxFQUFFO0FBQU0sQ0FBQyxDQUFDO0FBQzlDLE1BQU10QixPQUFPLEdBQUcsQ0FDZDtFQUFFcUIsRUFBRSxFQUFFLEdBQUc7RUFBRUUsT0FBTyxFQUFFO0FBQU0sQ0FBQyxFQUMzQjtFQUFFRixFQUFFLEVBQUUsR0FBRztFQUFFRSxPQUFPLEVBQUU7QUFBTSxDQUFDLENBQzVCO0FBRUQsTUFBTUMsVUFBVSxHQUFHO0VBQUVILEVBQUUsRUFBRSxJQUFJO0VBQUVDLEtBQUssRUFBRTtBQUFTLENBQUM7QUFDaEQsTUFBTUcsVUFBVSxHQUFHO0VBQUVKLEVBQUUsRUFBRSxJQUFJO0VBQUVDLEtBQUssRUFBRTtBQUFTLENBQUM7QUFFaEQsTUFBTUksT0FBTyxHQUFHO0VBQUVMLEVBQUUsRUFBRSxHQUFHO0VBQUVFLE9BQU8sRUFBRTtBQUFJLENBQUM7QUFDekMsTUFBTUksT0FBTyxHQUFHO0VBQUVOLEVBQUUsRUFBRSxHQUFHO0VBQUVFLE9BQU8sRUFBRTtBQUFJLENBQUM7QUFDekMsTUFBTUssT0FBTyxHQUFHO0VBQUVQLEVBQUUsRUFBRSxHQUFHO0VBQUVFLE9BQU8sRUFBRTtBQUFJLENBQUM7QUFDekMsTUFBTU0sT0FBTyxHQUFHO0VBQUVSLEVBQUUsRUFBRSxHQUFHO0VBQUVFLE9BQU8sRUFBRTtBQUFJLENBQUM7QUFDekMsTUFBTU8sT0FBTyxHQUFHO0VBQUVULEVBQUUsRUFBRSxHQUFHO0VBQUVFLE9BQU8sRUFBRTtBQUFJLENBQUM7QUFDekMsTUFBTVEsa0NBQWtDLEdBQUcsQ0FDekM7RUFBRUMsUUFBUSxFQUFFLElBQUk7RUFBRWhDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQUUsQ0FBQyxFQUN2QztFQUFFZ0MsUUFBUSxFQUFFLElBQUk7RUFBRWhDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0FBQUUsQ0FBQyxDQUN4QztBQUNELE1BQU1pQyxvQ0FBb0MsR0FBRyxDQUMzQztFQUFFRCxRQUFRLEVBQUUsSUFBSTtFQUFFaEMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztFQUFFa0Msa0JBQWtCLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7QUFBRSxDQUFDLEVBQ3pFO0VBQUVGLFFBQVEsRUFBRSxJQUFJO0VBQUVoQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0VBQUVrQyxrQkFBa0IsRUFBRSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUFFLENBQUMsQ0FDMUU7QUFFRCxNQUFNQyxZQUFZLEdBQUlDLE1BQU0sS0FBTTtFQUNoQ2xDLFVBQVU7RUFDVkYsT0FBTztFQUNQcUMsZUFBZSxFQUFFLENBQUM7SUFBRUwsUUFBUSxFQUFFLEdBQUc7SUFBRWhDLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHO0VBQUUsQ0FBQyxDQUFDO0VBQ3pEc0MsZUFBZSxFQUFFLElBQUk7RUFDckIsR0FBR0Y7QUFDTCxDQUFDLENBQUM7QUFFRkcsUUFBUSxDQUFDLFlBQVksRUFBRSxNQUFNO0VBQzNCLElBQUlDLFFBQVEsR0FBR0wsWUFBWSxDQUFDLENBQUM7RUFFN0JJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsTUFBTTtJQUN0QkUsRUFBRSxDQUFDLGVBQWUsRUFBRSxZQUFZO01BQzlCLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLFlBQUssRUFBQ0gsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQUVJLElBQUksRUFBRTtNQUFTLENBQUMsRUFBRWhELElBQUksQ0FBQ2lELEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDdkVDLE1BQU0sQ0FBQ0osTUFBTSxDQUFDLENBQUNLLGFBQWEsQ0FBQztRQUFFLEdBQUdQLFFBQVE7UUFBRUgsZUFBZSxFQUFFVztNQUFVLENBQUMsQ0FBQztJQUMzRSxDQUFDLENBQUM7SUFFRlAsRUFBRSxDQUFDLGdDQUFnQyxFQUFFLFlBQVk7TUFDL0MsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsWUFBSyxFQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFBRUksSUFBSSxFQUFFO01BQVcsQ0FBQyxFQUFFaEQsSUFBSSxDQUFDaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN6RUMsTUFBTSxDQUFDSixNQUFNLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO1FBQUUsR0FBR1AsUUFBUTtRQUFFUyxXQUFXLEVBQUU7TUFBWSxDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDO0lBRUZSLEVBQUUsQ0FBQyxvREFBb0QsRUFBRSxZQUFZO01BQ25FLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLFlBQUssRUFBQztRQUFFLEdBQUdILFFBQVE7UUFBRVUsZUFBZSxFQUFFO01BQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQUVOLElBQUksRUFBRTtNQUFXLENBQUMsRUFBRWhELElBQUksQ0FBQ2lELEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDdkdDLE1BQU0sQ0FBQ0osTUFBTSxDQUFDUyxRQUFRLENBQUMsQ0FBQ0MsT0FBTyxDQUFDLDZDQUE2QyxDQUFDO0lBQ2hGLENBQUMsQ0FBQztJQUVGWCxFQUFFLENBQUMsOERBQThELEVBQUUsWUFBWTtNQUM3RSxNQUFNQyxNQUFNLEdBQUcsTUFBTSxJQUFBQyxZQUFLLEVBQ3hCO1FBQ0UsR0FBR0gsUUFBUTtRQUNYVSxlQUFlLEVBQUU7TUFDbkIsQ0FBQyxFQUNELENBQUMsQ0FBQyxFQUNGO1FBQUVOLElBQUksRUFBRTtNQUFXLENBQUMsRUFDcEJoRCxJQUFJLENBQUNpRCxFQUFFLENBQUMsQ0FDVixDQUFDO01BQ0RDLE1BQU0sQ0FBQ0osTUFBTSxDQUFDUyxRQUFRLENBQUMsQ0FBQ0MsT0FBTyxDQUFDSixTQUFTLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0lBRUZQLEVBQUUsQ0FBQyxrREFBa0QsRUFBRSxZQUFZO01BQ2pFLE1BQU1DLE1BQU0sR0FBRyxNQUFNLElBQUFDLFlBQUssRUFBQ0gsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFFO1FBQUVJLElBQUksRUFBRTtNQUFTLENBQUMsRUFBRWhELElBQUksQ0FBQ2lELEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFDdkVDLE1BQU0sQ0FBQ0osTUFBTSxDQUFDUyxRQUFRLENBQUMsQ0FBQ0MsT0FBTyxDQUFDSixTQUFTLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0lBRUZULFFBQVEsQ0FBQyxVQUFVLEVBQUUsTUFBTTtNQUN6QkUsRUFBRSxDQUFDLDJCQUEyQixFQUFFLFlBQVk7UUFDMUMsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsWUFBSyxFQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFBRUksSUFBSSxFQUFFO1FBQVMsQ0FBQyxFQUFFaEQsSUFBSSxDQUFDaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN2RUMsTUFBTSxDQUFDSixNQUFNLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO1VBQUVNLFFBQVEsRUFBRTtRQUFNLENBQUMsQ0FBQztNQUNuRCxDQUFDLENBQUM7TUFFRlosRUFBRSxDQUFDLHdCQUF3QixFQUFFLFlBQVk7UUFDdkMsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsWUFBSyxFQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFBRUksSUFBSSxFQUFFO1FBQU8sQ0FBQyxFQUFFaEQsSUFBSSxDQUFDaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNyRUMsTUFBTSxDQUFDSixNQUFNLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO1VBQUVNLFFBQVEsRUFBRTtRQUFLLENBQUMsQ0FBQztNQUNsRCxDQUFDLENBQUM7TUFFRlosRUFBRSxDQUFDLDRCQUE0QixFQUFFLFlBQVk7UUFDM0MsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsWUFBSyxFQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7VUFBRUksSUFBSSxFQUFFO1FBQVcsQ0FBQyxFQUFFaEQsSUFBSSxDQUFDaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RUMsTUFBTSxDQUFDSixNQUFNLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO1VBQUVNLFFBQVEsRUFBRTtRQUFLLENBQUMsQ0FBQztNQUNsRCxDQUFDLENBQUM7SUFDSixDQUFDLENBQUM7SUFFRlosRUFBRSxDQUFDLG1DQUFtQyxFQUFFLFlBQVk7TUFDbEQsTUFBTUMsTUFBTSxHQUFHLE1BQU0sSUFBQUMsWUFBSyxFQUFDSCxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFBRUksSUFBSSxFQUFFO01BQVcsQ0FBQyxFQUFFaEQsSUFBSSxDQUFDaUQsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUN6RUMsTUFBTSxDQUFDSixNQUFNLENBQUMsQ0FBQ0ssYUFBYSxDQUFDO1FBQzNCVixlQUFlLEVBQUUsQ0FBQztVQUFFTCxRQUFRLEVBQUUsR0FBRztVQUFFaEMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUc7UUFBRSxDQUFDO01BQzFELENBQUMs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
@@ -30,4 +30,4 @@ var _default = exports.default = {
30
30
  toolbarEditorPosition: 'bottom',
31
31
  minRowHeight: '80px'
32
32
  };
33
- //# sourceMappingURL=defaults.js.map
33
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXRpbHMiLCJyZXF1aXJlIiwiX2RlZmF1bHQiLCJleHBvcnRzIiwiZGVmYXVsdCIsImFsbG93TXVsdGlwbGVQbGFjZW1lbnRzRW5hYmxlZCIsIm11bHRpcGxlUGxhY2VtZW50cyIsImVuYWJsZWQiLCJhbHRlcm5hdGVzIiwiY2F0ZWdvcmllcyIsImNhdGVnb3JpZXNQZXJSb3ciLCJjaG9pY2VzIiwiY2hvaWNlc0xhYmVsIiwiY2hvaWNlc1Bvc2l0aW9uIiwiY29ycmVjdFJlc3BvbnNlIiwiZmVlZGJhY2tFbmFibGVkIiwibG9ja0Nob2ljZU9yZGVyIiwibWF4QW5zd2VyQ2hvaWNlcyIsIm1heENob2ljZXNQZXJDYXRlZ29yeSIsInBhcnRpYWxTY29yaW5nIiwicHJvbXB0IiwicHJvbXB0RW5hYmxlZCIsInJhdGlvbmFsZSIsInJhdGlvbmFsZUVuYWJsZWQiLCJyb3dMYWJlbHMiLCJzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInRlYWNoZXJJbnN0cnVjdGlvbnMiLCJ0ZWFjaGVySW5zdHJ1Y3Rpb25zRW5hYmxlZCIsInRvb2xiYXJFZGl0b3JQb3NpdGlvbiIsIm1pblJvd0hlaWdodCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kZWZhdWx0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtdWx0aXBsZVBsYWNlbWVudHMgfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGRlZmF1bHQge1xuICBhbGxvd011bHRpcGxlUGxhY2VtZW50c0VuYWJsZWQ6IG11bHRpcGxlUGxhY2VtZW50cy5lbmFibGVkLFxuICBhbHRlcm5hdGVzOiBbXSxcbiAgY2F0ZWdvcmllczogW10sXG4gIGNhdGVnb3JpZXNQZXJSb3c6IDIsXG4gIGNob2ljZXM6IFtdLFxuICBjaG9pY2VzTGFiZWw6ICcnLFxuICBjaG9pY2VzUG9zaXRpb246ICdiZWxvdycsXG4gIGNvcnJlY3RSZXNwb25zZTogW10sXG4gIGZlZWRiYWNrRW5hYmxlZDogZmFsc2UsXG4gIGxvY2tDaG9pY2VPcmRlcjogdHJ1ZSxcbiAgbWF4QW5zd2VyQ2hvaWNlczogNixcbiAgbWF4Q2hvaWNlc1BlckNhdGVnb3J5OiAwLFxuICBwYXJ0aWFsU2NvcmluZzogdHJ1ZSxcbiAgcHJvbXB0OiAnJyxcbiAgcHJvbXB0RW5hYmxlZDogdHJ1ZSxcbiAgcmF0aW9uYWxlOiAnJyxcbiAgcmF0aW9uYWxlRW5hYmxlZDogdHJ1ZSxcbiAgcm93TGFiZWxzOiBbJyddLFxuICBzdHVkZW50SW5zdHJ1Y3Rpb25zRW5hYmxlZDogdHJ1ZSxcbiAgdGVhY2hlckluc3RydWN0aW9uczogJycsXG4gIHRlYWNoZXJJbnN0cnVjdGlvbnNFbmFibGVkOiB0cnVlLFxuICB0b29sYmFyRWRpdG9yUG9zaXRpb246ICdib3R0b20nLFxuICBtaW5Sb3dIZWlnaHQ6ICc4MHB4Jyxcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUE2QyxJQUFBQyxRQUFBLEdBQUFDLE9BQUEsQ0FBQUMsT0FBQSxHQUU5QjtFQUNiQyw4QkFBOEIsRUFBRUMseUJBQWtCLENBQUNDLE9BQU87RUFDMURDLFVBQVUsRUFBRSxFQUFFO0VBQ2RDLFVBQVUsRUFBRSxFQUFFO0VBQ2RDLGdCQUFnQixFQUFFLENBQUM7RUFDbkJDLE9BQU8sRUFBRSxFQUFFO0VBQ1hDLFlBQVksRUFBRSxFQUFFO0VBQ2hCQyxlQUFlLEVBQUUsT0FBTztFQUN4QkMsZUFBZSxFQUFFLEVBQUU7RUFDbkJDLGVBQWUsRUFBRSxLQUFLO0VBQ3RCQyxlQUFlLEVBQUUsSUFBSTtFQUNyQkMsZ0JBQWdCLEVBQUUsQ0FBQztFQUNuQkMscUJBQXFCLEVBQUUsQ0FBQztFQUN4QkMsY0FBYyxFQUFFLElBQUk7RUFDcEJDLE1BQU0sRUFBRSxFQUFFO0VBQ1ZDLGFBQWEsRUFBRSxJQUFJO0VBQ25CQyxTQUFTLEVBQUUsRUFBRTtFQUNiQyxnQkFBZ0IsRUFBRSxJQUFJO0VBQ3RCQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUM7RUFDZkMsMEJBQTBCLEVBQUUsSUFBSTtFQUNoQ0MsbUJBQW1CLEVBQUUsRUFBRTtFQUN2QkMsMEJBQTBCLEVBQUUsSUFBSTtFQUNoQ0MscUJBQXFCLEVBQUUsUUFBUTtFQUMvQkMsWUFBWSxFQUFFO0FBQ2hCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=