@plumile/backoffice-core 0.1.196 → 0.1.197

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 (43) hide show
  1. package/README.md +35 -2
  2. package/lib/esm/builders.d.ts +13 -5
  3. package/lib/esm/builders.d.ts.map +1 -1
  4. package/lib/esm/builders.js +1 -1
  5. package/lib/esm/index.d.ts +1 -1
  6. package/lib/esm/index.d.ts.map +1 -1
  7. package/lib/esm/index.js +2 -2
  8. package/lib/esm/resolve.d.ts +1 -1
  9. package/lib/esm/resolve.d.ts.map +1 -1
  10. package/lib/esm/resolve.js +8 -18
  11. package/lib/esm/state/listNavigation.d.ts +6 -0
  12. package/lib/esm/state/listNavigation.d.ts.map +1 -0
  13. package/lib/esm/state/listNavigation.js +42 -0
  14. package/lib/esm/state/urlState.d.ts +3 -6
  15. package/lib/esm/state/urlState.d.ts.map +1 -1
  16. package/lib/esm/state/urlState.js +16 -18
  17. package/lib/esm/type-tests/operation-bound-config.test-d.d.ts +36 -1
  18. package/lib/esm/type-tests/operation-bound-config.test-d.d.ts.map +1 -1
  19. package/lib/esm/type-tests/operation-bound-config.test-d.js +107 -7
  20. package/lib/esm/types.d.ts +59 -16
  21. package/lib/esm/types.d.ts.map +1 -1
  22. package/lib/esm/types.js +1 -1
  23. package/lib/tsconfig.esm.tsbuildinfo +1 -1
  24. package/lib/types/builders.d.ts +13 -5
  25. package/lib/types/builders.d.ts.map +1 -1
  26. package/lib/types/index.d.ts +1 -1
  27. package/lib/types/index.d.ts.map +1 -1
  28. package/lib/types/resolve.d.ts +1 -1
  29. package/lib/types/resolve.d.ts.map +1 -1
  30. package/lib/types/state/listNavigation.d.ts +6 -0
  31. package/lib/types/state/listNavigation.d.ts.map +1 -0
  32. package/lib/types/state/urlState.d.ts +3 -6
  33. package/lib/types/state/urlState.d.ts.map +1 -1
  34. package/lib/types/type-tests/operation-bound-config.test-d.d.ts +36 -1
  35. package/lib/types/type-tests/operation-bound-config.test-d.d.ts.map +1 -1
  36. package/lib/types/types.d.ts +59 -16
  37. package/lib/types/types.d.ts.map +1 -1
  38. package/package.json +2 -2
  39. package/lib/esm/state/buildListHref.d.ts +0 -14
  40. package/lib/esm/state/buildListHref.d.ts.map +0 -1
  41. package/lib/esm/state/buildListHref.js +0 -89
  42. package/lib/types/state/buildListHref.d.ts +0 -14
  43. package/lib/types/state/buildListHref.d.ts.map +0 -1
@@ -1,7 +1,111 @@
1
- import { defineBackofficeConnectionList, defineBackofficeDashboardConfig, defineBackofficeDashboardHrefTarget, defineBackofficeDashboardListTarget, defineBackofficeDashboardQueryWidget, defineBackofficeDashboardStaticWidget, defineBackofficeFormMutationAction, defineBackofficeFilters, defineBackofficeMutationAction, defineBackofficePicker, defineBackofficeRelationFilter, defineBackofficeSorts, datetimeFilter, entityIdFilter, enumFilter, numberFilter, } from '../builders.js';
1
+ import { defineSchema, stringField } from '@plumile/filter-query/schema.js';
2
+ import { createListDetailManifest, defineBackofficeConnectionList, defineBackofficeDashboardConfig, defineBackofficeDashboardHrefTarget, defineBackofficeDashboardListTarget, defineBackofficeDashboardQueryWidget, defineBackofficeDashboardStaticWidget, defineBackofficeFormMutationAction, defineBackofficeFilters, defineBackofficeMutationAction, defineBackofficePicker, defineBackofficeRelationFilter, defineBackofficeSorts, datetimeFilter, entityIdFilter, enumFilter, numberFilter, } from '../builders.js';
3
+ import { defineBackofficeListNavigation } from '../state/listNavigation.js';
2
4
  const label = (t) => {
3
5
  return t('common.label');
4
6
  };
