@vgroup/dialbox 0.8.20 → 0.8.21
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/lib/components/call-progress/call-progress.component.mjs +23 -15
- package/esm2020/lib/dialbox.component.mjs +3 -3
- package/esm2020/lib/environments/environments.mjs +10 -10
- package/esm2020/lib/service/twilio.service.mjs +1 -1
- package/fesm2015/vgroup-dialbox.mjs +34 -25
- package/fesm2015/vgroup-dialbox.mjs.map +1 -1
- package/fesm2020/vgroup-dialbox.mjs +33 -25
- package/fesm2020/vgroup-dialbox.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
export const environment = {
|
|
2
|
-
abb: "
|
|
2
|
+
abb: "d",
|
|
3
3
|
production: false,
|
|
4
4
|
secureCookies: true,
|
|
5
|
-
feUrl: 'https://
|
|
6
|
-
apiUrl: 'https://
|
|
7
|
-
websocketUrl: 'wss://
|
|
5
|
+
feUrl: 'https://dev.vgroupinc.com:91/',
|
|
6
|
+
apiUrl: 'https://dev-api-t10.vgroupinc.com/dev_softphone_p91',
|
|
7
|
+
websocketUrl: 'wss://dev-api-t10.vgroupinc.com/dev_softphone_p91/',
|
|
8
8
|
captchaKey: "6LfpOmEaAAAAAGsI6JXlMzOl3b7rW4YmYXFDjldD",
|
|
9
|
-
stripePublishableKey: "
|
|
9
|
+
stripePublishableKey: "pk_test_51K6aTuBiNVV2TMlQfmBWY8jziwiDo0IZ3TrqWPqth1m32cpMAAg5Qpi2AlSMDEAX6hCZRBXoTzBB1uQQLc8B4tco00q2SgG6zO",
|
|
10
10
|
sessionTimeout: 15,
|
|
11
11
|
deviceType: "web",
|
|
12
12
|
appVersion: "2.3",
|
|
13
13
|
channelId: '61481b12e138eb7dc3007579',
|
|
14
14
|
c2c_support_point_id: '60424735f74ac306c1bfa900',
|
|
15
|
-
c2c_support_channel_id: '
|
|
15
|
+
c2c_support_channel_id: '677f67f3be93ab507fbbfdfc',
|
|
16
16
|
c2c_point_url: 'https://app.contexttocall.com/assets/cdn/c2c.js',
|
|
17
|
-
c2c_call_label_id: '
|
|
18
|
-
c2c_email_label_id: '
|
|
17
|
+
c2c_call_label_id: 'ye2XFLfOHCr12GFVRzPh',
|
|
18
|
+
c2c_email_label_id: 'mvjVgOP2VCiYsVovQqdq',
|
|
19
19
|
radarAPIKey: 'prj_live_sk_569b6f639edde6120a26f703511c61aaecd3f7ef',
|
|
20
20
|
firebase: {
|
|
21
21
|
apiKey: "AIzaSyCA8LSPrqlDq_thk26LhBQexAQeY6pkU5Y",
|
|
@@ -29,7 +29,7 @@ export const environment = {
|
|
|
29
29
|
},
|
|
30
30
|
perspectiveApiKey: 'AIzaSyClf32lvLH4QOy-vOnzLzwSNntKIgapH8s',
|
|
31
31
|
keycloakURL: 'https://test-keycloak.vgroupinc.com/',
|
|
32
|
-
keycloakRealm: 'vgroup-
|
|
32
|
+
keycloakRealm: 'vgroup-dev',
|
|
33
33
|
keycloakClientId: 'c2c-softphone-app'
|
|
34
34
|
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHO0lBQ3pCLEdBQUcsRUFBRSxHQUFHO0lBQ1IsVUFBVSxFQUFFLEtBQUs7SUFDakIsYUFBYSxFQUFFLElBQUk7SUFDbkIsS0FBSyxFQUFFLCtCQUErQjtJQUN0QyxNQUFNLEVBQUUscURBQXFEO0lBQzdELFlBQVksRUFBRSxvREFBb0Q7SUFDbEUsVUFBVSxFQUFFLDBDQUEwQztJQUN0RCxvQkFBb0IsRUFBRSw2R0FBNkc7SUFDbkksY0FBYyxFQUFFLEVBQUU7SUFDbEIsVUFBVSxFQUFFLEtBQUs7SUFDakIsVUFBVSxFQUFFLEtBQUs7SUFDakIsU0FBUyxFQUFFLDBCQUEwQjtJQUNyQyxvQkFBb0IsRUFBRSwwQkFBMEI7SUFDaEQsc0JBQXNCLEVBQUUsMEJBQTBCO0lBQ2xELGFBQWEsRUFBRSxpREFBaUQ7SUFDaEUsaUJBQWlCLEVBQUUsc0JBQXNCO0lBQ3pDLGtCQUFrQixFQUFFLHNCQUFzQjtJQUMxQyxXQUFXLEVBQUUsc0RBQXNEO0lBQ25FLFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSx5Q0FBeUM7UUFDakQsVUFBVSxFQUFFLGlDQUFpQztRQUM3QyxTQUFTLEVBQUUsaUJBQWlCO1FBQzVCLGFBQWEsRUFBRSw2QkFBNkI7UUFDNUMsaUJBQWlCLEVBQUUsY0FBYztRQUNqQyxLQUFLLEVBQUUsMkNBQTJDO1FBQ2xELGFBQWEsRUFBRSxjQUFjO1FBQzdCLFFBQVEsRUFBRSx5RkFBeUY7S0FDcEc7SUFDRCxpQkFBaUIsRUFBRSx5Q0FBeUM7SUFDNUQsV0FBVyxFQUFFLHNDQUFzQztJQUNuRCxhQUFhLEVBQUUsWUFBWTtJQUMzQixnQkFBZ0IsRUFBRSxtQkFBbUI7Q0FDdEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBlbnZpcm9ubWVudCA9IHtcclxuICBhYmI6IFwiZFwiLFxyXG4gIHByb2R1Y3Rpb246IGZhbHNlLFxyXG4gIHNlY3VyZUNvb2tpZXM6IHRydWUsXHJcbiAgZmVVcmw6ICdodHRwczovL2Rldi52Z3JvdXBpbmMuY29tOjkxLycsXHJcbiAgYXBpVXJsOiAnaHR0cHM6Ly9kZXYtYXBpLXQxMC52Z3JvdXBpbmMuY29tL2Rldl9zb2Z0cGhvbmVfcDkxJyxcclxuICB3ZWJzb2NrZXRVcmw6ICd3c3M6Ly9kZXYtYXBpLXQxMC52Z3JvdXBpbmMuY29tL2Rldl9zb2Z0cGhvbmVfcDkxLycsXHJcbiAgY2FwdGNoYUtleTogXCI2TGZwT21FYUFBQUFBR3NJNkpYbE16T2wzYjdyVzRZbVlYRkRqbGREXCIsXHJcbiAgc3RyaXBlUHVibGlzaGFibGVLZXk6IFwicGtfdGVzdF81MUs2YVR1QmlOVlYyVE1sUWZtQldZOGp6aXdpRG8wSVozVHJxV1BxdGgxbTMyY3BNQUFnNVFwaTJBbFNNREVBWDZoQ1pSQlhvVHpCQjF1UVFMYzhCNHRjbzAwcTJTZ0c2ek9cIixcclxuICBzZXNzaW9uVGltZW91dDogMTUsIC8vaW4gbWlucyxcclxuICBkZXZpY2VUeXBlOiBcIndlYlwiLFxyXG4gIGFwcFZlcnNpb246IFwiMi4zXCIsXHJcbiAgY2hhbm5lbElkOiAnNjE0ODFiMTJlMTM4ZWI3ZGMzMDA3NTc5JyxcclxuICBjMmNfc3VwcG9ydF9wb2ludF9pZDogJzYwNDI0NzM1Zjc0YWMzMDZjMWJmYTkwMCcsXHJcbiAgYzJjX3N1cHBvcnRfY2hhbm5lbF9pZDogJzY3N2Y2N2YzYmU5M2FiNTA3ZmJiZmRmYycsXHJcbiAgYzJjX3BvaW50X3VybDogJ2h0dHBzOi8vYXBwLmNvbnRleHR0b2NhbGwuY29tL2Fzc2V0cy9jZG4vYzJjLmpzJyxcclxuICBjMmNfY2FsbF9sYWJlbF9pZDogJ3llMlhGTGZPSENyMTJHRlZSelBoJywvLyBkZXZcclxuICBjMmNfZW1haWxfbGFiZWxfaWQ6ICdtdmpWZ09QMlZDaVlzVm92UXFkcScsLy8gZGV2XHJcbiAgcmFkYXJBUElLZXk6ICdwcmpfbGl2ZV9za181NjliNmY2MzllZGRlNjEyMGEyNmY3MDM1MTFjNjFhYWVjZDNmN2VmJyxcclxuICBmaXJlYmFzZToge1xyXG4gICAgYXBpS2V5OiBcIkFJemFTeUNBOExTUHJxbERxX3RoazI2TGhCUWV4QVFlWTZwa1U1WVwiLFxyXG4gICAgYXV0aERvbWFpbjogXCJzb2Z0cGhvbmUtZDU3NzcuZmlyZWJhc2VhcHAuY29tXCIsXHJcbiAgICBwcm9qZWN0SWQ6IFwic29mdHBob25lLWQ1Nzc3XCIsXHJcbiAgICBzdG9yYWdlQnVja2V0OiBcInNvZnRwaG9uZS1kNTc3Ny5hcHBzcG90LmNvbVwiLFxyXG4gICAgbWVzc2FnaW5nU2VuZGVySWQ6IFwiODUwODEyNDk0NTM4XCIsXHJcbiAgICBhcHBJZDogXCIxOjg1MDgxMjQ5NDUzODp3ZWI6NzRmOGEzMGZjMThlMjhkZWQ3OGEzM1wiLFxyXG4gICAgbWVhc3VyZW1lbnRJZDogXCJHLU5HWFRTVjlTSDNcIixcclxuICAgIHZhcGlkS2V5OiBcIkJENkVnY1FnYlpUak9RZmxlRzNZbEVjMF9TYWpCMDNwcnFUZER5LXFHSmt4VHhlemJxLUFfcXR1WEUxbDN5VDQ3bzhoblRBYlRLQmNIMTVEMkFKQjJUb1wiXHJcbiAgfSxcclxuICBwZXJzcGVjdGl2ZUFwaUtleTogJ0FJemFTeUNsZjMybHZMSDRRT3ktdk9uekx6d1NObnRLSWdhcEg4cycsXHJcbiAga2V5Y2xvYWtVUkw6ICdodHRwczovL3Rlc3Qta2V5Y2xvYWsudmdyb3VwaW5jLmNvbS8nLFxyXG4gIGtleWNsb2FrUmVhbG06ICd2Z3JvdXAtZGV2JyxcclxuICBrZXljbG9ha0NsaWVudElkOiAnYzJjLXNvZnRwaG9uZS1hcHAnXHJcbn07Il19
|
|
@@ -712,4 +712,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
712
712
|
providedIn: 'root'
|
|
713
713
|
}]
|
|
714
714
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ExtensionService }]; } });
|
|
715
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBNEN4Qix5QkFBeUIsQ0FBQyxPQUFZLEVBQUUsWUFBcUI7UUFDM0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBQ3RFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7UUFDekMsT0FBTyxJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxPQUFPLENBQUM7WUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUFDLFdBQW9CO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztRQUNoRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFD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QUFTLEVBQUUsRUFBRTtTQUNuRCxDQUFDLENBQUE7SUFDSixDQUFDOzsyR0E1dEJVLGFBQWE7K0dBQWIsYUFBYSxjQUZaLE1BQU07NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IERldmljZSwgQ2FsbCB9IGZyb20gJ0B0d2lsaW8vdm9pY2Utc2RrJztcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuL2V4dGVuc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50cyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhbFBheWxvYWQge1xuICBudW1iZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBpbWc6IHN0cmluZztcbiAgY2FsbGVySWQ6c3RyaW5nO1xuICBpc0RpYWxGcm9tSGlzdG9yeTpib29sZWFuO1xuICBmcm9tOnN0cmluZztcbn1cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcgIFxufSlcbmV4cG9ydCBjbGFzcyBUd2lsaW9TZXJ2aWNlIHtcbiAgXG4gIG9wZW5JblByb2dyZXNzRGlhbHBhZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBjdXJyZW50Q2FsbCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2FsbCB8IG51bGw+KG51bGwpO1xuICBjdXJyZW50Q2FsbFN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KCdub25lJyk7IC8vaW4tcHJvZ3Jlc3MsIG91dC1wcm9ncmVzcywgbm9uZVxuICBkZXZpY2U6YW55O1xuICBjYWxsITogQ2FsbDtcbiAgaW5jb21pbmdDYWxsVG9rZW46c3RyaW5nPScnO1xuICBvdXRnb2luZ0NhbGxUb2tlbj86c3RyaW5nO1xuICBjYWxsVHlwZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignTklMJyk7XG4gIGluY29taW5nQ2FsbERldGFpbDogYW55OyAvLyBmb3IgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmdcbiAgdG9rZW46YW55ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpO1xuICBpc05ld0NvbnRhY3RBZGRlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICB1cGRhdGVSZWNlbnRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGNhbGxoYW5kbGVGcm9tTm90aWZpY2F0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHt9KTtcblxuICBlbmRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGRpYWxOdW1iZXJGcm9tT3RoZXJNb2R1bGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERpYWxQYXlsb2FkPih7IG51bWJlcjogJycsIG5hbWU6ICcnLCBpbWc6ICcnLCBjYWxsZXJJZDogJycsIGlzRGlhbEZyb21IaXN0b3J5OiBmYWxzZSwgZnJvbTogJycgfSk7XG5cbiAgdG9nZ2xlQ2FsbGVySWRBbGVydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gIGlzVHJpYWxPdmVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIGlzUGF5bWVudER1ZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBpc0F2YWlsYWJsZU51bWJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBjYWxsZXJJZExpc3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gIHRyaWdnZXJTTVNSZWxvYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSB0b2tlbkluaXRpYWxpemF0aW9uJDogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIGRldmljZUlkOiBhbnk7XG4gIGNvbmZlcmVuY2VDYWxsSW5mbzogYW55O1xuICBpc1Nob3dJbmNvbWluZ0NhbGw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBDUklUSUNBTDogVHJhY2sgYWxsIGFjY2VwdGVkIENhbGwgb2JqZWN0cyAobWlycm9ycyBpT1MgYWNjZXB0ZWRDYWxsTGlzdClcbiAgLy8gVXNlZCB0byBndWFyZCBkZXZpY2UgcmUtaW5pdGlhbGl6YXRpb24gc28gYWN0aXZlIGNhbGxzIGFyZSBuZXZlciB0b3JuIGRvd25cbiAgYWNjZXB0ZWRDYWxsTGlzdDogQ2FsbFtdID0gW107XG4gIC8vIFRydWUgd2hpbGUgYW4gb3V0Z29pbmcgY2FsbCBpcyBiZWluZyBzZXQgdXAgKGluaXRpYXRlIEFQSSDihpIgc3BlY2lhbCBjYWxsIGNoYXJnZXMgbW9kYWwg4oaSIFR3aWxpb1xuICAvLyBjbGllbnQgbGVnIGNvbm5lY3RlZCkuIFNvY2tldCB0aWNrcyBhcmUgZW1wdHkgZHVyaW5nIHRoaXMgd2luZG93LCBzbyBkaWFsYm94IG11c3Qgbm90IHRyZWF0IHRoZW0gYXMgaWRsZS5cbiAgaXNBd2FpdGluZ1NwZWNpYWxDYWxsQ29uZmlybTogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBTcGVjaWFsIGNhbGwgY2hhcmdlcyBtb2RhbCBzdGF0ZS4gaW5DYWxsU2NyZWVuOiB0cnVlIOKGkiByZW5kZXJlZCBieSBjYWxsLXByb2dyZXNzIChhIGNhbGwgc2NyZWVuIGlzIG9wZW4pLFxuICAvLyBmYWxzZSDihpIgcmVuZGVyZWQgYnkgZGlhbGJveCBvdmVyIHRoZSBcIkNvbm5lY3RpbmcuLi5cIiBsb2FkZXIgKGZpcnN0IGNhbGwsIGNhbGwgc2NyZWVuIG5vdCByZW5kZXJlZCB5ZXQpXG4gIHNwZWNpYWxDYWxsQ29uZmlybTogeyBtZXNzYWdlOiBhbnk7IGluQ2FsbFNjcmVlbjogYm9vbGVhbiB9IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3BlY2lhbENhbGxDb25maXJtUmVzb2x2ZXI6ICgoaXNDb25maXJtZWQ6IGJvb2xlYW4pID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG5cbiAgcmVxdWVzdFNwZWNpYWxDYWxsQ29uZmlybShtZXNzYWdlOiBhbnksIGluQ2FsbFNjcmVlbjogYm9vbGVhbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMucmVzb2x2ZVNwZWNpYWxDYWxsQ29uZmlybShmYWxzZSk7IC8vIGNsb3NlIGFueSBzdGFsZSBjb25maXJtYXRpb25cbiAgICB0aGlzLmlzQXdhaXRpbmdTcGVjaWFsQ2FsbENvbmZpcm0gPSB0cnVlO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy5zcGVjaWFsQ2FsbENvbmZpcm1SZXNvbHZlciA9IHJlc29sdmU7XG4gICAgICB0aGlzLnNwZWNpYWxDYWxsQ29uZmlybSA9IHsgbWVzc2FnZSwgaW5DYWxsU2NyZWVuIH07XG4gICAgfSk7XG4gIH1cblxuICByZXNvbHZlU3BlY2lhbENhbGxDb25maXJtKGlzQ29uZmlybWVkOiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVzb2x2ZSA9IHRoaXMuc3BlY2lhbENhbGxDb25maXJtUmVzb2x2ZXI7XG4gICAgdGhpcy5zcGVjaWFsQ2FsbENvbmZpcm1SZXNvbHZlciA9IG51bGw7XG4gICAgdGhpcy5zcGVjaWFsQ2FsbENvbmZpcm0gPSBudWxsO1xuICAgIGlmIChpc0NvbmZpcm1lZCkge1xuICAgICAgLy8gVHdpbGlvIGhhcyBub3QgY29ubmVjdGVkIHlldCDigJMga2VlcCB0aGUgY2FsbCBzY3JlZW4gYWxpdmUgdW50aWwgY2FsbC1wcm9ncmVzcyByZXBvcnRzIHRoZVxuICAgICAgLy8gY2xpZW50IGxlZyBpcyBjb25uZWN0ZWQgKHJlbGVhc2VTcGVjaWFsQ2FsbEd1YXJkKSwgd2l0aCBhIHNhZmV0eSB0aW1lb3V0LlxuICAgICAgdGhpcy5ob2xkQ2FsbFNjcmVlbkd1YXJkKDIwMDAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZWxlYXNlU3BlY2lhbENhbGxHdWFyZCgpO1xuICAgIH1cbiAgICByZXNvbHZlPy4oaXNDb25maXJtZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzcGVjaWFsQ2FsbEd1YXJkVGltZXI6IGFueTtcbiAgLy8gS2VlcCB0aGUgY2FsbCBzY3JlZW4gYWxpdmUgd2hpbGUgYW4gb3V0Z29pbmcgY2FsbCBpcyBzZXQgdXAuIFRoZSBzYWZldHkgdGltZW91dCBvbmx5IGNvdmVyc1xuICAvLyBBUEkvVHdpbGlvIHdhaXRzIOKAlCByZXF1ZXN0U3BlY2lhbENhbGxDb25maXJtKCkgY2xlYXJzIGl0IHNvIHRoZSBjaGFyZ2VzIG1vZGFsIGNhbiBzdGF5IG9wZW4gaW5kZWZpbml0ZWx5LlxuICBob2xkQ2FsbFNjcmVlbkd1YXJkKHRpbWVvdXRNczogbnVtYmVyID0gMzAwMDApIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5zcGVjaWFsQ2FsbEd1YXJkVGltZXIpO1xuICAgIHRoaXMuaXNBd2FpdGluZ1NwZWNpYWxDYWxsQ29uZmlybSA9IHRydWU7XG4gICAgdGhpcy5zcGVjaWFsQ2FsbEd1YXJkVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVsZWFzZVNwZWNpYWxDYWxsR3VhcmQoKSwgdGltZW91dE1zKTtcbiAgfVxuXG4gIHJlbGVhc2VTcGVjaWFsQ2FsbEd1YXJkKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnNwZWNpYWxDYWxsR3VhcmRUaW1lcik7XG4gICAgdGhpcy5pc0F3YWl0aW5nU3BlY2lhbENhbGxDb25maXJtID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHByaW1hcnlIYXNDYWxsID0gZmFsc2U7XG4gIHNwYXJlRGV2aWNlOiBhbnkgPSBudWxsO1xuICBzcGFyZURldmljZVJlYWR5ID0gZmFsc2U7XG4gIHByaXZhdGUgcGVuZGluZ0luY29taW5nRGV2aWNlcyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIHByaXZhdGUgZXh0cmFEZXZpY2VzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgaW5jb21pbmdDYWxsc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgLy8gQkUgaXNzdWVzIGluY29taW5nLWNhbGwgYWNjZXNzIHRva2VucyB3aXRoIGEgMWgzMG0gVFRMLiBBc2sgVHdpbGlvIHRvIGZpcmVcbiAgLy8gJ3Rva2VuV2lsbEV4cGlyZScgNSBtaW51dGVzIGJlZm9yZSB0aGF0IChTREsgZGVmYXVsdCBpcyBvbmx5IDEwcykgc28gYSBzbG93XG4gIC8vIG5ldHdvcmsgLyBiYWNrZ3JvdW5kZWQgdGFiIHN0aWxsIGhhcyB0aW1lIHRvIGZldGNoIGFuZCBhcHBseSBhIGZyZXNoIHRva2VuLlxuICBwcml2YXRlIHJlYWRvbmx5IFRPS0VOX1JFRlJFU0hfTVMgPSA1ICogNjAgKiAxMDAwO1xuICBwcml2YXRlIHRva2VuUmVmcmVzaEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWNvdmVyeUF0dGVtcHRzID0gMDtcbiAgcHJpdmF0ZSByZWNvdmVyeVRpbWVyOiBhbnkgPSBudWxsO1xuICAvLyBSZWZlcmVuY2VzIHRvIHRoZSAndW5yZWdpc3RlcmVkJy8nZXJyb3InIGhhbmRsZXJzIGN1cnJlbnRseSBhdHRhY2hlZCB0byBgdGhpcy5kZXZpY2VgLFxuICAvLyBzbyBhbiBpbnRlbnRpb25hbCByZXBsYWNlIGNhbiBkZXRhY2ggZXhhY3RseSB0aG9zZSB0d28gYmVmb3JlIGRlc3Ryb3koKSB3aXRob3V0XG4gIC8vIHRvdWNoaW5nIGFueSBsaXN0ZW5lcnMgdGhlIFR3aWxpbyBTREsgaXRzZWxmIG1heSBoYXZlIHdpcmVkIHRvIHRoZSBzYW1lIEV2ZW50RW1pdHRlci5cbiAgcHJpdmF0ZSBjdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcjogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBjdXJyZW50RGV2aWNlRXJyb3JIYW5kbGVyOiBhbnkgPSBudWxsO1xuICBpbmNvbWluZ0NhbGxOb3RpZmljYXRpb249IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJldmlvdXNJbmNvbWluZ0NhbGxOb3RpZmljYXRpb246IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLFxuICApIHtcbiAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpO1xuICAgIC8vIFNhZmV0eSBuZXQgZm9yIGxvbmcgaWRsZS9zbGVlcCBwZXJpb2RzOiB0aGUgc2lnbmFsaW5nIHNvY2tldCBjYW4gZGllIHNpbGVudGx5XG4gICAgLy8gKE9TIHN1c3BlbmRzIHRpbWVycywgdGFiIGlzIGJhY2tncm91bmRlZCkgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnLlxuICAgIC8vIFJlLWNoZWNrIGRldmljZSBoZWFsdGggd2hlbmV2ZXIgdGhlIGFwcCBiZWNvbWVzIGFjdGl2ZS9vbmxpbmUgYWdhaW4uXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsICgpID0+IHtcbiAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgICB0aGlzLmVuc3VyZURldmljZUhlYWx0aHkoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb25saW5lJywgKCkgPT4gdGhpcy5lbnN1cmVEZXZpY2VIZWFsdGh5KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplVG9rZW4oKSB7XG4gICAgaWYgKHRoaXMudG9rZW5Jbml0aWFsaXplZCkge1xuICAgICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XG4gICAgfVxuICAgIC8vIEEgZmV0Y2ggaXMgYWxyZWFkeSBpbiBmbGlnaHQg4oCUIEFwcEluaXRpYWxpemVyU2VydmljZSBhbmQgdGhlIGRpYWxib3ggY29tcG9uZW50XG4gICAgLy8gYm90aCBjYWxsIGluaXRpYWxpemVUd2lsaW9EZXZpY2UoKSBvbiBzdGFydHVwLCBhbmQgd2l0aG91dCB0aGlzIHRoZXknZCByYWNlOlxuICAgIC8vIHRoZSBzZWNvbmQgY2FsbCB3b3VsZCBmaXJlIGl0cyBvd24gdG9rZW4gcmVxdWVzdCBhbmQsIG9uY2UgcmVzb2x2ZWQsIGNhbGxcbiAgICAvLyBpbml0aWFsaXplRGV2aWNlKCkgYWdhaW4sIGRlc3Ryb3lpbmcgdGhlIGRldmljZSB0aGUgZmlyc3QgY2FsbCBqdXN0IGNyZWF0ZWQgYW5kXG4gICAgLy8gdG91Y2hpbmcgb2ZmIGEgc3B1cmlvdXMgJ3VucmVnaXN0ZXJlZCcgLT4gcmVjb3ZlcnkgY2FzY2FkZS4gU2hhcmUgdGhlIHNhbWVcbiAgICAvLyBpbi1mbGlnaHQgcmVxdWVzdCBpbnN0ZWFkLlxuICAgIGlmICh0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kKSB7XG4gICAgICByZXR1cm4gdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJDtcbiAgICB9XG5cbiAgICB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEluY29taW5nQ2FsbFRva2VuKHRoaXMuZGV2aWNlSWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RldmljZUlkJykpLnBpcGUoXG4gICAgICB0YXAoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmluY29taW5nQ2FsbFRva2VuID0gZGF0YS50b2tlbjtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luLXRva2VuJywgZGF0YS50b2tlbik7XG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgaW5pdGlhbGl6aW5nIFR3aWxpbyB0b2tlbjonLCBlcnJvcik7XG4gICAgICAgIC8vIEFsbG93IGEgZnJlc2ggYXR0ZW1wdCBuZXh0IHRpbWUgc2luY2UgdGhpcyBvbmUgZmFpbGVkLlxuICAgICAgICB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgxKSAvLyBDYWNoZSB0aGUgcmVzdWx0IGZvciBzdWJzZXF1ZW50IHN1YnNjcmliZXJzXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpemVUd2lsaW9EZXZpY2UoZGV2aWNlSWQ6IGFueSkge1xuICAgIHRoaXMuZGV2aWNlSWQgPSBkZXZpY2VJZDtcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemVkICYmIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZURldmljZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZURldmljZSgpIHtcbiAgICBpZiAodGhpcy5kZXZpY2UpIHtcbiAgICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1NraXBwaW5nIGRldmljZSByZS1pbml0OiBhY3RpdmUgYWNjZXB0ZWQgY2FsbHMgZXhpc3Q6JywgdGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIERldGFjaCB0aGUgJ3VucmVnaXN0ZXJlZCcvJ2Vycm9yJyBoYW5kbGVycyB3ZSBhdHRhY2hlZCBiZWZvcmUgZGVzdHJveWluZywgc29cbiAgICAgIC8vIHRoaXMgKmludGVudGlvbmFsKiB0ZWFyZG93biBjYW4ndCBmaXJlIHRoZW0gYmVsb3cg4oCUIG90aGVyd2lzZSBhIGRlbGliZXJhdGVcbiAgICAgIC8vIHJlcGxhY2UgbG9va3MgaWRlbnRpY2FsIHRvIGFuIHVuZXhwZWN0ZWQgZHJvcCBhbmQgdG91Y2hlcyBvZmYgYVxuICAgICAgLy8gZGVzdHJveSAtPiAndW5yZWdpc3RlcmVkJyAtPiBzY2hlZHVsZURldmljZVJlY292ZXJ5IC0+IGRlc3Ryb3kgY2FzY2FkZS5cbiAgICAgIC8vIChPbmx5IHJlbW92ZXMgb3VyIG93biBoYW5kbGVycywgbm90IGFueXRoaW5nIHRoZSBUd2lsaW8gU0RLIGl0c2VsZiBtYXkgaGF2ZVxuICAgICAgLy8gd2lyZWQgdG8gdGhlIHNhbWUgRXZlbnRFbWl0dGVyLCBzbyBpdHMgb3duIGRlc3Ryb3koKS9jbGVhbnVwIGlzIHVuYWZmZWN0ZWQuKVxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERldmljZVVucmVnaXN0ZXJlZEhhbmRsZXIpIHtcbiAgICAgICAgICB0aGlzLmRldmljZS5yZW1vdmVMaXN0ZW5lcigndW5yZWdpc3RlcmVkJywgdGhpcy5jdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudERldmljZUVycm9ySGFuZGxlcikge1xuICAgICAgICAgIHRoaXMuZGV2aWNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIHRoaXMuY3VycmVudERldmljZUVycm9ySGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKF8pIHt9XG4gICAgICBjb25zb2xlLmxvZygnMTUzIGNhbGwgZW5kJylcbiAgICAgIHRoaXMuZGV2aWNlLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIFR3aWxpbyB0b2tlbiBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZXZpY2U6IGFueSA9IG5ldyBEZXZpY2UodGhpcy5pbmNvbWluZ0NhbGxUb2tlbiwgeyBhbGxvd0luY29taW5nV2hpbGVCdXN5OiB0cnVlLCB0b2tlblJlZnJlc2hNczogdGhpcy5UT0tFTl9SRUZSRVNIX01TIH0pO1xuICAgIHRoaXMuZGV2aWNlID0gZGV2aWNlO1xuXG4gICAgZGV2aWNlLm9uKCdyZWdpc3RlcmVkJywgKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgIHRoaXMucmVjb3ZlcnlBdHRlbXB0cyA9IDEwO1xuICAgICAgLy8gQSByZWNvdmVyeSBhdHRlbXB0IG1heSBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IGFuIGVhcmxpZXIgZGV2aWNlIGluc3RhbmNlXG4gICAgICAvLyBiZWZvcmUgdGhpcyBvbmUgY2FtZSB1cCDigJQgaXQncyBzdGFsZSBub3csIGNhbmNlbCBpdCBzbyBpdCBjYW4ndCB0ZWFyIHRoaXNcbiAgICAgIC8vIGhlYWx0aHkgZGV2aWNlIGRvd24gbGF0ZXIuXG4gICAgICBpZiAodGhpcy5yZWNvdmVyeVRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlY292ZXJ5VGltZXIpO1xuICAgICAgICB0aGlzLnJlY292ZXJ5VGltZXIgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5wcmVwYXJlRGV2aWNlMkZvckluY29taW5nQ2FsbCgpO1xuICAgIH0pO1xuXG4gICAgLy8gVHdpbGlvIGZpcmVzIHRoaXMgVE9LRU5fUkVGUkVTSF9NUyBiZWZvcmUgdGhlIGFjY2VzcyB0b2tlbiBleHBpcmVzLiBTd2FwIGluIGFcbiAgICAvLyBmcmVzaCBvbmUgdmlhIHVwZGF0ZVRva2VuKCkgc28gdGhlIHNpZ25hbGluZyBjb25uZWN0aW9uIG5ldmVyIGhhcyB0byBkcm9wXG4gICAgLy8gaW4gdGhlIGZpcnN0IHBsYWNlICh0aGlzIGlzIHRoZSBtYWluIGNhdXNlIG9mIFwiaWRsZSBmb3IgYSB3aGlsZSwgQkUgc3RpbGxcbiAgICAvLyBub3RpZmllcyBidXQgVHdpbGlvIGluY29taW5nIGV2ZW50IG5ldmVyIGZpcmVzXCIpLlxuICAgIGRldmljZS5vbigndG9rZW5XaWxsRXhwaXJlJywgKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoRGV2aWNlVG9rZW4oKTtcbiAgICB9KTtcblxuICAgIGRldmljZS5vbignaW5jb21pbmcnLCAoY2FsbDogQ2FsbCB8IGFueSkgPT4ge1xuICAgICAgY29uc3QgaW5jb21pbmdDYWxsU2lkID0gY2FsbD8ucGFyYW1ldGVycz8uWydDYWxsU2lkJ107XG4gICAgICBpZiAoaW5jb21pbmdDYWxsU2lkICYmIHRoaXMuaW5jb21pbmdDYWxsc01hcC5oYXMoaW5jb21pbmdDYWxsU2lkKSkge1xuICAgICAgICBjb25zb2xlLmxvZygncHJpbWFyeSBkZXZpY2U6IGR1cGxpY2F0ZSBpbmNvbWluZyBmb3IgYWxyZWFkeS10cmFja2VkIGNhbGwsIGlnbm9yaW5nJywgaW5jb21pbmdDYWxsU2lkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgaW5jb21pbmcgY2FsbCBldmVudDonLCBjYWxsKTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYnVpbGRJbmNvbWluZ05vdGlmaWNhdGlvbihjYWxsKTtcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24ubmV4dChub3RpZmljYXRpb24pO1xuICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwIHx8IHRoaXMucHJpbWFyeUhhc0NhbGwpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3ByaW1hcnkgZGV2aWNlOiBjb25jdXJyZW50IGNhbGwgYXJyaXZpbmcg4oCTIHNwYXJlIGRldmljZSB3aWxsIGhhbmRsZSBpdCcpO1xuICAgICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSB0cnVlO1xuICAgICAgLy8gQXJtIGEgc3BhcmUgZGV2aWNlIHJpZ2h0IG5vdyAoYmVmb3JlIHRoZSB1c2VyIGV2ZW4gYWNjZXB0cykgc28gaXQgY2FuXG4gICAgICAvLyByZWdpc3RlciBpbiB0aW1lIGZvciBhbnkgY2FsbCB0aGF0IGFycml2ZXMgc2Vjb25kcyBsYXRlci5cbiAgICAgIHRoaXMucHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKTtcblxuICAgICAgaWYgKHRoaXMuaXNJbmNvbWluZ011dGVkKSB7XG4gICAgICAgIHRyeSB7IGRldmljZS5hdWRpbz8uaW5jb21pbmcoZmFsc2UpOyB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuICAgICAgY2FsbC5vbignYWNjZXB0JywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnSW5jb21pbmcgY2FsbCBhbnN3ZXJlZC9hY2NlcHRlZCcpO1xuICAgICAgfSk7XG5cbiAgICAgIGNhbGwub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIGRpc2Nvbm5lY3RlZCcpO1xuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgY2FsbC5vbignY2FuY2VsJywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2FsbGVyIGh1bmcgdXAgYmVmb3JlIGFuc3dlcicpO1xuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XG4gICAgICB9KTtcblxuICAgICAgY2FsbC5vbigncmVqZWN0JywgKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQ2FsbCByZWplY3RlZCcpO1xuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICAgIHRoaXMudHJhY2tJbmNvbWluZ0NhbGwoY2FsbCk7XG4gICAgICB0aGlzLmluY29taW5nQ2FsbERldGFpbCA9IGNhbGw7XG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XG4gICAgfSk7XG5cbiAgICBjb25zdCBvbkRldmljZUVycm9yID0gKGVycm9yOiBhbnkpID0+IHtcbiAgICAgIC8vIFN0YWxlIGV2ZW50IGZyb20gYSBkZXZpY2Ugd2UndmUgYWxyZWFkeSBpbnRlbnRpb25hbGx5IHJlcGxhY2VkIOKAlCBpZ25vcmUuXG4gICAgICBpZiAodGhpcy5kZXZpY2UgIT09IGRldmljZSkgcmV0dXJuO1xuICAgICAgY29uc29sZS5lcnJvcignVHdpbGlvIERldmljZSBFcnJvcjonLCBlcnJvcik7XG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IGZhbHNlO1xuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkoKTtcbiAgICB9O1xuICAgIHRoaXMuY3VycmVudERldmljZUVycm9ySGFuZGxlciA9IG9uRGV2aWNlRXJyb3I7XG4gICAgZGV2aWNlLm9uKCdlcnJvcicsIG9uRGV2aWNlRXJyb3IpO1xuICAgIGRldmljZS5vbignZGlzY29ubmVjdCcsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gRGV2aWNlIGRpc2Nvbm5lY3RlZCcpO1xuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2NoZWR1bGVEZXZpY2VSZWNvdmVyeSgpO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb25EZXZpY2VVbnJlZ2lzdGVyZWQgPSAoKSA9PiB7XG4gICAgICAvLyBTdGFsZSBldmVudCBmcm9tIGEgZGV2aWNlIHdlJ3ZlIGFscmVhZHkgaW50ZW50aW9uYWxseSByZXBsYWNlZCDigJQgaWdub3JlLlxuICAgICAgaWYgKHRoaXMuZGV2aWNlICE9PSBkZXZpY2UpIHJldHVybjtcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gRGV2aWNlIHVucmVnaXN0ZXJlZCcpO1xuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zY2hlZHVsZURldmljZVJlY292ZXJ5KCk7XG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyID0gb25EZXZpY2VVbnJlZ2lzdGVyZWQ7XG4gICAgZGV2aWNlLm9uKCd1bnJlZ2lzdGVyZWQnLCBvbkRldmljZVVucmVnaXN0ZXJlZCk7XG5cbiAgICAvLyBSZWdpc3RlciBBRlRFUiBhdHRhY2hpbmcgYWxsIGxpc3RlbmVyc1xuICAgIGRldmljZS5yZWdpc3RlcigpO1xuICAgIGNvbnNvbGUubG9nKCdkZXZpY2UgY3JlYXRlZCcsIGRldmljZSk7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XG4gIH1cblxuICAvLyBQcm9hY3RpdmVseSBzd2FwIGluIGEgZnJlc2ggYWNjZXNzIHRva2VuIGFoZWFkIG9mIGV4cGlyeSAoc2VlICd0b2tlbldpbGxFeHBpcmUnXG4gIC8vIGFib3ZlKSBzbyB0aGUgRGV2aWNlJ3Mgc2lnbmFsaW5nIGNvbm5lY3Rpb24gc3Vydml2ZXMgbG9uZyBpZGxlIHBlcmlvZHMuXG4gIHByaXZhdGUgcmVmcmVzaERldmljZVRva2VuKCkge1xuICAgIGlmICh0aGlzLnRva2VuUmVmcmVzaEluUHJvZ3Jlc3MpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gdHJ1ZTtcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0SW5jb21pbmdDYWxsVG9rZW4odGhpcy5kZXZpY2VJZCB8fCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZGV2aWNlSWQnKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4gPSBkYXRhLnRva2VuO1xuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnaW4tdG9rZW4nLCBkYXRhLnRva2VuKTtcbiAgICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gdHJ1ZTtcbiAgICAgICAgLy8gRXZlcnkgbGl2ZSBEZXZpY2Ugd2FzIGNyZWF0ZWQgZnJvbSB0aGUgc2FtZSB0b2tlbiwgc28gdGhleSBhbGwgZXhwaXJlXG4gICAgICAgIC8vIHRvZ2V0aGVyIOKAlCByZWZyZXNoIHRoZSBzcGFyZS9wZW5kaW5nL2NvbmN1cnJlbnQgb25lcyB0b28sIG90aGVyd2lzZSB0aGVcbiAgICAgICAgLy8gc3BhcmUgc2lsZW50bHkgZGllcyBhZnRlciAxaDMwbSBpZGxlIGFuZCBjb25jdXJyZW50IGNhbGxzIG5ldmVyIHJpbmcuXG4gICAgICAgIGNvbnN0IGFwcGx5ID0gKGRldjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKCFkZXYpIHJldHVybjtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGV2LnVwZGF0ZVRva2VuKHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGFwcGx5IHJlZnJlc2hlZCBUd2lsaW8gdG9rZW46JywgZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGFwcGx5KHRoaXMuZGV2aWNlKTtcbiAgICAgICAgYXBwbHkodGhpcy5zcGFyZURldmljZSk7XG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKGFwcGx5KTtcbiAgICAgICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaChhcHBseSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byByZWZyZXNoIFR3aWxpbyB0b2tlbiBhaGVhZCBvZiBleHBpcnk6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNlbGYtaGVhbCBhZnRlciB0aGUgRGV2aWNlIGRpZXMgKGV4cGlyZWQgdG9rZW4sIGRyb3BwZWQgc2lnbmFsaW5nIHNvY2tldCB3aGlsZVxuICAvLyBpZGxlL2FzbGVlcCwgZXRjKS4gTmV2ZXIgcnVucyB3aGlsZSBhIGNhbGwgaXMgYWN0dWFsbHkgYWN0aXZlLCBhbmQgYmFja3Mgb2ZmIHNvIGFcbiAgLy8gZ2VudWluZWx5IGxvZ2dlZC1vdXQvb2ZmbGluZSB1c2VyIGRvZXNuJ3QgcmV0cnkgZm9yZXZlci5cbiAgcHJpdmF0ZSBzY2hlZHVsZURldmljZVJlY292ZXJ5KCkge1xuICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCB8fCB0aGlzLnJlY292ZXJ5VGltZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGVsYXkgPSBNYXRoLm1pbigzMDAwMCwgMjAwMCAqIE1hdGgucG93KDIsIHRoaXMucmVjb3ZlcnlBdHRlbXB0cykpO1xuICAgIHRoaXMucmVjb3ZlcnlBdHRlbXB0cysrO1xuICAgIHRoaXMucmVjb3ZlcnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvdmVyeVRpbWVyID0gbnVsbDtcbiAgICAgIGNvbnN0IGF1dGhUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKTtcbiAgICAgIGlmICghYXV0aFRva2VuIHx8IGF1dGhUb2tlbiA9PT0gJ2xvZ291dCcpIHtcbiAgICAgICAgdGhpcy5yZWNvdmVyeUF0dGVtcHRzID0gMDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSh7XG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdUd2lsaW8gZGV2aWNlIHJlY292ZXJ5IGF0dGVtcHQgZmFpbGVkOicsIGVycilcbiAgICAgIH0pO1xuICAgIH0sIGRlbGF5KTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBmdWxsIGluY29taW5nLWNhbGwgbm90aWZpY2F0aW9uIHBheWxvYWQgKG1hdGNoZXMgdGhlIHNoYXBlIHRoZSBCRSB1c2VkIHRvXG4gIC8vIHB1c2ggb3ZlciB0aGUgc29ja2V0KSBmcm9tIHRoZSByYXcgVHdpbGlvICdpbmNvbWluZycgQ2FsbDogcGFyc2VkIFBhcmFtcyBmaWVsZHMgcGx1c1xuICAvLyB0aGUgZGVyaXZlZCBjbGllbnRTaWQvcGFydGljaXBhbnRTaWQvbm90aWZpY2F0aW9uVHlwZS90aXRsZS9tc2dCb2R5LlxuICBidWlsZEluY29taW5nTm90aWZpY2F0aW9uKGNhbGw6IENhbGwpOiBhbnkge1xuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuY29udmVydFRvSnNvbihjYWxsPy5wYXJhbWV0ZXJzPy5bJ1BhcmFtcyddIHx8ICd7fScpO1xuICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcbiAgICBub3RpZmljYXRpb24uY2xpZW50U2lkID0gY2FsbFNpZDtcbiAgICAvLyBPbmx5IHJlYWwgVHdpbGlvIFNJRCBleHBvc2VkIGNsaWVudC1zaWRlIGZvciB0aGlzIGxlZzsgbm8gc2VwYXJhdGUgcGFydGljaXBhbnQgU0lEXG4gICAgLy8gaXMgYXZhaWxhYmxlLCBzbyBpdCBtaXJyb3JzIGNsaWVudFNpZC5cbiAgICBub3RpZmljYXRpb24ucGFydGljaXBhbnRTaWQgPSBjYWxsU2lkO1xuICAgIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlID0gJ2luY29taW5nY2FsbCc7XG4gICAgbm90aWZpY2F0aW9uLnRpdGxlID0gJ0luY29taW5nIENhbGwnO1xuICAgIG5vdGlmaWNhdGlvbi5tc2dCb2R5ID0gYHlvdSBoYXZlIGluY29taW5nIGNhbGwgJHtub3RpZmljYXRpb24uZnJvbU5hbWUgfHwgJyd9YDtcbiAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xuICB9XG5cbiAgY29udmVydFRvSnNvbihkYXRhOiBzdHJpbmcpOiBhbnkge1xuICAgIGNvbnN0IG9iajogYW55ID0ge307XG5cbiAgICBpZiAoIWRhdGEpIHtcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgLy8gRm9ybWF0OiBrZXk9dmFsdWUma2V5PXZhbHVlXG4gICAgaWYgKGRhdGEuaW5jbHVkZXMoJyYnKSkge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhkYXRhKTtcblxuICAgICAgcGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZSA9PT0gJ3RydWUnXG4gICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgOiB2YWx1ZSA9PT0gJ2ZhbHNlJ1xuICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9ybWF0OiB7a2V5PXZhbHVlLCBrZXk9dmFsdWV9XG4gICAgICBjb25zdCB0ZXh0ID0gZGF0YS50cmltKCkucmVwbGFjZSgvXlxce3xcXH0kL2csICcnKTtcblxuICAgICAgdGV4dC5zcGxpdCgnLCcpLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaXRlbS5pbmRleE9mKCc9Jyk7XG5cbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICBjb25zdCBrZXkgPSBpdGVtLnN1YnN0cmluZygwLCBpbmRleCkudHJpbSgpO1xuICAgICAgICAgIGxldCB2YWx1ZTogYW55ID0gaXRlbS5zdWJzdHJpbmcoaW5kZXggKyAxKS50cmltKCk7XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykgdmFsdWUgPSB0cnVlO1xuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB2YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2JqLnJlYWQgPSBmYWxzZTtcbiAgICBvYmouc2F2ZSA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuICAvLyBTYWZldHkgbmV0IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdW5kZXJseWluZyBzb2NrZXQgZGllcyBzaWxlbnRseSBkdXJpbmcgYSBsb25nXG4gIC8vIHNsZWVwL2lkbGUgcGVyaW9kIHdpdGhvdXQgZXZlciBmaXJpbmcgJ2Vycm9yJy8ndW5yZWdpc3RlcmVkJyAodGhlIE9TIGNhbiBzdXNwZW5kXG4gIC8vIHRpbWVycy9zb2NrZXRzIG91dHJpZ2h0KSDigJQgcmUtY2hlY2sgZGV2aWNlIGhlYWx0aCB3aGVuZXZlciB0aGUgYXBwIHdha2VzIHVwLlxuICBwcml2YXRlIGVuc3VyZURldmljZUhlYWx0aHkoKSB7XG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5kZXZpY2UgfHwgdGhpcy5kZXZpY2Uuc3RhdGUgIT09ICdyZWdpc3RlcmVkJykge1xuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBkZXZpY2UgdW5oZWFsdGh5IGFmdGVyIHdha2UvdmlzaWJpbGl0eSBjaGFuZ2UsIHJlLWluaXRpYWxpemluZycpO1xuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSh7XG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdUd2lsaW8gZGV2aWNlIHJlY292ZXJ5IGZhaWxlZDonLCBlcnIpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzYXZlQ29udGFjdChwYXlsb2FkOiBhbnkpOiBPYnNlcnZhYmxlPFtdPiB7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9hZGQvY29udGFjdHMvbWFudWFsbHknLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICB1cGRhdGVDb250YWN0KHBheWxvYWQ6YW55KXtcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyB0aGlzLnRva2VufSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGRhdGUvY29udGFjdCcsIHBheWxvYWQsIGh0dHBPcHRpb25zKTtcbiAgfVxuICBcbiAgZGVsZXRlQ29udGFjdChpZDpzdHJpbmcpe1xuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgcGhvbmVib29raWQ6IGlkXG4gICAgfVxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2RlbGV0ZS9jb250YWN0LycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xuICB9XG4gIGdldENvbnRhY3RMaXN0KCl7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWFkL2NvbnRhY3RzJywgaHR0cE9wdGlvbnMpO1xuICB9XG5cbiAgYWRkQ29udGFjdFRvRmF2b3VyaXRlKHBheWxvYWQ6IGFueSl7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2Zhdm91cml0ZScsIHBheWxvYWQsIGh0dHBPcHRpb25zKTtcbiAgfVxuXG4gIGdldEZhdm91cml0Q29udGFjdHMoKXtcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2Zhdm91cml0ZS9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcbiAgfVxuXG4gIGdldFJlY2VudENhbGxzKHBhZ2VJbmRleD86IHN0cmluZywgcGFnZVNpemU/OiBzdHJpbmcsKXtcbiAgICBjb25zdCBoZWFkZXJzID0gIHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfTtcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9e2hlYWRlcnN9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWNlbnQvY2FsbHMnLCBodHRwT3B0aW9ucyk7XG4gIH1cbiAgZGVsZXRlUmVjZW50Q2FsbExvZyhpZDpzdHJpbmd8IHN0cmluZ1tdKXtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIHJlY29yZElkOiBpZFxuICAgIH1cbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvY2FsbHMvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICB1cGxvYWRQaG90byhwYXlsb2FkOiBhbnkpe1xuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXG4gICAgICB9KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBsb2FkL3Bob3RvJyxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XG4gIH1cblxuICBkZWxldGVQaG90byhpZDpzdHJpbmcpe1xuICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgcGhvbmVib29raWQ6IGlkXG4gICAgfVxuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXG4gICAgICB9KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL3Bob3RvLycraWQscGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xuICB9XG5cbiAgdG9nZ2xlQ291dHJ5Q29kZVRvYXN0KHZhbDphbnkpe1xuICAgIGxldCBodHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpXG4gICAgICB9KVxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3NvZnRwaG9uZS9jb3VudHJ5Y29kZS9hbGVydC8nICsgdmFsLCB7fSwgaHR0cE9wdGlvbnMpO1xuICB9XG4gIGdldFRvTnVtYmVyKGRpYWxsZWRObzogc3RyaW5nLCBpc29Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pLFxuICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnaXNvQ29kZScsIGlzb0NvZGUpXG4gICAgfTtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpLnNldCgnaXNvQ29kZScsIGlzb0NvZGUpXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3NvZnRwaG9uZS9jaGVjay9jb3VudHJ5Q29kZS8nICsgZGlhbGxlZE5vLCBodHRwT3B0aW9ucyk7XG4gIH0gXG4gIFxuICAvLyBSZWNvcmQgYSByaW5naW5nIGluY29taW5nIENhbGwgc28gaXQgY2FuIGxhdGVyIGJlIGFjY2VwdGVkIGJ5IGl0cyBzcGVjaWZpYyBpZC5cbiAgLy8gVGhlIG1hcCBpcyBjbGVhbmVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgY2FsbCBpcyBjYW5jZWxsZWQvZGlzY29ubmVjdGVkL3JlamVjdGVkLlxuICBwcml2YXRlIHRyYWNrSW5jb21pbmdDYWxsKGNhbGw6IGFueSkge1xuICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcbiAgICBpZiAoY2FsbFNpZCkge1xuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLnNldChjYWxsU2lkLCBjYWxsKTtcbiAgICB9XG4gICAgY29uc3QgY2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGlmICghY2FsbFNpZCkgcmV0dXJuO1xuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmRlbGV0ZShjYWxsU2lkKTtcbiAgICAgIC8vIElmIHRoZSBjYWxsIGVuZGVkIGJlZm9yZSB0aGUgdXNlciBhY2NlcHRlZCBpdCwgZGVzdHJveSB0aGUgcGVuZGluZyBzcGFyZVxuICAgICAgLy8gZGV2aWNlIHRoYXQgd2FzIGhvbGRpbmcgaXQgc28gd2UgZG9uJ3QgbGVhayBkZXZpY2UgcmVnaXN0cmF0aW9ucy5cbiAgICAgIGNvbnN0IGRldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoY2FsbFNpZCk7XG4gICAgICBpZiAoZGV2ICYmICFkZXYuX293bnNBY2NlcHRlZENhbGwpIHtcbiAgICAgICAgdHJ5IHsgZGV2LmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge31cbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGNhbGwub24oJ2NhbmNlbCcsIGNsZWFudXApO1xuICAgIGNhbGwub24oJ2Rpc2Nvbm5lY3QnLCBjbGVhbnVwKTtcbiAgICBjYWxsLm9uKCdyZWplY3QnLCBjbGVhbnVwKTtcbiAgfVxuXG4gIC8vIFJlc29sdmUgdGhlIEVYQUNUIHJpbmdpbmcgQ2FsbCBmb3IgYSBnaXZlbiBVSSBlbnRyeSBpZCAocGFydGljaXBhbnQvcmVjb3JkIGlkKS5cbiAgLy8gRmFsbHMgYmFjayB0byB0aGUgbW9zdCByZWNlbnQgaW5jb21pbmcgY2FsbCBzbyBvbGRlciBzaW5nbGUtY2FsbCBmbG93cyBzdGlsbCB3b3JrLlxuICBnZXRJbmNvbWluZ0NhbGxCeUlkKGlkOiBhbnkpIHtcbiAgICBpZiAoaWQgIT0gbnVsbCAmJiB0aGlzLmluY29taW5nQ2FsbHNNYXAuaGFzKGlkKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsc01hcC5nZXQoaWQpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsRGV0YWlsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsLnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddID09IGlkID8gdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwgOiBudWxsO1xuICB9XG5cbiAgcHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKSB7XG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcbiAgICAgIHJldHVybjsgLy8gYSBmcmVlIHNwYXJlIGlzIGFscmVhZHkgd2FpdGluZ1xuICAgIH1cbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcbiAgICAgIGNvbnNvbGUud2FybigncHJlcGFyZVNwYXJlRGV2aWNlOiBubyB0b2tlbiBhdmFpbGFibGUnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc3BhcmU6IGFueSA9IG5ldyBEZXZpY2UodGhpcy5pbmNvbWluZ0NhbGxUb2tlbiwgeyBhbGxvd0luY29taW5nV2hpbGVCdXN5OiB0cnVlLCB0b2tlblJlZnJlc2hNczogdGhpcy5UT0tFTl9SRUZSRVNIX01TIH0pO1xuICAgIHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsID0gZmFsc2U7XG5cbiAgICAvLyBGYWxsYmFjayBpbiBjYXNlIHRoZSBwcmltYXJ5IGRldmljZSBpcyBnb25lL3JlcGxhY2VkOiB0aGUgc3BhcmUgY2FuIHRyaWdnZXJcbiAgICAvLyB0aGUgc2hhcmVkIHJlZnJlc2ggaXRzZWxmIChyZWZyZXNoRGV2aWNlVG9rZW4gZGVkdXBlcyBjb25jdXJyZW50IHJlcXVlc3RzKS5cbiAgICBzcGFyZS5vbigndG9rZW5XaWxsRXhwaXJlJywgKCkgPT4ge1xuICAgICAgdGhpcy5yZWZyZXNoRGV2aWNlVG9rZW4oKTtcbiAgICB9KTtcblxuICAgIHNwYXJlLm9uKCdyZWdpc3RlcmVkJywgKCkgPT4ge1xuICAgICAgdGhpcy5zcGFyZURldmljZVJlYWR5ID0gdHJ1ZTtcbiAgICAgIC8vIEFwcGx5IHRoZSBtdXRlIHByZWZlcmVuY2UgaGVyZSDigJQgYHNwYXJlLmF1ZGlvYCBpcyBvbmx5IHJlYWR5IGFmdGVyIHJlZ2lzdHJhdGlvbixcbiAgICAgIC8vIHNvIHRoZSBjYWxsIGFib3ZlIChiZWZvcmUgcmVnaXN0ZXIoKSkgd2FzIGFsd2F5cyBhIG5vLW9wLlxuICAgICAgdHJ5IHsgc3BhcmUuYXVkaW8/LmluY29taW5nKCF0aGlzLmlzSW5jb21pbmdNdXRlZCk7IH0gY2F0Y2ggKF8pIHt9XG4gICAgICBjb25zb2xlLmxvZygnU3BhcmUgZGV2aWNlIHJlZ2lzdGVyZWQg4oCTIHJlYWR5IGZvciB0aGUgbmV4dCBjb25jdXJyZW50IGNhbGwnKTtcbiAgICB9KTtcblxuICAgIHNwYXJlLm9uKCdpbmNvbWluZycsIChjYWxsOiBDYWxsIHwgYW55KSA9PiB7XG4gICAgICAvLyBHdWFyZDogb25jZSB0aGlzIHNwYXJlIGlzIGFscmVhZHkgaGFuZGxpbmcgYSBjYWxsIChwZW5kaW5nIG9yIGFjY2VwdGVkKSxcbiAgICAgIC8vIGlnbm9yZSBhbnkgZnVydGhlciBpbmNvbWluZyBldmVudHMgc28gYW5vdGhlciBzcGFyZSBjYW4gdGFrZSB0aGUgbmV4dCBjYWxsLlxuICAgICAgaWYgKHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsIHx8IHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcbiAgICAgIC8vIFNhbWUgc2hhcmVkLWlkZW50aXR5IGZhbi1vdXQgZ3VhcmQgYXMgdGhlIHByaW1hcnkgZGV2aWNlJ3MgJ2luY29taW5nJyBoYW5kbGVyOlxuICAgICAgLy8gaWYgYW5vdGhlciBEZXZpY2UgYWxyZWFkeSBjbGFpbWVkIHRoaXMgQ2FsbFNpZCwgdGhpcyBpcyBhIGR1cGxpY2F0ZSBsZWcgb2ZcbiAgICAgIC8vIHRoZSBzYW1lIGNhbGwsIG5vdCBhIGdlbnVpbmVseSBuZXcgY29uY3VycmVudCBjYWxsIOKAlCBpZ25vcmUgaXQuXG4gICAgICBpZiAoY2FsbFNpZCAmJiB0aGlzLmluY29taW5nQ2FsbHNNYXAuaGFzKGNhbGxTaWQpKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdzcGFyZSBkZXZpY2U6IGR1cGxpY2F0ZSBpbmNvbWluZyBmb3IgYWxyZWFkeS10cmFja2VkIGNhbGwsIGlnbm9yaW5nJywgY2FsbFNpZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsID0gY2FsbDtcblxuICAgICAgLy8gVHJhbnNpdGlvbiB0aGlzIHNwYXJlIGZyb20gXCJmcmVlXCIg4oaSIFwicGVuZGluZ1wiOiByZW1vdmUgaXQgYXMgdGhlIGFjdGl2ZVxuICAgICAgLy8gc3BhcmVEZXZpY2UgYW5kIHRyYWNrIGl0IGJ5IENhbGxTaWQgc28gb25Db25jdXJyZW50Q2FsbEFjY2VwdGVkIGNhbiBmaW5kIGl0LlxuICAgICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UgPT09IHNwYXJlKSB7XG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBudWxsO1xuICAgICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjYWxsU2lkKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5zZXQoY2FsbFNpZCwgc3BhcmUpO1xuICAgICAgfVxuICAgICAgLy8gSW1tZWRpYXRlbHkgYXJtIHRoZSBORVhUIGZyZWUgc3BhcmUgc28gaXQgaXMgcmVhZHkgZm9yIGNhbGwgTisyIHdpdGhvdXRcbiAgICAgIC8vIHdhaXRpbmcgZm9yIHRoZSB1c2VyIHRvIGFjY2VwdCB0aGlzIGNhbGwgZmlyc3QuXG4gICAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XG5cbiAgICAgIGlmICh0aGlzLmlzSW5jb21pbmdNdXRlZCkge1xuICAgICAgICB0cnkgeyBzcGFyZS5hdWRpbz8uaW5jb21pbmcoZmFsc2UpOyB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuICAgICAgdGhpcy50cmFja0luY29taW5nQ2FsbChjYWxsKTtcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsID0gY2FsbDtcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gdHJ1ZTtcbiAgICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuYnVpbGRJbmNvbWluZ05vdGlmaWNhdGlvbihjYWxsKTtcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24ubmV4dChub3RpZmljYXRpb24pO1xuICAgICAgY29uc29sZS5sb2coJ3NwYXJlIGRldmljZTogaW5jb21pbmcgY2FsbCcsIGNhbGwpO1xuICAgIH0pO1xuXG4gICAgc3BhcmUub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1NwYXJlIGRldmljZSBlcnJvcjonLCBlcnJvcik7XG4gICAgfSk7XG5cbiAgICBzcGFyZS5yZWdpc3RlcigpO1xuICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBzcGFyZTtcbiAgICBjb25zb2xlLmxvZygnc3BhcmUgZGV2aWNlIGNyZWF0ZWQgYW5kIHJlZ2lzdGVyaW5nJyk7XG4gIH1cblxuICBvbkNvbmN1cnJlbnRDYWxsQWNjZXB0ZWQoYWNjZXB0ZWRDYWxsOiBhbnkpIHtcbiAgICBjb25zdCBzaWQgPSBhY2NlcHRlZENhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xuICAgIGlmIChzaWQpIHtcbiAgICAgIC8vIFByaW1hcnkgcGF0aDogdGhlIGFjY2VwdGVkIGNhbGwgd2FzIGhlbGQgYnkgYSBwZW5kaW5nIHNwYXJlIGRldmljZS5cbiAgICAgIGNvbnN0IGRldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoc2lkKTtcbiAgICAgIGlmIChkZXYpIHtcbiAgICAgICAgZGV2Ll9vd25zQWNjZXB0ZWRDYWxsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5leHRyYURldmljZXMuc2V0KHNpZCwgZGV2KTtcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShzaWQpO1xuICAgICAgfVxuICAgICAgLy8gTGVnYWN5IGZhbGxiYWNrOiBvbGQgc2luZ2xlLXNwYXJlIHBhdGggKHNwYXJlIHN0aWxsIGhvbGRzIHRoZSBjYWxsKS5cbiAgICAgIGVsc2UgaWYgKHRoaXMuc3BhcmVEZXZpY2UgJiYgdGhpcy5zcGFyZURldmljZS5fcGVuZGluZ0luY29taW5nQ2FsbCA9PT0gYWNjZXB0ZWRDYWxsKSB7XG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2UuX293bnNBY2NlcHRlZENhbGwgPSB0cnVlO1xuICAgICAgICB0aGlzLmV4dHJhRGV2aWNlcy5zZXQoc2lkLCB0aGlzLnNwYXJlRGV2aWNlKTtcbiAgICAgICAgdGhpcy5zcGFyZURldmljZSA9IG51bGw7XG4gICAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBFbnN1cmUgYSBmcmVlIHNwYXJlIGlzIGFsd2F5cyByZWFkeSBmb3IgdGhlIG5leHQgY29uY3VycmVudCBjYWxsLlxuICAgIHRoaXMucHJlcGFyZURldmljZTJGb3JJbmNvbWluZ0NhbGwoKTtcbiAgfVxuXG4gIHJlbGVhc2VDb25jdXJyZW50Q2FsbERldmljZShjYWxsU2lkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBkZXYgPSB0aGlzLmV4dHJhRGV2aWNlcy5nZXQoY2FsbFNpZCk7XG4gICAgaWYgKGRldikge1xuICAgICAgdHJ5IHsgZGV2LmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge31cbiAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcbiAgICAgIGNvbnNvbGUubG9nKCdyZWxlYXNlZCBjb25jdXJyZW50LWNhbGwgZGV2aWNlIGZvcicsIGNhbGxTaWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBBbHNvIHJlbGVhc2UgcGVuZGluZyBkZXZpY2VzIHRoYXQgd2VyZSBjYW5jZWxsZWQgYmVmb3JlIGFjY2VwdGFuY2UuXG4gICAgY29uc3QgcGVuZGluZ0RldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoY2FsbFNpZCk7XG4gICAgaWYgKHBlbmRpbmdEZXYpIHtcbiAgICAgIHRyeSB7IHBlbmRpbmdEZXYuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxuICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcbiAgICB9XG4gIH1cblxuICAvLyBXaGVuIG5vIGFjY2VwdGVkIGNhbGxzIHJlbWFpbiwgdGVhciBkb3duIGFsbCBzcGFyZS9wZW5kaW5nL2V4dHJhIGRldmljZXMgc29cbiAgLy8gdGhlIHByaW1hcnkgZGV2aWNlIGNsZWFubHkgaGFuZGxlcyB0aGUgbmV4dCBmcmVzaCBpbmNvbWluZyBjYWxsLlxuICB0ZWFyZG93blNwYXJlRGV2aWNlc0lmSWRsZSgpIHtcbiAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaCgoZCkgPT4geyB0cnkgeyBkLmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge30gfSk7XG4gICAgdGhpcy5leHRyYURldmljZXMuY2xlYXIoKTtcbiAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaCgoZCkgPT4geyB0cnkgeyBkLmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge30gfSk7XG4gICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcbiAgICAgIHRyeSB7IHRoaXMuc3BhcmVEZXZpY2UuZGVzdHJveSgpOyB9IGNhdGNoIChfKSB7fVxuICAgICAgdGhpcy5zcGFyZURldmljZSA9IG51bGw7XG4gICAgICB0aGlzLnNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xuICAgIGNvbnNvbGUubG9nKCdzcGFyZS9leHRyYSBkZXZpY2VzIHRvcm4gZG93biAoaWRsZSknKTtcbiAgfVxuXG4gIC8vIEJhY2t3YXJkcy1jb21wYXRpYmxlIGFsaWFzIGtlcHQgZm9yIGV4aXN0aW5nIGNhbGwgc2l0ZXMuXG4gIGRlc3Ryb3lEZXZpY2UyKCkge1xuICAgIHRoaXMudGVhcmRvd25TcGFyZURldmljZXNJZklkbGUoKTtcbiAgfVxuXG4gIC8vIFVzZXItY29udHJvbGxlZCBzd2l0Y2ggKGluIHRoZSBjYWxsLXByb2dyZXNzIFVJKS4gV2hlbiBPTiwgYSBuZXcgaW5jb21pbmdcbiAgLy8gY2FsbCdzIGJ1aWx0LWluIFR3aWxpbyByaW5ndG9uZSBpcyBzaWxlbmNlZCBzbyBpdCBkb2VzIG5vdCBkaXN0dXJiIHRoZVxuICAvLyBvbmdvaW5nIGNhbGwuIFNvdXJjZSBvZiB0cnV0aCBzbyBuZXdseSBjcmVhdGVkIChzcGFyZSkgZGV2aWNlcyBpbmhlcml0IGl0LlxuICBpc0luY29taW5nTXV0ZWQgPSBmYWxzZTtcblxuICAvLyBBcHBseSB0aGUgY3VycmVudCBtdXRlIHByZWZlcmVuY2UgdG8gZXZlcnkgbGl2ZSBEZXZpY2UgKHByaW1hcnkgKyBzcGFyZSArXG4gIC8vIGFueSBjb25jdXJyZW50LWNhbGwgZGV2aWNlcykgdmlhIFR3aWxpbydzIG93biBkZXZpY2UuYXVkaW8uaW5jb21pbmcoKS5cbiAgYXBwbHlJbmNvbWluZ011dGUoKSB7XG4gICAgY29uc3QgZW5hYmxlZCA9ICF0aGlzLmlzSW5jb21pbmdNdXRlZDsgLy8gcmluZ3RvbmUgZW5hYmxlZCA9IE5PVCBtdXRlZFxuICAgIGNvbnN0IGFwcGx5ID0gKGRldjogYW55KSA9PiB7XG4gICAgICB0cnkgeyBkZXY/LmF1ZGlvPy5pbmNvbWluZz8uKGVuYWJsZWQpOyB9IGNhdGNoIChfKSB7fVxuICAgIH07XG4gICAgYXBwbHkodGhpcy5kZXZpY2UpO1xuICAgIGFwcGx5KHRoaXMuc3BhcmVEZXZpY2UpO1xuICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goYXBwbHkpO1xuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKGFwcGx5KTtcbiAgfVxuXG4gIC8vIFRvZ2dsZS9zZXQgdGhlIG11dGUgc3dpdGNoIGFuZCBpbW1lZGlhdGVseSBhcHBseSBpdC5cbiAgc2V0SW5jb21pbmdNdXRlZChtdXRlZDogYm9vbGVhbikge1xuICAgIHRoaXMuaXNJbmNvbWluZ011dGVkID0gbXV0ZWQ7XG4gICAgdGhpcy5hcHBseUluY29taW5nTXV0ZSgpO1xuICAgIGlmIChtdXRlZCkge1xuICAgICAgLy8gZGV2aWNlLmF1ZGlvLmluY29taW5nKGZhbHNlKSBvbmx5IHByZXZlbnRzIGZ1dHVyZSByaW5ncyDigJQgaXQgZG9lcyBOT1Qgc3RvcFxuICAgICAgLy8gYSBjYWxsIHRoYXQgaXMgYWxyZWFkeSByaW5naW5nLiBTdG9wIHRoZSBhY3RpdmUgcmluZyBkaXJlY3RseSB2aWEgc291bmRjYWNoZS5cbiAgICAgIGNvbnN0IHN0b3BSaW5nID0gKGRldjogYW55KSA9PiB7XG4gICAgICAgIHRyeSB7IGRldj8uX3NvdW5kY2FjaGU/LmdldD8uKCdpbmNvbWluZycpPy5zdG9wPy4oKTsgfSBjYXRjaCAoXykge31cbiAgICAgIH07XG4gICAgICBzdG9wUmluZyh0aGlzLmRldmljZSk7XG4gICAgICBzdG9wUmluZyh0aGlzLnNwYXJlRGV2aWNlKTtcbiAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goKGRldjogYW55KSA9PiBzdG9wUmluZyhkZXYpKTtcbiAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKChkZXY6IGFueSkgPT4gc3RvcFJpbmcoZGV2KSk7XG4gICAgfVxuICB9XG5cbiAgYWRkSW5jb21pbmdQYXJ0aWNpcGFudChwYXJ0aWNpcGFudElkOiBzdHJpbmcsIGNvbmZlcmVuY2VJZDogc3RyaW5nKSB7XG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGAke2Vudmlyb25tZW50LmFwaVVybH0vdXRpbGl0aWVzL2V4dC9hZGQvaW5jb21pbmcvcGFydGljaXBhbnQvJHtwYXJ0aWNpcGFudElkfS8ke2NvbmZlcmVuY2VJZH1gLGh0dHBPcHRpb25zKTtcbiAgfSBcbiAgY29ubmVjdChkYXRhPzogYW55KXtcbiAgICBpZiAodGhpcy5kZXZpY2UuX2FjdGl2ZUNhbGwpIHtcbiAgICAgIGNvbnNvbGUubG9nKCcyNDQtdGVzdCcpXG4gICAgICB0aGlzLmRldmljZS5kaXNjb25uZWN0QWxsKCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRldmljZS5jb25uZWN0KHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBUb2tlbjogdGhpcy5jb25mZXJlbmNlQ2FsbEluZm8/LmNvbmZlcmVuY2VJZCB8fCBkYXRhLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgQ29uZmVyZW5jZU5hbWU6IHRoaXMuY29uZmVyZW5jZUNhbGxJbmZvPy5jb25mZXJlbmNlTmFtZSB8fCBkYXRhLmNvbmZlcmVuY2VOYW1lXG4gICAgICB9LFxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHsgZGV2aWNlSWQ6ICdkZWZhdWx0JyB9IH0sXG4gICAgfSlcbiAgfVxufVxuIl19
|
|
715
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHdpbGlvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvc2VydmljZS90d2lsaW8uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWMsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RSxPQUFPLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsTUFBTSxFQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFFakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDOzs7O0FBYzNELE1BQU0sT0FBTyxhQUFhO0lBNEN4Qix5QkFBeUIsQ0FBQyxPQUFZLEVBQUUsWUFBcUI7UUFDM0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsK0JBQStCO1FBQ3RFLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUM7UUFDekMsT0FBTyxJQUFJLE9BQU8sQ0FBVSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxPQUFPLENBQUM7WUFDMUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUFDLFdBQW9CO1FBQzVDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztRQUNoRCxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFD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QUFTLEVBQUUsRUFBRTtTQUNuRCxDQUFDLENBQUE7SUFDSixDQUFDOzsyR0E1dEJVLGFBQWE7K0dBQWIsYUFBYSxjQUZaLE1BQU07NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXksIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgRGV2aWNlLCBDYWxsIH0gZnJvbSAnQHR3aWxpby92b2ljZS1zZGsnO1xyXG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi9leHRlbnNpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50cyc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERpYWxQYXlsb2FkIHtcclxuICBudW1iZXI6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgaW1nOiBzdHJpbmc7XHJcbiAgY2FsbGVySWQ6c3RyaW5nO1xyXG4gIGlzRGlhbEZyb21IaXN0b3J5OmJvb2xlYW47XHJcbiAgZnJvbTpzdHJpbmc7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcgIFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHdpbGlvU2VydmljZSB7XHJcbiAgXHJcbiAgb3BlbkluUHJvZ3Jlc3NEaWFscGFkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY3VycmVudENhbGwgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENhbGwgfCBudWxsPihudWxsKTtcclxuICBjdXJyZW50Q2FsbFN0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KCdub25lJyk7IC8vaW4tcHJvZ3Jlc3MsIG91dC1wcm9ncmVzcywgbm9uZVxyXG4gIGRldmljZTphbnk7XHJcbiAgY2FsbCE6IENhbGw7XHJcbiAgaW5jb21pbmdDYWxsVG9rZW46c3RyaW5nPScnO1xyXG4gIG91dGdvaW5nQ2FsbFRva2VuPzpzdHJpbmc7XHJcbiAgY2FsbFR5cGUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ05JTCcpO1xyXG4gIGluY29taW5nQ2FsbERldGFpbDogYW55OyAvLyBmb3IgYm90aCBpbmNvbWluZyBhbmQgb3V0Z29pbmdcclxuICB0b2tlbjphbnkgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgaXNOZXdDb250YWN0QWRkZWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICB1cGRhdGVSZWNlbnRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FsbGhhbmRsZUZyb21Ob3RpZmljYXRpb24gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oe30pO1xyXG5cclxuICBlbmRDYWxsID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgZGlhbE51bWJlckZyb21PdGhlck1vZHVsZSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGlhbFBheWxvYWQ+KHsgbnVtYmVyOiAnJywgbmFtZTogJycsIGltZzogJycsIGNhbGxlcklkOiAnJywgaXNEaWFsRnJvbUhpc3Rvcnk6IGZhbHNlLCBmcm9tOiAnJyB9KTtcclxuXHJcbiAgdG9nZ2xlQ2FsbGVySWRBbGVydCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XHJcbiAgaXNUcmlhbE92ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc1BheW1lbnREdWUgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBpc0F2YWlsYWJsZU51bWJlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGNhbGxlcklkTGlzdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcclxuICB0cmlnZ2VyU01TUmVsb2FkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgaXNDb25uZWN0aW5nSW5jb21pbmdDYWxsSWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xyXG5cclxuICB0b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSB0b2tlbkluaXRpYWxpemF0aW9uJDogT2JzZXJ2YWJsZTxhbnk+IHwgbnVsbCA9IG51bGw7XHJcbiAgZGV2aWNlSWQ6IGFueTtcclxuICBjb25mZXJlbmNlQ2FsbEluZm86IGFueTtcclxuICBpc1Nob3dJbmNvbWluZ0NhbGw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8gQ1JJVElDQUw6IFRyYWNrIGFsbCBhY2NlcHRlZCBDYWxsIG9iamVjdHMgKG1pcnJvcnMgaU9TIGFjY2VwdGVkQ2FsbExpc3QpXHJcbiAgLy8gVXNlZCB0byBndWFyZCBkZXZpY2UgcmUtaW5pdGlhbGl6YXRpb24gc28gYWN0aXZlIGNhbGxzIGFyZSBuZXZlciB0b3JuIGRvd25cclxuICBhY2NlcHRlZENhbGxMaXN0OiBDYWxsW10gPSBbXTtcclxuICAvLyBUcnVlIHdoaWxlIGFuIG91dGdvaW5nIGNhbGwgaXMgYmVpbmcgc2V0IHVwIChpbml0aWF0ZSBBUEkg4oaSIHNwZWNpYWwgY2FsbCBjaGFyZ2VzIG1vZGFsIOKGkiBUd2lsaW9cclxuICAvLyBjbGllbnQgbGVnIGNvbm5lY3RlZCkuIFNvY2tldCB0aWNrcyBhcmUgZW1wdHkgZHVyaW5nIHRoaXMgd2luZG93LCBzbyBkaWFsYm94IG11c3Qgbm90IHRyZWF0IHRoZW0gYXMgaWRsZS5cclxuICBpc0F3YWl0aW5nU3BlY2lhbENhbGxDb25maXJtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLy8gU3BlY2lhbCBjYWxsIGNoYXJnZXMgbW9kYWwgc3RhdGUuIGluQ2FsbFNjcmVlbjogdHJ1ZSDihpIgcmVuZGVyZWQgYnkgY2FsbC1wcm9ncmVzcyAoYSBjYWxsIHNjcmVlbiBpcyBvcGVuKSxcclxuICAvLyBmYWxzZSDihpIgcmVuZGVyZWQgYnkgZGlhbGJveCBvdmVyIHRoZSBcIkNvbm5lY3RpbmcuLi5cIiBsb2FkZXIgKGZpcnN0IGNhbGwsIGNhbGwgc2NyZWVuIG5vdCByZW5kZXJlZCB5ZXQpXHJcbiAgc3BlY2lhbENhbGxDb25maXJtOiB7IG1lc3NhZ2U6IGFueTsgaW5DYWxsU2NyZWVuOiBib29sZWFuIH0gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIHNwZWNpYWxDYWxsQ29uZmlybVJlc29sdmVyOiAoKGlzQ29uZmlybWVkOiBib29sZWFuKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuICByZXF1ZXN0U3BlY2lhbENhbGxDb25maXJtKG1lc3NhZ2U6IGFueSwgaW5DYWxsU2NyZWVuOiBib29sZWFuKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICB0aGlzLnJlc29sdmVTcGVjaWFsQ2FsbENvbmZpcm0oZmFsc2UpOyAvLyBjbG9zZSBhbnkgc3RhbGUgY29uZmlybWF0aW9uXHJcbiAgICB0aGlzLmlzQXdhaXRpbmdTcGVjaWFsQ2FsbENvbmZpcm0gPSB0cnVlO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuc3BlY2lhbENhbGxDb25maXJtUmVzb2x2ZXIgPSByZXNvbHZlO1xyXG4gICAgICB0aGlzLnNwZWNpYWxDYWxsQ29uZmlybSA9IHsgbWVzc2FnZSwgaW5DYWxsU2NyZWVuIH07XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHJlc29sdmVTcGVjaWFsQ2FsbENvbmZpcm0oaXNDb25maXJtZWQ6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHJlc29sdmUgPSB0aGlzLnNwZWNpYWxDYWxsQ29uZmlybVJlc29sdmVyO1xyXG4gICAgdGhpcy5zcGVjaWFsQ2FsbENvbmZpcm1SZXNvbHZlciA9IG51bGw7XHJcbiAgICB0aGlzLnNwZWNpYWxDYWxsQ29uZmlybSA9IG51bGw7XHJcbiAgICBpZiAoaXNDb25maXJtZWQpIHtcclxuICAgICAgLy8gVHdpbGlvIGhhcyBub3QgY29ubmVjdGVkIHlldCDigJMga2VlcCB0aGUgY2FsbCBzY3JlZW4gYWxpdmUgdW50aWwgY2FsbC1wcm9ncmVzcyByZXBvcnRzIHRoZVxyXG4gICAgICAvLyBjbGllbnQgbGVnIGlzIGNvbm5lY3RlZCAocmVsZWFzZVNwZWNpYWxDYWxsR3VhcmQpLCB3aXRoIGEgc2FmZXR5IHRpbWVvdXQuXHJcbiAgICAgIHRoaXMuaG9sZENhbGxTY3JlZW5HdWFyZCgyMDAwMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJlbGVhc2VTcGVjaWFsQ2FsbEd1YXJkKCk7XHJcbiAgICB9XHJcbiAgICByZXNvbHZlPy4oaXNDb25maXJtZWQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzcGVjaWFsQ2FsbEd1YXJkVGltZXI6IGFueTtcclxuICAvLyBLZWVwIHRoZSBjYWxsIHNjcmVlbiBhbGl2ZSB3aGlsZSBhbiBvdXRnb2luZyBjYWxsIGlzIHNldCB1cC4gVGhlIHNhZmV0eSB0aW1lb3V0IG9ubHkgY292ZXJzXHJcbiAgLy8gQVBJL1R3aWxpbyB3YWl0cyDigJQgcmVxdWVzdFNwZWNpYWxDYWxsQ29uZmlybSgpIGNsZWFycyBpdCBzbyB0aGUgY2hhcmdlcyBtb2RhbCBjYW4gc3RheSBvcGVuIGluZGVmaW5pdGVseS5cclxuICBob2xkQ2FsbFNjcmVlbkd1YXJkKHRpbWVvdXRNczogbnVtYmVyID0gMzAwMDApIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLnNwZWNpYWxDYWxsR3VhcmRUaW1lcik7XHJcbiAgICB0aGlzLmlzQXdhaXRpbmdTcGVjaWFsQ2FsbENvbmZpcm0gPSB0cnVlO1xyXG4gICAgdGhpcy5zcGVjaWFsQ2FsbEd1YXJkVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVsZWFzZVNwZWNpYWxDYWxsR3VhcmQoKSwgdGltZW91dE1zKTtcclxuICB9XHJcblxyXG4gIHJlbGVhc2VTcGVjaWFsQ2FsbEd1YXJkKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuc3BlY2lhbENhbGxHdWFyZFRpbWVyKTtcclxuICAgIHRoaXMuaXNBd2FpdGluZ1NwZWNpYWxDYWxsQ29uZmlybSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBwcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gIHNwYXJlRGV2aWNlOiBhbnkgPSBudWxsO1xyXG4gIHNwYXJlRGV2aWNlUmVhZHkgPSBmYWxzZTtcclxuICBwcml2YXRlIHBlbmRpbmdJbmNvbWluZ0RldmljZXMgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xyXG4gIHByaXZhdGUgZXh0cmFEZXZpY2VzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuICBpbmNvbWluZ0NhbGxzTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcclxuXHJcbiAgLy8gQkUgaXNzdWVzIGluY29taW5nLWNhbGwgYWNjZXNzIHRva2VucyB3aXRoIGEgMWgzMG0gVFRMLiBBc2sgVHdpbGlvIHRvIGZpcmVcclxuICAvLyAndG9rZW5XaWxsRXhwaXJlJyA1IG1pbnV0ZXMgYmVmb3JlIHRoYXQgKFNESyBkZWZhdWx0IGlzIG9ubHkgMTBzKSBzbyBhIHNsb3dcclxuICAvLyBuZXR3b3JrIC8gYmFja2dyb3VuZGVkIHRhYiBzdGlsbCBoYXMgdGltZSB0byBmZXRjaCBhbmQgYXBwbHkgYSBmcmVzaCB0b2tlbi5cclxuICBwcml2YXRlIHJlYWRvbmx5IFRPS0VOX1JFRlJFU0hfTVMgPSA1ICogNjAgKiAxMDAwO1xyXG4gIHByaXZhdGUgdG9rZW5SZWZyZXNoSW5Qcm9ncmVzcyA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVjb3ZlcnlBdHRlbXB0cyA9IDA7XHJcbiAgcHJpdmF0ZSByZWNvdmVyeVRpbWVyOiBhbnkgPSBudWxsO1xyXG4gIC8vIFJlZmVyZW5jZXMgdG8gdGhlICd1bnJlZ2lzdGVyZWQnLydlcnJvcicgaGFuZGxlcnMgY3VycmVudGx5IGF0dGFjaGVkIHRvIGB0aGlzLmRldmljZWAsXHJcbiAgLy8gc28gYW4gaW50ZW50aW9uYWwgcmVwbGFjZSBjYW4gZGV0YWNoIGV4YWN0bHkgdGhvc2UgdHdvIGJlZm9yZSBkZXN0cm95KCkgd2l0aG91dFxyXG4gIC8vIHRvdWNoaW5nIGFueSBsaXN0ZW5lcnMgdGhlIFR3aWxpbyBTREsgaXRzZWxmIG1heSBoYXZlIHdpcmVkIHRvIHRoZSBzYW1lIEV2ZW50RW1pdHRlci5cclxuICBwcml2YXRlIGN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyOiBhbnkgPSBudWxsO1xyXG4gIHByaXZhdGUgY3VycmVudERldmljZUVycm9ySGFuZGxlcjogYW55ID0gbnVsbDtcclxuICBpbmNvbWluZ0NhbGxOb3RpZmljYXRpb249IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwcmV2aW91c0luY29taW5nQ2FsbE5vdGlmaWNhdGlvbjogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgZXh0ZW5zaW9uU2VydmljZTogRXh0ZW5zaW9uU2VydmljZSxcclxuICApIHtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCk7XHJcbiAgICAvLyBTYWZldHkgbmV0IGZvciBsb25nIGlkbGUvc2xlZXAgcGVyaW9kczogdGhlIHNpZ25hbGluZyBzb2NrZXQgY2FuIGRpZSBzaWxlbnRseVxyXG4gICAgLy8gKE9TIHN1c3BlbmRzIHRpbWVycywgdGFiIGlzIGJhY2tncm91bmRlZCkgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnLlxyXG4gICAgLy8gUmUtY2hlY2sgZGV2aWNlIGhlYWx0aCB3aGVuZXZlciB0aGUgYXBwIGJlY29tZXMgYWN0aXZlL29ubGluZSBhZ2Fpbi5cclxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCAoKSA9PiB7XHJcbiAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xyXG4gICAgICAgIHRoaXMuZW5zdXJlRGV2aWNlSGVhbHRoeSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAoKSA9PiB0aGlzLmVuc3VyZURldmljZUhlYWx0aHkoKSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVUb2tlbigpIHtcclxuICAgIGlmICh0aGlzLnRva2VuSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XHJcbiAgICB9XHJcbiAgICAvLyBBIGZldGNoIGlzIGFscmVhZHkgaW4gZmxpZ2h0IOKAlCBBcHBJbml0aWFsaXplclNlcnZpY2UgYW5kIHRoZSBkaWFsYm94IGNvbXBvbmVudFxyXG4gICAgLy8gYm90aCBjYWxsIGluaXRpYWxpemVUd2lsaW9EZXZpY2UoKSBvbiBzdGFydHVwLCBhbmQgd2l0aG91dCB0aGlzIHRoZXknZCByYWNlOlxyXG4gICAgLy8gdGhlIHNlY29uZCBjYWxsIHdvdWxkIGZpcmUgaXRzIG93biB0b2tlbiByZXF1ZXN0IGFuZCwgb25jZSByZXNvbHZlZCwgY2FsbFxyXG4gICAgLy8gaW5pdGlhbGl6ZURldmljZSgpIGFnYWluLCBkZXN0cm95aW5nIHRoZSBkZXZpY2UgdGhlIGZpcnN0IGNhbGwganVzdCBjcmVhdGVkIGFuZFxyXG4gICAgLy8gdG91Y2hpbmcgb2ZmIGEgc3B1cmlvdXMgJ3VucmVnaXN0ZXJlZCcgLT4gcmVjb3ZlcnkgY2FzY2FkZS4gU2hhcmUgdGhlIHNhbWVcclxuICAgIC8vIGluLWZsaWdodCByZXF1ZXN0IGluc3RlYWQuXHJcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemF0aW9uJCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50b2tlbkluaXRpYWxpemF0aW9uJDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnRva2VuSW5pdGlhbGl6YXRpb24kID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEluY29taW5nQ2FsbFRva2VuKHRoaXMuZGV2aWNlSWQgfHwgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2RldmljZUlkJykpLnBpcGUoXHJcbiAgICAgIHRhcCgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxUb2tlbiA9IGRhdGEudG9rZW47XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luLXRva2VuJywgZGF0YS50b2tlbik7XHJcbiAgICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmluaXRpYWxpemVEZXZpY2UoKTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGluaXRpYWxpemluZyBUd2lsaW8gdG9rZW46JywgZXJyb3IpO1xyXG4gICAgICAgIC8vIEFsbG93IGEgZnJlc2ggYXR0ZW1wdCBuZXh0IHRpbWUgc2luY2UgdGhpcyBvbmUgZmFpbGVkLlxyXG4gICAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yKTtcclxuICAgICAgfSksXHJcbiAgICAgIHNoYXJlUmVwbGF5KDEpIC8vIENhY2hlIHRoZSByZXN1bHQgZm9yIHN1YnNlcXVlbnQgc3Vic2NyaWJlcnNcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaW5pdGlhbGl6ZVR3aWxpb0RldmljZShkZXZpY2VJZDogYW55KSB7XHJcbiAgICB0aGlzLmRldmljZUlkID0gZGV2aWNlSWQ7XHJcbiAgICBpZiAodGhpcy50b2tlbkluaXRpYWxpemVkICYmIHRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRGV2aWNlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVUb2tlbigpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0aWFsaXplRGV2aWNlKCkge1xyXG4gICAgaWYgKHRoaXMuZGV2aWNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnNvbGUud2FybignU2tpcHBpbmcgZGV2aWNlIHJlLWluaXQ6IGFjdGl2ZSBhY2NlcHRlZCBjYWxscyBleGlzdDonLCB0aGlzLmFjY2VwdGVkQ2FsbExpc3QubGVuZ3RoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgLy8gRGV0YWNoIHRoZSAndW5yZWdpc3RlcmVkJy8nZXJyb3InIGhhbmRsZXJzIHdlIGF0dGFjaGVkIGJlZm9yZSBkZXN0cm95aW5nLCBzb1xyXG4gICAgICAvLyB0aGlzICppbnRlbnRpb25hbCogdGVhcmRvd24gY2FuJ3QgZmlyZSB0aGVtIGJlbG93IOKAlCBvdGhlcndpc2UgYSBkZWxpYmVyYXRlXHJcbiAgICAgIC8vIHJlcGxhY2UgbG9va3MgaWRlbnRpY2FsIHRvIGFuIHVuZXhwZWN0ZWQgZHJvcCBhbmQgdG91Y2hlcyBvZmYgYVxyXG4gICAgICAvLyBkZXN0cm95IC0+ICd1bnJlZ2lzdGVyZWQnIC0+IHNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkgLT4gZGVzdHJveSBjYXNjYWRlLlxyXG4gICAgICAvLyAoT25seSByZW1vdmVzIG91ciBvd24gaGFuZGxlcnMsIG5vdCBhbnl0aGluZyB0aGUgVHdpbGlvIFNESyBpdHNlbGYgbWF5IGhhdmVcclxuICAgICAgLy8gd2lyZWQgdG8gdGhlIHNhbWUgRXZlbnRFbWl0dGVyLCBzbyBpdHMgb3duIGRlc3Ryb3koKS9jbGVhbnVwIGlzIHVuYWZmZWN0ZWQuKVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyKSB7XHJcbiAgICAgICAgICB0aGlzLmRldmljZS5yZW1vdmVMaXN0ZW5lcigndW5yZWdpc3RlcmVkJywgdGhpcy5jdXJyZW50RGV2aWNlVW5yZWdpc3RlcmVkSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXIpIHtcclxuICAgICAgICAgIHRoaXMuZGV2aWNlLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIHRoaXMuY3VycmVudERldmljZUVycm9ySGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGNhdGNoIChfKSB7fVxyXG4gICAgICBjb25zb2xlLmxvZygnMTUzIGNhbGwgZW5kJylcclxuICAgICAgdGhpcy5kZXZpY2UuZGVzdHJveSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5pbmNvbWluZ0NhbGxUb2tlbikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyBUd2lsaW8gdG9rZW4gYXZhaWxhYmxlJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBkZXZpY2U6IGFueSA9IG5ldyBEZXZpY2UodGhpcy5pbmNvbWluZ0NhbGxUb2tlbiwgeyBhbGxvd0luY29taW5nV2hpbGVCdXN5OiB0cnVlLCB0b2tlblJlZnJlc2hNczogdGhpcy5UT0tFTl9SRUZSRVNIX01TIH0pO1xyXG4gICAgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XHJcblxyXG4gICAgZGV2aWNlLm9uKCdyZWdpc3RlcmVkJywgKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSByZWdpc3RlcmVkIHN1Y2Nlc3NmdWxseScpO1xyXG4gICAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMgPSAxMDtcclxuICAgICAgLy8gQSByZWNvdmVyeSBhdHRlbXB0IG1heSBoYXZlIGJlZW4gc2NoZWR1bGVkIGJ5IGFuIGVhcmxpZXIgZGV2aWNlIGluc3RhbmNlXHJcbiAgICAgIC8vIGJlZm9yZSB0aGlzIG9uZSBjYW1lIHVwIOKAlCBpdCdzIHN0YWxlIG5vdywgY2FuY2VsIGl0IHNvIGl0IGNhbid0IHRlYXIgdGhpc1xyXG4gICAgICAvLyBoZWFsdGh5IGRldmljZSBkb3duIGxhdGVyLlxyXG4gICAgICBpZiAodGhpcy5yZWNvdmVyeVRpbWVyKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb3ZlcnlUaW1lcik7XHJcbiAgICAgICAgdGhpcy5yZWNvdmVyeVRpbWVyID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBUd2lsaW8gZmlyZXMgdGhpcyBUT0tFTl9SRUZSRVNIX01TIGJlZm9yZSB0aGUgYWNjZXNzIHRva2VuIGV4cGlyZXMuIFN3YXAgaW4gYVxyXG4gICAgLy8gZnJlc2ggb25lIHZpYSB1cGRhdGVUb2tlbigpIHNvIHRoZSBzaWduYWxpbmcgY29ubmVjdGlvbiBuZXZlciBoYXMgdG8gZHJvcFxyXG4gICAgLy8gaW4gdGhlIGZpcnN0IHBsYWNlICh0aGlzIGlzIHRoZSBtYWluIGNhdXNlIG9mIFwiaWRsZSBmb3IgYSB3aGlsZSwgQkUgc3RpbGxcclxuICAgIC8vIG5vdGlmaWVzIGJ1dCBUd2lsaW8gaW5jb21pbmcgZXZlbnQgbmV2ZXIgZmlyZXNcIikuXHJcbiAgICBkZXZpY2Uub24oJ3Rva2VuV2lsbEV4cGlyZScsICgpID0+IHtcclxuICAgICAgdGhpcy5yZWZyZXNoRGV2aWNlVG9rZW4oKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGRldmljZS5vbignaW5jb21pbmcnLCAoY2FsbDogQ2FsbCB8IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpbmNvbWluZ0NhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgICAgaWYgKGluY29taW5nQ2FsbFNpZCAmJiB0aGlzLmluY29taW5nQ2FsbHNNYXAuaGFzKGluY29taW5nQ2FsbFNpZCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJpbWFyeSBkZXZpY2U6IGR1cGxpY2F0ZSBpbmNvbWluZyBmb3IgYWxyZWFkeS10cmFja2VkIGNhbGwsIGlnbm9yaW5nJywgaW5jb21pbmdDYWxsU2lkKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgaW5jb21pbmcgY2FsbCBldmVudDonLCBjYWxsKTtcclxuICAgICAgY29uc3Qgbm90aWZpY2F0aW9uID0gdGhpcy5idWlsZEluY29taW5nTm90aWZpY2F0aW9uKGNhbGwpO1xyXG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsTm90aWZpY2F0aW9uLm5leHQobm90aWZpY2F0aW9uKTtcclxuICAgICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwIHx8IHRoaXMucHJpbWFyeUhhc0NhbGwpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygncHJpbWFyeSBkZXZpY2U6IGNvbmN1cnJlbnQgY2FsbCBhcnJpdmluZyDigJMgc3BhcmUgZGV2aWNlIHdpbGwgaGFuZGxlIGl0Jyk7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gdHJ1ZTtcclxuICAgICAgLy8gQXJtIGEgc3BhcmUgZGV2aWNlIHJpZ2h0IG5vdyAoYmVmb3JlIHRoZSB1c2VyIGV2ZW4gYWNjZXB0cykgc28gaXQgY2FuXHJcbiAgICAgIC8vIHJlZ2lzdGVyIGluIHRpbWUgZm9yIGFueSBjYWxsIHRoYXQgYXJyaXZlcyBzZWNvbmRzIGxhdGVyLlxyXG4gICAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luY29taW5nTXV0ZWQpIHtcclxuICAgICAgICB0cnkgeyBkZXZpY2UuYXVkaW8/LmluY29taW5nKGZhbHNlKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgfVxyXG4gICAgICBjYWxsLm9uKCdhY2NlcHQnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0luY29taW5nIGNhbGwgYW5zd2VyZWQvYWNjZXB0ZWQnKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjYWxsLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIGRpc2Nvbm5lY3RlZCcpO1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUhhc0NhbGwgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjYWxsLm9uKCdjYW5jZWwnLCAoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0NhbGxlciBodW5nIHVwIGJlZm9yZSBhbnN3ZXInKTtcclxuICAgICAgICB0aGlzLnByaW1hcnlIYXNDYWxsID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY2FsbC5vbigncmVqZWN0JywgKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYWxsIHJlamVjdGVkJyk7XHJcbiAgICAgICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50cmFja0luY29taW5nQ2FsbChjYWxsKTtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEZXRhaWwgPSBjYWxsO1xyXG4gICAgICB0aGlzLmlzU2hvd0luY29taW5nQ2FsbCA9IHRydWU7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBvbkRldmljZUVycm9yID0gKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgLy8gU3RhbGUgZXZlbnQgZnJvbSBhIGRldmljZSB3ZSd2ZSBhbHJlYWR5IGludGVudGlvbmFsbHkgcmVwbGFjZWQg4oCUIGlnbm9yZS5cclxuICAgICAgaWYgKHRoaXMuZGV2aWNlICE9PSBkZXZpY2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5lcnJvcignVHdpbGlvIERldmljZSBFcnJvcjonLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmN1cnJlbnREZXZpY2VFcnJvckhhbmRsZXIgPSBvbkRldmljZUVycm9yO1xyXG4gICAgZGV2aWNlLm9uKCdlcnJvcicsIG9uRGV2aWNlRXJyb3IpO1xyXG4gICAgZGV2aWNlLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZygnVHdpbGlvIERldmljZSBkaXNjb25uZWN0ZWQnKTtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zY2hlZHVsZURldmljZVJlY292ZXJ5KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBvbkRldmljZVVucmVnaXN0ZXJlZCA9ICgpID0+IHtcclxuICAgICAgLy8gU3RhbGUgZXZlbnQgZnJvbSBhIGRldmljZSB3ZSd2ZSBhbHJlYWR5IGludGVudGlvbmFsbHkgcmVwbGFjZWQg4oCUIGlnbm9yZS5cclxuICAgICAgaWYgKHRoaXMuZGV2aWNlICE9PSBkZXZpY2UpIHJldHVybjtcclxuICAgICAgY29uc29sZS5sb2coJ1R3aWxpbyBEZXZpY2UgdW5yZWdpc3RlcmVkJyk7XHJcbiAgICAgIHRoaXMuaXNTaG93SW5jb21pbmdDYWxsID0gZmFsc2U7XHJcbiAgICAgIHRoaXMudG9rZW5Jbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNjaGVkdWxlRGV2aWNlUmVjb3ZlcnkoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmN1cnJlbnREZXZpY2VVbnJlZ2lzdGVyZWRIYW5kbGVyID0gb25EZXZpY2VVbnJlZ2lzdGVyZWQ7XHJcbiAgICBkZXZpY2Uub24oJ3VucmVnaXN0ZXJlZCcsIG9uRGV2aWNlVW5yZWdpc3RlcmVkKTtcclxuXHJcbiAgICAvLyBSZWdpc3RlciBBRlRFUiBhdHRhY2hpbmcgYWxsIGxpc3RlbmVyc1xyXG4gICAgZGV2aWNlLnJlZ2lzdGVyKCk7XHJcbiAgICBjb25zb2xlLmxvZygnZGV2aWNlIGNyZWF0ZWQnLCBkZXZpY2UpO1xyXG4gICAgcmV0dXJuIHRoaXMudG9rZW5Jbml0aWFsaXphdGlvbiQgfHwgb2YobnVsbCk7XHJcbiAgfVxyXG5cclxuICAvLyBQcm9hY3RpdmVseSBzd2FwIGluIGEgZnJlc2ggYWNjZXNzIHRva2VuIGFoZWFkIG9mIGV4cGlyeSAoc2VlICd0b2tlbldpbGxFeHBpcmUnXHJcbiAgLy8gYWJvdmUpIHNvIHRoZSBEZXZpY2UncyBzaWduYWxpbmcgY29ubmVjdGlvbiBzdXJ2aXZlcyBsb25nIGlkbGUgcGVyaW9kcy5cclxuICBwcml2YXRlIHJlZnJlc2hEZXZpY2VUb2tlbigpIHtcclxuICAgIGlmICh0aGlzLnRva2VuUmVmcmVzaEluUHJvZ3Jlc3MpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gdHJ1ZTtcclxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRJbmNvbWluZ0NhbGxUb2tlbih0aGlzLmRldmljZUlkIHx8IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdkZXZpY2VJZCcpKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxUb2tlbiA9IGRhdGEudG9rZW47XHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2luLXRva2VuJywgZGF0YS50b2tlbik7XHJcbiAgICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAvLyBFdmVyeSBsaXZlIERldmljZSB3YXMgY3JlYXRlZCBmcm9tIHRoZSBzYW1lIHRva2VuLCBzbyB0aGV5IGFsbCBleHBpcmVcclxuICAgICAgICAvLyB0b2dldGhlciDigJQgcmVmcmVzaCB0aGUgc3BhcmUvcGVuZGluZy9jb25jdXJyZW50IG9uZXMgdG9vLCBvdGhlcndpc2UgdGhlXHJcbiAgICAgICAgLy8gc3BhcmUgc2lsZW50bHkgZGllcyBhZnRlciAxaDMwbSBpZGxlIGFuZCBjb25jdXJyZW50IGNhbGxzIG5ldmVyIHJpbmcuXHJcbiAgICAgICAgY29uc3QgYXBwbHkgPSAoZGV2OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmICghZGV2KSByZXR1cm47XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBkZXYudXBkYXRlVG9rZW4odGhpcy5pbmNvbWluZ0NhbGxUb2tlbik7XHJcbiAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGFwcGx5IHJlZnJlc2hlZCBUd2lsaW8gdG9rZW46JywgZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIGFwcGx5KHRoaXMuZGV2aWNlKTtcclxuICAgICAgICBhcHBseSh0aGlzLnNwYXJlRGV2aWNlKTtcclxuICAgICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgICAgICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaChhcHBseSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2tlblJlZnJlc2hJblByb2dyZXNzID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHJlZnJlc2ggVHdpbGlvIHRva2VuIGFoZWFkIG9mIGV4cGlyeTonLCBlcnIpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFNlbGYtaGVhbCBhZnRlciB0aGUgRGV2aWNlIGRpZXMgKGV4cGlyZWQgdG9rZW4sIGRyb3BwZWQgc2lnbmFsaW5nIHNvY2tldCB3aGlsZVxyXG4gIC8vIGlkbGUvYXNsZWVwLCBldGMpLiBOZXZlciBydW5zIHdoaWxlIGEgY2FsbCBpcyBhY3R1YWxseSBhY3RpdmUsIGFuZCBiYWNrcyBvZmYgc28gYVxyXG4gIC8vIGdlbnVpbmVseSBsb2dnZWQtb3V0L29mZmxpbmUgdXNlciBkb2Vzbid0IHJldHJ5IGZvcmV2ZXIuXHJcbiAgcHJpdmF0ZSBzY2hlZHVsZURldmljZVJlY292ZXJ5KCkge1xyXG4gICAgaWYgKHRoaXMuYWNjZXB0ZWRDYWxsTGlzdC5sZW5ndGggPiAwIHx8IHRoaXMucmVjb3ZlcnlUaW1lcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZWxheSA9IE1hdGgubWluKDMwMDAwLCAyMDAwICogTWF0aC5wb3coMiwgdGhpcy5yZWNvdmVyeUF0dGVtcHRzKSk7XHJcbiAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMrKztcclxuICAgIHRoaXMucmVjb3ZlcnlUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlY292ZXJ5VGltZXIgPSBudWxsO1xyXG4gICAgICBjb25zdCBhdXRoVG9rZW4gPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJyk7XHJcbiAgICAgIGlmICghYXV0aFRva2VuIHx8IGF1dGhUb2tlbiA9PT0gJ2xvZ291dCcpIHtcclxuICAgICAgICB0aGlzLnJlY292ZXJ5QXR0ZW1wdHMgPSAwO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRva2VuSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pbml0aWFsaXplVG9rZW4oKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKCdUd2lsaW8gZGV2aWNlIHJlY292ZXJ5IGF0dGVtcHQgZmFpbGVkOicsIGVycilcclxuICAgICAgfSk7XHJcbiAgICB9LCBkZWxheSk7XHJcbiAgfVxyXG5cclxuICAvLyBCdWlsZCB0aGUgZnVsbCBpbmNvbWluZy1jYWxsIG5vdGlmaWNhdGlvbiBwYXlsb2FkIChtYXRjaGVzIHRoZSBzaGFwZSB0aGUgQkUgdXNlZCB0b1xyXG4gIC8vIHB1c2ggb3ZlciB0aGUgc29ja2V0KSBmcm9tIHRoZSByYXcgVHdpbGlvICdpbmNvbWluZycgQ2FsbDogcGFyc2VkIFBhcmFtcyBmaWVsZHMgcGx1c1xyXG4gIC8vIHRoZSBkZXJpdmVkIGNsaWVudFNpZC9wYXJ0aWNpcGFudFNpZC9ub3RpZmljYXRpb25UeXBlL3RpdGxlL21zZ0JvZHkuXHJcbiAgYnVpbGRJbmNvbWluZ05vdGlmaWNhdGlvbihjYWxsOiBDYWxsKTogYW55IHtcclxuICAgIGNvbnN0IG5vdGlmaWNhdGlvbiA9IHRoaXMuY29udmVydFRvSnNvbihjYWxsPy5wYXJhbWV0ZXJzPy5bJ1BhcmFtcyddIHx8ICd7fScpO1xyXG4gICAgY29uc3QgY2FsbFNpZCA9IGNhbGw/LnBhcmFtZXRlcnM/LlsnQ2FsbFNpZCddO1xyXG4gICAgbm90aWZpY2F0aW9uLmNsaWVudFNpZCA9IGNhbGxTaWQ7XHJcbiAgICAvLyBPbmx5IHJlYWwgVHdpbGlvIFNJRCBleHBvc2VkIGNsaWVudC1zaWRlIGZvciB0aGlzIGxlZzsgbm8gc2VwYXJhdGUgcGFydGljaXBhbnQgU0lEXHJcbiAgICAvLyBpcyBhdmFpbGFibGUsIHNvIGl0IG1pcnJvcnMgY2xpZW50U2lkLlxyXG4gICAgbm90aWZpY2F0aW9uLnBhcnRpY2lwYW50U2lkID0gY2FsbFNpZDtcclxuICAgIG5vdGlmaWNhdGlvbi5ub3RpZmljYXRpb25UeXBlID0gJ2luY29taW5nY2FsbCc7XHJcbiAgICBub3RpZmljYXRpb24udGl0bGUgPSAnSW5jb21pbmcgQ2FsbCc7XHJcbiAgICBub3RpZmljYXRpb24ubXNnQm9keSA9IGB5b3UgaGF2ZSBpbmNvbWluZyBjYWxsICR7bm90aWZpY2F0aW9uLmZyb21OYW1lIHx8ICcnfWA7XHJcbiAgICByZXR1cm4gbm90aWZpY2F0aW9uO1xyXG4gIH1cclxuXHJcbiAgY29udmVydFRvSnNvbihkYXRhOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgY29uc3Qgb2JqOiBhbnkgPSB7fTtcclxuXHJcbiAgICBpZiAoIWRhdGEpIHtcclxuICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3JtYXQ6IGtleT12YWx1ZSZrZXk9dmFsdWVcclxuICAgIGlmIChkYXRhLmluY2x1ZGVzKCcmJykpIHtcclxuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhkYXRhKTtcclxuXHJcbiAgICAgIHBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgICAgb2JqW2tleV0gPSB2YWx1ZSA9PT0gJ3RydWUnXHJcbiAgICAgICAgICA/IHRydWVcclxuICAgICAgICAgIDogdmFsdWUgPT09ICdmYWxzZSdcclxuICAgICAgICAgID8gZmFsc2VcclxuICAgICAgICAgIDogZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBGb3JtYXQ6IHtrZXk9dmFsdWUsIGtleT12YWx1ZX1cclxuICAgICAgY29uc3QgdGV4dCA9IGRhdGEudHJpbSgpLnJlcGxhY2UoL15cXHt8XFx9JC9nLCAnJyk7XHJcblxyXG4gICAgICB0ZXh0LnNwbGl0KCcsJykuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGl0ZW0uaW5kZXhPZignPScpO1xyXG5cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgY29uc3Qga2V5ID0gaXRlbS5zdWJzdHJpbmcoMCwgaW5kZXgpLnRyaW0oKTtcclxuICAgICAgICAgIGxldCB2YWx1ZTogYW55ID0gaXRlbS5zdWJzdHJpbmcoaW5kZXggKyAxKS50cmltKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB2YWx1ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvYmoucmVhZCA9IGZhbHNlO1xyXG4gICAgb2JqLnNhdmUgPSBmYWxzZTtcclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICAvLyBTYWZldHkgbmV0IGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgdW5kZXJseWluZyBzb2NrZXQgZGllcyBzaWxlbnRseSBkdXJpbmcgYSBsb25nXHJcbiAgLy8gc2xlZXAvaWRsZSBwZXJpb2Qgd2l0aG91dCBldmVyIGZpcmluZyAnZXJyb3InLyd1bnJlZ2lzdGVyZWQnICh0aGUgT1MgY2FuIHN1c3BlbmRcclxuICAvLyB0aW1lcnMvc29ja2V0cyBvdXRyaWdodCkg4oCUIHJlLWNoZWNrIGRldmljZSBoZWFsdGggd2hlbmV2ZXIgdGhlIGFwcCB3YWtlcyB1cC5cclxuICBwcml2YXRlIGVuc3VyZURldmljZUhlYWx0aHkoKSB7XHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmRldmljZSB8fCB0aGlzLmRldmljZS5zdGF0ZSAhPT0gJ3JlZ2lzdGVyZWQnKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW8gZGV2aWNlIHVuaGVhbHRoeSBhZnRlciB3YWtlL3Zpc2liaWxpdHkgY2hhbmdlLCByZS1pbml0aWFsaXppbmcnKTtcclxuICAgICAgdGhpcy50b2tlbkluaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZVRva2VuKCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBlcnJvcjogKGVycikgPT4gY29uc29sZS5lcnJvcignVHdpbGlvIGRldmljZSByZWNvdmVyeSBmYWlsZWQ6JywgZXJyKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNhdmVDb250YWN0KHBheWxvYWQ6IGFueSk6IE9ic2VydmFibGU8W10+IHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKX0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9hZGQvY29udGFjdHMvbWFudWFsbHknLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDb250YWN0KHBheWxvYWQ6YW55KXtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIHRoaXMudG9rZW59KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svdXBkYXRlL2NvbnRhY3QnLCBwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIFxyXG4gIGRlbGV0ZUNvbnRhY3QoaWQ6c3RyaW5nKXtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBwaG9uZWJvb2tpZDogaWRcclxuICAgIH1cclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0geyBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svZGVsZXRlL2NvbnRhY3QvJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGdldENvbnRhY3RMaXN0KCl7XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFtdPihlbnZpcm9ubWVudC5hcGlVcmwgKyAnL3V0aWxpdGllcy9waG9uZWJvb2svcmVhZC9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGFkZENvbnRhY3RUb0Zhdm91cml0ZShwYXlsb2FkOiBhbnkpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGRhdGUvZmF2b3VyaXRlJywgcGF5bG9hZCwgaHR0cE9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmF2b3VyaXRDb250YWN0cygpe1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7IGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIH0pIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2Zhdm91cml0ZS9jb250YWN0cycsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGdldFJlY2VudENhbGxzKHBhZ2VJbmRleD86IHN0cmluZywgcGFnZVNpemU/OiBzdHJpbmcsKXtcclxuICAgIGNvbnN0IGhlYWRlcnMgPSAgeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9O1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPXtoZWFkZXJzfVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9yZWNlbnQvY2FsbHMnLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGRlbGV0ZVJlY2VudENhbGxMb2coaWQ6c3RyaW5nfCBzdHJpbmdbXSl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcmVjb3JkSWQ6IGlkXHJcbiAgICB9XHJcbiAgICBjb25zdCBodHRwT3B0aW9ucyA9IHsgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJywgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJykgfSkgfTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvcGhvbmVib29rL2RlbGV0ZS9jYWxscy8nK2lkLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZFBob3RvKHBheWxvYWQ6IGFueSl7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay91cGxvYWQvcGhvdG8nLHBheWxvYWQsIGh0dHBPcHRpb25zKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVBob3RvKGlkOnN0cmluZyl7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgcGhvbmVib29raWQ6IGlkXHJcbiAgICB9XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3Bob25lYm9vay9kZWxldGUvcGhvdG8vJytpZCxwYXlsb2FkLCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVDb3V0cnlDb2RlVG9hc3QodmFsOmFueSl7XHJcbiAgICBsZXQgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0F1dGgtS2V5JzogXCJCZWFyZXIgXCIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnZXh0X3Rva2VuJylcclxuICAgICAgfSlcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxbXT4oZW52aXJvbm1lbnQuYXBpVXJsICsgJy91dGlsaXRpZXMvc29mdHBob25lL2NvdW50cnljb2RlL2FsZXJ0LycgKyB2YWwsIHt9LCBodHRwT3B0aW9ucyk7XHJcbiAgfVxyXG4gIGdldFRvTnVtYmVyKGRpYWxsZWRObzogc3RyaW5nLCBpc29Db2RlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGh0dHBPcHRpb25zID0ge1xyXG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoeyAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLCAnQXV0aC1LZXknOiBcIkJlYXJlciBcIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB9KSxcclxuICAgICAgcGFyYW1zOiBuZXcgSHR0cFBhcmFtcygpLnNldCgnaXNvQ29kZScsIGlzb0NvZGUpXHJcbiAgICB9O1xyXG4gICAgY29uc3QgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKS5zZXQoJ2lzb0NvZGUnLCBpc29Db2RlKVxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGVudmlyb25tZW50LmFwaVVybCArICcvdXRpbGl0aWVzL3NvZnRwaG9uZS9jaGVjay9jb3VudHJ5Q29kZS8nICsgZGlhbGxlZE5vLCBodHRwT3B0aW9ucyk7XHJcbiAgfSBcclxuICBcclxuICAvLyBSZWNvcmQgYSByaW5naW5nIGluY29taW5nIENhbGwgc28gaXQgY2FuIGxhdGVyIGJlIGFjY2VwdGVkIGJ5IGl0cyBzcGVjaWZpYyBpZC5cclxuICAvLyBUaGUgbWFwIGlzIGNsZWFuZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjYWxsIGlzIGNhbmNlbGxlZC9kaXNjb25uZWN0ZWQvcmVqZWN0ZWQuXHJcbiAgcHJpdmF0ZSB0cmFja0luY29taW5nQ2FsbChjYWxsOiBhbnkpIHtcclxuICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgIGlmIChjYWxsU2lkKSB7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsc01hcC5zZXQoY2FsbFNpZCwgY2FsbCk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjbGVhbnVwID0gKCkgPT4ge1xyXG4gICAgICBpZiAoIWNhbGxTaWQpIHJldHVybjtcclxuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgLy8gSWYgdGhlIGNhbGwgZW5kZWQgYmVmb3JlIHRoZSB1c2VyIGFjY2VwdGVkIGl0LCBkZXN0cm95IHRoZSBwZW5kaW5nIHNwYXJlXHJcbiAgICAgIC8vIGRldmljZSB0aGF0IHdhcyBob2xkaW5nIGl0IHNvIHdlIGRvbid0IGxlYWsgZGV2aWNlIHJlZ2lzdHJhdGlvbnMuXHJcbiAgICAgIGNvbnN0IGRldiA9IHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5nZXQoY2FsbFNpZCk7XHJcbiAgICAgIGlmIChkZXYgJiYgIWRldi5fb3duc0FjY2VwdGVkQ2FsbCkge1xyXG4gICAgICAgIHRyeSB7IGRldi5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIGNhbGwub24oJ2NhbmNlbCcsIGNsZWFudXApO1xyXG4gICAgY2FsbC5vbignZGlzY29ubmVjdCcsIGNsZWFudXApO1xyXG4gICAgY2FsbC5vbigncmVqZWN0JywgY2xlYW51cCk7XHJcbiAgfVxyXG5cclxuICAvLyBSZXNvbHZlIHRoZSBFWEFDVCByaW5naW5nIENhbGwgZm9yIGEgZ2l2ZW4gVUkgZW50cnkgaWQgKHBhcnRpY2lwYW50L3JlY29yZCBpZCkuXHJcbiAgLy8gRmFsbHMgYmFjayB0byB0aGUgbW9zdCByZWNlbnQgaW5jb21pbmcgY2FsbCBzbyBvbGRlciBzaW5nbGUtY2FsbCBmbG93cyBzdGlsbCB3b3JrLlxyXG4gIGdldEluY29taW5nQ2FsbEJ5SWQoaWQ6IGFueSkge1xyXG4gICAgaWYgKGlkICE9IG51bGwgJiYgdGhpcy5pbmNvbWluZ0NhbGxzTWFwLmhhcyhpZCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5jb21pbmdDYWxsc01hcC5nZXQoaWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmluY29taW5nQ2FsbERldGFpbCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmluY29taW5nQ2FsbERldGFpbC5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXSA9PSBpZCA/IHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsIDogbnVsbDtcclxuICB9XHJcblxyXG4gIHByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCkge1xyXG4gICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UpIHtcclxuICAgICAgcmV0dXJuOyAvLyBhIGZyZWUgc3BhcmUgaXMgYWxyZWFkeSB3YWl0aW5nXHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuaW5jb21pbmdDYWxsVG9rZW4pIHtcclxuICAgICAgY29uc29sZS53YXJuKCdwcmVwYXJlU3BhcmVEZXZpY2U6IG5vIHRva2VuIGF2YWlsYWJsZScpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzcGFyZTogYW55ID0gbmV3IERldmljZSh0aGlzLmluY29taW5nQ2FsbFRva2VuLCB7IGFsbG93SW5jb21pbmdXaGlsZUJ1c3k6IHRydWUsIHRva2VuUmVmcmVzaE1zOiB0aGlzLlRPS0VOX1JFRlJFU0hfTVMgfSk7XHJcbiAgICBzcGFyZS5fb3duc0FjY2VwdGVkQ2FsbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEZhbGxiYWNrIGluIGNhc2UgdGhlIHByaW1hcnkgZGV2aWNlIGlzIGdvbmUvcmVwbGFjZWQ6IHRoZSBzcGFyZSBjYW4gdHJpZ2dlclxyXG4gICAgLy8gdGhlIHNoYXJlZCByZWZyZXNoIGl0c2VsZiAocmVmcmVzaERldmljZVRva2VuIGRlZHVwZXMgY29uY3VycmVudCByZXF1ZXN0cykuXHJcbiAgICBzcGFyZS5vbigndG9rZW5XaWxsRXhwaXJlJywgKCkgPT4ge1xyXG4gICAgICB0aGlzLnJlZnJlc2hEZXZpY2VUb2tlbigpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhcmUub24oJ3JlZ2lzdGVyZWQnLCAoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IHRydWU7XHJcbiAgICAgIC8vIEFwcGx5IHRoZSBtdXRlIHByZWZlcmVuY2UgaGVyZSDigJQgYHNwYXJlLmF1ZGlvYCBpcyBvbmx5IHJlYWR5IGFmdGVyIHJlZ2lzdHJhdGlvbixcclxuICAgICAgLy8gc28gdGhlIGNhbGwgYWJvdmUgKGJlZm9yZSByZWdpc3RlcigpKSB3YXMgYWx3YXlzIGEgbm8tb3AuXHJcbiAgICAgIHRyeSB7IHNwYXJlLmF1ZGlvPy5pbmNvbWluZyghdGhpcy5pc0luY29taW5nTXV0ZWQpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICBjb25zb2xlLmxvZygnU3BhcmUgZGV2aWNlIHJlZ2lzdGVyZWQg4oCTIHJlYWR5IGZvciB0aGUgbmV4dCBjb25jdXJyZW50IGNhbGwnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHNwYXJlLm9uKCdpbmNvbWluZycsIChjYWxsOiBDYWxsIHwgYW55KSA9PiB7XHJcbiAgICAgIC8vIEd1YXJkOiBvbmNlIHRoaXMgc3BhcmUgaXMgYWxyZWFkeSBoYW5kbGluZyBhIGNhbGwgKHBlbmRpbmcgb3IgYWNjZXB0ZWQpLFxyXG4gICAgICAvLyBpZ25vcmUgYW55IGZ1cnRoZXIgaW5jb21pbmcgZXZlbnRzIHNvIGFub3RoZXIgc3BhcmUgY2FuIHRha2UgdGhlIG5leHQgY2FsbC5cclxuICAgICAgaWYgKHNwYXJlLl9vd25zQWNjZXB0ZWRDYWxsIHx8IHNwYXJlLl9wZW5kaW5nSW5jb21pbmdDYWxsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNhbGxTaWQgPSBjYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgICAgLy8gU2FtZSBzaGFyZWQtaWRlbnRpdHkgZmFuLW91dCBndWFyZCBhcyB0aGUgcHJpbWFyeSBkZXZpY2UncyAnaW5jb21pbmcnIGhhbmRsZXI6XHJcbiAgICAgIC8vIGlmIGFub3RoZXIgRGV2aWNlIGFscmVhZHkgY2xhaW1lZCB0aGlzIENhbGxTaWQsIHRoaXMgaXMgYSBkdXBsaWNhdGUgbGVnIG9mXHJcbiAgICAgIC8vIHRoZSBzYW1lIGNhbGwsIG5vdCBhIGdlbnVpbmVseSBuZXcgY29uY3VycmVudCBjYWxsIOKAlCBpZ25vcmUgaXQuXHJcbiAgICAgIGlmIChjYWxsU2lkICYmIHRoaXMuaW5jb21pbmdDYWxsc01hcC5oYXMoY2FsbFNpZCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnc3BhcmUgZGV2aWNlOiBkdXBsaWNhdGUgaW5jb21pbmcgZm9yIGFscmVhZHktdHJhY2tlZCBjYWxsLCBpZ25vcmluZycsIGNhbGxTaWQpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBzcGFyZS5fcGVuZGluZ0luY29taW5nQ2FsbCA9IGNhbGw7XHJcblxyXG4gICAgICAvLyBUcmFuc2l0aW9uIHRoaXMgc3BhcmUgZnJvbSBcImZyZWVcIiDihpIgXCJwZW5kaW5nXCI6IHJlbW92ZSBpdCBhcyB0aGUgYWN0aXZlXHJcbiAgICAgIC8vIHNwYXJlRGV2aWNlIGFuZCB0cmFjayBpdCBieSBDYWxsU2lkIHNvIG9uQ29uY3VycmVudENhbGxBY2NlcHRlZCBjYW4gZmluZCBpdC5cclxuICAgICAgaWYgKHRoaXMuc3BhcmVEZXZpY2UgPT09IHNwYXJlKSB7XHJcbiAgICAgICAgdGhpcy5zcGFyZURldmljZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zcGFyZURldmljZVJlYWR5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNhbGxTaWQpIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuc2V0KGNhbGxTaWQsIHNwYXJlKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBJbW1lZGlhdGVseSBhcm0gdGhlIE5FWFQgZnJlZSBzcGFyZSBzbyBpdCBpcyByZWFkeSBmb3IgY2FsbCBOKzIgd2l0aG91dFxyXG4gICAgICAvLyB3YWl0aW5nIGZvciB0aGUgdXNlciB0byBhY2NlcHQgdGhpcyBjYWxsIGZpcnN0LlxyXG4gICAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0luY29taW5nTXV0ZWQpIHtcclxuICAgICAgICB0cnkgeyBzcGFyZS5hdWRpbz8uaW5jb21pbmcoZmFsc2UpOyB9IGNhdGNoIChfKSB7fVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhY2tJbmNvbWluZ0NhbGwoY2FsbCk7XHJcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGV0YWlsID0gY2FsbDtcclxuICAgICAgdGhpcy5pc1Nob3dJbmNvbWluZ0NhbGwgPSB0cnVlO1xyXG4gICAgICBjb25zdCBub3RpZmljYXRpb24gPSB0aGlzLmJ1aWxkSW5jb21pbmdOb3RpZmljYXRpb24oY2FsbCk7XHJcbiAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxOb3RpZmljYXRpb24ubmV4dChub3RpZmljYXRpb24pO1xyXG4gICAgICBjb25zb2xlLmxvZygnc3BhcmUgZGV2aWNlOiBpbmNvbWluZyBjYWxsJywgY2FsbCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBzcGFyZS5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdTcGFyZSBkZXZpY2UgZXJyb3I6JywgZXJyb3IpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgc3BhcmUucmVnaXN0ZXIoKTtcclxuICAgIHRoaXMuc3BhcmVEZXZpY2UgPSBzcGFyZTtcclxuICAgIGNvbnNvbGUubG9nKCdzcGFyZSBkZXZpY2UgY3JlYXRlZCBhbmQgcmVnaXN0ZXJpbmcnKTtcclxuICB9XHJcblxyXG4gIG9uQ29uY3VycmVudENhbGxBY2NlcHRlZChhY2NlcHRlZENhbGw6IGFueSkge1xyXG4gICAgY29uc3Qgc2lkID0gYWNjZXB0ZWRDYWxsPy5wYXJhbWV0ZXJzPy5bJ0NhbGxTaWQnXTtcclxuICAgIGlmIChzaWQpIHtcclxuICAgICAgLy8gUHJpbWFyeSBwYXRoOiB0aGUgYWNjZXB0ZWQgY2FsbCB3YXMgaGVsZCBieSBhIHBlbmRpbmcgc3BhcmUgZGV2aWNlLlxyXG4gICAgICBjb25zdCBkZXYgPSB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZ2V0KHNpZCk7XHJcbiAgICAgIGlmIChkZXYpIHtcclxuICAgICAgICBkZXYuX293bnNBY2NlcHRlZENhbGwgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLnNldChzaWQsIGRldik7XHJcbiAgICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmRlbGV0ZShzaWQpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIExlZ2FjeSBmYWxsYmFjazogb2xkIHNpbmdsZS1zcGFyZSBwYXRoIChzcGFyZSBzdGlsbCBob2xkcyB0aGUgY2FsbCkuXHJcbiAgICAgIGVsc2UgaWYgKHRoaXMuc3BhcmVEZXZpY2UgJiYgdGhpcy5zcGFyZURldmljZS5fcGVuZGluZ0luY29taW5nQ2FsbCA9PT0gYWNjZXB0ZWRDYWxsKSB7XHJcbiAgICAgICAgdGhpcy5zcGFyZURldmljZS5fb3duc0FjY2VwdGVkQ2FsbCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5leHRyYURldmljZXMuc2V0KHNpZCwgdGhpcy5zcGFyZURldmljZSk7XHJcbiAgICAgICAgdGhpcy5zcGFyZURldmljZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zcGFyZURldmljZVJlYWR5ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEVuc3VyZSBhIGZyZWUgc3BhcmUgaXMgYWx3YXlzIHJlYWR5IGZvciB0aGUgbmV4dCBjb25jdXJyZW50IGNhbGwuXHJcbiAgICB0aGlzLnByZXBhcmVEZXZpY2UyRm9ySW5jb21pbmdDYWxsKCk7XHJcbiAgfVxyXG5cclxuICByZWxlYXNlQ29uY3VycmVudENhbGxEZXZpY2UoY2FsbFNpZDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBkZXYgPSB0aGlzLmV4dHJhRGV2aWNlcy5nZXQoY2FsbFNpZCk7XHJcbiAgICBpZiAoZGV2KSB7XHJcbiAgICAgIHRyeSB7IGRldi5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLmRlbGV0ZShjYWxsU2lkKTtcclxuICAgICAgY29uc29sZS5sb2coJ3JlbGVhc2VkIGNvbmN1cnJlbnQtY2FsbCBkZXZpY2UgZm9yJywgY2FsbFNpZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEFsc28gcmVsZWFzZSBwZW5kaW5nIGRldmljZXMgdGhhdCB3ZXJlIGNhbmNlbGxlZCBiZWZvcmUgYWNjZXB0YW5jZS5cclxuICAgIGNvbnN0IHBlbmRpbmdEZXYgPSB0aGlzLnBlbmRpbmdJbmNvbWluZ0RldmljZXMuZ2V0KGNhbGxTaWQpO1xyXG4gICAgaWYgKHBlbmRpbmdEZXYpIHtcclxuICAgICAgdHJ5IHsgcGVuZGluZ0Rldi5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5kZWxldGUoY2FsbFNpZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBXaGVuIG5vIGFjY2VwdGVkIGNhbGxzIHJlbWFpbiwgdGVhciBkb3duIGFsbCBzcGFyZS9wZW5kaW5nL2V4dHJhIGRldmljZXMgc29cclxuICAvLyB0aGUgcHJpbWFyeSBkZXZpY2UgY2xlYW5seSBoYW5kbGVzIHRoZSBuZXh0IGZyZXNoIGluY29taW5nIGNhbGwuXHJcbiAgdGVhcmRvd25TcGFyZURldmljZXNJZklkbGUoKSB7XHJcbiAgICBpZiAodGhpcy5hY2NlcHRlZENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5leHRyYURldmljZXMuZm9yRWFjaCgoZCkgPT4geyB0cnkgeyBkLmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge30gfSk7XHJcbiAgICB0aGlzLmV4dHJhRGV2aWNlcy5jbGVhcigpO1xyXG4gICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmZvckVhY2goKGQpID0+IHsgdHJ5IHsgZC5kZXN0cm95KCk7IH0gY2F0Y2ggKF8pIHt9IH0pO1xyXG4gICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmNsZWFyKCk7XHJcbiAgICBpZiAodGhpcy5zcGFyZURldmljZSkge1xyXG4gICAgICB0cnkgeyB0aGlzLnNwYXJlRGV2aWNlLmRlc3Ryb3koKTsgfSBjYXRjaCAoXykge31cclxuICAgICAgdGhpcy5zcGFyZURldmljZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuc3BhcmVEZXZpY2VSZWFkeSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5wcmltYXJ5SGFzQ2FsbCA9IGZhbHNlO1xyXG4gICAgY29uc29sZS5sb2coJ3NwYXJlL2V4dHJhIGRldmljZXMgdG9ybiBkb3duIChpZGxlKScpO1xyXG4gIH1cclxuXHJcbiAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgYWxpYXMga2VwdCBmb3IgZXhpc3RpbmcgY2FsbCBzaXRlcy5cclxuICBkZXN0cm95RGV2aWNlMigpIHtcclxuICAgIHRoaXMudGVhcmRvd25TcGFyZURldmljZXNJZklkbGUoKTtcclxuICB9XHJcblxyXG4gIC8vIFVzZXItY29udHJvbGxlZCBzd2l0Y2ggKGluIHRoZSBjYWxsLXByb2dyZXNzIFVJKS4gV2hlbiBPTiwgYSBuZXcgaW5jb21pbmdcclxuICAvLyBjYWxsJ3MgYnVpbHQtaW4gVHdpbGlvIHJpbmd0b25lIGlzIHNpbGVuY2VkIHNvIGl0IGRvZXMgbm90IGRpc3R1cmIgdGhlXHJcbiAgLy8gb25nb2luZyBjYWxsLiBTb3VyY2Ugb2YgdHJ1dGggc28gbmV3bHkgY3JlYXRlZCAoc3BhcmUpIGRldmljZXMgaW5oZXJpdCBpdC5cclxuICBpc0luY29taW5nTXV0ZWQgPSBmYWxzZTtcclxuXHJcbiAgLy8gQXBwbHkgdGhlIGN1cnJlbnQgbXV0ZSBwcmVmZXJlbmNlIHRvIGV2ZXJ5IGxpdmUgRGV2aWNlIChwcmltYXJ5ICsgc3BhcmUgK1xyXG4gIC8vIGFueSBjb25jdXJyZW50LWNhbGwgZGV2aWNlcykgdmlhIFR3aWxpbydzIG93biBkZXZpY2UuYXVkaW8uaW5jb21pbmcoKS5cclxuICBhcHBseUluY29taW5nTXV0ZSgpIHtcclxuICAgIGNvbnN0IGVuYWJsZWQgPSAhdGhpcy5pc0luY29taW5nTXV0ZWQ7IC8vIHJpbmd0b25lIGVuYWJsZWQgPSBOT1QgbXV0ZWRcclxuICAgIGNvbnN0IGFwcGx5ID0gKGRldjogYW55KSA9PiB7XHJcbiAgICAgIHRyeSB7IGRldj8uYXVkaW8/LmluY29taW5nPy4oZW5hYmxlZCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICB9O1xyXG4gICAgYXBwbHkodGhpcy5kZXZpY2UpO1xyXG4gICAgYXBwbHkodGhpcy5zcGFyZURldmljZSk7XHJcbiAgICB0aGlzLmV4dHJhRGV2aWNlcy5mb3JFYWNoKGFwcGx5KTtcclxuICAgIHRoaXMucGVuZGluZ0luY29taW5nRGV2aWNlcy5mb3JFYWNoKGFwcGx5KTtcclxuICB9XHJcblxyXG4gIC8vIFRvZ2dsZS9zZXQgdGhlIG11dGUgc3dpdGNoIGFuZCBpbW1lZGlhdGVseSBhcHBseSBpdC5cclxuICBzZXRJbmNvbWluZ011dGVkKG11dGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmlzSW5jb21pbmdNdXRlZCA9IG11dGVkO1xyXG4gICAgdGhpcy5hcHBseUluY29taW5nTXV0ZSgpO1xyXG4gICAgaWYgKG11dGVkKSB7XHJcbiAgICAgIC8vIGRldmljZS5hdWRpby5pbmNvbWluZyhmYWxzZSkgb25seSBwcmV2ZW50cyBmdXR1cmUgcmluZ3Mg4oCUIGl0IGRvZXMgTk9UIHN0b3BcclxuICAgICAgLy8gYSBjYWxsIHRoYXQgaXMgYWxyZWFkeSByaW5naW5nLiBTdG9wIHRoZSBhY3RpdmUgcmluZyBkaXJlY3RseSB2aWEgc291bmRjYWNoZS5cclxuICAgICAgY29uc3Qgc3RvcFJpbmcgPSAoZGV2OiBhbnkpID0+IHtcclxuICAgICAgICB0cnkgeyBkZXY/Ll9zb3VuZGNhY2hlPy5nZXQ/LignaW5jb21pbmcnKT8uc3RvcD8uKCk7IH0gY2F0Y2ggKF8pIHt9XHJcbiAgICAgIH07XHJcbiAgICAgIHN0b3BSaW5nKHRoaXMuZGV2aWNlKTtcclxuICAgICAgc3RvcFJpbmcodGhpcy5zcGFyZURldmljZSk7XHJcbiAgICAgIHRoaXMuZXh0cmFEZXZpY2VzLmZvckVhY2goKGRldjogYW55KSA9PiBzdG9wUmluZyhkZXYpKTtcclxuICAgICAgdGhpcy5wZW5kaW5nSW5jb21pbmdEZXZpY2VzLmZvckVhY2goKGRldjogYW55KSA9PiBzdG9wUmluZyhkZXYpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEluY29taW5nUGFydGljaXBhbnQocGFydGljaXBhbnRJZDogc3RyaW5nLCBjb25mZXJlbmNlSWQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgaHR0cE9wdGlvbnMgPSB7XHJcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsICdBdXRoLUtleSc6IFwiQmVhcmVyIFwiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpfSksXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8W10+KGAke2Vudmlyb25tZW50LmFwaVVybH0vdXRpbGl0aWVzL2V4dC9hZGQvaW5jb21pbmcvcGFydGljaXBhbnQvJHtwYXJ0aWNpcGFudElkfS8ke2NvbmZlcmVuY2VJZH1gLGh0dHBPcHRpb25zKTtcclxuICB9IFxyXG4gIGNvbm5lY3QoZGF0YT86IGFueSl7XHJcbiAgICBpZiAodGhpcy5kZXZpY2UuX2FjdGl2ZUNhbGwpIHtcclxuICAgICAgY29uc29sZS5sb2coJzI0NC10ZXN0JylcclxuICAgICAgdGhpcy5kZXZpY2UuZGlzY29ubmVjdEFsbCgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZGV2aWNlLmNvbm5lY3Qoe1xyXG4gICAgICBwYXJhbXM6IHtcclxuICAgICAgICBUb2tlbjogdGhpcy5jb25mZXJlbmNlQ2FsbEluZm8/LmNvbmZlcmVuY2VJZCB8fCBkYXRhLmNvbmZlcmVuY2VJZCxcclxuICAgICAgICBDb25mZXJlbmNlTmFtZTogdGhpcy5jb25mZXJlbmNlQ2FsbEluZm8/LmNvbmZlcmVuY2VOYW1lIHx8IGRhdGEuY29uZmVyZW5jZU5hbWVcclxuICAgICAgfSxcclxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHsgZGV2aWNlSWQ6ICdkZWZhdWx0JyB9IH0sXHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iXX0=
|