speechrecorderng 3.3.0 → 3.3.1

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.
@@ -974,7 +974,7 @@ export class SessionManager extends BasicRecorder {
974
974
  const sr = this.ac.currentSampleRate;
975
975
  const chFl = sr * RecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS;
976
976
  //console.debug("stopped(): rfID: "+this._recordingFile?.recordingFileId+", net ab url: " + burl+", frames: "+this.ac.framesRecorded+", sample rate: "+sr);
977
- let netAb = new NetAudioBuffer(this.ac.context, this.recFileService, burl, this.ac.channelCount, sr, chFl, this.ac.framesRecorded, rUUID, sr);
977
+ let netAb = new NetAudioBuffer(this.ac.context, this.recFileService, burl, this.ac.channelCount, sr, chFl, this.ac.framesRecorded, rUUID, chFl);
978
978
  as = netAb;
979
979
  if (this.uploadSet) {
980
980
  //let rp=new ReadyProvider();
@@ -1021,7 +1021,7 @@ export class SessionManager extends BasicRecorder {
1021
1021
  const sr = this.ac.currentSampleRate;
1022
1022
  const chFl = sr * RecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS;
1023
1023
  //console.debug("stopped(): rfID: "+this._recordingFile?.recordingFileId+", net ab url: " + burl+", frames: "+this.ac.framesRecorded+", sample rate: "+sr);
1024
- const netAb = new NetAudioBuffer(this.ac.context, this.recFileService, burl, this.ac.channelCount, sr, chFl, this.ac.framesRecorded, rUUID, sr);
1024
+ const netAb = new NetAudioBuffer(this.ac.context, this.recFileService, burl, this.ac.channelCount, sr, chFl, this.ac.framesRecorded, rUUID, chFl);
1025
1025
  as = netAb;
1026
1026
  if (this.uploadSet) {
1027
1027
  this.uploadSet.onDone = (uploadSet) => {
@@ -1311,4 +1311,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
1311
1311
  type: HostListener,
1312
1312
  args: ['window:keydown', ['$event']]
1313
1313
  }] } });