7
+ const testListQuerySchema = defineSchema({
8
+ projectId: stringField(['eq']),
9
+ kind: stringField(['eq']),
10
+ });
11
+ const testListNavigation = defineBackofficeListNavigation()({
12
+ defaults: { where: null, sort: 'CREATED_AT_DESC' },
13
+ filterSchema: {
14
+ schema: testListQuerySchema,
15
+ toWhere: (filters) => {
16
+ const rawKind = filters.kind?.eq;
17
+ let kind;
18
+ if (rawKind === 'A' || rawKind === 'B') {
19
+ kind = rawKind;
20
+ }
21
+ return {
22
+ projectId: filters.projectId?.eq,
23
+ kind,
24
+ };
25
+ },
26
+ fromWhere: (where) => {
27
+ return {
28
+ projectId: { eq: where?.projectId ?? undefined },
29
+ kind: { eq: where?.kind ?? undefined },
30
+ };
31
+ },
32
+ },
33
+ sortIds: ['CREATED_AT_ASC', 'CREATED_AT_DESC'],
34
+ });
35
+ testListNavigation.encode({
36
+ where: { projectId: 'project-1', kind: 'A' },
37
+ sort: 'CREATED_AT_ASC',
38
+ });
39
+ testListNavigation.encode({
40
+ where: { status: 'OPEN' },
41
+ });
42
+ testListNavigation.decode({
43
+ filters: { missing: { eq: 'value' } },
44
+ });
45
+ const typedListManifest = createListDetailManifest({
46
+ id: 'tasks',
47
+ routeSegment: 'tasks',
48
+ label,
49
+ routes: {
50
+ list: '/tasks',
51
+ detail: (id) => {
52
+ return `/tasks/${id}`;
53
+ },
54
+ detailPage: (id, pageId) => {
55
+ return `/tasks/${id}/${pageId}`;
56
+ },
57
+ },
58
+ hasList: true,
59
+ listNavigation: testListNavigation,
60
+ facets: {
61
+ detailLayout: async () => {
62
+ throw new Error('type test');
63
+ },
64
+ detailPage: async () => {
65
+ throw new Error('type test');
66
+ },
67
+ },
68
+ });
69
+ const runtimeListManifest = typedListManifest;
70
+ export const runtimeListManifestId = runtimeListManifest.id;
71
+ export const typedListState = {
72
+ where: { projectId: 'project-1' },
73
+ sort: 'CREATED_AT_ASC',
74
+ };
75
+ export const invalidTypedListState = {
76
+ where: { status: 'OPEN' },
77
+ };
78
+ export const runtimeListState = {
79
+ where: { status: 'OPEN' },
80
+ sort: 'CREATED_AT_DESC',
81
+ };
82
+ createListDetailManifest({
83
+ id: 'tasks',
84
+ routeSegment: 'tasks',
85
+ label,
86
+ routes: {
87
+ list: '/tasks',
88
+ detail: (id) => {
89
+ return `/tasks/${id}`;
90
+ },
91
+ detailPage: (id, pageId) => {
92
+ return `/tasks/${id}/${pageId}`;
93
+ },
94
+ },
95
+ hasList: true,
96
+ facets: {
97
+ detailLayout: async () => {
98
+ throw new Error('type test');
99
+ },
100
+ detailPage: async () => {
101
+ throw new Error('type test');
102
+ },
103
+ },
104
+ });
105
+ createListDetailManifest({
106
+ ...typedListManifest,
107
+ listNavigation: { kind: 'list-navigation' },
108
+ });
5
109
  defineBackofficeFormMutationAction()({
6
110
  id: 'create-organization',
7
111
  kind: 'formMutation',
@@ -210,7 +314,7 @@ defineBackofficeDashboardConfig({
210
314
  severity: 'A',
211
315
  };
212
316
  },
213
- resolve: (data, context) => {
317
+ resolve: (data) => {
214
318
  return {
215
319
  label,
216
320
  value: data.throughputCount,
@@ -226,10 +330,6 @@ defineBackofficeDashboardConfig({
226
330
  state: {
227
331
  where: { kind: 'A' },
228
332
  sort: 'CREATED_AT_DESC',
229
- filters: [
230
- { id: 'createdFrom', value: context.window.from },
231
- { id: 'createdTo', value: context.window.to },
232
- ],
233
333
  },
234
334
  }),
235
335
  };
@@ -523,4 +623,4 @@ defineBackofficePicker()({
523
623
  };
524
624
  },
525
625
  });
526
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLWJvdW5kLWNvbmZpZy50ZXN0LWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZS10ZXN0cy9vcGVyYXRpb24tYm91bmQtY29uZmlnLnRlc3QtZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQ0wsOEJBQThCLEVBQzlCLCtCQUErQixFQUMvQixtQ0FBbUMsRUFDbkMsbUNBQW1DLEVBQ25DLG9DQUFvQyxFQUNwQyxxQ0FBcUMsRUFDckMsa0NBQWtDLEVBQ2xDLHVCQUF1QixFQUN2Qiw4QkFBOEIsRUFDOUIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLGNBQWMsRUFDZCxVQUFVLEVBQ1YsWUFBWSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFtSHhCLE1BQU0sS0FBSyxHQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDN0IsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBRUYsa0NBQWtDLEVBSS9CLENBQUM7SUFDRixFQUFFLEVBQUUscUJBQXFCO0lBQ3pCLElBQUksRUFBRSxjQUFjO0lBQ3BCLEtBQUs7SUFDTCxRQUFRLEVBQUUsRUFBVztJQUNyQixNQUFNLEVBQUUsRUFBRTtJQUNWLFlBQVksRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRTtRQUM5QixPQUFPO1lBQ0wsS0FBSyxFQUFFO2dCQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtnQkFDakIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO2FBQzFCO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFDRCxNQUFNLEVBQUU7UUFDTixPQUFPLEVBQUU7WUFDUCxLQUFLLEVBQUUsS0FBSztZQUNaLElBQUksRUFBRTtnQkFDSixRQUFRLEVBQUUsZUFBZTtnQkFDekIsV0FBVyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUU7b0JBQ3hCLE9BQU8s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QUNiLENBQUM7SUFDRCxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ2IsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxFQUFFLEVBQUU7Q0FDWixDQUFDLENBQUM7QUFFSCxzQkFBc0IsRUFBdUIsQ0FBQztJQUM1QyxLQUFLLEVBQUUsRUFBVztJQUNsQixRQUFRLEVBQUUsRUFBVztJQUNyQixhQUFhLEVBQUUsR0FBRyxFQUFFO1FBQ2xCLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUNELEtBQUssRUFBRSxHQUFHLEVBQUU7UUFDVixPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUNELFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQ2hCLE9BQU8sR0FBRyxDQUFDLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBRUQsbUJBQW1CLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDakMsT0FBTztZQUNMLEtBQUssRUFBRTtnQkFDTCxTQUFTLEVBQUcsS0FBNEMsRUFBRSxTQUFTO2FBQ3BFO1lBQ0QsS0FBSyxFQUFFLEVBQUU7WUFDVCxNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBPcGVyYXRpb25UeXBlIH0gZnJvbSAncmVsYXktcnVudGltZSc7XG5pbXBvcnQge1xuICBkZWZpbmVCYWNrb2ZmaWNlQ29ubmVjdGlvbkxpc3QsXG4gIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRDb25maWcsXG4gIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRIcmVmVGFyZ2V0LFxuICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkTGlzdFRhcmdldCxcbiAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0LFxuICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkU3RhdGljV2lkZ2V0LFxuICBkZWZpbmVCYWNrb2ZmaWNlRm9ybU11dGF0aW9uQWN0aW9uLFxuICBkZWZpbmVCYWNrb2ZmaWNlRmlsdGVycyxcbiAgZGVmaW5lQmFja29mZmljZU11dGF0aW9uQWN0aW9uLFxuICBkZWZpbmVCYWNrb2ZmaWNlUGlja2VyLFxuICBkZWZpbmVCYWNrb2ZmaWNlUmVsYXRpb25GaWx0ZXIsXG4gIGRlZmluZUJhY2tvZmZpY2VTb3J0cyxcbiAgZGF0ZXRpbWVGaWx0ZXIsXG4gIGVudGl0eUlkRmlsdGVyLFxuICBlbnVtRmlsdGVyLFxuICBudW1iZXJGaWx0ZXIsXG59IGZyb20gJy4uL2J1aWxkZXJzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgQmFja29mZmljZURhc2hib2FyZENvbmZpZyxcbiAgQmFja29mZmljZURldGFpbFRpdGxlTWV0YUl0ZW0sXG4gIEJhY2tvZmZpY2VMaXN0UmVzcG9uc2l2ZU1ldGFJdGVtLFxuICBCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmUsXG4gIEkxOG5MYWJlbCxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG50eXBlIFRlc3RTb3J0ID0gJ0NSRUFURURfQVRfQVNDJyB8ICdDUkVBVEVEX0FUX0RFU0MnO1xudHlwZSBUZXN0S2luZCA9ICdBJyB8ICdCJztcbnR5cGUgVGVzdEN1cnJlbmN5ID0gJ0VVUicgfCAnVVNEJztcblxuaW50ZXJmYWNlIFRlc3RMaXN0T3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczoge1xuICAgIHdoZXJlPzoge1xuICAgICAgcHJvamVjdElkPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGtpbmQ/OiBUZXN0S2luZCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgICBhdHRlbXB0PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGNyZWF0ZWRGcm9tPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICB9IHwgbnVsbDtcbiAgICBzb3J0PzogVGVzdFNvcnQgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgY3Vyc29yPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSByb3dzOiByZWFkb25seSB1bmtub3duW107XG4gIH07XG59XG5cbmludGVyZmFjZSBUZXN0UGlja2VyT3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczoge1xuICAgIHdoZXJlPzoge1xuICAgICAgb3JnYW5pemF0aW9uSWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIH0gfCBudWxsO1xuICAgIGNvdW50OiBudW1iZXI7XG4gICAgY3Vyc29yPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSByb3dzOiByZWFkb25seSB1bmtub3duW107XG4gIH07XG59XG5cbmludGVyZmFjZSBUZXN0Q291bnRPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiB7XG4gICAgd2hlcmU/OiBCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+IHwgbnVsbDtcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSByb3dzQ291bnQ6IG51bWJlcjtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFRlc3REYXNoYm9hcmRPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBuZXZlcj47XG4gIHJlc3BvbnNlOiB7XG4gICAgcmVhZG9ubHkgdXNlcnM6IHtcbiAgICAgIHJlYWRvbmx5IHRvdGFsQ291bnQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgVGVzdERhc2hib2FyZFdpbmRvd09wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvblR5cGUge1xuICB2YXJpYWJsZXM6IHtcbiAgICBmcm9tOiBzdHJpbmc7XG4gICAgdG86IHN0cmluZztcbiAgICBzZXZlcml0eT86IFRlc3RLaW5kIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSB0aHJvdWdocHV0Q291bnQ6IG51bWJlcjtcbiAgICByZWFkb25seSBmYWlsdXJlUmF0ZTogbnVtYmVyO1xuICAgIHJlYWRvbmx5IHRvcEZhaWx1cmVzOiByZWFkb25seSB7XG4gICAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgbGFiZWw6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IGNvdW50OiBudW1iZXI7XG4gICAgfVtdO1xuICAgIHJlYWRvbmx5IGJ1Y2tldHM6IHJlYWRvbmx5IHtcbiAgICAgIHJlYWRvbmx5IGJ1Y2tldDogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgY291bnQ6IG51bWJlcjtcbiAgICB9W107XG4gIH07XG59XG5cbmludGVyZmFjZSBUZXN0Q3JlYXRlT3JnYW5pemF0aW9uT3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczoge1xuICAgIGlucHV0OiB7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBjdXJyZW5jeTogVGVzdEN1cnJlbmN5O1xuICAgIH07XG4gIH07XG4gIHJlc3BvbnNlOiB7XG4gICAgcmVhZG9ubHkgY3JlYXRlT3JnYW5pemF0aW9uOiB7XG4gICAgICByZWFkb25seSBzdGF0dXM6IHN0cmluZztcbiAgICAgIHJlYWRvbmx5IG9yZ2FuaXphdGlvbjoge1xuICAgICAgICByZWFkb25seSBpZDogc3RyaW5nO1xuICAgICAgfSB8IG51bGw7XG4gICAgfTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFRlc3RBcmNoaXZlT3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczoge1xuICAgIGlkOiBzdHJpbmc7XG4gIH07XG4gIHJlc3BvbnNlOiB7XG4gICAgcmVhZG9ubHkgYXJjaGl2ZToge1xuICAgICAgcmVhZG9ubHkgc3RhdHVzOiBzdHJpbmc7XG4gICAgfTtcbiAgfTtcbn1cblxudHlwZSBUZXN0Q3JlYXRlT3JnYW5pemF0aW9uRm9ybVZhbHVlcyA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICBjdXJyZW5jeTogVGVzdEN1cnJlbmN5O1xufTtcblxuY29uc3QgbGFiZWw6IEkxOG5MYWJlbCA9ICh0KSA9PiB7XG4gIHJldHVybiB0KCdjb21tb24ubGFiZWwnKTtcbn07XG5cbmRlZmluZUJhY2tvZmZpY2VGb3JtTXV0YXRpb25BY3Rpb248XG4gIFRlc3RDcmVhdGVPcmdhbml6YXRpb25PcGVyYXRpb24sXG4gIG51bGwsXG4gIFRlc3RDcmVhdGVPcmdhbml6YXRpb25Gb3JtVmFsdWVzXG4+KCkoe1xuICBpZDogJ2NyZWF0ZS1vcmdhbml6YXRpb24nLFxuICBraW5kOiAnZm9ybU11dGF0aW9uJyxcbiAgbGFiZWwsXG4gIG11dGF0aW9uOiB7fSBhcyBuZXZlcixcbiAgZmllbGRzOiBbXSxcbiAgZ2V0VmFyaWFibGVzOiAoX25vZGUsIHZhbHVlcykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBuYW1lOiB2YWx1ZXMubmFtZSxcbiAgICAgICAgY3VycmVuY3k6IHZhbHVlcy5jdXJyZW5jeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbiAgdG9hc3RzOiB7XG4gICAgc3VjY2Vzczoge1xuICAgICAgdGl0bGU6IGxhYmVsLFxuICAgICAgdmlldzoge1xuICAgICAgICBlbnRpdHlJZDogJ29yZ2FuaXphdGlvbnMnLFxuICAgICAgICBnZXRUYXJnZXRJZDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmNyZWF0ZU9yZ2FuaXphdGlvbi5vcmdhbml6YXRpb24/LmlkID8/IG51bGw7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZUZvcm1NdXRhdGlvbkFjdGlvbjxcbiAgVGVzdENyZWF0ZU9yZ2FuaXphdGlvbk9wZXJhdGlvbixcbiAgbnVsbCxcbiAgVGVzdENyZWF0ZU9yZ2FuaXphdGlvbkZvcm1WYWx1ZXNcbj4oKSh7XG4gIGlkOiAnbWlzc2luZy1jdXJyZW5jeScsXG4gIGtpbmQ6ICdmb3JtTXV0YXRpb24nLFxuICBsYWJlbCxcbiAgbXV0YXRpb246IHt9IGFzIG5ldmVyLFxuICBmaWVsZHM6IFtdLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGNyZWF0ZSBvcmdhbml6YXRpb24gdmFyaWFibGVzIG11c3QgaW5jbHVkZSByZXF1aXJlZCBpbnB1dC5jdXJyZW5jeS5cbiAgZ2V0VmFyaWFibGVzOiAoX25vZGUsIHZhbHVlcykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBuYW1lOiB2YWx1ZXMubmFtZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRm9ybU11dGF0aW9uQWN0aW9uPFxuICBUZXN0Q3JlYXRlT3JnYW5pemF0aW9uT3BlcmF0aW9uLFxuICBudWxsLFxuICB7IG5hbWU6IHN0cmluZzsgY3VycmVuY3k6ICdHQlAnIH1cbj4oKSh7XG4gIGlkOiAnaW52YWxpZC1jdXJyZW5jeScsXG4gIGtpbmQ6ICdmb3JtTXV0YXRpb24nLFxuICBsYWJlbCxcbiAgbXV0YXRpb246IHt9IGFzIG5ldmVyLFxuICBmaWVsZHM6IFtdLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGNyZWF0ZSBvcmdhbml6YXRpb24gY3VycmVuY3kgbXVzdCBiZSBvbmUgb2YgdGhlIFJlbGF5IGdlbmVyYXRlZCBlbnVtIHZhbHVlcy5cbiAgZ2V0VmFyaWFibGVzOiAoX25vZGUsIHZhbHVlcykgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dDoge1xuICAgICAgICBuYW1lOiB2YWx1ZXMubmFtZSxcbiAgICAgICAgY3VycmVuY3k6IHZhbHVlcy5jdXJyZW5jeSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlTXV0YXRpb25BY3Rpb248VGVzdEFyY2hpdmVPcGVyYXRpb24sIHsgaWQ6IHN0cmluZyB9PigpKHtcbiAgaWQ6ICdhcmNoaXZlJyxcbiAga2luZDogJ211dGF0aW9uJyxcbiAgbGFiZWwsXG4gIG11dGF0aW9uOiB7fSBhcyBuZXZlcixcbiAgZ2V0VmFyaWFibGVzOiAobm9kZSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogbm9kZS5pZCxcbiAgICB9O1xuICB9LFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VNdXRhdGlvbkFjdGlvbjxUZXN0QXJjaGl2ZU9wZXJhdGlvbiwgeyBpZDogc3RyaW5nIH0+KCkoe1xuICBpZDogJ2FyY2hpdmUtbWlzc2luZy1pZCcsXG4gIGtpbmQ6ICdtdXRhdGlvbicsXG4gIGxhYmVsLFxuICBtdXRhdGlvbjoge30gYXMgbmV2ZXIsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgbXV0YXRpb24gdmFyaWFibGVzIG11c3QgaW5jbHVkZSByZXF1aXJlZCBpZC5cbiAgZ2V0VmFyaWFibGVzOiAoKSA9PiB7XG4gICAgcmV0dXJuIHt9O1xuICB9LFxufSk7XG5cbmV4cG9ydCBjb25zdCByZXNwb25zaXZlTWV0YTogQmFja29mZmljZUxpc3RSZXNwb25zaXZlTWV0YUl0ZW0gPSB7XG4gIGlkOiAnc3RhdGUnLFxuICBsYWJlbCxcbiAgdmFsdWU6ICdyZWFkeScsXG59O1xuXG5leHBvcnQgY29uc3QgaW52YWxpZFJlc3BvbnNpdmVNZXRhOiBCYWNrb2ZmaWNlTGlzdFJlc3BvbnNpdmVNZXRhSXRlbSA9IHtcbiAgaWQ6ICdzdGF0ZScsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgcmVzcG9uc2l2ZSBtZXRhIGxhYmVscyBtdXN0IGJlIGkxOG4gbGFiZWwgZnVuY3Rpb25zLCBub3QgcmF3IHN0cmluZ3MuXG4gIGxhYmVsOiAnU3RhdGUnLFxuICB2YWx1ZTogJ3JlYWR5Jyxcbn07XG5cbmV4cG9ydCBjb25zdCB0aXRsZU1ldGE6IEJhY2tvZmZpY2VEZXRhaWxUaXRsZU1ldGFJdGVtID0ge1xuICBpZDogJ3N0YXRlJyxcbiAgbGFiZWwsXG4gIHZhbHVlOiAncmVhZHknLFxufTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRUaXRsZU1ldGE6IEJhY2tvZmZpY2VEZXRhaWxUaXRsZU1ldGFJdGVtID0ge1xuICBpZDogJ3N0YXRlJyxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aXRsZSBtZXRhIGxhYmVscyBtdXN0IGJlIGkxOG4gbGFiZWwgZnVuY3Rpb25zLCBub3QgcmF3IHN0cmluZ3MuXG4gIGxhYmVsOiAnU3RhdGUnLFxuICB2YWx1ZTogJ3JlYWR5Jyxcbn07XG5cbmNvbnN0IGZpbHRlcnMgPSBkZWZpbmVCYWNrb2ZmaWNlRmlsdGVyczxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gIGVudGl0eUlkRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdwcm9qZWN0SWQnPihcbiAgICAncHJvamVjdElkJyxcbiAgICB7XG4gICAgICBlbnRpdHk6ICdwcm9qZWN0cycsXG4gICAgICBsYWJlbCxcbiAgICB9LFxuICApLFxuICBlbnVtRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdraW5kJz4oJ2tpbmQnLCB7XG4gICAgbGFiZWwsXG4gICAgb3B0aW9uczogWydBJywgJ0InXSxcbiAgfSksXG4gIG51bWJlckZpbHRlcjxCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+LCAnYXR0ZW1wdCc+KFxuICAgICdhdHRlbXB0JyxcbiAgICB7XG4gICAgICBsYWJlbCxcbiAgICB9LFxuICApLFxuICBkYXRldGltZUZpbHRlcjxCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+LCAnY3JlYXRlZEZyb20nPihcbiAgICAnY3JlYXRlZEZyb20nLFxuICAgIHtcbiAgICAgIGxhYmVsLFxuICAgICAgbW9kZTogJ2Zyb20nLFxuICAgIH0sXG4gICksXG5dKTtcblxuZGVmaW5lQmFja29mZmljZVNvcnRzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFt7IGlkOiAnQ1JFQVRFRF9BVF9ERVNDJywgbGFiZWwgfV0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlQ29ubmVjdGlvbkxpc3Q8VGVzdExpc3RPcGVyYXRpb24sIFRlc3RDb3VudE9wZXJhdGlvbj4oKSh7XG4gIHRpdGxlOiBsYWJlbCxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICBmcmFnbWVudDoge30gYXMgbmV2ZXIsXG4gIGNvdW50OiB7XG4gICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgIGJ1aWxkVmFyaWFibGVzOiAoeyB3aGVyZSB9KSA9PiB7XG4gICAgICByZXR1cm4geyB3aGVyZSB9O1xuICAgIH0sXG4gICAgZ2V0Q291bnQ6IChkYXRhKSA9PiB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgVGVzdENvdW50T3BlcmF0aW9uWydyZXNwb25zZSddKS5yb3dzQ291bnQ7XG4gICAgfSxcbiAgfSxcbiAgZmlsdGVycyxcbiAgc29ydHM6IGRlZmluZUJhY2tvZmZpY2VTb3J0czxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gICAgeyBpZDogJ0NSRUFURURfQVRfQVNDJywgbGFiZWwgfSxcbiAgXSksXG4gIGRlZmF1bHRTdGF0ZToge1xuICAgIHdoZXJlOiB7IHByb2plY3RJZDogJ3Byb2plY3QtMScgfSxcbiAgICBzb3J0OiAnQ1JFQVRFRF9BVF9ERVNDJyxcbiAgfSxcbiAgZ2V0Q29ubmVjdGlvbjogKCkgPT4ge1xuICAgIHJldHVybiB7IGVkZ2VzOiBbXSB9O1xuICB9LFxuICB0b1JvdzogKHJvdykgPT4ge1xuICAgIHJldHVybiByb3c7XG4gIH0sXG4gIGdldFJvd0lkOiAoKSA9PiB7XG4gICAgcmV0dXJuICdyb3cnO1xuICB9LFxuICBjb2x1bW5zOiBbXSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlUGlja2VyPFRlc3RQaWNrZXJPcGVyYXRpb24+KCkoe1xuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIGZyYWdtZW50OiB7fSBhcyBuZXZlcixcbiAgZ2V0Q29ubmVjdGlvbjogKCkgPT4ge1xuICAgIHJldHVybiB7IGVkZ2VzOiBbXSB9O1xuICB9LFxuICB0b1JvdzogKCkgPT4ge1xuICAgIHJldHVybiB7IGlkOiAncm93JywgdGl0bGU6ICdSb3cnIH07XG4gIH0sXG4gIGdldFJvd0lkOiAocm93KSA9PiB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfSxcbiAgYnVpbGRRdWVyeVZhcmlhYmxlczogKHsgc2NvcGUgfSkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICB3aGVyZToge1xuICAgICAgICBvcmdhbml6YXRpb25JZDogc2NvcGU/Lm9yZ2FuaXphdGlvbklkLFxuICAgICAgfSxcbiAgICAgIGNvdW50OiAyMCxcbiAgICAgIGN1cnNvcjogbnVsbCxcbiAgICB9O1xuICB9LFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRDb25maWcoe1xuICB0aXRsZTogbGFiZWwsXG4gIHdpZGdldHM6IFtcbiAgICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZE9wZXJhdGlvbj4oKSh7XG4gICAgICBpZDogJ3VzZXJzJyxcbiAgICAgIGtpbmQ6ICdtZXRyaWNHcm91cCcsXG4gICAgICBxdWVyeToge30gYXMgbmV2ZXIsXG4gICAgICB2YXJpYWJsZXM6IHt9LFxuICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ3VzZXJzJyxcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgdmFsdWU6IGRhdGEudXNlcnMudG90YWxDb3VudCxcbiAgICAgICAgICAgIHRhcmdldDogZGVmaW5lQmFja29mZmljZURhc2hib2FyZExpc3RUYXJnZXQ8VGVzdExpc3RPcGVyYXRpb24+KCkoe1xuICAgICAgICAgICAgICBlbnRpdHlJZDogJ3Rhc2tzJyxcbiAgICAgICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICAgICB3aGVyZTogeyBraW5kOiAnQScgfSxcbiAgICAgICAgICAgICAgICBzb3J0OiAnQ1JFQVRFRF9BVF9ERVNDJyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRTdGF0aWNXaWRnZXQoe1xuICAgICAgaWQ6ICd3aW5kb3cnLFxuICAgICAga2luZDogJ3dpbmRvd0NvbnRyb2wnLFxuICAgICAgdGl0bGU6IGxhYmVsLFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAndGhyb3VnaHB1dCcsXG4gICAgICBraW5kOiAndHJlbmRNZXRyaWMnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiAoeyB3aW5kb3cgfSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGZyb206IHdpbmRvdy5mcm9tLFxuICAgICAgICAgIHRvOiB3aW5kb3cudG8sXG4gICAgICAgICAgc2V2ZXJpdHk6ICdBJyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoZGF0YSwgY29udGV4dCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHZhbHVlOiBkYXRhLnRocm91Z2hwdXRDb3VudCxcbiAgICAgICAgICBkZWx0YToge1xuICAgICAgICAgICAgdmFsdWU6IDEyLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiAndXAnLFxuICAgICAgICAgICAgdG9uZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzcGFya2xpbmU6IFt7IHg6ICcyMDI2LTAxLTAxVDAwOjAwOjAwLjAwMFonLCB5OiAxIH1dLFxuICAgICAgICAgIHRhcmdldDogZGVmaW5lQmFja29mZmljZURhc2hib2FyZExpc3RUYXJnZXQ8VGVzdExpc3RPcGVyYXRpb24+KCkoe1xuICAgICAgICAgICAgZW50aXR5SWQ6ICd0YXNrcycsXG4gICAgICAgICAgICBzdGF0ZToge1xuICAgICAgICAgICAgICB3aGVyZTogeyBraW5kOiAnQScgfSxcbiAgICAgICAgICAgICAgc29ydDogJ0NSRUFURURfQVRfREVTQycsXG4gICAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAgICB7IGlkOiAnY3JlYXRlZEZyb20nLCB2YWx1ZTogY29udGV4dC53aW5kb3cuZnJvbSB9LFxuICAgICAgICAgICAgICAgIHsgaWQ6ICdjcmVhdGVkVG8nLCB2YWx1ZTogY29udGV4dC53aW5kb3cudG8gfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAnZmFpbHVyZS1yYXRlJyxcbiAgICAgIGtpbmQ6ICdzbGFHYXVnZScsXG4gICAgICBxdWVyeToge30gYXMgbmV2ZXIsXG4gICAgICB2YXJpYWJsZXM6ICh7IHdpbmRvdyB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGZyb206IHdpbmRvdy5mcm9tLCB0bzogd2luZG93LnRvIH07XG4gICAgICB9LFxuICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB2YWx1ZTogZGF0YS5mYWlsdXJlUmF0ZSxcbiAgICAgICAgICBtYXg6IDEsXG4gICAgICAgICAgdGhyZXNob2xkOiAwLjA1LFxuICAgICAgICAgIHVuaXQ6ICclJyxcbiAgICAgICAgICB0b25lOiAnd2FybmluZycsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAndG9wLWZhaWx1cmVzJyxcbiAgICAgIGtpbmQ6ICdicmVha2Rvd25MaXN0JyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZnJvbTogd2luZG93LmZyb20sIHRvOiB3aW5kb3cudG8gfTtcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZGF0YS50b3BGYWlsdXJlcy5tYXAoKGZhaWx1cmUpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IGZhaWx1cmUuaWQsXG4gICAgICAgICAgICBsYWJlbDogKCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZS5sYWJlbDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB2YWx1ZTogZmFpbHVyZS5jb3VudCxcbiAgICAgICAgICAgIHRvbmU6ICdkYW5nZXInLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZFdpbmRvd09wZXJhdGlvbj4oKSh7XG4gICAgICBpZDogJ3RpbWVsaW5lJyxcbiAgICAgIGtpbmQ6ICd0aW1lbGluZUNoYXJ0JyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZnJvbTogd2luZG93LmZyb20sIHRvOiB3aW5kb3cudG8gfTtcbiAgICAgIH0sXG4gICAgICBhcmlhTGFiZWw6IGxhYmVsLFxuICAgICAgY2hhcnQ6ICdiYXInLFxuICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZXJpZXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6ICd0aHJvdWdocHV0JyxcbiAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgIGNvbG9yOiAnIzI1NjNlYicsXG4gICAgICAgICAgICAgIGRhdGE6IGRhdGEuYnVja2V0cy5tYXAoKGJ1Y2tldCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICB4OiBidWNrZXQuYnVja2V0LFxuICAgICAgICAgICAgICAgICAgeTogYnVja2V0LmNvdW50LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZFdpbmRvd09wZXJhdGlvbj4oKSh7XG4gICAgICBpZDogJ3Jpc2stcXVldWUnLFxuICAgICAga2luZDogJ3Jpc2tRdWV1ZScsXG4gICAgICBxdWVyeToge30gYXMgbmV2ZXIsXG4gICAgICB2YXJpYWJsZXM6ICh7IHdpbmRvdyB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGZyb206IHdpbmRvdy5mcm9tLCB0bzogd2luZG93LnRvIH07XG4gICAgICB9LFxuICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnZGVhZC1vdXRib3gnLFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBzZXZlcml0eTogJ2RhbmdlcicsXG4gICAgICAgICAgICB2YWx1ZTogNCxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZFdpbmRvd09wZXJhdGlvbj4oKSh7XG4gICAgICBpZDogJ3Nwb3RsaWdodCcsXG4gICAgICBraW5kOiAnZW50aXR5U3BvdGxpZ2h0JyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZnJvbTogd2luZG93LmZyb20sIHRvOiB3aW5kb3cudG8gfTtcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgdGl0bGU6IGxhYmVsLFxuICAgICAgICAgIHRvbmU6ICdpbmZvJyxcbiAgICAgICAgICBtZXRhOiBbeyBpZDogJ2FnZScsIGxhYmVsLCB2YWx1ZTogJzQ1IG1pbicgfV0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAnaGVhbHRoJyxcbiAgICAgIGtpbmQ6ICdoZWFsdGhNYXRyaXgnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiAoeyB3aW5kb3cgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBmcm9tOiB3aW5kb3cuZnJvbSwgdG86IHdpbmRvdy50byB9O1xuICAgICAgfSxcbiAgICAgIHJlc29sdmU6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ3dvcmsnLFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBjZWxsczogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6ICd0YXNrcycsXG4gICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgICAgICAgICAgdG9uZTogJ3dhcm5pbmcnLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkU3RhdGljV2lkZ2V0KHtcbiAgICAgIGlkOiAnYWN0aW9ucycsXG4gICAgICBraW5kOiAncXVpY2tBY3Rpb25zJyxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAndXNlcnMnLFxuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHRhcmdldDogZGVmaW5lQmFja29mZmljZURhc2hib2FyZEhyZWZUYXJnZXQoJy91c2VycycpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KSxcbiAgXSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZE9wZXJhdGlvbj4oKSh7XG4gIGlkOiAnaW52YWxpZC11c2VycycsXG4gIGtpbmQ6ICdtZXRyaWNHcm91cCcsXG4gIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgdmFyaWFibGVzOiB7fSxcbiAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogJ3VzZXJzJyxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZGFzaGJvYXJkIHdpZGdldCByZXNvbHZlIGRhdGEgaXMgdHlwZWQgZnJvbSB0aGUgb3BlcmF0aW9uIHJlc3BvbnNlLlxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIHZhbHVlOiBkYXRhLnByb2plY3RzLnRvdGFsQ291bnQsXG4gICAgICB9LFxuICAgIF07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24+KCkoe1xuICBpZDogJ2ludmFsaWQtd2luZG93LXZhcmlhYmxlcycsXG4gIGtpbmQ6ICd0cmVuZE1ldHJpYycsXG4gIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBkYXNoYm9hcmQgd2lkZ2V0IHZhcmlhYmxlcyBtdXN0IG1hdGNoIHRoZSBvcGVyYXRpb24gdmFyaWFibGVzLlxuICB2YXJpYWJsZXM6ICh7IHdpbmRvdyB9KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IHdpbmRvdy5mcm9tLFxuICAgIH07XG4gIH0sXG4gIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsLFxuICAgICAgdmFsdWU6IGRhdGEudGhyb3VnaHB1dENvdW50LFxuICAgIH07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZURhc2hib2FyZExpc3RUYXJnZXQ8VGVzdExpc3RPcGVyYXRpb24+KCkoe1xuICBlbnRpdHlJZDogJ3Rhc2tzJyxcbiAgc3RhdGU6IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGRhc2hib2FyZCBsaXN0IHRhcmdldCB3aGVyZSBtdXN0IG1hdGNoIHRoZSB0YXJnZXQgbGlzdCBvcGVyYXRpb24gd2hlcmUgaW5wdXQuXG4gICAgd2hlcmU6IHsgb3JnYW5pemF0aW9uSWQ6ICdvcmctMScgfSxcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkTGlzdFRhcmdldDxUZXN0TGlzdE9wZXJhdGlvbj4oKSh7XG4gIGVudGl0eUlkOiAndGFza3MnLFxuICBzdGF0ZToge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZGFzaGJvYXJkIGxpc3QgdGFyZ2V0IHNvcnQgbXVzdCBtYXRjaCB0aGUgdGFyZ2V0IGxpc3Qgb3BlcmF0aW9uIHNvcnQgaW5wdXQuXG4gICAgc29ydDogJ1VQREFURURfQVRfREVTQycsXG4gIH0sXG59KTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWREYXNoYm9hcmRDb25maWc6IEJhY2tvZmZpY2VEYXNoYm9hcmRDb25maWcgPSB7XG4gIHRpdGxlOiBsYWJlbCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBkYXNoYm9hcmQgY29uZmlncyBkbyBub3Qgc3VwcG9ydCBnbG9iYWwgcXVlcmllcy5cbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICB3aWRnZXRzOiBbXSxcbn07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgZGF0YS1kcml2ZW4gZGFzaGJvYXJkIHdpZGdldHMgbXVzdCBkZWNsYXJlIGEgcXVlcnkuXG5kZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZE9wZXJhdGlvbj4oKSh7XG4gIGlkOiAnbWlzc2luZy1xdWVyeScsXG4gIGtpbmQ6ICdtZXRyaWNHcm91cCcsXG4gIHZhcmlhYmxlczoge30sXG4gIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICd1c2VycycsXG4gICAgICAgIGxhYmVsLFxuICAgICAgICB2YWx1ZTogZGF0YS51c2Vycy50b3RhbENvdW50LFxuICAgICAgfSxcbiAgICBdO1xuICB9LFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VSZWxhdGlvbkZpbHRlcjxUZXN0TGlzdE9wZXJhdGlvbj4oKSh7XG4gIHRhcmdldDogJ3Byb2plY3RzJyxcbiAgd2hlcmVLZXk6ICdwcm9qZWN0SWQnLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VSZWxhdGlvbkZpbHRlcjxUZXN0TGlzdE9wZXJhdGlvbj4oKSh7XG4gIHRhcmdldDogJ3Byb2plY3RzJyxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBvcmdhbml6YXRpb25JZCBpcyBub3QgZGVjbGFyZWQgYnkgdGhlIHRhcmdldCBsaXN0IHdoZXJlIGlucHV0LlxuICB3aGVyZUtleTogJ29yZ2FuaXphdGlvbklkJyxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRmlsdGVyczxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgbWlzc2luZ0ZpZWxkIGlzIG5vdCBkZWNsYXJlZCBieSB0aGUgb3BlcmF0aW9uIHdoZXJlIGlucHV0LlxuICBlbnRpdHlJZEZpbHRlcjxCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+LCAnbWlzc2luZ0ZpZWxkJz4oXG4gICAgJ21pc3NpbmdGaWVsZCcsXG4gICAge1xuICAgICAgZW50aXR5OiAncHJvamVjdHMnLFxuICAgICAgbGFiZWwsXG4gICAgfSxcbiAgKSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRmlsdGVyczxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gIGVudW1GaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2tpbmQnPigna2luZCcsIHtcbiAgICBsYWJlbCxcbiAgICBvcHRpb25zOiBbXG4gICAgICAnQScsXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIEMgaXMgbm90IGEgdmFsaWQgVGVzdEtpbmQgdmFsdWUuXG4gICAgICAnQycsXG4gICAgXSxcbiAgfSksXG5dKTtcblxuZGVmaW5lQmFja29mZmljZUZpbHRlcnM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGtpbmQgaXMgYW4gZW51bSBzdHJpbmcgZmllbGQsIG5vdCBhIG51bWJlciBmaWVsZC5cbiAgbnVtYmVyRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdraW5kJz4oJ2tpbmQnLCB7XG4gICAgbGFiZWwsXG4gIH0pLFxuXSk7XG5cbmRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBhdHRlbXB0IGlzIGEgbnVtYmVyIGZpZWxkLCBub3QgYSBkYXRldGltZSBzdHJpbmcgZmllbGQuXG4gIGRhdGV0aW1lRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdhdHRlbXB0Jz4oXG4gICAgJ2F0dGVtcHQnLFxuICAgIHtcbiAgICAgIGxhYmVsLFxuICAgIH0sXG4gICksXG5dKTtcblxuZGVmaW5lQmFja29mZmljZVNvcnRzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBVUERBVEVEX0FUX0RFU0MgaXMgbm90IGRlY2xhcmVkIGJ5IHRoZSBvcGVyYXRpb24gc29ydC5cbiAgeyBpZDogJ1VQREFURURfQVRfREVTQycsIGxhYmVsIH0sXG5dKTtcblxuZGVmaW5lQmFja29mZmljZUNvbm5lY3Rpb25MaXN0PFRlc3RMaXN0T3BlcmF0aW9uLCBUZXN0Q291bnRPcGVyYXRpb24+KCkoe1xuICB0aXRsZTogbGFiZWwsXG4gIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgZnJhZ21lbnQ6IHt9IGFzIG5ldmVyLFxuICBjb3VudDoge1xuICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICBidWlsZFZhcmlhYmxlczogKHsgd2hlcmUgfSkgPT4ge1xuICAgICAgcmV0dXJuIHsgd2hlcmUgfTtcbiAgICB9LFxuICAgIGdldENvdW50OiAoZGF0YSkgPT4ge1xuICAgICAgcmV0dXJuIChkYXRhIGFzIFRlc3RDb3VudE9wZXJhdGlvblsncmVzcG9uc2UnXSkucm93c0NvdW50O1xuICAgIH0sXG4gIH0sXG4gIGZpbHRlcnMsXG4gIHNvcnRzOiBkZWZpbmVCYWNrb2ZmaWNlU29ydHM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAgIHsgaWQ6ICdDUkVBVEVEX0FUX0FTQycsIGxhYmVsIH0sXG4gIF0pLFxuICBkZWZhdWx0U3RhdGU6IHtcbiAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG9yZ2FuaXphdGlvbklkIGlzIG5vdCBkZWNsYXJlZCBieSB0aGUgbGlzdCB3aGVyZSBpbnB1dC5cbiAgICB3aGVyZTogeyBvcmdhbml6YXRpb25JZDogJ29yZy0xJyB9LFxuICAgIHNvcnQ6ICdDUkVBVEVEX0FUX0FTQycsXG4gIH0sXG4gIGdldENvbm5lY3Rpb246ICgpID0+IHtcbiAgICByZXR1cm4geyBlZGdlczogW10gfTtcbiAgfSxcbiAgdG9Sb3c6IChyb3cpID0+IHtcbiAgICByZXR1cm4gcm93O1xuICB9LFxuICBnZXRSb3dJZDogKCkgPT4ge1xuICAgIHJldHVybiAncm93JztcbiAgfSxcbiAgY29sdW1uczogW10sXG59KTtcblxuZGVmaW5lQmFja29mZmljZVBpY2tlcjxUZXN0UGlja2VyT3BlcmF0aW9uPigpKHtcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICBmcmFnbWVudDoge30gYXMgbmV2ZXIsXG4gIGdldENvbm5lY3Rpb246ICgpID0+IHtcbiAgICByZXR1cm4geyBlZGdlczogW10gfTtcbiAgfSxcbiAgdG9Sb3c6ICgpID0+IHtcbiAgICByZXR1cm4geyBpZDogJ3JvdycsIHRpdGxlOiAnUm93JyB9O1xuICB9LFxuICBnZXRSb3dJZDogKHJvdykgPT4ge1xuICAgIHJldHVybiByb3cuaWQ7XG4gIH0sXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgcmV0dXJuZWQgd2hlcmUgc2hhcGUgaXMgbm90IGRlY2xhcmVkIGJ5IHRoZSBwaWNrZXIgb3BlcmF0aW9uLlxuICBidWlsZFF1ZXJ5VmFyaWFibGVzOiAoeyBzY29wZSB9KSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdoZXJlOiB7XG4gICAgICAgIHByb2plY3RJZDogKHNjb3BlIGFzIHsgcHJvamVjdElkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQpPy5wcm9qZWN0SWQsXG4gICAgICB9LFxuICAgICAgY291bnQ6IDIwLFxuICAgICAgY3Vyc29yOiBudWxsLFxuICAgIH07XG4gIH0sXG59KTtcbiJdfQ==
626
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3BlcmF0aW9uLWJvdW5kLWNvbmZpZy50ZXN0LWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZS10ZXN0cy9vcGVyYXRpb24tYm91bmQtY29uZmlnLnRlc3QtZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzVFLE9BQU8sRUFDTCx3QkFBd0IsRUFDeEIsOEJBQThCLEVBQzlCLCtCQUErQixFQUMvQixtQ0FBbUMsRUFDbkMsbUNBQW1DLEVBQ25DLG9DQUFvQyxFQUNwQyxxQ0FBcUMsRUFDckMsa0NBQWtDLEVBQ2xDLHVCQUF1QixFQUN2Qiw4QkFBOEIsRUFDOUIsc0JBQXNCLEVBQ3RCLDhCQUE4QixFQUM5QixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLGNBQWMsRUFDZCxVQUFVLEVBQ1YsWUFBWSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFxSDVFLE1BQU0sS0FBSyxHQUFjLENBQUMsQ0FBQyxFQUFFLEVBQUU7SUFDN0IsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxtQkFBbUIsR0FBRyxZQUFZLENBQUM7SUFDdkMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztDQUMxQixDQUFDLENBQUM7QUFFSCxNQUFNLGtCQUFrQixHQUFHLDhCQUE4QixFQUFxQixDQUFDO0lBQzdFLFFBQVEsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO0lBQ2xELFlBQVksRUFBRTtRQUNaLE1BQU0sRUFBRSxtQkFBbUI7UUFDM0IsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDakMsSUFBSSxJQUEwQixDQUFDO1lBQy9CLElBQUksT0FBTyxLQUFLLEdBQUcsSUFBSSxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUM7Z0JBQ3ZDLElBQUksR0FBRyxPQUFPLENBQUM7WUFDakIsQ0FBQztZQUNELE9BQU87Z0JBQ0wsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDaEMsSUFBSTthQUNMLENBQUM7UUFDSixDQUFDO1FBQ0QsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDbkIsT0FBTztnQkFDTCxTQUFTLEVBQUUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFNBQVMsSUFBSSxTQUFTLEVBQUU7Z0JBQ2hELElBQUksRUFBRSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLFNBQVMsRUFBRTthQUN2QyxDQUFDO1FBQ0osQ0FBQztLQUNGO0lBQ0QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUM7Q0FDL0MsQ0FBQyxDQUFDO0FBRUgsa0JBQWtCLENBQUMsTUFBTSxDQUFDO0lBQ3hCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtJQUM1QyxJQUFJLEVBQUUsZ0JBQWdCO0NBQ3ZCLENBQUMsQ0FBQztBQUVILGtCQUFrQixDQUFDLE1BQU0sQ0FBQztJQUV4QixLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFO0NBQzFCLENBQUMsQ0FBQztBQUVILGtCQUFrQixDQUFDLE1BQU0sQ0FBQztJQUV4QixPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUU7Q0FDdEMsQ0FBQyxDQUFDO0FBRUgsTUFBTSxpQkFBaUIsR0FBRyx3QkFBd0IsQ0FBQztJQUNqRCxFQUFFLEVBQUUsT0FBTztJQUNYLFlBQVksRUFBRSxPQUFPO0lBQ3JCLEtBQUs7SUFDTCxNQUFNLEVBQUU7UUFDTixJQUFJLEVBQUUsUUFBUTtRQUNkLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ2IsT0FBTyxVQUFVLEVBQUUsRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFDRCxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekIsT0FBTyxVQUFVLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztRQUNsQyxDQUFDO0tBQ0Y7SUFDRCxPQUFPLEVBQUUsSUFBSTtJQUNiLGNBQWMsRUFBRSxrQkFBa0I7SUFDbEMsTUFBTSxFQUFFO1FBQ04sWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELFVBQVUsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNyQixNQUFNLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7S0FDRjtDQUNGLENBQUMsQ0FBQztBQUVILE1BQU0sbUJBQW1CLEdBQWlDLGlCQUFpQixDQUFDO0FBQzVFLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLG1CQUFtQixDQUFDLEVBQUUsQ0FBQztBQU81RCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQW1CO0lBQzVDLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUU7SUFDakMsSUFBSSxFQUFFLGdCQUFnQjtDQUN2QixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQW1CO0lBRW5ELEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7Q0FDMUIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUd6QjtJQUNGLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7SUFDekIsSUFBSSxFQUFFLGlCQUFpQjtDQUN4QixDQUFDO0FBR0Ysd0JBQXdCLENBQUM7SUFDdkIsRUFBRSxFQUFFLE9BQU87SUFDWCxZQUFZLEVBQUUsT0FBTztJQUNyQixLQUFLO0lBQ0wsTUFBTSxFQUFFO1FBQ04sSUFBSSxFQUFFLFFBQVE7UUFDZCxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNiLE9BQU8sVUFBVSxFQUFFLEVBQUUsQ0FBQztRQUN4QixDQUFDO1FBQ0QsVUFBVSxFQUFFLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLE9BQU8sVUFBVSxFQUFFLElBQUksTUFBTSxFQUFFLENBQUM7UUFDbEMsQ0FBQztLQUNGO0lBQ0QsT0FBTyxFQUFFLElBQUk7SUFDYixNQUFNLEVBQUU7UUFDTixZQUFZLEVBQUUsS0FBSyxJQUFJLEVBQUU7WUFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFO1lBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDL0IsQ0FBQztLQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsd0JBQXdCLENBQUM7SUFDdkIsR0FBRyxpQkFBaUI7SUFFcEIsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFO0NBQzVDLENBQUMsQ0FBQztBQUVILGtDQUFrQyxFQUkvQixDQUFDO0lBQ0YsRUFBRSxFQUFFLHFCQUFxQjtJQUN6QixJQUFJLEVBQUUsY0FBYztJQUNwQixLQUFLO0lBQ0wsUUFBUSxFQUFFLEVBQVc7SUFDckIsTUFBTSxFQUFFLEVBQUU7SUFDVixZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDOUIsT0FBTztZQUNMLEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTthQUMxQjtTQUNGLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxFQUFFO1FBQ04sT0FBTyxFQUFFO1lBQ1AsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUU7Z0JBQ0osUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLFdBQVcsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO29CQUN4QixPQUFPLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztnQkFDOUQsQ0FBQzthQUNGO1NBQ0Y7S0FDRjtDQUNGLENBQUMsQ0FBQztBQUVILGtDQUFrQyxFQUkvQixDQUFDO0lBQ0YsRUFBRSxFQUFFLGtCQUFrQjtJQUN0QixJQUFJLEVBQUUsY0FBYztJQUNwQixLQUFLO0lBQ0wsUUFBUSxFQUFFLEVBQVc7SUFDckIsTUFBTSxFQUFFLEVBQUU7SUFFVixZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDOUIsT0FBTztZQUNMLEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7YUFDbEI7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILGtDQUFrQyxFQUkvQixDQUFDO0lBQ0YsRUFBRSxFQUFFLGtCQUFrQjtJQUN0QixJQUFJLEVBQUUsY0FBYztJQUNwQixLQUFLO0lBQ0wsUUFBUSxFQUFFLEVBQVc7SUFDckIsTUFBTSxFQUFFLEVBQUU7SUFFVixZQUFZLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDOUIsT0FBTztZQUNMLEtBQUssRUFBRTtnQkFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0JBQ2pCLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTthQUMxQjtTQUNGLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsOEJBQThCLEVBQXdDLENBQUM7SUFDckUsRUFBRSxFQUFFLFNBQVM7SUFDYixJQUFJLEVBQUUsVUFBVTtJQUNoQixLQUFLO0lBQ0wsUUFBUSxFQUFFLEVBQVc7SUFDckIsWUFBWSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDckIsT0FBTztZQUNMLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNaLENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsOEJBQThCLEVBQXdDLENBQUM7SUFDckUsRUFBRSxFQUFFLG9CQUFvQjtJQUN4QixJQUFJLEVBQUUsVUFBVTtJQUNoQixLQUFLO0lBQ0wsUUFBUSxFQUFFLEVBQVc7SUFFckIsWUFBWSxFQUFFLEdBQUcsRUFBRTtRQUNqQixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQXFDO0lBQzlELEVBQUUsRUFBRSxPQUFPO0lBQ1gsS0FBSztJQUNMLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFxQztJQUNyRSxFQUFFLEVBQUUsT0FBTztJQUVYLEtBQUssRUFBRSxPQUFPO0lBQ2QsS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFrQztJQUN0RCxFQUFFLEVBQUUsT0FBTztJQUNYLEtBQUs7SUFDTCxLQUFLLEVBQUUsT0FBTztDQUNmLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBa0M7SUFDN0QsRUFBRSxFQUFFLE9BQU87SUFFWCxLQUFLLEVBQUUsT0FBTztJQUNkLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sT0FBTyxHQUFHLHVCQUF1QixFQUFxQixDQUFDO0lBQzNELGNBQWMsQ0FDWixXQUFXLEVBQ1g7UUFDRSxNQUFNLEVBQUUsVUFBVTtRQUNsQixLQUFLO0tBQ04sQ0FDRjtJQUNELFVBQVUsQ0FBc0QsTUFBTSxFQUFFO1FBQ3RFLEtBQUs7UUFDTCxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO0tBQ3BCLENBQUM7SUFDRixZQUFZLENBQ1YsU0FBUyxFQUNUO1FBQ0UsS0FBSztLQUNOLENBQ0Y7SUFDRCxjQUFjLENBQ1osYUFBYSxFQUNiO1FBQ0UsS0FBSztRQUNMLElBQUksRUFBRSxNQUFNO0tBQ2IsQ0FDRjtDQUNGLENBQUMsQ0FBQztBQUVILHFCQUFxQixFQUFxQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRS9FLDhCQUE4QixFQUF5QyxDQUFDO0lBQ3RFLEtBQUssRUFBRSxLQUFLO0lBQ1osS0FBSyxFQUFFLEVBQVc7SUFDbEIsUUFBUSxFQUFFLEVBQVc7SUFDckIsS0FBSyxFQUFFO1FBQ0wsS0FBSyxFQUFFLEVBQVc7UUFDbEIsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuQixDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakIsT0FBUSxJQUF1QyxDQUFDLFNBQVMsQ0FBQztRQUM1RCxDQUFDO0tBQ0Y7SUFDRCxPQUFPO0lBQ1AsS0FBSyxFQUFFLHFCQUFxQixFQUFxQixDQUFDO1FBQ2hELEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRTtLQUNoQyxDQUFDO0lBQ0YsWUFBWSxFQUFFO1FBQ1osS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRTtRQUNqQyxJQUFJLEVBQUUsaUJBQWlCO0tBQ3hCO0lBQ0QsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUNsQixPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNiLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLEVBQUUsRUFBRTtDQUNaLENBQUMsQ0FBQztBQUVILHNCQUFzQixFQUF1QixDQUFDO0lBQzVDLEtBQUssRUFBRSxFQUFXO0lBQ2xCLFFBQVEsRUFBRSxFQUFXO0lBQ3JCLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNWLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDaEIsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUNqQyxPQUFPO1lBQ0wsS0FBSyxFQUFFO2dCQUNMLGNBQWMsRUFBRSxLQUFLLEVBQUUsY0FBYzthQUN0QztZQUNELEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILCtCQUErQixDQUFDO0lBQzlCLEtBQUssRUFBRSxLQUFLO0lBQ1osT0FBTyxFQUFFO1FBQ1Asb0NBQW9DLEVBQTBCLENBQUM7WUFDN0QsRUFBRSxFQUFFLE9BQU87WUFDWCxJQUFJLEVBQUUsYUFBYTtZQUNuQixLQUFLLEVBQUUsRUFBVztZQUNsQixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNoQixPQUFPO29CQUNMO3dCQUNFLEVBQUUsRUFBRSxPQUFPO3dCQUNYLEtBQUs7d0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTt3QkFDNUIsTUFBTSxFQUFFLG1DQUFtQyxFQUFxQixDQUFDOzRCQUMvRCxRQUFRLEVBQUUsT0FBTzs0QkFDakIsS0FBSyxFQUFFO2dDQUNMLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUU7Z0NBQ3BCLElBQUksRUFBRSxpQkFBaUI7NkJBQ3hCO3lCQUNGLENBQUM7cUJBQ0g7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDO1FBQ0YscUNBQXFDLENBQUM7WUFDcEMsRUFBRSxFQUFFLFFBQVE7WUFDWixJQUFJLEVBQUUsZUFBZTtZQUNyQixLQUFLLEVBQUUsS0FBSztTQUNiLENBQUM7UUFDRixvQ0FBb0MsRUFBZ0MsQ0FBQztZQUNuRSxFQUFFLEVBQUUsWUFBWTtZQUNoQixJQUFJLEVBQUUsYUFBYTtZQUNuQixLQUFLLEVBQUUsRUFBVztZQUNsQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7Z0JBQ3hCLE9BQU87b0JBQ0wsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO29CQUNqQixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ2IsUUFBUSxFQUFFLEdBQUc7aUJBQ2QsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDaEIsT0FBTztvQkFDTCxLQUFLO29CQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZTtvQkFDM0IsS0FBSyxFQUFFO3dCQUNMLEtBQUssRUFBRSxFQUFFO3dCQUNULFNBQVMsRUFBRSxJQUFJO3dCQUNmLElBQUksRUFBRSxTQUFTO3dCQUNmLEtBQUs7cUJBQ047b0JBQ0QsU0FBUyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO29CQUNwRCxNQUFNLEVBQUUsbUNBQW1DLEVBQXFCLENBQUM7d0JBQy9ELFFBQVEsRUFBRSxPQUFPO3dCQUNqQixLQUFLLEVBQUU7NEJBQ0wsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTs0QkFDcEIsSUFBSSxFQUFFLGlCQUFpQjt5QkFDeEI7cUJBQ0YsQ0FBQztpQkFDSCxDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUM7UUFDRixvQ0FBb0MsRUFBZ0MsQ0FBQztZQUNuRSxFQUFFLEVBQUUsY0FBYztZQUNsQixJQUFJLEVBQUUsVUFBVTtZQUNoQixLQUFLLEVBQUUsRUFBVztZQUNsQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLENBQUM7WUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDaEIsT0FBTztvQkFDTCxLQUFLO29CQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztvQkFDdkIsR0FBRyxFQUFFLENBQUM7b0JBQ04sU0FBUyxFQUFFLElBQUk7b0JBQ2YsSUFBSSxFQUFFLEdBQUc7b0JBQ1QsSUFBSSxFQUFFLFNBQVM7aUJBQ2hCLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQztRQUNGLG9DQUFvQyxFQUFnQyxDQUFDO1lBQ25FLEVBQUUsRUFBRSxjQUFjO1lBQ2xCLElBQUksRUFBRSxlQUFlO1lBQ3JCLEtBQUssRUFBRSxFQUFXO1lBQ2xCLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3RDLE9BQU87d0JBQ0wsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFO3dCQUNkLEtBQUssRUFBRSxHQUFHLEVBQUU7NEJBQ1YsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO3dCQUN2QixDQUFDO3dCQUNELEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSzt3QkFDcEIsSUFBSSxFQUFFLFFBQVE7cUJBQ2YsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7U0FDRixDQUFDO1FBQ0Ysb0NBQW9DLEVBQWdDLENBQUM7WUFDbkUsRUFBRSxFQUFFLFVBQVU7WUFDZCxJQUFJLEVBQUUsZUFBZTtZQUNyQixLQUFLLEVBQUUsRUFBVztZQUNsQixTQUFTLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7Z0JBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzlDLENBQUM7WUFDRCxTQUFTLEVBQUUsS0FBSztZQUNoQixLQUFLLEVBQUUsS0FBSztZQUNaLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNoQixPQUFPO29CQUNMLE1BQU0sRUFBRTt3QkFDTjs0QkFDRSxFQUFFLEVBQUUsWUFBWTs0QkFDaEIsS0FBSzs0QkFDTCxLQUFLLEVBQUUsU0FBUzs0QkFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7Z0NBQ2hDLE9BQU87b0NBQ0wsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNO29DQUNoQixDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUs7aUNBQ2hCLENBQUM7NEJBQ0osQ0FBQyxDQUFDO3lCQUNIO3FCQUNGO2lCQUNGLENBQUM7WUFDSixDQUFDO1NBQ0YsQ0FBQztRQUNGLG9DQUFvQyxFQUFnQyxDQUFDO1lBQ25FLEVBQUUsRUFBRSxZQUFZO1lBQ2hCLElBQUksRUFBRSxXQUFXO1lBQ2pCLEtBQUssRUFBRSxFQUFXO1lBQ2xCLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ1osT0FBTztvQkFDTDt3QkFDRSxFQUFFLEVBQUUsYUFBYTt3QkFDakIsS0FBSzt3QkFDTCxRQUFRLEVBQUUsUUFBUTt3QkFDbEIsS0FBSyxFQUFFLENBQUM7cUJBQ1Q7aUJBQ0YsQ0FBQztZQUNKLENBQUM7U0FDRixDQUFDO1FBQ0Ysb0NBQW9DLEVBQWdDLENBQUM7WUFDbkUsRUFBRSxFQUFFLFdBQVc7WUFDZixJQUFJLEVBQUUsaUJBQWlCO1lBQ3ZCLEtBQUssRUFBRSxFQUFXO1lBQ2xCLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ1osT0FBTztvQkFDTCxLQUFLO29CQUNMLEtBQUssRUFBRSxLQUFLO29CQUNaLElBQUksRUFBRSxNQUFNO29CQUNaLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDO2lCQUM5QyxDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUM7UUFDRixvQ0FBb0MsRUFBZ0MsQ0FBQztZQUNuRSxFQUFFLEVBQUUsUUFBUTtZQUNaLElBQUksRUFBRSxjQUFjO1lBQ3BCLEtBQUssRUFBRSxFQUFXO1lBQ2xCLFNBQVMsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTtnQkFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQ1osT0FBTztvQkFDTDt3QkFDRSxFQUFFLEVBQUUsTUFBTTt3QkFDVixLQUFLO3dCQUNMLEtBQUssRUFBRTs0QkFDTDtnQ0FDRSxFQUFFLEVBQUUsT0FBTztnQ0FDWCxLQUFLO2dDQUNMLEtBQUssRUFBRSxDQUFDO2dDQUNSLElBQUksRUFBRSxTQUFTOzZCQUNoQjt5QkFDRjtxQkFDRjtpQkFDRixDQUFDO1lBQ0osQ0FBQztTQUNGLENBQUM7UUFDRixxQ0FBcUMsQ0FBQztZQUNwQyxFQUFFLEVBQUUsU0FBUztZQUNiLElBQUksRUFBRSxjQUFjO1lBQ3BCLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxFQUFFLEVBQUUsT0FBTztvQkFDWCxLQUFLO29CQUNMLE1BQU0sRUFBRSxtQ0FBbUMsQ0FBQyxRQUFRLENBQUM7aUJBQ3REO2FBQ0Y7U0FDRixDQUFDO0tBQ0g7Q0FDRixDQUFDLENBQUM7QUFFSCxvQ0FBb0MsRUFBMEIsQ0FBQztJQUM3RCxFQUFFLEVBQUUsZUFBZTtJQUNuQixJQUFJLEVBQUUsYUFBYTtJQUNuQixLQUFLLEVBQUUsRUFBVztJQUNsQixTQUFTLEVBQUUsRUFBRTtJQUNiLE9BQU8sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2hCLE9BQU87WUFDTDtnQkFDRSxFQUFFLEVBQUUsT0FBTztnQkFDWCxLQUFLO2dCQUdMLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7YUFDaEM7U0FDRixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILG9DQUFvQyxFQUFnQyxDQUFDO0lBQ25FLEVBQUUsRUFBRSwwQkFBMEI7SUFDOUIsSUFBSSxFQUFFLGFBQWE7SUFDbkIsS0FBSyxFQUFFLEVBQVc7SUFFbEIsU0FBUyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1FBQ3hCLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNoQixPQUFPO1lBQ0wsS0FBSztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZTtTQUM1QixDQUFDO0lBQ0osQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILG1DQUFtQyxFQUFxQixDQUFDO0lBQ3ZELFFBQVEsRUFBRSxPQUFPO0lBQ2pCLEtBQUssRUFBRTtRQUVMLEtBQUssRUFBRSxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUU7S0FDbkM7Q0FDRixDQUFDLENBQUM7QUFFSCxtQ0FBbUMsRUFBcUIsQ0FBQztJQUN2RCxRQUFRLEVBQUUsT0FBTztJQUNqQixLQUFLLEVBQUU7UUFFTCxJQUFJLEVBQUUsaUJBQWlCO0tBQ3hCO0NBQ0YsQ0FBQyxDQUFDO0FBRUgsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQThCO0lBQy9ELEtBQUssRUFBRSxLQUFLO0lBRVosS0FBSyxFQUFFLEVBQVc7SUFDbEIsT0FBTyxFQUFFLEVBQUU7Q0FDWixDQUFDO0FBR0Ysb0NBQW9DLEVBQTBCLENBQUM7SUFDN0QsRUFBRSxFQUFFLGVBQWU7SUFDbkIsSUFBSSxFQUFFLGFBQWE7SUFDbkIsU0FBUyxFQUFFLEVBQUU7SUFDYixPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNoQixPQUFPO1lBQ0w7Z0JBQ0UsRUFBRSxFQUFFLE9BQU87Z0JBQ1gsS0FBSztnQkFDTCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVO2FBQzdCO1NBQ0YsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDLENBQUM7QUFFSCw4QkFBOEIsRUFBcUIsQ0FBQztJQUNsRCxNQUFNLEVBQUUsVUFBVTtJQUNsQixRQUFRLEVBQUUsV0FBVztDQUN0QixDQUFDLENBQUM7QUFFSCw4QkFBOEIsRUFBcUIsQ0FBQztJQUNsRCxNQUFNLEVBQUUsVUFBVTtJQUVsQixRQUFRLEVBQUUsZ0JBQWdCO0NBQzNCLENBQUMsQ0FBQztBQUVILHVCQUF1QixFQUFxQixDQUFDO0lBRTNDLGNBQWMsQ0FDWixjQUFjLEVBQ2Q7UUFDRSxNQUFNLEVBQUUsVUFBVTtRQUNsQixLQUFLO0tBQ04sQ0FDRjtDQUNGLENBQUMsQ0FBQztBQUVILHVCQUF1QixFQUFxQixDQUFDO0lBQzNDLFVBQVUsQ0FBc0QsTUFBTSxFQUFFO1FBQ3RFLEtBQUs7UUFDTCxPQUFPLEVBQUU7WUFDUCxHQUFHO1lBRUgsR0FBRztTQUNKO0tBQ0YsQ0FBQztDQUNILENBQUMsQ0FBQztBQUVILHVCQUF1QixFQUFxQixDQUFDO0lBRTNDLFlBQVksQ0FBc0QsTUFBTSxFQUFFO1FBQ3hFLEtBQUs7S0FDTixDQUFDO0NBQ0gsQ0FBQyxDQUFDO0FBRUgsdUJBQXVCLEVBQXFCLENBQUM7SUFFM0MsY0FBYyxDQUNaLFNBQVMsRUFDVDtRQUNFLEtBQUs7S0FDTixDQUNGO0NBQ0YsQ0FBQyxDQUFDO0FBRUgscUJBQXFCLEVBQXFCLENBQUM7SUFFekMsRUFBRSxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFO0NBQ2pDLENBQUMsQ0FBQztBQUVILDhCQUE4QixFQUF5QyxDQUFDO0lBQ3RFLEtBQUssRUFBRSxLQUFLO0lBQ1osS0FBSyxFQUFFLEVBQVc7SUFDbEIsUUFBUSxFQUFFLEVBQVc7SUFDckIsS0FBSyxFQUFFO1FBQ0wsS0FBSyxFQUFFLEVBQVc7UUFDbEIsY0FBYyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQzVCLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuQixDQUFDO1FBQ0QsUUFBUSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDakIsT0FBUSxJQUF1QyxDQUFDLFNBQVMsQ0FBQztRQUM1RCxDQUFDO0tBQ0Y7SUFDRCxPQUFPO0lBQ1AsS0FBSyxFQUFFLHFCQUFxQixFQUFxQixDQUFDO1FBQ2hELEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRTtLQUNoQyxDQUFDO0lBQ0YsWUFBWSxFQUFFO1FBRVosS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLE9BQU8sRUFBRTtRQUNsQyxJQUFJLEVBQUUsZ0JBQWdCO0tBQ3ZCO0lBQ0QsYUFBYSxFQUFFLEdBQUcsRUFBRTtRQUNsQixPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNiLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDYixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLEVBQUUsRUFBRTtDQUNaLENBQUMsQ0FBQztBQUVILHNCQUFzQixFQUF1QixDQUFDO0lBQzVDLEtBQUssRUFBRSxFQUFXO0lBQ2xCLFFBQVEsRUFBRSxFQUFXO0lBQ3JCLGFBQWEsRUFBRSxHQUFHLEVBQUU7UUFDbEIsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtRQUNWLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBQ0QsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDaEIsT0FBTyxHQUFHLENBQUMsRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxtQkFBbUIsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUNqQyxPQUFPO1lBQ0wsS0FBSyxFQUFFO2dCQUNMLFNBQVMsRUFBRyxLQUE0QyxFQUFFLFNBQVM7YUFDcEU7WUFDRCxLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxJQUFJO1NBQ2IsQ0FBQztJQUNKLENBQUM7Q0FDRixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE9wZXJhdGlvblR5cGUgfSBmcm9tICdyZWxheS1ydW50aW1lJztcbmltcG9ydCB7IGRlZmluZVNjaGVtYSwgc3RyaW5nRmllbGQgfSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnkvc2NoZW1hLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUxpc3REZXRhaWxNYW5pZmVzdCxcbiAgZGVmaW5lQmFja29mZmljZUNvbm5lY3Rpb25MaXN0LFxuICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkQ29uZmlnLFxuICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkSHJlZlRhcmdldCxcbiAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZExpc3RUYXJnZXQsXG4gIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldCxcbiAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFN0YXRpY1dpZGdldCxcbiAgZGVmaW5lQmFja29mZmljZUZvcm1NdXRhdGlvbkFjdGlvbixcbiAgZGVmaW5lQmFja29mZmljZUZpbHRlcnMsXG4gIGRlZmluZUJhY2tvZmZpY2VNdXRhdGlvbkFjdGlvbixcbiAgZGVmaW5lQmFja29mZmljZVBpY2tlcixcbiAgZGVmaW5lQmFja29mZmljZVJlbGF0aW9uRmlsdGVyLFxuICBkZWZpbmVCYWNrb2ZmaWNlU29ydHMsXG4gIGRhdGV0aW1lRmlsdGVyLFxuICBlbnRpdHlJZEZpbHRlcixcbiAgZW51bUZpbHRlcixcbiAgbnVtYmVyRmlsdGVyLFxufSBmcm9tICcuLi9idWlsZGVycy5qcyc7XG5pbXBvcnQgeyBkZWZpbmVCYWNrb2ZmaWNlTGlzdE5hdmlnYXRpb24gfSBmcm9tICcuLi9zdGF0ZS9saXN0TmF2aWdhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEJhY2tvZmZpY2VEYXNoYm9hcmRDb25maWcsXG4gIEJhY2tvZmZpY2VEZXRhaWxUaXRsZU1ldGFJdGVtLFxuICBCYWNrb2ZmaWNlRW50aXR5TWFuaWZlc3RJdGVtLFxuICBCYWNrb2ZmaWNlTWFuaWZlc3RMaXN0U3RhdGVJbnB1dCxcbiAgQmFja29mZmljZUxpc3RSZXNwb25zaXZlTWV0YUl0ZW0sXG4gIEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZSxcbiAgSTE4bkxhYmVsLFxufSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbnR5cGUgVGVzdFNvcnQgPSAnQ1JFQVRFRF9BVF9BU0MnIHwgJ0NSRUFURURfQVRfREVTQyc7XG50eXBlIFRlc3RLaW5kID0gJ0EnIHwgJ0InO1xudHlwZSBUZXN0Q3VycmVuY3kgPSAnRVVSJyB8ICdVU0QnO1xuXG5pbnRlcmZhY2UgVGVzdExpc3RPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiB7XG4gICAgd2hlcmU/OiB7XG4gICAgICBwcm9qZWN0SWQ/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAga2luZD86IFRlc3RLaW5kIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgICAgIGF0dGVtcHQ/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgICAgY3JlYXRlZEZyb20/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIH0gfCBudWxsO1xuICAgIHNvcnQ/OiBUZXN0U29ydCB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBjdXJzb3I/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9O1xuICByZXNwb25zZToge1xuICAgIHJlYWRvbmx5IHJvd3M6IHJlYWRvbmx5IHVua25vd25bXTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFRlc3RQaWNrZXJPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiB7XG4gICAgd2hlcmU/OiB7XG4gICAgICBvcmdhbml6YXRpb25JZD86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgfSB8IG51bGw7XG4gICAgY291bnQ6IG51bWJlcjtcbiAgICBjdXJzb3I/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9O1xuICByZXNwb25zZToge1xuICAgIHJlYWRvbmx5IHJvd3M6IHJlYWRvbmx5IHVua25vd25bXTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFRlc3RDb3VudE9wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvblR5cGUge1xuICB2YXJpYWJsZXM6IHtcbiAgICB3aGVyZT86IEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4gfCBudWxsO1xuICB9O1xuICByZXNwb25zZToge1xuICAgIHJlYWRvbmx5IHJvd3NDb3VudDogbnVtYmVyO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgVGVzdERhc2hib2FyZE9wZXJhdGlvbiBleHRlbmRzIE9wZXJhdGlvblR5cGUge1xuICB2YXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIG5ldmVyPjtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSB1c2Vyczoge1xuICAgICAgcmVhZG9ubHkgdG90YWxDb3VudDogbnVtYmVyO1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uIGV4dGVuZHMgT3BlcmF0aW9uVHlwZSB7XG4gIHZhcmlhYmxlczoge1xuICAgIGZyb206IHN0cmluZztcbiAgICB0bzogc3RyaW5nO1xuICAgIHNldmVyaXR5PzogVGVzdEtpbmQgfCBudWxsIHwgdW5kZWZpbmVkO1xuICB9O1xuICByZXNwb25zZToge1xuICAgIHJlYWRvbmx5IHRocm91Z2hwdXRDb3VudDogbnVtYmVyO1xuICAgIHJlYWRvbmx5IGZhaWx1cmVSYXRlOiBudW1iZXI7XG4gICAgcmVhZG9ubHkgdG9wRmFpbHVyZXM6IHJlYWRvbmx5IHtcbiAgICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gICAgICByZWFkb25seSBsYWJlbDogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgY291bnQ6IG51bWJlcjtcbiAgICB9W107XG4gICAgcmVhZG9ubHkgYnVja2V0czogcmVhZG9ubHkge1xuICAgICAgcmVhZG9ubHkgYnVja2V0OiBzdHJpbmc7XG4gICAgICByZWFkb25seSBjb3VudDogbnVtYmVyO1xuICAgIH1bXTtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIFRlc3RDcmVhdGVPcmdhbml6YXRpb25PcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiB7XG4gICAgaW5wdXQ6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGN1cnJlbmN5OiBUZXN0Q3VycmVuY3k7XG4gICAgfTtcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSBjcmVhdGVPcmdhbml6YXRpb246IHtcbiAgICAgIHJlYWRvbmx5IHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVhZG9ubHkgb3JnYW5pemF0aW9uOiB7XG4gICAgICAgIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gICAgICB9IHwgbnVsbDtcbiAgICB9O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgVGVzdEFyY2hpdmVPcGVyYXRpb24gZXh0ZW5kcyBPcGVyYXRpb25UeXBlIHtcbiAgdmFyaWFibGVzOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgfTtcbiAgcmVzcG9uc2U6IHtcbiAgICByZWFkb25seSBhcmNoaXZlOiB7XG4gICAgICByZWFkb25seSBzdGF0dXM6IHN0cmluZztcbiAgICB9O1xuICB9O1xufVxuXG50eXBlIFRlc3RDcmVhdGVPcmdhbml6YXRpb25Gb3JtVmFsdWVzID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIGN1cnJlbmN5OiBUZXN0Q3VycmVuY3k7XG59O1xuXG5jb25zdCBsYWJlbDogSTE4bkxhYmVsID0gKHQpID0+IHtcbiAgcmV0dXJuIHQoJ2NvbW1vbi5sYWJlbCcpO1xufTtcblxuY29uc3QgdGVzdExpc3RRdWVyeVNjaGVtYSA9IGRlZmluZVNjaGVtYSh7XG4gIHByb2plY3RJZDogc3RyaW5nRmllbGQoWydlcSddKSxcbiAga2luZDogc3RyaW5nRmllbGQoWydlcSddKSxcbn0pO1xuXG5jb25zdCB0ZXN0TGlzdE5hdmlnYXRpb24gPSBkZWZpbmVCYWNrb2ZmaWNlTGlzdE5hdmlnYXRpb248VGVzdExpc3RPcGVyYXRpb24+KCkoe1xuICBkZWZhdWx0czogeyB3aGVyZTogbnVsbCwgc29ydDogJ0NSRUFURURfQVRfREVTQycgfSxcbiAgZmlsdGVyU2NoZW1hOiB7XG4gICAgc2NoZW1hOiB0ZXN0TGlzdFF1ZXJ5U2NoZW1hLFxuICAgIHRvV2hlcmU6IChmaWx0ZXJzKSA9PiB7XG4gICAgICBjb25zdCByYXdLaW5kID0gZmlsdGVycy5raW5kPy5lcTtcbiAgICAgIGxldCBraW5kOiBUZXN0S2luZCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChyYXdLaW5kID09PSAnQScgfHwgcmF3S2luZCA9PT0gJ0InKSB7XG4gICAgICAgIGtpbmQgPSByYXdLaW5kO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJvamVjdElkOiBmaWx0ZXJzLnByb2plY3RJZD8uZXEsXG4gICAgICAgIGtpbmQsXG4gICAgICB9O1xuICAgIH0sXG4gICAgZnJvbVdoZXJlOiAod2hlcmUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHByb2plY3RJZDogeyBlcTogd2hlcmU/LnByb2plY3RJZCA/PyB1bmRlZmluZWQgfSxcbiAgICAgICAga2luZDogeyBlcTogd2hlcmU/LmtpbmQgPz8gdW5kZWZpbmVkIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH0sXG4gIHNvcnRJZHM6IFsnQ1JFQVRFRF9BVF9BU0MnLCAnQ1JFQVRFRF9BVF9ERVNDJ10sXG59KTtcblxudGVzdExpc3ROYXZpZ2F0aW9uLmVuY29kZSh7XG4gIHdoZXJlOiB7IHByb2plY3RJZDogJ3Byb2plY3QtMScsIGtpbmQ6ICdBJyB9LFxuICBzb3J0OiAnQ1JFQVRFRF9BVF9BU0MnLFxufSk7XG5cbnRlc3RMaXN0TmF2aWdhdGlvbi5lbmNvZGUoe1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGxpc3QgbmF2aWdhdGlvbiBzdGF0ZSBpcyBleGFjdCB0byB0aGUgb3BlcmF0aW9uIHdoZXJlIGlucHV0LlxuICB3aGVyZTogeyBzdGF0dXM6ICdPUEVOJyB9LFxufSk7XG5cbnRlc3RMaXN0TmF2aWdhdGlvbi5kZWNvZGUoe1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGxpc3QgbmF2aWdhdGlvbiBmaWx0ZXJzIGFyZSBleGFjdCB0byB0aGUgZGVzdGluYXRpb24gc2NoZW1hLlxuICBmaWx0ZXJzOiB7IG1pc3Npbmc6IHsgZXE6ICd2YWx1ZScgfSB9LFxufSk7XG5cbmNvbnN0IHR5cGVkTGlzdE1hbmlmZXN0ID0gY3JlYXRlTGlzdERldGFpbE1hbmlmZXN0KHtcbiAgaWQ6ICd0YXNrcycsXG4gIHJvdXRlU2VnbWVudDogJ3Rhc2tzJyxcbiAgbGFiZWwsXG4gIHJvdXRlczoge1xuICAgIGxpc3Q6ICcvdGFza3MnLFxuICAgIGRldGFpbDogKGlkKSA9PiB7XG4gICAgICByZXR1cm4gYC90YXNrcy8ke2lkfWA7XG4gICAgfSxcbiAgICBkZXRhaWxQYWdlOiAoaWQsIHBhZ2VJZCkgPT4ge1xuICAgICAgcmV0dXJuIGAvdGFza3MvJHtpZH0vJHtwYWdlSWR9YDtcbiAgICB9LFxuICB9LFxuICBoYXNMaXN0OiB0cnVlLFxuICBsaXN0TmF2aWdhdGlvbjogdGVzdExpc3ROYXZpZ2F0aW9uLFxuICBmYWNldHM6IHtcbiAgICBkZXRhaWxMYXlvdXQ6IGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHlwZSB0ZXN0Jyk7XG4gICAgfSxcbiAgICBkZXRhaWxQYWdlOiBhc3luYyAoKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgdGVzdCcpO1xuICAgIH0sXG4gIH0sXG59KTtcblxuY29uc3QgcnVudGltZUxpc3RNYW5pZmVzdDogQmFja29mZmljZUVudGl0eU1hbmlmZXN0SXRlbSA9IHR5cGVkTGlzdE1hbmlmZXN0O1xuZXhwb3J0IGNvbnN0IHJ1bnRpbWVMaXN0TWFuaWZlc3RJZCA9IHJ1bnRpbWVMaXN0TWFuaWZlc3QuaWQ7XG5cbnR5cGUgVHlwZWRMaXN0U3RhdGUgPSBCYWNrb2ZmaWNlTWFuaWZlc3RMaXN0U3RhdGVJbnB1dDxcbiAgeyB0YXNrczogdHlwZW9mIHR5cGVkTGlzdE1hbmlmZXN0IH0sXG4gICd0YXNrcydcbj47XG5cbmV4cG9ydCBjb25zdCB0eXBlZExpc3RTdGF0ZTogVHlwZWRMaXN0U3RhdGUgPSB7XG4gIHdoZXJlOiB7IHByb2plY3RJZDogJ3Byb2plY3QtMScgfSxcbiAgc29ydDogJ0NSRUFURURfQVRfQVNDJyxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkVHlwZWRMaXN0U3RhdGU6IFR5cGVkTGlzdFN0YXRlID0ge1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIG1hbmlmZXN0LWRlcml2ZWQgbGlzdCBzdGF0ZSByZWplY3RzIHVua25vd24gd2hlcmUgZmllbGRzLlxuICB3aGVyZTogeyBzdGF0dXM6ICdPUEVOJyB9LFxufTtcblxuZXhwb3J0IGNvbnN0IHJ1bnRpbWVMaXN0U3RhdGU6IEJhY2tvZmZpY2VNYW5pZmVzdExpc3RTdGF0ZUlucHV0PFxuICBSZWNvcmQ8c3RyaW5nLCBCYWNrb2ZmaWNlRW50aXR5TWFuaWZlc3RJdGVtPixcbiAgc3RyaW5nXG4+ID0ge1xuICB3aGVyZTogeyBzdGF0dXM6ICdPUEVOJyB9LFxuICBzb3J0OiAnQ1JFQVRFRF9BVF9ERVNDJyxcbn07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3IgbGlzdCBtYW5pZmVzdHMgcmVxdWlyZSBzeW5jaHJvbm91cyBsaXN0IG5hdmlnYXRpb24uXG5jcmVhdGVMaXN0RGV0YWlsTWFuaWZlc3Qoe1xuICBpZDogJ3Rhc2tzJyxcbiAgcm91dGVTZWdtZW50OiAndGFza3MnLFxuICBsYWJlbCxcbiAgcm91dGVzOiB7XG4gICAgbGlzdDogJy90YXNrcycsXG4gICAgZGV0YWlsOiAoaWQpID0+IHtcbiAgICAgIHJldHVybiBgL3Rhc2tzLyR7aWR9YDtcbiAgICB9LFxuICAgIGRldGFpbFBhZ2U6IChpZCwgcGFnZUlkKSA9PiB7XG4gICAgICByZXR1cm4gYC90YXNrcy8ke2lkfS8ke3BhZ2VJZH1gO1xuICAgIH0sXG4gIH0sXG4gIGhhc0xpc3Q6IHRydWUsXG4gIGZhY2V0czoge1xuICAgIGRldGFpbExheW91dDogYXN5bmMgKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eXBlIHRlc3QnKTtcbiAgICB9LFxuICAgIGRldGFpbFBhZ2U6IGFzeW5jICgpID0+IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndHlwZSB0ZXN0Jyk7XG4gICAgfSxcbiAgfSxcbn0pO1xuXG5jcmVhdGVMaXN0RGV0YWlsTWFuaWZlc3Qoe1xuICAuLi50eXBlZExpc3RNYW5pZmVzdCxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBsaXN0IG5hdmlnYXRpb24gbXVzdCBwcm92aWRlIHRoZSBjb21wbGV0ZSBzeW5jaHJvbm91cyBjb250cmFjdC5cbiAgbGlzdE5hdmlnYXRpb246IHsga2luZDogJ2xpc3QtbmF2aWdhdGlvbicgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRm9ybU11dGF0aW9uQWN0aW9uPFxuICBUZXN0Q3JlYXRlT3JnYW5pemF0aW9uT3BlcmF0aW9uLFxuICBudWxsLFxuICBUZXN0Q3JlYXRlT3JnYW5pemF0aW9uRm9ybVZhbHVlc1xuPigpKHtcbiAgaWQ6ICdjcmVhdGUtb3JnYW5pemF0aW9uJyxcbiAga2luZDogJ2Zvcm1NdXRhdGlvbicsXG4gIGxhYmVsLFxuICBtdXRhdGlvbjoge30gYXMgbmV2ZXIsXG4gIGZpZWxkczogW10sXG4gIGdldFZhcmlhYmxlczogKF9ub2RlLCB2YWx1ZXMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgbmFtZTogdmFsdWVzLm5hbWUsXG4gICAgICAgIGN1cnJlbmN5OiB2YWx1ZXMuY3VycmVuY3ksXG4gICAgICB9LFxuICAgIH07XG4gIH0sXG4gIHRvYXN0czoge1xuICAgIHN1Y2Nlc3M6IHtcbiAgICAgIHRpdGxlOiBsYWJlbCxcbiAgICAgIHZpZXc6IHtcbiAgICAgICAgZW50aXR5SWQ6ICdvcmdhbml6YXRpb25zJyxcbiAgICAgICAgZ2V0VGFyZ2V0SWQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZS5jcmVhdGVPcmdhbml6YXRpb24ub3JnYW5pemF0aW9uPy5pZCA/PyBudWxsO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9LFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VGb3JtTXV0YXRpb25BY3Rpb248XG4gIFRlc3RDcmVhdGVPcmdhbml6YXRpb25PcGVyYXRpb24sXG4gIG51bGwsXG4gIFRlc3RDcmVhdGVPcmdhbml6YXRpb25Gb3JtVmFsdWVzXG4+KCkoe1xuICBpZDogJ21pc3NpbmctY3VycmVuY3knLFxuICBraW5kOiAnZm9ybU11dGF0aW9uJyxcbiAgbGFiZWwsXG4gIG11dGF0aW9uOiB7fSBhcyBuZXZlcixcbiAgZmllbGRzOiBbXSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBjcmVhdGUgb3JnYW5pemF0aW9uIHZhcmlhYmxlcyBtdXN0IGluY2x1ZGUgcmVxdWlyZWQgaW5wdXQuY3VycmVuY3kuXG4gIGdldFZhcmlhYmxlczogKF9ub2RlLCB2YWx1ZXMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgbmFtZTogdmFsdWVzLm5hbWUsXG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZUZvcm1NdXRhdGlvbkFjdGlvbjxcbiAgVGVzdENyZWF0ZU9yZ2FuaXphdGlvbk9wZXJhdGlvbixcbiAgbnVsbCxcbiAgeyBuYW1lOiBzdHJpbmc7IGN1cnJlbmN5OiAnR0JQJyB9XG4+KCkoe1xuICBpZDogJ2ludmFsaWQtY3VycmVuY3knLFxuICBraW5kOiAnZm9ybU11dGF0aW9uJyxcbiAgbGFiZWwsXG4gIG11dGF0aW9uOiB7fSBhcyBuZXZlcixcbiAgZmllbGRzOiBbXSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBjcmVhdGUgb3JnYW5pemF0aW9uIGN1cnJlbmN5IG11c3QgYmUgb25lIG9mIHRoZSBSZWxheSBnZW5lcmF0ZWQgZW51bSB2YWx1ZXMuXG4gIGdldFZhcmlhYmxlczogKF9ub2RlLCB2YWx1ZXMpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaW5wdXQ6IHtcbiAgICAgICAgbmFtZTogdmFsdWVzLm5hbWUsXG4gICAgICAgIGN1cnJlbmN5OiB2YWx1ZXMuY3VycmVuY3ksXG4gICAgICB9LFxuICAgIH07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZU11dGF0aW9uQWN0aW9uPFRlc3RBcmNoaXZlT3BlcmF0aW9uLCB7IGlkOiBzdHJpbmcgfT4oKSh7XG4gIGlkOiAnYXJjaGl2ZScsXG4gIGtpbmQ6ICdtdXRhdGlvbicsXG4gIGxhYmVsLFxuICBtdXRhdGlvbjoge30gYXMgbmV2ZXIsXG4gIGdldFZhcmlhYmxlczogKG5vZGUpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IG5vZGUuaWQsXG4gICAgfTtcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlTXV0YXRpb25BY3Rpb248VGVzdEFyY2hpdmVPcGVyYXRpb24sIHsgaWQ6IHN0cmluZyB9PigpKHtcbiAgaWQ6ICdhcmNoaXZlLW1pc3NpbmctaWQnLFxuICBraW5kOiAnbXV0YXRpb24nLFxuICBsYWJlbCxcbiAgbXV0YXRpb246IHt9IGFzIG5ldmVyLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIG11dGF0aW9uIHZhcmlhYmxlcyBtdXN0IGluY2x1ZGUgcmVxdWlyZWQgaWQuXG4gIGdldFZhcmlhYmxlczogKCkgPT4ge1xuICAgIHJldHVybiB7fTtcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgcmVzcG9uc2l2ZU1ldGE6IEJhY2tvZmZpY2VMaXN0UmVzcG9uc2l2ZU1ldGFJdGVtID0ge1xuICBpZDogJ3N0YXRlJyxcbiAgbGFiZWwsXG4gIHZhbHVlOiAncmVhZHknLFxufTtcblxuZXhwb3J0IGNvbnN0IGludmFsaWRSZXNwb25zaXZlTWV0YTogQmFja29mZmljZUxpc3RSZXNwb25zaXZlTWV0YUl0ZW0gPSB7XG4gIGlkOiAnc3RhdGUnLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIHJlc3BvbnNpdmUgbWV0YSBsYWJlbHMgbXVzdCBiZSBpMThuIGxhYmVsIGZ1bmN0aW9ucywgbm90IHJhdyBzdHJpbmdzLlxuICBsYWJlbDogJ1N0YXRlJyxcbiAgdmFsdWU6ICdyZWFkeScsXG59O1xuXG5leHBvcnQgY29uc3QgdGl0bGVNZXRhOiBCYWNrb2ZmaWNlRGV0YWlsVGl0bGVNZXRhSXRlbSA9IHtcbiAgaWQ6ICdzdGF0ZScsXG4gIGxhYmVsLFxuICB2YWx1ZTogJ3JlYWR5Jyxcbn07XG5cbmV4cG9ydCBjb25zdCBpbnZhbGlkVGl0bGVNZXRhOiBCYWNrb2ZmaWNlRGV0YWlsVGl0bGVNZXRhSXRlbSA9IHtcbiAgaWQ6ICdzdGF0ZScsXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdGl0bGUgbWV0YSBsYWJlbHMgbXVzdCBiZSBpMThuIGxhYmVsIGZ1bmN0aW9ucywgbm90IHJhdyBzdHJpbmdzLlxuICBsYWJlbDogJ1N0YXRlJyxcbiAgdmFsdWU6ICdyZWFkeScsXG59O1xuXG5jb25zdCBmaWx0ZXJzID0gZGVmaW5lQmFja29mZmljZUZpbHRlcnM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICBlbnRpdHlJZEZpbHRlcjxCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+LCAncHJvamVjdElkJz4oXG4gICAgJ3Byb2plY3RJZCcsXG4gICAge1xuICAgICAgZW50aXR5OiAncHJvamVjdHMnLFxuICAgICAgbGFiZWwsXG4gICAgfSxcbiAgKSxcbiAgZW51bUZpbHRlcjxCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+LCAna2luZCc+KCdraW5kJywge1xuICAgIGxhYmVsLFxuICAgIG9wdGlvbnM6IFsnQScsICdCJ10sXG4gIH0pLFxuICBudW1iZXJGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2F0dGVtcHQnPihcbiAgICAnYXR0ZW1wdCcsXG4gICAge1xuICAgICAgbGFiZWwsXG4gICAgfSxcbiAgKSxcbiAgZGF0ZXRpbWVGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2NyZWF0ZWRGcm9tJz4oXG4gICAgJ2NyZWF0ZWRGcm9tJyxcbiAgICB7XG4gICAgICBsYWJlbCxcbiAgICAgIG1vZGU6ICdmcm9tJyxcbiAgICB9LFxuICApLFxuXSk7XG5cbmRlZmluZUJhY2tvZmZpY2VTb3J0czxUZXN0TGlzdE9wZXJhdGlvbj4oKShbeyBpZDogJ0NSRUFURURfQVRfREVTQycsIGxhYmVsIH1dKTtcblxuZGVmaW5lQmFja29mZmljZUNvbm5lY3Rpb25MaXN0PFRlc3RMaXN0T3BlcmF0aW9uLCBUZXN0Q291bnRPcGVyYXRpb24+KCkoe1xuICB0aXRsZTogbGFiZWwsXG4gIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgZnJhZ21lbnQ6IHt9IGFzIG5ldmVyLFxuICBjb3VudDoge1xuICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICBidWlsZFZhcmlhYmxlczogKHsgd2hlcmUgfSkgPT4ge1xuICAgICAgcmV0dXJuIHsgd2hlcmUgfTtcbiAgICB9LFxuICAgIGdldENvdW50OiAoZGF0YSkgPT4ge1xuICAgICAgcmV0dXJuIChkYXRhIGFzIFRlc3RDb3VudE9wZXJhdGlvblsncmVzcG9uc2UnXSkucm93c0NvdW50O1xuICAgIH0sXG4gIH0sXG4gIGZpbHRlcnMsXG4gIHNvcnRzOiBkZWZpbmVCYWNrb2ZmaWNlU29ydHM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAgIHsgaWQ6ICdDUkVBVEVEX0FUX0FTQycsIGxhYmVsIH0sXG4gIF0pLFxuICBkZWZhdWx0U3RhdGU6IHtcbiAgICB3aGVyZTogeyBwcm9qZWN0SWQ6ICdwcm9qZWN0LTEnIH0sXG4gICAgc29ydDogJ0NSRUFURURfQVRfREVTQycsXG4gIH0sXG4gIGdldENvbm5lY3Rpb246ICgpID0+IHtcbiAgICByZXR1cm4geyBlZGdlczogW10gfTtcbiAgfSxcbiAgdG9Sb3c6IChyb3cpID0+IHtcbiAgICByZXR1cm4gcm93O1xuICB9LFxuICBnZXRSb3dJZDogKCkgPT4ge1xuICAgIHJldHVybiAncm93JztcbiAgfSxcbiAgY29sdW1uczogW10sXG59KTtcblxuZGVmaW5lQmFja29mZmljZVBpY2tlcjxUZXN0UGlja2VyT3BlcmF0aW9uPigpKHtcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICBmcmFnbWVudDoge30gYXMgbmV2ZXIsXG4gIGdldENvbm5lY3Rpb246ICgpID0+IHtcbiAgICByZXR1cm4geyBlZGdlczogW10gfTtcbiAgfSxcbiAgdG9Sb3c6ICgpID0+IHtcbiAgICByZXR1cm4geyBpZDogJ3JvdycsIHRpdGxlOiAnUm93JyB9O1xuICB9LFxuICBnZXRSb3dJZDogKHJvdykgPT4ge1xuICAgIHJldHVybiByb3cuaWQ7XG4gIH0sXG4gIGJ1aWxkUXVlcnlWYXJpYWJsZXM6ICh7IHNjb3BlIH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgb3JnYW5pemF0aW9uSWQ6IHNjb3BlPy5vcmdhbml6YXRpb25JZCxcbiAgICAgIH0sXG4gICAgICBjb3VudDogMjAsXG4gICAgICBjdXJzb3I6IG51bGwsXG4gICAgfTtcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkQ29uZmlnKHtcbiAgdGl0bGU6IGxhYmVsLFxuICB3aWRnZXRzOiBbXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRPcGVyYXRpb24+KCkoe1xuICAgICAgaWQ6ICd1c2VycycsXG4gICAgICBraW5kOiAnbWV0cmljR3JvdXAnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiB7fSxcbiAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICd1c2VycycsXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLnVzZXJzLnRvdGFsQ291bnQsXG4gICAgICAgICAgICB0YXJnZXQ6IGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRMaXN0VGFyZ2V0PFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgICAgICAgICAgICAgZW50aXR5SWQ6ICd0YXNrcycsXG4gICAgICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgd2hlcmU6IHsga2luZDogJ0EnIH0sXG4gICAgICAgICAgICAgICAgc29ydDogJ0NSRUFURURfQVRfREVTQycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfSxcbiAgICB9KSxcbiAgICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkU3RhdGljV2lkZ2V0KHtcbiAgICAgIGlkOiAnd2luZG93JyxcbiAgICAgIGtpbmQ6ICd3aW5kb3dDb250cm9sJyxcbiAgICAgIHRpdGxlOiBsYWJlbCxcbiAgICB9KSxcbiAgICBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZFdpbmRvd09wZXJhdGlvbj4oKSh7XG4gICAgICBpZDogJ3Rocm91Z2hwdXQnLFxuICAgICAga2luZDogJ3RyZW5kTWV0cmljJyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBmcm9tOiB3aW5kb3cuZnJvbSxcbiAgICAgICAgICB0bzogd2luZG93LnRvLFxuICAgICAgICAgIHNldmVyaXR5OiAnQScsXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB2YWx1ZTogZGF0YS50aHJvdWdocHV0Q291bnQsXG4gICAgICAgICAgZGVsdGE6IHtcbiAgICAgICAgICAgIHZhbHVlOiAxMixcbiAgICAgICAgICAgIGRpcmVjdGlvbjogJ3VwJyxcbiAgICAgICAgICAgIHRvbmU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3BhcmtsaW5lOiBbeyB4OiAnMjAyNi0wMS0wMVQwMDowMDowMC4wMDBaJywgeTogMSB9XSxcbiAgICAgICAgICB0YXJnZXQ6IGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRMaXN0VGFyZ2V0PFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgICAgICAgICAgIGVudGl0eUlkOiAndGFza3MnLFxuICAgICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICAgd2hlcmU6IHsga2luZDogJ0EnIH0sXG4gICAgICAgICAgICAgIHNvcnQ6ICdDUkVBVEVEX0FUX0RFU0MnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24+KCkoe1xuICAgICAgaWQ6ICdmYWlsdXJlLXJhdGUnLFxuICAgICAga2luZDogJ3NsYUdhdWdlJyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZnJvbTogd2luZG93LmZyb20sIHRvOiB3aW5kb3cudG8gfTtcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHZhbHVlOiBkYXRhLmZhaWx1cmVSYXRlLFxuICAgICAgICAgIG1heDogMSxcbiAgICAgICAgICB0aHJlc2hvbGQ6IDAuMDUsXG4gICAgICAgICAgdW5pdDogJyUnLFxuICAgICAgICAgIHRvbmU6ICd3YXJuaW5nJyxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24+KCkoe1xuICAgICAgaWQ6ICd0b3AtZmFpbHVyZXMnLFxuICAgICAga2luZDogJ2JyZWFrZG93bkxpc3QnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiAoeyB3aW5kb3cgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBmcm9tOiB3aW5kb3cuZnJvbSwgdG86IHdpbmRvdy50byB9O1xuICAgICAgfSxcbiAgICAgIHJlc29sdmU6IChkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBkYXRhLnRvcEZhaWx1cmVzLm1hcCgoZmFpbHVyZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogZmFpbHVyZS5pZCxcbiAgICAgICAgICAgIGxhYmVsOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlLmxhYmVsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHZhbHVlOiBmYWlsdXJlLmNvdW50LFxuICAgICAgICAgICAgdG9uZTogJ2RhbmdlcicsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAndGltZWxpbmUnLFxuICAgICAga2luZDogJ3RpbWVsaW5lQ2hhcnQnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiAoeyB3aW5kb3cgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBmcm9tOiB3aW5kb3cuZnJvbSwgdG86IHdpbmRvdy50byB9O1xuICAgICAgfSxcbiAgICAgIGFyaWFMYWJlbDogbGFiZWwsXG4gICAgICBjaGFydDogJ2JhcicsXG4gICAgICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlcmllczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZDogJ3Rocm91Z2hwdXQnLFxuICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgY29sb3I6ICcjMjU2M2ViJyxcbiAgICAgICAgICAgICAgZGF0YTogZGF0YS5idWNrZXRzLm1hcCgoYnVja2V0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIHg6IGJ1Y2tldC5idWNrZXQsXG4gICAgICAgICAgICAgICAgICB5OiBidWNrZXQuY291bnQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAncmlzay1xdWV1ZScsXG4gICAgICBraW5kOiAncmlza1F1ZXVlJyxcbiAgICAgIHF1ZXJ5OiB7fSBhcyBuZXZlcixcbiAgICAgIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICAgICAgcmV0dXJuIHsgZnJvbTogd2luZG93LmZyb20sIHRvOiB3aW5kb3cudG8gfTtcbiAgICAgIH0sXG4gICAgICByZXNvbHZlOiAoKSA9PiB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdkZWFkLW91dGJveCcsXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIHNldmVyaXR5OiAnZGFuZ2VyJyxcbiAgICAgICAgICAgIHZhbHVlOiA0LFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkV2luZG93T3BlcmF0aW9uPigpKHtcbiAgICAgIGlkOiAnc3BvdGxpZ2h0JyxcbiAgICAgIGtpbmQ6ICdlbnRpdHlTcG90bGlnaHQnLFxuICAgICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgICAgdmFyaWFibGVzOiAoeyB3aW5kb3cgfSkgPT4ge1xuICAgICAgICByZXR1cm4geyBmcm9tOiB3aW5kb3cuZnJvbSwgdG86IHdpbmRvdy50byB9O1xuICAgICAgfSxcbiAgICAgIHJlc29sdmU6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICB0aXRsZTogbGFiZWwsXG4gICAgICAgICAgdG9uZTogJ2luZm8nLFxuICAgICAgICAgIG1ldGE6IFt7IGlkOiAnYWdlJywgbGFiZWwsIHZhbHVlOiAnNDUgbWluJyB9XSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgfSksXG4gICAgZGVmaW5lQmFja29mZmljZURhc2hib2FyZFF1ZXJ5V2lkZ2V0PFRlc3REYXNoYm9hcmRXaW5kb3dPcGVyYXRpb24+KCkoe1xuICAgICAgaWQ6ICdoZWFsdGgnLFxuICAgICAga2luZDogJ2hlYWx0aE1hdHJpeCcsXG4gICAgICBxdWVyeToge30gYXMgbmV2ZXIsXG4gICAgICB2YXJpYWJsZXM6ICh7IHdpbmRvdyB9KSA9PiB7XG4gICAgICAgIHJldHVybiB7IGZyb206IHdpbmRvdy5mcm9tLCB0bzogd2luZG93LnRvIH07XG4gICAgICB9LFxuICAgICAgcmVzb2x2ZTogKCkgPT4ge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAnd29yaycsXG4gICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgIGNlbGxzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJ3Rhc2tzJyxcbiAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogMixcbiAgICAgICAgICAgICAgICB0b25lOiAnd2FybmluZycsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9LFxuICAgIH0pLFxuICAgIGRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRTdGF0aWNXaWRnZXQoe1xuICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgIGtpbmQ6ICdxdWlja0FjdGlvbnMnLFxuICAgICAgYWN0aW9uczogW1xuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICd1c2VycycsXG4gICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgdGFyZ2V0OiBkZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkSHJlZlRhcmdldCgnL3VzZXJzJyksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pLFxuICBdLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkT3BlcmF0aW9uPigpKHtcbiAgaWQ6ICdpbnZhbGlkLXVzZXJzJyxcbiAga2luZDogJ21ldHJpY0dyb3VwJyxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICB2YXJpYWJsZXM6IHt9LFxuICByZXNvbHZlOiAoZGF0YSkgPT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7XG4gICAgICAgIGlkOiAndXNlcnMnLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBkYXNoYm9hcmQgd2lkZ2V0IHJlc29sdmUgZGF0YSBpcyB0eXBlZCBmcm9tIHRoZSBvcGVyYXRpb24gcmVzcG9uc2UuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgdmFsdWU6IGRhdGEucHJvamVjdHMudG90YWxDb3VudCxcbiAgICAgIH0sXG4gICAgXTtcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkUXVlcnlXaWRnZXQ8VGVzdERhc2hib2FyZFdpbmRvd09wZXJhdGlvbj4oKSh7XG4gIGlkOiAnaW52YWxpZC13aW5kb3ctdmFyaWFibGVzJyxcbiAga2luZDogJ3RyZW5kTWV0cmljJyxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGRhc2hib2FyZCB3aWRnZXQgdmFyaWFibGVzIG11c3QgbWF0Y2ggdGhlIG9wZXJhdGlvbiB2YXJpYWJsZXMuXG4gIHZhcmlhYmxlczogKHsgd2luZG93IH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogd2luZG93LmZyb20sXG4gICAgfTtcbiAgfSxcbiAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWwsXG4gICAgICB2YWx1ZTogZGF0YS50aHJvdWdocHV0Q291bnQsXG4gICAgfTtcbiAgfSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRGFzaGJvYXJkTGlzdFRhcmdldDxUZXN0TGlzdE9wZXJhdGlvbj4oKSh7XG4gIGVudGl0eUlkOiAndGFza3MnLFxuICBzdGF0ZToge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgZGFzaGJvYXJkIGxpc3QgdGFyZ2V0IHdoZXJlIG11c3QgbWF0Y2ggdGhlIHRhcmdldCBsaXN0IG9wZXJhdGlvbiB3aGVyZSBpbnB1dC5cbiAgICB3aGVyZTogeyBvcmdhbml6YXRpb25JZDogJ29yZy0xJyB9LFxuICB9LFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRMaXN0VGFyZ2V0PFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgZW50aXR5SWQ6ICd0YXNrcycsXG4gIHN0YXRlOiB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciBkYXNoYm9hcmQgbGlzdCB0YXJnZXQgc29ydCBtdXN0IG1hdGNoIHRoZSB0YXJnZXQgbGlzdCBvcGVyYXRpb24gc29ydCBpbnB1dC5cbiAgICBzb3J0OiAnVVBEQVRFRF9BVF9ERVNDJyxcbiAgfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgaW52YWxpZERhc2hib2FyZENvbmZpZzogQmFja29mZmljZURhc2hib2FyZENvbmZpZyA9IHtcbiAgdGl0bGU6IGxhYmVsLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIGRhc2hib2FyZCBjb25maWdzIGRvIG5vdCBzdXBwb3J0IGdsb2JhbCBxdWVyaWVzLlxuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIHdpZGdldHM6IFtdLFxufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvciBkYXRhLWRyaXZlbiBkYXNoYm9hcmQgd2lkZ2V0cyBtdXN0IGRlY2xhcmUgYSBxdWVyeS5cbmRlZmluZUJhY2tvZmZpY2VEYXNoYm9hcmRRdWVyeVdpZGdldDxUZXN0RGFzaGJvYXJkT3BlcmF0aW9uPigpKHtcbiAgaWQ6ICdtaXNzaW5nLXF1ZXJ5JyxcbiAga2luZDogJ21ldHJpY0dyb3VwJyxcbiAgdmFyaWFibGVzOiB7fSxcbiAgcmVzb2x2ZTogKGRhdGEpID0+IHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBpZDogJ3VzZXJzJyxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHZhbHVlOiBkYXRhLnVzZXJzLnRvdGFsQ291bnQsXG4gICAgICB9LFxuICAgIF07XG4gIH0sXG59KTtcblxuZGVmaW5lQmFja29mZmljZVJlbGF0aW9uRmlsdGVyPFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgdGFyZ2V0OiAncHJvamVjdHMnLFxuICB3aGVyZUtleTogJ3Byb2plY3RJZCcsXG59KTtcblxuZGVmaW5lQmFja29mZmljZVJlbGF0aW9uRmlsdGVyPFRlc3RMaXN0T3BlcmF0aW9uPigpKHtcbiAgdGFyZ2V0OiAncHJvamVjdHMnLFxuICAvLyBAdHMtZXhwZWN0LWVycm9yIG9yZ2FuaXphdGlvbklkIGlzIG5vdCBkZWNsYXJlZCBieSB0aGUgdGFyZ2V0IGxpc3Qgd2hlcmUgaW5wdXQuXG4gIHdoZXJlS2V5OiAnb3JnYW5pemF0aW9uSWQnLFxufSk7XG5cbmRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBtaXNzaW5nRmllbGQgaXMgbm90IGRlY2xhcmVkIGJ5IHRoZSBvcGVyYXRpb24gd2hlcmUgaW5wdXQuXG4gIGVudGl0eUlkRmlsdGVyPEJhY2tvZmZpY2VPcGVyYXRpb25XaGVyZTxUZXN0TGlzdE9wZXJhdGlvbj4sICdtaXNzaW5nRmllbGQnPihcbiAgICAnbWlzc2luZ0ZpZWxkJyxcbiAgICB7XG4gICAgICBlbnRpdHk6ICdwcm9qZWN0cycsXG4gICAgICBsYWJlbCxcbiAgICB9LFxuICApLFxuXSk7XG5cbmRlZmluZUJhY2tvZmZpY2VGaWx0ZXJzPFRlc3RMaXN0T3BlcmF0aW9uPigpKFtcbiAgZW51bUZpbHRlcjxCYWNrb2ZmaWNlT3BlcmF0aW9uV2hlcmU8VGVzdExpc3RPcGVyYXRpb24+LCAna2luZCc+KCdraW5kJywge1xuICAgIGxhYmVsLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgICdBJyxcbiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQyBpcyBub3QgYSB2YWxpZCBUZXN0S2luZCB2YWx1ZS5cbiAgICAgICdDJyxcbiAgICBdLFxuICB9KSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlRmlsdGVyczxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gIC8vIEB0cy1leHBlY3QtZXJyb3Iga2luZCBpcyBhbiBlbnVtIHN0cmluZyBmaWVsZCwgbm90IGEgbnVtYmVyIGZpZWxkLlxuICBudW1iZXJGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2tpbmQnPigna2luZCcsIHtcbiAgICBsYWJlbCxcbiAgfSksXG5dKTtcblxuZGVmaW5lQmFja29mZmljZUZpbHRlcnM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIGF0dGVtcHQgaXMgYSBudW1iZXIgZmllbGQsIG5vdCBhIGRhdGV0aW1lIHN0cmluZyBmaWVsZC5cbiAgZGF0ZXRpbWVGaWx0ZXI8QmFja29mZmljZU9wZXJhdGlvbldoZXJlPFRlc3RMaXN0T3BlcmF0aW9uPiwgJ2F0dGVtcHQnPihcbiAgICAnYXR0ZW1wdCcsXG4gICAge1xuICAgICAgbGFiZWwsXG4gICAgfSxcbiAgKSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlU29ydHM8VGVzdExpc3RPcGVyYXRpb24+KCkoW1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIFVQREFURURfQVRfREVTQyBpcyBub3QgZGVjbGFyZWQgYnkgdGhlIG9wZXJhdGlvbiBzb3J0LlxuICB7IGlkOiAnVVBEQVRFRF9BVF9ERVNDJywgbGFiZWwgfSxcbl0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlQ29ubmVjdGlvbkxpc3Q8VGVzdExpc3RPcGVyYXRpb24sIFRlc3RDb3VudE9wZXJhdGlvbj4oKSh7XG4gIHRpdGxlOiBsYWJlbCxcbiAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICBmcmFnbWVudDoge30gYXMgbmV2ZXIsXG4gIGNvdW50OiB7XG4gICAgcXVlcnk6IHt9IGFzIG5ldmVyLFxuICAgIGJ1aWxkVmFyaWFibGVzOiAoeyB3aGVyZSB9KSA9PiB7XG4gICAgICByZXR1cm4geyB3aGVyZSB9O1xuICAgIH0sXG4gICAgZ2V0Q291bnQ6IChkYXRhKSA9PiB7XG4gICAgICByZXR1cm4gKGRhdGEgYXMgVGVzdENvdW50T3BlcmF0aW9uWydyZXNwb25zZSddKS5yb3dzQ291bnQ7XG4gICAgfSxcbiAgfSxcbiAgZmlsdGVycyxcbiAgc29ydHM6IGRlZmluZUJhY2tvZmZpY2VTb3J0czxUZXN0TGlzdE9wZXJhdGlvbj4oKShbXG4gICAgeyBpZDogJ0NSRUFURURfQVRfQVNDJywgbGFiZWwgfSxcbiAgXSksXG4gIGRlZmF1bHRTdGF0ZToge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igb3JnYW5pemF0aW9uSWQgaXMgbm90IGRlY2xhcmVkIGJ5IHRoZSBsaXN0IHdoZXJlIGlucHV0LlxuICAgIHdoZXJlOiB7IG9yZ2FuaXphdGlvbklkOiAnb3JnLTEnIH0sXG4gICAgc29ydDogJ0NSRUFURURfQVRfQVNDJyxcbiAgfSxcbiAgZ2V0Q29ubmVjdGlvbjogKCkgPT4ge1xuICAgIHJldHVybiB7IGVkZ2VzOiBbXSB9O1xuICB9LFxuICB0b1JvdzogKHJvdykgPT4ge1xuICAgIHJldHVybiByb3c7XG4gIH0sXG4gIGdldFJvd0lkOiAoKSA9PiB7XG4gICAgcmV0dXJuICdyb3cnO1xuICB9LFxuICBjb2x1bW5zOiBbXSxcbn0pO1xuXG5kZWZpbmVCYWNrb2ZmaWNlUGlja2VyPFRlc3RQaWNrZXJPcGVyYXRpb24+KCkoe1xuICBxdWVyeToge30gYXMgbmV2ZXIsXG4gIGZyYWdtZW50OiB7fSBhcyBuZXZlcixcbiAgZ2V0Q29ubmVjdGlvbjogKCkgPT4ge1xuICAgIHJldHVybiB7IGVkZ2VzOiBbXSB9O1xuICB9LFxuICB0b1JvdzogKCkgPT4ge1xuICAgIHJldHVybiB7IGlkOiAncm93JywgdGl0bGU6ICdSb3cnIH07XG4gIH0sXG4gIGdldFJvd0lkOiAocm93KSA9PiB7XG4gICAgcmV0dXJuIHJvdy5pZDtcbiAgfSxcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciByZXR1cm5lZCB3aGVyZSBzaGFwZSBpcyBub3QgZGVjbGFyZWQgYnkgdGhlIHBpY2tlciBvcGVyYXRpb24uXG4gIGJ1aWxkUXVlcnlWYXJpYWJsZXM6ICh7IHNjb3BlIH0pID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgd2hlcmU6IHtcbiAgICAgICAgcHJvamVjdElkOiAoc2NvcGUgYXMgeyBwcm9qZWN0SWQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCk/LnByb2plY3RJZCxcbiAgICAgIH0sXG4gICAgICBjb3VudDogMjAsXG4gICAgICBjdXJzb3I6IG51bGwsXG4gICAgfTtcbiAgfSxcbn0pO1xuIl19
@@ -2,6 +2,8 @@ import type { ReactNode } from 'react';
2
2
  import type { TFunction } from 'i18next';
3
3
  import type { PreloadedQuery } from 'react-relay';
4
4
  import type { GraphQLTaggedNode, OperationType, RecordSourceSelectorProxy } from 'relay-runtime';
5
+ import type { InferFilters, Schema } from '@plumile/filter-query/types.js';
6
+ import type { BackofficeFilterSchema } from './filters/schema.js';
5
7
  import type { BACKOFFICE_ENTITY_FACET_KINDS } from './constants.js';
6
8
  export type I18nLabel = (t: TFunction) => string;
7
9
  type BivariantCallback<Fn> = Fn extends (...args: infer A) => infer R ? {
@@ -140,6 +142,31 @@ export type BackofficeListState<Where, Sort extends string> = {
140
142
  where: Where | null;
141
143
  sort: Sort | null;
142
144
  };
145
+ export type BackofficeListNavigationQuery<Sort extends string> = {
146
+ sort?: Sort;
147
+ };
148
+ export type BackofficeListNavigationParams<S extends Schema, Sort extends string> = {
149
+ filters?: InferFilters<S>;
150
+ query?: BackofficeListNavigationQuery<Sort>;
151
+ };
152
+ export type BackofficeListNavigationStateInput<Where, Sort extends string> = Partial<BackofficeListState<Where, Sort>>;
153
+ export type BackofficeListNavigationEncoded<S extends Schema, Sort extends string> = {
154
+ filters: InferFilters<S>;
155
+ query: BackofficeListNavigationQuery<Sort>;
156
+ };
157
+ export type BackofficeListNavigation<Where extends Record<string, unknown>, Sort extends string, S extends Schema = Schema> = {
158
+ readonly kind: 'list-navigation';
159
+ querySchema: S;
160
+ defaults: BackofficeListState<Where, Sort>;
161
+ sortIds: readonly Sort[];
162
+ encode(state: BackofficeListNavigationStateInput<Where, Sort>): BackofficeListNavigationEncoded<S, Sort>;
163
+ decode(params: BackofficeListNavigationParams<S, Sort>): BackofficeListState<Where, Sort>;
164
+ };
165
+ export type BackofficeListNavigationOptions<Where extends Record<string, unknown>, Sort extends string, S extends Schema> = {
166
+ defaults: BackofficeListState<Where, Sort>;
167
+ filterSchema: BackofficeFilterSchema<Where, S>;
168
+ sortIds: readonly Sort[];
169
+ };
143
170
  export type BackofficeListVariables<Where, Sort extends string> = {
144
171
  where: Where | null;
145
172
  sort: Sort | null;
@@ -276,10 +303,6 @@ export type BackofficeDashboardTablePreviewResult = {
276
303
  export type BackofficeDashboardListTargetState<Where extends Record<string, unknown> = Record<string, unknown>, Sort extends string = string> = {
277
304
  where?: Where | null;
278
305
  sort?: Sort | null;
279
- filters?: readonly {
280
- id: string;
281
- value: unknown;
282
- }[];
283
306
  };
284
307
  export type BackofficeDashboardHrefTarget = {
285
308
  kind: 'href';
@@ -1292,37 +1315,56 @@ export type BackofficeToolFacetLoaderMap = {
1292
1315
  tool: BackofficeToolFacetLoader;
1293
1316
  };
1294
1317
  export type BackofficeEntityFacetLoaderMap = BackofficeListDetailFacetLoaderMap | BackofficeToolFacetLoaderMap;
1295
- export type BackofficeEntityManifestItem = {
1318
+ type BackofficeEntityManifestBase = {
1296
1319
  id: string;
1297
- kind: BackofficeEntityManifestKind;
1298
1320
  routeSegment: string;
1299
1321
  groupId?: string;
1300
1322
  label: I18nLabel;
1301
1323
  detailLabel?: I18nLabel;
1302
1324
  routes: BackofficeEntityRouteManifest;
1303
- hasList: boolean;
1304
1325
  detailPages?: readonly BackofficeDetailPageManifestItem[];
1305
1326
  defaultDetailPageId?: string;
1306
- facets: BackofficeEntityFacetLoaderMap;
1307
1327
  };
1328
+ export type BackofficeListDetailManifestItem<Where extends Record<string, unknown> = Record<string, unknown>, Sort extends string = string, S extends Schema = Schema> = BackofficeEntityManifestBase & {
1329
+ kind: 'list-detail';
1330
+ facets: BackofficeListDetailFacetLoaderMap;
1331
+ } & ({
1332
+ hasList: true;
1333
+ listNavigation: BackofficeListNavigation<Where, Sort, S>;
1334
+ } | {
1335
+ hasList: false;
1336
+ listNavigation?: never;
1337
+ });
1338
+ export type BackofficeToolManifestItem = BackofficeEntityManifestBase & {
1339
+ kind: 'tool';
1340
+ hasList: false;
1341
+ listNavigation?: never;
1342
+ facets: BackofficeToolFacetLoaderMap;
1343
+ };
1344
+ export type BackofficeEntityManifestItem<Where extends Record<string, unknown> = Record<string, unknown>, Sort extends string = string, S extends Schema = Schema> = BackofficeListDetailManifestItem<Where, Sort, S> | BackofficeToolManifestItem;
1308
1345
  export type BackofficeEntityManifestMap = Record<string, BackofficeEntityManifestItem>;
1309
1346
  export type BackofficeManifestEntityId<TManifest> = Extract<keyof TManifest, string>;
1310
- export type BackofficeManifestListEntityId<TManifest> = {
1347
+ export type BackofficeManifestListEntityId<TManifest> = string extends BackofficeManifestEntityId<TManifest> ? string : {
1311
1348
  [TEntityId in BackofficeManifestEntityId<TManifest>]: TManifest[TEntityId] extends {
1312
1349
  kind: 'list-detail';
1313
1350
  hasList: true;
1314
1351
  } ? TEntityId : never;
1315
- }[BackofficeManifestEntityId<TManifest>] extends infer TEntityId ? [TEntityId] extends [never] ? string extends BackofficeManifestEntityId<TManifest> ? string : never : Extract<TEntityId, string> : never;
1316
- export type BackofficeManifestDetailEntityId<TManifest> = {
1352
+ }[BackofficeManifestEntityId<TManifest>];
1353
+ export type BackofficeManifestListStateInput<TManifest, TEntityId extends BackofficeManifestListEntityId<TManifest>> = string extends BackofficeManifestEntityId<TManifest> ? BackofficeListNavigationStateInput<Record<string, unknown>, string> : TEntityId extends BackofficeManifestListEntityId<TManifest> ? TManifest[TEntityId] extends {
1354
+ listNavigation: {
1355
+ defaults: BackofficeListState<infer Where extends Record<string, unknown>, infer Sort extends string>;
1356
+ };
1357
+ } ? BackofficeListNavigationStateInput<Where, Sort> : never : never;
1358
+ export type BackofficeManifestDetailEntityId<TManifest> = string extends BackofficeManifestEntityId<TManifest> ? string : {
1317
1359
  [TEntityId in BackofficeManifestEntityId<TManifest>]: TManifest[TEntityId] extends {
1318
1360
  kind: 'list-detail';
1319
1361
  } ? TEntityId : never;
1320
- }[BackofficeManifestEntityId<TManifest>] extends infer TEntityId ? [TEntityId] extends [never] ? string extends BackofficeManifestEntityId<TManifest> ? string : never : Extract<TEntityId, string> : never;
1321
- export type BackofficeManifestToolId<TManifest> = {
1362
+ }[BackofficeManifestEntityId<TManifest>];
1363
+ export type BackofficeManifestToolId<TManifest> = string extends BackofficeManifestEntityId<TManifest> ? string : {
1322
1364
  [TEntityId in BackofficeManifestEntityId<TManifest>]: TManifest[TEntityId] extends {
1323
1365
  kind: 'tool';
1324
1366
  } ? TEntityId : never;
1325
- }[BackofficeManifestEntityId<TManifest>] extends infer TEntityId ? [TEntityId] extends [never] ? string extends BackofficeManifestEntityId<TManifest> ? string : never : Extract<TEntityId, string> : never;
1367
+ }[BackofficeManifestEntityId<TManifest>];
1326
1368
  export type BackofficeManifestDetailPageId<TManifest, TEntityId extends BackofficeManifestDetailEntityId<TManifest>> = TManifest[TEntityId] extends {
1327
1369
  detailPages: readonly (infer TPage)[];
1328
1370
  } ? TPage extends {
@@ -1330,8 +1372,9 @@ export type BackofficeManifestDetailPageId<TManifest, TEntityId extends Backoffi
1330
1372
  } ? Extract<TPageId, string> : string : string;
1331
1373
  export type BackofficeResolvedListFacetConfig<TOperation extends OperationType, RowRef, RowView, ListFragmentData, TWhere extends Record<string, unknown> = BackofficeOperationWhere<TOperation>, TSort extends string = BackofficeOperationSort<TOperation>, TCountOperation extends OperationType = any> = BackofficeListFacetConfig<TOperation, RowRef, RowView, ListFragmentData, TWhere, TSort, TCountOperation> & {
1332
1374
  routes: BackofficeEntityRoutes;
1333
- listUrlCodec?: BackofficeListUrlCodec<TWhere, TSort>;
1334
- listDefaults?: BackofficeListState<TWhere, TSort>;
1375
+ listNavigation: BackofficeListNavigation<TWhere, TSort>;
1376
+ listUrlCodec: BackofficeListUrlCodec<TWhere, TSort>;
1377
+ listDefaults: BackofficeListState<TWhere, TSort>;
1335
1378
  };
1336
1379
  export type BackofficeResolvedPickerFacetConfig<TOperation extends OperationType, RowRef, RowView, PickerFragmentData, TWhere extends Record<string, unknown> = BackofficeOperationWhere<TOperation>> = BackofficePickerFacetConfig<TOperation, RowRef, RowView, PickerFragmentData, TWhere> & {
1337
1380
  routes: BackofficeEntityRoutes;