@sumaris-net/ngx-components 1.14.2 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sumaris-net.ngx-components.umd.js +356 -196
- package/bundles/sumaris-net.ngx-components.umd.js.map +1 -1
- package/bundles/sumaris-net.ngx-components.umd.min.js +2 -2
- package/bundles/sumaris-net.ngx-components.umd.min.js.map +1 -1
- package/doc/changelog.md +10 -0
- package/esm2015/src/app/shared/dates.js +5 -6
- package/esm2015/src/app/shared/material/datetime/material.date.js +132 -101
- package/esm2015/src/app/shared/material/datetime/material.datetime.js +58 -59
- package/esm2015/src/app/shared/material/datetime/testing/mat-date.test.js +109 -0
- package/esm2015/src/app/shared/material/material.testing.module.js +10 -1
- package/esm2015/src/app/shared/validator/validators.js +20 -9
- package/esm2015/sumaris-net.ngx-components.js +6 -5
- package/fesm2015/sumaris-net.ngx-components.js +339 -192
- package/fesm2015/sumaris-net.ngx-components.js.map +1 -1
- package/package.json +1 -1
- package/src/app/shared/dates.d.ts +2 -1
- package/src/app/shared/material/datetime/material.date.d.ts +20 -14
- package/src/app/shared/material/datetime/material.datetime.d.ts +5 -5
- package/src/app/shared/material/datetime/testing/mat-date.test.d.ts +29 -0
- package/src/app/shared/validator/validators.d.ts +3 -1
- package/src/assets/i18n/en-US.json +1 -0
- package/src/assets/i18n/en.json +1 -0
- package/src/assets/i18n/fr.json +1 -0
- package/sumaris-net.ngx-components.d.ts +5 -4
- package/sumaris-net.ngx-components.metadata.json +1 -1
|
@@ -13,9 +13,11 @@ import { DateTimeTestPage } from './datetime/testing/mat-date-time.test';
|
|
|
13
13
|
import { ChipsTestPage } from './chips/testing/chips.test';
|
|
14
14
|
import { MatBadgeIconTestPage } from './badge/badge-icon.test';
|
|
15
15
|
import { NumpadTestPage } from './numpad/testing/numpad.test';
|
|
16
|
+
import { DateTestPage } from './datetime/testing/mat-date.test';
|
|
16
17
|
export const SHARED_MATERIAL_TESTING_PAGES = [
|
|
17
18
|
{ label: 'Shared Material components', divider: true },
|
|
18
19
|
{ label: 'Date/Time field', page: '/testing/shared/datetime' },
|
|
20
|
+
{ label: 'Date field', page: '/testing/shared/date' },
|
|
19
21
|
{ label: 'Autocomplete field', page: '/testing/shared/autocomplete' },
|
|
20
22
|
{ label: 'Lat/Long field', page: '/testing/shared/latlong' },
|
|
21
23
|
{ label: 'Numeric pad component', page: '/testing/shared/numpad' },
|
|
@@ -40,6 +42,11 @@ const routes = [
|
|
|
40
42
|
pathMatch: 'full',
|
|
41
43
|
component: DateTimeTestPage
|
|
42
44
|
},
|
|
45
|
+
{
|
|
46
|
+
path: 'date',
|
|
47
|
+
pathMatch: 'full',
|
|
48
|
+
component: DateTestPage
|
|
49
|
+
},
|
|
43
50
|
{
|
|
44
51
|
path: 'latlong',
|
|
45
52
|
pathMatch: 'full',
|
|
@@ -80,6 +87,7 @@ MaterialTestingModule.decorators = [
|
|
|
80
87
|
],
|
|
81
88
|
declarations: [
|
|
82
89
|
DateTimeTestPage,
|
|
90
|
+
DateTestPage,
|
|
83
91
|
AutocompleteTestPage,
|
|
84
92
|
LatLongTestPage,
|
|
85
93
|
NumpadTestPage,
|
|
@@ -91,6 +99,7 @@ MaterialTestingModule.decorators = [
|
|
|
91
99
|
SharedMaterialModule,
|
|
92
100
|
RouterModule,
|
|
93
101
|
DateTimeTestPage,
|
|
102
|
+
DateTestPage,
|
|
94
103
|
AutocompleteTestPage,
|
|
95
104
|
LatLongTestPage,
|
|
96
105
|
NumpadTestPage,
|
|
@@ -99,4 +108,4 @@ MaterialTestingModule.decorators = [
|
|
|
99
108
|
]
|
|
100
109
|
},] }
|
|
101
110
|
];
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwudGVzdGluZy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC50ZXN0aW5nLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxZQUFZLEVBQVMsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSwwQ0FBMEMsQ0FBQztBQUM5RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFDLGVBQWUsRUFBYyxNQUFNLHVCQUF1QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3pELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUN2RSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDekQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBa0I7SUFDMUQsRUFBQyxLQUFLLEVBQUUsNEJBQTRCLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQztJQUNwRCxFQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUM7SUFDNUQsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBQztJQUNuRCxFQUFDLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxJQUFJLEVBQUUsOEJBQThCLEVBQUM7SUFDbkUsRUFBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFDO0lBQzFELEVBQUMsS0FBSyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBQztJQUVoRSxFQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUM7SUFDekQsRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFDO0lBR3pELEVBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUM7SUFDM0MsRUFBQyxLQUFLLEVBQUUsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFDO0NBQ3BFLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBVztJQUNyQjtRQUNFLElBQUksRUFBRSxFQUFFO1FBQ1IsU0FBUyxFQUFFLE1BQU07UUFDakIsU0FBUyxFQUFFLGVBQWU7S0FDM0I7SUFDRDtRQUNFLElBQUksRUFBRSxjQUFjO1FBQ3BCLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFNBQVMsRUFBRSxvQkFBb0I7S0FDaEM7SUFDRDtRQUNFLElBQUksRUFBRSxVQUFVO1FBQ2hCLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFNBQVMsRUFBRSxnQkFBZ0I7S0FDNUI7SUFDRDtRQUNFLElBQUksRUFBRSxNQUFNO1FBQ1osU0FBUyxFQUFFLE1BQU07UUFDakIsU0FBUyxFQUFFLFlBQVk7S0FDeEI7SUFDRDtRQUNFLElBQUksRUFBRSxTQUFTO1FBQ2YsU0FBUyxFQUFFLE1BQU07UUFDakIsU0FBUyxFQUFFLGVBQWU7S0FDM0I7SUFDRDtRQUNFLElBQUksRUFBRSxRQUFRO1FBQ2QsU0FBUyxFQUFFLE1BQU07UUFDakIsU0FBUyxFQUFFLGNBQWM7S0FDMUI7SUFDRDtRQUNFLElBQUksRUFBRSxPQUFPO1FBQ2IsU0FBUyxFQUFFLE1BQU07UUFDakIsU0FBUyxFQUFFLGFBQWE7S0FDekI7SUFDRDtRQUNFLElBQUksRUFBRSxPQUFPO1FBQ2IsU0FBUyxFQUFFLE1BQU07UUFDakIsU0FBUyxFQUFFLGFBQWE7S0FDekI7SUFDRDtRQUNFLElBQUksRUFBRSxZQUFZO1FBQ2xCLFNBQVMsRUFBRSxNQUFNO1FBQ2pCLFNBQVMsRUFBRSxvQkFBb0I7S0FDaEM7Q0FDRixDQUFDO0FBaUNGLE1BQU0sT0FBTyxxQkFBcUI7OztZQS9CakMsUUFBUSxTQUFDO2dCQUNSLE9BQU8sRUFBRTtvQkFDUCxZQUFZO29CQUNaLFdBQVc7b0JBQ1gsbUJBQW1CO29CQUNuQixvQkFBb0I7b0JBQ3BCLGVBQWUsQ0FBQyxRQUFRLEVBQUU7b0JBQzFCLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2lCQUM5QjtnQkFDRCxZQUFZLEVBQUU7b0JBQ1osZ0JBQWdCO29CQUNoQixZQUFZO29CQUNaLG9CQUFvQjtvQkFDcEIsZUFBZTtvQkFDZixjQUFjO29CQUNkLGFBQWE7b0JBQ2IsYUFBYTtvQkFDYixvQkFBb0I7aUJBQ3JCO2dCQUNELE9BQU8sRUFBRTtvQkFDUCxvQkFBb0I7b0JBQ3BCLFlBQVk7b0JBQ1osZ0JBQWdCO29CQUNoQixZQUFZO29CQUNaLG9CQUFvQjtvQkFDcEIsZUFBZTtvQkFDZixjQUFjO29CQUNkLGFBQWE7b0JBQ2IsYUFBYTtpQkFDZDthQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtOZ01vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlck1vZHVsZSwgUm91dGVzfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtBdXRvY29tcGxldGVUZXN0UGFnZX0gZnJvbSAnLi9hdXRvY29tcGxldGUvdGVzdGluZy9hdXRvY29tcGxldGUudGVzdCc7XG5pbXBvcnQge0xhdExvbmdUZXN0UGFnZX0gZnJvbSAnLi9sYXRsb25nL3Rlc3RpbmcvbGF0bG9uZy50ZXN0JztcbmltcG9ydCB7U2hhcmVkVGVzdHNQYWdlLCBUZXN0aW5nUGFnZX0gZnJvbSAnLi4vdGVzdGluZy90ZXN0cy5wYWdlJztcbmltcG9ydCB7U2hhcmVkTWF0ZXJpYWxNb2R1bGV9IGZyb20gJy4vbWF0ZXJpYWwubW9kdWxlJztcbmltcG9ydCB7SW9uaWNNb2R1bGV9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtSZWFjdGl2ZUZvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1N3aXBlVGVzdFBhZ2V9IGZyb20gJy4vc3dpcGUvdGVzdGluZy9zd2lwZS50ZXN0JztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7RGF0ZVRpbWVUZXN0UGFnZX0gZnJvbSAnLi9kYXRldGltZS90ZXN0aW5nL21hdC1kYXRlLXRpbWUudGVzdCc7XG5pbXBvcnQge0NoaXBzVGVzdFBhZ2V9IGZyb20gJy4vY2hpcHMvdGVzdGluZy9jaGlwcy50ZXN0JztcbmltcG9ydCB7TWF0QmFkZ2VJY29uVGVzdFBhZ2V9IGZyb20gJy4vYmFkZ2UvYmFkZ2UtaWNvbi50ZXN0JztcbmltcG9ydCB7TnVtcGFkVGVzdFBhZ2V9IGZyb20gJy4vbnVtcGFkL3Rlc3RpbmcvbnVtcGFkLnRlc3QnO1xuaW1wb3J0IHtEYXRlVGVzdFBhZ2V9IGZyb20gJy4vZGF0ZXRpbWUvdGVzdGluZy9tYXQtZGF0ZS50ZXN0JztcblxuZXhwb3J0IGNvbnN0IFNIQVJFRF9NQVRFUklBTF9URVNUSU5HX1BBR0VTOiBUZXN0aW5nUGFnZVtdID0gW1xuICB7bGFiZWw6ICdTaGFyZWQgTWF0ZXJpYWwgY29tcG9uZW50cycsIGRpdmlkZXI6IHRydWV9LFxuICB7bGFiZWw6ICdEYXRlL1RpbWUgZmllbGQnLCBwYWdlOiAnL3Rlc3Rpbmcvc2hhcmVkL2RhdGV0aW1lJ30sXG4gIHtsYWJlbDogJ0RhdGUgZmllbGQnLCBwYWdlOiAnL3Rlc3Rpbmcvc2hhcmVkL2RhdGUnfSxcbiAge2xhYmVsOiAnQXV0b2NvbXBsZXRlIGZpZWxkJywgcGFnZTogJy90ZXN0aW5nL3NoYXJlZC9hdXRvY29tcGxldGUnfSxcbiAge2xhYmVsOiAnTGF0L0xvbmcgZmllbGQnLCBwYWdlOiAnL3Rlc3Rpbmcvc2hhcmVkL2xhdGxvbmcnfSxcbiAge2xhYmVsOiAnTnVtZXJpYyBwYWQgY29tcG9uZW50JywgcGFnZTogJy90ZXN0aW5nL3NoYXJlZC9udW1wYWQnfSxcblxuICB7bGFiZWw6ICdTd2lwZSBjb21wb25lbnQnLCBwYWdlOiAnL3Rlc3Rpbmcvc2hhcmVkL3N3aXBlJ30sXG4gIHtsYWJlbDogJ0NoaXBzIGNvbXBvbmVudCcsIHBhZ2U6ICcvdGVzdGluZy9zaGFyZWQvY2hpcHMnfSxcblxuXG4gIHtsYWJlbDogJ1NoYXJlZCBkaXJlY3RpdmVzJywgZGl2aWRlcjogdHJ1ZX0sXG4gIHtsYWJlbDogJ0JhZGdlIGljb24gZGlyZWN0aXZlJywgcGFnZTogJy90ZXN0aW5nL3NoYXJlZC9iYWRnZS1pY29uJ31cbl07XG5cbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xuICB7XG4gICAgcGF0aDogJycsXG4gICAgcGF0aE1hdGNoOiAnZnVsbCcsXG4gICAgY29tcG9uZW50OiBTaGFyZWRUZXN0c1BhZ2VcbiAgfSxcbiAge1xuICAgIHBhdGg6ICdhdXRvY29tcGxldGUnLFxuICAgIHBhdGhNYXRjaDogJ2Z1bGwnLFxuICAgIGNvbXBvbmVudDogQXV0b2NvbXBsZXRlVGVzdFBhZ2VcbiAgfSxcbiAge1xuICAgIHBhdGg6ICdkYXRldGltZScsXG4gICAgcGF0aE1hdGNoOiAnZnVsbCcsXG4gICAgY29tcG9uZW50OiBEYXRlVGltZVRlc3RQYWdlXG4gIH0sXG4gIHtcbiAgICBwYXRoOiAnZGF0ZScsXG4gICAgcGF0aE1hdGNoOiAnZnVsbCcsXG4gICAgY29tcG9uZW50OiBEYXRlVGVzdFBhZ2VcbiAgfSxcbiAge1xuICAgIHBhdGg6ICdsYXRsb25nJyxcbiAgICBwYXRoTWF0Y2g6ICdmdWxsJyxcbiAgICBjb21wb25lbnQ6IExhdExvbmdUZXN0UGFnZVxuICB9LFxuICB7XG4gICAgcGF0aDogJ251bXBhZCcsXG4gICAgcGF0aE1hdGNoOiAnZnVsbCcsXG4gICAgY29tcG9uZW50OiBOdW1wYWRUZXN0UGFnZVxuICB9LFxuICB7XG4gICAgcGF0aDogJ3N3aXBlJyxcbiAgICBwYXRoTWF0Y2g6ICdmdWxsJyxcbiAgICBjb21wb25lbnQ6IFN3aXBlVGVzdFBhZ2VcbiAgfSxcbiAge1xuICAgIHBhdGg6ICdjaGlwcycsXG4gICAgcGF0aE1hdGNoOiAnZnVsbCcsXG4gICAgY29tcG9uZW50OiBDaGlwc1Rlc3RQYWdlXG4gIH0sXG4gIHtcbiAgICBwYXRoOiAnYmFkZ2UtaWNvbicsXG4gICAgcGF0aE1hdGNoOiAnZnVsbCcsXG4gICAgY29tcG9uZW50OiBNYXRCYWRnZUljb25UZXN0UGFnZVxuICB9XG5dO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIElvbmljTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgU2hhcmVkTWF0ZXJpYWxNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLmZvckNoaWxkKCksXG4gICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcylcbiAgXSxcbiAgZGVjbGFyYXRpb25zOiBbXG4gICAgRGF0ZVRpbWVUZXN0UGFnZSxcbiAgICBEYXRlVGVzdFBhZ2UsXG4gICAgQXV0b2NvbXBsZXRlVGVzdFBhZ2UsXG4gICAgTGF0TG9uZ1Rlc3RQYWdlLFxuICAgIE51bXBhZFRlc3RQYWdlLFxuICAgIFN3aXBlVGVzdFBhZ2UsXG4gICAgQ2hpcHNUZXN0UGFnZSxcbiAgICBNYXRCYWRnZUljb25UZXN0UGFnZVxuICBdLFxuICBleHBvcnRzOiBbXG4gICAgU2hhcmVkTWF0ZXJpYWxNb2R1bGUsXG4gICAgUm91dGVyTW9kdWxlLFxuICAgIERhdGVUaW1lVGVzdFBhZ2UsXG4gICAgRGF0ZVRlc3RQYWdlLFxuICAgIEF1dG9jb21wbGV0ZVRlc3RQYWdlLFxuICAgIExhdExvbmdUZXN0UGFnZSxcbiAgICBOdW1wYWRUZXN0UGFnZSxcbiAgICBTd2lwZVRlc3RQYWdlLFxuICAgIENoaXBzVGVzdFBhZ2VcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFRlc3RpbmdNb2R1bGUge1xufVxuIl19
|
|
@@ -20,14 +20,6 @@ export class SharedValidators {
|
|
|
20
20
|
this._REGEXP_CACHE.DOUBLE_BY_MAX_DECIMALS[maxDecimals] = new RegExp(`^[-]?[0-9]+([.,][0-9]{1,${maxDecimals}})?$`);
|
|
21
21
|
return this._REGEXP_CACHE.DOUBLE_BY_MAX_DECIMALS[maxDecimals];
|
|
22
22
|
}
|
|
23
|
-
static validDate(control) {
|
|
24
|
-
const value = control.value;
|
|
25
|
-
const date = !value || moment.isMoment(value) ? value : moment(control.value, DATE_ISO_PATTERN);
|
|
26
|
-
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
27
|
-
return { validDate: true };
|
|
28
|
-
}
|
|
29
|
-
return null;
|
|
30
|
-
}
|
|
31
23
|
static latitude(control) {
|
|
32
24
|
const value = control.value;
|
|
33
25
|
if (isNotNil(value) && (value < -90 || value > 90)) {
|
|
@@ -92,6 +84,14 @@ export class SharedValidators {
|
|
|
92
84
|
return null;
|
|
93
85
|
};
|
|
94
86
|
}
|
|
87
|
+
static validDate(control) {
|
|
88
|
+
const value = control.value;
|
|
89
|
+
const date = !value || moment.isMoment(value) ? value : moment(control.value, DATE_ISO_PATTERN);
|
|
90
|
+
if (date && (!date.isValid() || date.year() < 1970)) {
|
|
91
|
+
return { validDate: true };
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
95
|
static dateIsAfter(previousValue, errorParam, granularity) {
|
|
96
96
|
return (control) => {
|
|
97
97
|
const value = fromDateISOString(control.value);
|
|
@@ -102,6 +102,16 @@ export class SharedValidators {
|
|
|
102
102
|
return null;
|
|
103
103
|
};
|
|
104
104
|
}
|
|
105
|
+
static dateIsBefore(maxValue, errorParam, granularity) {
|
|
106
|
+
return (control) => {
|
|
107
|
+
const value = fromDateISOString(control.value);
|
|
108
|
+
if (isNotNil(value) && isNotNil(maxValue) && value.isSameOrAfter(maxValue, granularity)) {
|
|
109
|
+
// Return the error
|
|
110
|
+
return { dateIsBefore: { maxDate: errorParam } };
|
|
111
|
+
}
|
|
112
|
+
return null;
|
|
113
|
+
};
|
|
114
|
+
}
|
|
105
115
|
static dateRangeEnd(startDateFieldName, msg) {
|
|
106
116
|
const errorCode = msg ? 'msg' : 'dateRange';
|
|
107
117
|
const error = msg ? { msg } : { dateRange: true };
|
|
@@ -196,6 +206,7 @@ SharedValidators.I18N_ERROR_KEYS = {
|
|
|
196
206
|
pubkey: 'ERROR.FIELD_NOT_VALID_PUBKEY',
|
|
197
207
|
validDate: 'ERROR.FIELD_NOT_VALID_DATE',
|
|
198
208
|
dateIsAfter: 'ERROR.FIELD_NOT_VALID_DATE_AFTER',
|
|
209
|
+
dateIsBefore: 'ERROR.FIELD_NOT_VALID_DATE_BEFORE',
|
|
199
210
|
dateRange: 'ERROR.FIELD_NOT_VALID_DATE_RANGE',
|
|
200
211
|
dateMinDuration: 'ERROR.FIELD_NOT_VALID_DATE_MIN_DURATION',
|
|
201
212
|
dateMaxDuration: 'ERROR.FIELD_NOT_VALID_DATE_MAX_DURATION',
|
|
@@ -510,4 +521,4 @@ export class SharedAsyncValidators {
|
|
|
510
521
|
}
|
|
511
522
|
}
|
|
512
523
|
SharedAsyncValidators.DEBOUNCE_TIME_VALIDATOR_ID = 0;
|
|
513
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQXFGLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkksT0FBTyxLQUFLLGNBQWMsTUFBTSxRQUFRLENBQUM7QUFFekMsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5SCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQztBQUU5QixXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQVluQixNQUFNLENBQUMsZUFBZSxDQUFDLFdBQW1CO1FBQ2hELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBRTVELElBQUksV0FBVyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sTUFBTSxHQUFHLElBQUks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LENBQUMsQ0FDekIsQ0FBQTtRQUNMLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFxQixFQUNyQixXQUEyQyxFQUMzQyxJQUlDO1FBQzdCLElBQUksSUFBSSxDQUFDLGNBQWM7WUFBRSxNQUFNLEtBQUssQ0FBQyw0REFBNEQsQ0FBQyxDQUFDO1FBRW5HLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFL0IsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsV0FBVyxrQ0FBTSxJQUFJLEtBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxRQUFRLElBQUcsQ0FBQztRQUN0SCxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUUxQyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhDLDZDQUE2QztRQUM3QyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNwQiwwR0FBMEc7WUFDMUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFFNUIsZ0VBQWdFO1lBQ2hFLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNoQixRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ25CLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQzs7QUFoSGMsZ0RBQTBCLEdBQUcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEFzeW5jVmFsaWRhdG9yRm4sIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCAqIGFzIG1vbWVudEltcG9ydGVkIGZyb20gJ21vbWVudCc7XG5pbXBvcnQge01vbWVudCwgdW5pdE9mVGltZX0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7REFURV9JU09fUEFUVEVSTiwgUFVCS0VZX1JFR0VYUH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7aXNFbXB0eUFycmF5LCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCBpc05vdE5pbE9yTmFOLCB0b0Jvb2xlYW4sIHRvTnVtYmVyfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtmcm9tRGF0ZUlTT1N0cmluZ30gZnJvbSAnLi4vZGF0ZXMnO1xuaW1wb3J0IHtmcm9tLCBpc09ic2VydmFibGUsIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpcnN0LCBzd2l0Y2hNYXAsIHRha2VVbnRpbCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmNvbnN0IG1vbWVudCA9IG1vbWVudEltcG9ydGVkO1xuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZFZhbGlkYXRvcnMge1xuXG4gIHByaXZhdGUgc3RhdGljIF9SRUdFWFBfQ0FDSEUgPSB7XG4gICAgRE9VQkxFX0JZX01BWF9ERUNJTUFMUzoge1xuICAgICAgTk9fTElNSVQ6IC9eWy1dP1swLTldKyhbLixdWzAtOV0qKT8kLywgLy8gTm8gbWF4IGRlY2ltYWxzXG4gICAgICAxOiAvXlstXT9bMC05XSsoWy4sXVswLTldKT8kLywgICAgICAgICAvLyAxIGRlY2ltYWwgbWF4XG4gICAgICAyOiAvXlstXT9bMC05XSsoWy4sXVswLTldezEsMn0pPyQvLCAgICAvLyAyIGRlY2ltYWxzIG1heFxuICAgICAgMzogL15bLV0/WzAtOV0rKFsuLF1bMC05XXsxLDJ9KT8kLywgICAgIC8vIDMgZGVjaW1hbHMgbWF4XG5cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREb3VibGVSZWdleHAobWF4RGVjaW1hbHM6IG51bWJlcik6IFJlZ0V4cCB7XG4gICAgaWYgKGlzTmlsKG1heERlY2ltYWxzKSlcbiAgICAgIHJldHVybiB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMUy5OT19MSU1JVDtcblxuICAgIGlmIChtYXhEZWNpbWFscyA8IDApIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBtYXhEZWNpbWFscyB2YWx1ZTogJHttYXhEZWNpbWFsc31gKTtcbiAgICBjb25zdCByZWdleHAgPSB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMU1ttYXhEZWNpbWFsc107XG4gICAgaWYgKHJlZ2V4cCkgcmV0dXJuIHJlZ2V4cDtcblxuICAgIC8vIE5ldyByZWdleHA6IGFkZCBpdCB0byBjYWNoZVxuICAgIHRoaXMuX1JFR0VYUF9DQUNIRS5ET1VCTEVfQllfTUFYX0RFQ0lNQUxTW21heERlY2ltYWxzXSA9IG5ldyBSZWdFeHAoYF5bLV0/WzAtOV0rKFsuLF1bMC05XXsxLCR7bWF4RGVjaW1hbHN9fSk/JGApO1xuICAgIHJldHVybiB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMU1ttYXhEZWNpbWFsc107XG4gIH1cblxuXG4gIHN0YXRpYyByZWFkb25seSBJMThOX0VSUk9SX0tFWVMgPSB7XG4gICAgcmVxdWlyZWQ6ICdFUlJPUi5GSUVMRF9SRVFVSVJFRCcsXG4gICAgbWluOiAnRVJST1IuRklFTERfTUlOJyxcbiAgICBtYXg6ICdFUlJPUi5GSUVMRF9NQVgnLFxuICAgIG1pbmxlbmd0aDonRVJST1IuRklFTERfTUlOX0xFTkdUSCcsXG4gICAgbWF4bGVuZ3RoOidFUlJPUi5GSUVMRF9NQVhfTEVOR1RIJyxcbiAgICBwdWJrZXk6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfUFVCS0VZJyxcbiAgICB2YWxpZERhdGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURScsXG4gICAgZGF0ZUlzQWZ0ZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfREFURV9BRlRFUicsXG4gICAgZGF0ZVJhbmdlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfUkFOR0UnLFxuICAgIGRhdGVNaW5EdXJhdGlvbjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01JTl9EVVJBVElPTicsXG4gICAgZGF0ZU1heER1cmF0aW9uOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUFYX0RVUkFUSU9OJyxcbiAgICBtYXhEZWNpbWFsczogJ0VSUk9SLkZJRUxEX01BWElNVU1fREVDSU1BTFMnLFxuICAgIGludGVnZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfSU5URUdFUicsXG4gICAgZW1haWw6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfRU1BSUwnLFxuICAgIGxhdGl0dWRlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0xBVElUVURFJyxcbiAgICBsb25naXR1ZGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfTE9OR0lUVURFJyxcbiAgICBwYXR0ZXJuOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX1BBVFRFUk4nLFxuICAgIHVuaXF1ZTogJ0VSUk9SLkZJRUxEX05PVF9VTklRVUUnLFxuICAgIGVudGl0eTogJ0VSUk9SLkZJRUxEX0lOVkFMSUQnXG4gIH1cblxuICBzdGF0aWMgdmFsaWREYXRlKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gIXZhbHVlIHx8IG1vbWVudC5pc01vbWVudCh2YWx1ZSkgPyB2YWx1ZSA6IG1vbWVudChjb250cm9sLnZhbHVlLCBEQVRFX0lTT19QQVRURVJOKTtcbiAgICBpZiAoZGF0ZSAmJiAoIWRhdGUuaXNWYWxpZCgpIHx8IGRhdGUueWVhcigpIDwgMTk3MCkpIHtcbiAgICAgIHJldHVybiB7dmFsaWREYXRlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgbGF0aXR1ZGUoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgKHZhbHVlIDwgLTkwIHx8IHZhbHVlID4gOTApKSB7XG4gICAgICByZXR1cm4ge2xhdGl0dWRlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgbG9uZ2l0dWRlKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmICh2YWx1ZSA8IC0xODAgfHwgdmFsdWUgPiAxODApKSB7XG4gICAgICByZXR1cm4ge2xvbmdpdHVkZTogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIG9iamVjdChjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB7b2JqZWN0OiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZW50aXR5KGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUuaWQgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5pZCA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB7ZW50aXR5OiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZW1wdHkoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtlbXB0eTogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHB1YmtleShjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICFQVUJLRVlfUkVHRVhQLnRlc3QodmFsdWUpKSkge1xuICAgICAgcmV0dXJuIHtwdWJrZXk6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBpbnRlZ2VyKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChpc05pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQoY29udHJvbC52YWx1ZSk7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSB8fCAodmFsdWUgfCAwKSAhPT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiB7aW50ZWdlcjogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGRvdWJsZShvcHRzPzogeyBtYXhEZWNpbWFscz86IG51bWJlciB9KTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IHJlZ2V4cCA9IHRoaXMuZ2V0RG91YmxlUmVnZXhwKG9wdHM/Lm1heERlY2ltYWxzKTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJXQVJOOiBHZXR0aW5nIGEgTmFOIHZhbHVlICFcIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiB2YWx1ZSAhPT0gJycgJiYgIXJlZ2V4cC50ZXN0KHZhbHVlIGFzIHN0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIHttYXhEZWNpbWFsczoge21heERlY2ltYWxzOiBvcHRzPy5tYXhEZWNpbWFsc30gfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZUlzQWZ0ZXIocHJldmlvdXNWYWx1ZTogTW9tZW50LCBlcnJvclBhcmFtOiBzdHJpbmcsIGdyYW51bGFyaXR5PzogdW5pdE9mVGltZS5TdGFydE9mKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgaXNOb3ROaWwocHJldmlvdXNWYWx1ZSkgJiYgdmFsdWUuaXNTYW1lT3JCZWZvcmUocHJldmlvdXNWYWx1ZSwgZ3JhbnVsYXJpdHkpKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3JcbiAgICAgICAgcmV0dXJuIHtkYXRlSXNBZnRlcjoge21pbkRhdGU6IGVycm9yUGFyYW19fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZVJhbmdlRW5kKHN0YXJ0RGF0ZUZpZWxkTmFtZTogc3RyaW5nLCBtc2c/OiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gbXNnID8gJ21zZyc6ICdkYXRlUmFuZ2UnO1xuICAgIGNvbnN0IGVycm9yID0gbXNnID8ge21zZ30gOiB7ZGF0ZVJhbmdlOiB0cnVlfTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0Q29udHJvbCA9IGNvbnRyb2wucGFyZW50Py5nZXQoc3RhcnREYXRlRmllbGROYW1lKTtcbiAgICAgIGlmICghc3RhcnRDb250cm9sKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGZpbmQgYnJvdGhlciBjb250cm9sICcke3N0YXJ0RGF0ZUZpZWxkTmFtZX0nIGluIHRoZSBwYXJlbnQgZm9ybWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKHN0YXJ0Q29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoY29udHJvbC52YWx1ZSk7XG4gICAgICAvLyBFcnJvciBpZiB2YWx1ZSA8PSBiZWZvcmVEYXRlXG4gICAgICBpZiAoaXNOb3ROaWwoZW5kRGF0ZSkgJiYgaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBlbmREYXRlLmlzU2FtZU9yQmVmb3JlKHN0YXJ0RGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgLy8gT0s6IGNsZWFyIGV4aXN0aW5nIGVycm9yc1xuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVSYW5nZVN0YXJ0KGVuZERhdGVGaWVsZE5hbWU6IHN0cmluZywgbXNnPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IG1zZyA/ICdtc2cnOiAnZGF0ZVJhbmdlJztcbiAgICBjb25zdCBlcnJvciA9IG1zZyA/IHttc2d9IDoge2RhdGVSYW5nZTogdHJ1ZX07XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBlbmREYXRlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50Py5nZXQoZW5kRGF0ZUZpZWxkTmFtZSk7XG4gICAgICBpZiAoIWVuZERhdGVDb250cm9sKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IGZpbmQgY29udHJvbCAnJHtlbmREYXRlRmllbGROYW1lfScgaW4gdGhlIHBhcmVudCBmb3JtYCk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGVuZERhdGVDb250cm9sLnZhbHVlKTtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgLy8gRXJyb3IgaWYgdmFsdWUgPD0gYmVmb3JlRGF0ZVxuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgc3RhcnREYXRlLmlzU2FtZU9yQWZ0ZXIoZW5kRGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgLy8gT0s6IGNsZWFyIGV4aXN0aW5nIGVycm9yc1xuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNvcHlQYXJlbnRFcnJvcnMoZXJyb3JOYW1lcz86IHN0cmluZ1tdKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgLy8gU2tpcCBpZiBjb250cm9sIGFscmVhZHkgaGFzIHNvbWUgZXJyb3JzXG4gICAgICBpZiAoY29udHJvbC5lcnJvcnMpIHJldHVybiBudWxsO1xuXG4gICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLnBhcmVudCAmJiBjb250cm9sLnBhcmVudC5lcnJvcnM7XG5cbiAgICAgIC8vIE5vIGVycm9ycywgb3IgY29weSBhbGwgZXJyb3JzXG4gICAgICBpZiAoIWVycm9ycyB8fCBpc0VtcHR5QXJyYXkoZXJyb3JOYW1lcykpIHJldHVybiBlcnJvcnM7XG5cbiAgICAgIC8vIENvcHkgb25seSBleHBlY3RlZCBlcnJvcnNcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlcnJvcnMpLnJlZHVjZSgocmVzLCBrZXkpID0+IHtcbiAgICAgICAgaWYgKGVycm9yTmFtZXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgIHJlc1trZXldID0gZXJyb3JzW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0sIHt9KTtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGNsZWFyRXJyb3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBlcnJvckNvZGU6IHN0cmluZykge1xuICAgIGlmIChjb250cm9sLmhhc0Vycm9yKGVycm9yQ29kZSkpIHtcbiAgICAgIGNvbnN0IGVycm9ycyA9IGNvbnRyb2wuZXJyb3JzO1xuICAgICAgaWYgKGVycm9ycyAmJiBlcnJvcnNbZXJyb3JDb2RlXSkge1xuICAgICAgICAvLyBPbmx5IG9uZSBlcnJvcjogcmVzZXQgZXJyb3JzXG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlcnJvcnMpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE90aGVyIGVycm9ycyBleGlzdHM6IGp1c3QgcmVtb3ZlIHRoaXMgZXJyb3JcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZGVsZXRlIGVycm9yc1tlcnJvckNvZGVdO1xuICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuXG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgU2hhcmVkRm9ybUdyb3VwVmFsaWRhdG9ycyB7XG5cbiAgc3RhdGljIGRhdGVSYW5nZShzdGFydERhdGVGaWVsZDogc3RyaW5nLCBlbmREYXRlRmllbGQ6IHN0cmluZywgbXNnPzogc3RyaW5nICk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBpc05vdE5pbE9yQmxhbmsobXNnKSA/ICdtc2cnIDogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgcmFuZ2VFcnJvciA9IG1zZyA/IHttc2d9IDoge2RhdGVSYW5nZTogdHJ1ZX07XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZ3JvdXAuZ2V0KHN0YXJ0RGF0ZUZpZWxkKS52YWx1ZSk7XG4gICAgICBjb25zdCBlbmRGaWVsZCA9IGdyb3VwLmdldChlbmREYXRlRmllbGQpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGVuZEZpZWxkLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbChzdGFydERhdGUpICYmIGlzTm90TmlsKGVuZERhdGUpICYmIHN0YXJ0RGF0ZS5pc0FmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgZW5kRmllbGQubWFya0FzUGVuZGluZygpO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoe1xuICAgICAgICAgIC4uLmVuZEZpZWxkLmVycm9ycyxcbiAgICAgICAgICAuLi5yYW5nZUVycm9yXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yIChzaG91bGQgYmUgYXBwbHkgdG8gdGhlIHBhcmVudCBmb3JtKVxuICAgICAgICByZXR1cm4gcmFuZ2VFcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiByZW1vdmUgdGhlIGV4aXN0aW5nIG9uIHRoZSBlbmQgZmllbGRcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihlbmRGaWVsZCwgZXJyb3JDb2RlKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZU1heER1cmF0aW9uKHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsIGVuZERhdGVGaWVsZDogc3RyaW5nLCBtYXhEdXJhdGlvbjogbnVtYmVyLCBkdXJhdGlvblVuaXQ/OiBtb21lbnQudW5pdE9mVGltZS5EaWZmKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IG1heER1cmF0aW9uRXJyb3IgPSB7ZGF0ZU1heER1cmF0aW9uOiB0cnVlfTtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPiBtYXhEdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1BlbmRpbmcoKTtcbiAgICAgICAgZW5kRmllbGQuc2V0RXJyb3JzKHtcbiAgICAgICAgICAuLi5lbmRGaWVsZC5lcnJvcnMsXG4gICAgICAgICAgLi4ubWF4RHVyYXRpb25FcnJvclxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGx5IHRvIHRoZSBwYXJlbnQgZm9ybSlcbiAgICAgICAgcmV0dXJuIG1heER1cmF0aW9uRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsICdkYXRlTWF4RHVyYXRpb24nKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZU1pbkR1cmF0aW9uKHN0YXJ0RGF0ZUZpZWxkOiBzdHJpbmcsIGVuZERhdGVGaWVsZDogc3RyaW5nLCBtaW5EdXJhdGlvbjogbnVtYmVyLCBkdXJhdGlvblVuaXQ/OiBtb21lbnQudW5pdE9mVGltZS5EaWZmKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGVuZEZpZWxkID0gZ3JvdXAuZ2V0KGVuZERhdGVGaWVsZCk7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhncm91cC5nZXQoc3RhcnREYXRlRmllbGQpLnZhbHVlKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmRGaWVsZC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBpc05vdE5pbChlbmREYXRlKSAmJiBNYXRoLmFicyhzdGFydERhdGUuZGlmZihlbmREYXRlLCBkdXJhdGlvblVuaXQpKSA8IG1pbkR1cmF0aW9uKSB7XG4gICAgICAgIC8vIFVwZGF0ZSBlbmQgZmllbGRcbiAgICAgICAgY29uc3QgZW5kRmllbGRFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBlbmRGaWVsZC5lcnJvcnMgfHwge307XG4gICAgICAgIGVuZEZpZWxkRXJyb3JzWydkYXRlTWluRHVyYXRpb24nXSA9IHRydWU7XG4gICAgICAgIGVuZEZpZWxkLnNldEVycm9ycyhlbmRGaWVsZEVycm9ycyk7XG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgKHNob3VsZCBiZSBhcHBseSB0byB0aGUgcGFyZW50IGZvcm0pXG4gICAgICAgIHJldHVybiB7ZGF0ZU1pbkR1cmF0aW9uOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiByZW1vdmUgdGhlIGV4aXN0aW5nIG9uIHRoZSBlbmQgZmllbGRcbiAgICAgIGVsc2Uge1xuICAgICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsICdkYXRlTWluRHVyYXRpb24nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZihmaWVsZE5hbWU6IHN0cmluZywgYW5vdGhlckZpZWxkVG9DaGVjazogc3RyaW5nIHwgQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBncm91cC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IGFub3RoZXJDb250cm9sID0gKGFub3RoZXJGaWVsZFRvQ2hlY2sgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnRyb2wpID8gYW5vdGhlckZpZWxkVG9DaGVjayA6IGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKTtcbiAgICAgIGlmICghYW5vdGhlckNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgZmllbGQgdG8gY2hlY2shJyk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpICYmIGlzTm90TmlsT3JCbGFuayhhbm90aGVyQ29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7cmVxdWlyZWQ6IHRydWV9O1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcik7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZElmVHJ1ZShmaWVsZE5hbWU6IHN0cmluZywgYW5vdGhlckZpZWxkVG9DaGVjazogc3RyaW5nIHwgQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBncm91cC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IGFub3RoZXJDb250cm9sID0gKGFub3RoZXJGaWVsZFRvQ2hlY2sgaW5zdGFuY2VvZiBBYnN0cmFjdENvbnRyb2wpID8gYW5vdGhlckZpZWxkVG9DaGVjayA6IGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKTtcbiAgICAgIGlmICghYW5vdGhlckNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgZmllbGQgdG8gY2hlY2shJyk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKGNvbnRyb2wudmFsdWUpICYmIHRvQm9vbGVhbihhbm90aGVyQ29udHJvbC52YWx1ZSwgZmFsc2UpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZkVtcHR5KGZpZWxkTmFtZTogc3RyaW5nLCBhbm90aGVyRmllbGRUb0NoZWNrOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbCA9IGdyb3VwLmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSAmJiBpc05pbE9yQmxhbmsoZ3JvdXAuZ2V0KGFub3RoZXJGaWVsZFRvQ2hlY2spLnZhbHVlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHtyZXF1aXJlZDogdHJ1ZX07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHByb3BhZ2F0ZUlmRGlydHkoZmllbGROYW1lOiBzdHJpbmcsIGZpZWxkTmFtZVRvUHJvcGFnYXRlOiBzdHJpbmcsIHZhbHVlVG9Qcm9wYWdhdGU6IGFueSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBncm91cC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IGNvbnRyb2xUb1Byb3BhZ2F0ZSA9IGdyb3VwLmdldChmaWVsZE5hbWVUb1Byb3BhZ2F0ZSk7XG4gICAgICBpZiAoY29udHJvbC5kaXJ0eSAmJiBjb250cm9sVG9Qcm9wYWdhdGUudmFsdWUgIT09IHZhbHVlVG9Qcm9wYWdhdGUpIHtcbiAgICAgICAgY29udHJvbFRvUHJvcGFnYXRlLnNldFZhbHVlKHZhbHVlVG9Qcm9wYWdhdGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1lIGFzIGNvbXBvc2UsIGJ1dCBrZWVwIG9ubHkgdGhlIGZpcnN0IGVycm9ycyAoaW5zdGVhZCBvZiB0aGUgdW5pb24pXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JzXG4gICAqL1xuICBmaXJzdCh2YWxpZGF0b3JzOiAoVmFsaWRhdG9yRm4gfCBudWxsIHwgdW5kZWZpbmVkKVtdKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIHJldHVybiAoY29udHJvbCkgPT4gdmFsaWRhdG9yc1xuICAgICAgLmZpbHRlcihpc05vdE5pbClcbiAgICAgIC5tYXAodmFsaWRhdG9yID0+IHZhbGlkYXRvcihjb250cm9sKSlcbiAgICAgIC5maW5kKGlzTm90TmlsKSB8fCBudWxsO1xuICB9XG59XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgU2hhcmVkRm9ybUFycmF5VmFsaWRhdG9ycyB7XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHVuaXF1ZW5lc3Mgb2YgYW4gZW50aXR5IGluIGEgRm9ybUFycmF5XG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSB0aGUgbmFtZSBvZiB0aGUgY29udHJvbCBpbiBGb3JtQXJyYXlcbiAgICovXG4gIHN0YXRpYyB1bmlxdWVFbnRpdHkoY29udHJvbE5hbWU6IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGFycmF5OiBGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcbiAgICAgIGlmIChhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgLy8gZ2F0aGVyIGNvbnRyb2xzIGluIGFycmF5IHdpdGggdmFsaWQgZW50aXR5XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgIGlmIChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0udmFsdWU7XG4gICAgICAgICAgICBpZiAoISF2YWx1ZSAmJiAhIXZhbHVlLmlkKVxuICAgICAgICAgICAgICBjb250cm9scy5wdXNoKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgb2NjdXJyZW5jZXMgb2YgZW50aXR5IGJ5IGlkXG4gICAgICAgIGNvbnN0IG9jY3VycmVuY2VzID0gY29udHJvbHMucmVkdWNlKChhY2MsIGNvbnRyb2wpID0+IHtcbiAgICAgICAgICBjb25zdCBpZCA9IGNvbnRyb2wudmFsdWUuaWQ7XG4gICAgICAgICAgYWNjW2lkXSA/IGFjY1tpZF0rKyA6IGFjY1tpZF0gPSAxO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgLy8gZ2V0IGNvbnRyb2xzIHdpdGggdmFsdWUgb2NjdXJyZW5jZXMgPiAxXG4gICAgICAgIGNvbnN0IGVycm9yID0ge3VuaXF1ZUVudGl0eTogdHJ1ZX07XG4gICAgICAgIGxldCByZXR1cm5FcnJvciA9IGZhbHNlO1xuICAgICAgICBjb250cm9scy5maWx0ZXIoY29udHJvbCA9PiBvY2N1cnJlbmNlc1tjb250cm9sLnZhbHVlLmlkXSA+IDEpXG4gICAgICAgICAgLmZvckVhY2goY29udHJvbCA9PiB7XG4gICAgICAgICAgICBsZXQgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gY29udHJvbC5lcnJvcnMgfHwge307XG4gICAgICAgICAgICBlcnJvcnMgPSB7Li4uZXJyb3JzLCAuLi5lcnJvcn07XG4gICAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAgICAgcmV0dXJuRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICBpZiAocmV0dXJuRXJyb3IpXG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAndW5pcXVlRW50aXR5JykpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyByZXF1aXJlZEFycmF5TWluTGVuZ3RoKG1pbkxlbmd0aD86IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICBtaW5MZW5ndGggPSBtaW5MZW5ndGggfHwgMTtcbiAgICByZXR1cm4gKGFycmF5OiBGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWFycmF5IHx8IGFycmF5Lmxlbmd0aCA8IG1pbkxlbmd0aCkge1xuICAgICAgICByZXR1cm4ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHN1bSBvZiBjb250cm9sIHZhbHVlcyBpbiBhbiBGb3JtQXJyYXkgbm90IG92ZXJmbG93IHRoZSBtYXggdmFsdWVcbiAgICpcbiAgICogQHBhcmFtIGNvbnRyb2xOYW1lIHRoZSBuYW1lIG9mIHRoZSBjb250cm9sIGluIEZvcm1BcnJheVxuICAgKiBAcGFyYW0gbWF4IHRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICBzdGF0aWMgdmFsaWRTdW1NYXhWYWx1ZShjb250cm9sTmFtZTogc3RyaW5nLCBtYXg6IG51bWJlcik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGFycmF5OiBGb3JtQXJyYXkpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sczogQWJzdHJhY3RDb250cm9sW10gPSBbXTtcbiAgICAgIGlmIChhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIGFycmF5LmNvbnRyb2xzKSB7XG4gICAgICAgICAgY29uc3QgZnJvbUdyb3VwID0gY29udHJvbCBhcyBGb3JtR3JvdXA7XG4gICAgICAgICAgaWYgKGZyb21Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0gJiYgaXNOb3ROaWxPck5hTihmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlKSkge1xuICAgICAgICAgICAgY29udHJvbHMucHVzaChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnRyb2xzLnJlZHVjZSgoc3VtLCBjb250cm9sKSA9PiBzdW0gKyBjb250cm9sLnZhbHVlLCAwKSA+IG1heCkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0ge3N1bU1heFZhbHVlOiB0cnVlfTtcbiAgICAgICAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0gey4uLmVycm9ycywgLi4uZXJyb3J9O1xuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3N1bU1heFZhbHVlJykpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG59XG5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgT2JzZXJ2YWJsZVZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD5cbmV4cG9ydCBkZWNsYXJlIHR5cGUgUHJvbWlzZVZhbGlkYXRvckZuID0gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD5cblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBTaGFyZWRBc3luY1ZhbGlkYXRvcnMge1xuXG4gIHByaXZhdGUgc3RhdGljIERFQk9VTkNFX1RJTUVfVkFMSURBVE9SX0lEID0gMDtcblxuICAvKipcbiAgICogQWRkIGEgZGVib3VuY2UgdGltZSB0byBhIHZhbGlkYXRvci5cbiAgICogQHBhcmFtIGZvcm1cbiAgICogQHBhcmFtIHZhbGlkYXRvckZuXG4gICAqIEBwYXJhbSBvcHRzIFVzZSBvcHRzLnN0b3BTdWJqZWN0IHRvIHN0b3AgdGhlIHZhbGlkYXRvciwgYmVmb3JlIGVuZFxuICAgKi9cbiAgc3RhdGljIGRlYm91bmNlVGltZSh2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NlPzogT2JzZXJ2YWJsZTxhbnk+O1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFya0ZvckNoZWNrPzogKCkgPT4gdm9pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICB9KTogT2JzZXJ2YWJsZVZhbGlkYXRvckZuIHtcblxuICAgIC8vIERFQlVHIG9ubHlcbiAgICBjb25zdCBkZWJ1ZyA9IG9wdHM/LmRlYnVnIHx8IGZhbHNlIDtcbiAgICBjb25zdCBsb2dQcmVmaXggPSBkZWJ1ZyAmJiBgW2RlYm91bmNlVGltZS12YWxpZGF0b3JdICMke1NoYXJlZEFzeW5jVmFsaWRhdG9ycy5ERUJPVU5DRV9USU1FX1ZBTElEQVRPUl9JRCsrfSAtIGA7XG4gICAgY29uc3QgZGVib3VuY2VUaW1lID0gdG9OdW1iZXIob3B0cz8uZGVib3VuY2VUaW1lLCAyNTApO1xuXG4gICAgLy8gREVCVUdcbiAgICBpZiAoZGVidWcpIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgYE5ldyB2YWxpZGF0b3Igd2l0aCBhIGRlYm91bmNlVGltZSBhdCAke2RlYm91bmNlVGltZX1tc2ApO1xuXG4gICAgY29uc3QgJGRpc3Bvc2VTdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBkaXNwb3NlRXZlbnQkID0gb3B0cz8uZGlzcG9zZVxuICAgICAgPyBtZXJnZSgkZGlzcG9zZVN1YmplY3QsIG9wdHM/LmRpc3Bvc2UpXG4gICAgICA6ICRkaXNwb3NlU3ViamVjdDtcblxuICAgIC8vIERFQlVHXG4gICAgaWYgKGRlYnVnICYmIG9wdHM/LmRpc3Bvc2UpIHtcbiAgICAgIG9wdHM/LmRpc3Bvc2UucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArICdTdG9wcGluZycpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChjb250cm9sKSA9PiB7XG4gICAgICBpZiAoZGVidWcpIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ0Zvcm0gYXNrIHZhbGlkYXRpb24uLi4nKTtcblxuICAgICAgLy8gU3RvcCBwcmV2aW91cyBvYnNlcnZhYmxlc1xuICAgICAgJGRpc3Bvc2VTdWJqZWN0Lm5leHQoKTtcbiAgICAgIGxldCBub3c6IG51bWJlcjtcblxuICAgICAgLy8gQWRkIGEgZGVsYXkgYmVmb3JlIGV4ZWN1dGlvblxuICAgICAgcmV0dXJuIHRpbWVyKGRlYm91bmNlVGltZSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgLy8gREVCVUdcbiAgICAgICAgICB0YXAoXyA9PiB7XG4gICAgICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnRXhlY3V0aW5nLi4uJyk7XG4gICAgICAgICAgICAgIG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3dpdGNoTWFwKChfKSA9PiB7XG4gICAgICAgICAgICAvLyBDYWxsIHRoZSB2YWxpZGF0b3JcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IHZhbGlkYXRvckZuKGNvbnRyb2wpO1xuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHJldHVybiBhbiBPYnNlcnZhYmxlXG4gICAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHJldHVybiByZXM7XG4gICAgICAgICAgICBpZiAocmVzIGluc3RhbmNlb2YgUHJvbWlzZSkgcmV0dXJuIGZyb20ocmVzKTtcbiAgICAgICAgICAgIHJldHVybiBvZihyZXMpO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgdGFwKHJlcyA9PiBkZWJ1ZyAmJiBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArIGBGaW5pc2hlZCBpbiAke0RhdGUubm93KCkgLSBub3d9bXMgKCR7cmVzID8gJ3dpdGggZXJyb3JzJyA6ICdubyBlcnJvcid9KWAsIHJlcykpLFxuICAgICAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW2RlYm91bmNlVGltZS12YWxpZGF0b3JdIEVycm9yIHdoaWxlIGV4ZWN1dGluZyB2YWxpZGF0b3IuIFN0b3BwaW5nIGpvYicsIGVycm9yKTtcbiAgICAgICAgICAgICRkaXNwb3NlU3ViamVjdC5uZXh0KCk7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBSZWZyZXNoIFVJLCBhZnRlciBhIHN1Y2Nlc3NmdWwgZXhlY3V0aW9uXG4gICAgICAgICAgdGFwKCgpID0+IG9wdHM/Lm1hcmtGb3JDaGVjayAmJiBvcHRzPy5tYXJrRm9yQ2hlY2soKSksXG4gICAgICAgICAgLy8gTWFrZSBzdXJlIHRvIHN0b3AsIGJlY2F1c2Ugb2YgdGhlIHN3aXRjaE1hcFxuICAgICAgICAgIHRha2VVbnRpbChkaXNwb3NlRXZlbnQkKVxuICAgICAgICApXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gYXN5bmMgdmFsaWRhdG9yLCB0aGF0IGNhbiBiZSBkaXNwb3NlZCBieSB0aGUgcmV0dXJuZWQgc3Vic2NyaXB0aW9uXG4gICAqIEBwYXJhbSBmb3JtXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JGbiB0aGUgdmFsaWRhdG9yIG9yIGpvYiB0byBleGVjdXRlXG4gICAqIEBwYXJhbSBvcHRzXG4gICAqL1xuICBzdGF0aWMgcmVnaXN0ZXJBc3luY1ZhbGlkYXRvcihmb3JtOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvckZuOiBWYWxpZGF0b3JGbiB8IEFzeW5jVmFsaWRhdG9yRm4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lPzogbnVtYmVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtGb3JDaGVjaz86ICgpID0+IHZvaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWc/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTogU3Vic2NyaXB0aW9uIHtcbiAgICBpZiAoZm9ybS5hc3luY1ZhbGlkYXRvcikgdGhyb3cgRXJyb3IoJ0Zvcm0gYWxyZWFkeSBoYXZlIGFuIGFzeW5jIHZhbGlkYXRvci4gQ2Fubm90IGNvbmZpZ3VyZSBqb2InKTtcblxuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcbiAgICBjb25zdCAkZGlzcG9zZSA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvckZuID0gU2hhcmVkQXN5bmNWYWxpZGF0b3JzLmRlYm91bmNlVGltZSh2YWxpZGF0b3JGbiwgey4uLm9wdHMsIGRlYm91bmNlVGltZSwgZGlzcG9zZTogJGRpc3Bvc2UgfSk7XG4gICAgZm9ybS5zZXRBc3luY1ZhbGlkYXRvcnMoYXN5bmNWYWxpZGF0b3JGbik7XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvLyBXaGVuIHVuc3Vic2NyaWJpbmcsIHJlbW92ZSBhc3luYyB2YWxpZGF0b3JcbiAgICBzdWJzY3JpcHRpb24uYWRkKCgpID0+IHtcbiAgICAgIC8vIENsZWFyIGFkZGVkIHZhbGlkYXRvci4gTXVzdCBiZSBkb25lIE5PVyAod2l0aG91dCBkZWxheSkgYmVjYXVzZSBnZW5lcmFsbHkgYSBuZXcgSm9iIGlzIGdpdmVuIGp1c3QgYWZ0ZXJcbiAgICAgIGZvcm0uY2xlYXJBc3luY1ZhbGlkYXRvcnMoKTtcblxuICAgICAgLy8gU3RvcCB0aGUgam9iLCB3aXRoIGEgZGVsYXkgdG8gbGV0IHRoZSBsYXN0IGV4ZWN1dGlvbiBmaW5pc2hlZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICRkaXNwb3NlLm5leHQoKTtcbiAgICAgICAgJGRpc3Bvc2UudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGRlYm91bmNlVGltZSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICB9XG59XG4iXX0=
|
|
524
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3ZhbGlkYXRvci92YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQXFGLE1BQU0sZ0JBQWdCLENBQUM7QUFDbkksT0FBTyxLQUFLLGNBQWMsTUFBTSxRQUFRLENBQUM7QUFFekMsT0FBTyxFQUFDLGdCQUFnQixFQUFFLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsWUFBWSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUM5SCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTVFLE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQztBQUU5QixXQUFXO0FBQ1gsTUFBTSxPQUFPLGdCQUFnQjtJQVluQixNQUFNLENBQUMsZUFBZSxDQUFDLFdBQW1CO1FBQ2hELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNwQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDO1FBRTVELElBQUksV0FBVyxHQUFHLENBQUM7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDhCQUE4QixXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDdEUsSUFBSSxNQUFNO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFFMUIsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsMkJBQTJCLFdBQVcsTUFBTSxDQUFDLENBQUM7UUFDbEgsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUEwQkQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFvQjtRQUNsQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUMsRUFBRTtZQUNsRCxPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO1NBQ3pCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFvQjtRQUNuQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsRUFBRTtZQUNwRCxPQUFPLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFvQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUN0QyxPQUFPLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFvQjtRQUNoQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzVCLElBQUksS0FBSyxJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUU7WUFDdkYsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBb0I7UUFDL0IsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ2xDLE9BQU8sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLENBQUM7U0FDdEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQW9CO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFDNUIsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDdEUsT0FBTyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztTQUN2QjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBb0I7UUFDakMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUM3QixPQUFPLElBQUksQ0FBQztRQUNkLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ3pDLE9BQU8sRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUM7U0FDeEI7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQStCO1FBQzNDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sQ0FBQyxPQUFvQixFQUEyQixFQUFFO1lBQ3ZELElBQUksS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDMUIsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2Qiw2Q0FBNkM7Z0JBQzdDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFlLENBQUMsRUFBRTtnQkFDcEUsT0FBTyxFQUFDLFdBQVcsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsV0FBVyxFQUFDLEVBQUUsQ0FBQzthQUN6RDtZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBb0I7UUFDbkMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUM1QixNQUFNLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDaEcsSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUU7WUFDbkQsT0FBTyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsYUFBcUIsRUFBRSxVQUFrQixFQUFFLFdBQWdDO1FBQzVGLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFO1lBQzNELE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUU7Z0JBQ2xHLG1CQUFtQjtnQkFDbkIsT0FBTyxFQUFDLFdBQVcsRUFBRSxFQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUMsRUFBQyxDQUFDO2FBQzdDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFnQixFQUFFLFVBQWtCLEVBQUUsV0FBZ0M7UUFDeEYsT0FBTyxDQUFDLE9BQXdCLEVBQTJCLEVBQUU7WUFDM0QsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFBRTtnQkFDdkYsbUJBQW1CO2dCQUNuQixPQUFPLEVBQUMsWUFBWSxFQUFFLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBQyxFQUFDLENBQUM7YUFDOUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsWUFBWSxDQUFDLGtCQUEwQixFQUFFLEdBQVk7UUFDMUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDLFdBQVcsQ0FBQztRQUMzQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUMsR0FBRyxFQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsU0FBUyxFQUFFLElBQUksRUFBQyxDQUFDO1FBQzlDLE9BQU8sQ0FBQyxPQUF3QixFQUEyQixFQUFFOztZQUMzRCxNQUFNLFlBQVksU0FBRyxPQUFPLENBQUMsTUFBTSwwQ0FBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxrQkFBa0Isc0JBQXNCLENBQUMsQ0FBQztnQkFDdkYsT0FBTyxJQUFJLENBQUM7YUFDYjtZQUNELE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4RCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakQsK0JBQStCO1lBQy9CLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxFQUFFO2dCQUNqRixPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsNEJBQTRCO1lBQzVCLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxnQkFBd0IsRUFBRSxHQUFZO1FBQzFELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQyxXQUFXLENBQUM7UUFDM0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFDLEdBQUcsRUFBQyxDQUFDLENBQUMsQ0FBQyxFQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTs7WUFDM0QsTUFBTSxjQUFjLFNBQUcsT0FBTyxDQUFDLE1BQU0sMENBQUUsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDN0QsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsZ0JBQWdCLHNCQUFzQixDQUFDLENBQUM7Z0JBQzdFLE9BQU8sSUFBSSxDQUFDO2FBQ2I7WUFDRCxNQUFNLE9BQU8sR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEQsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELCtCQUErQjtZQUMvQixJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDaEYsT0FBTyxLQUFLLENBQUM7YUFDZDtZQUNELDRCQUE0QjtZQUM1QixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFxQjtRQUMzQyxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtZQUMzRCwwQ0FBMEM7WUFDMUMsSUFBSSxPQUFPLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUVoQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBRXZELGdDQUFnQztZQUNoQyxJQUFJLENBQUMsTUFBTSxJQUFJLFlBQVksQ0FBQyxVQUFVLENBQUM7Z0JBQUUsT0FBTyxNQUFNLENBQUM7WUFFdkQsNEJBQTRCO1lBQzVCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzdDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDNUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDeEI7Z0JBQ0QsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDVCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUF3QixFQUFFLFNBQWlCO1FBQzNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMvQixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQzlCLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRTtnQkFDL0IsK0JBQStCO2dCQUMvQixJQUFJLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNuRCxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN6QjtnQkFDRCw4Q0FBOEM7cUJBQ3pDO29CQUNILE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUN6QixPQUFPLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUMzQjthQUNGO1NBQ0Y7SUFDSCxDQUFDOztBQW5PYyw4QkFBYSxHQUFHO0lBQzdCLHNCQUFzQixFQUFFO1FBQ3RCLFFBQVEsRUFBRSwyQkFBMkI7UUFDckMsQ0FBQyxFQUFFLDBCQUEwQjtRQUM3QixDQUFDLEVBQUUsK0JBQStCO1FBQ2xDLENBQUMsRUFBRSwrQkFBK0I7S0FFbkM7Q0FDRixDQUFBO0FBZ0JlLGdDQUFlLEdBQUc7SUFDaEMsUUFBUSxFQUFFLHNCQUFzQjtJQUNoQyxHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLEdBQUcsRUFBRSxpQkFBaUI7SUFDdEIsU0FBUyxFQUFDLHdCQUF3QjtJQUNsQyxTQUFTLEVBQUMsd0JBQXdCO0lBQ2xDLE1BQU0sRUFBRSw4QkFBOEI7SUFDdEMsU0FBUyxFQUFFLDRCQUE0QjtJQUN2QyxXQUFXLEVBQUUsa0NBQWtDO0lBQy9DLFlBQVksRUFBRSxtQ0FBbUM7SUFDakQsU0FBUyxFQUFFLGtDQUFrQztJQUM3QyxlQUFlLEVBQUUseUNBQXlDO0lBQzFELGVBQWUsRUFBRSx5Q0FBeUM7SUFDMUQsV0FBVyxFQUFFLDhCQUE4QjtJQUMzQyxPQUFPLEVBQUUsK0JBQStCO0lBQ3hDLEtBQUssRUFBRSw2QkFBNkI7SUFDcEMsUUFBUSxFQUFFLGdDQUFnQztJQUMxQyxTQUFTLEVBQUUsaUNBQWlDO0lBQzVDLE9BQU8sRUFBRSwrQkFBK0I7SUFDeEMsTUFBTSxFQUFFLHdCQUF3QjtJQUNoQyxNQUFNLEVBQUUscUJBQXFCO0NBQzlCLENBQUE7QUEyTEgsV0FBVztBQUNYLE1BQU0sT0FBTyx5QkFBeUI7SUFFcEMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFzQixFQUFFLFlBQW9CLEVBQUUsR0FBWTtRQUN6RSxNQUFNLFNBQVMsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBQzdELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBQyxHQUFHLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxTQUFTLEVBQUUsSUFBSSxFQUFDLENBQUM7UUFDbkQsT0FBTyxDQUFDLEtBQWdCLEVBQTJCLEVBQUU7WUFDbkQsTUFBTSxTQUFTLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRSxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxJQUFJLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDMUUsbUJBQW1CO2dCQUNuQixRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3pCLFFBQVEsQ0FBQyxTQUFTLGlDQUNiLFFBQVEsQ0FBQyxNQUFNLEdBQ2YsVUFBVSxFQUNiLENBQUM7Z0JBQ0gsd0RBQXdEO2dCQUN4RCxPQUFPLFVBQVUsQ0FBQzthQUNuQjtZQUNELDJDQUEyQztZQUMzQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxlQUFlLENBQUMsY0FBc0IsRUFBRSxZQUFvQixFQUFFLFdBQW1CLEVBQUUsWUFBcUM7UUFDN0gsTUFBTSxnQkFBZ0IsR0FBRyxFQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUMsQ0FBQztRQUNqRCxPQUFPLENBQUMsS0FBZ0IsRUFBMkIsRUFBRTtZQUNuRCxNQUFNLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFO2dCQUM3RyxtQkFBbUI7Z0JBQ25CLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztnQkFDekMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN6QixRQUFRLENBQUMsU0FBUyxpQ0FDYixRQUFRLENBQUMsTUFBTSxHQUNmLGdCQUFnQixFQUNuQixDQUFDO2dCQUNILHdEQUF3RDtnQkFDeEQsT0FBTyxnQkFBZ0IsQ0FBQzthQUN6QjtZQUNELDJDQUEyQztZQUMzQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7WUFDekQsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxjQUFzQixFQUFFLFlBQW9CLEVBQUUsV0FBbUIsRUFBRSxZQUFxQztRQUM3SCxPQUFPLENBQUMsS0FBZ0IsRUFBMkIsRUFBRTtZQUNuRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pDLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckUsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFO2dCQUM3RyxtQkFBbUI7Z0JBQ25CLE1BQU0sY0FBYyxHQUFxQixRQUFRLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztnQkFDL0QsY0FBYyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUN6QyxRQUFRLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNuQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7Z0JBQ3pDLHdEQUF3RDtnQkFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUMsQ0FBQzthQUNoQztZQUNELDJDQUEyQztpQkFDdEM7Z0JBQ0gsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFpQixFQUFFLG1CQUE2QztRQUNoRixPQUFPLENBQUMsS0FBZ0IsRUFBMkIsRUFBRTtZQUNuRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLE1BQU0sY0FBYyxHQUFHLENBQUMsbUJBQW1CLFlBQVksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDL0gsSUFBSSxDQUFDLGNBQWM7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxlQUFlLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN4RSxNQUFNLEtBQUssR0FBRyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztnQkFDL0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLFNBQWlCLEVBQUUsbUJBQTZDO1FBQ3BGLE9BQU8sQ0FBQyxLQUFnQixFQUEyQixFQUFFO1lBQ25ELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxtQkFBbUIsWUFBWSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMvSCxJQUFJLENBQUMsY0FBYztnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7WUFDdkUsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUN6RSxNQUFNLEtBQUssR0FBRyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQztnQkFDL0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDekIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO2dCQUN4QyxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNqRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQWlCLEVBQUUsbUJBQTJCO1FBQ25FLE9BQU8sQ0FBQyxLQUFnQixFQUEyQixFQUFFO1lBQ25ELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckMsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3JGLE1BQU0sS0FBSyxHQUFHLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO2dCQUMvQixPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUN6QixPQUFPLENBQUMsYUFBYSxDQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7Z0JBQ3hDLE9BQU8sS0FBSyxDQUFDO2FBQ2Q7WUFDRCxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFpQixFQUFFLG9CQUE0QixFQUFFLGdCQUFxQjtRQUM1RixPQUFPLENBQUMsS0FBZ0IsRUFBUSxFQUFFO1lBQ2hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckMsTUFBTSxrQkFBa0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDM0QsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLGtCQUFrQixDQUFDLEtBQUssS0FBSyxnQkFBZ0IsRUFBRTtnQkFDbEUsa0JBQWtCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7YUFDL0M7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBOEM7UUFDbEQsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVTthQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDO2FBQ2hCLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDO0lBQzVCLENBQUM7Q0FDRjtBQUVELFdBQVc7QUFDWCxNQUFNLE9BQU8seUJBQXlCO0lBRXBDOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsWUFBWSxDQUFDLFdBQW1CO1FBQ3JDLE9BQU8sQ0FBQyxLQUFnQixFQUEyQixFQUFFO1lBQ25ELE1BQU0sUUFBUSxHQUFzQixFQUFFLENBQUM7WUFDdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNoQiw2Q0FBNkM7Z0JBQzdDLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtvQkFDcEMsTUFBTSxTQUFTLEdBQUcsT0FBb0IsQ0FBQztvQkFDdkMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxFQUFFO3dCQUNuQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssQ0FBQzt3QkFDcEQsSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTs0QkFDdkIsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7cUJBQ2xEO2lCQUNGO2dCQUNELGtDQUFrQztnQkFDbEMsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRTtvQkFDbkQsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQzVCLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ2xDLE9BQU8sR0FBRyxDQUFDO2dCQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDUCwwQ0FBMEM7Z0JBQzFDLE1BQU0sS0FBSyxHQUFHLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDO2dCQUNuQyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7Z0JBQ3hCLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQzFELE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDakIsSUFBSSxNQUFNLEdBQXFCLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO29CQUNwRCxNQUFNLG1DQUFPLE1BQU0sR0FBSyxLQUFLLENBQUMsQ0FBQztvQkFDL0IsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDMUIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO29CQUN4QyxXQUFXLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixDQUFDLENBQUMsQ0FBQztnQkFDTCxJQUFJLFdBQVc7b0JBQ2IsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFDRCxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxTQUFrQjtRQUM5QyxTQUFTLEdBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQztRQUMzQixPQUFPLENBQUMsS0FBZ0IsRUFBMkIsRUFBRTtZQUNuRCxJQUFJLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsU0FBUyxFQUFFO2dCQUN0QyxPQUFPLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDO2FBQ3pCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsV0FBbUIsRUFBRSxHQUFXO1FBQ3RELE9BQU8sQ0FBQyxLQUFnQixFQUEyQixFQUFFO1lBQ25ELE1BQU0sUUFBUSxHQUFzQixFQUFFLENBQUM7WUFDdkMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNoQixLQUFLLE1BQU0sT0FBTyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUU7b0JBQ3BDLE1BQU0sU0FBUyxHQUFHLE9BQW9CLENBQUM7b0JBQ3ZDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTt3QkFDM0YsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7cUJBQ2hEO2lCQUNGO2dCQUNELElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRTtvQkFDbkUsTUFBTSxLQUFLLEdBQUcsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFDLENBQUM7b0JBQ2xDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQ3pCLElBQUksTUFBTSxHQUFxQixPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQzt3QkFDcEQsTUFBTSxtQ0FBTyxNQUFNLEdBQUssS0FBSyxDQUFDLENBQUM7d0JBQy9CLE9BQU8sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzFCLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztvQkFDMUMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7YUFDRjtZQUNELFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7WUFDakYsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0NBRUY7QUFLRCxXQUFXO0FBQ1gsTUFBTSxPQUFPLHFCQUFxQjtJQUloQzs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBMkMsRUFDM0MsSUFLQztRQUVuQixhQUFhO1FBQ2IsTUFBTSxLQUFLLEdBQUcsQ0FBQSxJQUFJLGFBQUosSUFBSSx1QkFBSixJQUFJLENBQUUsS0FBSyxLQUFJLEtBQUssQ0FBRTtRQUNwQyxNQUFNLFNBQVMsR0FBRyxLQUFLLElBQUksNkJBQTZCLHFCQUFxQixDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQztRQUNoSCxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUV2RCxRQUFRO1FBQ1IsSUFBSSxLQUFLO1lBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsd0NBQXdDLFlBQVksSUFBSSxDQUFDLENBQUM7UUFFL0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN0QyxNQUFNLGFBQWEsR0FBRyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLEVBQ2pDLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLENBQUM7WUFDdkMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztRQUVwQixRQUFRO1FBQ1IsSUFBSSxLQUFLLEtBQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLE9BQU8sQ0FBQSxFQUFFO1lBQzFCLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1lBQ3hDLENBQUMsRUFBRTtTQUNKO1FBRUQsT0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pCLElBQUksS0FBSztnQkFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyx3QkFBd0IsQ0FBQyxDQUFDO1lBRS9ELDRCQUE0QjtZQUM1QixlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdkIsSUFBSSxHQUFXLENBQUM7WUFFaEIsK0JBQStCO1lBQy9CLE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQztpQkFDdkIsSUFBSTtZQUNILFFBQVE7WUFDUixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ04sSUFBSSxLQUFLLEVBQUU7b0JBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDLENBQUM7b0JBQzFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7aUJBQ2xCO1lBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2QscUJBQXFCO2dCQUNyQixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLG9DQUFvQztnQkFDcEMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDO29CQUFFLE9BQU8sR0FBRyxDQUFDO2dCQUNsQyxJQUFJLEdBQUcsWUFBWSxPQUFPO29CQUFFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM3QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUM7WUFDRixRQUFRO1lBQ1IsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGVBQWUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFDOUgsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLHdFQUF3RSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUMvRixlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sS0FBSyxDQUFDO1lBQ2QsQ0FBQyxDQUFDO1lBQ0YsMkNBQTJDO1lBQzNDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFBLElBQUksYUFBSixJQUFJLHVCQUFKLElBQUksQ0FBRSxZQUFZLE1BQUksSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksR0FBRSxDQUFDO1lBQ3JELDhDQUE4QztZQUM5QyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQ3pCLENBQUE7UUFDTCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLENBQUMsc0JBQXNCLENBQUMsSUFBcUIsRUFDckIsV0FBMkMsRUFDM0MsSUFJQztRQUM3QixJQUFJLElBQUksQ0FBQyxjQUFjO1lBQUUsTUFBTSxLQUFLLENBQUMsNERBQTRELENBQUMsQ0FBQztRQUVuRyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsSUFBSSxhQUFKLElBQUksdUJBQUosSUFBSSxDQUFFLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2RCxNQUFNLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRS9CLE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDLFdBQVcsa0NBQU0sSUFBSSxLQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsUUFBUSxJQUFHLENBQUM7UUFDdEgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFMUMsTUFBTSxZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUV4Qyw2Q0FBNkM7UUFDN0MsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsMEdBQTBHO1lBQzFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBRTVCLGdFQUFnRTtZQUNoRSxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDaEIsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pCLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7O0FBaEhjLGdEQUEwQixHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRpb25FcnJvcnMsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgKiBhcyBtb21lbnRJbXBvcnRlZCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtNb21lbnQsIHVuaXRPZlRpbWV9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0RBVEVfSVNPX1BBVFRFUk4sIFBVQktFWV9SRUdFWFB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge2lzRW1wdHlBcnJheSwgaXNOaWwsIGlzTmlsT3JCbGFuaywgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgaXNOb3ROaWxPck5hTiwgdG9Cb29sZWFuLCB0b051bWJlcn0gZnJvbSAnLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7ZnJvbURhdGVJU09TdHJpbmd9IGZyb20gJy4uL2RhdGVzJztcbmltcG9ydCB7ZnJvbSwgaXNPYnNlcnZhYmxlLCBtZXJnZSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXJ9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaXJzdCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5jb25zdCBtb21lbnQgPSBtb21lbnRJbXBvcnRlZDtcblxuLy8gQGR5bmFtaWNcbmV4cG9ydCBjbGFzcyBTaGFyZWRWYWxpZGF0b3JzIHtcblxuICBwcml2YXRlIHN0YXRpYyBfUkVHRVhQX0NBQ0hFID0ge1xuICAgIERPVUJMRV9CWV9NQVhfREVDSU1BTFM6IHtcbiAgICAgIE5PX0xJTUlUOiAvXlstXT9bMC05XSsoWy4sXVswLTldKik/JC8sIC8vIE5vIG1heCBkZWNpbWFsc1xuICAgICAgMTogL15bLV0/WzAtOV0rKFsuLF1bMC05XSk/JC8sICAgICAgICAgLy8gMSBkZWNpbWFsIG1heFxuICAgICAgMjogL15bLV0/WzAtOV0rKFsuLF1bMC05XXsxLDJ9KT8kLywgICAgLy8gMiBkZWNpbWFscyBtYXhcbiAgICAgIDM6IC9eWy1dP1swLTldKyhbLixdWzAtOV17MSwyfSk/JC8sICAgICAvLyAzIGRlY2ltYWxzIG1heFxuXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0RG91YmxlUmVnZXhwKG1heERlY2ltYWxzOiBudW1iZXIpOiBSZWdFeHAge1xuICAgIGlmIChpc05pbChtYXhEZWNpbWFscykpXG4gICAgICByZXR1cm4gdGhpcy5fUkVHRVhQX0NBQ0hFLkRPVUJMRV9CWV9NQVhfREVDSU1BTFMuTk9fTElNSVQ7XG5cbiAgICBpZiAobWF4RGVjaW1hbHMgPCAwKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbWF4RGVjaW1hbHMgdmFsdWU6ICR7bWF4RGVjaW1hbHN9YCk7XG4gICAgY29uc3QgcmVnZXhwID0gdGhpcy5fUkVHRVhQX0NBQ0hFLkRPVUJMRV9CWV9NQVhfREVDSU1BTFNbbWF4RGVjaW1hbHNdO1xuICAgIGlmIChyZWdleHApIHJldHVybiByZWdleHA7XG5cbiAgICAvLyBOZXcgcmVnZXhwOiBhZGQgaXQgdG8gY2FjaGVcbiAgICB0aGlzLl9SRUdFWFBfQ0FDSEUuRE9VQkxFX0JZX01BWF9ERUNJTUFMU1ttYXhEZWNpbWFsc10gPSBuZXcgUmVnRXhwKGBeWy1dP1swLTldKyhbLixdWzAtOV17MSwke21heERlY2ltYWxzfX0pPyRgKTtcbiAgICByZXR1cm4gdGhpcy5fUkVHRVhQX0NBQ0hFLkRPVUJMRV9CWV9NQVhfREVDSU1BTFNbbWF4RGVjaW1hbHNdO1xuICB9XG5cblxuICBzdGF0aWMgcmVhZG9ubHkgSTE4Tl9FUlJPUl9LRVlTID0ge1xuICAgIHJlcXVpcmVkOiAnRVJST1IuRklFTERfUkVRVUlSRUQnLFxuICAgIG1pbjogJ0VSUk9SLkZJRUxEX01JTicsXG4gICAgbWF4OiAnRVJST1IuRklFTERfTUFYJyxcbiAgICBtaW5sZW5ndGg6J0VSUk9SLkZJRUxEX01JTl9MRU5HVEgnLFxuICAgIG1heGxlbmd0aDonRVJST1IuRklFTERfTUFYX0xFTkdUSCcsXG4gICAgcHVia2V5OiAnRVJST1IuRklFTERfTk9UX1ZBTElEX1BVQktFWScsXG4gICAgdmFsaWREYXRlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEUnLFxuICAgIGRhdGVJc0FmdGVyOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfQUZURVInLFxuICAgIGRhdGVJc0JlZm9yZTogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX0JFRk9SRScsXG4gICAgZGF0ZVJhbmdlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfUkFOR0UnLFxuICAgIGRhdGVNaW5EdXJhdGlvbjogJ0VSUk9SLkZJRUxEX05PVF9WQUxJRF9EQVRFX01JTl9EVVJBVElPTicsXG4gICAgZGF0ZU1heER1cmF0aW9uOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0RBVEVfTUFYX0RVUkFUSU9OJyxcbiAgICBtYXhEZWNpbWFsczogJ0VSUk9SLkZJRUxEX01BWElNVU1fREVDSU1BTFMnLFxuICAgIGludGVnZXI6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfSU5URUdFUicsXG4gICAgZW1haWw6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfRU1BSUwnLFxuICAgIGxhdGl0dWRlOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX0xBVElUVURFJyxcbiAgICBsb25naXR1ZGU6ICdFUlJPUi5GSUVMRF9OT1RfVkFMSURfTE9OR0lUVURFJyxcbiAgICBwYXR0ZXJuOiAnRVJST1IuRklFTERfTk9UX1ZBTElEX1BBVFRFUk4nLFxuICAgIHVuaXF1ZTogJ0VSUk9SLkZJRUxEX05PVF9VTklRVUUnLFxuICAgIGVudGl0eTogJ0VSUk9SLkZJRUxEX0lOVkFMSUQnXG4gIH1cblxuICBzdGF0aWMgbGF0aXR1ZGUoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgY29uc3QgdmFsdWUgPSBjb250cm9sLnZhbHVlO1xuICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgKHZhbHVlIDwgLTkwIHx8IHZhbHVlID4gOTApKSB7XG4gICAgICByZXR1cm4ge2xhdGl0dWRlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgbG9uZ2l0dWRlKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAoaXNOb3ROaWwodmFsdWUpICYmICh2YWx1ZSA8IC0xODAgfHwgdmFsdWUgPiAxODApKSB7XG4gICAgICByZXR1cm4ge2xvbmdpdHVkZTogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIG9iamVjdChjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB7b2JqZWN0OiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZW50aXR5KGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUuaWQgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZS5pZCA9PT0gbnVsbCkpIHtcbiAgICAgIHJldHVybiB7ZW50aXR5OiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZW1wdHkoY29udHJvbDogRm9ybUNvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgaWYgKGlzTm90TmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtlbXB0eTogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIHB1YmtleShjb250cm9sOiBGb3JtQ29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICBjb25zdCB2YWx1ZSA9IGNvbnRyb2wudmFsdWU7XG4gICAgaWYgKHZhbHVlICYmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnIHx8ICFQVUJLRVlfUkVHRVhQLnRlc3QodmFsdWUpKSkge1xuICAgICAgcmV0dXJuIHtwdWJrZXk6IHRydWV9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBpbnRlZ2VyKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGlmIChpc05pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQoY29udHJvbC52YWx1ZSk7XG4gICAgaWYgKGlzTmFOKHZhbHVlKSB8fCAodmFsdWUgfCAwKSAhPT0gdmFsdWUpIHtcbiAgICAgIHJldHVybiB7aW50ZWdlcjogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3RhdGljIGRvdWJsZShvcHRzPzogeyBtYXhEZWNpbWFscz86IG51bWJlciB9KTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IHJlZ2V4cCA9IHRoaXMuZ2V0RG91YmxlUmVnZXhwKG9wdHM/Lm1heERlY2ltYWxzKTtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgbGV0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJXQVJOOiBHZXR0aW5nIGEgTmFOIHZhbHVlICFcIik7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiB2YWx1ZSAhPT0gJycgJiYgIXJlZ2V4cC50ZXN0KHZhbHVlIGFzIHN0cmluZykpIHtcbiAgICAgICAgcmV0dXJuIHttYXhEZWNpbWFsczoge21heERlY2ltYWxzOiBvcHRzPy5tYXhEZWNpbWFsc30gfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgdmFsaWREYXRlKGNvbnRyb2w6IEZvcm1Db250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xuICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcbiAgICBjb25zdCBkYXRlID0gIXZhbHVlIHx8IG1vbWVudC5pc01vbWVudCh2YWx1ZSkgPyB2YWx1ZSA6IG1vbWVudChjb250cm9sLnZhbHVlLCBEQVRFX0lTT19QQVRURVJOKTtcbiAgICBpZiAoZGF0ZSAmJiAoIWRhdGUuaXNWYWxpZCgpIHx8IGRhdGUueWVhcigpIDwgMTk3MCkpIHtcbiAgICAgIHJldHVybiB7dmFsaWREYXRlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBzdGF0aWMgZGF0ZUlzQWZ0ZXIocHJldmlvdXNWYWx1ZTogTW9tZW50LCBlcnJvclBhcmFtOiBzdHJpbmcsIGdyYW51bGFyaXR5PzogdW5pdE9mVGltZS5TdGFydE9mKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbCh2YWx1ZSkgJiYgaXNOb3ROaWwocHJldmlvdXNWYWx1ZSkgJiYgdmFsdWUuaXNTYW1lT3JCZWZvcmUocHJldmlvdXNWYWx1ZSwgZ3JhbnVsYXJpdHkpKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3JcbiAgICAgICAgcmV0dXJuIHtkYXRlSXNBZnRlcjoge21pbkRhdGU6IGVycm9yUGFyYW19fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZGF0ZUlzQmVmb3JlKG1heFZhbHVlOiBNb21lbnQsIGVycm9yUGFyYW06IHN0cmluZywgZ3JhbnVsYXJpdHk/OiB1bml0T2ZUaW1lLlN0YXJ0T2YpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHZhbHVlKSAmJiBpc05vdE5pbChtYXhWYWx1ZSkgJiYgdmFsdWUuaXNTYW1lT3JBZnRlcihtYXhWYWx1ZSwgZ3JhbnVsYXJpdHkpKSB7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3JcbiAgICAgICAgcmV0dXJuIHtkYXRlSXNCZWZvcmU6IHttYXhEYXRlOiBlcnJvclBhcmFtfX07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVSYW5nZUVuZChzdGFydERhdGVGaWVsZE5hbWU6IHN0cmluZywgbXNnPzogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIGNvbnN0IGVycm9yQ29kZSA9IG1zZyA/ICdtc2cnOiAnZGF0ZVJhbmdlJztcbiAgICBjb25zdCBlcnJvciA9IG1zZyA/IHttc2d9IDoge2RhdGVSYW5nZTogdHJ1ZX07XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBzdGFydENvbnRyb2wgPSBjb250cm9sLnBhcmVudD8uZ2V0KHN0YXJ0RGF0ZUZpZWxkTmFtZSk7XG4gICAgICBpZiAoIXN0YXJ0Q29udHJvbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmaW5kIGJyb3RoZXIgY29udHJvbCAnJHtzdGFydERhdGVGaWVsZE5hbWV9JyBpbiB0aGUgcGFyZW50IGZvcm1gKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhzdGFydENvbnRyb2wudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGNvbnRyb2wudmFsdWUpO1xuICAgICAgLy8gRXJyb3IgaWYgdmFsdWUgPD0gYmVmb3JlRGF0ZVxuICAgICAgaWYgKGlzTm90TmlsKGVuZERhdGUpICYmIGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgZW5kRGF0ZS5pc1NhbWVPckJlZm9yZShzdGFydERhdGUpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiBjbGVhciBleGlzdGluZyBlcnJvcnNcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBkYXRlUmFuZ2VTdGFydChlbmREYXRlRmllbGROYW1lOiBzdHJpbmcsIG1zZz86IHN0cmluZyk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBlcnJvckNvZGUgPSBtc2cgPyAnbXNnJzogJ2RhdGVSYW5nZSc7XG4gICAgY29uc3QgZXJyb3IgPSBtc2cgPyB7bXNnfSA6IHtkYXRlUmFuZ2U6IHRydWV9O1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgZW5kRGF0ZUNvbnRyb2wgPSBjb250cm9sLnBhcmVudD8uZ2V0KGVuZERhdGVGaWVsZE5hbWUpO1xuICAgICAgaWYgKCFlbmREYXRlQ29udHJvbCkge1xuICAgICAgICBjb25zb2xlLndhcm4oYENhbm5vdCBmaW5kIGNvbnRyb2wgJyR7ZW5kRGF0ZUZpZWxkTmFtZX0nIGluIHRoZSBwYXJlbnQgZm9ybWApO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmREYXRlQ29udHJvbC52YWx1ZSk7XG4gICAgICBjb25zdCBzdGFydERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhjb250cm9sLnZhbHVlKTtcbiAgICAgIC8vIEVycm9yIGlmIHZhbHVlIDw9IGJlZm9yZURhdGVcbiAgICAgIGlmIChpc05vdE5pbChzdGFydERhdGUpICYmIGlzTm90TmlsKGVuZERhdGUpICYmIHN0YXJ0RGF0ZS5pc1NhbWVPckFmdGVyKGVuZERhdGUpKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIC8vIE9LOiBjbGVhciBleGlzdGluZyBlcnJvcnNcbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCBlcnJvckNvZGUpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjb3B5UGFyZW50RXJyb3JzKGVycm9yTmFtZXM/OiBzdHJpbmdbXSk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIC8vIFNraXAgaWYgY29udHJvbCBhbHJlYWR5IGhhcyBzb21lIGVycm9yc1xuICAgICAgaWYgKGNvbnRyb2wuZXJyb3JzKSByZXR1cm4gbnVsbDtcblxuICAgICAgY29uc3QgZXJyb3JzID0gY29udHJvbC5wYXJlbnQgJiYgY29udHJvbC5wYXJlbnQuZXJyb3JzO1xuXG4gICAgICAvLyBObyBlcnJvcnMsIG9yIGNvcHkgYWxsIGVycm9yc1xuICAgICAgaWYgKCFlcnJvcnMgfHwgaXNFbXB0eUFycmF5KGVycm9yTmFtZXMpKSByZXR1cm4gZXJyb3JzO1xuXG4gICAgICAvLyBDb3B5IG9ubHkgZXhwZWN0ZWQgZXJyb3JzXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZXJyb3JzKS5yZWR1Y2UoKHJlcywga2V5KSA9PiB7XG4gICAgICAgIGlmIChlcnJvck5hbWVzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICByZXNba2V5XSA9IGVycm9yc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9LCB7fSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBjbGVhckVycm9yKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwgZXJyb3JDb2RlOiBzdHJpbmcpIHtcbiAgICBpZiAoY29udHJvbC5oYXNFcnJvcihlcnJvckNvZGUpKSB7XG4gICAgICBjb25zdCBlcnJvcnMgPSBjb250cm9sLmVycm9ycztcbiAgICAgIGlmIChlcnJvcnMgJiYgZXJyb3JzW2Vycm9yQ29kZV0pIHtcbiAgICAgICAgLy8gT25seSBvbmUgZXJyb3I6IHJlc2V0IGVycm9yc1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoZXJyb3JzKS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPdGhlciBlcnJvcnMgZXhpc3RzOiBqdXN0IHJlbW92ZSB0aGlzIGVycm9yXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZSBlcnJvcnNbZXJyb3JDb2RlXTtcbiAgICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEZvcm1Hcm91cFZhbGlkYXRvcnMge1xuXG4gIHN0YXRpYyBkYXRlUmFuZ2Uoc3RhcnREYXRlRmllbGQ6IHN0cmluZywgZW5kRGF0ZUZpZWxkOiBzdHJpbmcsIG1zZz86IHN0cmluZyApOiBWYWxpZGF0b3JGbiB7XG4gICAgY29uc3QgZXJyb3JDb2RlID0gaXNOb3ROaWxPckJsYW5rKG1zZykgPyAnbXNnJyA6ICdkYXRlUmFuZ2UnO1xuICAgIGNvbnN0IHJhbmdlRXJyb3IgPSBtc2cgPyB7bXNnfSA6IHtkYXRlUmFuZ2U6IHRydWV9O1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGdyb3VwLmdldChzdGFydERhdGVGaWVsZCkudmFsdWUpO1xuICAgICAgY29uc3QgZW5kRmllbGQgPSBncm91cC5nZXQoZW5kRGF0ZUZpZWxkKTtcbiAgICAgIGNvbnN0IGVuZERhdGUgPSBmcm9tRGF0ZUlTT1N0cmluZyhlbmRGaWVsZC52YWx1ZSk7XG4gICAgICBpZiAoaXNOb3ROaWwoc3RhcnREYXRlKSAmJiBpc05vdE5pbChlbmREYXRlKSAmJiBzdGFydERhdGUuaXNBZnRlcihlbmREYXRlKSkge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGVuZEZpZWxkLm1hcmtBc1BlbmRpbmcoKTtcbiAgICAgICAgZW5kRmllbGQuc2V0RXJyb3JzKHtcbiAgICAgICAgICAuLi5lbmRGaWVsZC5lcnJvcnMsXG4gICAgICAgICAgLi4ucmFuZ2VFcnJvclxuICAgICAgICB9KTtcbiAgICAgICAgLy8gUmV0dXJuIHRoZSBlcnJvciAoc2hvdWxkIGJlIGFwcGx5IHRvIHRoZSBwYXJlbnQgZm9ybSlcbiAgICAgICAgcmV0dXJuIHJhbmdlRXJyb3I7XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoZW5kRmllbGQsIGVycm9yQ29kZSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVNYXhEdXJhdGlvbihzdGFydERhdGVGaWVsZDogc3RyaW5nLCBlbmREYXRlRmllbGQ6IHN0cmluZywgbWF4RHVyYXRpb246IG51bWJlciwgZHVyYXRpb25Vbml0PzogbW9tZW50LnVuaXRPZlRpbWUuRGlmZik6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCBtYXhEdXJhdGlvbkVycm9yID0ge2RhdGVNYXhEdXJhdGlvbjogdHJ1ZX07XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZ3JvdXAuZ2V0KHN0YXJ0RGF0ZUZpZWxkKS52YWx1ZSk7XG4gICAgICBjb25zdCBlbmRGaWVsZCA9IGdyb3VwLmdldChlbmREYXRlRmllbGQpO1xuICAgICAgY29uc3QgZW5kRGF0ZSA9IGZyb21EYXRlSVNPU3RyaW5nKGVuZEZpZWxkLnZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbChzdGFydERhdGUpICYmIGlzTm90TmlsKGVuZERhdGUpICYmIE1hdGguYWJzKHN0YXJ0RGF0ZS5kaWZmKGVuZERhdGUsIGR1cmF0aW9uVW5pdCkpID4gbWF4RHVyYXRpb24pIHtcbiAgICAgICAgLy8gVXBkYXRlIGVuZCBmaWVsZFxuICAgICAgICBlbmRGaWVsZC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICBlbmRGaWVsZC5tYXJrQXNQZW5kaW5nKCk7XG4gICAgICAgIGVuZEZpZWxkLnNldEVycm9ycyh7XG4gICAgICAgICAgLi4uZW5kRmllbGQuZXJyb3JzLFxuICAgICAgICAgIC4uLm1heER1cmF0aW9uRXJyb3JcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgKHNob3VsZCBiZSBhcHBseSB0byB0aGUgcGFyZW50IGZvcm0pXG4gICAgICAgIHJldHVybiBtYXhEdXJhdGlvbkVycm9yO1xuICAgICAgfVxuICAgICAgLy8gT0s6IHJlbW92ZSB0aGUgZXhpc3Rpbmcgb24gdGhlIGVuZCBmaWVsZFxuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGVuZEZpZWxkLCAnZGF0ZU1heER1cmF0aW9uJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIGRhdGVNaW5EdXJhdGlvbihzdGFydERhdGVGaWVsZDogc3RyaW5nLCBlbmREYXRlRmllbGQ6IHN0cmluZywgbWluRHVyYXRpb246IG51bWJlciwgZHVyYXRpb25Vbml0PzogbW9tZW50LnVuaXRPZlRpbWUuRGlmZik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBlbmRGaWVsZCA9IGdyb3VwLmdldChlbmREYXRlRmllbGQpO1xuICAgICAgY29uc3Qgc3RhcnREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZ3JvdXAuZ2V0KHN0YXJ0RGF0ZUZpZWxkKS52YWx1ZSk7XG4gICAgICBjb25zdCBlbmREYXRlID0gZnJvbURhdGVJU09TdHJpbmcoZW5kRmllbGQudmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHN0YXJ0RGF0ZSkgJiYgaXNOb3ROaWwoZW5kRGF0ZSkgJiYgTWF0aC5hYnMoc3RhcnREYXRlLmRpZmYoZW5kRGF0ZSwgZHVyYXRpb25Vbml0KSkgPCBtaW5EdXJhdGlvbikge1xuICAgICAgICAvLyBVcGRhdGUgZW5kIGZpZWxkXG4gICAgICAgIGNvbnN0IGVuZEZpZWxkRXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gZW5kRmllbGQuZXJyb3JzIHx8IHt9O1xuICAgICAgICBlbmRGaWVsZEVycm9yc1snZGF0ZU1pbkR1cmF0aW9uJ10gPSB0cnVlO1xuICAgICAgICBlbmRGaWVsZC5zZXRFcnJvcnMoZW5kRmllbGRFcnJvcnMpO1xuICAgICAgICBlbmRGaWVsZC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICAvLyBSZXR1cm4gdGhlIGVycm9yIChzaG91bGQgYmUgYXBwbHkgdG8gdGhlIHBhcmVudCBmb3JtKVxuICAgICAgICByZXR1cm4ge2RhdGVNaW5EdXJhdGlvbjogdHJ1ZX07XG4gICAgICB9XG4gICAgICAvLyBPSzogcmVtb3ZlIHRoZSBleGlzdGluZyBvbiB0aGUgZW5kIGZpZWxkXG4gICAgICBlbHNlIHtcbiAgICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGVuZEZpZWxkLCAnZGF0ZU1pbkR1cmF0aW9uJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkSWYoZmllbGROYW1lOiBzdHJpbmcsIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyB8IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBhbm90aGVyQ29udHJvbCA9IChhbm90aGVyRmllbGRUb0NoZWNrIGluc3RhbmNlb2YgQWJzdHJhY3RDb250cm9sKSA/IGFub3RoZXJGaWVsZFRvQ2hlY2sgOiBncm91cC5nZXQoYW5vdGhlckZpZWxkVG9DaGVjayk7XG4gICAgICBpZiAoIWFub3RoZXJDb250cm9sKSB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGZpZWxkIHRvIGNoZWNrIScpO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSAmJiBpc05vdE5pbE9yQmxhbmsoYW5vdGhlckNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3IpO1xuICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIFNoYXJlZFZhbGlkYXRvcnMuY2xlYXJFcnJvcihjb250cm9sLCAncmVxdWlyZWQnKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRJZlRydWUoZmllbGROYW1lOiBzdHJpbmcsIGFub3RoZXJGaWVsZFRvQ2hlY2s6IHN0cmluZyB8IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gKGdyb3VwOiBGb3JtR3JvdXApOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBhbm90aGVyQ29udHJvbCA9IChhbm90aGVyRmllbGRUb0NoZWNrIGluc3RhbmNlb2YgQWJzdHJhY3RDb250cm9sKSA/IGFub3RoZXJGaWVsZFRvQ2hlY2sgOiBncm91cC5nZXQoYW5vdGhlckZpZWxkVG9DaGVjayk7XG4gICAgICBpZiAoIWFub3RoZXJDb250cm9sKSB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBmaW5kIGZpZWxkIHRvIGNoZWNrIScpO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayhjb250cm9sLnZhbHVlKSAmJiB0b0Jvb2xlYW4oYW5vdGhlckNvbnRyb2wudmFsdWUsIGZhbHNlKSkge1xuICAgICAgICBjb25zdCBlcnJvciA9IHtyZXF1aXJlZDogdHJ1ZX07XG4gICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9yKTtcbiAgICAgICAgY29udHJvbC5tYXJrQXNUb3VjaGVkKHtvbmx5U2VsZjogdHJ1ZX0pO1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3JlcXVpcmVkJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgc3RhdGljIHJlcXVpcmVkSWZFbXB0eShmaWVsZE5hbWU6IHN0cmluZywgYW5vdGhlckZpZWxkVG9DaGVjazogc3RyaW5nKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoZ3JvdXA6IEZvcm1Hcm91cCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBncm91cC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGlmIChpc05pbE9yQmxhbmsoY29udHJvbC52YWx1ZSkgJiYgaXNOaWxPckJsYW5rKGdyb3VwLmdldChhbm90aGVyRmllbGRUb0NoZWNrKS52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSB7cmVxdWlyZWQ6IHRydWV9O1xuICAgICAgICBjb250cm9sLnNldEVycm9ycyhlcnJvcik7XG4gICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgfVxuICAgICAgU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICdyZXF1aXJlZCcpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBwcm9wYWdhdGVJZkRpcnR5KGZpZWxkTmFtZTogc3RyaW5nLCBmaWVsZE5hbWVUb1Byb3BhZ2F0ZTogc3RyaW5nLCB2YWx1ZVRvUHJvcGFnYXRlOiBhbnkpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChncm91cDogRm9ybUdyb3VwKTogbnVsbCA9PiB7XG4gICAgICBjb25zdCBjb250cm9sID0gZ3JvdXAuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBjb250cm9sVG9Qcm9wYWdhdGUgPSBncm91cC5nZXQoZmllbGROYW1lVG9Qcm9wYWdhdGUpO1xuICAgICAgaWYgKGNvbnRyb2wuZGlydHkgJiYgY29udHJvbFRvUHJvcGFnYXRlLnZhbHVlICE9PSB2YWx1ZVRvUHJvcGFnYXRlKSB7XG4gICAgICAgIGNvbnRyb2xUb1Byb3BhZ2F0ZS5zZXRWYWx1ZSh2YWx1ZVRvUHJvcGFnYXRlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2FtZSBhcyBjb21wb3NlLCBidXQga2VlcCBvbmx5IHRoZSBmaXJzdCBlcnJvcnMgKGluc3RlYWQgb2YgdGhlIHVuaW9uKVxuICAgKiBAcGFyYW0gdmFsaWRhdG9yc1xuICAgKi9cbiAgZmlyc3QodmFsaWRhdG9yczogKFZhbGlkYXRvckZuIHwgbnVsbCB8IHVuZGVmaW5lZClbXSk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gKGNvbnRyb2wpID0+IHZhbGlkYXRvcnNcbiAgICAgIC5maWx0ZXIoaXNOb3ROaWwpXG4gICAgICAubWFwKHZhbGlkYXRvciA9PiB2YWxpZGF0b3IoY29udHJvbCkpXG4gICAgICAuZmluZChpc05vdE5pbCkgfHwgbnVsbDtcbiAgfVxufVxuXG4vLyBAZHluYW1pY1xuZXhwb3J0IGNsYXNzIFNoYXJlZEZvcm1BcnJheVZhbGlkYXRvcnMge1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB1bmlxdWVuZXNzIG9mIGFuIGVudGl0eSBpbiBhIEZvcm1BcnJheVxuICAgKlxuICAgKiBAcGFyYW0gY29udHJvbE5hbWUgdGhlIG5hbWUgb2YgdGhlIGNvbnRyb2wgaW4gRm9ybUFycmF5XG4gICAqL1xuICBzdGF0aWMgdW5pcXVlRW50aXR5KGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChhcnJheTogRm9ybUFycmF5KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdID0gW107XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIC8vIGdhdGhlciBjb250cm9scyBpbiBhcnJheSB3aXRoIHZhbGlkIGVudGl0eVxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgYXJyYXkuY29udHJvbHMpIHtcbiAgICAgICAgICBjb25zdCBmcm9tR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcbiAgICAgICAgICBpZiAoZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdLnZhbHVlO1xuICAgICAgICAgICAgaWYgKCEhdmFsdWUgJiYgISF2YWx1ZS5pZClcbiAgICAgICAgICAgICAgY29udHJvbHMucHVzaChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IG9jY3VycmVuY2VzIG9mIGVudGl0eSBieSBpZFxuICAgICAgICBjb25zdCBvY2N1cnJlbmNlcyA9IGNvbnRyb2xzLnJlZHVjZSgoYWNjLCBjb250cm9sKSA9PiB7XG4gICAgICAgICAgY29uc3QgaWQgPSBjb250cm9sLnZhbHVlLmlkO1xuICAgICAgICAgIGFjY1tpZF0gPyBhY2NbaWRdKysgOiBhY2NbaWRdID0gMTtcbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIC8vIGdldCBjb250cm9scyB3aXRoIHZhbHVlIG9jY3VycmVuY2VzID4gMVxuICAgICAgICBjb25zdCBlcnJvciA9IHt1bmlxdWVFbnRpdHk6IHRydWV9O1xuICAgICAgICBsZXQgcmV0dXJuRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29udHJvbHMuZmlsdGVyKGNvbnRyb2wgPT4gb2NjdXJyZW5jZXNbY29udHJvbC52YWx1ZS5pZF0gPiAxKVxuICAgICAgICAgIC5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgICAgICAgbGV0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IGNvbnRyb2wuZXJyb3JzIHx8IHt9O1xuICAgICAgICAgICAgZXJyb3JzID0gey4uLmVycm9ycywgLi4uZXJyb3J9O1xuICAgICAgICAgICAgY29udHJvbC5zZXRFcnJvcnMoZXJyb3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCh7b25seVNlbGY6IHRydWV9KTtcbiAgICAgICAgICAgIHJldHVybkVycm9yID0gdHJ1ZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJldHVybkVycm9yKVxuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIGNvbnRyb2xzLmZvckVhY2goY29udHJvbCA9PiBTaGFyZWRWYWxpZGF0b3JzLmNsZWFyRXJyb3IoY29udHJvbCwgJ3VuaXF1ZUVudGl0eScpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzdGF0aWMgcmVxdWlyZWRBcnJheU1pbkxlbmd0aChtaW5MZW5ndGg/OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgbWluTGVuZ3RoID0gbWluTGVuZ3RoIHx8IDE7XG4gICAgcmV0dXJuIChhcnJheTogRm9ybUFycmF5KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgaWYgKCFhcnJheSB8fCBhcnJheS5sZW5ndGggPCBtaW5MZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHtyZXF1aXJlZDogdHJ1ZX07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHRoZSBzdW0gb2YgY29udHJvbCB2YWx1ZXMgaW4gYW4gRm9ybUFycmF5IG5vdCBvdmVyZmxvdyB0aGUgbWF4IHZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSBjb250cm9sTmFtZSB0aGUgbmFtZSBvZiB0aGUgY29udHJvbCBpbiBGb3JtQXJyYXlcbiAgICogQHBhcmFtIG1heCB0aGUgbWF4aW11bSB2YWx1ZVxuICAgKi9cbiAgc3RhdGljIHZhbGlkU3VtTWF4VmFsdWUoY29udHJvbE5hbWU6IHN0cmluZywgbWF4OiBudW1iZXIpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChhcnJheTogRm9ybUFycmF5KTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgY29uc3QgY29udHJvbHM6IEFic3RyYWN0Q29udHJvbFtdID0gW107XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiBhcnJheS5jb250cm9scykge1xuICAgICAgICAgIGNvbnN0IGZyb21Hcm91cCA9IGNvbnRyb2wgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgIGlmIChmcm9tR3JvdXAuY29udHJvbHNbY29udHJvbE5hbWVdICYmIGlzTm90TmlsT3JOYU4oZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXS52YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xzLnB1c2goZnJvbUdyb3VwLmNvbnRyb2xzW2NvbnRyb2xOYW1lXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9scy5yZWR1Y2UoKHN1bSwgY29udHJvbCkgPT4gc3VtICsgY29udHJvbC52YWx1ZSwgMCkgPiBtYXgpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHtzdW1NYXhWYWx1ZTogdHJ1ZX07XG4gICAgICAgICAgY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgICAgICAgIGxldCBlcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgPSBjb250cm9sLmVycm9ycyB8fCB7fTtcbiAgICAgICAgICAgIGVycm9ycyA9IHsuLi5lcnJvcnMsIC4uLmVycm9yfTtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3JzKGVycm9ycyk7XG4gICAgICAgICAgICBjb250cm9sLm1hcmtBc1RvdWNoZWQoe29ubHlTZWxmOiB0cnVlfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4gU2hhcmVkVmFsaWRhdG9ycy5jbGVhckVycm9yKGNvbnRyb2wsICdzdW1NYXhWYWx1ZScpKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxufVxuXG5leHBvcnQgZGVjbGFyZSB0eXBlIE9ic2VydmFibGVWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+XG5leHBvcnQgZGVjbGFyZSB0eXBlIFByb21pc2VWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+XG5cbi8vIEBkeW5hbWljXG5leHBvcnQgY2xhc3MgU2hhcmVkQXN5bmNWYWxpZGF0b3JzIHtcblxuICBwcml2YXRlIHN0YXRpYyBERUJPVU5DRV9USU1FX1ZBTElEQVRPUl9JRCA9IDA7XG5cbiAgLyoqXG4gICAqIEFkZCBhIGRlYm91bmNlIHRpbWUgdG8gYSB2YWxpZGF0b3IuXG4gICAqIEBwYXJhbSBmb3JtXG4gICAqIEBwYXJhbSB2YWxpZGF0b3JGblxuICAgKiBAcGFyYW0gb3B0cyBVc2Ugb3B0cy5zdG9wU3ViamVjdCB0byBzdG9wIHRoZSB2YWxpZGF0b3IsIGJlZm9yZSBlbmRcbiAgICovXG4gIHN0YXRpYyBkZWJvdW5jZVRpbWUodmFsaWRhdG9yRm46IFZhbGlkYXRvckZuIHwgQXN5bmNWYWxpZGF0b3JGbixcbiAgICAgICAgICAgICAgICAgICAgICBvcHRzPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zZT86IE9ic2VydmFibGU8YW55PjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtGb3JDaGVjaz86ICgpID0+IHZvaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgfSk6IE9ic2VydmFibGVWYWxpZGF0b3JGbiB7XG5cbiAgICAvLyBERUJVRyBvbmx5XG4gICAgY29uc3QgZGVidWcgPSBvcHRzPy5kZWJ1ZyB8fCBmYWxzZSA7XG4gICAgY29uc3QgbG9nUHJlZml4ID0gZGVidWcgJiYgYFtkZWJvdW5jZVRpbWUtdmFsaWRhdG9yXSAjJHtTaGFyZWRBc3luY1ZhbGlkYXRvcnMuREVCT1VOQ0VfVElNRV9WQUxJREFUT1JfSUQrK30gLSBgO1xuICAgIGNvbnN0IGRlYm91bmNlVGltZSA9IHRvTnVtYmVyKG9wdHM/LmRlYm91bmNlVGltZSwgMjUwKTtcblxuICAgIC8vIERFQlVHXG4gICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArIGBOZXcgdmFsaWRhdG9yIHdpdGggYSBkZWJvdW5jZVRpbWUgYXQgJHtkZWJvdW5jZVRpbWV9bXNgKTtcblxuICAgIGNvbnN0ICRkaXNwb3NlU3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgY29uc3QgZGlzcG9zZUV2ZW50JCA9IG9wdHM/LmRpc3Bvc2VcbiAgICAgID8gbWVyZ2UoJGRpc3Bvc2VTdWJqZWN0LCBvcHRzPy5kaXNwb3NlKVxuICAgICAgOiAkZGlzcG9zZVN1YmplY3Q7XG5cbiAgICAvLyBERUJVR1xuICAgIGlmIChkZWJ1ZyAmJiBvcHRzPy5kaXNwb3NlKSB7XG4gICAgICBvcHRzPy5kaXNwb3NlLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyAnU3RvcHBpbmcnKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiAoY29udHJvbCkgPT4ge1xuICAgICAgaWYgKGRlYnVnKSBjb25zb2xlLmRlYnVnKGxvZ1ByZWZpeCArICdGb3JtIGFzayB2YWxpZGF0aW9uLi4uJyk7XG5cbiAgICAgIC8vIFN0b3AgcHJldmlvdXMgb2JzZXJ2YWJsZXNcbiAgICAgICRkaXNwb3NlU3ViamVjdC5uZXh0KCk7XG4gICAgICBsZXQgbm93OiBudW1iZXI7XG5cbiAgICAgIC8vIEFkZCBhIGRlbGF5IGJlZm9yZSBleGVjdXRpb25cbiAgICAgIHJldHVybiB0aW1lcihkZWJvdW5jZVRpbWUpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vIERFQlVHXG4gICAgICAgICAgdGFwKF8gPT4ge1xuICAgICAgICAgICAgaWYgKGRlYnVnKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcobG9nUHJlZml4ICsgJ0V4ZWN1dGluZy4uLicpO1xuICAgICAgICAgICAgICBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN3aXRjaE1hcCgoXykgPT4ge1xuICAgICAgICAgICAgLy8gQ2FsbCB0aGUgdmFsaWRhdG9yXG4gICAgICAgICAgICBjb25zdCByZXMgPSB2YWxpZGF0b3JGbihjb250cm9sKTtcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byByZXR1cm4gYW4gT2JzZXJ2YWJsZVxuICAgICAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSByZXR1cm4gcmVzO1xuICAgICAgICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIFByb21pc2UpIHJldHVybiBmcm9tKHJlcyk7XG4gICAgICAgICAgICByZXR1cm4gb2YocmVzKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAvLyBERUJVR1xuICAgICAgICAgIHRhcChyZXMgPT4gZGVidWcgJiYgY29uc29sZS5kZWJ1Zyhsb2dQcmVmaXggKyBgRmluaXNoZWQgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zICgke3JlcyA/ICd3aXRoIGVycm9ycycgOiAnbm8gZXJyb3InfSlgLCByZXMpKSxcbiAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tkZWJvdW5jZVRpbWUtdmFsaWRhdG9yXSBFcnJvciB3aGlsZSBleGVjdXRpbmcgdmFsaWRhdG9yLiBTdG9wcGluZyBqb2InLCBlcnJvcik7XG4gICAgICAgICAgICAkZGlzcG9zZVN1YmplY3QubmV4dCgpO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gUmVmcmVzaCBVSSwgYWZ0ZXIgYSBzdWNjZXNzZnVsIGV4ZWN1dGlvblxuICAgICAgICAgIHRhcCgoKSA9PiBvcHRzPy5tYXJrRm9yQ2hlY2sgJiYgb3B0cz8ubWFya0ZvckNoZWNrKCkpLFxuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0byBzdG9wLCBiZWNhdXNlIG9mIHRoZSBzd2l0Y2hNYXBcbiAgICAgICAgICB0YWtlVW50aWwoZGlzcG9zZUV2ZW50JClcbiAgICAgICAgKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGFzeW5jIHZhbGlkYXRvciwgdGhhdCBjYW4gYmUgZGlzcG9zZWQgYnkgdGhlIHJldHVybmVkIHN1YnNjcmlwdGlvblxuICAgKiBAcGFyYW0gZm9ybVxuICAgKiBAcGFyYW0gdmFsaWRhdG9yRm4gdGhlIHZhbGlkYXRvciBvciBqb2IgdG8gZXhlY3V0ZVxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgc3RhdGljIHJlZ2lzdGVyQXN5bmNWYWxpZGF0b3IoZm9ybTogQWJzdHJhY3RDb250cm9sLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0b3JGbjogVmFsaWRhdG9yRm4gfCBBc3luY1ZhbGlkYXRvckZuLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZT86IG51bWJlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrRm9yQ2hlY2s/OiAoKSA9PiB2b2lkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk6IFN1YnNjcmlwdGlvbiB7XG4gICAgaWYgKGZvcm0uYXN5bmNWYWxpZGF0b3IpIHRocm93IEVycm9yKCdGb3JtIGFscmVhZHkgaGF2ZSBhbiBhc3luYyB2YWxpZGF0b3IuIENhbm5vdCBjb25maWd1cmUgam9iJyk7XG5cbiAgICBjb25zdCBkZWJvdW5jZVRpbWUgPSB0b051bWJlcihvcHRzPy5kZWJvdW5jZVRpbWUsIDI1MCk7XG4gICAgY29uc3QgJGRpc3Bvc2UgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgYXN5bmNWYWxpZGF0b3JGbiA9IFNoYXJlZEFzeW5jVmFsaWRhdG9ycy5kZWJvdW5jZVRpbWUodmFsaWRhdG9yRm4sIHsuLi5vcHRzLCBkZWJvdW5jZVRpbWUsIGRpc3Bvc2U6ICRkaXNwb3NlIH0pO1xuICAgIGZvcm0uc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9yRm4pO1xuXG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLy8gV2hlbiB1bnN1YnNjcmliaW5nLCByZW1vdmUgYXN5bmMgdmFsaWRhdG9yXG4gICAgc3Vic2NyaXB0aW9uLmFkZCgoKSA9PiB7XG4gICAgICAvLyBDbGVhciBhZGRlZCB2YWxpZGF0b3IuIE11c3QgYmUgZG9uZSBOT1cgKHdpdGhvdXQgZGVsYXkpIGJlY2F1c2UgZ2VuZXJhbGx5IGEgbmV3IEpvYiBpcyBnaXZlbiBqdXN0IGFmdGVyXG4gICAgICBmb3JtLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XG5cbiAgICAgIC8vIFN0b3AgdGhlIGpvYiwgd2l0aCBhIGRlbGF5IHRvIGxldCB0aGUgbGFzdCBleGVjdXRpb24gZmluaXNoZWRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAkZGlzcG9zZS5uZXh0KCk7XG4gICAgICAgICRkaXNwb3NlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBkZWJvdW5jZVRpbWUpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgfVxufVxuIl19
|
|
@@ -9,10 +9,11 @@ export { AccountValidatorService as ɵe } from './src/app/core/services/validato
|
|
|
9
9
|
export { LocalSettingsValidatorService as ɵh } from './src/app/core/services/validator/local-settings.validator';
|
|
10
10
|
export { UserSettingsValidatorService as ɵg } from './src/app/core/services/validator/user-settings.validator';
|
|
11
11
|
export { isFocusableElement as ɵc } from './src/app/shared/focusable';
|
|
12
|
-
export { MatBadgeIconTestPage as
|
|
12
|
+
export { MatBadgeIconTestPage as ɵl } from './src/app/shared/material/badge/badge-icon.test';
|
|
13
|
+
export { DateTestPage as ɵj } from './src/app/shared/material/datetime/testing/mat-date.test';
|
|
13
14
|
export { MatNumpadDomService as ɵb } from './src/app/shared/material/numpad/numpad.dom-service';
|
|
14
|
-
export { NumpadTestPage as
|
|
15
|
+
export { NumpadTestPage as ɵk } from './src/app/shared/material/numpad/testing/numpad.test';
|
|
15
16
|
export { CustomReuseStrategy as ɵa } from './src/app/shared/shared-routing.module';
|
|
16
|
-
export { ToastTestingPage as
|
|
17
|
-
export { ToastTestingModule as
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
export { ToastTestingPage as ɵn } from './src/app/shared/toast/toast.testing';
|
|
18
|
+
export { ToastTestingModule as ɵm } from './src/app/shared/toast/toast.testing.module';
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VtYXJpcy1uZXQubmd4LWNvbXBvbmVudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zdW1hcmlzLW5ldC5uZ3gtY29tcG9uZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDO0FBRTdCLE9BQU8sRUFBQyxnQkFBZ0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBQyxhQUFhLElBQUksRUFBRSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDakYsT0FBTyxFQUFDLHVCQUF1QixJQUFJLEVBQUUsRUFBQyxNQUFNLHFEQUFxRCxDQUFDO0FBQ2xHLE9BQU8sRUFBQyw2QkFBNkIsSUFBSSxFQUFFLEVBQUMsTUFBTSw0REFBNEQsQ0FBQztBQUMvRyxPQUFPLEVBQUMsNEJBQTRCLElBQUksRUFBRSxFQUFDLE1BQU0sMkRBQTJELENBQUM7QUFDN0csT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxvQkFBb0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUMzRixPQUFPLEVBQUMsWUFBWSxJQUFJLEVBQUUsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQzVGLE9BQU8sRUFBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUMsTUFBTSxxREFBcUQsQ0FBQztBQUM5RixPQUFPLEVBQUMsY0FBYyxJQUFJLEVBQUUsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxtQkFBbUIsSUFBSSxFQUFFLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQUMsZ0JBQWdCLElBQUksRUFBRSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDNUUsT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLDZDQUE2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpY19hcGknO1xuXG5leHBvcnQge0FwcEljb25Db21wb25lbnQgYXMgybVpfSBmcm9tICcuL3NyYy9hcHAvY29yZS9pY29uL2ljb24uY29tcG9uZW50JztcbmV4cG9ydCB7UmVnaXN0ZXJGb3JtIGFzIMm1ZH0gZnJvbSAnLi9zcmMvYXBwL2NvcmUvcmVnaXN0ZXIvZm9ybS9mb3JtLXJlZ2lzdGVyJztcbmV4cG9ydCB7UmVnaXN0ZXJNb2RhbCBhcyDJtWZ9IGZyb20gJy4vc3JjL2FwcC9jb3JlL3JlZ2lzdGVyL21vZGFsL21vZGFsLXJlZ2lzdGVyJztcbmV4cG9ydCB7QWNjb3VudFZhbGlkYXRvclNlcnZpY2UgYXMgybVlfSBmcm9tICcuL3NyYy9hcHAvY29yZS9zZXJ2aWNlcy92YWxpZGF0b3IvYWNjb3VudC52YWxpZGF0b3InO1xuZXhwb3J0IHtMb2NhbFNldHRpbmdzVmFsaWRhdG9yU2VydmljZSBhcyDJtWh9IGZyb20gJy4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL3ZhbGlkYXRvci9sb2NhbC1zZXR0aW5ncy52YWxpZGF0b3InO1xuZXhwb3J0IHtVc2VyU2V0dGluZ3NWYWxpZGF0b3JTZXJ2aWNlIGFzIMm1Z30gZnJvbSAnLi9zcmMvYXBwL2NvcmUvc2VydmljZXMvdmFsaWRhdG9yL3VzZXItc2V0dGluZ3MudmFsaWRhdG9yJztcbmV4cG9ydCB7aXNGb2N1c2FibGVFbGVtZW50IGFzIMm1Y30gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9mb2N1c2FibGUnO1xuZXhwb3J0IHtNYXRCYWRnZUljb25UZXN0UGFnZSBhcyDJtWx9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvbWF0ZXJpYWwvYmFkZ2UvYmFkZ2UtaWNvbi50ZXN0JztcbmV4cG9ydCB7RGF0ZVRlc3RQYWdlIGFzIMm1an0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kYXRldGltZS90ZXN0aW5nL21hdC1kYXRlLnRlc3QnO1xuZXhwb3J0IHtNYXROdW1wYWREb21TZXJ2aWNlIGFzIMm1Yn0gZnJvbSAnLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9udW1wYWQvbnVtcGFkLmRvbS1zZXJ2aWNlJztcbmV4cG9ydCB7TnVtcGFkVGVzdFBhZ2UgYXMgybVrfSBmcm9tICcuL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL251bXBhZC90ZXN0aW5nL251bXBhZC50ZXN0JztcbmV4cG9ydCB7Q3VzdG9tUmV1c2VTdHJhdGVneSBhcyDJtWF9IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvc2hhcmVkLXJvdXRpbmcubW9kdWxlJztcbmV4cG9ydCB7VG9hc3RUZXN0aW5nUGFnZSBhcyDJtW59IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdG9hc3QvdG9hc3QudGVzdGluZyc7XG5leHBvcnQge1RvYXN0VGVzdGluZ01vZHVsZSBhcyDJtW19IGZyb20gJy4vc3JjL2FwcC9zaGFyZWQvdG9hc3QvdG9hc3QudGVzdGluZy5tb2R1bGUnOyJdfQ==
|