1314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBZ0MsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3BELE9BQU8sRUFBb0IsY0FBYyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBOEIsTUFBTSxjQUFjLENBQUE7QUFDMUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxJQUFJ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QUM7U0FDMUM7SUFFSCxDQUFDOzs0R0FsdkNVLGNBQWMseU1BNkRMLHFCQUFxQjtnR0E3RDlCLGNBQWMsMk5BNUVkLENBQUMsY0FBYyxDQUFDLHFFQTZGaEIsU0FBUyxpR0FDVCxRQUFRLHFGQTdGVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlEVDs0RkEwQlUsY0FBYztrQkE5RTFCLFNBQVM7K0JBQ0UseUJBQXlCLGFBQ3hCLENBQUMsY0FBYyxDQUFDLFlBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaURUOzswQkF1RlksTUFBTTsyQkFBQyxxQkFBcUI7NENBakRoQyxXQUFXO3NCQUFuQixLQUFLO2dCQUtrQyxTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0MsZ0JBQWdCO3NCQUF0RCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRTVCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBZ0tOLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTM0MsU0FBUztzQkFEUixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBdWRpb0NhcHR1cmUsIEF1ZGlvQ2FwdHVyZUxpc3RlbmVyfSBmcm9tICcuLi8uLi9hdWRpby9jYXB0dXJlL2NhcHR1cmUnO1xyXG5pbXBvcnQge0F1ZGlvUGxheWVyLCBBdWRpb1BsYXllckV2ZW50LCBFdmVudFR5cGV9IGZyb20gJy4uLy4uL2F1ZGlvL3BsYXliYWNrL3BsYXllcidcclxuaW1wb3J0IHtXYXZXcml0ZXJ9IGZyb20gJy4uLy4uL2F1ZGlvL2ltcGwvd2F2d3JpdGVyJ1xyXG5pbXBvcnQge0dyb3VwLCBQcm9tcHRJdGVtLCBQcm9tcHRpdGVtVXRpbCwgU2NyaXB0LCBTZWN0aW9ufSBmcm9tICcuLi9zY3JpcHQvc2NyaXB0JztcclxuaW1wb3J0IHtTcHJSZWNvcmRpbmdGaWxlLCBSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGx9IGZyb20gJy4uL3JlY29yZGluZydcclxuaW1wb3J0IHtVcGxvYWRIb2xkZXJ9IGZyb20gJy4uLy4uL25ldC91cGxvYWRlcic7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1N0YXRlIGFzIFN0YXJ0U3RvcFNpZ25hbFN0YXRlfSBmcm9tIFwiLi4vc3RhcnRzdG9wc2lnbmFsL3N0YXJ0c3RvcHNpZ25hbFwiO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuLi9zcHJ1cGxvYWRlclwiO1xyXG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7UHJvbXB0aW5nfSBmcm9tIFwiLi9wcm9tcHRpbmdcIjtcclxuaW1wb3J0IHtTZXNzaW9uRmluaXNoZWREaWFsb2d9IGZyb20gXCIuL3Nlc3Npb25fZmluaXNoZWRfZGlhbG9nXCI7XHJcbmltcG9ydCB7TWVzc2FnZURpYWxvZ30gZnJvbSBcIi4uLy4uL3VpL21lc3NhZ2VfZGlhbG9nXCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4uL3JlY29yZGluZ3MvcmVjb3JkaW5ncy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGVyc2lzdG9yXCI7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSBcIi4vaXRlbVwiO1xyXG5pbXBvcnQge0xldmVsQmFyfSBmcm9tIFwiLi4vLi4vYXVkaW8vdWkvbGl2ZWxldmVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQmFzaWNSZWNvcmRlcixcclxuICBDaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIsXHJcbiAgTUFYX1JFQ09SRElOR19USU1FX01TLFxyXG4gIFJFQ0ZJTEVfQVBJX0NUWFxyXG59IGZyb20gXCIuL2Jhc2ljcmVjb3JkZXJcIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vYXJyYXlfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7QXVkaW9CdWZmZXJTb3VyY2UsIEF1ZGlvRGF0YUhvbGRlciwgQXVkaW9Tb3VyY2V9IGZyb20gXCIuLi8uLi9hdWRpby9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5pbXBvcnQge1Nwckl0ZW1zQ2FjaGV9IGZyb20gXCIuL3JlY29yZGluZ19maWxlX2NhY2hlXCI7XHJcbmltcG9ydCB7U3RhdGUgYXMgTGl2ZUxldmVsU3RhdGV9IGZyb20gXCIuLi8uLi9hdWRpby91aS9saXZlbGV2ZWxcIlxyXG5pbXBvcnQge0luZGV4ZWREYkF1ZGlvQnVmZmVyLCBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fSBmcm9tIFwiLi4vLi4vYXVkaW8vaW5kZGJfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7QXVkaW9TdG9yYWdlVHlwZX0gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge05ldEF1ZGlvQnVmZmVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vbmV0X2F1ZGlvX2J1ZmZlclwiO1xyXG5cclxuY29uc3QgREVGQVVMVF9QUkVfUkVDX0RFTEFZPTEwMDA7XHJcbmNvbnN0IERFRkFVTFRfUE9TVF9SRUNfREVMQVk9NTAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gU3RhdHVzIHtcclxuICBCTE9DS0VELCBJRExFLCBTVEFSVElORywgUFJFX1JFQ09SRElORywgUkVDT1JESU5HLCBQT1NUX1JFQ19TVE9QLCBQT1NUX1JFQ19QQVVTRSwgU1RPUFBJTkdfU1RPUCwgU1RPUFBJTkdfUEFVU0UsIEVSUk9SXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnJlY29yZGluZ3Nlc3Npb24nLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGVzdCByZWNvcmRpbmcgb25seSFcIj48L2FwcC13YXJuaW5nYmFyPlxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGhpcyB0ZXN0IHVzZXMgZGVmYXVsdCBhdWRpbyBkZXZpY2UhIFJlZ3VsYXIgc2Vzc2lvbnMgbWF5IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGF1ZGlvIGRldmljZSAobWljcm9waG9uZSkhXCI+PC9hcHAtd2FybmluZ2Jhcj5cclxuICAgICAgPGFwcC1zcHJwcm9tcHRpbmcgW3Byb2plY3ROYW1lXT1cInByb2plY3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXJ0U3RvcFNpZ25hbFN0YXRlXT1cInN0YXJ0U3RvcFNpZ25hbFN0YXRlXCIgW3Byb21wdEl0ZW1dPVwicHJvbXB0SXRlbVwiIFtzaG93UHJvbXB0XT1cInNob3dQcm9tcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXM/Lml0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zcG9ydEFjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1JZHhdPVwicHJvbXB0SW5kZXhcIiAob25JdGVtU2VsZWN0KT1cIml0ZW1TZWxlY3QoJGV2ZW50KVwiIChvbk5leHRJdGVtKT1cIm5leHRJdGVtKClcIiAob25QcmV2SXRlbSk9XCJwcmV2SXRlbSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvU2lnbmFsQ29sbGFwc2VkXT1cImF1ZGlvU2lnbmFsQ29sbGFwc2VkXCIgW2Rpc3BsYXlBdWRpb0NsaXBdPVwiZGlzcGxheUF1ZGlvQ2xpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U2VsZWN0aW9uQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RhcnRTZWxlY3Rpb25BY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LmF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCI+XHJcblxyXG4gICAgPC9hcHAtc3BycHJvbXB0aW5nPlxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgW3ZhbHVlXT1cInByb2dyZXNzUGVyY2VudFZhbHVlKClcIiBmeFNob3c9XCJmYWxzZVwiIGZ4U2hvdy54cz1cInRydWVcIiA+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG5cclxuXHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXQueHM9XCJjb2x1bW5cIiBbbmdTdHlsZV09XCJ7J2hlaWdodC5weCc6MTAwLCdtaW4taGVpZ2h0LnB4JzogMTAwfVwiIFtuZ1N0eWxlLnhzXT1cInsnaGVpZ2h0LnB4JzoxMjUsJ21pbi1oZWlnaHQucHgnOiAxMjV9XCI+XHJcbiAgICAgIDxhdWRpby1sZXZlbGJhciBmeEZsZXg9XCIxIDAgMVwiIFtzdHJlYW1pbmdNb2RlXT1cImlzUmVjb3JkaW5nKCkgfHwga2VlcExpdmVMZXZlbFwiIFtkaXNwbGF5TGV2ZWxJbmZvc109XCJkaXNwbGF5QXVkaW9DbGlwPy5sZXZlbEluZm9zXCIgIFtzdGF0ZV09XCJsaXZlTGV2ZWxEaXNwbGF5U3RhdGVcIj48L2F1ZGlvLWxldmVsYmFyPlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgICAgPHNwci1yZWNvcmRpbmdpdGVtY29udHJvbHMgZnhGbGV4PVwiMTAgMCAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXVkaW9Mb2FkZWRdPVwiYXVkaW9Mb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQXVkaW9EZXRhaWxzXT1cImRpc2FibGVBdWRpb0RldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdG9wQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RvcEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BlYWtEYkx2bF09XCJwZWFrTGV2ZWxJbkRiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWdjXT1cInRoaXMuYWM/LmFnY1N0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU2hvd1JlY29yZGluZ0RldGFpbHMpPVwiYXVkaW9TaWduYWxDb2xsYXBzZWQ9IWF1ZGlvU2lnbmFsQ29sbGFwc2VkXCI+XHJcbiAgICAgICAgPC9zcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzPlxyXG5cclxuICAgICAgICA8YXBwLXVwbG9hZHN0YXR1cyBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIGZ4SGlkZSBmeFNob3cueHMgIGZ4RmxleD1cIjAgMCAwXCIgKm5nSWY9XCJlbmFibGVVcGxvYWRSZWNvcmRpbmdzXCIgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nUmVjb3JkaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtd2FrZWxvY2tpbmRpY2F0b3IgY2xhc3M9XCJyaWNvbnRyb2xzIGRhcmtcIiBmeEhpZGUgZnhTaG93LnhzIGZ4RmxleD1cIjAgMCAwXCIgW3NjcmVlbkxvY2tlZF09XCJzY3JlZW5Mb2NrZWRcIj48L2FwcC13YWtlbG9ja2luZGljYXRvcj5cclxuICAgICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgY2xhc3M9XCJyaWNvbnRyb2xzIGRhcmtcIiBmeEhpZGUgZnhTaG93LnhzIGZ4RmxleD1cIjAgMCAwXCIgW3JlYWR5XT1cImRhdGFTYXZlZCAmJiAhaXNBY3RpdmUoKVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICNjb250cm9scGFuZWwgY2xhc3M9XCJjb250cm9scGFuZWxcIiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjEgMSAzMCVcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgPGFwcC1zcHJzdGF0dXNkaXNwbGF5IGZ4SGlkZS54cyBbc3RhdHVzTXNnXT1cInN0YXR1c01zZ1wiIFtzdGF0dXNBbGVydFR5cGVdPVwic3RhdHVzQWxlcnRUeXBlXCIgW3N0YXR1c1dhaXRpbmddPVwic3RhdHVzV2FpdGluZ1wiPjwvYXBwLXNwcnN0YXR1c2Rpc3BsYXk+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YXBwLXNwcnRyYW5zcG9ydCBmeEZsZXg9XCIxMCAwIDMwJVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2FjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiIFtuYXZpZ2F0aW9uRW5hYmxlZF09XCIhaXRlbXMgfHwgaXRlbXMubGVuZ3RoKCk+MVwiPjwvYXBwLXNwcnRyYW5zcG9ydD5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIxIDEgMzAlXCIgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIGNsYXNzPVwicmljb250cm9sc1wiIGZ4SGlkZS54cyBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1JlY29yZGluZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgICA8YXBwLXdha2Vsb2NraW5kaWNhdG9yIGNsYXNzPVwicmljb250cm9sc1wiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhIaWRlLnhzIFtzY3JlZW5Mb2NrZWRdPVwic2NyZWVuTG9ja2VkXCI+PC9hcHAtd2FrZWxvY2tpbmRpY2F0b3I+XHJcbiAgICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yIGNsYXNzPVwicmljb250cm9sc1wiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhIaWRlLnhzIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBWZXJ0aWNhbCBmbGV4IGNvbnRhaW5lcjogQm90dG9tIHRyYW5zcG9ydCBwYW5lbCwgYWJvdmUgcHJvbXB0aW5nIHBhbmVsICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgICAgIC8qIFByZXZlbnRzIGhvcml6b250YWwgc2Nyb2xsIGJhciBvbiBzd2lwZSByaWdodCAqL1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1gLGAucmljb250cm9scyB7XHJcbiAgICAgICAgcGFkZGluZzogNHB4O1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgfWAsYC5kYXJrIHtcclxuICAgIGJhY2tncm91bmQ6IGRhcmtncmF5O1xyXG4gIH1gLGAuY29udHJvbHBhbmVsIHtcclxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgbWluLWhlaWdodDogbWluLWNvbnRlbnQ7IC8qIGltcG9ydGFudCAqL1xyXG4gIH1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1hbmFnZXIgZXh0ZW5kcyBCYXNpY1JlY29yZGVyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCxPbkRlc3Ryb3ksIEF1ZGlvQ2FwdHVyZUxpc3RlbmVyLENodW5rQXVkaW9CdWZmZXJSZWNlaXZlciB7XHJcbiAgZ2V0IHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQoKTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCh2YWx1ZTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwpIHtcclxuICAgIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgPSB2YWx1ZTtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdGhpcy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6c3RyaW5nfHVuZGVmaW5lZDtcclxuICBlbmFibGVVcGxvYWRSZWNvcmRpbmdzOiBib29sZWFuID0gdHJ1ZTtcclxuICBlbmFibGVEb3dubG9hZFJlY29yZGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGF0dXM6IFN0YXR1cyA9IFN0YXR1cy5CTE9DS0VEO1xyXG5cclxuICBAVmlld0NoaWxkKFByb21wdGluZywgeyBzdGF0aWM6IHRydWUgfSkgcHJvbXB0aW5nITogUHJvbXB0aW5nO1xyXG4gIEBWaWV3Q2hpbGQoTGV2ZWxCYXIsIHsgc3RhdGljOiB0cnVlIH0pIGxpdmVMZXZlbERpc3BsYXkhOiBMZXZlbEJhcjtcclxuXHJcbiAgQElucHV0KCkgZGF0YVNhdmVkPXRydWVcclxuXHJcbiAgc3RhcnRTdG9wU2lnbmFsU3RhdGUhOiBTdGFydFN0b3BTaWduYWxTdGF0ZTtcclxuXHJcbiAgcHJpdmF0ZSBwcmVSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcHJlUmVjVGltZXJSdW5uaW5nOiBib29sZWFufG51bGw9bnVsbDtcclxuICBwcml2YXRlIHBvc3REZWxheTpudW1iZXI9REVGQVVMVF9QT1NUX1JFQ19ERUxBWTtcclxuICBwcml2YXRlIHBvc3RSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcG9zdFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcbiAgLy9wcml2YXRlIG1heFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcblxyXG4gIGF1ZGlvOiBhbnk7XHJcbiAgX3NjcmlwdCE6IFNjcmlwdDtcclxuICBwcml2YXRlIF9wcm9tcHRJbmRleD0wO1xyXG4gIHByaXZhdGUgc2VjdGlvbiE6IFNlY3Rpb247XHJcbiAgZ3JvdXAhOiBHcm91cDtcclxuICBwcm9tcHRJdGVtITpQcm9tcHRJdGVtO1xyXG4gIHNob3dQcm9tcHQhOiBib29sZWFuO1xyXG5cclxuICAvLyBpbmRleCBvZiBjdXJyZW50IHNlY3Rpb25cclxuICBzZWN0SWR4ITogbnVtYmVyO1xyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgZ3JvdXAgaW4gc2VjdGlvblxyXG4gIGdyb3VwSWR4SW5TZWN0aW9uITogbnVtYmVyO1xyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgcHJvbXB0IGl0ZW0gaW4gZ3JvdXBcclxuICBwcm9tcHRJdGVtSWR4SW5Hcm91cCE6IG51bWJlcjtcclxuXHJcbiAgcHJpdmF0ZSBhdXRvcmVjb3JkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgaXRlbXM6IFNwckl0ZW1zQ2FjaGV8bnVsbD1udWxsO1xyXG4gIC8vc2VsZWN0ZWRJdGVtSWR4OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheVJlY0ZpbGU6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBkaXNwbGF5UmVjRmlsZVZlcnNpb24hOiBudW1iZXI7XHJcblxyXG4gIHByb21wdEl0ZW1Db3VudCE6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICAgICAgICBzZXNzaW9uU2VydmljZTpTZXNzaW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVTZXJ2aWNlOlJlY29yZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgdXBsb2FkZXI6IFNwZWVjaFJlY29yZGVyVXBsb2FkZXIsXHJcbiAgICAgICAgICAgICAgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIGNvbmZpZz86IFNwZWVjaFJlY29yZGVyQ29uZmlnKSB7XHJcbiAgICBzdXBlcihjaGFuZ2VEZXRlY3RvclJlZixkaWFsb2csc2Vzc2lvblNlcnZpY2UsdXBsb2FkZXIsY29uZmlnKTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcbiAgICB0aGlzLmF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvJyk7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyA9IHRoaXMuY29uZmlnLmVuYWJsZVVwbG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3MgPSB0aGlzLmNvbmZpZy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUubGV2ZWxMaXN0ZW5lciA9IHRoaXMubGl2ZUxldmVsRGlzcGxheTtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLnBlYWtMZXZlbExpc3RlbmVyPShwZWFrTHZsSW5EYik9PntcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPXBlYWtMdmxJbkRiO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ29tIGRlc3Ryb3ksIGRpc2FibGUgd2FrZSBsb2NrLlwiKVxyXG4gICAgICB0aGlzLmRpc2FibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgICAgIHRoaXMuZGVzdHJveWVkPXRydWU7XHJcbiAgICAgICAvLyBUT0RPIHN0b3AgY2FwdHVyZSAvcGxheWJhY2tcclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5zZWN0SWR4ID0gMDtcclxuICAgIHRoaXMuZ3JvdXBJZHhJblNlY3Rpb24gPSAwO1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cCA9IDA7XHJcbiAgICB0aGlzLmF1dG9yZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgbGV0IGNvbnRleHQ6QXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnRleHQgPSBBdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAgIGxldCBlcnJNc2cgPSAnVW5rbm93biBlcnJvcic7XHJcbiAgICAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgICAgICBlcnJNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAgICAgICBhZHZpc2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZihjb250ZXh0KSB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlN0YXRlIG9mIGF1ZGlvIGNvbnRleHQ6IFwiICsgY29udGV4dC5zdGF0ZSlcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJObyBhdWRpbyBjb250ZXh0IGF2YWlsYWJsZSFcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWNvbnRleHQgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAgICAgICBhZHZpc2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjID0gbmV3IEF1ZGlvQ2FwdHVyZShjb250ZXh0KTtcclxuICAgICAgaWYgKHRoaXMuYWMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnN0YXJ0SXRlbSgpO1xyXG4gICAgICAgIHRoaXMuYWMubGlzdGVuZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgbGlzdCB0aGUgZGV2aWNlcyBoZXJlLiBJZiB3ZSBkbyBub3QgaGF2ZSBhdWRpbyBwZXJtaXNzaW9ucyB3ZSBvbmx5IGdldCBhbm9ueW1pemVkIGRldmljZXMgd2l0aG91dCBsYWJlbHMuXHJcbiAgICAgICAgLy90aGlzLmFjLmxpc3REZXZpY2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgZXJyTXNnID0gJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYS9BdWRpbyBBUEkhJztcclxuICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogJyArIGVyck1zZztcclxuICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgICBtc2c6IGVyck1zZyxcclxuICAgICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdG9wSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuc3RvcEl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5wYXVzZUl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMubmV4dEl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLm5leHRVbnJlY29yZGVkSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5wcmV2SXRlbSgpO1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLnN0YXJ0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5PRkY7XHJcblxyXG59XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlwcmVzcycsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlQcmVzcyhrZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGtlLmtleSA9PSAnICcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihrZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGtlLmtleSA9PSAnICcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtlLmtleSA9PSAncCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoa2Uua2V5ID09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGlmKCF0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkKXtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkPXRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZS5rZXkgPT0gJ01lZGlhUGxheVBhdXNlJykge1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVdha2VMb2NrKGRhdGFTYXZlZDpib29sZWFuPXRoaXMuZGF0YVNhdmVkKXtcclxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwZGF0ZSB3YWtlIGxvY2s6IGRhdGFTYXZlZDogXCIrZGF0YVNhdmVkK1wiLCBub3QgYWN0aXZlOiBcIishIHRoaXMuaXNBY3RpdmUoKSlcclxuICAgIGlmKGRhdGFTYXZlZCAmJiAhIHRoaXMuaXNBY3RpdmUoKSl7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVdha2VMb2NrQ29uZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvZ3Jlc3NQZXJjZW50VmFsdWUoKTpudW1iZXIge1xyXG4gICAgbGV0IHY9MTAwO1xyXG4gICAgaWYodGhpcy5pdGVtcykge1xyXG4gICAgICB2PXRoaXMucHJvbXB0SW5kZXggKiAxMDAgLyAodGhpcy5pdGVtcy5sZW5ndGgoKSAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfVxyXG4gIGlzVGVzdFNlc3Npb24oKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGUgPT09ICdURVNUJyB8fCB0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScgfHwgdGhpcy5fc2Vzc2lvbi50eXBlID09PSAnU0lOVVNfVEVTVCcpKTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpKTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb25PdmVyd3JpdGluZ1Byb2plY3RSZXF1aXJlbWVudHMoKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpICYmICh0aGlzLmF1ZGlvRGV2aWNlcyE9bnVsbCkgJiYgdGhpcy5hdWRpb0RldmljZXMubGVuZ3RoPjApXHJcbiAgfVxyXG5cclxuICBzZXQgY29udHJvbEF1ZGlvUGxheWVyKGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXIpIHtcclxuICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcj1jb250cm9sQXVkaW9QbGF5ZXI7XHJcbiAgICBpZiAodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5saXN0ZW5lciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29udHJvbEF1ZGlvUGxheWVyKCk6IEF1ZGlvUGxheWVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgc2NyaXB0KHNjcmlwdDogYW55KSB7XHJcbiAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7XHJcbiAgICB0aGlzLmxvYWRTY3JpcHQoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShlOiBBdWRpb1BsYXllckV2ZW50KSB7XHJcbiAgICBpZiAoZS50eXBlID09IEV2ZW50VHlwZS5TVEFSVEVEKSB7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVUaW1lcklkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAvL3RoaXMuYXVkaW9TaWduYWwucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLmFwLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgICAgfSwgNTApO1xyXG4gICAgfSBlbHNlIGlmIChlLnR5cGUgPT0gRXZlbnRUeXBlLlNUT1BQRUQgfHwgZS50eXBlID09IEV2ZW50VHlwZS5FTkRFRCkge1xyXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVRpbWVySWQpO1xyXG4gICAgICAvLyB0aGlzLmF1ZGlvU2lnbmFsLnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5hcC5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKCEodGhpcy5kaXNwbGF5UmVjRmlsZSkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBwcm9tcHRJbmRleCgpOm51bWJlcntcclxuICAgIHJldHVybiB0aGlzLl9wcm9tcHRJbmRleDtcclxuICB9XHJcblxyXG4gIHNldCBwcm9tcHRJbmRleChwcm9tcHRJbmRleDpudW1iZXIpe1xyXG4gICAgaWYocHJvbXB0SW5kZXg8MCB8fCBwcm9tcHRJbmRleD49dGhpcy5wcm9tcHRJdGVtQ291bnQpe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9tcHQgaW5kZXggb3V0IG9mIHJhbmdlXCIpXHJcbiAgICB9XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgc2VjdGlvbnM9dGhpcy5fc2NyaXB0LnNlY3Rpb25zO1xyXG4gICAgbGV0IGZvdW5kPWZhbHNlO1xyXG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IHNlY3Rpb25zLmxlbmd0aCAmJiAhZm91bmQ7IHNpKyspIHtcclxuICAgICAgbGV0IHNlY3Rpb24gPSBzZWN0aW9uc1tzaV07XHJcbiAgICAgIGxldCBncyA9IHNlY3Rpb24uX3NodWZmbGVkR3JvdXBzO1xyXG4gICAgICBmb3IgKGxldCBnaSA9IDA7IGdpIDwgZ3MubGVuZ3RoOyBnaSsrKSB7XHJcbiAgICAgICAgbGV0IHBpcz1nc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcblxyXG4gICAgICAgIGxldCBwaXNTaXplID0gcGlzLmxlbmd0aDtcclxuICAgICAgICBpZiAocHJvbXB0SW5kZXggPCBpICsgcGlzU2l6ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWN0SWR4ID0gc2k7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwSWR4SW5TZWN0aW9uPWdpO1xyXG4gICAgICAgICAgdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cCA9IHByb21wdEluZGV4IC0gaTtcclxuICAgICAgICAgIGZvdW5kPXRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSArPSBwaXNTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoZm91bmQpe1xyXG4gICAgICB0aGlzLl9wcm9tcHRJbmRleD1wcm9tcHRJbmRleDtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBlcnJvcjogUHJvbXB0IGluZGV4IG5vdCBmb3VuZFwiKVxyXG4gICAgfVxyXG4gICAgdGhpcy5rZWVwTGl2ZUxldmVsPWZhbHNlO1xyXG4gICAgdGhpcy5hcHBseUl0ZW0oKTtcclxuICB9XHJcblxyXG4gIGl0ZW1TZWxlY3QoaXRlbUlkeDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5JRExFKSB7XHJcbiAgICAgIHRoaXMucHJvbXB0SW5kZXg9aXRlbUlkeDtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyUHJlUmVjVGltZXIoKSB7XHJcbiAgICBpZiAodGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcpIHtcclxuICAgICAgaWYgKHRoaXMucHJlUmVjVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5wcmVSZWNUaW1lcklkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByZVJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclBvc3RSZWNUaW1lcigpe1xyXG4gICAgaWYgKHRoaXMucG9zdFJlY1RpbWVyUnVubmluZykge1xyXG4gICAgICBpZiAodGhpcy5wb3N0UmVjVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5wb3N0UmVjVGltZXJJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyTWF4UmVjVGltZXIoKXtcclxuICAgIGlmICh0aGlzLm1heFJlY1RpbWVyUnVubmluZykge1xyXG4gICAgICBpZiAodGhpcy5tYXhSZWNUaW1lcklkKSB7XHJcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLm1heFJlY1RpbWVySWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubWF4UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydEl0ZW0oKSB7XHJcbiAgICB0aGlzLnN0YXR1cz1TdGF0dXMuU1RBUlRJTkc7XHJcbiAgICBzdXBlci5zdGFydEl0ZW0oKTtcclxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzPVN0YXR1cy5JRExFO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkTmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlID0gbnVsbDtcclxuICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXkucmVzZXQodHJ1ZSk7XHJcbiAgICAvLyBIaWRlIGxvYWRpbmcgaGludCBvbiBsaXZlbGV2ZWwgZGlzcGxheVxyXG4gICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGU9TGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgIGlmICh0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9SRUNPUkRJTkcnKSB7XHJcbiAgICAgIHRoaXMuYXV0b3JlY29yZGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGFydENhcHR1cmUoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGxvYWRTY3JpcHQoKSB7XHJcbiAgICB0aGlzLnByb21wdEl0ZW1Db3VudCA9IDA7XHJcblxyXG4gICAgdGhpcy5pdGVtcyA9IG5ldyBTcHJJdGVtc0NhY2hlKCk7XHJcbiAgICBsZXQgbG4gPSAwO1xyXG5cclxuICAgIC8vVE9ETyByYW5kb21pemUgbm90IHN1cHBvcnRlZFxyXG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IHRoaXMuX3NjcmlwdC5zZWN0aW9ucy5sZW5ndGg7IHNpKyspIHtcclxuICAgICAgbGV0IHNlY3Rpb24gPSB0aGlzLl9zY3JpcHQuc2VjdGlvbnNbc2ldO1xyXG4gICAgICBsZXQgZ3MgPSBzZWN0aW9uLl9zaHVmZmxlZEdyb3VwcztcclxuICAgICAgZm9yKGxldCBnaT0wO2dpPGdzLmxlbmd0aDtnaSsrKSB7XHJcblxyXG4gICAgICAgICAgbGV0IHBpcyA9IGdzW2dpXS5fc2h1ZmZsZWRQcm9tcHRJdGVtcztcclxuXHJcbiAgICAgICAgICBsZXQgcGlzTGVuID0gcGlzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMucHJvbXB0SXRlbUNvdW50ICs9IHBpc0xlbjtcclxuICAgICAgICAgIGZvciAobGV0IHBpU2VjdElkeCA9IDA7IHBpU2VjdElkeCA8IHBpc0xlbjsgcGlTZWN0SWR4KyspIHtcclxuICAgICAgICAgICAgbGV0IHBpID0gcGlzW3BpU2VjdElkeF07XHJcbiAgICAgICAgICAgIGxldCBwcm9tcHRBc1N0ciA9IFByb21wdGl0ZW1VdGlsLnRvUGxhaW5UZXh0U3RyaW5nKHBpKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBpdCA9IG5ldyBJdGVtKHByb21wdEFzU3RyLCBzZWN0aW9uLnRyYWluaW5nLCghcGkudHlwZSB8fCBwaS50eXBlPT09J3JlY29yZGluZycpKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5hZGRJdGVtKGl0KTtcclxuICAgICAgICAgICAgbG4rKztcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvbXB0SW5kZXhCeUl0ZW1jb2RlKGl0ZW1jb2RlOnN0cmluZyk6bnVtYmVyfG51bGx7XHJcbiAgICBsZXQgcGl4ID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgdGhpcy5fc2NyaXB0LnNlY3Rpb25zLmxlbmd0aDsgc2krKykge1xyXG4gICAgICBsZXQgc2VjdGlvbiA9IHRoaXMuX3NjcmlwdC5zZWN0aW9uc1tzaV07XHJcbiAgICAgIGxldCBncyA9IHNlY3Rpb24uX3NodWZmbGVkR3JvdXBzO1xyXG4gICAgICBmb3IobGV0IGdpPTA7Z2k8Z3MubGVuZ3RoO2dpKyspIHtcclxuICAgICAgICBsZXQgcGlzPWdzW2dpXS5fc2h1ZmZsZWRQcm9tcHRJdGVtcztcclxuICAgICAgICBsZXQgcGlzTGVuID0gcGlzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBwaVNlY3RJZHggPSAwOyBwaVNlY3RJZHggPCBwaXNMZW47IHBpU2VjdElkeCsrKSB7XHJcbiAgICAgICAgICBsZXQgcGkgPSBwaXNbcGlTZWN0SWR4XTtcclxuICAgICAgICAgIGxldCBpYz1waS5pdGVtY29kZTtcclxuICAgICAgICAgIGlmKGljID09PSBpdGVtY29kZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBwaXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwaXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJQcm9tcHQoKSB7XHJcbiAgICAvL3RoaXMucHJvbXB0aW5nLnByb21wdENvbnRhaW5lci5wcm9tcHRlci5wcm9tcHRUZXh0PScnO1xyXG4gICAgLy90aGlzLm1lZGlhaXRlbSA9IG51bGw7XHJcbiAgICB0aGlzLnNob3dQcm9tcHQgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBhcHBseVByb21wdCgpIHtcclxuICAgIC8vdGhpcy5wcm9tcHRpbmcucHJvbXB0Q29udGFpbmVyLnByb21wdGVyLnByb21wdFRleHQ9dGhpcy5wcm9tcHRVbml0Lm1lZGlhaXRlbXNbMF0udGV4dDtcclxuICAgIC8vdGhpcy5wcm9tcHRUZXh0ID0gdGhpcy5wcm9tcHRVbml0Lm1lZGlhaXRlbXNbMF0udGV4dDtcclxuICAgIC8vdGhpcy5tZWRpYWl0ZW09dGhpcy5wcm9tcHRVbml0Lm1lZGlhaXRlbXNbMF07XHJcbiAgICB0aGlzLnNob3dQcm9tcHQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUmVjb3JkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzcGxheVJlY0ZpbGUpIHtcclxuICAgICAgbGV0IGFkaDogQXVkaW9EYXRhSG9sZGVyIHwgbnVsbCA9IHRoaXMuZGlzcGxheVJlY0ZpbGUuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICBsZXQgYXM6IEF1ZGlvU291cmNlfG51bGw9bnVsbDtcclxuICAgICAgaWYoYWRoKXtcclxuICAgICAgICBhcz1hZGguYXVkaW9Tb3VyY2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgd3cgPSBuZXcgV2F2V3JpdGVyKCk7XHJcbiAgICAgIGlmKGFzIGluc3RhbmNlb2YgQXVkaW9CdWZmZXJTb3VyY2UpIHtcclxuICAgICAgICB3dy53cml0ZUFzeW5jKGFzLmF1ZGlvQnVmZmVyLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt3YXZGaWxlXSwge3R5cGU6ICdhdWRpby93YXYnfSk7XHJcbiAgICAgICAgICBjb25zdCByZlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgICAgICAgY29uc3QgZGF0YURubExuayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgLy9kYXRhRG5sTG5rLm5hbWUgPSAnUmVjb3JkaW5nJztcclxuICAgICAgICAgIGRhdGFEbmxMbmsuaHJlZiA9IHJmVXJsO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuYm9keSwgZGF0YURubExuayk7XHJcblxyXG4gICAgICAgICAgLy8gZG93bmxvYWQgcHJvcGVydHkgbm90IHlldCBpbiBUUyBkZWZcclxuICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgICAgICAgIGxldCBmbiA9IHRoaXMuZGlzcGxheVJlY0ZpbGUuZmlsZW5hbWVTdHJpbmcoKTtcclxuICAgICAgICAgICAgZm4gKz0gJ18nICsgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb247XHJcbiAgICAgICAgICAgIGZuICs9ICcud2F2JztcclxuICAgICAgICAgICAgZGF0YURubExuay5kb3dubG9hZCA9IGZuO1xyXG4gICAgICAgICAgICBkYXRhRG5sTG5rLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHksIGRhdGFEbmxMbmspO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzcGxheVJlY0ZpbGUoZGlzcGxheVJlY0ZpbGU6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5UmVjRmlsZSA9IGRpc3BsYXlSZWNGaWxlO1xyXG5cclxuICAgIGlmICh0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICBpZih0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5jdXJyZW50UmVjb3JkaW5nRmlsZSA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhZGg6IEF1ZGlvRGF0YUhvbGRlcnwgbnVsbCA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgaWYoYWRoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChhZGgpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcDtcclxuICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vIGNsZWFyIGZvciBub3cgLi4uXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICBpZih0aGlzLmNvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllciAmJiB0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAvLy4uLiBhbmQgdHJ5IHRvIGZldGNoIGZyb20gc2VydmVyXHJcbiAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZT1MaXZlTGV2ZWxTdGF0ZS5MT0FESU5HO1xyXG4gICAgICAgICAgY29uc3QgcmY9dGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcblxyXG4gICAgICAgICAgbGV0IGF1ZGlvRG93bmxvYWRUeXBlPXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgICAgICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRD09PXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUgfHwgQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEPT09dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgICAvLyBEZWZhdWx0IGlzIG5ldHdvcmsgbW9kZVxyXG4gICAgICAgICAgICBhdWRpb0Rvd25sb2FkVHlwZT1BdWRpb1N0b3JhZ2VUeXBlLk5FVF9DSFVOS0VEO1xyXG4gICAgICAgICAgICBpZiAocmYuY2hhbm5lbHMgJiYgcmYuZnJhbWVzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2FtcGxlcyA9IHJmLmNoYW5uZWxzICogcmYuZnJhbWVzO1xyXG4gICAgICAgICAgICAgIGlmIChzYW1wbGVzIDw9IHRoaXMuX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBhdWRpbyBmaWxlIGlzIHNtYWxsLCBsb2FkIGluIGNvbnRpbnVvdXMgcmVzcC4gY2h1bmtlZCBtb2RlXHJcbiAgICAgICAgICAgICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRD09PXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICBhdWRpb0Rvd25sb2FkVHlwZT1BdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkU7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQ9PT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJBdWRpbyBkb3dubG9hZCB0eXBlOiBcIithdWRpb0Rvd25sb2FkVHlwZSk7XHJcbiAgICAgICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQ9PT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlKXtcclxuICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBpbmRleGVkIGRiIGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICBsZXQgbmV4dElhYjogSW5kZXhlZERiQXVkaW9CdWZmZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgaWYoIXRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQpe1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCdFcnJvcjogUGVyc2lzdGVudCBzdG9yYWdlIHRhcmdldCBub3Qgc2V0LicpO1xyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIGluZGV4ZWQgZGIuLi5cIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVJbmREYkF1ZGlvQnVmZmVyKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5jb250ZXh0LCB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0LCB0aGlzLl9zZXNzaW9uLnByb2plY3QsIHJmKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGlhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9ubWFuYWdlcjogUmVjZWl2ZWQgaW5kZGIgYXVkaW8gYnVmZmVyOiBcIitpYWIpO1xyXG4gICAgICAgICAgICAgICAgICBuZXh0SWFiID0gaWFiO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXh0SWFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dElhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNlIGlmKEF1ZGlvU3RvcmFnZVR5cGUuTkVUX0NIVU5LRUQ9PT1hdWRpb0Rvd25sb2FkVHlwZSl7XHJcbiAgICAgICAgICAgIC8vIEZldGNoIGNodW5rZWQgYXVkaW8gYnVmZmVyIGZyb20gbmV0d29ya1xyXG4gICAgICAgICAgICBsZXQgbmV4dE5ldEFiOiBOZXRBdWRpb0J1ZmZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJGZXRjaCBjaHVua2VkIGF1ZGlvIGZyb20gbmV0d29ya1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLmZldGNoU3ByUmVjb3JkaW5nRmlsZU5ldEF1ZGlvQnVmZmVyKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5jb250ZXh0LCB0aGlzLl9zZXNzaW9uLnByb2plY3QsIHJmKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKG5ldEFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb25tYW5hZ2VyOiBSZWNlaXZlZCBuZXQgYXVkaW8gYnVmZmVyOiBcIituZXRBYik7XHJcbiAgICAgICAgICAgICAgICAgIG5leHROZXRBYiA9IG5ldEFiO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXh0TmV0QWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmYgJiYgdGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmFiRGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKG5leHROZXRBYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInNldCBkaXNwbGF5UmVjRmlsZSgpOiBmZXRjaCBuZXQgYWIgY29tcGxldGUsIHNldCBkaXNwbGF5QXVkaW9DbGlwLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfWVsc2UgaWYoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRD09PWF1ZGlvRG93bmxvYWRUeXBlKXtcclxuICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBhcnJheSBhdWRpbyBidWZmZXJcclxuICAgICAgICAgICAgbGV0IG5leHRBYWI6IEFycmF5QXVkaW9CdWZmZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIChjaHVua2VkKSBhcnJheSBidWZmZXIuLi5cIik7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVjRmlsZVNlcnZpY2UuZmV0Y2hTcHJSZWNvcmRpbmdGaWxlQXJyYXlBdWRpb0J1ZmZlcih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuY29udGV4dCwgdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiAoYWFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuZXh0QWFiID0gYWFiO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRBYWIpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dEFhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLCBmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBhY3R1YWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBlcnJvciByZXNvbHZlclxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLidcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFiRGgpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGZhYkRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgbG9hZCByZWNvcmRpbmcgZmlsZSBmcm9tIHNlcnZlcjogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBGZXRjaCByZWd1bGFyIGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJGZXRjaCBhdWRpbyBhbmQgc3RvcmUgdG8gYXVkaW8gYnVmZmVyLi4uXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLmZldGNoU3ByUmVjb3JkaW5nRmlsZUF1ZGlvQnVmZmVyKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5jb250ZXh0LCB0aGlzLl9zZXNzaW9uLnByb2plY3QsIHJmKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IChhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWIpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoU2Vzc2lvbk1hbmFnZXIuRk9SQ0VfQVJSUkFZX0FVRElPX0JVRkZFUikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGFhYiA9IEFycmF5QXVkaW9CdWZmZXIuZnJvbUF1ZGlvQnVmZmVyKGFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGZhYkRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihhYWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZiwgZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYWN0dWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgcmVzb2x2ZXJcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBtZWFud2hpbGUsIGJ1dCB0aGUgcmVjb3JkZXIgdW5zdWJjcmliZXMgYmVmb3JlIGNoYW5naW5nIHRoZSBpdGVtLCB0aGVyZWZvcmUgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgdG8gc2V0IHRvIHdyb25nIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGRlY29kZWQuIEF1ZGlvIGNvbnRleHQgdW5hdmFpbGFibGUuJ1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgaWYodGhpcy5jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzcGxheVJlY0ZpbGUoKTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlSZWNGaWxlO1xyXG4gIH1cclxuXHJcbiAgaXNSZWNvcmRpbmdJdGVtKCk6Ym9vbGVhbntcclxuICAgIHJldHVybih0aGlzLnByb21wdEl0ZW0hPW51bGwgJiYgdGhpcy5wcm9tcHRJdGVtLnR5cGUhPT0nbm9ucmVjb3JkaW5nJylcclxuICB9XHJcblxyXG4gIHVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKCl7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ISh0aGlzLmFjICAmJiB0aGlzLmlzUmVjb3JkaW5nSXRlbSgpKTtcclxuICB9XHJcblxyXG4gIGFwcGx5SXRlbSh0ZW1wb3Jhcnk9ZmFsc2UpIHtcclxuXHJcbiAgICB0aGlzLnNlY3Rpb24gPSB0aGlzLl9zY3JpcHQuc2VjdGlvbnNbdGhpcy5zZWN0SWR4XVxyXG4gICAgdGhpcy5ncm91cCA9IHRoaXMuc2VjdGlvbi5fc2h1ZmZsZWRHcm91cHNbdGhpcy5ncm91cElkeEluU2VjdGlvbl07XHJcbiAgICB0aGlzLnByb21wdEl0ZW0gPSB0aGlzLmdyb3VwLl9zaHVmZmxlZFByb21wdEl0ZW1zW3RoaXMucHJvbXB0SXRlbUlkeEluR3JvdXBdO1xyXG5cclxuICAgIC8vdGhpcy5zZWxlY3RlZEl0ZW1JZHggPSB0aGlzLnByb21wdEluZGV4O1xyXG5cclxuICAgIGlmKHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbil7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVuc3Vic2NyaWJlIGZyb20gYXVkaW8gZmV0Y2guXCIpO1xyXG4gICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICghdGVtcG9yYXJ5KSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcD1udWxsO1xyXG4gICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgIH1cclxuICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlPUxpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG5cclxuICAgIHRoaXMuY2xlYXJQcm9tcHQoKTtcclxuXHJcbiAgICBjb25zdCBpc05vbnJlY29yZGluZz0odGhpcy5wcm9tcHRJdGVtLnR5cGU9PT0nbm9ucmVjb3JkaW5nJyk7XHJcblxyXG4gICAgaWYgKGlzTm9ucmVjb3JkaW5nIHx8ICF0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgfHwgdGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnSURMRScpIHtcclxuICAgICAgdGhpcy5hcHBseVByb21wdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGlzTm9ucmVjb3JkaW5nKXtcclxuICAgICAgdGhpcy5kaXNwbGF5UmVjRmlsZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLk9GRjtcclxuICAgIH1lbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICBsZXQgaXQgPSB0aGlzLml0ZW1zLmdldEl0ZW0odGhpcy5wcm9tcHRJbmRleCk7XHJcbiAgICAgICAgaWYgKCFpdC5yZWNzKSB7XHJcbiAgICAgICAgICBpdC5yZWNzID0gbmV3IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVjZW50UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGxldCBhdmFpbFJlY2ZpbGVzOiBudW1iZXIgPSBpdC5yZWNzLmxlbmd0aDtcclxuICAgICAgICBpZiAoYXZhaWxSZWNmaWxlcyA+IDApIHtcclxuICAgICAgICAgIGxldCByZlZlcnM6IG51bWJlciA9IGF2YWlsUmVjZmlsZXMgLSAxO1xyXG4gICAgICAgICAgcmVjZW50UmVjRmlsZSA9IGl0LnJlY3NbcmZWZXJzXTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGUgPSByZWNlbnRSZWNGaWxlO1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb24gPSByZlZlcnM7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuSURMRTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcImFwcGx5SXRlbSgpOiB0ZW1wb3Jhcnk6IFwiK3RlbXBvcmFyeSk7XHJcbiAgICAvL2lmICghdGVtcG9yYXJ5KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJhcHBseUl0ZW0oKTogQ2FsbCBzaG93UmVjb3JkaW5nKCk6IGRpc3BsYXlBdWRpb0NsaXA6IFwiK3RoaXMuZGlzcGxheUF1ZGlvQ2xpcCk7XHJcbiAgICAgIC8vdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAvL31cclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKVxyXG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpXHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhcnQoKSB7XHJcbiAgICBzdXBlci5zdGFydCgpO1xyXG4gICAgaWYodGhpcy5wcm9tcHRJdGVtQ291bnQ+MCkge1xyXG4gICAgICB0aGlzLnByb21wdEluZGV4ID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbigpXHJcbiAgfVxyXG5cclxuICBpc1JlY29yZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5QUkVfUkVDT1JESU5HIHx8IHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUkVDT1JESU5HIHx8IHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUE9TVF9SRUNfU1RPUCB8fCB0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlBPU1RfUkVDX1BBVVNFIHx8IHRoaXMuc3RhdHVzPT09U3RhdHVzLlNUT1BQSU5HX1NUT1ApO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKTogYm9vbGVhbntcclxuICAgIHJldHVybiAoISh0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLkJMT0NLRUQgfHwgdGhpcy5zdGF0dXM9PT0gU3RhdHVzLklETEUgfHwgdGhpcy5zdGF0dXM9PT1TdGF0dXMuRVJST1IpIHx8IHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyB8fCB0aGlzLnNlc3Npb25TZXJ2aWNlLnVwbG9hZENvdW50PjApXHJcbiAgfVxyXG5cclxuICAgIHByZXZJdGVtKCkge1xyXG4gICAgICAgbGV0IG5ld1BySWR4PXRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgICAgbmV3UHJJZHgtLTtcclxuICAgICAgIGlmKG5ld1BySWR4PDApe1xyXG4gICAgICAgICBuZXdQcklkeD10aGlzLnByb21wdEl0ZW1Db3VudC0xO1xyXG4gICAgICAgfVxyXG4gICAgICAgdGhpcy5wcm9tcHRJbmRleD1uZXdQcklkeDtcclxuICAgICAgLy90aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKClcclxuICAgIH1cclxuXHJcblxyXG4gIG5leHRJdGVtKCkge1xyXG4gICAgbGV0IG5ld1BySWR4PXRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgbmV3UHJJZHgrKztcclxuICAgIGlmKG5ld1BySWR4Pj10aGlzLnByb21wdEl0ZW1Db3VudCl7XHJcbiAgICAgIG5ld1BySWR4PTA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByb21wdEluZGV4PW5ld1BySWR4O1xyXG4gICAgLy90aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCl7XHJcbiAgICBsZXQgZndkTnh0QWN0aW9uRGlzYWJsZWQ9dHJ1ZTtcclxuICAgIGlmKHRoaXMuaXRlbXMpe1xyXG4gICAgICBsZXQgY3VyclJlY3M9dGhpcy5pdGVtcy5nZXRJdGVtKHRoaXMuX3Byb21wdEluZGV4KS5yZWNzO1xyXG4gICAgICBmd2ROeHRBY3Rpb25EaXNhYmxlZD0gISAoY3VyclJlY3MhPW51bGwgJiYgY3VyclJlY3MubGVuZ3RoPjApO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZCB8fCBmd2ROeHRBY3Rpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIG5leHRVbnJlY29yZGVkSXRlbSgpIHtcclxuICAgIGxldCBuZXdQcklkeCA9IHRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgbmV3UHJJZHgrKztcclxuICAgIGlmIChuZXdQcklkeCA+PSB0aGlzLnByb21wdEl0ZW1Db3VudCkge1xyXG4gICAgICBuZXdQcklkeCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLml0ZW1zIT1udWxsKSB7XHJcbiAgICAgIGxldCBpdD10aGlzLml0ZW1zLmdldEl0ZW0obmV3UHJJZHgpO1xyXG4gICAgICB3aGlsZSAoKCFpdC5yZWNvcmRpbmcgfHwgaXQuaXRlbURvbmUoKSkgJiYgbmV3UHJJZHggPCB0aGlzLnByb21wdEl0ZW1Db3VudCkge1xyXG4gICAgICAgIG5ld1BySWR4Kys7XHJcbiAgICAgICAgaXQ9dGhpcy5pdGVtcy5nZXRJdGVtKG5ld1BySWR4KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWl0Lml0ZW1Eb25lKCkpIHtcclxuICAgICAgICB0aGlzLnByb21wdEluZGV4ID0gbmV3UHJJZHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKSB7XHJcbiAgICBzdXBlci5lbmFibGVTdGFydFVzZXJHZXN0dXJlKCk7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ISh0aGlzLmFjICYmIHRoaXMuaXNSZWNvcmRpbmdJdGVtKCkpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTmF2aWdhdGlvbigpe1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydGVkKCkge1xyXG4gICAgbGV0IGljID0gdGhpcy5wcm9tcHRJdGVtLml0ZW1jb2RlO1xyXG4gICAgbGV0IHJmPW51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Nlc3Npb24gJiYgaWMpIHtcclxuICAgICAgbGV0IHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5fc2Vzc2lvbi5zZXNzaW9uSWQ7XHJcbiAgICAgIGxldCBjcElkeCA9IHRoaXMucHJvbXB0SW5kZXg7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKGNwSWR4KTtcclxuICAgICAgICBpZiAoIWl0LnJlY3MpIHtcclxuICAgICAgICAgIGl0LnJlY3MgPSBuZXcgQXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmYgPSBuZXcgU3ByUmVjb3JkaW5nRmlsZShzZXNzSWQsIGljLCBpdC5yZWNzLmxlbmd0aCxudWxsKTtcclxuICAgICAgICByZi51dWlkPXRoaXMucmZVdWlkO1xyXG4gICAgICAgIC8vaXQucmVjcy5wdXNoKHJmKTtcclxuICAgICAgICB0aGlzLml0ZW1zLmFkZFNwclJlY0ZpbGUoaXQscmYpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuY3VycmVudFJlY29yZGluZ0ZpbGU9cmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3JlY29yZGluZ0ZpbGUgPSByZjtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBSRV9SRUNPUkRJTkc7XHJcbiAgICBzdXBlci5zdGFydGVkKCk7XHJcblxyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLlBSRVJFQ09SRElORztcclxuICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uc3RhdHVzID09PSBcIkxPQURFRFwiKSB7XHJcbiAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb24udHJhaW5pbmcpIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJTVEFSVEVEX1RSQUlOSU5HXCJcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc3RhcnRlZFRyYWluaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LnN0YXJ0ZWRUcmFpbmluZ0RhdGUgPSB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJTVEFSVEVEXCJcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc3RhcnRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGFydGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGJvZHkuc3RhcnRlZERhdGUgPSB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgPT09ICdQUkVSRUNPUkRJTkcnIHx8IHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ1BSRVJFQ09SRElOR09OTFknKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nLi4uJztcclxuXHJcbiAgICBsZXQgcHJlRGVsYXkgPSBERUZBVUxUX1BSRV9SRUNfREVMQVk7XHJcbiAgICBpZiAodGhpcy5wcm9tcHRJdGVtLnByZXJlY2RlbGF5IT1udWxsKSB7XHJcbiAgICAgIHByZURlbGF5ID0gdGhpcy5wcm9tcHRJdGVtLnByZXJlY2RlbGF5O1xyXG4gICAgfWVsc2UgaWYgKHRoaXMucHJvbXB0SXRlbS5wcmVyZWNvcmRpbmchPW51bGwpIHtcclxuICAgICAgcHJlRGVsYXkgPSB0aGlzLnByb21wdEl0ZW0ucHJlcmVjb3JkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9zdERlbGF5PURFRkFVTFRfUE9TVF9SRUNfREVMQVk7XHJcbiAgICBpZih0aGlzLnByb21wdEl0ZW0ucG9zdHJlY2RlbGF5IT1udWxsKXtcclxuICAgICAgdGhpcy5wb3N0RGVsYXk9dGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNkZWxheTtcclxuICAgIH1lbHNlIGlmKHRoaXMucHJvbXB0SXRlbS5wb3N0cmVjb3JkaW5nIT1udWxsKXtcclxuICAgICAgdGhpcy5wb3N0RGVsYXk9dGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNvcmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1heFJlY29yZGluZ1RpbWVNcyA9IE1BWF9SRUNPUkRJTkdfVElNRV9NUztcclxuICAgIGlmICh0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24hPT1udWxsICYmIHRoaXMucHJvbXB0SXRlbS5yZWNkdXJhdGlvbiE9PXVuZGVmaW5lZCkge1xyXG4gICAgICBtYXhSZWNvcmRpbmdUaW1lTXMgPSBwcmVEZWxheSt0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24rdGhpcy5wb3N0RGVsYXk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1heFJlY1RpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZ01heFJlYygpXHJcbiAgICB9LCBtYXhSZWNvcmRpbmdUaW1lTXMpO1xyXG4gICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5wcmVSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUkVDT1JESU5HO1xyXG4gICAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuUkVDT1JESU5HO1xyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUFJFUkVDT1JESU5HT05MWScpe1xyXG4gICAgICAgIHRoaXMuY2xlYXJQcm9tcHQoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sIHByZURlbGF5KTtcclxuICAgIHRoaXMucHJlUmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHN0b3BJdGVtKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUE9TVF9SRUNfU1RPUDtcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QT1NUUkVDT1JESU5HO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfU1RPUDtcclxuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICB9LCB0aGlzLnBvc3REZWxheSk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcGF1c2VJdGVtKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUE9TVF9SRUNfUEFVU0U7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLlBPU1RSRUNPUkRJTkc7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfUEFVU0U7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xyXG4gICAgfSwgdGhpcy5wb3N0RGVsYXkpO1xyXG4gICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHN0b3BSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmNsZWFyTWF4UmVjVGltZXIoKTtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nTWF4UmVjKCl7XHJcbiAgICB0aGlzLmNsZWFyUHJlUmVjVGltZXIoKTtcclxuICAgIHRoaXMuY2xlYXJQb3N0UmVjVGltZXIoKTtcclxuICAgIHRoaXMubWF4UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19TVE9QO1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFJlY29yZGluZ0ZpbGVCeURlc2NyaXB0b3IocmZkOlJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbCl7XHJcbiAgICBpZihyZmQucmVjb3JkaW5nICYmIHJmZC5yZWNvcmRpbmcuaXRlbWNvZGUpIHtcclxuICAgICAgbGV0IHBySWR4ID0gdGhpcy5wcm9tcHRJbmRleEJ5SXRlbWNvZGUocmZkLnJlY29yZGluZy5pdGVtY29kZSk7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zIT1udWxsICYmIHBySWR4ICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKHBySWR4KTtcclxuICAgICAgICBpZiAoaXQgJiYgdGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgLy8gaWYgKCFpdC5yZWNzKSB7XHJcbiAgICAgICAgICAvLyAgIGl0LnJlY3MgPSBuZXcgQXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4oKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIGxldCByZiA9IG5ldyBTcHJSZWNvcmRpbmdGaWxlKHRoaXMuX3Nlc3Npb24uc2Vzc2lvbklkLCByZmQucmVjb3JkaW5nLml0ZW1jb2RlLCByZmQudmVyc2lvbiwgbnVsbCk7XHJcbiAgICAgICAgICByZi5zZXJ2ZXJQZXJzaXN0ZWQ9dHJ1ZTtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcImFkZFJlY29yZGluZ0ZpbGVCeURlc2NyaXB0b3IoKTogc3I6IFwiK3JmZC5zYW1wbGVyYXRlK1wiLCBmcmFtZXM6IFwiK3JmZC5mcmFtZXMpO1xyXG4gICAgICAgICAgaWYocmZkLnNhbXBsZXJhdGUgJiYgcmZkLmZyYW1lcyl7XHJcbiAgICAgICAgICAgIHJmLnNhbXBsZXJhdGU9cmZkLnNhbXBsZXJhdGU7XHJcbiAgICAgICAgICAgIHJmLmZyYW1lcz1yZmQuZnJhbWVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYocmZkLmNoYW5uZWxzKXtcclxuICAgICAgICAgICAgcmYuY2hhbm5lbHM9cmZkLmNoYW5uZWxzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pdGVtcy5hZGRTcHJSZWNGaWxlKGl0LHJmKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIldBUk46IE5vIHJlY29yZGluZyBpdGVtIHdpdGggY29kZTogXFxcIlwiICtyZmQucmVjb3JkaW5nLml0ZW1jb2RlKyBcIlxcXCIgZm91bmQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJXQVJOOiBObyByZWNvcmRpbmcgaXRlbSB3aXRoIGNvZGU6IFxcXCJcIiArcmZkLnJlY29yZGluZy5pdGVtY29kZSsgXCJcXFwiIGZvdW5kLlwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYWRkUmVjb3JkaW5nRmlsZUJ5UHJvbXB0SW5kZXgocHJvbXB0SW5kZXg6bnVtYmVyLCByZjpTcHJSZWNvcmRpbmdGaWxlKXtcclxuICAvL1xyXG4gIC8vIH1cclxuXHJcblxyXG4gIHN0b3BwZWQoKSB7XHJcbiAgICB0aGlzLmNsZWFyUHJlUmVjVGltZXIoKTtcclxuICAgIHRoaXMuY2xlYXJQb3N0UmVjVGltZXIoKTtcclxuICAgIHRoaXMuY2xlYXJNYXhSZWNUaW1lcigpO1xyXG4gICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbkRpc2FibGVTdGF0ZSgpXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRlZC4nO1xyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLklETEU7XHJcblxyXG4gICAgICBsZXQgYWRoOkF1ZGlvRGF0YUhvbGRlcnxudWxsPW51bGw7XHJcbiAgICAgIGxldCBhczpBdWRpb1NvdXJjZXxudWxsPW51bGw7XHJcbiAgICAgbGV0IGFiOkF1ZGlvQnVmZmVyfG51bGw9bnVsbDtcclxuICAgICAgaWYodGhpcy5hYykge1xyXG4gICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk5FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMua2VlcExpdmVMZXZlbD10cnVlO1xyXG4gICAgICAgICAgbGV0IGJ1cmw6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgICAgICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIGJyYW5jaCBldmVyIGNhbGxlZCA/XHJcbiAgICAgICAgICAgICAgbGV0IHJmID0gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgICAgICAgICAgICAgcmYuZnJhbWVzID0gdGhpcy5hYy5mcmFtZXNSZWNvcmRlZDtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzdG9wcGVkKCk6IFNldCBmcmFtZXM6IFwiK3JmLmZyYW1lcytcIiBvbiByZklkOiBcIit0aGlzLmRpc3BsYXlSZWNGaWxlPy5yZWNvcmRpbmdGaWxlSWQpO1xyXG4gICAgICAgICAgICAgIGJ1cmwgPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLnNwckF1ZGlvRmlsZVVybCh0aGlzLl9zZXNzaW9uPy5wcm9qZWN0LCByZik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uPy5wcm9qZWN0ICYmIHRoaXMuX3JlY29yZGluZ0ZpbGUgJiYgdGhpcy5fcmVjb3JkaW5nRmlsZSBpbnN0YW5jZW9mIFNwclJlY29yZGluZ0ZpbGUpIHtcclxuICAgICAgICAgICAgICBidXJsID0gdGhpcy5yZWNGaWxlU2VydmljZS5zcHJBdWRpb0ZpbGVVcmxCeUl0ZW1jb2RlKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCwgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQsIHRoaXMuX3JlY29yZGluZ0ZpbGUuaXRlbUNvZGUsIHRoaXMuX3JlY29yZGluZ0ZpbGUudmVyc2lvbik7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgY3JlYXRlIG5ldCBhdWRpbyBidWZmZXIuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChidXJsKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgclVVSUQgPSB0aGlzLmFjLnJlY1VVSUQ7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3IgPSB0aGlzLmFjLmN1cnJlbnRTYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoRmw9c3IqUmVjb3JkaW5nU2VydmljZS5ERUZBVUxUX0NIVU5LRURfRE9XTkxPQURfU0VDT05EUztcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzdG9wcGVkKCk6IHJmSUQ6IFwiK3RoaXMuX3JlY29yZGluZ0ZpbGU/LnJlY29yZGluZ0ZpbGVJZCtcIiwgbmV0IGFiIHVybDogXCIgKyBidXJsK1wiLCBmcmFtZXM6IFwiK3RoaXMuYWMuZnJhbWVzUmVjb3JkZWQrXCIsIHNhbXBsZSByYXRlOiBcIitzcik7XHJcbiAgICAgICAgICAgICAgbGV0IG5ldEFiID0gbmV3IE5ldEF1ZGlvQnVmZmVyKHRoaXMuYWMuY29udGV4dCwgdGhpcy5yZWNGaWxlU2VydmljZSwgYnVybCwgdGhpcy5hYy5jaGFubmVsQ291bnQsIHNyLCBjaEZsLCB0aGlzLmFjLmZyYW1lc1JlY29yZGVkLCByVVVJRCwgc3IpO1xyXG4gICAgICAgICAgICAgIGFzPW5ldEFiO1xyXG4gICAgICAgICAgICAgIGlmKHRoaXMudXBsb2FkU2V0KXtcclxuICAgICAgICAgICAgICAgIC8vbGV0IHJwPW5ldyBSZWFkeVByb3ZpZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAvL25ldEFiLnJlYWR5UHJvdmlkZXI9cnA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFNldC5vbkRvbmU9KHVwbG9hZFNldCk9PntcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcInVwbG9hZCBzZXQgb24gZG9uZTogQ2FsbCByZWFkeSBwcm92aWRlci5yZWFkeVwiKTtcclxuICAgICAgICAgICAgICAgICAgLy9ycC5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgICBuZXRBYi5yZWFkeSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlIHx8IEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRURfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICBpZiAoQXVkaW9TdG9yYWdlVHlwZS5NRU1fRU5USVJFX0FVVE9fTkVUX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSl7XHJcbiAgICAgICAgICAgIGNvbnN0IGFjQWI9dGhpcy5hYy5hdWRpb0J1ZmZlcigpO1xyXG4gICAgICAgICAgICBpZihhY0FiKSB7XHJcbiAgICAgICAgICAgICAgYXMgPSBuZXcgQXVkaW9CdWZmZXJTb3VyY2UoYWNBYik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRURfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKXtcclxuICAgICAgICAgICAgYXMgPSB0aGlzLmFjLmF1ZGlvQnVmZmVyQXJyYXkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKCFhcyl7XHJcbiAgICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5rZWVwTGl2ZUxldmVsPXRydWU7XHJcbiAgICAgICAgICAgIGxldCBidXJsOnN0cmluZ3xudWxsPW51bGw7XHJcbiAgICAgICAgICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5fZGlzcGxheVJlY0ZpbGUpIHtcclxuICAgICAgICAgICAgICAgIC8vIFRPRE8gaXMgdGhpcyBicmFuY2ggZXZlciBjYWxsZWQgP1xyXG4gICAgICAgICAgICAgICAgbGV0IHJmID0gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgICAgICAgICAgICAgICByZi5mcmFtZXMgPSB0aGlzLmFjLmZyYW1lc1JlY29yZGVkO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiBTZXQgZnJhbWVzOiBcIityZi5mcmFtZXMrXCIgb24gcmZJZDogXCIrdGhpcy5kaXNwbGF5UmVjRmlsZT8ucmVjb3JkaW5nRmlsZUlkKTtcclxuICAgICAgICAgICAgICAgIGJ1cmwgPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLnNwckF1ZGlvRmlsZVVybCh0aGlzLl9zZXNzaW9uPy5wcm9qZWN0LCByZik7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNlc3Npb24/LnByb2plY3QgJiYgdGhpcy5fcmVjb3JkaW5nRmlsZSAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlIGluc3RhbmNlb2YgU3ByUmVjb3JkaW5nRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsQnlJdGVtY29kZSh0aGlzLnNlc3Npb24/LnByb2plY3QsIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkLCB0aGlzLl9yZWNvcmRpbmdGaWxlLml0ZW1Db2RlLCB0aGlzLl9yZWNvcmRpbmdGaWxlLnZlcnNpb24pO1xyXG4gICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBjcmVhdGUgbmV0IGF1ZGlvIGJ1ZmZlci5cIik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmIChidXJsKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByVVVJRCA9IHRoaXMuYWMucmVjVVVJRDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNyID0gdGhpcy5hYy5jdXJyZW50U2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNoRmw9c3IqUmVjb3JkaW5nU2VydmljZS5ERUZBVUxUX0NIVU5LRURfRE9XTkxPQURfU0VDT05EUztcclxuICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInN0b3BwZWQoKTogcmZJRDogXCIrdGhpcy5fcmVjb3JkaW5nRmlsZT8ucmVjb3JkaW5nRmlsZUlkK1wiLCBuZXQgYWIgdXJsOiBcIiArIGJ1cmwrXCIsIGZyYW1lczogXCIrdGhpcy5hYy5mcmFtZXNSZWNvcmRlZCtcIiwgc2FtcGxlIHJhdGU6IFwiK3NyKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ldEFiID0gbmV3IE5ldEF1ZGlvQnVmZmVyKHRoaXMuYWMuY29udGV4dCwgdGhpcy5yZWNGaWxlU2VydmljZSwgYnVybCwgdGhpcy5hYy5jaGFubmVsQ291bnQsIHNyLCBjaEZsLCB0aGlzLmFjLmZyYW1lc1JlY29yZGVkLCByVVVJRCwgc3IpO1xyXG4gICAgICAgICAgICAgICAgYXMgPSBuZXRBYjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVwbG9hZFNldCkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnVwbG9hZFNldC5vbkRvbmUgPSAodXBsb2FkU2V0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5kZWJ1ZyhcInVwbG9hZCBzZXQgb24gZG9uZTogQ2FsbCByZWFkeSBwcm92aWRlci5yZWFkeVwiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbmV0QWIucmVhZHkoKTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoQXVkaW9TdG9yYWdlVHlwZS5EQl9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgIGFzID0gdGhpcy5hYy5pbmRkYkF1ZGlvQnVmZmVyQXJyYXkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0NIVU5LRUQgPT09IHRoaXMuYWMuYXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgYXMgPSB0aGlzLmFjLmF1ZGlvQnVmZmVyQXJyYXkoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgYWIgPSB0aGlzLmFjLmF1ZGlvQnVmZmVyKCk7XHJcbiAgICAgICAgICBpZihhYikge1xyXG4gICAgICAgICAgICBhcyA9IG5ldyBBdWRpb0J1ZmZlclNvdXJjZShhYik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhcykge1xyXG4gICAgICAgICAgYWRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihhcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgLy8gVXNlIGFuIG93biByZWZlcmVuY2Ugc2luY2UgdGhlIHdyaXRpbmcgb2YgdGhlIHdhdmUgZmlsZSBpcyBhc3luY2hyb25vdXMgYW5kIHRoaXMuX3JlY29yZGluZ0ZpbGUgbWlnaHQgYWxyZWFkeSBjb250YWluIHRoZSBuZXh0IHJlY29yZGluZ1xyXG4gICAgbGV0IHJmID0gdGhpcy5fcmVjb3JkaW5nRmlsZTtcclxuICAgIGlmIChyZiAmJiByZiBpbnN0YW5jZW9mIFNwclJlY29yZGluZ0ZpbGUpIHtcclxuICAgICAgdGhpcy5pdGVtcz8uc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZixhZGgpO1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVVcGxvYWRSZWNvcmRpbmdzICYmIEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRT09PXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAvLyBUT0RPIHVzZSBTcGVlY2hSZWNvcmRlcmNvbmZpZyByZXNwLiBSZWNmaWxlU2VydmljZVxyXG4gICAgICAgIC8vIGNvbnZlcnQgYXN5bmNocm9ub3VzbHkgdG8gMTYtYml0IGludGVnZXIgUENNXHJcbiAgICAgICAgLy8gVE9ETyBjb3VsZCB3ZSBhdm9pZCBjb252ZXJzaW9uIHRvIHNhdmUgQ1BVIHJlc291cmNlcyBhbmQgdHJhbnNmZXIgZmxvYXQgUENNIGRpcmVjdGx5P1xyXG4gICAgICAgIC8vIFRPRE8gZHVwbGljYXRlIGNvbnZlcnNpb24gZm9yIG1hbnVhbCBkb3dubG9hZFxyXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJCdWlsZCB3YXYgd3JpdGVyLi4uXCIpO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZz10cnVlXHJcbiAgICAgICAgaWYoYWIpIHtcclxuICAgICAgICAgIGxldCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgICAgICAgIC8vbmV3IFJFU1QgQVBJIFVSTFxyXG4gICAgICAgICAgbGV0IGFwaUVuZFBvaW50ID0gJyc7XHJcbiAgICAgICAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuYXBpRW5kUG9pbnQpIHtcclxuICAgICAgICAgICAgYXBpRW5kUG9pbnQgPSB0aGlzLmNvbmZpZy5hcGlFbmRQb2ludDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChhcGlFbmRQb2ludCAhPT0gJycpIHtcclxuICAgICAgICAgICAgYXBpRW5kUG9pbnQgPSBhcGlFbmRQb2ludCArICcvJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHNlc3Npb25zVXJsID0gYXBpRW5kUG9pbnQgKyBTZXNzaW9uU2VydmljZS5TRVNTSU9OX0FQSV9DVFg7XHJcbiAgICAgICAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHJmLnNlc3Npb24gKyAnLycgKyBSRUNGSUxFX0FQSV9DVFggKyAnLycgKyByZi5pdGVtQ29kZTtcclxuICAgICAgICAgIHd3LndyaXRlQXN5bmMoYWIsICh3YXZGaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zdFJlY29yZGluZyh3YXZGaWxlLCByZWNVcmwscmYpO1xyXG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NpbmdSZWNvcmRpbmcgPSBmYWxzZVxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVdha2VMb2NrKCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBjb21wbGV0ZSBzZXNzaW9uXHJcbiAgICBsZXQgY29tcGxldGUgPSB0cnVlO1xyXG4gICAgaWYodGhpcy5pdGVtcykge1xyXG4gICAgICAvLyBzZWFyY2ggYmFja3dhcmRzLCB0byBnYWluIGZhc3RlciBkZXRlY3Rpb24gb2YgaW5jb21wbGV0ZSBzdGF0ZVxyXG4gICAgICBmb3IgKGxldCByaSA9IHRoaXMuaXRlbXMubGVuZ3RoKCkgLSAxOyByaSA+PSAwOyByaS0tKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKHJpKTtcclxuICAgICAgICBpZiAoaXQucmVjb3JkaW5nICYmICFpdC50cmFpbmluZyAmJiAhaXQuaXRlbURvbmUoKSkge1xyXG4gICAgICAgICAgY29tcGxldGUgPSBmYWxzZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBhdXRvU3RhcnQgPSAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5TVE9QUElOR19TVE9QKTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcbiAgICBsZXQgc3RhcnROZXh0PWZhbHNlO1xyXG4gICAgaWYgKGNvbXBsZXRlKSB7XHJcbiAgICAgIGlmKHRoaXMuX3Nlc3Npb24hPW51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc2VhbGVkICYmIHRoaXMuX3Nlc3Npb24uc3RhdHVzICE9PSBcIkNPTVBMRVRFRFwiKSB7XHJcbiAgICAgICAgICBsZXQgYm9keTogYW55ID0ge31cclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJDT01QTEVURURcIjtcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uY29tcGxldGVkRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLmNvbXBsZXRlZERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LmNvbXBsZXRlZERhdGUgPSB0aGlzLl9zZXNzaW9uLmNvbXBsZXRlZERhdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1Nlc3Npb24gY29tcGxldGUhJztcclxuICAgICAgdGhpcy51cGRhdGVXYWtlTG9jaygpO1xyXG4gICAgICBsZXQgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihTZXNzaW9uRmluaXNoZWREaWFsb2csIHt9KTtcclxuXHJcbiAgICAgIC8vIGVuYWJsZSBuYXZpZ2F0aW9uXHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZVxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLmRpc2FibGVkID0gZmFsc2VcclxuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1BST0dSRVNTJyB8fCB0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9SRUNPUkRJTkcnKSB7XHJcbiAgICAgICAgdGhpcy5uZXh0SXRlbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJyAmJiB0aGlzLmF1dG9yZWNvcmRpbmcgJiYgYXV0b1N0YXJ0KSB7XHJcbiAgICAgICAgc3RhcnROZXh0PXRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVXYWtlTG9jaygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBhcHBseSByZWNvcmRlZCBpdGVtXHJcbiAgICB0aGlzLmFwcGx5SXRlbShzdGFydE5leHQpO1xyXG4gICAgaWYoc3RhcnROZXh0KXtcclxuICAgICAgdGhpcy5zdGFydEl0ZW0oKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IobXNnPSdBbiB1bmtub3duIGVycm9yIG9jY3VyZWQgZHVyaW5nIHJlY29yZGluZy4nLGFkdmljZTpzdHJpbmc9J1BsZWFzZSByZXRyeS4nKSB7XHJcbiAgICB0aGlzLnN0YXR1cz1TdGF0dXMuRVJST1I7XHJcbiAgICBzdXBlci5lcnJvcihtc2csYWR2aWNlKTtcclxuICAgIHRoaXMudXBkYXRlTmF2aWdhdGlvbkFjdGlvbnMoKTtcclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHBvc3RDaHVua0F1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOiBBdWRpb0J1ZmZlciwgY2h1bmtJZHg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gdHJ1ZTtcclxuICAgIGxldCB3dyA9IG5ldyBXYXZXcml0ZXIoKTtcclxuICAgIGxldCBzZXNzaW9uc1VybCA9IHRoaXMuc2Vzc2lvbnNCYXNlVXJsKCk7XHJcbiAgICBsZXQgcmVjVXJsOiBzdHJpbmcgPSBzZXNzaW9uc1VybCArICcvJyArIHRoaXMuc2Vzc2lvbj8uc2Vzc2lvbklkICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgdGhpcy5wcm9tcHRJdGVtLml0ZW1jb2RlKycvJyt0aGlzLnJmVXVpZCsnLycrY2h1bmtJZHg7XHJcbiAgICAvLyBUaGUgdXBsb2FkIGhvbGRlciBpcyByZXF1aXJlZCB0byBhZGQgdGhlIHVwbG9hZCBub3cgdG8gdGhlIHVwbG9hZCBzZXQuIFRoZSByZWFsIHVwbG9hZCBpcyBjcmVhdGVkIGFzeW5jIGluIHBvc3RyZWNvcmRpbmcgYW5kIHRoZSB1cGxvYWQgc2V0IGlzIGFscmVhZHkgY29tcGxldGUgYXQgdGhhdCB0aW1lLlxyXG4gICAgbGV0IHVsaD1uZXcgVXBsb2FkSG9sZGVyKCk7XHJcbiAgICBpZih0aGlzLnVwbG9hZFNldCl7XHJcbiAgICAgIHRoaXMudXBsb2FkU2V0LmFkZCh1bGgpO1xyXG4gICAgfVxyXG5cclxuICAgIHd3LndyaXRlQXN5bmMoYXVkaW9CdWZmZXIsICh3YXZGaWxlKSA9PiB7XHJcbiAgICAgIHRoaXMucG9zdFJlY29yZGluZyh3YXZGaWxlLCByZWNVcmwsbnVsbCx1bGgpO1xyXG4gICAgICB0aGlzLnByb2Nlc3NpbmdSZWNvcmRpbmcgPSBmYWxzZVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gcG9zdFJlY29yZGluZyh3YXZGaWxlOiBVaW50OEFycmF5LCByZWNVcmw6IHN0cmluZyxyZjpSZWNvcmRpbmdGaWxlfG51bGwpIHtcclxuICAvLyAgIGxldCB3YXZCbG9iID0gbmV3IEJsb2IoW3dhdkZpbGVdLCB7dHlwZTogJ2F1ZGlvL3dhdid9KTtcclxuICAvLyAgIGxldCB1bCA9IG5ldyBVcGxvYWQod2F2QmxvYiwgcmVjVXJsLHJmKTtcclxuICAvLyAgIHRoaXMudXBsb2FkZXIucXVldWVVcGxvYWQodWwpO1xyXG4gIC8vIH1cclxuXHJcbiAgc3RvcCgpIHtcclxuICAgIGlmKHRoaXMuYWMhPW51bGwpe1xyXG4gICAgICB0aGlzLmFjLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNvbnRyb2xQbGF5YmFja1Bvc2l0aW9uKCkge1xyXG4gICAgaWYgKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5wbGF5UG9zaXRpb25GcmFtZXMpIHtcclxuICAgICAgdGhpcy5wcm9tcHRpbmcuYXVkaW9EaXNwbGF5LnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5LnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5fY29udHJvbEF1ZGlvUGxheWVyLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1ZGlvUGxheWVyVXBkYXRlKGU6IEF1ZGlvUGxheWVyRXZlbnQpIHtcclxuICAgIGlmIChFdmVudFR5cGUuUkVBRFkgPT09IGUudHlwZSkge1xyXG5cclxuICAgIH0gZWxzZSBpZiAoRXZlbnRUeXBlLlNUQVJURUQgPT09IGUudHlwZSkge1xyXG4gICAgICAvL3RoaXMuc3RhdHVzID0gJ1BsYXliYWNrLi4uJztcclxuICAgICAgdGhpcy51cGRhdGVUaW1lcklkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHRoaXMudXBkYXRlQ29udHJvbFBsYXliYWNrUG9zaXRpb24oKSwgNTApO1xyXG5cclxuICAgIH0gZWxzZSBpZiAoRXZlbnRUeXBlLkVOREVEID09PSBlLnR5cGUpIHtcclxuICAgICAgLy8uc3RhdHVzPSdSZWFkeS4nO1xyXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVRpbWVySWQpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBpZighdGhpcy5kZXN0cm95ZWQpIHtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG59XHJcblxyXG4iXX0=
1314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvc3BlZWNocmVjb3JkZXIvc2Vzc2lvbi9zZXNzaW9ubWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUF1QixNQUFNLDZCQUE2QixDQUFDO0FBQy9FLE9BQU8sRUFBZ0MsU0FBUyxFQUFDLE1BQU0sNkJBQTZCLENBQUE7QUFDcEYsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ3BELE9BQU8sRUFBb0IsY0FBYyxFQUFrQixNQUFNLGtCQUFrQixDQUFDO0FBQ3BGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBOEIsTUFBTSxjQUFjLENBQUE7QUFDMUUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFHTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUlqRCxPQUFPLEVBQUMscUJBQXFCLEVBQXVCLE1BQU0sa0JBQWtCLENBQUM7QUFDN0UsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxJQUFJ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QUM7U0FDMUM7SUFFSCxDQUFDOzs0R0FsdkNVLGNBQWMseU1BNkRMLHFCQUFxQjtnR0E3RDlCLGNBQWMsMk5BNUVkLENBQUMsY0FBYyxDQUFDLHFFQTZGaEIsU0FBUyxpR0FDVCxRQUFRLHFGQTdGVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWlEVDs0RkEwQlUsY0FBYztrQkE5RTFCLFNBQVM7K0JBQ0UseUJBQXlCLGFBQ3hCLENBQUMsY0FBYyxDQUFDLFlBQ2pCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaURUOzswQkF1RlksTUFBTTsyQkFBQyxxQkFBcUI7NENBakRoQyxXQUFXO3NCQUFuQixLQUFLO2dCQUtrQyxTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0MsZ0JBQWdCO3NCQUF0RCxTQUFTO3VCQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRTVCLFNBQVM7c0JBQWpCLEtBQUs7Z0JBZ0tOLFVBQVU7c0JBRFQsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTM0MsU0FBUztzQkFEUixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBdWRpb0NhcHR1cmUsIEF1ZGlvQ2FwdHVyZUxpc3RlbmVyfSBmcm9tICcuLi8uLi9hdWRpby9jYXB0dXJlL2NhcHR1cmUnO1xyXG5pbXBvcnQge0F1ZGlvUGxheWVyLCBBdWRpb1BsYXllckV2ZW50LCBFdmVudFR5cGV9IGZyb20gJy4uLy4uL2F1ZGlvL3BsYXliYWNrL3BsYXllcidcclxuaW1wb3J0IHtXYXZXcml0ZXJ9IGZyb20gJy4uLy4uL2F1ZGlvL2ltcGwvd2F2d3JpdGVyJ1xyXG5pbXBvcnQge0dyb3VwLCBQcm9tcHRJdGVtLCBQcm9tcHRpdGVtVXRpbCwgU2NyaXB0LCBTZWN0aW9ufSBmcm9tICcuLi9zY3JpcHQvc2NyaXB0JztcclxuaW1wb3J0IHtTcHJSZWNvcmRpbmdGaWxlLCBSZWNvcmRpbmdGaWxlRGVzY3JpcHRvckltcGx9IGZyb20gJy4uL3JlY29yZGluZydcclxuaW1wb3J0IHtVcGxvYWRIb2xkZXJ9IGZyb20gJy4uLy4uL25ldC91cGxvYWRlcic7XHJcbmltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7U2Vzc2lvblNlcnZpY2V9IGZyb20gXCIuL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQge1N0YXRlIGFzIFN0YXJ0U3RvcFNpZ25hbFN0YXRlfSBmcm9tIFwiLi4vc3RhcnRzdG9wc2lnbmFsL3N0YXJ0c3RvcHNpZ25hbFwiO1xyXG5pbXBvcnQge01hdERpYWxvZ30gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2RpYWxvZ1wiO1xyXG5pbXBvcnQge1NwZWVjaFJlY29yZGVyVXBsb2FkZXJ9IGZyb20gXCIuLi9zcHJ1cGxvYWRlclwiO1xyXG5pbXBvcnQge1NQRUVDSFJFQ09SREVSX0NPTkZJRywgU3BlZWNoUmVjb3JkZXJDb25maWd9IGZyb20gXCIuLi8uLi9zcHIuY29uZmlnXCI7XHJcbmltcG9ydCB7UHJvbXB0aW5nfSBmcm9tIFwiLi9wcm9tcHRpbmdcIjtcclxuaW1wb3J0IHtTZXNzaW9uRmluaXNoZWREaWFsb2d9IGZyb20gXCIuL3Nlc3Npb25fZmluaXNoZWRfZGlhbG9nXCI7XHJcbmltcG9ydCB7TWVzc2FnZURpYWxvZ30gZnJvbSBcIi4uLy4uL3VpL21lc3NhZ2VfZGlhbG9nXCI7XHJcbmltcG9ydCB7UmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4uL3JlY29yZGluZ3MvcmVjb3JkaW5ncy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7QXVkaW9Db250ZXh0UHJvdmlkZXJ9IGZyb20gXCIuLi8uLi9hdWRpby9jb250ZXh0XCI7XHJcbmltcG9ydCB7QXVkaW9DbGlwfSBmcm9tIFwiLi4vLi4vYXVkaW8vcGVyc2lzdG9yXCI7XHJcbmltcG9ydCB7SXRlbX0gZnJvbSBcIi4vaXRlbVwiO1xyXG5pbXBvcnQge0xldmVsQmFyfSBmcm9tIFwiLi4vLi4vYXVkaW8vdWkvbGl2ZWxldmVsXCI7XHJcbmltcG9ydCB7XHJcbiAgQmFzaWNSZWNvcmRlcixcclxuICBDaHVua0F1ZGlvQnVmZmVyUmVjZWl2ZXIsXHJcbiAgTUFYX1JFQ09SRElOR19USU1FX01TLFxyXG4gIFJFQ0ZJTEVfQVBJX0NUWFxyXG59IGZyb20gXCIuL2Jhc2ljcmVjb3JkZXJcIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vYXJyYXlfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7QXVkaW9CdWZmZXJTb3VyY2UsIEF1ZGlvRGF0YUhvbGRlciwgQXVkaW9Tb3VyY2V9IGZyb20gXCIuLi8uLi9hdWRpby9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5pbXBvcnQge1Nwckl0ZW1zQ2FjaGV9IGZyb20gXCIuL3JlY29yZGluZ19maWxlX2NhY2hlXCI7XHJcbmltcG9ydCB7U3RhdGUgYXMgTGl2ZUxldmVsU3RhdGV9IGZyb20gXCIuLi8uLi9hdWRpby91aS9saXZlbGV2ZWxcIlxyXG5pbXBvcnQge0luZGV4ZWREYkF1ZGlvQnVmZmVyLCBQZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0fSBmcm9tIFwiLi4vLi4vYXVkaW8vaW5kZGJfYXVkaW9fYnVmZmVyXCI7XHJcbmltcG9ydCB7QXVkaW9TdG9yYWdlVHlwZX0gZnJvbSBcIi4uL3Byb2plY3QvcHJvamVjdFwiO1xyXG5pbXBvcnQge05ldEF1ZGlvQnVmZmVyfSBmcm9tIFwiLi4vLi4vYXVkaW8vbmV0X2F1ZGlvX2J1ZmZlclwiO1xyXG5cclxuY29uc3QgREVGQVVMVF9QUkVfUkVDX0RFTEFZPTEwMDA7XHJcbmNvbnN0IERFRkFVTFRfUE9TVF9SRUNfREVMQVk9NTAwO1xyXG5cclxuZXhwb3J0IGNvbnN0IGVudW0gU3RhdHVzIHtcclxuICBCTE9DS0VELCBJRExFLCBTVEFSVElORywgUFJFX1JFQ09SRElORywgUkVDT1JESU5HLCBQT1NUX1JFQ19TVE9QLCBQT1NUX1JFQ19QQVVTRSwgU1RPUFBJTkdfU1RPUCwgU1RPUFBJTkdfUEFVU0UsIEVSUk9SXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNwcnJlY29yZGluZ3Nlc3Npb24nLFxyXG4gIHByb3ZpZGVyczogW1Nlc3Npb25TZXJ2aWNlXSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGVzdCByZWNvcmRpbmcgb25seSFcIj48L2FwcC13YXJuaW5nYmFyPlxyXG4gICAgPGFwcC13YXJuaW5nYmFyIFtzaG93XT1cImlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKVwiIHdhcm5pbmdUZXh0PVwiVGhpcyB0ZXN0IHVzZXMgZGVmYXVsdCBhdWRpbyBkZXZpY2UhIFJlZ3VsYXIgc2Vzc2lvbnMgbWF5IHJlcXVpcmUgYSBwYXJ0aWN1bGFyIGF1ZGlvIGRldmljZSAobWljcm9waG9uZSkhXCI+PC9hcHAtd2FybmluZ2Jhcj5cclxuICAgICAgPGFwcC1zcHJwcm9tcHRpbmcgW3Byb2plY3ROYW1lXT1cInByb2plY3ROYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXJ0U3RvcFNpZ25hbFN0YXRlXT1cInN0YXJ0U3RvcFNpZ25hbFN0YXRlXCIgW3Byb21wdEl0ZW1dPVwicHJvbXB0SXRlbVwiIFtzaG93UHJvbXB0XT1cInNob3dQcm9tcHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiaXRlbXM/Lml0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RyYW5zcG9ydEFjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1JZHhdPVwicHJvbXB0SW5kZXhcIiAob25JdGVtU2VsZWN0KT1cIml0ZW1TZWxlY3QoJGV2ZW50KVwiIChvbk5leHRJdGVtKT1cIm5leHRJdGVtKClcIiAob25QcmV2SXRlbSk9XCJwcmV2SXRlbSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1ZGlvU2lnbmFsQ29sbGFwc2VkXT1cImF1ZGlvU2lnbmFsQ29sbGFwc2VkXCIgW2Rpc3BsYXlBdWRpb0NsaXBdPVwiZGlzcGxheUF1ZGlvQ2xpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U2VsZWN0aW9uQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RhcnRTZWxlY3Rpb25BY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbl09XCJjb250cm9sQXVkaW9QbGF5ZXI/LmF1dG9QbGF5T25TZWxlY3RUb2dnbGVBY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxheVN0b3BBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdG9wQWN0aW9uXCI+XHJcblxyXG4gICAgPC9hcHAtc3BycHJvbXB0aW5nPlxyXG4gICAgPG1hdC1wcm9ncmVzcy1iYXIgW3ZhbHVlXT1cInByb2dyZXNzUGVyY2VudFZhbHVlKClcIiBmeFNob3c9XCJmYWxzZVwiIGZ4U2hvdy54cz1cInRydWVcIiA+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG5cclxuXHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXQueHM9XCJjb2x1bW5cIiBbbmdTdHlsZV09XCJ7J2hlaWdodC5weCc6MTAwLCdtaW4taGVpZ2h0LnB4JzogMTAwfVwiIFtuZ1N0eWxlLnhzXT1cInsnaGVpZ2h0LnB4JzoxMjUsJ21pbi1oZWlnaHQucHgnOiAxMjV9XCI+XHJcbiAgICAgIDxhdWRpby1sZXZlbGJhciBmeEZsZXg9XCIxIDAgMVwiIFtzdHJlYW1pbmdNb2RlXT1cImlzUmVjb3JkaW5nKCkgfHwga2VlcExpdmVMZXZlbFwiIFtkaXNwbGF5TGV2ZWxJbmZvc109XCJkaXNwbGF5QXVkaW9DbGlwPy5sZXZlbEluZm9zXCIgIFtzdGF0ZV09XCJsaXZlTGV2ZWxEaXNwbGF5U3RhdGVcIj48L2F1ZGlvLWxldmVsYmFyPlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCI+XHJcbiAgICAgICAgPHNwci1yZWNvcmRpbmdpdGVtY29udHJvbHMgZnhGbGV4PVwiMTAgMCAxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXVkaW9Mb2FkZWRdPVwiYXVkaW9Mb2FkZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlQXVkaW9EZXRhaWxzXT1cImRpc2FibGVBdWRpb0RldGFpbHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwiY29udHJvbEF1ZGlvUGxheWVyPy5zdGFydEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYXlTdG9wQWN0aW9uXT1cImNvbnRyb2xBdWRpb1BsYXllcj8uc3RvcEFjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BlYWtEYkx2bF09XCJwZWFrTGV2ZWxJbkRiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWdjXT1cInRoaXMuYWM/LmFnY1N0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9uU2hvd1JlY29yZGluZ0RldGFpbHMpPVwiYXVkaW9TaWduYWxDb2xsYXBzZWQ9IWF1ZGlvU2lnbmFsQ29sbGFwc2VkXCI+XHJcbiAgICAgICAgPC9zcHItcmVjb3JkaW5naXRlbWNvbnRyb2xzPlxyXG5cclxuICAgICAgICA8YXBwLXVwbG9hZHN0YXR1cyBjbGFzcz1cInJpY29udHJvbHMgZGFya1wiIGZ4SGlkZSBmeFNob3cueHMgIGZ4RmxleD1cIjAgMCAwXCIgKm5nSWY9XCJlbmFibGVVcGxvYWRSZWNvcmRpbmdzXCIgW3ZhbHVlXT1cInVwbG9hZFByb2dyZXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RhdHVzXT1cInVwbG9hZFN0YXR1c1wiIFthd2FpdE5ld1VwbG9hZF09XCJwcm9jZXNzaW5nUmVjb3JkaW5nXCI+PC9hcHAtdXBsb2Fkc3RhdHVzPlxyXG4gICAgICAgIDxhcHAtd2FrZWxvY2tpbmRpY2F0b3IgY2xhc3M9XCJyaWNvbnRyb2xzIGRhcmtcIiBmeEhpZGUgZnhTaG93LnhzIGZ4RmxleD1cIjAgMCAwXCIgW3NjcmVlbkxvY2tlZF09XCJzY3JlZW5Mb2NrZWRcIj48L2FwcC13YWtlbG9ja2luZGljYXRvcj5cclxuICAgICAgICA8YXBwLXJlYWR5c3RhdGVpbmRpY2F0b3IgY2xhc3M9XCJyaWNvbnRyb2xzIGRhcmtcIiBmeEhpZGUgZnhTaG93LnhzIGZ4RmxleD1cIjAgMCAwXCIgW3JlYWR5XT1cImRhdGFTYXZlZCAmJiAhaXNBY3RpdmUoKVwiPjwvYXBwLXJlYWR5c3RhdGVpbmRpY2F0b3I+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICNjb250cm9scGFuZWwgY2xhc3M9XCJjb250cm9scGFuZWxcIiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIjEgMSAzMCVcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgICAgPGFwcC1zcHJzdGF0dXNkaXNwbGF5IGZ4SGlkZS54cyBbc3RhdHVzTXNnXT1cInN0YXR1c01zZ1wiIFtzdGF0dXNBbGVydFR5cGVdPVwic3RhdHVzQWxlcnRUeXBlXCIgW3N0YXR1c1dhaXRpbmddPVwic3RhdHVzV2FpdGluZ1wiPjwvYXBwLXNwcnN0YXR1c2Rpc3BsYXk+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8YXBwLXNwcnRyYW5zcG9ydCBmeEZsZXg9XCIxMCAwIDMwJVwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCIgW2FjdGlvbnNdPVwidHJhbnNwb3J0QWN0aW9uc1wiIFtuYXZpZ2F0aW9uRW5hYmxlZF09XCIhaXRlbXMgfHwgaXRlbXMubGVuZ3RoKCk+MVwiPjwvYXBwLXNwcnRyYW5zcG9ydD5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIxIDEgMzAlXCIgZnhMYXlvdXRBbGlnbj1cImVuZCBjZW50ZXJcIiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgIDxhcHAtdXBsb2Fkc3RhdHVzIGNsYXNzPVwicmljb250cm9sc1wiIGZ4SGlkZS54cyBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiICpuZ0lmPVwiZW5hYmxlVXBsb2FkUmVjb3JkaW5nc1wiIFt2YWx1ZV09XCJ1cGxvYWRQcm9ncmVzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0YXR1c109XCJ1cGxvYWRTdGF0dXNcIiBbYXdhaXROZXdVcGxvYWRdPVwicHJvY2Vzc2luZ1JlY29yZGluZ1wiPjwvYXBwLXVwbG9hZHN0YXR1cz5cclxuICAgICAgICA8YXBwLXdha2Vsb2NraW5kaWNhdG9yIGNsYXNzPVwicmljb250cm9sc1wiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhIaWRlLnhzIFtzY3JlZW5Mb2NrZWRdPVwic2NyZWVuTG9ja2VkXCI+PC9hcHAtd2FrZWxvY2tpbmRpY2F0b3I+XHJcbiAgICAgICAgPGFwcC1yZWFkeXN0YXRlaW5kaWNhdG9yIGNsYXNzPVwicmljb250cm9sc1wiIGZ4TGF5b3V0QWxpZ249XCJlbmQgY2VudGVyXCIgZnhIaWRlLnhzIFtyZWFkeV09XCJkYXRhU2F2ZWQgJiYgIWlzQWN0aXZlKClcIj48L2FwcC1yZWFkeXN0YXRlaW5kaWNhdG9yPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYDpob3N0IHtcclxuICAgIGZsZXg6IDI7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XHJcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBWZXJ0aWNhbCBmbGV4IGNvbnRhaW5lcjogQm90dG9tIHRyYW5zcG9ydCBwYW5lbCwgYWJvdmUgcHJvbXB0aW5nIHBhbmVsICovXHJcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgbWFyZ2luOiAwO1xyXG4gICAgcGFkZGluZzogMDtcclxuICAgIG1pbi1oZWlnaHQ6IDBweDtcclxuXHJcbiAgICAgIC8qIFByZXZlbnRzIGhvcml6b250YWwgc2Nyb2xsIGJhciBvbiBzd2lwZSByaWdodCAqL1xyXG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gIH1gLGAucmljb250cm9scyB7XHJcbiAgICAgICAgcGFkZGluZzogNHB4O1xyXG4gICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgfWAsYC5kYXJrIHtcclxuICAgIGJhY2tncm91bmQ6IGRhcmtncmF5O1xyXG4gIH1gLGAuY29udHJvbHBhbmVsIHtcclxuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcclxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICBtYXJnaW46IDA7XHJcbiAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgbWluLWhlaWdodDogbWluLWNvbnRlbnQ7IC8qIGltcG9ydGFudCAqL1xyXG4gIH1gXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2Vzc2lvbk1hbmFnZXIgZXh0ZW5kcyBCYXNpY1JlY29yZGVyIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCxPbkRlc3Ryb3ksIEF1ZGlvQ2FwdHVyZUxpc3RlbmVyLENodW5rQXVkaW9CdWZmZXJSZWNlaXZlciB7XHJcbiAgZ2V0IHBlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQoKTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQ7XHJcbiAgfVxyXG5cclxuICBzZXQgcGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCh2YWx1ZTogUGVyc2lzdGVudEF1ZGlvU3RvcmFnZVRhcmdldCB8IG51bGwpIHtcclxuICAgIHRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQgPSB2YWx1ZTtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0ID0gdGhpcy5wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgcHJvamVjdE5hbWU6c3RyaW5nfHVuZGVmaW5lZDtcclxuICBlbmFibGVVcGxvYWRSZWNvcmRpbmdzOiBib29sZWFuID0gdHJ1ZTtcclxuICBlbmFibGVEb3dubG9hZFJlY29yZGluZ3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzdGF0dXM6IFN0YXR1cyA9IFN0YXR1cy5CTE9DS0VEO1xyXG5cclxuICBAVmlld0NoaWxkKFByb21wdGluZywgeyBzdGF0aWM6IHRydWUgfSkgcHJvbXB0aW5nITogUHJvbXB0aW5nO1xyXG4gIEBWaWV3Q2hpbGQoTGV2ZWxCYXIsIHsgc3RhdGljOiB0cnVlIH0pIGxpdmVMZXZlbERpc3BsYXkhOiBMZXZlbEJhcjtcclxuXHJcbiAgQElucHV0KCkgZGF0YVNhdmVkPXRydWVcclxuXHJcbiAgc3RhcnRTdG9wU2lnbmFsU3RhdGUhOiBTdGFydFN0b3BTaWduYWxTdGF0ZTtcclxuXHJcbiAgcHJpdmF0ZSBwcmVSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcHJlUmVjVGltZXJSdW5uaW5nOiBib29sZWFufG51bGw9bnVsbDtcclxuICBwcml2YXRlIHBvc3REZWxheTpudW1iZXI9REVGQVVMVF9QT1NUX1JFQ19ERUxBWTtcclxuICBwcml2YXRlIHBvc3RSZWNUaW1lcklkOiBudW1iZXJ8bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgcG9zdFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcbiAgLy9wcml2YXRlIG1heFJlY1RpbWVyUnVubmluZzogYm9vbGVhbnxudWxsPW51bGw7XHJcblxyXG4gIGF1ZGlvOiBhbnk7XHJcbiAgX3NjcmlwdCE6IFNjcmlwdDtcclxuICBwcml2YXRlIF9wcm9tcHRJbmRleD0wO1xyXG4gIHByaXZhdGUgc2VjdGlvbiE6IFNlY3Rpb247XHJcbiAgZ3JvdXAhOiBHcm91cDtcclxuICBwcm9tcHRJdGVtITpQcm9tcHRJdGVtO1xyXG4gIHNob3dQcm9tcHQhOiBib29sZWFuO1xyXG5cclxuICAvLyBpbmRleCBvZiBjdXJyZW50IHNlY3Rpb25cclxuICBzZWN0SWR4ITogbnVtYmVyO1xyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgZ3JvdXAgaW4gc2VjdGlvblxyXG4gIGdyb3VwSWR4SW5TZWN0aW9uITogbnVtYmVyO1xyXG4gIC8vIGluZGV4IG9mIGN1cnJlbnQgcHJvbXB0IGl0ZW0gaW4gZ3JvdXBcclxuICBwcm9tcHRJdGVtSWR4SW5Hcm91cCE6IG51bWJlcjtcclxuXHJcbiAgcHJpdmF0ZSBhdXRvcmVjb3JkaW5nITogYm9vbGVhbjtcclxuXHJcbiAgaXRlbXM6IFNwckl0ZW1zQ2FjaGV8bnVsbD1udWxsO1xyXG4gIC8vc2VsZWN0ZWRJdGVtSWR4OiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfZGlzcGxheVJlY0ZpbGU6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBkaXNwbGF5UmVjRmlsZVZlcnNpb24hOiBudW1iZXI7XHJcblxyXG4gIHByb21wdEl0ZW1Db3VudCE6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgICAgICAgICAgICBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgICAgICAgICAgICBzZXNzaW9uU2VydmljZTpTZXNzaW9uU2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHJlY0ZpbGVTZXJ2aWNlOlJlY29yZGluZ1NlcnZpY2UsXHJcbiAgICAgICAgICAgICAgdXBsb2FkZXI6IFNwZWVjaFJlY29yZGVyVXBsb2FkZXIsXHJcbiAgICAgICAgICAgICAgQEluamVjdChTUEVFQ0hSRUNPUkRFUl9DT05GSUcpIGNvbmZpZz86IFNwZWVjaFJlY29yZGVyQ29uZmlnKSB7XHJcbiAgICBzdXBlcihjaGFuZ2VEZXRlY3RvclJlZixkaWFsb2csc2Vzc2lvblNlcnZpY2UsdXBsb2FkZXIsY29uZmlnKTtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLklETEU7XHJcbiAgICB0aGlzLmF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvJyk7XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyA9IHRoaXMuY29uZmlnLmVuYWJsZVVwbG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZW5hYmxlRG93bmxvYWRSZWNvcmRpbmdzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3MgPSB0aGlzLmNvbmZpZy5lbmFibGVEb3dubG9hZFJlY29yZGluZ3M7XHJcbiAgICB9XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5zdHJlYW1MZXZlbE1lYXN1cmUubGV2ZWxMaXN0ZW5lciA9IHRoaXMubGl2ZUxldmVsRGlzcGxheTtcclxuICAgIHRoaXMuc3RyZWFtTGV2ZWxNZWFzdXJlLnBlYWtMZXZlbExpc3RlbmVyPShwZWFrTHZsSW5EYik9PntcclxuICAgICAgdGhpcy5wZWFrTGV2ZWxJbkRiPXBlYWtMdmxJbkRiO1xyXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuICB9XHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ29tIGRlc3Ryb3ksIGRpc2FibGUgd2FrZSBsb2NrLlwiKVxyXG4gICAgICB0aGlzLmRpc2FibGVXYWtlTG9ja0NvbmQoKTtcclxuICAgICAgIHRoaXMuZGVzdHJveWVkPXRydWU7XHJcbiAgICAgICAvLyBUT0RPIHN0b3AgY2FwdHVyZSAvcGxheWJhY2tcclxuICAgIH1cclxuXHJcbiAgcHJpdmF0ZSBpbml0KCkge1xyXG4gICAgdGhpcy5zZWN0SWR4ID0gMDtcclxuICAgIHRoaXMuZ3JvdXBJZHhJblNlY3Rpb24gPSAwO1xyXG4gICAgdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cCA9IDA7XHJcbiAgICB0aGlzLmF1dG9yZWNvcmRpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdGFydEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgbGV0IGNvbnRleHQ6QXVkaW9Db250ZXh0fG51bGw9bnVsbDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnRleHQgPSBBdWRpb0NvbnRleHRQcm92aWRlci5hdWRpb0NvbnRleHRJbnN0YW5jZSgpXHJcbiAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAgIGxldCBlcnJNc2cgPSAnVW5rbm93biBlcnJvcic7XHJcbiAgICAgIGlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcclxuICAgICAgICBlcnJNc2c9ZXJyLm1lc3NhZ2U7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAgICAgICBhZHZpc2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZihjb250ZXh0KSB7XHJcbiAgICAgIGNvbnNvbGUuaW5mbyhcIlN0YXRlIG9mIGF1ZGlvIGNvbnRleHQ6IFwiICsgY29udGV4dC5zdGF0ZSlcclxuICAgIH1lbHNle1xyXG4gICAgICBjb25zb2xlLmluZm8oXCJObyBhdWRpbyBjb250ZXh0IGF2YWlsYWJsZSFcIik7XHJcbiAgICB9XHJcbiAgICBpZiAoIWNvbnRleHQgfHwgIW5hdmlnYXRvci5tZWRpYURldmljZXMpIHtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuRVJST1I7XHJcbiAgICAgIGxldCBlcnJNc2cgPSAnQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IE1lZGlhIHN0cmVhbXMhJztcclxuICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnRVJST1I6ICcgKyBlcnJNc2c7XHJcbiAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcclxuICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgbXNnOiBlcnJNc2csXHJcbiAgICAgICAgICBhZHZpc2U6ICdQbGVhc2UgdXNlIGEgc3VwcG9ydGVkIGJyb3dzZXIuJyxcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFjID0gbmV3IEF1ZGlvQ2FwdHVyZShjb250ZXh0KTtcclxuICAgICAgaWYgKHRoaXMuYWMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLnN0YXJ0SXRlbSgpO1xyXG4gICAgICAgIHRoaXMuYWMubGlzdGVuZXIgPSB0aGlzO1xyXG5cclxuICAgICAgICB0aGlzLmNvbmZpZ3VyZVN0cmVhbUNhcHR1cmVTdHJlYW0oKTtcclxuXHJcbiAgICAgICAgLy8gRG9uJ3QgbGlzdCB0aGUgZGV2aWNlcyBoZXJlLiBJZiB3ZSBkbyBub3QgaGF2ZSBhdWRpbyBwZXJtaXNzaW9ucyB3ZSBvbmx5IGdldCBhbm9ueW1pemVkIGRldmljZXMgd2l0aG91dCBsYWJlbHMuXHJcbiAgICAgICAgLy90aGlzLmFjLmxpc3REZXZpY2VzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICBsZXQgZXJyTXNnID0gJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBNZWRpYS9BdWRpbyBBUEkhJztcclxuICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdFUlJPUjogJyArIGVyck1zZztcclxuICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgdGhpcy5kaWFsb2cub3BlbihNZXNzYWdlRGlhbG9nLCB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXHJcbiAgICAgICAgICAgIHRpdGxlOiAnRXJyb3InLFxyXG4gICAgICAgICAgICBtc2c6IGVyck1zZyxcclxuICAgICAgICAgICAgYWR2aXNlOiAnUGxlYXNlIHVzZSBhIHN1cHBvcnRlZCBicm93c2VyLicsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5zdG9wQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5zdG9wSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuc3RvcEl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5wYXVzZUl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMubmV4dEl0ZW0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24ub25BY3Rpb24gPSAoKSA9PiB0aGlzLm5leHRVbnJlY29yZGVkSXRlbSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLm9uQWN0aW9uID0gKCkgPT4gdGhpcy5wcmV2SXRlbSgpO1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5vbkFjdGlvbiA9ICgpID0+IHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLnN0YXJ0KCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5PRkY7XHJcblxyXG59XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzprZXlwcmVzcycsIFsnJGV2ZW50J10pXHJcbiAgb25LZXlQcmVzcyhrZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGtlLmtleSA9PSAnICcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0YXJ0QWN0aW9uLnBlcmZvcm0oKTtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIG9uS2V5RG93bihrZTogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGtlLmtleSA9PSAnICcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKGtlLmtleSA9PSAncCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoa2Uua2V5ID09ICdFc2NhcGUnKSB7XHJcbiAgICAgIGlmKCF0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkKXtcclxuICAgICAgICB0aGlzLmF1ZGlvU2lnbmFsQ29sbGFwc2VkPXRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24ucGVyZm9ybSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrZS5rZXkgPT0gJ01lZGlhUGxheVBhdXNlJykge1xyXG4gICAgICB0aGlzLnBsYXlTdGFydEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09PSAnQXJyb3dSaWdodCcpIHtcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZEFjdGlvbi5wZXJmb3JtKCk7XHJcbiAgICB9XHJcbiAgICBpZiAoa2Uua2V5ID09PSAnQXJyb3dMZWZ0Jykge1xyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuYndkQWN0aW9uLnBlcmZvcm0oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVdha2VMb2NrKGRhdGFTYXZlZDpib29sZWFuPXRoaXMuZGF0YVNhdmVkKXtcclxuICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVwZGF0ZSB3YWtlIGxvY2s6IGRhdGFTYXZlZDogXCIrZGF0YVNhdmVkK1wiLCBub3QgYWN0aXZlOiBcIishIHRoaXMuaXNBY3RpdmUoKSlcclxuICAgIGlmKGRhdGFTYXZlZCAmJiAhIHRoaXMuaXNBY3RpdmUoKSl7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVdha2VMb2NrQ29uZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvZ3Jlc3NQZXJjZW50VmFsdWUoKTpudW1iZXIge1xyXG4gICAgbGV0IHY9MTAwO1xyXG4gICAgaWYodGhpcy5pdGVtcykge1xyXG4gICAgICB2PXRoaXMucHJvbXB0SW5kZXggKiAxMDAgLyAodGhpcy5pdGVtcy5sZW5ndGgoKSAtIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHY7XHJcbiAgfVxyXG4gIGlzVGVzdFNlc3Npb24oKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGUgPT09ICdURVNUJyB8fCB0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScgfHwgdGhpcy5fc2Vzc2lvbi50eXBlID09PSAnU0lOVVNfVEVTVCcpKTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb24oKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpKTtcclxuICB9XHJcblxyXG4gIGlzRGVmYXVsdEF1ZGlvVGVzdFNlc3Npb25PdmVyd3JpdGluZ1Byb2plY3RSZXF1aXJlbWVudHMoKTpib29sZWFuIHtcclxuICAgIHJldHVybiAoKHRoaXMuX3Nlc3Npb24hPW51bGwpICYmICh0aGlzLl9zZXNzaW9uLnR5cGU9PT0nVEVTVF9ERUZfQScpICYmICh0aGlzLmF1ZGlvRGV2aWNlcyE9bnVsbCkgJiYgdGhpcy5hdWRpb0RldmljZXMubGVuZ3RoPjApXHJcbiAgfVxyXG5cclxuICBzZXQgY29udHJvbEF1ZGlvUGxheWVyKGNvbnRyb2xBdWRpb1BsYXllcjogQXVkaW9QbGF5ZXIpIHtcclxuICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllcj1jb250cm9sQXVkaW9QbGF5ZXI7XHJcbiAgICBpZiAodGhpcy5fY29udHJvbEF1ZGlvUGxheWVyKSB7XHJcbiAgICAgIHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5saXN0ZW5lciA9IHRoaXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgY29udHJvbEF1ZGlvUGxheWVyKCk6IEF1ZGlvUGxheWVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgc2NyaXB0KHNjcmlwdDogYW55KSB7XHJcbiAgICB0aGlzLl9zY3JpcHQgPSBzY3JpcHQ7XHJcbiAgICB0aGlzLmxvYWRTY3JpcHQoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZShlOiBBdWRpb1BsYXllckV2ZW50KSB7XHJcbiAgICBpZiAoZS50eXBlID09IEV2ZW50VHlwZS5TVEFSVEVEKSB7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgdGhpcy51cGRhdGVUaW1lcklkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICAvL3RoaXMuYXVkaW9TaWduYWwucGxheUZyYW1lUG9zaXRpb24gPSB0aGlzLmFwLnBsYXlQb3NpdGlvbkZyYW1lcztcclxuICAgICAgfSwgNTApO1xyXG4gICAgfSBlbHNlIGlmIChlLnR5cGUgPT0gRXZlbnRUeXBlLlNUT1BQRUQgfHwgZS50eXBlID09IEV2ZW50VHlwZS5FTkRFRCkge1xyXG4gICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbCh0aGlzLnVwZGF0ZVRpbWVySWQpO1xyXG4gICAgICAvLyB0aGlzLmF1ZGlvU2lnbmFsLnBsYXlGcmFtZVBvc2l0aW9uID0gdGhpcy5hcC5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKCEodGhpcy5kaXNwbGF5UmVjRmlsZSkpO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBwcm9tcHRJbmRleCgpOm51bWJlcntcclxuICAgIHJldHVybiB0aGlzLl9wcm9tcHRJbmRleDtcclxuICB9XHJcblxyXG4gIHNldCBwcm9tcHRJbmRleChwcm9tcHRJbmRleDpudW1iZXIpe1xyXG4gICAgaWYocHJvbXB0SW5kZXg8MCB8fCBwcm9tcHRJbmRleD49dGhpcy5wcm9tcHRJdGVtQ291bnQpe1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQcm9tcHQgaW5kZXggb3V0IG9mIHJhbmdlXCIpXHJcbiAgICB9XHJcbiAgICBsZXQgaSA9IDA7XHJcbiAgICBsZXQgc2VjdGlvbnM9dGhpcy5fc2NyaXB0LnNlY3Rpb25zO1xyXG4gICAgbGV0IGZvdW5kPWZhbHNlO1xyXG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IHNlY3Rpb25zLmxlbmd0aCAmJiAhZm91bmQ7IHNpKyspIHtcclxuICAgICAgbGV0IHNlY3Rpb24gPSBzZWN0aW9uc1tzaV07XHJcbiAgICAgIGxldCBncyA9IHNlY3Rpb24uX3NodWZmbGVkR3JvdXBzO1xyXG4gICAgICBmb3IgKGxldCBnaSA9IDA7IGdpIDwgZ3MubGVuZ3RoOyBnaSsrKSB7XHJcbiAgICAgICAgbGV0IHBpcz1nc1tnaV0uX3NodWZmbGVkUHJvbXB0SXRlbXM7XHJcblxyXG4gICAgICAgIGxldCBwaXNTaXplID0gcGlzLmxlbmd0aDtcclxuICAgICAgICBpZiAocHJvbXB0SW5kZXggPCBpICsgcGlzU2l6ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZWN0SWR4ID0gc2k7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwSWR4SW5TZWN0aW9uPWdpO1xyXG4gICAgICAgICAgdGhpcy5wcm9tcHRJdGVtSWR4SW5Hcm91cCA9IHByb21wdEluZGV4IC0gaTtcclxuICAgICAgICAgIGZvdW5kPXRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaSArPSBwaXNTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYoZm91bmQpe1xyXG4gICAgICB0aGlzLl9wcm9tcHRJbmRleD1wcm9tcHRJbmRleDtcclxuICAgIH1lbHNle1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnRlcm5hbCBlcnJvcjogUHJvbXB0IGluZGV4IG5vdCBmb3VuZFwiKVxyXG4gICAgfVxyXG4gICAgdGhpcy5rZWVwTGl2ZUxldmVsPWZhbHNlO1xyXG4gICAgdGhpcy5hcHBseUl0ZW0oKTtcclxuICB9XHJcblxyXG4gIGl0ZW1TZWxlY3QoaXRlbUlkeDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5JRExFKSB7XHJcbiAgICAgIHRoaXMucHJvbXB0SW5kZXg9aXRlbUlkeDtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyUHJlUmVjVGltZXIoKSB7XHJcbiAgICBpZiAodGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcpIHtcclxuICAgICAgaWYgKHRoaXMucHJlUmVjVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5wcmVSZWNUaW1lcklkKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnByZVJlY1RpbWVyUnVubmluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclBvc3RSZWNUaW1lcigpe1xyXG4gICAgaWYgKHRoaXMucG9zdFJlY1RpbWVyUnVubmluZykge1xyXG4gICAgICBpZiAodGhpcy5wb3N0UmVjVGltZXJJZCkge1xyXG4gICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5wb3N0UmVjVGltZXJJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyTWF4UmVjVGltZXIoKXtcclxuICAgIGlmICh0aGlzLm1heFJlY1RpbWVyUnVubmluZykge1xyXG4gICAgICBpZiAodGhpcy5tYXhSZWNUaW1lcklkKSB7XHJcbiAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLm1heFJlY1RpbWVySWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubWF4UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGFydEl0ZW0oKSB7XHJcbiAgICB0aGlzLnN0YXR1cz1TdGF0dXMuU1RBUlRJTkc7XHJcbiAgICBzdXBlci5zdGFydEl0ZW0oKTtcclxuICAgIGlmICh0aGlzLnJlYWRvbmx5KSB7XHJcbiAgICAgIHRoaXMuc3RhdHVzPVN0YXR1cy5JRExFO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkTmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWVcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0cnVlXHJcbiAgICB0aGlzLmRpc3BsYXlSZWNGaWxlID0gbnVsbDtcclxuICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG51bGw7XHJcbiAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXkucmVzZXQodHJ1ZSk7XHJcbiAgICAvLyBIaWRlIGxvYWRpbmcgaGludCBvbiBsaXZlbGV2ZWwgZGlzcGxheVxyXG4gICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGU9TGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgIGlmICh0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9SRUNPUkRJTkcnKSB7XHJcbiAgICAgIHRoaXMuYXV0b3JlY29yZGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGFydENhcHR1cmUoKTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGxvYWRTY3JpcHQoKSB7XHJcbiAgICB0aGlzLnByb21wdEl0ZW1Db3VudCA9IDA7XHJcblxyXG4gICAgdGhpcy5pdGVtcyA9IG5ldyBTcHJJdGVtc0NhY2hlKCk7XHJcbiAgICBsZXQgbG4gPSAwO1xyXG5cclxuICAgIC8vVE9ETyByYW5kb21pemUgbm90IHN1cHBvcnRlZFxyXG4gICAgZm9yIChsZXQgc2kgPSAwOyBzaSA8IHRoaXMuX3NjcmlwdC5zZWN0aW9ucy5sZW5ndGg7IHNpKyspIHtcclxuICAgICAgbGV0IHNlY3Rpb24gPSB0aGlzLl9zY3JpcHQuc2VjdGlvbnNbc2ldO1xyXG4gICAgICBsZXQgZ3MgPSBzZWN0aW9uLl9zaHVmZmxlZEdyb3VwcztcclxuICAgICAgZm9yKGxldCBnaT0wO2dpPGdzLmxlbmd0aDtnaSsrKSB7XHJcblxyXG4gICAgICAgICAgbGV0IHBpcyA9IGdzW2dpXS5fc2h1ZmZsZWRQcm9tcHRJdGVtcztcclxuXHJcbiAgICAgICAgICBsZXQgcGlzTGVuID0gcGlzLmxlbmd0aDtcclxuICAgICAgICAgIHRoaXMucHJvbXB0SXRlbUNvdW50ICs9IHBpc0xlbjtcclxuICAgICAgICAgIGZvciAobGV0IHBpU2VjdElkeCA9IDA7IHBpU2VjdElkeCA8IHBpc0xlbjsgcGlTZWN0SWR4KyspIHtcclxuICAgICAgICAgICAgbGV0IHBpID0gcGlzW3BpU2VjdElkeF07XHJcbiAgICAgICAgICAgIGxldCBwcm9tcHRBc1N0ciA9IFByb21wdGl0ZW1VdGlsLnRvUGxhaW5UZXh0U3RyaW5nKHBpKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBpdCA9IG5ldyBJdGVtKHByb21wdEFzU3RyLCBzZWN0aW9uLnRyYWluaW5nLCghcGkudHlwZSB8fCBwaS50eXBlPT09J3JlY29yZGluZycpKTtcclxuICAgICAgICAgICAgdGhpcy5pdGVtcy5hZGRJdGVtKGl0KTtcclxuICAgICAgICAgICAgbG4rKztcclxuICAgICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJvbXB0SW5kZXhCeUl0ZW1jb2RlKGl0ZW1jb2RlOnN0cmluZyk6bnVtYmVyfG51bGx7XHJcbiAgICBsZXQgcGl4ID0gMDtcclxuXHJcbiAgICBmb3IgKGxldCBzaSA9IDA7IHNpIDwgdGhpcy5fc2NyaXB0LnNlY3Rpb25zLmxlbmd0aDsgc2krKykge1xyXG4gICAgICBsZXQgc2VjdGlvbiA9IHRoaXMuX3NjcmlwdC5zZWN0aW9uc1tzaV07XHJcbiAgICAgIGxldCBncyA9IHNlY3Rpb24uX3NodWZmbGVkR3JvdXBzO1xyXG4gICAgICBmb3IobGV0IGdpPTA7Z2k8Z3MubGVuZ3RoO2dpKyspIHtcclxuICAgICAgICBsZXQgcGlzPWdzW2dpXS5fc2h1ZmZsZWRQcm9tcHRJdGVtcztcclxuICAgICAgICBsZXQgcGlzTGVuID0gcGlzLmxlbmd0aDtcclxuICAgICAgICBmb3IgKGxldCBwaVNlY3RJZHggPSAwOyBwaVNlY3RJZHggPCBwaXNMZW47IHBpU2VjdElkeCsrKSB7XHJcbiAgICAgICAgICBsZXQgcGkgPSBwaXNbcGlTZWN0SWR4XTtcclxuICAgICAgICAgIGxldCBpYz1waS5pdGVtY29kZTtcclxuICAgICAgICAgIGlmKGljID09PSBpdGVtY29kZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBwaXg7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBwaXgrKztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJQcm9tcHQoKSB7XHJcbiAgICAvL3RoaXMucHJvbXB0aW5nLnByb21wdENvbnRhaW5lci5wcm9tcHRlci5wcm9tcHRUZXh0PScnO1xyXG4gICAgLy90aGlzLm1lZGlhaXRlbSA9IG51bGw7XHJcbiAgICB0aGlzLnNob3dQcm9tcHQgPSBmYWxzZTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXHJcbiAgfVxyXG5cclxuICBhcHBseVByb21wdCgpIHtcclxuICAgIC8vdGhpcy5wcm9tcHRpbmcucHJvbXB0Q29udGFpbmVyLnByb21wdGVyLnByb21wdFRleHQ9dGhpcy5wcm9tcHRVbml0Lm1lZGlhaXRlbXNbMF0udGV4dDtcclxuICAgIC8vdGhpcy5wcm9tcHRUZXh0ID0gdGhpcy5wcm9tcHRVbml0Lm1lZGlhaXRlbXNbMF0udGV4dDtcclxuICAgIC8vdGhpcy5tZWRpYWl0ZW09dGhpcy5wcm9tcHRVbml0Lm1lZGlhaXRlbXNbMF07XHJcbiAgICB0aGlzLnNob3dQcm9tcHQgPSB0cnVlO1xyXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcclxuICB9XHJcblxyXG4gIGRvd25sb2FkUmVjb3JkaW5nKCkge1xyXG4gICAgaWYgKHRoaXMuZGlzcGxheVJlY0ZpbGUpIHtcclxuICAgICAgbGV0IGFkaDogQXVkaW9EYXRhSG9sZGVyIHwgbnVsbCA9IHRoaXMuZGlzcGxheVJlY0ZpbGUuYXVkaW9EYXRhSG9sZGVyO1xyXG4gICAgICBsZXQgYXM6IEF1ZGlvU291cmNlfG51bGw9bnVsbDtcclxuICAgICAgaWYoYWRoKXtcclxuICAgICAgICBhcz1hZGguYXVkaW9Tb3VyY2U7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgd3cgPSBuZXcgV2F2V3JpdGVyKCk7XHJcbiAgICAgIGlmKGFzIGluc3RhbmNlb2YgQXVkaW9CdWZmZXJTb3VyY2UpIHtcclxuICAgICAgICB3dy53cml0ZUFzeW5jKGFzLmF1ZGlvQnVmZmVyLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt3YXZGaWxlXSwge3R5cGU6ICdhdWRpby93YXYnfSk7XHJcbiAgICAgICAgICBjb25zdCByZlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgICAgICAgY29uc3QgZGF0YURubExuayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgLy9kYXRhRG5sTG5rLm5hbWUgPSAnUmVjb3JkaW5nJztcclxuICAgICAgICAgIGRhdGFEbmxMbmsuaHJlZiA9IHJmVXJsO1xyXG5cclxuICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuYm9keSwgZGF0YURubExuayk7XHJcblxyXG4gICAgICAgICAgLy8gZG93bmxvYWQgcHJvcGVydHkgbm90IHlldCBpbiBUUyBkZWZcclxuICAgICAgICAgIGlmICh0aGlzLmRpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgICAgICAgIGxldCBmbiA9IHRoaXMuZGlzcGxheVJlY0ZpbGUuZmlsZW5hbWVTdHJpbmcoKTtcclxuICAgICAgICAgICAgZm4gKz0gJ18nICsgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb247XHJcbiAgICAgICAgICAgIGZuICs9ICcud2F2JztcclxuICAgICAgICAgICAgZGF0YURubExuay5kb3dubG9hZCA9IGZuO1xyXG4gICAgICAgICAgICBkYXRhRG5sTG5rLmNsaWNrKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNoaWxkKGRvY3VtZW50LmJvZHksIGRhdGFEbmxMbmspO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXQgZGlzcGxheVJlY0ZpbGUoZGlzcGxheVJlY0ZpbGU6IFNwclJlY29yZGluZ0ZpbGUgfCBudWxsKSB7XHJcbiAgICB0aGlzLl9kaXNwbGF5UmVjRmlsZSA9IGRpc3BsYXlSZWNGaWxlO1xyXG5cclxuICAgIGlmICh0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICBpZih0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5pdGVtcy5jdXJyZW50UmVjb3JkaW5nRmlsZSA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhZGg6IEF1ZGlvRGF0YUhvbGRlcnwgbnVsbCA9IHRoaXMuX2Rpc3BsYXlSZWNGaWxlLmF1ZGlvRGF0YUhvbGRlcjtcclxuICAgICAgaWYoYWRoKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChhZGgpO1xyXG4gICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcDtcclxuICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIC8vIGNsZWFyIGZvciBub3cgLi4uXHJcbiAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICBpZih0aGlzLmNvbnRyb2xBdWRpb1BsYXllcikge1xyXG4gICAgICAgICAgdGhpcy5jb250cm9sQXVkaW9QbGF5ZXIuYXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllciAmJiB0aGlzLl9zZXNzaW9uKSB7XHJcbiAgICAgICAgICAvLy4uLiBhbmQgdHJ5IHRvIGZldGNoIGZyb20gc2VydmVyXHJcbiAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZT1MaXZlTGV2ZWxTdGF0ZS5MT0FESU5HO1xyXG4gICAgICAgICAgY29uc3QgcmY9dGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcblxyXG4gICAgICAgICAgbGV0IGF1ZGlvRG93bmxvYWRUeXBlPXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGU7XHJcbiAgICAgICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRD09PXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUgfHwgQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEPT09dGhpcy5fY2xpZW50QXVkaW9TdG9yYWdlVHlwZSkge1xyXG4gICAgICAgICAgICAvLyBEZWZhdWx0IGlzIG5ldHdvcmsgbW9kZVxyXG4gICAgICAgICAgICBhdWRpb0Rvd25sb2FkVHlwZT1BdWRpb1N0b3JhZ2VUeXBlLk5FVF9DSFVOS0VEO1xyXG4gICAgICAgICAgICBpZiAocmYuY2hhbm5lbHMgJiYgcmYuZnJhbWVzKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc2FtcGxlcyA9IHJmLmNoYW5uZWxzICogcmYuZnJhbWVzO1xyXG4gICAgICAgICAgICAgIGlmIChzYW1wbGVzIDw9IHRoaXMuX21heEF1dG9OZXRNZW1TdG9yZVNhbXBsZXMpIHtcclxuICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBhdWRpbyBmaWxlIGlzIHNtYWxsLCBsb2FkIGluIGNvbnRpbnVvdXMgcmVzcC4gY2h1bmtlZCBtb2RlXHJcbiAgICAgICAgICAgICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRD09PXRoaXMuX2NsaWVudEF1ZGlvU3RvcmFnZVR5cGUpe1xyXG4gICAgICAgICAgICAgICAgICBhdWRpb0Rvd25sb2FkVHlwZT1BdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkU7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEX0FVVE9fTkVUX0NIVU5LRUQ9PT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgIGF1ZGlvRG93bmxvYWRUeXBlID0gQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJBdWRpbyBkb3dubG9hZCB0eXBlOiBcIithdWRpb0Rvd25sb2FkVHlwZSk7XHJcbiAgICAgICAgICBpZihBdWRpb1N0b3JhZ2VUeXBlLkRCX0NIVU5LRUQ9PT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlKXtcclxuICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBpbmRleGVkIGRiIGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICBsZXQgbmV4dElhYjogSW5kZXhlZERiQXVkaW9CdWZmZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgaWYoIXRoaXMuX3BlcnNpc3RlbnRBdWRpb1N0b3JhZ2VUYXJnZXQpe1xyXG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCdFcnJvcjogUGVyc2lzdGVudCBzdG9yYWdlIHRhcmdldCBub3Qgc2V0LicpO1xyXG4gICAgICAgICAgICB9ZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIGluZGV4ZWQgZGIuLi5cIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5hdWRpb0ZldGNoU3Vic2NyaXB0aW9uID0gdGhpcy5yZWNGaWxlU2VydmljZS5mZXRjaFNwclJlY29yZGluZ0ZpbGVJbmREYkF1ZGlvQnVmZmVyKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5jb250ZXh0LCB0aGlzLl9wZXJzaXN0ZW50QXVkaW9TdG9yYWdlVGFyZ2V0LCB0aGlzLl9zZXNzaW9uLnByb2plY3QsIHJmKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKGlhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXNzaW9ubWFuYWdlcjogUmVjZWl2ZWQgaW5kZGIgYXVkaW8gYnVmZmVyOiBcIitpYWIpO1xyXG4gICAgICAgICAgICAgICAgICBuZXh0SWFiID0gaWFiO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXh0SWFiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dElhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNlIGlmKEF1ZGlvU3RvcmFnZVR5cGUuTkVUX0NIVU5LRUQ9PT1hdWRpb0Rvd25sb2FkVHlwZSl7XHJcbiAgICAgICAgICAgIC8vIEZldGNoIGNodW5rZWQgYXVkaW8gYnVmZmVyIGZyb20gbmV0d29ya1xyXG4gICAgICAgICAgICBsZXQgbmV4dE5ldEFiOiBOZXRBdWRpb0J1ZmZlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJGZXRjaCBjaHVua2VkIGF1ZGlvIGZyb20gbmV0d29ya1wiKTtcclxuICAgICAgICAgICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLmZldGNoU3ByUmVjb3JkaW5nRmlsZU5ldEF1ZGlvQnVmZmVyKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5jb250ZXh0LCB0aGlzLl9zZXNzaW9uLnByb2plY3QsIHJmKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgbmV4dDogKG5ldEFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlNlc3Npb25tYW5hZ2VyOiBSZWNlaXZlZCBuZXQgYXVkaW8gYnVmZmVyOiBcIituZXRBYik7XHJcbiAgICAgICAgICAgICAgICAgIG5leHROZXRBYiA9IG5ldEFiO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXh0TmV0QWIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmYgJiYgdGhpcy5pdGVtcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZmFiRGggPSBuZXcgQXVkaW9EYXRhSG9sZGVyKG5leHROZXRBYik7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsIGZhYkRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gU2hvdWxkIGFjdHVhbGx5IGJlIGhhbmRsZWQgYnkgdGhlIGVycm9yIHJlc29sdmVyXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcInNldCBkaXNwbGF5UmVjRmlsZSgpOiBmZXRjaCBuZXQgYWIgY29tcGxldGUsIHNldCBkaXNwbGF5QXVkaW9DbGlwLlwiKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCA9IG5ldyBBdWRpb0NsaXAoZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgfWVsc2UgaWYoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRD09PWF1ZGlvRG93bmxvYWRUeXBlKXtcclxuICAgICAgICAgICAgLy8gRmV0Y2ggY2h1bmtlZCBhcnJheSBhdWRpbyBidWZmZXJcclxuICAgICAgICAgICAgbGV0IG5leHRBYWI6IEFycmF5QXVkaW9CdWZmZXIgfCBudWxsID0gbnVsbDtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiRmV0Y2ggYXVkaW8gYW5kIHN0b3JlIHRvIChjaHVua2VkKSBhcnJheSBidWZmZXIuLi5cIik7XHJcbiAgICAgICAgICAgIHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbiA9IHRoaXMucmVjRmlsZVNlcnZpY2UuZmV0Y2hTcHJSZWNvcmRpbmdGaWxlQXJyYXlBdWRpb0J1ZmZlcih0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIuY29udGV4dCwgdGhpcy5fc2Vzc2lvbi5wcm9qZWN0LCByZikuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiAoYWFiKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBuZXh0QWFiID0gYWFiO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlID0gTGl2ZUxldmVsU3RhdGUuUkVBRFk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZmFiRGggPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5leHRBYWIpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV4dEFhYik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pdGVtcy5zZXRTcHJSZWNGaWxlQXVkaW9EYXRhKHJmLCBmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIFNob3VsZCBhY3R1YWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBlcnJvciByZXNvbHZlclxyXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRpbmcgZmlsZSBjb3VsZCBub3QgYmUgbG9hZGVkLidcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoZmFiRGgpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5kaXNwbGF5QXVkaW9DbGlwIGNvdWxkIGhhdmUgYmVlbiBjaGFuZ2VkIG1lYW53aGlsZSwgYnV0IHRoZSByZWNvcmRlciB1bnN1YmNyaWJlcyBiZWZvcmUgY2hhbmdpbmcgdGhlIGl0ZW0sIHRoZXJlZm9yZSB0aGVyZSBzaG91bGQgYmUgbm8gcmlzayB0byBzZXQgdG8gd3JvbmcgaXRlbVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBdWRpb0NsaXAgPSBuZXcgQXVkaW9DbGlwKGZhYkRoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuY29udHJvbEF1ZGlvUGxheWVyLmF1ZGlvQ2xpcCA9IHRoaXMuZGlzcGxheUF1ZGlvQ2xpcFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogZXJyID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgbG9hZCByZWNvcmRpbmcgZmlsZSBmcm9tIHNlcnZlcjogXCIgKyBlcnIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzTXNnID0gJ1JlY29yZGluZyBmaWxlIGNvdWxkIG5vdCBiZSBsb2FkZWQ6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c0FsZXJ0VHlwZSA9ICdlcnJvcic7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBGZXRjaCByZWd1bGFyIGF1ZGlvIGJ1ZmZlclxyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJGZXRjaCBhdWRpbyBhbmQgc3RvcmUgdG8gYXVkaW8gYnVmZmVyLi4uXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLmZldGNoU3ByUmVjb3JkaW5nRmlsZUF1ZGlvQnVmZmVyKHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5jb250ZXh0LCB0aGlzLl9zZXNzaW9uLnByb2plY3QsIHJmKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgIG5leHQ6IChhYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXZlTGV2ZWxEaXNwbGF5U3RhdGUgPSBMaXZlTGV2ZWxTdGF0ZS5SRUFEWTtcclxuICAgICAgICAgICAgICAgIGxldCBmYWJEaCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWIpIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJmICYmIHRoaXMuaXRlbXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoU2Vzc2lvbk1hbmFnZXIuRk9SQ0VfQVJSUkFZX0FVRElPX0JVRkZFUikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGFhYiA9IEFycmF5QXVkaW9CdWZmZXIuZnJvbUF1ZGlvQnVmZmVyKGFiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGZhYkRoID0gbmV3IEF1ZGlvRGF0YUhvbGRlcihhYWIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmYWJEaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIobmV3IEF1ZGlvQnVmZmVyU291cmNlKGFiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMuc2V0U3ByUmVjRmlsZUF1ZGlvRGF0YShyZiwgZmFiRGgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAvLyBTaG91bGQgYWN0dWFsbHkgYmUgaGFuZGxlZCBieSB0aGUgZXJyb3IgcmVzb2x2ZXJcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZC4nXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGZhYkRoKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcCBjb3VsZCBoYXZlIGJlZW4gY2hhbmdlZCBtZWFud2hpbGUsIGJ1dCB0aGUgcmVjb3JkZXIgdW5zdWJjcmliZXMgYmVmb3JlIGNoYW5naW5nIHRoZSBpdGVtLCB0aGVyZWZvcmUgdGhlcmUgc2hvdWxkIGJlIG5vIHJpc2sgdG8gc2V0IHRvIHdyb25nIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbmV3IEF1ZGlvQ2xpcChmYWJEaCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSB0aGlzLmRpc3BsYXlBdWRpb0NsaXBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hvd1JlY29yZGluZygpO1xyXG4gICAgICAgICAgICAgIH0sIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkIG5vdCBsb2FkIHJlY29yZGluZyBmaWxlIGZyb20gc2VydmVyOiBcIiArIGVycik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxpdmVMZXZlbERpc3BsYXlTdGF0ZSA9IExpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGxvYWRlZDogJyArIGVycjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2Vycm9yJztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nIGZpbGUgY291bGQgbm90IGJlIGRlY29kZWQuIEF1ZGlvIGNvbnRleHQgdW5hdmFpbGFibGUuJ1xyXG4gICAgICAgICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnZXJyb3InXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kaXNwbGF5QXVkaW9DbGlwID0gbnVsbDtcclxuICAgICAgaWYodGhpcy5jb250cm9sQXVkaW9QbGF5ZXIpIHtcclxuICAgICAgICB0aGlzLmNvbnRyb2xBdWRpb1BsYXllci5hdWRpb0NsaXAgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgZGlzcGxheVJlY0ZpbGUoKTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlSZWNGaWxlO1xyXG4gIH1cclxuXHJcbiAgaXNSZWNvcmRpbmdJdGVtKCk6Ym9vbGVhbntcclxuICAgIHJldHVybih0aGlzLnByb21wdEl0ZW0hPW51bGwgJiYgdGhpcy5wcm9tcHRJdGVtLnR5cGUhPT0nbm9ucmVjb3JkaW5nJylcclxuICB9XHJcblxyXG4gIHVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKCl7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ISh0aGlzLmFjICAmJiB0aGlzLmlzUmVjb3JkaW5nSXRlbSgpKTtcclxuICB9XHJcblxyXG4gIGFwcGx5SXRlbSh0ZW1wb3Jhcnk9ZmFsc2UpIHtcclxuXHJcbiAgICB0aGlzLnNlY3Rpb24gPSB0aGlzLl9zY3JpcHQuc2VjdGlvbnNbdGhpcy5zZWN0SWR4XVxyXG4gICAgdGhpcy5ncm91cCA9IHRoaXMuc2VjdGlvbi5fc2h1ZmZsZWRHcm91cHNbdGhpcy5ncm91cElkeEluU2VjdGlvbl07XHJcbiAgICB0aGlzLnByb21wdEl0ZW0gPSB0aGlzLmdyb3VwLl9zaHVmZmxlZFByb21wdEl0ZW1zW3RoaXMucHJvbXB0SXRlbUlkeEluR3JvdXBdO1xyXG5cclxuICAgIC8vdGhpcy5zZWxlY3RlZEl0ZW1JZHggPSB0aGlzLnByb21wdEluZGV4O1xyXG5cclxuICAgIGlmKHRoaXMuYXVkaW9GZXRjaFN1YnNjcmlwdGlvbil7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlVuc3Vic2NyaWJlIGZyb20gYXVkaW8gZmV0Y2guXCIpO1xyXG4gICAgICB0aGlzLmF1ZGlvRmV0Y2hTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICghdGVtcG9yYXJ5KSB7XHJcbiAgICAgIHRoaXMuZGlzcGxheUF1ZGlvQ2xpcD1udWxsO1xyXG4gICAgICB0aGlzLnNob3dSZWNvcmRpbmcoKTtcclxuICAgIH1cclxuICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheVN0YXRlPUxpdmVMZXZlbFN0YXRlLlJFQURZO1xyXG5cclxuICAgIHRoaXMuY2xlYXJQcm9tcHQoKTtcclxuXHJcbiAgICBjb25zdCBpc05vbnJlY29yZGluZz0odGhpcy5wcm9tcHRJdGVtLnR5cGU9PT0nbm9ucmVjb3JkaW5nJyk7XHJcblxyXG4gICAgaWYgKGlzTm9ucmVjb3JkaW5nIHx8ICF0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgfHwgdGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnSURMRScpIHtcclxuICAgICAgdGhpcy5hcHBseVByb21wdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKGlzTm9ucmVjb3JkaW5nKXtcclxuICAgICAgdGhpcy5kaXNwbGF5UmVjRmlsZSA9IG51bGw7XHJcbiAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLk9GRjtcclxuICAgIH1lbHNlIHtcclxuICAgICAgaWYgKHRoaXMuaXRlbXMpIHtcclxuICAgICAgICBsZXQgaXQgPSB0aGlzLml0ZW1zLmdldEl0ZW0odGhpcy5wcm9tcHRJbmRleCk7XHJcbiAgICAgICAgaWYgKCFpdC5yZWNzKSB7XHJcbiAgICAgICAgICBpdC5yZWNzID0gbmV3IEFycmF5PFNwclJlY29yZGluZ0ZpbGU+KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVjZW50UmVjRmlsZTogU3ByUmVjb3JkaW5nRmlsZSB8IG51bGwgPSBudWxsO1xyXG4gICAgICAgIGxldCBhdmFpbFJlY2ZpbGVzOiBudW1iZXIgPSBpdC5yZWNzLmxlbmd0aDtcclxuICAgICAgICBpZiAoYXZhaWxSZWNmaWxlcyA+IDApIHtcclxuICAgICAgICAgIGxldCByZlZlcnM6IG51bWJlciA9IGF2YWlsUmVjZmlsZXMgLSAxO1xyXG4gICAgICAgICAgcmVjZW50UmVjRmlsZSA9IGl0LnJlY3NbcmZWZXJzXTtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGUgPSByZWNlbnRSZWNGaWxlO1xyXG4gICAgICAgICAgdGhpcy5kaXNwbGF5UmVjRmlsZVZlcnNpb24gPSByZlZlcnM7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3BsYXlSZWNGaWxlID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuZGlzcGxheVJlY0ZpbGVWZXJzaW9uID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYoIXRoaXMucmVhZG9ubHkpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuSURMRTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5kZWJ1ZyhcImFwcGx5SXRlbSgpOiB0ZW1wb3Jhcnk6IFwiK3RlbXBvcmFyeSk7XHJcbiAgICAvL2lmICghdGVtcG9yYXJ5KSB7XHJcbiAgICAvLyAgIGNvbnNvbGUuZGVidWcoXCJhcHBseUl0ZW0oKTogQ2FsbCBzaG93UmVjb3JkaW5nKCk6IGRpc3BsYXlBdWRpb0NsaXA6IFwiK3RoaXMuZGlzcGxheUF1ZGlvQ2xpcCk7XHJcbiAgICAgIC8vdGhpcy5zaG93UmVjb3JkaW5nKCk7XHJcbiAgICAvL31cclxuICAgIHRoaXMudXBkYXRlU3RhcnRBY3Rpb25EaXNhYmxlU3RhdGUoKVxyXG4gICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpXHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhcnQoKSB7XHJcbiAgICBzdXBlci5zdGFydCgpO1xyXG4gICAgaWYodGhpcy5wcm9tcHRJdGVtQ291bnQ+MCkge1xyXG4gICAgICB0aGlzLnByb21wdEluZGV4ID0gMDtcclxuICAgIH1cclxuICAgIHRoaXMuZW5hYmxlTmF2aWdhdGlvbigpXHJcbiAgfVxyXG5cclxuICBpc1JlY29yZGluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAodGhpcy5zdGF0dXMgPT09IFN0YXR1cy5QUkVfUkVDT1JESU5HIHx8IHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUkVDT1JESU5HIHx8IHRoaXMuc3RhdHVzID09PSBTdGF0dXMuUE9TVF9SRUNfU1RPUCB8fCB0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLlBPU1RfUkVDX1BBVVNFIHx8IHRoaXMuc3RhdHVzPT09U3RhdHVzLlNUT1BQSU5HX1NUT1ApO1xyXG4gIH1cclxuXHJcbiAgaXNBY3RpdmUoKTogYm9vbGVhbntcclxuICAgIHJldHVybiAoISh0aGlzLnN0YXR1cyA9PT0gU3RhdHVzLkJMT0NLRUQgfHwgdGhpcy5zdGF0dXM9PT0gU3RhdHVzLklETEUgfHwgdGhpcy5zdGF0dXM9PT1TdGF0dXMuRVJST1IpIHx8IHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyB8fCB0aGlzLnNlc3Npb25TZXJ2aWNlLnVwbG9hZENvdW50PjApXHJcbiAgfVxyXG5cclxuICAgIHByZXZJdGVtKCkge1xyXG4gICAgICAgbGV0IG5ld1BySWR4PXRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgICAgbmV3UHJJZHgtLTtcclxuICAgICAgIGlmKG5ld1BySWR4PDApe1xyXG4gICAgICAgICBuZXdQcklkeD10aGlzLnByb21wdEl0ZW1Db3VudC0xO1xyXG4gICAgICAgfVxyXG4gICAgICAgdGhpcy5wcm9tcHRJbmRleD1uZXdQcklkeDtcclxuICAgICAgLy90aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKClcclxuICAgIH1cclxuXHJcblxyXG4gIG5leHRJdGVtKCkge1xyXG4gICAgbGV0IG5ld1BySWR4PXRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgbmV3UHJJZHgrKztcclxuICAgIGlmKG5ld1BySWR4Pj10aGlzLnByb21wdEl0ZW1Db3VudCl7XHJcbiAgICAgIG5ld1BySWR4PTA7XHJcbiAgICB9XHJcbiAgICB0aGlzLnByb21wdEluZGV4PW5ld1BySWR4O1xyXG4gICAgLy90aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCl7XHJcbiAgICBsZXQgZndkTnh0QWN0aW9uRGlzYWJsZWQ9dHJ1ZTtcclxuICAgIGlmKHRoaXMuaXRlbXMpe1xyXG4gICAgICBsZXQgY3VyclJlY3M9dGhpcy5pdGVtcy5nZXRJdGVtKHRoaXMuX3Byb21wdEluZGV4KS5yZWNzO1xyXG4gICAgICBmd2ROeHRBY3Rpb25EaXNhYmxlZD0gISAoY3VyclJlY3MhPW51bGwgJiYgY3VyclJlY3MubGVuZ3RoPjApO1xyXG4gICAgfVxyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmZ3ZE5leHRBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZCB8fCBmd2ROeHRBY3Rpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5md2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5id2RBY3Rpb24uZGlzYWJsZWQgPSB0aGlzLm5hdmlnYXRpb25EaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIG5leHRVbnJlY29yZGVkSXRlbSgpIHtcclxuICAgIGxldCBuZXdQcklkeCA9IHRoaXMuX3Byb21wdEluZGV4O1xyXG4gICAgbmV3UHJJZHgrKztcclxuICAgIGlmIChuZXdQcklkeCA+PSB0aGlzLnByb21wdEl0ZW1Db3VudCkge1xyXG4gICAgICBuZXdQcklkeCA9IDA7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLml0ZW1zIT1udWxsKSB7XHJcbiAgICAgIGxldCBpdD10aGlzLml0ZW1zLmdldEl0ZW0obmV3UHJJZHgpO1xyXG4gICAgICB3aGlsZSAoKCFpdC5yZWNvcmRpbmcgfHwgaXQuaXRlbURvbmUoKSkgJiYgbmV3UHJJZHggPCB0aGlzLnByb21wdEl0ZW1Db3VudCkge1xyXG4gICAgICAgIG5ld1BySWR4Kys7XHJcbiAgICAgICAgaXQ9dGhpcy5pdGVtcy5nZXRJdGVtKG5ld1BySWR4KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWl0Lml0ZW1Eb25lKCkpIHtcclxuICAgICAgICB0aGlzLnByb21wdEluZGV4ID0gbmV3UHJJZHg7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVN0YXJ0VXNlckdlc3R1cmUoKSB7XHJcbiAgICBzdXBlci5lbmFibGVTdGFydFVzZXJHZXN0dXJlKCk7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RhcnRBY3Rpb24uZGlzYWJsZWQ9ISh0aGlzLmFjICYmIHRoaXMuaXNSZWNvcmRpbmdJdGVtKCkpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlTmF2aWdhdGlvbigpe1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uRGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgfVxyXG5cclxuICBzdGFydGVkKCkge1xyXG4gICAgbGV0IGljID0gdGhpcy5wcm9tcHRJdGVtLml0ZW1jb2RlO1xyXG4gICAgbGV0IHJmPW51bGw7XHJcblxyXG4gICAgaWYgKHRoaXMuX3Nlc3Npb24gJiYgaWMpIHtcclxuICAgICAgbGV0IHNlc3NJZDogc3RyaW5nIHwgbnVtYmVyID0gdGhpcy5fc2Vzc2lvbi5zZXNzaW9uSWQ7XHJcbiAgICAgIGxldCBjcElkeCA9IHRoaXMucHJvbXB0SW5kZXg7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKGNwSWR4KTtcclxuICAgICAgICBpZiAoIWl0LnJlY3MpIHtcclxuICAgICAgICAgIGl0LnJlY3MgPSBuZXcgQXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmYgPSBuZXcgU3ByUmVjb3JkaW5nRmlsZShzZXNzSWQsIGljLCBpdC5yZWNzLmxlbmd0aCxudWxsKTtcclxuICAgICAgICByZi51dWlkPXRoaXMucmZVdWlkO1xyXG4gICAgICAgIC8vaXQucmVjcy5wdXNoKHJmKTtcclxuICAgICAgICB0aGlzLml0ZW1zLmFkZFNwclJlY0ZpbGUoaXQscmYpO1xyXG4gICAgICAgIHRoaXMuaXRlbXMuY3VycmVudFJlY29yZGluZ0ZpbGU9cmY7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3JlY29yZGluZ0ZpbGUgPSByZjtcclxuICAgIHRoaXMuc3RhdHVzID0gU3RhdHVzLlBSRV9SRUNPUkRJTkc7XHJcbiAgICBzdXBlci5zdGFydGVkKCk7XHJcblxyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLlBSRVJFQ09SRElORztcclxuICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb24uc3RhdHVzID09PSBcIkxPQURFRFwiKSB7XHJcbiAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmICh0aGlzLnNlY3Rpb24udHJhaW5pbmcpIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJTVEFSVEVEX1RSQUlOSU5HXCJcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc3RhcnRlZFRyYWluaW5nRGF0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBib2R5LnN0YXJ0ZWRUcmFpbmluZ0RhdGUgPSB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWRUcmFpbmluZ0RhdGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24uc3RhdHVzID0gXCJTVEFSVEVEXCJcclxuICAgICAgICAgIGJvZHkuc3RhdHVzID0gdGhpcy5fc2Vzc2lvbi5zdGF0dXM7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuX3Nlc3Npb24uc3RhcnRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5zdGFydGVkRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgIGJvZHkuc3RhcnRlZERhdGUgPSB0aGlzLl9zZXNzaW9uLnN0YXJ0ZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlc3Npb25TZXJ2aWNlLnBhdGNoU2Vzc2lvbk9ic2VydmVyKHRoaXMuX3Nlc3Npb24sIGJvZHkpLnN1YnNjcmliZSgpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNlY3Rpb24ucHJvbXB0cGhhc2UgPT09ICdQUkVSRUNPUkRJTkcnIHx8IHRoaXMuc2VjdGlvbi5wcm9tcHRwaGFzZSA9PT0gJ1BSRVJFQ09SRElOR09OTFknKSB7XHJcbiAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc3RhdHVzQWxlcnRUeXBlID0gJ2luZm8nO1xyXG4gICAgdGhpcy5zdGF0dXNNc2cgPSAnUmVjb3JkaW5nLi4uJztcclxuXHJcbiAgICBsZXQgcHJlRGVsYXkgPSBERUZBVUxUX1BSRV9SRUNfREVMQVk7XHJcbiAgICBpZiAodGhpcy5wcm9tcHRJdGVtLnByZXJlY2RlbGF5IT1udWxsKSB7XHJcbiAgICAgIHByZURlbGF5ID0gdGhpcy5wcm9tcHRJdGVtLnByZXJlY2RlbGF5O1xyXG4gICAgfWVsc2UgaWYgKHRoaXMucHJvbXB0SXRlbS5wcmVyZWNvcmRpbmchPW51bGwpIHtcclxuICAgICAgcHJlRGVsYXkgPSB0aGlzLnByb21wdEl0ZW0ucHJlcmVjb3JkaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucG9zdERlbGF5PURFRkFVTFRfUE9TVF9SRUNfREVMQVk7XHJcbiAgICBpZih0aGlzLnByb21wdEl0ZW0ucG9zdHJlY2RlbGF5IT1udWxsKXtcclxuICAgICAgdGhpcy5wb3N0RGVsYXk9dGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNkZWxheTtcclxuICAgIH1lbHNlIGlmKHRoaXMucHJvbXB0SXRlbS5wb3N0cmVjb3JkaW5nIT1udWxsKXtcclxuICAgICAgdGhpcy5wb3N0RGVsYXk9dGhpcy5wcm9tcHRJdGVtLnBvc3RyZWNvcmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1heFJlY29yZGluZ1RpbWVNcyA9IE1BWF9SRUNPUkRJTkdfVElNRV9NUztcclxuICAgIGlmICh0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24hPT1udWxsICYmIHRoaXMucHJvbXB0SXRlbS5yZWNkdXJhdGlvbiE9PXVuZGVmaW5lZCkge1xyXG4gICAgICBtYXhSZWNvcmRpbmdUaW1lTXMgPSBwcmVEZWxheSt0aGlzLnByb21wdEl0ZW0ucmVjZHVyYXRpb24rdGhpcy5wb3N0RGVsYXk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1heFJlY1RpbWVySWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZ01heFJlYygpXHJcbiAgICB9LCBtYXhSZWNvcmRpbmdUaW1lTXMpO1xyXG4gICAgdGhpcy5tYXhSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5wcmVSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5wcmVSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUkVDT1JESU5HO1xyXG4gICAgICB0aGlzLnN0YXJ0U3RvcFNpZ25hbFN0YXRlID0gU3RhcnRTdG9wU2lnbmFsU3RhdGUuUkVDT1JESU5HO1xyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMudHJhbnNwb3J0QWN0aW9ucy5uZXh0QWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnBhdXNlQWN0aW9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMuYXBwbHlQcm9tcHQoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5zZWN0aW9uLnByb21wdHBoYXNlID09PSAnUFJFUkVDT1JESU5HT05MWScpe1xyXG4gICAgICAgIHRoaXMuY2xlYXJQcm9tcHQoKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0sIHByZURlbGF5KTtcclxuICAgIHRoaXMucHJlUmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHN0b3BJdGVtKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUE9TVF9SRUNfU1RPUDtcclxuICAgIHRoaXMuc3RhcnRTdG9wU2lnbmFsU3RhdGUgPSBTdGFydFN0b3BTaWduYWxTdGF0ZS5QT1NUUkVDT1JESU5HO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLnN0b3BBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLm5leHRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfU1RPUDtcclxuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XHJcbiAgICB9LCB0aGlzLnBvc3REZWxheSk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcGF1c2VJdGVtKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuUE9TVF9SRUNfUEFVU0U7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLlBPU1RSRUNPUkRJTkc7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5jbGVhclByZVJlY1RpbWVyKCk7XHJcbiAgICB0aGlzLnBvc3RSZWNUaW1lcklkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnBvc3RSZWNUaW1lclJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5zdGF0dXMgPSBTdGF0dXMuU1RPUFBJTkdfUEFVU0U7XHJcbiAgICAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xyXG4gICAgfSwgdGhpcy5wb3N0RGVsYXkpO1xyXG4gICAgdGhpcy5wb3N0UmVjVGltZXJSdW5uaW5nID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHN0b3BSZWNvcmRpbmcoKSB7XHJcbiAgICB0aGlzLmNsZWFyTWF4UmVjVGltZXIoKTtcclxuICAgIGlmKHRoaXMuYWMpIHtcclxuICAgICAgdGhpcy5hYy5zdG9wKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdG9wUmVjb3JkaW5nTWF4UmVjKCl7XHJcbiAgICB0aGlzLmNsZWFyUHJlUmVjVGltZXIoKTtcclxuICAgIHRoaXMuY2xlYXJQb3N0UmVjVGltZXIoKTtcclxuICAgIHRoaXMubWF4UmVjVGltZXJSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5TVE9QUElOR19TVE9QO1xyXG4gICAgaWYodGhpcy5hYykge1xyXG4gICAgICB0aGlzLmFjLnN0b3AoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZFJlY29yZGluZ0ZpbGVCeURlc2NyaXB0b3IocmZkOlJlY29yZGluZ0ZpbGVEZXNjcmlwdG9ySW1wbCl7XHJcbiAgICBpZihyZmQucmVjb3JkaW5nICYmIHJmZC5yZWNvcmRpbmcuaXRlbWNvZGUpIHtcclxuICAgICAgbGV0IHBySWR4ID0gdGhpcy5wcm9tcHRJbmRleEJ5SXRlbWNvZGUocmZkLnJlY29yZGluZy5pdGVtY29kZSk7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zIT1udWxsICYmIHBySWR4ICE9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGl0ID0gdGhpcy5pdGVtcy5nZXRJdGVtKHBySWR4KTtcclxuICAgICAgICBpZiAoaXQgJiYgdGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgLy8gaWYgKCFpdC5yZWNzKSB7XHJcbiAgICAgICAgICAvLyAgIGl0LnJlY3MgPSBuZXcgQXJyYXk8U3ByUmVjb3JkaW5nRmlsZT4oKTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIGxldCByZiA9IG5ldyBTcHJSZWNvcmRpbmdGaWxlKHRoaXMuX3Nlc3Npb24uc2Vzc2lvbklkLCByZmQucmVjb3JkaW5nLml0ZW1jb2RlLCByZmQudmVyc2lvbiwgbnVsbCk7XHJcbiAgICAgICAgICByZi5zZXJ2ZXJQZXJzaXN0ZWQ9dHJ1ZTtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcImFkZFJlY29yZGluZ0ZpbGVCeURlc2NyaXB0b3IoKTogc3I6IFwiK3JmZC5zYW1wbGVyYXRlK1wiLCBmcmFtZXM6IFwiK3JmZC5mcmFtZXMpO1xyXG4gICAgICAgICAgaWYocmZkLnNhbXBsZXJhdGUgJiYgcmZkLmZyYW1lcyl7XHJcbiAgICAgICAgICAgIHJmLnNhbXBsZXJhdGU9cmZkLnNhbXBsZXJhdGU7XHJcbiAgICAgICAgICAgIHJmLmZyYW1lcz1yZmQuZnJhbWVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYocmZkLmNoYW5uZWxzKXtcclxuICAgICAgICAgICAgcmYuY2hhbm5lbHM9cmZkLmNoYW5uZWxzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5pdGVtcy5hZGRTcHJSZWNGaWxlKGl0LHJmKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIldBUk46IE5vIHJlY29yZGluZyBpdGVtIHdpdGggY29kZTogXFxcIlwiICtyZmQucmVjb3JkaW5nLml0ZW1jb2RlKyBcIlxcXCIgZm91bmQuXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJXQVJOOiBObyByZWNvcmRpbmcgaXRlbSB3aXRoIGNvZGU6IFxcXCJcIiArcmZkLnJlY29yZGluZy5pdGVtY29kZSsgXCJcXFwiIGZvdW5kLlwiKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gYWRkUmVjb3JkaW5nRmlsZUJ5UHJvbXB0SW5kZXgocHJvbXB0SW5kZXg6bnVtYmVyLCByZjpTcHJSZWNvcmRpbmdGaWxlKXtcclxuICAvL1xyXG4gIC8vIH1cclxuXHJcblxyXG4gIHN0b3BwZWQoKSB7XHJcbiAgICB0aGlzLmNsZWFyUHJlUmVjVGltZXIoKTtcclxuICAgIHRoaXMuY2xlYXJQb3N0UmVjVGltZXIoKTtcclxuICAgIHRoaXMuY2xlYXJNYXhSZWNUaW1lcigpO1xyXG4gICAgdGhpcy51cGRhdGVTdGFydEFjdGlvbkRpc2FibGVTdGF0ZSgpXHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuc3RvcEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMubmV4dEFjdGlvbi5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMucGF1c2VBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5zdGF0dXNBbGVydFR5cGUgPSAnaW5mbyc7XHJcbiAgICB0aGlzLnN0YXR1c01zZyA9ICdSZWNvcmRlZC4nO1xyXG4gICAgdGhpcy5zdGFydFN0b3BTaWduYWxTdGF0ZSA9IFN0YXJ0U3RvcFNpZ25hbFN0YXRlLklETEU7XHJcblxyXG4gICAgICBsZXQgYWRoOkF1ZGlvRGF0YUhvbGRlcnxudWxsPW51bGw7XHJcbiAgICAgIGxldCBhczpBdWRpb1NvdXJjZXxudWxsPW51bGw7XHJcbiAgICAgbGV0IGFiOkF1ZGlvQnVmZmVyfG51bGw9bnVsbDtcclxuICAgICAgaWYodGhpcy5hYykge1xyXG4gICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk5FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMua2VlcExpdmVMZXZlbD10cnVlO1xyXG4gICAgICAgICAgbGV0IGJ1cmw6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgICAgICAgIGlmKHRoaXMuX3Nlc3Npb24pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2Rpc3BsYXlSZWNGaWxlKSB7XHJcbiAgICAgICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIGJyYW5jaCBldmVyIGNhbGxlZCA/XHJcbiAgICAgICAgICAgICAgbGV0IHJmID0gdGhpcy5fZGlzcGxheVJlY0ZpbGU7XHJcbiAgICAgICAgICAgICAgcmYuZnJhbWVzID0gdGhpcy5hYy5mcmFtZXNSZWNvcmRlZDtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzdG9wcGVkKCk6IFNldCBmcmFtZXM6IFwiK3JmLmZyYW1lcytcIiBvbiByZklkOiBcIit0aGlzLmRpc3BsYXlSZWNGaWxlPy5yZWNvcmRpbmdGaWxlSWQpO1xyXG4gICAgICAgICAgICAgIGJ1cmwgPSB0aGlzLnJlY0ZpbGVTZXJ2aWNlLnNwckF1ZGlvRmlsZVVybCh0aGlzLl9zZXNzaW9uPy5wcm9qZWN0LCByZik7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZXNzaW9uPy5wcm9qZWN0ICYmIHRoaXMuX3JlY29yZGluZ0ZpbGUgJiYgdGhpcy5fcmVjb3JkaW5nRmlsZSBpbnN0YW5jZW9mIFNwclJlY29yZGluZ0ZpbGUpIHtcclxuICAgICAgICAgICAgICBidXJsID0gdGhpcy5yZWNGaWxlU2VydmljZS5zcHJBdWRpb0ZpbGVVcmxCeUl0ZW1jb2RlKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCwgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQsIHRoaXMuX3JlY29yZGluZ0ZpbGUuaXRlbUNvZGUsIHRoaXMuX3JlY29yZGluZ0ZpbGUudmVyc2lvbik7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJDb3VsZCBub3QgY3JlYXRlIG5ldCBhdWRpbyBidWZmZXIuXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChidXJsKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgclVVSUQgPSB0aGlzLmFjLnJlY1VVSUQ7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3IgPSB0aGlzLmFjLmN1cnJlbnRTYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoRmw9c3IqUmVjb3JkaW5nU2VydmljZS5ERUZBVUxUX0NIVU5LRURfRE9XTkxPQURfU0VDT05EUztcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzdG9wcGVkKCk6IHJmSUQ6IFwiK3RoaXMuX3JlY29yZGluZ0ZpbGU/LnJlY29yZGluZ0ZpbGVJZCtcIiwgbmV0IGFiIHVybDogXCIgKyBidXJsK1wiLCBmcmFtZXM6IFwiK3RoaXMuYWMuZnJhbWVzUmVjb3JkZWQrXCIsIHNhbXBsZSByYXRlOiBcIitzcik7XHJcbiAgICAgICAgICAgICAgbGV0IG5ldEFiID0gbmV3IE5ldEF1ZGlvQnVmZmVyKHRoaXMuYWMuY29udGV4dCwgdGhpcy5yZWNGaWxlU2VydmljZSwgYnVybCwgdGhpcy5hYy5jaGFubmVsQ291bnQsIHNyLCBjaEZsLCB0aGlzLmFjLmZyYW1lc1JlY29yZGVkLCByVVVJRCwgY2hGbCk7XHJcbiAgICAgICAgICAgICAgYXM9bmV0QWI7XHJcbiAgICAgICAgICAgICAgaWYodGhpcy51cGxvYWRTZXQpe1xyXG4gICAgICAgICAgICAgICAgLy9sZXQgcnA9bmV3IFJlYWR5UHJvdmlkZXIoKTtcclxuICAgICAgICAgICAgICAgIC8vbmV0QWIucmVhZHlQcm92aWRlcj1ycDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBsb2FkU2V0Lm9uRG9uZT0odXBsb2FkU2V0KT0+e1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFwidXBsb2FkIHNldCBvbiBkb25lOiBDYWxsIHJlYWR5IHByb3ZpZGVyLnJlYWR5XCIpO1xyXG4gICAgICAgICAgICAgICAgICAvL3JwLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICAgIG5ldEFiLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfWVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuTUVNX0VOVElSRV9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUgfHwgQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkVfQVVUT19ORVRfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKXtcclxuICAgICAgICAgICAgY29uc3QgYWNBYj10aGlzLmFjLmF1ZGlvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIGlmKGFjQWIpIHtcclxuICAgICAgICAgICAgICBhcyA9IG5ldyBBdWRpb0J1ZmZlclNvdXJjZShhY0FiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoQXVkaW9TdG9yYWdlVHlwZS5NRU1fQ0hVTktFRF9BVVRPX05FVF9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpe1xyXG4gICAgICAgICAgICBhcyA9IHRoaXMuYWMuYXVkaW9CdWZmZXJBcnJheSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoIWFzKXtcclxuICAgICAgICAgICAgdGhpcy5wbGF5U3RhcnRBY3Rpb24uZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmtlZXBMaXZlTGV2ZWw9dHJ1ZTtcclxuICAgICAgICAgICAgbGV0IGJ1cmw6c3RyaW5nfG51bGw9bnVsbDtcclxuICAgICAgICAgICAgaWYodGhpcy5fc2Vzc2lvbikge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9kaXNwbGF5UmVjRmlsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETyBpcyB0aGlzIGJyYW5jaCBldmVyIGNhbGxlZCA/XHJcbiAgICAgICAgICAgICAgICBsZXQgcmYgPSB0aGlzLl9kaXNwbGF5UmVjRmlsZTtcclxuICAgICAgICAgICAgICAgIHJmLmZyYW1lcyA9IHRoaXMuYWMuZnJhbWVzUmVjb3JkZWQ7XHJcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJzdG9wcGVkKCk6IFNldCBmcmFtZXM6IFwiK3JmLmZyYW1lcytcIiBvbiByZklkOiBcIit0aGlzLmRpc3BsYXlSZWNGaWxlPy5yZWNvcmRpbmdGaWxlSWQpO1xyXG4gICAgICAgICAgICAgICAgYnVybCA9IHRoaXMucmVjRmlsZVNlcnZpY2Uuc3ByQXVkaW9GaWxlVXJsKHRoaXMuX3Nlc3Npb24/LnByb2plY3QsIHJmKTtcclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCAmJiB0aGlzLl9yZWNvcmRpbmdGaWxlICYmIHRoaXMuX3JlY29yZGluZ0ZpbGUgaW5zdGFuY2VvZiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBidXJsID0gdGhpcy5yZWNGaWxlU2VydmljZS5zcHJBdWRpb0ZpbGVVcmxCeUl0ZW1jb2RlKHRoaXMuc2Vzc2lvbj8ucHJvamVjdCwgdGhpcy5zZXNzaW9uPy5zZXNzaW9uSWQsIHRoaXMuX3JlY29yZGluZ0ZpbGUuaXRlbUNvZGUsIHRoaXMuX3JlY29yZGluZ0ZpbGUudmVyc2lvbik7XHJcbiAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQ291bGQgbm90IGNyZWF0ZSBuZXQgYXVkaW8gYnVmZmVyLlwiKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGJ1cmwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJVVUlEID0gdGhpcy5hYy5yZWNVVUlEO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3IgPSB0aGlzLmFjLmN1cnJlbnRTYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2hGbD1zcipSZWNvcmRpbmdTZXJ2aWNlLkRFRkFVTFRfQ0hVTktFRF9ET1dOTE9BRF9TRUNPTkRTO1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwic3RvcHBlZCgpOiByZklEOiBcIit0aGlzLl9yZWNvcmRpbmdGaWxlPy5yZWNvcmRpbmdGaWxlSWQrXCIsIG5ldCBhYiB1cmw6IFwiICsgYnVybCtcIiwgZnJhbWVzOiBcIit0aGlzLmFjLmZyYW1lc1JlY29yZGVkK1wiLCBzYW1wbGUgcmF0ZTogXCIrc3IpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV0QWIgPSBuZXcgTmV0QXVkaW9CdWZmZXIodGhpcy5hYy5jb250ZXh0LCB0aGlzLnJlY0ZpbGVTZXJ2aWNlLCBidXJsLCB0aGlzLmFjLmNoYW5uZWxDb3VudCwgc3IsIGNoRmwsIHRoaXMuYWMuZnJhbWVzUmVjb3JkZWQsIHJVVUlELCBjaEZsKTtcclxuICAgICAgICAgICAgICAgIGFzID0gbmV0QWI7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51cGxvYWRTZXQpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy51cGxvYWRTZXQub25Eb25lID0gKHVwbG9hZFNldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGxvYWQgc2V0IG9uIGRvbmU6IENhbGwgcmVhZHkgcHJvdmlkZXIucmVhZHlcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIG5ldEFiLnJlYWR5KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKEF1ZGlvU3RvcmFnZVR5cGUuREJfQ0hVTktFRCA9PT0gdGhpcy5hYy5hdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgICBhcyA9IHRoaXMuYWMuaW5kZGJBdWRpb0J1ZmZlckFycmF5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChBdWRpb1N0b3JhZ2VUeXBlLk1FTV9DSFVOS0VEID09PSB0aGlzLmFjLmF1ZGlvU3RvcmFnZVR5cGUpIHtcclxuICAgICAgICAgIGFzID0gdGhpcy5hYy5hdWRpb0J1ZmZlckFycmF5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGFiID0gdGhpcy5hYy5hdWRpb0J1ZmZlcigpO1xyXG4gICAgICAgICAgaWYoYWIpIHtcclxuICAgICAgICAgICAgYXMgPSBuZXcgQXVkaW9CdWZmZXJTb3VyY2UoYWIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYXMpIHtcclxuICAgICAgICAgIGFkaCA9IG5ldyBBdWRpb0RhdGFIb2xkZXIoYXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIC8vIFVzZSBhbiBvd24gcmVmZXJlbmNlIHNpbmNlIHRoZSB3cml0aW5nIG9mIHRoZSB3YXZlIGZpbGUgaXMgYXN5bmNocm9ub3VzIGFuZCB0aGlzLl9yZWNvcmRpbmdGaWxlIG1pZ2h0IGFscmVhZHkgY29udGFpbiB0aGUgbmV4dCByZWNvcmRpbmdcclxuICAgIGxldCByZiA9IHRoaXMuX3JlY29yZGluZ0ZpbGU7XHJcbiAgICBpZiAocmYgJiYgcmYgaW5zdGFuY2VvZiBTcHJSZWNvcmRpbmdGaWxlKSB7XHJcbiAgICAgIHRoaXMuaXRlbXM/LnNldFNwclJlY0ZpbGVBdWRpb0RhdGEocmYsYWRoKTtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlVXBsb2FkUmVjb3JkaW5ncyAmJiBBdWRpb1N0b3JhZ2VUeXBlLk1FTV9FTlRJUkU9PT10aGlzLl9jbGllbnRBdWRpb1N0b3JhZ2VUeXBlKSB7XHJcbiAgICAgICAgLy8gVE9ETyB1c2UgU3BlZWNoUmVjb3JkZXJjb25maWcgcmVzcC4gUmVjZmlsZVNlcnZpY2VcclxuICAgICAgICAvLyBjb252ZXJ0IGFzeW5jaHJvbm91c2x5IHRvIDE2LWJpdCBpbnRlZ2VyIFBDTVxyXG4gICAgICAgIC8vIFRPRE8gY291bGQgd2UgYXZvaWQgY29udmVyc2lvbiB0byBzYXZlIENQVSByZXNvdXJjZXMgYW5kIHRyYW5zZmVyIGZsb2F0IFBDTSBkaXJlY3RseT9cclxuICAgICAgICAvLyBUT0RPIGR1cGxpY2F0ZSBjb252ZXJzaW9uIGZvciBtYW51YWwgZG93bmxvYWRcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiQnVpbGQgd2F2IHdyaXRlci4uLlwiKTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NpbmdSZWNvcmRpbmc9dHJ1ZVxyXG4gICAgICAgIGlmKGFiKSB7XHJcbiAgICAgICAgICBsZXQgd3cgPSBuZXcgV2F2V3JpdGVyKCk7XHJcbiAgICAgICAgICAvL25ldyBSRVNUIEFQSSBVUkxcclxuICAgICAgICAgIGxldCBhcGlFbmRQb2ludCA9ICcnO1xyXG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnICYmIHRoaXMuY29uZmlnLmFwaUVuZFBvaW50KSB7XHJcbiAgICAgICAgICAgIGFwaUVuZFBvaW50ID0gdGhpcy5jb25maWcuYXBpRW5kUG9pbnQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoYXBpRW5kUG9pbnQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIGFwaUVuZFBvaW50ID0gYXBpRW5kUG9pbnQgKyAnLydcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBzZXNzaW9uc1VybCA9IGFwaUVuZFBvaW50ICsgU2Vzc2lvblNlcnZpY2UuU0VTU0lPTl9BUElfQ1RYO1xyXG4gICAgICAgICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyByZi5zZXNzaW9uICsgJy8nICsgUkVDRklMRV9BUElfQ1RYICsgJy8nICsgcmYuaXRlbUNvZGU7XHJcbiAgICAgICAgICB3dy53cml0ZUFzeW5jKGFiLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBvc3RSZWNvcmRpbmcod2F2RmlsZSwgcmVjVXJsLHJmKTtcclxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gZmFsc2VcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVXYWtlTG9jaygpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY2hlY2sgY29tcGxldGUgc2Vzc2lvblxyXG4gICAgbGV0IGNvbXBsZXRlID0gdHJ1ZTtcclxuICAgIGlmKHRoaXMuaXRlbXMpIHtcclxuICAgICAgLy8gc2VhcmNoIGJhY2t3YXJkcywgdG8gZ2FpbiBmYXN0ZXIgZGV0ZWN0aW9uIG9mIGluY29tcGxldGUgc3RhdGVcclxuICAgICAgZm9yIChsZXQgcmkgPSB0aGlzLml0ZW1zLmxlbmd0aCgpIC0gMTsgcmkgPj0gMDsgcmktLSkge1xyXG4gICAgICAgIGxldCBpdCA9IHRoaXMuaXRlbXMuZ2V0SXRlbShyaSk7XHJcbiAgICAgICAgaWYgKGl0LnJlY29yZGluZyAmJiAhaXQudHJhaW5pbmcgJiYgIWl0Lml0ZW1Eb25lKCkpIHtcclxuICAgICAgICAgIGNvbXBsZXRlID0gZmFsc2U7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXV0b1N0YXJ0ID0gKHRoaXMuc3RhdHVzID09PSBTdGF0dXMuU1RPUFBJTkdfU1RPUCk7XHJcbiAgICB0aGlzLnN0YXR1cyA9IFN0YXR1cy5JRExFO1xyXG4gICAgbGV0IHN0YXJ0TmV4dD1mYWxzZTtcclxuICAgIGlmIChjb21wbGV0ZSkge1xyXG4gICAgICBpZih0aGlzLl9zZXNzaW9uIT1udWxsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLnNlYWxlZCAmJiB0aGlzLl9zZXNzaW9uLnN0YXR1cyAhPT0gXCJDT01QTEVURURcIikge1xyXG4gICAgICAgICAgbGV0IGJvZHk6IGFueSA9IHt9XHJcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uLnN0YXR1cyA9IFwiQ09NUExFVEVEXCI7XHJcbiAgICAgICAgICBib2R5LnN0YXR1cyA9IHRoaXMuX3Nlc3Npb24uc3RhdHVzO1xyXG4gICAgICAgICAgaWYgKCF0aGlzLl9zZXNzaW9uLmNvbXBsZXRlZERhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZWREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgYm9keS5jb21wbGV0ZWREYXRlID0gdGhpcy5fc2Vzc2lvbi5jb21wbGV0ZWREYXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZXNzaW9uU2VydmljZS5wYXRjaFNlc3Npb25PYnNlcnZlcih0aGlzLl9zZXNzaW9uLCBib2R5KS5zdWJzY3JpYmUoKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnN0YXR1c01zZyA9ICdTZXNzaW9uIGNvbXBsZXRlISc7XHJcbiAgICAgIHRoaXMudXBkYXRlV2FrZUxvY2soKTtcclxuICAgICAgbGV0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oU2Vzc2lvbkZpbmlzaGVkRGlhbG9nLCB7fSk7XHJcblxyXG4gICAgICAvLyBlbmFibGUgbmF2aWdhdGlvblxyXG4gICAgICB0aGlzLnRyYW5zcG9ydEFjdGlvbnMuZndkQWN0aW9uLmRpc2FibGVkID0gZmFsc2VcclxuICAgICAgdGhpcy50cmFuc3BvcnRBY3Rpb25zLmJ3ZEFjdGlvbi5kaXNhYmxlZCA9IGZhbHNlXHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIGlmICh0aGlzLnNlY3Rpb24ubW9kZSA9PT0gJ0FVVE9QUk9HUkVTUycgfHwgdGhpcy5zZWN0aW9uLm1vZGUgPT09ICdBVVRPUkVDT1JESU5HJykge1xyXG4gICAgICAgIHRoaXMubmV4dEl0ZW0oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbi5tb2RlID09PSAnQVVUT1JFQ09SRElORycgJiYgdGhpcy5hdXRvcmVjb3JkaW5nICYmIGF1dG9TdGFydCkge1xyXG4gICAgICAgIHN0YXJ0TmV4dD10cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy51cGRhdGVOYXZpZ2F0aW9uQWN0aW9ucygpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlV2FrZUxvY2soKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gYXBwbHkgcmVjb3JkZWQgaXRlbVxyXG4gICAgdGhpcy5hcHBseUl0ZW0oc3RhcnROZXh0KTtcclxuICAgIGlmKHN0YXJ0TmV4dCl7XHJcbiAgICAgIHRoaXMuc3RhcnRJdGVtKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIGVycm9yKG1zZz0nQW4gdW5rbm93biBlcnJvciBvY2N1cmVkIGR1cmluZyByZWNvcmRpbmcuJyxhZHZpY2U6c3RyaW5nPSdQbGVhc2UgcmV0cnkuJykge1xyXG4gICAgdGhpcy5zdGF0dXM9U3RhdHVzLkVSUk9SO1xyXG4gICAgc3VwZXIuZXJyb3IobXNnLGFkdmljZSk7XHJcbiAgICB0aGlzLnVwZGF0ZU5hdmlnYXRpb25BY3Rpb25zKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVN0YXJ0QWN0aW9uRGlzYWJsZVN0YXRlKCk7XHJcbiAgfVxyXG5cclxuICBwb3N0Q2h1bmtBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjogQXVkaW9CdWZmZXIsIGNodW5rSWR4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvY2Vzc2luZ1JlY29yZGluZyA9IHRydWU7XHJcbiAgICBsZXQgd3cgPSBuZXcgV2F2V3JpdGVyKCk7XHJcbiAgICBsZXQgc2Vzc2lvbnNVcmwgPSB0aGlzLnNlc3Npb25zQmFzZVVybCgpO1xyXG4gICAgbGV0IHJlY1VybDogc3RyaW5nID0gc2Vzc2lvbnNVcmwgKyAnLycgKyB0aGlzLnNlc3Npb24/LnNlc3Npb25JZCArICcvJyArIFJFQ0ZJTEVfQVBJX0NUWCArICcvJyArIHRoaXMucHJvbXB0SXRlbS5pdGVtY29kZSsnLycrdGhpcy5yZlV1aWQrJy8nK2NodW5rSWR4O1xyXG4gICAgLy8gVGhlIHVwbG9hZCBob2xkZXIgaXMgcmVxdWlyZWQgdG8gYWRkIHRoZSB1cGxvYWQgbm93IHRvIHRoZSB1cGxvYWQgc2V0LiBUaGUgcmVhbCB1cGxvYWQgaXMgY3JlYXRlZCBhc3luYyBpbiBwb3N0cmVjb3JkaW5nIGFuZCB0aGUgdXBsb2FkIHNldCBpcyBhbHJlYWR5IGNvbXBsZXRlIGF0IHRoYXQgdGltZS5cclxuICAgIGxldCB1bGg9bmV3IFVwbG9hZEhvbGRlcigpO1xyXG4gICAgaWYodGhpcy51cGxvYWRTZXQpe1xyXG4gICAgICB0aGlzLnVwbG9hZFNldC5hZGQodWxoKTtcclxuICAgIH1cclxuXHJcbiAgICB3dy53cml0ZUFzeW5jKGF1ZGlvQnVmZmVyLCAod2F2RmlsZSkgPT4ge1xyXG4gICAgICB0aGlzLnBvc3RSZWNvcmRpbmcod2F2RmlsZSwgcmVjVXJsLG51bGwsdWxoKTtcclxuICAgICAgdGhpcy5wcm9jZXNzaW5nUmVjb3JkaW5nID0gZmFsc2VcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIHBvc3RSZWNvcmRpbmcod2F2RmlsZTogVWludDhBcnJheSwgcmVjVXJsOiBzdHJpbmcscmY6UmVjb3JkaW5nRmlsZXxudWxsKSB7XHJcbiAgLy8gICBsZXQgd2F2QmxvYiA9IG5ldyBCbG9iKFt3YXZGaWxlXSwge3R5cGU6ICdhdWRpby93YXYnfSk7XHJcbiAgLy8gICBsZXQgdWwgPSBuZXcgVXBsb2FkKHdhdkJsb2IsIHJlY1VybCxyZik7XHJcbiAgLy8gICB0aGlzLnVwbG9hZGVyLnF1ZXVlVXBsb2FkKHVsKTtcclxuICAvLyB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICBpZih0aGlzLmFjIT1udWxsKXtcclxuICAgICAgdGhpcy5hYy5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVDb250cm9sUGxheWJhY2tQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLl9jb250cm9sQXVkaW9QbGF5ZXIucGxheVBvc2l0aW9uRnJhbWVzKSB7XHJcbiAgICAgIHRoaXMucHJvbXB0aW5nLmF1ZGlvRGlzcGxheS5wbGF5RnJhbWVQb3NpdGlvbiA9IHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICAgIHRoaXMubGl2ZUxldmVsRGlzcGxheS5wbGF5RnJhbWVQb3NpdGlvbiA9IHRoaXMuX2NvbnRyb2xBdWRpb1BsYXllci5wbGF5UG9zaXRpb25GcmFtZXM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhdWRpb1BsYXllclVwZGF0ZShlOiBBdWRpb1BsYXllckV2ZW50KSB7XHJcbiAgICBpZiAoRXZlbnRUeXBlLlJFQURZID09PSBlLnR5cGUpIHtcclxuXHJcbiAgICB9IGVsc2UgaWYgKEV2ZW50VHlwZS5TVEFSVEVEID09PSBlLnR5cGUpIHtcclxuICAgICAgLy90aGlzLnN0YXR1cyA9ICdQbGF5YmFjay4uLic7XHJcbiAgICAgIHRoaXMudXBkYXRlVGltZXJJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnVwZGF0ZUNvbnRyb2xQbGF5YmFja1Bvc2l0aW9uKCksIDUwKTtcclxuXHJcbiAgICB9IGVsc2UgaWYgKEV2ZW50VHlwZS5FTkRFRCA9PT0gZS50eXBlKSB7XHJcbiAgICAgIC8vLnN0YXR1cz0nUmVhZHkuJztcclxuICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy51cGRhdGVUaW1lcklkKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWYoIXRoaXMuZGVzdHJveWVkKSB7XHJcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxufVxyXG5cclxuIl19