tnx-shared 5.0.53 → 5.0.55
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/tnx-shared.umd.js +38 -13
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/form-schema.d.ts +1 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/crud/crud-form/crud-form.component.js +4 -1
- package/esm2015/components/crud/crud-list/crud-list.component.js +3 -3
- package/esm2015/models/grid-info.js +1 -1
- package/esm2015/services/crud.service.js +22 -4
- package/esm2015/services/notifier.service.js +2 -2
- package/fesm2015/tnx-shared.js +28 -6
- package/fesm2015/tnx-shared.js.map +1 -1
- package/models/grid-info.d.ts +1 -0
- package/models/grid-info.d.ts.map +1 -1
- package/package.json +2 -2
- package/services/crud.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -1127,6 +1127,9 @@ export class CrudFormComponent extends ComponentBase {
|
|
|
1127
1127
|
if (eventType == 'hide') {
|
|
1128
1128
|
yield this.handleFieldValueChange(control, event, 'change', parentModel, parentPath, sourceNode, bubble);
|
|
1129
1129
|
}
|
|
1130
|
+
else if (control.bindingFilters && eventType == 'change') {
|
|
1131
|
+
yield this.handleFieldValueChange(control, event, 'change', parentModel, parentPath, sourceNode, bubble);
|
|
1132
|
+
}
|
|
1130
1133
|
}
|
|
1131
1134
|
else {
|
|
1132
1135
|
yield this.handleFieldValueChange(control, event, eventType, parentModel, parentPath, sourceNode, bubble);
|
|
@@ -2152,4 +2155,4 @@ export class ControlTreeNode {
|
|
|
2152
2155
|
}
|
|
2153
2156
|
}
|
|
2154
2157
|
}
|
|
2155
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2NydWQvY3J1ZC1mb3JtL2NydWQtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDWSxTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFDNUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUNwRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUUsK0JBQStCLEVBQ2hGLG1CQUFtQixFQUFFLHFCQUFxQixFQUMxQyx5QkFBeUIsRUFBRSx3QkFBd0IsRUFDbkQsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUsZUFBZSxFQUFF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QyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRTtZQUNsQixTQUFTLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRTtZQUM1QyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ2xGO1FBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25EO1FBRUQsS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3RCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQWMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztZQUN4RSxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNuRDtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0ICogYXMgalF1ZXJ5XyBmcm9tICdqcXVlcnknO1xyXG5pbXBvcnQgKiBhcyBuYW5vaWRfIGZyb20gJ25hbm9pZCc7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9jb250ZXh0bWVudSc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBLZXlGbGFzaFNob3cgfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7XHJcbiAgICBBZGRyZXNzQ29udHJvbFNjaGVtYSwgQXV0b0NvbXBsZXRlQ29udHJvbFNjaGVtYSwgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSxcclxuICAgIEJ1dHRvbkNvbnRyb2xTY2hlbWEsIENoZWNrYm94Q29udHJvbFNjaGVtYSxcclxuICAgIENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWEsIENvQ2F1VG9DaHVjQ29udHJvbFNjaGVtYSxcclxuICAgIENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYSwgQ29sb3JDb250cm9sU2NoZW1hLCBDb2xvclBpY2tlckNvbnRyb2xTY2hlbWEsIENvbmdWaWVjUGlja2VyQ29udHJvbFNjaGVtYSwgQ29udGFpbmVyU2NoZW1hLCBDcnVkRm9ybVNldHRpbmcsXHJcbiAgICBEYXRlVGltZUNvbnRyb2xTY2hlbWEsIERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hLCBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIEVkaXRvckNvbnRyb2xTY2hlbWEsIEVudGl0eVBpY2tlckNvbnRyb2xTY2hlbWEsXHJcbiAgICBFdmVudERhdGEsIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSwgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEsXHJcbiAgICBGaWxlVXBsb2FkTW9kZSxcclxuICAgIEZvcm1Db250cm9sQmFzZSwgRm9ybVNjaGVtYUJhc2UsXHJcbiAgICBLZXlWYWx1ZUNvbnRyb2xTY2hlbWEsIExhYmVsU2NoZW1hLCBNYXNrQ29udHJvbFNjaGVtYSwgTnVtYmVyUmFuZ2VDb250cm9sU2NoZW1hLCBPcGVyYXRvciwgT3JnYW5pemF0aW9uUGlja2VyQ29udHJvbFNjaGVtYSxcclxuICAgIFBvcHVwU2l6ZSxcclxuICAgIFJhZGlvQnV0dG9uTGlzdENvbnRyb2xTY2hlbWEsIFNwYW5Db250cm9sU2NoZW1hLCBTd2l0Y2hDb250cm9sU2NoZW1hLCBUYWJsZVNjaGVtYSwgVGVtcGxhdGVDb250cm9sU2NoZW1hLCBUZXh0QXJlYUNvbnRyb2xTY2hlbWEsIFRleHRDb250cm9sU2NoZW1hLFxyXG4gICAgVGl0bGVTY2hlbWEsIFVzZXJQaWNrZXJDb250cm9sU2NoZW1hLCBWYW5CYW5QaWNrZXJDb250cm9sU2NoZW1hLCBXcmFwUGlja2VyQ29udHJvbFNjaGVtYVxyXG59IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eVBpY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9lbnRpdHktcGlja2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4uLy4uL2Ryb3Bkb3duL3NlcnZpY2VzL2Ryb3Bkb3duLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBiYXNlVHJpbmhLeSB9IGZyb20gJy4uL3V0aWxzJztcclxuaW1wb3J0IHsgR21haWxDb3JyZWN0b3IsIExvd2VyQ29ycmVjdG9yIH0gZnJvbSAnLi8uLi8uLi8uLi9jbGFzc2VzL2Jhc2UvY29ycmVjdG9ycyc7XHJcbmltcG9ydCB7IENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yLCBDaGVja0R1cGxpY2F0ZVZhbGlkYXRvciwgQ29tcGFyZVZhbGlkYXRvciwgRGF0ZUNvbXBhcmVWYWxpZGF0b3IsIEVtYWlsVmFsaWRhdG9yLCBOdW1iZXJDb21wYXJlVmFsaWRhdG9yLCBOdW1iZXJPbmx5VmFsaWRhdG9yLCBQaG9uZU51bWJlclZhbGlkYXRvciwgUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3IsIFJlcXVpcmVkVmFsaWRhdG9yLCBTYW1lVmFsdWVWYWxpZGF0b3IgfSBmcm9tICcuLy4uLy4uLy4uL2NsYXNzZXMvYmFzZS92YWxpZGF0b3JzJztcclxuaW1wb3J0IHsgaXNBcnJheSwgaXNMaXRlcmFsT2JqZWN0LCBtZXJnZUpTT04sIG1lcmdlSlNPTk9sZCB9IGZyb20gJy4vLi4vLi4vLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLy4uLy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tICcuLy4uLy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuXHJcbi8vIGZpeCBmb3IgYnVpbGQgcHJvZFxyXG5jb25zdCBuYW5vaWQgPSBuYW5vaWRfO1xyXG5jb25zdCBqUXVlcnkgPSBqUXVlcnlfO1xyXG5cclxuZGVjbGFyZSB2YXIgdGlueW1jZTogYW55O1xyXG5cclxuY29uc3Qgb3BlcmF0b3JDb250cmFzdCA9IHtcclxuICAgIFtPcGVyYXRvci5ncmVhdGVyXTogT3BlcmF0b3IubG93ZXIsXHJcbiAgICBbT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbF06IE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLFxyXG4gICAgW09wZXJhdG9yLmxvd2VyXTogT3BlcmF0b3IuZ3JlYXRlcixcclxuICAgIFtPcGVyYXRvci5sb3dlclRoYW5FcXVhbF06IE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdjcnVkLWZvcm0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NydWQtZm9ybS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jcnVkLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW0NvbXBvbmVudENvbnRleHRTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3J1ZEZvcm1Db21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gICAgQFZpZXdDaGlsZCgnZm9ybUVsZW1lbnQnKSBmb3JtRWxlbWVudDogRWxlbWVudFJlZjtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcclxuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVSZWYpIGNoaWxkcmVuOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gICAgQElucHV0KCkgc2V0dGluZzogQ3J1ZEZvcm1TZXR0aW5nID0gbmV3IENydWRGb3JtU2V0dGluZygpO1xyXG4gICAgQElucHV0KCkgY29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XHJcblxyXG4gICAgQElucHV0KCkgZmlsZXNVcGxvYWRlZCA9IFtdO1xyXG4gICAgQElucHV0KCkgaXNWaWV3TW9kZSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZUtleXByZXNzQ29udHJvbCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZUNhY2hpbmcgPSBmYWxzZTtcclxuICAgIF9zdHlsZUNsYXNzID0gJ3AtZmx1aWQnO1xyXG4gICAgQElucHV0KCkgc2V0IHN0eWxlQ2xhc3ModmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3N0eWxlQ2xhc3MgPSAncC1mbHVpZCc7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3R5bGVDbGFzcyArPSBgICR7dmFsdWV9YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBmb3JtSWQgPSAnJztcclxuICAgIEBJbnB1dCgpIGZvcm1DbGFzcyA9ICcnO1xyXG4gICAgQElucHV0KCkgYXV0b0ZvY3VzID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHRyYXBGb2N1cyA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBzZXQgZGF0YSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jYW5QcmludCA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLl9taW5pbWl6ZWREYXRhICE9IHZhbHVlICYmIGlzTGl0ZXJhbE9iamVjdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbW9kZWxEYXRhID0gbWVyZ2VKU09OKHRoaXMuX21vZGVsRGF0YSwgdmFsdWUpO1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFuKCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLnNldHRpbmcuc2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRDb250cm9sTW9kZWwodGhpcy5fbW9kZWxEYXRhLCBjb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yb290Tm9kZSA9IG5ldyBDb250cm9sVHJlZU5vZGUodGhpcy5fbW9kZWxEYXRhLCB0aGlzLmZvcm1Db250cm9scyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlLnNldENydWRGb3JtKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0aGlzLl9yb290Tm9kZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ21vZGVsQ2hhbmdlZCcsXHJcbiAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlZC5lbWl0KGV2ZW50KTtcclxuICAgICAgICAgICAgdGhpcy5fbWluaW1pemVkRGF0YSA9IHRoaXMuZ2V0TWluaW1pemVEYXRhKHRoaXMuX21vZGVsRGF0YSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMubG9hZGVkRGF0YUVkaXRPbGQgJiYgdGhpcy5sb2FkZWREYXRhRWRpdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5QcmludCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQ2FuUHJpbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21vZGVsRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5zZXR0aW5nLnNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbE1vZGVsKHRoaXMuX21vZGVsRGF0YSwgY29udHJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5fcm9vdE5vZGUgPSBuZXcgQ29udHJvbFRyZWVOb2RlKHRoaXMuX21vZGVsRGF0YSwgdGhpcy5mb3JtQ29udHJvbHMpO1xyXG4gICAgICAgICAgICB0aGlzLl9yb290Tm9kZS5zZXRDcnVkRm9ybSh0aGlzKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5fcm9vdE5vZGUsXHJcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6ICdtb2RlbENoYW5nZWQnLFxyXG4gICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZWQuZW1pdChldmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9yb290Tm9kZSA9IG5ldyBDb250cm9sVHJlZU5vZGUodGhpcy5fbW9kZWxEYXRhLCB0aGlzLmZvcm1Db250cm9scyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlLnNldENydWRGb3JtKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgQE91dHB1dCgpIG9uRm9ybVJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Db250cm9sUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkFsbENvbnRyb2xSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uTW9kZWxDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgZGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RXZlbnREYXRhPiA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnREYXRhPigpO1xyXG4gICAgQE91dHB1dCgpIG9uQWZ0ZXJUcmluaEt5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gICAgX3Jvb3ROb2RlOiBDb250cm9sVHJlZU5vZGU7XHJcbiAgICBfbWluaW1pemVkRGF0YTogYW55O1xyXG4gICAgX21vZGVsRGF0YTogYW55ID0ge307XHJcbiAgICBfdW5zdWJzY3JpYmVBbGwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICBfaW5WYWxpZEZvcm0gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBEb2MgdHUgY2F1IGhpbmggdGhhbSBzbyBoZSB0aG9uZ1xyXG4gICAgbGltaXRTaXplID0gMDtcclxuICAgIGZvcm1Db250cm9sczogYW55ID0gW107XHJcbiAgICBmdW5jQ2hlY2tVbmlxdWVGaWVsZDogYW55ID0ge307XHJcbiAgICBiZWZvcmVEYXRhOiBhbnkgPSB7fTtcclxuICAgIGZpcnN0RGl2SG9sZGVyOiBhbnk7XHJcbiAgICBjYWNoZWRWYWx1ZXMgPSB7fTtcclxuICAgIHRlbXBsYXRlczogeyBba2V5OiBzdHJpbmddOiBUZW1wbGF0ZVJlZjxhbnk+IH0gPSB7fTtcclxuICAgIF9wcmVmaXhDdXN0b21IZWFkZXIgPSAnY3VzdG9tSGVhZGVyXyc7XHJcblxyXG4gICAgbG9hZGVkRGF0YUVkaXRPbGQgPSBmYWxzZTtcclxuICAgIGxvYWRlZERhdGFFZGl0ID0gZmFsc2U7XHJcbiAgICBjYW5QcmludCA9IGZhbHNlO1xyXG5cclxuICAgIHRhYmxlRm9ybVNob3cgPSBmYWxzZTtcclxuICAgIHRhYmxlRm9ybVRpdGxlOiBzdHJpbmc7XHJcbiAgICB0YWJsZUZvcm1Qb3B1cFNpemUgPSBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDExMDAsIGhlaWdodDogNjUwIH0pO1xyXG4gICAgdGFibGVGb3JtRGF0YTogYW55ID0ge307XHJcbiAgICB0YWJsZUZvcm1DdXJyZW50Um93OiBudW1iZXI7XHJcbiAgICB0YWJsZUZvcm1TY2hlbWE6IEZvcm1TY2hlbWFCYXNlW10gPSBbXTtcclxuICAgIHRhYmxlRm9ybUN1cnJlbnRJbmZvOiBhbnkgPSB7fTtcclxuXHJcbiAgICBidXR0b25Db250ZXh0czogTWVudUl0ZW1bXSA9IFtdO1xyXG4gICAgcm93RGF0YUN1cnJlbnQ6IGFueSA9IHt9O1xyXG4gICAgY29udHJvbE5lZWRDaGVja1JlYWR5OiBGb3JtU2NoZW1hQmFzZVtdID0gW107XHJcbiAgICByZWFkeVN0YXR1czogYW55ID0ge307XHJcbiAgICBmaWVsZFBhcmVudEZpZWxkID0gJ3BhcmVudEZpZWxkJztcclxuICAgIHdhaXRSZWFkeUFuZFByaW50VGltZW91dDogYW55O1xyXG5cclxuICAgIHB1YmxpYyBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2U7XHJcbiAgICBwdWJsaWMgX21hc3RlckRhdGFTZXJ2aWNlOiBNYXN0ZXJEYXRhU2VydmljZTtcclxuICAgIHB1YmxpYyBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHB1YmxpYyBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgICAgIHB1YmxpYyBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfZHJvcGRvd25TZXJ2aWNlOiBEcm9wZG93blNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9zYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgICAgICBwdWJsaWMgX2VudGl0eVBpY2tlclNlcnZpY2U6IEVudGl0eVBpY2tlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnOiBNb2R1bGVDb25maWdTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX21hc3RlckRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1hc3RlckRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl91c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XHJcblxyXG4gICAgICAgIC8vIEdldCBDb25maWd1cmF0aW9uU3lzdGVtXHJcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UuZ2V0Q29uZmlnQnlDb2RlKCdTaXplT2ZGaWxlJykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saW1pdFNpemUgPSBOdW1iZXIocmVzcG9uc2UpICogMTAwMCAqIDEwMDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5UcmluaEt5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5zY2hlbWEucHVzaChcclxuICAgICAgICAgICAgICAgIG5ldyBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdwcmludEZpbGVJZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdGaWxlJyxcclxuICAgICAgICAgICAgICAgICAgICBtb2RlOiBGaWxlVXBsb2FkTW9kZS51c2luZ0ZpbGVJbnN0YW5jZUlkLFxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbkNoZWNrOiAobW9kZWwsIGN1cnJlbnROb2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhbW9kZWwucHJpbnRGaWxlSWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdExvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2hWaWV3TW9kZShyZWFkb25seVZpZXcgPSB0cnVlKSB7XHJcbiAgICAgICAgdGhpcy5pc1ZpZXdNb2RlID0gcmVhZG9ubHlWaWV3O1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZCgpIHtcclxuICAgICAgICB0aGlzLmluaXRMb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYW4oKSB7XHJcbiAgICAgICAgdGhpcy5jbGVhbk1vZGVsKHRoaXMuX21vZGVsRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbGVhbk1vZGVsKG1vZGVsKSB7XHJcbiAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdChtb2RlbCkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gJ19zdGF0dXMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzIGluIG1vZGVsW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxba2V5XVtzXSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ID09ICdfZXJyb3JzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgcyBpbiBtb2RlbFtrZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsW2tleV1bc10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFuTW9kZWwobW9kZWxba2V5XSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheShtb2RlbCkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFuTW9kZWwoaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNaW5pbWl6ZURhdGEobW9kZWwpIHtcclxuICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KG1vZGVsKSkge1xyXG4gICAgICAgICAgICBpZiAobW9kZWwuX2Ryb3Bkb3dudmFsdWUgIT0gbnVsbCAmJiBtb2RlbC5fZHJvcGRvd252YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbFttb2RlbC5fZHJvcGRvd252YWx1ZV0gfHwgbW9kZWxbJ3ZhbHVlJ107XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gJ19zdGF0dXMnICYmIGtleSAhPSAnX2Vycm9ycycgJiYga2V5ICE9ICdfc291cmNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRNaW5pbWl6ZURhdGEobW9kZWxba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KG1vZGVsKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldE1pbmltaXplRGF0YShpdGVtKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbW9kZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdExvYWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuc2NoZW1hKSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zY2hlbWEubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgLy8gdGjhu7FjIGhp4buHbiBzYXUgY8O5bmcga2hpIG1vZGVsIMSRw6MgaW5pdCB4b25nIHbDoCBjw6FjIHPhu7Ega2nhu4duIGFkZCByb3cgdGjhu7FjIGhp4buHbiB4b25nXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZm9ybUV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRoaXMuX3Jvb3ROb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ2Zvcm1SZWFkeScsXHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkZvcm1SZWFkeS5lbWl0KGZvcm1FdmVudCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmluaXRTY2hlbWEoKTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUNhY2hpbmcgJiYgIXRoaXMuX21vZGVsRGF0YS5pZCkgdGhpcy5hcHBseUNhY2hlZFZhbHVlcygpO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YURlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgLy8gdGjhu7FjIGhp4buHbiBzYXUgY8O5bmcga2hpIG1vZGVsIMSRw6MgaW5pdCB4b25nIHbDoCBjw6FjIHPhu7Ega2nhu4duIGFkZCByb3cgdGjhu7FjIGhp4buHbiB4b25nXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZvcm1FdmVudCA9IG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRoaXMuX3Jvb3ROb2RlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnZm9ybVJlYWR5JyxcclxuICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm9uRm9ybVJlYWR5LmVtaXQoZm9ybUV2ZW50KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRTY2hlbWEoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuc2V0dGluZy5zY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbFNjaGVtYShjb250cm9sKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLnNldHRpbmcuc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xNb2RlbCh0aGlzLl9tb2RlbERhdGEsIGNvbnRyb2wpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRWYWxpZGF0b3JBbmRDb3JyZWN0b3IoY29udHJvbCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEJpbmRpbmdDb250cm9sU2NoZW1hKGNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fcm9vdE5vZGUgPSBuZXcgQ29udHJvbFRyZWVOb2RlKHRoaXMuX21vZGVsRGF0YSwgdGhpcy5mb3JtQ29udHJvbHMpO1xyXG4gICAgICAgIHRoaXMuX3Jvb3ROb2RlLnNldENydWRGb3JtKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdENvbnRyb2xNb2RlbChwYXJlbnRNb2RlbCwgY29udHJvbCwgcGFyZW50UGF0aD8pIHtcclxuICAgICAgICB0aGlzLmluaXRQcml2YXRlRGF0YShwYXJlbnRNb2RlbCwgY29udHJvbC5maWVsZCk7XHJcblxyXG4gICAgICAgIGxldCBfcGFyZW50UGF0aCA9IGNvbnRyb2wuZmllbGQ7XHJcbiAgICAgICAgaWYgKHBhcmVudFBhdGggIT0gbnVsbCkgX3BhcmVudFBhdGggPSBwYXJlbnRQYXRoICsgJy4nICsgX3BhcmVudFBhdGg7XHJcblxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKCFwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSB8fCAhKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZE1vcmUgPSBjb250cm9sLmluaXRSb3dDb3VudCAtIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGFkZE1vcmUgPiAwICYmICFwYXJlbnRNb2RlbC5fc3RhdHVzW2NvbnRyb2wuZmllbGRdLnJlYWR5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fc3RhdHVzW2NvbnRyb2wuZmllbGRdLnJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIC8vIHRo4buxYyBoaeG7h24gc2F1IGPDuW5nIGtoaSB04bqldCBj4bqjIG1vZGVsIMSRw6MgaW5pdCB4b25nXHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE11bHRpUm93KGNvbnRyb2wsIGFkZE1vcmUsIF9wYXJlbnRQYXRoLCAnaW5pdCcpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbE1vZGVsKGl0ZW0sIHN1YkNvbnRyb2wsIF9wYXJlbnRQYXRoICsgJ1snICsgaSArICddJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbnRhaW5lclNjaGVtYSkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPT0gbnVsbCB8fCAhaXNMaXRlcmFsT2JqZWN0KHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xNb2RlbChwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSwgc3ViQ29udHJvbCwgX3BhcmVudFBhdGgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVsc2Uge1xyXG4gICAgICAgIC8vICAgICAvLyBpZiAoIXBhcmVudE1vZGVsLmhhc093blByb3BlcnR5KGNvbnRyb2wuZmllbGQpICYmIGNvbnRyb2wuZmllbGQgIT0gbnVsbCkge1xyXG4gICAgICAgIC8vICAgICAvLyAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBjb250cm9sLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAvLyAgICAgLy8gfVxyXG4gICAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0Q29udHJvbERlZmF1bHRWYWx1ZUZyb21FeHRlcm5hbCgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5zZXR0aW5nLnNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRDb250cm9sRGVmYXVsdFZhbHVlKHRoaXMuX21vZGVsRGF0YSwgY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdENvbnRyb2xEZWZhdWx0VmFsdWUocGFyZW50TW9kZWwsIGNvbnRyb2wsIHBhcmVudFBhdGg/KSB7XHJcbiAgICAgICAgdGhpcy5pbml0UHJpdmF0ZURhdGEocGFyZW50TW9kZWwsIGNvbnRyb2wuZmllbGQpO1xyXG5cclxuICAgICAgICBsZXQgX3BhcmVudFBhdGggPSBjb250cm9sLmZpZWxkO1xyXG4gICAgICAgIGlmIChwYXJlbnRQYXRoICE9IG51bGwpIF9wYXJlbnRQYXRoID0gcGFyZW50UGF0aCArICcuJyArIF9wYXJlbnRQYXRoO1xyXG5cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGlmICghcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gfHwgIShwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSBpbnN0YW5jZW9mIEFycmF5KSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBbXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhZGRNb3JlID0gY29udHJvbC5pbml0Um93Q291bnQgLSBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXS5sZW5ndGg7XHJcbiAgICAgICAgICAgIGlmIChhZGRNb3JlID4gMCAmJiAhcGFyZW50TW9kZWwuX3N0YXR1c1tjb250cm9sLmZpZWxkXS5yZWFkeSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWwuX3N0YXR1c1tjb250cm9sLmZpZWxkXS5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbERlZmF1bHRWYWx1ZShpdGVtLCBzdWJDb250cm9sLCBfcGFyZW50UGF0aCArICdbJyArIGkgKyAnXScpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaSsrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb250YWluZXJTY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID09IG51bGwgfHwgIWlzTGl0ZXJhbE9iamVjdChwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0ge307XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRDb250cm9sRGVmYXVsdFZhbHVlKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdLCBzdWJDb250cm9sLCBfcGFyZW50UGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghcGFyZW50TW9kZWwuaGFzT3duUHJvcGVydHkoY29udHJvbC5maWVsZCkgJiYgY29udHJvbC5maWVsZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5kZWZhdWx0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IGNvbnRyb2wuZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmF1dG9EaXNwbGF5Rmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29udHJvbC5fY29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbnRyb2wuX2NvbXBvbmVudC5faGFzTG9hZGVkRGF0YXNvdXJjZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBjb250cm9sLl9jb21wb25lbnQuZGF0YVNvdXJjZUludGVybmFsLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSBjb250cm9sLl9jb21wb25lbnQuZGF0YVNvdXJjZUludGVybmFsWzBdLnZhbHVlW2NvbnRyb2wudmFsdWVGaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFByaXZhdGVEYXRhKHBhcmVudE1vZGVsLCBmaWVsZCkge1xyXG4gICAgICAgIGlmICghcGFyZW50TW9kZWwuX3NvdXJjZSkgcGFyZW50TW9kZWwuX3NvdXJjZSA9IHt9O1xyXG5cclxuICAgICAgICBpZiAoIXBhcmVudE1vZGVsLl9zdGF0dXMpIHBhcmVudE1vZGVsLl9zdGF0dXMgPSB7fTtcclxuICAgICAgICBpZiAoIXBhcmVudE1vZGVsLl9lcnJvcnMpIHBhcmVudE1vZGVsLl9lcnJvcnMgPSB7fTtcclxuXHJcbiAgICAgICAgaWYgKCFwYXJlbnRNb2RlbC5fc3RhdHVzW2ZpZWxkXSkgcGFyZW50TW9kZWwuX3N0YXR1c1tmaWVsZF0gPSB7fTtcclxuICAgICAgICBpZiAoIXBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdKSBwYXJlbnRNb2RlbC5fZXJyb3JzW2ZpZWxkXSA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdENvbnRyb2xTY2hlbWEoc2NoZW1hOiBGb3JtU2NoZW1hQmFzZSwgcGFyZW50SWQ/KSB7XHJcbiAgICAgICAgaWYgKHNjaGVtYS5kaXNhYmxlZCAhPSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5kaXNhYmxlZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmlzVmlld01vZGUpIHtcclxuICAgICAgICAgICAgc2NoZW1hLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5sYWJlbCAmJiAhc2NoZW1hLmZ1bGxMYWJlbCkge1xyXG4gICAgICAgICAgICBzY2hlbWEuZnVsbExhYmVsID0gc2NoZW1hLmxhYmVsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFRpdGxlU2NoZW1hXHJcbiAgICAgICAgICAgIHx8IHNjaGVtYSBpbnN0YW5jZW9mIExhYmVsU2NoZW1hXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGlmICghc2NoZW1hLmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWEuZmllbGQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNjaGVtYS5maWVsZCkge1xyXG4gICAgICAgICAgICBsZXQga2V5ID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgICAgICBpZiAocGFyZW50SWQgIT0gbnVsbCkga2V5ID0gcGFyZW50SWQgKyAnLicgKyBrZXk7XHJcbiAgICAgICAgICAgIHNjaGVtYS51bmlxdWVGaWVsZCA9IGtleTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtQ29udHJvbHNba2V5XSA9IHNjaGVtYTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjaGVtYVsnY29udHJvbFR5cGUnXSA9IHRoaXMuZ2V0Q29udHJvbFR5cGUoc2NoZW1hKTtcclxuICAgICAgICBzY2hlbWFbJ2RhdGFUeXBlJ10gPSB0aGlzLmdldFZpZXdNb2RlRGF0YVR5cGUoc2NoZW1hKTtcclxuXHJcbiAgICAgICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSA8VGFibGVTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5yb3dUZW1wbGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgc3ViQ29udHJvbFt0aGlzLmZpZWxkUGFyZW50RmllbGRdID0gY29udHJvbC51bmlxdWVGaWVsZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xTY2hlbWEoc3ViQ29udHJvbCwgc2NoZW1hLnVuaXF1ZUZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25Db250cm9sU2NoZW1hID0gPERyb3Bkb3duQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgIGRyb3Bkb3duQ29udHJvbFNjaGVtYS5yZXR1cm5UeXBlID0gJ29iamVjdCc7XHJcbiAgICAgICAgICAgIGRyb3Bkb3duQ29udHJvbFNjaGVtYS5maXJlQ2FsbEJhY2tJbnNpZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFkcm9wZG93bkNvbnRyb2xTY2hlbWEuYmluZGluZ0ZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duQ29udHJvbFNjaGVtYS5sb2FkT25Jbml0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNEZXNrdG9wKCkpIHtcclxuICAgICAgICAgICAgICAgIGRyb3Bkb3duQ29udHJvbFNjaGVtYS5maWx0ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTmVlZENoZWNrUmVhZHkucHVzaChzY2hlbWEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBVc2VyUGlja2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyUGlja2VyQ29udHJvbFNjaGVtYSA9IDxEcm9wZG93bkNvbnRyb2xTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICB1c2VyUGlja2VyQ29udHJvbFNjaGVtYS5yZXR1cm5UeXBlID0gJ29iamVjdCc7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE5lZWRDaGVja1JlYWR5LnB1c2goc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ29udGFpbmVyU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSA8Q29udGFpbmVyU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgICAgIHN1YkNvbnRyb2xbdGhpcy5maWVsZFBhcmVudEZpZWxkXSA9IGNvbnRyb2wudW5pcXVlRmllbGQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRDb250cm9sU2NoZW1hKHN1YkNvbnRyb2wsIGNvbnRyb2wudW5pcXVlRmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlQ29udHJvbFNjaGVtYSA9IDxBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlQ29udHJvbFNjaGVtYS5yZXR1cm5UeXBlID0gJ29iamVjdCc7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbE5lZWRDaGVja1JlYWR5LnB1c2goc2NoZW1hKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQWRkcmVzc0NvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTmVlZENoZWNrUmVhZHkucHVzaChzY2hlbWEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBSYWRpb0J1dHRvbkxpc3RDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5maXJlQ2FsbEJhY2tJbnNpZGUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0QmluZGluZ0NvbnRyb2xTY2hlbWEoc2NoZW1hOiBhbnkpIHtcclxuICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IDxUYWJsZVNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRCaW5kaW5nQ29udHJvbFNjaGVtYShzdWJDb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25Db250cm9sU2NoZW1hID0gPERyb3Bkb3duQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgIGlmIChkcm9wZG93bkNvbnRyb2xTY2hlbWEuYmluZGluZ0ZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZE9uQ2hhbmdlVG9Ecm9wZG93bihkcm9wZG93bkNvbnRyb2xTY2hlbWEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgZHJvcGRvd25Db250cm9sU2NoZW1hID0gPEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICBpZiAoZHJvcGRvd25Db250cm9sU2NoZW1hLmJpbmRpbmdGaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRPbkNoYW5nZVRvRHJvcGRvd24oZHJvcGRvd25Db250cm9sU2NoZW1hKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDb250YWluZXJTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IDxDb250YWluZXJTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5jb250cm9scykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0QmluZGluZ0NvbnRyb2xTY2hlbWEoc3ViQ29udHJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBiaW5kT25DaGFuZ2VUb0Ryb3Bkb3duKGRyb3Bkb3duQ29udHJvbFNjaGVtYTogRHJvcGRvd25Db250cm9sU2NoZW1hIHwgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgIGxldCB0bXBGaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRyb3Bkb3duQ29udHJvbFNjaGVtYS5iaW5kaW5nRmlsdGVycykpIHtcclxuICAgICAgICAgICAgdG1wRmlsdGVycyA9IGRyb3Bkb3duQ29udHJvbFNjaGVtYS5iaW5kaW5nRmlsdGVycztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIChkcm9wZG93bkNvbnRyb2xTY2hlbWEuYmluZGluZ0ZpbHRlcnMpID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgdG1wRmlsdGVycyA9IGRyb3Bkb3duQ29udHJvbFNjaGVtYS5iaW5kaW5nRmlsdGVycygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdG1wRmlsdGVycyA9IGF3YWl0IGRyb3Bkb3duQ29udHJvbFNjaGVtYS5iaW5kaW5nRmlsdGVycztcclxuICAgICAgICB9XHJcbiAgICAgICAgdG1wRmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUZpZWxkID0gZmlsdGVyLnNvdXJjZUZpZWxkO1xyXG4gICAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0aGlzLnNldHRpbmcuc2NoZW1hLmZpbmQocSA9PiBxLmZpZWxkID09IHNvdXJjZUZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKCFmaWx0ZXIuc3ViRmllbGRcclxuICAgICAgICAgICAgICAgICYmIChzY2hlbWEgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEgfHwgc2NoZW1hIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkpIHtcclxuICAgICAgICAgICAgICAgIGZpbHRlci5zdWJGaWVsZCA9IHNjaGVtYS52YWx1ZUZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgbWFya2VkQ29udHJvbCA9IHt9O1xyXG4gICAgICAgIHRoaXMuYmluZE9uQ2hhbmdlVG9Ecm9wZG93blJlY3Vyc2l2ZShkcm9wZG93bkNvbnRyb2xTY2hlbWEsIHRtcEZpbHRlcnMsIG1hcmtlZENvbnRyb2wpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYmluZE9uQ2hhbmdlVG9Ecm9wZG93blJlY3Vyc2l2ZShjaGlsZERyb3Bkb3duOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEgfCBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLCB0bXBGaWx0ZXJzOiBGaWx0ZXJbXSwgbWFya2VkQ29udHJvbCkge1xyXG4gICAgICAgIGlmICh0bXBGaWx0ZXJzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgdG1wRmlsdGVycykge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlRmllbGQgPSBmaWx0ZXIuc291cmNlRmllbGQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnREcm9wZG93biA9IHRoaXMuZm9ybUNvbnRyb2xzW3NvdXJjZUZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnREcm9wZG93biAmJiAhbWFya2VkQ29udHJvbFtzb3VyY2VGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBtYXJrZWRDb250cm9sW3NvdXJjZUZpZWxkXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRNb3JlT25DaGFuZ2VFdmVudChwYXJlbnREcm9wZG93biwgKGV2ZW50OiBFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRHJvcGRvd24gaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZWVkR2V0RGF0YSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRHJvcGRvd24uYWxsb3dMb2FkRGF0YVdoZW5QYXJlbnROdWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZXZlbnQuZXZlbnRUeXBlID09ICdhZGp1c3RWYWx1ZScpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkR2V0RGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChldmVudC52YWx1ZSA9PSBudWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgZXZlbnQudmFsdWUgPT0gJydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoZXZlbnQudmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBldmVudC52YWx1ZS5sZW5ndGggPT0gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREcm9wZG93bi5fY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRHJvcGRvd24uX2NvbXBvbmVudC5yZXNldENvbnRyb2woKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkR2V0RGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmVlZEdldERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0RmlsdGVyRnJvbVRlbXBsYXRlKHRtcEZpbHRlcnMsIGV2ZW50LnBhcmVudE1vZGVsLCBldmVudC5yb290TW9kZWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERyb3Bkb3duLl9jb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKCEocGFyZW50RHJvcGRvd24gaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBwYXJlbnREcm9wZG93bi5fY29tcG9uZW50ICYmIHBhcmVudERyb3Bkb3duLl9jb21wb25lbnQuX2hhc0xvYWRlZERhdGFzb3VyY2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERyb3Bkb3duLl9jb21wb25lbnQuZ2V0RGF0YShmaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREcm9wZG93bi5fY29tcG9uZW50ICYmIGNoaWxkRHJvcGRvd24uX2NvbXBvbmVudC5nZXREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREcm9wZG93bi5fY29tcG9uZW50LmdldERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kT25DaGFuZ2VUb0Ryb3Bkb3duUmVjdXJzaXZlKGNoaWxkRHJvcGRvd24sIGZpbHRlci5maWx0ZXJzLCBtYXJrZWRDb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZE1vcmVPbkNoYW5nZUV2ZW50KGNvbnRyb2w6IEZvcm1Db250cm9sQmFzZSwgbmV3T25DaGFuZ2UpIHtcclxuICAgICAgICBpZiAoY29udHJvbC50cmlnZ2VyTG9hZENoaWxkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZFRyaWdnZXJMb2FkQ2hpbGQgPSBjb250cm9sLnRyaWdnZXJMb2FkQ2hpbGQ7XHJcbiAgICAgICAgICAgIGNvbnRyb2wudHJpZ2dlckxvYWRDaGlsZCA9IGFzeW5jIChldmVudDogRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBvbGRUcmlnZ2VyTG9hZENoaWxkKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG5ld09uQ2hhbmdlKGV2ZW50KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wudHJpZ2dlckxvYWRDaGlsZCA9IGFzeW5jIChldmVudDogRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXdPbkNoYW5nZShldmVudCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRtcEZpZWxkT2xkT25DaGFuZ2UgPSAnb2xkT25DaGFuZ2UnO1xyXG4gICAgICAgIGlmIChjb250cm9sW3RtcEZpZWxkT2xkT25DaGFuZ2VdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wub25DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRPbkNoYW5nZSA9IGNvbnRyb2wub25DaGFuZ2VkO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbFt0bXBGaWVsZE9sZE9uQ2hhbmdlXSA9IG9sZE9uQ2hhbmdlO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5vbkNoYW5nZWQgPSBhc3luYyAoZXZlbnQ6IEV2ZW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG9sZE9uQ2hhbmdlKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLnRyaWdnZXJMb2FkQ2hpbGQoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wub25DaGFuZ2VkID0gY29udHJvbC50cmlnZ2VyTG9hZENoaWxkO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbFt0bXBGaWVsZE9sZE9uQ2hhbmdlXSA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sW3RtcEZpZWxkT2xkT25DaGFuZ2VdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRPbkNoYW5nZSA9IGNvbnRyb2xbdG1wRmllbGRPbGRPbkNoYW5nZV07XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLm9uQ2hhbmdlZCA9IGFzeW5jIChldmVudDogRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgb2xkT25DaGFuZ2UoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wudHJpZ2dlckxvYWRDaGlsZChldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5vbkNoYW5nZWQgPSBjb250cm9sLnRyaWdnZXJMb2FkQ2hpbGQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLm9uQWRqdXN0ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkRXZlbnQgPSBjb250cm9sLm9uQWRqdXN0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wub25BZGp1c3RlZFZhbHVlID0gYXN5bmMgKGV2ZW50OiBFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBvbGRFdmVudChldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgbmV3T25DaGFuZ2UoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wub25BZGp1c3RlZFZhbHVlID0gYXN5bmMgKGV2ZW50OiBFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXdPbkNoYW5nZShldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFZhbGlkYXRvckFuZENvcnJlY3RvcihzY2hlbWE6IEZvcm1Db250cm9sQmFzZSkge1xyXG4gICAgICAgIGlmICghc2NoZW1hLmNvcnJlY3RvcnMpIHNjaGVtYS5jb3JyZWN0b3JzID0gW107XHJcblxyXG4gICAgICAgIGlmICghc2NoZW1hLnZhbGlkYXRvcnMpIHNjaGVtYS52YWxpZGF0b3JzID0gW107XHJcblxyXG4gICAgICAgIGlmIChzY2hlbWEucmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgc2NoZW1hLnZhbGlkYXRvcnMucHVzaChuZXcgUmVxdWlyZWRWYWxpZGF0b3IoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgTWFza0NvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYS52YWxpZGF0b3JzKSB7XHJcbiAgICAgICAgICAgICAgICBzY2hlbWEudmFsaWRhdG9ycy5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIE51bWJlckNvbXBhcmVWYWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JDb21wYXJlUmV2ZXJ0KHZhbGlkYXRvciwgc2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBUZXh0Q29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0U2NoZW1hID0gKDxUZXh0Q29udHJvbFNjaGVtYT5zY2hlbWEpO1xyXG4gICAgICAgICAgICBpZiAodGV4dFNjaGVtYS5kYXRhRm9ybWF0ID09ICdudW1iZXInIHx8IHRleHRTY2hlbWEuZGF0YUZvcm1hdCA9PSAnYW1vdW50Jykge1xyXG4gICAgICAgICAgICAgICAgdGV4dFNjaGVtYS52YWxpZGF0b3JzLnB1c2gobmV3IE51bWJlck9ubHlWYWxpZGF0b3IoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGV4dFNjaGVtYS5kYXRhRm9ybWF0ID09ICdtb25leScgfHwgdGV4dFNjaGVtYS5kYXRhRm9ybWF0ID09ICdtb25leWludCcpIHtcclxuXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGV4dFNjaGVtYS5kYXRhRm9ybWF0ID09ICdlbWFpbCcpIHtcclxuICAgICAgICAgICAgICAgIHRleHRTY2hlbWEudmFsaWRhdG9ycy5wdXNoKG5ldyBFbWFpbFZhbGlkYXRvcigpKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoIXRleHRTY2hlbWEuY29ycmVjdG9ycykgdGV4dFNjaGVtYS5jb3JyZWN0b3JzID0gW107XHJcbiAgICAgICAgICAgICAgICB0ZXh0U2NoZW1hLmNvcnJlY3RvcnMucHVzaChuZXcgR21haWxDb3JyZWN0b3IoKSk7XHJcbiAgICAgICAgICAgICAgICB0ZXh0U2NoZW1hLmNvcnJlY3RvcnMucHVzaChuZXcgTG93ZXJDb3JyZWN0b3IoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGV4dFNjaGVtYS5kYXRhRm9ybWF0ID09ICdwaG9uZScgfHwgdGV4dFNjaGVtYS5kYXRhRm9ybWF0ID09ICdmYXgnKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0U2NoZW1hLnZhbGlkYXRvcnMucHVzaChuZXcgUGhvbmVOdW1iZXJWYWxpZGF0b3IoKSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0ZXh0U2NoZW1hLnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIHRleHRTY2hlbWEudmFsaWRhdG9ycy5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIE51bWJlckNvbXBhcmVWYWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JDb21wYXJlUmV2ZXJ0KHZhbGlkYXRvciwgdGV4dFNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IDxUYWJsZVNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRWYWxpZGF0b3JBbmRDb3JyZWN0b3Ioc3ViQ29udHJvbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGVUaW1lU2NoZW1hID0gKDxEYXRlVGltZUNvbnRyb2xTY2hlbWE+c2NoZW1hKTtcclxuICAgICAgICAgICAgaWYgKGRhdGVUaW1lU2NoZW1hLnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIGRhdGVUaW1lU2NoZW1hLnZhbGlkYXRvcnMuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBEYXRlQ29tcGFyZVZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckNvbXBhcmVSZXZlcnQodmFsaWRhdG9yLCBkYXRlVGltZVNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ29udGFpbmVyU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSA8Q29udGFpbmVyU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFZhbGlkYXRvckFuZENvcnJlY3RvcihzdWJDb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2NoZW1hLnZhbGlkYXRvcnMuZm9yRWFjaCh2YWxpZGF0b3IgPT4ge1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgQ2hlY2tEdXBsaWNhdGVWYWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvci5zZXRCYXNlU2VydmljZSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3Iuc2V0QmFzZVNlcnZpY2UodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yQ2hlY2tEdXBsaWNhdGUoc2NoZW1hLCB2YWxpZGF0b3IuZ2V0RHVwbGljYXRlRmllbGRzKCksIHZhbGlkYXRvci5nZXRNZXNzYWdlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFJlcXVpcmVkRmllbGRzVmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvclJlcXVpcmVkcyhzY2hlbWEsIHZhbGlkYXRvci5nZXRSZXF1aXJlZEZpZWxkcygpLCB2YWxpZGF0b3IuZ2V0TWVzc2FnZSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBTYW1lVmFsdWVWYWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlU2FtZVZhbHVlVmFsaWRhdG9ycyhzY2hlbWEsIHZhbGlkYXRvci5nZXRTYW1lRmllbGRzKCksIHZhbGlkYXRvci5nZXRNZXNzYWdlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlVmFsaWRhdG9yQ29tcGFyZVJldmVydChcclxuICAgICAgICB2YWxpZGF0b3I6IERhdGVDb21wYXJlVmFsaWRhdG9yIHwgTnVtYmVyQ29tcGFyZVZhbGlkYXRvcixcclxuICAgICAgICBzY2hlbWE6IERhdGVUaW1lQ29udHJvbFNjaGVtYSB8IFRleHRDb250cm9sU2NoZW1hIHwgTWFza0NvbnRyb2xTY2hlbWFcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGNvbXBhcmVVbmlxdWVGaWVsZCA9IHZhbGlkYXRvci5jb21wYXJlVW5pcXVlRmllbGQ7XHJcbiAgICAgICAgaWYgKHNjaGVtYS51bmlxdWVGaWVsZCA9PSBjb21wYXJlVW5pcXVlRmllbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdTY2hlbWEgY+G6pXUgaMOsbmggYuG7iyBs4buXaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3JDb21wYXJlID0gdmFsaWRhdG9yLmdldE9wZXJhdG9yQ29tcGFyZSgpO1xyXG4gICAgICAgICAgICBjb25zdCBzY2hlbWFDb21wYXJlID0gPEZvcm1Db250cm9sQmFzZT4odGhpcy5mb3JtQ29udHJvbHNbY29tcGFyZVVuaXF1ZUZpZWxkXSk7XHJcbiAgICAgICAgICAgIGlmIChzY2hlbWFDb21wYXJlID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnU2NoZW1hIGPhuqV1IGjDrG5oIGLhu4sgbOG7l2knKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICghc2NoZW1hQ29tcGFyZS52YWxpZGF0b3JzLnNvbWUocCA9PiBwIGluc3RhbmNlb2YgQ29tcGFyZVZhbGlkYXRvclxyXG4gICAgICAgICAgICAgICAgICAgICYmIHAuY29tcGFyZVVuaXF1ZUZpZWxkID09IHNjaGVtYS51bmlxdWVGaWVsZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgRGF0ZUNvbXBhcmVWYWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hQ29tcGFyZS52YWxpZGF0b3JzLnB1c2gobmV3IERhdGVDb21wYXJlVmFsaWRhdG9yKG9wZXJhdG9yQ29udHJhc3Rbb3BlcmF0b3JDb21wYXJlXSwgc2NoZW1hLnVuaXF1ZUZpZWxkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFDb21wYXJlLnZhbGlkYXRvcnMucHVzaChuZXcgTnVtYmVyQ29tcGFyZVZhbGlkYXRvcihvcGVyYXRvckNvbnRyYXN0W29wZXJhdG9yQ29tcGFyZV0sIHNjaGVtYS51bmlxdWVGaWVsZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVWYWxpZGF0b3JDaGVja0R1cGxpY2F0ZShzY2hlbWE6IEZvcm1Db250cm9sQmFzZSwgZmllbGRPdGhlcjogc3RyaW5nW10sIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChmaWVsZE90aGVyLmluZGV4T2Yoc2NoZW1hLnVuaXF1ZUZpZWxkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnU2NoZW1hIGPhuqV1IGjDrG5oIGLhu4sgbOG7l2knKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IFsuLi5maWVsZE90aGVyLCBzY2hlbWEuZmllbGRdO1xyXG4gICAgICAgICAgICBmaWVsZE90aGVyLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hT3RoZXIgPSA8Rm9ybUNvbnRyb2xCYXNlPih0aGlzLmZvcm1Db250cm9sc1tmaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wRmllbGRzID0gZmllbGRzLmZpbHRlcihwID0+IHAgIT0gc2NoZW1hT3RoZXIuZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFPdGhlci52YWxpZGF0b3JzLnNvbWUocCA9PiBwIGluc3RhbmNlb2YgQ2hlY2tEdXBsaWNhdGVGaWVsZHNWYWxpZGF0b3JcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9jb21tb25TZXJ2aWNlLmlzU2FtZUFycmF5KHRtcEZpZWxkcywgcC5nZXREdXBsaWNhdGVGaWVsZHMoKSkpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBfdmFsaWRhdG9yID0gbmV3IENoZWNrRHVwbGljYXRlRmllbGRzVmFsaWRhdG9yKHRtcEZpZWxkcywgbWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3ZhbGlkYXRvci5zZXRCYXNlU2VydmljZSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYU90aGVyLnZhbGlkYXRvcnMucHVzaChfdmFsaWRhdG9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVZhbGlkYXRvclJlcXVpcmVkcyhzY2hlbWE6IEZvcm1Db250cm9sQmFzZSwgZmllbGRPdGhlcjogc3RyaW5nW10sIG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChmaWVsZE90aGVyLmluZGV4T2Yoc2NoZW1hLnVuaXF1ZUZpZWxkKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnU2NoZW1hIGPhuqV1IGjDrG5oIGLhu4sgbOG7l2knKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IFsuLi5maWVsZE90aGVyLCBzY2hlbWEuZmllbGRdO1xyXG4gICAgICAgICAgICBmaWVsZE90aGVyLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2NoZW1hT3RoZXIgPSA8Rm9ybUNvbnRyb2xCYXNlPih0aGlzLmZvcm1Db250cm9sc1tmaWVsZF0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG1wRmllbGRzID0gZmllbGRzLmZpbHRlcihwID0+IHAgIT0gc2NoZW1hT3RoZXIuZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFPdGhlci52YWxpZGF0b3JzLnNvbWUocCA9PiBwIGluc3RhbmNlb2YgUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3JcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9jb21tb25TZXJ2aWNlLmlzU2FtZUFycmF5KHRtcEZpZWxkcywgcC5nZXRSZXF1aXJlZEZpZWxkcygpKSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF92YWxpZGF0b3IgPSBuZXcgUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3IodG1wRmllbGRzLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFPdGhlci52YWxpZGF0b3JzLnB1c2goX3ZhbGlkYXRvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVTYW1lVmFsdWVWYWxpZGF0b3JzKHNjaGVtYTogRm9ybUNvbnRyb2xCYXNlLCBmaWVsZE90aGVyOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkT3RoZXIuaW5kZXhPZihzY2hlbWEudW5pcXVlRmllbGQpID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdTY2hlbWEgY+G6pXUgaMOsbmggYuG7iyBs4buXaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRzID0gWy4uLmZpZWxkT3RoZXIsIHNjaGVtYS5maWVsZF07XHJcbiAgICAgICAgICAgIGZpZWxkT3RoZXIuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFPdGhlciA9IDxGb3JtQ29udHJvbEJhc2U+KHRoaXMuZm9ybUNvbnRyb2xzW2ZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKHAgPT4gcCAhPSBzY2hlbWFPdGhlci5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYU90aGVyLnZhbGlkYXRvcnMuc29tZShwID0+IHAgaW5zdGFuY2VvZiBTYW1lVmFsdWVWYWxpZGF0b3JcclxuICAgICAgICAgICAgICAgICAgICAmJiB0aGlzLl9jb21tb25TZXJ2aWNlLmlzU2FtZUFycmF5KHRtcEZpZWxkcywgcC5nZXRTYW1lRmllbGRzKCkpKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX3ZhbGlkYXRvciA9IG5ldyBTYW1lVmFsdWVWYWxpZGF0b3IodG1wRmllbGRzLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBzY2hlbWFPdGhlci52YWxpZGF0b3JzLnB1c2goX3ZhbGlkYXRvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldERhdGFEZWZhdWx0KCkge1xyXG4gICAgICAgIGNvbnN0IHN0cmluZ0RhdGFEZWZhdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuREVGQVVMVF9EQVRBKTtcclxuICAgICAgICBjb25zdCBnZXRTZXR0aW5nRGF0YURlZmF1bHQgPSB0aGlzLl9tb2R1bGVDb25maWcuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuc2V0dGluZ0RhdGFEZWZhdWx0O1xyXG4gICAgICAgIGlmIChzdHJpbmdEYXRhRGVmYXVsdCAmJiAodGhpcy5fbW9kZWxEYXRhICYmICF0aGlzLl9tb2RlbERhdGEuaWQpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGFDYWNoZSA9IEpTT04ucGFyc2Uoc3RyaW5nRGF0YURlZmF1bHQpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5zZXR0aW5nLnNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gKDxEcm9wZG93bkNvbnRyb2xTY2hlbWE+aXRlbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gKGNvbnRyb2wuZmllbGQgKyAoY29udHJvbC52YWx1ZUZpZWxkID09ICdpZCcgPyAnJyA6IGNvbnRyb2wudmFsdWVGaWVsZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGRhdGFDYWNoZVtrZXldO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbERhdGFbY29udHJvbC5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZ2V0U2V0dGluZ0RhdGFEZWZhdWx0KSB7IC8vIGzhuqV5IGPhuqV1IGjDrG5oIGZpZWxkIG1hcFBpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRNYXBHZXRDYWNoZSA9IGdldFNldHRpbmdEYXRhRGVmYXVsdFtjb250cm9sLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkTWFwR2V0Q2FjaGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IChmaWVsZE1hcEdldENhY2hlICsgKGNvbnRyb2wudmFsdWVGaWVsZCA9PSAnaWQnID8gJycgOiBjb250cm9sLnZhbHVlRmllbGQpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGF0YUNhY2hlW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbERhdGFbY29udHJvbC5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YUNhY2hlWyg8Rm9ybVNjaGVtYUJhc2U+aXRlbSkuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9tb2RlbERhdGFbKDxGb3JtU2NoZW1hQmFzZT5pdGVtKS5maWVsZF0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5mdW5jdGlvbi5tb2RpZnlEYXRhQWZ0ZXJHZXRDYWNoZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZnVuY3Rpb24ubW9kaWZ5RGF0YUFmdGVyR2V0Q2FjaGUodGhpcy5fbW9kZWxEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBseUNhY2hlZFZhbHVlcygpIHtcclxuICAgICAgICB0aGlzLmdldENhY2hlZFZhbHVlc0Zyb21TdG9yYWdlKCk7XHJcbiAgICAgICAgdGhpcy5zZXRDYWNoZWRWYWx1ZVRvTW9kZWwodGhpcy5fbW9kZWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldENhY2hlZFZhbHVlVG9Nb2RlbChtb2RlbCwgdW5pcXVlS2V5Q29udHJvbD8sIHBhdGg/KSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBpbiBtb2RlbCkge1xyXG4gICAgICAgICAgICBpZiAoZmllbGQgIT0gJ19lcnJvcnMnICYmIGZpZWxkICE9ICdfc3RhdHVzJyAmJiBmaWVsZCAhPSAnX3NvdXJjZScpIHtcclxuICAgICAgICAgICAgICAgIGxldCBzdWJVbmlxdWVLZXlDb250cm9sO1xyXG4gICAgICAgICAgICAgICAgaWYgKHVuaXF1ZUtleUNvbnRyb2wgIT0gbnVsbCAmJiB1bmlxdWVLZXlDb250cm9sICE9PSAnJykgc3ViVW5pcXVlS2V5Q29udHJvbCA9IHVuaXF1ZUtleUNvbnRyb2wgKyAnLicgKyBmaWVsZDtcclxuICAgICAgICAgICAgICAgIGVsc2Ugc3ViVW5pcXVlS2V5Q29udHJvbCA9IGZpZWxkO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2xzW3N1YlVuaXF1ZUtleUNvbnRyb2xdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb250cm9sKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGxldCBzdWJQYXRoO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGggIT0gbnVsbCAmJiBwYXRoICE9PSAnJykgc3ViUGF0aCA9IHBhdGggKyAnLicgKyBmaWVsZDtcclxuICAgICAgICAgICAgICAgIGVsc2Ugc3ViUGF0aCA9IGZpZWxkO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHN1Yk1vZGVsID0gbW9kZWxbZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN1Yk1vZGVsIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBzdWJNb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENhY2hlZFZhbHVlVG9Nb2RlbChpdGVtLCBzdWJVbmlxdWVLZXlDb250cm9sLCBzdWJQYXRoICsgJ1snICsgaW5kZXggKyAnXScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzTGl0ZXJhbE9iamVjdChzdWJNb2RlbCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENhY2hlZFZhbHVlVG9Nb2RlbChzdWJNb2RlbCwgc3ViVW5pcXVlS2V5Q29udHJvbCwgc3ViUGF0aCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250cm9sLmVuYWJsZUNhY2hpbmcgJiYgdGhpcy5jYWNoZWRWYWx1ZXMuaGFzT3duUHJvcGVydHkoc3ViUGF0aCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb2RlbFtmaWVsZF0gPSB0aGlzLmNhY2hlZFZhbHVlc1tzdWJQYXRoXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENhY2hlZFZhbHVlc0Zyb21TdG9yYWdlKCkge1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZFZhbHVlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhY2hlZFZhbHVlcycpKTtcclxuICAgICAgICBpZiAoY2FjaGVkVmFsdWVzKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtSWQpIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuZm9ybUlkO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhY2hlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNhY2hlZFZhbHVlc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSBwYXRoTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkVmFsdWVzID0gZWxlbWVudC52YWx1ZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlQ2FjaGVWYWx1ZXNUb1N0b3JhZ2UoKSB7XHJcbiAgICAgICAgbGV0IGNhY2hlZFZhbHVlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2NhY2hlZFZhbHVlcycpKTtcclxuICAgICAgICBpZiAoIWNhY2hlZFZhbHVlcykgY2FjaGVkVmFsdWVzID0gW107XHJcbiAgICAgICAgbGV0IGNoZWNrRXhpc3QgPSBmYWxzZTtcclxuICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcclxuICAgICAgICBpZiAodGhpcy5mb3JtSWQpIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuZm9ybUlkO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FjaGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBjYWNoZWRWYWx1ZXNbaV07XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSBwYXRoTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZXMgPSB0aGlzLmNhY2hlZFZhbHVlcztcclxuICAgICAgICAgICAgICAgIGNoZWNrRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xyXG4gICAgICAgICAgICBjYWNoZWRWYWx1ZXMucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwYXRobmFtZTogcGF0aE5hbWUsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHRoaXMuY2FjaGVkVmFsdWVzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NhY2hlZFZhbHVlcycsIEpTT04uc3RyaW5naWZ5KGNhY2hlZFZhbHVlcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHRyaWdnZXJDaGFuZ2UoZmllbGRQYXRoKSB7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKGZpZWxkUGF0aCk7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGN1cnJlbnROb2RlLmNvbnRyb2w7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgY3VycmVudE5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWVsZFZhbHVlQ2hhbmdlKGNvbnRyb2wsIG51bGwsICd0cmlnZ2VyJywgY3VycmVudE5vZGUucGFyZW50TW9kZWwsIGN1cnJlbnROb2RlLnBhcmVudE1vZGVsUGF0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0ZvY3VzICYmICF0aGlzLnJvb3RDb250ZXh0LmRhdGEuZmxhZ3MuaGFzRm9jdXNpbmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmRhdGEuZmxhZ3MuaGFzRm9jdXNpbmdDb250cm9sID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNGaXJzdENvbnRyb2woKTtcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm9vdENvbnRleHQuZGF0YS5mbGFncy5oYXNGb2N1c2luZ0NvbnRyb2wgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0sIDgwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRJc0xvYWRlZERhdGFFZGl0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhRWRpdE9sZCA9IHRoaXMubG9hZGVkRGF0YUVkaXQ7XHJcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhRWRpdCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb250cm9sVHlwZShjb250cm9sOiBhbnkpIHtcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRpdGxlU2NoZW1hKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExhYmVsU2NoZW1hKSByZXR1cm4gJ2xhYmVsJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFNwYW5Db250cm9sU2NoZW1hKSByZXR1cm4gJ3NwYW5Db250cm9sJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIE1hc2tDb250cm9sU2NoZW1hKSByZXR1cm4gJ21hc2snO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTnVtYmVyUmFuZ2VDb250cm9sU2NoZW1hKSByZXR1cm4gJ251bWJlcnJhbmdlJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRleHRDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRDb250cm9sID0gPFRleHRDb250cm9sU2NoZW1hPmNvbnRyb2w7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHRleHRDb250cm9sLmRhdGFGb3JtYXQgPT09ICdtb25leSdcclxuICAgICAgICAgICAgICAgIHx8IHRleHRDb250cm9sLmRhdGFGb3JtYXQgPT09ICdtb25leWludCdcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ21vbmV5JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0ZXh0Q29udHJvbC5kYXRhRm9ybWF0ID09PSAncGhvbmUnXHJcbiAgICAgICAgICAgICAgICB8fCB0ZXh0Q29udHJvbC5kYXRhRm9ybWF0ID09PSAnZmF4J1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAncGhvbmVPcmZheCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuICd0ZXh0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUZW1wbGF0ZUNvbnRyb2xTY2hlbWEpIHJldHVybiAndGVtcGxhdGUnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSByZXR1cm4gJ2RhdGV0aW1lJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKSByZXR1cm4gJ2RhdGV0aW1lcmFuZ2UnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQWRkcmVzc0NvbnRyb2xTY2hlbWEpIHJldHVybiAnYWRkcmVzcyc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHJldHVybiAnZHJvcGRvd24nO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRWRpdG9yQ29udHJvbFNjaGVtYSkgcmV0dXJuICdlZGl0b3InO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dEFyZWFDb250cm9sU2NoZW1hKSByZXR1cm4gJ3RleHRhcmVhJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFdyYXBQaWNrZXJDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnY29tbW9uLXBpY2tlcic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFBo4bqjaSDEkeG7gyBkw7JuZyBkxrDhu5tpIOG7nyBiw6puIHRyw6puIFVzZXJQaWNrZXJDb250cm9sU2NoZW1hIHbDrCBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hIDogVXNlclBpY2tlckNvbnRyb2xTY2hlbWFcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEpIHJldHVybiAnYXV0b2NvbXBsZXRlLXBpY2tlcic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVc2VyUGlja2VyQ29udHJvbFNjaGVtYSkgcmV0dXJuICd1c2VyLXBpY2tlcic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBFbnRpdHlQaWNrZXJDb250cm9sU2NoZW1hKSByZXR1cm4gJ2VudGl0eS1waWNrZXInO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgT3JnYW5pemF0aW9uUGlja2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ29yZ2FuaXphdGlvbi1waWNrZXInO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2NvY2F1dG9jaHVjLXBpY2tlcic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29DYXVUb0NodWNDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnY29jYXV0b2NodWMnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEF1dG9Db21wbGV0ZUNvbnRyb2xTY2hlbWEpIHJldHVybiAnYXV0b2NvbXBsZXRlJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFN3aXRjaENvbnRyb2xTY2hlbWEpIHJldHVybiAnc3dpdGNoJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENoZWNrYm94Q29udHJvbFNjaGVtYSkgcmV0dXJuICdjaGVja2JveCc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDaGVja0JveExpc3RDb250cm9sU2NoZW1hKSByZXR1cm4gJ2NoZWNrYm94bGlzdCc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBSYWRpb0J1dHRvbkxpc3RDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAncmFkaW9idXR0b25saXN0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC5tb2RlID09IEZpbGVVcGxvYWRNb2RlLnVzaW5nRmlsZUluc3RhbmNlSWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZmlsZVVwbG9hZCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3NlcnZpY2VGaWxlVXBsb2FkJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSkgcmV0dXJuICdmaWxlTWFuYWdlcic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb2xvclBpY2tlckNvbnRyb2xTY2hlbWEpIHJldHVybiAnY29sb3JQaWNrZXInO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29sb3JDb250cm9sU2NoZW1hKSByZXR1cm4gJ2NvbG9yQ29udHJvbCc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkgcmV0dXJuICd0YWJsZSc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb250YWluZXJTY2hlbWEpIHJldHVybiAnY29udGFpbmVyJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEJ1dHRvbkNvbnRyb2xTY2hlbWEpIHJldHVybiAnYnV0dG9uJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFZhbkJhblBpY2tlckNvbnRyb2xTY2hlbWEpIHJldHVybiAndmFuYmFuJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbmdWaWVjUGlja2VyQ29udHJvbFNjaGVtYSkgcmV0dXJuICdjb25ndmllYyc7XHJcbiAgICAgICAgcmV0dXJuICdjdXN0b20nO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRWaWV3TW9kZURhdGFUeXBlKGNvbnRyb2wpIHtcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRpdGxlU2NoZW1hKSByZXR1cm4gJ3RpdGxlJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIExhYmVsU2NoZW1hKSByZXR1cm4gJ2xhYmVsJztcclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBNYXNrQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ21hc2snO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZUNvbnRyb2wgPSA8RGF0ZVRpbWVDb250cm9sU2NoZW1hPmNvbnRyb2w7XHJcbiAgICAgICAgICAgIGlmIChkYXRlQ29udHJvbC5zaG93VGltZSkgcmV0dXJuICdkYXRldGltZSc7XHJcbiAgICAgICAgICAgIHJldHVybiAnZGF0ZSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRWRpdG9yQ29udHJvbFNjaGVtYSkgcmV0dXJuICdodG1sJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVzZXJQaWNrZXJDb250cm9sU2NoZW1hKSByZXR1cm4gJ3VzZXInO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgY29udHJvbCBpbnN0YW5jZW9mIFN3aXRjaENvbnRyb2xTY2hlbWFcclxuICAgICAgICAgICAgfHwgY29udHJvbCBpbnN0YW5jZW9mIENoZWNrYm94Q29udHJvbFNjaGVtYVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2Jvb2xlYW4nO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNvbnRyb2wgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWFcclxuICAgICAgICAgICAgfHwgY29udHJvbCBpbnN0YW5jZW9mIENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWFcclxuICAgICAgICAgICAgfHwgY29udHJvbCBpbnN0YW5jZW9mIFJhZGlvQnV0dG9uTGlzdENvbnRyb2xTY2hlbWFcclxuICAgICAgICAgICAgfHwgY29udHJvbCBpbnN0YW5jZW9mIE9yZ2FuaXphdGlvblBpY2tlckNvbnRyb2xTY2hlbWFcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdoYXNEYXRhU291cmNlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC5tb2RlID09IEZpbGVVcGxvYWRNb2RlLnVzaW5nRmlsZUluc3RhbmNlSWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZmlsZVVwbG9hZCc7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2ZpbGVTZXJ2aWNlVXBsb2FkJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSkgcmV0dXJuICdmaWxlTWFuYWdlcic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBBZGRyZXNzQ29udHJvbFNjaGVtYSkgcmV0dXJuICdhZGRyZXNzJztcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0Q29udHJvbFNjaGVtYVxyXG4gICAgICAgICAgICAmJiAoY29udHJvbC5kYXRhRm9ybWF0ID09PSAnbW9uZXknXHJcbiAgICAgICAgICAgICAgICB8fCBjb250cm9sLmRhdGFGb3JtYXQgPT09ICdtb25leWludCcpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnbW9uZXknO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbG9yUGlja2VyQ29udHJvbFNjaGVtYSkgcmV0dXJuICdjb2xvclBpY2tlcic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb2xvckNvbnRyb2xTY2hlbWEpIHJldHVybiAnY29sb3JDb250cm9sJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSByZXR1cm4gJ3RhYmxlJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEtleVZhbHVlQ29udHJvbFNjaGVtYSkgcmV0dXJuICdhcHAta2V5LXZhbHVlJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbnRhaW5lclNjaGVtYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2NvbnRhaW5lcic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gJ3N0cmluZyc7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVGb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIHRoaXMuX2luVmFsaWRGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZU1vZGVsKHRoaXMuX3Jvb3ROb2RlKTtcclxuICAgICAgICBpZiAodGhpcy5faW5WYWxpZEZvcm0pIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVG9GaXJzdEVycm9yQ29udHJvbCgpO1xyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVNb2RlbChjdXJyZW50Tm9kZTogQ29udHJvbFRyZWVOb2RlKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2YgY3VycmVudE5vZGUuY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkTm9kZS5jb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLmNoaWxkTm9kZXMgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkTm9kZS5jb250cm9sWydfaGlkZGVuJ10pIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFhd2FpdCB0aGlzLnZhbGlkYXRlKGNoaWxkTm9kZSwgdHJ1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2luVmFsaWRGb3JtID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZU1vZGVsKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZhbGlkYXRlRm9ybUNvbnRyb2woZmllbGRQYXRoKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbE5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKGZpZWxkUGF0aCk7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xOb2RlKSB7XHJcbiAgICAgICAgICAgIGlmICghYXdhaXQgdGhpcy52YWxpZGF0ZShjb250cm9sTm9kZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBoYW5kbGVDaGFuZ2VEcm9wZG93bihjb250cm9sOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIGV2ZW50PywgZXZlbnRUeXBlPywgcGFyZW50TW9kZWw/LCBwYXJlbnRQYXRoPywgc291cmNlTm9kZT8sIGJ1YmJsZT8pIHtcclxuICAgICAgICBpZiAoY29udHJvbC5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09ICdoaWRlJykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWVsZFZhbHVlQ2hhbmdlKGNvbnRyb2wsIGV2ZW50LCAnY2hhbmdlJywgcGFyZW50TW9kZWwsIHBhcmVudFBhdGgsIHNvdXJjZU5vZGUsIGJ1YmJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmllbGRWYWx1ZUNoYW5nZShjb250cm9sLCBldmVudCwgZXZlbnRUeXBlLCBwYXJlbnRNb2RlbCwgcGFyZW50UGF0aCwgc291cmNlTm9kZSwgYnViYmxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDEkOG7gyBuZ3V5w6puIGjDoG0gZOG6oW5nIGFycm93IGZ1bmN0aW9uIHbDrCBjw7MgMSBz4buRIGZvcm0ga2jDoWMgZ+G7jWlcclxuICAgICAqL1xyXG4gICAgcHVibGljIGhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UgPSBhc3luYyAoY29udHJvbDogRm9ybUNvbnRyb2xCYXNlLCBldmVudD8sIGV2ZW50VHlwZT8sIHBhcmVudE1vZGVsPywgcGFyZW50UGF0aD8sIHNvdXJjZU5vZGU/LCBidWJibGU/KSA9PiB7XHJcbiAgICAgICAgbGV0IHBhcmVudE5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKHBhcmVudFBhdGgpO1xyXG4gICAgICAgIGxldCBjdXJyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgLy8gcm93IGluIHRhYmxlXHJcbiAgICAgICAgaWYgKGNvbnRyb2wgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGNvbnRyb2wgPSBjdXJyZW50Tm9kZS5jb250cm9sO1xyXG4gICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBwYXJlbnRNb2RlbCA9IHBhcmVudE5vZGUubW9kZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlKGNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdmFsdWUgPSBjdXJyZW50Tm9kZS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gYXV0byBjb3JyZWN0IHZhbHVlXHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZShjdXJyZW50Tm9kZSk7XHJcbiAgICAgICAgY3VycmVudE5vZGUudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gdmFsaWRhdGUgdmFsdWVcclxuICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlKGN1cnJlbnROb2RlKTtcclxuXHJcbiAgICAgICAgaWYgKCFidWJibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlTW9kZWxDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBldmVudERhdGEgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgIHNvdXJjZUV2ZW50OiBldmVudCxcclxuICAgICAgICAgICAgc291cmNlTm9kZTogc291cmNlTm9kZSB8fCBjdXJyZW50Tm9kZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlLFxyXG4gICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoY29udHJvbC5vbkNoYW5nZWQpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25DaGFuZ2VkKGV2ZW50RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWJ1YmJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVNb2RlbENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChwYXJlbnROb2RlLnBhcmVudE5vZGUgIT0gbnVsbCAmJiBwYXJlbnROb2RlLnBhcmVudE5vZGUgIT0gcGFyZW50Tm9kZS5yb290Tm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UocGFyZW50Tm9kZS5jb250cm9sLCBldmVudCwgZXZlbnRUeXBlLCBwYXJlbnROb2RlLnBhcmVudE5vZGUubW9kZWwsIHBhcmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbFBhdGgsIHNvdXJjZU5vZGUgfHwgY3VycmVudE5vZGUsIHRydWUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVDYWNoaW5nICYmIGNvbnRyb2wuZW5hYmxlQ2FjaGluZykge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVDb250cm9sVmFsdWUoY29udHJvbCwgdmFsdWUsIHBhcmVudFBhdGgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdChldmVudERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBFdmVudCBraGkgZHJvcGRvd24gxJFp4buBdSBjaOG7iW5oIHZhbHVlIHThu6sgcmF3IHZhbHVlIGThuqFuZyBndWlkIHwgaW50IHwgLi4uID0+IG9iamVjdCBraeG7g3Uge3ZhbHVlOiBndWlkIHwgaW50IHwgLi4uLCAuLi4gWzEgc+G7kSB0csaw4budbmcga2jDoWNdfVxyXG4gICAgKiBAcGFyYW0gY29udHJvbFxyXG4gICAgKiBAcGFyYW0gcGFyZW50UGF0aFxyXG4gICAgKi9cclxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVBZGp1c3RWYWx1ZURyb3Bkb3duRXZlbnQoY29udHJvbDogRHJvcGRvd25Db250cm9sU2NoZW1hIHwgUmFkaW9CdXR0b25MaXN0Q29udHJvbFNjaGVtYSwgcGFyZW50UGF0aD8pIHtcclxuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aChwYXJlbnRQYXRoKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlKGNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAnYWRqdXN0VmFsdWUnLFxyXG4gICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAoY29udHJvbC5vbkFkanVzdGVkVmFsdWUpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25BZGp1c3RlZFZhbHVlKGV2ZW50RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVEYXRhU291cmNlTG9hZGVkKGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSwgcGFyZW50UGF0aCwgZGF0YUZyb21Ecm9wZG93bjogYW55KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgocGFyZW50UGF0aCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBwYXJlbnROb2RlLmdldENoaWxkTm9kZShjb250cm9sLmZpZWxkKTtcclxuICAgICAgICBjb25zdCBldmVudERhdGEgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ2RhdGFTb3VyY2VMb2FkZWQnLFxyXG4gICAgICAgICAgICBjcnVkRm9ybTogdGhpcyxcclxuICAgICAgICAgICAgZGF0YTogZGF0YUZyb21Ecm9wZG93bi5kYXRhU291cmNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgZXZlbnREYXRhWydlbG0nXSA9IGRhdGFGcm9tRHJvcGRvd24uZWxtO1xyXG5cclxuICAgICAgICBpZiAoY29udHJvbC5jYWxsYmFja0RhdGFGaW5pc2gpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKGV2ZW50RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhbmRsZVJlYWR5Q29udHJvbFBpY2tlcihjb250cm9sOiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hIHwgVXNlclBpY2tlckNvbnRyb2xTY2hlbWEgfCBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEsIHBhcmVudFBhdGg/KSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDb250cm9sUmVhZHlFdmVudChjb250cm9sLCBwYXJlbnRQYXRoKTtcclxuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aChwYXJlbnRQYXRoKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlKGNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAncmVhZHknLFxyXG4gICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjb250cm9sLm9uUmVhZHkpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25SZWFkeShldmVudERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlQ29udHJvbFJlYWR5RXZlbnQoY29udHJvbDogRm9ybUNvbnRyb2xCYXNlLCBwYXJlbnRQYXRoPykge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKHBhcmVudFBhdGgpO1xyXG4gICAgICAgIHBhcmVudE5vZGUubW9kZWwuX3N0YXR1c1tjb250cm9sLmZpZWxkXS5yZWFkeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xSZWFkeS5lbWl0KGNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgIGlmICh0aGlzLl9tb2RlbERhdGFbS2V5Rmxhc2hTaG93XSkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50UGF0aCkgeyAvLyDEkG/huqFuIGNvZGUgdHJvbmcgYmxvY2sgaWYgbsOgeSBjaMawYSBjaHXhuqluLCB04bqhbSB0aOG7nWkgY29kZSB0aOG6vyDEkeG6v24ga2hpIGfhurdwIGNhc2UgbsOgeSB0aMOsIHhlbSBs4bqhaSBzYXVcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0dXNbYCR7cGFyZW50UGF0aH0uJHtjb250cm9sLmZpZWxkfWBdID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlTdGF0dXNbYCR7Y29udHJvbC5maWVsZH1gXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jaGVja0NhblByaW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrQ2FuUHJpbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX21vZGVsRGF0YVtLZXlGbGFzaFNob3ddICYmIHRoaXMuY2FuUHJpbnQpIHtcclxuICAgICAgICAgICAgdGhpcy53YWl0UmVhZHlBbmRQcmludCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB3YWl0UmVhZHlBbmRQcmludCgpIHtcclxuICAgICAgICBjb25zdCByZWFkeUFsbCA9IHRoaXMuY2hlY2tSZWFkeUFsbCgpO1xyXG4gICAgICAgIGlmICh0aGlzLndhaXRSZWFkeUFuZFByaW50VGltZW91dCkge1xyXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy53YWl0UmVhZHlBbmRQcmludFRpbWVvdXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmVhZHlBbGwpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX21vZGVsRGF0YVtLZXlGbGFzaFNob3ddO1xyXG4gICAgICAgICAgICB0aGlzLl9taW5pbWl6ZWREYXRhID0gdGhpcy5nZXRNaW5pbWl6ZURhdGEodGhpcy5fbW9kZWxEYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5fcHJpbnRQZGZCeVNjaGVtYSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UsIHRoaXMuX21pbmltaXplZERhdGEsIHRoaXMuc2V0dGluZy5zY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICcnLCBmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ1ThuqFvIGZpbGUgdGjDoG5oIGPDtG5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbWluaW1pemVkRGF0YS5wcmludEZpbGVJZCA9IHJlcy5kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21pbmltaXplZERhdGEgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmNsb25lT2JqZWN0KHRoaXMuX21pbmltaXplZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZVdhaXRCb3goKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuX21vZHVsZUNvbmZpZy5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBiYXNlVHJpbmhLeShlbnZpcm9ubWVudCwgdGhpcy5zZXR0aW5nLCB0aGlzLl9tb2RlbERhdGEsIHJlcy5kYXRhLCB0aGlzLl9ub3RpZmllclNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkFmdGVyVHJpbmhLeS5lbWl0KCk7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy53YWl0UmVhZHlBbmRQcmludFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMud2FpdFJlYWR5QW5kUHJpbnQoKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNb2RlbFRhYmxlU2NoZW1hQnlDaGlsZFNjaGVtYShjb250cm9sOiBGb3JtQ29udHJvbEJhc2UpIHtcclxuICAgICAgICBjb25zdCBjb250cm9sVGFibGUgPSB0aGlzLmZvcm1Db250cm9sc1tjb250cm9sW3RoaXMuZmllbGRQYXJlbnRGaWVsZF1dO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9tb2RlbERhdGFbY29udHJvbFRhYmxlLmZpZWxkXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrUmVhZHlBbGwoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuY29udHJvbE5lZWRDaGVja1JlYWR5KSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLmhpZGRlbiB8fCAhdGhpcy5fbW9kZWxEYXRhW2NvbnRyb2wuZmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRGaWVsZCA9IGNvbnRyb2xbdGhpcy5maWVsZFBhcmVudEZpZWxkXTtcclxuICAgICAgICAgICAgLy8gTuG6v3UgbMOgIGZpZWxkIHRyb25nIHRhYmxlIHNjaGVtYVxyXG4gICAgICAgICAgICBpZiAocGFyZW50RmllbGQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyck1vZGVsQ3VuZ0xldmVsID0gdGhpcy5nZXRNb2RlbFRhYmxlU2NoZW1hQnlDaGlsZFNjaGVtYShjb250cm9sKTtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJNb2RlbEN1bmdMZXZlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyTW9kZWxDdW5nTGV2ZWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlYWR5U3RhdHVzW2Ake3BhcmVudEZpZWxkfVske2l9XS4ke2NvbnRyb2wuZmllbGR9YF0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICghdGhpcy5yZWFkeVN0YXR1c1tgJHtjb250cm9sLmZpZWxkfWBdKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTW9kZWxGcm9tRXh0ZXJuYWwgPSAoKSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuc2V0dGluZy5zY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbE1vZGVsKHRoaXMuX21vZGVsRGF0YSwgY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZmlyZU1vZGVsQ2hhbmdlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFBo4bqjaSDEkeG7gyBhcnJvdyBmdW5jdGlvbiB2w6wgY8OzIGV4cG9ydCByYSBjaG8gbeG7mXQgc+G7kSB0ZW1wbGF0ZSBz4butIGThu6VuZ1xyXG4gICAgZmlyZU1vZGVsQ2hhbmdlZCA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLl9taW5pbWl6ZWREYXRhID0gdGhpcy5nZXRNaW5pbWl6ZURhdGEodGhpcy5fbW9kZWxEYXRhKTtcclxuICAgICAgICB0aGlzLmRhdGFDaGFuZ2UuZW1pdCh0aGlzLl9taW5pbWl6ZWREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQnV0dG9uQ2xpY2soY29udHJvbDogQnV0dG9uQ29udHJvbFNjaGVtYSwgZXZlbnQsIHBhcmVudFBhdGgpIHtcclxuICAgICAgICBpZiAoY29udHJvbC5vbkNsaWNrKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLm9uQ2xpY2sobmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgocGFyZW50UGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlRXZlbnQ6IGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ2NsaWNrJyxcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvcnJlY3RWYWx1ZShjdXJyZW50Tm9kZTogQ29udHJvbFRyZWVOb2RlKSB7XHJcbiAgICAgICAgbGV0IHJlID0gY3VycmVudE5vZGUudmFsdWU7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGN1cnJlbnROb2RlLmNvbnRyb2w7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5jb3JyZWN0b3JzICYmIGNvbnRyb2wuY29ycmVjdG9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbC5jb3JyZWN0b3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb3JyZWN0b3IgPSBjb250cm9sLmNvcnJlY3RvcnNbaV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6ICdhdXRvQ29ycmVjdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICByZSA9IGNvcnJlY3Rvci5jb3JyZWN0KGV2ZW50RGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdHJ1ZSBsw6AgdGjhu49hIG3Do24sIGZhbHNlIGzDoCBraMO0bmcgdGjhu49hIG3Do24gKOG7niBj4bqlcCBoaeG7h24gdOG6oWkgY2jhu6kgY2jGsGEga2nhu4NtIHRyYSBj4bqlcCBjb24pXHJcbiAgICBwcml2YXRlIGFzeW5jIHZhbGlkYXRlKGN1cnJlbnROb2RlOiBDb250cm9sVHJlZU5vZGUsIGZvcmNlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gY3VycmVudE5vZGUuY29udHJvbDtcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYVxyXG4gICAgICAgICAgICB8fCBjb250cm9sIGluc3RhbmNlb2YgUmFkaW9CdXR0b25MaXN0Q29udHJvbFNjaGVtYVxyXG4gICAgICAgICAgICB8fCBjb250cm9sIGluc3RhbmNlb2YgQWRkcmVzc0NvbnRyb2xTY2hlbWFcclxuICAgICAgICAgICAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBpZiAoIWZvcmNlICYmICFwYXJlbnROb2RlLm1vZGVsLl9zdGF0dXNbY29udHJvbC5maWVsZF0ucmVhZHkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsLl9lcnJvcnNbY3VycmVudE5vZGUuZmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoIWVycm9ycykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIGVycm9ycy5zcGxpY2UoMCwgZXJyb3JzLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLnZhbGlkYXRvcnMgJiYgY29udHJvbC52YWxpZGF0b3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29udHJvbC52YWxpZGF0b3JzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gY29udHJvbC52YWxpZGF0b3JzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2ZW50RGF0YSA9IG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAndmFsaWRhdGUnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhd2FpdCB2YWxpZGF0b3IudmFsaWRhdGUoZXZlbnREYXRhKSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVyciA9IHZhbGlkYXRvci5nZXRFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9ycy5pbmRleE9mKGVycikgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBwcml2YXRlIF9zZXRFcnJvcihmaWVsZDogc3RyaW5nLCBlcnJvcjogc3RyaW5nKSB7XHJcbiAgICAvLyAgICAgY29uc3Qgbm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgoZmllbGQpO1xyXG4gICAgLy8gICAgIGlmIChub2RlID09IG51bGwpIHtcclxuICAgIC8vICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUcsaw4budbmcgZOG7ryBsaeG7h3Uga2jDtG5nIHThu5NuIHThuqFpJyk7XHJcbiAgICAvLyAgICAgICAgIHJldHVybjtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgY29uc3QgZXJyb3JzID0gbm9kZS5wYXJlbnROb2RlLm1vZGVsLl9lcnJvcnNbbm9kZS5maWVsZF07XHJcbiAgICAvLyAgICAgZXJyb3JzLnB1c2goZXJyb3IpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIHNldEVycm9yKGZpZWxkOiBzdHJpbmcgfCBzdHJpbmdbXSwgZXJyb3I6IHN0cmluZykge1xyXG4gICAgLy8gICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkKSlcclxuICAgIC8vICAgICAgICAgZmllbGQuZm9yRWFjaChpdGVtID0+IHRoaXMuX3NldEVycm9yKGl0ZW0sIGVycm9yKSk7XHJcbiAgICAvLyAgICAgZWxzZVxyXG4gICAgLy8gICAgICAgICB0aGlzLl9zZXRFcnJvcihmaWVsZCwgZXJyb3IpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIHByaXZhdGUgY2FjaGVDb250cm9sVmFsdWUoY29udHJvbCwgdmFsdWUsIHBhcmVudFBhdGgpIHtcclxuICAgICAgICBpZiAoY29udHJvbCAmJiBjb250cm9sLmVuYWJsZUNhY2hpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZWRWYWx1ZXNbcGFyZW50UGF0aCArICcuJyArIGNvbnRyb2wuZmllbGRdID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbXBvbmVudEJ5VHlwZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVOYW1lXSkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlc1t0ZW1wbGF0ZU5hbWVdID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kVGVtcGxhdGVGcm9tTGlzdCh0aGlzLmNoaWxkcmVuLCB0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVOYW1lXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXRlbUluQXJyYXlCeVZhbHVlKGFycmF5LCB2LCBjb250cm9sKSB7XHJcbiAgICAgICAgaWYgKHYgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBjb250cm9sLmZ1bmNHZXRMYWJlbDtcclxuICAgICAgICBpZiAoZnVuY0dldExhYmVsID09IG51bGwpIHtcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW2NvbnRyb2wuZGlzcGxheUZpZWxkXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGFycmF5IGluc3RhbmNlb2YgQXJyYXkgJiYgYXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgdkFyciA9IHY7XHJcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2KSkge1xyXG4gICAgICAgICAgICAgICAgdkFyciA9IHYudG9TdHJpbmcoKS5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodkFyci5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBhcnJheS5maW5kKHggPT4geFtjb250cm9sLnZhbHVlRmllbGRdID09IHYpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZnVuY0dldExhYmVsKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZBcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5LmZpbHRlcihwID0+IHZBcnIuc29tZShxID0+IHEgPT0gcFtjb250cm9sLnZhbHVlRmllbGRdKSlcclxuICAgICAgICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4gZnVuY0dldExhYmVsKGl0ZW0pKVxyXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcsJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJdGVtSW5BcnJheUJ5VGV4dFZhbHVlKGFycmF5LCB2KSB7XHJcbiAgICAgICAgaWYgKHYgPT09IG51bGwgfHwgdiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB2O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGFycmF5IGluc3RhbmNlb2YgQXJyYXlcclxuICAgICAgICAgICAgJiYgYXJyYXkubGVuZ3RoID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gdi5qb2luKCc7ICcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFkZHJlc3NEaXNwbGF5VGV4dChzZWxlY3RlZFZhbHVlKSB7IH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TGFiZWxDbGFzcyhjb250cm9sKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGBsYWJlbC1jb250cm9sYDtcclxuICAgICAgICBpZiAoY29udHJvbC5pbmRleExhYmVsKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIGhhdmVJbmRleCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzY3JvbGxUb1ZpZXcoZWxlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc01vYmlsZSgpKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGUpIHtcclxuICAgICAgICAgICAgICAgIGxldCBoMTogYW55ID0gZWxlLmNsb3Nlc3QoJ2RpdltpZCQ9XFwnLWhvbGRlclxcJ10nKTtcclxuICAgICAgICAgICAgICAgIHdoaWxlIChoMSAmJiBoMS5wcmV2aW91c1NpYmxpbmcpIHtcclxuICAgICAgICAgICAgICAgICAgICBoMSA9IGgxLnByZXZpb3VzU2libGluZztcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaDEudGFnTmFtZSA9PT0gJ0RJVicpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChoMSAmJiBoMS5zY3JvbGxJbnRvVmlldykgaDEuc2Nyb2xsSW50b1ZpZXcoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIC0gU2V0IEZvY3VzIGNvbnRyb2xcclxuICAgICAqIEBwYXJhbSBvcHRpb25zXHJcbiAgICAgKi9cclxuXHJcbiAgICBwcml2YXRlIGZvY3VzRmlyc3RDb250cm9sKCkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gdGhpcy5mb3JtRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGRpdnMgPSBmb3JtRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkaXYuY3J1ZC1mb3JtLWNvbnRyb2wnKTtcclxuICAgICAgICBpZiAoZGl2cykge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGRpdiBvZiBkaXZzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0RGl2SG9sZGVyID0gZGl2O1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0Q29udHJvbCA9IHRoaXMuZmlyc3REaXZIb2xkZXIucXVlcnlTZWxlY3RvcignaW5wdXQ6bm90KFt0eXBlPWZpbGVdKTpub3QoW3R5cGU9aGlkZGVuXSknKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdENvbnRyb2wuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVmlldyhmaXJzdENvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdENvbnRyb2wgPSB0aGlzLmZpcnN0RGl2SG9sZGVyLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbnRyb2wgJiYgZmlyc3RDb250cm9sLmlkLmluZGV4T2YoJ3RpbnktYW5ndWxhcicpICE9IDBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sID0gdGhpcy5maXJzdERpdkhvbGRlci5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGZpcnN0Q29udHJvbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29udGVudHMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKCdib2R5JylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbnRyb2wucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuYWRkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aW55bWNlLWZvY3VzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmb2N1c1RvRmlyc3RFcnJvckNvbnRyb2woKSB7XHJcbiAgICAgICAgY29uc3QgZm9ybUVsZW1lbnQgPSB0aGlzLmZvcm1FbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgZGl2LmVycm9yYDtcclxuICAgICAgICBjb25zdCBkaXZIb2xkZXIgPSBmb3JtRWxlbWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcclxuICAgICAgICBpZiAoZGl2SG9sZGVyKSB7XHJcbiAgICAgICAgICAgIGxldCBmaXJzdENvbnRyb2wgPSBkaXZIb2xkZXIucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgICAgICAgaWYgKGZpcnN0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgZmlyc3RDb250cm9sLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvVmlldyhmaXJzdENvbnRyb2wpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmlyc3RDb250cm9sID0gZGl2SG9sZGVyLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sICYmIGZpcnN0Q29udHJvbC5pZC5pbmRleE9mKCd0aW55LWFuZ3VsYXInKSAhPSAwXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaXJzdENvbnRyb2wuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sID0gZGl2SG9sZGVyLnF1ZXJ5U2VsZWN0b3IoJ2lmcmFtZScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgalF1ZXJ5KGZpcnN0Q29udHJvbClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jb250ZW50cygpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnYm9keScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aW55bWNlLWZvY3VzJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJldmVudEJsdXIoZXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy50cmFwRm9jdXMpIHtcclxuICAgICAgICAgICAgbGV0IHRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICB3aGlsZSAodGFyZ2V0IHx8IHRhcmdldC50YWdOYW1lID09ICdGT1JNJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldC5pZC5lbmRzV2l0aCgnLWhvbGRlcicpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCA9PSB0aGlzLmZpcnN0RGl2SG9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENvbnRyb2wgPSB0YXJnZXQucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbnRyb2wgPT0gZXZlbnQudGFyZ2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNWaXNpYmxlKGVsZW0pIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbSk7XHJcbiAgICAgICAgaWYgKHN0eWxlLmRpc3BsYXkgPT09ICdub25lJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChzdHlsZS52aXNpYmlsaXR5ICE9PSAndmlzaWJsZScpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoK3N0eWxlLm9wYWNpdHkgPCAwLjEpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGVsZW0ub2Zmc2V0V2lkdGhcclxuICAgICAgICAgICAgKyBlbGVtLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICArIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0XHJcbiAgICAgICAgICAgICsgZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aFxyXG4gICAgICAgICAgICA9PT0gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGVsZW1DZW50ZXIgPSB7XHJcbiAgICAgICAgICAgIHg6IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCArIGVsZW0ub2Zmc2V0V2lkdGggLyAyLFxyXG4gICAgICAgICAgICB5OiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIGVsZW0ub2Zmc2V0SGVpZ2h0IC8gMlxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGxldCBwb2ludENvbnRhaW5lciA9IDxhbnk+KFxyXG4gICAgICAgICAgICBkb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KGVsZW1DZW50ZXIueCwgZWxlbUNlbnRlci55KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBvaW50Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgICAgIGlmIChwb2ludENvbnRhaW5lciA9PT0gZWxlbSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLWNvbmRpdGlvbmFsLWFzc2lnbm1lbnRcclxuICAgICAgICAgICAgfSB3aGlsZSAoKHBvaW50Q29udGFpbmVyID0gcG9pbnRDb250YWluZXIucGFyZW50Tm9kZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRlbGV0ZVJvdyhpbmRleCwgY29udHJvbDogVGFibGVTY2hlbWEsIHRhYmxlUGF0aCkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgpLnRoZW4oYXN5bmMgcnMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXJzKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgodGFibGVQYXRoKTtcclxuICAgICAgICAgICAgY29uc3QgdG9EZWxldGVSb3dOb2RlID0gdGFibGVOb2RlLmNoaWxkTm9kZXNbaW5kZXhdO1xyXG5cclxuICAgICAgICAgICAgbGV0IHRvRGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wub25EZWxldGluZykge1xyXG4gICAgICAgICAgICAgICAgdG9EZWxldGUgPSBjb250cm9sLm9uRGVsZXRpbmcobmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlOiB0b0RlbGV0ZVJvd05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnZGVsZXRpbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRvRGVsZXRlICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGFibGVOb2RlLm1vZGVsLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICB0YWJsZU5vZGUucmVpbml0Q2hpbGROb2RlcygpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZU1vZGVsQ2hhbmdlZCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25DaGFuZ2VkKG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5vZGU6IHRvRGVsZXRlUm93Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ3RhYmxlQ2hhbmdlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uRGVsZXRlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25EZWxldGVkKG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5vZGU6IHRvRGVsZXRlUm93Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ2RlbGV0ZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBhZGROZXdSb3coY29udHJvbDogVGFibGVTY2hlbWEsIHRhYmxlUGF0aCwgZXZlbnRUeXBlPykge1xyXG4gICAgICAgIGlmIChjb250cm9sLnNob3dFZGl0KSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVGb3JtVGl0bGUgPSBgVGjDqm0gbeG7m2kgJHtjb250cm9sLmxhYmVsfWA7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVGb3JtU2NoZW1hID0gY29udHJvbC5yb3dUZW1wbGF0ZTtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUZvcm1TaG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy50YWJsZUZvcm1DdXJyZW50Um93ID0gLTE7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVGb3JtQ3VycmVudEluZm8gPSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLFxyXG4gICAgICAgICAgICAgICAgdGFibGVQYXRoLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGFibGVOb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aCh0YWJsZVBhdGgpO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGFibGVOb2RlLmNoaWxkTm9kZXMubGVuZ3RoO1xyXG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0YWJsZVBhdGggKyAnWycgKyBpbmRleCArICddJztcclxuICAgICAgICBjb25zdCBkYXRhID0ge307XHJcbiAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wucm93VGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbERlZmF1bHRWYWx1ZShkYXRhLCBzdWJDb250cm9sLCBwYXJlbnRQYXRoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0b0FkZCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wub25BZGRpbmcpIHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRvQWRkID0gY29udHJvbC5vbkFkZGluZyhuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGFibGVOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBldmVudFR5cGUgfHwgJ2FkZGluZycsXHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICB0b0FkZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodG9BZGQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRhYmxlTm9kZS5tb2RlbC5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICB0YWJsZU5vZGUucmVpbml0Q2hpbGROb2RlcygpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSAhPSAnaW5pdCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyZU1vZGVsQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBuZXdSb3dOb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aChwYXJlbnRQYXRoKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wub25DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25DaGFuZ2VkKG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGFibGVOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlOiBuZXdSb3dOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IGV2ZW50VHlwZSB8fCAndGFibGVDaGFuZ2VkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wub25BZGRlZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQWRkZWQobmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0YWJsZU5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5vZGU6IG5ld1Jvd05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnRUeXBlIHx8ICdhZGRlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZE11bHRpUm93KGNvbnRyb2wsIGxlbmd0aCwgdGFibGVQYXRoLCBldmVudFR5cGU/KSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICB0aGlzLmFkZE5ld1Jvdyhjb250cm9sLCB0YWJsZVBhdGgsIGV2ZW50VHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhbmRsZVNhdmVkVGFibGVSb3coZGF0YSkge1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtU2hvdyA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLnRhYmxlRm9ybUN1cnJlbnRJbmZvLmNvbnRyb2w7XHJcbiAgICAgICAgY29uc3QgdGFibGVQYXRoID0gdGhpcy50YWJsZUZvcm1DdXJyZW50SW5mby50YWJsZVBhdGg7XHJcbiAgICAgICAgY29uc3QgZXZlbnRUeXBlID0gdGhpcy50YWJsZUZvcm1DdXJyZW50SW5mby5ldmVudFR5cGU7XHJcbiAgICAgICAgY29uc3QgdGFibGVOb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aCh0YWJsZVBhdGgpO1xyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlRm9ybUN1cnJlbnRSb3cgPiAtMSkge1xyXG4gICAgICAgICAgICB0YWJsZU5vZGUubW9kZWxbdGhpcy50YWJsZUZvcm1DdXJyZW50Um93XSA9IHsgLi4udGFibGVOb2RlLm1vZGVsW3RoaXMudGFibGVGb3JtQ3VycmVudFJvd10sIC4uLmRhdGEgfTtcclxuICAgICAgICAgICAgdGhpcy5maXJlTW9kZWxDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0YWJsZU5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0YWJsZVBhdGggKyAnWycgKyBpbmRleCArICddJztcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wucm93VGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xNb2RlbChkYXRhLCBzdWJDb250cm9sLCBwYXJlbnRQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHRvQWRkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wub25BZGRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9BZGQgPSBjb250cm9sLm9uQWRkaW5nKG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGFibGVOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IGV2ZW50VHlwZSB8fCAnYWRkaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdG9BZGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRvQWRkICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGFibGVOb2RlLm1vZGVsLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0YWJsZU5vZGUucmVpbml0Q2hpbGROb2RlcygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChldmVudFR5cGUgIT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlTW9kZWxDaGFuZ2VkKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Um93Tm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgocGFyZW50UGF0aCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vbkNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQ2hhbmdlZChuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0YWJsZU5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlOiBuZXdSb3dOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBldmVudFR5cGUgfHwgJ3RhYmxlQ2hhbmdlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLm9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQWRkZWQobmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGFibGVOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTm9kZTogbmV3Um93Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnRUeXBlIHx8ICdhZGRlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUm93KGluZGV4LCBjb250cm9sOiBUYWJsZVNjaGVtYSwgdGFibGVQYXRoKSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVOb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aCh0YWJsZVBhdGgpO1xyXG4gICAgICAgIGNvbnN0IGN1cmVudFJvd05vZGUgPSB0YWJsZU5vZGUuY2hpbGROb2Rlc1tpbmRleF07XHJcbiAgICAgICAgaWYgKGNvbnRyb2wub25TYXZlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLm9uU2F2ZShuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGFibGVOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZU5vZGU6IGN1cmVudFJvd05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnc2F2ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZWRpdFJvdyhpbmRleCwgY29udHJvbDogVGFibGVTY2hlbWEsIHRhYmxlUGF0aCkge1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtVGl0bGUgPSBgU+G7rWEgJHtjb250cm9sLmxhYmVsfWA7XHJcbiAgICAgICAgdGhpcy50YWJsZUZvcm1TY2hlbWEgPSBjb250cm9sLnJvd1RlbXBsYXRlO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ3VycmVudFJvdyA9IGluZGV4O1xyXG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgodGFibGVQYXRoKTtcclxuICAgICAgICBjb25zdCB0b0RlbGV0ZVJvd05vZGUgPSB0YWJsZU5vZGUuY2hpbGROb2Rlc1tpbmRleF07XHJcbiAgICAgICAgdGhpcy50YWJsZUZvcm1EYXRhID0gdG9EZWxldGVSb3dOb2RlLnZhbHVlO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtQ3VycmVudEluZm8gPSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wsXHJcbiAgICAgICAgICAgIHRhYmxlUGF0aCxcclxuICAgICAgICAgICAgaW5kZXhcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtU2hvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZVJvd09yZGVyZWQoY29udHJvbDogVGFibGVTY2hlbWEsIGV2dCwgZXZlbnRUeXBlPywgcGFyZW50TW9kZWw/LCBwYXJlbnRQYXRoPywgc291cmNlTm9kZT8sIGJ1YmJsZT8pIHtcclxuICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgocGFyZW50UGF0aCk7XHJcbiAgICAgICAgbGV0IGN1cnJlbnROb2RlO1xyXG5cclxuICAgICAgICAvLyByb3cgaW4gdGFibGVcclxuICAgICAgICBpZiAoY29udHJvbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgY29udHJvbCA9IGN1cnJlbnROb2RlLmNvbnRyb2w7XHJcbiAgICAgICAgICAgIHBhcmVudE5vZGUgPSBwYXJlbnROb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIHBhcmVudE1vZGVsID0gcGFyZW50Tm9kZS5tb2RlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXRDaGlsZE5vZGUoY29udHJvbC5maWVsZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB2YWx1ZSA9IGN1cnJlbnROb2RlLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyBhdXRvIGNvcnJlY3QgdmFsdWVcclxuICAgICAgICB2YWx1ZSA9IHRoaXMuY29ycmVjdFZhbHVlKGN1cnJlbnROb2RlKTtcclxuICAgICAgICBjdXJyZW50Tm9kZS52YWx1ZSA9IHZhbHVlO1xyXG5cclxuICAgICAgICBjb25zdCBldmVudERhdGEgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgIHNvdXJjZUV2ZW50OiBldmVudCxcclxuICAgICAgICAgICAgc291cmNlTm9kZTogc291cmNlTm9kZSB8fCBjdXJyZW50Tm9kZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlLFxyXG4gICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjb250cm9sLm9uUmVvcmRlcmVkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wub25SZW9yZGVyZWQoZXZlbnREYXRhKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghYnViYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZU1vZGVsQ2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZXZlbnREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93Q29udGV4dE1lbnUoZXZ0LCByb3dEYXRhLCBjb250cm9sOiBUYWJsZVNjaGVtYSkge1xyXG4gICAgICAgIHRoaXMucm93RGF0YUN1cnJlbnQgPSByb3dEYXRhO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBhd2FpdCBjb250cm9sLnJvd0J1dHRvbnMocm93RGF0YSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmJ1dHRvbkNvbnRleHRzIHx8IHRoaXMuYnV0dG9uQ29udGV4dHMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zaG93Q29udGV4dE1lbnUoZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaG93Q29udGV4dE1lbnUoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2dCk7XHJcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtZXNzYWdlUm93KGluZGV4LCBjb250cm9sOiBUYWJsZVNjaGVtYSwgdGFibGVQYXRoKSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVOb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aCh0YWJsZVBhdGgpO1xyXG4gICAgICAgIGNvbnN0IGN1cmVudFJvd05vZGUgPSB0YWJsZU5vZGUuY2hpbGROb2Rlc1tpbmRleF07XHJcbiAgICAgICAgaWYgKGNvbnRyb2wub25NZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLm9uTWVzc2FnZShuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGFibGVOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZU5vZGU6IGN1cmVudFJvd05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnbWVzc2FnZScsXHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRhYmxlRnVuY3Rpb25Db2x1bW5XaWR0aChjb250cm9sOiBUYWJsZVNjaGVtYSkge1xyXG4gICAgICAgIGxldCBuZSA9IDIwO1xyXG4gICAgICAgIGlmIChjb250cm9sLnNob3dEZWxldGUpIG5lICs9IDMwO1xyXG4gICAgICAgIGlmIChjb250cm9sLnNob3dFZGl0KSBuZSArPSAzMDtcclxuICAgICAgICBpZiAoY29udHJvbC5zaG93U2F2ZSkgbmUgKz0gMzA7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wucm93QnV0dG9ucykgbmUgKz0gMzA7XHJcbiAgICAgICAgcmV0dXJuIG5lICsgJ3B4JztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TWFza0J5VHlwZShtYXNrVHlwZSkge1xyXG4gICAgICAgIGlmIChtYXNrVHlwZSA9PSAnZGVjaW1hbCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdkb3Rfc2VwYXJhdG9yLjUnO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja0Rpc2FibGVkKGRhdGE6IGFueSwgY29udHJvbDogRm9ybUNvbnRyb2xCYXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGEuX3N0YXR1c1tjb250cm9sLmZpZWxkXS5kaXNhYmxlZCA9PT0gdHJ1ZSB8fCAoZGF0YS5fc3RhdHVzW2NvbnRyb2wuZmllbGRdLmRpc2FibGVkID09PSB1bmRlZmluZWQgJiYgY29udHJvbC5kaXNhYmxlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tIaWRkZW4oY29udHJvbDogRm9ybUNvbnRyb2xCYXNlLCBwYXJlbnRNb2RlbDogYW55LCBwYXRoOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgY3VycmVudE5vZGUgPSBudWxsO1xyXG4gICAgICAgIGlmIChwYXRoICYmIGNvbnRyb2xbJ25vZGVzJ10pIHtcclxuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBjb250cm9sWydub2RlcyddW3BhdGhdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3VycmVudE5vZGUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb250cm9sWydfaGlkZGVuJ10gPSB0cnVlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyZW50TW9kZWwuX3N0YXR1c1tjb250cm9sLmZpZWxkXS5oaWRkZW4gPT09IHRydWVcclxuICAgICAgICAgICAgfHwgKHBhcmVudE1vZGVsLl9zdGF0dXNbY29udHJvbC5maWVsZF0uaGlkZGVuID09PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgICAgICYmIChjb250cm9sLmhpZGRlblxyXG4gICAgICAgICAgICAgICAgICAgIHx8IChjb250cm9sLmhpZGRlbkNoZWNrICYmIGNvbnRyb2wuaGlkZGVuQ2hlY2sodGhpcy5fbWluaW1pemVkRGF0YSwgY3VycmVudE5vZGUpKVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNvbnRyb2xbJ19oaWRkZW4nXSA9ICEhcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGV4dFRkKGNvbnRyb2wsIGRhdGEsIGluZGV4LCB0YWJsZVBhdGgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb250cm9sLFxyXG4gICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICBpbmRleCxcclxuICAgICAgICAgICAgdGFibGVQYXRoLFxyXG4gICAgICAgICAgICBwYXJlbnRQYXRoOiBgJHt0YWJsZVBhdGh9WyR7aW5kZXh9XWAsXHJcbiAgICAgICAgICAgIHBhdGg6IGAke3RhYmxlUGF0aH1bJHtpbmRleH1dLiR7Y29udHJvbC5maWVsZH1gLFxyXG4gICAgICAgICAgICBzaG93TGFiZWw6IGZhbHNlLFxyXG4gICAgICAgICAgICBtZFdpZHRoOiAxMlxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzTW9iaWxlT3JUYWJsZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzTW9iaWxlKClcclxuICAgICAgICAgICAgfHwgdGhpcy5fZGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLmlzVGFibGV0KClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlQ2FjaGluZykge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUNhY2hlVmFsdWVzVG9TdG9yYWdlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Gb2N1c1RleHRDb250cm9sKGV2dCkgeyB9XHJcblxyXG4gICAgcHVibGljIG9uU2V0dGluZ3MoZXZlbnQpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uVGFibGVTY2hlbWFPbGRlc3QoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlRBQkxFX1NDSEVNQV9QQUdJTkdfT0xERVNULCBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UYWJsZVNjaGVtYU5ld2VzdChldnQpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5DT01NT04uVEFCTEVfU0NIRU1BX1BBR0lOR19ORVdFU1QsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblRhYmxlU2NoZW1hTmV4dChldnQpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5DT01NT04uVEFCTEVfU0NIRU1BX1BBR0lOR19ORVhULCBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UYWJsZVNjaGVtYVByZXYoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlRBQkxFX1NDSEVNQV9QQUdJTkdfUFJFViwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZnJlc2goZXZ0KSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRyb2xEYXRhU291cmNlKGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSwgZGF0YTogYW55KSB7XHJcbiAgICAgICAgaWYgKGRhdGEuX3NvdXJjZVtjb250cm9sLmZpZWxkXSBpbnN0YW5jZW9mIEFycmF5KSByZXR1cm4gZGF0YS5fc291cmNlW2NvbnRyb2wuZmllbGRdO1xyXG4gICAgICAgIGlmIChjb250cm9sLmRhdGFTb3VyY2UgaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIGNvbnRyb2wuZGF0YVNvdXJjZTtcclxuICAgICAgICBpZiAoY29udHJvbC5kYXRhU291cmNlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHJldHVybiBjb250cm9sLmRhdGFTb3VyY2UoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIENvbnRyb2xUcmVlTm9kZSB7XHJcbiAgICBtb2RlbFBhdGg6IHN0cmluZztcclxuICAgIHNjaGVtYVBhdGg6IHN0cmluZztcclxuICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICBwYXJlbnROb2RlOiBDb250cm9sVHJlZU5vZGU7XHJcbiAgICByb290Tm9kZTogQ29udHJvbFRyZWVOb2RlO1xyXG4gICAgY2hpbGROb2RlczogQ29udHJvbFRyZWVOb2RlW10gPSBbXTtcclxuICAgIGNvbnRyb2w6IEZvcm1Db250cm9sQmFzZTtcclxuICAgIGZvcm1Db250cm9scztcclxuICAgIGtleXNQbHVzOiBzdHJpbmdbXTtcclxuICAgIHByaXZhdGUgX2NydWRGb3JtOiBDcnVkRm9ybUNvbXBvbmVudDtcclxuICAgIHByaXZhdGUgY2hpbGROb2RlRGljID0ge307XHJcbiAgICBwcml2YXRlIGRhdGE6IGFueTtcclxuICAgIHByaXZhdGUgaGFzU2NoZW1hID0gdHJ1ZTtcclxuICAgIGNvbnN0cnVjdG9yKG1vZGVsOiBhbnksIHNjaGVtYXM6IFtdLCBmaWVsZD8sIHBhcmVudE5vZGU/OiBDb250cm9sVHJlZU5vZGUpIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBtb2RlbDtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9scyA9IHNjaGVtYXM7XHJcbiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUubW9kZWxQYXRoICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbFBhdGggPSBwYXJlbnROb2RlLm1vZGVsUGF0aCArICcuJyArIGZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZW1hUGF0aCA9IHBhcmVudE5vZGUuc2NoZW1hUGF0aCArICcuJyArIGZpZWxkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGZpZWxkID09PSAnbnVtYmVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxQYXRoID0gcGFyZW50Tm9kZS5tb2RlbFBhdGggKyAnWycgKyBmaWVsZCArICddJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYVBhdGggPSBwYXJlbnROb2RlLnNjaGVtYVBhdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNTY2hlbWEgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWxQYXRoID0gZmllbGQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYVBhdGggPSBmaWVsZDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5yb290Tm9kZSA9IHBhcmVudE5vZGUucm9vdE5vZGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvb3ROb2RlID0gdGhpcztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZmllbGQgPSBmaWVsZDtcclxuICAgICAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1NjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wgPSBzY2hlbWFzW3RoaXMuc2NoZW1hUGF0aF07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250cm9sWydub2RlcyddKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9sWydub2RlcyddID0ge307XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xbJ25vZGVzJ11bdGhpcy5tb2RlbFBhdGhdID0gdGhpcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzY2hlbWEgPSBzY2hlbWFzW3RoaXMuc2NoZW1hUGF0aF07XHJcbiAgICAgICAgbGV0IGtleXNQbHVzID0gW107XHJcbiAgICAgICAgaWYgKHNjaGVtYSkge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ29udGFpbmVyU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzUGx1cyA9IHNjaGVtYS5jb250cm9scy5maWx0ZXIocSA9PiBxLmZpZWxkKS5tYXAocSA9PiBxLmZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAga2V5c1BsdXMgPSBzY2hlbWEucm93VGVtcGxhdGUuZmlsdGVyKHEgPT4gcS5maWVsZCkubWFwKHEgPT4gcS5maWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zY2hlbWFQYXRoKSB7XHJcbiAgICAgICAgICAgICAgICBrZXlzUGx1cyA9IE9iamVjdC5rZXlzKHNjaGVtYXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMua2V5c1BsdXMgPSBrZXlzUGx1cztcclxuICAgICAgICB0aGlzLmluaXRDaGlsZE5vZGVzKG1vZGVsLCBzY2hlbWFzLCBrZXlzUGx1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlaW5pdENoaWxkTm9kZXMoKSB7XHJcbiAgICAgICAgdGhpcy5jaGlsZE5vZGVzLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgdGhpcy5jaGlsZE5vZGVEaWMgPSB7fTtcclxuICAgICAgICB0aGlzLmluaXRDaGlsZE5vZGVzKHRoaXMuZGF0YSwgdGhpcy5mb3JtQ29udHJvbHMsIHRoaXMua2V5c1BsdXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdENoaWxkTm9kZXMobW9kZWw6IGFueSwgc2NoZW1hczogW10sIGtleXNQbHVzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGlmIChpc0xpdGVyYWxPYmplY3QobW9kZWwpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbEtleSA9IG5ldyBTZXQoWy4uLmtleXNQbHVzLCAuLi5PYmplY3Qua2V5cyhtb2RlbCldKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgYWxsS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9ICdfc3RhdHVzJyAmJiBrZXkgIT0gJ19lcnJvcnMnICYmIGtleSAhPSAnX3NvdXJjZScgJiYga2V5ICE9IEtleUZsYXNoU2hvdykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyBDb250cm9sVHJlZU5vZGUobW9kZWxba2V5XSwgc2NoZW1hcywga2V5LCB0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkTm9kZXMucHVzaChjaGlsZE5vZGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGROb2RlRGljW2NoaWxkTm9kZS5maWVsZF0gPSBjaGlsZE5vZGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheShtb2RlbCkpIHtcclxuICAgICAgICAgICAgbGV0IGkgPSAwO1xyXG4gICAgICAgICAgICBpZiAobW9kZWwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gbmV3IENvbnRyb2xUcmVlTm9kZShpdGVtLCBzY2hlbWFzLCBpLCB0aGlzKTtcclxuICAgICAgICAgICAgICAgICAgICBjaGlsZE5vZGUucGFyZW50Tm9kZSA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkTm9kZURpY1tjaGlsZE5vZGUuZmllbGRdID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2hpbGROb2RlKGZpZWxkKTogQ29udHJvbFRyZWVOb2RlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZE5vZGVEaWNbZmllbGRdO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENydWRGb3JtKGNydWRGb3JtOiBDcnVkRm9ybUNvbXBvbmVudCkge1xyXG4gICAgICAgIHRoaXMuX2NydWRGb3JtID0gY3J1ZEZvcm07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBhcmVudE1vZGVsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHJldHVybiB0aGlzLnBhcmVudE5vZGUubW9kZWw7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBhcmVudE1vZGVsUGF0aCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSByZXR1cm4gdGhpcy5wYXJlbnROb2RlLm1vZGVsUGF0aDtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcGFyZW50Q29udHJvbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSByZXR1cm4gdGhpcy5wYXJlbnROb2RlLmNvbnRyb2w7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IG1vZGVsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHJldHVybiB0aGlzLnBhcmVudE5vZGUuZGF0YVt0aGlzLmZpZWxkXTtcclxuICAgICAgICBlbHNlIHJldHVybiB0aGlzLmRhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IG1vZGVsKHZhbCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBhcmVudE5vZGUpIHRoaXMucGFyZW50Tm9kZS5kYXRhW3RoaXMuZmllbGRdID0gdmFsO1xyXG4gICAgICAgIGVsc2UgdGhpcy5kYXRhID0gdmFsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCB2YWx1ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSByZXR1cm4gdGhpcy5wYXJlbnROb2RlLmRhdGFbdGhpcy5maWVsZF07XHJcbiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB2YWx1ZSh2YWwpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB0aGlzLnBhcmVudE5vZGUuZGF0YVt0aGlzLmZpZWxkXSA9IHZhbDtcclxuICAgICAgICBlbHNlIHRoaXMuZGF0YSA9IHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0SGlkZGVuKGZpZWxkOiBzdHJpbmcgfCBzdHJpbmdbXSwgaGlkZGVuOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkKSkge1xyXG4gICAgICAgICAgICBmaWVsZC5mb3JFYWNoKGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRIaWRkZW5GaWVsZChmLCBoaWRkZW4pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0SGlkZGVuRmllbGQoZmllbGQsIGhpZGRlbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0SGlkZGVuRmllbGQoZmllbGQ6IHN0cmluZywgaGlkZGVuOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoJy4nKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5UGF0aChgJHt0aGlzLm1vZGVsUGF0aH0uJHtmaWVsZH1gKTtcclxuICAgICAgICAgICAgY29uc3QgbGFzdEZpZWxkID0gZmllbGQuc3BsaXQoJy4nKS5wb3AoKTtcclxuICAgICAgICAgICAgY2hpbGROb2RlLnBhcmVudE5vZGUuZGF0YS5fc3RhdHVzW2xhc3RGaWVsZF0uaGlkZGVuID0gaGlkZGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5kYXRhLl9zdGF0dXNbZmllbGRdLmhpZGRlbiA9IGhpZGRlbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vZGVCeVBhdGgobW9kZWxQYXRoKTogQ29udHJvbFRyZWVOb2RlIHtcclxuICAgICAgICBpZiAobW9kZWxQYXRoID09IG51bGwgfHwgbW9kZWxQYXRoID09PSAnJykgcmV0dXJuIHRoaXMucm9vdE5vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEluVHJlZSh0aGlzLnJvb3ROb2RlLCBtb2RlbFBhdGgudG9Mb3dlckNhc2UoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5vZGVCeVNjaGVtYVBhdGgoc2NoZW1hUGF0aCk6IENvbnRyb2xUcmVlTm9kZSB7XHJcbiAgICAgICAgaWYgKHNjaGVtYVBhdGggPT0gbnVsbCB8fCBzY2hlbWFQYXRoID09PSAnJykgcmV0dXJuIHRoaXMucm9vdE5vZGU7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZFNjaGVtYUluVHJlZSh0aGlzLnJvb3ROb2RlLCBzY2hlbWFQYXRoLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmluZEluVHJlZShub2RlOiBDb250cm9sVHJlZU5vZGUsIG1vZGVsUGF0aCk6IENvbnRyb2xUcmVlTm9kZSB7XHJcbiAgICAgICAgaWYgKG5vZGUubW9kZWxQYXRoICE9IG51bGwgJiYgbm9kZS5tb2RlbFBhdGgudG9Mb3dlckNhc2UoKSA9PSBtb2RlbFBhdGgudG9Mb3dlckNhc2UoKSkgcmV0dXJuIG5vZGU7XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGROb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZS5tb2RlbFBhdGggIT0gbnVsbCAmJiBtb2RlbFBhdGguc3RhcnRzV2l0aChjaGlsZE5vZGUubW9kZWxQYXRoLnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSB0aGlzLmZpbmRJblRyZWUoY2hpbGROb2RlLCBtb2RlbFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZSkgcmV0dXJuIHJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmluZFNjaGVtYUluVHJlZShub2RlOiBDb250cm9sVHJlZU5vZGUsIHNjaGVtYVBhdGgpOiBDb250cm9sVHJlZU5vZGUge1xyXG4gICAgICAgIGlmIChub2RlLnNjaGVtYVBhdGggIT0gbnVsbCAmJiBub2RlLnNjaGVtYVBhdGgudG9Mb3dlckNhc2UoKSA9PSBzY2hlbWFQYXRoLnRvTG93ZXJDYXNlKCkpIHJldHVybiBub2RlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUuc2NoZW1hUGF0aCAhPSBudWxsICYmIHNjaGVtYVBhdGguc3RhcnRzV2l0aChjaGlsZE5vZGUuc2NoZW1hUGF0aC50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlID0gdGhpcy5maW5kU2NoZW1hSW5UcmVlKGNoaWxkTm9kZSwgc2NoZW1hUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlKSByZXR1cm4gcmU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldERhdGFTb3VyY2VUYWJsZVNjaGVtYShwYXRoOiBzdHJpbmcsIGRhdGFTb3VyY2U6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgdGFibGVOb2RlID0gdGhpcy5nZXROb2RlQnlQYXRoKHBhdGgpO1xyXG4gICAgICAgIGlmICghdGFibGVOb2RlLm1vZGVsKSB7XHJcbiAgICAgICAgICAgIHRhYmxlTm9kZS5tb2RlbCA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGFibGVOb2RlLm1vZGVsLmxlbmd0aCA+IGRhdGFTb3VyY2UubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRhYmxlTm9kZS5tb2RlbCA9IHRhYmxlTm9kZS5tb2RlbC5zcGxpY2UoZGF0YVNvdXJjZS5sZW5ndGgsIGRhdGFTb3VyY2UubGVuZ3RoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0YWJsZU5vZGUubW9kZWwubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgbWVyZ2VKU09OT2xkKHRhYmxlTm9kZS5tb2RlbFtpXSwgZGF0YVNvdXJjZVtpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gdGFibGVOb2RlLm1vZGVsLmxlbmd0aDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5yb290Tm9kZS5fY3J1ZEZvcm0uYWRkTmV3Um93KDxUYWJsZVNjaGVtYT50YWJsZU5vZGUuY29udHJvbCwgcGF0aCk7XHJcbiAgICAgICAgICAgIG1lcmdlSlNPTk9sZCh0YWJsZU5vZGUubW9kZWxbaV0sIGRhdGFTb3VyY2VbaV0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
|
|
2158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjb21wb25lbnRzL2NydWQvY3J1ZC1mb3JtL2NydWQtZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDWSxTQUFTLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFDNUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUNwRCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxRQUFRLENBQUM7QUFDbEMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUUvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDNUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsb0JBQW9CLEVBQUUseUJBQXlCLEVBQUUsK0JBQStCLEVBQ2hGLG1CQUFtQixFQUFFLHFCQUFxQixFQUMxQyx5QkFBeUIsRUFBRSx3QkFBd0IsRUFDbkQsOEJBQThCLEVBQUUsa0JBQWtCLEVBQUUsd0JBQXdCLEVBQUUsMkJBQTJCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFDM0kscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQ3hILFNBQVMsRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFDNUQsY0FBYyxFQUVkLHFCQUFxQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxRQUFRLEVBQUUsK0JBQStCLEVBQzFILFNBQVMsRUFDVCw0QkFBNEIsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUscUJBQXFCLEVBQUUsaUJBQWlCLEVBQ2xKLFdBQVcsRUFBRSx1QkFBdUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFDM0YsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDakUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSx1QkFBdUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsc0JBQXNCLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2UyxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDMUcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBRWhGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxxQkFBcUI7QUFDckIsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUl2QixNQUFNLGdCQUFnQixHQUFHO0lBQ3JCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLO0lBQ2xDLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsUUFBUSxDQUFDLGNBQWM7SUFDcEQsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxDQUFDLE9BQU87SUFDbEMsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLEVBQUUsUUFBUSxDQUFDLGdCQUFnQjtDQUN2RCxDQUFDO0FBUUYsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGFBQWE7SUFtSGhELFlBQ1csU0FBbUIsRUFDbkIsY0FBNkIsRUFDN0IsWUFBeUIsRUFDeEIsaUJBQW1DLEVBQ3BDLHNCQUE2QyxFQUM1QyxnQkFBaUMsRUFDbEMsVUFBd0IsRUFDeEIsb0JBQXlDLEVBQ3hDLGFBQWtDO1FBRTFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQVZWLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFDbkIsbUJBQWMsR0FBZCxjQUFjLENBQWU7UUFDN0IsaUJBQVksR0FBWixZQUFZLENBQWE7UUFDeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFrQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXVCO1FBQzVDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFDbEMsZUFBVSxHQUFWLFVBQVUsQ0FBYztRQUN4Qix5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXFCO1FBQ3hDLGtCQUFhLEdBQWIsYUFBYSxDQUFxQjtRQXZIckMsWUFBTyxHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO1FBR2pELGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBQy9CLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLGdCQUFXLEdBQUcsU0FBUyxDQUFDO1FBT2YsV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUNaLGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUE4Q2hCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekMsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUM1QyxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDekMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMsYUFBUSxHQUE0QixJQUFJLFlBQVksRUFBYSxDQUFDO1FBQ2xFLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUluRCxlQUFVLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLG9CQUFlLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQUNyQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQixtQ0FBbUM7UUFDbkMsY0FBUyxHQUFHLENBQUMsQ0FBQztRQUNkLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLHlCQUFvQixHQUFRLEVBQUUsQ0FBQztRQUMvQixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBRXJCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGNBQVMsR0FBd0MsRUFBRSxDQUFDO1FBQ3BELHdCQUFtQixHQUFHLGVBQWUsQ0FBQztRQUV0QyxzQkFBaUIsR0FBRyxLQUFLLENBQUM7UUFDMUIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUV0Qix1QkFBa0IsR0FBRyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDakUsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFFeEIsb0JBQWUsR0FBcUIsRUFBRSxDQUFDO1FBQ3ZDLHlCQUFvQixHQUFRLEVBQUUsQ0FBQztRQUUvQixtQkFBYyxHQUFlLEVBQUUsQ0FBQztRQUNoQyxtQkFBYyxHQUFRLEVBQUUsQ0FBQztRQUN6QiwwQkFBcUIsR0FBcUIsRUFBRSxDQUFDO1FBQzdDLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLHFCQUFnQixHQUFHLGFBQWEsQ0FBQztRQXU5QmpDOztXQUVHO1FBQ0ksMkJBQXNCLEdBQUcsQ0FBTyxPQUF3QixFQUFFLEtBQU0sRUFBRSxTQUFVLEVBQUUsV0FBWSxFQUFFLFVBQVcsRUFBRSxVQUFXLEVBQUUsTUFBTyxFQUFFLEVBQUU7WUFDcEksSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDMUQsSUFBSSxXQUFXLENBQUM7WUFFaEIsZUFBZTtZQUNmLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtnQkFDakIsV0FBVyxHQUFHLFVBQVUsQ0FBQztnQkFDekIsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7Z0JBQzlCLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDO2dCQUNuQyxXQUFXLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUNsQztpQkFDSTtnQkFDRCxXQUFXLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEQ7WUFDRCxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBRTlCLHFCQUFxQjtZQUNyQixLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN2QyxXQUFXLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUUxQixpQkFBaUI7WUFDakIsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRWpDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDM0I7WUFFRCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQztnQkFDNUIsV0FBVztnQkFDWCxXQUFXLEVBQUUsS0FBSztnQkFDbEIsVUFBVSxFQUFFLFVBQVUsSUFBSSxXQUFXO2dCQUNyQyxTQUFTO2dCQUNULFFBQVEsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztZQUVILElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsSUFBSTtvQkFDQSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3RDO2dCQUNELFdBQU0sR0FBRzthQUNaO1lBRUQsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDVCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQzthQUMzQjtZQUVELElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsUUFBUSxFQUFFO2dCQUMvRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFVBQVUsSUFBSSxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDcEs7WUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFO2dCQUMvQyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLENBQUMsQ0FBQzthQUNOO1lBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFBLENBQUE7UUEwSUQsNEJBQXVCLEdBQUcsR0FBRyxFQUFFO1lBQzNCLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2FBQ25EO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFBO1FBRUQscUVBQXFFO1FBQ3JFLHFCQUFnQixHQUFHLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUE7UUFycENHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXBELDBCQUEwQjtRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNsRSxJQUFJLFFBQVEsRUFBRTtnQkFDVixJQUFJLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO2FBQ25EO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBNUhELElBQWEsVUFBVSxDQUFDLEtBQWE7UUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7UUFDN0IsSUFBSSxLQUFLLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxFQUFFLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUtELElBQWEsSUFBSSxDQUFDLEtBQVU7UUFDeEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLEtBQUssSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNuRDtZQUNELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFakMsTUFBTSxLQUFLLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDM0IsU0FBUyxFQUFFLGNBQWM7Z0JBQ3pCLFFBQVEsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNoRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztnQkFDckIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2FBQ3hCO1NBQ0o7YUFDSSxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDbkQ7WUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRWpDLE1BQU0sS0FBSyxHQUFHLElBQUksU0FBUyxDQUFDO2dCQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQzNCLFNBQVMsRUFBRSxjQUFjO2dCQUN6QixRQUFRLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQzthQUNJO1lBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwQztJQUNMLENBQUM7SUFBQSxDQUFDO0lBeUVGLFFBQVE7UUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNwQixJQUFJLHVCQUF1QixDQUFDO2dCQUN4QixLQUFLLEVBQUUsYUFBYTtnQkFDcEIsS0FBSyxFQUFFLE1BQU07Z0JBQ2IsSUFBSSxFQUFFLGNBQWMsQ0FBQyxtQkFBbUI7Z0JBQ3hDLFdBQVcsRUFBRSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtvQkFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQzlCLENBQUM7YUFDSixDQUFDLENBQ0wsQ0FBQztTQUNMO1FBRUQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxjQUFjLENBQUMsWUFBWSxHQUFHLElBQUk7UUFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELEtBQUs7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRU8sVUFBVSxDQUFDLEtBQUs7UUFDcEIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUU7Z0JBQ3JCLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRTtvQkFDbEIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7cUJBQzdCO2lCQUNKO2dCQUNELElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRTtvQkFDbEIsS0FBSyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7d0JBQ3hCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7cUJBQ3RCO2lCQUNKO3FCQUNJO29CQUNELElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQy9CO2FBQ0o7U0FDSjthQUNJLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO2dCQUN0QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3pCO1NBQ0o7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQUs7UUFDekIsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxLQUFLLENBQUMsY0FBYyxJQUFJLElBQUksSUFBSSxLQUFLLENBQUMsY0FBYyxLQUFLLEVBQUUsRUFBRTtnQkFDN0QsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUN4RDtZQUVELE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNoQixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssRUFBRTtnQkFDckIsSUFBSSxHQUFHLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRTtvQkFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDL0MsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO3dCQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7cUJBQ3JCO2lCQUNKO2FBQ0o7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNmO2FBQ0ksSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ2YsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7Z0JBQ3RCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2FBQ3hDO1lBQ0QsT0FBTyxHQUFHLENBQUM7U0FDZDthQUNJLElBQUksS0FBSyxJQUFJLElBQUksRUFBRTtZQUNwQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxRQUFRO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUFFLE9BQU87UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQ2pDLGtGQUFrRjtZQUNsRixVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNaLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDO29CQUM1QixXQUFXLEVBQUUsSUFBSSxDQUFDLFNBQVM7b0JBQzNCLFNBQVMsRUFBRSxXQUFXO29CQUN0QixRQUFRLEVBQUUsSUFBSTtpQkFDakIsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDMUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBRXRCLGtGQUFrRjtRQUNsRixVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQzVCLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUztnQkFDM0IsU0FBUyxFQUFFLFdBQVc7Z0JBQ3RCLFFBQVEsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFVBQVU7UUFDZCxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNuQztRQUVELEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUMxQztRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVztRQUN0RCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakQsSUFBSSxXQUFXLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNoQyxJQUFJLFVBQVUsSUFBSSxJQUFJO1lBQUUsV0FBVyxHQUFHLFVBQVUsR0FBRyxHQUFHLEdBQUcsV0FBVyxDQUFDO1FBRXJFLElBQUksT0FBTyxZQUFZLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLENBQUMsRUFBRTtnQkFDL0UsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDbkM7WUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsWUFBWSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQ3pFLElBQUksT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDMUQsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztnQkFDaEQsbURBQW1EO2dCQUNuRCxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQzVELENBQUMsQ0FBQyxDQUFDO2FBQ047WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDVixLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzNDLEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtvQkFDMUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7aUJBQ3hFO2dCQUNELENBQUMsRUFBRSxDQUFDO2FBQ1A7U0FDSjthQUNJLElBQUksT0FBTyxZQUFZLGVBQWUsRUFBRTtZQUN6QyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtnQkFDcEYsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7YUFDbkM7WUFFRCxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLFVBQVUsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUM5RTtTQUNKO1FBQ0QsU0FBUztRQUNULG9GQUFvRjtRQUNwRixnRUFBZ0U7UUFDaEUsV0FBVztRQUNYLElBQUk7SUFDUixDQUFDO0lBRUQsbUNBQW1DO1FBQy9CLEtBQUssTUFBTSxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDdkMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDMUQ7SUFDTCxDQUFDO0lBRU8sdUJBQXVCLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxVQUFXO1FBQzdELElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRCxJQUFJLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQ2hDLElBQUksVUFBVSxJQUFJLElBQUk7WUFBRSxXQUFXLEdBQUcsVUFBVSxHQUFHLEdBQUcsR0FBRyxXQUFXLENBQUM7UUFFckUsSUFBSSxPQUFPLFlBQVksV0FBVyxFQUFFO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLEtBQUssQ0FBQyxFQUFFO2dCQUMvRSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQzthQUNuQztZQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDekUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFO2dCQUMxRCxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQ25EO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ1YsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUMzQyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQzFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO2lCQUMvRTtnQkFDRCxDQUFDLEVBQUUsQ0FBQzthQUNQO1NBQ0o7YUFDSSxJQUFJLE9BQU8sWUFBWSxlQUFlLEVBQUU7WUFDekMsSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7Z0JBQ3BGLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO2FBQ25DO1lBRUQsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7YUFDckY7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO2dCQUNyRSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7b0JBQ3RCLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztpQkFDckQ7cUJBQ0ksSUFBSSxPQUFPLFlBQVkscUJBQXFCLEVBQUU7b0JBQy9DLElBQUksT0FBTyxDQUFDLGdCQUFnQjsyQkFDckIsT0FBTyxDQUFDLFVBQVU7MkJBQ2xCLE9BQU8sQ0FBQyxVQUFVLENBQUMsb0JBQW9COzJCQUN2QyxPQUFPLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3JEO3dCQUNFLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3FCQUNuRztpQkFDSjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8sZUFBZSxDQUFDLFdBQVcsRUFBRSxLQUFLO1FBQ3RDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztZQUFFLFdBQVcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRW5ELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztZQUFFLFdBQVcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztZQUFFLFdBQVcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBRW5ELElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUFzQixFQUFFLFFBQVM7UUFDdkQsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUN6QixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUMxQjtRQUNELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUMxQjtRQUNELElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUU7WUFDbkMsTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxNQUFNLFlBQVksV0FBVztlQUMxQixNQUFNLFlBQVksV0FBVyxFQUNsQztZQUNFLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNmLE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUM3QztTQUNKO1FBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO1lBQ2QsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUN2QixJQUFJLFFBQVEsSUFBSSxJQUFJO2dCQUFFLEdBQUcsR0FBRyxRQUFRLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUNqRCxNQUFNLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztTQUNuQztRQUVELE1BQU0sQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFdEQsSUFBSSxNQUFNLFlBQVksV0FBVyxFQUFFO1lBQy9CLE1BQU0sT0FBTyxHQUFnQixNQUFNLENBQUM7WUFDcEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUMxQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDMUQ7U0FDSjthQUNJLElBQUksTUFBTSxZQUFZLHFCQUFxQixFQUFFO1lBQzlDLE1BQU0scUJBQXFCLEdBQTBCLE1BQU0sQ0FBQztZQUM1RCxxQkFBcUIsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQzVDLHFCQUFxQixDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztZQUNqRCxJQUFJLENBQUMscUJBQXFCLENBQUMsY0FBYyxFQUFFO2dCQUN2QyxxQkFBcUIsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQzNDO1lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDMUMscUJBQXFCLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQzthQUN4QztZQUVELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0M7YUFDSSxJQUFJLE1BQU0sWUFBWSx1QkFBdUIsRUFBRTtZQUNoRCxNQUFNLHVCQUF1QixHQUEwQixNQUFNLENBQUM7WUFDOUQsdUJBQXVCLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQztZQUM5QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNDO2FBQ0ksSUFBSSxNQUFNLFlBQVksZUFBZSxFQUFFO1lBQ3hDLE1BQU0sT0FBTyxHQUFvQixNQUFNLENBQUM7WUFDeEMsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUN2QyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7YUFDM0Q7U0FDSjthQUNJLElBQUksTUFBTSxZQUFZLCtCQUErQixFQUFFO1lBQ3hELE1BQU0seUJBQXlCLEdBQW9DLE1BQU0sQ0FBQztZQUMxRSx5QkFBeUIsQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0M7YUFDSSxJQUFJLE1BQU0sWUFBWSxvQkFBb0IsRUFBRTtZQUM3QyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzNDO2FBQ0ksSUFBSSxNQUFNLFlBQVksNEJBQTRCLEVBQUU7WUFDckQsTUFBTSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztTQUNyQztJQUNMLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxNQUFXO1FBQ3hDLElBQUksTUFBTSxZQUFZLFdBQVcsRUFBRTtZQUMvQixNQUFNLE9BQU8sR0FBZ0IsTUFBTSxDQUFDO1lBQ3BDLEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzdDO1NBQ0o7YUFDSSxJQUFJLE1BQU0sWUFBWSxxQkFBcUIsRUFBRTtZQUM5QyxNQUFNLHFCQUFxQixHQUEwQixNQUFNLENBQUM7WUFDNUQsSUFBSSxxQkFBcUIsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7YUFDSSxJQUFJLE1BQU0sWUFBWSwrQkFBK0IsRUFBRTtZQUN4RCxNQUFNLHFCQUFxQixHQUFvQyxNQUFNLENBQUM7WUFDdEUsSUFBSSxxQkFBcUIsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2FBQ3REO1NBQ0o7YUFDSSxJQUFJLE1BQU0sWUFBWSxlQUFlLEVBQUU7WUFDeEMsTUFBTSxPQUFPLEdBQW9CLE1BQU0sQ0FBQztZQUN4QyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM3QztTQUNKO0lBQ0wsQ0FBQztJQUVhLHNCQUFzQixDQUFDLHFCQUE4RTs7WUFDL0csSUFBSSxVQUFVLEdBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsRUFBRTtnQkFDckQsVUFBVSxHQUFHLHFCQUFxQixDQUFDLGNBQWMsQ0FBQzthQUNyRDtpQkFDSSxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsSUFBSSxVQUFVLEVBQUU7Z0JBQ2xFLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUN2RDtpQkFDSTtnQkFDRCxVQUFVLEdBQUcsTUFBTSxxQkFBcUIsQ0FBQyxjQUFjLENBQUM7YUFDM0Q7WUFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN4QixNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO2dCQUN2QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLFdBQVcsQ0FBQyxDQUFDO2dCQUNyRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVE7dUJBQ2IsQ0FBQyxNQUFNLFlBQVkscUJBQXFCLElBQUksTUFBTSxZQUFZLCtCQUErQixDQUFDLEVBQUU7b0JBQ25HLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQztpQkFDdkM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsK0JBQStCLENBQUMscUJBQXFCLEVBQUUsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzNGLENBQUM7S0FBQTtJQUVPLCtCQUErQixDQUFDLGFBQXNFLEVBQUUsVUFBb0IsRUFBRSxhQUFhO1FBQy9JLElBQUksVUFBVSxZQUFZLEtBQUssRUFBRTtZQUM3QixLQUFLLE1BQU0sTUFBTSxJQUFJLFVBQVUsRUFBRTtnQkFDN0IsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztnQkFDdkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxjQUFjLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQy9DLGFBQWEsQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQyxLQUFnQixFQUFFLEVBQUU7d0JBQzNELElBQUksYUFBYSxZQUFZLHFCQUFxQixFQUFFOzRCQUNoRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7NEJBQ3hCLElBQUksYUFBYSxDQUFDLDJCQUEyQjttQ0FDdEMsS0FBSyxDQUFDLFNBQVMsSUFBSSxhQUFhLEVBQUU7Z0NBQ3JDLFdBQVcsR0FBRyxJQUFJLENBQUM7NkJBQ3RCO2lDQUNJLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJO21DQUNyQixLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7bUNBQ2pCLENBQUMsS0FBSyxDQUFDLEtBQUssWUFBWSxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0NBQzlELElBQUksYUFBYSxDQUFDLFVBQVUsRUFBRTtvQ0FDMUIsYUFBYSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztpQ0FDM0M7NkJBQ0o7aUNBQ0k7Z0NBQ0QsV0FBVyxHQUFHLElBQUksQ0FBQzs2QkFDdEI7NEJBQ0QsSUFBSSxXQUFXLEVBQUU7Z0NBQ2IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7Z0NBQ3hHLElBQUksYUFBYSxDQUFDLFVBQVU7dUNBQ3JCLENBQUMsQ0FBQyxDQUFDLGNBQWMsWUFBWSxxQkFBcUIsQ0FBQzsyQ0FDL0MsY0FBYyxDQUFDLFVBQVUsSUFBSSxjQUFjLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUNqRixFQUNIO29DQUNFLGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2lDQUM3Qzs2QkFDSjt5QkFDSjs2QkFDSTs0QkFDRCxJQUFJLGFBQWEsQ0FBQyxVQUFVLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUU7Z0NBQzlELGFBQWEsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7NkJBQ3RDO3lCQUNKO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNOO2dCQUNELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBQzthQUN0RjtTQUNKO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE9BQXdCLEVBQUUsV0FBVztRQUM5RCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUMxQixNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztZQUNyRCxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsQ0FBTyxLQUFnQixFQUFFLEVBQUU7Z0JBQ2xELE1BQU0sbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2pDLE1BQU0sV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLENBQUMsQ0FBQSxDQUFDO1NBQ0w7YUFDSTtZQUNELE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxDQUFPLEtBQWdCLEVBQUUsRUFBRTtnQkFDbEQsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQyxDQUFBLENBQUM7U0FDTDtRQUNELE1BQU0sbUJBQW1CLEdBQUcsYUFBYSxDQUFDO1FBQzFDLElBQUksT0FBTyxDQUFDLG1CQUFtQixDQUFDLEtBQUssU0FBUyxFQUFFO1lBQzVDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtnQkFDbkIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztnQkFDdEMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsV0FBVyxDQUFDO2dCQUMzQyxPQUFPLENBQUMsU0FBUyxHQUFHLENBQU8sS0FBZ0IsRUFBRSxFQUFFO29CQUMzQyxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDekIsTUFBTSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFDLENBQUMsQ0FBQSxDQUFDO2FBQ0w7aUJBQ0k7Z0JBQ0QsT0FBTyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLElBQUksQ0FBQzthQUN2QztTQUNKO2FBQ0k7WUFDRCxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFO2dCQUM5QixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDakQsT0FBTyxDQUFDLFNBQVMsR0FBRyxDQUFPLEtBQWdCLEVBQUUsRUFBRTtvQkFDM0MsTUFBTSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3pCLE1BQU0sT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQUEsQ0FBQzthQUNMO2lCQUNJO2dCQUNELE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO2FBQ2hEO1NBQ0o7UUFFRCxJQUFJLE9BQU8sWUFBWSxxQkFBcUIsRUFBRTtZQUMxQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7Z0JBQ3pDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsQ0FBTyxLQUFnQixFQUFFLEVBQUU7b0JBQ2pELE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN0QixNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxDQUFBLENBQUM7YUFDTDtpQkFDSTtnQkFDRCxPQUFPLENBQUMsZUFBZSxHQUFHLENBQU8sS0FBZ0IsRUFBRSxFQUFFO29CQUNqRCxNQUFNLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0IsQ0FBQyxDQUFBLENBQUM7YUFDTDtTQUNKO0lBQ0wsQ0FBQztJQUVPLHlCQUF5QixDQUFDLE1BQXVCO1FBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRS9DLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUFFLE1BQU0sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRS9DLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNqQixNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFpQixFQUFFLENBQUMsQ0FBQztTQUNuRDtRQUVELElBQUksTUFBTSxZQUFZLGlCQUFpQixFQUFFO1lBQ3JDLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQ2xDLElBQUksU0FBUyxZQUFZLHNCQUFzQixFQUFFO3dCQUM3QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO3FCQUN4RDtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7YUFDSSxJQUFJLE1BQU0sWUFBWSxpQkFBaUIsRUFBRTtZQUMxQyxNQUFNLFVBQVUsR0FBdUIsTUFBTyxDQUFDO1lBQy9DLElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxRQUFRLEVBQUU7Z0JBQ3hFLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO2FBQ3pEO2lCQUNJLElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxVQUFVLEVBQUU7YUFFakY7aUJBQ0ksSUFBSSxVQUFVLENBQUMsVUFBVSxJQUFJLE9BQU8sRUFBRTtnQkFDdkMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQyxDQUFDO2dCQUVqRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVU7b0JBQUUsVUFBVSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7Z0JBQ3ZELFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztnQkFDakQsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxjQUFjLEVBQUUsQ0FBQyxDQUFDO2FBQ3BEO2lCQUNJLElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxPQUFPLElBQUksVUFBVSxDQUFDLFVBQVUsSUFBSSxLQUFLLEVBQUU7Z0JBQ3pFLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO2FBQzFEO1lBRUQsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFO2dCQUN2QixVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDdEMsSUFBSSxTQUFTLFlBQVksc0JBQXNCLEVBQUU7d0JBQzdDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7cUJBQzVEO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ047U0FDSjthQUNJLElBQUksTUFBTSxZQUFZLFdBQVcsRUFBRTtZQUNwQyxNQUFNLE9BQU8sR0FBZ0IsTUFBTSxDQUFDO1lBQ3BDLEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzlDO1NBQ0o7YUFDSSxJQUFJLE1BQU0sWUFBWSxxQkFBcUIsRUFBRTtZQUM5QyxNQUFNLGNBQWMsR0FBMkIsTUFBTyxDQUFDO1lBQ3ZELElBQUksY0FBYyxDQUFDLFVBQVUsRUFBRTtnQkFDM0IsY0FBYyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7b0JBQzFDLElBQUksU0FBUyxZQUFZLG9CQUFvQixFQUFFO3dCQUMzQyxJQUFJLENBQUMsNEJBQTRCLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxDQUFDO3FCQUNoRTtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO1NBQ0o7YUFDSSxJQUFJLE1BQU0sWUFBWSxlQUFlLEVBQUU7WUFDeEMsTUFBTSxPQUFPLEdBQW9CLE1BQU0sQ0FBQztZQUN4QyxLQUFLLE1BQU0sVUFBVSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsQ0FBQzthQUM5QztTQUNKO1FBRUQsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxTQUFTLFlBQVksdUJBQXVCLEVBQUU7Z0JBQzlDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUN0RDtpQkFDSSxJQUFJLFNBQVMsWUFBWSw2QkFBNkIsRUFBRTtnQkFDekQsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2FBQ3RHO2lCQUNJLElBQUksU0FBUyxZQUFZLHVCQUF1QixFQUFFO2dCQUNuRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2FBQ2hHO2lCQUNJLElBQUksU0FBUyxZQUFZLGtCQUFrQixFQUFFO2dCQUM5QyxJQUFJLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxTQUFTLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQzthQUM3RjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELDRCQUE0QixDQUN4QixTQUF3RCxFQUN4RCxNQUFxRTtRQUVyRSxNQUFNLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztRQUN4RCxJQUFJLE1BQU0sQ0FBQyxXQUFXLElBQUksa0JBQWtCLEVBQUU7WUFDMUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQy9EO2FBQ0k7WUFDRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN2RCxNQUFNLGFBQWEsR0FBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztZQUMvRSxJQUFJLGFBQWEsSUFBSSxJQUFJLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQzthQUMvRDtpQkFDSTtnQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksZ0JBQWdCO3VCQUM5RCxDQUFDLENBQUMsa0JBQWtCLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNoRCxJQUFJLFNBQVMsWUFBWSxvQkFBb0IsRUFBRTt3QkFDM0MsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztxQkFDbEg7eUJBQ0k7d0JBQ0QsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztxQkFDcEg7aUJBQ0o7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELDZCQUE2QixDQUFDLE1BQXVCLEVBQUUsVUFBb0IsRUFBRSxPQUFlO1FBQ3hGLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQy9EO2FBQ0k7WUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixNQUFNLFdBQVcsR0FBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksNkJBQTZCO3VCQUN6RSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxFQUN4RTtvQkFDRSxNQUFNLFVBQVUsR0FBRyxJQUFJLDZCQUE2QixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDekUsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUNwRCxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDM0M7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQXVCLEVBQUUsVUFBb0IsRUFBRSxPQUFlO1FBQ25GLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQy9EO2FBQ0k7WUFDRCxNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixNQUFNLFdBQVcsR0FBb0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksdUJBQXVCO3VCQUNuRSxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxFQUN2RTtvQkFDRSxNQUFNLFVBQVUsR0FBRyxJQUFJLHVCQUF1QixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztvQkFDbkUsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQzNDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxNQUF1QixFQUFFLFVBQW9CLEVBQUUsT0FBZTtRQUNwRixJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUMvRDthQUNJO1lBQ0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0MsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxXQUFXLEdBQW9CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLGtCQUFrQjt1QkFDOUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLEVBQ25FO29CQUNFLE1BQU0sVUFBVSxHQUFHLElBQUksa0JBQWtCLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUM5RCxXQUFXLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztpQkFDM0M7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVPLGNBQWM7UUFDbEIsTUFBTSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO1FBQzVGLElBQUksaUJBQWlCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUMvRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDaEQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtnQkFDcEMsSUFBSSxJQUFJLFlBQVkscUJBQXFCLEVBQUU7b0JBQ3ZDLE1BQU0sT0FBTyxHQUEyQixJQUFLLENBQUM7b0JBQzlDLE1BQU0sR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNyRixJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNCLElBQUksS0FBSyxFQUFFO3dCQUNQLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDMUM7eUJBQ0ksSUFBSSxxQkFBcUIsRUFBRSxFQUFFLDZCQUE2Qjt3QkFDM0QsTUFBTSxnQkFBZ0IsR0FBRyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzlELElBQUksZ0JBQWdCLEVBQUU7NEJBQ2xCLE1BQU0sR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzs0QkFDeEYsS0FBSyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDdkIsSUFBSSxLQUFLLEVBQUU7Z0NBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDOzZCQUMxQzt5QkFDSjtxQkFDSjtpQkFDSjtxQkFDSTtvQkFDRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQWtCLElBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEQsSUFBSSxLQUFLLEVBQUU7d0JBQ1AsSUFBSSxDQUFDLFVBQVUsQ0FBa0IsSUFBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQztxQkFDekQ7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDbEU7SUFDTCxDQUFDO0lBRU8saUJBQWlCO1FBQ3JCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEtBQUssRUFBRSxnQkFBaUIsRUFBRSxJQUFLO1FBQ3pELEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxFQUFFO1lBQ3ZCLElBQUksS0FBSyxJQUFJLFNBQVMsSUFBSSxLQUFLLElBQUksU0FBUyxJQUFJLEtBQUssSUFBSSxTQUFTLEVBQUU7Z0JBQ2hFLElBQUksbUJBQW1CLENBQUM7Z0JBQ3hCLElBQUksZ0JBQWdCLElBQUksSUFBSSxJQUFJLGdCQUFnQixLQUFLLEVBQUU7b0JBQUUsbUJBQW1CLEdBQUcsZ0JBQWdCLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQzs7b0JBQ3pHLG1CQUFtQixHQUFHLEtBQUssQ0FBQztnQkFDakMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsT0FBTztvQkFBRSxTQUFTO2dCQUN2QixJQUFJLE9BQU8sQ0FBQztnQkFDWixJQUFJLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7b0JBQUUsT0FBTyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDOztvQkFDekQsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFFckIsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixJQUFJLFFBQVEsWUFBWSxLQUFLLEVBQUU7b0JBQzNCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztvQkFDZCxLQUFLLE1BQU0sSUFBSSxJQUFJLFFBQVEsRUFBRTt3QkFDekIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRSxPQUFPLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQzt3QkFDbkYsS0FBSyxFQUFFLENBQUM7cUJBQ1g7aUJBQ0o7cUJBQ0ksSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7b0JBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ3RFO3FCQUNJLElBQUksT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDekUsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzdDO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFTywwQkFBMEI7UUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdEUsSUFBSSxZQUFZLEVBQUU7WUFDZCxJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLE1BQU07Z0JBQUUsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQy9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztvQkFDbkMsTUFBTTtpQkFDVDthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8sd0JBQXdCO1FBQzVCLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxZQUFZO1lBQUUsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUNyQyxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxNQUFNO1lBQUUsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQy9DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzFDLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO2dCQUMvQixPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7Z0JBQ25DLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLE1BQU07YUFDVDtTQUNKO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLFlBQVksQ0FBQyxJQUFJLENBQUM7Z0JBQ2QsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWTthQUM1QixDQUFDLENBQUM7U0FDTjtRQUVELFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQsYUFBYSxDQUFDLFNBQVM7UUFDbkIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUQsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUFJLE9BQU8sSUFBSSxXQUFXLEVBQUU7WUFDeEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxXQUFXLEVBQUUsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQy9HO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFO2dCQUNuRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO2dCQUN0RCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDekIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUMzRCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDWDtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWM7UUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDaEMsQ0FBQztJQUVNLGNBQWMsQ0FBQyxPQUFZO1FBQzlCLElBQUksT0FBTyxZQUFZLFdBQVc7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUNuRCxJQUFJLE9BQU8sWUFBWSxXQUFXO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDbkQsSUFBSSxPQUFPLFlBQVksaUJBQWlCO1lBQUUsT0FBTyxhQUFhLENBQUM7UUFDL0QsSUFBSSxPQUFPLFlBQVksaUJBQWlCO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDeEQsSUFBSSxPQUFPLFlBQVksd0JBQXdCO1lBQUUsT0FBTyxhQUFhLENBQUM7UUFDdEUsSUFBSSxPQUFPLFlBQVksaUJBQWlCLEVBQUU7WUFDdEMsTUFBTSxXQUFXLEdBQXNCLE9BQU8sQ0FBQztZQUMvQyxJQUNJLFdBQVcsQ0FBQyxVQUFVLEtBQUssT0FBTzttQkFDL0IsV0FBVyxDQUFDLFVBQVUsS0FBSyxVQUFVLEVBQzFDO2dCQUNFLE9BQU8sT0FBTyxDQUFDO2FBQ2xCO1lBQ0QsSUFDSSxXQUFXLENBQUMsVUFBVSxLQUFLLE9BQU87bUJBQy9CLFdBQVcsQ0FBQyxVQUFVLEtBQUssS0FBSyxFQUNyQztnQkFDRSxPQUFPLFlBQVksQ0FBQzthQUN2QjtZQUNELE9BQU8sTUFBTSxDQUFDO1NBQ2pCO1FBQ0QsSUFBSSxPQUFPLFlBQVkscUJBQXFCO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDaEUsSUFBSSxPQUFPLFlBQVkscUJBQXFCO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDaEUsSUFBSSxPQUFPLFlBQVksMEJBQTBCO1lBQUUsT0FBTyxlQUFlLENBQUM7UUFDMUUsSUFBSSxPQUFPLFlBQVksb0JBQW9CO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDOUQsSUFBSSxPQUFPLFlBQVkscUJBQXFCO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDaEUsSUFBSSxPQUFPLFlBQVksbUJBQW1CO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDNUQsSUFBSSxPQUFPLFlBQVkscUJBQXFCO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDaEUsSUFBSSxPQUFPLFlBQVksdUJBQXVCLEVBQUU7WUFDNUMsT0FBTyxlQUFlLENBQUM7U0FDMUI7UUFDRCxvSEFBb0g7UUFDcEgsSUFBSSxPQUFPLFlBQVksK0JBQStCO1lBQUUsT0FBTyxxQkFBcUIsQ0FBQztRQUNyRixJQUFJLE9BQU8sWUFBWSx1QkFBdUI7WUFBRSxPQUFPLGFBQWEsQ0FBQztRQUNyRSxJQUFJLE9BQU8sWUFBWSx5QkFBeUI7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUN6RSxJQUFJLE9BQU8sWUFBWSwrQkFBK0IsRUFBRTtZQUNwRCxPQUFPLHFCQUFxQixDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxPQUFPLFlBQVksOEJBQThCLEVBQUU7WUFDbkQsT0FBTyxvQkFBb0IsQ0FBQztTQUMvQjtRQUNELElBQUksT0FBTyxZQUFZLHdCQUF3QixFQUFFO1lBQzdDLE9BQU8sYUFBYSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxPQUFPLFlBQVkseUJBQXlCO1lBQUUsT0FBTyxjQUFjLENBQUM7UUFDeEUsSUFBSSxPQUFPLFlBQVksbUJBQW1CO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDNUQsSUFBSSxPQUFPLFlBQVkscUJBQXFCO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDaEUsSUFBSSxPQUFPLFlBQVkseUJBQXlCO1lBQUUsT0FBTyxjQUFjLENBQUM7UUFDeEUsSUFBSSxPQUFPLFlBQVksNEJBQTRCLEVBQUU7WUFDakQsT0FBTyxpQkFBaUIsQ0FBQztTQUM1QjtRQUNELElBQUksT0FBTyxZQUFZLHVCQUF1QixFQUFFO1lBQzVDLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3BELE9BQU8sWUFBWSxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNILE9BQU8sbUJBQW1CLENBQUM7YUFDOUI7U0FDSjtRQUNELElBQUksT0FBTyxZQUFZLHdCQUF3QjtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ3RFLElBQUksT0FBTyxZQUFZLHdCQUF3QjtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ3RFLElBQUksT0FBTyxZQUFZLGtCQUFrQjtZQUFFLE9BQU8sY0FBYyxDQUFDO1FBQ2pFLElBQUksT0FBTyxZQUFZLFdBQVc7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUNuRCxJQUFJLE9BQU8sWUFBWSxlQUFlO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDM0QsSUFBSSxPQUFPLFlBQVksbUJBQW1CO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDNUQsSUFBSSxPQUFPLFlBQVkseUJBQXlCO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDbEUsSUFBSSxPQUFPLFlBQVksMkJBQTJCO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFDdEUsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVNLG1CQUFtQixDQUFDLE9BQU87UUFDOUIsSUFBSSxPQUFPLFlBQVksV0FBVztZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQ25ELElBQUksT0FBTyxZQUFZLFdBQVc7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUVuRCxJQUFJLE9BQU8sWUFBWSxpQkFBaUIsRUFBRTtZQUN0QyxPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUVELElBQUksT0FBTyxZQUFZLHFCQUFxQixFQUFFO1lBQzFDLE1BQU0sV0FBVyxHQUEwQixPQUFPLENBQUM7WUFDbkQsSUFBSSxXQUFXLENBQUMsUUFBUTtnQkFBRSxPQUFPLFVBQVUsQ0FBQztZQUM1QyxPQUFPLE1BQU0sQ0FBQztTQUNqQjtRQUNELElBQUksT0FBTyxZQUFZLG1CQUFtQjtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzFELElBQUksT0FBTyxZQUFZLHVCQUF1QjtZQUFFLE9BQU8sTUFBTSxDQUFDO1FBQzlELElBQ0ksT0FBTyxZQUFZLG1CQUFtQjtlQUNuQyxPQUFPLFlBQVkscUJBQXFCLEVBQzdDO1lBQ0UsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxJQUNJLE9BQU8sWUFBWSxxQkFBcUI7ZUFDckMsT0FBTyxZQUFZLHlCQUF5QjtlQUM1QyxPQUFPLFlBQVksNEJBQTRCO2VBQy9DLE9BQU8sWUFBWSwrQkFBK0IsRUFDdkQ7WUFDRSxPQUFPLGVBQWUsQ0FBQztTQUMxQjtRQUNELElBQUksT0FBTyxZQUFZLHVCQUF1QixFQUFFO1lBQzVDLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3BELE9BQU8sWUFBWSxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNILE9BQU8sbUJBQW1CLENBQUM7YUFDOUI7U0FDSjtRQUNELElBQUksT0FBTyxZQUFZLHdCQUF3QjtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ3RFLElBQUksT0FBTyxZQUFZLG9CQUFvQjtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQzlELElBQ0ksT0FBTyxZQUFZLGlCQUFpQjtlQUNqQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssT0FBTzttQkFDM0IsT0FBTyxDQUFDLFVBQVUsS0FBSyxVQUFVLENBQUMsRUFDM0M7WUFDRSxPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUNELElBQUksT0FBTyxZQUFZLHdCQUF3QjtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ3RFLElBQUksT0FBTyxZQUFZLGtCQUFrQjtZQUFFLE9BQU8sY0FBYyxDQUFDO1FBQ2pFLElBQUksT0FBTyxZQUFZLFdBQVc7WUFBRSxPQUFPLE9BQU8sQ0FBQztRQUNuRCxJQUFJLE9BQU8sWUFBWSxxQkFBcUI7WUFBRSxPQUFPLGVBQWUsQ0FBQztRQUNyRSxJQUFJLE9BQU8sWUFBWSxlQUFlLEVBQUU7WUFDcEMsT0FBTyxXQUFXLENBQUM7U0FDdEI7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0lBRUssWUFBWTs7WUFDZCxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUMxQixNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3pDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDWixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNSLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRWEsYUFBYSxDQUFDLFdBQTRCOztZQUNwRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUU7Z0JBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO29CQUNwQixJQUFJLFNBQVMsQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO3dCQUM5QixTQUFTO3FCQUNaO2lCQUNKO3FCQUNJLElBQUksU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7b0JBQUUsU0FBUztnQkFFaEQsSUFBSSxDQUFDLENBQUEsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQSxFQUFFO29CQUN2QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztpQkFDNUI7Z0JBRUQsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0wsQ0FBQztLQUFBO0lBRUssbUJBQW1CLENBQUMsU0FBUzs7WUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDNUQsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLENBQUEsTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBLEVBQUU7b0JBQ25DLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRUssb0JBQW9CLENBQUMsT0FBOEIsRUFBRSxLQUFNLEVBQUUsU0FBVSxFQUFFLFdBQVksRUFBRSxVQUFXLEVBQUUsVUFBVyxFQUFFLE1BQU87O1lBQzFILElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDbEIsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFO29CQUNyQixNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztpQkFDNUc7cUJBQU0sSUFBSSxPQUFPLENBQUMsY0FBYyxJQUFJLFNBQVMsSUFBSSxRQUFRLEVBQUU7b0JBQ3hELE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2lCQUM1RzthQUVKO2lCQUNJO2dCQUNELE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzdHO1FBQ0wsQ0FBQztLQUFBO0lBZ0VEOzs7O01BSUU7SUFDVyw4QkFBOEIsQ0FBQyxPQUE2RCxFQUFFLFVBQVc7O1lBQ2xILE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzVELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDO2dCQUM1QixXQUFXO2dCQUNYLFNBQVMsRUFBRSxhQUFhO2dCQUN4QixRQUFRLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7WUFFSCxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUU7Z0JBQ3pCLElBQUk7b0JBQ0EsTUFBTSxPQUFPLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUM1QztnQkFDRCxXQUFNLEdBQUc7YUFDWjtRQUNMLENBQUM7S0FBQTtJQUVZLHNCQUFzQixDQUFDLE9BQThCLEVBQUUsVUFBVSxFQUFFLGdCQUFxQjs7WUFDakcsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQzVCLFdBQVc7Z0JBQ1gsU0FBUyxFQUFFLGtCQUFrQjtnQkFDN0IsUUFBUSxFQUFFLElBQUk7Z0JBQ2QsSUFBSSxFQUFFLGdCQUFnQixDQUFDLFVBQVU7YUFDcEMsQ0FBQyxDQUFDO1lBQ0gsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztZQUV4QyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDNUIsSUFBSTtvQkFDQSxNQUFNLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDL0M7Z0JBQ0QsV0FBTSxHQUFHO2FBQ1o7UUFDTCxDQUFDO0tBQUE7SUFFSyx3QkFBd0IsQ0FBQyxPQUFtRyxFQUFFLFVBQVc7O1lBQzNJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDbEQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDNUQsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDM0QsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQzVCLFdBQVc7Z0JBQ1gsU0FBUyxFQUFFLE9BQU87Z0JBQ2xCLFFBQVEsRUFBRSxJQUFJO2FBQ2pCLENBQUMsQ0FBQztZQUNILElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDakIsSUFBSTtvQkFDQSxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3BDO2dCQUNELFdBQU0sR0FBRzthQUNaO1FBQ0wsQ0FBQztLQUFBO0lBRVksdUJBQXVCLENBQUMsT0FBd0IsRUFBRSxVQUFXOztZQUN0RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1RCxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNyRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUMvQixJQUFJLFVBQVUsRUFBRSxFQUFFLGtHQUFrRztvQkFDaEgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLFVBQVUsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQzdEO3FCQUNJO29CQUNELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7aUJBQy9DO2dCQUNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQzthQUN4QjtRQUNMLENBQUM7S0FBQTtJQUVELGFBQWE7UUFDVCxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRCxpQkFBaUI7UUFDYixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUU7WUFDL0IsWUFBWSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxRQUFRLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUM1RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztpQkFDckYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO2dCQUMvRCxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUN4RyxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUU7b0JBQ2xCLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1g7YUFBTTtZQUNILElBQUksQ0FBQyx3QkFBd0IsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUM1QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUM3QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDWDtJQUNMLENBQUM7SUFFTyxnQ0FBZ0MsQ0FBQyxPQUF3QjtRQUM3RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLGFBQWE7UUFDakIsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUMsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ25ELFNBQVM7YUFDWjtZQUNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNuRCxrQ0FBa0M7WUFDbEMsSUFBSSxXQUFXLEVBQUU7Z0JBQ2IsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3pFLElBQUksaUJBQWlCLEVBQUU7b0JBQ25CLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsV0FBVyxJQUFJLENBQUMsS0FBSyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTs0QkFDNUQsT0FBTyxLQUFLLENBQUM7eUJBQ2hCO3FCQUNKO2lCQUNKO2FBQ0o7aUJBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDNUMsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFlTSxpQkFBaUIsQ0FBQyxPQUE0QixFQUFFLEtBQUssRUFBRSxVQUFVO1FBQ3BFLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJO2dCQUNBLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxTQUFTLENBQUM7b0JBQzFCLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7b0JBQ3JELFdBQVcsRUFBRSxLQUFLO29CQUNsQixTQUFTLEVBQUUsT0FBTztvQkFDbEIsUUFBUSxFQUFFLElBQUk7aUJBQ2pCLENBQUMsQ0FBQyxDQUFDO2FBQ1A7WUFDRCxXQUFNLEdBQUc7U0FDWjtJQUNMLENBQUM7SUFFTyxZQUFZLENBQUMsV0FBNEI7UUFDN0MsSUFBSSxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUMzQixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2hFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDaEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7b0JBQzVCLFdBQVc7b0JBQ1gsU0FBUyxFQUFFLGFBQWE7b0JBQ3hCLFFBQVEsRUFBRSxJQUFJO2lCQUNqQixDQUFDLENBQUM7Z0JBQ0gsSUFBSTtvQkFDQSxFQUFFLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDckM7Z0JBQ0QsV0FBTSxHQUFHO2FBQ1o7U0FDSjtRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELHVGQUF1RjtJQUN6RSxRQUFRLENBQUMsV0FBNEIsRUFBRSxRQUFpQixLQUFLOztZQUN2RSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQzFDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDcEMsSUFBSSxPQUFPLFlBQVkscUJBQXFCO21CQUNyQyxPQUFPLFlBQVksNEJBQTRCO21CQUMvQyxPQUFPLFlBQVksb0JBQW9CO21CQUN2QyxPQUFPLFlBQVksd0JBQXdCLEVBQUU7Z0JBQ2hELElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFO29CQUMxRCxPQUFPLElBQUksQ0FBQztpQkFDZjthQUNKO1lBRUQsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkUsSUFBSSxDQUFDLE1BQU07b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ3pCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDckQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNoRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQzs0QkFDNUIsV0FBVzs0QkFDWCxTQUFTLEVBQUUsVUFBVTs0QkFDckIsUUFBUSxFQUFFLElBQUk7eUJBQ2pCLENBQUMsQ0FBQzt3QkFDSCxJQUFJOzRCQUNBLElBQUksQ0FBQSxNQUFNLFNBQVMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQUssS0FBSyxFQUFFO2dDQUMvQyxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBQ2pDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtvQ0FDM0IsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQ0FDcEI7NkJBQ0o7eUJBQ0o7d0JBQ0QsV0FBTSxHQUFHO3FCQUNaO29CQUVELElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ25CLE9BQU8sS0FBSyxDQUFDO3FCQUNoQjtpQkFDSjthQUNKO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztLQUFBO0lBRUQsb0RBQW9EO0lBQ3BELHdEQUF3RDtJQUN4RCwwQkFBMEI7SUFDMUIsNkVBQTZFO0lBQzdFLGtCQUFrQjtJQUNsQixRQUFRO0lBQ1IsZ0VBQWdFO0lBQ2hFLDBCQUEwQjtJQUMxQixJQUFJO0lBRUosc0RBQXNEO0lBQ3RELGdDQUFnQztJQUNoQyw4REFBOEQ7SUFDOUQsV0FBVztJQUNYLHdDQUF3QztJQUN4QyxJQUFJO0lBRUksaUJBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVO1FBQ2hELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUM7U0FDL0Q7SUFDTCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsWUFBb0I7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDeEc7UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVNLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsT0FBTztRQUMxQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUU7WUFDWCxPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsSUFBSSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUN4QyxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUU7WUFDdEIsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM1QyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7WUFDYixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDbkIsSUFBSSxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDbEM7WUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNuQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDekQsSUFBSSxJQUFJLEVBQUU7b0JBQ04sT0FBTyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzdCO2FBQ0o7aUJBQ0ksSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdEIsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7cUJBQy9ELEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztxQkFDL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2xCO1NBQ0o7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTtZQUMvQixPQUFPLEVBQUUsQ0FBQztTQUNiO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxRQUFRLEVBQUU7WUFDdEIsT0FBTyxDQUFDLENBQUM7U0FDWjtRQUNELElBQ0ksS0FBSyxZQUFZLEtBQUs7ZUFDbkIsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQ3JCO1lBQ0UsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU0scUJBQXFCLENBQUMsYUFBYSxJQUFJLENBQUM7SUFFeEMsYUFBYSxDQUFDLE9BQU87UUFDeEIsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDO1FBQzdCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUNwQixNQUFNLElBQUksWUFBWSxDQUFDO1NBQzFCO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFHO1FBQ3BCLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ3hDLElBQUksR0FBRyxFQUFFO2dCQUNMLElBQUksRUFBRSxHQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztnQkFDbEQsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRTtvQkFDN0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7b0JBQ3hCLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxLQUFLO3dCQUFFLE1BQU07aUJBQ25DO2dCQUVELElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxjQUFjO29CQUFFLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUNwRDtTQUNKO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUVLLGlCQUFpQjtRQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUNuRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNuRSxJQUFJLElBQUksRUFBRTtZQUNOLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO2dCQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQztnQkFDMUIsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsMkNBQTJDLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxZQUFZLEVBQUU7b0JBQ2QsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO2lCQUNuQztxQkFBTTtvQkFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQzdELElBQ0ksWUFBWSxJQUFJLFlBQVksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFDOUQ7d0JBQ0UsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDO3FCQUN4Qjt5QkFBTTt3QkFDSCxZQUFZLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQzNELElBQUksWUFBWSxFQUFFOzRCQUNkLE1BQU0sQ0FBQyxZQUFZLENBQUM7aUNBQ2YsUUFBUSxFQUFFO2lDQUNWLElBQUksQ0FBQyxNQUFNLENBQUM7Z0NBQ2Isd0NBQXdDO2lDQUN2QyxLQUFLLEVBQUUsQ0FBQzs0QkFDYixZQUFZLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQ3BDLGVBQWUsQ0FDbEIsQ0FBQzt5QkFDTDtxQkFDSjtpQkFDSjtnQkFFRCxJQUFJLFlBQVksRUFBRTtvQkFDZCxNQUFNO2lCQUNUO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFTyx3QkFBd0I7UUFDNUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDbkQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQzdCLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEQsSUFBSSxTQUFTLEVBQUU7WUFDWCxJQUFJLFlBQVksR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELElBQUksWUFBWSxFQUFFO2dCQUNkLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDckIsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNuQztpQkFBTTtnQkFDSCxZQUFZLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbkQsSUFDSSxZQUFZLElBQUksWUFBWSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxFQUM5RDtvQkFDRSxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ3hCO3FCQUFNO29CQUNILFlBQVksR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNqRCxJQUFJLFlBQVksRUFBRTt3QkFDZCxNQUFNLENBQUMsWUFBWSxDQUFDOzZCQUNmLFFBQVEsRUFBRTs2QkFDVixJQUFJLENBQUMsTUFBTSxDQUFDOzRCQUNiLHdDQUF3Qzs2QkFDdkMsS0FBSyxFQUFFLENBQUM7d0JBQ2IsWUFBWSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNwQyxlQUFlLENBQ2xCLENBQUM7cUJBQ0w7aUJBQ0o7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFLO1FBQ3BCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNyQyxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUMsT0FBTyxJQUFJLE1BQU0sRUFBRTtnQkFDdkMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRTtvQkFDL0IsTUFBTTtpQkFDVDtnQkFDRCxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQzthQUM5QjtZQUNELElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUN6QyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLFlBQVksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO29CQUM5QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7aUJBQzFCO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFTSxTQUFTLENBQUMsSUFBSTtRQUNqQixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssTUFBTTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzNDLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxTQUFTO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsR0FBRztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3ZDLElBQ0ksSUFBSSxDQUFDLFdBQVc7Y0FDZCxJQUFJLENBQUMsWUFBWTtjQUNqQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNO2NBQ25DLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUs7Z0JBQ2hDLENBQUMsRUFDUDtZQUNFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsTUFBTSxVQUFVLEdBQUc7WUFDZixDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQztZQUMzRCxDQUFDLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQztTQUM5RCxDQUFDO1FBRUYsSUFBSSxjQUFjLEdBQVEsQ0FDdEIsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUN4RCxDQUFDO1FBQ0YsSUFBSSxjQUFjLEVBQUU7WUFDaEIsR0FBRztnQkFDQyxJQUFJLGNBQWMsS0FBSyxJQUFJO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUN6QyxzREFBc0Q7YUFDekQsUUFBUSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUU7U0FDMUQ7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFvQixFQUFFLFNBQVM7UUFDbkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixFQUFFLENBQUMsSUFBSSxDQUFDLENBQU0sRUFBRSxFQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLEVBQUU7Z0JBQUUsT0FBTztZQUNoQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRXBELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztZQUNwQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3BCLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksU0FBUyxDQUFDO29CQUN4QyxXQUFXLEVBQUUsU0FBUztvQkFDdEIsVUFBVSxFQUFFLGVBQWU7b0JBQzNCLFNBQVMsRUFBRSxVQUFVO29CQUNyQixRQUFRLEVBQUUsSUFBSTtpQkFDakIsQ0FBQyxDQUFDLENBQUM7YUFDUDtZQUNELElBQUksUUFBUSxLQUFLLEtBQUssRUFBRTtnQkFDcEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNqQyxTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFFN0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7Z0JBRXhCLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtvQkFDbkIsSUFBSTt3QkFDQSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUM7NEJBQ2xDLFdBQVcsRUFBRSxTQUFTOzRCQUN0QixVQUFVLEVBQUUsZUFBZTs0QkFDM0IsU0FBUyxFQUFFLGNBQWM7NEJBQ3pCLFFBQVEsRUFBRSxJQUFJO3lCQUNqQixDQUFDLENBQUMsQ0FBQztxQkFDUDtvQkFDRCxXQUFNLEdBQUc7aUJBQ1o7Z0JBRUQsSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO29CQUNuQixJQUFJO3dCQUNBLE1BQU0sT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLFNBQVMsQ0FBQzs0QkFDbEMsV0FBVyxFQUFFLFNBQVM7NEJBQ3RCLFVBQVUsRUFBRSxlQUFlOzRCQUMzQixTQUFTLEVBQUUsU0FBUzs0QkFDcEIsUUFBUSxFQUFFLElBQUk7eUJBQ2pCLENBQUMsQ0FBQyxDQUFDO3FCQUNQO29CQUNELFdBQU0sR0FBRztpQkFDWjthQUNKO1FBQ0wsQ0FBQyxDQUFBLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFWSxTQUFTLENBQUMsT0FBb0IsRUFBRSxTQUFTLEVBQUUsU0FBVTs7WUFDOUQsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNsRCxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO2dCQUMxQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxvQkFBb0IsR0FBRztvQkFDeEIsT0FBTztvQkFDUCxTQUFTO29CQUNULFNBQVM7aUJBQ1osQ0FBQztnQkFDRixPQUFPO2FBQ1Y7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztZQUMxQyxNQUFNLFVBQVUsR0FBRyxTQUFTLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7WUFDakQsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLEtBQUssTUFBTSxVQUFVLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7YUFDOUQ7WUFFRCxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDakIsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUNsQixJQUFJO29CQUNBLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksU0FBUyxDQUFDO3dCQUNuQyxXQUFXLEVBQUUsU0FBUzt3QkFDdEIsSUFBSTt3QkFDSixTQUFTLEVBQUUsU0FBUyxJQUFJLFFBQVE7d0JBQ2hDLFFBQVEsRUFBRSxJQUFJO3FCQUNqQixDQUFDLENBQUMsQ0FBQztpQkFDUDtnQkFDRCxXQUFNO29CQUNGLEtBQUssR0FBRyxLQUFLLENBQUM7aUJBQ2pCO2FBQ0o7WUFFRCxJQUFJLEtBQUssS0FBSyxLQUFLLEVBQUU7Z0JBQ2pCLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMzQixTQUFTLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFFN0IsSUFBSSxTQUFTLElBQUksTUFBTSxFQUFFO29CQUNyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztpQkFDM0I7Z0JBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQzVELElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtvQkFDbkIsSUFBSTt3QkFDQSxNQUFNLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUM7NEJBQ2xDLFdBQVcsRUFBRSxTQUFTOzRCQUN0QixVQUFVLEVBQUUsVUFBVTs0QkFDdEIsU0FBUyxFQUFFLFNBQVMsSUFBSSxjQUFjOzRCQUN0QyxRQUFRLEVBQUUsSUFBSTt5QkFDakIsQ0FBQyxDQUFDLENBQUM7cUJBQ1A7b0JBQ0QsV0FBTSxHQUFHO2lCQUNaO2dCQUVELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtvQkFDakIsSUFBSTt3QkFDQSxNQUFNLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxTQUFTLENBQUM7NEJBQ2hDLFdBQVcsRUFBRSxTQUFTOzRCQUN0QixVQUFVLEVBQUUsVUFBVTs0QkFDdEIsU0FBUyxFQUFFLFNBQVMsSUFBSSxPQUFPOzRCQUMvQixRQUFRLEVBQUUsSUFBSTt5QkFDakIsQ0FBQyxDQUFDLENBQUM7cUJBQ1A7b0JBQ0QsV0FBTSxHQUFHO2lCQUNaO2FBQ0o7UUFDTCxDQUFDO0tBQUE7SUFFTSxXQUFXLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBVTtRQUNyRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUNqRDtJQUNMLENBQUM7SUFFSyxtQkFBbUIsQ0FBQyxJQUFJOztZQUMxQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDO1lBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7WUFDdEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQztZQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDL0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsbUNBQVEsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBSyxJQUFJLENBQUUsQ0FBQztnQkFDdEcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDM0I7aUJBQ0k7Z0JBRUQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLE1BQU0sVUFBVSxHQUFHLFNBQVMsR0FBRyxHQUFHLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztnQkFDakQsS0FBSyxNQUFNLFVBQVUsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO29CQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztpQkFDdkQ7Z0JBRUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ2xCLElBQUk7d0JBQ0EsS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxTQUFTLENBQUM7NEJBQ25DLFdBQVcsRUFBRSxTQUFTOzRCQUN0QixJQUFJOzRCQUNKLFNBQVMsRUFBRSxTQUFTLElBQUksUUFBUTs0QkFDaEMsUUFBUSxFQUFFLElBQUk7eUJBQ2pCLENBQUMsQ0FBQyxDQUFDO3FCQUNQO29CQUNELFdBQU07d0JBQ0YsS0FBSyxHQUFHLEtBQUssQ0FBQztxQkFDakI7aUJBQ0o7Z0JBRUQsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFO29CQUNqQixTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0IsU0FBUyxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBRTdCLElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRTt3QkFDckIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7cUJBQzNCO29CQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUM1RCxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7d0JBQ25CLElBQUk7NEJBQ0EsTUFBTSxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxDQUFDO2dDQUNsQyxXQUFXLEVBQUUsU0FBUztnQ0FDdEIsVUFBVSxFQUFFLFVBQVU7Z0NBQ3RCLFNBQVMsRUFBRSxTQUFTLElBQUksY0FBYztnQ0FDdEMsUUFBUSxFQUFFLElBQUk7NkJBQ2pCLENBQUMsQ0FBQyxDQUFDO3lCQUNQO3dCQUNELFdBQU0sR0FBRztxQkFDWjtvQkFFRCxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUU7d0JBQ2pCLElBQUk7NEJBQ0EsTUFBTSxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxDQUFDO2dDQUNoQyxXQUFXLEVBQUUsU0FBUztnQ0FDdEIsVUFBVSxFQUFFLFVBQVU7Z0NBQ3RCLFNBQVMsRUFBRSxTQUFTLElBQUksT0FBTztnQ0FDL0IsUUFBUSxFQUFFLElBQUk7NkJBQ2pCLENBQUMsQ0FBQyxDQUFDO3lCQUNQO3dCQUNELFdBQU0sR0FBRztxQkFDWjtpQkFDSjthQUNKO1FBQ0wsQ0FBQztLQUFBO0lBRU0sT0FBTyxDQUFDLEtBQUssRUFBRSxPQUFvQixFQUFFLFNBQVM7UUFDakQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7WUFDaEIsSUFBSTtnQkFDQSxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksU0FBUyxDQUFDO29CQUN6QixXQUFXLEVBQUUsU0FBUztvQkFDdEIsVUFBVSxFQUFFLGFBQWE7b0JBQ3pCLFNBQVMsRUFBRSxNQUFNO29CQUNqQixRQUFRLEVBQUUsSUFBSTtpQkFDakIsQ0FBQyxDQUFDLENBQUM7YUFDUDtZQUNELFdBQU0sR0FBRztTQUNaO0lBQ0wsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFLLEVBQUUsT0FBb0IsRUFBRSxTQUFTO1FBQzFDLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQzNDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDMUQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsYUFBYSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHO1lBQ3hCLE9BQU87WUFDUCxTQUFTO1lBQ1QsS0FBSztTQUNSLENBQUM7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRVksZ0JBQWdCLENBQUMsT0FBb0IsRUFBRSxHQUFHLEVBQUUsU0FBVSxFQUFFLFdBQVksRUFBRSxVQUFXLEVBQUUsVUFBVyxFQUFFLE1BQU87O1lBQ2hILElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzFELElBQUksV0FBVyxDQUFDO1lBRWhCLGVBQWU7WUFDZixJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUU7Z0JBQ2pCLFdBQVcsR0FBRyxVQUFVLENBQUM7Z0JBQ3pCLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDO2dCQUM5QixVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztnQkFDbkMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUM7YUFDbEM7aUJBQ0k7Z0JBQ0QsV0FBVyxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3hEO1lBQ0QsSUFBSSxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUU5QixxQkFBcUI7WUFDckIsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdkMsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFFMUIsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7Z0JBQzVCLFdBQVc7Z0JBQ1gsV0FBVyxFQUFFLEtBQUs7Z0JBQ2xCLFVBQVUsRUFBRSxVQUFVLElBQUksV0FBVztnQkFDckMsU0FBUztnQkFDVCxRQUFRLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7WUFDSCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQ3JCLE1BQU0sT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUV4QztZQUNELElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDM0I7WUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDO0tBQUE7SUFFSyxlQUFlLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxPQUFvQjs7WUFDcEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUN6RCxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQztLQUFBO0lBRU8sZ0JBQWdCLENBQUMsR0FBRztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQixHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBSyxFQUFFLE9BQW9CLEVBQUUsU0FBUztRQUNwRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMxRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUNuQixJQUFJO2dCQUNBLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUM7b0JBQzVCLFdBQVcsRUFBRSxTQUFTO29CQUN0QixVQUFVLEVBQUUsYUFBYTtvQkFDekIsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLFFBQVEsRUFBRSxJQUFJO2lCQUNqQixDQUFDLENBQUMsQ0FBQzthQUNQO1lBQ0QsV0FBTSxHQUFHO1NBQ1o7SUFDTCxDQUFDO0lBRU0sMkJBQTJCLENBQUMsT0FBb0I7UUFDbkQsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ1osSUFBSSxPQUFPLENBQUMsVUFBVTtZQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakMsSUFBSSxPQUFPLENBQUMsUUFBUTtZQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLENBQUMsUUFBUTtZQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLENBQUMsVUFBVTtZQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxhQUFhLENBQUMsUUFBUTtRQUN6QixJQUFJLFFBQVEsSUFBSSxTQUFTLEVBQUU7WUFDdkIsT0FBTyxpQkFBaUIsQ0FBQztTQUM1QjtJQUNMLENBQUM7SUFFRCxhQUFhLENBQUMsSUFBUyxFQUFFLE9BQXdCO1FBQzdDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsS0FBSyxTQUFTLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JJLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBd0IsRUFBRSxXQUFnQixFQUFFLElBQVk7UUFDaEUsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQixXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3hDO1FBQ0QsSUFBSSxXQUFXLElBQUksSUFBSSxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDMUIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJO2VBQzFELENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxLQUFLLFNBQVM7bUJBQ3BELENBQUMsT0FBTyxDQUFDLE1BQU07dUJBQ1gsQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUNwRixDQUNKLENBQUM7UUFDTixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM5QixPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsWUFBWSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVM7UUFDeEMsT0FBTztZQUNILE9BQU87WUFDUCxJQUFJO1lBQ0osS0FBSztZQUNMLFNBQVM7WUFDVCxVQUFVLEVBQUUsR0FBRyxTQUFTLElBQUksS0FBSyxHQUFHO1lBQ3BDLElBQUksRUFBRSxHQUFHLFNBQVMsSUFBSSxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRTtZQUMvQyxTQUFTLEVBQUUsS0FBSztZQUNoQixPQUFPLEVBQUUsRUFBRTtTQUNkLENBQUM7SUFDTixDQUFDO0lBRU0sZ0JBQWdCO1FBQ25CLE9BQU8sQ0FDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFO2VBQ25DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsQ0FDNUMsQ0FBQztJQUNOLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVNLGtCQUFrQixDQUFDLEdBQUcsSUFBSSxDQUFDO0lBRTNCLFVBQVUsQ0FBQyxLQUFLO0lBRXZCLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxHQUFHO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEdBQUc7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBRztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxHQUFHO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVNLE9BQU8sQ0FBQyxHQUFHO0lBRWxCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxPQUE4QixFQUFFLElBQVM7UUFDMUQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRixJQUFJLE9BQU8sQ0FBQyxVQUFVLFlBQVksS0FBSztZQUFFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNuRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLFlBQVksUUFBUTtZQUFFLE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzVFLENBQUM7OztZQTk4REosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxXQUFXO2dCQUNyQix5dStDQUF5QztnQkFFekMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7O2FBQ3ZDOzs7WUE3RHdFLFFBQVE7WUE0QnhFLGFBQWE7WUFDYixXQUFXO1lBekJYLGdCQUFnQjtZQUdoQixxQkFBcUI7WUEyQnJCLGVBQWU7WUEvQmYsWUFBWTtZQTJCWixtQkFBbUI7WUFFbkIsbUJBQW1COzs7MEJBK0J2QixTQUFTLFNBQUMsYUFBYTswQkFDdkIsU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7dUJBQzFDLGVBQWUsU0FBQyxXQUFXO3NCQUUzQixLQUFLO3NCQUNMLEtBQUs7NEJBRUwsS0FBSzt5QkFDTCxLQUFLO3FDQUNMLEtBQUs7NkJBQ0wsS0FBSzt5QkFFTCxLQUFLO3FCQU1MLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLO3dCQUNMLEtBQUs7bUJBQ0wsS0FBSzswQkE2Q0wsTUFBTTs2QkFDTixNQUFNO2dDQUNOLE1BQU07NkJBQ04sTUFBTTt5QkFDTixNQUFNO3VCQUNOLE1BQU07NkJBQ04sTUFBTTs7QUFpNERYLE1BQU0sT0FBTyxlQUFlO0lBY3hCLFlBQVksS0FBVSxFQUFFLE9BQVcsRUFBRSxLQUFNLEVBQUUsVUFBNEI7UUFSekUsZUFBVSxHQUFzQixFQUFFLENBQUM7UUFLM0IsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFFbEIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUVyQixJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztRQUM1QixJQUFJLFVBQVUsRUFBRTtZQUNaLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7Z0JBQzlCLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO29CQUMzQixJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQztvQkFDcEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUM7aUJBQ3pEO3FCQUNJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxFQUFFO29CQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7b0JBQzFELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7aUJBQzFCO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO2FBQzNCO1lBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ3ZDO2FBQ0k7WUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN4QjtRQUVELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEMsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztpQkFDOUI7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDO2FBQ2hEO1NBQ0o7UUFDRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLE1BQU0sRUFBRTtZQUNSLElBQUksTUFBTSxZQUFZLGVBQWUsRUFBRTtnQkFDbkMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyRTtpQkFDSSxJQUFJLE1BQU0sWUFBWSxXQUFXLEVBQUU7Z0JBQ3BDLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDeEU7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xCLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ25DO1NBQ0o7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVNLGdCQUFnQjtRQUNuQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBVSxFQUFFLE9BQVcsRUFBRSxRQUFrQjtRQUM5RCxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUU7Z0JBQ3RCLElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLElBQUksR0FBRyxJQUFJLFlBQVksRUFBRTtvQkFDakYsTUFBTSxTQUFTLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQ3RFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7aUJBQ2xEO2FBQ0o7U0FDSjthQUNJLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNWLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2xCLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO29CQUN0QixNQUFNLFNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDOUQsU0FBUyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7b0JBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUNoQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLENBQUM7b0JBQy9DLENBQUMsRUFBRSxDQUFDO2lCQUNQO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFTSxZQUFZLENBQUMsS0FBSztRQUNyQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUEyQjtRQUNuQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ1gsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDYixJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUUsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ0wsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOztZQUN4RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksS0FBSyxDQUFDLEdBQUc7UUFDVCxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQzs7WUFDdkQsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs7WUFDeEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQyxHQUFHO1FBQ1QsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7O1lBQ3ZELElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3pCLENBQUM7SUFFTSxTQUFTLENBQUMsS0FBd0IsRUFBRSxTQUFrQixJQUFJO1FBQzdELElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNkLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFDSTtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFhLEVBQUUsTUFBZTtRQUNqRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztZQUNuRSxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQ2hFO2FBQ0k7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1NBQzVDO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxTQUFTO1FBQzFCLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxTQUFTLEtBQUssRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNoRSxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU0sbUJBQW1CLENBQUMsVUFBVTtRQUNqQyxJQUFJLFVBQVUsSUFBSSxJQUFJLElBQUksVUFBVSxLQUFLLEVBQUU7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDbEUsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sVUFBVSxDQUFDLElBQXFCLEVBQUUsU0FBUztRQUMvQyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLElBQUksU0FBUyxDQUFDLFdBQVcsRUFBRTtZQUFFLE9BQU8sSUFBSSxDQUFDO2FBQzlGO1lBQ0QsS0FBSyxNQUFNLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNyQyxJQUFJLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFO29CQUN4RixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztvQkFDakQsSUFBSSxFQUFFO3dCQUFFLE9BQU8sRUFBRSxDQUFDO2lCQUNyQjthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBcUIsRUFBRSxVQUFVO1FBQ3RELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxVQUFVLENBQUMsV0FBVyxFQUFFO1lBQUUsT0FBTyxJQUFJLENBQUM7YUFDakc7WUFDRCxLQUFLLE1BQU0sU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3JDLElBQUksU0FBUyxDQUFDLFVBQVUsSUFBSSxJQUFJLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUU7b0JBQzNGLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLENBQUM7b0JBQ3hELElBQUksRUFBRTt3QkFBRSxPQUFPLEVBQUUsQ0FBQztpQkFDckI7YUFDSjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLHdCQUF3QixDQUFDLElBQVksRUFBRSxVQUFpQjtRQUMzRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFO1lBQ2xCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzVDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDbEY7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsWUFBWSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkQ7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzdELElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBYyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3hFLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ25EO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LFxyXG4gICAgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgKiBhcyBqUXVlcnlfIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCAqIGFzIG5hbm9pZF8gZnJvbSAnbmFub2lkJztcclxuaW1wb3J0IHsgRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlIH0gZnJvbSAnbmd4LWRldmljZS1kZXRlY3Rvcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2NvbnRleHRtZW51JztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9jb21wb25lbnQtYmFzZSc7XHJcbmltcG9ydCB7IEtleUZsYXNoU2hvdyB9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcclxuaW1wb3J0IHtcclxuICAgIEFkZHJlc3NDb250cm9sU2NoZW1hLCBBdXRvQ29tcGxldGVDb250cm9sU2NoZW1hLCBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxyXG4gICAgQnV0dG9uQ29udHJvbFNjaGVtYSwgQ2hlY2tib3hDb250cm9sU2NoZW1hLFxyXG4gICAgQ2hlY2tCb3hMaXN0Q29udHJvbFNjaGVtYSwgQ29DYXVUb0NodWNDb250cm9sU2NoZW1hLFxyXG4gICAgQ29DYXVUb0NodWNQaWNrZXJDb250cm9sU2NoZW1hLCBDb2xvckNvbnRyb2xTY2hlbWEsIENvbG9yUGlja2VyQ29udHJvbFNjaGVtYSwgQ29uZ1ZpZWNQaWNrZXJDb250cm9sU2NoZW1hLCBDb250YWluZXJTY2hlbWEsIENydWRGb3JtU2V0dGluZyxcclxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSwgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEsIERyb3Bkb3duQ29udHJvbFNjaGVtYSwgRWRpdG9yQ29udHJvbFNjaGVtYSwgRW50aXR5UGlja2VyQ29udHJvbFNjaGVtYSxcclxuICAgIEV2ZW50RGF0YSwgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hLCBGaWxlVXBsb2FkQ29udHJvbFNjaGVtYSxcclxuICAgIEZpbGVVcGxvYWRNb2RlLFxyXG4gICAgRm9ybUNvbnRyb2xCYXNlLCBGb3JtU2NoZW1hQmFzZSxcclxuICAgIEtleVZhbHVlQ29udHJvbFNjaGVtYSwgTGFiZWxTY2hlbWEsIE1hc2tDb250cm9sU2NoZW1hLCBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEsIE9wZXJhdG9yLCBPcmdhbml6YXRpb25QaWNrZXJDb250cm9sU2NoZW1hLFxyXG4gICAgUG9wdXBTaXplLFxyXG4gICAgUmFkaW9CdXR0b25MaXN0Q29udHJvbFNjaGVtYSwgU3BhbkNvbnRyb2xTY2hlbWEsIFN3aXRjaENvbnRyb2xTY2hlbWEsIFRhYmxlU2NoZW1hLCBUZW1wbGF0ZUNvbnRyb2xTY2hlbWEsIFRleHRBcmVhQ29udHJvbFNjaGVtYSwgVGV4dENvbnRyb2xTY2hlbWEsXHJcbiAgICBUaXRsZVNjaGVtYSwgVXNlclBpY2tlckNvbnRyb2xTY2hlbWEsIFZhbkJhblBpY2tlckNvbnRyb2xTY2hlbWEsIFdyYXBQaWNrZXJDb250cm9sU2NoZW1hXHJcbn0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5UGlja2VyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VudGl0eS1waWNrZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24vc2VydmljZXMvZHJvcGRvd24uc2VydmljZSc7XHJcbmltcG9ydCB7IGJhc2VUcmluaEt5IH0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBHbWFpbENvcnJlY3RvciwgTG93ZXJDb3JyZWN0b3IgfSBmcm9tICcuLy4uLy4uLy4uL2NsYXNzZXMvYmFzZS9jb3JyZWN0b3JzJztcclxuaW1wb3J0IHsgQ2hlY2tEdXBsaWNhdGVGaWVsZHNWYWxpZGF0b3IsIENoZWNrRHVwbGljYXRlVmFsaWRhdG9yLCBDb21wYXJlVmFsaWRhdG9yLCBEYXRlQ29tcGFyZVZhbGlkYXRvciwgRW1haWxWYWxpZGF0b3IsIE51bWJlckNvbXBhcmVWYWxpZGF0b3IsIE51bWJlck9ubHlWYWxpZGF0b3IsIFBob25lTnVtYmVyVmFsaWRhdG9yLCBSZXF1aXJlZEZpZWxkc1ZhbGlkYXRvciwgUmVxdWlyZWRWYWxpZGF0b3IsIFNhbWVWYWx1ZVZhbGlkYXRvciB9IGZyb20gJy4vLi4vLi4vLi4vY2xhc3Nlcy9iYXNlL3ZhbGlkYXRvcnMnO1xyXG5pbXBvcnQgeyBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QsIG1lcmdlSlNPTiwgbWVyZ2VKU09OT2xkIH0gZnJvbSAnLi8uLi8uLi8uLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4vLi4vLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEZpbHRlciB9IGZyb20gJy4vLi4vLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi8uLi8uLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5cclxuLy8gZml4IGZvciBidWlsZCBwcm9kXHJcbmNvbnN0IG5hbm9pZCA9IG5hbm9pZF87XHJcbmNvbnN0IGpRdWVyeSA9IGpRdWVyeV87XHJcblxyXG5kZWNsYXJlIHZhciB0aW55bWNlOiBhbnk7XHJcblxyXG5jb25zdCBvcGVyYXRvckNvbnRyYXN0ID0ge1xyXG4gICAgW09wZXJhdG9yLmdyZWF0ZXJdOiBPcGVyYXRvci5sb3dlcixcclxuICAgIFtPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsXTogT3BlcmF0b3IubG93ZXJUaGFuRXF1YWwsXHJcbiAgICBbT3BlcmF0b3IubG93ZXJdOiBPcGVyYXRvci5ncmVhdGVyLFxyXG4gICAgW09wZXJhdG9yLmxvd2VyVGhhbkVxdWFsXTogT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbFxyXG59O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2NydWQtZm9ybScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY3J1ZC1mb3JtLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NydWQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbQ29tcG9uZW50Q29udGV4dFNlcnZpY2VdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcnVkRm9ybUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgICBAVmlld0NoaWxkKCdmb3JtRWxlbWVudCcpIGZvcm1FbGVtZW50OiBFbGVtZW50UmVmO1xyXG4gICAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnLCB7IHN0YXRpYzogZmFsc2UgfSkgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgY2hpbGRyZW46IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgICBASW5wdXQoKSBzZXR0aW5nOiBDcnVkRm9ybVNldHRpbmcgPSBuZXcgQ3J1ZEZvcm1TZXR0aW5nKCk7XHJcbiAgICBASW5wdXQoKSBjb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcclxuXHJcbiAgICBASW5wdXQoKSBmaWxlc1VwbG9hZGVkID0gW107XHJcbiAgICBASW5wdXQoKSBpc1ZpZXdNb2RlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlS2V5cHJlc3NDb250cm9sID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlQ2FjaGluZyA9IGZhbHNlO1xyXG4gICAgX3N0eWxlQ2xhc3MgPSAncC1mbHVpZCc7XHJcbiAgICBASW5wdXQoKSBzZXQgc3R5bGVDbGFzcyh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fc3R5bGVDbGFzcyA9ICdwLWZsdWlkJztcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPSAnJykge1xyXG4gICAgICAgICAgICB0aGlzLl9zdHlsZUNsYXNzICs9IGAgJHt2YWx1ZX1gO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIGZvcm1JZCA9ICcnO1xyXG4gICAgQElucHV0KCkgZm9ybUNsYXNzID0gJyc7XHJcbiAgICBASW5wdXQoKSBhdXRvRm9jdXMgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgdHJhcEZvY3VzID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHNldCBkYXRhKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNhblByaW50ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuX21pbmltaXplZERhdGEgIT0gdmFsdWUgJiYgaXNMaXRlcmFsT2JqZWN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICB0aGlzLl9tb2RlbERhdGEgPSBtZXJnZUpTT04odGhpcy5fbW9kZWxEYXRhLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYW4oKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuc2V0dGluZy5zY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xNb2RlbCh0aGlzLl9tb2RlbERhdGEsIGNvbnRyb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlID0gbmV3IENvbnRyb2xUcmVlTm9kZSh0aGlzLl9tb2RlbERhdGEsIHRoaXMuZm9ybUNvbnRyb2xzKTtcclxuICAgICAgICAgICAgdGhpcy5fcm9vdE5vZGUuc2V0Q3J1ZEZvcm0odGhpcyk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRoaXMuX3Jvb3ROb2RlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnbW9kZWxDaGFuZ2VkJyxcclxuICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLm9uTW9kZWxDaGFuZ2VkLmVtaXQoZXZlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLl9taW5pbWl6ZWREYXRhID0gdGhpcy5nZXRNaW5pbWl6ZURhdGEodGhpcy5fbW9kZWxEYXRhKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWREYXRhRWRpdE9sZCAmJiB0aGlzLmxvYWRlZERhdGFFZGl0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhblByaW50ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDYW5QcmludCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbW9kZWxEYXRhID0ge307XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLnNldHRpbmcuc2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRDb250cm9sTW9kZWwodGhpcy5fbW9kZWxEYXRhLCBjb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9yb290Tm9kZSA9IG5ldyBDb250cm9sVHJlZU5vZGUodGhpcy5fbW9kZWxEYXRhLCB0aGlzLmZvcm1Db250cm9scyk7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlLnNldENydWRGb3JtKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0aGlzLl9yb290Tm9kZSxcclxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ21vZGVsQ2hhbmdlZCcsXHJcbiAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlZC5lbWl0KGV2ZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Jvb3ROb2RlID0gbmV3IENvbnRyb2xUcmVlTm9kZSh0aGlzLl9tb2RlbERhdGEsIHRoaXMuZm9ybUNvbnRyb2xzKTtcclxuICAgICAgICAgICAgdGhpcy5fcm9vdE5vZGUuc2V0Q3J1ZEZvcm0odGhpcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25Gb3JtUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNvbnRyb2xSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQWxsQ29udHJvbFJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Nb2RlbENoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBkYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2U6IEV2ZW50RW1pdHRlcjxFdmVudERhdGE+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudERhdGE+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25BZnRlclRyaW5oS3kgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgICBfcm9vdE5vZGU6IENvbnRyb2xUcmVlTm9kZTtcclxuICAgIF9taW5pbWl6ZWREYXRhOiBhbnk7XHJcbiAgICBfbW9kZWxEYXRhOiBhbnkgPSB7fTtcclxuICAgIF91bnN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIF9pblZhbGlkRm9ybSA9IGZhbHNlO1xyXG5cclxuICAgIC8vIERvYyB0dSBjYXUgaGluaCB0aGFtIHNvIGhlIHRob25nXHJcbiAgICBsaW1pdFNpemUgPSAwO1xyXG4gICAgZm9ybUNvbnRyb2xzOiBhbnkgPSBbXTtcclxuICAgIGZ1bmNDaGVja1VuaXF1ZUZpZWxkOiBhbnkgPSB7fTtcclxuICAgIGJlZm9yZURhdGE6IGFueSA9IHt9O1xyXG4gICAgZmlyc3REaXZIb2xkZXI6IGFueTtcclxuICAgIGNhY2hlZFZhbHVlcyA9IHt9O1xyXG4gICAgdGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT4gfSA9IHt9O1xyXG4gICAgX3ByZWZpeEN1c3RvbUhlYWRlciA9ICdjdXN0b21IZWFkZXJfJztcclxuXHJcbiAgICBsb2FkZWREYXRhRWRpdE9sZCA9IGZhbHNlO1xyXG4gICAgbG9hZGVkRGF0YUVkaXQgPSBmYWxzZTtcclxuICAgIGNhblByaW50ID0gZmFsc2U7XHJcblxyXG4gICAgdGFibGVGb3JtU2hvdyA9IGZhbHNlO1xyXG4gICAgdGFibGVGb3JtVGl0bGU6IHN0cmluZztcclxuICAgIHRhYmxlRm9ybVBvcHVwU2l6ZSA9IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSk7XHJcbiAgICB0YWJsZUZvcm1EYXRhOiBhbnkgPSB7fTtcclxuICAgIHRhYmxlRm9ybUN1cnJlbnRSb3c6IG51bWJlcjtcclxuICAgIHRhYmxlRm9ybVNjaGVtYTogRm9ybVNjaGVtYUJhc2VbXSA9IFtdO1xyXG4gICAgdGFibGVGb3JtQ3VycmVudEluZm86IGFueSA9IHt9O1xyXG5cclxuICAgIGJ1dHRvbkNvbnRleHRzOiBNZW51SXRlbVtdID0gW107XHJcbiAgICByb3dEYXRhQ3VycmVudDogYW55ID0ge307XHJcbiAgICBjb250cm9sTmVlZENoZWNrUmVhZHk6IEZvcm1TY2hlbWFCYXNlW10gPSBbXTtcclxuICAgIHJlYWR5U3RhdHVzOiBhbnkgPSB7fTtcclxuICAgIGZpZWxkUGFyZW50RmllbGQgPSAncGFyZW50RmllbGQnO1xyXG4gICAgd2FpdFJlYWR5QW5kUHJpbnRUaW1lb3V0OiBhbnk7XHJcblxyXG4gICAgcHVibGljIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZTtcclxuICAgIHB1YmxpYyBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xyXG4gICAgcHVibGljIF91c2VyU2VydmljZTogVXNlclNlcnZpY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHVibGljIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgcHVibGljIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxyXG4gICAgICAgIHB1YmxpYyBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHVibGljIF9kZXZpY2VEZXRlY3RvclNlcnZpY2U6IERldmljZURldGVjdG9yU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcclxuICAgICAgICBwdWJsaWMgX3Nhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgICAgIHB1YmxpYyBfZW50aXR5UGlja2VyU2VydmljZTogRW50aXR5UGlja2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWc6IE1vZHVsZUNvbmZpZ1NlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgLy8gR2V0IENvbmZpZ3VyYXRpb25TeXN0ZW1cclxuICAgICAgICB0aGlzLl9tYXN0ZXJEYXRhU2VydmljZS5nZXRDb25maWdCeUNvZGUoJ1NpemVPZkZpbGUnKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpbWl0U2l6ZSA9IE51bWJlcihyZXNwb25zZSkgKiAxMDAwICogMTAwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmhpZGRlblRyaW5oS3kpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnNjaGVtYS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgbmV3IEZpbGVVcGxvYWRDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3ByaW50RmlsZUlkJyxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0ZpbGUnLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vZGU6IEZpbGVVcGxvYWRNb2RlLnVzaW5nRmlsZUluc3RhbmNlSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuQ2hlY2s6IChtb2RlbCwgY3VycmVudE5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtb2RlbC5wcmludEZpbGVJZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbml0TG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaFZpZXdNb2RlKHJlYWRvbmx5VmlldyA9IHRydWUpIHtcclxuICAgICAgICB0aGlzLmlzVmlld01vZGUgPSByZWFkb25seVZpZXc7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuaW5pdExvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhbigpIHtcclxuICAgICAgICB0aGlzLmNsZWFuTW9kZWwodGhpcy5fbW9kZWxEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsZWFuTW9kZWwobW9kZWwpIHtcclxuICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KG1vZGVsKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PSAnX3N0YXR1cycpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHMgaW4gbW9kZWxba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlbFtrZXldW3NdID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gJ19lcnJvcnMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzIGluIG1vZGVsW2tleV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxba2V5XVtzXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYW5Nb2RlbChtb2RlbFtrZXldKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KG1vZGVsKSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2xlYW5Nb2RlbChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1pbmltaXplRGF0YShtb2RlbCkge1xyXG4gICAgICAgIGlmIChpc0xpdGVyYWxPYmplY3QobW9kZWwpKSB7XHJcbiAgICAgICAgICAgIGlmIChtb2RlbC5fZHJvcGRvd252YWx1ZSAhPSBudWxsICYmIG1vZGVsLl9kcm9wZG93bnZhbHVlICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZGVsW21vZGVsLl9kcm9wZG93bnZhbHVlXSB8fCBtb2RlbFsndmFsdWUnXTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBtb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSAnX3N0YXR1cycgJiYga2V5ICE9ICdfZXJyb3JzJyAmJiBrZXkgIT0gJ19zb3VyY2UnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldE1pbmltaXplRGF0YShtb2RlbFtrZXldKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkobW9kZWwpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIGFyci5wdXNoKHRoaXMuZ2V0TWluaW1pemVEYXRhKGl0ZW0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChtb2RlbCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2RlbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0TG9hZCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5zY2hlbWEpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNjaGVtYS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAvLyB0aOG7sWMgaGnhu4duIHNhdSBjw7luZyBraGkgbW9kZWwgxJHDoyBpbml0IHhvbmcgdsOgIGPDoWMgc+G7sSBraeG7h24gYWRkIHJvdyB0aOG7sWMgaGnhu4duIHhvbmdcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmb3JtRXZlbnQgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5fcm9vdE5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnZm9ybVJlYWR5JyxcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uRm9ybVJlYWR5LmVtaXQoZm9ybUV2ZW50KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFNjaGVtYSgpO1xyXG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlQ2FjaGluZyAmJiAhdGhpcy5fbW9kZWxEYXRhLmlkKSB0aGlzLmFwcGx5Q2FjaGVkVmFsdWVzKCk7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhRGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAvLyB0aOG7sWMgaGnhu4duIHNhdSBjw7luZyBraGkgbW9kZWwgxJHDoyBpbml0IHhvbmcgdsOgIGPDoWMgc+G7sSBraeG7h24gYWRkIHJvdyB0aOG7sWMgaGnhu4duIHhvbmdcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybUV2ZW50ID0gbmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGhpcy5fcm9vdE5vZGUsXHJcbiAgICAgICAgICAgICAgICBldmVudFR5cGU6ICdmb3JtUmVhZHknLFxyXG4gICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMub25Gb3JtUmVhZHkuZW1pdChmb3JtRXZlbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFNjaGVtYSgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbnRyb2wgb2YgdGhpcy5zZXR0aW5nLnNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXRDb250cm9sU2NoZW1hKGNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjb250cm9sIG9mIHRoaXMuc2V0dGluZy5zY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbE1vZGVsKHRoaXMuX21vZGVsRGF0YSwgY29udHJvbCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFZhbGlkYXRvckFuZENvcnJlY3Rvcihjb250cm9sKTtcclxuICAgICAgICAgICAgdGhpcy5pbml0QmluZGluZ0NvbnRyb2xTY2hlbWEoY29udHJvbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9yb290Tm9kZSA9IG5ldyBDb250cm9sVHJlZU5vZGUodGhpcy5fbW9kZWxEYXRhLCB0aGlzLmZvcm1Db250cm9scyk7XHJcbiAgICAgICAgdGhpcy5fcm9vdE5vZGUuc2V0Q3J1ZEZvcm0odGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Q29udHJvbE1vZGVsKHBhcmVudE1vZGVsLCBjb250cm9sLCBwYXJlbnRQYXRoPykge1xyXG4gICAgICAgIHRoaXMuaW5pdFByaXZhdGVEYXRhKHBhcmVudE1vZGVsLCBjb250cm9sLmZpZWxkKTtcclxuXHJcbiAgICAgICAgbGV0IF9wYXJlbnRQYXRoID0gY29udHJvbC5maWVsZDtcclxuICAgICAgICBpZiAocGFyZW50UGF0aCAhPSBudWxsKSBfcGFyZW50UGF0aCA9IHBhcmVudFBhdGggKyAnLicgKyBfcGFyZW50UGF0aDtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkge1xyXG4gICAgICAgICAgICBpZiAoIXBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIHx8ICEocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gaW5zdGFuY2VvZiBBcnJheSkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWRkTW9yZSA9IGNvbnRyb2wuaW5pdFJvd0NvdW50IC0gcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0ubGVuZ3RoO1xyXG4gICAgICAgICAgICBpZiAoYWRkTW9yZSA+IDAgJiYgIXBhcmVudE1vZGVsLl9zdGF0dXNbY29udHJvbC5maWVsZF0ucmVhZHkpIHtcclxuICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsLl9zdGF0dXNbY29udHJvbC5maWVsZF0ucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8gdGjhu7FjIGhp4buHbiBzYXUgY8O5bmcga2hpIHThuqV0IGPhuqMgbW9kZWwgxJHDoyBpbml0IHhvbmdcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTXVsdGlSb3coY29udHJvbCwgYWRkTW9yZSwgX3BhcmVudFBhdGgsICdpbml0Jyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wucm93VGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRDb250cm9sTW9kZWwoaXRlbSwgc3ViQ29udHJvbCwgX3BhcmVudFBhdGggKyAnWycgKyBpICsgJ10nKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGkrKztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29udGFpbmVyU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9PSBudWxsIHx8ICFpc0xpdGVyYWxPYmplY3QocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0pKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5jb250cm9scykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbE1vZGVsKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdLCBzdWJDb250cm9sLCBfcGFyZW50UGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIC8vIGlmICghcGFyZW50TW9kZWwuaGFzT3duUHJvcGVydHkoY29udHJvbC5maWVsZCkgJiYgY29udHJvbC5maWVsZCAhPSBudWxsKSB7XHJcbiAgICAgICAgLy8gICAgIC8vICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IGNvbnRyb2wuZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIC8vICAgICAvLyB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgfVxyXG5cclxuICAgIGluaXRDb250cm9sRGVmYXVsdFZhbHVlRnJvbUV4dGVybmFsKCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLnNldHRpbmcuc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xEZWZhdWx0VmFsdWUodGhpcy5fbW9kZWxEYXRhLCBjb250cm9sKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Q29udHJvbERlZmF1bHRWYWx1ZShwYXJlbnRNb2RlbCwgY29udHJvbCwgcGFyZW50UGF0aD8pIHtcclxuICAgICAgICB0aGlzLmluaXRQcml2YXRlRGF0YShwYXJlbnRNb2RlbCwgY29udHJvbC5maWVsZCk7XHJcblxyXG4gICAgICAgIGxldCBfcGFyZW50UGF0aCA9IGNvbnRyb2wuZmllbGQ7XHJcbiAgICAgICAgaWYgKHBhcmVudFBhdGggIT0gbnVsbCkgX3BhcmVudFBhdGggPSBwYXJlbnRQYXRoICsgJy4nICsgX3BhcmVudFBhdGg7XHJcblxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKCFwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSB8fCAhKHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdIGluc3RhbmNlb2YgQXJyYXkpKSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFkZE1vcmUgPSBjb250cm9sLmluaXRSb3dDb3VudCAtIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdLmxlbmd0aDtcclxuICAgICAgICAgICAgaWYgKGFkZE1vcmUgPiAwICYmICFwYXJlbnRNb2RlbC5fc3RhdHVzW2NvbnRyb2wuZmllbGRdLnJlYWR5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbC5fc3RhdHVzW2NvbnRyb2wuZmllbGRdLnJlYWR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgaSA9IDA7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wucm93VGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRDb250cm9sRGVmYXVsdFZhbHVlKGl0ZW0sIHN1YkNvbnRyb2wsIF9wYXJlbnRQYXRoICsgJ1snICsgaSArICddJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbnRhaW5lclNjaGVtYSkge1xyXG4gICAgICAgICAgICBpZiAocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPT0gbnVsbCB8fCAhaXNMaXRlcmFsT2JqZWN0KHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdKSkge1xyXG4gICAgICAgICAgICAgICAgcGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xEZWZhdWx0VmFsdWUocGFyZW50TW9kZWxbY29udHJvbC5maWVsZF0sIHN1YkNvbnRyb2wsIF9wYXJlbnRQYXRoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFwYXJlbnRNb2RlbC5oYXNPd25Qcm9wZXJ0eShjb250cm9sLmZpZWxkKSAmJiBjb250cm9sLmZpZWxkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLmRlZmF1bHRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudE1vZGVsW2NvbnRyb2wuZmllbGRdID0gY29udHJvbC5kZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuYXV0b0Rpc3BsYXlGaXJzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBjb250cm9sLl9jb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgY29udHJvbC5fY29tcG9uZW50Ll9oYXNMb2FkZWREYXRhc291cmNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWwubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRNb2RlbFtjb250cm9sLmZpZWxkXSA9IGNvbnRyb2wuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWxbMF0udmFsdWVbY29udHJvbC52YWx1ZUZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0UHJpdmF0ZURhdGEocGFyZW50TW9kZWwsIGZpZWxkKSB7XHJcbiAgICAgICAgaWYgKCFwYXJlbnRNb2RlbC5fc291cmNlKSBwYXJlbnRNb2RlbC5fc291cmNlID0ge307XHJcblxyXG4gICAgICAgIGlmICghcGFyZW50TW9kZWwuX3N0YXR1cykgcGFyZW50TW9kZWwuX3N0YXR1cyA9IHt9O1xyXG4gICAgICAgIGlmICghcGFyZW50TW9kZWwuX2Vycm9ycykgcGFyZW50TW9kZWwuX2Vycm9ycyA9IHt9O1xyXG5cclxuICAgICAgICBpZiAoIXBhcmVudE1vZGVsLl9zdGF0dXNbZmllbGRdKSBwYXJlbnRNb2RlbC5fc3RhdHVzW2ZpZWxkXSA9IHt9O1xyXG4gICAgICAgIGlmICghcGFyZW50TW9kZWwuX2Vycm9yc1tmaWVsZF0pIHBhcmVudE1vZGVsLl9lcnJvcnNbZmllbGRdID0gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0Q29udHJvbFNjaGVtYShzY2hlbWE6IEZvcm1TY2hlbWFCYXNlLCBwYXJlbnRJZD8pIHtcclxuICAgICAgICBpZiAoc2NoZW1hLmRpc2FibGVkICE9IHRydWUpIHtcclxuICAgICAgICAgICAgc2NoZW1hLmRpc2FibGVkID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNWaWV3TW9kZSkge1xyXG4gICAgICAgICAgICBzY2hlbWEuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2NoZW1hLmxhYmVsICYmICFzY2hlbWEuZnVsbExhYmVsKSB7XHJcbiAgICAgICAgICAgIHNjaGVtYS5mdWxsTGFiZWwgPSBzY2hlbWEubGFiZWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVGl0bGVTY2hlbWFcclxuICAgICAgICAgICAgfHwgc2NoZW1hIGluc3RhbmNlb2YgTGFiZWxTY2hlbWFcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaWYgKCFzY2hlbWEuZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYS5maWVsZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2NoZW1hLmZpZWxkKSB7XHJcbiAgICAgICAgICAgIGxldCBrZXkgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnRJZCAhPSBudWxsKSBrZXkgPSBwYXJlbnRJZCArICcuJyArIGtleTtcclxuICAgICAgICAgICAgc2NoZW1hLnVuaXF1ZUZpZWxkID0ga2V5O1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1Db250cm9sc1trZXldID0gc2NoZW1hO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2NoZW1hWydjb250cm9sVHlwZSddID0gdGhpcy5nZXRDb250cm9sVHlwZShzY2hlbWEpO1xyXG4gICAgICAgIHNjaGVtYVsnZGF0YVR5cGUnXSA9IHRoaXMuZ2V0Vmlld01vZGVEYXRhVHlwZShzY2hlbWEpO1xyXG5cclxuICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IDxUYWJsZVNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBzdWJDb250cm9sW3RoaXMuZmllbGRQYXJlbnRGaWVsZF0gPSBjb250cm9sLnVuaXF1ZUZpZWxkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0Q29udHJvbFNjaGVtYShzdWJDb250cm9sLCBzY2hlbWEudW5pcXVlRmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkNvbnRyb2xTY2hlbWEgPSA8RHJvcGRvd25Db250cm9sU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgZHJvcGRvd25Db250cm9sU2NoZW1hLnJldHVyblR5cGUgPSAnb2JqZWN0JztcclxuICAgICAgICAgICAgZHJvcGRvd25Db250cm9sU2NoZW1hLmZpcmVDYWxsQmFja0luc2lkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIWRyb3Bkb3duQ29udHJvbFNjaGVtYS5iaW5kaW5nRmlsdGVycykge1xyXG4gICAgICAgICAgICAgICAgZHJvcGRvd25Db250cm9sU2NoZW1hLmxvYWRPbkluaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc0Rlc2t0b3AoKSkge1xyXG4gICAgICAgICAgICAgICAgZHJvcGRvd25Db250cm9sU2NoZW1hLmZpbHRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOZWVkQ2hlY2tSZWFkeS5wdXNoKHNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFVzZXJQaWNrZXJDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQaWNrZXJDb250cm9sU2NoZW1hID0gPERyb3Bkb3duQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgIHVzZXJQaWNrZXJDb250cm9sU2NoZW1hLnJldHVyblR5cGUgPSAnb2JqZWN0JztcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTmVlZENoZWNrUmVhZHkucHVzaChzY2hlbWEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDb250YWluZXJTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IDxDb250YWluZXJTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5jb250cm9scykge1xyXG4gICAgICAgICAgICAgICAgc3ViQ29udHJvbFt0aGlzLmZpZWxkUGFyZW50RmllbGRdID0gY29udHJvbC51bmlxdWVGaWVsZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xTY2hlbWEoc3ViQ29udHJvbCwgY29udHJvbC51bmlxdWVGaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBhdXRvY29tcGxldGVDb250cm9sU2NoZW1hID0gPEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICBhdXRvY29tcGxldGVDb250cm9sU2NoZW1hLnJldHVyblR5cGUgPSAnb2JqZWN0JztcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sTmVlZENoZWNrUmVhZHkucHVzaChzY2hlbWEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBZGRyZXNzQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xOZWVkQ2hlY2tSZWFkeS5wdXNoKHNjaGVtYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFJhZGlvQnV0dG9uTGlzdENvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgc2NoZW1hLmZpcmVDYWxsQmFja0luc2lkZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRCaW5kaW5nQ29udHJvbFNjaGVtYShzY2hlbWE6IGFueSkge1xyXG4gICAgICAgIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gPFRhYmxlU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wucm93VGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdEJpbmRpbmdDb250cm9sU2NoZW1hKHN1YkNvbnRyb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkNvbnRyb2xTY2hlbWEgPSA8RHJvcGRvd25Db250cm9sU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgaWYgKGRyb3Bkb3duQ29udHJvbFNjaGVtYS5iaW5kaW5nRmlsdGVycykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kT25DaGFuZ2VUb0Ryb3Bkb3duKGRyb3Bkb3duQ29udHJvbFNjaGVtYSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBkcm9wZG93bkNvbnRyb2xTY2hlbWEgPSA8QXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgIGlmIChkcm9wZG93bkNvbnRyb2xTY2hlbWEuYmluZGluZ0ZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYmluZE9uQ2hhbmdlVG9Ecm9wZG93bihkcm9wZG93bkNvbnRyb2xTY2hlbWEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENvbnRhaW5lclNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gPENvbnRhaW5lclNjaGVtYT5zY2hlbWE7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRCaW5kaW5nQ29udHJvbFNjaGVtYShzdWJDb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGJpbmRPbkNoYW5nZVRvRHJvcGRvd24oZHJvcGRvd25Db250cm9sU2NoZW1hOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEgfCBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgbGV0IHRtcEZpbHRlcnM6IEZpbHRlcltdID0gW107XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZHJvcGRvd25Db250cm9sU2NoZW1hLmJpbmRpbmdGaWx0ZXJzKSkge1xyXG4gICAgICAgICAgICB0bXBGaWx0ZXJzID0gZHJvcGRvd25Db250cm9sU2NoZW1hLmJpbmRpbmdGaWx0ZXJzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgKGRyb3Bkb3duQ29udHJvbFNjaGVtYS5iaW5kaW5nRmlsdGVycykgPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICB0bXBGaWx0ZXJzID0gZHJvcGRvd25Db250cm9sU2NoZW1hLmJpbmRpbmdGaWx0ZXJzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0bXBGaWx0ZXJzID0gYXdhaXQgZHJvcGRvd25Db250cm9sU2NoZW1hLmJpbmRpbmdGaWx0ZXJzO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0bXBGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc291cmNlRmllbGQgPSBmaWx0ZXIuc291cmNlRmllbGQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXMuc2V0dGluZy5zY2hlbWEuZmluZChxID0+IHEuZmllbGQgPT0gc291cmNlRmllbGQpO1xyXG4gICAgICAgICAgICBpZiAoIWZpbHRlci5zdWJGaWVsZFxyXG4gICAgICAgICAgICAgICAgJiYgKHNjaGVtYSBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSB8fCBzY2hlbWEgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSkge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyLnN1YkZpZWxkID0gc2NoZW1hLnZhbHVlRmllbGQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBtYXJrZWRDb250cm9sID0ge307XHJcbiAgICAgICAgdGhpcy5iaW5kT25DaGFuZ2VUb0Ryb3Bkb3duUmVjdXJzaXZlKGRyb3Bkb3duQ29udHJvbFNjaGVtYSwgdG1wRmlsdGVycywgbWFya2VkQ29udHJvbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBiaW5kT25DaGFuZ2VUb0Ryb3Bkb3duUmVjdXJzaXZlKGNoaWxkRHJvcGRvd246IERyb3Bkb3duQ29udHJvbFNjaGVtYSB8IEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsIHRtcEZpbHRlcnM6IEZpbHRlcltdLCBtYXJrZWRDb250cm9sKSB7XHJcbiAgICAgICAgaWYgKHRtcEZpbHRlcnMgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiB0bXBGaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2VGaWVsZCA9IGZpbHRlci5zb3VyY2VGaWVsZDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudERyb3Bkb3duID0gdGhpcy5mb3JtQ29udHJvbHNbc291cmNlRmllbGRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudERyb3Bkb3duICYmICFtYXJrZWRDb250cm9sW3NvdXJjZUZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1hcmtlZENvbnRyb2xbc291cmNlRmllbGRdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZE1vcmVPbkNoYW5nZUV2ZW50KHBhcmVudERyb3Bkb3duLCAoZXZlbnQ6IEV2ZW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREcm9wZG93biBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5lZWRHZXREYXRhID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGREcm9wZG93bi5hbGxvd0xvYWREYXRhV2hlblBhcmVudE51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBldmVudC5ldmVudFR5cGUgPT0gJ2FkanVzdFZhbHVlJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRHZXREYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LnZhbHVlID09IG51bGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBldmVudC52YWx1ZSA9PSAnJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChldmVudC52YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmIGV2ZW50LnZhbHVlLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERyb3Bkb3duLl9jb21wb25lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGREcm9wZG93bi5fY29tcG9uZW50LnJlc2V0Q29udHJvbCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRHZXREYXRhID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZWVkR2V0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLl9jcnVkU2VydmljZS5nZXRGaWx0ZXJGcm9tVGVtcGxhdGUodG1wRmlsdGVycywgZXZlbnQucGFyZW50TW9kZWwsIGV2ZW50LnJvb3RNb2RlbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRHJvcGRvd24uX2NvbXBvbmVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoIShwYXJlbnREcm9wZG93biBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHBhcmVudERyb3Bkb3duLl9jb21wb25lbnQgJiYgcGFyZW50RHJvcGRvd24uX2NvbXBvbmVudC5faGFzTG9hZGVkRGF0YXNvdXJjZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRHJvcGRvd24uX2NvbXBvbmVudC5nZXREYXRhKGZpbHRlcnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERyb3Bkb3duLl9jb21wb25lbnQgJiYgY2hpbGREcm9wZG93bi5fY29tcG9uZW50LmdldERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERyb3Bkb3duLl9jb21wb25lbnQuZ2V0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRPbkNoYW5nZVRvRHJvcGRvd25SZWN1cnNpdmUoY2hpbGREcm9wZG93biwgZmlsdGVyLmZpbHRlcnMsIG1hcmtlZENvbnRyb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkTW9yZU9uQ2hhbmdlRXZlbnQoY29udHJvbDogRm9ybUNvbnRyb2xCYXNlLCBuZXdPbkNoYW5nZSkge1xyXG4gICAgICAgIGlmIChjb250cm9sLnRyaWdnZXJMb2FkQ2hpbGQpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkVHJpZ2dlckxvYWRDaGlsZCA9IGNvbnRyb2wudHJpZ2dlckxvYWRDaGlsZDtcclxuICAgICAgICAgICAgY29udHJvbC50cmlnZ2VyTG9hZENoaWxkID0gYXN5bmMgKGV2ZW50OiBFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG9sZFRyaWdnZXJMb2FkQ2hpbGQoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3T25DaGFuZ2UoZXZlbnQpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29udHJvbC50cmlnZ2VyTG9hZENoaWxkID0gYXN5bmMgKGV2ZW50OiBFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG5ld09uQ2hhbmdlKGV2ZW50KTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdG1wRmllbGRPbGRPbkNoYW5nZSA9ICdvbGRPbkNoYW5nZSc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xbdG1wRmllbGRPbGRPbkNoYW5nZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC5vbkNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZE9uQ2hhbmdlID0gY29udHJvbC5vbkNoYW5nZWQ7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sW3RtcEZpZWxkT2xkT25DaGFuZ2VdID0gb2xkT25DaGFuZ2U7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLm9uQ2hhbmdlZCA9IGFzeW5jIChldmVudDogRXZlbnREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgb2xkT25DaGFuZ2UoZXZlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGNvbnRyb2wudHJpZ2dlckxvYWRDaGlsZChldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5vbkNoYW5nZWQgPSBjb250cm9sLnRyaWdnZXJMb2FkQ2hpbGQ7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sW3RtcEZpZWxkT2xkT25DaGFuZ2VdID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2xbdG1wRmllbGRPbGRPbkNoYW5nZV0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9sZE9uQ2hhbmdlID0gY29udHJvbFt0bXBGaWVsZE9sZE9uQ2hhbmdlXTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wub25DaGFuZ2VkID0gYXN5bmMgKGV2ZW50OiBFdmVudERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBvbGRPbkNoYW5nZShldmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbC50cmlnZ2VyTG9hZENoaWxkKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLm9uQ2hhbmdlZCA9IGNvbnRyb2wudHJpZ2dlckxvYWRDaGlsZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wub25BZGp1c3RlZFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbGRFdmVudCA9IGNvbnRyb2wub25BZGp1c3RlZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5vbkFkanVzdGVkVmFsdWUgPSBhc3luYyAoZXZlbnQ6IEV2ZW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG9sZEV2ZW50KGV2ZW50KTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBuZXdPbkNoYW5nZShldmVudCk7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5vbkFkanVzdGVkVmFsdWUgPSBhc3luYyAoZXZlbnQ6IEV2ZW50RGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IG5ld09uQ2hhbmdlKGV2ZW50KTtcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0VmFsaWRhdG9yQW5kQ29ycmVjdG9yKHNjaGVtYTogRm9ybUNvbnRyb2xCYXNlKSB7XHJcbiAgICAgICAgaWYgKCFzY2hlbWEuY29ycmVjdG9ycykgc2NoZW1hLmNvcnJlY3RvcnMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCFzY2hlbWEudmFsaWRhdG9ycykgc2NoZW1hLnZhbGlkYXRvcnMgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKHNjaGVtYS5yZXF1aXJlZCkge1xyXG4gICAgICAgICAgICBzY2hlbWEudmFsaWRhdG9ycy5wdXNoKG5ldyBSZXF1aXJlZFZhbGlkYXRvcigpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBNYXNrQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBpZiAoc2NoZW1hLnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgICAgIHNjaGVtYS52YWxpZGF0b3JzLmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgTnVtYmVyQ29tcGFyZVZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckNvbXBhcmVSZXZlcnQodmFsaWRhdG9yLCBzY2hlbWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFRleHRDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRleHRTY2hlbWEgPSAoPFRleHRDb250cm9sU2NoZW1hPnNjaGVtYSk7XHJcbiAgICAgICAgICAgIGlmICh0ZXh0U2NoZW1hLmRhdGFGb3JtYXQgPT0gJ251bWJlcicgfHwgdGV4dFNjaGVtYS5kYXRhRm9ybWF0ID09ICdhbW91bnQnKSB7XHJcbiAgICAgICAgICAgICAgICB0ZXh0U2NoZW1hLnZhbGlkYXRvcnMucHVzaChuZXcgTnVtYmVyT25seVZhbGlkYXRvcigpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0ZXh0U2NoZW1hLmRhdGFGb3JtYXQgPT0gJ21vbmV5JyB8fCB0ZXh0U2NoZW1hLmRhdGFGb3JtYXQgPT0gJ21vbmV5aW50Jykge1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0ZXh0U2NoZW1hLmRhdGFGb3JtYXQgPT0gJ2VtYWlsJykge1xyXG4gICAgICAgICAgICAgICAgdGV4dFNjaGVtYS52YWxpZGF0b3JzLnB1c2gobmV3IEVtYWlsVmFsaWRhdG9yKCkpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICghdGV4dFNjaGVtYS5jb3JyZWN0b3JzKSB0ZXh0U2NoZW1hLmNvcnJlY3RvcnMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHRleHRTY2hlbWEuY29ycmVjdG9ycy5wdXNoKG5ldyBHbWFpbENvcnJlY3RvcigpKTtcclxuICAgICAgICAgICAgICAgIHRleHRTY2hlbWEuY29ycmVjdG9ycy5wdXNoKG5ldyBMb3dlckNvcnJlY3RvcigpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0ZXh0U2NoZW1hLmRhdGFGb3JtYXQgPT0gJ3Bob25lJyB8fCB0ZXh0U2NoZW1hLmRhdGFGb3JtYXQgPT0gJ2ZheCcpIHtcclxuICAgICAgICAgICAgICAgIHRleHRTY2hlbWEudmFsaWRhdG9ycy5wdXNoKG5ldyBQaG9uZU51bWJlclZhbGlkYXRvcigpKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRleHRTY2hlbWEudmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICAgICAgdGV4dFNjaGVtYS52YWxpZGF0b3JzLmZvckVhY2godmFsaWRhdG9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgTnVtYmVyQ29tcGFyZVZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckNvbXBhcmVSZXZlcnQodmFsaWRhdG9yLCB0ZXh0U2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gPFRhYmxlU2NoZW1hPnNjaGVtYTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJDb250cm9sIG9mIGNvbnRyb2wucm93VGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5pdFZhbGlkYXRvckFuZENvcnJlY3RvcihzdWJDb250cm9sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0ZVRpbWVTY2hlbWEgPSAoPERhdGVUaW1lQ29udHJvbFNjaGVtYT5zY2hlbWEpO1xyXG4gICAgICAgICAgICBpZiAoZGF0ZVRpbWVTY2hlbWEudmFsaWRhdG9ycykge1xyXG4gICAgICAgICAgICAgICAgZGF0ZVRpbWVTY2hlbWEudmFsaWRhdG9ycy5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIERhdGVDb21wYXJlVmFsaWRhdG9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yQ29tcGFyZVJldmVydCh2YWxpZGF0b3IsIGRhdGVUaW1lU2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDb250YWluZXJTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IDxDb250YWluZXJTY2hlbWE+c2NoZW1hO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1YkNvbnRyb2wgb2YgY29udHJvbC5jb250cm9scykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0VmFsaWRhdG9yQW5kQ29ycmVjdG9yKHN1YkNvbnRyb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2hlbWEudmFsaWRhdG9ycy5mb3JFYWNoKHZhbGlkYXRvciA9PiB7XHJcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBDaGVja0R1cGxpY2F0ZVZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgdmFsaWRhdG9yLnNldEJhc2VTZXJ2aWNlKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgQ2hlY2tEdXBsaWNhdGVGaWVsZHNWYWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkYXRvci5zZXRCYXNlU2VydmljZSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JDaGVja0R1cGxpY2F0ZShzY2hlbWEsIHZhbGlkYXRvci5nZXREdXBsaWNhdGVGaWVsZHMoKSwgdmFsaWRhdG9yLmdldE1lc3NhZ2UoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodmFsaWRhdG9yIGluc3RhbmNlb2YgUmVxdWlyZWRGaWVsZHNWYWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yUmVxdWlyZWRzKHNjaGVtYSwgdmFsaWRhdG9yLmdldFJlcXVpcmVkRmllbGRzKCksIHZhbGlkYXRvci5nZXRNZXNzYWdlKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHZhbGlkYXRvciBpbnN0YW5jZW9mIFNhbWVWYWx1ZVZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTYW1lVmFsdWVWYWxpZGF0b3JzKHNjaGVtYSwgdmFsaWRhdG9yLmdldFNhbWVGaWVsZHMoKSwgdmFsaWRhdG9yLmdldE1lc3NhZ2UoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVWYWxpZGF0b3JDb21wYXJlUmV2ZXJ0KFxyXG4gICAgICAgIHZhbGlkYXRvcjogRGF0ZUNvbXBhcmVWYWxpZGF0b3IgfCBOdW1iZXJDb21wYXJlVmFsaWRhdG9yLFxyXG4gICAgICAgIHNjaGVtYTogRGF0ZVRpbWVDb250cm9sU2NoZW1hIHwgVGV4dENvbnRyb2xTY2hlbWEgfCBNYXNrQ29udHJvbFNjaGVtYVxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgY29tcGFyZVVuaXF1ZUZpZWxkID0gdmFsaWRhdG9yLmNvbXBhcmVVbmlxdWVGaWVsZDtcclxuICAgICAgICBpZiAoc2NoZW1hLnVuaXF1ZUZpZWxkID09IGNvbXBhcmVVbmlxdWVGaWVsZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1NjaGVtYSBj4bqldSBow6xuaCBi4buLIGzhu5dpJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvckNvbXBhcmUgPSB2YWxpZGF0b3IuZ2V0T3BlcmF0b3JDb21wYXJlKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYUNvbXBhcmUgPSA8Rm9ybUNvbnRyb2xCYXNlPih0aGlzLmZvcm1Db250cm9sc1tjb21wYXJlVW5pcXVlRmllbGRdKTtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYUNvbXBhcmUgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdTY2hlbWEgY+G6pXUgaMOsbmggYuG7iyBs4buXaScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzY2hlbWFDb21wYXJlLnZhbGlkYXRvcnMuc29tZShwID0+IHAgaW5zdGFuY2VvZiBDb21wYXJlVmFsaWRhdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgcC5jb21wYXJlVW5pcXVlRmllbGQgPT0gc2NoZW1hLnVuaXF1ZUZpZWxkKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IgaW5zdGFuY2VvZiBEYXRlQ29tcGFyZVZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFDb21wYXJlLnZhbGlkYXRvcnMucHVzaChuZXcgRGF0ZUNvbXBhcmVWYWxpZGF0b3Iob3BlcmF0b3JDb250cmFzdFtvcGVyYXRvckNvbXBhcmVdLCBzY2hlbWEudW5pcXVlRmllbGQpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYUNvbXBhcmUudmFsaWRhdG9ycy5wdXNoKG5ldyBOdW1iZXJDb21wYXJlVmFsaWRhdG9yKG9wZXJhdG9yQ29udHJhc3Rbb3BlcmF0b3JDb21wYXJlXSwgc2NoZW1hLnVuaXF1ZUZpZWxkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVZhbGlkYXRvckNoZWNrRHVwbGljYXRlKHNjaGVtYTogRm9ybUNvbnRyb2xCYXNlLCBmaWVsZE90aGVyOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkT3RoZXIuaW5kZXhPZihzY2hlbWEudW5pcXVlRmllbGQpID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdTY2hlbWEgY+G6pXUgaMOsbmggYuG7iyBs4buXaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRzID0gWy4uLmZpZWxkT3RoZXIsIHNjaGVtYS5maWVsZF07XHJcbiAgICAgICAgICAgIGZpZWxkT3RoZXIuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFPdGhlciA9IDxGb3JtQ29udHJvbEJhc2U+KHRoaXMuZm9ybUNvbnRyb2xzW2ZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKHAgPT4gcCAhPSBzY2hlbWFPdGhlci5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYU90aGVyLnZhbGlkYXRvcnMuc29tZShwID0+IHAgaW5zdGFuY2VvZiBDaGVja0R1cGxpY2F0ZUZpZWxkc1ZhbGlkYXRvclxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuX2NvbW1vblNlcnZpY2UuaXNTYW1lQXJyYXkodG1wRmllbGRzLCBwLmdldER1cGxpY2F0ZUZpZWxkcygpKSlcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IF92YWxpZGF0b3IgPSBuZXcgQ2hlY2tEdXBsaWNhdGVGaWVsZHNWYWxpZGF0b3IodG1wRmllbGRzLCBtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICBfdmFsaWRhdG9yLnNldEJhc2VTZXJ2aWNlKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hT3RoZXIudmFsaWRhdG9ycy5wdXNoKF92YWxpZGF0b3IpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlVmFsaWRhdG9yUmVxdWlyZWRzKHNjaGVtYTogRm9ybUNvbnRyb2xCYXNlLCBmaWVsZE90aGVyOiBzdHJpbmdbXSwgbWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkT3RoZXIuaW5kZXhPZihzY2hlbWEudW5pcXVlRmllbGQpID4gLTEpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdTY2hlbWEgY+G6pXUgaMOsbmggYuG7iyBs4buXaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgZmllbGRzID0gWy4uLmZpZWxkT3RoZXIsIHNjaGVtYS5maWVsZF07XHJcbiAgICAgICAgICAgIGZpZWxkT3RoZXIuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzY2hlbWFPdGhlciA9IDxGb3JtQ29udHJvbEJhc2U+KHRoaXMuZm9ybUNvbnRyb2xzW2ZpZWxkXSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBGaWVsZHMgPSBmaWVsZHMuZmlsdGVyKHAgPT4gcCAhPSBzY2hlbWFPdGhlci5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNjaGVtYU90aGVyLnZhbGlkYXRvcnMuc29tZShwID0+IHAgaW5zdGFuY2VvZiBSZXF1aXJlZEZpZWxkc1ZhbGlkYXRvclxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuX2NvbW1vblNlcnZpY2UuaXNTYW1lQXJyYXkodG1wRmllbGRzLCBwLmdldFJlcXVpcmVkRmllbGRzKCkpKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgX3ZhbGlkYXRvciA9IG5ldyBSZXF1aXJlZEZpZWxkc1ZhbGlkYXRvcih0bXBGaWVsZHMsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYU90aGVyLnZhbGlkYXRvcnMucHVzaChfdmFsaWRhdG9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNyZWF0ZVNhbWVWYWx1ZVZhbGlkYXRvcnMoc2NoZW1hOiBGb3JtQ29udHJvbEJhc2UsIGZpZWxkT3RoZXI6IHN0cmluZ1tdLCBtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoZmllbGRPdGhlci5pbmRleE9mKHNjaGVtYS51bmlxdWVGaWVsZCkgPiAtMSkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ1NjaGVtYSBj4bqldSBow6xuaCBi4buLIGzhu5dpJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZHMgPSBbLi4uZmllbGRPdGhlciwgc2NoZW1hLmZpZWxkXTtcclxuICAgICAgICAgICAgZmllbGRPdGhlci5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNjaGVtYU90aGVyID0gPEZvcm1Db250cm9sQmFzZT4odGhpcy5mb3JtQ29udHJvbHNbZmllbGRdKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRtcEZpZWxkcyA9IGZpZWxkcy5maWx0ZXIocCA9PiBwICE9IHNjaGVtYU90aGVyLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2NoZW1hT3RoZXIudmFsaWRhdG9ycy5zb21lKHAgPT4gcCBpbnN0YW5jZW9mIFNhbWVWYWx1ZVZhbGlkYXRvclxyXG4gICAgICAgICAgICAgICAgICAgICYmIHRoaXMuX2NvbW1vblNlcnZpY2UuaXNTYW1lQXJyYXkodG1wRmllbGRzLCBwLmdldFNhbWVGaWVsZHMoKSkpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBfdmFsaWRhdG9yID0gbmV3IFNhbWVWYWx1ZVZhbGlkYXRvcih0bXBGaWVsZHMsIG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNjaGVtYU90aGVyLnZhbGlkYXRvcnMucHVzaChfdmFsaWRhdG9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0RGF0YURlZmF1bHQoKSB7XHJcbiAgICAgICAgY29uc3Qgc3RyaW5nRGF0YURlZmF1bHQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5ERUZBVUxUX0RBVEEpO1xyXG4gICAgICAgIGNvbnN0IGdldFNldHRpbmdEYXRhRGVmYXVsdCA9IHRoaXMuX21vZHVsZUNvbmZpZy5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5zZXR0aW5nRGF0YURlZmF1bHQ7XHJcbiAgICAgICAgaWYgKHN0cmluZ0RhdGFEZWZhdWx0ICYmICh0aGlzLl9tb2RlbERhdGEgJiYgIXRoaXMuX21vZGVsRGF0YS5pZCkpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YUNhY2hlID0gSlNPTi5wYXJzZShzdHJpbmdEYXRhRGVmYXVsdCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnNldHRpbmcuc2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSAoPERyb3Bkb3duQ29udHJvbFNjaGVtYT5pdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSAoY29udHJvbC5maWVsZCArIChjb250cm9sLnZhbHVlRmllbGQgPT0gJ2lkJyA/ICcnIDogY29udHJvbC52YWx1ZUZpZWxkKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gZGF0YUNhY2hlW2tleV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsRGF0YVtjb250cm9sLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChnZXRTZXR0aW5nRGF0YURlZmF1bHQpIHsgLy8gbOG6pXkgY+G6pXUgaMOsbmggZmllbGQgbWFwUGluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZE1hcEdldENhY2hlID0gZ2V0U2V0dGluZ0RhdGFEZWZhdWx0W2NvbnRyb2wuZmllbGRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRNYXBHZXRDYWNoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gKGZpZWxkTWFwR2V0Q2FjaGUgKyAoY29udHJvbC52YWx1ZUZpZWxkID09ICdpZCcgPyAnJyA6IGNvbnRyb2wudmFsdWVGaWVsZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkYXRhQ2FjaGVba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsRGF0YVtjb250cm9sLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhQ2FjaGVbKDxGb3JtU2NoZW1hQmFzZT5pdGVtKS5maWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX21vZGVsRGF0YVsoPEZvcm1TY2hlbWFCYXNlPml0ZW0pLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZ1bmN0aW9uLm1vZGlmeURhdGFBZnRlckdldENhY2hlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5mdW5jdGlvbi5tb2RpZnlEYXRhQWZ0ZXJHZXRDYWNoZSh0aGlzLl9tb2RlbERhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5Q2FjaGVkVmFsdWVzKCkge1xyXG4gICAgICAgIHRoaXMuZ2V0Q2FjaGVkVmFsdWVzRnJvbVN0b3JhZ2UoKTtcclxuICAgICAgICB0aGlzLnNldENhY2hlZFZhbHVlVG9Nb2RlbCh0aGlzLl9tb2RlbERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0Q2FjaGVkVmFsdWVUb01vZGVsKG1vZGVsLCB1bmlxdWVLZXlDb250cm9sPywgcGF0aD8pIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIGluIG1vZGVsKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZCAhPSAnX2Vycm9ycycgJiYgZmllbGQgIT0gJ19zdGF0dXMnICYmIGZpZWxkICE9ICdfc291cmNlJykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN1YlVuaXF1ZUtleUNvbnRyb2w7XHJcbiAgICAgICAgICAgICAgICBpZiAodW5pcXVlS2V5Q29udHJvbCAhPSBudWxsICYmIHVuaXF1ZUtleUNvbnRyb2wgIT09ICcnKSBzdWJVbmlxdWVLZXlDb250cm9sID0gdW5pcXVlS2V5Q29udHJvbCArICcuJyArIGZpZWxkO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBzdWJVbmlxdWVLZXlDb250cm9sID0gZmllbGQ7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtQ29udHJvbHNbc3ViVW5pcXVlS2V5Q29udHJvbF07XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbnRyb2wpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IHN1YlBhdGg7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aCAhPSBudWxsICYmIHBhdGggIT09ICcnKSBzdWJQYXRoID0gcGF0aCArICcuJyArIGZpZWxkO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBzdWJQYXRoID0gZmllbGQ7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViTW9kZWwgPSBtb2RlbFtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoc3ViTW9kZWwgaW5zdGFuY2VvZiBBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHN1Yk1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2FjaGVkVmFsdWVUb01vZGVsKGl0ZW0sIHN1YlVuaXF1ZUtleUNvbnRyb2wsIHN1YlBhdGggKyAnWycgKyBpbmRleCArICddJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNMaXRlcmFsT2JqZWN0KHN1Yk1vZGVsKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q2FjaGVkVmFsdWVUb01vZGVsKHN1Yk1vZGVsLCBzdWJVbmlxdWVLZXlDb250cm9sLCBzdWJQYXRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRyb2wuZW5hYmxlQ2FjaGluZyAmJiB0aGlzLmNhY2hlZFZhbHVlcy5oYXNPd25Qcm9wZXJ0eShzdWJQYXRoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsW2ZpZWxkXSA9IHRoaXMuY2FjaGVkVmFsdWVzW3N1YlBhdGhdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FjaGVkVmFsdWVzRnJvbVN0b3JhZ2UoKSB7XHJcbiAgICAgICAgY29uc3QgY2FjaGVkVmFsdWVzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FjaGVkVmFsdWVzJykpO1xyXG4gICAgICAgIGlmIChjYWNoZWRWYWx1ZXMpIHtcclxuICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1JZCkgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5mb3JtSWQ7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FjaGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gY2FjaGVkVmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZWRWYWx1ZXMgPSBlbGVtZW50LnZhbHVlcztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNhdmVDYWNoZVZhbHVlc1RvU3RvcmFnZSgpIHtcclxuICAgICAgICBsZXQgY2FjaGVkVmFsdWVzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FjaGVkVmFsdWVzJykpO1xyXG4gICAgICAgIGlmICghY2FjaGVkVmFsdWVzKSBjYWNoZWRWYWx1ZXMgPSBbXTtcclxuICAgICAgICBsZXQgY2hlY2tFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLmZvcm1JZCkgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5mb3JtSWQ7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWNoZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGNhY2hlZFZhbHVlc1tpXTtcclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlcyA9IHRoaXMuY2FjaGVkVmFsdWVzO1xyXG4gICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjaGVja0V4aXN0KSB7XHJcbiAgICAgICAgICAgIGNhY2hlZFZhbHVlcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBwYXRoTmFtZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlczogdGhpcy5jYWNoZWRWYWx1ZXNcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnY2FjaGVkVmFsdWVzJywgSlNPTi5zdHJpbmdpZnkoY2FjaGVkVmFsdWVzKSk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJpZ2dlckNoYW5nZShmaWVsZFBhdGgpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50Tm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgoZmllbGRQYXRoKTtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gY3VycmVudE5vZGUuY29udHJvbDtcclxuICAgICAgICBpZiAoY29udHJvbCAmJiBjdXJyZW50Tm9kZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UoY29udHJvbCwgbnVsbCwgJ3RyaWdnZXInLCBjdXJyZW50Tm9kZS5wYXJlbnRNb2RlbCwgY3VycmVudE5vZGUucGFyZW50TW9kZWxQYXRoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvRm9jdXMgJiYgIXRoaXMucm9vdENvbnRleHQuZGF0YS5mbGFncy5oYXNGb2N1c2luZ0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm9vdENvbnRleHQuZGF0YS5mbGFncy5oYXNGb2N1c2luZ0NvbnRyb2wgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0Q29udHJvbCgpO1xyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb290Q29udGV4dC5kYXRhLmZsYWdzLmhhc0ZvY3VzaW5nQ29udHJvbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSwgODAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldElzTG9hZGVkRGF0YUVkaXQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmxvYWRlZERhdGFFZGl0T2xkID0gdGhpcy5sb2FkZWREYXRhRWRpdDtcclxuICAgICAgICB0aGlzLmxvYWRlZERhdGFFZGl0ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbnRyb2xUeXBlKGNvbnRyb2w6IGFueSkge1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGl0bGVTY2hlbWEpIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGFiZWxTY2hlbWEpIHJldHVybiAnbGFiZWwnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3BhbkNvbnRyb2xTY2hlbWEpIHJldHVybiAnc3BhbkNvbnRyb2wnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTWFza0NvbnRyb2xTY2hlbWEpIHJldHVybiAnbWFzayc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEpIHJldHVybiAnbnVtYmVycmFuZ2UnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGV4dENvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dENvbnRyb2wgPSA8VGV4dENvbnRyb2xTY2hlbWE+Y29udHJvbDtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGV4dENvbnRyb2wuZGF0YUZvcm1hdCA9PT0gJ21vbmV5J1xyXG4gICAgICAgICAgICAgICAgfHwgdGV4dENvbnRyb2wuZGF0YUZvcm1hdCA9PT0gJ21vbmV5aW50J1xyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnbW9uZXknO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHRleHRDb250cm9sLmRhdGFGb3JtYXQgPT09ICdwaG9uZSdcclxuICAgICAgICAgICAgICAgIHx8IHRleHRDb250cm9sLmRhdGFGb3JtYXQgPT09ICdmYXgnXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdwaG9uZU9yZmF4JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gJ3RleHQnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRlbXBsYXRlQ29udHJvbFNjaGVtYSkgcmV0dXJuICd0ZW1wbGF0ZSc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEYXRlVGltZUNvbnRyb2xTY2hlbWEpIHJldHVybiAnZGF0ZXRpbWUnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEpIHJldHVybiAnZGF0ZXRpbWVyYW5nZSc7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBBZGRyZXNzQ29udHJvbFNjaGVtYSkgcmV0dXJuICdhZGRyZXNzJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkgcmV0dXJuICdkcm9wZG93bic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBFZGl0b3JDb250cm9sU2NoZW1hKSByZXR1cm4gJ2VkaXRvcic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBUZXh0QXJlYUNvbnRyb2xTY2hlbWEpIHJldHVybiAndGV4dGFyZWEnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgV3JhcFBpY2tlckNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdjb21tb24tcGlja2VyJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUGjhuqNpIMSR4buDIGTDsm5nIGTGsOG7m2kg4bufIGLDqm4gdHLDqm4gVXNlclBpY2tlckNvbnRyb2xTY2hlbWEgdsOsIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEgOiBVc2VyUGlja2VyQ29udHJvbFNjaGVtYVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSkgcmV0dXJuICdhdXRvY29tcGxldGUtcGlja2VyJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVzZXJQaWNrZXJDb250cm9sU2NoZW1hKSByZXR1cm4gJ3VzZXItcGlja2VyJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEVudGl0eVBpY2tlckNvbnRyb2xTY2hlbWEpIHJldHVybiAnZW50aXR5LXBpY2tlcic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBPcmdhbml6YXRpb25QaWNrZXJDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnb3JnYW5pemF0aW9uLXBpY2tlcic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29DYXVUb0NodWNQaWNrZXJDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnY29jYXV0b2NodWMtcGlja2VyJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb0NhdVRvQ2h1Y0NvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdjb2NhdXRvY2h1Yyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQXV0b0NvbXBsZXRlQ29udHJvbFNjaGVtYSkgcmV0dXJuICdhdXRvY29tcGxldGUnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgU3dpdGNoQ29udHJvbFNjaGVtYSkgcmV0dXJuICdzd2l0Y2gnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ2hlY2tib3hDb250cm9sU2NoZW1hKSByZXR1cm4gJ2NoZWNrYm94JztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWEpIHJldHVybiAnY2hlY2tib3hsaXN0JztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFJhZGlvQnV0dG9uTGlzdENvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgcmV0dXJuICdyYWRpb2J1dHRvbmxpc3QnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLm1vZGUgPT0gRmlsZVVwbG9hZE1vZGUudXNpbmdGaWxlSW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmaWxlVXBsb2FkJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnc2VydmljZUZpbGVVcGxvYWQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKSByZXR1cm4gJ2ZpbGVNYW5hZ2VyJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbG9yUGlja2VyQ29udHJvbFNjaGVtYSkgcmV0dXJuICdjb2xvclBpY2tlcic7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBDb2xvckNvbnRyb2xTY2hlbWEpIHJldHVybiAnY29sb3JDb250cm9sJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSByZXR1cm4gJ3RhYmxlJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbnRhaW5lclNjaGVtYSkgcmV0dXJuICdjb250YWluZXInO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQnV0dG9uQ29udHJvbFNjaGVtYSkgcmV0dXJuICdidXR0b24nO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVmFuQmFuUGlja2VyQ29udHJvbFNjaGVtYSkgcmV0dXJuICd2YW5iYW4nO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29uZ1ZpZWNQaWNrZXJDb250cm9sU2NoZW1hKSByZXR1cm4gJ2Nvbmd2aWVjJztcclxuICAgICAgICByZXR1cm4gJ2N1c3RvbSc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFZpZXdNb2RlRGF0YVR5cGUoY29udHJvbCkge1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGl0bGVTY2hlbWEpIHJldHVybiAndGl0bGUnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgTGFiZWxTY2hlbWEpIHJldHVybiAnbGFiZWwnO1xyXG5cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIE1hc2tDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnbWFzayc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIERhdGVUaW1lQ29udHJvbFNjaGVtYSkge1xyXG4gICAgICAgICAgICBjb25zdCBkYXRlQ29udHJvbCA9IDxEYXRlVGltZUNvbnRyb2xTY2hlbWE+Y29udHJvbDtcclxuICAgICAgICAgICAgaWYgKGRhdGVDb250cm9sLnNob3dUaW1lKSByZXR1cm4gJ2RhdGV0aW1lJztcclxuICAgICAgICAgICAgcmV0dXJuICdkYXRlJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBFZGl0b3JDb250cm9sU2NoZW1hKSByZXR1cm4gJ2h0bWwnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVXNlclBpY2tlckNvbnRyb2xTY2hlbWEpIHJldHVybiAndXNlcic7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBjb250cm9sIGluc3RhbmNlb2YgU3dpdGNoQ29udHJvbFNjaGVtYVxyXG4gICAgICAgICAgICB8fCBjb250cm9sIGluc3RhbmNlb2YgQ2hlY2tib3hDb250cm9sU2NoZW1hXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnYm9vbGVhbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgY29udHJvbCBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYVxyXG4gICAgICAgICAgICB8fCBjb250cm9sIGluc3RhbmNlb2YgQ2hlY2tCb3hMaXN0Q29udHJvbFNjaGVtYVxyXG4gICAgICAgICAgICB8fCBjb250cm9sIGluc3RhbmNlb2YgUmFkaW9CdXR0b25MaXN0Q29udHJvbFNjaGVtYVxyXG4gICAgICAgICAgICB8fCBjb250cm9sIGluc3RhbmNlb2YgT3JnYW5pemF0aW9uUGlja2VyQ29udHJvbFNjaGVtYVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gJ2hhc0RhdGFTb3VyY2UnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLm1vZGUgPT0gRmlsZVVwbG9hZE1vZGUudXNpbmdGaWxlSW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICdmaWxlVXBsb2FkJztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnZmlsZVNlcnZpY2VVcGxvYWQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKSByZXR1cm4gJ2ZpbGVNYW5hZ2VyJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hKSByZXR1cm4gJ2FkZHJlc3MnO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgY29udHJvbCBpbnN0YW5jZW9mIFRleHRDb250cm9sU2NoZW1hXHJcbiAgICAgICAgICAgICYmIChjb250cm9sLmRhdGFGb3JtYXQgPT09ICdtb25leSdcclxuICAgICAgICAgICAgICAgIHx8IGNvbnRyb2wuZGF0YUZvcm1hdCA9PT0gJ21vbmV5aW50JylcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuICdtb25leSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29sb3JQaWNrZXJDb250cm9sU2NoZW1hKSByZXR1cm4gJ2NvbG9yUGlja2VyJztcclxuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIENvbG9yQ29udHJvbFNjaGVtYSkgcmV0dXJuICdjb2xvckNvbnRyb2wnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHJldHVybiAndGFibGUnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgS2V5VmFsdWVDb250cm9sU2NoZW1hKSByZXR1cm4gJ2FwcC1rZXktdmFsdWUnO1xyXG4gICAgICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgQ29udGFpbmVyU2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnY29udGFpbmVyJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiAnc3RyaW5nJztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB2YWxpZGF0ZUZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5faW5WYWxpZEZvcm0gPSBmYWxzZTtcclxuICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlTW9kZWwodGhpcy5fcm9vdE5vZGUpO1xyXG4gICAgICAgIGlmICh0aGlzLl9pblZhbGlkRm9ybSkge1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNUb0ZpcnN0RXJyb3JDb250cm9sKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZU1vZGVsKGN1cnJlbnROb2RlOiBDb250cm9sVHJlZU5vZGUpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBjdXJyZW50Tm9kZS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghY2hpbGROb2RlLmNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUuY2hpbGROb2RlcyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGROb2RlLmNvbnRyb2xbJ19oaWRkZW4nXSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWF3YWl0IHRoaXMudmFsaWRhdGUoY2hpbGROb2RlLCB0cnVlKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faW5WYWxpZEZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnZhbGlkYXRlTW9kZWwoY2hpbGROb2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVGb3JtQ29udHJvbChmaWVsZFBhdGgpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBjb250cm9sTm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgoZmllbGRQYXRoKTtcclxuICAgICAgICBpZiAoY29udHJvbE5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKCFhd2FpdCB0aGlzLnZhbGlkYXRlKGNvbnRyb2xOb2RlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhbmRsZUNoYW5nZURyb3Bkb3duKGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSwgZXZlbnQ/LCBldmVudFR5cGU/LCBwYXJlbnRNb2RlbD8sIHBhcmVudFBhdGg/LCBzb3VyY2VOb2RlPywgYnViYmxlPykge1xyXG4gICAgICAgIGlmIChjb250cm9sLm11bHRpcGxlKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gJ2hpZGUnKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UoY29udHJvbCwgZXZlbnQsICdjaGFuZ2UnLCBwYXJlbnRNb2RlbCwgcGFyZW50UGF0aCwgc291cmNlTm9kZSwgYnViYmxlKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChjb250cm9sLmJpbmRpbmdGaWx0ZXJzICYmIGV2ZW50VHlwZSA9PSAnY2hhbmdlJykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWVsZFZhbHVlQ2hhbmdlKGNvbnRyb2wsIGV2ZW50LCAnY2hhbmdlJywgcGFyZW50TW9kZWwsIHBhcmVudFBhdGgsIHNvdXJjZU5vZGUsIGJ1YmJsZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpZWxkVmFsdWVDaGFuZ2UoY29udHJvbCwgZXZlbnQsIGV2ZW50VHlwZSwgcGFyZW50TW9kZWwsIHBhcmVudFBhdGgsIHNvdXJjZU5vZGUsIGJ1YmJsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogxJDhu4Mgbmd1ecOqbiBow6BtIGThuqFuZyBhcnJvdyBmdW5jdGlvbiB2w6wgY8OzIDEgc+G7kSBmb3JtIGtow6FjIGfhu41pXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBoYW5kbGVGaWVsZFZhbHVlQ2hhbmdlID0gYXN5bmMgKGNvbnRyb2w6IEZvcm1Db250cm9sQmFzZSwgZXZlbnQ/LCBldmVudFR5cGU/LCBwYXJlbnRNb2RlbD8sIHBhcmVudFBhdGg/LCBzb3VyY2VOb2RlPywgYnViYmxlPykgPT4ge1xyXG4gICAgICAgIGxldCBwYXJlbnROb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aChwYXJlbnRQYXRoKTtcclxuICAgICAgICBsZXQgY3VycmVudE5vZGU7XHJcblxyXG4gICAgICAgIC8vIHJvdyBpbiB0YWJsZVxyXG4gICAgICAgIGlmIChjb250cm9sID09IG51bGwpIHtcclxuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBwYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBjb250cm9sID0gY3VycmVudE5vZGUuY29udHJvbDtcclxuICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgcGFyZW50TW9kZWwgPSBwYXJlbnROb2RlLm1vZGVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY3VycmVudE5vZGUgPSBwYXJlbnROb2RlLmdldENoaWxkTm9kZShjb250cm9sLmZpZWxkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHZhbHVlID0gY3VycmVudE5vZGUudmFsdWU7XHJcblxyXG4gICAgICAgIC8vIGF1dG8gY29ycmVjdCB2YWx1ZVxyXG4gICAgICAgIHZhbHVlID0gdGhpcy5jb3JyZWN0VmFsdWUoY3VycmVudE5vZGUpO1xyXG4gICAgICAgIGN1cnJlbnROb2RlLnZhbHVlID0gdmFsdWU7XHJcblxyXG4gICAgICAgIC8vIHZhbGlkYXRlIHZhbHVlXHJcbiAgICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZShjdXJyZW50Tm9kZSk7XHJcblxyXG4gICAgICAgIGlmICghYnViYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZU1vZGVsQ2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0gbmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLFxyXG4gICAgICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsXHJcbiAgICAgICAgICAgIHNvdXJjZU5vZGU6IHNvdXJjZU5vZGUgfHwgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZSxcclxuICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wub25DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQ2hhbmdlZChldmVudERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFidWJibGUpIHtcclxuICAgICAgICAgICAgdGhpcy5maXJlTW9kZWxDaGFuZ2VkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocGFyZW50Tm9kZS5wYXJlbnROb2RlICE9IG51bGwgJiYgcGFyZW50Tm9kZS5wYXJlbnROb2RlICE9IHBhcmVudE5vZGUucm9vdE5vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWVsZFZhbHVlQ2hhbmdlKHBhcmVudE5vZGUuY29udHJvbCwgZXZlbnQsIGV2ZW50VHlwZSwgcGFyZW50Tm9kZS5wYXJlbnROb2RlLm1vZGVsLCBwYXJlbnROb2RlLnBhcmVudE5vZGUubW9kZWxQYXRoLCBzb3VyY2VOb2RlIHx8IGN1cnJlbnROb2RlLCB0cnVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlQ2FjaGluZyAmJiBjb250cm9sLmVuYWJsZUNhY2hpbmcpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNhY2hlQ29udHJvbFZhbHVlKGNvbnRyb2wsIHZhbHVlLCBwYXJlbnRQYXRoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZXZlbnREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogRXZlbnQga2hpIGRyb3Bkb3duIMSRaeG7gXUgY2jhu4luaCB2YWx1ZSB04burIHJhdyB2YWx1ZSBk4bqhbmcgZ3VpZCB8IGludCB8IC4uLiA9PiBvYmplY3Qga2nhu4N1IHt2YWx1ZTogZ3VpZCB8IGludCB8IC4uLiwgLi4uIFsxIHPhu5EgdHLGsOG7nW5nIGtow6FjXX1cclxuICAgICogQHBhcmFtIGNvbnRyb2xcclxuICAgICogQHBhcmFtIHBhcmVudFBhdGhcclxuICAgICovXHJcbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlQWRqdXN0VmFsdWVEcm9wZG93bkV2ZW50KGNvbnRyb2w6IERyb3Bkb3duQ29udHJvbFNjaGVtYSB8IFJhZGlvQnV0dG9uTGlzdENvbnRyb2xTY2hlbWEsIHBhcmVudFBhdGg/KSB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgocGFyZW50UGF0aCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBwYXJlbnROb2RlLmdldENoaWxkTm9kZShjb250cm9sLmZpZWxkKTtcclxuICAgICAgICBjb25zdCBldmVudERhdGEgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ2FkanVzdFZhbHVlJyxcclxuICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wub25BZGp1c3RlZFZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQWRqdXN0ZWRWYWx1ZShldmVudERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlRGF0YVNvdXJjZUxvYWRlZChjb250cm9sOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIHBhcmVudFBhdGgsIGRhdGFGcm9tRHJvcGRvd246IGFueSkge1xyXG4gICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKHBhcmVudFBhdGgpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnROb2RlID0gcGFyZW50Tm9kZS5nZXRDaGlsZE5vZGUoY29udHJvbC5maWVsZCk7XHJcbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0gbmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLFxyXG4gICAgICAgICAgICBldmVudFR5cGU6ICdkYXRhU291cmNlTG9hZGVkJyxcclxuICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXMsXHJcbiAgICAgICAgICAgIGRhdGE6IGRhdGFGcm9tRHJvcGRvd24uZGF0YVNvdXJjZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGV2ZW50RGF0YVsnZWxtJ10gPSBkYXRhRnJvbURyb3Bkb3duLmVsbTtcclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wuY2FsbGJhY2tEYXRhRmluaXNoKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLmNhbGxiYWNrRGF0YUZpbmlzaChldmVudERhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBoYW5kbGVSZWFkeUNvbnRyb2xQaWNrZXIoY29udHJvbDogQXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYSB8IFVzZXJQaWNrZXJDb250cm9sU2NoZW1hIHwgQ29DYXVUb0NodWNQaWNrZXJDb250cm9sU2NoZW1hLCBwYXJlbnRQYXRoPykge1xyXG4gICAgICAgIHRoaXMuaGFuZGxlQ29udHJvbFJlYWR5RXZlbnQoY29udHJvbCwgcGFyZW50UGF0aCk7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgocGFyZW50UGF0aCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudE5vZGUgPSBwYXJlbnROb2RlLmdldENoaWxkTm9kZShjb250cm9sLmZpZWxkKTtcclxuICAgICAgICBjb25zdCBldmVudERhdGEgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ3JlYWR5JyxcclxuICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY29udHJvbC5vblJlYWR5KSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uUmVhZHkoZXZlbnREYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZUNvbnRyb2xSZWFkeUV2ZW50KGNvbnRyb2w6IEZvcm1Db250cm9sQmFzZSwgcGFyZW50UGF0aD8pIHtcclxuICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fcm9vdE5vZGUuZ2V0Tm9kZUJ5UGF0aChwYXJlbnRQYXRoKTtcclxuICAgICAgICBwYXJlbnROb2RlLm1vZGVsLl9zdGF0dXNbY29udHJvbC5maWVsZF0ucmVhZHkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25Db250cm9sUmVhZHkuZW1pdChjb250cm9sLmZpZWxkKTtcclxuICAgICAgICBpZiAodGhpcy5fbW9kZWxEYXRhW0tleUZsYXNoU2hvd10pIHtcclxuICAgICAgICAgICAgaWYgKHBhcmVudFBhdGgpIHsgLy8gxJBv4bqhbiBjb2RlIHRyb25nIGJsb2NrIGlmIG7DoHkgY2jGsGEgY2h14bqpbiwgdOG6oW0gdGjhu51pIGNvZGUgdGjhur8gxJHhur9uIGtoaSBn4bq3cCBjYXNlIG7DoHkgdGjDrCB4ZW0gbOG6oWkgc2F1XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5U3RhdHVzW2Ake3BhcmVudFBhdGh9LiR7Y29udHJvbC5maWVsZH1gXSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5U3RhdHVzW2Ake2NvbnRyb2wuZmllbGR9YF0gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDYW5QcmludCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjaGVja0NhblByaW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9tb2RlbERhdGFbS2V5Rmxhc2hTaG93XSAmJiB0aGlzLmNhblByaW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FpdFJlYWR5QW5kUHJpbnQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgd2FpdFJlYWR5QW5kUHJpbnQoKSB7XHJcbiAgICAgICAgY29uc3QgcmVhZHlBbGwgPSB0aGlzLmNoZWNrUmVhZHlBbGwoKTtcclxuICAgICAgICBpZiAodGhpcy53YWl0UmVhZHlBbmRQcmludFRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMud2FpdFJlYWR5QW5kUHJpbnRUaW1lb3V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlYWR5QWxsKSB7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9tb2RlbERhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICAgICAgdGhpcy5fbWluaW1pemVkRGF0YSA9IHRoaXMuZ2V0TWluaW1pemVEYXRhKHRoaXMuX21vZGVsRGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByaW50UGRmQnlTY2hlbWEodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLCB0aGlzLl9taW5pbWl6ZWREYXRhLCB0aGlzLnNldHRpbmcuc2NoZW1hKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnJywgZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCdU4bqhbyBmaWxlIHRow6BuaCBjw7RuZycpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21pbmltaXplZERhdGEucHJpbnRGaWxlSWQgPSByZXMuZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9taW5pbWl6ZWREYXRhID0gdGhpcy5fY29tbW9uU2VydmljZS5jbG9uZU9iamVjdCh0aGlzLl9taW5pbWl6ZWREYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVXYWl0Qm94KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW52aXJvbm1lbnQgPSB0aGlzLl9tb2R1bGVDb25maWcuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYmFzZVRyaW5oS3koZW52aXJvbm1lbnQsIHRoaXMuc2V0dGluZywgdGhpcy5fbW9kZWxEYXRhLCByZXMuZGF0YSwgdGhpcy5fbm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25BZnRlclRyaW5oS3kuZW1pdCgpO1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMud2FpdFJlYWR5QW5kUHJpbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndhaXRSZWFkeUFuZFByaW50KCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TW9kZWxUYWJsZVNjaGVtYUJ5Q2hpbGRTY2hlbWEoY29udHJvbDogRm9ybUNvbnRyb2xCYXNlKSB7XHJcbiAgICAgICAgY29uc3QgY29udHJvbFRhYmxlID0gdGhpcy5mb3JtQ29udHJvbHNbY29udHJvbFt0aGlzLmZpZWxkUGFyZW50RmllbGRdXTtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWxEYXRhW2NvbnRyb2xUYWJsZS5maWVsZF07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja1JlYWR5QWxsKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLmNvbnRyb2xOZWVkQ2hlY2tSZWFkeSkge1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC5oaWRkZW4gfHwgIXRoaXMuX21vZGVsRGF0YVtjb250cm9sLmZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGFyZW50RmllbGQgPSBjb250cm9sW3RoaXMuZmllbGRQYXJlbnRGaWVsZF07XHJcbiAgICAgICAgICAgIC8vIE7hur91IGzDoCBmaWVsZCB0cm9uZyB0YWJsZSBzY2hlbWFcclxuICAgICAgICAgICAgaWYgKHBhcmVudEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJNb2RlbEN1bmdMZXZlbCA9IHRoaXMuZ2V0TW9kZWxUYWJsZVNjaGVtYUJ5Q2hpbGRTY2hlbWEoY29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyTW9kZWxDdW5nTGV2ZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyck1vZGVsQ3VuZ0xldmVsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZWFkeVN0YXR1c1tgJHtwYXJlbnRGaWVsZH1bJHtpfV0uJHtjb250cm9sLmZpZWxkfWBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMucmVhZHlTdGF0dXNbYCR7Y29udHJvbC5maWVsZH1gXSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZU1vZGVsRnJvbUV4dGVybmFsID0gKCkgPT4ge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29udHJvbCBvZiB0aGlzLnNldHRpbmcuc2NoZW1hKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xNb2RlbCh0aGlzLl9tb2RlbERhdGEsIGNvbnRyb2wpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpcmVNb2RlbENoYW5nZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQaOG6o2kgxJHhu4MgYXJyb3cgZnVuY3Rpb24gdsOsIGPDsyBleHBvcnQgcmEgY2hvIG3hu5l0IHPhu5EgdGVtcGxhdGUgc+G7rSBk4bulbmdcclxuICAgIGZpcmVNb2RlbENoYW5nZWQgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fbWluaW1pemVkRGF0YSA9IHRoaXMuZ2V0TWluaW1pemVEYXRhKHRoaXMuX21vZGVsRGF0YSk7XHJcbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQodGhpcy5fbWluaW1pemVkRGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUJ1dHRvbkNsaWNrKGNvbnRyb2w6IEJ1dHRvbkNvbnRyb2xTY2hlbWEsIGV2ZW50LCBwYXJlbnRQYXRoKSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wub25DbGljaykge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5vbkNsaWNrKG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKHBhcmVudFBhdGgpLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUV2ZW50OiBldmVudCxcclxuICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6ICdjbGljaycsXHJcbiAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb3JyZWN0VmFsdWUoY3VycmVudE5vZGU6IENvbnRyb2xUcmVlTm9kZSkge1xyXG4gICAgICAgIGxldCByZSA9IGN1cnJlbnROb2RlLnZhbHVlO1xyXG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSBjdXJyZW50Tm9kZS5jb250cm9sO1xyXG4gICAgICAgIGlmIChjb250cm9sICYmIGNvbnRyb2wuY29ycmVjdG9ycyAmJiBjb250cm9sLmNvcnJlY3RvcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wuY29ycmVjdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29ycmVjdG9yID0gY29udHJvbC5jb3JyZWN0b3JzW2ldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZXZlbnREYXRhID0gbmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiAnYXV0b0NvcnJlY3QnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmUgPSBjb3JyZWN0b3IuY29ycmVjdChldmVudERhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHRydWUgbMOgIHRo4buPYSBtw6NuLCBmYWxzZSBsw6Aga2jDtG5nIHRo4buPYSBtw6NuICjhu54gY+G6pXAgaGnhu4duIHThuqFpIGNo4bupIGNoxrBhIGtp4buDbSB0cmEgY+G6pXAgY29uKVxyXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZShjdXJyZW50Tm9kZTogQ29udHJvbFRyZWVOb2RlLCBmb3JjZTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XHJcbiAgICAgICAgY29uc3QgY29udHJvbCA9IGN1cnJlbnROb2RlLmNvbnRyb2w7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBEcm9wZG93bkNvbnRyb2xTY2hlbWFcclxuICAgICAgICAgICAgfHwgY29udHJvbCBpbnN0YW5jZW9mIFJhZGlvQnV0dG9uTGlzdENvbnRyb2xTY2hlbWFcclxuICAgICAgICAgICAgfHwgY29udHJvbCBpbnN0YW5jZW9mIEFkZHJlc3NDb250cm9sU2NoZW1hXHJcbiAgICAgICAgICAgIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKCFmb3JjZSAmJiAhcGFyZW50Tm9kZS5tb2RlbC5fc3RhdHVzW2NvbnRyb2wuZmllbGRdLnJlYWR5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gY3VycmVudE5vZGUucGFyZW50Tm9kZS5tb2RlbC5fZXJyb3JzW2N1cnJlbnROb2RlLmZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKCFlcnJvcnMpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBlcnJvcnMuc3BsaWNlKDAsIGVycm9ycy5sZW5ndGgpO1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC52YWxpZGF0b3JzICYmIGNvbnRyb2wudmFsaWRhdG9ycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2wudmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvciA9IGNvbnRyb2wudmFsaWRhdG9yc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBldmVudERhdGEgPSBuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ3ZhbGlkYXRlJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXdhaXQgdmFsaWRhdG9yLnZhbGlkYXRlKGV2ZW50RGF0YSkgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnIgPSB2YWxpZGF0b3IuZ2V0RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMuaW5kZXhPZihlcnIpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJpdmF0ZSBfc2V0RXJyb3IoZmllbGQ6IHN0cmluZywgZXJyb3I6IHN0cmluZykge1xyXG4gICAgLy8gICAgIGNvbnN0IG5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKGZpZWxkKTtcclxuICAgIC8vICAgICBpZiAobm9kZSA9PSBudWxsKSB7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVHLGsOG7nW5nIGThu68gbGnhu4d1IGtow7RuZyB04buTbiB04bqhaScpO1xyXG4gICAgLy8gICAgICAgICByZXR1cm47XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICAgIGNvbnN0IGVycm9ycyA9IG5vZGUucGFyZW50Tm9kZS5tb2RlbC5fZXJyb3JzW25vZGUuZmllbGRdO1xyXG4gICAgLy8gICAgIGVycm9ycy5wdXNoKGVycm9yKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBzZXRFcnJvcihmaWVsZDogc3RyaW5nIHwgc3RyaW5nW10sIGVycm9yOiBzdHJpbmcpIHtcclxuICAgIC8vICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZCkpXHJcbiAgICAvLyAgICAgICAgIGZpZWxkLmZvckVhY2goaXRlbSA9PiB0aGlzLl9zZXRFcnJvcihpdGVtLCBlcnJvcikpO1xyXG4gICAgLy8gICAgIGVsc2VcclxuICAgIC8vICAgICAgICAgdGhpcy5fc2V0RXJyb3IoZmllbGQsIGVycm9yKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBwcml2YXRlIGNhY2hlQ29udHJvbFZhbHVlKGNvbnRyb2wsIHZhbHVlLCBwYXJlbnRQYXRoKSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wgJiYgY29udHJvbC5lbmFibGVDYWNoaW5nKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVmFsdWVzW3BhcmVudFBhdGggKyAnLicgKyBjb250cm9sLmZpZWxkXSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21wb25lbnRCeVR5cGUodGVtcGxhdGVOYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGVtcGxhdGVzW3RlbXBsYXRlTmFtZV0pIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZXNbdGVtcGxhdGVOYW1lXSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZmluZFRlbXBsYXRlRnJvbUxpc3QodGhpcy5jaGlsZHJlbiwgdGVtcGxhdGVOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzW3RlbXBsYXRlTmFtZV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEl0ZW1JbkFycmF5QnlWYWx1ZShhcnJheSwgdiwgY29udHJvbCkge1xyXG4gICAgICAgIGlmICh2ID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gY29udHJvbC5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgaWYgKGZ1bmNHZXRMYWJlbCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbVtjb250cm9sLmRpc3BsYXlGaWVsZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcnJheSBpbnN0YW5jZW9mIEFycmF5ICYmIGFycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IHZBcnIgPSB2O1xyXG4gICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodikpIHtcclxuICAgICAgICAgICAgICAgIHZBcnIgPSB2LnRvU3RyaW5nKCkuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZBcnIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gYXJyYXkuZmluZCh4ID0+IHhbY29udHJvbC52YWx1ZUZpZWxkXSA9PSB2KTtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmNHZXRMYWJlbChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh2QXJyLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheS5maWx0ZXIocCA9PiB2QXJyLnNvbWUocSA9PiBxID09IHBbY29udHJvbC52YWx1ZUZpZWxkXSkpXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSlcclxuICAgICAgICAgICAgICAgICAgICAuam9pbignLCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SXRlbUluQXJyYXlCeVRleHRWYWx1ZShhcnJheSwgdikge1xyXG4gICAgICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgdiA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBhcnJheSBpbnN0YW5jZW9mIEFycmF5XHJcbiAgICAgICAgICAgICYmIGFycmF5Lmxlbmd0aCA+IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHYuam9pbignOyAnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBZGRyZXNzRGlzcGxheVRleHQoc2VsZWN0ZWRWYWx1ZSkgeyB9XHJcblxyXG4gICAgcHVibGljIGdldExhYmVsQ2xhc3MoY29udHJvbCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSBgbGFiZWwtY29udHJvbGA7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuaW5kZXhMYWJlbCkge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gJyBoYXZlSW5kZXgnO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2Nyb2xsVG9WaWV3KGVsZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9kZXZpY2VEZXRlY3RvclNlcnZpY2UuaXNNb2JpbGUoKSkge1xyXG4gICAgICAgICAgICBpZiAoZWxlKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgaDE6IGFueSA9IGVsZS5jbG9zZXN0KCdkaXZbaWQkPVxcJy1ob2xkZXJcXCddJyk7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoaDEgJiYgaDEucHJldmlvdXNTaWJsaW5nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaDEgPSBoMS5wcmV2aW91c1NpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGgxLnRhZ05hbWUgPT09ICdESVYnKSBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaDEgJiYgaDEuc2Nyb2xsSW50b1ZpZXcpIGgxLnNjcm9sbEludG9WaWV3KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiAtIFNldCBGb2N1cyBjb250cm9sXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xyXG4gICAgICovXHJcblxyXG4gICAgcHJpdmF0ZSBmb2N1c0ZpcnN0Q29udHJvbCgpIHtcclxuICAgICAgICBjb25zdCBmb3JtRWxlbWVudCA9IHRoaXMuZm9ybUVsZW1lbnQubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBkaXZzID0gZm9ybUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGl2LmNydWQtZm9ybS1jb250cm9sJyk7XHJcbiAgICAgICAgaWYgKGRpdnMpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBkaXYgb2YgZGl2cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdERpdkhvbGRlciA9IGRpdjtcclxuICAgICAgICAgICAgICAgIGxldCBmaXJzdENvbnRyb2wgPSB0aGlzLmZpcnN0RGl2SG9sZGVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Om5vdChbdHlwZT1maWxlXSk6bm90KFt0eXBlPWhpZGRlbl0pJyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1ZpZXcoZmlyc3RDb250cm9sKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sID0gdGhpcy5maXJzdERpdkhvbGRlci5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sICYmIGZpcnN0Q29udHJvbC5pZC5pbmRleE9mKCd0aW55LWFuZ3VsYXInKSAhPSAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q29udHJvbC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q29udHJvbCA9IHRoaXMuZmlyc3REaXZIb2xkZXIucXVlcnlTZWxlY3RvcignaWZyYW1lJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShmaXJzdENvbnRyb2wpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnRzKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnYm9keScpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkZXByZWNhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sLnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGlueW1jZS1mb2N1cydcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0Q29udHJvbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZm9jdXNUb0ZpcnN0RXJyb3JDb250cm9sKCkge1xyXG4gICAgICAgIGNvbnN0IGZvcm1FbGVtZW50ID0gdGhpcy5mb3JtRWxlbWVudC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gYGRpdi5lcnJvcmA7XHJcbiAgICAgICAgY29uc3QgZGl2SG9sZGVyID0gZm9ybUVsZW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XHJcbiAgICAgICAgaWYgKGRpdkhvbGRlcikge1xyXG4gICAgICAgICAgICBsZXQgZmlyc3RDb250cm9sID0gZGl2SG9sZGVyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XHJcbiAgICAgICAgICAgIGlmIChmaXJzdENvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIGZpcnN0Q29udHJvbC5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb1ZpZXcoZmlyc3RDb250cm9sKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZpcnN0Q29udHJvbCA9IGRpdkhvbGRlci5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Q29udHJvbCAmJiBmaXJzdENvbnRyb2wuaWQuaW5kZXhPZigndGlueS1hbmd1bGFyJykgIT0gMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDb250cm9sLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Q29udHJvbCA9IGRpdkhvbGRlci5xdWVyeVNlbGVjdG9yKCdpZnJhbWUnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGpRdWVyeShmaXJzdENvbnRyb2wpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29udGVudHMoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoJ2JvZHknKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkZXByZWNhdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q29udHJvbC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGlueW1jZS1mb2N1cydcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByZXZlbnRCbHVyKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJhcEZvY3VzKSB7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSBldmVudC50YXJnZXQucGFyZW50Tm9kZTtcclxuICAgICAgICAgICAgd2hpbGUgKHRhcmdldCB8fCB0YXJnZXQudGFnTmFtZSA9PSAnRk9STScpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQuaWQuZW5kc1dpdGgoJy1ob2xkZXInKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQgPT0gdGhpcy5maXJzdERpdkhvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDb250cm9sID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDb250cm9sID09IGV2ZW50LnRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGlzVmlzaWJsZShlbGVtKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW0pO1xyXG4gICAgICAgIGlmIChzdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoc3R5bGUudmlzaWJpbGl0eSAhPT0gJ3Zpc2libGUnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKCtzdHlsZS5vcGFjaXR5IDwgMC4xKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBlbGVtLm9mZnNldFdpZHRoXHJcbiAgICAgICAgICAgICsgZWxlbS5vZmZzZXRIZWlnaHRcclxuICAgICAgICAgICAgKyBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodFxyXG4gICAgICAgICAgICArIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGhcclxuICAgICAgICAgICAgPT09IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBlbGVtQ2VudGVyID0ge1xyXG4gICAgICAgICAgICB4OiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgKyBlbGVtLm9mZnNldFdpZHRoIC8gMixcclxuICAgICAgICAgICAgeTogZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBlbGVtLm9mZnNldEhlaWdodCAvIDJcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBsZXQgcG9pbnRDb250YWluZXIgPSA8YW55PihcclxuICAgICAgICAgICAgZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlbGVtQ2VudGVyLngsIGVsZW1DZW50ZXIueSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwb2ludENvbnRhaW5lcikge1xyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnRDb250YWluZXIgPT09IGVsZW0pIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1jb25kaXRpb25hbC1hc3NpZ25tZW50XHJcbiAgICAgICAgICAgIH0gd2hpbGUgKChwb2ludENvbnRhaW5lciA9IHBvaW50Q29udGFpbmVyLnBhcmVudE5vZGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVSb3coaW5kZXgsIGNvbnRyb2w6IFRhYmxlU2NoZW1hLCB0YWJsZVBhdGgpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKGFzeW5jIHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB0YWJsZU5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKHRhYmxlUGF0aCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvRGVsZXRlUm93Tm9kZSA9IHRhYmxlTm9kZS5jaGlsZE5vZGVzW2luZGV4XTtcclxuXHJcbiAgICAgICAgICAgIGxldCB0b0RlbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLm9uRGVsZXRpbmcpIHtcclxuICAgICAgICAgICAgICAgIHRvRGVsZXRlID0gY29udHJvbC5vbkRlbGV0aW5nKG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0YWJsZU5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlTm9kZTogdG9EZWxldGVSb3dOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ2RlbGV0aW5nJyxcclxuICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0b0RlbGV0ZSAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRhYmxlTm9kZS5tb2RlbC5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVOb2RlLnJlaW5pdENoaWxkTm9kZXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVNb2RlbENoYW5nZWQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vbkNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQ2hhbmdlZChuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0YWJsZU5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlOiB0b0RlbGV0ZVJvd05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6ICd0YWJsZUNoYW5nZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vbkRlbGV0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uRGVsZXRlZChuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlOiB0YWJsZU5vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlOiB0b0RlbGV0ZVJvd05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6ICdkZWxldGVkJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgYWRkTmV3Um93KGNvbnRyb2w6IFRhYmxlU2NoZW1hLCB0YWJsZVBhdGgsIGV2ZW50VHlwZT8pIHtcclxuICAgICAgICBpZiAoY29udHJvbC5zaG93RWRpdCkge1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRm9ybVRpdGxlID0gYFRow6ptIG3hu5tpICR7Y29udHJvbC5sYWJlbH1gO1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRm9ybVNjaGVtYSA9IGNvbnRyb2wucm93VGVtcGxhdGU7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVGb3JtU2hvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudGFibGVGb3JtQ3VycmVudFJvdyA9IC0xO1xyXG4gICAgICAgICAgICB0aGlzLnRhYmxlRm9ybUN1cnJlbnRJbmZvID0ge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbCxcclxuICAgICAgICAgICAgICAgIHRhYmxlUGF0aCxcclxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgodGFibGVQYXRoKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRhYmxlTm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtcclxuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGFibGVQYXRoICsgJ1snICsgaW5kZXggKyAnXSc7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHt9O1xyXG4gICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdENvbnRyb2xEZWZhdWx0VmFsdWUoZGF0YSwgc3ViQ29udHJvbCwgcGFyZW50UGF0aCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgdG9BZGQgPSB0cnVlO1xyXG4gICAgICAgIGlmIChjb250cm9sLm9uQWRkaW5nKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0b0FkZCA9IGNvbnRyb2wub25BZGRpbmcobmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnRUeXBlIHx8ICdhZGRpbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgdG9BZGQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRvQWRkICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICB0YWJsZU5vZGUubW9kZWwucHVzaChkYXRhKTtcclxuICAgICAgICAgICAgdGFibGVOb2RlLnJlaW5pdENoaWxkTm9kZXMoKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgIT0gJ2luaXQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpcmVNb2RlbENoYW5nZWQoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgbmV3Um93Tm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgocGFyZW50UGF0aCk7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLm9uQ2hhbmdlZCkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uQ2hhbmdlZChuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTm9kZTogbmV3Um93Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBldmVudFR5cGUgfHwgJ3RhYmxlQ2hhbmdlZCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLm9uQWRkZWQpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbC5vbkFkZGVkKG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGFibGVOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlOiBuZXdSb3dOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IGV2ZW50VHlwZSB8fCAnYWRkZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcnVkRm9ybTogdGhpc1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIHsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRNdWx0aVJvdyhjb250cm9sLCBsZW5ndGgsIHRhYmxlUGF0aCwgZXZlbnRUeXBlPykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdGhpcy5hZGROZXdSb3coY29udHJvbCwgdGFibGVQYXRoLCBldmVudFR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBoYW5kbGVTYXZlZFRhYmxlUm93KGRhdGEpIHtcclxuICAgICAgICB0aGlzLnRhYmxlRm9ybVNob3cgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy50YWJsZUZvcm1DdXJyZW50SW5mby5jb250cm9sO1xyXG4gICAgICAgIGNvbnN0IHRhYmxlUGF0aCA9IHRoaXMudGFibGVGb3JtQ3VycmVudEluZm8udGFibGVQYXRoO1xyXG4gICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IHRoaXMudGFibGVGb3JtQ3VycmVudEluZm8uZXZlbnRUeXBlO1xyXG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgodGFibGVQYXRoKTtcclxuICAgICAgICBpZiAodGhpcy50YWJsZUZvcm1DdXJyZW50Um93ID4gLTEpIHtcclxuICAgICAgICAgICAgdGFibGVOb2RlLm1vZGVsW3RoaXMudGFibGVGb3JtQ3VycmVudFJvd10gPSB7IC4uLnRhYmxlTm9kZS5tb2RlbFt0aGlzLnRhYmxlRm9ybUN1cnJlbnRSb3ddLCAuLi5kYXRhIH07XHJcbiAgICAgICAgICAgIHRoaXMuZmlyZU1vZGVsQ2hhbmdlZCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGFibGVOb2RlLmNoaWxkTm9kZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGFibGVQYXRoICsgJ1snICsgaW5kZXggKyAnXSc7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViQ29udHJvbCBvZiBjb250cm9sLnJvd1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRDb250cm9sTW9kZWwoZGF0YSwgc3ViQ29udHJvbCwgcGFyZW50UGF0aCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCB0b0FkZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLm9uQWRkaW5nKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvQWRkID0gY29udHJvbC5vbkFkZGluZyhuZXcgRXZlbnREYXRhKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBldmVudFR5cGUgfHwgJ2FkZGluZycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvQWRkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0b0FkZCAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRhYmxlTm9kZS5tb2RlbC5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGFibGVOb2RlLnJlaW5pdENoaWxkTm9kZXMoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlICE9ICdpbml0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZU1vZGVsQ2hhbmdlZCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1Jvd05vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKHBhcmVudFBhdGgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wub25DaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbC5vbkNoYW5nZWQobmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Tm9kZTogdGFibGVOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlTm9kZTogbmV3Um93Tm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogZXZlbnRUeXBlIHx8ICd0YWJsZUNoYW5nZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29udHJvbC5vbkFkZGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29udHJvbC5vbkFkZGVkKG5ldyBFdmVudERhdGEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZU5vZGU6IG5ld1Jvd05vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IGV2ZW50VHlwZSB8fCAnYWRkZWQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCB7IH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZVJvdyhpbmRleCwgY29udHJvbDogVGFibGVTY2hlbWEsIHRhYmxlUGF0aCkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgodGFibGVQYXRoKTtcclxuICAgICAgICBjb25zdCBjdXJlbnRSb3dOb2RlID0gdGFibGVOb2RlLmNoaWxkTm9kZXNbaW5kZXhdO1xyXG4gICAgICAgIGlmIChjb250cm9sLm9uU2F2ZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5vblNhdmUobmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlOiBjdXJlbnRSb3dOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ3NhdmUnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGVkaXRSb3coaW5kZXgsIGNvbnRyb2w6IFRhYmxlU2NoZW1hLCB0YWJsZVBhdGgpIHtcclxuICAgICAgICB0aGlzLnRhYmxlRm9ybVRpdGxlID0gYFPhu61hICR7Y29udHJvbC5sYWJlbH1gO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtU2NoZW1hID0gY29udHJvbC5yb3dUZW1wbGF0ZTtcclxuICAgICAgICB0aGlzLnRhYmxlRm9ybUN1cnJlbnRSb3cgPSBpbmRleDtcclxuICAgICAgICBjb25zdCB0YWJsZU5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKHRhYmxlUGF0aCk7XHJcbiAgICAgICAgY29uc3QgdG9EZWxldGVSb3dOb2RlID0gdGFibGVOb2RlLmNoaWxkTm9kZXNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudGFibGVGb3JtRGF0YSA9IHRvRGVsZXRlUm93Tm9kZS52YWx1ZTtcclxuICAgICAgICB0aGlzLnRhYmxlRm9ybUN1cnJlbnRJbmZvID0ge1xyXG4gICAgICAgICAgICBjb250cm9sLFxyXG4gICAgICAgICAgICB0YWJsZVBhdGgsXHJcbiAgICAgICAgICAgIGluZGV4XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnRhYmxlRm9ybVNob3cgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBoYW5kbGVSb3dPcmRlcmVkKGNvbnRyb2w6IFRhYmxlU2NoZW1hLCBldnQsIGV2ZW50VHlwZT8sIHBhcmVudE1vZGVsPywgcGFyZW50UGF0aD8sIHNvdXJjZU5vZGU/LCBidWJibGU/KSB7XHJcbiAgICAgICAgbGV0IHBhcmVudE5vZGUgPSB0aGlzLl9yb290Tm9kZS5nZXROb2RlQnlQYXRoKHBhcmVudFBhdGgpO1xyXG4gICAgICAgIGxldCBjdXJyZW50Tm9kZTtcclxuXHJcbiAgICAgICAgLy8gcm93IGluIHRhYmxlXHJcbiAgICAgICAgaWYgKGNvbnRyb2wgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGNvbnRyb2wgPSBjdXJyZW50Tm9kZS5jb250cm9sO1xyXG4gICAgICAgICAgICBwYXJlbnROb2RlID0gcGFyZW50Tm9kZS5wYXJlbnROb2RlO1xyXG4gICAgICAgICAgICBwYXJlbnRNb2RlbCA9IHBhcmVudE5vZGUubW9kZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IHBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlKGNvbnRyb2wuZmllbGQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdmFsdWUgPSBjdXJyZW50Tm9kZS52YWx1ZTtcclxuXHJcbiAgICAgICAgLy8gYXV0byBjb3JyZWN0IHZhbHVlXHJcbiAgICAgICAgdmFsdWUgPSB0aGlzLmNvcnJlY3RWYWx1ZShjdXJyZW50Tm9kZSk7XHJcbiAgICAgICAgY3VycmVudE5vZGUudmFsdWUgPSB2YWx1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgZXZlbnREYXRhID0gbmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgIGN1cnJlbnROb2RlLFxyXG4gICAgICAgICAgICBzb3VyY2VFdmVudDogZXZlbnQsXHJcbiAgICAgICAgICAgIHNvdXJjZU5vZGU6IHNvdXJjZU5vZGUgfHwgY3VycmVudE5vZGUsXHJcbiAgICAgICAgICAgIGV2ZW50VHlwZSxcclxuICAgICAgICAgICAgY3J1ZEZvcm06IHRoaXNcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY29udHJvbC5vblJlb3JkZXJlZCkge1xyXG4gICAgICAgICAgICBhd2FpdCBjb250cm9sLm9uUmVvcmRlcmVkKGV2ZW50RGF0YSk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWJ1YmJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpcmVNb2RlbENoYW5nZWQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZS5lbWl0KGV2ZW50RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0NvbnRleHRNZW51KGV2dCwgcm93RGF0YSwgY29udHJvbDogVGFibGVTY2hlbWEpIHtcclxuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzID0gYXdhaXQgY29udHJvbC5yb3dCdXR0b25zKHJvd0RhdGEpO1xyXG4gICAgICAgIGlmICghdGhpcy5idXR0b25Db250ZXh0cyB8fCB0aGlzLmJ1dHRvbkNvbnRleHRzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2hvd0NvbnRleHRNZW51KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2hvd0NvbnRleHRNZW51KGV2dCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dE1lbnUuc2hvdyhldnQpO1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWVzc2FnZVJvdyhpbmRleCwgY29udHJvbDogVGFibGVTY2hlbWEsIHRhYmxlUGF0aCkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IHRoaXMuX3Jvb3ROb2RlLmdldE5vZGVCeVBhdGgodGFibGVQYXRoKTtcclxuICAgICAgICBjb25zdCBjdXJlbnRSb3dOb2RlID0gdGFibGVOb2RlLmNoaWxkTm9kZXNbaW5kZXhdO1xyXG4gICAgICAgIGlmIChjb250cm9sLm9uTWVzc2FnZSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5vbk1lc3NhZ2UobmV3IEV2ZW50RGF0YSh7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudE5vZGU6IHRhYmxlTm9kZSxcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VOb2RlOiBjdXJlbnRSb3dOb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogJ21lc3NhZ2UnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNydWRGb3JtOiB0aGlzXHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggeyB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUYWJsZUZ1bmN0aW9uQ29sdW1uV2lkdGgoY29udHJvbDogVGFibGVTY2hlbWEpIHtcclxuICAgICAgICBsZXQgbmUgPSAyMDtcclxuICAgICAgICBpZiAoY29udHJvbC5zaG93RGVsZXRlKSBuZSArPSAzMDtcclxuICAgICAgICBpZiAoY29udHJvbC5zaG93RWRpdCkgbmUgKz0gMzA7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuc2hvd1NhdmUpIG5lICs9IDMwO1xyXG4gICAgICAgIGlmIChjb250cm9sLnJvd0J1dHRvbnMpIG5lICs9IDMwO1xyXG4gICAgICAgIHJldHVybiBuZSArICdweCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE1hc2tCeVR5cGUobWFza1R5cGUpIHtcclxuICAgICAgICBpZiAobWFza1R5cGUgPT0gJ2RlY2ltYWwnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnZG90X3NlcGFyYXRvci41JztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tEaXNhYmxlZChkYXRhOiBhbnksIGNvbnRyb2w6IEZvcm1Db250cm9sQmFzZSkge1xyXG4gICAgICAgIHJldHVybiBkYXRhLl9zdGF0dXNbY29udHJvbC5maWVsZF0uZGlzYWJsZWQgPT09IHRydWUgfHwgKGRhdGEuX3N0YXR1c1tjb250cm9sLmZpZWxkXS5kaXNhYmxlZCA9PT0gdW5kZWZpbmVkICYmIGNvbnRyb2wuZGlzYWJsZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrSGlkZGVuKGNvbnRyb2w6IEZvcm1Db250cm9sQmFzZSwgcGFyZW50TW9kZWw6IGFueSwgcGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGN1cnJlbnROb2RlID0gbnVsbDtcclxuICAgICAgICBpZiAocGF0aCAmJiBjb250cm9sWydub2RlcyddKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY29udHJvbFsnbm9kZXMnXVtwYXRoXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGN1cnJlbnROb2RlID09IG51bGwpIHtcclxuICAgICAgICAgICAgY29udHJvbFsnX2hpZGRlbiddID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcmVudE1vZGVsLl9zdGF0dXNbY29udHJvbC5maWVsZF0uaGlkZGVuID09PSB0cnVlXHJcbiAgICAgICAgICAgIHx8IChwYXJlbnRNb2RlbC5fc3RhdHVzW2NvbnRyb2wuZmllbGRdLmhpZGRlbiA9PT0gdW5kZWZpbmVkXHJcbiAgICAgICAgICAgICAgICAmJiAoY29udHJvbC5oaWRkZW5cclxuICAgICAgICAgICAgICAgICAgICB8fCAoY29udHJvbC5oaWRkZW5DaGVjayAmJiBjb250cm9sLmhpZGRlbkNoZWNrKHRoaXMuX21pbmltaXplZERhdGEsIGN1cnJlbnROb2RlKSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICBjb250cm9sWydfaGlkZGVuJ10gPSAhIXJlc3VsdDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRleHRUZChjb250cm9sLCBkYXRhLCBpbmRleCwgdGFibGVQYXRoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY29udHJvbCxcclxuICAgICAgICAgICAgZGF0YSxcclxuICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgIHRhYmxlUGF0aCxcclxuICAgICAgICAgICAgcGFyZW50UGF0aDogYCR7dGFibGVQYXRofVske2luZGV4fV1gLFxyXG4gICAgICAgICAgICBwYXRoOiBgJHt0YWJsZVBhdGh9WyR7aW5kZXh9XS4ke2NvbnRyb2wuZmllbGR9YCxcclxuICAgICAgICAgICAgc2hvd0xhYmVsOiBmYWxzZSxcclxuICAgICAgICAgICAgbWRXaWR0aDogMTJcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc01vYmlsZU9yVGFibGV0KCkge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc01vYmlsZSgpXHJcbiAgICAgICAgICAgIHx8IHRoaXMuX2RldmljZURldGVjdG9yU2VydmljZS5pc1RhYmxldCgpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUNhY2hpbmcpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVDYWNoZVZhbHVlc1RvU3RvcmFnZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uRm9jdXNUZXh0Q29udHJvbChldnQpIHsgfVxyXG5cclxuICAgIHB1YmxpYyBvblNldHRpbmdzKGV2ZW50KSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblRhYmxlU2NoZW1hT2xkZXN0KGV2dCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5UQUJMRV9TQ0hFTUFfUEFHSU5HX09MREVTVCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uVGFibGVTY2hlbWFOZXdlc3QoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlRBQkxFX1NDSEVNQV9QQUdJTkdfTkVXRVNULCBudWxsKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25UYWJsZVNjaGVtYU5leHQoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlRBQkxFX1NDSEVNQV9QQUdJTkdfTkVYVCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uVGFibGVTY2hlbWFQcmV2KGV2dCkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5UQUJMRV9TQ0hFTUFfUEFHSU5HX1BSRVYsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWZyZXNoKGV2dCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250cm9sRGF0YVNvdXJjZShjb250cm9sOiBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIGRhdGE6IGFueSkge1xyXG4gICAgICAgIGlmIChkYXRhLl9zb3VyY2VbY29udHJvbC5maWVsZF0gaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIGRhdGEuX3NvdXJjZVtjb250cm9sLmZpZWxkXTtcclxuICAgICAgICBpZiAoY29udHJvbC5kYXRhU291cmNlIGluc3RhbmNlb2YgQXJyYXkpIHJldHVybiBjb250cm9sLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgaWYgKGNvbnRyb2wuZGF0YVNvdXJjZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSByZXR1cm4gY29udHJvbC5kYXRhU291cmNlKCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb250cm9sVHJlZU5vZGUge1xyXG4gICAgbW9kZWxQYXRoOiBzdHJpbmc7XHJcbiAgICBzY2hlbWFQYXRoOiBzdHJpbmc7XHJcbiAgICBmaWVsZDogc3RyaW5nO1xyXG4gICAgcGFyZW50Tm9kZTogQ29udHJvbFRyZWVOb2RlO1xyXG4gICAgcm9vdE5vZGU6IENvbnRyb2xUcmVlTm9kZTtcclxuICAgIGNoaWxkTm9kZXM6IENvbnRyb2xUcmVlTm9kZVtdID0gW107XHJcbiAgICBjb250cm9sOiBGb3JtQ29udHJvbEJhc2U7XHJcbiAgICBmb3JtQ29udHJvbHM7XHJcbiAgICBrZXlzUGx1czogc3RyaW5nW107XHJcbiAgICBwcml2YXRlIF9jcnVkRm9ybTogQ3J1ZEZvcm1Db21wb25lbnQ7XHJcbiAgICBwcml2YXRlIGNoaWxkTm9kZURpYyA9IHt9O1xyXG4gICAgcHJpdmF0ZSBkYXRhOiBhbnk7XHJcbiAgICBwcml2YXRlIGhhc1NjaGVtYSA9IHRydWU7XHJcbiAgICBjb25zdHJ1Y3Rvcihtb2RlbDogYW55LCBzY2hlbWFzOiBbXSwgZmllbGQ/LCBwYXJlbnROb2RlPzogQ29udHJvbFRyZWVOb2RlKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gbW9kZWw7XHJcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbHMgPSBzY2hlbWFzO1xyXG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlLm1vZGVsUGF0aCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWxQYXRoID0gcGFyZW50Tm9kZS5tb2RlbFBhdGggKyAnLicgKyBmaWVsZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVtYVBhdGggPSBwYXJlbnROb2RlLnNjaGVtYVBhdGggKyAnLicgKyBmaWVsZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmaWVsZCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsUGF0aCA9IHBhcmVudE5vZGUubW9kZWxQYXRoICsgJ1snICsgZmllbGQgKyAnXSc7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlbWFQYXRoID0gcGFyZW50Tm9kZS5zY2hlbWFQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzU2NoZW1hID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsUGF0aCA9IGZpZWxkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY2hlbWFQYXRoID0gZmllbGQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMucm9vdE5vZGUgPSBwYXJlbnROb2RlLnJvb3ROb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb290Tm9kZSA9IHRoaXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZpZWxkID0gZmllbGQ7XHJcbiAgICAgICAgdGhpcy5wYXJlbnROb2RlID0gcGFyZW50Tm9kZTtcclxuICAgICAgICBpZiAodGhpcy5oYXNTY2hlbWEpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9sID0gc2NoZW1hc1t0aGlzLnNjaGVtYVBhdGhdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udHJvbFsnbm9kZXMnXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbFsnbm9kZXMnXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sWydub2RlcyddW3RoaXMubW9kZWxQYXRoXSA9IHRoaXM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2NoZW1hc1t0aGlzLnNjaGVtYVBhdGhdO1xyXG4gICAgICAgIGxldCBrZXlzUGx1cyA9IFtdO1xyXG4gICAgICAgIGlmIChzY2hlbWEpIHtcclxuICAgICAgICAgICAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIENvbnRhaW5lclNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAga2V5c1BsdXMgPSBzY2hlbWEuY29udHJvbHMuZmlsdGVyKHEgPT4gcS5maWVsZCkubWFwKHEgPT4gcS5maWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgVGFibGVTY2hlbWEpIHtcclxuICAgICAgICAgICAgICAgIGtleXNQbHVzID0gc2NoZW1hLnJvd1RlbXBsYXRlLmZpbHRlcihxID0+IHEuZmllbGQpLm1hcChxID0+IHEuZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2NoZW1hUGF0aCkge1xyXG4gICAgICAgICAgICAgICAga2V5c1BsdXMgPSBPYmplY3Qua2V5cyhzY2hlbWFzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmtleXNQbHVzID0ga2V5c1BsdXM7XHJcbiAgICAgICAgdGhpcy5pbml0Q2hpbGROb2Rlcyhtb2RlbCwgc2NoZW1hcywga2V5c1BsdXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWluaXRDaGlsZE5vZGVzKCkge1xyXG4gICAgICAgIHRoaXMuY2hpbGROb2Rlcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIHRoaXMuY2hpbGROb2RlRGljID0ge307XHJcbiAgICAgICAgdGhpcy5pbml0Q2hpbGROb2Rlcyh0aGlzLmRhdGEsIHRoaXMuZm9ybUNvbnRyb2xzLCB0aGlzLmtleXNQbHVzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRDaGlsZE5vZGVzKG1vZGVsOiBhbnksIHNjaGVtYXM6IFtdLCBrZXlzUGx1czogc3RyaW5nW10pIHtcclxuICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KG1vZGVsKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhbGxLZXkgPSBuZXcgU2V0KFsuLi5rZXlzUGx1cywgLi4uT2JqZWN0LmtleXMobW9kZWwpXSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbEtleSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSAnX3N0YXR1cycgJiYga2V5ICE9ICdfZXJyb3JzJyAmJiBrZXkgIT0gJ19zb3VyY2UnICYmIGtleSAhPSBLZXlGbGFzaFNob3cpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBuZXcgQ29udHJvbFRyZWVOb2RlKG1vZGVsW2tleV0sIHNjaGVtYXMsIGtleSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZE5vZGVzLnB1c2goY2hpbGROb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoaWxkTm9kZURpY1tjaGlsZE5vZGUuZmllbGRdID0gY2hpbGROb2RlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGlzQXJyYXkobW9kZWwpKSB7XHJcbiAgICAgICAgICAgIGxldCBpID0gMDtcclxuICAgICAgICAgICAgaWYgKG1vZGVsLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkTm9kZSA9IG5ldyBDb250cm9sVHJlZU5vZGUoaXRlbSwgc2NoZW1hcywgaSwgdGhpcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGROb2RlLnBhcmVudE5vZGUgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hpbGROb2Rlcy5wdXNoKGNoaWxkTm9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGlsZE5vZGVEaWNbY2hpbGROb2RlLmZpZWxkXSA9IGNoaWxkTm9kZTtcclxuICAgICAgICAgICAgICAgICAgICBpKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENoaWxkTm9kZShmaWVsZCk6IENvbnRyb2xUcmVlTm9kZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGROb2RlRGljW2ZpZWxkXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDcnVkRm9ybShjcnVkRm9ybTogQ3J1ZEZvcm1Db21wb25lbnQpIHtcclxuICAgICAgICB0aGlzLl9jcnVkRm9ybSA9IGNydWRGb3JtO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwYXJlbnRNb2RlbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSByZXR1cm4gdGhpcy5wYXJlbnROb2RlLm1vZGVsO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBwYXJlbnRNb2RlbFBhdGgoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5tb2RlbFBhdGg7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHBhcmVudENvbnRyb2woKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5jb250cm9sO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2RlbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSByZXR1cm4gdGhpcy5wYXJlbnROb2RlLmRhdGFbdGhpcy5maWVsZF07XHJcbiAgICAgICAgZWxzZSByZXR1cm4gdGhpcy5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBtb2RlbCh2YWwpIHtcclxuICAgICAgICBpZiAodGhpcy5wYXJlbnROb2RlKSB0aGlzLnBhcmVudE5vZGUuZGF0YVt0aGlzLmZpZWxkXSA9IHZhbDtcclxuICAgICAgICBlbHNlIHRoaXMuZGF0YSA9IHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgdmFsdWUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkgcmV0dXJuIHRoaXMucGFyZW50Tm9kZS5kYXRhW3RoaXMuZmllbGRdO1xyXG4gICAgICAgIGVsc2UgcmV0dXJuIHRoaXMuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgdmFsdWUodmFsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Tm9kZSkgdGhpcy5wYXJlbnROb2RlLmRhdGFbdGhpcy5maWVsZF0gPSB2YWw7XHJcbiAgICAgICAgZWxzZSB0aGlzLmRhdGEgPSB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEhpZGRlbihmaWVsZDogc3RyaW5nIHwgc3RyaW5nW10sIGhpZGRlbjogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZCkpIHtcclxuICAgICAgICAgICAgZmllbGQuZm9yRWFjaChmID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SGlkZGVuRmllbGQoZiwgaGlkZGVuKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNldEhpZGRlbkZpZWxkKGZpZWxkLCBoaWRkZW4pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEhpZGRlbkZpZWxkKGZpZWxkOiBzdHJpbmcsIGhpZGRlbjogYm9vbGVhbikge1xyXG4gICAgICAgIGlmIChmaWVsZC5pbmRleE9mKCcuJykgPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSB0aGlzLmdldE5vZGVCeVBhdGgoYCR7dGhpcy5tb2RlbFBhdGh9LiR7ZmllbGR9YCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RGaWVsZCA9IGZpZWxkLnNwbGl0KCcuJykucG9wKCk7XHJcbiAgICAgICAgICAgIGNoaWxkTm9kZS5wYXJlbnROb2RlLmRhdGEuX3N0YXR1c1tsYXN0RmllbGRdLmhpZGRlbiA9IGhpZGRlbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YS5fc3RhdHVzW2ZpZWxkXS5oaWRkZW4gPSBoaWRkZW47XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb2RlQnlQYXRoKG1vZGVsUGF0aCk6IENvbnRyb2xUcmVlTm9kZSB7XHJcbiAgICAgICAgaWYgKG1vZGVsUGF0aCA9PSBudWxsIHx8IG1vZGVsUGF0aCA9PT0gJycpIHJldHVybiB0aGlzLnJvb3ROb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRJblRyZWUodGhpcy5yb290Tm9kZSwgbW9kZWxQYXRoLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROb2RlQnlTY2hlbWFQYXRoKHNjaGVtYVBhdGgpOiBDb250cm9sVHJlZU5vZGUge1xyXG4gICAgICAgIGlmIChzY2hlbWFQYXRoID09IG51bGwgfHwgc2NoZW1hUGF0aCA9PT0gJycpIHJldHVybiB0aGlzLnJvb3ROb2RlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRTY2hlbWFJblRyZWUodGhpcy5yb290Tm9kZSwgc2NoZW1hUGF0aC50b0xvd2VyQ2FzZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmRJblRyZWUobm9kZTogQ29udHJvbFRyZWVOb2RlLCBtb2RlbFBhdGgpOiBDb250cm9sVHJlZU5vZGUge1xyXG4gICAgICAgIGlmIChub2RlLm1vZGVsUGF0aCAhPSBudWxsICYmIG5vZGUubW9kZWxQYXRoLnRvTG93ZXJDYXNlKCkgPT0gbW9kZWxQYXRoLnRvTG93ZXJDYXNlKCkpIHJldHVybiBub2RlO1xyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkTm9kZSBvZiBub2RlLmNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUubW9kZWxQYXRoICE9IG51bGwgJiYgbW9kZWxQYXRoLnN0YXJ0c1dpdGgoY2hpbGROb2RlLm1vZGVsUGF0aC50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlID0gdGhpcy5maW5kSW5UcmVlKGNoaWxkTm9kZSwgbW9kZWxQYXRoKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmUpIHJldHVybiByZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpbmRTY2hlbWFJblRyZWUobm9kZTogQ29udHJvbFRyZWVOb2RlLCBzY2hlbWFQYXRoKTogQ29udHJvbFRyZWVOb2RlIHtcclxuICAgICAgICBpZiAobm9kZS5zY2hlbWFQYXRoICE9IG51bGwgJiYgbm9kZS5zY2hlbWFQYXRoLnRvTG93ZXJDYXNlKCkgPT0gc2NoZW1hUGF0aC50b0xvd2VyQ2FzZSgpKSByZXR1cm4gbm9kZTtcclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZE5vZGUgb2Ygbm9kZS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlLnNjaGVtYVBhdGggIT0gbnVsbCAmJiBzY2hlbWFQYXRoLnN0YXJ0c1dpdGgoY2hpbGROb2RlLnNjaGVtYVBhdGgudG9Mb3dlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IHRoaXMuZmluZFNjaGVtYUluVHJlZShjaGlsZE5vZGUsIHNjaGVtYVBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZSkgcmV0dXJuIHJlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREYXRhU291cmNlVGFibGVTY2hlbWEocGF0aDogc3RyaW5nLCBkYXRhU291cmNlOiBhbnlbXSkge1xyXG4gICAgICAgIGNvbnN0IHRhYmxlTm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5UGF0aChwYXRoKTtcclxuICAgICAgICBpZiAoIXRhYmxlTm9kZS5tb2RlbCkge1xyXG4gICAgICAgICAgICB0YWJsZU5vZGUubW9kZWwgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRhYmxlTm9kZS5tb2RlbC5sZW5ndGggPiBkYXRhU291cmNlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0YWJsZU5vZGUubW9kZWwgPSB0YWJsZU5vZGUubW9kZWwuc3BsaWNlKGRhdGFTb3VyY2UubGVuZ3RoLCBkYXRhU291cmNlLmxlbmd0aCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGFibGVOb2RlLm1vZGVsLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIG1lcmdlSlNPTk9sZCh0YWJsZU5vZGUubW9kZWxbaV0sIGRhdGFTb3VyY2VbaV0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHRhYmxlTm9kZS5tb2RlbC5sZW5ndGg7IGkgPCBkYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm9vdE5vZGUuX2NydWRGb3JtLmFkZE5ld1Jvdyg8VGFibGVTY2hlbWE+dGFibGVOb2RlLmNvbnRyb2wsIHBhdGgpO1xyXG4gICAgICAgICAgICBtZXJnZUpTT05PbGQodGFibGVOb2RlLm1vZGVsW2ldLCBkYXRhU291cmNlW2ldKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|