@c8y/ngx-components 1017.0.448 → 1017.0.453
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/esm2020/device-grid/columns/registration-date.device-grid-column.mjs +4 -10
- package/esm2020/ecosystem/application-plugins/plugin-list.component.mjs +10 -4
- package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +14 -3
- package/esm2020/repository/shared/repository.service.mjs +4 -4
- package/esm2020/services/services-device-tab/columns/last-updated-date.device-grid-column.mjs +4 -10
- package/fesm2015/c8y-ngx-components-device-grid.mjs +3 -9
- package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +6 -8
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +17 -15
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-repository-shared.mjs +3 -3
- package/fesm2015/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-services.mjs +3 -9
- package/fesm2015/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-grid.mjs +3 -9
- package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +9 -4
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +21 -6
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-repository-shared.mjs +3 -3
- package/fesm2020/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-services.mjs +3 -9
- package/fesm2020/c8y-ngx-components-services.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -237,7 +237,7 @@ export class RepositoryService {
|
|
|
237
237
|
}
|
|
238
238
|
const VERSION_FILTER_ORDER = {
|
|
239
239
|
__filter: {},
|
|
240
|
-
__orderby: [{ 'creationTime.date': -1 }
|
|
240
|
+
__orderby: [{ 'creationTime.date': -1 }]
|
|
241
241
|
};
|
|
242
242
|
return this.listChildren(entry, VERSION_FILTER_ORDER, params);
|
|
243
243
|
}
|
|
@@ -255,7 +255,7 @@ export class RepositoryService {
|
|
|
255
255
|
__filter: {
|
|
256
256
|
__not: { __has: 'c8y_Patch' }
|
|
257
257
|
},
|
|
258
|
-
__orderby: [{ 'creationTime.date': -1 }
|
|
258
|
+
__orderby: [{ 'creationTime.date': -1 }]
|
|
259
259
|
};
|
|
260
260
|
return this.listChildren(entry, NO_PATCH_FILTER_ORDER, params);
|
|
261
261
|
}
|
|
@@ -272,7 +272,7 @@ export class RepositoryService {
|
|
|
272
272
|
__filter: {
|
|
273
273
|
'c8y_Patch.dependency': version
|
|
274
274
|
},
|
|
275
|
-
__orderby: [{ 'creationTime.date': -1 }
|
|
275
|
+
__orderby: [{ 'creationTime.date': -1 }]
|
|
276
276
|
};
|
|
277
277
|
return this.listChildren(entry, PATCH_FILTER_ORDER, params);
|
|
278
278
|
}
|
|
@@ -1092,4 +1092,4 @@ RepositoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ve
|
|
|
1092
1092
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: RepositoryService, decorators: [{
|
|
1093
1093
|
type: Injectable
|
|
1094
1094
|
}], ctorParameters: function () { return [{ type: i1.InventoryService }, { type: i1.InventoryBinaryService }, { type: i1.OperationService }, { type: i2.AlertService }, { type: i1.EventService }, { type: i2.OperationRealtimeService }, { type: i1.EventBinaryService }, { type: i3.AdvancedSoftwareService }]; } });
|
|
1095
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zaGFyZWQvcmVwb3NpdG9yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBT1osc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUloQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RGLE9BQU8sRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixPQUFPLEVBQ1AsR0FBRyxFQUNILElBQUksRUFDSixLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxHQUFHLElBQUksSUFBSSxFQUNYLE1BQU0sRUFDTixJQUFJLEVBQ0osTUFBTSxFQUNOLEdBQUcsRUFDSixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBVUwsY0FBYyxFQUNkLHVCQUF1QixFQUd4QixNQUFNLG9CQUFvQixDQUFDOzs7OztBQUc1QixNQUFNLE9BQU8saUJBQWlCO0lBSzVCLFlBQ1UsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsU0FBMkIsRUFDM0IsS0FB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RSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMzRixDQUFDOzs4R0FweUNVLGlCQUFpQjtrSEFBakIsaUJBQWlCOzJGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFdmVudEJpbmFyeVNlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbiAgSWRSZWZlcmVuY2UsXG4gIElFdmVudCxcbiAgSUZldGNoUmVzcG9uc2UsXG4gIElJZGVudGlmaWVkLFxuICBJTWFuYWdlZE9iamVjdCxcbiAgSU1hbmFnZWRPYmplY3RCaW5hcnksXG4gIEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElPcGVyYXRpb24sXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBPcGVyYXRpb25TZXJ2aWNlLFxuICBPcGVyYXRpb25TdGF0dXMsXG4gIFF1ZXJpZXNVdGlsXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgZ2V0dGV4dCwgT3BlcmF0aW9uUmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGNsb25lRGVlcCxcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgZ2V0LFxuICBoZWFkLFxuICBpc05pbCxcbiAgaXNTdHJpbmcsXG4gIGlzVW5kZWZpbmVkLFxuICBtYXAgYXMgX21hcCxcbiAgb21pdEJ5LFxuICBwaWNrLFxuICByZW1vdmUsXG4gIHNldFxufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVmZXIsIGZyb20sIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVdoaWxlLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlIH0gZnJvbSAnLi9hZHZhbmNlZC1zb2Z0d2FyZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25TbmFwc2hvdCxcbiAgRGV2aWNlRmlybXdhcmUsXG4gIERldmljZVNvZnR3YXJlLFxuICBEZXZpY2VTb2Z0d2FyZUNoYW5nZSxcbiAgRmlybXdhcmVCaW5hcnksXG4gIEZpcm13YXJlUGF0Y2hCaW5hcnksXG4gIE1vZGFsTW9kZWwsXG4gIFJlcG9zaXRvcnlCaW5hcnksXG4gIFJlcG9zaXRvcnlDYXRlZ29yeSxcbiAgUmVwb3NpdG9yeVR5cGUsXG4gIFJFUE9TSVRPUllfQklOQVJZX1RZUEVTLFxuICBTZWxlY3RlZFJlcG9zaXRvcnlCaW5hcnksXG4gIFNvZnR3YXJlQmluYXJ5XG59IGZyb20gJy4vcmVwb3NpdG9yeS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvc2l0b3J5U2VydmljZSB7XG4gIHJlYWRvbmx5IGRhdGVGcm9tID0gbmV3IERhdGUoMCk7XG4gIHJlYWRvbmx5IGRhdGVUbyA9IG5ldyBEYXRlKERhdGUubm93KCkgKyA4NjQwMDAwMCk7IC8vIDEgZGF5IGluIHRoZSBmdXR1cmVcbiAgcHJpdmF0ZSBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlCaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcGVyYXRpb246IE9wZXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnQ6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIG9wZXJhdGlvblJlYWx0aW1lOiBPcGVyYXRpb25SZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudEJpbmFyeTogRXZlbnRCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2U6IEFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucXVlcmllc1V0aWwgPSBuZXcgUXVlcmllc1V0aWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyByZXBvc2l0b3J5IGVudHJpZXMgb2YgZ2l2ZW4gdHlwZS5cbiAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgcmVwb3NpdG9yeSBlbnRyaWVzIHRvIGxpc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIEV4dHJhIGxpc3Rpbmcgb3B0aW9ucy5cbiAgICovXG4gIGxpc3RSZXBvc2l0b3J5RW50cmllcyhcbiAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgLyoqIEFkZGl0aW9uYWwgcXVlcnkuICovXG4gICAgICBxdWVyeT86IGFueTtcbiAgICAgIC8qKiAoZGVwcmVjYXRlZCAtIHRvIGJlIHJlbW92ZWQpIE9ubHkgaW5jbHVkZSBlbnRyaWVzIHdpdGggbWF0Y2hpbmcgcGFydGlhbCBuYW1lcy4gKi9cbiAgICAgIHBhcnRpYWxOYW1lPzogc3RyaW5nO1xuICAgICAgLyoqIEluY2x1ZGUgZW50cmllcyB3aXRoIG1hdGNoaW5nIHBhcnRpYWwgdGV4dCBpbiB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuICovXG4gICAgICBwYXJ0aWFsVGV4dEZpbHRlcj86IHsgcGFydGlhbFRleHQ6IHN0cmluZzsgcHJvcGVydGllczogc3RyaW5nW10gfTtcbiAgICAgIC8qKiBFeGNsdWRlIGxlZ2FjeSBlbnRyaWVzLiAqL1xuICAgICAgc2tpcExlZ2FjeT86IGJvb2xlYW47XG4gICAgICAvKiogRXhjbHVkZSBkZWZhdWx0IG9yZGVyaW5nLiAqL1xuICAgICAgc2tpcERlZmF1bHRPcmRlcj86IGJvb2xlYW47XG4gICAgICAvKiogT3RoZXIgcmVxdWVzdCBwYXJhbXMuICovXG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgfVxuICApIHtcbiAgICBjb25zdCBkZWZhdWx0T3JkZXIgPSBbeyBuYW1lOiAxIH1dO1xuICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJzID0geyB0eXBlIH07XG4gICAgY29uc3QgbGVnYWN5RmlsdGVycyA9IHsgX19oYXM6IGB1cmxgIH07XG4gICAgbGV0IGZpbHRlcnMgPSB7fTtcblxuICAgIGxldCBmdWxsUXVlcnkgPSAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXJ5KSB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMgfHwgKG9wdGlvbnMgJiYgIW9wdGlvbnMuc2tpcERlZmF1bHRPcmRlcikpIHtcbiAgICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkT3JkZXJieXMoZnVsbFF1ZXJ5LCBkZWZhdWx0T3JkZXIsICdwcmVwZW5kJyk7XG4gICAgfVxuXG4gICAgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIoZnVsbFF1ZXJ5LCBkZWZhdWx0RmlsdGVycyk7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhcnRpYWxUZXh0RmlsdGVyKSB7XG4gICAgICBjb25zdCB7IHBhcnRpYWxUZXh0LCBwcm9wZXJ0aWVzIH0gPSBvcHRpb25zLnBhcnRpYWxUZXh0RmlsdGVyO1xuICAgICAgY29uc3Qgb3JGaWx0ZXIgPSB7IF9fb3I6IHByb3BlcnRpZXMubWFwKHByb3BlcnR5ID0+ICh7IFtwcm9wZXJ0eV06IGAqJHtwYXJ0aWFsVGV4dH0qYCB9KSkgfTtcbiAgICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZ1bGxRdWVyeSwgb3JGaWx0ZXIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGFydGlhbE5hbWUpIHtcbiAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlmXG4gICAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihmdWxsUXVlcnksIHsgbmFtZTogYCoke29wdGlvbnMucGFydGlhbE5hbWV9KmAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5za2lwTGVnYWN5KSB7XG4gICAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihmdWxsUXVlcnksIHsgX19ub3Q6IGxlZ2FjeUZpbHRlcnMgfSk7XG4gICAgfVxuXG4gICAgZmlsdGVycyA9IHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZnVsbFF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiA1MCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgLi4uKChvcHRpb25zICYmIG9wdGlvbnMucGFyYW1zKSB8fCB7fSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KGZpbHRlcnMpO1xuICB9XG5cbiAgLy8gVE9ETzogbWVyZ2Ugd2l0aCBjcmVhdGUoKVxuICBhc3luYyBzYXZlKGRhdGE6IE1vZGFsTW9kZWwsIHR5cGU6IFJlcG9zaXRvcnlUeXBlLCBtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OOiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24obW8sIHtcbiAgICAgICAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb25UeXBlOiBkYXRhLnNlbGVjdGVkID8gZGF0YS5zZWxlY3RlZC5jb25maWd1cmF0aW9uVHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuYW1lOiBkYXRhLnZlcnNpb24sXG4gICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgZGV2aWNlVHlwZTogZGF0YS5kZXZpY2VUeXBlLFxuICAgICAgICAgIGM4eV9HbG9iYWw6IHt9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWRhdGEuZGV2aWNlVHlwZSAmJiBtby5pZCkge1xuICAgICAgICAgIG1vLmRldmljZVR5cGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0YS5zZWxlY3RlZCAmJiBtby5pZCkge1xuICAgICAgICAgIG1vLmNvbmZpZ3VyYXRpb25UeXBlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1VybCA9IG1vLnVybDtcbiAgICBpZiAoZGF0YS5iaW5hcnkudXJsKSB7XG4gICAgICBtby51cmwgPSBkYXRhLmJpbmFyeS51cmw7XG4gICAgfSBlbHNlIGlmIChkYXRhLmJpbmFyeS5maWxlKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmNyZWF0ZShkYXRhLmJpbmFyeS5maWxlLCB7XG4gICAgICAgIGM4eV9HbG9iYWw6IHt9XG4gICAgICB9IGFzIFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KTtcbiAgICAgIG1vLnVybCA9IHJlc3BvbnNlLmRhdGEuc2VsZjtcbiAgICB9XG5cbiAgICBpZiAobW8uaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUVudHJ5KG1vLCBleGlzdGluZ1VybCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUVudHJ5KG1vKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShtb2RhbDogTW9kYWxNb2RlbCwgdHlwZTogUmVwb3NpdG9yeVR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUmVwb3NpdG9yeVR5cGUuRklSTVdBUkU6XG4gICAgICBjYXNlIFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGaXJtd2FyZU9yU29mdHdhcmUobW9kYWwsIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZpcm13YXJlT3JTb2Z0d2FyZShcbiAgICBtb2RhbDogTW9kYWxNb2RlbCxcbiAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZVxuICApOiBQcm9taXNlPFJlcG9zaXRvcnlDYXRlZ29yeT4ge1xuICAgIGxldCBiaW5hcnk6IElNYW5hZ2VkT2JqZWN0QmluYXJ5O1xuICAgIGxldCBiaW5hcnlVUkw6IHN0cmluZztcbiAgICBsZXQgcmVwb3NpdG9yeUVudHJ5OiBSZXBvc2l0b3J5Q2F0ZWdvcnk7XG4gICAgbGV0IHJlcG9zaXRvcnlCaW5hcnk6IEZpcm13YXJlQmluYXJ5IHwgU29mdHdhcmVCaW5hcnk7XG4gICAgY29uc3QgbW9zID0gW107XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0ZWQ6IHsgaWQ6IHNlbGVjdGVkSWQgfSxcbiAgICAgIGJpbmFyeTogeyBmaWxlLCB1cmwgfVxuICAgIH0gPSBtb2RhbDtcbiAgICB0cnkge1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgKHsgZGF0YTogYmluYXJ5IH0gPSBhd2FpdCB0aGlzLnNhdmVCaW5hcnkoZmlsZSkpO1xuICAgICAgICAoeyBzZWxmOiBiaW5hcnlVUkwgfSA9IGJpbmFyeSk7XG4gICAgICAgIG1vcy5wdXNoKGJpbmFyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaW5hcnlVUkwgPSB1cmw7XG4gICAgICB9XG5cbiAgICAgICh7IGRhdGE6IHJlcG9zaXRvcnlFbnRyeSB9ID0gYXdhaXQgdGhpcy5jcmVhdGVPclVwZGF0ZVJlcG9zaXRvcnlFbnRyeShtb2RhbCwgdHlwZSkpO1xuICAgICAgaWYgKGlzTmlsKHNlbGVjdGVkSWQpKSB7XG4gICAgICAgIG1vcy5wdXNoKHJlcG9zaXRvcnlFbnRyeSk7XG4gICAgICB9XG5cbiAgICAgICh7IGRhdGE6IHJlcG9zaXRvcnlCaW5hcnkgfSA9IGF3YWl0IHRoaXMuY3JlYXRlUmVwb3NpdG9yeUJpbmFyeShcbiAgICAgICAgbW9kYWwsXG4gICAgICAgIGJpbmFyeVVSTCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgcmVwb3NpdG9yeUVudHJ5XG4gICAgICApKTtcbiAgICAgIG1vcy5wdXNoKHJlcG9zaXRvcnlCaW5hcnkpO1xuXG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxpbmtCaW5hcnkocmVwb3NpdG9yeUJpbmFyeSwgYmluYXJ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcG9zaXRvcnlFbnRyeTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jbGVhblVwKG1vcyk7XG4gICAgICB0aGlzLmVycm9yTXNnKCk7XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSBlcnJvclxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUJpbmFyeShmaWxlOiBGaWxlKTogUHJvbWlzZTxJUmVzdWx0PElNYW5hZ2VkT2JqZWN0QmluYXJ5Pj4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeUJpbmFyeS5jcmVhdGUoZmlsZSwgeyBjOHlfR2xvYmFsOiB7fSB9IGFzIFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KTtcbiAgfVxuXG4gIGNyZWF0ZU9yVXBkYXRlUmVwb3NpdG9yeUVudHJ5KFxuICAgIG1vZGFsOiBNb2RhbE1vZGVsLFxuICAgIHR5cGU6IFJlcG9zaXRvcnlUeXBlXG4gICk6IFByb21pc2U8SVJlc3VsdDxSZXBvc2l0b3J5Q2F0ZWdvcnk+PiB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0ZWQ6IHsgaWQsIG5hbWUgfSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZGV2aWNlVHlwZVxuICAgIH0gPSBtb2RhbDtcblxuICAgIGNvbnN0IG1vID0ge1xuICAgICAgaWQsXG4gICAgICBuYW1lOiBpZCA/IHVuZGVmaW5lZCA6IG5hbWUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHR5cGU6IGlkID8gdW5kZWZpbmVkIDogdHlwZSxcbiAgICAgIGM4eV9HbG9iYWw6IHt9XG4gICAgfTtcblxuICAgIGlmIChkZXZpY2VUeXBlKSB7XG4gICAgICBzZXQobW8sICdjOHlfRmlsdGVyLnR5cGUnLCBkZXZpY2VUeXBlKTtcbiAgICB9XG5cbiAgICBpZiAobW9kYWwuc29mdHdhcmVUeXBlKSB7XG4gICAgICBzZXQobW8sICdzb2Z0d2FyZVR5cGUnLCBtb2RhbC5zb2Z0d2FyZVR5cGUuc29mdHdhcmVUeXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWRcbiAgICAgID8gKHRoaXMuaW52ZW50b3J5LnVwZGF0ZShtbykgYXMgUHJvbWlzZTxJUmVzdWx0PFJlcG9zaXRvcnlDYXRlZ29yeT4+KVxuICAgICAgOiAodGhpcy5pbnZlbnRvcnkuY3JlYXRlKG1vKSBhcyBQcm9taXNlPElSZXN1bHQ8UmVwb3NpdG9yeUNhdGVnb3J5Pj4pO1xuICB9XG5cbiAgY3JlYXRlUmVwb3NpdG9yeUJpbmFyeShcbiAgICBtb2RhbDogTW9kYWxNb2RlbCxcbiAgICBiaW5hcnlVUkw6IHN0cmluZyxcbiAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZSxcbiAgICBwYXJlbnQ6IFJlcG9zaXRvcnlDYXRlZ29yeVxuICApOiBQcm9taXNlPElSZXN1bHQ8RmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeSB8IEZpcm13YXJlUGF0Y2hCaW5hcnk+PiB7XG4gICAgY29uc3QgbW8gPSB0aGlzLnByZXBhcmVSZXBvc2l0b3J5QmluYXJ5TU8obW9kYWwsIGJpbmFyeVVSTCwgdHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUobW8sIHBhcmVudCkgYXMgUHJvbWlzZTxcbiAgICAgIElSZXN1bHQ8RmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeSB8IEZpcm13YXJlUGF0Y2hCaW5hcnk+XG4gICAgPjtcbiAgfVxuXG4gIHByZXBhcmVSZXBvc2l0b3J5QmluYXJ5TU8obW9kYWw6IE1vZGFsTW9kZWwsIGJpbmFyeVVSTDogc3RyaW5nLCB0eXBlOiBSZXBvc2l0b3J5VHlwZSkge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgcGF0Y2hWZXJzaW9uLCBkZXBlbmRlbmN5IH0gPSBtb2RhbDtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICB0eXBlOiBSRVBPU0lUT1JZX0JJTkFSWV9UWVBFU1t0eXBlXSxcbiAgICAgIFt0eXBlXToge1xuICAgICAgICB1cmw6IGJpbmFyeVVSTFxuICAgICAgfSxcbiAgICAgIGM4eV9HbG9iYWw6IHt9XG4gICAgfTtcblxuICAgIGlmIChkZXBlbmRlbmN5KSB7XG4gICAgICBzZXQocmVzdWx0LCBbdHlwZSwgJ3ZlcnNpb24nXSwgcGF0Y2hWZXJzaW9uKTtcbiAgICAgIGFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgYzh5X1BhdGNoOiB7XG4gICAgICAgICAgZGVwZW5kZW5jeTogZGVwZW5kZW5jeS5jOHlfRmlybXdhcmUudmVyc2lvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0KHJlc3VsdCwgW3R5cGUsICd2ZXJzaW9uJ10sIHZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgbGlua0JpbmFyeShcbiAgICByZXBvc2l0b3J5QmluYXJ5OiBGaXJtd2FyZUJpbmFyeSB8IFNvZnR3YXJlQmluYXJ5LFxuICAgIGJpbmFyeTogSU1hbmFnZWRPYmplY3RCaW5hcnlcbiAgKSB7XG4gICAgY29uc3QgeyBpZDogcmVwb3NpdG9yeUJpbmFyeUlkIH0gPSByZXBvc2l0b3J5QmluYXJ5O1xuICAgIGlmIChiaW5hcnkpIHtcbiAgICAgIGNvbnN0IHsgaWQ6IGJpbmFyeUlkIH0gPSBiaW5hcnk7XG4gICAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNBZGQoYmluYXJ5SWQsIHJlcG9zaXRvcnlCaW5hcnlJZCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYW5VcChtb3NUb0RlbGV0ZTogSUlkZW50aWZpZWRbXSkge1xuICAgIG1vc1RvRGVsZXRlLmZvckVhY2gobW8gPT4ge1xuICAgICAgY29uc3QgeyBjOHlfSXNCaW5hcnkgfSA9IG1vO1xuICAgICAgaXNVbmRlZmluZWQoYzh5X0lzQmluYXJ5KSA/IHRoaXMuZGVsZXRlKG1vKSA6IHRoaXMuaW52ZW50b3J5QmluYXJ5LmRlbGV0ZShtbyk7XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGUoZW50aXR5OiBJSWRlbnRpZmllZCk6IFByb21pc2U8SVJlc3VsdDxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5kZWxldGUoZW50aXR5LCB7IGZvcmNlQ2FzY2FkZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGVycm9yTXNnKCkge1xuICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0ZhaWxlZCB0byBzYXZlJyk7XG4gICAgdGhpcy5hbGVydC5kYW5nZXIobXNnKTtcbiAgfVxuXG4gIGdldEJhc2VWZXJzaW9uc0NvdW50JChlbnRyeTogSU1hbmFnZWRPYmplY3QpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gb2YoMSk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tKHRoaXMubGlzdEJhc2VWZXJzaW9ucyhlbnRyeSwgeyBwYWdlU2l6ZTogMSwgd2l0aFRvdGFsUGFnZXM6IHRydWUgfSkpLnBpcGUoXG4gICAgICBtYXAoKHsgcGFnaW5nIH0pID0+IHBhZ2luZy50b3RhbFBhZ2VzKVxuICAgICk7XG4gIH1cblxuICBnZXRCYXNlVmVyc2lvbkZyb21NTyhtbzogUmVwb3NpdG9yeUJpbmFyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYXRjaChtbykgPyBnZXQobW8sICdjOHlfUGF0Y2guZGVwZW5kZW5jeScpIDogZ2V0KG1vLCAnYzh5X0Zpcm13YXJlLnZlcnNpb24nKTtcbiAgfVxuXG4gIGlzUGF0Y2gobW86IFJlcG9zaXRvcnlCaW5hcnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFnZXQobW8sICdjOHlfUGF0Y2guZGVwZW5kZW5jeScpO1xuICB9XG5cbiAgZ2V0UGF0Y2hWZXJzaW9uc0NvdW50JChlbnRyeTogSU1hbmFnZWRPYmplY3QsIGJhc2VWZXJzaW9uOiBGaXJtd2FyZUJpbmFyeSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgaWYgKHRoaXMuaXNMZWdhY3lFbnRyeShiYXNlVmVyc2lvbikpIHtcbiAgICAgIHJldHVybiBvZigwKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmxpc3RQYXRjaFZlcnNpb25zKGVudHJ5LCBiYXNlVmVyc2lvbiwgeyBwYWdlU2l6ZTogMSwgd2l0aFRvdGFsUGFnZXM6IHRydWUgfSlcbiAgICApLnBpcGUobWFwKCh7IHBhZ2luZyB9KSA9PiBwYWdpbmcudG90YWxQYWdlcykpO1xuICB9XG5cbiAgaXNMZWdhY3lFbnRyeShlbnRyeTogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihlbnRyeS51cmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGFsbCB2ZXJzaW9ucyAoYmFzZSBhbmQgcGF0Y2ggb25lcykgb2YgZ2l2ZW4gdG9wIGxldmVsIGVudHJ5LlxuICAgKiBWZXJzaW9ucyBhcmUgb3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lIChhc3N1bWluZyB0aGUgZWFybGllciBjcmVhdGVkLCB0aGUgb2xkZXIgdGhlIHZlcnNpb24pLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0QWxsVmVyc2lvbnMoZW50cnk6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LCBwYXJhbXMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCYXNlVmVyc2lvblJlc3VsdExpc3RGb3JMZWdhY3lFbnRyeShlbnRyeSk7XG4gICAgfVxuXG4gICAgY29uc3QgVkVSU0lPTl9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge30sXG4gICAgICBfX29yZGVyYnk6IFt7ICdjcmVhdGlvblRpbWUuZGF0ZSc6IC0xIH0sIHsgY3JlYXRpb25UaW1lOiAtMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubGlzdENoaWxkcmVuKGVudHJ5LCBWRVJTSU9OX0ZJTFRFUl9PUkRFUiwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBiYXNlIHZlcnNpb25zIG9mIGdpdmVuIHRvcCBsZXZlbCBlbnRyeS5cbiAgICogVmVyc2lvbnMgYXJlIG9yZGVyZWQgYnkgY3JlYXRpb24gdGltZSAoYXNzdW1pbmcgdGhlIGVhcmxpZXIgY3JlYXRlZCwgdGhlIG9sZGVyIHRoZSB2ZXJzaW9uKS5cbiAgICogQHBhcmFtIGVudHJ5IFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5LlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zLlxuICAgKi9cbiAgbGlzdEJhc2VWZXJzaW9ucyhlbnRyeTogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sIHBhcmFtcyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuaXNMZWdhY3lFbnRyeShlbnRyeSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJhc2VWZXJzaW9uUmVzdWx0TGlzdEZvckxlZ2FjeUVudHJ5KGVudHJ5KTtcbiAgICB9XG5cbiAgICBjb25zdCBOT19QQVRDSF9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX25vdDogeyBfX2hhczogJ2M4eV9QYXRjaCcgfVxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgJ2NyZWF0aW9uVGltZS5kYXRlJzogLTEgfSwgeyBjcmVhdGlvblRpbWU6IC0xIH1dXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5saXN0Q2hpbGRyZW4oZW50cnksIE5PX1BBVENIX0ZJTFRFUl9PUkRFUiwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyBwYXRjaCB2ZXJzaW9ucyBvZiBnaXZlbiBiYXNlIHZlcnNpb24gdW5kZXIgdGhlIGVudHJ5LlxuICAgKiBWZXJzaW9ucyBhcmUgb3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lIChhc3N1bWluZyB0aGUgZWFybGllciBjcmVhdGVkLCB0aGUgb2xkZXIgdGhlIHZlcnNpb24pLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBiYXNlVmVyc2lvbiBCYXNlIHZlcnNpb24uXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0UGF0Y2hWZXJzaW9ucyhlbnRyeTogSU1hbmFnZWRPYmplY3QsIGJhc2VWZXJzaW9uOiBGaXJtd2FyZUJpbmFyeSB8IHN0cmluZywgcGFyYW1zID0ge30pIHtcbiAgICBjb25zdCB2ZXJzaW9uID0gaXNTdHJpbmcoYmFzZVZlcnNpb24pID8gYmFzZVZlcnNpb24gOiBnZXQoYmFzZVZlcnNpb24sICdjOHlfRmlybXdhcmUudmVyc2lvbicpO1xuICAgIGNvbnN0IFBBVENIX0ZJTFRFUl9PUkRFUiA9IHtcbiAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgICdjOHlfUGF0Y2guZGVwZW5kZW5jeSc6IHZlcnNpb25cbiAgICAgIH0sXG4gICAgICBfX29yZGVyYnk6IFt7ICdjcmVhdGlvblRpbWUuZGF0ZSc6IC0xIH0sIHsgY3JlYXRpb25UaW1lOiAtMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubGlzdENoaWxkcmVuKGVudHJ5LCBQQVRDSF9GSUxURVJfT1JERVIsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgcGF0Y2ggdmVyc2lvbnMgb2YgZ2l2ZW4gYmFzZSB2ZXJzaW9uIHVuZGVyIHRoZSBlbnRyeSBpbmNsdWRpbmcgdGhlIGJhc2UgdmVyc2lvbi5cbiAgICogVmVyc2lvbnMgYXJlIG9yZGVyZWQgYnkgY3JlYXRpb24gdGltZSAoYXNzdW1pbmcgdGhlIGVhcmxpZXIgY3JlYXRlZCwgdGhlIG9sZGVyIHRoZSB2ZXJzaW9uKS5cbiAgICogSW4gdGVybXMgb2YgbGVnYWN5IGJhc2UgdmVyc2lvbiB0aGUgZW50cnkgZ2V0cyB0cmFuc2Zvcm1lZCB0byBmaXQgdGhlIG5lZWRlZCBkYXRhIG1vZGVsLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBiYXNlVmVyc2lvbiBCYXNlIHZlcnNpb24uXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0QmFzZVZlcnNpb25BbmRQYXRjaGVzKGVudHJ5OiBJTWFuYWdlZE9iamVjdCwgYmFzZVZlcnNpb246IElNYW5hZ2VkT2JqZWN0LCBwYXJhbXMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGM4eV9GaXJtd2FyZToge1xuICAgICAgICAgICAgICAgIHZlcnNpb246IGVudHJ5LnZlcnNpb24sXG4gICAgICAgICAgICAgICAgdXJsOiBlbnRyeS51cmxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudHJ5XG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBQQVRDSF9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX29yOiB7XG4gICAgICAgICAgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5JzogYmFzZVZlcnNpb24uYzh5X0Zpcm13YXJlLnZlcnNpb24sXG4gICAgICAgICAgJ2M4eV9GaXJtd2FyZS52ZXJzaW9uJzogYmFzZVZlcnNpb24uYzh5X0Zpcm13YXJlLnZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5JzogMSB9LCB7ICdjOHlfRmlybXdhcmUudmVyc2lvbic6IDEgfV1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmxpc3RDaGlsZHJlbihlbnRyeSwgUEFUQ0hfRklMVEVSX09SREVSLCBwYXJhbXMpO1xuICB9XG5cbiAgbGlzdENoaWxkcmVuKGVudHJ5OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiwgZmlsdGVycyA9IHt9LCBwYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgY2hpbGRyZW5GaWx0ZXJzID0geyBfX2J5Z3JvdXBpZDogZW50cnkuaWQgfTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZpbHRlcnMsIGNoaWxkcmVuRmlsdGVycyk7XG4gICAgLy8gRklYTUU6IG5lZWRlZCBiZWNhdXNlIG9mIGlzc3VlIGluIGZvck9mIGRpcmVjdGl2ZSAoLi4uKVxuICAgIHBhcmFtcy53aXRoVG90YWxQYWdlcyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3RRdWVyeShxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFsbCBpdGVtcyBmcm9tIHRoZSBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIHByb3ZpZGVkIHBhZ2UuXG4gICAqIEBwYXJhbSBmaXJzdFBhZ2UgVGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGxpc3QgdG8gZmV0Y2ggYWxsIGl0ZW1zIGZvci5cbiAgICovXG4gIGFzeW5jIGZldGNoQWxsSXRlbXNGcm9tTGlzdChmaXJzdFBhZ2UpIHtcbiAgICBsZXQgYWxsSXRlbXM7XG5cbiAgICBpZiAoIWZpcnN0UGFnZS50aGVuKSB7XG4gICAgICBhbGxJdGVtcyA9IFsuLi5maXJzdFBhZ2VdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBwYWdpbmcsIGRhdGE6IGl0ZW1zIH0gPSBhd2FpdCBmaXJzdFBhZ2U7XG4gICAgICBhbGxJdGVtcyA9IFsuLi5pdGVtc107XG5cbiAgICAgIHdoaWxlIChwYWdpbmcgJiYgcGFnaW5nLm5leHRQYWdlKSB7XG4gICAgICAgICh7IHBhZ2luZywgZGF0YTogaXRlbXMgfSA9IGF3YWl0IHBhZ2luZy5uZXh0KCkpO1xuICAgICAgICBhbGxJdGVtcyA9IFsuLi5hbGxJdGVtcywgLi4uaXRlbXNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhbGxJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5IG1hbmFnZWQgb2JqZWN0IGZvciBiYXNlIG9yIHBhdGNoIHZlcnNpb24uXG4gICAqIEBwYXJhbSBtbyBCYXNlIG9yIHBhdGNoIHZlcnNpb24gbWFuYWdlZCBvYmplY3Qgd2l0aCBwYXJlbnRzLlxuICAgKi9cbiAgZ2V0UmVwb3NpdG9yeUVudHJ5TU8kKG1vOiBJTWFuYWdlZE9iamVjdCk6IE9ic2VydmFibGU8SU1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIW1vKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgW3JlZmVyZW5jZV0gPSBnZXQobW8sICdhZGRpdGlvblBhcmVudHMucmVmZXJlbmNlcycpO1xuICAgIGNvbnN0IGlkID0gZ2V0KHJlZmVyZW5jZSwgJ21hbmFnZWRPYmplY3QuaWQnKTtcbiAgICByZXR1cm4gaWRcbiAgICAgID8gZnJvbSh0aGlzLmludmVudG9yeS5kZXRhaWwoaWQsIHsgd2l0aENoaWxkcmVuOiBmYWxzZSB9KSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgICAgIDogb2YodW5kZWZpbmVkKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBiYXNlIG9yIHBhdGNoIHZlcnNpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBkZXZpY2VSZXBvc2l0b3J5RnJhZ21lbnQgRGV2aWNlIHJlcG9zaXRvcnkgZnJhZ21lbnQuXG4gICAqIEBwYXJhbSB0eXBlIFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5IHR5cGUuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIENvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggb3B0aW9uczpcbiAgICogLSAqKnNraXBMZWdhY3kqKiAtIGBib29sZWFuYCAtIEV4Y2x1ZGUgbGVnYWN5IGVudHJpZXMuXG4gICAqIC0gKipmaWx0ZXJzKiogLSBgb2JqZWN0YCAtIEZpbHRlciBvYmplY3QuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIGFzIGl0IGRvZXNuJ3Qgc3VwcG9ydCAnbWlzc2luZyB1cmwnIGNhc2VcbiAgICovXG4gIGdldFJlcG9zaXRvcnlCaW5hcnlNb0J5VmVyc2lvbihcbiAgICBkZXZpY2VSZXBvc2l0b3J5RnJhZ21lbnQ6IERldmljZUZpcm13YXJlIHwgRGV2aWNlU29mdHdhcmUsXG4gICAgdHlwZTogUmVwb3NpdG9yeVR5cGUsXG4gICAgeyBza2lwTGVnYWN5ID0gZmFsc2UsIGZpbHRlcnMgPSB7fSB9OiB7IHNraXBMZWdhY3k/OiBib29sZWFuOyBmaWx0ZXJzPzogb2JqZWN0IH0gPSB7fVxuICApOiBQcm9taXNlPElNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCB1cmwsIG5hbWUgfSA9IGRldmljZVJlcG9zaXRvcnlGcmFnbWVudDtcbiAgICBjb25zdCByZXBvc2l0b3J5QmluYXJ5VHlwZSA9IFJFUE9TSVRPUllfQklOQVJZX1RZUEVTW3R5cGVdO1xuICAgIGxldCBxdWVyeTtcbiAgICBjb25zdCBuZXdNb2RlbEJhc2VWZXJzaW9uUXVlcnkgPSB7XG4gICAgICBbYCR7dHlwZX0udmVyc2lvbmBdOiB2ZXJzaW9uLFxuICAgICAgW2Ake3R5cGV9LnVybGBdOiB1cmwsXG4gICAgICB0eXBlOiByZXBvc2l0b3J5QmluYXJ5VHlwZVxuICAgIH07XG4gICAgY29uc3QgbGVnYWN5VmVyc2lvblF1ZXJ5ID0geyB1cmwsIHR5cGUsIG5hbWUgfTtcbiAgICBmaWx0ZXJzID0geyB3aXRoQ2hpbGRyZW46IGZhbHNlLCB3aXRoUGFyZW50czogdHJ1ZSwgLi4uZmlsdGVycyB9O1xuXG4gICAgaWYgKHNraXBMZWdhY3kpIHtcbiAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICBfX2FuZDoge1xuICAgICAgICAgIC4uLm5ld01vZGVsQmFzZVZlcnNpb25RdWVyeVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeSA9IHtcbiAgICAgICAgX19vcjogW3sgX19hbmQ6IHsgLi4ubmV3TW9kZWxCYXNlVmVyc2lvblF1ZXJ5IH0gfSwgeyBfX2FuZDogeyAuLi5sZWdhY3lWZXJzaW9uUXVlcnkgfSB9XVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdFF1ZXJ5KHF1ZXJ5LCBmaWx0ZXJzKS50aGVuKCh7IGRhdGEgfSkgPT4gaGVhZChkYXRhKSk7XG4gIH1cblxuICBnZXRCaW5hcnlOYW1lJChiaW5hcnlVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKCFiaW5hcnlVcmwpIHtcbiAgICAgIHJldHVybiBvZignLS0tJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYmluYXJ5SWQgPSB0aGlzLmludmVudG9yeUJpbmFyeS5nZXRJZEZyb21VcmwoYmluYXJ5VXJsKTtcbiAgICBpZiAoIWJpbmFyeUlkKSB7XG4gICAgICByZXR1cm4gb2YoYmluYXJ5VXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHRoaXMuaW52ZW50b3J5LmRldGFpbChiaW5hcnlJZCkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpKS5waXBlKFxuICAgICAgbWFwKG1vID0+IG1vLm5hbWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gaW52ZW50b3J5IHF1ZXJ5IG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBmaW5kXG4gICAqIHJlcG9zaXRvcnkgZW50cmllcyBvZiBzcGVjaWZpZWQgdHlwZSBtYXRjaGluZyB0aGUgdHlwZSBvZiBwcm92aWRlZCBkZXZpY2UuXG4gICAqIEBwYXJhbSByZXBvc2l0b3J5VHlwZSBUaGUgdHlwZSBvZiByZXBvc2l0b3J5IGVudHJpZXMgd2hpY2ggd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICovXG5cbiAgZ2V0RGV2aWNlVHlwZVF1ZXJ5KHJlcG9zaXRvcnlUeXBlOiBSZXBvc2l0b3J5VHlwZSwgZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IG9iamVjdCB7XG4gICAgbGV0IHJlc3VsdCA9IHsgdHlwZTogcmVwb3NpdG9yeVR5cGUgfTtcbiAgICBpZiAocmVwb3NpdG9yeVR5cGUgPT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgIGlmIChkZXZpY2UudHlwZSkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihyZXN1bHQsIHtcbiAgICAgICAgICBfX29yOiBbeyBkZXZpY2VUeXBlOiBkZXZpY2UudHlwZSB9LCB7IF9fbm90OiB7IF9faGFzOiBgZGV2aWNlVHlwZWAgfSB9XVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocmVzdWx0LCB7XG4gICAgICAgIF9fb3I6IFtcbiAgICAgICAgICB7ICdjOHlfRmlsdGVyLnR5cGUnOiBkZXZpY2UudHlwZSB9LFxuICAgICAgICAgIHsgJ2M4eV9GaWx0ZXIudHlwZSc6ICcnIH0sXG4gICAgICAgICAgeyBfX25vdDogeyBfX2hhczogYGM4eV9GaWx0ZXIudHlwZWAgfSB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIGludmVudG9yeSBxdWVyeSBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZmluZFxuICAgKiByZXBvc2l0b3J5IGVudHJpZXMgbWF0Y2hpbmcgdGhlIHByZWRlZmluZWQgc29mdHdhcmUgdHlwZXMgcHJvdmlkZWQgaW4gdGhlIGRldmljZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byB3aGljaCB0aGUgc29mdHdhcmUgdHlwZXMgZmlsdGVycyB3aWxsIGJlIGF0dGFjaGVkLiBEZWZhdWx0IHZhbHVlIGlzIGFuIG9iamVjdCBjb250YWluZyByZXBvc2l0b3J5IHR5cGUgc29mdHdhcmUuXG4gICAqL1xuICBnZXRTb2Z0d2FyZVR5cGVRdWVyeShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBxdWVyeT86IG9iamVjdCk6IG9iamVjdCB7XG4gICAgbGV0IHJlc3VsdCA9IHsgLi4uKHF1ZXJ5IHx8IHt9KSwgdHlwZTogUmVwb3NpdG9yeVR5cGUuU09GVFdBUkUgfTtcblxuICAgIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZFNvZnR3YXJlVHlwZXMpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHJlc3VsdCwge1xuICAgICAgICBfX29yOiBbZGV2aWNlLmM4eV9TdXBwb3J0ZWRTb2Z0d2FyZVR5cGVzLm1hcCh0eXBlID0+ICh7IHNvZnR3YXJlVHlwZTogdHlwZSB9KSldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBpbnZlbnRvcnkgcXVlcnkgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZpbmQgY29uZmlndXJhdGlvbiByZXBvc2l0b3J5IGVudHJpZXNcbiAgICogbWF0Y2hpbmcgdGhlIHR5cGUgb2YgcHJvdmlkZWQgZGV2aWNlIGFuZCBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG1hdGNoaW5nIHJlcG9zaXRvcnkgZW50cmllcyB3aWxsIGJlIHF1ZXJpZWQgd2l0aCB0aGUgZ2VuZXJhdGVkIHF1ZXJ5LlxuICAgKiBAcGFyYW0gY29uZmlndXJhdGlvblR5cGUgQ29uZmlndXJhdGlvbiB0eXBlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICovXG4gIGdldENvbmZpZ3VyYXRpb25UeXBlUXVlcnkoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCwgY29uZmlndXJhdGlvblR5cGU6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldERldmljZVR5cGVRdWVyeShSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OLCBkZXZpY2UpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihxdWVyeSwge1xuICAgICAgX19vcjogW1xuICAgICAgICB7IGNvbmZpZ3VyYXRpb25UeXBlIH0sXG4gICAgICAgIHsgY29uZmlndXJhdGlvblR5cGU6ICcnIH0sXG4gICAgICAgIHsgX19ub3Q6IHsgX19oYXM6IGBjb25maWd1cmF0aW9uVHlwZWAgfSB9XG4gICAgICBdXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBzb2Z0d2FyZSBpbnN0YWxsZWQgaW4gdGhlIGRldmljZSBpbiB0aGUgdW5pZm9ybSBmb3JtYXQuXG4gICAqIFN1cHBvcnRzIGM4eV9Tb2Z0d2FyZUxpc3QgYW5kIGM4eV9Tb2Z0d2FyZSBmcmFnbWVudHMuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSB3aG9zZSBzb2Z0d2FyZSBsaXN0IHNob3VsZCBiZSByZXR1cm5lZC5cbiAgICovXG4gIGdldERldmljZVNvZnR3YXJlTGlzdChkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogRGV2aWNlU29mdHdhcmVbXSB7XG4gICAgaWYgKGRldmljZS5jOHlfU29mdHdhcmVMaXN0KSB7XG4gICAgICByZXR1cm4gY2xvbmVEZWVwKGRldmljZS5jOHlfU29mdHdhcmVMaXN0KTtcbiAgICB9XG4gICAgaWYgKGRldmljZS5jOHlfU29mdHdhcmUpIHtcbiAgICAgIHJldHVybiBfbWFwKGRldmljZS5jOHlfU29mdHdhcmUsICh2ZXJzaW9uLCBuYW1lKSA9PiAoeyBuYW1lLCB2ZXJzaW9uIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgc29mdHdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlIGFuZCB0aGUgbGlzdCBvZiBjaGFuZ2VzLCBhbmQgc2VuZHMgaXQgdG8gdGhlIGRldmljZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIHdoaWNoIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciBhbmQgc2VudCB0by5cbiAgICogQHBhcmFtIGNoYW5nZXMgVGhlIGxpc3Qgb2Ygc29mdHdhcmUgY2hhbmdlcyB3aGljaCBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBhd2FpdCB0aGlzLmdldFNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZSwgY2hhbmdlcyk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLm9wZXJhdGlvbi5jcmVhdGUob3BlcmF0aW9uKSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIHNvZnR3YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY2hhbmdlcy5cbiAgICogUmV0dXJuZWQgb3BlcmF0aW9uIHR5cGUgZGVwZW5kcyBvbiBkZXZpY2UncyBzdXBwb3J0ZWQgb3BlcmF0aW9ucy5cbiAgICogU3VwcG9ydHMgYzh5X1NvZnR3YXJlVXBkYXRlLCBjOHlfU29mdHdhcmVMaXN0LCBhbmQgYzh5X1NvZnR3YXJlIG9wZXJhdGlvbnMuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZC5cbiAgICogQHBhcmFtIGNoYW5nZXMgVGhlIGxpc3Qgb2Ygc29mdHdhcmUgY2hhbmdlcyB3aGljaCBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIGFzeW5jIGdldFNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb246IElPcGVyYXRpb24gPSB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBBcHBseSBzb2Z0d2FyZSBjaGFuZ2VzOiAke2NoYW5nZXNcbiAgICAgICAgLm1hcChcbiAgICAgICAgICBjaGFuZ2UgPT5cbiAgICAgICAgICAgIGAke2NoYW5nZS5hY3Rpb259IFwiJHtjaGFuZ2UubmFtZX1cIiR7XG4gICAgICAgICAgICAgIGNoYW5nZS52ZXJzaW9uID8gYCAodmVyc2lvbjogJHtjaGFuZ2UudmVyc2lvbn0pYCA6ICcnXG4gICAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICAgIC5qb2luKCcsICcpfWBcbiAgICB9O1xuICAgIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMuaW5jbHVkZXMoJ2M4eV9Tb2Z0d2FyZVVwZGF0ZScpKSB7XG4gICAgICBvcGVyYXRpb24uYzh5X1NvZnR3YXJlVXBkYXRlID0gKGNsb25lRGVlcChjaGFuZ2VzKSB8fCBbXSkubWFwKGNoYW5nZSA9PlxuICAgICAgICBvbWl0QnkoY2hhbmdlLCBpc05pbClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMuaW5jbHVkZXMoJ2M4eV9Tb2Z0d2FyZUxpc3QnKSkge1xuICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QgPSBjbG9uZURlZXAoXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VycmVudFNvZnR3YXJlKGRldmljZSwgJ2M4eV9Tb2Z0d2FyZUxpc3QnLCBbXSlcbiAgICAgICk7XG4gICAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgICAgY29uc3QgZGV2aWNlU29mdHdhcmU6IERldmljZVNvZnR3YXJlID0gcGljayhvbWl0QnkoY2hhbmdlLCBpc05pbCksIFtcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgJ3ZlcnNpb24nLFxuICAgICAgICAgICd1cmwnLFxuICAgICAgICAgICdzb2Z0d2FyZVR5cGUnXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICByZW1vdmUob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QsIGRldmljZVNvZnR3YXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICAgICAgY29uc3Qgc29mdHdhcmVJdGVtVG9VcGRhdGVJZHggPSBvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0ubmFtZSA9PT0gY2hhbmdlLm5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChzb2Z0d2FyZUl0ZW1Ub1VwZGF0ZUlkeCA+IC0xKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc29mdHdhcmVcbiAgICAgICAgICAgIG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LnNwbGljZShzb2Z0d2FyZUl0ZW1Ub1VwZGF0ZUlkeCwgMSwgZGV2aWNlU29mdHdhcmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbnN0YWxsIHNvZnR3YXJlXG4gICAgICAgICAgICBvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdC5wdXNoKGRldmljZVNvZnR3YXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZGV2aWNlLmM4eV9TdXBwb3J0ZWRPcGVyYXRpb25zLmluY2x1ZGVzKCdjOHlfU29mdHdhcmUnKSkge1xuICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSA9IGNsb25lRGVlcChhd2FpdCB0aGlzLmdldEN1cnJlbnRTb2Z0d2FyZShkZXZpY2UsICdjOHlfU29mdHdhcmUnLCB7fSkpO1xuICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2UuYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIGRlbGV0ZSBvcGVyYXRpb24uYzh5X1NvZnR3YXJlW2NoYW5nZS5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZVtjaGFuZ2UubmFtZV0gPSBjaGFuZ2UudmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGxpc3Qgb2YgZGV2aWNlIHNvZnR3YXJlIGNoYW5nZXMgZnJvbSBnaXZlbiBvcGVyYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgZ2l2ZW4gZGV2aWNlLlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gZnJvbSB3aGljaCB0aGUgbGlzdCBzaG91bGQgYmUgZXh0cmFjdGVkLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSB0YXJnZXQgZGV2aWNlIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICBhc3luYyBnZXREZXZpY2VTb2Z0d2FyZUNoYW5nZXNGcm9tT3BlcmF0aW9uKFxuICAgIG9wZXJhdGlvbjogSU9wZXJhdGlvbixcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0XG4gICk6IFByb21pc2U8RGV2aWNlU29mdHdhcmVDaGFuZ2VbXT4ge1xuICAgIGlmIChvcGVyYXRpb24uYzh5X1NvZnR3YXJlVXBkYXRlKSB7XG4gICAgICByZXR1cm4gY2xvbmVEZWVwKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVVcGRhdGUpO1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERldmljZVNvZnR3YXJlQ2hhbmdlc0Zyb21Tb2Z0d2FyZUxpc3RPcGVyYXRpb24ob3BlcmF0aW9uLCBkZXZpY2UpO1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlU29mdHdhcmVDaGFuZ2VzRnJvbVNvZnR3YXJlT3BlcmF0aW9uKG9wZXJhdGlvbiwgZGV2aWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgZmlybXdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlIGFuZCB0aGUgc2VsZWN0ZWQgcmVwb3NpdG9yeSBiaW5hcnksIGFuZCBzZW5kcyBpdCB0byB0aGUgZGV2aWNlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2Ugd2hpY2ggdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIGFuZCBzZW50IHRvLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRPcHRpb24gVGhlIHNlbGVjdGVkIHJlcG9zaXRvcnkgYmluYXJ5IG9wdGlvbi5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgc2VsZWN0ZWRPcHRpb246IFNlbGVjdGVkUmVwb3NpdG9yeUJpbmFyeVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLmdldEZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZSwgc2VsZWN0ZWRPcHRpb24pO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5vcGVyYXRpb24uY3JlYXRlKG9wZXJhdGlvbikpLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBmaXJtd2FyZSB1cGRhdGUgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UgYW5kIHNlbGVjdGVkIHZlcnNpb24uXG4gICAqIFN1cHBvcnRzIGM4eV9GaXJtd2FyZSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZC5cbiAgICogQHBhcmFtIHNlbGVjdGVkT3B0aW9uIFNlbGVjdGVkIGZpcm13YXJlIHZlcnNpb24uXG4gICAqL1xuICBnZXRGaXJtd2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RlZFJlcG9zaXRvcnlCaW5hcnlcbiAgKTogSU9wZXJhdGlvbiB7XG4gICAgZGVsZXRlIHNlbGVjdGVkT3B0aW9uLmlkO1xuXG4gICAgY29uc3Qgb3BlcmF0aW9uOiBJT3BlcmF0aW9uID0ge1xuICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgVXBkYXRlIGZpcm13YXJlIHRvOiBcIiR7c2VsZWN0ZWRPcHRpb24ubmFtZX1cIiR7XG4gICAgICAgIHNlbGVjdGVkT3B0aW9uLnZlcnNpb24gPyBgICh2ZXJzaW9uOiAke3NlbGVjdGVkT3B0aW9uLnZlcnNpb259KWAgOiAnJ1xuICAgICAgfWAsXG4gICAgICBjOHlfRmlybXdhcmU6IHsgLi4uc2VsZWN0ZWRPcHRpb24gfVxuICAgIH07XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgY29uZmlndXJhdGlvbiBmaWxlIHVwbG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBpc0xlZ2FjeSAgQSBsZWdhY3kgb3BlcmF0aW9uIGlzIGNyZWF0ZWQgd2l0aG91dCBhIGNvbmZpZ3VyYXRpb25UeXBlLlxuICAgKi9cbiAgZ2V0VXBsb2FkQ29uZmlndXJhdGlvbkZpbGVPcGVyYXRpb24oXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBjb25maWd1cmF0aW9uVHlwZTogc3RyaW5nLFxuICAgIGlzTGVnYWN5OiBib29sZWFuID0gZmFsc2VcbiAgKTogSU9wZXJhdGlvbiB7XG4gICAgaWYgKGlzTGVnYWN5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFJldHJpZXZlIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgZnJvbSBkZXZpY2UgJHtkZXZpY2UubmFtZX1gLFxuICAgICAgICBjOHlfVXBsb2FkQ29uZmlnRmlsZToge31cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBSZXRyaWV2ZSAke2NvbmZpZ3VyYXRpb25UeXBlfSBjb25maWd1cmF0aW9uIHNuYXBzaG90IGZyb20gZGV2aWNlICR7ZGV2aWNlLm5hbWV9YCxcbiAgICAgIGM4eV9VcGxvYWRDb25maWdGaWxlOiB7XG4gICAgICAgIHR5cGU6IGNvbmZpZ3VyYXRpb25UeXBlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSBkb3dubG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBiaW5hcnlVcmwgVGhlIHVybCBvZiBhIGJpbmFyeSB0byBiZSBkb3dubG9hZGVkLlxuICAgKiBAcGFyYW0gaXNMZWdhY3kgQSBsZWdhY3kgb3BlcmF0aW9uIGlzIGNyZWF0ZWQgd2l0aG91dCBhIGNvbmZpZ3VyYXRpb25UeXBlLlxuICAgKi9cbiAgZ2V0RG93bmxvYWRDb25maWd1cmF0aW9uRmlsZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNvbmZpZ3VyYXRpb25UeXBlOiBzdHJpbmcsXG4gICAgY29uZmlnU25hcHNob3Q6IENvbmZpZ3VyYXRpb25TbmFwc2hvdCxcbiAgICBpc0xlZ2FjeTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IElPcGVyYXRpb24ge1xuICAgIGlmIChpc0xlZ2FjeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBTZW5kIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgJHtjb25maWdTbmFwc2hvdC5uYW1lfSB0byBkZXZpY2UgJHtkZXZpY2UubmFtZX1gLFxuICAgICAgICBjOHlfRG93bmxvYWRDb25maWdGaWxlOiB7XG4gICAgICAgICAgdXJsOiBjb25maWdTbmFwc2hvdC5iaW5hcnlVcmwsXG4gICAgICAgICAgYzh5X0NvbmZpZ3VyYXRpb25EdW1wOiB7XG4gICAgICAgICAgICBpZDogY29uZmlnU25hcHNob3QuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBTZW5kIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgJHtjb25maWdTbmFwc2hvdC5uYW1lfSBvZiBjb25maWd1cmF0aW9uIHR5cGUgJHtjb25maWd1cmF0aW9uVHlwZX0gdG8gZGV2aWNlICR7ZGV2aWNlLm5hbWV9YCxcbiAgICAgIGM4eV9Eb3dubG9hZENvbmZpZ0ZpbGU6IHtcbiAgICAgICAgdXJsOiBjb25maWdTbmFwc2hvdC5iaW5hcnlVcmwsXG4gICAgICAgIHR5cGU6IGNvbmZpZ3VyYXRpb25UeXBlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXN0IGZpcm13YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZS5cbiAgICogTG9va3MgZm9yIGM4eV9GaXJtd2FyZSBvcGVyYXRpb25zLlxuICAgKiBAcGFyYW0gZGV2aWNlSWQgVGhlIElEIG9mIHRoZSBkZXZpY2UgdG8gZmluZCBhbiBvcGVyYXRpb24gZm9yLlxuICAgKi9cbiAgYXN5bmMgZ2V0TGFzdEZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgZGV2aWNlSWQsXG4gICAgICBkYXRlRnJvbTogbmV3IERhdGUoMCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRhdGVUbzogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIHJldmVydDogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdE1hdGNoaW5nT3BlcmF0aW9uKFt7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9GaXJtd2FyZScgfV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhc3Qgc29mdHdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlLlxuICAgKiBMb29rcyBmb3IgYzh5X1NvZnR3YXJlVXBkYXRlLCBjOHlfU29mdHdhcmVMaXN0LCBvciBjOHlfU29mdHdhcmUgb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIGRldmljZUlkIFRoZSBJRCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQgYW4gb3BlcmF0aW9uIGZvci5cbiAgICovXG4gIGFzeW5jIGdldExhc3RTb2Z0d2FyZVVwZGF0ZU9wZXJhdGlvbihkZXZpY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxJT3BlcmF0aW9uPiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIGRldmljZUlkLFxuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICByZXZlcnQ6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0TWF0Y2hpbmdPcGVyYXRpb24oW1xuICAgICAgeyAuLi5maWx0ZXJzLCBmcmFnbWVudFR5cGU6ICdjOHlfU29mdHdhcmVVcGRhdGUnIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9Tb2Z0d2FyZUxpc3QnIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9Tb2Z0d2FyZScgfVxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgdGhlIGxpc3Qgb2YgZmlsdGVycyBhbmQgcXVlcmllcyB0aGUgb3BlcmF0aW9ucy5cbiAgICogSWYgYSBxdWVyeSByZXR1cm5zIGF0IGxlYXN0IG9uZSBvcGVyYXRpb24sIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogT3RoZXJ3aXNlIHRoZSBuZXh0IHF1ZXJ5IHdpbGwgYmUgcGVyZm9ybWVkLlxuICAgKiBJZiBub25lIG9mIHRoZSBxdWVyaWVzIHJldHVybnMgYW55IG9wZXJhdGlvbiwgbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gZmlsdGVyc0xpc3QgVGhlIGxpc3Qgb2YgZmlsdGVycyBmb3IgdGhlIHF1ZXJpZXMuXG4gICAqL1xuICBhc3luYyBnZXRGaXJzdE1hdGNoaW5nT3BlcmF0aW9uKGZpbHRlcnNMaXN0OiBhbnlbXSk6IFByb21pc2U8SU9wZXJhdGlvbj4ge1xuICAgIGxldCBtYXRjaGluZ09wZXJhdGlvbiA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlcnMgb2YgZmlsdGVyc0xpc3QpIHtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbnMgPSAoYXdhaXQgdGhpcy5vcGVyYXRpb24ubGlzdChmaWx0ZXJzKSkuZGF0YTtcbiAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBtYXRjaGluZ09wZXJhdGlvbiA9IG9wZXJhdGlvbnNbMF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGluZ09wZXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIHRoZSBsaXN0IG9mIGZpbHRlcnMgYW5kIHF1ZXJpZXMgdGhlIG9wZXJhdGlvbnMuXG4gICAqIEl0IGNvbXBhcmVzIHRoZSBvcGVyYXRpb25zIHJldHJpZXZlZCBieSB0aGUgcXVlcmllcyBieSAnY3JlYXRpb25UaW1lJ1xuICAgKiBhbmQgcmV0dXJuIHRoZSBsYXRlc3Qgb25lLlxuICAgKiBJZiBub25lIG9mIHRoZSBxdWVyaWVzIHJldHVybnMgYW55IG9wZXJhdGlvbiwgbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gZmlsdGVyc0xpc3QgVGhlIGxpc3Qgb2YgZmlsdGVycyBmb3IgdGhlIHF1ZXJpZXMuXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RNYXRjaGluZ09wZXJhdGlvbihmaWx0ZXJzTGlzdDogYW55W10pOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBsZXQgbWF0Y2hpbmdPcGVyYXRpb246IElPcGVyYXRpb24gPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXJzIG9mIGZpbHRlcnNMaXN0KSB7XG4gICAgICBjb25zdCBvcGVyYXRpb25zOiBJT3BlcmF0aW9uW10gPSAoYXdhaXQgdGhpcy5vcGVyYXRpb24ubGlzdChmaWx0ZXJzKSkuZGF0YTtcbiAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgICBtYXRjaGluZ09wZXJhdGlvbiA9XG4gICAgICAgICAgICBuZXcgRGF0ZShtYXRjaGluZ09wZXJhdGlvbi5jcmVhdGlvblRpbWUpLmdldFRpbWUoKSA8XG4gICAgICAgICAgICBuZXcgRGF0ZShvcGVyYXRpb25zWzBdLmNyZWF0aW9uVGltZSkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgID8gb3BlcmF0aW9uc1swXVxuICAgICAgICAgICAgICA6IG1hdGNoaW5nT3BlcmF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdGNoaW5nT3BlcmF0aW9uID0gb3BlcmF0aW9uc1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGluZ09wZXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBvcGVyYXRpb24gYW5kIHJldHVybnMgYW4gb2JzZXJ2YWJsZSB0byB0cmFjayBpdHMgcHJvZ3Jlc3MuXG4gICAqIEZhaWxzIHRoZSBvYnNlcnZhYmxlIHdoZW4gdGhlIG9wZXJhdGlvbiByZXR1cm5zIEZBSUxFRCBzdGF0dXMuXG4gICAqIENvbXBsZXRlcyB0aGUgb2JzZXJ2YWJsZSB3aGVuIHRoZSBvcGVyYXRpb24gcmV0dXJucyBTVUNDRVNTRlVMIHN0YXR1cy5cbiAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIGNyZWF0ZSBhbmQgdHJhY2suXG4gICAqL1xuICBjcmVhdGVPYnNlcnZlZE9wZXJhdGlvbihvcGVyYXRpb246IElPcGVyYXRpb24pOiBPYnNlcnZhYmxlPElPcGVyYXRpb24+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLm9wZXJhdGlvbi5jcmVhdGUob3BlcmF0aW9uKSkucGlwZShcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcChjcmVhdGVkT3BlcmF0aW9uID0+IHRoaXMub2JzZXJ2ZU9wZXJhdGlvbihjcmVhdGVkT3BlcmF0aW9uKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSB0byB0cmFjayBwcm9ncmVzcyBvZiBnaXZlbiBvcGVyYXRpb24uXG4gICAqIEZhaWxzIHRoZSBvYnNlcnZhYmxlIHdoZW4gdGhlIG9wZXJhdGlvbiByZXR1cm5zIEZBSUxFRCBzdGF0dXMuXG4gICAqIENvbXBsZXRlcyB0aGUgb2JzZXJ2YWJsZSB3aGVuIHRoZSBvcGVyYXRpb24gcmV0dXJucyBTVUNDRVNTRlVMIHN0YXR1cy5cbiAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIGJlIG9ic2VydmVkLlxuICAgKi9cbiAgb2JzZXJ2ZU9wZXJhdGlvbihvcGVyYXRpb246IElPcGVyYXRpb24pOiBPYnNlcnZhYmxlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvYnNlcnZlZE9wZXJhdGlvbiQgPSBvZihvcGVyYXRpb24pO1xuICAgIGNvbnN0IG9wZXJhdGlvblVwZGF0ZXMkID0gb2JzZXJ2ZWRPcGVyYXRpb24kLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAob2JzZXJ2ZWRPcGVyYXRpb24gPT4gdGhpcy5vcGVyYXRpb25SZWFsdGltZS5vbkFsbCQob2JzZXJ2ZWRPcGVyYXRpb24uZGV2aWNlSWQpKSxcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEgYXMgSU9wZXJhdGlvbiksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShvYnNlcnZlZE9wZXJhdGlvbiQpLFxuICAgICAgZmlsdGVyKChbb3BlcmF0aW9uVXBkYXRlLCBvYnNlcnZlZE9wZXJhdGlvbl0pID0+IG9wZXJhdGlvblVwZGF0ZS5pZCA9PT0gb2JzZXJ2ZWRPcGVyYXRpb24uaWQpLFxuICAgICAgc3dpdGNoTWFwKChbb3BlcmF0aW9uVXBkYXRlXSkgPT4ge1xuICAgICAgICBpZiAob3BlcmF0aW9uVXBkYXRlLnN0YXR1cyA9PT0gT3BlcmF0aW9uU3RhdHVzLkZBSUxFRCkge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKG9wZXJhdGlvblVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG9wZXJhdGlvblVwZGF0ZSk7XG4gICAgICB9KSxcbiAgICAgIHRha2VXaGlsZShvcGVyYXRpb25VcGRhdGUgPT4gb3BlcmF0aW9uVXBkYXRlLnN0YXR1cyAhPT0gT3BlcmF0aW9uU3RhdHVzLlNVQ0NFU1NGVUwsIHRydWUpXG4gICAgKTtcbiAgICByZXR1cm4gbWVyZ2Uob2JzZXJ2ZWRPcGVyYXRpb24kLCBvcGVyYXRpb25VcGRhdGVzJCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHNpbmdsZSBldmVudCB3aXRoIGxhdGVzdCBjcmVhdGlvblRpbWUgZm9yIHRoZSBnaXZlbiBkZXZpY2UgSWQgYW5kIGV2ZW50IHR5cGUuXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgZGV2aWNlIElkIGZvciB3aGljaCB0aGUgZXZlbnRzIHNob3VsZCBiZSBxdWVyaWVkLlxuICAgKiBAcGFyYW0gdHlwZSBFdmVudCB0eXBlLlxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0Q29uZmlndXJhdGlvbkV2ZW50KFxuICAgIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgdHlwZTogc3RyaW5nXG4gICk6IFByb21pc2U8SUV2ZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXZlbnRGaWx0ZXI6IG9iamVjdCA9IHtcbiAgICAgIHNvdXJjZTogZGV2aWNlSWQsXG4gICAgICB0eXBlLFxuICAgICAgZGF0ZUZyb206IHRoaXMuZGF0ZUZyb20udG9JU09TdHJpbmcoKSxcbiAgICAgIGRhdGVUbzogdGhpcy5kYXRlVG8udG9JU09TdHJpbmcoKSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5ldmVudC5saXN0KGV2ZW50RmlsdGVyKTtcbiAgICByZXR1cm4gZGF0YVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbGlzdCBvZiBvcGVyYXRpb25zIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIElkLCBhbmQgb3BlcmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgZGV2aWNlIElkIGZvciB3aGljaCB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBxdWVyaWVkLlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uVHlwZSBPcGVyYXRpb24gdHlwZSBmcmFnbWVudC5cbiAgICovXG4gIGFzeW5jIGdldENvbmZpZ0ZpbGVPcGVyYXRpb25MaXN0KFxuICAgIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgb3BlcmF0aW9uVHlwZTogc3RyaW5nXG4gICk6IFByb21pc2U8SU9wZXJhdGlvbltdPiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uRmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBkZXZpY2VJZCxcbiAgICAgIGZyYWdtZW50VHlwZTogb3BlcmF0aW9uVHlwZSxcbiAgICAgIGRhdGVGcm9tOiB0aGlzLmRhdGVGcm9tLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IHRoaXMuZGF0ZVRvLnRvSVNPU3RyaW5nKCksXG4gICAgICByZXZlcnQ6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH07XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMub3BlcmF0aW9uLmxpc3Qob3BlcmF0aW9uRmlsdGVyKSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGxhdGVzdCB1cGxvYWRlZCBjb25maWd1cmF0aW9uIHNuYXBzaG90IGZvciB0aGUgZ2l2ZW4gZGV2aWNlLCBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIHNuYXBzaG90IHdhcyB1cGxvYWRlZC5cbiAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb25UeXBlIFNlbGVjdGVkIGNvbmZpZ3VyYXRpb24gdHlwZS5cbiAgICovXG4gIGFzeW5jIGdldENvbmZpZ1NuYXBzaG90KFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY29uZmlndXJhdGlvblR5cGU6IHN0cmluZ1xuICApOiBQcm9taXNlPENvbmZpZ3VyYXRpb25TbmFwc2hvdCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGV2ZW50OiBJRXZlbnQgPSBhd2FpdCB0aGlzLmdldExhdGVzdENvbmZpZ3VyYXRpb25FdmVudChkZXZpY2UuaWQsIGNvbmZpZ3VyYXRpb25UeXBlKTtcbiAgICBsZXQgY29uZmlnU25hcHNob3Q6IENvbmZpZ3VyYXRpb25TbmFwc2hvdDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbmZpZ1NuYXBzaG90ID0ge1xuICAgICAgICB0aW1lOiBldmVudC50aW1lLFxuICAgICAgICBuYW1lOiBldmVudC50ZXh0LFxuICAgICAgICBkZXZpY2VUeXBlOiBkZXZpY2UudHlwZSxcbiAgICAgICAgY29uZmlndXJhdGlvblR5cGVcbiAgICAgIH07XG4gICAgICB0cnkge1xuICAgICAgICBjb25maWdTbmFwc2hvdC5iaW5hcnkgPSBhd2FpdCAoYXdhaXQgdGhpcy5ldmVudEJpbmFyeS5kb3dubG9hZChldmVudCkpLnRleHQoKTtcbiAgICAgICAgaWYgKGV2ZW50LmM4eV9Jc0JpbmFyeSkge1xuICAgICAgICAgIGNvbmZpZ1NuYXBzaG90LmJpbmFyeVR5cGUgPSBldmVudC5jOHlfSXNCaW5hcnkudHlwZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnQ291bGQgbm90IGdldCB0aGUgYmluYXJ5LicpO1xuICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU25hcHNob3Q7XG4gIH1cblxuICBhc3luYyBnZXRMZWdhY3lDb25maWdTbmFwc2hvdChkZXZpY2VJZCkge1xuICAgIGxldCBjb25maWdTbmFwc2hvdDogQ29uZmlndXJhdGlvblNuYXBzaG90O1xuICAgIGxldCBtbztcbiAgICBjb25zdCBkZXZpY2UgPSAoYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRldmljZUlkLCB7IHdpdGhDaGlsZHJlbjogZmFsc2UgfSkpLmRhdGE7XG4gICAgY29uc3Qgc25hcHNob3RJZCA9IGRldmljZS5jOHlfQ29uZmlndXJhdGlvbkR1bXAgJiYgZGV2aWNlLmM4eV9Db25maWd1cmF0aW9uRHVtcC5pZDtcbiAgICBpZiAoIXNuYXBzaG90SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbW8gPSAoYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKHNuYXBzaG90SWQpKS5kYXRhO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIGlmIChtbykge1xuICAgICAgY29uZmlnU25hcHNob3QgPSB7XG4gICAgICAgIHRpbWU6IG1vLmNyZWF0aW9uVGltZSxcbiAgICAgICAgbmFtZTogbW8ubmFtZVxuICAgICAgfTtcbiAgICAgIGNvbmZpZ1NuYXBzaG90LmJpbmFyeSA9IGF3YWl0IHRoaXMuZ2V0QmluYXJ5VGV4dChtby51cmwsIHsgYWxsb3dFeHRlcm5hbDogZmFsc2UgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWdTbmFwc2hvdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYmluYXJ5IG9iamVjdCBhcyB0ZXh0LlxuICAgKiBAcGFyYW0gYmluYXJ5VXJsIFRoZSBVUkwgdG8gZmluZCBiaW5hcnlcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICogLSAqKmFsbG93RXh0ZXJuYWwqKiAtIGBib29sZWFuYCAtIGFsbG93cyBkb3dubG9hZGluZyBleHRlcm5hbCBiaW5hcnkgZmlsZVxuICAgKiAtICoqbm9BbGVydHMqKiAtIGBib29sZWFuYCAtIGRvIG5vdCBkaXNwbGF5IGFuIGFsZXJ0IG1lc3NhZ2U7IGRlZmF1bHRzIHRvIGBmYWxzZWBcbiAgICovXG4gIGFzeW5jIGdldEJpbmFyeVRleHQoXG4gICAgYmluYXJ5VXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBhbGxvd0V4dGVybmFsOiBib29sZWFuOyBub0FsZXJ0cz86IGJvb2xlYW4gfVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJpbmFyeUlkID0gdGhpcy5pbnZlbnRvcnlCaW5hcnkuZ2V0SWRGcm9tVXJsKGJpbmFyeVVybCk7XG4gICAgbGV0IHJlcztcbiAgICBpZiAoIWJpbmFyeUlkKSB7XG4gICAgICBpZiAob3B0aW9ucy5hbGxvd0V4dGVybmFsKSB7XG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMuZ2V0RXh0ZXJuYWxCaW5hcnlSZXNwb25zZShiaW5hcnlVcmwsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmdldEludGVybmFsQmluYXJ5UmVzcG9uc2UoYmluYXJ5SWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiByZXMudGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBiaW5hcnkgb2JqZWN0IGFzIEZpbGUuXG4gICAqIEBwYXJhbSBiaW5hcnlVcmwgVGhlIFVSTCB0byBmaW5kIGJpbmFyeVxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb2JqZWN0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zOlxuICAgKiAtICoqYWxsb3dFeHRlcm5hbCoqIC0gYGJvb2xlYW5gIC0gYWxsb3dzIGRvd25sb2FkaW5nIGV4dGVybmFsIGJpbmFyeSBmaWxlXG4gICAqL1xuICBhc3luYyBnZXRCaW5hcnlGaWxlKGJpbmFyeVVybDogc3RyaW5nLCBvcHRpb25zOiB7IGFsbG93RXh0ZXJuYWw6IGJvb2xlYW4gfSk6IFByb21pc2U8RmlsZT4ge1xuICAgIGNvbnN0IGJpbmFyeUlkID0gdGhpcy5pbnZlbnRvcnlCaW5hcnkuZ2V0SWRGcm9tVXJsKGJpbmFyeVVybCk7XG4gICAgaWYgKCFiaW5hcnlJZCAmJiAhb3B0aW9ucy5hbGxvd0V4dGVybmFsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gQFRPRE86IG5vdGUgdGhhdCBpdCBkb2Vzbid0IHNvbHZlIGlzc3VlIHdpdGggZXh0ZXJuYWwgYmluYXJ5IGhlcmUsIHN1Y2ggdXJsIHdvbid0IGhhdmUgYmluYXJ5SWQsIHNvIHdlIHdvbid0IGtub3cgdGhlIG5hbWUgb3IgY29udGVudFR5cGUgdG8gdXNlIGluIEZpbGUgY29uc3RydWN0b3IsIGxldCdzIGFkZCBhIEBGSVhNRSBjb21tZW50IGZvciBub3c/XG4gICAgY29uc3QgeyBuYW1lLCBjb250ZW50VHlwZSB9ID0gKGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChiaW5hcnlJZCkpLmRhdGE7XG4gICAgY29uc3QgcmVzID0gISFiaW5hcnlJZFxuICAgICAgPyBhd2FpdCB0aGlzLmdldEludGVybmFsQmluYXJ5UmVzcG9uc2UoYmluYXJ5SWQpXG4gICAgICA6IGF3YWl0IHRoaXMuZ2V0RXh0ZXJuYWxCaW5hcnlSZXNwb25zZShiaW5hcnlVcmwpO1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKCk7XG4gICAgcmV0dXJuIG5ldyBGaWxlKFthcnJheUJ1ZmZlcl0sIG5hbWUsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFzdCBjb25maWd1cmF0aW9uIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZS5cbiAgICogTG9va3MgZm9yIGM4eV9Db25maWd1cmF0aW9uIGFuZCBjOHlfU2VuZENvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIGRldmljZUlkIFRoZSBJRCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQgYW4gb3BlcmF0aW9uIGZvci5cbiAgICovXG4gIGFzeW5jIGdldExhc3RDb25maWdVcGRhdGVPcGVyYXRpb24oZGV2aWNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8SU9wZXJhdGlvbj4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBkZXZpY2VJZCxcbiAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0lTT1N0cmluZygpLFxuICAgICAgcmV2ZXJ0OiB0cnVlLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldExhdGVzdE1hdGNoaW5nT3BlcmF0aW9uKFtcbiAgICAgIHsgLi4uZmlsdGVycywgZnJhZ21lbnRUeXBlOiAnYzh5X0NvbmZpZ3VyYXRpb24nIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9TZW5kQ29uZmlndXJhdGlvbicgfVxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgY29uZmlndXJhdGlvbiBkb3dubG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgaXRzIGN1cnJlbnQgY29uZmlndXJhdGlvbi5cbiAgICogU3VwcG9ydHMgYzh5X1NlbmRDb25maWd1cmF0aW9uIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKi9cbiAgY3JlYXRlVGV4dEJhc2VkQ29uZmlndXJhdGlvblJlbG9hZE9wZXJhdGlvbihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogSU9wZXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnUmVxdWVzdGVkIGN1cnJlbnQgY29uZmlndXJhdGlvbicpLFxuICAgICAgYzh5X1NlbmRDb25maWd1cmF0aW9uOiB7fVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBjb25maWd1cmF0aW9uIHVwZGF0ZSBvcGVyYXRpb24gZm9yIHRoZSBnaXZlbiBkZXZpY2UuXG4gICAqIFN1cHBvcnRzIGM4eV9Db25maWd1cmF0aW9uIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIHdoaWNoIHdpbGwgdXBkYXRlIHRoZSBleGlzdGluZyBvbmUuXG4gICAqL1xuICBjcmVhdGVUZXh0QmFzZWRDb25maWd1cmF0aW9uVXBkYXRlT3BlcmF0aW9uKGRldmljZTogSU1hbmFnZWRPYmplY3QsIGNvbmZpZzogc3RyaW5nKTogSU9wZXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnQ29uZmlndXJhdGlvbiB1cGRhdGUnKSxcbiAgICAgIGM4eV9Db25maWd1cmF0aW9uOiB7XG4gICAgICAgIGNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoYmluYXJ5SWQ6IElkUmVmZXJlbmNlKTogUHJvbWlzZTxJRmV0Y2hSZXNwb25zZT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuZG93bmxvYWQoYmluYXJ5SWQpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCBhdmFpbGFibGUgc25hcHNob3RzIGZyb20gdGhlIHJlcG9zaXRvcnkgZm9yIHRoZSBnaXZlbiBkZXZpY2UuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHNuYXBzaG90cyBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqL1xuICBhc3luYyBnZXRTbmFwc2hvdHNGcm9tUmVwb3NpdG9yeShkZXZpY2UsIGNvbmZpZ3VyYXRpb25UeXBlKSB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnkgPSB0aGlzLmdldENvbmZpZ3VyYXRpb25UeXBlUXVlcnkoZGV2aWNlLCBjb25maWd1cmF0aW9uVHlwZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTiwge1xuICAgICAgcXVlcnk6IHNlYXJjaFF1ZXJ5LFxuICAgICAgcGFyYW1zOiB7IHBhZ2VTaXplOiAxMDAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBkZXZpY2UgYWxyZWFkeSBoYXZlIGEgZ2l2ZW4gc29mdHdhcmUgaW5zdGFsbGVkXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBJZCBvZiB0aGUgZGV2aWNlIHRvIGJlIGNoZWNrZWRcbiAgICogQHBhcmFtIHNvZnR3YXJlIFRoZSBzb2Z0d2FyZSB0byBiZSBjaGVja2VkXG4gICAqL1xuICBhc3luYyBpc1NvZnR3YXJlSW5zdGFsbGVkT25EZXZpY2UoXG4gICAgZGV2aWNlSWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBzb2Z0d2FyZTogRGV2aWNlU29mdHdhcmVcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZS5pc0FTTUF2YWlsYWJsZSgpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0geyBkZXZpY2VJZCB9O1xuICAgIGlmIChzb2Z0d2FyZT8ubmFtZSkge1xuICAgICAgc2V0KHF1ZXJ5RmlsdGVyLCAnbmFtZScsIHNvZnR3YXJlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoc29mdHdhcmU/LnZlcnNpb24pIHtcbiAgICAgIHNldChxdWVyeUZpbHRlciwgJ3ZlcnNpb24nLCBzb2Z0d2FyZS52ZXJzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2UubGlzdChxdWVyeUZpbHRlcikudGhlbihyZXN1bHQgPT4gISFyZXN1bHQuZGF0YT8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYmluYXJ5IG9iamVjdC5cbiAgICogQHBhcmFtIGJpbmFyeUlkIGJpbmFyeSBJRFxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb2JqZWN0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zOlxuICAgKiAtICoqbm9BbGVydHMqKiAtIGBib29sZWFuYCAtIGRvIG5vdCBkaXNwbGF5IGFuIGFsZXJ0IG1lc3NhZ2U7IGRlZmF1bHRzIHRvIGBmYWxzZWBcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0SW50ZXJuYWxCaW5hcnlSZXNwb25zZShcbiAgICBiaW5hcnlJZDogSWRSZWZlcmVuY2UsXG4gICAgb3B0aW9uczogeyBub0FsZXJ0cz86IGJvb2xlYW4gfSA9IHt9XG4gICk6IFByb21pc2U8SUZldGNoUmVzcG9uc2U+IHtcbiAgICBsZXQgcmVzO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeS5kb3dubG9hZChiaW5hcnlJZCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghb3B0aW9ucy5ub0FsZXJ0cykge1xuICAgICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICAgIHRoaXMuYWxlcnQuZGFuZ2VyKG1zZyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJpbmFyeSBvYmplY3QuXG4gICAqIEBwYXJhbSBiaW5hcnlVcmwgVGhlIFVSTCB0byBmaW5kIGJpbmFyeVxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb2JqZWN0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zOlxuICAgKiAtICoqbm9BbGVydHMqKiAtIGBib29sZWFuYCAtIGRvIG5vdCBkaXNwbGF5IGFuIGFsZXJ0IG1lc3NhZ2U7IGRlZmF1bHRzIHRvIGBmYWxzZWBcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RXh0ZXJuYWxCaW5hcnlSZXNwb25zZShcbiAgICBiaW5hcnlVcmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IG5vQWxlcnRzPzogYm9vbGVhbiB9ID0ge31cbiAgKTogUHJvbWlzZTxJRmV0Y2hSZXNwb25zZT4ge1xuICAgIGxldCByZXM7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZldGNoUmVzID0gYXdhaXQgZmV0Y2goYmluYXJ5VXJsKTtcbiAgICAgIGlmIChmZXRjaFJlcy5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIHRocm93IHJlcztcbiAgICAgIH1cbiAgICAgIHJlcyA9IGZldGNoUmVzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgaWYgKCFvcHRpb25zLm5vQWxlcnRzKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0NvdWxkIG5vdCBnZXQgdGhlIGV4dGVybmFsIGJpbmFyeScpO1xuICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVFbnRyeShtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4pIHtcbiAgICBjb25zdCBiaW5hcnlJZCA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybChtby51cmwpO1xuICAgIGNvbnN0IG5ld01vID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY3JlYXRlKG1vKTtcbiAgICBpZiAoYmluYXJ5SWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQWRkKGJpbmFyeUlkLCBuZXdNby5kYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld01vO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVFbnRyeShtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sIHVybCkge1xuICAgIGNvbnN0IGV4aXN0aW5nQmluYXJ5SWQgPSBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeS5nZXRJZEZyb21VcmwodXJsKTtcbiAgICBjb25zdCBuZXdCaW5hcnlJZCA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybChtby51cmwpO1xuICAgIGlmIChleGlzdGluZ0JpbmFyeUlkICYmIGV4aXN0aW5nQmluYXJ5SWQgIT09IG5ld0JpbmFyeUlkKSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybCh1cmwpO1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuZGVsZXRlKGlkKTtcbiAgICB9XG4gICAgaWYgKG5ld0JpbmFyeUlkKSB7XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0FkZChuZXdCaW5hcnlJZCwgbW8pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkudXBkYXRlKG1vKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QmFzZVZlcnNpb25SZXN1bHRMaXN0Rm9yTGVnYWN5RW50cnkoZW50cnkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHJlczoge30gYXMgSUZldGNoUmVzcG9uc2UsXG4gICAgICBkYXRhOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICBbZW50cnkudHlwZV06IHtcbiAgICAgICAgICAgIHZlcnNpb246IGVudHJ5LnZlcnNpb24sXG4gICAgICAgICAgICB1cmw6IGVudHJ5LnVybFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0gYXMgSVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGV2aWNlU29mdHdhcmVDaGFuZ2VzRnJvbVNvZnR3YXJlTGlzdE9wZXJhdGlvbihcbiAgICBvcGVyYXRpb246IElPcGVyYXRpb24sXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPERldmljZVNvZnR3YXJlQ2hhbmdlW10+IHtcbiAgICBjb25zdCBjaGFuZ2VzOiBEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdID0gW107XG4gICAgY29uc3QgZGV2aWNlU29mdHdhcmVMaXN0ID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50U29mdHdhcmUoZGV2aWNlLCAnYzh5X1NvZnR3YXJlTGlzdCcsIFtdKTtcbiAgICBmb3JFYWNoKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LCBvcGVyYXRpb25Tb2Z0d2FyZSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2VTb2Z0d2FyZSA9IGZpbmQoZGV2aWNlU29mdHdhcmVMaXN0LCB7IG5hbWU6IG9wZXJhdGlvblNvZnR3YXJlLm5hbWUgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIChvcGVyYXRpb25Tb2Z0d2FyZSAmJiBvcGVyYXRpb25Tb2Z0d2FyZS52ZXJzaW9uKSAhPT1cbiAgICAgICAgKGRldmljZVNvZnR3YXJlICYmIGRldmljZVNvZnR3YXJlLnZlcnNpb24pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAuLi5vcGVyYXRpb25Tb2Z0d2FyZSxcbiAgICAgICAgICBhY3Rpb246ICdpbnN0YWxsJ1xuICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JFYWNoKGRldmljZVNvZnR3YXJlTGlzdCwgZGV2aWNlU29mdHdhcmUgPT4ge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uU29mdHdhcmUgPSBmaW5kKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LCB7IG5hbWU6IGRldmljZVNvZnR3YXJlLm5hbWUgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIChvcGVyYXRpb25Tb2Z0d2FyZSAmJiBvcGVyYXRpb25Tb2Z0d2FyZS52ZXJzaW9uKSAhPT1cbiAgICAgICAgKGRldmljZVNvZnR3YXJlICYmIGRldmljZVNvZnR3YXJlLnZlcnNpb24pXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW5zdGFsbENoYW5nZSA9IGNoYW5nZXMuZmluZChcbiAgICAgICAgICBjaGFuZ2UgPT4gZGV2aWNlU29mdHdhcmUubmFtZSA9PT0gY2hhbmdlLm5hbWUgJiYgY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBzb2Z0d2FyZSBpcyBub3QgYW4gaW5zdGFsbGF0aW9uIHNvZnR3YXJlIGNoYW5nZSwgb3RoZXJ3aXNlIGl0J3MgYW4gdXBkYXRlIGFuZCBub3QgYSByZW1vdmFsXG4gICAgICAgIGlmICghaW5zdGFsbENoYW5nZSkge1xuICAgICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAuLi5kZXZpY2VTb2Z0d2FyZSxcbiAgICAgICAgICAgIGFjdGlvbjogJ2RlbGV0ZSdcbiAgICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaGFuZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VTb2Z0d2FyZUNoYW5nZXNGcm9tU29mdHdhcmVPcGVyYXRpb24oXG4gICAgb3BlcmF0aW9uOiBJT3BlcmF0aW9uLFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdPiB7XG4gICAgY29uc3QgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXSA9IFtdO1xuICAgIGNvbnN0IGRldmljZVNvZnR3YXJlID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50U29mdHdhcmUoZGV2aWNlLCAnYzh5X1NvZnR3YXJlJywge30pO1xuICAgIGZvckVhY2goZGV2aWNlU29mdHdhcmUsIChkZXZpY2VTb2Z0d2FyZVZlcnNpb24sIGRldmljZVNvZnR3YXJlTmFtZSkgPT4ge1xuICAgICAgaWYgKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVbZGV2aWNlU29mdHdhcmVOYW1lXSAhPT0gZGV2aWNlU29mdHdhcmVWZXJzaW9uKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogZGV2aWNlU29mdHdhcmVOYW1lLFxuICAgICAgICAgIHZlcnNpb246IGRldmljZVNvZnR3YXJlVmVyc2lvbixcbiAgICAgICAgICBhY3Rpb246ICdkZWxldGUnXG4gICAgICAgIH0gYXMgRGV2aWNlU29mdHdhcmVDaGFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvckVhY2gob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSwgKG9wZXJhdGlvblNvZnR3YXJlVmVyc2lvbiwgb3BlcmF0aW9uU29mdHdhcmVOYW1lKSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2VTb2Z0d2FyZVZlcnNpb24gPSBkZXZpY2VTb2Z0d2FyZSAmJiBkZXZpY2VTb2Z0d2FyZVtvcGVyYXRpb25Tb2Z0d2FyZU5hbWVdO1xuICAgICAgaWYgKGRldmljZVNvZnR3YXJlVmVyc2lvbiAhPT0gb3BlcmF0aW9uU29mdHdhcmVWZXJzaW9uKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3BlcmF0aW9uU29mdHdhcmVOYW1lLFxuICAgICAgICAgIHZlcnNpb246IG9wZXJhdGlvblNvZnR3YXJlVmVyc2lvbixcbiAgICAgICAgICBhY3Rpb246ICdpbnN0YWxsJ1xuICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q3VycmVudFNvZnR3YXJlKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgc3dGcmFnbWVudDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogb2JqZWN0XG4gICk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgaXNBU01BdmFpbGFibGUgPSBhd2FpdCB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlLmlzQVNNQXZhaWxhYmxlKCk7XG4gICAgaWYgKGlzQVNNQXZhaWxhYmxlKSB7XG4gICAgICBsZXQgc29mdHdhcmVSZXN1bHRMaXN0OiBJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4gPSBhd2FpdCB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlLmxpc3QoXG4gICAgICAgIHsgZGV2aWNlSWQ6IGRldmljZS5pZCwgcGFnZVNpemU6IDEwMCB9XG4gICAgICApO1xuICAgICAgbGV0IGxpc3QgPSAoc29mdHdhcmVSZXN1bHRMaXN0Py5kYXRhIHx8IFtdKS5tYXAoc3cgPT5cbiAgICAgICAgcGljayhvbWl0Qnkoc3csIGlzTmlsKSwgWyduYW1lJywgJ3ZlcnNpb24nLCAndXJsJywgJ3NvZnR3YXJlVHlwZSddKVxuICAgICAgKTtcblxuICAgICAgd2hpbGUgKHNvZnR3YXJlUmVzdWx0TGlzdC5wYWdpbmc/Lm5leHRQYWdlKSB7XG4gICAgICAgIHNvZnR3YXJlUmVzdWx0TGlzdCA9IGF3YWl0IHNvZnR3YXJlUmVzdWx0TGlzdC5wYWdpbmcubmV4dCgpO1xuICAgICAgICBsaXN0ID0gW1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgLi4uKHNvZnR3YXJlUmVzdWx0TGlzdD8uZGF0YSB8fCBbXSkubWFwKHN3ID0+XG4gICAgICAgICAgICBwaWNrKG9taXRCeShzdywgaXNOaWwpLCBbJ25hbWUnLCAndmVyc2lvbicsICd1cmwnLCAnc29mdHdhcmVUeXBlJ10pXG4gICAgICAgICAgKVxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWxpc3Q/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpID8gbGlzdCA6IHRoaXMuc29mdHdhcmVMaXN0VG9MZWdhY3kobGlzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZXZpY2Vbc3dGcmFnbWVudF0gfHwgZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc29mdHdhcmVMaXN0VG9MZWdhY3kobGlzdDogSU1hbmFnZWRPYmplY3RbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIChsaXN0IHx8IFtdKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+ICh7IC4uLnByZXYsIFtjdXJyLm5hbWVdOiBjdXJyLnZlcnNpb24gfSksIHt9KTtcbiAgfVxufVxuIl19
|
|
1095
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3NpdG9yeS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcmVwb3NpdG9yeS9zaGFyZWQvcmVwb3NpdG9yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUNMLGtCQUFrQixFQUNsQixZQUFZLEVBT1osc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUloQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNmLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RGLE9BQU8sRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNULElBQUksRUFDSixPQUFPLEVBQ1AsR0FBRyxFQUNILElBQUksRUFDSixLQUFLLEVBQ0wsUUFBUSxFQUNSLFdBQVcsRUFDWCxHQUFHLElBQUksSUFBSSxFQUNYLE1BQU0sRUFDTixJQUFJLEVBQ0osTUFBTSxFQUNOLEdBQUcsRUFDSixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBVUwsY0FBYyxFQUNkLHVCQUF1QixFQUd4QixNQUFNLG9CQUFvQixDQUFDOzs7OztBQUc1QixNQUFNLE9BQU8saUJBQWlCO0lBSzVCLFlBQ1UsU0FBMkIsRUFDM0IsZUFBdUMsRUFDdkMsU0FBMkIsRUFDM0IsS0FB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RDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBFdmVudEJpbmFyeVNlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbiAgSWRSZWZlcmVuY2UsXG4gIElFdmVudCxcbiAgSUZldGNoUmVzcG9uc2UsXG4gIElJZGVudGlmaWVkLFxuICBJTWFuYWdlZE9iamVjdCxcbiAgSU1hbmFnZWRPYmplY3RCaW5hcnksXG4gIEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElPcGVyYXRpb24sXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBPcGVyYXRpb25TZXJ2aWNlLFxuICBPcGVyYXRpb25TdGF0dXMsXG4gIFF1ZXJpZXNVdGlsXG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgZ2V0dGV4dCwgT3BlcmF0aW9uUmVhbHRpbWVTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBhc3NpZ24sXG4gIGNsb25lRGVlcCxcbiAgZmluZCxcbiAgZm9yRWFjaCxcbiAgZ2V0LFxuICBoZWFkLFxuICBpc05pbCxcbiAgaXNTdHJpbmcsXG4gIGlzVW5kZWZpbmVkLFxuICBtYXAgYXMgX21hcCxcbiAgb21pdEJ5LFxuICBwaWNrLFxuICByZW1vdmUsXG4gIHNldFxufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgZGVmZXIsIGZyb20sIG1lcmdlLCBPYnNlcnZhYmxlLCBvZiwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVdoaWxlLCB3aXRoTGF0ZXN0RnJvbSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlIH0gZnJvbSAnLi9hZHZhbmNlZC1zb2Z0d2FyZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25TbmFwc2hvdCxcbiAgRGV2aWNlRmlybXdhcmUsXG4gIERldmljZVNvZnR3YXJlLFxuICBEZXZpY2VTb2Z0d2FyZUNoYW5nZSxcbiAgRmlybXdhcmVCaW5hcnksXG4gIEZpcm13YXJlUGF0Y2hCaW5hcnksXG4gIE1vZGFsTW9kZWwsXG4gIFJlcG9zaXRvcnlCaW5hcnksXG4gIFJlcG9zaXRvcnlDYXRlZ29yeSxcbiAgUmVwb3NpdG9yeVR5cGUsXG4gIFJFUE9TSVRPUllfQklOQVJZX1RZUEVTLFxuICBTZWxlY3RlZFJlcG9zaXRvcnlCaW5hcnksXG4gIFNvZnR3YXJlQmluYXJ5XG59IGZyb20gJy4vcmVwb3NpdG9yeS5tb2RlbCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXBvc2l0b3J5U2VydmljZSB7XG4gIHJlYWRvbmx5IGRhdGVGcm9tID0gbmV3IERhdGUoMCk7XG4gIHJlYWRvbmx5IGRhdGVUbyA9IG5ldyBEYXRlKERhdGUubm93KCkgKyA4NjQwMDAwMCk7IC8vIDEgZGF5IGluIHRoZSBmdXR1cmVcbiAgcHJpdmF0ZSBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlCaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvcGVyYXRpb246IE9wZXJhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnQ6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIG9wZXJhdGlvblJlYWx0aW1lOiBPcGVyYXRpb25SZWFsdGltZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudEJpbmFyeTogRXZlbnRCaW5hcnlTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2U6IEFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucXVlcmllc1V0aWwgPSBuZXcgUXVlcmllc1V0aWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMaXN0cyByZXBvc2l0b3J5IGVudHJpZXMgb2YgZ2l2ZW4gdHlwZS5cbiAgICogQHBhcmFtIHR5cGUgVGhlIHR5cGUgb2YgcmVwb3NpdG9yeSBlbnRyaWVzIHRvIGxpc3QuXG4gICAqIEBwYXJhbSBvcHRpb25zIEV4dHJhIGxpc3Rpbmcgb3B0aW9ucy5cbiAgICovXG4gIGxpc3RSZXBvc2l0b3J5RW50cmllcyhcbiAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZSxcbiAgICBvcHRpb25zPzoge1xuICAgICAgLyoqIEFkZGl0aW9uYWwgcXVlcnkuICovXG4gICAgICBxdWVyeT86IGFueTtcbiAgICAgIC8qKiAoZGVwcmVjYXRlZCAtIHRvIGJlIHJlbW92ZWQpIE9ubHkgaW5jbHVkZSBlbnRyaWVzIHdpdGggbWF0Y2hpbmcgcGFydGlhbCBuYW1lcy4gKi9cbiAgICAgIHBhcnRpYWxOYW1lPzogc3RyaW5nO1xuICAgICAgLyoqIEluY2x1ZGUgZW50cmllcyB3aXRoIG1hdGNoaW5nIHBhcnRpYWwgdGV4dCBpbiB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuICovXG4gICAgICBwYXJ0aWFsVGV4dEZpbHRlcj86IHsgcGFydGlhbFRleHQ6IHN0cmluZzsgcHJvcGVydGllczogc3RyaW5nW10gfTtcbiAgICAgIC8qKiBFeGNsdWRlIGxlZ2FjeSBlbnRyaWVzLiAqL1xuICAgICAgc2tpcExlZ2FjeT86IGJvb2xlYW47XG4gICAgICAvKiogRXhjbHVkZSBkZWZhdWx0IG9yZGVyaW5nLiAqL1xuICAgICAgc2tpcERlZmF1bHRPcmRlcj86IGJvb2xlYW47XG4gICAgICAvKiogT3RoZXIgcmVxdWVzdCBwYXJhbXMuICovXG4gICAgICBwYXJhbXM/OiBhbnk7XG4gICAgfVxuICApIHtcbiAgICBjb25zdCBkZWZhdWx0T3JkZXIgPSBbeyBuYW1lOiAxIH1dO1xuICAgIGNvbnN0IGRlZmF1bHRGaWx0ZXJzID0geyB0eXBlIH07XG4gICAgY29uc3QgbGVnYWN5RmlsdGVycyA9IHsgX19oYXM6IGB1cmxgIH07XG4gICAgbGV0IGZpbHRlcnMgPSB7fTtcblxuICAgIGxldCBmdWxsUXVlcnkgPSAob3B0aW9ucyAmJiBvcHRpb25zLnF1ZXJ5KSB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMgfHwgKG9wdGlvbnMgJiYgIW9wdGlvbnMuc2tpcERlZmF1bHRPcmRlcikpIHtcbiAgICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkT3JkZXJieXMoZnVsbFF1ZXJ5LCBkZWZhdWx0T3JkZXIsICdwcmVwZW5kJyk7XG4gICAgfVxuXG4gICAgZnVsbFF1ZXJ5ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIoZnVsbFF1ZXJ5LCBkZWZhdWx0RmlsdGVycyk7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhcnRpYWxUZXh0RmlsdGVyKSB7XG4gICAgICBjb25zdCB7IHBhcnRpYWxUZXh0LCBwcm9wZXJ0aWVzIH0gPSBvcHRpb25zLnBhcnRpYWxUZXh0RmlsdGVyO1xuICAgICAgY29uc3Qgb3JGaWx0ZXIgPSB7IF9fb3I6IHByb3BlcnRpZXMubWFwKHByb3BlcnR5ID0+ICh7IFtwcm9wZXJ0eV06IGAqJHtwYXJ0aWFsVGV4dH0qYCB9KSkgfTtcbiAgICAgIGZ1bGxRdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZ1bGxRdWVyeSwgb3JGaWx0ZXIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGFydGlhbE5hbWUpIHtcbiAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlmXG4gICAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihmdWxsUXVlcnksIHsgbmFtZTogYCoke29wdGlvbnMucGFydGlhbE5hbWV9KmAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5za2lwTGVnYWN5KSB7XG4gICAgICBmdWxsUXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihmdWxsUXVlcnksIHsgX19ub3Q6IGxlZ2FjeUZpbHRlcnMgfSk7XG4gICAgfVxuXG4gICAgZmlsdGVycyA9IHtcbiAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoZnVsbFF1ZXJ5KSxcbiAgICAgIHBhZ2VTaXplOiA1MCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgLi4uKChvcHRpb25zICYmIG9wdGlvbnMucGFyYW1zKSB8fCB7fSlcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5saXN0KGZpbHRlcnMpO1xuICB9XG5cbiAgLy8gVE9ETzogbWVyZ2Ugd2l0aCBjcmVhdGUoKVxuICBhc3luYyBzYXZlKGRhdGE6IE1vZGFsTW9kZWwsIHR5cGU6IFJlcG9zaXRvcnlUeXBlLCBtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4gPSB7fSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OOiB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24obW8sIHtcbiAgICAgICAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OLFxuICAgICAgICAgIGNvbmZpZ3VyYXRpb25UeXBlOiBkYXRhLnNlbGVjdGVkID8gZGF0YS5zZWxlY3RlZC5jb25maWd1cmF0aW9uVHlwZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBuYW1lOiBkYXRhLnZlcnNpb24sXG4gICAgICAgICAgZGVzY3JpcHRpb246IGRhdGEuZGVzY3JpcHRpb24sXG4gICAgICAgICAgZGV2aWNlVHlwZTogZGF0YS5kZXZpY2VUeXBlLFxuICAgICAgICAgIGM4eV9HbG9iYWw6IHt9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIWRhdGEuZGV2aWNlVHlwZSAmJiBtby5pZCkge1xuICAgICAgICAgIG1vLmRldmljZVR5cGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0YS5zZWxlY3RlZCAmJiBtby5pZCkge1xuICAgICAgICAgIG1vLmNvbmZpZ3VyYXRpb25UeXBlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1VybCA9IG1vLnVybDtcbiAgICBpZiAoZGF0YS5iaW5hcnkudXJsKSB7XG4gICAgICBtby51cmwgPSBkYXRhLmJpbmFyeS51cmw7XG4gICAgfSBlbHNlIGlmIChkYXRhLmJpbmFyeS5maWxlKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmNyZWF0ZShkYXRhLmJpbmFyeS5maWxlLCB7XG4gICAgICAgIGM4eV9HbG9iYWw6IHt9XG4gICAgICB9IGFzIFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KTtcbiAgICAgIG1vLnVybCA9IHJlc3BvbnNlLmRhdGEuc2VsZjtcbiAgICB9XG5cbiAgICBpZiAobW8uaWQpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUVudHJ5KG1vLCBleGlzdGluZ1VybCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUVudHJ5KG1vKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZShtb2RhbDogTW9kYWxNb2RlbCwgdHlwZTogUmVwb3NpdG9yeVR5cGUpIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgUmVwb3NpdG9yeVR5cGUuRklSTVdBUkU6XG4gICAgICBjYXNlIFJlcG9zaXRvcnlUeXBlLlNPRlRXQVJFOlxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVGaXJtd2FyZU9yU29mdHdhcmUobW9kYWwsIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUZpcm13YXJlT3JTb2Z0d2FyZShcbiAgICBtb2RhbDogTW9kYWxNb2RlbCxcbiAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZVxuICApOiBQcm9taXNlPFJlcG9zaXRvcnlDYXRlZ29yeT4ge1xuICAgIGxldCBiaW5hcnk6IElNYW5hZ2VkT2JqZWN0QmluYXJ5O1xuICAgIGxldCBiaW5hcnlVUkw6IHN0cmluZztcbiAgICBsZXQgcmVwb3NpdG9yeUVudHJ5OiBSZXBvc2l0b3J5Q2F0ZWdvcnk7XG4gICAgbGV0IHJlcG9zaXRvcnlCaW5hcnk6IEZpcm13YXJlQmluYXJ5IHwgU29mdHdhcmVCaW5hcnk7XG4gICAgY29uc3QgbW9zID0gW107XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0ZWQ6IHsgaWQ6IHNlbGVjdGVkSWQgfSxcbiAgICAgIGJpbmFyeTogeyBmaWxlLCB1cmwgfVxuICAgIH0gPSBtb2RhbDtcbiAgICB0cnkge1xuICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgKHsgZGF0YTogYmluYXJ5IH0gPSBhd2FpdCB0aGlzLnNhdmVCaW5hcnkoZmlsZSkpO1xuICAgICAgICAoeyBzZWxmOiBiaW5hcnlVUkwgfSA9IGJpbmFyeSk7XG4gICAgICAgIG1vcy5wdXNoKGJpbmFyeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiaW5hcnlVUkwgPSB1cmw7XG4gICAgICB9XG5cbiAgICAgICh7IGRhdGE6IHJlcG9zaXRvcnlFbnRyeSB9ID0gYXdhaXQgdGhpcy5jcmVhdGVPclVwZGF0ZVJlcG9zaXRvcnlFbnRyeShtb2RhbCwgdHlwZSkpO1xuICAgICAgaWYgKGlzTmlsKHNlbGVjdGVkSWQpKSB7XG4gICAgICAgIG1vcy5wdXNoKHJlcG9zaXRvcnlFbnRyeSk7XG4gICAgICB9XG5cbiAgICAgICh7IGRhdGE6IHJlcG9zaXRvcnlCaW5hcnkgfSA9IGF3YWl0IHRoaXMuY3JlYXRlUmVwb3NpdG9yeUJpbmFyeShcbiAgICAgICAgbW9kYWwsXG4gICAgICAgIGJpbmFyeVVSTCxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgcmVwb3NpdG9yeUVudHJ5XG4gICAgICApKTtcbiAgICAgIG1vcy5wdXNoKHJlcG9zaXRvcnlCaW5hcnkpO1xuXG4gICAgICBpZiAoZmlsZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmxpbmtCaW5hcnkocmVwb3NpdG9yeUJpbmFyeSwgYmluYXJ5KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcG9zaXRvcnlFbnRyeTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5jbGVhblVwKG1vcyk7XG4gICAgICB0aGlzLmVycm9yTXNnKCk7XG5cbiAgICAgIC8vIFByb3BhZ2F0ZSBlcnJvclxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgc2F2ZUJpbmFyeShmaWxlOiBGaWxlKTogUHJvbWlzZTxJUmVzdWx0PElNYW5hZ2VkT2JqZWN0QmluYXJ5Pj4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeUJpbmFyeS5jcmVhdGUoZmlsZSwgeyBjOHlfR2xvYmFsOiB7fSB9IGFzIFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+KTtcbiAgfVxuXG4gIGNyZWF0ZU9yVXBkYXRlUmVwb3NpdG9yeUVudHJ5KFxuICAgIG1vZGFsOiBNb2RhbE1vZGVsLFxuICAgIHR5cGU6IFJlcG9zaXRvcnlUeXBlXG4gICk6IFByb21pc2U8SVJlc3VsdDxSZXBvc2l0b3J5Q2F0ZWdvcnk+PiB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0ZWQ6IHsgaWQsIG5hbWUgfSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZGV2aWNlVHlwZVxuICAgIH0gPSBtb2RhbDtcblxuICAgIGNvbnN0IG1vID0ge1xuICAgICAgaWQsXG4gICAgICBuYW1lOiBpZCA/IHVuZGVmaW5lZCA6IG5hbWUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHR5cGU6IGlkID8gdW5kZWZpbmVkIDogdHlwZSxcbiAgICAgIGM4eV9HbG9iYWw6IHt9XG4gICAgfTtcblxuICAgIGlmIChkZXZpY2VUeXBlKSB7XG4gICAgICBzZXQobW8sICdjOHlfRmlsdGVyLnR5cGUnLCBkZXZpY2VUeXBlKTtcbiAgICB9XG5cbiAgICBpZiAobW9kYWwuc29mdHdhcmVUeXBlKSB7XG4gICAgICBzZXQobW8sICdzb2Z0d2FyZVR5cGUnLCBtb2RhbC5zb2Z0d2FyZVR5cGUuc29mdHdhcmVUeXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWRcbiAgICAgID8gKHRoaXMuaW52ZW50b3J5LnVwZGF0ZShtbykgYXMgUHJvbWlzZTxJUmVzdWx0PFJlcG9zaXRvcnlDYXRlZ29yeT4+KVxuICAgICAgOiAodGhpcy5pbnZlbnRvcnkuY3JlYXRlKG1vKSBhcyBQcm9taXNlPElSZXN1bHQ8UmVwb3NpdG9yeUNhdGVnb3J5Pj4pO1xuICB9XG5cbiAgY3JlYXRlUmVwb3NpdG9yeUJpbmFyeShcbiAgICBtb2RhbDogTW9kYWxNb2RlbCxcbiAgICBiaW5hcnlVUkw6IHN0cmluZyxcbiAgICB0eXBlOiBSZXBvc2l0b3J5VHlwZSxcbiAgICBwYXJlbnQ6IFJlcG9zaXRvcnlDYXRlZ29yeVxuICApOiBQcm9taXNlPElSZXN1bHQ8RmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeSB8IEZpcm13YXJlUGF0Y2hCaW5hcnk+PiB7XG4gICAgY29uc3QgbW8gPSB0aGlzLnByZXBhcmVSZXBvc2l0b3J5QmluYXJ5TU8obW9kYWwsIGJpbmFyeVVSTCwgdHlwZSk7XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNDcmVhdGUobW8sIHBhcmVudCkgYXMgUHJvbWlzZTxcbiAgICAgIElSZXN1bHQ8RmlybXdhcmVCaW5hcnkgfCBTb2Z0d2FyZUJpbmFyeSB8IEZpcm13YXJlUGF0Y2hCaW5hcnk+XG4gICAgPjtcbiAgfVxuXG4gIHByZXBhcmVSZXBvc2l0b3J5QmluYXJ5TU8obW9kYWw6IE1vZGFsTW9kZWwsIGJpbmFyeVVSTDogc3RyaW5nLCB0eXBlOiBSZXBvc2l0b3J5VHlwZSkge1xuICAgIGNvbnN0IHsgdmVyc2lvbiwgcGF0Y2hWZXJzaW9uLCBkZXBlbmRlbmN5IH0gPSBtb2RhbDtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICB0eXBlOiBSRVBPU0lUT1JZX0JJTkFSWV9UWVBFU1t0eXBlXSxcbiAgICAgIFt0eXBlXToge1xuICAgICAgICB1cmw6IGJpbmFyeVVSTFxuICAgICAgfSxcbiAgICAgIGM4eV9HbG9iYWw6IHt9XG4gICAgfTtcblxuICAgIGlmIChkZXBlbmRlbmN5KSB7XG4gICAgICBzZXQocmVzdWx0LCBbdHlwZSwgJ3ZlcnNpb24nXSwgcGF0Y2hWZXJzaW9uKTtcbiAgICAgIGFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgYzh5X1BhdGNoOiB7XG4gICAgICAgICAgZGVwZW5kZW5jeTogZGVwZW5kZW5jeS5jOHlfRmlybXdhcmUudmVyc2lvblxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0KHJlc3VsdCwgW3R5cGUsICd2ZXJzaW9uJ10sIHZlcnNpb24pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgYXN5bmMgbGlua0JpbmFyeShcbiAgICByZXBvc2l0b3J5QmluYXJ5OiBGaXJtd2FyZUJpbmFyeSB8IFNvZnR3YXJlQmluYXJ5LFxuICAgIGJpbmFyeTogSU1hbmFnZWRPYmplY3RCaW5hcnlcbiAgKSB7XG4gICAgY29uc3QgeyBpZDogcmVwb3NpdG9yeUJpbmFyeUlkIH0gPSByZXBvc2l0b3J5QmluYXJ5O1xuICAgIGlmIChiaW5hcnkpIHtcbiAgICAgIGNvbnN0IHsgaWQ6IGJpbmFyeUlkIH0gPSBiaW5hcnk7XG4gICAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkuY2hpbGRBZGRpdGlvbnNBZGQoYmluYXJ5SWQsIHJlcG9zaXRvcnlCaW5hcnlJZCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYW5VcChtb3NUb0RlbGV0ZTogSUlkZW50aWZpZWRbXSkge1xuICAgIG1vc1RvRGVsZXRlLmZvckVhY2gobW8gPT4ge1xuICAgICAgY29uc3QgeyBjOHlfSXNCaW5hcnkgfSA9IG1vO1xuICAgICAgaXNVbmRlZmluZWQoYzh5X0lzQmluYXJ5KSA/IHRoaXMuZGVsZXRlKG1vKSA6IHRoaXMuaW52ZW50b3J5QmluYXJ5LmRlbGV0ZShtbyk7XG4gICAgfSk7XG4gIH1cblxuICBkZWxldGUoZW50aXR5OiBJSWRlbnRpZmllZCk6IFByb21pc2U8SVJlc3VsdDxudWxsPj4ge1xuICAgIHJldHVybiB0aGlzLmludmVudG9yeS5kZWxldGUoZW50aXR5LCB7IGZvcmNlQ2FzY2FkZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIGVycm9yTXNnKCkge1xuICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0ZhaWxlZCB0byBzYXZlJyk7XG4gICAgdGhpcy5hbGVydC5kYW5nZXIobXNnKTtcbiAgfVxuXG4gIGdldEJhc2VWZXJzaW9uc0NvdW50JChlbnRyeTogSU1hbmFnZWRPYmplY3QpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gb2YoMSk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tKHRoaXMubGlzdEJhc2VWZXJzaW9ucyhlbnRyeSwgeyBwYWdlU2l6ZTogMSwgd2l0aFRvdGFsUGFnZXM6IHRydWUgfSkpLnBpcGUoXG4gICAgICBtYXAoKHsgcGFnaW5nIH0pID0+IHBhZ2luZy50b3RhbFBhZ2VzKVxuICAgICk7XG4gIH1cblxuICBnZXRCYXNlVmVyc2lvbkZyb21NTyhtbzogUmVwb3NpdG9yeUJpbmFyeSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYXRjaChtbykgPyBnZXQobW8sICdjOHlfUGF0Y2guZGVwZW5kZW5jeScpIDogZ2V0KG1vLCAnYzh5X0Zpcm13YXJlLnZlcnNpb24nKTtcbiAgfVxuXG4gIGlzUGF0Y2gobW86IFJlcG9zaXRvcnlCaW5hcnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFnZXQobW8sICdjOHlfUGF0Y2guZGVwZW5kZW5jeScpO1xuICB9XG5cbiAgZ2V0UGF0Y2hWZXJzaW9uc0NvdW50JChlbnRyeTogSU1hbmFnZWRPYmplY3QsIGJhc2VWZXJzaW9uOiBGaXJtd2FyZUJpbmFyeSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgaWYgKHRoaXMuaXNMZWdhY3lFbnRyeShiYXNlVmVyc2lvbikpIHtcbiAgICAgIHJldHVybiBvZigwKTtcbiAgICB9XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmxpc3RQYXRjaFZlcnNpb25zKGVudHJ5LCBiYXNlVmVyc2lvbiwgeyBwYWdlU2l6ZTogMSwgd2l0aFRvdGFsUGFnZXM6IHRydWUgfSlcbiAgICApLnBpcGUobWFwKCh7IHBhZ2luZyB9KSA9PiBwYWdpbmcudG90YWxQYWdlcykpO1xuICB9XG5cbiAgaXNMZWdhY3lFbnRyeShlbnRyeTogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gQm9vbGVhbihlbnRyeS51cmwpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGFsbCB2ZXJzaW9ucyAoYmFzZSBhbmQgcGF0Y2ggb25lcykgb2YgZ2l2ZW4gdG9wIGxldmVsIGVudHJ5LlxuICAgKiBWZXJzaW9ucyBhcmUgb3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lIChhc3N1bWluZyB0aGUgZWFybGllciBjcmVhdGVkLCB0aGUgb2xkZXIgdGhlIHZlcnNpb24pLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0QWxsVmVyc2lvbnMoZW50cnk6IFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+LCBwYXJhbXMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCYXNlVmVyc2lvblJlc3VsdExpc3RGb3JMZWdhY3lFbnRyeShlbnRyeSk7XG4gICAgfVxuXG4gICAgY29uc3QgVkVSU0lPTl9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge30sXG4gICAgICBfX29yZGVyYnk6IFt7ICdjcmVhdGlvblRpbWUuZGF0ZSc6IC0xIH1dXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5saXN0Q2hpbGRyZW4oZW50cnksIFZFUlNJT05fRklMVEVSX09SREVSLCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIExpc3RzIGJhc2UgdmVyc2lvbnMgb2YgZ2l2ZW4gdG9wIGxldmVsIGVudHJ5LlxuICAgKiBWZXJzaW9ucyBhcmUgb3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lIChhc3N1bWluZyB0aGUgZWFybGllciBjcmVhdGVkLCB0aGUgb2xkZXIgdGhlIHZlcnNpb24pLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0QmFzZVZlcnNpb25zKGVudHJ5OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiwgcGFyYW1zID0ge30pIHtcbiAgICBpZiAodGhpcy5pc0xlZ2FjeUVudHJ5KGVudHJ5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QmFzZVZlcnNpb25SZXN1bHRMaXN0Rm9yTGVnYWN5RW50cnkoZW50cnkpO1xuICAgIH1cblxuICAgIGNvbnN0IE5PX1BBVENIX0ZJTFRFUl9PUkRFUiA9IHtcbiAgICAgIF9fZmlsdGVyOiB7XG4gICAgICAgIF9fbm90OiB7IF9faGFzOiAnYzh5X1BhdGNoJyB9XG4gICAgICB9LFxuICAgICAgX19vcmRlcmJ5OiBbeyAnY3JlYXRpb25UaW1lLmRhdGUnOiAtMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubGlzdENoaWxkcmVuKGVudHJ5LCBOT19QQVRDSF9GSUxURVJfT1JERVIsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgcGF0Y2ggdmVyc2lvbnMgb2YgZ2l2ZW4gYmFzZSB2ZXJzaW9uIHVuZGVyIHRoZSBlbnRyeS5cbiAgICogVmVyc2lvbnMgYXJlIG9yZGVyZWQgYnkgY3JlYXRpb24gdGltZSAoYXNzdW1pbmcgdGhlIGVhcmxpZXIgY3JlYXRlZCwgdGhlIG9sZGVyIHRoZSB2ZXJzaW9uKS5cbiAgICogQHBhcmFtIGVudHJ5IFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5LlxuICAgKiBAcGFyYW0gYmFzZVZlcnNpb24gQmFzZSB2ZXJzaW9uLlxuICAgKiBAcGFyYW0gcGFyYW1zIEFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zLlxuICAgKi9cbiAgbGlzdFBhdGNoVmVyc2lvbnMoZW50cnk6IElNYW5hZ2VkT2JqZWN0LCBiYXNlVmVyc2lvbjogRmlybXdhcmVCaW5hcnkgfCBzdHJpbmcsIHBhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgdmVyc2lvbiA9IGlzU3RyaW5nKGJhc2VWZXJzaW9uKSA/IGJhc2VWZXJzaW9uIDogZ2V0KGJhc2VWZXJzaW9uLCAnYzh5X0Zpcm13YXJlLnZlcnNpb24nKTtcbiAgICBjb25zdCBQQVRDSF9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICAnYzh5X1BhdGNoLmRlcGVuZGVuY3knOiB2ZXJzaW9uXG4gICAgICB9LFxuICAgICAgX19vcmRlcmJ5OiBbeyAnY3JlYXRpb25UaW1lLmRhdGUnOiAtMSB9XVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMubGlzdENoaWxkcmVuKGVudHJ5LCBQQVRDSF9GSUxURVJfT1JERVIsIHBhcmFtcyk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdHMgcGF0Y2ggdmVyc2lvbnMgb2YgZ2l2ZW4gYmFzZSB2ZXJzaW9uIHVuZGVyIHRoZSBlbnRyeSBpbmNsdWRpbmcgdGhlIGJhc2UgdmVyc2lvbi5cbiAgICogVmVyc2lvbnMgYXJlIG9yZGVyZWQgYnkgY3JlYXRpb24gdGltZSAoYXNzdW1pbmcgdGhlIGVhcmxpZXIgY3JlYXRlZCwgdGhlIG9sZGVyIHRoZSB2ZXJzaW9uKS5cbiAgICogSW4gdGVybXMgb2YgbGVnYWN5IGJhc2UgdmVyc2lvbiB0aGUgZW50cnkgZ2V0cyB0cmFuc2Zvcm1lZCB0byBmaXQgdGhlIG5lZWRlZCBkYXRhIG1vZGVsLlxuICAgKiBAcGFyYW0gZW50cnkgVG9wIGxldmVsIHJlcG9zaXRvcnkgZW50cnkuXG4gICAqIEBwYXJhbSBiYXNlVmVyc2lvbiBCYXNlIHZlcnNpb24uXG4gICAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBxdWVyeSBwYXJhbXMuXG4gICAqL1xuICBsaXN0QmFzZVZlcnNpb25BbmRQYXRjaGVzKGVudHJ5OiBJTWFuYWdlZE9iamVjdCwgYmFzZVZlcnNpb246IElNYW5hZ2VkT2JqZWN0LCBwYXJhbXMgPSB7fSkge1xuICAgIGlmICh0aGlzLmlzTGVnYWN5RW50cnkoZW50cnkpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgZGF0YTogW1xuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGM4eV9GaXJtd2FyZToge1xuICAgICAgICAgICAgICAgIHZlcnNpb246IGVudHJ5LnZlcnNpb24sXG4gICAgICAgICAgICAgICAgdXJsOiBlbnRyeS51cmxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudHJ5XG4gICAgICAgICAgKVxuICAgICAgICBdXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBQQVRDSF9GSUxURVJfT1JERVIgPSB7XG4gICAgICBfX2ZpbHRlcjoge1xuICAgICAgICBfX29yOiB7XG4gICAgICAgICAgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5JzogYmFzZVZlcnNpb24uYzh5X0Zpcm13YXJlLnZlcnNpb24sXG4gICAgICAgICAgJ2M4eV9GaXJtd2FyZS52ZXJzaW9uJzogYmFzZVZlcnNpb24uYzh5X0Zpcm13YXJlLnZlcnNpb25cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9fb3JkZXJieTogW3sgJ2M4eV9QYXRjaC5kZXBlbmRlbmN5JzogMSB9LCB7ICdjOHlfRmlybXdhcmUudmVyc2lvbic6IDEgfV1cbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmxpc3RDaGlsZHJlbihlbnRyeSwgUEFUQ0hfRklMVEVSX09SREVSLCBwYXJhbXMpO1xuICB9XG5cbiAgbGlzdENoaWxkcmVuKGVudHJ5OiBQYXJ0aWFsPElNYW5hZ2VkT2JqZWN0PiwgZmlsdGVycyA9IHt9LCBwYXJhbXM6IGFueSA9IHt9KSB7XG4gICAgY29uc3QgY2hpbGRyZW5GaWx0ZXJzID0geyBfX2J5Z3JvdXBpZDogZW50cnkuaWQgfTtcbiAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKGZpbHRlcnMsIGNoaWxkcmVuRmlsdGVycyk7XG4gICAgLy8gRklYTUU6IG5lZWRlZCBiZWNhdXNlIG9mIGlzc3VlIGluIGZvck9mIGRpcmVjdGl2ZSAoLi4uKVxuICAgIHBhcmFtcy53aXRoVG90YWxQYWdlcyA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXMuaW52ZW50b3J5Lmxpc3RRdWVyeShxdWVyeSwgcGFyYW1zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGFsbCBpdGVtcyBmcm9tIHRoZSBsaXN0IHN0YXJ0aW5nIHdpdGggdGhlIHByb3ZpZGVkIHBhZ2UuXG4gICAqIEBwYXJhbSBmaXJzdFBhZ2UgVGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGxpc3QgdG8gZmV0Y2ggYWxsIGl0ZW1zIGZvci5cbiAgICovXG4gIGFzeW5jIGZldGNoQWxsSXRlbXNGcm9tTGlzdChmaXJzdFBhZ2UpIHtcbiAgICBsZXQgYWxsSXRlbXM7XG5cbiAgICBpZiAoIWZpcnN0UGFnZS50aGVuKSB7XG4gICAgICBhbGxJdGVtcyA9IFsuLi5maXJzdFBhZ2VdO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgeyBwYWdpbmcsIGRhdGE6IGl0ZW1zIH0gPSBhd2FpdCBmaXJzdFBhZ2U7XG4gICAgICBhbGxJdGVtcyA9IFsuLi5pdGVtc107XG5cbiAgICAgIHdoaWxlIChwYWdpbmcgJiYgcGFnaW5nLm5leHRQYWdlKSB7XG4gICAgICAgICh7IHBhZ2luZywgZGF0YTogaXRlbXMgfSA9IGF3YWl0IHBhZ2luZy5uZXh0KCkpO1xuICAgICAgICBhbGxJdGVtcyA9IFsuLi5hbGxJdGVtcywgLi4uaXRlbXNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhbGxJdGVtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5IG1hbmFnZWQgb2JqZWN0IGZvciBiYXNlIG9yIHBhdGNoIHZlcnNpb24uXG4gICAqIEBwYXJhbSBtbyBCYXNlIG9yIHBhdGNoIHZlcnNpb24gbWFuYWdlZCBvYmplY3Qgd2l0aCBwYXJlbnRzLlxuICAgKi9cbiAgZ2V0UmVwb3NpdG9yeUVudHJ5TU8kKG1vOiBJTWFuYWdlZE9iamVjdCk6IE9ic2VydmFibGU8SU1hbmFnZWRPYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAoIW1vKSB7XG4gICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgY29uc3QgW3JlZmVyZW5jZV0gPSBnZXQobW8sICdhZGRpdGlvblBhcmVudHMucmVmZXJlbmNlcycpO1xuICAgIGNvbnN0IGlkID0gZ2V0KHJlZmVyZW5jZSwgJ21hbmFnZWRPYmplY3QuaWQnKTtcbiAgICByZXR1cm4gaWRcbiAgICAgID8gZnJvbSh0aGlzLmludmVudG9yeS5kZXRhaWwoaWQsIHsgd2l0aENoaWxkcmVuOiBmYWxzZSB9KSkucGlwZShtYXAoKHsgZGF0YSB9KSA9PiBkYXRhKSlcbiAgICAgIDogb2YodW5kZWZpbmVkKTtcbiAgfVxuICAvKipcbiAgICogR2V0cyBiYXNlIG9yIHBhdGNoIHZlcnNpb24gbWFuYWdlZCBvYmplY3QuXG4gICAqIEBwYXJhbSBkZXZpY2VSZXBvc2l0b3J5RnJhZ21lbnQgRGV2aWNlIHJlcG9zaXRvcnkgZnJhZ21lbnQuXG4gICAqIEBwYXJhbSB0eXBlIFRvcCBsZXZlbCByZXBvc2l0b3J5IGVudHJ5IHR5cGUuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIENvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggb3B0aW9uczpcbiAgICogLSAqKnNraXBMZWdhY3kqKiAtIGBib29sZWFuYCAtIEV4Y2x1ZGUgbGVnYWN5IGVudHJpZXMuXG4gICAqIC0gKipmaWx0ZXJzKiogLSBgb2JqZWN0YCAtIEZpbHRlciBvYmplY3QuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIGFzIGl0IGRvZXNuJ3Qgc3VwcG9ydCAnbWlzc2luZyB1cmwnIGNhc2VcbiAgICovXG4gIGdldFJlcG9zaXRvcnlCaW5hcnlNb0J5VmVyc2lvbihcbiAgICBkZXZpY2VSZXBvc2l0b3J5RnJhZ21lbnQ6IERldmljZUZpcm13YXJlIHwgRGV2aWNlU29mdHdhcmUsXG4gICAgdHlwZTogUmVwb3NpdG9yeVR5cGUsXG4gICAgeyBza2lwTGVnYWN5ID0gZmFsc2UsIGZpbHRlcnMgPSB7fSB9OiB7IHNraXBMZWdhY3k/OiBib29sZWFuOyBmaWx0ZXJzPzogb2JqZWN0IH0gPSB7fVxuICApOiBQcm9taXNlPElNYW5hZ2VkT2JqZWN0PiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCB1cmwsIG5hbWUgfSA9IGRldmljZVJlcG9zaXRvcnlGcmFnbWVudDtcbiAgICBjb25zdCByZXBvc2l0b3J5QmluYXJ5VHlwZSA9IFJFUE9TSVRPUllfQklOQVJZX1RZUEVTW3R5cGVdO1xuICAgIGxldCBxdWVyeTtcbiAgICBjb25zdCBuZXdNb2RlbEJhc2VWZXJzaW9uUXVlcnkgPSB7XG4gICAgICBbYCR7dHlwZX0udmVyc2lvbmBdOiB2ZXJzaW9uLFxuICAgICAgW2Ake3R5cGV9LnVybGBdOiB1cmwsXG4gICAgICB0eXBlOiByZXBvc2l0b3J5QmluYXJ5VHlwZVxuICAgIH07XG4gICAgY29uc3QgbGVnYWN5VmVyc2lvblF1ZXJ5ID0geyB1cmwsIHR5cGUsIG5hbWUgfTtcbiAgICBmaWx0ZXJzID0geyB3aXRoQ2hpbGRyZW46IGZhbHNlLCB3aXRoUGFyZW50czogdHJ1ZSwgLi4uZmlsdGVycyB9O1xuXG4gICAgaWYgKHNraXBMZWdhY3kpIHtcbiAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICBfX2FuZDoge1xuICAgICAgICAgIC4uLm5ld01vZGVsQmFzZVZlcnNpb25RdWVyeVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBxdWVyeSA9IHtcbiAgICAgICAgX19vcjogW3sgX19hbmQ6IHsgLi4ubmV3TW9kZWxCYXNlVmVyc2lvblF1ZXJ5IH0gfSwgeyBfX2FuZDogeyAuLi5sZWdhY3lWZXJzaW9uUXVlcnkgfSB9XVxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkubGlzdFF1ZXJ5KHF1ZXJ5LCBmaWx0ZXJzKS50aGVuKCh7IGRhdGEgfSkgPT4gaGVhZChkYXRhKSk7XG4gIH1cblxuICBnZXRCaW5hcnlOYW1lJChiaW5hcnlVcmw6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgaWYgKCFiaW5hcnlVcmwpIHtcbiAgICAgIHJldHVybiBvZignLS0tJyk7XG4gICAgfVxuXG4gICAgY29uc3QgYmluYXJ5SWQgPSB0aGlzLmludmVudG9yeUJpbmFyeS5nZXRJZEZyb21VcmwoYmluYXJ5VXJsKTtcbiAgICBpZiAoIWJpbmFyeUlkKSB7XG4gICAgICByZXR1cm4gb2YoYmluYXJ5VXJsKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmVyKCgpID0+IHRoaXMuaW52ZW50b3J5LmRldGFpbChiaW5hcnlJZCkudGhlbihyZXN1bHQgPT4gcmVzdWx0LmRhdGEpKS5waXBlKFxuICAgICAgbWFwKG1vID0+IG1vLm5hbWUpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgYW4gaW52ZW50b3J5IHF1ZXJ5IG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBmaW5kXG4gICAqIHJlcG9zaXRvcnkgZW50cmllcyBvZiBzcGVjaWZpZWQgdHlwZSBtYXRjaGluZyB0aGUgdHlwZSBvZiBwcm92aWRlZCBkZXZpY2UuXG4gICAqIEBwYXJhbSByZXBvc2l0b3J5VHlwZSBUaGUgdHlwZSBvZiByZXBvc2l0b3J5IGVudHJpZXMgd2hpY2ggd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICovXG5cbiAgZ2V0RGV2aWNlVHlwZVF1ZXJ5KHJlcG9zaXRvcnlUeXBlOiBSZXBvc2l0b3J5VHlwZSwgZGV2aWNlOiBJTWFuYWdlZE9iamVjdCk6IG9iamVjdCB7XG4gICAgbGV0IHJlc3VsdCA9IHsgdHlwZTogcmVwb3NpdG9yeVR5cGUgfTtcbiAgICBpZiAocmVwb3NpdG9yeVR5cGUgPT09IFJlcG9zaXRvcnlUeXBlLkNPTkZJR1VSQVRJT04pIHtcbiAgICAgIGlmIChkZXZpY2UudHlwZSkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihyZXN1bHQsIHtcbiAgICAgICAgICBfX29yOiBbeyBkZXZpY2VUeXBlOiBkZXZpY2UudHlwZSB9LCB7IF9fbm90OiB7IF9faGFzOiBgZGV2aWNlVHlwZWAgfSB9XVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gdGhpcy5xdWVyaWVzVXRpbC5hZGRBbmRGaWx0ZXIocmVzdWx0LCB7XG4gICAgICAgIF9fb3I6IFtcbiAgICAgICAgICB7ICdjOHlfRmlsdGVyLnR5cGUnOiBkZXZpY2UudHlwZSB9LFxuICAgICAgICAgIHsgJ2M4eV9GaWx0ZXIudHlwZSc6ICcnIH0sXG4gICAgICAgICAgeyBfX25vdDogeyBfX2hhczogYGM4eV9GaWx0ZXIudHlwZWAgfSB9XG4gICAgICAgIF1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIGFuIGludmVudG9yeSBxdWVyeSBvYmplY3Qgd2hpY2ggY2FuIGJlIHVzZWQgdG8gZmluZFxuICAgKiByZXBvc2l0b3J5IGVudHJpZXMgbWF0Y2hpbmcgdGhlIHByZWRlZmluZWQgc29mdHdhcmUgdHlwZXMgcHJvdmlkZWQgaW4gdGhlIGRldmljZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICogQHBhcmFtIHF1ZXJ5IFRoZSBxdWVyeSB0byB3aGljaCB0aGUgc29mdHdhcmUgdHlwZXMgZmlsdGVycyB3aWxsIGJlIGF0dGFjaGVkLiBEZWZhdWx0IHZhbHVlIGlzIGFuIG9iamVjdCBjb250YWluZyByZXBvc2l0b3J5IHR5cGUgc29mdHdhcmUuXG4gICAqL1xuICBnZXRTb2Z0d2FyZVR5cGVRdWVyeShkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LCBxdWVyeT86IG9iamVjdCk6IG9iamVjdCB7XG4gICAgbGV0IHJlc3VsdCA9IHsgLi4uKHF1ZXJ5IHx8IHt9KSwgdHlwZTogUmVwb3NpdG9yeVR5cGUuU09GVFdBUkUgfTtcblxuICAgIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZFNvZnR3YXJlVHlwZXMpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMucXVlcmllc1V0aWwuYWRkQW5kRmlsdGVyKHJlc3VsdCwge1xuICAgICAgICBfX29yOiBbZGV2aWNlLmM4eV9TdXBwb3J0ZWRTb2Z0d2FyZVR5cGVzLm1hcCh0eXBlID0+ICh7IHNvZnR3YXJlVHlwZTogdHlwZSB9KSldXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbiBpbnZlbnRvcnkgcXVlcnkgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIGZpbmQgY29uZmlndXJhdGlvbiByZXBvc2l0b3J5IGVudHJpZXNcbiAgICogbWF0Y2hpbmcgdGhlIHR5cGUgb2YgcHJvdmlkZWQgZGV2aWNlIGFuZCBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG1hdGNoaW5nIHJlcG9zaXRvcnkgZW50cmllcyB3aWxsIGJlIHF1ZXJpZWQgd2l0aCB0aGUgZ2VuZXJhdGVkIHF1ZXJ5LlxuICAgKiBAcGFyYW0gY29uZmlndXJhdGlvblR5cGUgQ29uZmlndXJhdGlvbiB0eXBlIGZvciB3aGljaCBtYXRjaGluZyByZXBvc2l0b3J5IGVudHJpZXMgd2lsbCBiZSBxdWVyaWVkIHdpdGggdGhlIGdlbmVyYXRlZCBxdWVyeS5cbiAgICovXG4gIGdldENvbmZpZ3VyYXRpb25UeXBlUXVlcnkoZGV2aWNlOiBJTWFuYWdlZE9iamVjdCwgY29uZmlndXJhdGlvblR5cGU6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldERldmljZVR5cGVRdWVyeShSZXBvc2l0b3J5VHlwZS5DT05GSUdVUkFUSU9OLCBkZXZpY2UpO1xuICAgIHJldHVybiB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcihxdWVyeSwge1xuICAgICAgX19vcjogW1xuICAgICAgICB7IGNvbmZpZ3VyYXRpb25UeXBlIH0sXG4gICAgICAgIHsgY29uZmlndXJhdGlvblR5cGU6ICcnIH0sXG4gICAgICAgIHsgX19ub3Q6IHsgX19oYXM6IGBjb25maWd1cmF0aW9uVHlwZWAgfSB9XG4gICAgICBdXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGlzdCBvZiBzb2Z0d2FyZSBpbnN0YWxsZWQgaW4gdGhlIGRldmljZSBpbiB0aGUgdW5pZm9ybSBmb3JtYXQuXG4gICAqIFN1cHBvcnRzIGM4eV9Tb2Z0d2FyZUxpc3QgYW5kIGM4eV9Tb2Z0d2FyZSBmcmFnbWVudHMuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSB3aG9zZSBzb2Z0d2FyZSBsaXN0IHNob3VsZCBiZSByZXR1cm5lZC5cbiAgICovXG4gIGdldERldmljZVNvZnR3YXJlTGlzdChkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogRGV2aWNlU29mdHdhcmVbXSB7XG4gICAgaWYgKGRldmljZS5jOHlfU29mdHdhcmVMaXN0KSB7XG4gICAgICByZXR1cm4gY2xvbmVEZWVwKGRldmljZS5jOHlfU29mdHdhcmVMaXN0KTtcbiAgICB9XG4gICAgaWYgKGRldmljZS5jOHlfU29mdHdhcmUpIHtcbiAgICAgIHJldHVybiBfbWFwKGRldmljZS5jOHlfU29mdHdhcmUsICh2ZXJzaW9uLCBuYW1lKSA9PiAoeyBuYW1lLCB2ZXJzaW9uIH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgc29mdHdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlIGFuZCB0aGUgbGlzdCBvZiBjaGFuZ2VzLCBhbmQgc2VuZHMgaXQgdG8gdGhlIGRldmljZS5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIHdoaWNoIHRoZSBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkIGZvciBhbmQgc2VudCB0by5cbiAgICogQHBhcmFtIGNoYW5nZXMgVGhlIGxpc3Qgb2Ygc29mdHdhcmUgY2hhbmdlcyB3aGljaCBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZVNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSBhd2FpdCB0aGlzLmdldFNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZSwgY2hhbmdlcyk7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLm9wZXJhdGlvbi5jcmVhdGUob3BlcmF0aW9uKSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIHNvZnR3YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY2hhbmdlcy5cbiAgICogUmV0dXJuZWQgb3BlcmF0aW9uIHR5cGUgZGVwZW5kcyBvbiBkZXZpY2UncyBzdXBwb3J0ZWQgb3BlcmF0aW9ucy5cbiAgICogU3VwcG9ydHMgYzh5X1NvZnR3YXJlVXBkYXRlLCBjOHlfU29mdHdhcmVMaXN0LCBhbmQgYzh5X1NvZnR3YXJlIG9wZXJhdGlvbnMuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZC5cbiAgICogQHBhcmFtIGNoYW5nZXMgVGhlIGxpc3Qgb2Ygc29mdHdhcmUgY2hhbmdlcyB3aGljaCBzaG91bGQgYmUgYXBwbGllZC5cbiAgICovXG4gIGFzeW5jIGdldFNvZnR3YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb246IElPcGVyYXRpb24gPSB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBBcHBseSBzb2Z0d2FyZSBjaGFuZ2VzOiAke2NoYW5nZXNcbiAgICAgICAgLm1hcChcbiAgICAgICAgICBjaGFuZ2UgPT5cbiAgICAgICAgICAgIGAke2NoYW5nZS5hY3Rpb259IFwiJHtjaGFuZ2UubmFtZX1cIiR7XG4gICAgICAgICAgICAgIGNoYW5nZS52ZXJzaW9uID8gYCAodmVyc2lvbjogJHtjaGFuZ2UudmVyc2lvbn0pYCA6ICcnXG4gICAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICAgIC5qb2luKCcsICcpfWBcbiAgICB9O1xuICAgIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMuaW5jbHVkZXMoJ2M4eV9Tb2Z0d2FyZVVwZGF0ZScpKSB7XG4gICAgICBvcGVyYXRpb24uYzh5X1NvZnR3YXJlVXBkYXRlID0gKGNsb25lRGVlcChjaGFuZ2VzKSB8fCBbXSkubWFwKGNoYW5nZSA9PlxuICAgICAgICBvbWl0QnkoY2hhbmdlLCBpc05pbClcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChkZXZpY2UuYzh5X1N1cHBvcnRlZE9wZXJhdGlvbnMuaW5jbHVkZXMoJ2M4eV9Tb2Z0d2FyZUxpc3QnKSkge1xuICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QgPSBjbG9uZURlZXAoXG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0Q3VycmVudFNvZnR3YXJlKGRldmljZSwgJ2M4eV9Tb2Z0d2FyZUxpc3QnLCBbXSlcbiAgICAgICk7XG4gICAgICBjaGFuZ2VzLmZvckVhY2goY2hhbmdlID0+IHtcbiAgICAgICAgY29uc3QgZGV2aWNlU29mdHdhcmU6IERldmljZVNvZnR3YXJlID0gcGljayhvbWl0QnkoY2hhbmdlLCBpc05pbCksIFtcbiAgICAgICAgICAnbmFtZScsXG4gICAgICAgICAgJ3ZlcnNpb24nLFxuICAgICAgICAgICd1cmwnLFxuICAgICAgICAgICdzb2Z0d2FyZVR5cGUnXG4gICAgICAgIF0pO1xuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICByZW1vdmUob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QsIGRldmljZVNvZnR3YXJlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICAgICAgY29uc3Qgc29mdHdhcmVJdGVtVG9VcGRhdGVJZHggPSBvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdC5maW5kSW5kZXgoXG4gICAgICAgICAgICBpdGVtID0+IGl0ZW0ubmFtZSA9PT0gY2hhbmdlLm5hbWVcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChzb2Z0d2FyZUl0ZW1Ub1VwZGF0ZUlkeCA+IC0xKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgc29mdHdhcmVcbiAgICAgICAgICAgIG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LnNwbGljZShzb2Z0d2FyZUl0ZW1Ub1VwZGF0ZUlkeCwgMSwgZGV2aWNlU29mdHdhcmUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbnN0YWxsIHNvZnR3YXJlXG4gICAgICAgICAgICBvcGVyYXRpb24uYzh5X1NvZnR3YXJlTGlzdC5wdXNoKGRldmljZVNvZnR3YXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoZGV2aWNlLmM4eV9TdXBwb3J0ZWRPcGVyYXRpb25zLmluY2x1ZGVzKCdjOHlfU29mdHdhcmUnKSkge1xuICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSA9IGNsb25lRGVlcChhd2FpdCB0aGlzLmdldEN1cnJlbnRTb2Z0d2FyZShkZXZpY2UsICdjOHlfU29mdHdhcmUnLCB7fSkpO1xuICAgICAgY2hhbmdlcy5mb3JFYWNoKGNoYW5nZSA9PiB7XG4gICAgICAgIGlmIChjaGFuZ2UuYWN0aW9uID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIGRlbGV0ZSBvcGVyYXRpb24uYzh5X1NvZnR3YXJlW2NoYW5nZS5uYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnKSB7XG4gICAgICAgICAgb3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZVtjaGFuZ2UubmFtZV0gPSBjaGFuZ2UudmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRpb247XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGxpc3Qgb2YgZGV2aWNlIHNvZnR3YXJlIGNoYW5nZXMgZnJvbSBnaXZlbiBvcGVyYXRpb24gaW4gdGhlIGNvbnRleHQgb2YgZ2l2ZW4gZGV2aWNlLlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uIFRoZSBvcGVyYXRpb24gZnJvbSB3aGljaCB0aGUgbGlzdCBzaG91bGQgYmUgZXh0cmFjdGVkLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSB0YXJnZXQgZGV2aWNlIG9mIHRoZSBvcGVyYXRpb24uXG4gICAqL1xuICBhc3luYyBnZXREZXZpY2VTb2Z0d2FyZUNoYW5nZXNGcm9tT3BlcmF0aW9uKFxuICAgIG9wZXJhdGlvbjogSU9wZXJhdGlvbixcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0XG4gICk6IFByb21pc2U8RGV2aWNlU29mdHdhcmVDaGFuZ2VbXT4ge1xuICAgIGlmIChvcGVyYXRpb24uYzh5X1NvZnR3YXJlVXBkYXRlKSB7XG4gICAgICByZXR1cm4gY2xvbmVEZWVwKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVVcGRhdGUpO1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZUxpc3QpIHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldERldmljZVNvZnR3YXJlQ2hhbmdlc0Zyb21Tb2Z0d2FyZUxpc3RPcGVyYXRpb24ob3BlcmF0aW9uLCBkZXZpY2UpO1xuICAgIH1cbiAgICBpZiAob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuZ2V0RGV2aWNlU29mdHdhcmVDaGFuZ2VzRnJvbVNvZnR3YXJlT3BlcmF0aW9uKG9wZXJhdGlvbiwgZGV2aWNlKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgZmlybXdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlIGFuZCB0aGUgc2VsZWN0ZWQgcmVwb3NpdG9yeSBiaW5hcnksIGFuZCBzZW5kcyBpdCB0byB0aGUgZGV2aWNlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2Ugd2hpY2ggdGhlIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQgZm9yIGFuZCBzZW50IHRvLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRPcHRpb24gVGhlIHNlbGVjdGVkIHJlcG9zaXRvcnkgYmluYXJ5IG9wdGlvbi5cbiAgICovXG4gIGFzeW5jIGNyZWF0ZUZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgc2VsZWN0ZWRPcHRpb246IFNlbGVjdGVkUmVwb3NpdG9yeUJpbmFyeVxuICApOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSB0aGlzLmdldEZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZSwgc2VsZWN0ZWRPcHRpb24pO1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5vcGVyYXRpb24uY3JlYXRlKG9wZXJhdGlvbikpLmRhdGE7XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBmaXJtd2FyZSB1cGRhdGUgb3BlcmF0aW9uIGZvciBnaXZlbiBkZXZpY2UgYW5kIHNlbGVjdGVkIHZlcnNpb24uXG4gICAqIFN1cHBvcnRzIGM4eV9GaXJtd2FyZSBvcGVyYXRpb24uXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggb3BlcmF0aW9uIHNob3VsZCBiZSBwcmVwYXJlZC5cbiAgICogQHBhcmFtIHNlbGVjdGVkT3B0aW9uIFNlbGVjdGVkIGZpcm13YXJlIHZlcnNpb24uXG4gICAqL1xuICBnZXRGaXJtd2FyZVVwZGF0ZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIHNlbGVjdGVkT3B0aW9uOiBTZWxlY3RlZFJlcG9zaXRvcnlCaW5hcnlcbiAgKTogSU9wZXJhdGlvbiB7XG4gICAgZGVsZXRlIHNlbGVjdGVkT3B0aW9uLmlkO1xuXG4gICAgY29uc3Qgb3BlcmF0aW9uOiBJT3BlcmF0aW9uID0ge1xuICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgIGRlc2NyaXB0aW9uOiBgVXBkYXRlIGZpcm13YXJlIHRvOiBcIiR7c2VsZWN0ZWRPcHRpb24ubmFtZX1cIiR7XG4gICAgICAgIHNlbGVjdGVkT3B0aW9uLnZlcnNpb24gPyBgICh2ZXJzaW9uOiAke3NlbGVjdGVkT3B0aW9uLnZlcnNpb259KWAgOiAnJ1xuICAgICAgfWAsXG4gICAgICBjOHlfRmlybXdhcmU6IHsgLi4uc2VsZWN0ZWRPcHRpb24gfVxuICAgIH07XG5cbiAgICByZXR1cm4gb3BlcmF0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgY29uZmlndXJhdGlvbiBmaWxlIHVwbG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBpc0xlZ2FjeSAgQSBsZWdhY3kgb3BlcmF0aW9uIGlzIGNyZWF0ZWQgd2l0aG91dCBhIGNvbmZpZ3VyYXRpb25UeXBlLlxuICAgKi9cbiAgZ2V0VXBsb2FkQ29uZmlndXJhdGlvbkZpbGVPcGVyYXRpb24oXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdCxcbiAgICBjb25maWd1cmF0aW9uVHlwZTogc3RyaW5nLFxuICAgIGlzTGVnYWN5OiBib29sZWFuID0gZmFsc2VcbiAgKTogSU9wZXJhdGlvbiB7XG4gICAgaWYgKGlzTGVnYWN5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgICBkZXNjcmlwdGlvbjogYFJldHJpZXZlIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgZnJvbSBkZXZpY2UgJHtkZXZpY2UubmFtZX1gLFxuICAgICAgICBjOHlfVXBsb2FkQ29uZmlnRmlsZToge31cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBSZXRyaWV2ZSAke2NvbmZpZ3VyYXRpb25UeXBlfSBjb25maWd1cmF0aW9uIHNuYXBzaG90IGZyb20gZGV2aWNlICR7ZGV2aWNlLm5hbWV9YCxcbiAgICAgIGM4eV9VcGxvYWRDb25maWdGaWxlOiB7XG4gICAgICAgIHR5cGU6IGNvbmZpZ3VyYXRpb25UeXBlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwYXJlcyBhIGNvbmZpZ3VyYXRpb24gZmlsZSBkb3dubG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIG9wZXJhdGlvbiBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBiaW5hcnlVcmwgVGhlIHVybCBvZiBhIGJpbmFyeSB0byBiZSBkb3dubG9hZGVkLlxuICAgKiBAcGFyYW0gaXNMZWdhY3kgQSBsZWdhY3kgb3BlcmF0aW9uIGlzIGNyZWF0ZWQgd2l0aG91dCBhIGNvbmZpZ3VyYXRpb25UeXBlLlxuICAgKi9cbiAgZ2V0RG93bmxvYWRDb25maWd1cmF0aW9uRmlsZU9wZXJhdGlvbihcbiAgICBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0LFxuICAgIGNvbmZpZ3VyYXRpb25UeXBlOiBzdHJpbmcsXG4gICAgY29uZmlnU25hcHNob3Q6IENvbmZpZ3VyYXRpb25TbmFwc2hvdCxcbiAgICBpc0xlZ2FjeTogYm9vbGVhbiA9IGZhbHNlXG4gICk6IElPcGVyYXRpb24ge1xuICAgIGlmIChpc0xlZ2FjeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGV2aWNlSWQ6IGRldmljZS5pZCxcbiAgICAgICAgZGVzY3JpcHRpb246IGBTZW5kIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgJHtjb25maWdTbmFwc2hvdC5uYW1lfSB0byBkZXZpY2UgJHtkZXZpY2UubmFtZX1gLFxuICAgICAgICBjOHlfRG93bmxvYWRDb25maWdGaWxlOiB7XG4gICAgICAgICAgdXJsOiBjb25maWdTbmFwc2hvdC5iaW5hcnlVcmwsXG4gICAgICAgICAgYzh5X0NvbmZpZ3VyYXRpb25EdW1wOiB7XG4gICAgICAgICAgICBpZDogY29uZmlnU25hcHNob3QuaWRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBkZXZpY2VJZDogZGV2aWNlLmlkLFxuICAgICAgZGVzY3JpcHRpb246IGBTZW5kIGNvbmZpZ3VyYXRpb24gc25hcHNob3QgJHtjb25maWdTbmFwc2hvdC5uYW1lfSBvZiBjb25maWd1cmF0aW9uIHR5cGUgJHtjb25maWd1cmF0aW9uVHlwZX0gdG8gZGV2aWNlICR7ZGV2aWNlLm5hbWV9YCxcbiAgICAgIGM4eV9Eb3dubG9hZENvbmZpZ0ZpbGU6IHtcbiAgICAgICAgdXJsOiBjb25maWdTbmFwc2hvdC5iaW5hcnlVcmwsXG4gICAgICAgIHR5cGU6IGNvbmZpZ3VyYXRpb25UeXBlXG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBsYXN0IGZpcm13YXJlIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZS5cbiAgICogTG9va3MgZm9yIGM4eV9GaXJtd2FyZSBvcGVyYXRpb25zLlxuICAgKiBAcGFyYW0gZGV2aWNlSWQgVGhlIElEIG9mIHRoZSBkZXZpY2UgdG8gZmluZCBhbiBvcGVyYXRpb24gZm9yLlxuICAgKi9cbiAgYXN5bmMgZ2V0TGFzdEZpcm13YXJlVXBkYXRlT3BlcmF0aW9uKGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBmaWx0ZXJzID0ge1xuICAgICAgZGV2aWNlSWQsXG4gICAgICBkYXRlRnJvbTogbmV3IERhdGUoMCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRhdGVUbzogbmV3IERhdGUoRGF0ZS5ub3coKSkudG9JU09TdHJpbmcoKSxcbiAgICAgIHJldmVydDogdHJ1ZSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdE1hdGNoaW5nT3BlcmF0aW9uKFt7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9GaXJtd2FyZScgfV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGxhc3Qgc29mdHdhcmUgdXBkYXRlIG9wZXJhdGlvbiBmb3IgZ2l2ZW4gZGV2aWNlLlxuICAgKiBMb29rcyBmb3IgYzh5X1NvZnR3YXJlVXBkYXRlLCBjOHlfU29mdHdhcmVMaXN0LCBvciBjOHlfU29mdHdhcmUgb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIGRldmljZUlkIFRoZSBJRCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQgYW4gb3BlcmF0aW9uIGZvci5cbiAgICovXG4gIGFzeW5jIGdldExhc3RTb2Z0d2FyZVVwZGF0ZU9wZXJhdGlvbihkZXZpY2VJZDogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxJT3BlcmF0aW9uPiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHtcbiAgICAgIGRldmljZUlkLFxuICAgICAgZGF0ZUZyb206IG5ldyBEYXRlKDApLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IG5ldyBEYXRlKERhdGUubm93KCkpLnRvSVNPU3RyaW5nKCksXG4gICAgICByZXZlcnQ6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuZ2V0TGF0ZXN0TWF0Y2hpbmdPcGVyYXRpb24oW1xuICAgICAgeyAuLi5maWx0ZXJzLCBmcmFnbWVudFR5cGU6ICdjOHlfU29mdHdhcmVVcGRhdGUnIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9Tb2Z0d2FyZUxpc3QnIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9Tb2Z0d2FyZScgfVxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgdGhlIGxpc3Qgb2YgZmlsdGVycyBhbmQgcXVlcmllcyB0aGUgb3BlcmF0aW9ucy5cbiAgICogSWYgYSBxdWVyeSByZXR1cm5zIGF0IGxlYXN0IG9uZSBvcGVyYXRpb24sIHRoZSBmaXJzdCBvbmUgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogT3RoZXJ3aXNlIHRoZSBuZXh0IHF1ZXJ5IHdpbGwgYmUgcGVyZm9ybWVkLlxuICAgKiBJZiBub25lIG9mIHRoZSBxdWVyaWVzIHJldHVybnMgYW55IG9wZXJhdGlvbiwgbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gZmlsdGVyc0xpc3QgVGhlIGxpc3Qgb2YgZmlsdGVycyBmb3IgdGhlIHF1ZXJpZXMuXG4gICAqL1xuICBhc3luYyBnZXRGaXJzdE1hdGNoaW5nT3BlcmF0aW9uKGZpbHRlcnNMaXN0OiBhbnlbXSk6IFByb21pc2U8SU9wZXJhdGlvbj4ge1xuICAgIGxldCBtYXRjaGluZ09wZXJhdGlvbiA9IG51bGw7XG5cbiAgICBmb3IgKGNvbnN0IGZpbHRlcnMgb2YgZmlsdGVyc0xpc3QpIHtcbiAgICAgIGNvbnN0IG9wZXJhdGlvbnMgPSAoYXdhaXQgdGhpcy5vcGVyYXRpb24ubGlzdChmaWx0ZXJzKSkuZGF0YTtcbiAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBtYXRjaGluZ09wZXJhdGlvbiA9IG9wZXJhdGlvbnNbMF07XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGluZ09wZXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIHRoZSBsaXN0IG9mIGZpbHRlcnMgYW5kIHF1ZXJpZXMgdGhlIG9wZXJhdGlvbnMuXG4gICAqIEl0IGNvbXBhcmVzIHRoZSBvcGVyYXRpb25zIHJldHJpZXZlZCBieSB0aGUgcXVlcmllcyBieSAnY3JlYXRpb25UaW1lJ1xuICAgKiBhbmQgcmV0dXJuIHRoZSBsYXRlc3Qgb25lLlxuICAgKiBJZiBub25lIG9mIHRoZSBxdWVyaWVzIHJldHVybnMgYW55IG9wZXJhdGlvbiwgbnVsbCB3aWxsIGJlIHJldHVybmVkLlxuICAgKiBAcGFyYW0gZmlsdGVyc0xpc3QgVGhlIGxpc3Qgb2YgZmlsdGVycyBmb3IgdGhlIHF1ZXJpZXMuXG4gICAqL1xuICBhc3luYyBnZXRMYXRlc3RNYXRjaGluZ09wZXJhdGlvbihmaWx0ZXJzTGlzdDogYW55W10pOiBQcm9taXNlPElPcGVyYXRpb24+IHtcbiAgICBsZXQgbWF0Y2hpbmdPcGVyYXRpb246IElPcGVyYXRpb24gPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBmaWx0ZXJzIG9mIGZpbHRlcnNMaXN0KSB7XG4gICAgICBjb25zdCBvcGVyYXRpb25zOiBJT3BlcmF0aW9uW10gPSAoYXdhaXQgdGhpcy5vcGVyYXRpb24ubGlzdChmaWx0ZXJzKSkuZGF0YTtcbiAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAobWF0Y2hpbmdPcGVyYXRpb24pIHtcbiAgICAgICAgICBtYXRjaGluZ09wZXJhdGlvbiA9XG4gICAgICAgICAgICBuZXcgRGF0ZShtYXRjaGluZ09wZXJhdGlvbi5jcmVhdGlvblRpbWUpLmdldFRpbWUoKSA8XG4gICAgICAgICAgICBuZXcgRGF0ZShvcGVyYXRpb25zWzBdLmNyZWF0aW9uVGltZSkuZ2V0VGltZSgpXG4gICAgICAgICAgICAgID8gb3BlcmF0aW9uc1swXVxuICAgICAgICAgICAgICA6IG1hdGNoaW5nT3BlcmF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hdGNoaW5nT3BlcmF0aW9uID0gb3BlcmF0aW9uc1swXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaGluZ09wZXJhdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBvcGVyYXRpb24gYW5kIHJldHVybnMgYW4gb2JzZXJ2YWJsZSB0byB0cmFjayBpdHMgcHJvZ3Jlc3MuXG4gICAqIEZhaWxzIHRoZSBvYnNlcnZhYmxlIHdoZW4gdGhlIG9wZXJhdGlvbiByZXR1cm5zIEZBSUxFRCBzdGF0dXMuXG4gICAqIENvbXBsZXRlcyB0aGUgb2JzZXJ2YWJsZSB3aGVuIHRoZSBvcGVyYXRpb24gcmV0dXJucyBTVUNDRVNTRlVMIHN0YXR1cy5cbiAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIGNyZWF0ZSBhbmQgdHJhY2suXG4gICAqL1xuICBjcmVhdGVPYnNlcnZlZE9wZXJhdGlvbihvcGVyYXRpb246IElPcGVyYXRpb24pOiBPYnNlcnZhYmxlPElPcGVyYXRpb24+IHtcbiAgICByZXR1cm4gZnJvbSh0aGlzLm9wZXJhdGlvbi5jcmVhdGUob3BlcmF0aW9uKSkucGlwZShcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEpLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHN3aXRjaE1hcChjcmVhdGVkT3BlcmF0aW9uID0+IHRoaXMub2JzZXJ2ZU9wZXJhdGlvbihjcmVhdGVkT3BlcmF0aW9uKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JzZXJ2YWJsZSB0byB0cmFjayBwcm9ncmVzcyBvZiBnaXZlbiBvcGVyYXRpb24uXG4gICAqIEZhaWxzIHRoZSBvYnNlcnZhYmxlIHdoZW4gdGhlIG9wZXJhdGlvbiByZXR1cm5zIEZBSUxFRCBzdGF0dXMuXG4gICAqIENvbXBsZXRlcyB0aGUgb2JzZXJ2YWJsZSB3aGVuIHRoZSBvcGVyYXRpb24gcmV0dXJucyBTVUNDRVNTRlVMIHN0YXR1cy5cbiAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgb3BlcmF0aW9uIHRvIGJlIG9ic2VydmVkLlxuICAgKi9cbiAgb2JzZXJ2ZU9wZXJhdGlvbihvcGVyYXRpb246IElPcGVyYXRpb24pOiBPYnNlcnZhYmxlPElPcGVyYXRpb24+IHtcbiAgICBjb25zdCBvYnNlcnZlZE9wZXJhdGlvbiQgPSBvZihvcGVyYXRpb24pO1xuICAgIGNvbnN0IG9wZXJhdGlvblVwZGF0ZXMkID0gb2JzZXJ2ZWRPcGVyYXRpb24kLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAob2JzZXJ2ZWRPcGVyYXRpb24gPT4gdGhpcy5vcGVyYXRpb25SZWFsdGltZS5vbkFsbCQob2JzZXJ2ZWRPcGVyYXRpb24uZGV2aWNlSWQpKSxcbiAgICAgIG1hcCgoeyBkYXRhIH0pID0+IGRhdGEgYXMgSU9wZXJhdGlvbiksXG4gICAgICB3aXRoTGF0ZXN0RnJvbShvYnNlcnZlZE9wZXJhdGlvbiQpLFxuICAgICAgZmlsdGVyKChbb3BlcmF0aW9uVXBkYXRlLCBvYnNlcnZlZE9wZXJhdGlvbl0pID0+IG9wZXJhdGlvblVwZGF0ZS5pZCA9PT0gb2JzZXJ2ZWRPcGVyYXRpb24uaWQpLFxuICAgICAgc3dpdGNoTWFwKChbb3BlcmF0aW9uVXBkYXRlXSkgPT4ge1xuICAgICAgICBpZiAob3BlcmF0aW9uVXBkYXRlLnN0YXR1cyA9PT0gT3BlcmF0aW9uU3RhdHVzLkZBSUxFRCkge1xuICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKG9wZXJhdGlvblVwZGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG9wZXJhdGlvblVwZGF0ZSk7XG4gICAgICB9KSxcbiAgICAgIHRha2VXaGlsZShvcGVyYXRpb25VcGRhdGUgPT4gb3BlcmF0aW9uVXBkYXRlLnN0YXR1cyAhPT0gT3BlcmF0aW9uU3RhdHVzLlNVQ0NFU1NGVUwsIHRydWUpXG4gICAgKTtcbiAgICByZXR1cm4gbWVyZ2Uob2JzZXJ2ZWRPcGVyYXRpb24kLCBvcGVyYXRpb25VcGRhdGVzJCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBhIHNpbmdsZSBldmVudCB3aXRoIGxhdGVzdCBjcmVhdGlvblRpbWUgZm9yIHRoZSBnaXZlbiBkZXZpY2UgSWQgYW5kIGV2ZW50IHR5cGUuXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgZGV2aWNlIElkIGZvciB3aGljaCB0aGUgZXZlbnRzIHNob3VsZCBiZSBxdWVyaWVkLlxuICAgKiBAcGFyYW0gdHlwZSBFdmVudCB0eXBlLlxuICAgKi9cbiAgYXN5bmMgZ2V0TGF0ZXN0Q29uZmlndXJhdGlvbkV2ZW50KFxuICAgIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgdHlwZTogc3RyaW5nXG4gICk6IFByb21pc2U8SUV2ZW50IHwgdW5kZWZpbmVkPiB7XG4gICAgY29uc3QgZXZlbnRGaWx0ZXI6IG9iamVjdCA9IHtcbiAgICAgIHNvdXJjZTogZGV2aWNlSWQsXG4gICAgICB0eXBlLFxuICAgICAgZGF0ZUZyb206IHRoaXMuZGF0ZUZyb20udG9JU09TdHJpbmcoKSxcbiAgICAgIGRhdGVUbzogdGhpcy5kYXRlVG8udG9JU09TdHJpbmcoKSxcbiAgICAgIHBhZ2VTaXplOiAxXG4gICAgfTtcblxuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5ldmVudC5saXN0KGV2ZW50RmlsdGVyKTtcbiAgICByZXR1cm4gZGF0YVswXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGEgbGlzdCBvZiBvcGVyYXRpb25zIGZvciB0aGUgZ2l2ZW4gZGV2aWNlIElkLCBhbmQgb3BlcmF0aW9uIHR5cGUuXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBUaGUgZGV2aWNlIElkIGZvciB3aGljaCB0aGUgb3BlcmF0aW9uIHNob3VsZCBiZSBxdWVyaWVkLlxuICAgKiBAcGFyYW0gb3BlcmF0aW9uVHlwZSBPcGVyYXRpb24gdHlwZSBmcmFnbWVudC5cbiAgICovXG4gIGFzeW5jIGdldENvbmZpZ0ZpbGVPcGVyYXRpb25MaXN0KFxuICAgIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIsXG4gICAgb3BlcmF0aW9uVHlwZTogc3RyaW5nXG4gICk6IFByb21pc2U8SU9wZXJhdGlvbltdPiB7XG4gICAgY29uc3Qgb3BlcmF0aW9uRmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBkZXZpY2VJZCxcbiAgICAgIGZyYWdtZW50VHlwZTogb3BlcmF0aW9uVHlwZSxcbiAgICAgIGRhdGVGcm9tOiB0aGlzLmRhdGVGcm9tLnRvSVNPU3RyaW5nKCksXG4gICAgICBkYXRlVG86IHRoaXMuZGF0ZVRvLnRvSVNPU3RyaW5nKCksXG4gICAgICByZXZlcnQ6IHRydWUsXG4gICAgICBwYWdlU2l6ZTogMjAwMFxuICAgIH07XG5cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMub3BlcmF0aW9uLmxpc3Qob3BlcmF0aW9uRmlsdGVyKSkuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGxhdGVzdCB1cGxvYWRlZCBjb25maWd1cmF0aW9uIHNuYXBzaG90IGZvciB0aGUgZ2l2ZW4gZGV2aWNlLCBhbmQgY29uZmlndXJhdGlvbiB0eXBlLlxuICAgKiBAcGFyYW0gZGV2aWNlIFRoZSBkZXZpY2UgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIHNuYXBzaG90IHdhcyB1cGxvYWRlZC5cbiAgICogQHBhcmFtIGNvbmZpZ3VyYXRpb25UeXBlIFNlbGVjdGVkIGNvbmZpZ3VyYXRpb24gdHlwZS5cbiAgICovXG4gIGFzeW5jIGdldENvbmZpZ1NuYXBzaG90KFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgY29uZmlndXJhdGlvblR5cGU6IHN0cmluZ1xuICApOiBQcm9taXNlPENvbmZpZ3VyYXRpb25TbmFwc2hvdCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGV2ZW50OiBJRXZlbnQgPSBhd2FpdCB0aGlzLmdldExhdGVzdENvbmZpZ3VyYXRpb25FdmVudChkZXZpY2UuaWQsIGNvbmZpZ3VyYXRpb25UeXBlKTtcbiAgICBsZXQgY29uZmlnU25hcHNob3Q6IENvbmZpZ3VyYXRpb25TbmFwc2hvdDtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbmZpZ1NuYXBzaG90ID0ge1xuICAgICAgICB0aW1lOiBldmVudC50aW1lLFxuICAgICAgICBuYW1lOiBldmVudC50ZXh0LFxuICAgICAgICBkZXZpY2VUeXBlOiBkZXZpY2UudHlwZSxcbiAgICAgICAgY29uZmlndXJhdGlvblR5cGVcbiAgICAgIH07XG4gICAgICB0cnkge1xuICAgICAgICBjb25maWdTbmFwc2hvdC5iaW5hcnkgPSBhd2FpdCAoYXdhaXQgdGhpcy5ldmVudEJpbmFyeS5kb3dubG9hZChldmVudCkpLnRleHQoKTtcbiAgICAgICAgaWYgKGV2ZW50LmM4eV9Jc0JpbmFyeSkge1xuICAgICAgICAgIGNvbmZpZ1NuYXBzaG90LmJpbmFyeVR5cGUgPSBldmVudC5jOHlfSXNCaW5hcnkudHlwZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnQ291bGQgbm90IGdldCB0aGUgYmluYXJ5LicpO1xuICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU25hcHNob3Q7XG4gIH1cblxuICBhc3luYyBnZXRMZWdhY3lDb25maWdTbmFwc2hvdChkZXZpY2VJZCkge1xuICAgIGxldCBjb25maWdTbmFwc2hvdDogQ29uZmlndXJhdGlvblNuYXBzaG90O1xuICAgIGxldCBtbztcbiAgICBjb25zdCBkZXZpY2UgPSAoYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKGRldmljZUlkLCB7IHdpdGhDaGlsZHJlbjogZmFsc2UgfSkpLmRhdGE7XG4gICAgY29uc3Qgc25hcHNob3RJZCA9IGRldmljZS5jOHlfQ29uZmlndXJhdGlvbkR1bXAgJiYgZGV2aWNlLmM4eV9Db25maWd1cmF0aW9uRHVtcC5pZDtcbiAgICBpZiAoIXNuYXBzaG90SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgbW8gPSAoYXdhaXQgdGhpcy5pbnZlbnRvcnkuZGV0YWlsKHNuYXBzaG90SWQpKS5kYXRhO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICAgIGlmIChtbykge1xuICAgICAgY29uZmlnU25hcHNob3QgPSB7XG4gICAgICAgIHRpbWU6IG1vLmNyZWF0aW9uVGltZSxcbiAgICAgICAgbmFtZTogbW8ubmFtZVxuICAgICAgfTtcbiAgICAgIGNvbmZpZ1NuYXBzaG90LmJpbmFyeSA9IGF3YWl0IHRoaXMuZ2V0QmluYXJ5VGV4dChtby51cmwsIHsgYWxsb3dFeHRlcm5hbDogZmFsc2UgfSk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWdTbmFwc2hvdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYmluYXJ5IG9iamVjdCBhcyB0ZXh0LlxuICAgKiBAcGFyYW0gYmluYXJ5VXJsIFRoZSBVUkwgdG8gZmluZCBiaW5hcnlcbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9iamVjdCB3aXRoIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICogLSAqKmFsbG93RXh0ZXJuYWwqKiAtIGBib29sZWFuYCAtIGFsbG93cyBkb3dubG9hZGluZyBleHRlcm5hbCBiaW5hcnkgZmlsZVxuICAgKiAtICoqbm9BbGVydHMqKiAtIGBib29sZWFuYCAtIGRvIG5vdCBkaXNwbGF5IGFuIGFsZXJ0IG1lc3NhZ2U7IGRlZmF1bHRzIHRvIGBmYWxzZWBcbiAgICovXG4gIGFzeW5jIGdldEJpbmFyeVRleHQoXG4gICAgYmluYXJ5VXJsOiBzdHJpbmcsXG4gICAgb3B0aW9uczogeyBhbGxvd0V4dGVybmFsOiBib29sZWFuOyBub0FsZXJ0cz86IGJvb2xlYW4gfVxuICApOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGJpbmFyeUlkID0gdGhpcy5pbnZlbnRvcnlCaW5hcnkuZ2V0SWRGcm9tVXJsKGJpbmFyeVVybCk7XG4gICAgbGV0IHJlcztcbiAgICBpZiAoIWJpbmFyeUlkKSB7XG4gICAgICBpZiAob3B0aW9ucy5hbGxvd0V4dGVybmFsKSB7XG4gICAgICAgIHJlcyA9IGF3YWl0IHRoaXMuZ2V0RXh0ZXJuYWxCaW5hcnlSZXNwb25zZShiaW5hcnlVcmwsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmdldEludGVybmFsQmluYXJ5UmVzcG9uc2UoYmluYXJ5SWQsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoIXJlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiByZXMudGV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBiaW5hcnkgb2JqZWN0IGFzIEZpbGUuXG4gICAqIEBwYXJhbSBiaW5hcnlVcmwgVGhlIFVSTCB0byBmaW5kIGJpbmFyeVxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb2JqZWN0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zOlxuICAgKiAtICoqYWxsb3dFeHRlcm5hbCoqIC0gYGJvb2xlYW5gIC0gYWxsb3dzIGRvd25sb2FkaW5nIGV4dGVybmFsIGJpbmFyeSBmaWxlXG4gICAqL1xuICBhc3luYyBnZXRCaW5hcnlGaWxlKGJpbmFyeVVybDogc3RyaW5nLCBvcHRpb25zOiB7IGFsbG93RXh0ZXJuYWw6IGJvb2xlYW4gfSk6IFByb21pc2U8RmlsZT4ge1xuICAgIGNvbnN0IGJpbmFyeUlkID0gdGhpcy5pbnZlbnRvcnlCaW5hcnkuZ2V0SWRGcm9tVXJsKGJpbmFyeVVybCk7XG4gICAgaWYgKCFiaW5hcnlJZCAmJiAhb3B0aW9ucy5hbGxvd0V4dGVybmFsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgLy8gQFRPRE86IG5vdGUgdGhhdCBpdCBkb2Vzbid0IHNvbHZlIGlzc3VlIHdpdGggZXh0ZXJuYWwgYmluYXJ5IGhlcmUsIHN1Y2ggdXJsIHdvbid0IGhhdmUgYmluYXJ5SWQsIHNvIHdlIHdvbid0IGtub3cgdGhlIG5hbWUgb3IgY29udGVudFR5cGUgdG8gdXNlIGluIEZpbGUgY29uc3RydWN0b3IsIGxldCdzIGFkZCBhIEBGSVhNRSBjb21tZW50IGZvciBub3c/XG4gICAgY29uc3QgeyBuYW1lLCBjb250ZW50VHlwZSB9ID0gKGF3YWl0IHRoaXMuaW52ZW50b3J5LmRldGFpbChiaW5hcnlJZCkpLmRhdGE7XG4gICAgY29uc3QgcmVzID0gISFiaW5hcnlJZFxuICAgICAgPyBhd2FpdCB0aGlzLmdldEludGVybmFsQmluYXJ5UmVzcG9uc2UoYmluYXJ5SWQpXG4gICAgICA6IGF3YWl0IHRoaXMuZ2V0RXh0ZXJuYWxCaW5hcnlSZXNwb25zZShiaW5hcnlVcmwpO1xuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKCk7XG4gICAgcmV0dXJuIG5ldyBGaWxlKFthcnJheUJ1ZmZlcl0sIG5hbWUsIHsgdHlwZTogY29udGVudFR5cGUgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbGFzdCBjb25maWd1cmF0aW9uIHVwZGF0ZSBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZS5cbiAgICogTG9va3MgZm9yIGM4eV9Db25maWd1cmF0aW9uIGFuZCBjOHlfU2VuZENvbmZpZ3VyYXRpb24gb3BlcmF0aW9ucy5cbiAgICogQHBhcmFtIGRldmljZUlkIFRoZSBJRCBvZiB0aGUgZGV2aWNlIHRvIGZpbmQgYW4gb3BlcmF0aW9uIGZvci5cbiAgICovXG4gIGFzeW5jIGdldExhc3RDb25maWdVcGRhdGVPcGVyYXRpb24oZGV2aWNlSWQ6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8SU9wZXJhdGlvbj4ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB7XG4gICAgICBkZXZpY2VJZCxcbiAgICAgIGRhdGVGcm9tOiBuZXcgRGF0ZSgwKS50b0lTT1N0cmluZygpLFxuICAgICAgZGF0ZVRvOiBuZXcgRGF0ZShEYXRlLm5vdygpKS50b0lTT1N0cmluZygpLFxuICAgICAgcmV2ZXJ0OiB0cnVlLFxuICAgICAgcGFnZVNpemU6IDFcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmdldExhdGVzdE1hdGNoaW5nT3BlcmF0aW9uKFtcbiAgICAgIHsgLi4uZmlsdGVycywgZnJhZ21lbnRUeXBlOiAnYzh5X0NvbmZpZ3VyYXRpb24nIH0sXG4gICAgICB7IC4uLmZpbHRlcnMsIGZyYWdtZW50VHlwZTogJ2M4eV9TZW5kQ29uZmlndXJhdGlvbicgfVxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXBhcmVzIGEgY29uZmlndXJhdGlvbiBkb3dubG9hZCBvcGVyYXRpb24gZm9yIGdpdmVuIGRldmljZSBhbmQgaXRzIGN1cnJlbnQgY29uZmlndXJhdGlvbi5cbiAgICogU3VwcG9ydHMgYzh5X1NlbmRDb25maWd1cmF0aW9uIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKi9cbiAgY3JlYXRlVGV4dEJhc2VkQ29uZmlndXJhdGlvblJlbG9hZE9wZXJhdGlvbihkZXZpY2U6IElNYW5hZ2VkT2JqZWN0KTogSU9wZXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnUmVxdWVzdGVkIGN1cnJlbnQgY29uZmlndXJhdGlvbicpLFxuICAgICAgYzh5X1NlbmRDb25maWd1cmF0aW9uOiB7fVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUHJlcGFyZXMgYSBjb25maWd1cmF0aW9uIHVwZGF0ZSBvcGVyYXRpb24gZm9yIHRoZSBnaXZlbiBkZXZpY2UuXG4gICAqIFN1cHBvcnRzIGM4eV9Db25maWd1cmF0aW9uIG9wZXJhdGlvbi5cbiAgICogQHBhcmFtIGRldmljZSBUaGUgZGV2aWNlIGZvciB3aGljaCBvcGVyYXRpb24gc2hvdWxkIGJlIHByZXBhcmVkLlxuICAgKiBAcGFyYW0gY29uZmlnIFRoZSBjb25maWd1cmF0aW9uIHdoaWNoIHdpbGwgdXBkYXRlIHRoZSBleGlzdGluZyBvbmUuXG4gICAqL1xuICBjcmVhdGVUZXh0QmFzZWRDb25maWd1cmF0aW9uVXBkYXRlT3BlcmF0aW9uKGRldmljZTogSU1hbmFnZWRPYmplY3QsIGNvbmZpZzogc3RyaW5nKTogSU9wZXJhdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRldmljZUlkOiBkZXZpY2UuaWQsXG4gICAgICBkZXNjcmlwdGlvbjogZ2V0dGV4dCgnQ29uZmlndXJhdGlvbiB1cGRhdGUnKSxcbiAgICAgIGM4eV9Db25maWd1cmF0aW9uOiB7XG4gICAgICAgIGNvbmZpZ1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoYmluYXJ5SWQ6IElkUmVmZXJlbmNlKTogUHJvbWlzZTxJRmV0Y2hSZXNwb25zZT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuZG93bmxvYWQoYmluYXJ5SWQpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCBhdmFpbGFibGUgc25hcHNob3RzIGZyb20gdGhlIHJlcG9zaXRvcnkgZm9yIHRoZSBnaXZlbiBkZXZpY2UuXG4gICAqIEBwYXJhbSBkZXZpY2UgVGhlIGRldmljZSBmb3Igd2hpY2ggdGhlIHNuYXBzaG90cyBzaG91bGQgYmUgcHJlcGFyZWQuXG4gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uVHlwZSBTZWxlY3RlZCBjb25maWd1cmF0aW9uIHR5cGUuXG4gICAqL1xuICBhc3luYyBnZXRTbmFwc2hvdHNGcm9tUmVwb3NpdG9yeShkZXZpY2UsIGNvbmZpZ3VyYXRpb25UeXBlKSB7XG4gICAgY29uc3Qgc2VhcmNoUXVlcnkgPSB0aGlzLmdldENvbmZpZ3VyYXRpb25UeXBlUXVlcnkoZGV2aWNlLCBjb25maWd1cmF0aW9uVHlwZSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5saXN0UmVwb3NpdG9yeUVudHJpZXMoUmVwb3NpdG9yeVR5cGUuQ09ORklHVVJBVElPTiwge1xuICAgICAgcXVlcnk6IHNlYXJjaFF1ZXJ5LFxuICAgICAgcGFyYW1zOiB7IHBhZ2VTaXplOiAxMDAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXMuZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBkZXZpY2UgYWxyZWFkeSBoYXZlIGEgZ2l2ZW4gc29mdHdhcmUgaW5zdGFsbGVkXG4gICAqIEBwYXJhbSBkZXZpY2VJZCBJZCBvZiB0aGUgZGV2aWNlIHRvIGJlIGNoZWNrZWRcbiAgICogQHBhcmFtIHNvZnR3YXJlIFRoZSBzb2Z0d2FyZSB0byBiZSBjaGVja2VkXG4gICAqL1xuICBhc3luYyBpc1NvZnR3YXJlSW5zdGFsbGVkT25EZXZpY2UoXG4gICAgZGV2aWNlSWQ6IHN0cmluZyB8IG51bWJlcixcbiAgICBzb2Z0d2FyZTogRGV2aWNlU29mdHdhcmVcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCEoYXdhaXQgdGhpcy5hZHZhbmNlZFNvZnR3YXJlU2VydmljZS5pc0FTTUF2YWlsYWJsZSgpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5RmlsdGVyID0geyBkZXZpY2VJZCB9O1xuICAgIGlmIChzb2Z0d2FyZT8ubmFtZSkge1xuICAgICAgc2V0KHF1ZXJ5RmlsdGVyLCAnbmFtZScsIHNvZnR3YXJlLm5hbWUpO1xuICAgIH1cbiAgICBpZiAoc29mdHdhcmU/LnZlcnNpb24pIHtcbiAgICAgIHNldChxdWVyeUZpbHRlciwgJ3ZlcnNpb24nLCBzb2Z0d2FyZS52ZXJzaW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTb2Z0d2FyZVNlcnZpY2UubGlzdChxdWVyeUZpbHRlcikudGhlbihyZXN1bHQgPT4gISFyZXN1bHQuZGF0YT8ubGVuZ3RoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgYmluYXJ5IG9iamVjdC5cbiAgICogQHBhcmFtIGJpbmFyeUlkIGJpbmFyeSBJRFxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb2JqZWN0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zOlxuICAgKiAtICoqbm9BbGVydHMqKiAtIGBib29sZWFuYCAtIGRvIG5vdCBkaXNwbGF5IGFuIGFsZXJ0IG1lc3NhZ2U7IGRlZmF1bHRzIHRvIGBmYWxzZWBcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0SW50ZXJuYWxCaW5hcnlSZXNwb25zZShcbiAgICBiaW5hcnlJZDogSWRSZWZlcmVuY2UsXG4gICAgb3B0aW9uczogeyBub0FsZXJ0cz86IGJvb2xlYW4gfSA9IHt9XG4gICk6IFByb21pc2U8SUZldGNoUmVzcG9uc2U+IHtcbiAgICBsZXQgcmVzO1xuICAgIHRyeSB7XG4gICAgICByZXMgPSBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeS5kb3dubG9hZChiaW5hcnlJZCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghb3B0aW9ucy5ub0FsZXJ0cykge1xuICAgICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICAgIHRoaXMuYWxlcnQuZGFuZ2VyKG1zZyk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJpbmFyeSBvYmplY3QuXG4gICAqIEBwYXJhbSBiaW5hcnlVcmwgVGhlIFVSTCB0byBmaW5kIGJpbmFyeVxuICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb2JqZWN0IHdpdGggYWRkaXRpb25hbCBvcHRpb25zOlxuICAgKiAtICoqbm9BbGVydHMqKiAtIGBib29sZWFuYCAtIGRvIG5vdCBkaXNwbGF5IGFuIGFsZXJ0IG1lc3NhZ2U7IGRlZmF1bHRzIHRvIGBmYWxzZWBcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZ2V0RXh0ZXJuYWxCaW5hcnlSZXNwb25zZShcbiAgICBiaW5hcnlVcmw6IHN0cmluZyxcbiAgICBvcHRpb25zOiB7IG5vQWxlcnRzPzogYm9vbGVhbiB9ID0ge31cbiAgKTogUHJvbWlzZTxJRmV0Y2hSZXNwb25zZT4ge1xuICAgIGxldCByZXM7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZldGNoUmVzID0gYXdhaXQgZmV0Y2goYmluYXJ5VXJsKTtcbiAgICAgIGlmIChmZXRjaFJlcy5zdGF0dXMgPj0gNDAwKSB7XG4gICAgICAgIHRocm93IHJlcztcbiAgICAgIH1cbiAgICAgIHJlcyA9IGZldGNoUmVzO1xuICAgIH0gY2F0Y2gge1xuICAgICAgaWYgKCFvcHRpb25zLm5vQWxlcnRzKSB7XG4gICAgICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0NvdWxkIG5vdCBnZXQgdGhlIGV4dGVybmFsIGJpbmFyeScpO1xuICAgICAgICB0aGlzLmFsZXJ0LmRhbmdlcihtc2cpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVFbnRyeShtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4pIHtcbiAgICBjb25zdCBiaW5hcnlJZCA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybChtby51cmwpO1xuICAgIGNvbnN0IG5ld01vID0gYXdhaXQgdGhpcy5pbnZlbnRvcnkuY3JlYXRlKG1vKTtcbiAgICBpZiAoYmluYXJ5SWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW52ZW50b3J5LmNoaWxkQWRkaXRpb25zQWRkKGJpbmFyeUlkLCBuZXdNby5kYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld01vO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB1cGRhdGVFbnRyeShtbzogUGFydGlhbDxJTWFuYWdlZE9iamVjdD4sIHVybCkge1xuICAgIGNvbnN0IGV4aXN0aW5nQmluYXJ5SWQgPSBhd2FpdCB0aGlzLmludmVudG9yeUJpbmFyeS5nZXRJZEZyb21VcmwodXJsKTtcbiAgICBjb25zdCBuZXdCaW5hcnlJZCA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybChtby51cmwpO1xuICAgIGlmIChleGlzdGluZ0JpbmFyeUlkICYmIGV4aXN0aW5nQmluYXJ5SWQgIT09IG5ld0JpbmFyeUlkKSB7XG4gICAgICBjb25zdCBpZCA9IHRoaXMuaW52ZW50b3J5QmluYXJ5LmdldElkRnJvbVVybCh1cmwpO1xuICAgICAgYXdhaXQgdGhpcy5pbnZlbnRvcnlCaW5hcnkuZGVsZXRlKGlkKTtcbiAgICB9XG4gICAgaWYgKG5ld0JpbmFyeUlkKSB7XG4gICAgICBhd2FpdCB0aGlzLmludmVudG9yeS5jaGlsZEFkZGl0aW9uc0FkZChuZXdCaW5hcnlJZCwgbW8pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pbnZlbnRvcnkudXBkYXRlKG1vKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QmFzZVZlcnNpb25SZXN1bHRMaXN0Rm9yTGVnYWN5RW50cnkoZW50cnkpIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHJlczoge30gYXMgSUZldGNoUmVzcG9uc2UsXG4gICAgICBkYXRhOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAuLi5lbnRyeSxcbiAgICAgICAgICBbZW50cnkudHlwZV06IHtcbiAgICAgICAgICAgIHZlcnNpb246IGVudHJ5LnZlcnNpb24sXG4gICAgICAgICAgICB1cmw6IGVudHJ5LnVybFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0gYXMgSVJlc3VsdExpc3Q8SU1hbmFnZWRPYmplY3Q+KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RGV2aWNlU29mdHdhcmVDaGFuZ2VzRnJvbVNvZnR3YXJlTGlzdE9wZXJhdGlvbihcbiAgICBvcGVyYXRpb246IElPcGVyYXRpb24sXG4gICAgZGV2aWNlOiBJTWFuYWdlZE9iamVjdFxuICApOiBQcm9taXNlPERldmljZVNvZnR3YXJlQ2hhbmdlW10+IHtcbiAgICBjb25zdCBjaGFuZ2VzOiBEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdID0gW107XG4gICAgY29uc3QgZGV2aWNlU29mdHdhcmVMaXN0ID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50U29mdHdhcmUoZGV2aWNlLCAnYzh5X1NvZnR3YXJlTGlzdCcsIFtdKTtcbiAgICBmb3JFYWNoKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LCBvcGVyYXRpb25Tb2Z0d2FyZSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2VTb2Z0d2FyZSA9IGZpbmQoZGV2aWNlU29mdHdhcmVMaXN0LCB7IG5hbWU6IG9wZXJhdGlvblNvZnR3YXJlLm5hbWUgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIChvcGVyYXRpb25Tb2Z0d2FyZSAmJiBvcGVyYXRpb25Tb2Z0d2FyZS52ZXJzaW9uKSAhPT1cbiAgICAgICAgKGRldmljZVNvZnR3YXJlICYmIGRldmljZVNvZnR3YXJlLnZlcnNpb24pXG4gICAgICApIHtcbiAgICAgICAgY2hhbmdlcy5wdXNoKHtcbiAgICAgICAgICAuLi5vcGVyYXRpb25Tb2Z0d2FyZSxcbiAgICAgICAgICBhY3Rpb246ICdpbnN0YWxsJ1xuICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JFYWNoKGRldmljZVNvZnR3YXJlTGlzdCwgZGV2aWNlU29mdHdhcmUgPT4ge1xuICAgICAgY29uc3Qgb3BlcmF0aW9uU29mdHdhcmUgPSBmaW5kKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVMaXN0LCB7IG5hbWU6IGRldmljZVNvZnR3YXJlLm5hbWUgfSk7XG4gICAgICBpZiAoXG4gICAgICAgIChvcGVyYXRpb25Tb2Z0d2FyZSAmJiBvcGVyYXRpb25Tb2Z0d2FyZS52ZXJzaW9uKSAhPT1cbiAgICAgICAgKGRldmljZVNvZnR3YXJlICYmIGRldmljZVNvZnR3YXJlLnZlcnNpb24pXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgaW5zdGFsbENoYW5nZSA9IGNoYW5nZXMuZmluZChcbiAgICAgICAgICBjaGFuZ2UgPT4gZGV2aWNlU29mdHdhcmUubmFtZSA9PT0gY2hhbmdlLm5hbWUgJiYgY2hhbmdlLmFjdGlvbiA9PT0gJ2luc3RhbGwnXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNoZWNrIHRoYXQgdGhpcyBzb2Z0d2FyZSBpcyBub3QgYW4gaW5zdGFsbGF0aW9uIHNvZnR3YXJlIGNoYW5nZSwgb3RoZXJ3aXNlIGl0J3MgYW4gdXBkYXRlIGFuZCBub3QgYSByZW1vdmFsXG4gICAgICAgIGlmICghaW5zdGFsbENoYW5nZSkge1xuICAgICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAuLi5kZXZpY2VTb2Z0d2FyZSxcbiAgICAgICAgICAgIGFjdGlvbjogJ2RlbGV0ZSdcbiAgICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjaGFuZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXREZXZpY2VTb2Z0d2FyZUNoYW5nZXNGcm9tU29mdHdhcmVPcGVyYXRpb24oXG4gICAgb3BlcmF0aW9uOiBJT3BlcmF0aW9uLFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3RcbiAgKTogUHJvbWlzZTxEZXZpY2VTb2Z0d2FyZUNoYW5nZVtdPiB7XG4gICAgY29uc3QgY2hhbmdlczogRGV2aWNlU29mdHdhcmVDaGFuZ2VbXSA9IFtdO1xuICAgIGNvbnN0IGRldmljZVNvZnR3YXJlID0gYXdhaXQgdGhpcy5nZXRDdXJyZW50U29mdHdhcmUoZGV2aWNlLCAnYzh5X1NvZnR3YXJlJywge30pO1xuICAgIGZvckVhY2goZGV2aWNlU29mdHdhcmUsIChkZXZpY2VTb2Z0d2FyZVZlcnNpb24sIGRldmljZVNvZnR3YXJlTmFtZSkgPT4ge1xuICAgICAgaWYgKG9wZXJhdGlvbi5jOHlfU29mdHdhcmVbZGV2aWNlU29mdHdhcmVOYW1lXSAhPT0gZGV2aWNlU29mdHdhcmVWZXJzaW9uKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogZGV2aWNlU29mdHdhcmVOYW1lLFxuICAgICAgICAgIHZlcnNpb246IGRldmljZVNvZnR3YXJlVmVyc2lvbixcbiAgICAgICAgICBhY3Rpb246ICdkZWxldGUnXG4gICAgICAgIH0gYXMgRGV2aWNlU29mdHdhcmVDaGFuZ2UpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvckVhY2gob3BlcmF0aW9uLmM4eV9Tb2Z0d2FyZSwgKG9wZXJhdGlvblNvZnR3YXJlVmVyc2lvbiwgb3BlcmF0aW9uU29mdHdhcmVOYW1lKSA9PiB7XG4gICAgICBjb25zdCBkZXZpY2VTb2Z0d2FyZVZlcnNpb24gPSBkZXZpY2VTb2Z0d2FyZSAmJiBkZXZpY2VTb2Z0d2FyZVtvcGVyYXRpb25Tb2Z0d2FyZU5hbWVdO1xuICAgICAgaWYgKGRldmljZVNvZnR3YXJlVmVyc2lvbiAhPT0gb3BlcmF0aW9uU29mdHdhcmVWZXJzaW9uKSB7XG4gICAgICAgIGNoYW5nZXMucHVzaCh7XG4gICAgICAgICAgbmFtZTogb3BlcmF0aW9uU29mdHdhcmVOYW1lLFxuICAgICAgICAgIHZlcnNpb246IG9wZXJhdGlvblNvZnR3YXJlVmVyc2lvbixcbiAgICAgICAgICBhY3Rpb246ICdpbnN0YWxsJ1xuICAgICAgICB9IGFzIERldmljZVNvZnR3YXJlQ2hhbmdlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2hhbmdlcztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q3VycmVudFNvZnR3YXJlKFxuICAgIGRldmljZTogSU1hbmFnZWRPYmplY3QsXG4gICAgc3dGcmFnbWVudDogc3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogb2JqZWN0XG4gICk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgaXNBU01BdmFpbGFibGUgPSBhd2FpdCB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlLmlzQVNNQXZhaWxhYmxlKCk7XG4gICAgaWYgKGlzQVNNQXZhaWxhYmxlKSB7XG4gICAgICBsZXQgc29mdHdhcmVSZXN1bHRMaXN0OiBJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4gPSBhd2FpdCB0aGlzLmFkdmFuY2VkU29mdHdhcmVTZXJ2aWNlLmxpc3QoXG4gICAgICAgIHsgZGV2aWNlSWQ6IGRldmljZS5pZCwgcGFnZVNpemU6IDEwMCB9XG4gICAgICApO1xuICAgICAgbGV0IGxpc3QgPSAoc29mdHdhcmVSZXN1bHRMaXN0Py5kYXRhIHx8IFtdKS5tYXAoc3cgPT5cbiAgICAgICAgcGljayhvbWl0Qnkoc3csIGlzTmlsKSwgWyduYW1lJywgJ3ZlcnNpb24nLCAndXJsJywgJ3NvZnR3YXJlVHlwZSddKVxuICAgICAgKTtcblxuICAgICAgd2hpbGUgKHNvZnR3YXJlUmVzdWx0TGlzdC5wYWdpbmc/Lm5leHRQYWdlKSB7XG4gICAgICAgIHNvZnR3YXJlUmVzdWx0TGlzdCA9IGF3YWl0IHNvZnR3YXJlUmVzdWx0TGlzdC5wYWdpbmcubmV4dCgpO1xuICAgICAgICBsaXN0ID0gW1xuICAgICAgICAgIC4uLmxpc3QsXG4gICAgICAgICAgLi4uKHNvZnR3YXJlUmVzdWx0TGlzdD8uZGF0YSB8fCBbXSkubWFwKHN3ID0+XG4gICAgICAgICAgICBwaWNrKG9taXRCeShzdywgaXNOaWwpLCBbJ25hbWUnLCAndmVyc2lvbicsICd1cmwnLCAnc29mdHdhcmVUeXBlJ10pXG4gICAgICAgICAgKVxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWxpc3Q/Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpID8gbGlzdCA6IHRoaXMuc29mdHdhcmVMaXN0VG9MZWdhY3kobGlzdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBkZXZpY2Vbc3dGcmFnbWVudF0gfHwgZGVmYXVsdFZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc29mdHdhcmVMaXN0VG9MZWdhY3kobGlzdDogSU1hbmFnZWRPYmplY3RbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIChsaXN0IHx8IFtdKS5yZWR1Y2UoKHByZXYsIGN1cnIpID0+ICh7IC4uLnByZXYsIFtjdXJyLm5hbWVdOiBjdXJyLnZlcnNpb24gfSksIHt9KTtcbiAgfVxufVxuIl19
|
package/esm2020/services/services-device-tab/columns/last-updated-date.device-grid-column.mjs
CHANGED
|
@@ -51,19 +51,13 @@ export class LastUpdatedDateGridColumn extends BaseColumn {
|
|
|
51
51
|
if (dates.after) {
|
|
52
52
|
const after = self.formatDate(dates.after);
|
|
53
53
|
filter.__and.push({
|
|
54
|
-
|
|
55
|
-
[self.path]: { __gt: after },
|
|
56
|
-
[`${self.path}.date`]: { __gt: after }
|
|
57
|
-
}
|
|
54
|
+
'lastUpdated.date': { __gt: after }
|
|
58
55
|
});
|
|
59
56
|
}
|
|
60
57
|
if (dates.before) {
|
|
61
58
|
const before = self.formatDate(dates.before);
|
|
62
59
|
filter.__and.push({
|
|
63
|
-
|
|
64
|
-
[self.path]: { __lt: before },
|
|
65
|
-
[`${self.path}.date`]: { __lt: before }
|
|
66
|
-
}
|
|
60
|
+
'lastUpdated.date': { __lt: before }
|
|
67
61
|
});
|
|
68
62
|
}
|
|
69
63
|
}
|
|
@@ -72,11 +66,11 @@ export class LastUpdatedDateGridColumn extends BaseColumn {
|
|
|
72
66
|
};
|
|
73
67
|
this.sortable = true;
|
|
74
68
|
this.sortingConfig = {
|
|
75
|
-
pathSortingConfigs: [{ path:
|
|
69
|
+
pathSortingConfigs: [{ path: 'lastUpdated.date' }]
|
|
76
70
|
};
|
|
77
71
|
}
|
|
78
72
|
formatDate(dateToFormat) {
|
|
79
73
|
return new Date(dateToFormat).toISOString();
|
|
80
74
|
}
|
|
81
75
|
}
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFzdC11cGRhdGVkLWRhdGUuZGV2aWNlLWdyaWQtY29sdW1uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc2VydmljZXMvc2VydmljZXMtZGV2aWNlLXRhYi9jb2x1bW5zL2xhc3QtdXBkYXRlZC1kYXRlLmRldmljZS1ncmlkLWNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBZ0IsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFFbkcsTUFBTSxPQUFPLHlCQUEwQixTQUFRLFVBQVU7SUFDdkQsWUFBWSxtQkFBa0M7UUFDNUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFM0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWxCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsaUJBQWlCLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLHFCQUFxQixHQUFHLG9DQUFvQyxDQUFDO1FBRWxFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDckIsTUFBTSxFQUFFO2dCQUNOO29CQUNFLElBQUksRUFBRSxRQUFRO29CQUNkLEdBQUcsRUFBRSxhQUFhO29CQUNsQixlQUFlLEVBQUU7d0JBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxzQ0FBc0MsQ0FBQztxQkFDdkQ7b0JBQ0QsVUFBVSxFQUFFO3dCQUNWOzRCQUNFLElBQUksRUFBRSxXQUFXOzRCQUNqQixHQUFHLEVBQUUsT0FBTzs0QkFDWixlQUFlLEVBQUU7Z0NBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUM7NkJBQzdCOzRCQUNELG9CQUFvQixFQUFFO2dDQUNwQix5QkFBeUIsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU07NkJBQ3pEO3lCQUNGO3dCQUNEOzRCQUNFLElBQUksRUFBRSxXQUFXOzRCQUNqQixHQUFHLEVBQUUsUUFBUTs0QkFDYixlQUFlLEVBQUU7Z0NBQ2YsS0FBSyxFQUFFLE9BQU8sQ0FBQyxVQUFVLENBQUM7NkJBQzNCOzRCQUNELG9CQUFvQixFQUFFO2dDQUNwQix5QkFBeUIsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsS0FBSyxFQUFFLEtBQUs7NkJBQ3hEO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0Y7WUFDRCxTQUFTLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxLQUFLO2dCQUNiLE1BQU0sTUFBTSxHQUFRLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxLQUFLLEdBQUcsS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUM7Z0JBQ3pDLElBQUksS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQzFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO29CQUNsQixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBQ2YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzNDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDOzRCQUNoQixrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7eUJBQ3BDLENBQUMsQ0FBQztxQkFDSjtvQkFDRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUU7d0JBQ2hCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUM3QyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzs0QkFDaEIsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO3lCQUNyQyxDQUFDLENBQUM7cUJBQ0o7aUJBQ0Y7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztTQUNGLENBQUM7UUFFRixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLGtCQUFrQixFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQztTQUNuRCxDQUFDO0lBQ0osQ0FBQztJQUVTLFVBQVUsQ0FBQyxZQUFvQjtRQUN2QyxPQUFPLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJhc2VDb2x1bW4sIENvbHVtbkNvbmZpZywgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgTGFzdFVwZGF0ZWREYXRlQ2VsbFJlbmRlcmVyQ29tcG9uZW50IH0gZnJvbSAnLi9sYXN0LXVwZGF0ZWQtZGF0ZS5jZWxsLXJlbmRlcmVyLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBMYXN0VXBkYXRlZERhdGVHcmlkQ29sdW1uIGV4dGVuZHMgQmFzZUNvbHVtbiB7XG4gIGNvbnN0cnVjdG9yKGluaXRpYWxDb2x1bW5Db25maWc/OiBDb2x1bW5Db25maWcpIHtcbiAgICBzdXBlcihpbml0aWFsQ29sdW1uQ29uZmlnKTtcblxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgdGhpcy5wYXRoID0gJ2xhc3RVcGRhdGVkJztcbiAgICB0aGlzLm5hbWUgPSAnbGFzdFVwZGF0ZWREYXRlJztcbiAgICB0aGlzLmhlYWRlciA9IGdldHRleHQoJ0xhc3QgdXBkYXRlZCcpO1xuICAgIHRoaXMuY2VsbFJlbmRlcmVyQ29tcG9uZW50ID0gTGFzdFVwZGF0ZWREYXRlQ2VsbFJlbmRlcmVyQ29tcG9uZW50O1xuXG4gICAgdGhpcy5maWx0ZXJhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLmZpbHRlcmluZ0NvbmZpZyA9IHtcbiAgICAgIGZpZWxkczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgICAga2V5OiAnbGFzdFVwZGF0ZWQnLFxuICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1Nob3cgc2VydmljZXMgdXBkYXRlZGBiZXR3ZWVuIGRhdGVzYCcpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWVsZEdyb3VwOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHR5cGU6ICdkYXRlLXRpbWUnLFxuICAgICAgICAgICAgICBrZXk6ICdhZnRlcicsXG4gICAgICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdmcm9tYGRhdGVgJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAndGVtcGxhdGVPcHRpb25zLm1heERhdGUnOiAobW9kZWw6IGFueSkgPT4gbW9kZWw/LmJlZm9yZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0eXBlOiAnZGF0ZS10aW1lJyxcbiAgICAgICAgICAgICAga2V5OiAnYmVmb3JlJyxcbiAgICAgICAgICAgICAgdGVtcGxhdGVPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ3RvYGRhdGVgJylcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXhwcmVzc2lvblByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgICAndGVtcGxhdGVPcHRpb25zLm1pbkRhdGUnOiAobW9kZWw6IGFueSkgPT4gbW9kZWw/LmFmdGVyXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBmb3JtR3JvdXA6IG5ldyBGb3JtR3JvdXAoe30pLFxuICAgICAgZ2V0RmlsdGVyKG1vZGVsKSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcjogYW55ID0ge307XG4gICAgICAgIGNvbnN0IGRhdGVzID0gbW9kZWwgJiYgbW9kZWwubGFzdFVwZGF0ZWQ7XG4gICAgICAgIGlmIChkYXRlcyAmJiAoZGF0ZXMuYWZ0ZXIgfHwgZGF0ZXMuYmVmb3JlKSkge1xuICAgICAgICAgIGZpbHRlci5fX2FuZCA9IFtdO1xuICAgICAgICAgIGlmIChkYXRlcy5hZnRlcikge1xuICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSBzZWxmLmZvcm1hdERhdGUoZGF0ZXMuYWZ0ZXIpO1xuICAgICAgICAgICAgZmlsdGVyLl9fYW5kLnB1c2goe1xuICAgICAgICAgICAgICAnbGFzdFVwZGF0ZWQuZGF0ZSc6IHsgX19ndDogYWZ0ZXIgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRlcy5iZWZvcmUpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IHNlbGYuZm9ybWF0RGF0ZShkYXRlcy5iZWZvcmUpO1xuICAgICAgICAgICAgZmlsdGVyLl9fYW5kLnB1c2goe1xuICAgICAgICAgICAgICAnbGFzdFVwZGF0ZWQuZGF0ZSc6IHsgX19sdDogYmVmb3JlIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLnNvcnRhYmxlID0gdHJ1ZTtcbiAgICB0aGlzLnNvcnRpbmdDb25maWcgPSB7XG4gICAgICBwYXRoU29ydGluZ0NvbmZpZ3M6IFt7IHBhdGg6ICdsYXN0VXBkYXRlZC5kYXRlJyB9XVxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgZm9ybWF0RGF0ZShkYXRlVG9Gb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVUb0Zvcm1hdCkudG9JU09TdHJpbmcoKTtcbiAgfVxufVxuIl19
|