speechrecorderng 3.4.3 → 3.4.5

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 (68) hide show
  1. package/esm2020/lib/action/action.mjs +3 -3
  2. package/esm2020/lib/audio/audio_display.mjs +9 -11
  3. package/esm2020/lib/audio/audio_player.mjs +4 -4
  4. package/esm2020/lib/audio/capture/capture.mjs +120 -106
  5. package/esm2020/lib/audio/io/stream.mjs +1 -1
  6. package/esm2020/lib/audio/net_audio_buffer.mjs +1 -1
  7. package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +2 -2
  8. package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +2 -2
  9. package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
  10. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
  11. package/esm2020/lib/audio/ui/audio_display_control.mjs +4 -4
  12. package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
  13. package/esm2020/lib/audio/ui/audiosignal.mjs +4 -4
  14. package/esm2020/lib/audio/ui/container.mjs +6 -6
  15. package/esm2020/lib/audio/ui/livelevel.mjs +4 -4
  16. package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +4 -4
  17. package/esm2020/lib/audio/ui/sonagram.mjs +4 -4
  18. package/esm2020/lib/db/inddb.mjs +4 -4
  19. package/esm2020/lib/net/uploader.mjs +31 -28
  20. package/esm2020/lib/speechrecorder/project/project.service.mjs +7 -7
  21. package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +53 -51
  22. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +124 -116
  23. package/esm2020/lib/speechrecorder/script/script.service.mjs +4 -4
  24. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +26 -27
  25. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +1 -1
  26. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +34 -32
  27. package/esm2020/lib/speechrecorder/session/progress.mjs +4 -4
  28. package/esm2020/lib/speechrecorder/session/prompting.mjs +16 -16
  29. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +4 -4
  30. package/esm2020/lib/speechrecorder/session/recording_list.mjs +4 -4
  31. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
  32. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +6 -6
  33. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +20 -19
  34. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +43 -41
  35. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +147 -137
  36. package/esm2020/lib/speechrecorder/session/session.service.mjs +15 -12
  37. package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
  38. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +4 -4
  39. package/esm2020/lib/speechrecorder/session/warning_bar.mjs +4 -4
  40. package/esm2020/lib/speechrecorder/spruploader.mjs +4 -4
  41. package/esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -2
  42. package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
  43. package/esm2020/lib/speechrecorderng.component.mjs +6 -6
  44. package/esm2020/lib/speechrecorderng.module.mjs +5 -5
  45. package/esm2020/lib/spr.config.mjs +4 -4
  46. package/esm2020/lib/spr.module.version.mjs +2 -2
  47. package/esm2020/lib/ui/canvas_layer_comp.mjs +4 -4
  48. package/esm2020/lib/ui/message_dialog.mjs +4 -4
  49. package/esm2020/lib/ui/recordingitem_display.mjs +8 -8
  50. package/esm2020/lib/ui/responsive_component.mjs +4 -4
  51. package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +4 -4
  52. package/fesm2015/speechrecorderng.mjs +744 -701
  53. package/fesm2015/speechrecorderng.mjs.map +1 -1
  54. package/fesm2020/speechrecorderng.mjs +744 -701
  55. package/fesm2020/speechrecorderng.mjs.map +1 -1
  56. package/lib/action/action.d.ts +1 -1
  57. package/lib/audio/audio_display.d.ts +1 -3
  58. package/lib/audio/capture/capture.d.ts +2 -0
  59. package/lib/audio/io/stream.d.ts +1 -1
  60. package/lib/net/uploader.d.ts +6 -6
  61. package/lib/speechrecorder/project/project.service.d.ts +4 -4
  62. package/lib/speechrecorder/script/script.service.d.ts +2 -2
  63. package/lib/speechrecorder/session/audiorecorder.d.ts +1 -2
  64. package/lib/speechrecorder/session/basicrecorder.d.ts +1 -1
  65. package/lib/speechrecorder/session/controlpanel.d.ts +1 -1
  66. package/lib/speechrecorder/session/session.service.d.ts +2 -2
  67. package/lib/spr.module.version.d.ts +1 -1
  68. package/package.json +14 -14
@@ -656,4 +656,4 @@ BasicRecorder = __decorate([
656
656
  __param(5, Inject(SPEECHRECORDER_CONFIG))
657
657
  ], BasicRecorder);
658
658
  export { BasicRecorder };
