speechrecorderng 3.3.2 → 3.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +92 -77
  2. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +11 -5
  3. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +50 -37
  4. package/esm2020/lib/speechrecorder/session/prompting.mjs +19 -15
  5. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +14 -11
  6. package/esm2020/lib/speechrecorder/session/recording_list.mjs +2 -2
  7. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -9
  8. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +3 -3
  9. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +3 -3
  10. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +77 -62
  11. package/esm2020/lib/speechrecorderng.component.mjs +2 -1
  12. package/esm2020/lib/speechrecorderng.module.mjs +5 -5
  13. package/esm2020/lib/spr.module.version.mjs +2 -2
  14. package/esm2020/lib/ui/recordingitem_display.mjs +29 -25
  15. package/esm2020/lib/ui/responsive_component.mjs +24 -0
  16. package/fesm2015/speechrecorderng.mjs +282 -204
  17. package/fesm2015/speechrecorderng.mjs.map +1 -1
  18. package/fesm2020/speechrecorderng.mjs +282 -204
  19. package/fesm2020/speechrecorderng.mjs.map +1 -1
  20. package/lib/speechrecorder/session/audiorecorder.d.ts +5 -3
  21. package/lib/speechrecorder/session/basicrecorder.d.ts +6 -3
  22. package/lib/speechrecorder/session/controlpanel.d.ts +9 -3
  23. package/lib/speechrecorder/session/prompting.d.ts +5 -1
  24. package/lib/speechrecorder/session/recorder_combi_pane.d.ts +5 -2
  25. package/lib/speechrecorder/session/sessionmanager.d.ts +5 -3
  26. package/lib/speechrecorderng.component.d.ts +1 -1
  27. package/lib/speechrecorderng.module.d.ts +18 -19
  28. package/lib/spr.module.version.d.ts +1 -1
  29. package/lib/ui/recordingitem_display.d.ts +8 -4
  30. package/lib/ui/responsive_component.d.ts +9 -0
  31. package/package.json +1 -2
@@ -15,6 +15,7 @@ import { AudioContextProvider } from "../../audio/context";
15
15
  import { UUID } from "../../utils/utils";
16
16
  import { WakeLockManager } from "../../utils/wake_lock";
17
17
  import { State as LiveLevelState } from "../../audio/ui/livelevel";
18
+ import { ResponsiveComponent } from "../../ui/responsive_component";
18
19
  export const FORCE_REQUEST_AUDIO_PERMISSIONS = false;
19
20
  export const RECFILE_API_CTX = 'recfile';
20
21
  export const MAX_RECORDING_TIME_MS = 1000 * 60 * 60 * 60; // 1 hour
@@ -101,8 +102,10 @@ export class ChunkManager {
101
102
  return frameLen;
102
103
  }
103
104
  }
104
- let BasicRecorder = class BasicRecorder {
105
- constructor(changeDetectorRef, dialog, sessionService, uploader, config) {
105
+ let BasicRecorder = class BasicRecorder extends ResponsiveComponent {
106
+ constructor(bpo, changeDetectorRef, dialog, sessionService, uploader, config) {
107
+ super(bpo);
108
+ this.bpo = bpo;
106
109
  this.changeDetectorRef = changeDetectorRef;
107
110
  this.dialog = dialog;
108
111
  this.sessionService = sessionService;
@@ -130,6 +133,7 @@ let BasicRecorder = class BasicRecorder {
130
133
  this.peakLevelInDb = MIN_DB_LEVEL;
131
134
  this.audioLoaded = false;
132
135
  this.disableAudioDetails = false;
136
+ this._controlAudioPlayer = null;
133
137
  this.displayAudioClip = null;
134
138
  this.audioFetchSubscription = null;
135
139
  this.liveLevelDisplayState = LiveLevelState.READY;
@@ -274,7 +278,9 @@ let BasicRecorder = class BasicRecorder {
274
278
  }
275
279
  }
276
280
  showRecording() {
277
- this._controlAudioPlayer.stop();
281
+ if (this._controlAudioPlayer) {
282
+ this._controlAudioPlayer.stop();
283
+ }
278
284
  if (this.calcBufferInfosSubscr) {
279
285
  this.calcBufferInfosSubscr.unsubscribe();
280
286
  }
@@ -646,7 +652,7 @@ BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS = 30;
646
652
  // Enable only for developemnt/debug purposes of array audio buffers !!
647
653
  BasicRecorder.FORCE_ARRRAY_AUDIO_BUFFER = false;
648
654
  BasicRecorder = __decorate([
649
- __param(4, Inject(SPEECHRECORDER_CONFIG))
655
+ __param(5, Inject(SPEECHRECORDER_CONFIG))
650
656
  ], BasicRecorder);
651
657
  export { BasicRecorder };
652
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNyZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2Jhc2ljcmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBYyxnQkFBZ0IsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFJL0UsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUMsTUFBTSxFQUFnQixTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRSxPQUFPLEVBQW9CLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFHN0UsT0FBTyxFQUNMLG9DQUFvQyxFQUVwQyx1Q0FBdUMsRUFDeEMsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8s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TUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDOUIsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUYsQ0FBQTtBQXhtQndCLG9EQUFzQyxHQUFRLE9BQU8sR0FBQyxDQUFFLENBQUEsQ0FBQyx5Q0FBeUM7QUFHbEcsd0NBQTBCLEdBQVEsRUFBRyxDQUFBO0FBMkI1RCx1RUFBdUU7QUFDaEQsdUNBQXlCLEdBQUMsS0FBTSxDQUFBO0FBOUNuQyxhQUFhO0lBNEhsQixXQUFBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0dBNUh4QixhQUFhLENBdW5CbEM7U0F2bkJxQixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc3BvcnRBY3Rpb25zfSBmcm9tIFwiLi9jb250cm9scGFuZWxcIjtcclxuaW1wb3J0IHtCcm93c2VyLCBVc2VyQWdlbnQsIFVzZXJBZ2VudEJ1aWxkZXJ9IGZyb20gXCIuLi8uLi91dGlscy91YS1wYXJzZXJcIjtcclxuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtNZXNzYWdlRGlhbG9nfSBmcm9tIFwiLi4vLi4vdWkvbWVzc2FnZV9kaWFsb2dcIjtcclxuaW1wb3J0IHtTZXNzaW9ufSBmcm9tIFwiLi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ2FwdHVyZX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2NhcHR1cmUvY2FwdHVyZVwiO1xyXG5pbXBvcnQge0F1ZGlvRGV2aWNlLCBBdWRpb1N0b3JhZ2VUeXBlLCBBdXRvR2FpbkNvbnRyb2xDb25maWd9IGZyb20gXCIuLi9wcm9qZWN0L3Byb2plY3RcIjtcclxuaW1wb3J0IHtMZXZlbE1lYXN1cmUsIFN0cmVhbUxldmVsTWVhc3VyZX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2RzcC9sZXZlbF9tZWFzdXJlXCI7XHJcbmltcG9ydCB7QXVkaW9QbGF5ZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9wbGF5YmFjay9wbGF5ZXJcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGVyc2lzdG9yXCI7XHJcbmltcG9ydCB7QWN0aW9ufSBmcm9tIFwiLi4vLi4vYWN0aW9uL2FjdGlvblwiO1xyXG5pbXBvcnQge01JTl9EQl9MRVZFTH0gZnJvbSBcIi4uLy4uL3VpL3JlY29yZGluZ2l0ZW1fZGlzcGxheVwiO1xyXG5pbXBvcnQge1VwbG9hZCwgVXBsb2FkSG9sZGVyLCBVcGxvYWRTZXR9IGZyb20gXCIuLi8uLi9uZXQvdXBsb2FkZXJcIjtcclxuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4uL3NwcnVwbG9hZGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNlcXVlbmNlQXVkaW9GbG9hdDMyQ2h1bmtlck91dFN0cmVhbSxcclxuICBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSxcclxuICBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbU11bHRpcGxpZXJcclxufSBmcm9tIFwiLi4vLi4vYXVkaW8vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nRmlsZSwgU3ByUmVjb3JkaW5nRmlsZX0gZnJvbSBcIi4uL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vY29udGV4dFwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge1dha2VMb2NrTWFuYWdlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3dha2VfbG9ja1wiO1xyXG5pbXBvcnQge1N0YXRlIGFzIExpdmVMZXZlbFN0YXRlfSBmcm9tIFwiLi4vLi4vYXVkaW8vdWkvbGl2ZWxldmVsXCJcclxuaW1wb3J0IHtQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fSBmcm9tIFwiLi4vLi4vYXVkaW8vaW5kZGJfYXVkaW9fYnVmZmVyXCI7XHJcblxyXG5leHBvcnQgY29uc3QgRk9SQ0VfUkVRVUVTVF9BVURJT19QRVJNSVNTSU9OUz1mYWxzZTtcclxuZXhwb3J0IGNvbnN0IFJFQ0ZJTEVfQVBJX0NUWCA9ICdyZWNmaWxlJztcclxuZXhwb3J0IGNvbnN0IE1BWF9SRUNPUkRJTkdfVElNRV9NUyA9IDEwMDAgKiA2MCAqIDYwICogNjA7IC8vIDEgaG91clxyXG5cclxuZXhwb3J0IGNvbnN0IExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUyA9IDAuMTsgIC8vIDEwMG1zXHJcblxyXG5leHBvcnQgY29uc3QgTk9TTEVFUF9WSURFT19USVRMRT0nTm8gU2xlZXAnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXJ7XHJcbiAgcG9zdEF1ZGlvU3RyZWFtU3RhcnQoKTp2b2lkO1xyXG4gIHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyLGNodW5rSWR4Om51bWJlcik6dm9pZDtcclxuICBwb3N0QXVkaW9TdHJlYW1FbmQoY2h1bmtDb3VudDpudW1iZXIpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDaHVua01hbmFnZXIgaW1wbGVtZW50cyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXtcclxuXHJcbiAgc2V0IHJlY29yZGluZ0ZpbGUodmFsdWU6IFNwclJlY29yZGluZ0ZpbGUpIHtcclxuICAgIHRoaXMuX3JmID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5uZWxzOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgc2FtcGxlUmF0ZTpudW1iZXI9LTE7XHJcblxyXG4gIHByaXZhdGUgX3JmITpTcHJSZWNvcmRpbmdGaWxlO1xyXG5cclxuICBwcml2YXRlIGNodW5rSWR4Om51bWJlcj0wO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXI6Q2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIC8vIE5vdGhpbmcgdG8gZG9cclxuICB9XHJcblxyXG4gIGZsdXNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIucG9zdEF1ZGlvU3RyZWFtRW5kKHRoaXMuY2h1bmtJZHgpO1xyXG4gIH1cclxuXHJcbiAgbmV4dFN0cmVhbSgpOiB2b2lkIHtcclxuICAgIC8vIHJlc2V0IGNodW5rIGNvdW50ZXJcclxuICAgIHRoaXMuY2h1bmtJZHg9MDtcclxuICAgIHRoaXMuY2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyLnBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlciwgc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5uZWxzPWNoYW5uZWxzO1xyXG4gICAgdGhpcy5zYW1wbGVSYXRlPXNhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICB3cml0ZShidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCBhQ3R4PUF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICBsZXQgYkNocz1idWZmZXJzLmxlbmd0aDtcclxuICAgIGxldCBmcmFtZUxlbj0wO1xyXG4gICAgaWYoYUN0eCAmJiBiQ2hzPjApIHtcclxuICAgICAgZnJhbWVMZW49YnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IGFkID0gYUN0eC5jcmVhdGVCdWZmZXIodGhpcy5jaGFubmVscywgZnJhbWVMZW4sIHRoaXMuc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbHM7IGNoKyspIHtcclxuICAgICAgICAgIGFkLmNvcHlUb0NoYW5uZWwoYnVmZmVyc1tjaF0sY2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNodW5rQXVkaW9CdWZmZXJSZWNlaXZlci5wb3N0Q2h1bmtBdWRpb0J1ZmZlcihhZCx0aGlzLmNodW5rSWR4KTtcclxuICAgICAgICB0aGlzLmNodW5rSWR4Kys7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIC8vIFRPRE8gSGFuZGxlIGVycm9yc1xyXG4gICAgICAgIC8vIGlPUyBTYWZhcmkgc29tZXRpbWVzIHRocm93cyBOb3RTdXBwb3J0ZWRFcnJvclxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgY3JlYXRlIGF1ZGlvIGJ1ZmZlciBmb3IgY2h1bmtlZCB1cGxvYWQuXCIpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOci4gb2YgY2hzOiBcIit0aGlzLmNoYW5uZWxzK1wiLCBmcmFtZSBsZW5ndGg6IFwiK2ZyYW1lTGVuK1wiLCBzYW1wbGUgcmF0ZTogXCIrdGhpcy5zYW1wbGVSYXRlKTtcclxuICAgICAgICBpZihlcnIgaW5zdGFuY2VvZiBET01FeGNlcHRpb24pe1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkRPTSBleGNlcHRpb246IE5hbWU6IFwiK2Vyci5uYW1lK1wiLCBNc2c6IFwiK2Vyci5tZXNzYWdlKTtcclxuICAgICAgICAgIGlmKGVyci5uYW1lPT09J05vdFN1cHBvcnRlZEVycm9yJyl7XHJcbiAgICAgICAgICAgIGlmKGZyYW1lTGVuPT0wKXtcclxuICAgICAgICAgICAgICAvLyBFbXB0eSBidWZmZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IENocm9taXVtXHJcbiAgICAgICAgICAgICAvLyBObyBkYXRhIHRvIHRyYW5zZmVyLCBidXQgdGhpcyBjYXNlIHNob3VsZCBuZXZlciBoYXBwZW5cclxuICAgICAgICAgICAgICByZXR1cm4gZnJhbWVMZW47XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2UgaWYoZXJyLm5hbWU9PT0nUmFuZ2VFcnJvcicpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRE9NIFJhbmdlRXJyb3JcIik7XHJcbiAgICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnlcclxuICAgICAgICAgICAgLy8gVE9ETyBXaGF0IHRvIGRvID8/XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRE9NIEV4Y2VwdGlvbiB1bmtub3duXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ipe1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlJhbmdlRXJyb3I6IE5hbWU6IFwiK2Vyci5uYW1lK1wiLCBNc2c6IFwiK2Vyci5tZXNzYWdlKTtcclxuICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnlcclxuICAgICAgICAgIC8vIFRPRE8gV2hhdCB0byBkbyA/P1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNpY1JlY29yZGVyIHtcclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVRpbWVySWQ6IGFueTtcclxuXHJcbiAgcHJvdGVjdGVkIG1heFJlY1RpbWVySWQ6IG51bWJlcnxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIG1heFJlY1RpbWVyUnVubmluZzogYm9vbGVhbj1mYWxzZTtcclxuXHJcbiAgZ2V0IG1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUzpudW1iZXI9Mjg4MDAwMCo1OyAvLyBEZWZhdWx0IDUgbWludXRlcyBvbmUgY2hhbm5lbCBhdCA0OGtIelxyXG4gIHByb3RlY3RlZCBfbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlczpudW1iZXI9QmFzaWNSZWNvcmRlci5ERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUztcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NIVU5LX1NJWkVfU0VDT05EUzpudW1iZXI9MzA7XHJcblxyXG4gIGdldCBjbGllbnRBdWRpb1N0b3JhZ2VUeXBlKCk6IEF1ZGlvU3RvcmFnZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2xpZW50QXVkaW9TdG9yYWdlVHlwZSh2YWx1ZTogQXVkaW9TdG9yYWdlVHlwZSkge1xyXG5cclxuICAgIGxldCBvbGRWYWx1ZT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlO1xyXG4gICAgdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSA9IHZhbHVlO1xyXG4gICAgaWYodmFsdWUhPT1vbGRWYWx1ZSl7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCgpOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDtcclxuICB9XHJcblxyXG4gIHNldCBwZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KHZhbHVlOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCkge1xyXG4gICAgbGV0IG9sZFZhbHVlPXRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgICB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdmFsdWU7XHJcbiAgICBpZih2YWx1ZSE9PW9sZFZhbHVlKXtcclxuICAgICAgdGhpcy5jb25maWd1cmVTdHJlYW1DYXB0dXJlU3RyZWFtKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gRW5hYmxlIG9ubHkgZm9yIGRldmVsb3BlbW50L2RlYnVnIHB1cnBvc2VzIG9mIGFycmF5IGF1ZGlvIGJ1ZmZlcnMgISFcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZPUkNFX0FSUlJBWV9BVURJT19CVUZGRVI9ZmFsc2U7XHJcblxyXG4gIGdldCB1cGxvYWRDaHVua1NpemVTZWNvbmRzKCk6IG51bWJlcnxudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl91cGxvYWRDaHVua1NpemVTZWNvbmRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHVwbG9hZENodW5rU2l6ZVNlY29uZHModmFsdWU6IG51bWJlcnxudWxsKSB7XHJcbiAgICBsZXQgb2xkVmFsdWU9dGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzO1xyXG4gICAgdGhpcy5fdXBsb2FkQ2h1bmtTaXplU2Vjb25kcyA9IHZhbHVlO1xyXG4gICAgaWYodmFsdWUhPT1vbGRWYWx1ZSl7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVzZXJBZ2VudDpVc2VyQWdlbnQ7XHJcbiAgc3RhdHVzTXNnOiBzdHJpbmc9Jyc7XHJcbiAgc3RhdHVzQWxlcnRUeXBlITogc3RyaW5nO1xyXG4gIHN0YXR1c1dhaXRpbmc6IGJvb2xlYW49ZmFsc2U7XHJcbiAgcmVhZG9ubHk9ZmFsc2U7XHJcbiAgcHJvdGVjdGVkIHJmVXVpZDpzdHJpbmd8bnVsbD1udWxsO1xyXG4gIHByb2Nlc3NpbmdSZWNvcmRpbmc9ZmFsc2U7XHJcbiAgYWM6IEF1ZGlvQ2FwdHVyZXxudWxsPW51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBfd2FrZUxvY2s6Ym9vbGVhbj1mYWxzZTtcclxuICAvLyBQcm9wZXJ0eSBhdWRpb0RldmljZXMgZnJvbSBwcm9qZWN0IGNvbmZpZzogbGlzdCBvZiBuYW1lcyBvZiBhbGxvd2VkIGF1ZGlvIGRldmljZXMuXHJcbiAgcHJvdGVjdGVkIF9hdWRpb0RldmljZXM6IEFycmF5PEF1ZGlvRGV2aWNlPiB8IG51bGx8IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgX3NlbGVjdGVkRGV2aWNlSWQ6c3RyaW5nfHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgcHJvdGVjdGVkIHNlbENhcHR1cmVEZXZpY2VJZDogQ29uc3RyYWluRE9NU3RyaW5nIHwgbnVsbDtcclxuICBwcm90ZWN0ZWQgX2NoYW5uZWxDb3VudCA9IDI7XHJcbiAgcHJvdGVjdGVkIF9hdXRvR2FpbkNvbnRyb2xDb25maWdzOiBBcnJheTxBdXRvR2FpbkNvbnRyb2xDb25maWc+IHwgbnVsbHwgdW5kZWZpbmVkO1xyXG5cclxuICBfc2Vzc2lvbjogU2Vzc2lvbnxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIF9yZWNvcmRpbmdGaWxlOlJlY29yZGluZ0ZpbGV8bnVsbD1udWxsO1xyXG5cclxuICB0cmFuc3BvcnRBY3Rpb25zOiBUcmFuc3BvcnRBY3Rpb25zO1xyXG4gIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG5cclxuICBwcm90ZWN0ZWQgc3RhcnRlZERhdGU6RGF0ZXxudWxsPW51bGw7XHJcblxyXG4gIHVwbG9hZFByb2dyZXNzOiBudW1iZXIgPSAxMDA7XHJcbiAgdXBsb2FkU3RhdHVzOiBzdHJpbmcgPSAnb2snXHJcbiAgcHJvdGVjdGVkIHVwbG9hZFNldDpVcGxvYWRTZXR8bnVsbD1udWxsO1xyXG5cclxuICBhdWRpb1NpZ25hbENvbGxhcHNlZCA9IHRydWU7XHJcblxyXG4gIHByb3RlY3RlZCBzdHJlYW1MZXZlbE1lYXN1cmU6IFN0cmVhbUxldmVsTWVhc3VyZTtcclxuICBwcm90ZWN0ZWQgbGV2ZWxNZWFzdXJlOiBMZXZlbE1lYXN1cmU7XHJcbiAgcGVha0xldmVsSW5EYjpudW1iZXI9TUlOX0RCX0xFVkVMO1xyXG4gIGF1ZGlvTG9hZGVkOmJvb2xlYW49ZmFsc2U7XHJcbiAgZGlzYWJsZUF1ZGlvRGV0YWlsczpib29sZWFuPWZhbHNlO1xyXG4gIHByb3RlY3RlZCBfY29udHJvbEF1ZGlvUGxheWVyITogQXVkaW9QbGF5ZXI7XHJcbiAgcHVibGljIGRpc3BsYXlBdWRpb0NsaXA6IEF1ZGlvQ2xpcCB8IG51bGw9bnVsbDtcclxuICBwcm90ZWN0ZWQgYXVkaW9GZXRjaFN1YnNjcmlwdGlvbjpTdWJzY3JpcHRpb258bnVsbD1udWxsO1xyXG5cclxuICBsaXZlTGV2ZWxEaXNwbGF5U3RhdGU6TGl2ZUxldmVsU3RhdGU9TGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAga2VlcExpdmVMZXZlbDpib29sZWFuPWZhbHNlO1xyXG4gIHByaXZhdGUgY2FsY0J1ZmZlckluZm9zU3Vic2NyOlN1YnNjcmlwdGlvbnxudWxsPW51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBkZXN0cm95ZWQ9ZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBuYXZpZ2F0aW9uRGlzYWJsZWQ9dHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfdXBsb2FkQ2h1bmtTaXplU2Vjb25kczpudW1iZXJ8bnVsbD1udWxsO1xyXG4gIC8vPUJhc2ljUmVjb3JkZXIuREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFM7XHJcblxyXG4gIC8vIERlZmF1bHQ6IENvbnRpbnVvdXMgSFRNTDUgQXVkaW8gQVBJIEF1ZGlvQnVmZmVyLCBubyBjaHVua2VkIHVwbG9hZFxyXG4gIHByb3RlY3RlZCBfY2xpZW50QXVkaW9TdG9yYWdlVHlwZTpBdWRpb1N0b3JhZ2VUeXBlPUF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRTtcclxuXHJcbiAgcHJvdGVjdGVkIF9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0OlBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR8bnVsbD1udWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgX3NjcmVlbkxvY2tlZD1mYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSB3YWtlTG9ja01hbmFnZXI/Oldha2VMb2NrTWFuYWdlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHNlc3Npb25TZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHVwbG9hZGVyOiBTcGVlY2hSZWNvcmRlclVwbG9hZGVyLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHB1YmxpYyBjb25maWc/OiBTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG4gICAgdGhpcy51c2VyQWdlbnQ9VXNlckFnZW50QnVpbGRlci51c2VyQWdlbnQoKTtcclxuICAgIGNvbnN0IGRldFBmbT10aGlzLnVzZXJBZ2VudC5kZXRlY3RlZFBsYXRmb3JtO1xyXG4gICAgaWYoZGV0UGZtKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJEZXRlY3RlZCBwbGF0Zm9ybTogXCIgK2RldFBmbSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXRCcj10aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI7XHJcbiAgICBjb25zdCBkZXRCclZlcnM9dGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRCcm93c2VyVmVyc2lvbjtcclxuICAgIGlmKGRldEJyKSB7XHJcbiAgICAgIGxldCBkZXRCclZlcnNTdHI9KGRldEJyVmVycyk/JyAnK2RldEJyVmVyczonJztcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkRldGVjdGVkIGJyb3dzZXI6IFwiICtkZXRCcitkZXRCclZlcnNTdHIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zID0gbmV3IFRyYW5zcG9ydEFjdGlvbnMoKTtcclxuICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uID0gbmV3IEFjdGlvbignUGxheScpO1xyXG4gICAgdGhpcy5sZXZlbE1lYXN1cmUgPSBuZXcgTGV2ZWxNZWFzdXJlKCk7XHJcbiAgICB0aGlzLnN0cmVhbUxldmVsTWVhc3VyZSA9IG5ldyBTdHJlYW1MZXZlbE1lYXN1cmUoKTtcclxuICAgIHRoaXMuc2VsQ2FwdHVyZURldmljZUlkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCB3YWtlTG9jaygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl93YWtlTG9jaztcclxuICB9XHJcblxyXG4gIHNldCB3YWtlTG9jayh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fd2FrZUxvY2sgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGVuYWJsZVdha2VMb2NrQ29uZCgpe1xyXG4gICAgaWYodGhpcy53YWtlTG9jaz09PXRydWUpIHtcclxuICAgICAgaWYoIXRoaXMud2FrZUxvY2tNYW5hZ2VyKXtcclxuICAgICAgICB0aGlzLndha2VMb2NrTWFuYWdlcj1uZXcgV2FrZUxvY2tNYW5hZ2VyKCk7XHJcbiAgICAgICAgdGhpcy53YWtlTG9ja01hbmFnZXIuYmVoYXZpb3JTdWJqZWN0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6ICh2KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2NyZWVuTG9ja2VkID0gdjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FrZSBsb2NrIGVycm9yIVwiKVxyXG4gICAgICAgICAgICAgIHRoaXMuX3NjcmVlbkxvY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndha2VMb2NrTWFuYWdlci5lbmFibGVXYWtlTG9jaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzYWJsZVdha2VMb2NrQ29uZCgpe1xyXG4gICAgdGhpcy53YWtlTG9ja01hbmFnZXI/LmRpc2FibGVXYWtlTG9jaygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcmVlbkxvY2tlZCgpe1xyXG4gICAgcmV0dXJuIHRoaXMuX3NjcmVlbkxvY2tlZDtcclxuICB9XHJcblxyXG4gIHNldCBhdWRpb0RldmljZXMoYXVkaW9EZXZpY2VzOiBBcnJheTxBdWRpb0RldmljZT4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9hdWRpb0RldmljZXMgPSBhdWRpb0RldmljZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgYXV0b0dhaW5Db250cm9sQ29uZmlncyhhdXRvR2FpbkNvbnRyb2xDb25maWdzOiBBcnJheTxBdXRvR2FpbkNvbnRyb2xDb25maWc+fG51bGx8dW5kZWZpbmVkKXtcclxuICAgIHRoaXMuX2F1dG9HYWluQ29udHJvbENvbmZpZ3M9YXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICB9XHJcblxyXG4gIHNldCBjaGFubmVsQ291bnQoY2hhbm5lbENvdW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoYW5uZWxDb3VudCA9IGNoYW5uZWxDb3VudDtcclxuICB9XHJcblxyXG4gIHNldCBzZXNzaW9uKHNlc3Npb246IFNlc3Npb258bnVsbCkge1xyXG4gICAgdGhpcy5fc2Vzc2lvbiA9IHNlc3Npb247XHJcbiAgfVxyXG5cclxuICBnZXQgc2Vzc2lvbigpOlNlc3Npb258bnVsbHtcclxuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlU3RhcnRVc2VyR2VzdHVyZSgpIHtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVhZHkuJztcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKSB7XHJcbiAgICBsZXQgb3V0U3RyZWFtO1xyXG5cclxuICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkUhPT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlIHx8IHRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcykge1xyXG4gICAgICBpZighdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzKXtcclxuICAgICAgICB0aGlzLnVwbG9hZENodW5rU2l6ZVNlY29uZHM9QmFzaWNSZWNvcmRlci5ERUZBVUxUX0NIVU5LX1NJWkVfU0VDT05EUztcclxuICAgICAgfVxyXG4gICAgICAvLyBNdWx0aXBseSB0aGUgY2FwdHVyZSBzdHJlYW0gdG8uLi5cclxuICAgICAgbGV0IHNhc20gPSBuZXcgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1NdWx0aXBsaWVyKCk7XHJcblxyXG4gICAgICAvLyAuLi51cGxvYWQgYXVkaW8gZGF0YSBpbiBjaHVua3MuLi5cclxuICAgICAgbGV0IGNoTW5nID0gbmV3IENodW5rTWFuYWdlcih0aGlzKTsgIC8vIFRoZSBjaHVuayBtYW5hZ2VyIGNvbm5lY3RzIHRoZSBjaHVua2VkIGF1ZGlvIHN0cmVhbSB0byB0aGlzIGNsYXNzIHRvIHVwbG9hZCB0aGUgY2h1bmtzXHJcbiAgICAgIGxldCBjaE9zVXBsb2FkID0gbmV3IFNlcXVlbmNlQXVkaW9GbG9hdDMyQ2h1bmtlck91dFN0cmVhbShjaE1uZywgdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzKTsgLy8gVGhlIGF1ZGlvIHN0cmVhbSBjaHVua2VyIGl0c2VsZlxyXG4gICAgICBzYXNtLnNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcy5wdXNoKGNoT3NVcGxvYWQpO1xyXG5cclxuICAgICAgLy8gLi4uYW5kIHRvIG1lYXN1cmUgdGhlIGxldmVsXHJcbiAgICAgIGxldCBjaE9zTHZsTWVhcyA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0odGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUsIExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUylcclxuICAgICAgc2FzbS5zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMucHVzaChjaE9zTHZsTWVhcyk7XHJcblxyXG4gICAgICBvdXRTdHJlYW0gPSBzYXNtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0U3RyZWFtID0gbmV3IFNlcXVlbmNlQXVkaW9GbG9hdDMyQ2h1bmtlck91dFN0cmVhbSh0aGlzLnN0cmVhbUxldmVsTWVhc3VyZSwgTEVWRUxfQkFSX0lOVEVSVkFMTF9TRUNPTkRTKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzPXRoaXMuX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXM7XHJcbiAgICAgIHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlO1xyXG4gICAgICB0aGlzLmFjLmF1ZGlvT3V0U3RyZWFtID0gb3V0U3RyZWFtO1xyXG4gICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQ9PT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlICYmIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQhPT1udWxsKSB7XHJcbiAgICAgICAgdGhpcy5hYy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd1JlY29yZGluZygpIHtcclxuICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5zdG9wKCk7XHJcbiAgICBpZih0aGlzLmNhbGNCdWZmZXJJbmZvc1N1YnNjcil7XHJcbiAgICAgIHRoaXMuY2FsY0J1ZmZlckluZm9zU3Vic2NyLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5QXVkaW9DbGlwKSB7XHJcbiAgICAgIGxldCBkYXA9dGhpcy5kaXNwbGF5QXVkaW9DbGlwO1xyXG4gICAgICBsZXQgYWRoPWRhcC5hdWRpb0RhdGFIb2xkZXI7XHJcbiAgICAgIGlmKGFkaCl7XHJcbiAgICAgICAgaWYoIXRoaXMua2VlcExpdmVMZXZlbCkge1xyXG4gICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5MT0FESU5HO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhZGguYWRkT25SZWFkeUxpc3RlbmVyKCgpPT57XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBkYXRhIGhvbGRlciByZWFkeS4gRW5hYmxlIHBsYXliYWNrLiBBdWRpbyBsb2FkZWQgdHJ1ZS5cIilcclxuICAgICAgICAgIGlmKCF0aGlzLmtlZXBMaXZlTGV2ZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRU5ERVJJTkc7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY0J1ZmZlckluZm9zU3Vic2NyID0gdGhpcy5sZXZlbE1lYXN1cmUuY2FsY0J1ZmZlckxldmVsSW5mb3MoYWRoLCBMRVZFTF9CQVJfSU5URVJWQUxMX1NFQ09ORFMpLnN1YnNjcmliZSgobGV2ZWxJbmZvcykgPT4ge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkxldmVsIGluZm9zOiBsZXZlbEluZm9zIG51bWJlciBzaXplOiBcIitsZXZlbEluZm9zLm51bWJlclNpemUoKSk7XHJcbiAgICAgICAgICAgICAgZGFwLmxldmVsSW5mb3MgPSBsZXZlbEluZm9zO1xyXG4gICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYXVkaW9Mb2FkZWQ9dHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGRhdGEgaG9sZGVyIGFkZGVkIG9uUmVhZHkuXCIpXHJcbiAgICAgIH1cclxuICAgICAgLy90aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hdWRpb0xvYWRlZD1mYWxzZTtcclxuICAgICAgLy8gQ29sbGFwc2UgYXVkaW8gc2lnbmFsIGRpc3BsYXkgaWYgb3BlblxyXG4gICAgICBpZiAoIXRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQpIHtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnU3RhcnRpbmcgc2Vzc2lvbi4uLic7XHJcbiAgICB0aGlzLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLnNlYWxlZCkge1xyXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnU2Vzc2lvbiBzZWFsZWQhJztcclxuICAgICAgICAvL2xldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlc3Npb25TZWFsZWREaWFsb2csIHt9KTtcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgdGl0bGU6ICdFcnJvcicsXHJcbiAgICAgICAgICAgIG1zZzogXCJUaGlzIHNlc3Npb24gaXMgc2VhbGVkLiBSZWNvcmRpbmdzIGNhbm5vdCBiZSBhZGRlZCBhbnltb3JlLlwiLFxyXG4gICAgICAgICAgICBhZHZpc2U6ICdQbGVhc2UgYXNrIHlvdXIgZXhwZXJpbWVudGVyIHdoYXQgdG8gZG8gKGUuZyBzdGFydCBhIG5ldyBzZXNzaW9uKS4nLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBib2R5OiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5zdGF0dXMgPT09IFwiQ1JFQVRFRFwiKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiTE9BREVEXCI7XHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLmxvYWRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgYm9keS5sb2FkZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnJlc3RhcnRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgYm9keS5yZXN0YXJ0ZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5yZXN0YXJ0ZWREYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBicm93c2VyIGNvbXBhdGliaWxpdHlcclxuICAgIGlmKHRoaXMudXNlckFnZW50LmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuU2FmYXJpICYmIHRoaXMuX2NoYW5uZWxDb3VudD4xKXtcclxuICAgICAgbGV0IGVNc2c9XCJFcnJvcjogU2FmYXJpIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBzdGVyZW8gcmVjb3JkaW5ncy5cIjtcclxuICAgICAgY29uc29sZS5lcnJvcihlTXNnKTtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnQnJvd3NlciBub3Qgc3VwcG9ydGVkJyxcclxuICAgICAgICAgIG1zZzogZU1zZyxcclxuICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIsIGUuZy4gTW96aWxsYSBGaXJlZm94LlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJTZXNzaW9uIElEOiBcIit0aGlzLl9zZXNzaW9uLnNlc3Npb24rIFwiIHN0YXR1czogXCIrdGhpcy5fc2Vzc2lvbi5zdGF0dXMpXHJcbiAgICB0aGlzLl9zZWxlY3RlZERldmljZUlkPXVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgdGhpcy5hYyAmJiAoRk9SQ0VfUkVRVUVTVF9BVURJT19QRVJNSVNTSU9OUyB8fCAodGhpcy5fYXVkaW9EZXZpY2VzICYmIHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGggPiAwKSkpIHtcclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVxdWVzdGluZyBhdWRpbyBwZXJtaXNzaW9ucy4uLic7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG5cclxuICAgICAgdGhpcy5hYy5kZXZpY2VJbmZvcygobWRpcykgPT4ge1xyXG4gICAgICAgIGxldCBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBhdWRpb1BsYXlEZXZpY2VBdmFpbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChtZGlzKSB7XHJcbiAgICAgICAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWMucHJpbnREZXZpY2VzKG1kaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1kaXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtZGlpID0gMDsgbWRpaSA8IG1kaXMubGVuZ3RoOyBtZGlpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgbWRpID0gbWRpc1ttZGlpXTtcclxuICAgICAgICAgICAgICBsZXQga2luZD1tZGkua2luZDtcclxuICAgICAgICAgICAgICBpZihraW5kID09PSBcImF1ZGlvaW5wdXRcIil7XHJcbiAgICAgICAgICAgICAgICBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbD10cnVlO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKGtpbmQ9PT0gXCJhdWRpb291dHB1dFwiKXtcclxuICAgICAgICAgICAgICAgIGF1ZGlvUGxheURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24gJiYgdGhpcy5fc2Vzc2lvbi50eXBlICE9PSAnVEVTVF9ERUZfQScgJiYgdGhpcy5fYXVkaW9EZXZpY2VzICYmIHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBmZGk6IE1lZGlhRGV2aWNlSW5mbyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBhZEkgPSAwOyBhZEkgPCB0aGlzLl9hdWRpb0RldmljZXMubGVuZ3RoOyBhZEkrKykge1xyXG4gICAgICAgICAgICAgIGxldCBhZCA9IHRoaXMuX2F1ZGlvRGV2aWNlc1thZEldO1xyXG4gICAgICAgICAgICAgIGlmIChhZC5wbGF5YmFjaykge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJvamVjdCBhdWRpbyBkZXZpY2UgY29uZmlnIGZvciBwbGF5YmFjayBkZXZpY2VcclxuICAgICAgICAgICAgICAgIC8vIG5vdCB1c2VkIGZvciBub3dcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtZGlpID0gMDsgbWRpaSA8IG1kaXMubGVuZ3RoOyBtZGlpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBtZGkgPSBtZGlzW21kaWldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGtpbmQ9bWRpLmtpbmQ7XHJcbiAgICAgICAgICAgICAgICBpZihraW5kID09PSBcImF1ZGlvaW5wdXRcIil7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvQ2FwdHVyZURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihraW5kPT09IFwiYXVkaW9vdXRwdXRcIil7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvUGxheURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWQucmVnZXgpIHtcclxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1hdGNoPzogXFwnXCIrbWRpLmxhYmVsK1wiXFwnIFxcJ1wiK2FkLm5hbWUrXCJcXCdcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChtZGkubGFiZWwubWF0Y2goYWQubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmZGkgPSBtZGk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1hdGNoIVwiKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG1kaS5sYWJlbC50cmltKCkgPT09IGFkLm5hbWUudHJpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmRpID0gbWRpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmZGkpIHtcclxuICAgICAgICAgICAgICAvLyBtYXRjaGluZyBkZXZpY2UgZm91bmRcclxuXHJcbiAgICAgICAgICAgICAgLy8gTm90IGFibGUgdG8gb3BlbiBkZXZpY2UgaGVyZSBzaW5jZSBDaHJvbWUgNzFcclxuICAgICAgICAgICAgICAvLyBDaHJvbWUgNzEgcmVxdWlyZXMgYSB1c2VyIGdlc3R1cmUgYmVmb3JlIHRoZSBBdWRpb0NvbnRleHQgY2FuIGJlIHJlc3VtZWRcclxuICAgICAgICAgICAgICAvLyBzZXNzaW9ubWFuYWdlci50czo3MTIgT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIDEgY2hhbm5lbHNcclxuICAgICAgICAgICAgICAvLyBjYXB0dXJlLnRzOjEyOCBUaGUgQXVkaW9Db250ZXh0IHdhcyBub3QgYWxsb3dlZCB0byBzdGFydC4gSXQgbXVzdCBiZSByZXN1bWVkIChvciBjcmVhdGVkKSBhZnRlciBhIHVzZXIgZ2VzdHVyZSBvbiB0aGUgcGFnZS4gaHR0cHM6Ly9nb28uZ2wvN0s3V0x1XHJcbiAgICAgICAgICAgICAgLy8gcHVzaC4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMuQXVkaW9DYXB0dXJlLm9wZW4gQCBjYXB0dXJlLnRzOjEyOFxyXG5cclxuICAgICAgICAgICAgICAvL3RoaXMuYWMub3Blbih0aGlzLl9jaGFubmVsQ291bnQsIGZkaS5kZXZpY2VJZCk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiU2V0IHNlbGVjdGVkIGF1ZGlvIGRldmljZTogXFwnXCIgKyBmZGkubGFiZWwgKyBcIlxcJyBJZDogXFwnXCIgKyBmZGkuZGV2aWNlSWQgKyBcIlxcJ1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERldmljZUlkID0gZmRpLmRldmljZUlkO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIGRldmljZSBub3QgZm91bmRcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogUmVxdWlyZWQgYXVkaW8gZGV2aWNlIG5vdCBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVpcmVkIGF1ZGlvIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgIG1zZzogXCJSZXF1aXJlZCBhdWRpbyBkZXZpY2Ugbm90IGZvdW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgY29ubmVjdCBhIHN1aXRhYmxlIGF1ZGlvIGRldmljZSBmb3IgdGhpcyBwcm9qZWN0IGFuZCByZXRyeSAocHJlc3MgdGhlIGJyb3dzZXIgcmVsb2FkIGJ1dHRvbikuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYoIWF1ZGlvQ2FwdHVyZURldmljZUF2YWlsICYmICFhdWRpb1BsYXlEZXZpY2VBdmFpbCl7XHJcbiAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6IE5vIGF1ZGlvIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICd3YXJuJztcclxuICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgIG1zZzogXCJObyBhdWRpbyBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmICFhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdXQVJOSU5HOiBObyBhdWRpbyBjYXB0dXJlIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm5pbmcnO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIGNhcHR1cmUgZGV2aWNlJyxcclxuICAgICAgICAgICAgICAgICAgICBtc2c6IFwiTm8gYXVkaW8gY2FwdHVyZSBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgICBhZHZpY2U6IFwiUGxlYXNlIGNvbm5lY3QgYW4gYXVkaW8gY2FwdHVyZSBkZXZpY2UgYW5kIHJldHJ5IChwcmVzcyB0aGUgYnJvd3NlciByZWxvYWQgYnV0dG9uKSBvciB0cnkgdG8gY29udGludWUgYW55d2F5LlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIFNhZmFyaSBkb2VzIG5vdCBsaXN0IHBsYXliYWNrIGRldmljZXNcclxuICAgICAgICAgICAgICBpZiAoIWF1ZGlvUGxheURldmljZUF2YWlsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IGVudW1lcmF0ZSBhdWRpb291dHB1dCBkZXZpY2VzXHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGlzIHdhcm5pbmcsIGJlY2F1c2UgaXQgd291bGQgYWx3YXlzIGFwcGVhciBvbiBGaXJlZm94XHJcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTg1MTIgaXMgZml4ZWQgdGhlIHdhcm5pbmcgY2FuIGJlIGVuYWJsZWQgZm9yIEZpcmVmb3ggYXMgd2VsbFxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFscmVhZHkgaW1wbGVtbmV0ZWQgYnV0IGtlcHQgYmVoaW5kIGEgcHJlZmVyZW5jZSBzZXR0aW5nIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExNTI0MDFcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IGRldmljZXMgYXJlIGxpc3RlZCBpZiBhYm91dDpjb25maWcgbWVkaWEuc2V0c2lua2lkLmVuYWJsZWQ9dHJ1ZVxyXG4gICAgICAgICAgICAgICAgLy8gYnV0IGRlZmF1bHQgc2V0dGluZyBpcyBmYWxzZVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTYW1lIHByb2JsZW0gd2l0aCBTYWZhcmlcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLlNhZmFyaSB8fCB0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLkZpcmVmb3gpKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIG5vIGRldmljZSBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdXQVJOSU5HOiBObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UgYXZhaWxhYmxlISc7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm4nO1xyXG4gICAgICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbXNnOiBcIk5vIGF1ZGlvIHBsYXliYWNrIGRldmljZSBmb3VuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIHBsYXliYWNrIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBOb3QgYWJsZSB0byBvcGVuIGRldmljZSBoZXJlIHNpbmNlIENocm9tZSA3MVxyXG4gICAgICAgICAgICAvLyBDaHJvbWUgNzEgcmVxdWlyZXMgYSB1c2VyIGdlc3R1cmUgYmVmb3JlIHRoZSBBdWRpb0NvbnRleHQgY2FuIGJlIHJlc3VtZWRcclxuICAgICAgICAgICAgLy8gc2Vzc2lvbm1hbmFnZXIudHM6NzEyIE9wZW4gc2Vzc2lvbiB3aXRoIGRlZmF1bHQgYXVkaW8gZGV2aWNlIGZvciAxIGNoYW5uZWxzXHJcbiAgICAgICAgICAgIC8vIGNhcHR1cmUudHM6MTI4IFRoZSBBdWRpb0NvbnRleHQgd2FzIG5vdCBhbGxvd2VkIHRvIHN0YXJ0LiBJdCBtdXN0IGJlIHJlc3VtZWQgKG9yIGNyZWF0ZWQpIGFmdGVyIGEgdXNlciBnZXN0dXJlIG9uIHRoZSBwYWdlLiBodHRwczovL2dvby5nbC83SzdXTHVcclxuICAgICAgICAgICAgLy8gcHVzaC4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMuQXVkaW9DYXB0dXJlLm9wZW4gQCBjYXB0dXJlLnRzOjEyOFxyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIFwiK3RoaXMuX2NoYW5uZWxDb3VudCtcIiBjaGFubmVsc1wiKTtcclxuICAgICAgICAgICAgLy90aGlzLmFjLm9wZW4odGhpcy5fY2hhbm5lbENvdW50KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFydCBnZXN0dXJlIGFueXdheVxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRJdGVtKCkge1xyXG4gICAgdGhpcy5yZlV1aWQgPSBVVUlELmdlbmVyYXRlKCk7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMucmVjVVVJRCA9IHRoaXMucmZVdWlkO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGFydGVkRGF0ZT1udWxsO1xyXG4gICAgdGhpcy5lbmFibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgIC8vdGhpcy5yZlV1aWQ9VVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgdGhpcy51cGxvYWRTZXQ9bnVsbDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHN0YXJ0Q2FwdHVyZSgpIHtcclxuICAgIGlmICh0aGlzLmFjKSB7XHJcbiAgICAgIGlmICghdGhpcy5hYy5vcGVuZWQpIHtcclxuICAgICAgICBpZiAodGhpcy5fc2VsZWN0ZWREZXZpY2VJZCkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJPcGVuIHNlc3Npb24gd2l0aCBhdWRpbyBkZXZpY2UgSWQ6IFxcJ1wiICsgdGhpcy5fc2VsZWN0ZWREZXZpY2VJZCArIFwiXFwnIGZvciBcIiArIHRoaXMuX2NoYW5uZWxDb3VudCArIFwiIGNoYW5uZWxzXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIk9wZW4gc2Vzc2lvbiB3aXRoIGRlZmF1bHQgYXVkaW8gZGV2aWNlIGZvciBcIiArIHRoaXMuX2NoYW5uZWxDb3VudCArIFwiIGNoYW5uZWxzXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFjLm9wZW4odGhpcy5fY2hhbm5lbENvdW50LCB0aGlzLl9zZWxlY3RlZERldmljZUlkLCB0aGlzLl9hdXRvR2FpbkNvbnRyb2xDb25maWdzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFjLnN0YXJ0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5lZCgpIHtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5zdGFydCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhcnRlZCgpIHtcclxuXHJcbiAgICBpZighdGhpcy5zdGFydGVkRGF0ZSkge1xyXG4gICAgICB0aGlzLnN0YXJ0ZWREYXRlPW5ldyBEYXRlKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcG9zdFJlY29yZGluZyh3YXZGaWxlOiBVaW50OEFycmF5LCByZWNVcmw6IHN0cmluZyxyZjpSZWNvcmRpbmdGaWxlfG51bGwsdXBsb2FkSG9sZGVyPzpVcGxvYWRIb2xkZXIpIHtcclxuICAgIGxldCB3YXZCbG9iID0gbmV3IEJsb2IoW3dhdkZpbGVdLCB7dHlwZTogJ2F1ZGlvL3dhdid9KTtcclxuICAgIGxldCB1bCA9IG5ldyBVcGxvYWQod2F2QmxvYiwgcmVjVXJsLHJmKTtcclxuICAgIGlmKHVwbG9hZEhvbGRlcil7XHJcbiAgICAgIHVwbG9hZEhvbGRlci51cGxvYWQ9dWw7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICB9XHJcblxyXG4gIHBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk6IHZvaWQge1xyXG4gICAgaWYodGhpcy5yZlV1aWQpIHtcclxuICAgICAgdGhpcy51cGxvYWRTZXQ9bmV3IFVwbG9hZFNldCgpO1xyXG4gICAgICBsZXQgYXBpRW5kUG9pbnQgPSAnJztcclxuICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaUVuZFBvaW50KSB7XHJcbiAgICAgICAgYXBpRW5kUG9pbnQgPSB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICAgICAgYXBpRW5kUG9pbnQgPSBhcGlFbmRQb2ludCArICcvJ1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBzZXNzaW9uc1VybCA9IGFwaUVuZFBvaW50ICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYO1xyXG4gICAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgdGhpcy5yZlV1aWQgKyAnL3ByZXBhcmVDaHVua3NSZXF1ZXN0JztcclxuICAgICAgbGV0IGZkID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIC8vIE5vdGU6IEF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgbXVzdCBiZSBzZXRcclxuICAgICAgZmQuc2V0KCd1dWlkJyx0aGlzLnJmVXVpZCk7XHJcbiAgICAgIGlmKCF0aGlzLnN0YXJ0ZWREYXRlKSB7XHJcbiAgICAgICAgdGhpcy5zdGFydGVkRGF0ZT1uZXcgRGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGZkLnNldCgnc3RhcnRlZERhdGUnLHRoaXMuc3RhcnRlZERhdGUudG9KU09OKCkpO1xyXG5cclxuICAgICAgbGV0IHVsID0gbmV3IFVwbG9hZChmZCwgcmVjVXJsKTtcclxuICAgICAgdGhpcy51cGxvYWRTZXQuYWRkKHVsKTtcclxuICAgICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc29sZS5lcnJvcihcIlJlY29yZGluZyBmaWxlIFVVSUQgbm90IHNldCFcIilcclxuICAgIH1cclxuICB9XHJcblxyXG5wcm90ZWN0ZWQgc2Vzc2lvbnNCYXNlVXJsKCk6c3RyaW5nIHtcclxuICBsZXQgYXBpRW5kUG9pbnQgPSAnJztcclxuICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgfVxyXG4gIGlmIChhcGlFbmRQb2ludCAhPT0gJycpIHtcclxuICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICB9XHJcbiAgcmV0dXJuICBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxufVxyXG5cclxuICBhYnN0cmFjdCBwb3N0Q2h1bmtBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIsIGNodW5rSWR4OiBudW1iZXIpOiB2b2lkO1xyXG5cclxuICBwb3N0QXVkaW9TdHJlYW1FbmQoY2h1bmtDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcblxyXG4gICAgaWYodGhpcy5yZlV1aWQpIHtcclxuXHJcbiAgICAgIGxldCBzZXNzaW9uc1VybCA9IHRoaXMuc2Vzc2lvbnNCYXNlVXJsKCk7XHJcbiAgICAgIGxldCByZWNVcmw6IHN0cmluZyA9IHNlc3Npb25zVXJsICsgJy8nICsgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQgKyAnLycgKyBSRUNGSUxFX0FQSV9DVFggKyAnLycgKyB0aGlzLnJmVXVpZCsnL2NvbmNhdENodW5rc1JlcXVlc3QnO1xyXG4gICAgICBsZXQgZmQ9bmV3IEZvcm1EYXRhKCk7XHJcbiAgICAgIGZkLnNldCgndXVpZCcsdGhpcy5yZlV1aWQpO1xyXG4gICAgICBmZC5zZXQoJ2NodW5rQ291bnQnLGNodW5rQ291bnQudG9TdHJpbmcoKSk7XHJcbiAgICAgIGxldCB1bCA9IG5ldyBVcGxvYWQoZmQsIHJlY1VybCx0aGlzLl9yZWNvcmRpbmdGaWxlKTtcclxuICAgICAgaWYodGhpcy51cGxvYWRTZXQpe1xyXG4gICAgICAgIHRoaXMudXBsb2FkU2V0LmFkZCh1bCk7XHJcbiAgICAgICAgdGhpcy51cGxvYWRTZXQuY29tcGxldGUoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUXVldWVkIGZvciB1cGxvYWQ6IFwiK3RoaXMuX3JlY29yZGluZ0ZpbGUpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWNvcmRpbmcgZmlsZSBVVUlEIG5vdCBzZXQhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZWQoKSB7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1Nlc3Npb24gY2xvc2VkLic7XHJcbiAgfVxyXG5cclxuICBlcnJvcihtc2c9J0FuIHVua25vd24gZXJyb3Igb2NjdXJlZCBkdXJpbmcgcmVjb3JkaW5nLicsYWR2aWNlOnN0cmluZz0nUGxlYXNlIHJldHJ5LicpIHtcclxuICAgIHRoaXMubmF2aWdhdGlvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogUmVjb3JkaW5nLic7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgdGl0bGU6ICdSZWNvcmRpbmcgZXJyb3InLFxyXG4gICAgICAgIG1zZzogbXNnLFxyXG4gICAgICAgIGFkdmljZTogYWR2aWNlXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
658
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNyZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2Jhc2ljcmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBYyxnQkFBZ0IsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFJL0UsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUMsTUFBTSxFQUFnQixTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRSxPQUFPLEVBQW9CLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFHN0UsT0FBTyxFQUNMLG9DQUFvQyxFQUVwQyx1Q0FBdUMsRUFDeEMsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8s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Q0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsR0FBQyw0Q0FBNEMsRUFBQyxTQUFjLGVBQWU7UUFDbEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUM5QixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLGlCQUFpQjtnQkFDeEIsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FFRixDQUFBO0FBNW1Cd0Isb0RBQXNDLEdBQVEsT0FBTyxHQUFDLENBQUUsQ0FBQSxDQUFDLHlDQUF5QztBQUdsRyx3Q0FBMEIsR0FBUSxFQUFHLENBQUE7QUEyQjVELHVFQUF1RTtBQUNoRCx1Q0FBeUIsR0FBQyxLQUFNLENBQUE7QUE5Q25DLGFBQWE7SUE0SGxCLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7R0E1SHhCLGFBQWEsQ0EybkJsQztTQTNuQnFCLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zcG9ydEFjdGlvbnN9IGZyb20gXCIuL2NvbnRyb2xwYW5lbFwiO1xyXG5pbXBvcnQge0Jyb3dzZXIsIFVzZXJBZ2VudCwgVXNlckFnZW50QnVpbGRlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3VhLXBhcnNlclwiO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge01lc3NhZ2VEaWFsb2d9IGZyb20gXCIuLi8uLi91aS9tZXNzYWdlX2RpYWxvZ1wiO1xyXG5pbXBvcnQge1Nlc3Npb259IGZyb20gXCIuL3Nlc3Npb25cIjtcclxuaW1wb3J0IHtTZXNzaW9uU2VydmljZX0gZnJvbSBcIi4vc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXVkaW9DYXB0dXJlfSBmcm9tIFwiLi4vLi4vYXVkaW8vY2FwdHVyZS9jYXB0dXJlXCI7XHJcbmltcG9ydCB7QXVkaW9EZXZpY2UsIEF1ZGlvU3RvcmFnZVR5cGUsIEF1dG9HYWluQ29udHJvbENvbmZpZ30gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge0xldmVsTWVhc3VyZSwgU3RyZWFtTGV2ZWxNZWFzdXJlfSBmcm9tIFwiLi4vLi4vYXVkaW8vZHNwL2xldmVsX21lYXN1cmVcIjtcclxuaW1wb3J0IHtBdWRpb1BsYXllcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL3BsYXliYWNrL3BsYXllclwiO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtBdWRpb0NsaXB9IGZyb20gXCIuLi8uLi9hdWRpby9wZXJzaXN0b3JcIjtcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi8uLi9hY3Rpb24vYWN0aW9uXCI7XHJcbmltcG9ydCB7TUlOX0RCX0xFVkVMfSBmcm9tIFwiLi4vLi4vdWkvcmVjb3JkaW5naXRlbV9kaXNwbGF5XCI7XHJcbmltcG9ydCB7VXBsb2FkLCBVcGxvYWRIb2xkZXIsIFVwbG9hZFNldH0gZnJvbSBcIi4uLy4uL25ldC91cGxvYWRlclwiO1xyXG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBJbmplY3R9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7U1BFRUNIUkVDT1JERVJfQ09ORklHLCBTcGVlY2hSZWNvcmRlckNvbmZpZ30gZnJvbSBcIi4uLy4uL3Nwci5jb25maWdcIjtcclxuaW1wb3J0IHtTcGVlY2hSZWNvcmRlclVwbG9hZGVyfSBmcm9tIFwiLi4vc3BydXBsb2FkZXJcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtLFxyXG4gIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtLFxyXG4gIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtTXVsdGlwbGllclxyXG59IGZyb20gXCIuLi8uLi9hdWRpby9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlLCBTcHJSZWNvcmRpbmdGaWxlfSBmcm9tIFwiLi4vcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7VVVJRH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcbmltcG9ydCB7V2FrZUxvY2tNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vdXRpbHMvd2FrZV9sb2NrXCI7XHJcbmltcG9ydCB7U3RhdGUgYXMgTGl2ZUxldmVsU3RhdGV9IGZyb20gXCIuLi8uLi9hdWRpby91aS9saXZlbGV2ZWxcIlxyXG5pbXBvcnQge1BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR9IGZyb20gXCIuLi8uLi9hdWRpby9pbmRkYl9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtSZXNwb25zaXZlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vdWkvcmVzcG9uc2l2ZV9jb21wb25lbnRcIjtcclxuaW1wb3J0IHtCcmVha3BvaW50T2JzZXJ2ZXJ9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgRk9SQ0VfUkVRVUVTVF9BVURJT19QRVJNSVNTSU9OUz1mYWxzZTtcclxuZXhwb3J0IGNvbnN0IFJFQ0ZJTEVfQVBJX0NUWCA9ICdyZWNmaWxlJztcclxuZXhwb3J0IGNvbnN0IE1BWF9SRUNPUkRJTkdfVElNRV9NUyA9IDEwMDAgKiA2MCAqIDYwICogNjA7IC8vIDEgaG91clxyXG5cclxuZXhwb3J0IGNvbnN0IExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUyA9IDAuMTsgIC8vIDEwMG1zXHJcblxyXG5leHBvcnQgY29uc3QgTk9TTEVFUF9WSURFT19USVRMRT0nTm8gU2xlZXAnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXJ7XHJcbiAgcG9zdEF1ZGlvU3RyZWFtU3RhcnQoKTp2b2lkO1xyXG4gIHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyLGNodW5rSWR4Om51bWJlcik6dm9pZDtcclxuICBwb3N0QXVkaW9TdHJlYW1FbmQoY2h1bmtDb3VudDpudW1iZXIpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDaHVua01hbmFnZXIgaW1wbGVtZW50cyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXtcclxuXHJcbiAgc2V0IHJlY29yZGluZ0ZpbGUodmFsdWU6IFNwclJlY29yZGluZ0ZpbGUpIHtcclxuICAgIHRoaXMuX3JmID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5uZWxzOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgc2FtcGxlUmF0ZTpudW1iZXI9LTE7XHJcblxyXG4gIHByaXZhdGUgX3JmITpTcHJSZWNvcmRpbmdGaWxlO1xyXG5cclxuICBwcml2YXRlIGNodW5rSWR4Om51bWJlcj0wO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXI6Q2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIC8vIE5vdGhpbmcgdG8gZG9cclxuICB9XHJcblxyXG4gIGZsdXNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIucG9zdEF1ZGlvU3RyZWFtRW5kKHRoaXMuY2h1bmtJZHgpO1xyXG4gIH1cclxuXHJcbiAgbmV4dFN0cmVhbSgpOiB2b2lkIHtcclxuICAgIC8vIHJlc2V0IGNodW5rIGNvdW50ZXJcclxuICAgIHRoaXMuY2h1bmtJZHg9MDtcclxuICAgIHRoaXMuY2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyLnBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlciwgc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5uZWxzPWNoYW5uZWxzO1xyXG4gICAgdGhpcy5zYW1wbGVSYXRlPXNhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICB3cml0ZShidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCBhQ3R4PUF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICBsZXQgYkNocz1idWZmZXJzLmxlbmd0aDtcclxuICAgIGxldCBmcmFtZUxlbj0wO1xyXG4gICAgaWYoYUN0eCAmJiBiQ2hzPjApIHtcclxuICAgICAgZnJhbWVMZW49YnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IGFkID0gYUN0eC5jcmVhdGVCdWZmZXIodGhpcy5jaGFubmVscywgZnJhbWVMZW4sIHRoaXMuc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbHM7IGNoKyspIHtcclxuICAgICAgICAgIGFkLmNvcHlUb0NoYW5uZWwoYnVmZmVyc1tjaF0sY2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNodW5rQXVkaW9CdWZmZXJSZWNlaXZlci5wb3N0Q2h1bmtBdWRpb0J1ZmZlcihhZCx0aGlzLmNodW5rSWR4KTtcclxuICAgICAgICB0aGlzLmNodW5rSWR4Kys7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIC8vIFRPRE8gSGFuZGxlIGVycm9yc1xyXG4gICAgICAgIC8vIGlPUyBTYWZhcmkgc29tZXRpbWVzIHRocm93cyBOb3RTdXBwb3J0ZWRFcnJvclxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgY3JlYXRlIGF1ZGlvIGJ1ZmZlciBmb3IgY2h1bmtlZCB1cGxvYWQuXCIpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOci4gb2YgY2hzOiBcIit0aGlzLmNoYW5uZWxzK1wiLCBmcmFtZSBsZW5ndGg6IFwiK2ZyYW1lTGVuK1wiLCBzYW1wbGUgcmF0ZTogXCIrdGhpcy5zYW1wbGVSYXRlKTtcclxuICAgICAgICBpZihlcnIgaW5zdGFuY2VvZiBET01FeGNlcHRpb24pe1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkRPTSBleGNlcHRpb246IE5hbWU6IFwiK2Vyci5uYW1lK1wiLCBNc2c6IFwiK2Vyci5tZXNzYWdlKTtcclxuICAgICAgICAgIGlmKGVyci5uYW1lPT09J05vdFN1cHBvcnRlZEVycm9yJyl7XHJcbiAgICAgICAgICAgIGlmKGZyYW1lTGVuPT0wKXtcclxuICAgICAgICAgICAgICAvLyBFbXB0eSBidWZmZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IENocm9taXVtXHJcbiAgICAgICAgICAgICAvLyBObyBkYXRhIHRvIHRyYW5zZmVyLCBidXQgdGhpcyBjYXNlIHNob3VsZCBuZXZlciBoYXBwZW5cclxuICAgICAgICAgICAgICByZXR1cm4gZnJhbWVMZW47XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2UgaWYoZXJyLm5hbWU9PT0nUmFuZ2VFcnJvcicpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRE9NIFJhbmdlRXJyb3JcIik7XHJcbiAgICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnlcclxuICAgICAgICAgICAgLy8gVE9ETyBXaGF0IHRvIGRvID8/XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRE9NIEV4Y2VwdGlvbiB1bmtub3duXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ipe1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlJhbmdlRXJyb3I6IE5hbWU6IFwiK2Vyci5uYW1lK1wiLCBNc2c6IFwiK2Vyci5tZXNzYWdlKTtcclxuICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnlcclxuICAgICAgICAgIC8vIFRPRE8gV2hhdCB0byBkbyA/P1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNpY1JlY29yZGVyIGV4dGVuZHMgUmVzcG9uc2l2ZUNvbXBvbmVudHtcclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVRpbWVySWQ6IGFueTtcclxuXHJcbiAgcHJvdGVjdGVkIG1heFJlY1RpbWVySWQ6IG51bWJlcnxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIG1heFJlY1RpbWVyUnVubmluZzogYm9vbGVhbj1mYWxzZTtcclxuXHJcbiAgZ2V0IG1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUzpudW1iZXI9Mjg4MDAwMCo1OyAvLyBEZWZhdWx0IDUgbWludXRlcyBvbmUgY2hhbm5lbCBhdCA0OGtIelxyXG4gIHByb3RlY3RlZCBfbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlczpudW1iZXI9QmFzaWNSZWNvcmRlci5ERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUztcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NIVU5LX1NJWkVfU0VDT05EUzpudW1iZXI9MzA7XHJcblxyXG4gIGdldCBjbGllbnRBdWRpb1N0b3JhZ2VUeXBlKCk6IEF1ZGlvU3RvcmFnZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2xpZW50QXVkaW9TdG9yYWdlVHlwZSh2YWx1ZTogQXVkaW9TdG9yYWdlVHlwZSkge1xyXG5cclxuICAgIGxldCBvbGRWYWx1ZT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlO1xyXG4gICAgdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSA9IHZhbHVlO1xyXG4gICAgaWYodmFsdWUhPT1vbGRWYWx1ZSl7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCgpOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDtcclxuICB9XHJcblxyXG4gIHNldCBwZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KHZhbHVlOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCkge1xyXG4gICAgbGV0IG9sZFZhbHVlPXRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgICB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdmFsdWU7XHJcbiAgICBpZih2YWx1ZSE9PW9sZFZhbHVlKXtcclxuICAgICAgdGhpcy5jb25maWd1cmVTdHJlYW1DYXB0dXJlU3RyZWFtKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gRW5hYmxlIG9ubHkgZm9yIGRldmVsb3BlbW50L2RlYnVnIHB1cnBvc2VzIG9mIGFycmF5IGF1ZGlvIGJ1ZmZlcnMgISFcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZPUkNFX0FSUlJBWV9BVURJT19CVUZGRVI9ZmFsc2U7XHJcblxyXG4gIGdldCB1cGxvYWRDaHVua1NpemVTZWNvbmRzKCk6IG51bWJlcnxudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl91cGxvYWRDaHVua1NpemVTZWNvbmRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHVwbG9hZENodW5rU2l6ZVNlY29uZHModmFsdWU6IG51bWJlcnxudWxsKSB7XHJcbiAgICBsZXQgb2xkVmFsdWU9dGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzO1xyXG4gICAgdGhpcy5fdXBsb2FkQ2h1bmtTaXplU2Vjb25kcyA9IHZhbHVlO1xyXG4gICAgaWYodmFsdWUhPT1vbGRWYWx1ZSl7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVzZXJBZ2VudDpVc2VyQWdlbnQ7XHJcbiAgc3RhdHVzTXNnOiBzdHJpbmc9Jyc7XHJcbiAgc3RhdHVzQWxlcnRUeXBlITogc3RyaW5nO1xyXG4gIHN0YXR1c1dhaXRpbmc6IGJvb2xlYW49ZmFsc2U7XHJcbiAgcmVhZG9ubHk9ZmFsc2U7XHJcbiAgcHJvdGVjdGVkIHJmVXVpZDpzdHJpbmd8bnVsbD1udWxsO1xyXG4gIHByb2Nlc3NpbmdSZWNvcmRpbmc9ZmFsc2U7XHJcbiAgYWM6IEF1ZGlvQ2FwdHVyZXxudWxsPW51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBfd2FrZUxvY2s6Ym9vbGVhbj1mYWxzZTtcclxuICAvLyBQcm9wZXJ0eSBhdWRpb0RldmljZXMgZnJvbSBwcm9qZWN0IGNvbmZpZzogbGlzdCBvZiBuYW1lcyBvZiBhbGxvd2VkIGF1ZGlvIGRldmljZXMuXHJcbiAgcHJvdGVjdGVkIF9hdWRpb0RldmljZXM6IEFycmF5PEF1ZGlvRGV2aWNlPiB8IG51bGx8IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgX3NlbGVjdGVkRGV2aWNlSWQ6c3RyaW5nfHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgcHJvdGVjdGVkIHNlbENhcHR1cmVEZXZpY2VJZDogQ29uc3RyYWluRE9NU3RyaW5nIHwgbnVsbDtcclxuICBwcm90ZWN0ZWQgX2NoYW5uZWxDb3VudCA9IDI7XHJcbiAgcHJvdGVjdGVkIF9hdXRvR2FpbkNvbnRyb2xDb25maWdzOiBBcnJheTxBdXRvR2FpbkNvbnRyb2xDb25maWc+IHwgbnVsbHwgdW5kZWZpbmVkO1xyXG5cclxuICBfc2Vzc2lvbjogU2Vzc2lvbnxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIF9yZWNvcmRpbmdGaWxlOlJlY29yZGluZ0ZpbGV8bnVsbD1udWxsO1xyXG5cclxuICB0cmFuc3BvcnRBY3Rpb25zOiBUcmFuc3BvcnRBY3Rpb25zO1xyXG4gIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG5cclxuICBwcm90ZWN0ZWQgc3RhcnRlZERhdGU6RGF0ZXxudWxsPW51bGw7XHJcblxyXG4gIHVwbG9hZFByb2dyZXNzOiBudW1iZXIgPSAxMDA7XHJcbiAgdXBsb2FkU3RhdHVzOiBzdHJpbmcgPSAnb2snXHJcbiAgcHJvdGVjdGVkIHVwbG9hZFNldDpVcGxvYWRTZXR8bnVsbD1udWxsO1xyXG5cclxuICBhdWRpb1NpZ25hbENvbGxhcHNlZCA9IHRydWU7XHJcblxyXG4gIHByb3RlY3RlZCBzdHJlYW1MZXZlbE1lYXN1cmU6IFN0cmVhbUxldmVsTWVhc3VyZTtcclxuICBwcm90ZWN0ZWQgbGV2ZWxNZWFzdXJlOiBMZXZlbE1lYXN1cmU7XHJcbiAgcGVha0xldmVsSW5EYjpudW1iZXI9TUlOX0RCX0xFVkVMO1xyXG4gIGF1ZGlvTG9hZGVkOmJvb2xlYW49ZmFsc2U7XHJcbiAgZGlzYWJsZUF1ZGlvRGV0YWlsczpib29sZWFuPWZhbHNlO1xyXG4gIHByb3RlY3RlZCBfY29udHJvbEF1ZGlvUGxheWVyOiBBdWRpb1BsYXllcnxudWxsPW51bGw7XHJcbiAgcHVibGljIGRpc3BsYXlBdWRpb0NsaXA6IEF1ZGlvQ2xpcCB8IG51bGw9bnVsbDtcclxuICBwcm90ZWN0ZWQgYXVkaW9GZXRjaFN1YnNjcmlwdGlvbjpTdWJzY3JpcHRpb258bnVsbD1udWxsO1xyXG5cclxuICBsaXZlTGV2ZWxEaXNwbGF5U3RhdGU6TGl2ZUxldmVsU3RhdGU9TGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAga2VlcExpdmVMZXZlbDpib29sZWFuPWZhbHNlO1xyXG4gIHByaXZhdGUgY2FsY0J1ZmZlckluZm9zU3Vic2NyOlN1YnNjcmlwdGlvbnxudWxsPW51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBkZXN0cm95ZWQ9ZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBuYXZpZ2F0aW9uRGlzYWJsZWQ9dHJ1ZTtcclxuXHJcbiAgcHJpdmF0ZSBfdXBsb2FkQ2h1bmtTaXplU2Vjb25kczpudW1iZXJ8bnVsbD1udWxsO1xyXG4gIC8vPUJhc2ljUmVjb3JkZXIuREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFM7XHJcblxyXG4gIC8vIERlZmF1bHQ6IENvbnRpbnVvdXMgSFRNTDUgQXVkaW8gQVBJIEF1ZGlvQnVmZmVyLCBubyBjaHVua2VkIHVwbG9hZFxyXG4gIHByb3RlY3RlZCBfY2xpZW50QXVkaW9TdG9yYWdlVHlwZTpBdWRpb1N0b3JhZ2VUeXBlPUF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRTtcclxuXHJcbiAgcHJvdGVjdGVkIF9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0OlBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR8bnVsbD1udWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgX3NjcmVlbkxvY2tlZD1mYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSB3YWtlTG9ja01hbmFnZXI/Oldha2VMb2NrTWFuYWdlcjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGJwbzpCcmVha3BvaW50T2JzZXJ2ZXIscHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICAgICAgICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCBzZXNzaW9uU2VydmljZTpTZXNzaW9uU2VydmljZSxcclxuICAgICAgICAgICAgICAgIHByb3RlY3RlZCB1cGxvYWRlcjogU3BlZWNoUmVjb3JkZXJVcGxvYWRlcixcclxuICAgICAgICAgICAgICAgIEBJbmplY3QoU1BFRUNIUkVDT1JERVJfQ09ORklHKSBwdWJsaWMgY29uZmlnPzogU3BlZWNoUmVjb3JkZXJDb25maWcpIHtcclxuICAgIHN1cGVyKGJwbyk7XHJcbiAgICB0aGlzLnVzZXJBZ2VudD1Vc2VyQWdlbnRCdWlsZGVyLnVzZXJBZ2VudCgpO1xyXG4gICAgY29uc3QgZGV0UGZtPXRoaXMudXNlckFnZW50LmRldGVjdGVkUGxhdGZvcm07XHJcbiAgICBpZihkZXRQZm0pIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkRldGVjdGVkIHBsYXRmb3JtOiBcIiArZGV0UGZtKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRldEJyPXRoaXMudXNlckFnZW50LmRldGVjdGVkQnJvd3NlcjtcclxuICAgIGNvbnN0IGRldEJyVmVycz10aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXJWZXJzaW9uO1xyXG4gICAgaWYoZGV0QnIpIHtcclxuICAgICAgbGV0IGRldEJyVmVyc1N0cj0oZGV0QnJWZXJzKT8nICcrZGV0QnJWZXJzOicnO1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiRGV0ZWN0ZWQgYnJvd3NlcjogXCIgK2RldEJyK2RldEJyVmVyc1N0cik7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMgPSBuZXcgVHJhbnNwb3J0QWN0aW9ucygpO1xyXG4gICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24gPSBuZXcgQWN0aW9uKCdQbGF5Jyk7XHJcbiAgICB0aGlzLmxldmVsTWVhc3VyZSA9IG5ldyBMZXZlbE1lYXN1cmUoKTtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlID0gbmV3IFN0cmVhbUxldmVsTWVhc3VyZSgpO1xyXG4gICAgdGhpcy5zZWxDYXB0dXJlRGV2aWNlSWQgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHdha2VMb2NrKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3dha2VMb2NrO1xyXG4gIH1cclxuXHJcbiAgc2V0IHdha2VMb2NrKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl93YWtlTG9jayA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlV2FrZUxvY2tDb25kKCl7XHJcbiAgICBpZih0aGlzLndha2VMb2NrPT09dHJ1ZSkge1xyXG4gICAgICBpZighdGhpcy53YWtlTG9ja01hbmFnZXIpe1xyXG4gICAgICAgIHRoaXMud2FrZUxvY2tNYW5hZ2VyPW5ldyBXYWtlTG9ja01hbmFnZXIoKTtcclxuICAgICAgICB0aGlzLndha2VMb2NrTWFuYWdlci5iZWhhdmlvclN1YmplY3Quc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgbmV4dDogKHYpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9zY3JlZW5Mb2NrZWQgPSB2O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJXYWtlIGxvY2sgZXJyb3IhXCIpXHJcbiAgICAgICAgICAgICAgdGhpcy5fc2NyZWVuTG9ja2VkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMud2FrZUxvY2tNYW5hZ2VyLmVuYWJsZVdha2VMb2NrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlV2FrZUxvY2tDb25kKCl7XHJcbiAgICB0aGlzLndha2VMb2NrTWFuYWdlcj8uZGlzYWJsZVdha2VMb2NrKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2NyZWVuTG9ja2VkKCl7XHJcbiAgICByZXR1cm4gdGhpcy5fc2NyZWVuTG9ja2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0IGF1ZGlvRGV2aWNlcyhhdWRpb0RldmljZXM6IEFycmF5PEF1ZGlvRGV2aWNlPiB8IG51bGwgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2F1ZGlvRGV2aWNlcyA9IGF1ZGlvRGV2aWNlcztcclxuICB9XHJcblxyXG4gIHNldCBhdXRvR2FpbkNvbnRyb2xDb25maWdzKGF1dG9HYWluQ29udHJvbENvbmZpZ3M6IEFycmF5PEF1dG9HYWluQ29udHJvbENvbmZpZz58bnVsbHx1bmRlZmluZWQpe1xyXG4gICAgdGhpcy5fYXV0b0dhaW5Db250cm9sQ29uZmlncz1hdXRvR2FpbkNvbnRyb2xDb25maWdzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNoYW5uZWxDb3VudChjaGFubmVsQ291bnQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5fY2hhbm5lbENvdW50ID0gY2hhbm5lbENvdW50O1xyXG4gIH1cclxuXHJcbiAgc2V0IHNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbnxudWxsKSB7XHJcbiAgICB0aGlzLl9zZXNzaW9uID0gc2Vzc2lvbjtcclxuICB9XHJcblxyXG4gIGdldCBzZXNzaW9uKCk6U2Vzc2lvbnxudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nlc3Npb247XHJcbiAgfVxyXG5cclxuICBlbmFibGVTdGFydFVzZXJHZXN0dXJlKCkge1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWFkeS4nO1xyXG4gIH1cclxuXHJcbiAgY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpIHtcclxuICAgIGxldCBvdXRTdHJlYW07XHJcblxyXG4gICAgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRSE9PXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUgfHwgdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzKSB7XHJcbiAgICAgIGlmKCF0aGlzLnVwbG9hZENodW5rU2l6ZVNlY29uZHMpe1xyXG4gICAgICAgIHRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcz1CYXNpY1JlY29yZGVyLkRFRkFVTFRfQ0hVTktfU0laRV9TRUNPTkRTO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIE11bHRpcGx5IHRoZSBjYXB0dXJlIHN0cmVhbSB0by4uLlxyXG4gICAgICBsZXQgc2FzbSA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbU11bHRpcGxpZXIoKTtcclxuXHJcbiAgICAgIC8vIC4uLnVwbG9hZCBhdWRpbyBkYXRhIGluIGNodW5rcy4uLlxyXG4gICAgICBsZXQgY2hNbmcgPSBuZXcgQ2h1bmtNYW5hZ2VyKHRoaXMpOyAgLy8gVGhlIGNodW5rIG1hbmFnZXIgY29ubmVjdHMgdGhlIGNodW5rZWQgYXVkaW8gc3RyZWFtIHRvIHRoaXMgY2xhc3MgdG8gdXBsb2FkIHRoZSBjaHVua3NcclxuICAgICAgbGV0IGNoT3NVcGxvYWQgPSBuZXcgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtKGNoTW5nLCB0aGlzLnVwbG9hZENodW5rU2l6ZVNlY29uZHMpOyAvLyBUaGUgYXVkaW8gc3RyZWFtIGNodW5rZXIgaXRzZWxmXHJcbiAgICAgIHNhc20uc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zLnB1c2goY2hPc1VwbG9hZCk7XHJcblxyXG4gICAgICAvLyAuLi5hbmQgdG8gbWVhc3VyZSB0aGUgbGV2ZWxcclxuICAgICAgbGV0IGNoT3NMdmxNZWFzID0gbmV3IFNlcXVlbmNlQXVkaW9GbG9hdDMyQ2h1bmtlck91dFN0cmVhbSh0aGlzLnN0cmVhbUxldmVsTWVhc3VyZSwgTEVWRUxfQkFSX0lOVEVSVkFMTF9TRUNPTkRTKVxyXG4gICAgICBzYXNtLnNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcy5wdXNoKGNoT3NMdmxNZWFzKTtcclxuXHJcbiAgICAgIG91dFN0cmVhbSA9IHNhc207XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBvdXRTdHJlYW0gPSBuZXcgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtKHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLCBMRVZFTF9CQVJfSU5URVJWQUxMX1NFQ09ORFMpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLm1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXM9dGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcztcclxuICAgICAgdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlPXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgICAgIHRoaXMuYWMuYXVkaW9PdXRTdHJlYW0gPSBvdXRTdHJlYW07XHJcbiAgICAgIGlmKEF1ZGlvU3RvcmFnZVR5cGUuREJfQ0hVTktFRD09PXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUgJiYgdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCE9PW51bGwpIHtcclxuICAgICAgICB0aGlzLmFjLnBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgPSB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgc2hvd1JlY29yZGluZygpIHtcclxuICAgIGlmKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuc3RvcCgpO1xyXG4gICAgfVxyXG4gICAgaWYodGhpcy5jYWxjQnVmZmVySW5mb3NTdWJzY3Ipe1xyXG4gICAgICB0aGlzLmNhbGNCdWZmZXJJbmZvc1N1YnNjci51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCkge1xyXG4gICAgICBsZXQgZGFwPXRoaXMuZGlzcGxheUF1ZGlvQ2xpcDtcclxuICAgICAgbGV0IGFkaD1kYXAuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICBpZihhZGgpe1xyXG4gICAgICAgIGlmKCF0aGlzLmtlZXBMaXZlTGV2ZWwpIHtcclxuICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuTE9BRElORztcclxuICAgICAgICB9XHJcbiAgICAgICAgYWRoLmFkZE9uUmVhZHlMaXN0ZW5lcigoKT0+e1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQXVkaW8gZGF0YSBob2xkZXIgcmVhZHkuIEVuYWJsZSBwbGF5YmFjay4gQXVkaW8gbG9hZGVkIHRydWUuXCIpXHJcbiAgICAgICAgICBpZighdGhpcy5rZWVwTGl2ZUxldmVsKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVOREVSSU5HO1xyXG4gICAgICAgICAgICB0aGlzLmNhbGNCdWZmZXJJbmZvc1N1YnNjciA9IHRoaXMubGV2ZWxNZWFzdXJlLmNhbGNCdWZmZXJMZXZlbEluZm9zKGFkaCwgTEVWRUxfQkFSX0lOVEVSVkFMTF9TRUNPTkRTKS5zdWJzY3JpYmUoKGxldmVsSW5mb3MpID0+IHtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJMZXZlbCBpbmZvczogbGV2ZWxJbmZvcyBudW1iZXIgc2l6ZTogXCIrbGV2ZWxJbmZvcy5udW1iZXJTaXplKCkpO1xyXG4gICAgICAgICAgICAgIGRhcC5sZXZlbEluZm9zID0gbGV2ZWxJbmZvcztcclxuICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmF1ZGlvTG9hZGVkPXRydWU7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBkYXRhIGhvbGRlciBhZGRlZCBvblJlYWR5LlwiKVxyXG4gICAgICB9XHJcbiAgICAgIC8vdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuYXVkaW9Mb2FkZWQ9ZmFsc2U7XHJcbiAgICAgIC8vIENvbGxhcHNlIGF1ZGlvIHNpZ25hbCBkaXNwbGF5IGlmIG9wZW5cclxuICAgICAgaWYgKCF0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkKSB7XHJcbiAgICAgICAgdGhpcy5hdWRpb1NpZ25hbENvbGxhcHNlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgc3RhcnQoKSB7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1N0YXJ0aW5nIHNlc3Npb24uLi4nO1xyXG4gICAgdGhpcy5zdGF0dXNXYWl0aW5nPWZhbHNlO1xyXG4gICAgaWYodGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICBpZiAodGhpcy5fc2Vzc2lvbi5zZWFsZWQpIHtcclxuICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1Nlc3Npb24gc2VhbGVkISc7XHJcbiAgICAgICAgLy9sZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZXNzaW9uU2VhbGVkRGlhbG9nLCB7fSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgICBtc2c6IFwiVGhpcyBzZXNzaW9uIGlzIHNlYWxlZC4gUmVjb3JkaW5ncyBjYW5ub3QgYmUgYWRkZWQgYW55bW9yZS5cIixcclxuICAgICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIGFzayB5b3VyIGV4cGVyaW1lbnRlciB3aGF0IHRvIGRvIChlLmcgc3RhcnQgYSBuZXcgc2Vzc2lvbikuJyxcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgYm9keTogYW55ID0ge307XHJcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uc3RhdHVzID09PSBcIkNSRUFURURcIikge1xyXG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGF0dXMgPSBcIkxPQURFRFwiO1xyXG4gICAgICAgICAgYm9keS5zdGF0dXMgPSB0aGlzLl9zZXNzaW9uLnN0YXR1cztcclxuICAgICAgICAgIGlmICghdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nlc3Npb24ubG9hZGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGJvZHkubG9hZGVkRGF0ZSA9IHRoaXMuX3Nlc3Npb24ubG9hZGVkRGF0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbi5yZXN0YXJ0ZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgIGJvZHkucmVzdGFydGVkRGF0ZSA9IHRoaXMuX3Nlc3Npb24ucmVzdGFydGVkRGF0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5wYXRjaFNlc3Npb25PYnNlcnZlcih0aGlzLl9zZXNzaW9uLCBib2R5KS5zdWJzY3JpYmUoKVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ2hlY2sgYnJvd3NlciBjb21wYXRpYmlsaXR5XHJcbiAgICBpZih0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLlNhZmFyaSAmJiB0aGlzLl9jaGFubmVsQ291bnQ+MSl7XHJcbiAgICAgIGxldCBlTXNnPVwiRXJyb3I6IFNhZmFyaSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgc3RlcmVvIHJlY29yZGluZ3MuXCI7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZU1zZyk7XHJcbiAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICB0aXRsZTogJ0Jyb3dzZXIgbm90IHN1cHBvcnRlZCcsXHJcbiAgICAgICAgICBtc2c6IGVNc2csXHJcbiAgICAgICAgICBhZHZpY2U6IFwiUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLCBlLmcuIE1vemlsbGEgRmlyZWZveC5cIlxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICAvL2NvbnNvbGUubG9nKFwiU2Vzc2lvbiBJRDogXCIrdGhpcy5fc2Vzc2lvbi5zZXNzaW9uKyBcIiBzdGF0dXM6IFwiK3RoaXMuX3Nlc3Npb24uc3RhdHVzKVxyXG4gICAgdGhpcy5fc2VsZWN0ZWREZXZpY2VJZD11bmRlZmluZWQ7XHJcblxyXG4gICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmIHRoaXMuYWMgJiYgKEZPUkNFX1JFUVVFU1RfQVVESU9fUEVSTUlTU0lPTlMgfHwgKHRoaXMuX2F1ZGlvRGV2aWNlcyAmJiB0aGlzLl9hdWRpb0RldmljZXMubGVuZ3RoID4gMCkpKSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlcXVlc3RpbmcgYXVkaW8gcGVybWlzc2lvbnMuLi4nO1xyXG4gICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuXHJcbiAgICAgIHRoaXMuYWMuZGV2aWNlSW5mb3MoKG1kaXMpID0+IHtcclxuICAgICAgICBsZXQgYXVkaW9DYXB0dXJlRGV2aWNlQXZhaWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBsZXQgYXVkaW9QbGF5RGV2aWNlQXZhaWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgICBpZiAobWRpcykge1xyXG4gICAgICAgICAgaWYodGhpcy5hYykge1xyXG4gICAgICAgICAgICB0aGlzLmFjLnByaW50RGV2aWNlcyhtZGlzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChtZGlzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgbWRpaSA9IDA7IG1kaWkgPCBtZGlzLmxlbmd0aDsgbWRpaSsrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IG1kaSA9IG1kaXNbbWRpaV07XHJcbiAgICAgICAgICAgICAgbGV0IGtpbmQ9bWRpLmtpbmQ7XHJcbiAgICAgICAgICAgICAgaWYoa2luZCA9PT0gXCJhdWRpb2lucHV0XCIpe1xyXG4gICAgICAgICAgICAgICAgYXVkaW9DYXB0dXJlRGV2aWNlQXZhaWw9dHJ1ZTtcclxuICAgICAgICAgICAgICB9ZWxzZSBpZihraW5kPT09IFwiYXVkaW9vdXRwdXRcIil7XHJcbiAgICAgICAgICAgICAgICBhdWRpb1BsYXlEZXZpY2VBdmFpbD10cnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLl9zZXNzaW9uICYmIHRoaXMuX3Nlc3Npb24udHlwZSAhPT0gJ1RFU1RfREVGX0EnICYmIHRoaXMuX2F1ZGlvRGV2aWNlcyAmJiB0aGlzLl9hdWRpb0RldmljZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBsZXQgZmRpOiBNZWRpYURldmljZUluZm8gfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgZm9yIChsZXQgYWRJID0gMDsgYWRJIDwgdGhpcy5fYXVkaW9EZXZpY2VzLmxlbmd0aDsgYWRJKyspIHtcclxuICAgICAgICAgICAgICBsZXQgYWQgPSB0aGlzLl9hdWRpb0RldmljZXNbYWRJXTtcclxuICAgICAgICAgICAgICBpZiAoYWQucGxheWJhY2spIHtcclxuICAgICAgICAgICAgICAgIC8vIHByb2plY3QgYXVkaW8gZGV2aWNlIGNvbmZpZyBmb3IgcGxheWJhY2sgZGV2aWNlXHJcbiAgICAgICAgICAgICAgICAvLyBub3QgdXNlZCBmb3Igbm93XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgZm9yIChsZXQgbWRpaSA9IDA7IG1kaWkgPCBtZGlzLmxlbmd0aDsgbWRpaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWRpID0gbWRpc1ttZGlpXTtcclxuICAgICAgICAgICAgICAgIGxldCBraW5kPW1kaS5raW5kO1xyXG4gICAgICAgICAgICAgICAgaWYoa2luZCA9PT0gXCJhdWRpb2lucHV0XCIpe1xyXG4gICAgICAgICAgICAgICAgICBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbD10cnVlO1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoa2luZD09PSBcImF1ZGlvb3V0cHV0XCIpe1xyXG4gICAgICAgICAgICAgICAgICBhdWRpb1BsYXlEZXZpY2VBdmFpbD10cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFkLnJlZ2V4KSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJNYXRjaD86IFxcJ1wiK21kaS5sYWJlbCtcIlxcJyBcXCdcIithZC5uYW1lK1wiXFwnXCIpO1xyXG4gICAgICAgICAgICAgICAgICBpZiAobWRpLmxhYmVsLm1hdGNoKGFkLm5hbWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmRpID0gbWRpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJNYXRjaCFcIik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChtZGkubGFiZWwudHJpbSgpID09PSBhZC5uYW1lLnRyaW0oKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZkaSA9IG1kaTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZkaSkge1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGZkaSkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgLy8gbWF0Y2hpbmcgZGV2aWNlIGZvdW5kXHJcblxyXG4gICAgICAgICAgICAgIC8vIE5vdCBhYmxlIHRvIG9wZW4gZGV2aWNlIGhlcmUgc2luY2UgQ2hyb21lIDcxXHJcbiAgICAgICAgICAgICAgLy8gQ2hyb21lIDcxIHJlcXVpcmVzIGEgdXNlciBnZXN0dXJlIGJlZm9yZSB0aGUgQXVkaW9Db250ZXh0IGNhbiBiZSByZXN1bWVkXHJcbiAgICAgICAgICAgICAgLy8gc2Vzc2lvbm1hbmFnZXIudHM6NzEyIE9wZW4gc2Vzc2lvbiB3aXRoIGRlZmF1bHQgYXVkaW8gZGV2aWNlIGZvciAxIGNoYW5uZWxzXHJcbiAgICAgICAgICAgICAgLy8gY2FwdHVyZS50czoxMjggVGhlIEF1ZGlvQ29udGV4dCB3YXMgbm90IGFsbG93ZWQgdG8gc3RhcnQuIEl0IG11c3QgYmUgcmVzdW1lZCAob3IgY3JlYXRlZCkgYWZ0ZXIgYSB1c2VyIGdlc3R1cmUgb24gdGhlIHBhZ2UuIGh0dHBzOi8vZ29vLmdsLzdLN1dMdVxyXG4gICAgICAgICAgICAgIC8vIHB1c2guLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vY2FwdHVyZS9jYXB0dXJlLnRzLkF1ZGlvQ2FwdHVyZS5vcGVuIEAgY2FwdHVyZS50czoxMjhcclxuXHJcbiAgICAgICAgICAgICAgLy90aGlzLmFjLm9wZW4odGhpcy5fY2hhbm5lbENvdW50LCBmZGkuZGV2aWNlSWQpO1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuaW5mbyhcIlNldCBzZWxlY3RlZCBhdWRpbyBkZXZpY2U6IFxcJ1wiICsgZmRpLmxhYmVsICsgXCJcXCcgSWQ6IFxcJ1wiICsgZmRpLmRldmljZUlkICsgXCJcXCdcIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWREZXZpY2VJZCA9IGZkaS5kZXZpY2VJZDtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVTdGFydFVzZXJHZXN0dXJlKClcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAvLyBkZXZpY2Ugbm90IGZvdW5kXHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6IFJlcXVpcmVkIGF1ZGlvIGRldmljZSBub3QgYXZhaWxhYmxlISc7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1aXJlZCBhdWRpbyBkZXZpY2UnLFxyXG4gICAgICAgICAgICAgICAgICBtc2c6IFwiUmVxdWlyZWQgYXVkaW8gZGV2aWNlIG5vdCBmb3VuZFwiLFxyXG4gICAgICAgICAgICAgICAgICBhZHZpY2U6IFwiUGxlYXNlIGNvbm5lY3QgYSBzdWl0YWJsZSBhdWRpbyBkZXZpY2UgZm9yIHRoaXMgcHJvamVjdCBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pLlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIGlmKCFhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbCAmJiAhYXVkaW9QbGF5RGV2aWNlQXZhaWwpe1xyXG4gICAgICAgICAgICAgIC8vIG5vIGRldmljZSBmb3VuZFxyXG4gICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiBObyBhdWRpbyBkZXZpY2UgYXZhaWxhYmxlISc7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnd2Fybic7XHJcbiAgICAgICAgICAgICAgLy90aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuJyxcclxuICAgICAgICAgICAgICAgICAgdGl0bGU6ICdObyBhdWRpbyBkZXZpY2UnLFxyXG4gICAgICAgICAgICAgICAgICBtc2c6IFwiTm8gYXVkaW8gZGV2aWNlIGZvdW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgY29ubmVjdCBhbiBhdWRpbyBkZXZpY2UgYW5kIHJldHJ5IChwcmVzcyB0aGUgYnJvd3NlciByZWxvYWQgYnV0dG9uKSBvciB0cnkgdG8gY29udGludWUgYW55d2F5LlwiXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfWVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5yZWFkb25seSAmJiAhYXVkaW9DYXB0dXJlRGV2aWNlQXZhaWwpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIGRldmljZSBmb3VuZFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnV0FSTklORzogTm8gYXVkaW8gY2FwdHVyZSBkZXZpY2UgYXZhaWxhYmxlISc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICd3YXJuaW5nJztcclxuICAgICAgICAgICAgICAgIC8vdGhpcy5yZWFkb25seSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdObyBhdWRpbyBjYXB0dXJlIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgICAgbXNnOiBcIk5vIGF1ZGlvIGNhcHR1cmUgZGV2aWNlIGZvdW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIGNhcHR1cmUgZGV2aWNlIGFuZCByZXRyeSAocHJlc3MgdGhlIGJyb3dzZXIgcmVsb2FkIGJ1dHRvbikgb3IgdHJ5IHRvIGNvbnRpbnVlIGFueXdheS5cIlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAvLyBTYWZhcmkgZG9lcyBub3QgbGlzdCBwbGF5YmFjayBkZXZpY2VzXHJcbiAgICAgICAgICAgICAgaWYgKCFhdWRpb1BsYXlEZXZpY2VBdmFpbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gRmlyZWZveCBkb2VzIG5vdCBlbnVtZXJhdGUgYXVkaW9vdXRwdXQgZGV2aWNlc1xyXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IHNob3cgdGhpcyB3YXJuaW5nLCBiZWNhdXNlIGl0IHdvdWxkIGFsd2F5cyBhcHBlYXIgb24gRmlyZWZveFxyXG4gICAgICAgICAgICAgICAgLy8gV2hlbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk4NTEyIGlzIGZpeGVkIHRoZSB3YXJuaW5nIGNhbiBiZSBlbmFibGVkIGZvciBGaXJlZm94IGFzIHdlbGxcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBJdCBpcyBhbHJlYWR5IGltcGxlbW5ldGVkIGJ1dCBrZXB0IGJlaGluZCBhIHByZWZlcmVuY2Ugc2V0dGluZyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTUyNDAxXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vIE91dHB1dCBkZXZpY2VzIGFyZSBsaXN0ZWQgaWYgYWJvdXQ6Y29uZmlnIG1lZGlhLnNldHNpbmtpZC5lbmFibGVkPXRydWVcclxuICAgICAgICAgICAgICAgIC8vIGJ1dCBkZWZhdWx0IHNldHRpbmcgaXMgZmFsc2VcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU2FtZSBwcm9ibGVtIHdpdGggU2FmYXJpXHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRCcm93c2VyPT09QnJvd3Nlci5TYWZhcmkgfHwgdGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRCcm93c2VyPT09QnJvd3Nlci5GaXJlZm94KSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBubyBkZXZpY2UgZm91bmRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnV0FSTklORzogTm8gYXVkaW8gcGxheWJhY2sgZGV2aWNlIGF2YWlsYWJsZSEnO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICd3YXJuJztcclxuICAgICAgICAgICAgICAgICAgLy90aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuJyxcclxuICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnTm8gYXVkaW8gcGxheWJhY2sgZGV2aWNlJyxcclxuICAgICAgICAgICAgICAgICAgICAgIG1zZzogXCJObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgY29ubmVjdCBhbiBhdWRpbyBwbGF5YmFjayBkZXZpY2UgYW5kIHJldHJ5IChwcmVzcyB0aGUgYnJvd3NlciByZWxvYWQgYnV0dG9uKSBvciB0cnkgdG8gY29udGludWUgYW55d2F5LlwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTm90IGFibGUgdG8gb3BlbiBkZXZpY2UgaGVyZSBzaW5jZSBDaHJvbWUgNzFcclxuICAgICAgICAgICAgLy8gQ2hyb21lIDcxIHJlcXVpcmVzIGEgdXNlciBnZXN0dXJlIGJlZm9yZSB0aGUgQXVkaW9Db250ZXh0IGNhbiBiZSByZXN1bWVkXHJcbiAgICAgICAgICAgIC8vIHNlc3Npb25tYW5hZ2VyLnRzOjcxMiBPcGVuIHNlc3Npb24gd2l0aCBkZWZhdWx0IGF1ZGlvIGRldmljZSBmb3IgMSBjaGFubmVsc1xyXG4gICAgICAgICAgICAvLyBjYXB0dXJlLnRzOjEyOCBUaGUgQXVkaW9Db250ZXh0IHdhcyBub3QgYWxsb3dlZCB0byBzdGFydC4gSXQgbXVzdCBiZSByZXN1bWVkIChvciBjcmVhdGVkKSBhZnRlciBhIHVzZXIgZ2VzdHVyZSBvbiB0aGUgcGFnZS4gaHR0cHM6Ly9nb28uZ2wvN0s3V0x1XHJcbiAgICAgICAgICAgIC8vIHB1c2guLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vY2FwdHVyZS9jYXB0dXJlLnRzLkF1ZGlvQ2FwdHVyZS5vcGVuIEAgY2FwdHVyZS50czoxMjhcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk9wZW4gc2Vzc2lvbiB3aXRoIGRlZmF1bHQgYXVkaW8gZGV2aWNlIGZvciBcIit0aGlzLl9jaGFubmVsQ291bnQrXCIgY2hhbm5lbHNcIik7XHJcbiAgICAgICAgICAgIC8vdGhpcy5hYy5vcGVuKHRoaXMuX2NoYW5uZWxDb3VudCk7XHJcblxyXG4gICAgICAgICAgICAvLyBlbmFibGUgc3RhcnQgZ2VzdHVyZSBhbnl3YXlcclxuICAgICAgICAgICAgdGhpcy5lbmFibGVTdGFydFVzZXJHZXN0dXJlKClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0SXRlbSgpIHtcclxuICAgIHRoaXMucmZVdWlkID0gVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnJlY1VVSUQgPSB0aGlzLnJmVXVpZDtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhcnRlZERhdGU9bnVsbDtcclxuICAgIHRoaXMuZW5hYmxlV2FrZUxvY2tDb25kKCk7XHJcbiAgICAvL3RoaXMucmZVdWlkPVVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIHRoaXMudXBsb2FkU2V0PW51bGw7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzdGFydENhcHR1cmUoKSB7XHJcbiAgICBpZiAodGhpcy5hYykge1xyXG4gICAgICBpZiAoIXRoaXMuYWMub3BlbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggYXVkaW8gZGV2aWNlIElkOiBcXCdcIiArIHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQgKyBcIlxcJyBmb3IgXCIgKyB0aGlzLl9jaGFubmVsQ291bnQgKyBcIiBjaGFubmVsc1wiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJPcGVuIHNlc3Npb24gd2l0aCBkZWZhdWx0IGF1ZGlvIGRldmljZSBmb3IgXCIgKyB0aGlzLl9jaGFubmVsQ291bnQgKyBcIiBjaGFubmVsc1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hYy5vcGVuKHRoaXMuX2NoYW5uZWxDb3VudCwgdGhpcy5fc2VsZWN0ZWREZXZpY2VJZCwgdGhpcy5fYXV0b0dhaW5Db250cm9sQ29uZmlncyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hYy5zdGFydCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuZWQoKSB7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuc3RhcnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0ZWQoKSB7XHJcblxyXG4gICAgaWYoIXRoaXMuc3RhcnRlZERhdGUpIHtcclxuICAgICAgdGhpcy5zdGFydGVkRGF0ZT1uZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHBvc3RSZWNvcmRpbmcod2F2RmlsZTogVWludDhBcnJheSwgcmVjVXJsOiBzdHJpbmcscmY6UmVjb3JkaW5nRmlsZXxudWxsLHVwbG9hZEhvbGRlcj86VXBsb2FkSG9sZGVyKSB7XHJcbiAgICBsZXQgd2F2QmxvYiA9IG5ldyBCbG9iKFt3YXZGaWxlXSwge3R5cGU6ICdhdWRpby93YXYnfSk7XHJcbiAgICBsZXQgdWwgPSBuZXcgVXBsb2FkKHdhdkJsb2IsIHJlY1VybCxyZik7XHJcbiAgICBpZih1cGxvYWRIb2xkZXIpe1xyXG4gICAgICB1cGxvYWRIb2xkZXIudXBsb2FkPXVsO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgfVxyXG5cclxuICBwb3N0QXVkaW9TdHJlYW1TdGFydCgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMucmZVdWlkKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkU2V0PW5ldyBVcGxvYWRTZXQoKTtcclxuICAgICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgfVxyXG4gICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucmZVdWlkICsgJy9wcmVwYXJlQ2h1bmtzUmVxdWVzdCc7XHJcbiAgICAgIGxldCBmZCA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAvLyBOb3RlOiBBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG11c3QgYmUgc2V0XHJcbiAgICAgIGZkLnNldCgndXVpZCcsdGhpcy5yZlV1aWQpO1xyXG4gICAgICBpZighdGhpcy5zdGFydGVkRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRlZERhdGU9bmV3IERhdGUoKTtcclxuICAgICAgfVxyXG4gICAgICBmZC5zZXQoJ3N0YXJ0ZWREYXRlJyx0aGlzLnN0YXJ0ZWREYXRlLnRvSlNPTigpKTtcclxuXHJcbiAgICAgIGxldCB1bCA9IG5ldyBVcGxvYWQoZmQsIHJlY1VybCk7XHJcbiAgICAgIHRoaXMudXBsb2FkU2V0LmFkZCh1bCk7XHJcbiAgICAgIHRoaXMudXBsb2FkZXIucXVldWVVcGxvYWQodWwpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWNvcmRpbmcgZmlsZSBVVUlEIG5vdCBzZXQhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJvdGVjdGVkIHNlc3Npb25zQmFzZVVybCgpOnN0cmluZyB7XHJcbiAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaUVuZFBvaW50KSB7XHJcbiAgICBhcGlFbmRQb2ludCA9IHRoaXMuY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gIH1cclxuICBpZiAoYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICBhcGlFbmRQb2ludCA9IGFwaUVuZFBvaW50ICsgJy8nXHJcbiAgfVxyXG4gIHJldHVybiAgYXBpRW5kUG9pbnQgKyBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0FQSV9DVFg7XHJcbn1cclxuXHJcbiAgYWJzdHJhY3QgcG9zdENodW5rQXVkaW9CdWZmZXIoYXVkaW9CdWZmZXI6IEF1ZGlvQnVmZmVyLCBjaHVua0lkeDogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgcG9zdEF1ZGlvU3RyZWFtRW5kKGNodW5rQ291bnQ6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGlmKHRoaXMucmZVdWlkKSB7XHJcblxyXG4gICAgICBsZXQgc2Vzc2lvbnNVcmwgPSB0aGlzLnNlc3Npb25zQmFzZVVybCgpO1xyXG4gICAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgdGhpcy5yZlV1aWQrJy9jb25jYXRDaHVua3NSZXF1ZXN0JztcclxuICAgICAgbGV0IGZkPW5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmZC5zZXQoJ3V1aWQnLHRoaXMucmZVdWlkKTtcclxuICAgICAgZmQuc2V0KCdjaHVua0NvdW50JyxjaHVua0NvdW50LnRvU3RyaW5nKCkpO1xyXG4gICAgICBsZXQgdWwgPSBuZXcgVXBsb2FkKGZkLCByZWNVcmwsdGhpcy5fcmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgIGlmKHRoaXMudXBsb2FkU2V0KXtcclxuICAgICAgICB0aGlzLnVwbG9hZFNldC5hZGQodWwpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkU2V0LmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlF1ZXVlZCBmb3IgdXBsb2FkOiBcIit0aGlzLl9yZWNvcmRpbmdGaWxlKTtcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiUmVjb3JkaW5nIGZpbGUgVVVJRCBub3Qgc2V0IVwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VkKCkge1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdTZXNzaW9uIGNsb3NlZC4nO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IobXNnPSdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgZHVyaW5nIHJlY29yZGluZy4nLGFkdmljZTpzdHJpbmc9J1BsZWFzZSByZXRyeS4nKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6IFJlY29yZGluZy4nO1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgIHRpdGxlOiAnUmVjb3JkaW5nIGVycm9yJyxcclxuICAgICAgICBtc2c6IG1zZyxcclxuICAgICAgICBhZHZpY2U6IGFkdmljZVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==