659
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNyZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2Jhc2ljcmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBYyxnQkFBZ0IsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFJL0UsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUMsTUFBTSxFQUFnQixTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRSxPQUFPLEVBQW9CLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFHN0UsT0FBTyxFQUNMLG9DQUFvQyxFQUVwQyx1Q0FBdUMsRUFDeEMsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8s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QUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsR0FBQyw0Q0FBNEMsRUFBQyxTQUFjLGVBQWU7UUFDbEYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsU0FBUyxHQUFHLG1CQUFtQixDQUFDO1FBQ3JDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUM5QixJQUFJLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLE9BQU87Z0JBQ2IsS0FBSyxFQUFFLGlCQUFpQjtnQkFDeEIsR0FBRyxFQUFFLEdBQUc7Z0JBQ1IsTUFBTSxFQUFFLE1BQU07YUFDZjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FFRixDQUFBO0FBN21Cd0Isb0RBQXNDLEdBQVEsT0FBTyxHQUFDLENBQUUsQ0FBQSxDQUFDLHlDQUF5QztBQUdsRyx3Q0FBMEIsR0FBUSxFQUFHLENBQUE7QUEyQjVELHVFQUF1RTtBQUNoRCx1Q0FBeUIsR0FBQyxLQUFNLENBQUE7QUE5Q25DLGFBQWE7SUE0SGxCLFdBQUEsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUE7R0E1SHhCLGFBQWEsQ0E0bkJsQztTQTVuQnFCLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zcG9ydEFjdGlvbnN9IGZyb20gXCIuL2NvbnRyb2xwYW5lbFwiO1xyXG5pbXBvcnQge0Jyb3dzZXIsIFVzZXJBZ2VudCwgVXNlckFnZW50QnVpbGRlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3VhLXBhcnNlclwiO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge01lc3NhZ2VEaWFsb2d9IGZyb20gXCIuLi8uLi91aS9tZXNzYWdlX2RpYWxvZ1wiO1xyXG5pbXBvcnQge1Nlc3Npb259IGZyb20gXCIuL3Nlc3Npb25cIjtcclxuaW1wb3J0IHtTZXNzaW9uU2VydmljZX0gZnJvbSBcIi4vc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXVkaW9DYXB0dXJlfSBmcm9tIFwiLi4vLi4vYXVkaW8vY2FwdHVyZS9jYXB0dXJlXCI7XHJcbmltcG9ydCB7QXVkaW9EZXZpY2UsIEF1ZGlvU3RvcmFnZVR5cGUsIEF1dG9HYWluQ29udHJvbENvbmZpZ30gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge0xldmVsTWVhc3VyZSwgU3RyZWFtTGV2ZWxNZWFzdXJlfSBmcm9tIFwiLi4vLi4vYXVkaW8vZHNwL2xldmVsX21lYXN1cmVcIjtcclxuaW1wb3J0IHtBdWRpb1BsYXllcn0gZnJvbSBcIi4uLy4uL2F1ZGlvL3BsYXliYWNrL3BsYXllclwiO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtBdWRpb0NsaXB9IGZyb20gXCIuLi8uLi9hdWRpby9wZXJzaXN0b3JcIjtcclxuaW1wb3J0IHtBY3Rpb259IGZyb20gXCIuLi8uLi9hY3Rpb24vYWN0aW9uXCI7XHJcbmltcG9ydCB7TUlOX0RCX0xFVkVMfSBmcm9tIFwiLi4vLi4vdWkvcmVjb3JkaW5naXRlbV9kaXNwbGF5XCI7XHJcbmltcG9ydCB7VXBsb2FkLCBVcGxvYWRIb2xkZXIsIFVwbG9hZFNldH0gZnJvbSBcIi4uLy4uL25ldC91cGxvYWRlclwiO1xyXG5pbXBvcnQge0NoYW5nZURldGVjdG9yUmVmLCBJbmplY3R9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7U1BFRUNIUkVDT1JERVJfQ09ORklHLCBTcGVlY2hSZWNvcmRlckNvbmZpZ30gZnJvbSBcIi4uLy4uL3Nwci5jb25maWdcIjtcclxuaW1wb3J0IHtTcGVlY2hSZWNvcmRlclVwbG9hZGVyfSBmcm9tIFwiLi4vc3BydXBsb2FkZXJcIjtcclxuXHJcbmltcG9ydCB7XHJcbiAgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtLFxyXG4gIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtLFxyXG4gIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtTXVsdGlwbGllclxyXG59IGZyb20gXCIuLi8uLi9hdWRpby9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtSZWNvcmRpbmdGaWxlLCBTcHJSZWNvcmRpbmdGaWxlfSBmcm9tIFwiLi4vcmVjb3JkaW5nXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7VVVJRH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XHJcbmltcG9ydCB7V2FrZUxvY2tNYW5hZ2VyfSBmcm9tIFwiLi4vLi4vdXRpbHMvd2FrZV9sb2NrXCI7XHJcbmltcG9ydCB7U3RhdGUgYXMgTGl2ZUxldmVsU3RhdGV9IGZyb20gXCIuLi8uLi9hdWRpby91aS9saXZlbGV2ZWxcIlxyXG5pbXBvcnQge1BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR9IGZyb20gXCIuLi8uLi9hdWRpby9pbmRkYl9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtSZXNwb25zaXZlQ29tcG9uZW50fSBmcm9tIFwiLi4vLi4vdWkvcmVzcG9uc2l2ZV9jb21wb25lbnRcIjtcclxuaW1wb3J0IHtCcmVha3BvaW50T2JzZXJ2ZXJ9IGZyb20gXCJAYW5ndWxhci9jZGsvbGF5b3V0XCI7XHJcblxyXG5leHBvcnQgY29uc3QgRk9SQ0VfUkVRVUVTVF9BVURJT19QRVJNSVNTSU9OUz1mYWxzZTtcclxuZXhwb3J0IGNvbnN0IFJFQ0ZJTEVfQVBJX0NUWCA9ICdyZWNmaWxlJztcclxuZXhwb3J0IGNvbnN0IE1BWF9SRUNPUkRJTkdfVElNRV9NUyA9IDEwMDAgKiA2MCAqIDYwICogNjA7IC8vIDEgaG91clxyXG5cclxuZXhwb3J0IGNvbnN0IExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUyA9IDAuMTsgIC8vIDEwMG1zXHJcblxyXG5leHBvcnQgY29uc3QgTk9TTEVFUF9WSURFT19USVRMRT0nTm8gU2xlZXAnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXJ7XHJcbiAgcG9zdEF1ZGlvU3RyZWFtU3RhcnQoKTp2b2lkO1xyXG4gIHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyLGNodW5rSWR4Om51bWJlcik6dm9pZDtcclxuICBwb3N0QXVkaW9TdHJlYW1FbmQoY2h1bmtDb3VudDpudW1iZXIpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDaHVua01hbmFnZXIgaW1wbGVtZW50cyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXtcclxuXHJcbiAgc2V0IHJlY29yZGluZ0ZpbGUodmFsdWU6IFNwclJlY29yZGluZ0ZpbGUpIHtcclxuICAgIHRoaXMuX3JmID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoYW5uZWxzOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgc2FtcGxlUmF0ZTpudW1iZXI9LTE7XHJcblxyXG4gIHByaXZhdGUgX3JmITpTcHJSZWNvcmRpbmdGaWxlO1xyXG5cclxuICBwcml2YXRlIGNodW5rSWR4Om51bWJlcj0wO1xyXG5cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXI6Q2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICAgIC8vIE5vdGhpbmcgdG8gZG9cclxuICB9XHJcblxyXG4gIGZsdXNoKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIucG9zdEF1ZGlvU3RyZWFtRW5kKHRoaXMuY2h1bmtJZHgpO1xyXG4gIH1cclxuXHJcbiAgbmV4dFN0cmVhbSgpOiB2b2lkIHtcclxuICAgIC8vIHJlc2V0IGNodW5rIGNvdW50ZXJcclxuICAgIHRoaXMuY2h1bmtJZHg9MDtcclxuICAgIHRoaXMuY2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyLnBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk7XHJcbiAgfVxyXG5cclxuICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlciwgc2FtcGxlUmF0ZTogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5uZWxzPWNoYW5uZWxzO1xyXG4gICAgdGhpcy5zYW1wbGVSYXRlPXNhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICB3cml0ZShidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCBhQ3R4PUF1ZGlvQ29udGV4dFByb3ZpZGVyLmF1ZGlvQ29udGV4dEluc3RhbmNlKCk7XHJcbiAgICBsZXQgYkNocz1idWZmZXJzLmxlbmd0aDtcclxuICAgIGxldCBmcmFtZUxlbj0wO1xyXG4gICAgaWYoYUN0eCAmJiBiQ2hzPjApIHtcclxuICAgICAgZnJhbWVMZW49YnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgbGV0IGFkID0gYUN0eC5jcmVhdGVCdWZmZXIodGhpcy5jaGFubmVscywgZnJhbWVMZW4sIHRoaXMuc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbHM7IGNoKyspIHtcclxuICAgICAgICAgIGFkLmNvcHlUb0NoYW5uZWwoYnVmZmVyc1tjaF0sY2gpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNodW5rQXVkaW9CdWZmZXJSZWNlaXZlci5wb3N0Q2h1bmtBdWRpb0J1ZmZlcihhZCx0aGlzLmNodW5rSWR4KTtcclxuICAgICAgICB0aGlzLmNodW5rSWR4Kys7XHJcbiAgICAgIH1jYXRjaChlcnIpe1xyXG4gICAgICAgIC8vIFRPRE8gSGFuZGxlIGVycm9yc1xyXG4gICAgICAgIC8vIGlPUyBTYWZhcmkgc29tZXRpbWVzIHRocm93cyBOb3RTdXBwb3J0ZWRFcnJvclxyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgY3JlYXRlIGF1ZGlvIGJ1ZmZlciBmb3IgY2h1bmtlZCB1cGxvYWQuXCIpO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJOci4gb2YgY2hzOiBcIit0aGlzLmNoYW5uZWxzK1wiLCBmcmFtZSBsZW5ndGg6IFwiK2ZyYW1lTGVuK1wiLCBzYW1wbGUgcmF0ZTogXCIrdGhpcy5zYW1wbGVSYXRlKTtcclxuICAgICAgICBpZihlcnIgaW5zdGFuY2VvZiBET01FeGNlcHRpb24pe1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkRPTSBleGNlcHRpb246IE5hbWU6IFwiK2Vyci5uYW1lK1wiLCBNc2c6IFwiK2Vyci5tZXNzYWdlKTtcclxuICAgICAgICAgIGlmKGVyci5uYW1lPT09J05vdFN1cHBvcnRlZEVycm9yJyl7XHJcbiAgICAgICAgICAgIGlmKGZyYW1lTGVuPT0wKXtcclxuICAgICAgICAgICAgICAvLyBFbXB0eSBidWZmZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IENocm9taXVtXHJcbiAgICAgICAgICAgICAvLyBObyBkYXRhIHRvIHRyYW5zZmVyLCBidXQgdGhpcyBjYXNlIHNob3VsZCBuZXZlciBoYXBwZW5cclxuICAgICAgICAgICAgICByZXR1cm4gZnJhbWVMZW47XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfWVsc2UgaWYoZXJyLm5hbWU9PT0nUmFuZ2VFcnJvcicpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRE9NIFJhbmdlRXJyb3JcIik7XHJcbiAgICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnlcclxuICAgICAgICAgICAgLy8gVE9ETyBXaGF0IHRvIGRvID8/XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRE9NIEV4Y2VwdGlvbiB1bmtub3duXCIpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYgKGVyciBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ipe1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIlJhbmdlRXJyb3I6IE5hbWU6IFwiK2Vyci5uYW1lK1wiLCBNc2c6IFwiK2Vyci5tZXNzYWdlKTtcclxuICAgICAgICAgIC8vIE91dCBvZiBtZW1vcnlcclxuICAgICAgICAgIC8vIFRPRE8gV2hhdCB0byBkbyA/P1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNpY1JlY29yZGVyIGV4dGVuZHMgUmVzcG9uc2l2ZUNvbXBvbmVudHtcclxuXHJcbiAgcHJvdGVjdGVkIHVwZGF0ZVRpbWVySWQ6IGFueTtcclxuXHJcbiAgcHJvdGVjdGVkIG1heFJlY1RpbWVySWQ6IG51bWJlcnxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIG1heFJlY1RpbWVyUnVubmluZzogYm9vbGVhbj1mYWxzZTtcclxuXHJcbiAgZ2V0IG1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG1heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUzpudW1iZXI9Mjg4MDAwMCo1OyAvLyBEZWZhdWx0IDUgbWludXRlcyBvbmUgY2hhbm5lbCBhdCA0OGtIelxyXG4gIHByb3RlY3RlZCBfbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlczpudW1iZXI9QmFzaWNSZWNvcmRlci5ERUZBVUxUX01BWF9ORVRfQVVUT19NRU1fU1RPUkVfU0FNUExFUztcclxuXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0NIVU5LX1NJWkVfU0VDT05EUzpudW1iZXI9MzA7XHJcblxyXG4gIGdldCBjbGllbnRBdWRpb1N0b3JhZ2VUeXBlKCk6IEF1ZGlvU3RvcmFnZVR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgfVxyXG5cclxuICBzZXQgY2xpZW50QXVkaW9TdG9yYWdlVHlwZSh2YWx1ZTogQXVkaW9TdG9yYWdlVHlwZSkge1xyXG5cclxuICAgIGxldCBvbGRWYWx1ZT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlO1xyXG4gICAgdGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSA9IHZhbHVlO1xyXG4gICAgaWYodmFsdWUhPT1vbGRWYWx1ZSl7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCgpOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDtcclxuICB9XHJcblxyXG4gIHNldCBwZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0KHZhbHVlOiBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IHwgbnVsbCkge1xyXG4gICAgbGV0IG9sZFZhbHVlPXRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgICB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdmFsdWU7XHJcbiAgICBpZih2YWx1ZSE9PW9sZFZhbHVlKXtcclxuICAgICAgdGhpcy5jb25maWd1cmVTdHJlYW1DYXB0dXJlU3RyZWFtKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgLy8gRW5hYmxlIG9ubHkgZm9yIGRldmVsb3BlbW50L2RlYnVnIHB1cnBvc2VzIG9mIGFycmF5IGF1ZGlvIGJ1ZmZlcnMgISFcclxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZPUkNFX0FSUlJBWV9BVURJT19CVUZGRVI9ZmFsc2U7XHJcblxyXG4gIGdldCB1cGxvYWRDaHVua1NpemVTZWNvbmRzKCk6IG51bWJlcnxudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl91cGxvYWRDaHVua1NpemVTZWNvbmRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IHVwbG9hZENodW5rU2l6ZVNlY29uZHModmFsdWU6IG51bWJlcnxudWxsKSB7XHJcbiAgICBsZXQgb2xkVmFsdWU9dGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzO1xyXG4gICAgdGhpcy5fdXBsb2FkQ2h1bmtTaXplU2Vjb25kcyA9IHZhbHVlO1xyXG4gICAgaWYodmFsdWUhPT1vbGRWYWx1ZSl7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIHVzZXJBZ2VudDpVc2VyQWdlbnQ7XHJcbiAgc3RhdHVzTXNnOiBzdHJpbmc9Jyc7XHJcbiAgc3RhdHVzQWxlcnRUeXBlITogc3RyaW5nO1xyXG4gIHN0YXR1c1dhaXRpbmc6IGJvb2xlYW49ZmFsc2U7XHJcbiAgcmVhZG9ubHk9ZmFsc2U7XHJcbiAgcHJvdGVjdGVkIHJmVXVpZDpzdHJpbmd8bnVsbD1udWxsO1xyXG4gIHByb2Nlc3NpbmdSZWNvcmRpbmc9ZmFsc2U7XHJcbiAgYWM6IEF1ZGlvQ2FwdHVyZXxudWxsPW51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBfd2FrZUxvY2s6Ym9vbGVhbj1mYWxzZTtcclxuICAvLyBQcm9wZXJ0eSBhdWRpb0RldmljZXMgZnJvbSBwcm9qZWN0IGNvbmZpZzogbGlzdCBvZiBuYW1lcyBvZiBhbGxvd2VkIGF1ZGlvIGRldmljZXMuXHJcbiAgcHJvdGVjdGVkIF9hdWRpb0RldmljZXM6IEFycmF5PEF1ZGlvRGV2aWNlPiB8IG51bGx8IHVuZGVmaW5lZDtcclxuICBwcm90ZWN0ZWQgX3NlbGVjdGVkRGV2aWNlSWQ6c3RyaW5nfHVuZGVmaW5lZD11bmRlZmluZWQ7XHJcbiAgcHJvdGVjdGVkIHNlbENhcHR1cmVEZXZpY2VJZDogQ29uc3RyYWluRE9NU3RyaW5nIHwgbnVsbDtcclxuICBwcm90ZWN0ZWQgX2NoYW5uZWxDb3VudCA9IDI7XHJcbiAgcHJvdGVjdGVkIF9hdXRvR2FpbkNvbnRyb2xDb25maWdzOiBBcnJheTxBdXRvR2FpbkNvbnRyb2xDb25maWc+IHwgbnVsbHwgdW5kZWZpbmVkO1xyXG5cclxuICBfc2Vzc2lvbjogU2Vzc2lvbnxudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIF9yZWNvcmRpbmdGaWxlOlJlY29yZGluZ0ZpbGV8bnVsbD1udWxsO1xyXG5cclxuICB0cmFuc3BvcnRBY3Rpb25zOiBUcmFuc3BvcnRBY3Rpb25zO1xyXG4gIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+O1xyXG5cclxuICBwcm90ZWN0ZWQgc3RhcnRlZERhdGU6RGF0ZXxudWxsPW51bGw7XHJcblxyXG4gIHVwbG9hZFByb2dyZXNzOiBudW1iZXIgPSAxMDA7XHJcbiAgdXBsb2FkU3RhdHVzOiBzdHJpbmcgPSAnb2snXHJcbiAgcHJvdGVjdGVkIHVwbG9hZFNldDpVcGxvYWRTZXR8bnVsbD1udWxsO1xyXG5cclxuICBhdWRpb1NpZ25hbENvbGxhcHNlZCA9IHRydWU7XHJcblxyXG4gIHByb3RlY3RlZCBzdHJlYW1MZXZlbE1lYXN1cmU6IFN0cmVhbUxldmVsTWVhc3VyZTtcclxuICBwcm90ZWN0ZWQgbGV2ZWxNZWFzdXJlOiBMZXZlbE1lYXN1cmU7XHJcbiAgcGVha0xldmVsSW5EYjpudW1iZXI9TUlOX0RCX0xFVkVMO1xyXG4gIGF1ZGlvTG9hZGVkOmJvb2xlYW49ZmFsc2U7XHJcbiAgZGlzYWJsZUF1ZGlvRGV0YWlsczpib29sZWFuPWZhbHNlO1xyXG4gIHByb3RlY3RlZCBfY29udHJvbEF1ZGlvUGxheWVyOiBBdWRpb1BsYXllcnxudWxsPW51bGw7XHJcbiAgcHVibGljIGRpc3BsYXlBdWRpb0NsaXA6IEF1ZGlvQ2xpcCB8IG51bGw9bnVsbDtcclxuICBwcm90ZWN0ZWQgYXVkaW9GZXRjaFN1YnNjcmlwdGlvbjpTdWJzY3JpcHRpb258bnVsbD1udWxsO1xyXG5cclxuICBsaXZlTGV2ZWxEaXNwbGF5U3RhdGU6TGl2ZUxldmVsU3RhdGU9TGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAga2VlcExpdmVMZXZlbDpib29sZWFuPWZhbHNlO1xyXG4gIHByaXZhdGUgY2FsY0J1ZmZlckluZm9zU3Vic2NyOlN1YnNjcmlwdGlvbnxudWxsPW51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBkZXN0cm95ZWQ9ZmFsc2U7XHJcblxyXG4gIHByb3RlY3RlZCBuYXZpZ2F0aW9uRGlzYWJsZWQ9dHJ1ZTtcclxuXHJcbiAgcHJvdGVjdGVkIF91cGxvYWRDaHVua1NpemVTZWNvbmRzOm51bWJlcnxudWxsPW51bGw7XHJcbiAgLy89QmFzaWNSZWNvcmRlci5ERUZBVUxUX0NIVU5LX1NJWkVfU0VDT05EUztcclxuXHJcbiAgLy8gRGVmYXVsdDogQ29udGludW91cyBIVE1MNSBBdWRpbyBBUEkgQXVkaW9CdWZmZXIsIG5vIGNodW5rZWQgdXBsb2FkXHJcbiAgcHJvdGVjdGVkIF9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlOkF1ZGlvU3RvcmFnZVR5cGU9QXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFO1xyXG5cclxuICBwcm90ZWN0ZWQgX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ6UGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldHxudWxsPW51bGw7XHJcblxyXG4gIHByb3RlY3RlZCBfc2NyZWVuTG9ja2VkPWZhbHNlO1xyXG5cclxuICBwcml2YXRlIHdha2VMb2NrTWFuYWdlcj86V2FrZUxvY2tNYW5hZ2VyO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYnBvOkJyZWFrcG9pbnRPYnNlcnZlcixwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHNlc3Npb25TZXJ2aWNlOlNlc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIHVwbG9hZGVyOiBTcGVlY2hSZWNvcmRlclVwbG9hZGVyLFxyXG4gICAgICAgICAgICAgICAgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIHB1YmxpYyBjb25maWc/OiBTcGVlY2hSZWNvcmRlckNvbmZpZykge1xyXG4gICAgc3VwZXIoYnBvKTtcclxuICAgIHRoaXMudXNlckFnZW50PVVzZXJBZ2VudEJ1aWxkZXIudXNlckFnZW50KCk7XHJcbiAgICBjb25zdCBkZXRQZm09dGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRQbGF0Zm9ybTtcclxuICAgIGlmKGRldFBmbSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiRGV0ZWN0ZWQgcGxhdGZvcm06IFwiICtkZXRQZm0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGV0QnI9dGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRCcm93c2VyO1xyXG4gICAgY29uc3QgZGV0QnJWZXJzPXRoaXMudXNlckFnZW50LmRldGVjdGVkQnJvd3NlclZlcnNpb247XHJcbiAgICBpZihkZXRCcikge1xyXG4gICAgICBsZXQgZGV0QnJWZXJzU3RyPShkZXRCclZlcnMpPycgJytkZXRCclZlcnM6Jyc7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJEZXRlY3RlZCBicm93c2VyOiBcIiArZGV0QnIrZGV0QnJWZXJzU3RyKTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucyA9IG5ldyBUcmFuc3BvcnRBY3Rpb25zKCk7XHJcbiAgICB0aGlzLnBsYXlTdGFydEFjdGlvbiA9IG5ldyBBY3Rpb24oJ1BsYXknKTtcclxuICAgIHRoaXMubGV2ZWxNZWFzdXJlID0gbmV3IExldmVsTWVhc3VyZSgpO1xyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUgPSBuZXcgU3RyZWFtTGV2ZWxNZWFzdXJlKCk7XHJcbiAgICB0aGlzLnNlbENhcHR1cmVEZXZpY2VJZCA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXQgd2FrZUxvY2soKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fd2FrZUxvY2s7XHJcbiAgfVxyXG5cclxuICBzZXQgd2FrZUxvY2sodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX3dha2VMb2NrID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBlbmFibGVXYWtlTG9ja0NvbmQoKXtcclxuICAgIGlmKHRoaXMud2FrZUxvY2s9PT10cnVlKSB7XHJcbiAgICAgIGlmKCF0aGlzLndha2VMb2NrTWFuYWdlcil7XHJcbiAgICAgICAgdGhpcy53YWtlTG9ja01hbmFnZXI9bmV3IFdha2VMb2NrTWFuYWdlcigpO1xyXG4gICAgICAgIHRoaXMud2FrZUxvY2tNYW5hZ2VyLmJlaGF2aW9yU3ViamVjdC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAodikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NjcmVlbkxvY2tlZCA9IHY7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIldha2UgbG9jayBlcnJvciFcIilcclxuICAgICAgICAgICAgICB0aGlzLl9zY3JlZW5Mb2NrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy53YWtlTG9ja01hbmFnZXIuZW5hYmxlV2FrZUxvY2soKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRpc2FibGVXYWtlTG9ja0NvbmQoKXtcclxuICAgIHRoaXMud2FrZUxvY2tNYW5hZ2VyPy5kaXNhYmxlV2FrZUxvY2soKTtcclxuICB9XHJcblxyXG4gIGdldCBzY3JlZW5Mb2NrZWQoKXtcclxuICAgIHJldHVybiB0aGlzLl9zY3JlZW5Mb2NrZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgYXVkaW9EZXZpY2VzKGF1ZGlvRGV2aWNlczogQXJyYXk8QXVkaW9EZXZpY2U+IHwgbnVsbCB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fYXVkaW9EZXZpY2VzID0gYXVkaW9EZXZpY2VzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGF1dG9HYWluQ29udHJvbENvbmZpZ3MoYXV0b0dhaW5Db250cm9sQ29uZmlnczogQXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPnxudWxsfHVuZGVmaW5lZCl7XHJcbiAgICB0aGlzLl9hdXRvR2FpbkNvbnRyb2xDb25maWdzPWF1dG9HYWluQ29udHJvbENvbmZpZ3M7XHJcbiAgfVxyXG5cclxuICBzZXQgY2hhbm5lbENvdW50KGNoYW5uZWxDb3VudDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9jaGFubmVsQ291bnQgPSBjaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICBzZXQgc2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9ufG51bGwpIHtcclxuICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNlc3Npb24oKTpTZXNzaW9ufG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbjtcclxuICB9XHJcblxyXG4gIGVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKSB7XHJcbiAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdpbmZvJztcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlYWR5Lic7XHJcbiAgfVxyXG5cclxuICBjb25maWd1cmVTdHJlYW1DYXB0dXJlU3RyZWFtKCkge1xyXG4gICAgbGV0IG91dFN0cmVhbTtcclxuXHJcbiAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFIT09dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSB8fCB0aGlzLnVwbG9hZENodW5rU2l6ZVNlY29uZHMpIHtcclxuICAgICAgaWYoIXRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcyl7XHJcbiAgICAgICAgdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzPUJhc2ljUmVjb3JkZXIuREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFM7XHJcbiAgICAgIH1cclxuICAgICAgLy8gTXVsdGlwbHkgdGhlIGNhcHR1cmUgc3RyZWFtIHRvLi4uXHJcbiAgICAgIGxldCBzYXNtID0gbmV3IFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtTXVsdGlwbGllcigpO1xyXG5cclxuICAgICAgLy8gLi4udXBsb2FkIGF1ZGlvIGRhdGEgaW4gY2h1bmtzLi4uXHJcbiAgICAgIGxldCBjaE1uZyA9IG5ldyBDaHVua01hbmFnZXIodGhpcyk7ICAvLyBUaGUgY2h1bmsgbWFuYWdlciBjb25uZWN0cyB0aGUgY2h1bmtlZCBhdWRpbyBzdHJlYW0gdG8gdGhpcyBjbGFzcyB0byB1cGxvYWQgdGhlIGNodW5rc1xyXG4gICAgICBsZXQgY2hPc1VwbG9hZCA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0oY2hNbmcsIHRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcyk7IC8vIFRoZSBhdWRpbyBzdHJlYW0gY2h1bmtlciBpdHNlbGZcclxuICAgICAgc2FzbS5zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMucHVzaChjaE9zVXBsb2FkKTtcclxuXHJcbiAgICAgIC8vIC4uLmFuZCB0byBtZWFzdXJlIHRoZSBsZXZlbFxyXG4gICAgICBsZXQgY2hPc0x2bE1lYXMgPSBuZXcgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtKHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLCBMRVZFTF9CQVJfSU5URVJWQUxMX1NFQ09ORFMpXHJcbiAgICAgIHNhc20uc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zLnB1c2goY2hPc0x2bE1lYXMpO1xyXG5cclxuICAgICAgb3V0U3RyZWFtID0gc2FzbTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG91dFN0cmVhbSA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0odGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUsIExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUyk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMubWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcz10aGlzLl9tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzO1xyXG4gICAgICB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGU9dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZTtcclxuICAgICAgdGhpcy5hYy5hdWRpb091dFN0cmVhbSA9IG91dFN0cmVhbTtcclxuICAgICAgaWYoQXVkaW9TdG9yYWdlVHlwZS5EQl9DSFVOS0VEPT09dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSAmJiB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0IT09bnVsbCkge1xyXG4gICAgICAgIHRoaXMuYWMucGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCA9IHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBzaG93UmVjb3JkaW5nKCkge1xyXG4gICAgaWYodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5zdG9wKCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLmNhbGNCdWZmZXJJbmZvc1N1YnNjcil7XHJcbiAgICAgIHRoaXMuY2FsY0J1ZmZlckluZm9zU3Vic2NyLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5kaXNwbGF5QXVkaW9DbGlwKSB7XHJcbiAgICAgIGxldCBkYXA9dGhpcy5kaXNwbGF5QXVkaW9DbGlwO1xyXG4gICAgICBsZXQgYWRoPWRhcC5hdWRpb0RhdGFIb2xkZXI7XHJcbiAgICAgIGlmKGFkaCl7XHJcbiAgICAgICAgaWYoIXRoaXMua2VlcExpdmVMZXZlbCkge1xyXG4gICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5MT0FESU5HO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhZGguYWRkT25SZWFkeUxpc3RlbmVyKCgpPT57XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBdWRpbyBkYXRhIGhvbGRlciByZWFkeS4gRW5hYmxlIHBsYXliYWNrLiBBdWRpbyBsb2FkZWQgdHJ1ZS5cIilcclxuICAgICAgICAgIGlmKCF0aGlzLmtlZXBMaXZlTGV2ZWwpIHtcclxuICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRU5ERVJJTkc7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsY0J1ZmZlckluZm9zU3Vic2NyID0gdGhpcy5sZXZlbE1lYXN1cmUuY2FsY0J1ZmZlckxldmVsSW5mb3MoYWRoLCBMRVZFTF9CQVJfSU5URVJWQUxMX1NFQ09ORFMpLnN1YnNjcmliZSgobGV2ZWxJbmZvcykgPT4ge1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkxldmVsIGluZm9zOiBsZXZlbEluZm9zIG51bWJlciBzaXplOiBcIitsZXZlbEluZm9zLm51bWJlclNpemUoKSk7XHJcbiAgICAgICAgICAgICAgZGFwLmxldmVsSW5mb3MgPSBsZXZlbEluZm9zO1xyXG4gICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYXVkaW9Mb2FkZWQ9dHJ1ZTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGRhdGEgaG9sZGVyIGFkZGVkIG9uUmVhZHkuXCIpXHJcbiAgICAgIH1cclxuICAgICAgLy90aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5hdWRpb0xvYWRlZD1mYWxzZTtcclxuICAgICAgLy8gQ29sbGFwc2UgYXVkaW8gc2lnbmFsIGRpc3BsYXkgaWYgb3BlblxyXG4gICAgICBpZiAoIXRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQpIHtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydCgpIHtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnU3RhcnRpbmcgc2Vzc2lvbi4uLic7XHJcbiAgICB0aGlzLnN0YXR1c1dhaXRpbmc9ZmFsc2U7XHJcbiAgICBpZih0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uLnNlYWxlZCkge1xyXG4gICAgICAgIHRoaXMucmVhZG9ubHkgPSB0cnVlXHJcbiAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnU2Vzc2lvbiBzZWFsZWQhJztcclxuICAgICAgICAvL2xldCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFNlc3Npb25TZWFsZWREaWFsb2csIHt9KTtcclxuICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgICAgdGl0bGU6ICdFcnJvcicsXHJcbiAgICAgICAgICAgIG1zZzogXCJUaGlzIHNlc3Npb24gaXMgc2VhbGVkLiBSZWNvcmRpbmdzIGNhbm5vdCBiZSBhZGRlZCBhbnltb3JlLlwiLFxyXG4gICAgICAgICAgICBhZHZpY2U6ICdQbGVhc2UgYXNrIHlvdXIgZXhwZXJpbWVudGVyIHdoYXQgdG8gZG8gKGUuZyBzdGFydCBhIG5ldyBzZXNzaW9uKS4nLFxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBib2R5OiBhbnkgPSB7fTtcclxuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbi5zdGF0dXMgPT09IFwiQ1JFQVRFRFwiKSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiTE9BREVEXCI7XHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLmxvYWRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgYm9keS5sb2FkZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5sb2FkZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnJlc3RhcnRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgYm9keS5yZXN0YXJ0ZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5yZXN0YXJ0ZWREYXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBDaGVjayBicm93c2VyIGNvbXBhdGliaWxpdHlcclxuICAgIGlmKHRoaXMudXNlckFnZW50LmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuU2FmYXJpICYmIHRoaXMuX2NoYW5uZWxDb3VudD4xKXtcclxuICAgICAgbGV0IGVNc2c9XCJFcnJvcjogU2FmYXJpIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBzdGVyZW8gcmVjb3JkaW5ncy5cIjtcclxuICAgICAgY29uc29sZS5lcnJvcihlTXNnKTtcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnQnJvd3NlciBub3Qgc3VwcG9ydGVkJyxcclxuICAgICAgICAgIG1zZzogZU1zZyxcclxuICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIsIGUuZy4gTW96aWxsYSBGaXJlZm94LlwiXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIC8vY29uc29sZS5sb2coXCJTZXNzaW9uIElEOiBcIit0aGlzLl9zZXNzaW9uLnNlc3Npb24rIFwiIHN0YXR1czogXCIrdGhpcy5fc2Vzc2lvbi5zdGF0dXMpXHJcbiAgICB0aGlzLl9zZWxlY3RlZERldmljZUlkPXVuZGVmaW5lZDtcclxuXHJcbiAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgdGhpcy5hYyAmJiAoRk9SQ0VfUkVRVUVTVF9BVURJT19QRVJNSVNTSU9OUyB8fCAodGhpcy5fYXVkaW9EZXZpY2VzICYmIHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGggPiAwKSkpIHtcclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVxdWVzdGluZyBhdWRpbyBwZXJtaXNzaW9ucy4uLic7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG5cclxuICAgICAgdGhpcy5hYy5kZXZpY2VJbmZvcygobWRpcykgPT4ge1xyXG4gICAgICAgIGxldCBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBhdWRpb1BsYXlEZXZpY2VBdmFpbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChtZGlzKSB7XHJcbiAgICAgICAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWMucHJpbnREZXZpY2VzKG1kaXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKG1kaXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBtZGlpID0gMDsgbWRpaSA8IG1kaXMubGVuZ3RoOyBtZGlpKyspIHtcclxuICAgICAgICAgICAgICBsZXQgbWRpID0gbWRpc1ttZGlpXTtcclxuICAgICAgICAgICAgICBsZXQga2luZD1tZGkua2luZDtcclxuICAgICAgICAgICAgICBpZihraW5kID09PSBcImF1ZGlvaW5wdXRcIil7XHJcbiAgICAgICAgICAgICAgICBhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbD10cnVlO1xyXG4gICAgICAgICAgICAgIH1lbHNlIGlmKGtpbmQ9PT0gXCJhdWRpb291dHB1dFwiKXtcclxuICAgICAgICAgICAgICAgIGF1ZGlvUGxheURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb24gJiYgdGhpcy5fc2Vzc2lvbi50eXBlICE9PSAnVEVTVF9ERUZfQScgJiYgdGhpcy5fYXVkaW9EZXZpY2VzICYmIHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGxldCBmZGk6IE1lZGlhRGV2aWNlSW5mbyB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBhZEkgPSAwOyBhZEkgPCB0aGlzLl9hdWRpb0RldmljZXMubGVuZ3RoOyBhZEkrKykge1xyXG4gICAgICAgICAgICAgIGxldCBhZCA9IHRoaXMuX2F1ZGlvRGV2aWNlc1thZEldO1xyXG4gICAgICAgICAgICAgIGlmIChhZC5wbGF5YmFjaykge1xyXG4gICAgICAgICAgICAgICAgLy8gcHJvamVjdCBhdWRpbyBkZXZpY2UgY29uZmlnIGZvciBwbGF5YmFjayBkZXZpY2VcclxuICAgICAgICAgICAgICAgIC8vIG5vdCB1c2VkIGZvciBub3dcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBmb3IgKGxldCBtZGlpID0gMDsgbWRpaSA8IG1kaXMubGVuZ3RoOyBtZGlpKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBtZGkgPSBtZGlzW21kaWldO1xyXG4gICAgICAgICAgICAgICAgbGV0IGtpbmQ9bWRpLmtpbmQ7XHJcbiAgICAgICAgICAgICAgICBpZihraW5kID09PSBcImF1ZGlvaW5wdXRcIil7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvQ2FwdHVyZURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihraW5kPT09IFwiYXVkaW9vdXRwdXRcIil7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvUGxheURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYWQucmVnZXgpIHtcclxuICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1hdGNoPzogXFwnXCIrbWRpLmxhYmVsK1wiXFwnIFxcJ1wiK2FkLm5hbWUrXCJcXCdcIik7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChtZGkubGFiZWwubWF0Y2goYWQubmFtZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmZGkgPSBtZGk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1hdGNoIVwiKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKG1kaS5sYWJlbC50cmltKCkgPT09IGFkLm5hbWUudHJpbSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmRpID0gbWRpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoZmRpKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChmZGkpIHtcclxuICAgICAgICAgICAgICAvLyBtYXRjaGluZyBkZXZpY2UgZm91bmRcclxuXHJcbiAgICAgICAgICAgICAgLy8gTm90IGFibGUgdG8gb3BlbiBkZXZpY2UgaGVyZSBzaW5jZSBDaHJvbWUgNzFcclxuICAgICAgICAgICAgICAvLyBDaHJvbWUgNzEgcmVxdWlyZXMgYSB1c2VyIGdlc3R1cmUgYmVmb3JlIHRoZSBBdWRpb0NvbnRleHQgY2FuIGJlIHJlc3VtZWRcclxuICAgICAgICAgICAgICAvLyBzZXNzaW9ubWFuYWdlci50czo3MTIgT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIDEgY2hhbm5lbHNcclxuICAgICAgICAgICAgICAvLyBjYXB0dXJlLnRzOjEyOCBUaGUgQXVkaW9Db250ZXh0IHdhcyBub3QgYWxsb3dlZCB0byBzdGFydC4gSXQgbXVzdCBiZSByZXN1bWVkIChvciBjcmVhdGVkKSBhZnRlciBhIHVzZXIgZ2VzdHVyZSBvbiB0aGUgcGFnZS4gaHR0cHM6Ly9nb28uZ2wvN0s3V0x1XHJcbiAgICAgICAgICAgICAgLy8gcHVzaC4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMuQXVkaW9DYXB0dXJlLm9wZW4gQCBjYXB0dXJlLnRzOjEyOFxyXG5cclxuICAgICAgICAgICAgICAvL3RoaXMuYWMub3Blbih0aGlzLl9jaGFubmVsQ291bnQsIGZkaS5kZXZpY2VJZCk7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5pbmZvKFwiU2V0IHNlbGVjdGVkIGF1ZGlvIGRldmljZTogXFwnXCIgKyBmZGkubGFiZWwgKyBcIlxcJyBJZDogXFwnXCIgKyBmZGkuZGV2aWNlSWQgKyBcIlxcJ1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZERldmljZUlkID0gZmRpLmRldmljZUlkO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIGRldmljZSBub3QgZm91bmRcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogUmVxdWlyZWQgYXVkaW8gZGV2aWNlIG5vdCBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVpcmVkIGF1ZGlvIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgIG1zZzogXCJSZXF1aXJlZCBhdWRpbyBkZXZpY2Ugbm90IGZvdW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgY29ubmVjdCBhIHN1aXRhYmxlIGF1ZGlvIGRldmljZSBmb3IgdGhpcyBwcm9qZWN0IGFuZCByZXRyeSAocHJlc3MgdGhlIGJyb3dzZXIgcmVsb2FkIGJ1dHRvbikuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgaWYoIWF1ZGlvQ2FwdHVyZURldmljZUF2YWlsICYmICFhdWRpb1BsYXlEZXZpY2VBdmFpbCl7XHJcbiAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6IE5vIGF1ZGlvIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICd3YXJuJztcclxuICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgIG1zZzogXCJObyBhdWRpbyBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLnJlYWRvbmx5ICYmICFhdWRpb0NhcHR1cmVEZXZpY2VBdmFpbCkge1xyXG4gICAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdXQVJOSU5HOiBObyBhdWRpbyBjYXB0dXJlIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm5pbmcnO1xyXG4gICAgICAgICAgICAgICAgLy90aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIGNhcHR1cmUgZGV2aWNlJyxcclxuICAgICAgICAgICAgICAgICAgICBtc2c6IFwiTm8gYXVkaW8gY2FwdHVyZSBkZXZpY2UgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgICBhZHZpY2U6IFwiUGxlYXNlIGNvbm5lY3QgYW4gYXVkaW8gY2FwdHVyZSBkZXZpY2UgYW5kIHJldHJ5IChwcmVzcyB0aGUgYnJvd3NlciByZWxvYWQgYnV0dG9uKSBvciB0cnkgdG8gY29udGludWUgYW55d2F5LlwiXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIC8vIFNhZmFyaSBkb2VzIG5vdCBsaXN0IHBsYXliYWNrIGRldmljZXNcclxuICAgICAgICAgICAgICBpZiAoIWF1ZGlvUGxheURldmljZUF2YWlsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGaXJlZm94IGRvZXMgbm90IGVudW1lcmF0ZSBhdWRpb291dHB1dCBkZXZpY2VzXHJcbiAgICAgICAgICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGlzIHdhcm5pbmcsIGJlY2F1c2UgaXQgd291bGQgYWx3YXlzIGFwcGVhciBvbiBGaXJlZm94XHJcbiAgICAgICAgICAgICAgICAvLyBXaGVuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTg1MTIgaXMgZml4ZWQgdGhlIHdhcm5pbmcgY2FuIGJlIGVuYWJsZWQgZm9yIEZpcmVmb3ggYXMgd2VsbFxyXG5cclxuICAgICAgICAgICAgICAgIC8vIEl0IGlzIGFscmVhZHkgaW1wbGVtbmV0ZWQgYnV0IGtlcHQgYmVoaW5kIGEgcHJlZmVyZW5jZSBzZXR0aW5nIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTExNTI0MDFcclxuXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gT3V0cHV0IGRldmljZXMgYXJlIGxpc3RlZCBpZiBhYm91dDpjb25maWcgbWVkaWEuc2V0c2lua2lkLmVuYWJsZWQ9dHJ1ZVxyXG4gICAgICAgICAgICAgICAgLy8gYnV0IGRlZmF1bHQgc2V0dGluZyBpcyBmYWxzZVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTYW1lIHByb2JsZW0gd2l0aCBTYWZhcmlcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoISh0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLlNhZmFyaSB8fCB0aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI9PT1Ccm93c2VyLkZpcmVmb3gpKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIG5vIGRldmljZSBmb3VuZFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdXQVJOSU5HOiBObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UgYXZhaWxhYmxlISc7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm4nO1xyXG4gICAgICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm4nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdObyBhdWRpbyBwbGF5YmFjayBkZXZpY2UnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgbXNnOiBcIk5vIGF1ZGlvIHBsYXliYWNrIGRldmljZSBmb3VuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGFuIGF1ZGlvIHBsYXliYWNrIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBOb3QgYWJsZSB0byBvcGVuIGRldmljZSBoZXJlIHNpbmNlIENocm9tZSA3MVxyXG4gICAgICAgICAgICAvLyBDaHJvbWUgNzEgcmVxdWlyZXMgYSB1c2VyIGdlc3R1cmUgYmVmb3JlIHRoZSBBdWRpb0NvbnRleHQgY2FuIGJlIHJlc3VtZWRcclxuICAgICAgICAgICAgLy8gc2Vzc2lvbm1hbmFnZXIudHM6NzEyIE9wZW4gc2Vzc2lvbiB3aXRoIGRlZmF1bHQgYXVkaW8gZGV2aWNlIGZvciAxIGNoYW5uZWxzXHJcbiAgICAgICAgICAgIC8vIGNhcHR1cmUudHM6MTI4IFRoZSBBdWRpb0NvbnRleHQgd2FzIG5vdCBhbGxvd2VkIHRvIHN0YXJ0LiBJdCBtdXN0IGJlIHJlc3VtZWQgKG9yIGNyZWF0ZWQpIGFmdGVyIGEgdXNlciBnZXN0dXJlIG9uIHRoZSBwYWdlLiBodHRwczovL2dvby5nbC83SzdXTHVcclxuICAgICAgICAgICAgLy8gcHVzaC4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9jYXB0dXJlL2NhcHR1cmUudHMuQXVkaW9DYXB0dXJlLm9wZW4gQCBjYXB0dXJlLnRzOjEyOFxyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIFwiK3RoaXMuX2NoYW5uZWxDb3VudCtcIiBjaGFubmVsc1wiKTtcclxuICAgICAgICAgICAgLy90aGlzLmFjLm9wZW4odGhpcy5fY2hhbm5lbENvdW50KTtcclxuXHJcbiAgICAgICAgICAgIC8vIGVuYWJsZSBzdGFydCBnZXN0dXJlIGFueXdheVxyXG4gICAgICAgICAgICB0aGlzLmVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdGF0dXNNc2c9J1JlYWR5Lic7XHJcbiAgfVxyXG5cclxuICBzdGFydEl0ZW0oKSB7XHJcbiAgICB0aGlzLnJmVXVpZCA9IFVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5yZWNVVUlEID0gdGhpcy5yZlV1aWQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXJ0ZWREYXRlPW51bGw7XHJcbiAgICB0aGlzLmVuYWJsZVdha2VMb2NrQ29uZCgpO1xyXG4gICAgLy90aGlzLnJmVXVpZD1VVUlELmdlbmVyYXRlKCk7XHJcbiAgICB0aGlzLnVwbG9hZFNldD1udWxsO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5wYXVzZUFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwcm90ZWN0ZWQgc3RhcnRDYXB0dXJlKCkge1xyXG4gICAgaWYgKHRoaXMuYWMpIHtcclxuICAgICAgaWYgKCF0aGlzLmFjLm9wZW5lZCkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zZWxlY3RlZERldmljZUlkKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIk9wZW4gc2Vzc2lvbiB3aXRoIGF1ZGlvIGRldmljZSBJZDogXFwnXCIgKyB0aGlzLl9zZWxlY3RlZERldmljZUlkICsgXCJcXCcgZm9yIFwiICsgdGhpcy5fY2hhbm5lbENvdW50ICsgXCIgY2hhbm5lbHNcIik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIFwiICsgdGhpcy5fY2hhbm5lbENvdW50ICsgXCIgY2hhbm5lbHNcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWMub3Blbih0aGlzLl9jaGFubmVsQ291bnQsIHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQsIHRoaXMuX2F1dG9HYWluQ29udHJvbENvbmZpZ3MpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYWMuc3RhcnQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3BlbmVkKCkge1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnN0YXJ0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydGVkKCkge1xyXG5cclxuICAgIGlmKCF0aGlzLnN0YXJ0ZWREYXRlKSB7XHJcbiAgICAgIHRoaXMuc3RhcnRlZERhdGU9bmV3IERhdGUoKTtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwb3N0UmVjb3JkaW5nKHdhdkZpbGU6IFVpbnQ4QXJyYXksIHJlY1VybDogc3RyaW5nLHJmOlJlY29yZGluZ0ZpbGV8bnVsbCx1cGxvYWRIb2xkZXI/OlVwbG9hZEhvbGRlcikge1xyXG4gICAgbGV0IHdhdkJsb2IgPSBuZXcgQmxvYihbd2F2RmlsZV0sIHt0eXBlOiAnYXVkaW8vd2F2J30pO1xyXG4gICAgbGV0IHVsID0gbmV3IFVwbG9hZCh3YXZCbG9iLCByZWNVcmwscmYpO1xyXG4gICAgaWYodXBsb2FkSG9sZGVyKXtcclxuICAgICAgdXBsb2FkSG9sZGVyLnVwbG9hZD11bDtcclxuICAgIH1cclxuICAgIHRoaXMudXBsb2FkZXIucXVldWVVcGxvYWQodWwpO1xyXG4gIH1cclxuXHJcbiAgcG9zdEF1ZGlvU3RyZWFtU3RhcnQoKTogdm9pZCB7XHJcbiAgICBpZih0aGlzLnJmVXVpZCkge1xyXG4gICAgICB0aGlzLnVwbG9hZFNldD1uZXcgVXBsb2FkU2V0KCk7XHJcbiAgICAgIGxldCBhcGlFbmRQb2ludCA9ICcnO1xyXG4gICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgICAgICBhcGlFbmRQb2ludCA9IHRoaXMuY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChhcGlFbmRQb2ludCAhPT0gJycpIHtcclxuICAgICAgICBhcGlFbmRQb2ludCA9IGFwaUVuZFBvaW50ICsgJy8nXHJcbiAgICAgIH1cclxuICAgICAgbGV0IHNlc3Npb25zVXJsID0gYXBpRW5kUG9pbnQgKyBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0FQSV9DVFg7XHJcbiAgICAgIGxldCByZWNVcmw6IHN0cmluZyA9IHNlc3Npb25zVXJsICsgJy8nICsgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQgKyAnLycgKyBSRUNGSUxFX0FQSV9DVFggKyAnLycgKyB0aGlzLnJmVXVpZCArICcvcHJlcGFyZUNodW5rc1JlcXVlc3QnO1xyXG4gICAgICBsZXQgZmQgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgLy8gTm90ZTogQXQgbGVhc3Qgb25lIHBhcmFtZXRlciBtdXN0IGJlIHNldFxyXG4gICAgICBmZC5zZXQoJ3V1aWQnLHRoaXMucmZVdWlkKTtcclxuICAgICAgaWYoIXRoaXMuc3RhcnRlZERhdGUpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ZWREYXRlPW5ldyBEYXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgZmQuc2V0KCdzdGFydGVkRGF0ZScsdGhpcy5zdGFydGVkRGF0ZS50b0pTT04oKSk7XHJcblxyXG4gICAgICBsZXQgdWwgPSBuZXcgVXBsb2FkKGZkLCByZWNVcmwpO1xyXG4gICAgICB0aGlzLnVwbG9hZFNldC5hZGQodWwpO1xyXG4gICAgICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiUmVjb3JkaW5nIGZpbGUgVVVJRCBub3Qgc2V0IVwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbnByb3RlY3RlZCBzZXNzaW9uc0Jhc2VVcmwoKTpzdHJpbmcge1xyXG4gIGxldCBhcGlFbmRQb2ludCA9ICcnO1xyXG4gIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgYXBpRW5kUG9pbnQgPSB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludDtcclxuICB9XHJcbiAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgYXBpRW5kUG9pbnQgPSBhcGlFbmRQb2ludCArICcvJ1xyXG4gIH1cclxuICByZXR1cm4gIGFwaUVuZFBvaW50ICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYO1xyXG59XHJcblxyXG4gIGFic3RyYWN0IHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciwgY2h1bmtJZHg6IG51bWJlcik6IHZvaWQ7XHJcblxyXG4gIHBvc3RBdWRpb1N0cmVhbUVuZChjaHVua0NvdW50OiBudW1iZXIpOiB2b2lkIHtcclxuXHJcbiAgICBpZih0aGlzLnJmVXVpZCkge1xyXG5cclxuICAgICAgbGV0IHNlc3Npb25zVXJsID0gdGhpcy5zZXNzaW9uc0Jhc2VVcmwoKTtcclxuICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucmZVdWlkKycvY29uY2F0Q2h1bmtzUmVxdWVzdCc7XHJcbiAgICAgIGxldCBmZD1uZXcgRm9ybURhdGEoKTtcclxuICAgICAgZmQuc2V0KCd1dWlkJyx0aGlzLnJmVXVpZCk7XHJcbiAgICAgIGZkLnNldCgnY2h1bmtDb3VudCcsY2h1bmtDb3VudC50b1N0cmluZygpKTtcclxuICAgICAgbGV0IHVsID0gbmV3IFVwbG9hZChmZCwgcmVjVXJsLHRoaXMuX3JlY29yZGluZ0ZpbGUpO1xyXG4gICAgICBpZih0aGlzLnVwbG9hZFNldCl7XHJcbiAgICAgICAgdGhpcy51cGxvYWRTZXQuYWRkKHVsKTtcclxuICAgICAgICB0aGlzLnVwbG9hZFNldC5jb21wbGV0ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudXBsb2FkZXIucXVldWVVcGxvYWQodWwpO1xyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoXCJRdWV1ZWQgZm9yIHVwbG9hZDogXCIrdGhpcy5fcmVjb3JkaW5nRmlsZSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc29sZS5lcnJvcihcIlJlY29yZGluZyBmaWxlIFVVSUQgbm90IHNldCFcIilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlZCgpIHtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnU2Vzc2lvbiBjbG9zZWQuJztcclxuICB9XHJcblxyXG4gIGVycm9yKG1zZz0nQW4gdW5rbm93biBlcnJvciBvY2N1cmVkIGR1cmluZyByZWNvcmRpbmcuJyxhZHZpY2U6c3RyaW5nPSdQbGVhc2UgcmV0cnkuJykge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiBSZWNvcmRpbmcuJztcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICB0aXRsZTogJ1JlY29yZGluZyBlcnJvcicsXHJcbiAgICAgICAgbXNnOiBtc2csXHJcbiAgICAgICAgYWR2aWNlOiBhZHZpY2VcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
659
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWNyZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9zcGVlY2hyZWNvcmRlci9zZXNzaW9uL2Jhc2ljcmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUUzRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFdEQsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBYyxnQkFBZ0IsRUFBd0IsTUFBTSxvQkFBb0IsQ0FBQztBQUN4RixPQUFPLEVBQUMsWUFBWSxFQUFFLGtCQUFrQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFJL0UsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUMsTUFBTSxFQUFnQixTQUFTLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRSxPQUFPLEVBQW9CLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN4RCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFHN0UsT0FBTyxFQUNMLG9DQUFvQyxFQUVwQyx1Q0FBdUMsRUFDeEMsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDdkMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3RELE9BQU8s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QUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7SUFDckMsQ0FBQztJQUVELEtBQUssQ0FBQyxHQUFHLEdBQUMsNENBQTRDLEVBQUMsU0FBYyxlQUFlO1FBQ2xGLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxtQkFBbUIsQ0FBQztRQUNyQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDOUIsSUFBSSxFQUFFO2dCQUNKLElBQUksRUFBRSxPQUFPO2dCQUNiLEtBQUssRUFBRSxpQkFBaUI7Z0JBQ3hCLEdBQUcsRUFBRSxHQUFHO2dCQUNSLE1BQU0sRUFBRSxNQUFNO2FBQ2Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUYsQ0FBQTtBQTdtQndCLG9EQUFzQyxHQUFRLE9BQU8sR0FBQyxDQUFFLENBQUEsQ0FBQyx5Q0FBeUM7QUFHbEcsd0NBQTBCLEdBQVEsRUFBRyxDQUFBO0FBMkI1RCx1RUFBdUU7QUFDaEQsdUNBQXlCLEdBQUMsS0FBTSxDQUFBO0FBOUNuQyxhQUFhO0lBNEhsQixXQUFBLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFBO0dBNUh4QixhQUFhLENBNG5CbEM7U0E1bkJxQixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtUcmFuc3BvcnRBY3Rpb25zfSBmcm9tIFwiLi9jb250cm9scGFuZWxcIjtcclxuaW1wb3J0IHtCcm93c2VyLCBVc2VyQWdlbnQsIFVzZXJBZ2VudEJ1aWxkZXJ9IGZyb20gXCIuLi8uLi91dGlscy91YS1wYXJzZXJcIjtcclxuaW1wb3J0IHtNYXREaWFsb2d9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2dcIjtcclxuaW1wb3J0IHtNZXNzYWdlRGlhbG9nfSBmcm9tIFwiLi4vLi4vdWkvbWVzc2FnZV9kaWFsb2dcIjtcclxuaW1wb3J0IHtTZXNzaW9ufSBmcm9tIFwiLi9zZXNzaW9uXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge0F1ZGlvQ2FwdHVyZX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2NhcHR1cmUvY2FwdHVyZVwiO1xyXG5pbXBvcnQge0F1ZGlvRGV2aWNlLCBBdWRpb1N0b3JhZ2VUeXBlLCBBdXRvR2FpbkNvbnRyb2xDb25maWd9IGZyb20gXCIuLi9wcm9qZWN0L3Byb2plY3RcIjtcclxuaW1wb3J0IHtMZXZlbE1lYXN1cmUsIFN0cmVhbUxldmVsTWVhc3VyZX0gZnJvbSBcIi4uLy4uL2F1ZGlvL2RzcC9sZXZlbF9tZWFzdXJlXCI7XHJcbmltcG9ydCB7QXVkaW9QbGF5ZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9wbGF5YmFjay9wbGF5ZXJcIjtcclxuaW1wb3J0IHtTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGVyc2lzdG9yXCI7XHJcbmltcG9ydCB7QWN0aW9ufSBmcm9tIFwiLi4vLi4vYWN0aW9uL2FjdGlvblwiO1xyXG5pbXBvcnQge01JTl9EQl9MRVZFTH0gZnJvbSBcIi4uLy4uL3VpL3JlY29yZGluZ2l0ZW1fZGlzcGxheVwiO1xyXG5pbXBvcnQge1VwbG9hZCwgVXBsb2FkSG9sZGVyLCBVcGxvYWRTZXR9IGZyb20gXCIuLi8uLi9uZXQvdXBsb2FkZXJcIjtcclxuaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgSW5qZWN0fSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7U3BlZWNoUmVjb3JkZXJVcGxvYWRlcn0gZnJvbSBcIi4uL3NwcnVwbG9hZGVyXCI7XHJcblxyXG5pbXBvcnQge1xyXG4gIFNlcXVlbmNlQXVkaW9GbG9hdDMyQ2h1bmtlck91dFN0cmVhbSxcclxuICBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSxcclxuICBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbU11bHRpcGxpZXJcclxufSBmcm9tIFwiLi4vLi4vYXVkaW8vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nRmlsZSwgU3ByUmVjb3JkaW5nRmlsZX0gZnJvbSBcIi4uL3JlY29yZGluZ1wiO1xyXG5pbXBvcnQge0F1ZGlvQ29udGV4dFByb3ZpZGVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vY29udGV4dFwiO1xyXG5pbXBvcnQge1VVSUR9IGZyb20gXCIuLi8uLi91dGlscy91dGlsc1wiO1xyXG5pbXBvcnQge1dha2VMb2NrTWFuYWdlcn0gZnJvbSBcIi4uLy4uL3V0aWxzL3dha2VfbG9ja1wiO1xyXG5pbXBvcnQge1N0YXRlIGFzIExpdmVMZXZlbFN0YXRlfSBmcm9tIFwiLi4vLi4vYXVkaW8vdWkvbGl2ZWxldmVsXCJcclxuaW1wb3J0IHtQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fSBmcm9tIFwiLi4vLi4vYXVkaW8vaW5kZGJfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7UmVzcG9uc2l2ZUNvbXBvbmVudH0gZnJvbSBcIi4uLy4uL3VpL3Jlc3BvbnNpdmVfY29tcG9uZW50XCI7XHJcbmltcG9ydCB7QnJlYWtwb2ludE9ic2VydmVyfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2xheW91dFwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IEZPUkNFX1JFUVVFU1RfQVVESU9fUEVSTUlTU0lPTlM9ZmFsc2U7XHJcbmV4cG9ydCBjb25zdCBSRUNGSUxFX0FQSV9DVFggPSAncmVjZmlsZSc7XHJcbmV4cG9ydCBjb25zdCBNQVhfUkVDT1JESU5HX1RJTUVfTVMgPSAxMDAwICogNjAgKiA2MCAqIDYwOyAvLyAxIGhvdXJcclxuXHJcbmV4cG9ydCBjb25zdCBMRVZFTF9CQVJfSU5URVJWQUxMX1NFQ09ORFMgPSAwLjE7ICAvLyAxMDBtc1xyXG5cclxuZXhwb3J0IGNvbnN0IE5PU0xFRVBfVklERU9fVElUTEU9J05vIFNsZWVwJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVye1xyXG4gIHBvc3RBdWRpb1N0cmVhbVN0YXJ0KCk6dm9pZDtcclxuICBwb3N0Q2h1bmtBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcixjaHVua0lkeDpudW1iZXIpOnZvaWQ7XHJcbiAgcG9zdEF1ZGlvU3RyZWFtRW5kKGNodW5rQ291bnQ6bnVtYmVyKTp2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ2h1bmtNYW5hZ2VyIGltcGxlbWVudHMgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW17XHJcblxyXG4gIHNldCByZWNvcmRpbmdGaWxlKHZhbHVlOiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICB0aGlzLl9yZiA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGFubmVsczpudW1iZXI9MDtcclxuICBwcml2YXRlIHNhbXBsZVJhdGU6bnVtYmVyPS0xO1xyXG5cclxuICBwcml2YXRlIF9yZiE6U3ByUmVjb3JkaW5nRmlsZTtcclxuXHJcbiAgcHJpdmF0ZSBjaHVua0lkeDpudW1iZXI9MDtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyOkNodW5rQXVkaW9CdWZmZXJSZWNlaXZlcikge1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICAvLyBOb3RoaW5nIHRvIGRvXHJcbiAgfVxyXG5cclxuICBmbHVzaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2h1bmtBdWRpb0J1ZmZlclJlY2VpdmVyLnBvc3RBdWRpb1N0cmVhbUVuZCh0aGlzLmNodW5rSWR4KTtcclxuICB9XHJcblxyXG4gIG5leHRTdHJlYW0oKTogdm9pZCB7XHJcbiAgICAvLyByZXNldCBjaHVuayBjb3VudGVyXHJcbiAgICB0aGlzLmNodW5rSWR4PTA7XHJcbiAgICB0aGlzLmNodW5rQXVkaW9CdWZmZXJSZWNlaXZlci5wb3N0QXVkaW9TdHJlYW1TdGFydCgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsIHNhbXBsZVJhdGU6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFubmVscz1jaGFubmVscztcclxuICAgIHRoaXMuc2FtcGxlUmF0ZT1zYW1wbGVSYXRlO1xyXG4gIH1cclxuXHJcbiAgd3JpdGUoYnVmZmVyczogQXJyYXk8RmxvYXQzMkFycmF5Pik6IG51bWJlciB7XHJcbiAgICBsZXQgYUN0eD1BdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpO1xyXG4gICAgbGV0IGJDaHM9YnVmZmVycy5sZW5ndGg7XHJcbiAgICBsZXQgZnJhbWVMZW49MDtcclxuICAgIGlmKGFDdHggJiYgYkNocz4wKSB7XHJcbiAgICAgIGZyYW1lTGVuPWJ1ZmZlcnNbMF0ubGVuZ3RoO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCBhZCA9IGFDdHguY3JlYXRlQnVmZmVyKHRoaXMuY2hhbm5lbHMsIGZyYW1lTGVuLCB0aGlzLnNhbXBsZVJhdGUpO1xyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxzOyBjaCsrKSB7XHJcbiAgICAgICAgICBhZC5jb3B5VG9DaGFubmVsKGJ1ZmZlcnNbY2hdLGNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIucG9zdENodW5rQXVkaW9CdWZmZXIoYWQsdGhpcy5jaHVua0lkeCk7XHJcbiAgICAgICAgdGhpcy5jaHVua0lkeCsrO1xyXG4gICAgICB9Y2F0Y2goZXJyKXtcclxuICAgICAgICAvLyBUT0RPIEhhbmRsZSBlcnJvcnNcclxuICAgICAgICAvLyBpT1MgU2FmYXJpIHNvbWV0aW1lcyB0aHJvd3MgTm90U3VwcG9ydGVkRXJyb3JcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGNyZWF0ZSBhdWRpbyBidWZmZXIgZm9yIGNodW5rZWQgdXBsb2FkLlwiKTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiTnIuIG9mIGNoczogXCIrdGhpcy5jaGFubmVscytcIiwgZnJhbWUgbGVuZ3RoOiBcIitmcmFtZUxlbitcIiwgc2FtcGxlIHJhdGU6IFwiK3RoaXMuc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgaWYoZXJyIGluc3RhbmNlb2YgRE9NRXhjZXB0aW9uKXtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJET00gZXhjZXB0aW9uOiBOYW1lOiBcIitlcnIubmFtZStcIiwgTXNnOiBcIitlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICBpZihlcnIubmFtZT09PSdOb3RTdXBwb3J0ZWRFcnJvcicpe1xyXG4gICAgICAgICAgICBpZihmcmFtZUxlbj09MCl7XHJcbiAgICAgICAgICAgICAgLy8gRW1wdHkgYnVmZmVycyBhcmUgbm90IHN1cHBvcnRlZCBieSBDaHJvbWl1bVxyXG4gICAgICAgICAgICAgLy8gTm8gZGF0YSB0byB0cmFuc2ZlciwgYnV0IHRoaXMgY2FzZSBzaG91bGQgbmV2ZXIgaGFwcGVuXHJcbiAgICAgICAgICAgICAgcmV0dXJuIGZyYW1lTGVuO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNlIGlmKGVyci5uYW1lPT09J1JhbmdlRXJyb3InKXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkRPTSBSYW5nZUVycm9yXCIpO1xyXG4gICAgICAgICAgICAvLyBPdXQgb2YgbWVtb3J5XHJcbiAgICAgICAgICAgIC8vIFRPRE8gV2hhdCB0byBkbyA/P1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkRPTSBFeGNlcHRpb24gdW5rbm93blwiKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmIChlcnIgaW5zdGFuY2VvZiBSYW5nZUVycm9yKXtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJSYW5nZUVycm9yOiBOYW1lOiBcIitlcnIubmFtZStcIiwgTXNnOiBcIitlcnIubWVzc2FnZSk7XHJcbiAgICAgICAgICAvLyBPdXQgb2YgbWVtb3J5XHJcbiAgICAgICAgICAvLyBUT0RPIFdoYXQgdG8gZG8gPz9cclxuICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmcmFtZUxlbjtcclxuICB9XHJcblxyXG59XHJcblxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzaWNSZWNvcmRlciBleHRlbmRzIFJlc3BvbnNpdmVDb21wb25lbnR7XHJcblxyXG4gIHByb3RlY3RlZCB1cGRhdGVUaW1lcklkOiBhbnk7XHJcblxyXG4gIHByb3RlY3RlZCBtYXhSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByb3RlY3RlZCBtYXhSZWNUaW1lclJ1bm5pbmc6IGJvb2xlYW49ZmFsc2U7XHJcblxyXG4gIGdldCBtYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWF4QXV0b05ldE1lbVN0b3JlU2FtcGxlcztcclxuICB9XHJcblxyXG4gIHNldCBtYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzKHZhbHVlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9NQVhfTkVUX0FVVE9fTUVNX1NUT1JFX1NBTVBMRVM6bnVtYmVyPTI4ODAwMDAqNTsgLy8gRGVmYXVsdCA1IG1pbnV0ZXMgb25lIGNoYW5uZWwgYXQgNDhrSHpcclxuICBwcm90ZWN0ZWQgX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXM6bnVtYmVyPUJhc2ljUmVjb3JkZXIuREVGQVVMVF9NQVhfTkVUX0FVVE9fTUVNX1NUT1JFX1NBTVBMRVM7XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFM6bnVtYmVyPTMwO1xyXG5cclxuICBnZXQgY2xpZW50QXVkaW9TdG9yYWdlVHlwZSgpOiBBdWRpb1N0b3JhZ2VUeXBlIHtcclxuICAgIHJldHVybiB0aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGNsaWVudEF1ZGlvU3RvcmFnZVR5cGUodmFsdWU6IEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuXHJcbiAgICBsZXQgb2xkVmFsdWU9dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZTtcclxuICAgIHRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUgPSB2YWx1ZTtcclxuICAgIGlmKHZhbHVlIT09b2xkVmFsdWUpe1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQoKTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCh2YWx1ZTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwpIHtcclxuICAgIGxldCBvbGRWYWx1ZT10aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0O1xyXG4gICAgdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCA9IHZhbHVlO1xyXG4gICAgaWYodmFsdWUhPT1vbGRWYWx1ZSl7XHJcbiAgICAgIHRoaXMuY29uZmlndXJlU3RyZWFtQ2FwdHVyZVN0cmVhbSgpO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIC8vIEVuYWJsZSBvbmx5IGZvciBkZXZlbG9wZW1udC9kZWJ1ZyBwdXJwb3NlcyBvZiBhcnJheSBhdWRpbyBidWZmZXJzICEhXHJcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBGT1JDRV9BUlJSQVlfQVVESU9fQlVGRkVSPWZhbHNlO1xyXG5cclxuICBnZXQgdXBsb2FkQ2h1bmtTaXplU2Vjb25kcygpOiBudW1iZXJ8bnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXBsb2FkQ2h1bmtTaXplU2Vjb25kcztcclxuICB9XHJcblxyXG4gIHNldCB1cGxvYWRDaHVua1NpemVTZWNvbmRzKHZhbHVlOiBudW1iZXJ8bnVsbCkge1xyXG4gICAgbGV0IG9sZFZhbHVlPXRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcztcclxuICAgIHRoaXMuX3VwbG9hZENodW5rU2l6ZVNlY29uZHMgPSB2YWx1ZTtcclxuICAgIGlmKHZhbHVlIT09b2xkVmFsdWUpe1xyXG4gICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCB1c2VyQWdlbnQ6VXNlckFnZW50O1xyXG4gIHN0YXR1c01zZzogc3RyaW5nPScnO1xyXG4gIHN0YXR1c0FsZXJ0VHlwZSE6IHN0cmluZztcclxuICBzdGF0dXNXYWl0aW5nOiBib29sZWFuPWZhbHNlO1xyXG4gIHJlYWRvbmx5PWZhbHNlO1xyXG4gIHByb3RlY3RlZCByZlV1aWQ6c3RyaW5nfG51bGw9bnVsbDtcclxuICBwcm9jZXNzaW5nUmVjb3JkaW5nPWZhbHNlO1xyXG4gIGFjOiBBdWRpb0NhcHR1cmV8bnVsbD1udWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgX3dha2VMb2NrOmJvb2xlYW49ZmFsc2U7XHJcbiAgLy8gUHJvcGVydHkgYXVkaW9EZXZpY2VzIGZyb20gcHJvamVjdCBjb25maWc6IGxpc3Qgb2YgbmFtZXMgb2YgYWxsb3dlZCBhdWRpbyBkZXZpY2VzLlxyXG4gIHByb3RlY3RlZCBfYXVkaW9EZXZpY2VzOiBBcnJheTxBdWRpb0RldmljZT4gfCBudWxsfCB1bmRlZmluZWQ7XHJcbiAgcHJvdGVjdGVkIF9zZWxlY3RlZERldmljZUlkOnN0cmluZ3x1bmRlZmluZWQ9dW5kZWZpbmVkO1xyXG4gIHByb3RlY3RlZCBzZWxDYXB0dXJlRGV2aWNlSWQ6IENvbnN0cmFpbkRPTVN0cmluZyB8IG51bGw7XHJcbiAgcHJvdGVjdGVkIF9jaGFubmVsQ291bnQgPSAyO1xyXG4gIHByb3RlY3RlZCBfYXV0b0dhaW5Db250cm9sQ29uZmlnczogQXJyYXk8QXV0b0dhaW5Db250cm9sQ29uZmlnPiB8IG51bGx8IHVuZGVmaW5lZDtcclxuXHJcbiAgX3Nlc3Npb246IFNlc3Npb258bnVsbD1udWxsO1xyXG4gIHByb3RlY3RlZCBfcmVjb3JkaW5nRmlsZTpSZWNvcmRpbmdGaWxlfG51bGw9bnVsbDtcclxuXHJcbiAgdHJhbnNwb3J0QWN0aW9uczogVHJhbnNwb3J0QWN0aW9ucztcclxuICBwbGF5U3RhcnRBY3Rpb246IEFjdGlvbjx2b2lkPjtcclxuXHJcbiAgcHJvdGVjdGVkIHN0YXJ0ZWREYXRlOkRhdGV8bnVsbD1udWxsO1xyXG5cclxuICB1cGxvYWRQcm9ncmVzczogbnVtYmVyID0gMTAwO1xyXG4gIHVwbG9hZFN0YXR1czogc3RyaW5nID0gJ29rJ1xyXG4gIHByb3RlY3RlZCB1cGxvYWRTZXQ6VXBsb2FkU2V0fG51bGw9bnVsbDtcclxuXHJcbiAgYXVkaW9TaWduYWxDb2xsYXBzZWQgPSB0cnVlO1xyXG5cclxuICBwcm90ZWN0ZWQgc3RyZWFtTGV2ZWxNZWFzdXJlOiBTdHJlYW1MZXZlbE1lYXN1cmU7XHJcbiAgcHJvdGVjdGVkIGxldmVsTWVhc3VyZTogTGV2ZWxNZWFzdXJlO1xyXG4gIHBlYWtMZXZlbEluRGI6bnVtYmVyPU1JTl9EQl9MRVZFTDtcclxuICBhdWRpb0xvYWRlZDpib29sZWFuPWZhbHNlO1xyXG4gIGRpc2FibGVBdWRpb0RldGFpbHM6Ym9vbGVhbj1mYWxzZTtcclxuICBwcm90ZWN0ZWQgX2NvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXJ8bnVsbD1udWxsO1xyXG4gIHB1YmxpYyBkaXNwbGF5QXVkaW9DbGlwOiBBdWRpb0NsaXAgfCBudWxsPW51bGw7XHJcbiAgcHJvdGVjdGVkIGF1ZGlvRmV0Y2hTdWJzY3JpcHRpb246U3Vic2NyaXB0aW9ufG51bGw9bnVsbDtcclxuXHJcbiAgbGl2ZUxldmVsRGlzcGxheVN0YXRlOkxpdmVMZXZlbFN0YXRlPUxpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gIGtlZXBMaXZlTGV2ZWw6Ym9vbGVhbj1mYWxzZTtcclxuICBwcml2YXRlIGNhbGNCdWZmZXJJbmZvc1N1YnNjcjpTdWJzY3JpcHRpb258bnVsbD1udWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgZGVzdHJveWVkPWZhbHNlO1xyXG5cclxuICBwcm90ZWN0ZWQgbmF2aWdhdGlvbkRpc2FibGVkPXRydWU7XHJcblxyXG4gIHByb3RlY3RlZCBfdXBsb2FkQ2h1bmtTaXplU2Vjb25kczpudW1iZXJ8bnVsbD1udWxsO1xyXG4gIC8vPUJhc2ljUmVjb3JkZXIuREVGQVVMVF9DSFVOS19TSVpFX1NFQ09ORFM7XHJcblxyXG4gIC8vIERlZmF1bHQ6IENvbnRpbnVvdXMgSFRNTDUgQXVkaW8gQVBJIEF1ZGlvQnVmZmVyLCBubyBjaHVua2VkIHVwbG9hZFxyXG4gIHByb3RlY3RlZCBfY2xpZW50QXVkaW9TdG9yYWdlVHlwZTpBdWRpb1N0b3JhZ2VUeXBlPUF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRTtcclxuXHJcbiAgcHJvdGVjdGVkIF9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0OlBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXR8bnVsbD1udWxsO1xyXG5cclxuICBwcm90ZWN0ZWQgX3NjcmVlbkxvY2tlZD1mYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSB3YWtlTG9ja01hbmFnZXI/Oldha2VMb2NrTWFuYWdlcjtcclxuXHJcbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBicG86QnJlYWtwb2ludE9ic2VydmVyLHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgICAgICAgICBwdWJsaWMgZGlhbG9nOiBNYXREaWFsb2csXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgc2Vzc2lvblNlcnZpY2U6U2Vzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgICBwcm90ZWN0ZWQgdXBsb2FkZXI6IFNwZWVjaFJlY29yZGVyVXBsb2FkZXIsXHJcbiAgICAgICAgICAgICAgICBASW5qZWN0KFNQRUVDSFJFQ09SREVSX0NPTkZJRykgcHVibGljIGNvbmZpZz86IFNwZWVjaFJlY29yZGVyQ29uZmlnKSB7XHJcbiAgICBzdXBlcihicG8pO1xyXG4gICAgdGhpcy51c2VyQWdlbnQ9VXNlckFnZW50QnVpbGRlci51c2VyQWdlbnQoKTtcclxuICAgIGNvbnN0IGRldFBmbT10aGlzLnVzZXJBZ2VudC5kZXRlY3RlZFBsYXRmb3JtO1xyXG4gICAgaWYoZGV0UGZtKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJEZXRlY3RlZCBwbGF0Zm9ybTogXCIgK2RldFBmbSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBkZXRCcj10aGlzLnVzZXJBZ2VudC5kZXRlY3RlZEJyb3dzZXI7XHJcbiAgICBjb25zdCBkZXRCclZlcnM9dGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRCcm93c2VyVmVyc2lvbjtcclxuICAgIGlmKGRldEJyKSB7XHJcbiAgICAgIGxldCBkZXRCclZlcnNTdHI9KGRldEJyVmVycyk/JyAnK2RldEJyVmVyczonJztcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkRldGVjdGVkIGJyb3dzZXI6IFwiICtkZXRCcitkZXRCclZlcnNTdHIpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zID0gbmV3IFRyYW5zcG9ydEFjdGlvbnMoKTtcclxuICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uID0gbmV3IEFjdGlvbignUGxheScpO1xyXG4gICAgdGhpcy5sZXZlbE1lYXN1cmUgPSBuZXcgTGV2ZWxNZWFzdXJlKCk7XHJcbiAgICB0aGlzLnN0cmVhbUxldmVsTWVhc3VyZSA9IG5ldyBTdHJlYW1MZXZlbE1lYXN1cmUoKTtcclxuICAgIHRoaXMuc2VsQ2FwdHVyZURldmljZUlkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldCB3YWtlTG9jaygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl93YWtlTG9jaztcclxuICB9XHJcblxyXG4gIHNldCB3YWtlTG9jayh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fd2FrZUxvY2sgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGVuYWJsZVdha2VMb2NrQ29uZCgpe1xyXG4gICAgaWYodGhpcy53YWtlTG9jaz09PXRydWUpIHtcclxuICAgICAgaWYoIXRoaXMud2FrZUxvY2tNYW5hZ2VyKXtcclxuICAgICAgICB0aGlzLndha2VMb2NrTWFuYWdlcj1uZXcgV2FrZUxvY2tNYW5hZ2VyKCk7XHJcbiAgICAgICAgdGhpcy53YWtlTG9ja01hbmFnZXIuYmVoYXZpb3JTdWJqZWN0LnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6ICh2KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2NyZWVuTG9ja2VkID0gdjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiV2FrZSBsb2NrIGVycm9yIVwiKVxyXG4gICAgICAgICAgICAgIHRoaXMuX3NjcmVlbkxvY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLndha2VMb2NrTWFuYWdlci5lbmFibGVXYWtlTG9jaygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzYWJsZVdha2VMb2NrQ29uZCgpe1xyXG4gICAgdGhpcy53YWtlTG9ja01hbmFnZXI/LmRpc2FibGVXYWtlTG9jaygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNjcmVlbkxvY2tlZCgpe1xyXG4gICAgcmV0dXJuIHRoaXMuX3NjcmVlbkxvY2tlZDtcclxuICB9XHJcblxyXG4gIHNldCBhdWRpb0RldmljZXMoYXVkaW9EZXZpY2VzOiBBcnJheTxBdWRpb0RldmljZT4gfCBudWxsIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9hdWRpb0RldmljZXMgPSBhdWRpb0RldmljZXM7XHJcbiAgfVxyXG5cclxuICBzZXQgYXV0b0dhaW5Db250cm9sQ29uZmlncyhhdXRvR2FpbkNvbnRyb2xDb25maWdzOiBBcnJheTxBdXRvR2FpbkNvbnRyb2xDb25maWc+fG51bGx8dW5kZWZpbmVkKXtcclxuICAgIHRoaXMuX2F1dG9HYWluQ29udHJvbENvbmZpZ3M9YXV0b0dhaW5Db250cm9sQ29uZmlncztcclxuICB9XHJcblxyXG4gIHNldCBjaGFubmVsQ291bnQoY2hhbm5lbENvdW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMuX2NoYW5uZWxDb3VudCA9IGNoYW5uZWxDb3VudDtcclxuICB9XHJcblxyXG4gIHNldCBzZXNzaW9uKHNlc3Npb246IFNlc3Npb258bnVsbCkge1xyXG4gICAgdGhpcy5fc2Vzc2lvbiA9IHNlc3Npb247XHJcbiAgfVxyXG5cclxuICBnZXQgc2Vzc2lvbigpOlNlc3Npb258bnVsbHtcclxuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlU3RhcnRVc2VyR2VzdHVyZSgpIHtcclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVhZHkuJztcclxuICB9XHJcblxyXG4gIGNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKSB7XHJcbiAgICBsZXQgb3V0U3RyZWFtO1xyXG5cclxuICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkUhPT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlIHx8IHRoaXMudXBsb2FkQ2h1bmtTaXplU2Vjb25kcykge1xyXG4gICAgICBpZighdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzKXtcclxuICAgICAgICB0aGlzLnVwbG9hZENodW5rU2l6ZVNlY29uZHM9QmFzaWNSZWNvcmRlci5ERUZBVUxUX0NIVU5LX1NJWkVfU0VDT05EUztcclxuICAgICAgfVxyXG4gICAgICAvLyBNdWx0aXBseSB0aGUgY2FwdHVyZSBzdHJlYW0gdG8uLi5cclxuICAgICAgbGV0IHNhc20gPSBuZXcgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1NdWx0aXBsaWVyKCk7XHJcblxyXG4gICAgICAvLyAuLi51cGxvYWQgYXVkaW8gZGF0YSBpbiBjaHVua3MuLi5cclxuICAgICAgbGV0IGNoTW5nID0gbmV3IENodW5rTWFuYWdlcih0aGlzKTsgIC8vIFRoZSBjaHVuayBtYW5hZ2VyIGNvbm5lY3RzIHRoZSBjaHVua2VkIGF1ZGlvIHN0cmVhbSB0byB0aGlzIGNsYXNzIHRvIHVwbG9hZCB0aGUgY2h1bmtzXHJcbiAgICAgIGxldCBjaE9zVXBsb2FkID0gbmV3IFNlcXVlbmNlQXVkaW9GbG9hdDMyQ2h1bmtlck91dFN0cmVhbShjaE1uZywgdGhpcy51cGxvYWRDaHVua1NpemVTZWNvbmRzKTsgLy8gVGhlIGF1ZGlvIHN0cmVhbSBjaHVua2VyIGl0c2VsZlxyXG4gICAgICBzYXNtLnNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcy5wdXNoKGNoT3NVcGxvYWQpO1xyXG5cclxuICAgICAgLy8gLi4uYW5kIHRvIG1lYXN1cmUgdGhlIGxldmVsXHJcbiAgICAgIGxldCBjaE9zTHZsTWVhcyA9IG5ldyBTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW0odGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUsIExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUylcclxuICAgICAgc2FzbS5zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMucHVzaChjaE9zTHZsTWVhcyk7XHJcblxyXG4gICAgICBvdXRTdHJlYW0gPSBzYXNtO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgb3V0U3RyZWFtID0gbmV3IFNlcXVlbmNlQXVkaW9GbG9hdDMyQ2h1bmtlck91dFN0cmVhbSh0aGlzLnN0cmVhbUxldmVsTWVhc3VyZSwgTEVWRUxfQkFSX0lOVEVSVkFMTF9TRUNPTkRTKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5tYXhBdXRvTmV0TWVtU3RvcmVTYW1wbGVzPXRoaXMuX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXM7XHJcbiAgICAgIHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlO1xyXG4gICAgICB0aGlzLmFjLmF1ZGlvT3V0U3RyZWFtID0gb3V0U3RyZWFtO1xyXG4gICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQ9PT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlICYmIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQhPT1udWxsKSB7XHJcbiAgICAgICAgdGhpcy5hYy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdGhpcy5fcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIHNob3dSZWNvcmRpbmcoKSB7XHJcbiAgICBpZih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLnN0b3AoKTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuY2FsY0J1ZmZlckluZm9zU3Vic2NyKXtcclxuICAgICAgdGhpcy5jYWxjQnVmZmVySW5mb3NTdWJzY3IudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRpc3BsYXlBdWRpb0NsaXApIHtcclxuICAgICAgbGV0IGRhcD10aGlzLmRpc3BsYXlBdWRpb0NsaXA7XHJcbiAgICAgIGxldCBhZGg9ZGFwLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgaWYoYWRoKXtcclxuICAgICAgICBpZighdGhpcy5rZWVwTGl2ZUxldmVsKSB7XHJcbiAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLkxPQURJTkc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGFkaC5hZGRPblJlYWR5TGlzdGVuZXIoKCk9PntcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkF1ZGlvIGRhdGEgaG9sZGVyIHJlYWR5LiBFbmFibGUgcGxheWJhY2suIEF1ZGlvIGxvYWRlZCB0cnVlLlwiKVxyXG4gICAgICAgICAgaWYoIXRoaXMua2VlcExpdmVMZXZlbCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFTkRFUklORztcclxuICAgICAgICAgICAgdGhpcy5jYWxjQnVmZmVySW5mb3NTdWJzY3IgPSB0aGlzLmxldmVsTWVhc3VyZS5jYWxjQnVmZmVyTGV2ZWxJbmZvcyhhZGgsIExFVkVMX0JBUl9JTlRFUlZBTExfU0VDT05EUykuc3Vic2NyaWJlKChsZXZlbEluZm9zKSA9PiB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiTGV2ZWwgaW5mb3M6IGxldmVsSW5mb3MgbnVtYmVyIHNpemU6IFwiK2xldmVsSW5mb3MubnVtYmVyU2l6ZSgpKTtcclxuICAgICAgICAgICAgICBkYXAubGV2ZWxJbmZvcyA9IGxldmVsSW5mb3M7XHJcbiAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hdWRpb0xvYWRlZD10cnVlO1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQXVkaW8gZGF0YSBob2xkZXIgYWRkZWQgb25SZWFkeS5cIilcclxuICAgICAgfVxyXG4gICAgICAvL3RoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmF1ZGlvTG9hZGVkPWZhbHNlO1xyXG4gICAgICAvLyBDb2xsYXBzZSBhdWRpbyBzaWduYWwgZGlzcGxheSBpZiBvcGVuXHJcbiAgICAgIGlmICghdGhpcy5hdWRpb1NpZ25hbENvbGxhcHNlZCkge1xyXG4gICAgICAgIHRoaXMuYXVkaW9TaWduYWxDb2xsYXBzZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0KCkge1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdTdGFydGluZyBzZXNzaW9uLi4uJztcclxuICAgIHRoaXMuc3RhdHVzV2FpdGluZz1mYWxzZTtcclxuICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uc2VhbGVkKSB7XHJcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IHRydWVcclxuICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdTZXNzaW9uIHNlYWxlZCEnO1xyXG4gICAgICAgIC8vbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2Vzc2lvblNlYWxlZERpYWxvZywge30pO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgICAgICB0aXRsZTogJ0Vycm9yJyxcclxuICAgICAgICAgICAgbXNnOiBcIlRoaXMgc2Vzc2lvbiBpcyBzZWFsZWQuIFJlY29yZGluZ3MgY2Fubm90IGJlIGFkZGVkIGFueW1vcmUuXCIsXHJcbiAgICAgICAgICAgIGFkdmljZTogJ1BsZWFzZSBhc2sgeW91ciBleHBlcmltZW50ZXIgd2hhdCB0byBkbyAoZS5nIHN0YXJ0IGEgbmV3IHNlc3Npb24pLicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uLnN0YXR1cyA9PT0gXCJDUkVBVEVEXCIpIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJMT0FERURcIjtcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24ubG9hZGVkRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLmxvYWRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LmxvYWRlZERhdGUgPSB0aGlzLl9zZXNzaW9uLmxvYWRlZERhdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucmVzdGFydGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICBib2R5LnJlc3RhcnRlZERhdGUgPSB0aGlzLl9zZXNzaW9uLnJlc3RhcnRlZERhdGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2Vzc2lvblNlcnZpY2UucGF0Y2hTZXNzaW9uT2JzZXJ2ZXIodGhpcy5fc2Vzc2lvbiwgYm9keSkuc3Vic2NyaWJlKClcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGJyb3dzZXIgY29tcGF0aWJpbGl0eVxyXG4gICAgaWYodGhpcy51c2VyQWdlbnQuZGV0ZWN0ZWRCcm93c2VyPT09QnJvd3Nlci5TYWZhcmkgJiYgdGhpcy5fY2hhbm5lbENvdW50PjEpe1xyXG4gICAgICBsZXQgZU1zZz1cIkVycm9yOiBTYWZhcmkgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHN0ZXJlbyByZWNvcmRpbmdzLlwiO1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVNc2cpO1xyXG4gICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgICAgdGl0bGU6ICdCcm93c2VyIG5vdCBzdXBwb3J0ZWQnLFxyXG4gICAgICAgICAgbXNnOiBlTXNnLFxyXG4gICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSB1c2UgYSBzdXBwb3J0ZWQgYnJvd3NlciwgZS5nLiBNb3ppbGxhIEZpcmVmb3guXCJcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgLy9jb25zb2xlLmxvZyhcIlNlc3Npb24gSUQ6IFwiK3RoaXMuX3Nlc3Npb24uc2Vzc2lvbisgXCIgc3RhdHVzOiBcIit0aGlzLl9zZXNzaW9uLnN0YXR1cylcclxuICAgIHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQ9dW5kZWZpbmVkO1xyXG5cclxuICAgIGlmICghdGhpcy5yZWFkb25seSAmJiB0aGlzLmFjICYmIChGT1JDRV9SRVFVRVNUX0FVRElPX1BFUk1JU1NJT05TIHx8ICh0aGlzLl9hdWRpb0RldmljZXMgJiYgdGhpcy5fYXVkaW9EZXZpY2VzLmxlbmd0aCA+IDApKSkge1xyXG4gICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZXF1ZXN0aW5nIGF1ZGlvIHBlcm1pc3Npb25zLi4uJztcclxuICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcblxyXG4gICAgICB0aGlzLmFjLmRldmljZUluZm9zKChtZGlzKSA9PiB7XHJcbiAgICAgICAgbGV0IGF1ZGlvQ2FwdHVyZURldmljZUF2YWlsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgbGV0IGF1ZGlvUGxheURldmljZUF2YWlsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKG1kaXMpIHtcclxuICAgICAgICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgICAgICAgdGhpcy5hYy5wcmludERldmljZXMobWRpcyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAobWRpcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IG1kaWkgPSAwOyBtZGlpIDwgbWRpcy5sZW5ndGg7IG1kaWkrKykge1xyXG4gICAgICAgICAgICAgIGxldCBtZGkgPSBtZGlzW21kaWldO1xyXG4gICAgICAgICAgICAgIGxldCBraW5kPW1kaS5raW5kO1xyXG4gICAgICAgICAgICAgIGlmKGtpbmQgPT09IFwiYXVkaW9pbnB1dFwiKXtcclxuICAgICAgICAgICAgICAgIGF1ZGlvQ2FwdHVyZURldmljZUF2YWlsPXRydWU7XHJcbiAgICAgICAgICAgICAgfWVsc2UgaWYoa2luZD09PSBcImF1ZGlvb3V0cHV0XCIpe1xyXG4gICAgICAgICAgICAgICAgYXVkaW9QbGF5RGV2aWNlQXZhaWw9dHJ1ZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbiAmJiB0aGlzLl9zZXNzaW9uLnR5cGUgIT09ICdURVNUX0RFRl9BJyAmJiB0aGlzLl9hdWRpb0RldmljZXMgJiYgdGhpcy5fYXVkaW9EZXZpY2VzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IGZkaTogTWVkaWFEZXZpY2VJbmZvIHwgbnVsbCA9IG51bGw7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGFkSSA9IDA7IGFkSSA8IHRoaXMuX2F1ZGlvRGV2aWNlcy5sZW5ndGg7IGFkSSsrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGFkID0gdGhpcy5fYXVkaW9EZXZpY2VzW2FkSV07XHJcbiAgICAgICAgICAgICAgaWYgKGFkLnBsYXliYWNrKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBwcm9qZWN0IGF1ZGlvIGRldmljZSBjb25maWcgZm9yIHBsYXliYWNrIGRldmljZVxyXG4gICAgICAgICAgICAgICAgLy8gbm90IHVzZWQgZm9yIG5vd1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IG1kaWkgPSAwOyBtZGlpIDwgbWRpcy5sZW5ndGg7IG1kaWkrKykge1xyXG4gICAgICAgICAgICAgICAgbGV0IG1kaSA9IG1kaXNbbWRpaV07XHJcbiAgICAgICAgICAgICAgICBsZXQga2luZD1tZGkua2luZDtcclxuICAgICAgICAgICAgICAgIGlmKGtpbmQgPT09IFwiYXVkaW9pbnB1dFwiKXtcclxuICAgICAgICAgICAgICAgICAgYXVkaW9DYXB0dXJlRGV2aWNlQXZhaWw9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGtpbmQ9PT0gXCJhdWRpb291dHB1dFwiKXtcclxuICAgICAgICAgICAgICAgICAgYXVkaW9QbGF5RGV2aWNlQXZhaWw9dHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChhZC5yZWdleCkge1xyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiTWF0Y2g/OiBcXCdcIittZGkubGFiZWwrXCJcXCcgXFwnXCIrYWQubmFtZStcIlxcJ1wiKTtcclxuICAgICAgICAgICAgICAgICAgaWYgKG1kaS5sYWJlbC5tYXRjaChhZC5uYW1lKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZkaSA9IG1kaTtcclxuICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiTWF0Y2ghXCIpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBpZiAobWRpLmxhYmVsLnRyaW0oKSA9PT0gYWQubmFtZS50cmltKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBmZGkgPSBtZGk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChmZGkpIHtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChmZGkpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGZkaSkge1xyXG4gICAgICAgICAgICAgIC8vIG1hdGNoaW5nIGRldmljZSBmb3VuZFxyXG5cclxuICAgICAgICAgICAgICAvLyBOb3QgYWJsZSB0byBvcGVuIGRldmljZSBoZXJlIHNpbmNlIENocm9tZSA3MVxyXG4gICAgICAgICAgICAgIC8vIENocm9tZSA3MSByZXF1aXJlcyBhIHVzZXIgZ2VzdHVyZSBiZWZvcmUgdGhlIEF1ZGlvQ29udGV4dCBjYW4gYmUgcmVzdW1lZFxyXG4gICAgICAgICAgICAgIC8vIHNlc3Npb25tYW5hZ2VyLnRzOjcxMiBPcGVuIHNlc3Npb24gd2l0aCBkZWZhdWx0IGF1ZGlvIGRldmljZSBmb3IgMSBjaGFubmVsc1xyXG4gICAgICAgICAgICAgIC8vIGNhcHR1cmUudHM6MTI4IFRoZSBBdWRpb0NvbnRleHQgd2FzIG5vdCBhbGxvd2VkIHRvIHN0YXJ0LiBJdCBtdXN0IGJlIHJlc3VtZWQgKG9yIGNyZWF0ZWQpIGFmdGVyIGEgdXNlciBnZXN0dXJlIG9uIHRoZSBwYWdlLiBodHRwczovL2dvby5nbC83SzdXTHVcclxuICAgICAgICAgICAgICAvLyBwdXNoLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2NhcHR1cmUvY2FwdHVyZS50cy5BdWRpb0NhcHR1cmUub3BlbiBAIGNhcHR1cmUudHM6MTI4XHJcblxyXG4gICAgICAgICAgICAgIC8vdGhpcy5hYy5vcGVuKHRoaXMuX2NoYW5uZWxDb3VudCwgZmRpLmRldmljZUlkKTtcclxuICAgICAgICAgICAgICBjb25zb2xlLmluZm8oXCJTZXQgc2VsZWN0ZWQgYXVkaW8gZGV2aWNlOiBcXCdcIiArIGZkaS5sYWJlbCArIFwiXFwnIElkOiBcXCdcIiArIGZkaS5kZXZpY2VJZCArIFwiXFwnXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQgPSBmZGkuZGV2aWNlSWQ7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZW5hYmxlU3RhcnRVc2VyR2VzdHVyZSgpXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gZGV2aWNlIG5vdCBmb3VuZFxyXG4gICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ0VSUk9SOiBSZXF1aXJlZCBhdWRpbyBkZXZpY2Ugbm90IGF2YWlsYWJsZSEnO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICB0aGlzLnJlYWRvbmx5ID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWlyZWQgYXVkaW8gZGV2aWNlJyxcclxuICAgICAgICAgICAgICAgICAgbXNnOiBcIlJlcXVpcmVkIGF1ZGlvIGRldmljZSBub3QgZm91bmRcIixcclxuICAgICAgICAgICAgICAgICAgYWR2aWNlOiBcIlBsZWFzZSBjb25uZWN0IGEgc3VpdGFibGUgYXVkaW8gZGV2aWNlIGZvciB0aGlzIHByb2plY3QgYW5kIHJldHJ5IChwcmVzcyB0aGUgYnJvd3NlciByZWxvYWQgYnV0dG9uKS5cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBpZighYXVkaW9DYXB0dXJlRGV2aWNlQXZhaWwgJiYgIWF1ZGlvUGxheURldmljZUF2YWlsKXtcclxuICAgICAgICAgICAgICAvLyBubyBkZXZpY2UgZm91bmRcclxuICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogTm8gYXVkaW8gZGV2aWNlIGF2YWlsYWJsZSEnO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ3dhcm4nO1xyXG4gICAgICAgICAgICAgIC8vdGhpcy5yZWFkb25seSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybicsXHJcbiAgICAgICAgICAgICAgICAgIHRpdGxlOiAnTm8gYXVkaW8gZGV2aWNlJyxcclxuICAgICAgICAgICAgICAgICAgbXNnOiBcIk5vIGF1ZGlvIGRldmljZSBmb3VuZFwiLFxyXG4gICAgICAgICAgICAgICAgICBhZHZpY2U6IFwiUGxlYXNlIGNvbm5lY3QgYW4gYXVkaW8gZGV2aWNlIGFuZCByZXRyeSAocHJlc3MgdGhlIGJyb3dzZXIgcmVsb2FkIGJ1dHRvbikgb3IgdHJ5IHRvIGNvbnRpbnVlIGFueXdheS5cIlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMucmVhZG9ubHkgJiYgIWF1ZGlvQ2FwdHVyZURldmljZUF2YWlsKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBubyBkZXZpY2UgZm91bmRcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1dBUk5JTkc6IE5vIGF1ZGlvIGNhcHR1cmUgZGV2aWNlIGF2YWlsYWJsZSEnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnd2FybmluZyc7XHJcbiAgICAgICAgICAgICAgICAvL3RoaXMucmVhZG9ubHkgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nLm9wZW4oTWVzc2FnZURpYWxvZywge1xyXG4gICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnTm8gYXVkaW8gY2FwdHVyZSBkZXZpY2UnLFxyXG4gICAgICAgICAgICAgICAgICAgIG1zZzogXCJObyBhdWRpbyBjYXB0dXJlIGRldmljZSBmb3VuZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGFkdmljZTogXCJQbGVhc2UgY29ubmVjdCBhbiBhdWRpbyBjYXB0dXJlIGRldmljZSBhbmQgcmV0cnkgKHByZXNzIHRoZSBicm93c2VyIHJlbG9hZCBidXR0b24pIG9yIHRyeSB0byBjb250aW51ZSBhbnl3YXkuXCJcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgLy8gU2FmYXJpIGRvZXMgbm90IGxpc3QgcGxheWJhY2sgZGV2aWNlc1xyXG4gICAgICAgICAgICAgIGlmICghYXVkaW9QbGF5RGV2aWNlQXZhaWwpIHtcclxuICAgICAgICAgICAgICAgIC8vIEZpcmVmb3ggZG9lcyBub3QgZW51bWVyYXRlIGF1ZGlvb3V0cHV0IGRldmljZXNcclxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCBzaG93IHRoaXMgd2FybmluZywgYmVjYXVzZSBpdCB3b3VsZCBhbHdheXMgYXBwZWFyIG9uIEZpcmVmb3hcclxuICAgICAgICAgICAgICAgIC8vIFdoZW4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5ODUxMiBpcyBmaXhlZCB0aGUgd2FybmluZyBjYW4gYmUgZW5hYmxlZCBmb3IgRmlyZWZveCBhcyB3ZWxsXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSXQgaXMgYWxyZWFkeSBpbXBsZW1uZXRlZCBidXQga2VwdCBiZWhpbmQgYSBwcmVmZXJlbmNlIHNldHRpbmcgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MjQwMVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBPdXRwdXQgZGV2aWNlcyBhcmUgbGlzdGVkIGlmIGFib3V0OmNvbmZpZyBtZWRpYS5zZXRzaW5raWQuZW5hYmxlZD10cnVlXHJcbiAgICAgICAgICAgICAgICAvLyBidXQgZGVmYXVsdCBzZXR0aW5nIGlzIGZhbHNlXHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8vIFNhbWUgcHJvYmxlbSB3aXRoIFNhZmFyaVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICghKHRoaXMudXNlckFnZW50LmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuU2FmYXJpIHx8IHRoaXMudXNlckFnZW50LmRldGVjdGVkQnJvd3Nlcj09PUJyb3dzZXIuRmlyZWZveCkpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gbm8gZGV2aWNlIGZvdW5kXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1dBUk5JTkc6IE5vIGF1ZGlvIHBsYXliYWNrIGRldmljZSBhdmFpbGFibGUhJztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnd2Fybic7XHJcbiAgICAgICAgICAgICAgICAgIC8vdGhpcy5yZWFkb25seSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKE1lc3NhZ2VEaWFsb2csIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybicsXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ05vIGF1ZGlvIHBsYXliYWNrIGRldmljZScsXHJcbiAgICAgICAgICAgICAgICAgICAgICBtc2c6IFwiTm8gYXVkaW8gcGxheWJhY2sgZGV2aWNlIGZvdW5kXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhZHZpY2U6IFwiUGxlYXNlIGNvbm5lY3QgYW4gYXVkaW8gcGxheWJhY2sgZGV2aWNlIGFuZCByZXRyeSAocHJlc3MgdGhlIGJyb3dzZXIgcmVsb2FkIGJ1dHRvbikgb3IgdHJ5IHRvIGNvbnRpbnVlIGFueXdheS5cIlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIE5vdCBhYmxlIHRvIG9wZW4gZGV2aWNlIGhlcmUgc2luY2UgQ2hyb21lIDcxXHJcbiAgICAgICAgICAgIC8vIENocm9tZSA3MSByZXF1aXJlcyBhIHVzZXIgZ2VzdHVyZSBiZWZvcmUgdGhlIEF1ZGlvQ29udGV4dCBjYW4gYmUgcmVzdW1lZFxyXG4gICAgICAgICAgICAvLyBzZXNzaW9ubWFuYWdlci50czo3MTIgT3BlbiBzZXNzaW9uIHdpdGggZGVmYXVsdCBhdWRpbyBkZXZpY2UgZm9yIDEgY2hhbm5lbHNcclxuICAgICAgICAgICAgLy8gY2FwdHVyZS50czoxMjggVGhlIEF1ZGlvQ29udGV4dCB3YXMgbm90IGFsbG93ZWQgdG8gc3RhcnQuIEl0IG11c3QgYmUgcmVzdW1lZCAob3IgY3JlYXRlZCkgYWZ0ZXIgYSB1c2VyIGdlc3R1cmUgb24gdGhlIHBhZ2UuIGh0dHBzOi8vZ29vLmdsLzdLN1dMdVxyXG4gICAgICAgICAgICAvLyBwdXNoLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2NhcHR1cmUvY2FwdHVyZS50cy5BdWRpb0NhcHR1cmUub3BlbiBAIGNhcHR1cmUudHM6MTI4XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJPcGVuIHNlc3Npb24gd2l0aCBkZWZhdWx0IGF1ZGlvIGRldmljZSBmb3IgXCIrdGhpcy5fY2hhbm5lbENvdW50K1wiIGNoYW5uZWxzXCIpO1xyXG4gICAgICAgICAgICAvL3RoaXMuYWMub3Blbih0aGlzLl9jaGFubmVsQ291bnQpO1xyXG5cclxuICAgICAgICAgICAgLy8gZW5hYmxlIHN0YXJ0IGdlc3R1cmUgYW55d2F5XHJcbiAgICAgICAgICAgIHRoaXMuZW5hYmxlU3RhcnRVc2VyR2VzdHVyZSgpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnN0YXR1c01zZz0nUmVhZHkuJztcclxuICB9XHJcblxyXG4gIHN0YXJ0SXRlbSgpIHtcclxuICAgIHRoaXMucmZVdWlkID0gVVVJRC5nZW5lcmF0ZSgpO1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnJlY1VVSUQgPSB0aGlzLnJmVXVpZDtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhcnRlZERhdGU9bnVsbDtcclxuICAgIHRoaXMuZW5hYmxlV2FrZUxvY2tDb25kKCk7XHJcbiAgICAvL3RoaXMucmZVdWlkPVVVSUQuZ2VuZXJhdGUoKTtcclxuICAgIHRoaXMudXBsb2FkU2V0PW51bGw7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByb3RlY3RlZCBzdGFydENhcHR1cmUoKSB7XHJcbiAgICBpZiAodGhpcy5hYykge1xyXG4gICAgICBpZiAoIXRoaXMuYWMub3BlbmVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiT3BlbiBzZXNzaW9uIHdpdGggYXVkaW8gZGV2aWNlIElkOiBcXCdcIiArIHRoaXMuX3NlbGVjdGVkRGV2aWNlSWQgKyBcIlxcJyBmb3IgXCIgKyB0aGlzLl9jaGFubmVsQ291bnQgKyBcIiBjaGFubmVsc1wiKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJPcGVuIHNlc3Npb24gd2l0aCBkZWZhdWx0IGF1ZGlvIGRldmljZSBmb3IgXCIgKyB0aGlzLl9jaGFubmVsQ291bnQgKyBcIiBjaGFubmVsc1wiKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hYy5vcGVuKHRoaXMuX2NoYW5uZWxDb3VudCwgdGhpcy5fc2VsZWN0ZWREZXZpY2VJZCwgdGhpcy5fYXV0b0dhaW5Db250cm9sQ29uZmlncyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hYy5zdGFydCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuZWQoKSB7XHJcbiAgICBpZih0aGlzLmFjKSB7XHJcbiAgICAgIHRoaXMuYWMuc3RhcnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0YXJ0ZWQoKSB7XHJcblxyXG4gICAgaWYoIXRoaXMuc3RhcnRlZERhdGUpIHtcclxuICAgICAgdGhpcy5zdGFydGVkRGF0ZT1uZXcgRGF0ZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHBvc3RSZWNvcmRpbmcod2F2RmlsZTogVWludDhBcnJheSwgcmVjVXJsOiBzdHJpbmcscmY6UmVjb3JkaW5nRmlsZXxudWxsLHVwbG9hZEhvbGRlcj86VXBsb2FkSG9sZGVyKSB7XHJcbiAgICBsZXQgd2F2QmxvYiA9IG5ldyBCbG9iKFt3YXZGaWxlXSwge3R5cGU6ICdhdWRpby93YXYnfSk7XHJcbiAgICBsZXQgdWwgPSBuZXcgVXBsb2FkKHdhdkJsb2IsIHJlY1VybCxyZik7XHJcbiAgICBpZih1cGxvYWRIb2xkZXIpe1xyXG4gICAgICB1cGxvYWRIb2xkZXIudXBsb2FkPXVsO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgfVxyXG5cclxuICBwb3N0QXVkaW9TdHJlYW1TdGFydCgpOiB2b2lkIHtcclxuICAgIGlmKHRoaXMucmZVdWlkKSB7XHJcbiAgICAgIHRoaXMudXBsb2FkU2V0PW5ldyBVcGxvYWRTZXQoKTtcclxuICAgICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludCkge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGFwaUVuZFBvaW50ICE9PSAnJykge1xyXG4gICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgfVxyXG4gICAgICBsZXQgc2Vzc2lvbnNVcmwgPSBhcGlFbmRQb2ludCArIFNlc3Npb25TZXJ2aWNlLlNFU1NJT05fQVBJX0NUWDtcclxuICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucmZVdWlkICsgJy9wcmVwYXJlQ2h1bmtzUmVxdWVzdCc7XHJcbiAgICAgIGxldCBmZCA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAvLyBOb3RlOiBBdCBsZWFzdCBvbmUgcGFyYW1ldGVyIG11c3QgYmUgc2V0XHJcbiAgICAgIGZkLnNldCgndXVpZCcsdGhpcy5yZlV1aWQpO1xyXG4gICAgICBpZighdGhpcy5zdGFydGVkRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRlZERhdGU9bmV3IERhdGUoKTtcclxuICAgICAgfVxyXG4gICAgICBmZC5zZXQoJ3N0YXJ0ZWREYXRlJyx0aGlzLnN0YXJ0ZWREYXRlLnRvSlNPTigpKTtcclxuXHJcbiAgICAgIGxldCB1bCA9IG5ldyBVcGxvYWQoZmQsIHJlY1VybCk7XHJcbiAgICAgIHRoaXMudXBsb2FkU2V0LmFkZCh1bCk7XHJcbiAgICAgIHRoaXMudXBsb2FkZXIucXVldWVVcGxvYWQodWwpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJSZWNvcmRpbmcgZmlsZSBVVUlEIG5vdCBzZXQhXCIpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxucHJvdGVjdGVkIHNlc3Npb25zQmFzZVVybCgpOnN0cmluZyB7XHJcbiAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaUVuZFBvaW50KSB7XHJcbiAgICBhcGlFbmRQb2ludCA9IHRoaXMuY29uZmlnLmFwaUVuZFBvaW50O1xyXG4gIH1cclxuICBpZiAoYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICBhcGlFbmRQb2ludCA9IGFwaUVuZFBvaW50ICsgJy8nXHJcbiAgfVxyXG4gIHJldHVybiAgYXBpRW5kUG9pbnQgKyBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0FQSV9DVFg7XHJcbn1cclxuXHJcbiAgYWJzdHJhY3QgcG9zdENodW5rQXVkaW9CdWZmZXIoYXVkaW9CdWZmZXI6IEF1ZGlvQnVmZmVyLCBjaHVua0lkeDogbnVtYmVyKTogdm9pZDtcclxuXHJcbiAgcG9zdEF1ZGlvU3RyZWFtRW5kKGNodW5rQ291bnQ6IG51bWJlcik6IHZvaWQge1xyXG5cclxuICAgIGlmKHRoaXMucmZVdWlkKSB7XHJcblxyXG4gICAgICBsZXQgc2Vzc2lvbnNVcmwgPSB0aGlzLnNlc3Npb25zQmFzZVVybCgpO1xyXG4gICAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgdGhpcy5yZlV1aWQrJy9jb25jYXRDaHVua3NSZXF1ZXN0JztcclxuICAgICAgbGV0IGZkPW5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBmZC5zZXQoJ3V1aWQnLHRoaXMucmZVdWlkKTtcclxuICAgICAgZmQuc2V0KCdjaHVua0NvdW50JyxjaHVua0NvdW50LnRvU3RyaW5nKCkpO1xyXG4gICAgICBsZXQgdWwgPSBuZXcgVXBsb2FkKGZkLCByZWNVcmwsdGhpcy5fcmVjb3JkaW5nRmlsZSk7XHJcbiAgICAgIGlmKHRoaXMudXBsb2FkU2V0KXtcclxuICAgICAgICB0aGlzLnVwbG9hZFNldC5hZGQodWwpO1xyXG4gICAgICAgIHRoaXMudXBsb2FkU2V0LmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy51cGxvYWRlci5xdWV1ZVVwbG9hZCh1bCk7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlF1ZXVlZCBmb3IgdXBsb2FkOiBcIit0aGlzLl9yZWNvcmRpbmdGaWxlKTtcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiUmVjb3JkaW5nIGZpbGUgVVVJRCBub3Qgc2V0IVwiKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2VkKCkge1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdTZXNzaW9uIGNsb3NlZC4nO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IobXNnPSdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgZHVyaW5nIHJlY29yZGluZy4nLGFkdmljZTpzdHJpbmc9J1BsZWFzZSByZXRyeS4nKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6IFJlY29yZGluZy4nO1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InO1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICB0eXBlOiAnZXJyb3InLFxyXG4gICAgICAgIHRpdGxlOiAnUmVjb3JkaW5nIGVycm9yJyxcclxuICAgICAgICBtc2c6IG1zZyxcclxuICAgICAgICBhZHZpY2U6IGFkdmljZVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiJdfQ==