@vgroup/dialbox 0.3.73 → 0.3.74

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.
@@ -215,7 +215,7 @@ export class CallProgressComponent {
215
215
  onHoldCall(c) {
216
216
  console.log(c, 'dsdsdsdsdsdsadsa');
217
217
  this.onholdOrUnholdParticipant({
218
- participantId: c.participantId,
218
+ participantId: [c.participantId],
219
219
  conferenceId: this.conferenceId,
220
220
  hold: !c.hold
221
221
  });
@@ -419,7 +419,7 @@ export class CallProgressComponent {
419
419
  this.currentCallList[0].isHold = false;
420
420
  this.currentCall = this.currentCallList[0];
421
421
  await this.onholdOrUnholdParticipant({
422
- participantId: this.currentCall?.participantId,
422
+ participantId: [this.currentCall?.participantId],
423
423
  conferenceId: this.conferenceId,
424
424
  hold: false
425
425
  });
@@ -498,14 +498,14 @@ export class CallProgressComponent {
498
498
  // if(data?.status != 'ringing'){
499
499
  if (this.currentCallList.length > 1 && this.currentCall?.isAcceptCall) {
500
500
  await this.onholdOrUnholdParticipant({
501
- participantId: this.currentCall?.isIncomingCall ? this.currentCall?.id : this.currentCall?.participantId,
501
+ participantId: this.currentCall?.isIncomingCall ? [this.currentCall?.id] : [this.currentCall?.participantId],
502
502
  conferenceId: this.currentCall?.isIncomingCall ? this.twilioService.conferenceCallInfo.conferenceId : this.conferenceId,
503
503
  hold: true
504
504
  });
505
505
  data.isHold = true;
506
506
  }
507
- let device = await this.twilioService.connect('');
508
- console.log(device, 'callConnect');
507
+ this.call = await this.twilioService.connect('');
508
+ console.log(this.call, 'callConnect');
509
509
  data.isAcceptCall = true;
510
510
  this.currentCall = data;
511
511
  // } else if(data?.status == 'ringing'){
@@ -573,7 +573,7 @@ export class CallProgressComponent {
573
573
  if (c?.participantId && !c?.isHold) {
574
574
  c.isHold = true;
575
575
  await this.onholdOrUnholdParticipant({
576
- participantId: c?.participantId,
576
+ participantId: [c?.participantId],
577
577
  conferenceId: this.conferenceId,
578
578
  hold: c?.isHold
579
579
  });
@@ -713,7 +713,7 @@ export class CallProgressComponent {
713
713
  if (c?.participantId && !c?.isHold) {
714
714
  c.isHold = true;
715
715
  await this.onholdOrUnholdParticipant({
716
- participantId: c?.participantId,
716
+ participantId: [c?.participantId],
717
717
  conferenceId: this.conferenceId,
718
718
  hold: c?.isHold
719
719
  });
@@ -721,7 +721,7 @@ export class CallProgressComponent {
721
721
  else if (callInfo?.isHold && c?.participantId === callInfo?.participantId) {
722
722
  c.isHold = false;
723
723
  await this.onholdOrUnholdParticipant({
724
- participantId: c?.participantId,
724
+ participantId: [c?.participantId],
725
725
  conferenceId: this.conferenceId,
726
726
  hold: c?.isHold
727
727
  });
@@ -773,7 +773,7 @@ export class CallProgressComponent {
773
773
  if (c?.participantId && c?.isHold) {
774
774
  c.isHold = false;
775
775
  await this.onholdOrUnholdParticipant({
776
- participantId: c?.participantId,
776
+ participantId: [c?.participantId],
777
777
  conferenceId: this.conferenceId,
778
778
  hold: false
779
779
  });
@@ -1110,4 +1110,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
1110
1110
  }], incomingCallInitiated: [{
1111
1111
  type: Output
1112
1112
  }] } });
1113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFxQjlDLE1BQU0sT0FBTyxxQkFBcUI7SUFxRGhDLHNCQUFzQjtJQUN0QixzRkFBc0Y7SUFDdEYsOEZBQThGO0lBQzlGLGtHQUFrRztJQUNsRyw2RUFBNkU7SUFDN0UsOEZBQThGO0lBQzlGLDZFQUE2RTtJQUM3RSxLQUFLO0lBQ0wsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFBVSxhQUE0QjtRQUF4RyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXpEbkgseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBRTlCLGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUQs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LENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxJQUFTO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLHlCQUF5QixDQUFDLENBQUE7UUFDNUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxJQUFTO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQzs7bUhBenBDVSxxQkFBcUI7dUdBQXJCLHFCQUFxQiwrYUM3QmxDLHk3MEJBbWRNOzRGRHRiTyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsbUJBQW1CO21LQUtwQixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFvQkcscUJBQXFCO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDYWxsLCBEZXZpY2UgfSBmcm9tICdAdHdpbGlvL3ZvaWNlLXNkayc7XG5pbXBvcnQgeyBFeHRlbnNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS9leHRlbnNpb24uc2VydmljZSc7XG5pbXBvcnQgeyBUd2lsaW9TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZS90d2lsaW8uc2VydmljZSc7XG5pbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudHMnO1xuaW1wb3J0IHN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IHsga2V5cGFkIH0gZnJvbSAnLi4vLi4vLi4va2V5cGFkJztcbmltcG9ydCB7IGludGVydmFsLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuXG5cbmludGVyZmFjZSBDYWxsRGV0YWlscyB7XG4gIGNhbGxTaWQ6IHN0cmluZztcbiAgY2FsbFN0YXR1czogc3RyaW5nO1xufVxuaW50ZXJmYWNlIENhbGxTdGF0dXNSZXNwb25zZSB7XG4gIGNhbGxEZXRhaWxzOiBDYWxsRGV0YWlscztcbiAgcmVzcG9uc2U6IHN0cmluZztcbiAgZXJyb3JUeXBlOiBudW1iZXI7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc3RhdHVzOiBudW1iZXI7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1jYWxsLXByb2dyZXNzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDYWxsUHJvZ3Jlc3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCB7XG4gIEBJbnB1dCgpIGNhbGxEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIHNlbGVjdGVkQ2FsbGVySWQ6IGFueTtcbiAgQElucHV0KCkgbmV3SW5jb21pbmdDYWxsRGF0YT86IENhbGw7XG4gIEBJbnB1dCgpIG5ld0luY29taW5nQ2FsbHNMaXN0OiBhbnkgPSBbXTtcbiAgQElucHV0KCkgZGV2aWNlSWQ6IGFueTtcbiAgQE91dHB1dCgpIGVuZENhbGxFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsc05ld0luZm86IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpIG1pbmltaXNlRXZlbnQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgZGV2aWNlPzogRGV2aWNlO1xuICBjYWxsPzogQ2FsbCB8IGFueTtcbiAgc2hvd1JpbmdBbmltYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgdGltZXI6IHN0cmluZyA9ICcwMDowMCc7XG4gIGludGVydmFsSWQ6IGFueTtcbiAgc2hvd0tleXBhZDogYm9vbGVhbiA9IGZhbHNlO1xuICBrZXlwYWRWYWwgPSBrZXlwYWQ7XG4gIGNhbGxJbnB1dDogc3RyaW5nID0gJyc7XG4gIGlzTXV0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBkaXNiYWxlRW5kQ2FsbEJ0bjogYm9vbGVhbiA9IHRydWU7XG4gIHNob3dDbGVhckJ0bjogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NvbGxvcHMgPSBmYWxzZTtcbiAgY3VycmVudENhbGw6IGFueTtcbiAgLy8gQ29uZmVyZW5jZSBzdGF0ZSBmbGFnXG4gIGlzQ29uZmVyZW5jZTogYm9vbGVhbiA9IGZhbHNlO1xuICBpc091dGdvaW5nQ2FsbDogYm9vbGVhbiA9IHRydWU7XG4gIC8vIEluY29taW5nIGNhbGwgdmFyaWFibGVzXG4gIGluY29taW5nQ2FsbERpdjogYm9vbGVhbiA9IGZhbHNlO1xuICAvL0BPdXRwdXQoKSBzaG93Q2FsbFByb2dyZXNzRXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGluY29taW5nQ2FsbEluaXRpYXRlZDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8vIFJlY29yZGluZyB2YXJpYWJsZXNcbiAgY2FsbFNpZDogYW55O1xuICBpc1JlY29yZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBpc1BhdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICB0aW1lclN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgdGltZUVsYXBzZWQgPSAwOyAvLyBpbiBzZWNvbmRzXG4gIHJlY29yZENhbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaW5jb21pbmdDYWxsU2lkOiBhbnk7XG4gIGNhbGxTdGF0dXM6IHN0cmluZyA9ICdyaW5naW5nJztcbiAgaW5jb21pbmdSZWNvcmRDYWxsPzogYW55O1xuICBzZWxlY3RlZEluY29taW5nQ2FsbDogYW55O1xuICBzaG93Q29udGFjdHNQYW5lbDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0FkZFJlbW92ZVBhcnRpY2lwYW50OiBib29sZWFuID0gZmFsc2U7XG4gIGlzQ29uY3VycmVudEluY29taW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGhlbGRDYWxsPzogQ2FsbCB8IGFueTtcbiAgaXNDYWxsT25Ib2xkOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnRhY3RzOiBhbnlbXSA9IFtdO1xuICBjdXJyZW50Q2FsbExpc3Q6IGFueVtdID0gW107XG4gIGNvbmZlcmVuY2VJZDogYW55O1xuICBhbGxQYXJ0aWNpcGVudExpc3Q6IGFueTtcbiAgaXNDbGlja0V4cGFuZDogYm9vbGVhbiA9IGZhbHNlO1xuICBpc0NhbGxJblByb2dyZXNzITogYm9vbGVhbjtcbiAgLy8gY29udGFjdHM6IGFueVtdID0gW1xuICAvLyAgIHsgbmFtZTogJ1BhbWVsYSBDb3gnLCB0aXRsZTogJ1Byb2R1Y3QgRGVzaWduZXInLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9LFxuICAvLyAgIHsgbmFtZTogJ1JvZ2VyIFMuIFdvb2QnLCB0aXRsZTogJ0phdmFTY3JpcHQgUHJvZ3JhbW1lcicsIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIH0sXG4gIC8vICAgeyBuYW1lOiAnVmljdG9yIEJsYWNrc3RvbicsIHRpdGxlOiAnRGF0YWJhc2UgQWRtaW5pc3RyYXRvcicsIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIH0sXG4gIC8vICAgeyBuYW1lOiAnVGFtbXkgUmlvcycsIHRpdGxlOiAnU3VwcG9ydCcsIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIH0sXG4gIC8vICAgeyBuYW1lOiAnQ2FybG9zIEhlbmRlcnNvbicsIHRpdGxlOiAnU29mdHdhcmUgQXJjaGl0ZWN0JywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfSxcbiAgLy8gICB7IG5hbWU6ICdFbGl6YWJldGggQmFpbGV5JywgdGl0bGU6ICdIUicsIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIH1cbiAgLy8gXTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBleHRlbnNpb25TZXJ2aWNlOiBFeHRlbnNpb25TZXJ2aWNlLCBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgdHdpbGlvU2VydmljZTogVHdpbGlvU2VydmljZSkge1xuICAgIGNvbnNvbGUubG9nKCdDYWxsIFByb2dyZXNzIENvbXBvbmVudCcpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ0NhbGwgUHJvZ3Jlc3MgQ29tcG9uZW50IG5nT25Jbml0Jyk7XG4gICAgLy8gU3Vic2NyaWJlIHRvIGluY29taW5nIGNhbGxzIGZyb20gVHdpbGlvU2VydmljZVxuICAgIHRyeSB7XG4gICAgICB0aGlzLnR3aWxpb1NlcnZpY2UuY3VycmVudENhbGwuc3Vic2NyaWJlKChpbmNvbWluZzogYW55KSA9PiB7XG4gICAgICAgIGlmICghaW5jb21pbmcpIHsgcmV0dXJuOyB9XG4gICAgICAgIGNvbnNvbGUubG9nKCdUd2lsaW9TZXJ2aWNlLmN1cnJlbnRDYWxsIGVtaXR0ZWQ6JywgaW5jb21pbmcpO1xuICAgICAgICBjb25zb2xlLmxvZygnQ3VycmVudCBjYWxsIHN0YXR1czonLCB0aGlzLmNhbGw/LnN0YXR1cygpKTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gb25nb2luZyBjYWxsLCBzaG93IGNvbmN1cnJlbnQgaW5jb21pbmcgYmFubmVyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQ29uY3VycmVudCBpbmNvbWluZyBkZXRlY3RlZCAtIHNob3dpbmcgYmFubmVyJyk7XG4gICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSB0cnVlO1xuICAgICAgICAgIC8vIEFkZCB0byBsaXN0IGlmIG5vdCBwcmVzZW50XG4gICAgICAgICAgY29uc3QgZXhpc3RzID0gKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgfHwgW10pLnNvbWUoKGM6IGFueSkgPT4gYz8ucGFyYW1ldGVycz8uQ2FsbFNpZCA9PT0gaW5jb21pbmc/LnBhcmFtZXRlcnM/LkNhbGxTaWQpO1xuICAgICAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0ID0gWy4uLih0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0IHx8IFtdKSwgaW5jb21pbmddO1xuICAgICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mby5lbWl0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIC8vIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN1YnNjcmliaW5nIHRvIGluY29taW5nIGNhbGxzOicsIGUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXSkge1xuICAgICAgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5pc0luY29taW5nQ2FsbCkge1xuICAgICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IHRydWU7XG4gICAgICAgIHRoaXMuY2FsbFsnY2FsbEluZm8nXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jYWxsRGF0YSkpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5kaXNwbGF5TnVtIHx8IGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlPy5mcm9tKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0LXN0YXJ0Q2FsbDEyMycsIGNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlKVxuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0geyAuLi5jaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSwgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfTtcbiAgICAgICAgdGhpcy5zdGFydENhbGwoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snbmV3SW5jb21pbmdDYWxsc0xpc3QnXSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBhY3RpdmUgb25nb2luZyBjYWxsXG4gICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKChyZXM6YW55KT0+e1xuICAgICAgICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChpdGVtOmFueSk9Pml0ZW0uaWQgPT0gcmVzLmlkKSA9PSAtMSl7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goey4uLnJlcywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsIGlzSW5jb21pbmdDYWxsOiB0cnVlLCBpc0hvbGQ6IGZhbHNlLCBpc011dGU6IGZhbHNlLCBpc0NvbmZlcmVuY2U6IGZhbHNlLCBpc0FjY2VwdENhbGw6IGZhbHNlfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmKCF0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCl7XG4gICAgICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmlsdGVyKChpdGVtOmFueSk9PiAhaXRlbS5pc0luY29taW5nQ2FsbCApO1xuICAgICAgICAgIGlmKHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgIHRoaXMuaXNDYWxsSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHt9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc29sZS5sb2coJ2N1cnJlbnRDYWxsTGlzdCcsIHRoaXMuY3VycmVudENhbGxMaXN0KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAvLyB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgLy8gfSwgMzAwMCk7XG5cbiAgfVxuXG4gIEdldENvbnRhY3RzTGlzdCgpIHtcbiAgICBjb25zdCB0b2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdleHRfdG9rZW4nKSB8fCAnJztcbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucmVhZENvbnRhY3RzKHRva2VuKS5zdWJzY3JpYmUoXG4gICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0FQSSBSZXNwb25zZTonLCByZXMpO1xuXG4gICAgICAgIC8vIE5vdGU6IENhcGl0YWwgQiBpbiBwaG9uZUJvb2tcbiAgICAgICAgaWYgKHJlcyAmJiByZXMucGhvbmVCb29rKSB7XG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcy5waG9uZUJvb2s7XG4gICAgICAgICAgY29uc29sZS5sb2coJ0NvbnRhY3RzIGFycmF5OicsIHRoaXMuY29udGFjdHMpO1xuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVzKSkge1xuICAgICAgICAgIHRoaXMuY29udGFjdHMgPSByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5sb2coJ0NvbnRhY3RzIGFycmF5OicsIHRoaXMuY29udGFjdHMpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGNvbnRhY3RzOicsIGVycm9yKTtcbiAgICAgICAgdGhpcy5jb250YWN0cyA9IFtdO1xuICAgICAgfVxuICAgICk7XG4gIH1cbiAgYWRkUmVzOiBhbnk7XG4gIGFzeW5jIHN0YXJ0Q2FsbChjYWxsRGF0YTogYW55KSB7XG4gICAgY29uc29sZS5sb2coY2FsbERhdGEsICdjYWxsRGF0YScpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgIGNoYW5uZWxJZDogZW52aXJvbm1lbnQuY2hhbm5lbElkLFxuICAgICAgICB1c2VySWQ6IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VySWQnKSxcbiAgICAgICAgdG86IGNhbGxEYXRhLnBob25lLFxuICAgICAgICBmcm9tTnVtYmVyOiBjYWxsRGF0YS5mcm9tLFxuICAgICAgICBzY29wZTogJ2xvY2FsJyxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5pbml0aWF0ZUNhbGwocGF5bG9hZCk7XG4gICAgICB0aGlzLmNvbmZlcmVuY2VJZCA9IHJlc3BvbnNlPy5jYWxsYXV0aD8uaWQ7XG4gICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IDIwMCkge1xuICAgICAgICBjb25zdCB7IGlkOiBjYWxsQXV0aElkLCByZWNvcmRDYWxsIH0gPSBhd2FpdCB0aGlzLmdldENhbGxBdXRoSWQocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbihjYWxsQXV0aElkKVxuICAgICAgICB0aGlzLnJlY29yZENhbGwgPSByZWNvcmRDYWxsOyAvLyBTdG9yZSB0aGUgcmVjb3JkQ2FsbCB2YWx1ZVxuICAgICAgICBjb25zdCB0b2tlbkRhdGE6IGFueSA9IGF3YWl0IHRoaXMuZ2V0T3V0Z29pbmdDYWxsVG9rZW4oY2FsbEF1dGhJZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuY29ubmVjdFRvRGV2aWNlKHRva2VuRGF0YS50b2tlbiwgY2FsbERhdGEpO1xuICAgICAgICBhd2FpdCB0aGlzLnBvbGxDYWxsU3RhdHVzKGNhbGxBdXRoSWQpO1xuXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmFkZFJlcyA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xuICAgICAgICAgICAgICBmcm9tOiBjYWxsRGF0YT8uZnJvbSxcbiAgICAgICAgICAgICAgcm91dGU6IFwiT1VUR09JTkdcIixcbiAgICAgICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IGNhbGxEYXRhPy5waG9uZSxcbiAgICAgICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNhbGxEYXRhID0geyAuLi5jYWxsRGF0YSwgcGFydGljaXBhbnRJZDogdGhpcy5hZGRSZXM/LnBhcnRpY2lwYW50SWQsaXNIb2xkOiBmYWxzZSwgaXNMZWZ0OiBmYWxzZSwgaXNJbmNvbWluZ0NhbGw6IGZhbHNlLCBpc0NvbmZlcmVuY2U6IGZhbHNlLCBpc0FjY2VwdENhbGw6IHRydWV9O1xuICAgICAgICAgICAgdGhpcy5jYWxsWydjYWxsSW5mbyddID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhbGxEYXRhKSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGVzdDExMTExMScpO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHsuLi50aGlzLmNhbGxEYXRhLCBpbWc6IGNhbGxEYXRhLmltZyB8fCdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ307XG4gICAgICAgICAgICAvLyBJbml0aWFsaXplIGlzQWNjZXB0Q2FsbCBiYXNlZCBvbiBjdXJyZW50IGNhbGwgc3RhdGUgdG8gZW5zdXJlIFVJIHJlbmRlcnMgaWYgYWxyZWFkeSBjb25uZWN0ZWRcbiAgICAgICAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAuLi50aGlzLmNhbGxEYXRhLFxuICAgICAgICAgICAgICBpbWc6IGNhbGxEYXRhLmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgICAgICAgIGlzQWNjZXB0Q2FsbDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnSW5pdGlhbCBwYXJ0aWNpcGFudElkOicsIHRoaXMuYWRkUmVzPy5wYXJ0aWNpcGFudElkKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBhZGRpbmcgaW5pdGlhbCBwYXJ0aWNpcGFudDonLCBlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDEwMDApXG4gICAgICAgIC8vIFBvbGwgdGhlIHN0YXR1cyBmb3IgMzAtNDUgc2Vjb25kc1xuICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMjAxKSB7XG4gICAgICAgIHN3YWwoXCJFcnJvclwiLCByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnIvPlwiKSwgXCJlcnJvclwiKTtcbiAgICAgICAgY29uc29sZS5sb2coJ3Rlc3QyJylcbiAgICAgICAgdGhpcy5lbmRDYWxsKCk7XG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgICBjb25zb2xlLmxvZygndGVzdDMnKVxuICAgICAgdGhpcy5lbmRDYWxsKCk7XG4gICAgfVxuICB9XG5cbiAgb25Ib2xkQ2FsbChjOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhjLCAnZHNkc2RzZHNkc2RzYWRzYScpO1xuICAgIHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICBwYXJ0aWNpcGFudElkOiBjLnBhcnRpY2lwYW50SWQsXG4gICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgaG9sZDogIWMuaG9sZFxuICAgIH0pXG4gICAgYy5ob2xkID0gIWMuaG9sZDtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyBvbkVuZENhbGwoYzogYW55LCBpc0FsbENhbGxFbmQ/OiBib29sZWFuKSB7XG4gICAgY29uc29sZS5sb2coYywgJ2RzZHNkc2RzZHNkc2Fkc2EnKTtcbiAgICBsZXQgcGFydGljaXBhbnRJZCA9IGlzQWxsQ2FsbEVuZCA/ICdhbGwnIDogYy5wYXJ0aWNpcGFudElkIHx8IGMucGFydGljaXBhbnRJZDtcbiAgICBsZXQgcmVzOiBhbnkgPSBhd2FpdCB0aGlzLmdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkLCB0aGlzLmNvbmZlcmVuY2VJZCk7XG4gICAgaWYocmVzPy5zdGF0dXMgPT0gMjAxICYmIHJlcz8ubWVzc2FnZSA9PSAncGFydGljaXBhbnQgYWxyZWFkeSBsZWZ0Jyl7XG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLnBhcnRpY2lwYW50SWQgIT09IGMucGFydGljaXBhbnRJZCk7XG4gICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCA/IHRoaXMuY3VycmVudENhbGxMaXN0WzBdIDogbnVsbDtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5nZXRBbGxQYXJ0aWNpcGFudHModGhpcy5jb25mZXJlbmNlSWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBpbml0aWF0ZUNhbGwocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5pbml0aWF0ZUNhbGwocGF5bG9hZCkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyBvbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaG9sZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRQYXJ0aWNpcGFudFRvQ2FsbChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmFkZFBhcnRpY2lwYW50KHBheWxvYWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRDYWxsU3RhdHVzT2ZQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU3RhdHVzT2ZQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFJlbW92ZVBhcnRpY2lwYW50cyhwYXJ0aWNpcGFudElkOiBhbnksIGNvbmZlcmVuY2VJZDogYW55KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgY29uZmVyZW5jZUlkKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2FsbEF1dGhJZChyZXNwb25zZTogYW55KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByZXNwb25zZS5jYWxsYXV0aC5pZCxcbiAgICAgIHJlY29yZENhbGw6IHJlc3BvbnNlLmNhbGxhdXRoLnJlY29yZENhbGxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRPdXRnb2luZ0NhbGxUb2tlbihjYWxsQXV0aElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENvbmZlcmVuY2VDYWxsVG9rZW4oeyBhdXRoSWQ6IGNhbGxBdXRoSWQgfSkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbm5lY3RUb0RldmljZSh0b2tlbjogYW55LCBjYWxsRGF0YTogYW55KSB7XG4gICAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xuICAgICAgY29kZWNQcmVmZXJlbmNlczogWydvcHVzJywgJ3BjbXUnXSxcbiAgICAgIGNsb3NlUHJvdGVjdGlvbjogdHJ1ZSxcbiAgICB9O1xuXG4gICAgdGhpcy5kZXZpY2UgPSBuZXcgRGV2aWNlKHRva2VuLnZhbHVlLCBvcHRpb25zKTtcbiAgICB0aGlzLmNhbGwgPSBhd2FpdCB0aGlzLmRldmljZS5jb25uZWN0KHtcbiAgICAgIHBhcmFtczoge1xuICAgICAgICBGcm9tOiBjYWxsRGF0YS5mcm9tLFxuICAgICAgICBUbzogY2FsbERhdGEucGhvbmUsXG4gICAgICAgIEVudjogZW52aXJvbm1lbnQuYWJiLFxuICAgICAgICBUb2tlbjogdG9rZW4uaWQsXG4gICAgICAgIEV4dDogY2FsbERhdGEuZXh0TnVtXG4gICAgICB9LFxuICAgICAgcnRjQ29uc3RyYWludHM6IHsgYXVkaW86IHsgZGV2aWNlSWQ6ICdkZWZhdWx0JyB9IH0sXG4gICAgfSk7XG4gICAgdGhpcy5jYWxsWydjYWxsSW5mbyddID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjYWxsRGF0YSkpO1xuICAgIHRoaXMuc2V0dXBFdmVudExpc3RlbmVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEV2ZW50TGlzdGVuZXJzKCkge1xuXG4gICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgdGhpcy5kZXZpY2U/Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsPy5vbignZXJyb3InLCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FsbD8ub24oJ2Rpc2Nvbm5lY3QnLCAoaXRlbTogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygndGVzdC1kaXNjb25uZWN0JylcbiAgICAgIC8vIHRoaXMuZW5kQ2FsbCgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jYWxsPy5vbigncmluZ2luZycsICgpID0+IHtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FsbD8ub24oJ3JlamVjdCcsICgpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKCd0ZXN0NScpXG4gICAgICB0aGlzLmVuZENhbGwoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FsbD8ub24oJ2FjY2VwdCcsICgpID0+IHtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcbiAgICAgIC8vIEVuc3VyZSB0aGUgYWN0aXZlIG91dGdvaW5nIGNhbGwgaXMgbWFya2VkIGFzIGFjY2VwdGVkIHNvIHRoZSBVSSBzd2l0Y2hlcyB0byB0aGUgY29ubmVjdGVkIHZpZXdcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHBpZCA9IHRoaXMuY2FsbERhdGE/LnBhcnRpY2lwYW50SWQ7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuY3VycmVudENhbGxMaXN0KSAmJiB0aGlzLmN1cnJlbnRDYWxsTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKGM6IGFueSkgPT4gKHBpZCAmJiBjPy5wYXJ0aWNpcGFudElkID09PSBwaWQpIHx8ICghcGlkICYmIGM/LnBob25lID09PSB0aGlzLmNhbGxEYXRhPy5waG9uZSkpO1xuICAgICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFtpZHhdLmlzQWNjZXB0Q2FsbCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jdXJyZW50Q2FsbExpc3RbaWR4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmxvZygnRXJyb3IgdXBkYXRpbmcgYWNjZXB0IHN0YXRlOicsIGUpO1xuICAgICAgfVxuICAgICAgLy8gU3RhcnQgcmVjb3JkaW5nIGlmIHJlY29yZENhbGwgaXMgdHJ1ZSBhbmQgY2FsbCBpcyBhY2NlcHRlZCBmb3IgMzAgc2Vjb25kc1xuICAgICAgLy8gaWYgKHRoaXMucmVjb3JkQ2FsbCkge1xuICAgICAgLy8gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8vICAgICBpZiAodGhpcy5pc1JlY29yZGluZykgcmV0dXJuOyAvLyBJZiBhbHJlYWR5IHJlY29yZGluZywgc2tpcFxuICAgICAgLy8gICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcbiAgICAgIC8vICAgfSwgMzAwMDApO1xuICAgICAgLy8gfSBlbHNlIHtcbiAgICAgIC8vICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XG4gICAgICAvLyB9XG4gICAgfSk7XG4gICAgdGhpcy5jYWxsPy5vbignbWVzc2FnZVJlY2VpdmVkJywgKG1lc3NhZ2U6IGFueSkgPT4ge1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydFRpbWVyKCkge1xuICAgIGxldCBzZWNvbmRzID0gMDtcbiAgICB0aGlzLmludGVydmFsSWQgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBzZWNvbmRzKys7XG4gICAgICB0aGlzLnRpbWVyID0gdGhpcy5mb3JtYXRUaW1lKHNlY29uZHMpO1xuICAgIH0sIDEwMDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9wVGltZXIoKSB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpO1xuICAgIHRoaXMudGltZXIgPSAnMDA6MDAnO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRUaW1lKHRvdGFsU2Vjb25kczogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcih0b3RhbFNlY29uZHMgLyA2MCk7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHRvdGFsU2Vjb25kcyAlIDYwO1xuICAgIHJldHVybiBgJHt0aGlzLnBhZChtaW51dGVzKX06JHt0aGlzLnBhZChzZWNvbmRzKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBwYWQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlIDwgMTAgPyBgMCR7dmFsdWV9YCA6IGAke3ZhbHVlfWA7XG4gIH1cbiAgcHJpdmF0ZSBoYW5kbGVFcnJvcihlcnJvcjogYW55KSB7XG4gICAgc3dhbChcIkVycm9yXCIsIGVycm9yLCBcImVycm9yXCIpO1xuICB9XG5cbiAgLy8gZW5kQ2FsbCgpIHtcbiAgLy8gICBjb25zb2xlLmxvZygnZW5kQ2FsbCgpIGNhbGxlZCcpO1xuICAvLyAgIGNvbnNvbGUubG9nKCdDdXJyZW50IGNhbGw6JywgdGhpcy5jYWxsPy5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuICAvLyAgIGNvbnNvbGUubG9nKCdIZWxkIGNhbGwgZXhpc3RzOicsICEhdGhpcy5oZWxkQ2FsbCk7XG5cbiAgLy8gICAvLyBEaXNjb25uZWN0IHRoZSBjdXJyZW50IGFjdGl2ZSBjYWxsXG4gIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAvLyAgICAgdGhpcy5jYWxsLmRpc2Nvbm5lY3QoKTtcbiAgLy8gICAgIHRoaXMuY2FsbCA9IHVuZGVmaW5lZDtcbiAgLy8gICB9XG5cbiAgLy8gICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gIC8vICAgdGhpcy5zdG9wVGltZXIoKTtcblxuICAvLyAgIC8vIElmIHRoZXJlJ3MgYSBoZWxkIGNhbGwsIG1ha2UgaXQgYWN0aXZlXG4gIC8vICAgaWYgKHRoaXMuaGVsZENhbGwpIHtcbiAgLy8gICAgIGNvbnNvbGUubG9nKCdSZXN1bWluZyBoZWxkIGNhbGw6JywgdGhpcy5oZWxkQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuXG4gIC8vICAgICAvLyBNYWtlIGhlbGQgY2FsbCB0aGUgYWN0aXZlIGNhbGxcbiAgLy8gICAgIHRoaXMuY2FsbCA9IHRoaXMuaGVsZENhbGw7XG4gIC8vICAgICB0aGlzLmhlbGRDYWxsID0gdW5kZWZpbmVkO1xuICAvLyAgICAgLy8gdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgLy8gICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gISF0aGlzLmhlbGRDYWxsO1xuXG5cbiAgLy8gICAgIC8vIFVubXV0ZSB0aGUgcmVzdW1lZCBjYWxsXG4gIC8vICAgICB0aGlzLmNhbGwubXV0ZShmYWxzZSk7XG5cbiAgLy8gICAgIC8vIFVwZGF0ZSBVSSB3aXRoIHRoZSByZXN1bWVkIGNhbGwgaW5mb1xuICAvLyAgICAgY29uc3QgZnJvbU51bWJlciA9IHRoaXMuY2FsbC5wYXJhbWV0ZXJzWydGcm9tJ107XG4gIC8vICAgICBjb25zdCBjYWxsZXJOYW1lID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgLy8gICAgIGNvbnN0IGNhbGxlckltZyA9IHRoaXMuY2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuXG4gIC8vICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAvLyAgICAgICAuLi50aGlzLmNhbGxEYXRhLFxuICAvLyAgICAgICBwaG9uZTogZnJvbU51bWJlcixcbiAgLy8gICAgICAgZGlzcGxheU51bTogZnJvbU51bWJlcixcbiAgLy8gICAgICAgbmFtZTogY2FsbGVyTmFtZSxcbiAgLy8gICAgICAgaW1nOiBjYWxsZXJJbWdcbiAgLy8gICAgIH07XG5cbiAgLy8gICAgIC8vIFJlc3RhcnQgdGltZXIgZm9yIHRoZSByZXN1bWVkIGNhbGxcbiAgLy8gICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAvLyAgICAgdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xuXG4gIC8vICAgICBjb25zb2xlLmxvZygnSGVsZCBjYWxsIGlzIG5vdyBhY3RpdmU6JywgdGhpcy5jYWxsRGF0YSk7XG4gIC8vICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIC8vIE5vIGhlbGQgY2FsbCwgY29tcGxldGVseSBlbmRcbiAgLy8gICAgIGNvbnNvbGUubG9nKCdObyBoZWxkIGNhbGwsIGVuZGluZyBjb21wbGV0ZWx5Jyk7XG4gIC8vICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gIC8vICAgICB0aGlzLm1heGltaXNlRGlhbHBhZCgpO1xuICAvLyAgIH1cbiAgLy8gfVxuXG4gIGFzeW5jIGVuZENhbGwoaXNBbGxDYWxsRW5kPzogYm9vbGVhbikge1xuICAgIGNvbnNvbGUubG9nKCdlbmRDYWxsKCkgY2FsbGVkJyk7XG4gICAgY29uc29sZS5sb2coJ0N1cnJlbnQgY2FsbDonLCB0aGlzLmNhbGw/LnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG4gICAgY29uc29sZS5sb2coJ0hlbGQgY2FsbCBleGlzdHM6JywgISF0aGlzLmhlbGRDYWxsKTtcbiAgICAvLyBMZWF2aW5nIGNvbmZlcmVuY2Ugc3RhdGUgd2hlbiBlbmRpbmcgY3VycmVudCBjYWxsIGFjdGlvblxuICAgIHRoaXMuaXNDb25mZXJlbmNlID0gZmFsc2U7XG5cbiAgICAvLyBpZiAodGhpcy5jYWxsKSB7XG4gICAgLy8gICAgIHRoaXMuY2FsbC5kaXNjb25uZWN0KCk7XG4gICAgLy8gICAgIHRoaXMuY2FsbC5yZWplY3QoKTtcbiAgICAvLyAgICAgdGhpcy5jYWxsID0gdW5kZWZpbmVkO1xuICAgIC8vIH1cblxuICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnN0b3BUaW1lcigpO1xuICAgIGlmKGlzQWxsQ2FsbEVuZCl7XG4gICAgICB0aGlzLm9uRW5kQ2FsbCh7fSwgaXNBbGxDYWxsRW5kKTtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0ID0gW107XG4gICAgICB0aGlzLmVuZENhbGxFdmVudC5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25FbmRDYWxsKHRoaXMuY3VycmVudENhbGwsIGlzQWxsQ2FsbEVuZCk7XG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbHRlcigoYzogYW55KSA9PiBjPy5wYXJ0aWNpcGFudElkICE9PSB0aGlzLmN1cnJlbnRDYWxsLnBhcnRpY2lwYW50SWQpO1xuICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXS5pc0hvbGQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0WzBdO1xuICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgICAgICBwYXJ0aWNpcGFudElkOiB0aGlzLmN1cnJlbnRDYWxsPy5wYXJ0aWNpcGFudElkLFxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICAgICAgICBob2xkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiAodGhpcy5oZWxkQ2FsbCkge1xuICAgIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gICAgIHRoaXMub25FbmRDYWxsKHRoaXMuY2FsbD8uY2FsbEluZm8sIGlzQWxsQ2FsbEVuZCk7XG4gICAgLy8gICB9XG4gICAgLy8gICBjb25zb2xlLmxvZygnUmVzdW1pbmcgaGVsZCBjYWxsOicsIHRoaXMuaGVsZENhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcblxuICAgIC8vICAgLy8gUHJvbW90ZSBoZWxkIGNhbGxcbiAgICAvLyAgIC8vIHRoaXMuY2FsbCA9IHRoaXMuaGVsZENhbGw7XG4gICAgLy8gICB0aGlzLmhlbGRDYWxsID0gdW5kZWZpbmVkO1xuICAgIC8vICAgLy8gdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgICAvLyAgIC8vIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7IC8vIEVuc3VyZSBVSSByZW5kZXJzXG5cbiAgICAvLyAgIC8vIHRoaXMuY2FsbC5tdXRlKGZhbHNlKTtcblxuICAgIC8vICAgLy8gVXBkYXRlIGNhbGxEYXRhXG4gICAgLy8gICBjb25zdCBmcm9tTnVtYmVyID0gdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICAvLyAgIGNvbnN0IGNhbGxlck5hbWUgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nO1xuICAgIC8vICAgY29uc3QgY2FsbGVySW1nID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG5cbiAgICAvLyAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgLy8gICAgIHBob25lOiBmcm9tTnVtYmVyLFxuICAgIC8vICAgICBkaXNwbGF5TnVtOiBmcm9tTnVtYmVyLFxuICAgIC8vICAgICBuYW1lOiBjYWxsZXJOYW1lLFxuICAgIC8vICAgICBpbWc6IGNhbGxlckltZ1xuICAgIC8vICAgfTtcblxuICAgIC8vICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgLy8gICB0aGlzLmRpc2JhbGVFbmRDYWxsQnRuID0gZmFsc2U7XG5cbiAgICAvLyAgIC8vIEZvcmNlIFVJIHVwZGF0ZVxuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuXG4gICAgLy8gICBjb25zb2xlLmxvZygnSGVsZCBjYWxsIGlzIG5vdyBhY3RpdmU6JywgdGhpcy5jYWxsRGF0YSk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdObyBoZWxkIGNhbGwsIGVuZGluZyBjb21wbGV0ZWx5Jyk7XG4gICAgLy8gICBjb25zb2xlLmxvZygndGVzdDYnKVxuICAgIC8vICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAgIC8vICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vICAgICB0aGlzLm9uRW5kQ2FsbCh0aGlzLmNhbGw/LmNhbGxJbmZvLCBpc0FsbENhbGxFbmQpO1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gICB9XG4gICAgLy8gICB0aGlzLm1heGltaXNlRGlhbHBhZCgpO1xuICAgIC8vIH1cbiAgfVxuXG5cbiAgdG9nZ2xlTXV0ZSgpIHtcbiAgICB0aGlzLmlzTXV0ZSA9ICF0aGlzLmlzTXV0ZTtcbiAgICB0aGlzLmNhbGw/Lm11dGUodGhpcy5pc011dGUpO1xuICB9XG4gIHRvZ2dsZUtleXBhZCgpIHtcbiAgICB0aGlzLnNob3dLZXlwYWQgPSAhdGhpcy5zaG93S2V5cGFkO1xuICAgIHRoaXMuY2FsbElucHV0ID0gJyc7XG4gIH1cbiAgdG9nZ2xlQ29udGFjdHNQYW5lbChpc1JlbW92ZT86IGJvb2xlYW4pIHtcbiAgICBpZihpc1JlbW92ZSl7XG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQgPSAhdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwgPSAhdGhpcy5zaG93Q29udGFjdHNQYW5lbDtcbiAgICAgIHRoaXMuR2V0Q29udGFjdHNMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgYWRkUmVtb3ZlUGFydGljaXBhbnQoKSB7XG4gICAgY29uc3QgY29uZmVyZW5jZVNJZCA9IHRoaXMuYWRkUmVzPy5jb25mZXJlbmNlU2lkO1xuICAgIHRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudCA9ICF0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQ7XG4gICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlU0lkKTtcbiAgfVxuXG4gIGFzeW5jIGFkZChkYXRhPzogYW55KSB7XG4gICAgLy8gaWYoZGF0YT8uc3RhdHVzICE9ICdyaW5naW5nJyl7XG4gICAgaWYodGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMSAmJiB0aGlzLmN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGwpe1xuICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgICAgcGFydGljaXBhbnRJZDogdGhpcy5jdXJyZW50Q2FsbD8uaXNJbmNvbWluZ0NhbGwgPyB0aGlzLmN1cnJlbnRDYWxsPy5pZCA6IHRoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWQsXG4gICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jdXJyZW50Q2FsbD8uaXNJbmNvbWluZ0NhbGwgPyB0aGlzLnR3aWxpb1NlcnZpY2UuY29uZmVyZW5jZUNhbGxJbmZvLmNvbmZlcmVuY2VJZCA6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICBob2xkOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGRhdGEuaXNIb2xkID0gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IGRldmljZSA9IGF3YWl0IHRoaXMudHdpbGlvU2VydmljZS5jb25uZWN0KCcnKTtcbiAgICBjb25zb2xlLmxvZyhkZXZpY2UsICdjYWxsQ29ubmVjdCcpO1xuICAgIGRhdGEuaXNBY2NlcHRDYWxsID0gdHJ1ZTtcbiAgICB0aGlzLmN1cnJlbnRDYWxsID0gZGF0YTtcbiAgICAvLyB9IGVsc2UgaWYoZGF0YT8uc3RhdHVzID09ICdyaW5naW5nJyl7XG4gICAgLy8gICB0aGlzLnR3aWxpb1NlcnZpY2UuYWRkSW5jb21pbmdQYXJ0aWNpcGFudChkYXRhPy5pZCwgdGhpcy50d2lsaW9TZXJ2aWNlLmNvbmZlcmVuY2VDYWxsSW5mby5jb25mZXJlbmNlSWQpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgLy8gICAgIGNvbnNvbGUubG9nKGRhdGEsJ2JoaGhoaGhoaGhoaGhoaGhoaGhoJylcbiAgICAvLyAgIH0pXG4gICAgLy8gfVxuICAgIFxuICAgIC8vIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSgpOy9cbiAgICAvLyBEZXZpY2UuY29ubmVjdCh7IGNvbmZlcmVuY2VOYW1lOiAnbXktY29uZmVyZW5jZS1yb29tJyB9KTtcbiAgICAvLyB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UoeyBjb25mZXJlbmNlTmFtZTogJ215LWNvbmZlcmVuY2Utcm9vbScgfSk7XG4gIH1cblxuICByZWplY3RDYWxsRnJvbUxpc3QoZGF0YT86IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGRhdGEsJzI2NjU2NTY1NScpXG4gICAgLy8gdGhpcy50d2lsaW9TZXJ2aWNlLnJlamVjdEluY29taW5nUGFydGljaXBhbnQoZGF0YT8uaWQsIHRoaXMudHdpbGlvU2VydmljZS5jb25mZXJlbmNlQ2FsbEluZm8uY29uZmVyZW5jZUlkKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgIC8vICAgY29uc29sZS5sb2coZGF0YSwnYmhoaGhoaGhoaGhoaGhoaGhoaGgnKVxuICAgIC8vIH0pXG4gIH1cbiAgYXN5bmMgY2FsbENvbnRhY3QoY29udGFjdDogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ0FkZGluZyBwYXJ0aWNpcGFudDonLCBjb250YWN0KTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5jYWxsJywgdGhpcy5jYWxsKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmNhbGwnLCB0aGlzLmNhbGwuc3RhdHVzKCkpXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBhY3RpdmUgY2FsbFxuICAgIGlmICghdGhpcy5jYWxsIHx8IHRoaXMuY2FsbC5zdGF0dXMoKSAhPT0gJ29wZW4nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBhY3RpdmUgY2FsbCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgcGhvbmUgbnVtYmVyIGZyb20gdGhlIGNvbnRhY3RcbiAgICBjb25zdCBwaG9uZU51bWJlciA9IGNvbnRhY3Q/Lm51bWJlcnNMaXN0Py5bMF0/Lm51bWJlcjtcbiAgICBjb25zdCBjdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGM6IGFueSkgPT4gYz8ucGhvbmUgPT09IHBob25lTnVtYmVyKTtcbiAgICBpZiAoIXBob25lTnVtYmVyIHx8IGN1cnJlbnRDYWxsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBwaG9uZSBudW1iZXIgZm91bmQgZm9yIGNvbnRhY3QnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYodGhpcy5pc0NvbmZlcmVuY2Upe1xuICAgICAgICBsZXQgZGF0YTphbnkgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcbiAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxuICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXG4gICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IHBob25lTnVtYmVyLFxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgICAgICAgLy8gLi4udGhpcy5jYWxsRGF0YSxcbiAgICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXG4gICAgICAgICAgZGlzcGxheU51bTogcGhvbmVOdW1iZXIsXG4gICAgICAgICAgbmFtZTogY29udGFjdD8ubmFtZSB8fCBgJHtjb250YWN0Py5maXJzdE5hbWV9ICR7Y29udGFjdD8ubGFzdE5hbWV9YCB8fCBwaG9uZU51bWJlcixcbiAgICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogZGF0YT8ucGFydGljaXBhbnRJZCxcbiAgICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcbiAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gICAgICAgICAgaXNIb2xkOiBmYWxzZSxcbiAgICAgICAgICBpc0xlZnQ6IGZhbHNlLFxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbERhdGEsICd0aGlzLmNhbGxEYXRhNTY1NicpXG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MTExMTExNTU1NTU1NTU1NScpO1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jYWxsRGF0YTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7Li4udGhpcy5jYWxsRGF0YX0pO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlBhcnRpY2lwYW50IGFkZGVkIHRvIGNvbmZlcmVuY2U6XCIsIHBob25lTnVtYmVyKTtcbiAgICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xuICAgICAgICBpZihjPy5wYXJ0aWNpcGFudElkICYmICFjPy5pc0hvbGQpe1xuICAgICAgICAgIGMuaXNIb2xkID0gdHJ1ZTtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogYz8ucGFydGljaXBhbnRJZCxcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgICBob2xkOiBjPy5pc0hvbGRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBQdXQgY3VycmVudCBjYWxsIG9uIGhvbGRcbiAgICAgIC8vIHRoaXMuaGVsZENhbGwgPSB0aGlzLmNhbGw7XG4gICAgICB0aGlzLmlzQ2FsbE9uSG9sZCA9IHRydWU7XG4gICAgICAvLyB0aGlzLmhlbGRDYWxsLm11dGUodHJ1ZSk7XG4gICAgICAvLyB0aGlzLmhlbGRDYWxsWydwYXJhbWV0ZXJzJ11bJ2NhbGxlcl9uYW1lJ10gPSB7IC4uLnRoaXMuY2FsbERhdGEgfVxuICAgICAgLy8gdGhpcy5jYWxsPW51bGxcbiAgICAgIC8vIENsb3NlIGNvbnRhY3RzIHBhbmVsIGFuZCBzaG93IHJpbmcgYW5pbWF0aW9uXG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gdHJ1ZTtcbiAgICAgIC8vIFVwZGF0ZSBVSSB0byByZWZsZWN0IHRoZSBuZXcgb3V0Ym91bmQgbGVnIGJlaW5nIGRpYWxlZFxuICAgICAgY29uc3QgY29udGFjdE5hbWUgPSBbY29udGFjdD8uZmlyc3ROYW1lLCBjb250YWN0Py5taWRkbGVOYW1lLCBjb250YWN0Py5sYXN0TmFtZV1cbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuam9pbignICcpO1xuICAgICAgLy8gdGhpcy5jYWxsWydjYWxsSW5mbyddID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhbGxEYXRhKSk7XG4gICAgICBcbiAgICAgIC8vIEdldCB0aGUgY29uZmVyZW5jZSBJRCBmcm9tIHRoZSBjdXJyZW50IGNhbGwgb3IgdXNlIHRoZSBzdG9yZWQgb25lXG4gICAgICAvLyBjb25zdCBjb25mZXJlbmNlSWQgPSB0aGlzLmNvbmZlcmVuY2VJZDtcblxuICAgICAgaWYgKCF0aGlzLmNvbmZlcmVuY2VJZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFwiTm8gY29uZmVyZW5jZUlkIGZvdW5kIGZvciBhY3RpdmUgY2FsbFwiKTtcbiAgICAgICAgc3dhbChcIkVycm9yXCIsIFwiQ2Fubm90IGFkZCBwYXJ0aWNpcGFudDogY29uZmVyZW5jZSBub3QgZm91bmRcIiwgXCJlcnJvclwiKTtcbiAgICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBwYXJ0aWNpcGFudCB0byB0aGUgY29uZmVyZW5jZVxuICAgICAgbGV0IGRhdGE6IGFueSA9IGF3YWl0IHRoaXMuYWRkUGFydGljaXBhbnRUb0NhbGwoe1xuICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxuICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxuICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogcGhvbmVOdW1iZXIsXG4gICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgLy8gICAuLi50aGlzLmNhbGxEYXRhLFxuICAgICAgLy8gICBwYXJ0aWNpcGFudElkOiAsXG4gICAgICAvLyB9XG4gICAgICB0aGlzLmNhbGxEYXRhID0ge1xuICAgICAgICAvLyAuLi50aGlzLmNhbGxEYXRhLFxuICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXG4gICAgICAgIGRpc3BsYXlOdW06IHBob25lTnVtYmVyLFxuICAgICAgICBuYW1lOiBjb250YWN0Py5uYW1lIHx8IGAke2NvbnRhY3Q/LmZpcnN0TmFtZX0gJHtjb250YWN0Py5sYXN0TmFtZX1gIHx8IHBob25lTnVtYmVyLFxuICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgIHBhcnRpY2lwYW50SWQ6IGRhdGE/LnBhcnRpY2lwYW50SWQsXG4gICAgICAgIGZyb206IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxuICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gICAgICAgIGlzSG9sZDogZmFsc2UsXG4gICAgICAgIGlzTGVmdDogZmFsc2UsXG4gICAgICAgIGlzQ29uZmVyZW5jZTogZmFsc2VcbiAgICAgIH07XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzLmNhbGxEYXRhLCAndGhpcy5jYWxsRGF0YScpXG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGVzdDExMTExMScpO1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY2FsbERhdGE7XG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5wdXNoKHsuLi50aGlzLmNhbGxEYXRhfSk7XG4gICAgICBjb25zb2xlLmxvZyhcIlBhcnRpY2lwYW50IGFkZGVkIHRvIGNvbmZlcmVuY2U6XCIsIHBob25lTnVtYmVyKTtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBwYXJ0aWNpcGFudDonLCBlcnJvcik7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAvLyBSZXN0b3JlIGhlbGQgY2FsbCBvbiBlcnJvclxuICAgICAgaWYgKHRoaXMuaGVsZENhbGwpIHtcbiAgICAgICAgLy8gdGhpcy5jYWxsID0gdGhpcy5oZWxkQ2FsbDtcbiAgICAgICAgLy8gdGhpcy5oZWxkQ2FsbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgLy8gdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgICAgICAgLy8gdGhpcy5jYWxsLm11dGUoZmFsc2UpO1xuICAgICAgfVxuICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgZ2V0QWxsUGFydGljaXBhbnRzKGNvbmZlcmVuY2VTaWQ6IHN0cmluZykge1xuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRBbGxQYXJ0aWNpcGFudHMoY29uZmVyZW5jZVNpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSByZXMucGFydGljaXBhbnRzO1xuICAgIH0pXG4gIH1cblxuICAvLyBhY2NlcHRDb25jdXJyZW50Q2FsbChpbmNvbWluZ0NhbGw6IGFueSkge1xuICAvLyAgIGlmICghaW5jb21pbmdDYWxsKSByZXR1cm47XG5cbiAgLy8gICAvLyBQdXQgY3VycmVudCBjYWxsIG9uIGhvbGQgaW5zdGVhZCBvZiBkaXNjb25uZWN0aW5nXG4gIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAvLyAgICAgdGhpcy5oZWxkQ2FsbCA9IHRoaXMuY2FsbDtcbiAgLy8gICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gdHJ1ZTtcbiAgLy8gICAgIC8vIE11dGUgdGhlIGhlbGQgY2FsbFxuICAvLyAgICAgdGhpcy5oZWxkQ2FsbC5tdXRlKHRydWUpO1xuICAvLyAgIH1cblxuICAvLyAgIGluY29taW5nQ2FsbC5hY2NlcHQoKTtcbiAgLy8gICB0aGlzLmNhbGwgPSBpbmNvbWluZ0NhbGw7XG4gIC8vICAgdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ107XG4gIC8vICAgdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgLy8gICB0aGlzLmNhbGxEYXRhLmltZyA9IGluY29taW5nQ2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAvLyAgIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSBmYWxzZTtcbiAgLy8gICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuICAvLyAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcblxuICAvLyAgIC8vIFJlc2V0IHRpbWVyIGZvciBuZXcgY2FsbFxuICAvLyAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gIC8vICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyB9XG5cblxuICBhY2NlcHRDb25jdXJyZW50Q2FsbChpbmNvbWluZ0NhbGw6IGFueSkge1xuICAgIGlmICghaW5jb21pbmdDYWxsKSByZXR1cm47XG5cblxuICAgIC8vIFB1dCBjdXJyZW50IGNhbGwgb24gaG9sZCBpbnN0ZWFkIG9mIGRpc2Nvbm5lY3RpbmdcbiAgICAvLyBpZiAodGhpcy5jYWxsKSB7XG4gICAgLy8gLy8gICB0aGlzLmhlbGRDYWxsID0gdGhpcy5jYWxsO1xuICAgIC8vICAgdGhpcy5pc0NhbGxPbkhvbGQgPSB0cnVlO1xuICAgIC8vIC8vICAgLy8gTXV0ZSB0aGUgaGVsZCBjYWxsXG4gICAgLy8gLy8gICB0aGlzLmhlbGRDYWxsLm11dGUodHJ1ZSk7XG4gICAgLy8gLy8gfVxuXG4gICAgLy8gLy8gQWNjZXB0IHRoZSBuZXcgY2FsbFxuICAgIC8vIGluY29taW5nQ2FsbC5hY2NlcHQoKTtcbiAgICAvLyB0aGlzLmNhbGwgPSBpbmNvbWluZ0NhbGw7XG4gICAgLy8gdGhpcy5jYWxsRGF0YS5waG9uZSA9IGluY29taW5nQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ107XG4gICAgLy8gdGhpcy5jYWxsRGF0YS5uYW1lID0gaW5jb21pbmdDYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgICAvLyB0aGlzLmNhbGxEYXRhLmltZyA9IGluY29taW5nQ2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ2ltYWdlJykgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnO1xuICAgIC8vIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSBmYWxzZTtcbiAgICAvLyB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuICAgIC8vIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcblxuICAgIC8vIC8vIPCfn6IgUmVtb3ZlIHRoZSBhY2NlcHRlZCBjYWxsIGZyb20gaW5jb21pbmcgbGlzdFxuICAgIC8vIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgPSAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCB8fCBbXSkuZmlsdGVyKFxuICAgIC8vICAgKGM6IGFueSkgPT4gYz8ucGFyYW1ldGVycz8uQ2FsbFNpZCAhPT0gaW5jb21pbmdDYWxsPy5wYXJhbWV0ZXJzPy5DYWxsU2lkXG4gICAgLy8gKTtcbiAgICAvLyB0aGlzLmluY29taW5nQ2FsbHNOZXdJbmZvLmVtaXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCk7XG5cbiAgICAvLyAvLyDwn5WSIFJlc2V0IHRpbWVyIGZvciBuZXcgY2FsbFxuICAgIC8vIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgLy8gdGhpcy5zdGFydFRpbWVyKCk7XG5cbiAgICAvLyB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyBzd2FwQ2FsbHMoY2FsbEluZm86IGFueSkge1xuICAgIC8vIGlmICghdGhpcy5oZWxkQ2FsbCB8fCAhdGhpcy5jYWxsKSByZXR1cm47XG4gICAgY29uc29sZS5sb2codGhpcy5jYWxsLCAndGhpcy5jYWxsJyk7XG4gICAgY29uc29sZS5sb2codGhpcy5oZWxkQ2FsbCwgJ3RoaXMuaGVsZENhbGwnKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmN1cnJlbnRDYWxsTGlzdCwgJ3RoaXMuY3VycmVudENhbGxMaXN0Jyk7XG4gICAgY29uc29sZS5sb2coY2FsbEluZm8sICdjYWxsSW5mbyBmb3Igc3dhcENhbGxzJyk7XG4gICAgdGhpcy5jdXJyZW50Q2FsbExpc3QuZm9yRWFjaChhc3luYyAoYzogYW55KSA9PiB7XG4gICAgICBpZihjPy5wYXJ0aWNpcGFudElkICYmICFjPy5pc0hvbGQpe1xuICAgICAgICBjLmlzSG9sZCA9IHRydWU7XG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgcGFydGljaXBhbnRJZDogYz8ucGFydGljaXBhbnRJZCxcbiAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICAgIGhvbGQ6IGM/LmlzSG9sZFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZihjYWxsSW5mbz8uaXNIb2xkICYmIGM/LnBhcnRpY2lwYW50SWQgPT09IGNhbGxJbmZvPy5wYXJ0aWNpcGFudElkKXtcbiAgICAgICAgYy5pc0hvbGQgPSBmYWxzZTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBjPy5wYXJ0aWNpcGFudElkLFxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgaG9sZDogYz8uaXNIb2xkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gYztcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgIC8vICAgcGFydGljaXBhbnRJZDogdGhpcy5jYWxsPy5jYWxsSW5mbz8ucGFydGljaXBhbnRJZCxcbiAgICAvLyAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgLy8gICBob2xkOiB0cnVlXG4gICAgLy8gfSk7XG4gICAgLy8gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAvLyAgIHBhcnRpY2lwYW50SWQ6IHRoaXMuaGVsZENhbGw/LmNhbGxJbmZvPy5wYXJ0aWNpcGFudElkLFxuICAgIC8vICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAvLyAgIGhvbGQ6IGZhbHNlXG4gICAgLy8gfSk7XG4gICAgY29uc29sZS5sb2coJ1N3YXBwaW5nIGNhbGxzLi4uJyk7XG4gICAgY29uc29sZS5sb2coJ0JlZm9yZSBzd2FwIC0gQWN0aXZlIGNhbGw6JywgdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG4gICAgY29uc29sZS5sb2coJ0JlZm9yZSBzd2FwIC0gSGVsZCBjYWxsOicsIHRoaXMuaGVsZENhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcblxuICAgIC8vIFN3YXAgdGhlIGNhbGxzXG4gICAgLy8gY29uc3QgdGVtcCA9IHRoaXMuY2FsbDtcbiAgICAvLyB0aGlzLmNhbGwgPSB0aGlzLmhlbGRDYWxsO1xuICAgIC8vIHRoaXMuaGVsZENhbGwgPSB0ZW1wO1xuXG5cbiAgICAvLyB0aGlzLmNhbGwubXV0ZShmYWxzZSk7XG4gICAgLy8gdGhpcy5oZWxkQ2FsbC5tdXRlKHRydWUpO1xuXG4gICAgLy8gVXBkYXRlIFVJIHdpdGggYWN0aXZlIGNhbGwgaW5mbyAtIGV4dHJhY3QgZnJvbSBjYWxsIHBhcmFtZXRlcnNcbiAgICBjb25zdCBmcm9tTnVtYmVyID0gdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICBjb25zdCBjYWxsZXJOYW1lID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgICBjb25zdCBjYWxsZXJJbWcgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgICBjb25zdCBkaXNwbGF5TnVtYmVyID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnZGlzcGxheU51bWJlcicpIHx8ICctJztcblxuICAgIC8vIFVwZGF0ZSBjYWxsRGF0YSB0byByZWZyZXNoIHRoZSBtYWluIFVJXG4gICAgLy8gdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAvLyAgIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgLy8gICBwaG9uZTogZnJvbU51bWJlcixcbiAgICAvLyAgIGRpc3BsYXlOdW06IChkaXNwbGF5TnVtYmVyICYmIGRpc3BsYXlOdW1iZXIgIT09ICctJykgPyBkaXNwbGF5TnVtYmVyIDogZnJvbU51bWJlcixcbiAgICAvLyAgIG5hbWU6IChjYWxsZXJOYW1lICYmIGNhbGxlck5hbWUgIT09ICctJykgPyBjYWxsZXJOYW1lIDogKHRoaXMuY2FsbERhdGE/Lm5hbWUgfHwgZnJvbU51bWJlciksXG4gICAgLy8gICBpbWc6IGNhbGxlckltZyB8fCB0aGlzLmNhbGxEYXRhPy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXG4gICAgLy8gfTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdBZnRlciBzd2FwIC0gQWN0aXZlIGNhbGw6JywgdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG4gICAgLy8gY29uc29sZS5sb2coJ0FmdGVyIHN3YXAgLSBIZWxkIGNhbGw6JywgdGhpcy5oZWxkQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdVcGRhdGVkIGNhbGxEYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmN1cnJlbnRDYWxsTGlzdCBhZnRlciBzd2FwJywgdGhpcy5jdXJyZW50Q2FsbExpc3QpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIG1lcmdlQ2FsbHMoKSB7XG4gICAgLy8gTWVyZ2UgZnVuY3Rpb25hbGl0eSAtIHVubXV0ZSBib3RoIGNhbGxzIGZvciBjb25mZXJlbmNlXG4gICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xuICAgICAgICBpZihjPy5wYXJ0aWNpcGFudElkICYmIGM/LmlzSG9sZCl7XG4gICAgICAgICAgYy5pc0hvbGQgPSBmYWxzZTtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogYz8ucGFydGljaXBhbnRJZCxcbiAgICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgICBob2xkOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGMuaXNDb25mZXJlbmNlID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgLy8gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgIC8vICAgcGFydGljaXBhbnRJZDogdGhpcy5oZWxkQ2FsbD8uY2FsbEluZm8/LnBhcnRpY2lwYW50SWQsXG4gICAgICAvLyAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAvLyAgIGhvbGQ6IGZhbHNlXG4gICAgICAvLyB9KTtcbiAgICAgIC8vIHRoaXMuaGVsZENhbGwubXV0ZShmYWxzZSk7XG4gICAgICAvLyB0aGlzLmNhbGwubXV0ZShmYWxzZSk7XG4gICAgICB0aGlzLmlzQ2FsbE9uSG9sZCA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIGVuZEhlbGRDYWxsKCkge1xuICAgIC8vIGlmICh0aGlzLmhlbGRDYWxsKSB7XG4gICAgLy8gICB0aGlzLmhlbGRDYWxsLmRpc2Nvbm5lY3QoKTtcbiAgICAvLyAgIHRoaXMuaGVsZENhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gICB0aGlzLmlzQ2FsbE9uSG9sZCA9IGZhbHNlO1xuICAgIC8vICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIC8vIH1cbiAgfVxuXG5cbiAgaGFzRGV0YWlsZWRJbmZvKGNhbGxEYXRhOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoIWNhbGxEYXRhKSByZXR1cm4gZmFsc2U7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgdXNlckluZm8gZXhpc3RzIGFuZCBoYXMgbWVhbmluZ2Z1bCBkYXRhXG4gICAgaWYgKGNhbGxEYXRhLnVzZXJJbmZvICYmIGNhbGxEYXRhLnVzZXJJbmZvLmMyY0luZm9ybWF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGluZm8gPSBjYWxsRGF0YS51c2VySW5mby5jMmNJbmZvcm1hdGlvbjtcbiAgICAgICAgcmV0dXJuICEhKFxuICAgICAgICAgICAgaW5mby5zdWJqZWN0ICYmIGluZm8uc3ViamVjdCAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLmVtYWlsICYmIGluZm8uZW1haWwgIT09ICctJyB8fFxuICAgICAgICAgICAgaW5mby5tZXNzYWdlICYmIGluZm8ubWVzc2FnZSAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLnBvaW50TmFtZSAmJiBpbmZvLnBvaW50TmFtZSAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLnNvdXJjZU5hbWUgJiYgaW5mby5zb3VyY2VOYW1lICE9PSAnLScgfHxcbiAgICAgICAgICAgIGluZm8uZXh0ZW5zaW9uICYmIGluZm8uZXh0ZW5zaW9uICE9PSAnLScgfHxcbiAgICAgICAgICAgIGluZm8udXJsIHx8XG4gICAgICAgICAgICBpbmZvLmxhdGl0dWRlIHx8XG4gICAgICAgICAgICBpbmZvLmxvbmdpdHVkZVxuICAgICAgICApO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBvbkNsaWNrRXhwYW5kKGRhdGE/OiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCA9PT0gZGF0YSAmJiB0aGlzLmlzQ2xpY2tFeHBhbmQpIHtcbiAgICAgICAgdGhpcy5pc0NsaWNrRXhwYW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPSBudWxsO1xuICAgICAgICAvLyB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsSW5mby5lbWl0KHt9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSB0cnVlO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPSBkYXRhO1xuICAgIFxuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGxbJ2lzQ2xpY2tFeHBhbmQnXSA9IHRydWU7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCAmJiB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QuZm9yRWFjaCgoY2FsbDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGwgIT09IHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbFsnaXNDbGlja0V4cGFuZCddID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGxJbmZvLmVtaXQodGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCk7XG4gICAgICAgIFxuICAgICAgICBpZighdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbC51c2VySW5mbyB8fCB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsLnVzZXJJbmZvLnN0YXR1cyA9PSAyMDEpe1xuICAgICAgICAgICAgLy8gdGhpcy5nZXRVc2VySW5mb3JtYXRpb24odGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCk7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBnZXRVc2VySW5mb3JtYXRpb24oaW5jb21pbmdDYWxsRGF0YTogYW55KSB7XG4gIC8vICAgbGV0IGRhdGEgPSB0aGlzLmZyb21FbnRyaWVzKEFycmF5LmZyb20oaW5jb21pbmdDYWxsRGF0YS5jdXN0b21QYXJhbWV0ZXJzLmVudHJpZXMoKSkpO1xuICAvLyAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oZGF0YVsndHdpbGlvQXV0aElkJ10pLnN1YnNjcmliZShcbiAgLy8gICByZXNwb25zZSA9PiB7XG4gIC8vICAgICBzZXRUaW1lb3V0KCgpPT57XG4gIC8vICAgICAgIGluY29taW5nQ2FsbERhdGFbJ3VzZXJJbmZvJ109cmVzcG9uc2VcbiAgLy8gICAgIH0sIDUwMDApXG4gIC8vICAgfSwgZXJyb3IgPT4ge1xuICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgcmVqZWN0Q29uY3VycmVudENhbGwoaW5jb21pbmdDYWxsOiBhbnkpIHtcblxuICAgIGlmICghaW5jb21pbmdDYWxsKSByZXR1cm47XG4gICAgaWYgKGluY29taW5nQ2FsbC5yZWplY3QpIHtcbiAgICAgIGluY29taW5nQ2FsbC5yZWplY3QoKTtcbiAgICB9XG4gICAgaWYgKGluY29taW5nQ2FsbC5kaXNjb25uZWN0KSBpbmNvbWluZ0NhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vIFJlbW92ZSBmcm9tIGxpc3RcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0ID0gKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgfHwgW10pLmZpbHRlcigoYzogYW55KSA9PiBjPy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBpbmNvbWluZ0NhbGw/LnBhcmFtZXRlcnM/LkNhbGxTaWQpO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsc05ld0luZm8uZW1pdCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0KTtcbiAgICAvLyBJZiBubyBtb3JlIGluY29taW5nLCBoaWRlIGJhbm5lclxuICAgIGlmICghdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCB8fCB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG4gIG9uQ2FsbElucHV0cyhudW06IGFueSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihudW0pIHx8IG51bSA9PSAnKycgfHwgbnVtID09ICcqJyB8fCBudW0gPT0gJyMnKSB7XG4gICAgICAgIGlmIChudW0gPT0gJyMnKSB7XG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLWhhc2gtLm1wM2ApLnBsYXkoKTtcbiAgICAgICAgfSBlbHNlIGlmIChudW0gPT0gJyonKSB7XG4gICAgICAgICAgbmV3IEF1ZGlvKGAvYXNzZXRzL2RpYWwtdG9uZXMvZHRtZi9kdG1mLXN0YXItLm1wM2ApLnBsYXkoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtJHtudW19LS5tcDNgKS5wbGF5KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxJbnB1dCA9IHRoaXMuY2FsbElucHV0ICsgU3RyaW5nKG51bSk7XG4gICAgICAgIHRoaXMuc2hvd0NsZWFyQnRuID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGxldCBzdHIgPSBTdHJpbmcobnVtKTtcbiAgICAgIHRoaXMuY2FsbD8uc2VuZERpZ2l0cyhzdHIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cbiAgfVxuICBvbkNhbGxJbnB1dEVudGVyKGV2OiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5jYWxsPy5zZW5kRGlnaXRzKFN0cmluZyhldi5rZXkpKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICB9XG4gIH1cbiAgY2xvc2VJbmNvbWluZ0NhbGwoZGF0YTogYW55KSB7XG4gICAgLy8gdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgICBpZiAoZGF0YS5zaG93KSB7XG4gICAgICAvL3RoaXMuc2hvd0NhbGxQcm9ncmVzc0V2ZW50LmVtaXQoKVxuICAgICAgLy8gaGFuZGxlIGluY29taW5nIGNhbGwgYWNjZXB0ZWRcbiAgICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgICAgdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xuICAgICAgdGhpcy5jYWxsID0gZGF0YS5jYWxsO1xuICAgICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaW5jb21pbmdEZXRhaWwgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xuICAgICAgdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgPSBpbmNvbWluZ0RldGFpbC5yZWNvcmRDYWxsO1xuXG4gICAgICBpZiAodGhpcy5pbmNvbWluZ1JlY29yZENhbGwpIHtcbiAgICAgICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbmNvbWluZyBjYWxsIHJlamVjdGVkIG9yIGF1dG8tY2FuY2VsbGVkXG4gICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuICAgICAgLy8gSWYgdGhlcmUgaXMgTk8gYWN0aXZlIGNhbGwsIHRoZW4gcHJvcGFnYXRlIGVuZC4gT3RoZXJ3aXNlIGtlZXAgb25nb2luZyBVSS5cbiAgICAgIGlmICghdGhpcy5jYWxsIHx8IHRoaXMuY2FsbC5zdGF0dXMoKSAhPT0gJ29wZW4nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0NycpXG4gICAgICAgIHRoaXMuZW5kQ2FsbEV2ZW50LmVtaXQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2xlYXJJbnB1dHMoKSB7XG4gICAgdGhpcy5jYWxsSW5wdXQgPSB0aGlzLmNhbGxJbnB1dC5zbGljZSgwLCAtMSk7XG4gIH1cbiAgaXNNaW5pbWlzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgbWluaW1pc2VEaWFscGFkKCkge1xuICAgIHRoaXMubWluaW1pc2VFdmVudC5lbWl0KHRydWUpO1xuICAgIHRoaXMuaXNNaW5pbWlzZWQgPSB0cnVlO1xuICB9XG4gIG1heGltaXNlRGlhbHBhZCgpIHtcbiAgICB0aGlzLm1pbmltaXNlRXZlbnQuZW1pdChmYWxzZSk7XG4gICAgdGhpcy5pc01pbmltaXNlZCA9IGZhbHNlO1xuICB9XG4gIHRvZ2dsZVJlY29yZGluZygpIHtcbiAgICBpZiAodGhpcy5pc1JlY29yZGluZykge1xuICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcbiAgICB9XG4gIH1cbiAgc3RhcnRSZWNvcmRpbmcoKSB7XG4gICAgbGV0IHNpZDtcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTaWQoKTtcbiAgICB0aGlzLmluY29taW5nQ2FsbFNpZCA9IGRldGFpbHMuY2FsbFNpZDtcbiAgICB0aGlzLmluY29taW5nUmVjb3JkQ2FsbCA9IGRldGFpbHMucmVjb3JkQ2FsbDtcbiAgICBzaWQgPSB0aGlzLmluY29taW5nQ2FsbFNpZCA/IHRoaXMuaW5jb21pbmdDYWxsU2lkIDogdGhpcy5jYWxsU2lkIHx8IHRoaXMuYWRkUmVzPy5jb25mZXJlbmNlU2lkO1xuXG4gICAgLy8gaWYgKCF0aGlzLmluY29taW5nUmVjb3JkQ2FsbCAmJiAhdGhpcy5yZWNvcmRDYWxsKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsUmVjb3JkaW5nKHNpZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuaXNSZWNvcmRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgdGhpcy50aW1lRWxhcHNlZCA9IDA7XG4gICAgICB0aGlzLnN0YXJ0VGltZXIxKCk7XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xuICAgIH0pO1xuICB9XG4gIHN0b3BSZWNvcmRpbmcoKSB7XG4gICAgLy8gaWYgKCF0aGlzLmluY29taW5nUmVjb3JkQ2FsbCAmJiAhdGhpcy5yZWNvcmRDYWxsKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuICAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cbiAgcGF1c2VSZWNvcmRpbmcoKSB7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxTaWQgPSBkZXRhaWxzLmNhbGxTaWQ7XG4gICAgdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgPSBkZXRhaWxzLnJlY29yZENhbGw7XG4gICAgY29uc3Qgc2lkID0gdGhpcy5pbmNvbWluZ0NhbGxTaWQgPyB0aGlzLmluY29taW5nQ2FsbFNpZCA6IHRoaXMuY2FsbFNpZDtcblxuICAgIC8vIGlmICghdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgJiYgIXRoaXMucmVjb3JkQ2FsbCkge1xuICAgIC8vICAgcmV0dXJuO1xuICAgIC8vIH1cblxuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5wYXVzZU9yUmVzdW1lUmVjb3JkaW5nKHNpZCwgJ3BhdXNlJykuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmdUaW1lcigpO1xuICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGF1c2luZyByZWNvcmRpbmc6JywgZXJyb3IpO1xuICAgICAgICAvLyBDb25zaWRlciB1cGRhdGluZyB0aGUgVUkgdG8gc2hvdyB0aGUgZXJyb3Igc3RhdGVcbiAgICAgIH1cbiAgICApO1xuICB9XG4gIHJlc3VtZVJlY29yZGluZygpIHtcbiAgICBsZXQgc2lkO1xuICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsU2lkID0gZGV0YWlscy5jYWxsU2lkO1xuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gZGV0YWlscy5yZWNvcmRDYWxsO1xuICAgIHNpZCA9IHRoaXMuaW5jb21pbmdDYWxsU2lkID8gdGhpcy5pbmNvbWluZ0NhbGxTaWQgOiB0aGlzLmNhbGxTaWQ7XG5cbiAgICAvLyBpZiAoIXRoaXMuaW5jb21pbmdSZWNvcmRDYWxsICYmICF0aGlzLnJlY29yZENhbGwpIHtcbiAgICAvLyAgIHJldHVybjsgLy8gU2tpcCBpZiByZWNvcmRpbmcgaXMgbm90IGVuYWJsZWRcbiAgICAvLyB9XG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnBhdXNlT3JSZXN1bWVSZWNvcmRpbmcoc2lkLCAncmVzdW1lJykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciByZXN1bWluZyByZWNvcmRpbmcnLCBlcnJvcik7XG4gICAgfSk7XG4gIH1cbiAgc3RhcnRUaW1lcjEoKSB7XG4gICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IGludGVydmFsKDEwMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnRpbWVFbGFwc2VkKys7XG4gICAgfSk7XG4gIH1cbiAgc3RvcFJlY29yZGluZ1RpbWVyKCkge1xuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IC8vIFBhdXNlIHRoZSB0aW1lclxuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgICAgICAgIC8vIE9wdGlvbmFsbHkgcmVzZXQgdGhlIHN1YnNjcmlwdGlvblxuICAgIH1cbiAgfVxuICBnZXRGb3JtYXR0ZWRUaW1lKCkge1xuICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmZsb29yKHRoaXMudGltZUVsYXBzZWQgLyA2MCk7XG4gICAgY29uc3Qgc2Vjb25kcyA9IHRoaXMudGltZUVsYXBzZWQgJSA2MDtcbiAgICByZXR1cm4gYCR7bWludXRlc306JHtzZWNvbmRzIDwgMTAgPyAnMCcgOiAnJ30ke3NlY29uZHN9YDtcbiAgfVxuICBwb2xsQ2FsbFN0YXR1cyhjYWxsQXV0aElkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtYXhUaW1lID0gMzAwMDA7IC8vIFBvbGwgZm9yIHVwIHRvIDMwIHNlY29uZHNcbiAgICBjb25zdCBwb2xsSW50ZXJ2YWwgPSAzMDAwOyAvLyBQb2xsIGV2ZXJ5IDMgc2Vjb25kc1xuICAgIGxldCBlbGFwc2VkVGltZSA9IDA7XG4gICAgY29uc3QgaW50ZXJ2YWxJZCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIGVsYXBzZWRUaW1lICs9IHBvbGxJbnRlcnZhbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHN0YXR1c1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTdGF0dXMoY2FsbEF1dGhJZCkudG9Qcm9taXNlKCkgYXMgQ2FsbFN0YXR1c1Jlc3BvbnNlO1xuICAgICAgICBpZiAoc3RhdHVzUmVzcG9uc2UgJiYgc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMpIHtcbiAgICAgICAgICB0aGlzLmNhbGxTdGF0dXMgPSBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscy5jYWxsU3RhdHVzO1xuICAgICAgICAgIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdpbi1wcm9ncmVzcycpIHtcbiAgICAgICAgICAgIHRoaXMuY2FsbFNpZCA9IHN0YXR1c1Jlc3BvbnNlLmNhbGxEZXRhaWxzLmNhbGxTaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWNvcmRDYWxsICYmICF0aGlzLmlzUmVjb3JkaW5nKSB7XG4gICAgICAgICAgICAgIHRoaXMuc3RhcnRSZWNvcmRpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdjb21wbGV0ZWQnKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3Rlc3QxJylcbiAgICAgICAgICAgIHRoaXMuZW5kQ2FsbCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9wUmVjb3JkaW5nKCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNhbGxTdGF0dXMgPT09ICdyaW5naW5nJykge1xuICAgICAgICAgICAgLy8gQ29udGludWUgcG9sbGluZzsgZG8gbm90IGNsZWFyIHRoZSBpbnRlcnZhbCB5ZXRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICB9XG4gICAgICBpZiAoZWxhcHNlZFRpbWUgPj0gbWF4VGltZSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnTWF4IHBvbGxpbmcgdGltZSByZWFjaGVkLiBTdG9wcGluZyBwb2xsLicpO1xuICAgICAgICBjbGVhckludGVydmFsKGludGVydmFsSWQpO1xuICAgICAgfVxuICAgIH0sIHBvbGxJbnRlcnZhbCk7XG4gIH1cblxuICBnZXRVc2VySW5mb3JtYXRpb24oaWQ6IGFueSkge1xuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRVc2VySW5mb3JtYXRpb24oaWQpLnN1YnNjcmliZShcbiAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UpXG4gICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHN0YXJ0aW5nIHJlY29yZGluZycsIGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG4gIGluY29taW5nQ2FsbHNOZXdMaXN0KGRhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGRhdGEsICduZXdJbmNvbWluZ0NhbGxzTGlzdE9VUicpXG4gICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCA9IGRhdGE7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mby5lbWl0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xuICB9XG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsSW5mbyhkYXRhOiBhbnkpIHtcbiAgICB0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsID0gZGF0YTtcbiAgfVxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmNhbGxEYXRhLmRpYWwgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJjYWxsLWNvbnRhaW5lclwiICpuZ0lmPVwiIWlzTWluaW1pc2VkXCJcbiAgICBbbmdDbGFzc109XCJ7J2NvbGxvcHMnOiBpc0NvbGxvcHMsICdpbmNvbWluZy1jYWxsLWNvbnRhaW5lcic6IHNlbGVjdGVkSW5jb21pbmdDYWxsPy5pc0NsaWNrRXhwYW5kLCAnY29udGFjdHMtb3Blbic6IHNob3dDb250YWN0c1BhbmVsIH1cIj5cbiAgICA8IS0tIDxkaXYgaWQ9XCJtaW5pbWl6ZS1idG4tZGl2XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBtaW5pbWl6ZS1idG5cIiAoY2xpY2spPVwibWluaW1pc2VEaWFscGFkKClcIj5cbiAgICAgICAgICAgIG1pbmltaXplXG4gICAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgPCEtLSA8bGliLWluY29taW5nLWNhbGwgKm5nSWY9XCJpbmNvbWluZ0NhbGxEaXYgJiYgIWlzQ29uY3VycmVudEluY29taW5nXCIgW2luY29taW5nQ2FsbERhdGFdPVwiY2FsbERhdGFcIlxuICAgICAgICBbZGV2aWNlSWRdPVwiZGV2aWNlSWRcIiBbbmV3SW5jb21pbmdDYWxsc0xpc3RdPVwibmV3SW5jb21pbmdDYWxsc0xpc3RcIlxuICAgICAgICAoY2xvc2VJbmNvbWluZ0NhbGxEaXYpPVwiY2xvc2VJbmNvbWluZ0NhbGwoJGV2ZW50KVwiIChpbmNvbWluZ0NhbGxzTmV3TGlzdCk9XCJpbmNvbWluZ0NhbGxzTmV3TGlzdCgkZXZlbnQpXCJcbiAgICAgICAgKHNlbGVjdGVkSW5jb21pbmdDYWxsSW5mbyk9XCJzZWxlY3RlZEluY29taW5nQ2FsbEluZm8oJGV2ZW50KVwiPjwvbGliLWluY29taW5nLWNhbGw+IC0tPlxuICAgIHt7Y3VycmVudENhbGxMaXN0Lmxlbmd0aCB9fXR0dHR0dHR0dHR0dHR0dHR0dHR0XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpbmNvbWluZ0NhbGxEaXYgfHwgaXNDb25jdXJyZW50SW5jb21pbmcgfHwgdHJ1ZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWJhbm5lclwiICpuZ0lmPVwiaXNDYWxsT25Ib2xkICYmIGN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBoZWxkQ2FsbCBvZiBjdXJyZW50Q2FsbExpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1jYWxsLWNvbnRlbnRcIiAqbmdJZj1cImhlbGRDYWxsPy5pc0hvbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhvbGQtaWNvblwiPnBhdXNlX2NpcmNsZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1sYWJlbFwiPkhvbGQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLW5hbWVcIj57e2hlbGRDYWxsPy5uYW1lIHx8ICdVbmtub3duIG51bWJlcid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbnVtYmVyXCI+e3toZWxkQ2FsbD8ucGhvbmUgfHwgJyd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImhlbGQtYnRuIHN3YXAtYnRuXCIgKGNsaWNrKT1cInN3YXBDYWxscyhoZWxkQ2FsbClcIiB0aXRsZT1cIlN3YXAgY2FsbHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5Td2FwPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtY29udGVudFwiICpuZ0lmPVwiaGVsZENhbGw/LmlzSW5jb21pbmdDYWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBob2xkLWljb25cIj5waG9uZV9jYWxsYmFjazwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1sYWJlbFwiPkluY29taW5nIENhbGw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLW5hbWVcIj57e2hlbGRDYWxsPy5uYW1lIHx8ICdVbmtub3duIG51bWJlcid9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbnVtYmVyXCI+e3toZWxkQ2FsbD8ucGhvbmUgfHwgJyd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuLXdyYXBwZXIgcmVjZWl2ZS1idG5cIiAqbmdJZj1cIiFoZWxkQ2FsbD8uaXNDYWxsQ29ubmVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cImFkZChoZWxkQ2FsbClcIj4gY2FsbCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0bi13cmFwcGVyIHJlY2VpdmUtYnRuXCIgKm5nSWY9XCIhaGVsZENhbGw/LmlzQ2FsbENvbm5lY3RlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX21lcmdlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuLXdyYXBwZXIgcmVjZWl2ZS1idG5cIiAqbmdJZj1cIiFoZWxkQ2FsbD8uaXNDYWxsQ29ubmVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHN3YXBfdmVydCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0bi13cmFwcGVyIHJlamVjdC1idG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwicmVqZWN0Q2FsbEZyb21MaXN0KGhlbGRDYWxsKVwiPiBjYWxsX2VuZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIENvbXBhY3QgYmFubmVycyBmb3IgY29uY3VycmVudCBpbmNvbWluZyAob25lIHBlciBjYWxsKSAtLT5cbiAgICAgICAgIGNvbmN1cnJlbnQgaW5jb21pbmcgKG9uZSBwZXIgY2FsbCl7eyFpc0NvbmZlcmVuY2V9fSt7e2N1cnJlbnRDYWxsTGlzdC5sZW5ndGh9fVxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzQ29uZmVyZW5jZSAmJiBjdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluY29taW5nLWJhbm5lcnMtY29udGFpbmVyXCIgKm5nSWY9XCIhaXNDb25mZXJlbmNlICYmIGN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiIHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlO3dpZHRoOiAxMDAlO3RvcDogMHB4O1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpbmMgb2YgY3VycmVudENhbGxMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctYmFubmVyXCIgKm5nSWY9XCJpbmM/LmlzSW5jb21pbmdDYWxsICYmICFpbmM/LmlzQWNjZXB0Q2FsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyB0b3A6ICgoaXNDYWxsT25Ib2xkICYmIGhlbGRDYWxsKSA/IDY0IDogMCkgKyAoaSAqIDcwKSArICdweCcgfVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1iYW5uZXItY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbmNvbSBpbmctbGFiZWxcIj5JbmNvbWluZyBjYWxsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluY29taW5nLWNhbGxlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FsbGVyLW5hbWVcIj57eyBpbmM/LnVzZXJJbmZvPy5jMmNJbmZvcm1hdGlvbj8ubmFtZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmM/LmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhbGxlci1udW1iZXJcIj57eyBpbmM/LnVzZXJJbmZvPy5jMmNJbmZvcm1hdGlvbj8ubnVtYmVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYz8ucGFyYW1ldGVycz8uRnJvbSB8fCAnJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluY29taW5nLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJiYW5uZXItYnRuIGFjY2VwdC1idG5cIiAoY2xpY2spPVwiYWRkKGluYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jYWxsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYmFubmVyLWJ0biByZWplY3QtYnRuXCIgKGNsaWNrKT1cInJlamVjdENvbmN1cnJlbnRDYWxsKGluYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj5jYWxsX2VuZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgaW5jb21pbmcgY2FsbCAtLT5cbiAgICAgICAgIHNpbmdsZSBpbmNvbWluZyBjYWxse3tjdXJyZW50Q2FsbExpc3QubGVuZ3RoID09PSAxIH19LS0tLS0te3sgY3VycmVudENhbGxMaXN0WzBdPy5pc0luY29taW5nQ2FsbH19LS0tLXt7ICFjdXJyZW50Q2FsbExpc3RbMF0/LmlzQWNjZXB0Q2FsbH19XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoLTEwMCBteS01XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1wiICpuZ0lmPVwiY3VycmVudENhbGxMaXN0Lmxlbmd0aCA9PT0gMSAmJiBjdXJyZW50Q2FsbExpc3RbMF0/LmlzSW5jb21pbmdDYWxsICYmICFjdXJyZW50Q2FsbExpc3RbMF0/LmlzQWNjZXB0Q2FsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGxUb051bVwiPkluY29taW5nIGNhbGwgb24gPGJyIC8+PHNwYW4+e3tjdXJyZW50Q2FsbExpc3RbMF0/LnBob25lIHx8ICdVbmtub3duIE51bWJlcid9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYW5pbWF0aW9uXCIgW25nQ2xhc3NdPVwieydjYWxsLWFuaW1hdGlvbi1wbGF5Jzogc2hvd1JpbmdBbmltYXRpb259XCI+XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImF2YXRhci1pbWdcIiBbc3JjXT1cImN1cnJlbnRDYWxsTGlzdFswXT8uaW1nXCIgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMjBcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyRGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxoMT57e2N1cnJlbnRDYWxsTGlzdFswXT8uYzJjSW5mb3JtYXRpb24/Lm5hbWUgfHwgJ1Vua25vd24gTnVtYmVyJ319PC9oMT5cbiAgICAgICAgICAgICAgICA8cD57e2N1cnJlbnRDYWxsTGlzdFswXT8uYzJjSW5mb3JtYXRpb24/Lm51bWJlcn19PC9wPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFjdGlvbi1idG5zIG10LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gcmVjZWl2ZS1idG5cIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFuZXdJbmNvbWluZ0NhbGxzTGlzdFswXT8uaXNDYWxsQ29ubmVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJhZGQoY3VycmVudENhbGxMaXN0WzBdKVwiPiBjYWxsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4gcmVqZWN0LWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwib25FbmRDYWxsKCcnKVwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBGb3IgbXVsdGlwbGUgaW5jb21pbmcgY2FsbHMgYnV0IG5vdCBhbnkgY2FsbCBwcm9ncmVzcyAtLT5cbiAgICAgICAgXG5cbiAgICAgICAgPCEtLSBGb3Igc2luZ2xlIGFjdGl2ZSBjYWxsIC0tPlxuICAgICAgICAgc2luZ2xlIGFjdGl2ZSBjYWxse3soIWlzQ29uZmVyZW5jZSAmJiBjdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMSl9fSsrK3t7Y3VycmVudENhbGxMaXN0Lmxlbmd0aCA9PT0gMSB9fSsrK3t7IGN1cnJlbnRDYWxsTGlzdFswXT8uaXNJbmNvbWluZ0NhbGx9fSsrK3t7ICFjdXJyZW50Q2FsbExpc3RbMF0/LmlzQWNjZXB0Q2FsbH19XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhaXNDb25mZXJlbmNlICYmICEhY3VycmVudENhbGxcIiBbbmdTdHlsZV09XCJ7J2Rpc3BsYXknOiAnZmxleCcsICdmbGV4LWRpcmVjdGlvbic6ICdjb2x1bW4nLCAncG9zaXRpb24nOiAncmVsYXRpdmUnfVwiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb25cIiBbbmdDbGFzc109XCJ7J2NhbGwtYW5pbWF0aW9uLXBsYXknOiBzaG93UmluZ0FuaW1hdGlvbn1cIj5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwiY3VycmVudENhbGwuaW1nXCIgYWx0PVwiXCIgd2lkdGg9XCIxMjBcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbGVyRGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxoMSBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnOHB4J31cIj57e2N1cnJlbnRDYWxsLm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319PC9oMT5cbiAgICAgICAgICAgICAgICA8cD57e2N1cnJlbnRDYWxsLmRpc3BsYXlOdW0gPyBjdXJyZW50Q2FsbC5kaXNwbGF5TnVtIDogY3VycmVudENhbGwucGhvbmUgfX08L3A+XG4gICAgICAgICAgICAgICAgPGg0IHN0eWxlPVwibWFyZ2luLXRvcDogNHB4XCI+e3t0aW1lcn19PC9oND5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWFjdGlvbi1idG5zXCIgKm5nSWY9XCIhc2hvd0tleXBhZFwiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWJ0bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gc3RhcnQtc3RvcFwiICpuZ0lmPVwiIWlzUmVjb3JkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZydcIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjb3JkaW5nLWljb25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF1c2UtcmVzdW1lLWJ0bnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNSZWNvcmRpbmcgJiYgIWlzUGF1c2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwYXVzZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGxheV9hcnJvdyA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgY2xhc3M9XCJ0aW1lci1kaXNwbGF5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd0tleXBhZFwiIGNsYXNzPVwic2VuZERpZ2l0XCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNhbGwtaW5wdXRzXCIgaWQ9XCJjYWxsLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjYWxsSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25DYWxsSW5wdXRFbnRlcigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRzKClcIj5jbG9zZV9zbWFsbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXktYnRuXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlwYWRWYWxcIiAoY2xpY2spPVwib25DYWxsSW5wdXRzKGtleS5udW0pXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7a2V5Lm51bX19XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnNcIiBbbmdTdHlsZV09XCJ7J21hcmdpbi10b3AnOiBzaG93S2V5cGFkID8gJzAnOiAnMTEwcHgnfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCIgKm5nSWY9XCIhaW5jb21pbmdDYWxsRGl2IHx8IGlzQ29uY3VycmVudEluY29taW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJoZWxkLWJ0biBtZXJnZS1idG5cIiAoY2xpY2spPVwibWVyZ2VDYWxscygpXCIgdGl0bGU9XCJNZXJnZSBjYWxsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudENhbGxMaXN0Lmxlbmd0aCA8IDJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPk1lcmdlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWV2ZW5seSBtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG4gbXItM1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLXNlYy1idG4gbXItM1wiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cInRvZ2dsZUtleXBhZCgpXCI+IHRyYW5zaXRpb25fZGlzc29sdmUgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0blwiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biBlbmQtY2FsbC1idG5cIiBbZGlzYWJsZWRdPVwiIWN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGxcIiAoY2xpY2spPVwiZW5kQ2FsbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbnRhY3RzLXBhbmVsXCIgKm5nSWY9XCJzaG93Q29udGFjdHNQYW5lbFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGJhY2tcIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCgpXCI+IGNoZXZyb25fbGVmdCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRhY3RzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzZWFyY2hcIj4gc2VhcmNoIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtbGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nRm9yPVwibGV0IGMgb2YgY29udGFjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJjb250YWN0LWF2YXRhclwiIFtzcmNdPVwiYy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tjLmZpcnN0TmFtZX19IHt7Yy5taWRkbGVOYW1lfX0ge3tjLmxhc3ROYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC10aXRsZVwiPnt7IChjLm51bWJlcnNMaXN0ICYmIGMubnVtYmVyc0xpc3RbMF0/Lm51bWJlcil9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0blwiIChjbGljayk9XCJjYWxsQ29udGFjdChjKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+Q2FsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuXG4gICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJtdC0yIHB4LTMgY2FsbC1pbmZvLXdyYXBwZXIgXCIgIFtuZ0NsYXNzXT1cInsnb3Blbi1jb2xsb3BzJzogaXNDb2xsb3BzfVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCIgPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtYW5nbGUtZG93blwiICpuZ0lmPVwiaXNDb2xsb3BzXCIgKGNsaWNrKT1cImlzQ29sbG9wcyA9ICFpc0NvbGxvcHNcIj48L2k+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS11cFwiICpuZ0lmPVwiIWlzQ29sbG9wc1wiIChjbGljayk9XCJpc0NvbGxvcHMgPSAhaXNDb2xsb3BzXCI+PC9pPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDb2xsb3BzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiA+Rmlyc3QgTmFtZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgPnRlc3QgdHR0dHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5MYXN0IE5hbWU6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PnRldHN0IHRlc3QgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5FbWFpbDo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPmFiY2RlZnRAdmdyb3VwLmNvbTwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5OdW1iZXI6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+NjM1NDU5ODUyNjQyMjU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkxhbmd1YWdlOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkVuZ2xpc2g8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkltYWdlIDo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj50ZXN0LmpwZyA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkV4dGVuc2lvbiA6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+NDU5NjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPk5vdGUgOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+dGVzIHRlc3QgdGVzdCA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPlN1YmplY3Q6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+aGVsbG8gd29ybGQgfCB0ZXN0PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+TWVzc2FnZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj50ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBjb250YWN0IGxpc3QgcGFuZWwgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1wYW5lbFwiICpuZ0lmPVwic2hvd0NvbnRhY3RzUGFuZWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgYmFja1wiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKClcIj4gY2hldnJvbl9sZWZ0IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5Db250YWN0czwvZGl2PlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBzZWFyY2hcIj4gc2VhcmNoIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pdGVtXCIgKm5nRm9yPVwibGV0IGMgb2YgY29udGFjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCJjLmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tjLmZpcnN0TmFtZX19IHt7Yy5taWRkbGVOYW1lfX0ge3tjLmxhc3ROYW1lfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCI+e3sgKGMubnVtYmVyc0xpc3QgJiYgYy5udW1iZXJzTGlzdFswXT8ubnVtYmVyKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29udGFjdC1jYWxsLWJ0blwiIChjbGljayk9XCJjYWxsQ29udGFjdChjKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkNhbGw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gY29uZmVyZW5jZSBjYWxsIHZpZXcgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb25mZXJlbmNlLWNhbGwtdmlld1wiICpuZ0lmPVwiaXNDb25mZXJlbmNlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1oZWFkaW5nXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLWljb24gbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBncm91cHMgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29uZi10aXRsZVwiPkNvbmZlcmVuY2UgQ2FsbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtdGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjYWxsIG9mIGN1cnJlbnRDYWxsTGlzdDsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3tjYWxsPy5uYW1lIHx8ICdVbmtub3duIG51bWJlcid9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJpIDwgY3VycmVudENhbGxMaXN0Lmxlbmd0aCAtIDFcIj4mPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtbmFtZVwiPlxuICAgICAgICAgICAgICAgIDwhLS0ge3sgKGNhbGxEYXRhPy5uYW1lIHx8IGNhbGxEYXRhPy5kaXNwbGF5TnVtIHx8IGNhbGxEYXRhPy5waG9uZSB8fCAnLScpIH19ICZcbiAgICAgICAgICAgICAgICB7eyAobmV3SW5jb21pbmdDYWxsc0xpc3Q/LlswXT8udXNlckluZm8/LmMyY0luZm9ybWF0aW9uPy5uYW1lXG4gICAgICAgICAgICAgICAgfHwgbmV3SW5jb21pbmdDYWxsc0xpc3Q/LlswXT8udXNlckluZm8/LmMyY0luZm9ybWF0aW9uPy5udW1iZXJcbiAgICAgICAgICAgICAgICB8fCBuZXdJbmNvbWluZ0NhbGxzTGlzdD8uWzBdPy5wYXJhbWV0ZXJzPy5Gcm9tXG4gICAgICAgICAgICAgICAgfHwgaGVsZENhbGw/LmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnZGlzcGxheU51bWJlcicpXG4gICAgICAgICAgICAgICAgfHwgJy0nKSB9fSAtLT5cbiAgICAgICAgICAgICAgICB7e2N1cnJlbnRDYWxsTGlzdD8uWzBdPy5uYW1lIHx8ICdVbmtub3duIG51bWJlcid9fSAmIHt7Y3VycmVudENhbGxMaXN0Py5bMV0/Lm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLXRpbWVyXCI+e3sgdGltZXIgfX08L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbmYtcmVjb3JkXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1zdG9wLWJ0blwiICpuZ0lmPVwiaXNSZWNvcmRpbmdcIiAoY2xpY2spPVwidG9nZ2xlUmVjb3JkaW5nKClcIiB0aXRsZT1cIlN0b3AgUmVjb3JkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBzdG9wX2NpcmNsZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiICpuZ0lmPVwiIXNob3dLZXlwYWRcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcyMHB4J31cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVjb3JkLWJ0bi1jb250YWluZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gc3RhcnQtc3RvcFwiICpuZ0lmPVwiIWlzUmVjb3JkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncmVjb3JkaW5nJzogaXNSZWNvcmRpbmcsICdzdG9wcGVkJzogIWlzUmVjb3JkaW5nfVwiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXNSZWNvcmRpbmcgPyAnU3RvcCBSZWNvcmRpbmcnIDogJ1N0YXJ0IFJlY29yZGluZydcIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVjb3JkaW5nLWljb25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGF1c2UtcmVzdW1lLWJ0bnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNSZWNvcmRpbmcgJiYgIWlzUGF1c2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicGF1c2VSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwYXVzZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZWNvcmQtYnRuIHBhdXNlLXJlc3VtZVwiICpuZ0lmPVwiaXNQYXVzZWRcIiAoY2xpY2spPVwicmVzdW1lUmVjb3JkaW5nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gcGxheV9hcnJvdyA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzUmVjb3JkaW5nXCIgY2xhc3M9XCJ0aW1lci1kaXNwbGF5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGdldEZvcm1hdHRlZFRpbWUoKSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93S2V5cGFkXCIgY2xhc3M9XCJzZW5kRGlnaXQgbXQtMlwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJjYWxsLWlucHV0c1wiIGlkPVwiY2FsbC1pbnB1dFwiIFsobmdNb2RlbCldPVwiY2FsbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGtleXVwKT1cIm9uQ2FsbElucHV0RW50ZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBpbnB1dC1jbGVhci1idG5cIiAqbmdJZj1cImNhbGxJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhcklucHV0cygpXCI+Y2xvc2Vfc21hbGw8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJidG4tY29udGFpbmVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIiAqbmdJZj1cInNob3dLZXlwYWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2V5LWJ0blwiICpuZ0Zvcj1cImxldCBrZXkgb2Yga2V5cGFkVmFsXCIgKGNsaWNrKT1cIm9uQ2FsbElucHV0cyhrZXkubnVtKVwiPlxuICAgICAgICAgICAgICAgICAgICB7e2tleS5udW19fVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJ0bi1hbGJoYWJldHNcIj57e2tleS50ZXh0ID8ga2V5LnRleHQgOiAnJm5ic3A7J319PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLXJlbW92ZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJyZW1vdmUtYnRuXCIgKGNsaWNrKT1cImFkZFJlbW92ZVBhcnRpY2lwYW50KClcIj5SZW1vdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzTXV0ZX1cIiAoY2xpY2spPVwidG9nZ2xlTXV0ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiB7eyBpc011dGUgPyAnbWljX29mZicgOiAnbWljJyB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiAoY2xpY2spPVwidG9nZ2xlS2V5cGFkKClcIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHRyYW5zaXRpb25fZGlzc29sdmUgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gYWRkIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1lbmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0biBkYW5nZXJcIiAoY2xpY2spPVwiZW5kQ2FsbCh0cnVlKVwiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQWRkIHJlbW92ZSBwYXJ0aWNpcGFudCBwYW5lbCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLXBhbmVsXCIgKm5nSWY9XCJpc0FkZFJlbW92ZVBhcnRpY2lwYW50XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGJhY2tcIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCh0cnVlKVwiPiBjaGV2cm9uX2xlZnQgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRhY3RzPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHNlYXJjaFwiPiBzZWFyY2ggPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYyBvZiBhbGxQYXJ0aWNpcGVudExpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCJjLmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdC1uYW1lXCI+e3tjPy50b05hbWUgfHwgJ1Vua25vd24nfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCI+e3sgYz8udG8gfHwgJ1Vua25vd24nfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb25mZXJlbmNlLWhvbGQtY29udGFjdCBtci0yXCIgW25nQ2xhc3NdPVwieyAnb24taG9sZCc6IGMuaG9sZCB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkhvbGRDYWxsKGMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiB0aXRsZT1cIkhvbGRcIj4gcGhvbmVfcGF1c2VkIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJsYWJlbFwiPkhvbGQ8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtY29udGFjdFwiIChjbGljayk9XCJvbkVuZENhbGwoYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiQ2FsbCBFbmRcIj4gY2FsbF9lbmQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImxhYmVsXCI+RW5kPC9zcGFuPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cIndhdmUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c3ZnIGNsYXNzPVwid2F2ZXNcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCJcbiAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAyNCAxNTAgMjhcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiIHNoYXBlLXJlbmRlcmluZz1cImF1dG9cIj5cbiAgICAgICAgICAgICAgICA8ZGVmcz5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggaWQ9XCJnZW50bGUtd2F2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTS0xNjAgNDRjMzAgMCA1OC0xOCA4OC0xOHMgNTggMTggODggMTggNTgtMTggODgtMTggNTggMTggODggMTggdjQ0aC0zNTJ6XCIgLz5cbiAgICAgICAgICAgICAgICA8L2RlZnM+XG4gICAgICAgICAgICAgICAgPGcgY2xhc3M9XCJwYXJhbGxheFwiPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiMFwiIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNylcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8dXNlIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIiB4PVwiNDhcIiB5PVwiM1wiIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuNSlcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDx1c2VcbiAgICAgICAgICAgICAgICB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCJcbiAgICAgICAgICAgICAgICB4PVwiNDhcIlxuICAgICAgICAgICAgICAgIHk9XCI1XCJcbiAgICAgICAgICAgICAgICBmaWxsPVwicmdiYSgyNTUsMjU1LDI1NSwwLjMpXCJcbiAgICAgICAgICAgICAgLz4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCI3XCIgZmlsbD1cIiNmZmZcIiAvPlxuICAgICAgICAgICAgICAgIDwvZz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibWluLWNhbGwtY29udGFpbmVyXCIgKm5nSWY9XCJpc01pbmltaXNlZFwiPlxuICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBmdWxsc2NyZWVuXCIgKGNsaWNrKT1cIm1heGltaXNlRGlhbHBhZCgpXCI+IG9wZW5faW5fZnVsbCA8L3NwYW4+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IHdpZHRoOiAxMDAlXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLWNhbGwtYW5pbWF0aW9uXCIgaWQ9XCJjYWxsLWF2YXRhclwiPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJtaW4tYXZhdGFyLWltZ1wiIFtzcmNdPVwiY2FsbERhdGEuaW1nXCIgYWx0PVwiXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbGVyRGV0YWlsc1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7Y2FsbERhdGEubmFtZX19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPHAgc3R5bGU9XCJtYXJnaW46IDBcIj57e2NhbGxEYXRhLmRpc3BsYXlOdW0gPyBjYWxsRGF0YS5kaXNwbGF5TnVtIDogY2FsbERhdGEucGhvbmUgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm1pbi1idG4tY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdGltZXJcIj57e3RpbWVyfX08L2Rpdj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1pbi1jYWxsLXNlYy1idG5cIiAoY2xpY2spPVwidG9nZ2xlTXV0ZSgpXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cImlzTXV0ZVwiPiBtaWNfb2ZmIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiIWlzTXV0ZVwiPiBtaWMgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1pbi1jYWxsLWJ0biBlbmQtY2FsbC1idG5cIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIiAoY2xpY2spPVwiZW5kQ2FsbCgpXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbF9lbmQgPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
1113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kaWFsYm94L3NyYy9saWIvY29tcG9uZW50cy9jYWxsLXByb2dyZXNzL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGlhbGJveC9zcmMvbGliL2NvbXBvbmVudHMvY2FsbC1wcm9ncmVzcy9jYWxsLXByb2dyZXNzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBb0MsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDM0ksT0FBTyxFQUFRLE1BQU0sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLElBQUksTUFBTSxhQUFhLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxRQUFRLEVBQWdCLE1BQU0sTUFBTSxDQUFDOzs7Ozs7QUFxQjlDLE1BQU0sT0FBTyxxQkFBcUI7SUFxRGhDLHNCQUFzQjtJQUN0QixzRkFBc0Y7SUFDdEYsOEZBQThGO0lBQzlGLGtHQUFrRztJQUNsRyw2RUFBNkU7SUFDN0UsOEZBQThGO0lBQzlGLDZFQUE2RTtJQUM3RSxLQUFLO0lBQ0wsWUFBb0IsZ0JBQWtDLEVBQVUsR0FBc0IsRUFBVSxhQUE0QjtRQUF4RyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXpEbkgseUJBQW9CLEdBQVEsRUFBRSxDQUFDO1FBRTlCLGlCQUFZLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7UUFDNUQs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ZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbGwsIERldmljZSB9IGZyb20gJ0B0d2lsaW8vdm9pY2Utc2RrJztcbmltcG9ydCB7IEV4dGVuc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2V4dGVuc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFR3aWxpb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3R3aWxpby5zZXJ2aWNlJztcbmltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50cyc7XG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5pbXBvcnQgeyBrZXlwYWQgfSBmcm9tICcuLi8uLi8uLi9rZXlwYWQnO1xuaW1wb3J0IHsgaW50ZXJ2YWwsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5cblxuaW50ZXJmYWNlIENhbGxEZXRhaWxzIHtcbiAgY2FsbFNpZDogc3RyaW5nO1xuICBjYWxsU3RhdHVzOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgQ2FsbFN0YXR1c1Jlc3BvbnNlIHtcbiAgY2FsbERldGFpbHM6IENhbGxEZXRhaWxzO1xuICByZXNwb25zZTogc3RyaW5nO1xuICBlcnJvclR5cGU6IG51bWJlcjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICBzdGF0dXM6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNhbGwtcHJvZ3Jlc3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsbC1wcm9ncmVzcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NhbGwtcHJvZ3Jlc3MuY29tcG9uZW50LmNzcyddXG59KVxuZXhwb3J0IGNsYXNzIENhbGxQcm9ncmVzc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgY2FsbERhdGE6IGFueTtcbiAgQElucHV0KCkgc2VsZWN0ZWRDYWxsZXJJZDogYW55O1xuICBASW5wdXQoKSBuZXdJbmNvbWluZ0NhbGxEYXRhPzogQ2FsbDtcbiAgQElucHV0KCkgbmV3SW5jb21pbmdDYWxsc0xpc3Q6IGFueSA9IFtdO1xuICBASW5wdXQoKSBkZXZpY2VJZDogYW55O1xuICBAT3V0cHV0KCkgZW5kQ2FsbEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBpbmNvbWluZ0NhbGxzTmV3SW5mbzogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBAT3V0cHV0KCkgbWluaW1pc2VFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBkZXZpY2U/OiBEZXZpY2U7XG4gIGNhbGw/OiBDYWxsIHwgYW55O1xuICBzaG93UmluZ0FuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICB0aW1lcjogc3RyaW5nID0gJzAwOjAwJztcbiAgaW50ZXJ2YWxJZDogYW55O1xuICBzaG93S2V5cGFkOiBib29sZWFuID0gZmFsc2U7XG4gIGtleXBhZFZhbCA9IGtleXBhZDtcbiAgY2FsbElucHV0OiBzdHJpbmcgPSAnJztcbiAgaXNNdXRlOiBib29sZWFuID0gZmFsc2U7XG4gIGRpc2JhbGVFbmRDYWxsQnRuOiBib29sZWFuID0gdHJ1ZTtcbiAgc2hvd0NsZWFyQnRuOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQ29sbG9wcyA9IGZhbHNlO1xuICBjdXJyZW50Q2FsbDogYW55O1xuICAvLyBDb25mZXJlbmNlIHN0YXRlIGZsYWdcbiAgaXNDb25mZXJlbmNlOiBib29sZWFuID0gZmFsc2U7XG4gIGlzT3V0Z29pbmdDYWxsOiBib29sZWFuID0gdHJ1ZTtcbiAgLy8gSW5jb21pbmcgY2FsbCB2YXJpYWJsZXNcbiAgaW5jb21pbmdDYWxsRGl2OiBib29sZWFuID0gZmFsc2U7XG4gIC8vQE91dHB1dCgpIHNob3dDYWxsUHJvZ3Jlc3NFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgaW5jb21pbmdDYWxsSW5pdGlhdGVkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLy8gUmVjb3JkaW5nIHZhcmlhYmxlc1xuICBjYWxsU2lkOiBhbnk7XG4gIGlzUmVjb3JkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIGlzUGF1c2VkOiBib29sZWFuID0gZmFsc2U7XG4gIHRpbWVyU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICB0aW1lRWxhcHNlZCA9IDA7IC8vIGluIHNlY29uZHNcbiAgcmVjb3JkQ2FsbDogYm9vbGVhbiA9IGZhbHNlO1xuICBpbmNvbWluZ0NhbGxTaWQ6IGFueTtcbiAgY2FsbFN0YXR1czogc3RyaW5nID0gJ3JpbmdpbmcnO1xuICBpbmNvbWluZ1JlY29yZENhbGw/OiBhbnk7XG4gIHNlbGVjdGVkSW5jb21pbmdDYWxsOiBhbnk7XG4gIHNob3dDb250YWN0c1BhbmVsOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQWRkUmVtb3ZlUGFydGljaXBhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaXNDb25jdXJyZW50SW5jb21pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGVsZENhbGw/OiBDYWxsIHwgYW55O1xuICBpc0NhbGxPbkhvbGQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29udGFjdHM6IGFueVtdID0gW107XG4gIGN1cnJlbnRDYWxsTGlzdDogYW55W10gPSBbXTtcbiAgY29uZmVyZW5jZUlkOiBhbnk7XG4gIGFsbFBhcnRpY2lwZW50TGlzdDogYW55O1xuICBpc0NsaWNrRXhwYW5kOiBib29sZWFuID0gZmFsc2U7XG4gIGlzQ2FsbEluUHJvZ3Jlc3MhOiBib29sZWFuO1xuICAvLyBjb250YWN0czogYW55W10gPSBbXG4gIC8vICAgeyBuYW1lOiAnUGFtZWxhIENveCcsIHRpdGxlOiAnUHJvZHVjdCBEZXNpZ25lcicsIGltZzogJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnIH0sXG4gIC8vICAgeyBuYW1lOiAnUm9nZXIgUy4gV29vZCcsIHRpdGxlOiAnSmF2YVNjcmlwdCBQcm9ncmFtbWVyJywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfSxcbiAgLy8gICB7IG5hbWU6ICdWaWN0b3IgQmxhY2tzdG9uJywgdGl0bGU6ICdEYXRhYmFzZSBBZG1pbmlzdHJhdG9yJywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfSxcbiAgLy8gICB7IG5hbWU6ICdUYW1teSBSaW9zJywgdGl0bGU6ICdTdXBwb3J0JywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfSxcbiAgLy8gICB7IG5hbWU6ICdDYXJsb3MgSGVuZGVyc29uJywgdGl0bGU6ICdTb2Z0d2FyZSBBcmNoaXRlY3QnLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9LFxuICAvLyAgIHsgbmFtZTogJ0VsaXphYmV0aCBCYWlsZXknLCB0aXRsZTogJ0hSJywgaW1nOiAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycgfVxuICAvLyBdO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGV4dGVuc2lvblNlcnZpY2U6IEV4dGVuc2lvblNlcnZpY2UsIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0d2lsaW9TZXJ2aWNlOiBUd2lsaW9TZXJ2aWNlKSB7XG4gICAgY29uc29sZS5sb2coJ0NhbGwgUHJvZ3Jlc3MgQ29tcG9uZW50Jyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zb2xlLmxvZygnQ2FsbCBQcm9ncmVzcyBDb21wb25lbnQgbmdPbkluaXQnKTtcbiAgICAvLyBTdWJzY3JpYmUgdG8gaW5jb21pbmcgY2FsbHMgZnJvbSBUd2lsaW9TZXJ2aWNlXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMudHdpbGlvU2VydmljZS5jdXJyZW50Q2FsbC5zdWJzY3JpYmUoKGluY29taW5nOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFpbmNvbWluZykgeyByZXR1cm47IH1cbiAgICAgICAgY29uc29sZS5sb2coJ1R3aWxpb1NlcnZpY2UuY3VycmVudENhbGwgZW1pdHRlZDonLCBpbmNvbWluZyk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdDdXJyZW50IGNhbGwgc3RhdHVzOicsIHRoaXMuY2FsbD8uc3RhdHVzKCkpO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbiBvbmdvaW5nIGNhbGwsIHNob3cgY29uY3VycmVudCBpbmNvbWluZyBiYW5uZXJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDb25jdXJyZW50IGluY29taW5nIGRldGVjdGVkIC0gc2hvd2luZyBiYW5uZXInKTtcbiAgICAgICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IHRydWU7XG4gICAgICAgICAgLy8gQWRkIHRvIGxpc3QgaWYgbm90IHByZXNlbnRcbiAgICAgICAgICBjb25zdCBleGlzdHMgPSAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCB8fCBbXSkuc29tZSgoYzogYW55KSA9PiBjPy5wYXJhbWV0ZXJzPy5DYWxsU2lkID09PSBpbmNvbWluZz8ucGFyYW1ldGVycz8uQ2FsbFNpZCk7XG4gICAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgPSBbLi4uKHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgfHwgW10pLCBpbmNvbWluZ107XG4gICAgICAgICAgICB0aGlzLmluY29taW5nQ2FsbHNOZXdJbmZvLmVtaXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy8gfVxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3Vic2NyaWJpbmcgdG8gaW5jb21pbmcgY2FsbHM6JywgZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydjYWxsRGF0YSddKSB7XG4gICAgICBpZiAoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmlzSW5jb21pbmdDYWxsKSB7XG4gICAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jYWxsWydjYWxsSW5mbyddID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNhbGxEYXRhKSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmRpc3BsYXlOdW0gfHwgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWU/LmZyb20pIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3Rlc3Qtc3RhcnRDYWxsMTIzJywgY2hhbmdlc1snY2FsbERhdGEnXS5jdXJyZW50VmFsdWUpXG4gICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB7IC4uLmNoYW5nZXNbJ2NhbGxEYXRhJ10uY3VycmVudFZhbHVlLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyB9O1xuICAgICAgICB0aGlzLnN0YXJ0Q2FsbChjaGFuZ2VzWydjYWxsRGF0YSddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyduZXdJbmNvbWluZ0NhbGxzTGlzdCddKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGFjdGl2ZSBvbmdvaW5nIGNhbGxcbiAgICAgICAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0LmZvckVhY2goKHJlczphbnkpPT57XG4gICAgICAgICAgICBpZih0aGlzLmN1cnJlbnRDYWxsTGlzdC5maW5kSW5kZXgoKGl0ZW06YW55KT0+aXRlbS5pZCA9PSByZXMuaWQpID09IC0xKXtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7Li4ucmVzLCBpbWc6ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJywgaXNJbmNvbWluZ0NhbGw6IHRydWUsIGlzSG9sZDogZmFsc2UsIGlzTXV0ZTogZmFsc2UsIGlzQ29uZmVyZW5jZTogZmFsc2UsIGlzQWNjZXB0Q2FsbDogZmFsc2V9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYoIXRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoKXtcbiAgICAgICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5pbmNvbWluZ0NhbGxEaXYgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGl0ZW06YW55KT0+ICFpdGVtLmlzSW5jb21pbmdDYWxsICk7XG4gICAgICAgICAgaWYodGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID09IDApe1xuICAgICAgICAgICAgdGhpcy5pc0NhbGxJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0ge307XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zb2xlLmxvZygnY3VycmVudENhbGxMaXN0JywgdGhpcy5jdXJyZW50Q2FsbExpc3QpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIC8vIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyAgIHRoaXMuaXNSZWNvcmRpbmcgPSBmYWxzZTtcbiAgICAvLyB9LCAzMDAwKTtcblxuICB9XG5cbiAgR2V0Q29udGFjdHNMaXN0KCkge1xuICAgIGNvbnN0IHRva2VuID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2V4dF90b2tlbicpIHx8ICcnO1xuICAgIHRoaXMuZXh0ZW5zaW9uU2VydmljZS5yZWFkQ29udGFjdHModG9rZW4pLnN1YnNjcmliZShcbiAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQVBJIFJlc3BvbnNlOicsIHJlcyk7XG5cbiAgICAgICAgLy8gTm90ZTogQ2FwaXRhbCBCIGluIHBob25lQm9va1xuICAgICAgICBpZiAocmVzICYmIHJlcy5waG9uZUJvb2spIHtcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gcmVzLnBob25lQm9vaztcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ29udGFjdHMgYXJyYXk6JywgdGhpcy5jb250YWN0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShyZXMpKSB7XG4gICAgICAgICAgdGhpcy5jb250YWN0cyA9IHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmNvbnRhY3RzID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmxvZygnQ29udGFjdHMgYXJyYXk6JywgdGhpcy5jb250YWN0cyk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgY29udGFjdHM6JywgZXJyb3IpO1xuICAgICAgICB0aGlzLmNvbnRhY3RzID0gW107XG4gICAgICB9XG4gICAgKTtcbiAgfVxuICBhZGRSZXM6IGFueTtcbiAgYXN5bmMgc3RhcnRDYWxsKGNhbGxEYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZyhjYWxsRGF0YSwgJ2NhbGxEYXRhJyk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSB0cnVlO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgICAgY2hhbm5lbElkOiBlbnZpcm9ubWVudC5jaGFubmVsSWQsXG4gICAgICAgIHVzZXJJZDogbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXJJZCcpLFxuICAgICAgICB0bzogY2FsbERhdGEucGhvbmUsXG4gICAgICAgIGZyb21OdW1iZXI6IGNhbGxEYXRhLmZyb20sXG4gICAgICAgIHNjb3BlOiAnbG9jYWwnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmluaXRpYXRlQ2FsbChwYXlsb2FkKTtcbiAgICAgIHRoaXMuY29uZmVyZW5jZUlkID0gcmVzcG9uc2U/LmNhbGxhdXRoPy5pZDtcbiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gMjAwKSB7XG4gICAgICAgIGNvbnN0IHsgaWQ6IGNhbGxBdXRoSWQsIHJlY29yZENhbGwgfSA9IGF3YWl0IHRoaXMuZ2V0Q2FsbEF1dGhJZChyZXNwb25zZSk7XG4gICAgICAgIHRoaXMuZ2V0VXNlckluZm9ybWF0aW9uKGNhbGxBdXRoSWQpXG4gICAgICAgIHRoaXMucmVjb3JkQ2FsbCA9IHJlY29yZENhbGw7IC8vIFN0b3JlIHRoZSByZWNvcmRDYWxsIHZhbHVlXG4gICAgICAgIGNvbnN0IHRva2VuRGF0YTogYW55ID0gYXdhaXQgdGhpcy5nZXRPdXRnb2luZ0NhbGxUb2tlbihjYWxsQXV0aElkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5jb25uZWN0VG9EZXZpY2UodG9rZW5EYXRhLnRva2VuLCBjYWxsRGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMucG9sbENhbGxTdGF0dXMoY2FsbEF1dGhJZCk7XG5cbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuYWRkUmVzID0gYXdhaXQgdGhpcy5hZGRQYXJ0aWNpcGFudFRvQ2FsbCh7XG4gICAgICAgICAgICAgIGZyb206IGNhbGxEYXRhPy5mcm9tLFxuICAgICAgICAgICAgICByb3V0ZTogXCJPVVRHT0lOR1wiLFxuICAgICAgICAgICAgICBwYXJ0aWNpcGFudE51bWJlcjogY2FsbERhdGE/LnBob25lLFxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2FsbERhdGEgPSB7IC4uLmNhbGxEYXRhLCBwYXJ0aWNpcGFudElkOiB0aGlzLmFkZFJlcz8ucGFydGljaXBhbnRJZCxpc0hvbGQ6IGZhbHNlLCBpc0xlZnQ6IGZhbHNlLCBpc0luY29taW5nQ2FsbDogZmFsc2UsIGlzQ29uZmVyZW5jZTogZmFsc2UsIGlzQWNjZXB0Q2FsbDogdHJ1ZX07XG4gICAgICAgICAgICB0aGlzLmNhbGxbJ2NhbGxJbmZvJ10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FsbERhdGEpKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MTExMTExJyk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gey4uLnRoaXMuY2FsbERhdGEsIGltZzogY2FsbERhdGEuaW1nIHx8J2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnfTtcbiAgICAgICAgICAgIC8vIEluaXRpYWxpemUgaXNBY2NlcHRDYWxsIGJhc2VkIG9uIGN1cnJlbnQgY2FsbCBzdGF0ZSB0byBlbnN1cmUgVUkgcmVuZGVycyBpZiBhbHJlYWR5IGNvbm5lY3RlZFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7XG4gICAgICAgICAgICAgIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgICAgICAgICAgIGltZzogY2FsbERhdGEuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgICAgICAgaXNBY2NlcHRDYWxsOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdJbml0aWFsIHBhcnRpY2lwYW50SWQ6JywgdGhpcy5hZGRSZXM/LnBhcnRpY2lwYW50SWQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGFkZGluZyBpbml0aWFsIHBhcnRpY2lwYW50OicsIGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgMTAwMClcbiAgICAgICAgLy8gUG9sbCB0aGUgc3RhdHVzIGZvciAzMC00NSBzZWNvbmRzXG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSAyMDEpIHtcbiAgICAgICAgc3dhbChcIkVycm9yXCIsIHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxici8+XCIpLCBcImVycm9yXCIpO1xuICAgICAgICBjb25zb2xlLmxvZygndGVzdDInKVxuICAgICAgICB0aGlzLmVuZENhbGwoKTtcbiAgICAgIH1cblxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MycpXG4gICAgICB0aGlzLmVuZENhbGwoKTtcbiAgICB9XG4gIH1cblxuICBvbkhvbGRDYWxsKGM6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGMsICdkc2RzZHNkc2RzZHNhZHNhJyk7XG4gICAgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgIHBhcnRpY2lwYW50SWQ6IFtjLnBhcnRpY2lwYW50SWRdLFxuICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgIGhvbGQ6ICFjLmhvbGRcbiAgICB9KVxuICAgIGMuaG9sZCA9ICFjLmhvbGQ7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgYXN5bmMgb25FbmRDYWxsKGM6IGFueSwgaXNBbGxDYWxsRW5kPzogYm9vbGVhbikge1xuICAgIGNvbnNvbGUubG9nKGMsICdkc2RzZHNkc2RzZHNhZHNhJyk7XG4gICAgbGV0IHBhcnRpY2lwYW50SWQgPSBpc0FsbENhbGxFbmQgPyAnYWxsJyA6IGMucGFydGljaXBhbnRJZCB8fCBjLnBhcnRpY2lwYW50SWQ7XG4gICAgbGV0IHJlczogYW55ID0gYXdhaXQgdGhpcy5nZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZCwgdGhpcy5jb25mZXJlbmNlSWQpO1xuICAgIGlmKHJlcz8uc3RhdHVzID09IDIwMSAmJiByZXM/Lm1lc3NhZ2UgPT0gJ3BhcnRpY2lwYW50IGFscmVhZHkgbGVmdCcpe1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gaXRlbS5wYXJ0aWNpcGFudElkICE9PSBjLnBhcnRpY2lwYW50SWQpO1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXSA6IG51bGw7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuZ2V0QWxsUGFydGljaXBhbnRzKHRoaXMuY29uZmVyZW5jZUlkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhdGVDYWxsKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuaW5pdGlhdGVDYWxsKHBheWxvYWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgb25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmhvbGRQYXJ0aWNpcGFudChwYXlsb2FkKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYWRkUGFydGljaXBhbnRUb0NhbGwocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5hZGRQYXJ0aWNpcGFudChwYXlsb2FkKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q2FsbFN0YXR1c09mUGFydGljaXBhbnRzKHBhcnRpY2lwYW50SWQ6IGFueSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFN0YXR1c09mUGFydGljaXBhbnRzKHBhcnRpY2lwYW50SWQpLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRSZW1vdmVQYXJ0aWNpcGFudHMocGFydGljaXBhbnRJZDogYW55LCBjb25mZXJlbmNlSWQ6IGFueSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0UmVtb3ZlUGFydGljaXBhbnRzKHBhcnRpY2lwYW50SWQsIGNvbmZlcmVuY2VJZCkudG9Qcm9taXNlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldENhbGxBdXRoSWQocmVzcG9uc2U6IGFueSkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogcmVzcG9uc2UuY2FsbGF1dGguaWQsXG4gICAgICByZWNvcmRDYWxsOiByZXNwb25zZS5jYWxsYXV0aC5yZWNvcmRDYWxsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0T3V0Z29pbmdDYWxsVG9rZW4oY2FsbEF1dGhJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGF3YWl0IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDb25mZXJlbmNlQ2FsbFRva2VuKHsgYXV0aElkOiBjYWxsQXV0aElkIH0pLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb25uZWN0VG9EZXZpY2UodG9rZW46IGFueSwgY2FsbERhdGE6IGFueSkge1xuICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHtcbiAgICAgIGNvZGVjUHJlZmVyZW5jZXM6IFsnb3B1cycsICdwY211J10sXG4gICAgICBjbG9zZVByb3RlY3Rpb246IHRydWUsXG4gICAgfTtcblxuICAgIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSh0b2tlbi52YWx1ZSwgb3B0aW9ucyk7XG4gICAgdGhpcy5jYWxsID0gYXdhaXQgdGhpcy5kZXZpY2UuY29ubmVjdCh7XG4gICAgICBwYXJhbXM6IHtcbiAgICAgICAgRnJvbTogY2FsbERhdGEuZnJvbSxcbiAgICAgICAgVG86IGNhbGxEYXRhLnBob25lLFxuICAgICAgICBFbnY6IGVudmlyb25tZW50LmFiYixcbiAgICAgICAgVG9rZW46IHRva2VuLmlkLFxuICAgICAgICBFeHQ6IGNhbGxEYXRhLmV4dE51bVxuICAgICAgfSxcbiAgICAgIHJ0Y0NvbnN0cmFpbnRzOiB7IGF1ZGlvOiB7IGRldmljZUlkOiAnZGVmYXVsdCcgfSB9LFxuICAgIH0pO1xuICAgIHRoaXMuY2FsbFsnY2FsbEluZm8nXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY2FsbERhdGEpKTtcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBFdmVudExpc3RlbmVycygpIHtcblxuICAgIHRoaXMuc3RhcnRUaW1lcigpO1xuICAgIHRoaXMuZGV2aWNlPy5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FsbD8ub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuc3RvcFRpbWVyKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhbGw/Lm9uKCdkaXNjb25uZWN0JywgKGl0ZW06IGFueSkgPT4ge1xuICAgICAgY29uc29sZS5sb2coJ3Rlc3QtZGlzY29ubmVjdCcpXG4gICAgICAvLyB0aGlzLmVuZENhbGwoKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2FsbD8ub24oJ3JpbmdpbmcnLCAoKSA9PiB7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhbGw/Lm9uKCdyZWplY3QnLCAoKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygndGVzdDUnKVxuICAgICAgdGhpcy5lbmRDYWxsKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNhbGw/Lm9uKCdhY2NlcHQnLCAoKSA9PiB7XG4gICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLmRpc2JhbGVFbmRDYWxsQnRuID0gZmFsc2U7XG4gICAgICAvLyBFbnN1cmUgdGhlIGFjdGl2ZSBvdXRnb2luZyBjYWxsIGlzIG1hcmtlZCBhcyBhY2NlcHRlZCBzbyB0aGUgVUkgc3dpdGNoZXMgdG8gdGhlIGNvbm5lY3RlZCB2aWV3XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwaWQgPSB0aGlzLmNhbGxEYXRhPy5wYXJ0aWNpcGFudElkO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmN1cnJlbnRDYWxsTGlzdCkgJiYgdGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5jdXJyZW50Q2FsbExpc3QuZmluZEluZGV4KChjOiBhbnkpID0+IChwaWQgJiYgYz8ucGFydGljaXBhbnRJZCA9PT0gcGlkKSB8fCAoIXBpZCAmJiBjPy5waG9uZSA9PT0gdGhpcy5jYWxsRGF0YT8ucGhvbmUpKTtcbiAgICAgICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3RbaWR4XS5pc0FjY2VwdENhbGwgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0W2lkeF07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIHVwZGF0aW5nIGFjY2VwdCBzdGF0ZTonLCBlKTtcbiAgICAgIH1cbiAgICAgIC8vIFN0YXJ0IHJlY29yZGluZyBpZiByZWNvcmRDYWxsIGlzIHRydWUgYW5kIGNhbGwgaXMgYWNjZXB0ZWQgZm9yIDMwIHNlY29uZHNcbiAgICAgIC8vIGlmICh0aGlzLnJlY29yZENhbGwpIHtcbiAgICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyAgICAgaWYgKHRoaXMuaXNSZWNvcmRpbmcpIHJldHVybjsgLy8gSWYgYWxyZWFkeSByZWNvcmRpbmcsIHNraXBcbiAgICAgIC8vICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XG4gICAgICAvLyAgIH0sIDMwMDAwKTtcbiAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAvLyAgIHRoaXMuc3RvcFJlY29yZGluZygpO1xuICAgICAgLy8gfVxuICAgIH0pO1xuICAgIHRoaXMuY2FsbD8ub24oJ21lc3NhZ2VSZWNlaXZlZCcsIChtZXNzYWdlOiBhbnkpID0+IHtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhcnRUaW1lcigpIHtcbiAgICBsZXQgc2Vjb25kcyA9IDA7XG4gICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgc2Vjb25kcysrO1xuICAgICAgdGhpcy50aW1lciA9IHRoaXMuZm9ybWF0VGltZShzZWNvbmRzKTtcbiAgICB9LCAxMDAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcFRpbWVyKCkge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbElkKTtcbiAgICB0aGlzLnRpbWVyID0gJzAwOjAwJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VGltZSh0b3RhbFNlY29uZHM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IodG90YWxTZWNvbmRzIC8gNjApO1xuICAgIGNvbnN0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MDtcbiAgICByZXR1cm4gYCR7dGhpcy5wYWQobWludXRlcyl9OiR7dGhpcy5wYWQoc2Vjb25kcyl9YDtcbiAgfVxuXG4gIHByaXZhdGUgcGFkKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZSA8IDEwID8gYDAke3ZhbHVlfWAgOiBgJHt2YWx1ZX1gO1xuICB9XG4gIHByaXZhdGUgaGFuZGxlRXJyb3IoZXJyb3I6IGFueSkge1xuICAgIHN3YWwoXCJFcnJvclwiLCBlcnJvciwgXCJlcnJvclwiKTtcbiAgfVxuXG4gIC8vIGVuZENhbGwoKSB7XG4gIC8vICAgY29uc29sZS5sb2coJ2VuZENhbGwoKSBjYWxsZWQnKTtcbiAgLy8gICBjb25zb2xlLmxvZygnQ3VycmVudCBjYWxsOicsIHRoaXMuY2FsbD8ucGFyYW1ldGVyc1snRnJvbSddKTtcbiAgLy8gICBjb25zb2xlLmxvZygnSGVsZCBjYWxsIGV4aXN0czonLCAhIXRoaXMuaGVsZENhbGwpO1xuXG4gIC8vICAgLy8gRGlzY29ubmVjdCB0aGUgY3VycmVudCBhY3RpdmUgY2FsbFxuICAvLyAgIGlmICh0aGlzLmNhbGwpIHtcbiAgLy8gICAgIHRoaXMuY2FsbC5kaXNjb25uZWN0KCk7XG4gIC8vICAgICB0aGlzLmNhbGwgPSB1bmRlZmluZWQ7XG4gIC8vICAgfVxuXG4gIC8vICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAvLyAgIHRoaXMuc3RvcFRpbWVyKCk7XG5cbiAgLy8gICAvLyBJZiB0aGVyZSdzIGEgaGVsZCBjYWxsLCBtYWtlIGl0IGFjdGl2ZVxuICAvLyAgIGlmICh0aGlzLmhlbGRDYWxsKSB7XG4gIC8vICAgICBjb25zb2xlLmxvZygnUmVzdW1pbmcgaGVsZCBjYWxsOicsIHRoaXMuaGVsZENhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcblxuICAvLyAgICAgLy8gTWFrZSBoZWxkIGNhbGwgdGhlIGFjdGl2ZSBjYWxsXG4gIC8vICAgICB0aGlzLmNhbGwgPSB0aGlzLmhlbGRDYWxsO1xuICAvLyAgICAgdGhpcy5oZWxkQ2FsbCA9IHVuZGVmaW5lZDtcbiAgLy8gICAgIC8vIHRoaXMuaXNDYWxsT25Ib2xkID0gZmFsc2U7XG4gIC8vICAgICB0aGlzLmlzQ2FsbE9uSG9sZCA9ICEhdGhpcy5oZWxkQ2FsbDtcblxuXG4gIC8vICAgICAvLyBVbm11dGUgdGhlIHJlc3VtZWQgY2FsbFxuICAvLyAgICAgdGhpcy5jYWxsLm11dGUoZmFsc2UpO1xuXG4gIC8vICAgICAvLyBVcGRhdGUgVUkgd2l0aCB0aGUgcmVzdW1lZCBjYWxsIGluZm9cbiAgLy8gICAgIGNvbnN0IGZyb21OdW1iZXIgPSB0aGlzLmNhbGwucGFyYW1ldGVyc1snRnJvbSddO1xuICAvLyAgICAgY29uc3QgY2FsbGVyTmFtZSA9IHRoaXMuY2FsbC5jdXN0b21QYXJhbWV0ZXJzPy5nZXQoJ25hbWUnKSB8fCAnLSc7XG4gIC8vICAgICBjb25zdCBjYWxsZXJJbWcgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcblxuICAvLyAgICAgdGhpcy5jYWxsRGF0YSA9IHtcbiAgLy8gICAgICAgLi4udGhpcy5jYWxsRGF0YSxcbiAgLy8gICAgICAgcGhvbmU6IGZyb21OdW1iZXIsXG4gIC8vICAgICAgIGRpc3BsYXlOdW06IGZyb21OdW1iZXIsXG4gIC8vICAgICAgIG5hbWU6IGNhbGxlck5hbWUsXG4gIC8vICAgICAgIGltZzogY2FsbGVySW1nXG4gIC8vICAgICB9O1xuXG4gIC8vICAgICAvLyBSZXN0YXJ0IHRpbWVyIGZvciB0aGUgcmVzdW1lZCBjYWxsXG4gIC8vICAgICB0aGlzLnN0YXJ0VGltZXIoKTtcbiAgLy8gICAgIHRoaXMuZGlzYmFsZUVuZENhbGxCdG4gPSBmYWxzZTtcblxuICAvLyAgICAgY29uc29sZS5sb2coJ0hlbGQgY2FsbCBpcyBub3cgYWN0aXZlOicsIHRoaXMuY2FsbERhdGEpO1xuICAvLyAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAvLyAgIH0gZWxzZSB7XG4gIC8vICAgICAvLyBObyBoZWxkIGNhbGwsIGNvbXBsZXRlbHkgZW5kXG4gIC8vICAgICBjb25zb2xlLmxvZygnTm8gaGVsZCBjYWxsLCBlbmRpbmcgY29tcGxldGVseScpO1xuICAvLyAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAvLyAgICAgdGhpcy5tYXhpbWlzZURpYWxwYWQoKTtcbiAgLy8gICB9XG4gIC8vIH1cblxuICBhc3luYyBlbmRDYWxsKGlzQWxsQ2FsbEVuZD86IGJvb2xlYW4pIHtcbiAgICBjb25zb2xlLmxvZygnZW5kQ2FsbCgpIGNhbGxlZCcpO1xuICAgIGNvbnNvbGUubG9nKCdDdXJyZW50IGNhbGw6JywgdGhpcy5jYWxsPy5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuICAgIGNvbnNvbGUubG9nKCdIZWxkIGNhbGwgZXhpc3RzOicsICEhdGhpcy5oZWxkQ2FsbCk7XG4gICAgLy8gTGVhdmluZyBjb25mZXJlbmNlIHN0YXRlIHdoZW4gZW5kaW5nIGN1cnJlbnQgY2FsbCBhY3Rpb25cbiAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IGZhbHNlO1xuXG4gICAgLy8gaWYgKHRoaXMuY2FsbCkge1xuICAgIC8vICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vICAgICB0aGlzLmNhbGwucmVqZWN0KCk7XG4gICAgLy8gICAgIHRoaXMuY2FsbCA9IHVuZGVmaW5lZDtcbiAgICAvLyB9XG5cbiAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgICBpZihpc0FsbENhbGxFbmQpe1xuICAgICAgdGhpcy5vbkVuZENhbGwoe30sIGlzQWxsQ2FsbEVuZCk7XG4gICAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdCA9IFtdO1xuICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9uRW5kQ2FsbCh0aGlzLmN1cnJlbnRDYWxsLCBpc0FsbENhbGxFbmQpO1xuICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdC5maWx0ZXIoKGM6IGFueSkgPT4gYz8ucGFydGljaXBhbnRJZCAhPT0gdGhpcy5jdXJyZW50Q2FsbC5wYXJ0aWNpcGFudElkKTtcbiAgICAgIGlmKHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3RbMF0uaXNIb2xkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudENhbGwgPSB0aGlzLmN1cnJlbnRDYWxsTGlzdFswXTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdLFxuICAgICAgICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY29uZmVyZW5jZUlkLFxuICAgICAgICAgICAgICBob2xkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QgPSBbXTtcbiAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBpZiAodGhpcy5oZWxkQ2FsbCkge1xuICAgIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gICAgIHRoaXMub25FbmRDYWxsKHRoaXMuY2FsbD8uY2FsbEluZm8sIGlzQWxsQ2FsbEVuZCk7XG4gICAgLy8gICB9XG4gICAgLy8gICBjb25zb2xlLmxvZygnUmVzdW1pbmcgaGVsZCBjYWxsOicsIHRoaXMuaGVsZENhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcblxuICAgIC8vICAgLy8gUHJvbW90ZSBoZWxkIGNhbGxcbiAgICAvLyAgIC8vIHRoaXMuY2FsbCA9IHRoaXMuaGVsZENhbGw7XG4gICAgLy8gICB0aGlzLmhlbGRDYWxsID0gdW5kZWZpbmVkO1xuICAgIC8vICAgLy8gdGhpcy5pc0NhbGxPbkhvbGQgPSBmYWxzZTtcbiAgICAvLyAgIC8vIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7IC8vIEVuc3VyZSBVSSByZW5kZXJzXG5cbiAgICAvLyAgIC8vIHRoaXMuY2FsbC5tdXRlKGZhbHNlKTtcblxuICAgIC8vICAgLy8gVXBkYXRlIGNhbGxEYXRhXG4gICAgLy8gICBjb25zdCBmcm9tTnVtYmVyID0gdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICAvLyAgIGNvbnN0IGNhbGxlck5hbWUgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nO1xuICAgIC8vICAgY29uc3QgY2FsbGVySW1nID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG5cbiAgICAvLyAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgLy8gICAgIHBob25lOiBmcm9tTnVtYmVyLFxuICAgIC8vICAgICBkaXNwbGF5TnVtOiBmcm9tTnVtYmVyLFxuICAgIC8vICAgICBuYW1lOiBjYWxsZXJOYW1lLFxuICAgIC8vICAgICBpbWc6IGNhbGxlckltZ1xuICAgIC8vICAgfTtcblxuICAgIC8vICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgLy8gICB0aGlzLmRpc2JhbGVFbmRDYWxsQnRuID0gZmFsc2U7XG5cbiAgICAvLyAgIC8vIEZvcmNlIFVJIHVwZGF0ZVxuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCkpO1xuXG4gICAgLy8gICBjb25zb2xlLmxvZygnSGVsZCBjYWxsIGlzIG5vdyBhY3RpdmU6JywgdGhpcy5jYWxsRGF0YSk7XG4gICAgLy8gfSBlbHNlIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKCdObyBoZWxkIGNhbGwsIGVuZGluZyBjb21wbGV0ZWx5Jyk7XG4gICAgLy8gICBjb25zb2xlLmxvZygndGVzdDYnKVxuICAgIC8vICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgIC8vICAgaWYgKHRoaXMuY2FsbCkge1xuICAgIC8vICAgICB0aGlzLmNhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vICAgICB0aGlzLm9uRW5kQ2FsbCh0aGlzLmNhbGw/LmNhbGxJbmZvLCBpc0FsbENhbGxFbmQpO1xuICAgIC8vICAgICAvLyB0aGlzLmNhbGwgPSB1bmRlZmluZWQ7XG4gICAgLy8gICB9XG4gICAgLy8gICB0aGlzLm1heGltaXNlRGlhbHBhZCgpO1xuICAgIC8vIH1cbiAgfVxuXG5cbiAgdG9nZ2xlTXV0ZSgpIHtcbiAgICB0aGlzLmlzTXV0ZSA9ICF0aGlzLmlzTXV0ZTtcbiAgICB0aGlzLmNhbGw/Lm11dGUodGhpcy5pc011dGUpO1xuICB9XG4gIHRvZ2dsZUtleXBhZCgpIHtcbiAgICB0aGlzLnNob3dLZXlwYWQgPSAhdGhpcy5zaG93S2V5cGFkO1xuICAgIHRoaXMuY2FsbElucHV0ID0gJyc7XG4gIH1cbiAgdG9nZ2xlQ29udGFjdHNQYW5lbChpc1JlbW92ZT86IGJvb2xlYW4pIHtcbiAgICBpZihpc1JlbW92ZSl7XG4gICAgICB0aGlzLnNob3dDb250YWN0c1BhbmVsID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQgPSAhdGhpcy5pc0FkZFJlbW92ZVBhcnRpY2lwYW50O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwgPSAhdGhpcy5zaG93Q29udGFjdHNQYW5lbDtcbiAgICAgIHRoaXMuR2V0Q29udGFjdHNMaXN0KCk7XG4gICAgfVxuICB9XG5cbiAgYWRkUmVtb3ZlUGFydGljaXBhbnQoKSB7XG4gICAgY29uc3QgY29uZmVyZW5jZVNJZCA9IHRoaXMuYWRkUmVzPy5jb25mZXJlbmNlU2lkO1xuICAgIHRoaXMuaXNBZGRSZW1vdmVQYXJ0aWNpcGFudCA9ICF0aGlzLmlzQWRkUmVtb3ZlUGFydGljaXBhbnQ7XG4gICAgdGhpcy5hbGxQYXJ0aWNpcGVudExpc3QgPSB0aGlzLmdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlU0lkKTtcbiAgfVxuXG4gIGFzeW5jIGFkZChkYXRhPzogYW55KSB7XG4gICAgLy8gaWYoZGF0YT8uc3RhdHVzICE9ICdyaW5naW5nJyl7XG4gICAgaWYodGhpcy5jdXJyZW50Q2FsbExpc3QubGVuZ3RoID4gMSAmJiB0aGlzLmN1cnJlbnRDYWxsPy5pc0FjY2VwdENhbGwpe1xuICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgICAgcGFydGljaXBhbnRJZDogdGhpcy5jdXJyZW50Q2FsbD8uaXNJbmNvbWluZ0NhbGwgPyBbdGhpcy5jdXJyZW50Q2FsbD8uaWRdIDogW3RoaXMuY3VycmVudENhbGw/LnBhcnRpY2lwYW50SWRdLFxuICAgICAgICBjb25mZXJlbmNlSWQ6IHRoaXMuY3VycmVudENhbGw/LmlzSW5jb21pbmdDYWxsID8gdGhpcy50d2lsaW9TZXJ2aWNlLmNvbmZlcmVuY2VDYWxsSW5mby5jb25mZXJlbmNlSWQgOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgaG9sZDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBkYXRhLmlzSG9sZCA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuY2FsbCA9IGF3YWl0IHRoaXMudHdpbGlvU2VydmljZS5jb25uZWN0KCcnKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNhbGwsICdjYWxsQ29ubmVjdCcpO1xuICAgIGRhdGEuaXNBY2NlcHRDYWxsID0gdHJ1ZTtcbiAgICB0aGlzLmN1cnJlbnRDYWxsID0gZGF0YTtcbiAgICAvLyB9IGVsc2UgaWYoZGF0YT8uc3RhdHVzID09ICdyaW5naW5nJyl7XG4gICAgLy8gICB0aGlzLnR3aWxpb1NlcnZpY2UuYWRkSW5jb21pbmdQYXJ0aWNpcGFudChkYXRhPy5pZCwgdGhpcy50d2lsaW9TZXJ2aWNlLmNvbmZlcmVuY2VDYWxsSW5mby5jb25mZXJlbmNlSWQpLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgLy8gICAgIGNvbnNvbGUubG9nKGRhdGEsJ2JoaGhoaGhoaGhoaGhoaGhoaGhoJylcbiAgICAvLyAgIH0pXG4gICAgLy8gfVxuICAgIFxuICAgIC8vIHRoaXMuZGV2aWNlID0gbmV3IERldmljZSgpOy9cbiAgICAvLyBEZXZpY2UuY29ubmVjdCh7IGNvbmZlcmVuY2VOYW1lOiAnbXktY29uZmVyZW5jZS1yb29tJyB9KTtcbiAgICAvLyB0aGlzLmRldmljZSA9IG5ldyBEZXZpY2UoeyBjb25mZXJlbmNlTmFtZTogJ215LWNvbmZlcmVuY2Utcm9vbScgfSk7XG4gIH1cblxuICByZWplY3RDYWxsRnJvbUxpc3QoZGF0YT86IGFueSkge1xuICAgIGNvbnNvbGUubG9nKGRhdGEsJzI2NjU2NTY1NScpXG4gICAgLy8gdGhpcy50d2lsaW9TZXJ2aWNlLnJlamVjdEluY29taW5nUGFydGljaXBhbnQoZGF0YT8uaWQsIHRoaXMudHdpbGlvU2VydmljZS5jb25mZXJlbmNlQ2FsbEluZm8uY29uZmVyZW5jZUlkKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgIC8vICAgY29uc29sZS5sb2coZGF0YSwnYmhoaGhoaGhoaGhoaGhoaGhoaGgnKVxuICAgIC8vIH0pXG4gIH1cbiAgYXN5bmMgY2FsbENvbnRhY3QoY29udGFjdDogYW55KSB7XG4gICAgY29uc29sZS5sb2coJ0FkZGluZyBwYXJ0aWNpcGFudDonLCBjb250YWN0KTtcbiAgICBjb25zb2xlLmxvZygndGhpcy5jYWxsJywgdGhpcy5jYWxsKVxuICAgIGNvbnNvbGUubG9nKCd0aGlzLmNhbGwnLCB0aGlzLmNhbGwuc3RhdHVzKCkpXG4gICAgLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBhY3RpdmUgY2FsbFxuICAgIGlmICghdGhpcy5jYWxsIHx8IHRoaXMuY2FsbC5zdGF0dXMoKSAhPT0gJ29wZW4nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBhY3RpdmUgY2FsbCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgcGhvbmUgbnVtYmVyIGZyb20gdGhlIGNvbnRhY3RcbiAgICBjb25zdCBwaG9uZU51bWJlciA9IGNvbnRhY3Q/Lm51bWJlcnNMaXN0Py5bMF0/Lm51bWJlcjtcbiAgICBjb25zdCBjdXJyZW50Q2FsbCA9IHRoaXMuY3VycmVudENhbGxMaXN0LmZpbmQoKGM6IGFueSkgPT4gYz8ucGhvbmUgPT09IHBob25lTnVtYmVyKTtcbiAgICBpZiAoIXBob25lTnVtYmVyIHx8IGN1cnJlbnRDYWxsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdObyBwaG9uZSBudW1iZXIgZm91bmQgZm9yIGNvbnRhY3QnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYodGhpcy5pc0NvbmZlcmVuY2Upe1xuICAgICAgICBsZXQgZGF0YTphbnkgPSBhd2FpdCB0aGlzLmFkZFBhcnRpY2lwYW50VG9DYWxsKHtcbiAgICAgICAgICBmcm9tOiB0aGlzLmNhbGxEYXRhPy5mcm9tIHx8IHRoaXMuc2VsZWN0ZWRDYWxsZXJJZD8ubnVtYmVyLFxuICAgICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXG4gICAgICAgICAgcGFydGljaXBhbnROdW1iZXI6IHBob25lTnVtYmVyLFxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWRcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgICAgICAgLy8gLi4udGhpcy5jYWxsRGF0YSxcbiAgICAgICAgICBwaG9uZTogcGhvbmVOdW1iZXIsXG4gICAgICAgICAgZGlzcGxheU51bTogcGhvbmVOdW1iZXIsXG4gICAgICAgICAgbmFtZTogY29udGFjdD8ubmFtZSB8fCBgJHtjb250YWN0Py5maXJzdE5hbWV9ICR7Y29udGFjdD8ubGFzdE5hbWV9YCB8fCBwaG9uZU51bWJlcixcbiAgICAgICAgICBpbWc6IGNvbnRhY3Q/LmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZycsXG4gICAgICAgICAgcGFydGljaXBhbnRJZDogZGF0YT8ucGFydGljaXBhbnRJZCxcbiAgICAgICAgICBmcm9tOiB0aGlzLnNlbGVjdGVkQ2FsbGVySWQ/Lm51bWJlcixcbiAgICAgICAgICBpc0luY29taW5nQ2FsbDogZmFsc2UsXG4gICAgICAgICAgaXNIb2xkOiBmYWxzZSxcbiAgICAgICAgICBpc0xlZnQ6IGZhbHNlLFxuICAgICAgICAgIGlzQ29uZmVyZW5jZTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbERhdGEsICd0aGlzLmNhbGxEYXRhNTY1NicpXG4gICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MTExMTExNTU1NTU1NTU1NScpO1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jYWxsRGF0YTtcbiAgICAgICAgdGhpcy5jdXJyZW50Q2FsbExpc3QucHVzaCh7Li4udGhpcy5jYWxsRGF0YX0pO1xuICAgICAgICBjb25zb2xlLmxvZyhcIlBhcnRpY2lwYW50IGFkZGVkIHRvIGNvbmZlcmVuY2U6XCIsIHBob25lTnVtYmVyKTtcbiAgICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xuICAgICAgICBpZihjPy5wYXJ0aWNpcGFudElkICYmICFjPy5pc0hvbGQpe1xuICAgICAgICAgIGMuaXNIb2xkID0gdHJ1ZTtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxuICAgICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgICAgIGhvbGQ6IGM/LmlzSG9sZFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIC8vIFB1dCBjdXJyZW50IGNhbGwgb24gaG9sZFxuICAgICAgLy8gdGhpcy5oZWxkQ2FsbCA9IHRoaXMuY2FsbDtcbiAgICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gdHJ1ZTtcbiAgICAgIC8vIHRoaXMuaGVsZENhbGwubXV0ZSh0cnVlKTtcbiAgICAgIC8vIHRoaXMuaGVsZENhbGxbJ3BhcmFtZXRlcnMnXVsnY2FsbGVyX25hbWUnXSA9IHsgLi4udGhpcy5jYWxsRGF0YSB9XG4gICAgICAvLyB0aGlzLmNhbGw9bnVsbFxuICAgICAgLy8gQ2xvc2UgY29udGFjdHMgcGFuZWwgYW5kIHNob3cgcmluZyBhbmltYXRpb25cbiAgICAgIHRoaXMuc2hvd0NvbnRhY3RzUGFuZWwgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSB0cnVlO1xuICAgICAgLy8gVXBkYXRlIFVJIHRvIHJlZmxlY3QgdGhlIG5ldyBvdXRib3VuZCBsZWcgYmVpbmcgZGlhbGVkXG4gICAgICBjb25zdCBjb250YWN0TmFtZSA9IFtjb250YWN0Py5maXJzdE5hbWUsIGNvbnRhY3Q/Lm1pZGRsZU5hbWUsIGNvbnRhY3Q/Lmxhc3ROYW1lXVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5qb2luKCcgJyk7XG4gICAgICAvLyB0aGlzLmNhbGxbJ2NhbGxJbmZvJ10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2FsbERhdGEpKTtcbiAgICAgIFxuICAgICAgLy8gR2V0IHRoZSBjb25mZXJlbmNlIElEIGZyb20gdGhlIGN1cnJlbnQgY2FsbCBvciB1c2UgdGhlIHN0b3JlZCBvbmVcbiAgICAgIC8vIGNvbnN0IGNvbmZlcmVuY2VJZCA9IHRoaXMuY29uZmVyZW5jZUlkO1xuXG4gICAgICBpZiAoIXRoaXMuY29uZmVyZW5jZUlkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJObyBjb25mZXJlbmNlSWQgZm91bmQgZm9yIGFjdGl2ZSBjYWxsXCIpO1xuICAgICAgICBzd2FsKFwiRXJyb3JcIiwgXCJDYW5ub3QgYWRkIHBhcnRpY2lwYW50OiBjb25mZXJlbmNlIG5vdCBmb3VuZFwiLCBcImVycm9yXCIpO1xuICAgICAgICB0aGlzLnNob3dSaW5nQW5pbWF0aW9uID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHBhcnRpY2lwYW50IHRvIHRoZSBjb25mZXJlbmNlXG4gICAgICBsZXQgZGF0YTogYW55ID0gYXdhaXQgdGhpcy5hZGRQYXJ0aWNpcGFudFRvQ2FsbCh7XG4gICAgICAgIGZyb206IHRoaXMuY2FsbERhdGE/LmZyb20gfHwgdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXIsXG4gICAgICAgIHJvdXRlOiBcIk9VVEdPSU5HXCIsXG4gICAgICAgIHBhcnRpY2lwYW50TnVtYmVyOiBwaG9uZU51bWJlcixcbiAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZFxuICAgICAgfSk7XG5cbiAgICAgIC8vIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgICAvLyAgIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgICAvLyAgIHBhcnRpY2lwYW50SWQ6ICxcbiAgICAgIC8vIH1cbiAgICAgIHRoaXMuY2FsbERhdGEgPSB7XG4gICAgICAgIC8vIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgICAgIHBob25lOiBwaG9uZU51bWJlcixcbiAgICAgICAgZGlzcGxheU51bTogcGhvbmVOdW1iZXIsXG4gICAgICAgIG5hbWU6IGNvbnRhY3Q/Lm5hbWUgfHwgYCR7Y29udGFjdD8uZmlyc3ROYW1lfSAke2NvbnRhY3Q/Lmxhc3ROYW1lfWAgfHwgcGhvbmVOdW1iZXIsXG4gICAgICAgIGltZzogY29udGFjdD8uaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJyxcbiAgICAgICAgcGFydGljaXBhbnRJZDogZGF0YT8ucGFydGljaXBhbnRJZCxcbiAgICAgICAgZnJvbTogdGhpcy5zZWxlY3RlZENhbGxlcklkPy5udW1iZXIsXG4gICAgICAgIGlzSW5jb21pbmdDYWxsOiBmYWxzZSxcbiAgICAgICAgaXNIb2xkOiBmYWxzZSxcbiAgICAgICAgaXNMZWZ0OiBmYWxzZSxcbiAgICAgICAgaXNDb25mZXJlbmNlOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2FsbERhdGEsICd0aGlzLmNhbGxEYXRhJylcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCd0ZXN0MTExMTExJyk7XG4gICAgICB0aGlzLmN1cnJlbnRDYWxsID0gdGhpcy5jYWxsRGF0YTtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LnB1c2goey4uLnRoaXMuY2FsbERhdGF9KTtcbiAgICAgIGNvbnNvbGUubG9nKFwiUGFydGljaXBhbnQgYWRkZWQgdG8gY29uZmVyZW5jZTpcIiwgcGhvbmVOdW1iZXIpO1xuICAgICAgdGhpcy5zaG93UmluZ0FuaW1hdGlvbiA9IGZhbHNlO1xuICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIHBhcnRpY2lwYW50OicsIGVycm9yKTtcbiAgICAgIHRoaXMuc2hvd1JpbmdBbmltYXRpb24gPSBmYWxzZTtcbiAgICAgIC8vIFJlc3RvcmUgaGVsZCBjYWxsIG9uIGVycm9yXG4gICAgICBpZiAodGhpcy5oZWxkQ2FsbCkge1xuICAgICAgICAvLyB0aGlzLmNhbGwgPSB0aGlzLmhlbGRDYWxsO1xuICAgICAgICAvLyB0aGlzLmhlbGRDYWxsID0gdW5kZWZpbmVkO1xuICAgICAgICAvLyB0aGlzLmlzQ2FsbE9uSG9sZCA9IGZhbHNlO1xuICAgICAgICAvLyB0aGlzLmNhbGwubXV0ZShmYWxzZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBnZXRBbGxQYXJ0aWNpcGFudHMoY29uZmVyZW5jZVNpZDogc3RyaW5nKSB7XG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldEFsbFBhcnRpY2lwYW50cyhjb25mZXJlbmNlU2lkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICB0aGlzLmFsbFBhcnRpY2lwZW50TGlzdCA9IHJlcy5wYXJ0aWNpcGFudHM7XG4gICAgfSlcbiAgfVxuXG4gIC8vIGFjY2VwdENvbmN1cnJlbnRDYWxsKGluY29taW5nQ2FsbDogYW55KSB7XG4gIC8vICAgaWYgKCFpbmNvbWluZ0NhbGwpIHJldHVybjtcblxuICAvLyAgIC8vIFB1dCBjdXJyZW50IGNhbGwgb24gaG9sZCBpbnN0ZWFkIG9mIGRpc2Nvbm5lY3RpbmdcbiAgLy8gICBpZiAodGhpcy5jYWxsKSB7XG4gIC8vICAgICB0aGlzLmhlbGRDYWxsID0gdGhpcy5jYWxsO1xuICAvLyAgICAgdGhpcy5pc0NhbGxPbkhvbGQgPSB0cnVlO1xuICAvLyAgICAgLy8gTXV0ZSB0aGUgaGVsZCBjYWxsXG4gIC8vICAgICB0aGlzLmhlbGRDYWxsLm11dGUodHJ1ZSk7XG4gIC8vICAgfVxuXG4gIC8vICAgaW5jb21pbmdDYWxsLmFjY2VwdCgpO1xuICAvLyAgIHRoaXMuY2FsbCA9IGluY29taW5nQ2FsbDtcbiAgLy8gICB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgLy8gICB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nO1xuICAvLyAgIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gIC8vICAgdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAvLyAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XG4gIC8vICAgdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xuXG4gIC8vICAgLy8gUmVzZXQgdGltZXIgZm9yIG5ldyBjYWxsXG4gIC8vICAgdGhpcy5zdG9wVGltZXIoKTtcbiAgLy8gICB0aGlzLnN0YXJ0VGltZXIoKTtcbiAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIC8vIH1cblxuXG4gIGFjY2VwdENvbmN1cnJlbnRDYWxsKGluY29taW5nQ2FsbDogYW55KSB7XG4gICAgaWYgKCFpbmNvbWluZ0NhbGwpIHJldHVybjtcblxuXG4gICAgLy8gUHV0IGN1cnJlbnQgY2FsbCBvbiBob2xkIGluc3RlYWQgb2YgZGlzY29ubmVjdGluZ1xuICAgIC8vIGlmICh0aGlzLmNhbGwpIHtcbiAgICAvLyAvLyAgIHRoaXMuaGVsZENhbGwgPSB0aGlzLmNhbGw7XG4gICAgLy8gICB0aGlzLmlzQ2FsbE9uSG9sZCA9IHRydWU7XG4gICAgLy8gLy8gICAvLyBNdXRlIHRoZSBoZWxkIGNhbGxcbiAgICAvLyAvLyAgIHRoaXMuaGVsZENhbGwubXV0ZSh0cnVlKTtcbiAgICAvLyAvLyB9XG5cbiAgICAvLyAvLyBBY2NlcHQgdGhlIG5ldyBjYWxsXG4gICAgLy8gaW5jb21pbmdDYWxsLmFjY2VwdCgpO1xuICAgIC8vIHRoaXMuY2FsbCA9IGluY29taW5nQ2FsbDtcbiAgICAvLyB0aGlzLmNhbGxEYXRhLnBob25lID0gaW5jb21pbmdDYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICAvLyB0aGlzLmNhbGxEYXRhLm5hbWUgPSBpbmNvbWluZ0NhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nO1xuICAgIC8vIHRoaXMuY2FsbERhdGEuaW1nID0gaW5jb21pbmdDYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnaW1hZ2UnKSB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZyc7XG4gICAgLy8gdGhpcy5pc0NvbmN1cnJlbnRJbmNvbWluZyA9IGZhbHNlO1xuICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XG4gICAgLy8gdGhpcy5kaXNiYWxlRW5kQ2FsbEJ0biA9IGZhbHNlO1xuXG4gICAgLy8gLy8g8J+foiBSZW1vdmUgdGhlIGFjY2VwdGVkIGNhbGwgZnJvbSBpbmNvbWluZyBsaXN0XG4gICAgLy8gdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCA9ICh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0IHx8IFtdKS5maWx0ZXIoXG4gICAgLy8gICAoYzogYW55KSA9PiBjPy5wYXJhbWV0ZXJzPy5DYWxsU2lkICE9PSBpbmNvbWluZ0NhbGw/LnBhcmFtZXRlcnM/LkNhbGxTaWRcbiAgICAvLyApO1xuICAgIC8vIHRoaXMuaW5jb21pbmdDYWxsc05ld0luZm8uZW1pdCh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0KTtcblxuICAgIC8vIC8vIPCflZIgUmVzZXQgdGltZXIgZm9yIG5ldyBjYWxsXG4gICAgLy8gdGhpcy5zdG9wVGltZXIoKTtcbiAgICAvLyB0aGlzLnN0YXJ0VGltZXIoKTtcblxuICAgIC8vIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIHN3YXBDYWxscyhjYWxsSW5mbzogYW55KSB7XG4gICAgLy8gaWYgKCF0aGlzLmhlbGRDYWxsIHx8ICF0aGlzLmNhbGwpIHJldHVybjtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmNhbGwsICd0aGlzLmNhbGwnKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmhlbGRDYWxsLCAndGhpcy5oZWxkQ2FsbCcpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudENhbGxMaXN0LCAndGhpcy5jdXJyZW50Q2FsbExpc3QnKTtcbiAgICBjb25zb2xlLmxvZyhjYWxsSW5mbywgJ2NhbGxJbmZvIGZvciBzd2FwQ2FsbHMnKTtcbiAgICB0aGlzLmN1cnJlbnRDYWxsTGlzdC5mb3JFYWNoKGFzeW5jIChjOiBhbnkpID0+IHtcbiAgICAgIGlmKGM/LnBhcnRpY2lwYW50SWQgJiYgIWM/LmlzSG9sZCl7XG4gICAgICAgIGMuaXNIb2xkID0gdHJ1ZTtcbiAgICAgICAgYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAgICAgICBwYXJ0aWNpcGFudElkOiBbYz8ucGFydGljaXBhbnRJZF0sXG4gICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgICBob2xkOiBjPy5pc0hvbGRcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYoY2FsbEluZm8/LmlzSG9sZCAmJiBjPy5wYXJ0aWNpcGFudElkID09PSBjYWxsSW5mbz8ucGFydGljaXBhbnRJZCl7XG4gICAgICAgIGMuaXNIb2xkID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IHRoaXMub25ob2xkT3JVbmhvbGRQYXJ0aWNpcGFudCh7XG4gICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxuICAgICAgICAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgICAgICAgaG9sZDogYz8uaXNIb2xkXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmN1cnJlbnRDYWxsID0gYztcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgIC8vICAgcGFydGljaXBhbnRJZDogdGhpcy5jYWxsPy5jYWxsSW5mbz8ucGFydGljaXBhbnRJZCxcbiAgICAvLyAgIGNvbmZlcmVuY2VJZDogdGhpcy5jb25mZXJlbmNlSWQsXG4gICAgLy8gICBob2xkOiB0cnVlXG4gICAgLy8gfSk7XG4gICAgLy8gYXdhaXQgdGhpcy5vbmhvbGRPclVuaG9sZFBhcnRpY2lwYW50KHtcbiAgICAvLyAgIHBhcnRpY2lwYW50SWQ6IHRoaXMuaGVsZENhbGw/LmNhbGxJbmZvPy5wYXJ0aWNpcGFudElkLFxuICAgIC8vICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAvLyAgIGhvbGQ6IGZhbHNlXG4gICAgLy8gfSk7XG4gICAgY29uc29sZS5sb2coJ1N3YXBwaW5nIGNhbGxzLi4uJyk7XG4gICAgY29uc29sZS5sb2coJ0JlZm9yZSBzd2FwIC0gQWN0aXZlIGNhbGw6JywgdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG4gICAgY29uc29sZS5sb2coJ0JlZm9yZSBzd2FwIC0gSGVsZCBjYWxsOicsIHRoaXMuaGVsZENhbGwucGFyYW1ldGVyc1snRnJvbSddKTtcblxuICAgIC8vIFN3YXAgdGhlIGNhbGxzXG4gICAgLy8gY29uc3QgdGVtcCA9IHRoaXMuY2FsbDtcbiAgICAvLyB0aGlzLmNhbGwgPSB0aGlzLmhlbGRDYWxsO1xuICAgIC8vIHRoaXMuaGVsZENhbGwgPSB0ZW1wO1xuXG5cbiAgICAvLyB0aGlzLmNhbGwubXV0ZShmYWxzZSk7XG4gICAgLy8gdGhpcy5oZWxkQ2FsbC5tdXRlKHRydWUpO1xuXG4gICAgLy8gVXBkYXRlIFVJIHdpdGggYWN0aXZlIGNhbGwgaW5mbyAtIGV4dHJhY3QgZnJvbSBjYWxsIHBhcmFtZXRlcnNcbiAgICBjb25zdCBmcm9tTnVtYmVyID0gdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXTtcbiAgICBjb25zdCBjYWxsZXJOYW1lID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnbmFtZScpIHx8ICctJztcbiAgICBjb25zdCBjYWxsZXJJbWcgPSB0aGlzLmNhbGwuY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCdpbWFnZScpIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJztcbiAgICBjb25zdCBkaXNwbGF5TnVtYmVyID0gdGhpcy5jYWxsLmN1c3RvbVBhcmFtZXRlcnM/LmdldCgnZGlzcGxheU51bWJlcicpIHx8ICctJztcblxuICAgIC8vIFVwZGF0ZSBjYWxsRGF0YSB0byByZWZyZXNoIHRoZSBtYWluIFVJXG4gICAgLy8gdGhpcy5jYWxsRGF0YSA9IHtcbiAgICAvLyAgIC4uLnRoaXMuY2FsbERhdGEsXG4gICAgLy8gICBwaG9uZTogZnJvbU51bWJlcixcbiAgICAvLyAgIGRpc3BsYXlOdW06IChkaXNwbGF5TnVtYmVyICYmIGRpc3BsYXlOdW1iZXIgIT09ICctJykgPyBkaXNwbGF5TnVtYmVyIDogZnJvbU51bWJlcixcbiAgICAvLyAgIG5hbWU6IChjYWxsZXJOYW1lICYmIGNhbGxlck5hbWUgIT09ICctJykgPyBjYWxsZXJOYW1lIDogKHRoaXMuY2FsbERhdGE/Lm5hbWUgfHwgZnJvbU51bWJlciksXG4gICAgLy8gICBpbWc6IGNhbGxlckltZyB8fCB0aGlzLmNhbGxEYXRhPy5pbWcgfHwgJ2Fzc2V0cy9pbWFnZXMvdXNlci5qcGcnXG4gICAgLy8gfTtcblxuICAgIC8vIGNvbnNvbGUubG9nKCdBZnRlciBzd2FwIC0gQWN0aXZlIGNhbGw6JywgdGhpcy5jYWxsLnBhcmFtZXRlcnNbJ0Zyb20nXSk7XG4gICAgLy8gY29uc29sZS5sb2coJ0FmdGVyIHN3YXAgLSBIZWxkIGNhbGw6JywgdGhpcy5oZWxkQ2FsbC5wYXJhbWV0ZXJzWydGcm9tJ10pO1xuICAgIC8vIGNvbnNvbGUubG9nKCdVcGRhdGVkIGNhbGxEYXRhOicsIHRoaXMuY2FsbERhdGEpO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmN1cnJlbnRDYWxsTGlzdCBhZnRlciBzd2FwJywgdGhpcy5jdXJyZW50Q2FsbExpc3QpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGFzeW5jIG1lcmdlQ2FsbHMoKSB7XG4gICAgLy8gTWVyZ2UgZnVuY3Rpb25hbGl0eSAtIHVubXV0ZSBib3RoIGNhbGxzIGZvciBjb25mZXJlbmNlXG4gICAgaWYgKHRoaXMuY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudENhbGxMaXN0LmZvckVhY2goYXN5bmMgKGM6IGFueSkgPT4ge1xuICAgICAgICBpZihjPy5wYXJ0aWNpcGFudElkICYmIGM/LmlzSG9sZCl7XG4gICAgICAgICAgYy5pc0hvbGQgPSBmYWxzZTtcbiAgICAgICAgICBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgICAgICAgcGFydGljaXBhbnRJZDogW2M/LnBhcnRpY2lwYW50SWRdLFxuICAgICAgICAgICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgICAgICAgIGhvbGQ6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgYy5pc0NvbmZlcmVuY2UgPSB0cnVlO1xuICAgICAgfSk7XG4gICAgICAvLyBhd2FpdCB0aGlzLm9uaG9sZE9yVW5ob2xkUGFydGljaXBhbnQoe1xuICAgICAgLy8gICBwYXJ0aWNpcGFudElkOiB0aGlzLmhlbGRDYWxsPy5jYWxsSW5mbz8ucGFydGljaXBhbnRJZCxcbiAgICAgIC8vICAgY29uZmVyZW5jZUlkOiB0aGlzLmNvbmZlcmVuY2VJZCxcbiAgICAgIC8vICAgaG9sZDogZmFsc2VcbiAgICAgIC8vIH0pO1xuICAgICAgLy8gdGhpcy5oZWxkQ2FsbC5tdXRlKGZhbHNlKTtcbiAgICAgIC8vIHRoaXMuY2FsbC5tdXRlKGZhbHNlKTtcbiAgICAgIHRoaXMuaXNDYWxsT25Ib2xkID0gZmFsc2U7XG4gICAgICB0aGlzLmlzQ29uZmVyZW5jZSA9IHRydWU7XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgZW5kSGVsZENhbGwoKSB7XG4gICAgLy8gaWYgKHRoaXMuaGVsZENhbGwpIHtcbiAgICAvLyAgIHRoaXMuaGVsZENhbGwuZGlzY29ubmVjdCgpO1xuICAgIC8vICAgdGhpcy5oZWxkQ2FsbCA9IHVuZGVmaW5lZDtcbiAgICAvLyAgIHRoaXMuaXNDYWxsT25Ib2xkID0gZmFsc2U7XG4gICAgLy8gICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgLy8gfVxuICB9XG5cblxuICBoYXNEZXRhaWxlZEluZm8oY2FsbERhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghY2FsbERhdGEpIHJldHVybiBmYWxzZTtcbiAgICBcbiAgICAvLyBDaGVjayBpZiB1c2VySW5mbyBleGlzdHMgYW5kIGhhcyBtZWFuaW5nZnVsIGRhdGFcbiAgICBpZiAoY2FsbERhdGEudXNlckluZm8gJiYgY2FsbERhdGEudXNlckluZm8uYzJjSW5mb3JtYXRpb24pIHtcbiAgICAgICAgY29uc3QgaW5mbyA9IGNhbGxEYXRhLnVzZXJJbmZvLmMyY0luZm9ybWF0aW9uO1xuICAgICAgICByZXR1cm4gISEoXG4gICAgICAgICAgICBpbmZvLnN1YmplY3QgJiYgaW5mby5zdWJqZWN0ICE9PSAnLScgfHxcbiAgICAgICAgICAgIGluZm8uZW1haWwgJiYgaW5mby5lbWFpbCAhPT0gJy0nIHx8XG4gICAgICAgICAgICBpbmZvLm1lc3NhZ2UgJiYgaW5mby5tZXNzYWdlICE9PSAnLScgfHxcbiAgICAgICAgICAgIGluZm8ucG9pbnROYW1lICYmIGluZm8ucG9pbnROYW1lICE9PSAnLScgfHxcbiAgICAgICAgICAgIGluZm8uc291cmNlTmFtZSAmJiBpbmZvLnNvdXJjZU5hbWUgIT09ICctJyB8fFxuICAgICAgICAgICAgaW5mby5leHRlbnNpb24gJiYgaW5mby5leHRlbnNpb24gIT09ICctJyB8fFxuICAgICAgICAgICAgaW5mby51cmwgfHxcbiAgICAgICAgICAgIGluZm8ubGF0aXR1ZGUgfHxcbiAgICAgICAgICAgIGluZm8ubG9uZ2l0dWRlXG4gICAgICAgICk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIG9uQ2xpY2tFeHBhbmQoZGF0YT86IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsID09PSBkYXRhICYmIHRoaXMuaXNDbGlja0V4cGFuZCkge1xuICAgICAgICB0aGlzLmlzQ2xpY2tFeHBhbmQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCA9IG51bGw7XG4gICAgICAgIC8vIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGxJbmZvLmVtaXQoe30pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNDbGlja0V4cGFuZCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCA9IGRhdGE7XG4gICAgXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbFsnaXNDbGlja0V4cGFuZCddID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIGlmICh0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0ICYmIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdC5mb3JFYWNoKChjYWxsOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbCAhPT0gdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsWydpc0NsaWNrRXhwYW5kJ10gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gdGhpcy5zZWxlY3RlZEluY29taW5nQ2FsbEluZm8uZW1pdCh0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCF0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsLnVzZXJJbmZvIHx8IHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwudXNlckluZm8uc3RhdHVzID09IDIwMSl7XG4gICAgICAgICAgICAvLyB0aGlzLmdldFVzZXJJbmZvcm1hdGlvbih0aGlzLnNlbGVjdGVkSW5jb21pbmdDYWxsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIGdldFVzZXJJbmZvcm1hdGlvbihpbmNvbWluZ0NhbGxEYXRhOiBhbnkpIHtcbiAgLy8gICBsZXQgZGF0YSA9IHRoaXMuZnJvbUVudHJpZXMoQXJyYXkuZnJvbShpbmNvbWluZ0NhbGxEYXRhLmN1c3RvbVBhcmFtZXRlcnMuZW50cmllcygpKSk7XG4gIC8vICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFVzZXJJbmZvcm1hdGlvbihkYXRhWyd0d2lsaW9BdXRoSWQnXSkuc3Vic2NyaWJlKFxuICAvLyAgIHJlc3BvbnNlID0+IHtcbiAgLy8gICAgIHNldFRpbWVvdXQoKCk9PntcbiAgLy8gICAgICAgaW5jb21pbmdDYWxsRGF0YVsndXNlckluZm8nXT1yZXNwb25zZVxuICAvLyAgICAgfSwgNTAwMClcbiAgLy8gICB9LCBlcnJvciA9PiB7XG4gIC8vICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XG4gIC8vICAgfSk7XG4gIC8vIH1cblxuICByZWplY3RDb25jdXJyZW50Q2FsbChpbmNvbWluZ0NhbGw6IGFueSkge1xuXG4gICAgaWYgKCFpbmNvbWluZ0NhbGwpIHJldHVybjtcbiAgICBpZiAoaW5jb21pbmdDYWxsLnJlamVjdCkge1xuICAgICAgaW5jb21pbmdDYWxsLnJlamVjdCgpO1xuICAgIH1cbiAgICBpZiAoaW5jb21pbmdDYWxsLmRpc2Nvbm5lY3QpIGluY29taW5nQ2FsbC5kaXNjb25uZWN0KCk7XG4gICAgLy8gUmVtb3ZlIGZyb20gbGlzdFxuICAgIHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QgPSAodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCB8fCBbXSkuZmlsdGVyKChjOiBhbnkpID0+IGM/LnBhcmFtZXRlcnM/LkNhbGxTaWQgIT09IGluY29taW5nQ2FsbD8ucGFyYW1ldGVycz8uQ2FsbFNpZCk7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxzTmV3SW5mby5lbWl0KHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QpO1xuICAgIC8vIElmIG5vIG1vcmUgaW5jb21pbmcsIGhpZGUgYmFubmVyXG4gICAgaWYgKCF0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0IHx8IHRoaXMubmV3SW5jb21pbmdDYWxsc0xpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuICAgIH1cbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgb25DYWxsSW5wdXRzKG51bTogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChOdW1iZXIuaXNJbnRlZ2VyKG51bSkgfHwgbnVtID09ICcrJyB8fCBudW0gPT0gJyonIHx8IG51bSA9PSAnIycpIHtcbiAgICAgICAgaWYgKG51bSA9PSAnIycpIHtcbiAgICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtaGFzaC0ubXAzYCkucGxheSgpO1xuICAgICAgICB9IGVsc2UgaWYgKG51bSA9PSAnKicpIHtcbiAgICAgICAgICBuZXcgQXVkaW8oYC9hc3NldHMvZGlhbC10b25lcy9kdG1mL2R0bWYtc3Rhci0ubXAzYCkucGxheSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ldyBBdWRpbyhgL2Fzc2V0cy9kaWFsLXRvbmVzL2R0bWYvZHRtZi0ke251bX0tLm1wM2ApLnBsYXkoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbElucHV0ID0gdGhpcy5jYWxsSW5wdXQgKyBTdHJpbmcobnVtKTtcbiAgICAgICAgdGhpcy5zaG93Q2xlYXJCdG4gPSB0cnVlO1xuICAgICAgfVxuICAgICAgbGV0IHN0ciA9IFN0cmluZyhudW0pO1xuICAgICAgdGhpcy5jYWxsPy5zZW5kRGlnaXRzKHN0cik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY29uc29sZS5sb2coZSk7XG4gICAgfVxuICB9XG4gIG9uQ2FsbElucHV0RW50ZXIoZXY6IGFueSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmNhbGw/LnNlbmREaWdpdHMoU3RyaW5nKGV2LmtleSkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cbiAgfVxuICBjbG9zZUluY29taW5nQ2FsbChkYXRhOiBhbnkpIHtcbiAgICAvLyB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuICAgIGlmIChkYXRhLnNob3cpIHtcbiAgICAgIC8vdGhpcy5zaG93Q2FsbFByb2dyZXNzRXZlbnQuZW1pdCgpXG4gICAgICAvLyBoYW5kbGUgaW5jb21pbmcgY2FsbCBhY2NlcHRlZFxuICAgICAgdGhpcy5zdGFydFRpbWVyKCk7XG4gICAgICB0aGlzLmRpc2JhbGVFbmRDYWxsQnRuID0gZmFsc2U7XG4gICAgICB0aGlzLmNhbGwgPSBkYXRhLmNhbGw7XG4gICAgICB0aGlzLmlzQ29uY3VycmVudEluY29taW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmluY29taW5nQ2FsbERpdiA9IGZhbHNlO1xuXG4gICAgICBjb25zdCBpbmNvbWluZ0RldGFpbCA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XG4gICAgICB0aGlzLmluY29taW5nUmVjb3JkQ2FsbCA9IGluY29taW5nRGV0YWlsLnJlY29yZENhbGw7XG5cbiAgICAgIGlmICh0aGlzLmluY29taW5nUmVjb3JkQ2FsbCkge1xuICAgICAgICB0aGlzLnN0YXJ0UmVjb3JkaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzUmVjb3JkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluY29taW5nIGNhbGwgcmVqZWN0ZWQgb3IgYXV0by1jYW5jZWxsZWRcbiAgICAgIHRoaXMuaXNDb25jdXJyZW50SW5jb21pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5jb21pbmdDYWxsRGl2ID0gZmFsc2U7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBOTyBhY3RpdmUgY2FsbCwgdGhlbiBwcm9wYWdhdGUgZW5kLiBPdGhlcndpc2Uga2VlcCBvbmdvaW5nIFVJLlxuICAgICAgaWYgKCF0aGlzLmNhbGwgfHwgdGhpcy5jYWxsLnN0YXR1cygpICE9PSAnb3BlbicpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ3Rlc3Q3JylcbiAgICAgICAgdGhpcy5lbmRDYWxsRXZlbnQuZW1pdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBjbGVhcklucHV0cygpIHtcbiAgICB0aGlzLmNhbGxJbnB1dCA9IHRoaXMuY2FsbElucHV0LnNsaWNlKDAsIC0xKTtcbiAgfVxuICBpc01pbmltaXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBtaW5pbWlzZURpYWxwYWQoKSB7XG4gICAgdGhpcy5taW5pbWlzZUV2ZW50LmVtaXQodHJ1ZSk7XG4gICAgdGhpcy5pc01pbmltaXNlZCA9IHRydWU7XG4gIH1cbiAgbWF4aW1pc2VEaWFscGFkKCkge1xuICAgIHRoaXMubWluaW1pc2VFdmVudC5lbWl0KGZhbHNlKTtcbiAgICB0aGlzLmlzTWluaW1pc2VkID0gZmFsc2U7XG4gIH1cbiAgdG9nZ2xlUmVjb3JkaW5nKCkge1xuICAgIGlmICh0aGlzLmlzUmVjb3JkaW5nKSB7XG4gICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xuICAgIH1cbiAgfVxuICBzdGFydFJlY29yZGluZygpIHtcbiAgICBsZXQgc2lkO1xuICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFNpZCgpO1xuICAgIHRoaXMuaW5jb21pbmdDYWxsU2lkID0gZGV0YWlscy5jYWxsU2lkO1xuICAgIHRoaXMuaW5jb21pbmdSZWNvcmRDYWxsID0gZGV0YWlscy5yZWNvcmRDYWxsO1xuICAgIHNpZCA9IHRoaXMuaW5jb21pbmdDYWxsU2lkID8gdGhpcy5pbmNvbWluZ0NhbGxTaWQgOiB0aGlzLmNhbGxTaWQgfHwgdGhpcy5hZGRSZXM/LmNvbmZlcmVuY2VTaWQ7XG5cbiAgICAvLyBpZiAoIXRoaXMuaW5jb21pbmdSZWNvcmRDYWxsICYmICF0aGlzLnJlY29yZENhbGwpIHtcbiAgICAvLyAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxSZWNvcmRpbmcoc2lkKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5pc1JlY29yZGluZyA9IHRydWU7XG4gICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgICB0aGlzLnRpbWVFbGFwc2VkID0gMDtcbiAgICAgIHRoaXMuc3RhcnRUaW1lcjEoKTtcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzdGFydGluZyByZWNvcmRpbmcnLCBlcnJvcik7XG4gICAgfSk7XG4gIH1cbiAgc3RvcFJlY29yZGluZygpIHtcbiAgICAvLyBpZiAoIXRoaXMuaW5jb21pbmdSZWNvcmRDYWxsICYmICF0aGlzLnJlY29yZENhbGwpIHtcbiAgICAvLyAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgdGhpcy5pc1JlY29yZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICBpZiAodGhpcy50aW1lclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy50aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuICBwYXVzZVJlY29yZGluZygpIHtcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldENhbGxTaWQoKTtcbiAgICB0aGlzLmluY29taW5nQ2FsbFNpZCA9IGRldGFpbHMuY2FsbFNpZDtcbiAgICB0aGlzLmluY29taW5nUmVjb3JkQ2FsbCA9IGRldGFpbHMucmVjb3JkQ2FsbDtcbiAgICBjb25zdCBzaWQgPSB0aGlzLmluY29taW5nQ2FsbFNpZCA/IHRoaXMuaW5jb21pbmdDYWxsU2lkIDogdGhpcy5jYWxsU2lkO1xuXG4gICAgLy8gaWYgKCF0aGlzLmluY29taW5nUmVjb3JkQ2FsbCAmJiAhdGhpcy5yZWNvcmRDYWxsKSB7XG4gICAgLy8gICByZXR1cm47XG4gICAgLy8gfVxuXG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLnBhdXNlT3JSZXN1bWVSZWNvcmRpbmcoc2lkLCAncGF1c2UnKS5zdWJzY3JpYmUoXG4gICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcFJlY29yZGluZ1RpbWVyKCk7XG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgfSxcbiAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXVzaW5nIHJlY29yZGluZzonLCBlcnJvcik7XG4gICAgICAgIC8vIENvbnNpZGVyIHVwZGF0aW5nIHRoZSBVSSB0byBzaG93IHRoZSBlcnJvciBzdGF0ZVxuICAgICAgfVxuICAgICk7XG4gIH1cbiAgcmVzdW1lUmVjb3JkaW5nKCkge1xuICAgIGxldCBzaWQ7XG4gICAgY29uc3QgZGV0YWlscyA9IHRoaXMuZXh0ZW5zaW9uU2VydmljZS5nZXRDYWxsU2lkKCk7XG4gICAgdGhpcy5pbmNvbWluZ0NhbGxTaWQgPSBkZXRhaWxzLmNhbGxTaWQ7XG4gICAgdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgPSBkZXRhaWxzLnJlY29yZENhbGw7XG4gICAgc2lkID0gdGhpcy5pbmNvbWluZ0NhbGxTaWQgPyB0aGlzLmluY29taW5nQ2FsbFNpZCA6IHRoaXMuY2FsbFNpZDtcblxuICAgIC8vIGlmICghdGhpcy5pbmNvbWluZ1JlY29yZENhbGwgJiYgIXRoaXMucmVjb3JkQ2FsbCkge1xuICAgIC8vICAgcmV0dXJuOyAvLyBTa2lwIGlmIHJlY29yZGluZyBpcyBub3QgZW5hYmxlZFxuICAgIC8vIH1cbiAgICB0aGlzLmV4dGVuc2lvblNlcnZpY2UucGF1c2VPclJlc3VtZVJlY29yZGluZyhzaWQsICdyZXN1bWUnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5pc1BhdXNlZCA9IGZhbHNlO1xuICAgICAgdGhpcy5zdGFydFRpbWVyMSgpO1xuICAgIH0sIGVycm9yID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHJlc3VtaW5nIHJlY29yZGluZycsIGVycm9yKTtcbiAgICB9KTtcbiAgfVxuICBzdGFydFRpbWVyMSgpIHtcbiAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uID0gaW50ZXJ2YWwoMTAwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMudGltZUVsYXBzZWQrKztcbiAgICB9KTtcbiAgfVxuICBzdG9wUmVjb3JkaW5nVGltZXIoKSB7XG4gICAgaWYgKHRoaXMudGltZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGltZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsgLy8gUGF1c2UgdGhlIHRpbWVyXG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkOyAgICAgICAgLy8gT3B0aW9uYWxseSByZXNldCB0aGUgc3Vic2NyaXB0aW9uXG4gICAgfVxuICB9XG4gIGdldEZvcm1hdHRlZFRpbWUoKSB7XG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IodGhpcy50aW1lRWxhcHNlZCAvIDYwKTtcbiAgICBjb25zdCBzZWNvbmRzID0gdGhpcy50aW1lRWxhcHNlZCAlIDYwO1xuICAgIHJldHVybiBgJHttaW51dGVzfToke3NlY29uZHMgPCAxMCA/ICcwJyA6ICcnfSR7c2Vjb25kc31gO1xuICB9XG4gIHBvbGxDYWxsU3RhdHVzKGNhbGxBdXRoSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IG1heFRpbWUgPSAzMDAwMDsgLy8gUG9sbCBmb3IgdXAgdG8gMzAgc2Vjb25kc1xuICAgIGNvbnN0IHBvbGxJbnRlcnZhbCA9IDMwMDA7IC8vIFBvbGwgZXZlcnkgMyBzZWNvbmRzXG4gICAgbGV0IGVsYXBzZWRUaW1lID0gMDtcbiAgICBjb25zdCBpbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoYXN5bmMgKCkgPT4ge1xuICAgICAgZWxhcHNlZFRpbWUgKz0gcG9sbEludGVydmFsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc3RhdHVzUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmV4dGVuc2lvblNlcnZpY2UuZ2V0Q2FsbFN0YXR1cyhjYWxsQXV0aElkKS50b1Byb21pc2UoKSBhcyBDYWxsU3RhdHVzUmVzcG9uc2U7XG4gICAgICAgIGlmIChzdGF0dXNSZXNwb25zZSAmJiBzdGF0dXNSZXNwb25zZS5jYWxsRGV0YWlscykge1xuICAgICAgICAgIHRoaXMuY2FsbFN0YXR1cyA9IHN0YXR1c1Jlc3BvbnNlLmNhbGxEZXRhaWxzLmNhbGxTdGF0dXM7XG4gICAgICAgICAgaWYgKHRoaXMuY2FsbFN0YXR1cyA9PT0gJ2luLXByb2dyZXNzJykge1xuICAgICAgICAgICAgdGhpcy5jYWxsU2lkID0gc3RhdHVzUmVzcG9uc2UuY2FsbERldGFpbHMuY2FsbFNpZDtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlY29yZENhbGwgJiYgIXRoaXMuaXNSZWNvcmRpbmcpIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGFydFJlY29yZGluZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FsbFN0YXR1cyA9PT0gJ2NvbXBsZXRlZCcpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygndGVzdDEnKVxuICAgICAgICAgICAgdGhpcy5lbmRDYWxsKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3BSZWNvcmRpbmcoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2FsbFN0YXR1cyA9PT0gJ3JpbmdpbmcnKSB7XG4gICAgICAgICAgICAvLyBDb250aW51ZSBwb2xsaW5nOyBkbyBub3QgY2xlYXIgdGhlIGludGVydmFsIHlldFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTtcbiAgICAgIH1cbiAgICAgIGlmIChlbGFwc2VkVGltZSA+PSBtYXhUaW1lKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdNYXggcG9sbGluZyB0aW1lIHJlYWNoZWQuIFN0b3BwaW5nIHBvbGwuJyk7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7XG4gICAgICB9XG4gICAgfSwgcG9sbEludGVydmFsKTtcbiAgfVxuXG4gIGdldFVzZXJJbmZvcm1hdGlvbihpZDogYW55KSB7XG4gICAgdGhpcy5leHRlbnNpb25TZXJ2aWNlLmdldFVzZXJJbmZvcm1hdGlvbihpZCkuc3Vic2NyaWJlKFxuICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSlcbiAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc3RhcnRpbmcgcmVjb3JkaW5nJywgZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cbiAgaW5jb21pbmdDYWxsc05ld0xpc3QoZGF0YTogYW55KSB7XG4gICAgY29uc29sZS5sb2coZGF0YSwgJ25ld0luY29taW5nQ2FsbHNMaXN0T1VSJylcbiAgICB0aGlzLm5ld0luY29taW5nQ2FsbHNMaXN0ID0gZGF0YTtcbiAgICB0aGlzLmluY29taW5nQ2FsbHNOZXdJbmZvLmVtaXQodGhpcy5uZXdJbmNvbWluZ0NhbGxzTGlzdCk7XG4gIH1cbiAgc2VsZWN0ZWRJbmNvbWluZ0NhbGxJbmZvKGRhdGE6IGFueSkge1xuICAgIHRoaXMuc2VsZWN0ZWRJbmNvbWluZ0NhbGwgPSBkYXRhO1xuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2FsbERhdGEuZGlhbCA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG59IiwiPGRpdiBjbGFzcz1cImNhbGwtY29udGFpbmVyXCIgKm5nSWY9XCIhaXNNaW5pbWlzZWRcIlxuICAgIFtuZ0NsYXNzXT1cInsnY29sbG9wcyc6IGlzQ29sbG9wcywgJ2luY29taW5nLWNhbGwtY29udGFpbmVyJzogc2VsZWN0ZWRJbmNvbWluZ0NhbGw/LmlzQ2xpY2tFeHBhbmQsICdjb250YWN0cy1vcGVuJzogc2hvd0NvbnRhY3RzUGFuZWwgfVwiPlxuICAgIDwhLS0gPGRpdiBpZD1cIm1pbmltaXplLWJ0bi1kaXZcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIG1pbmltaXplLWJ0blwiIChjbGljayk9XCJtaW5pbWlzZURpYWxwYWQoKVwiPlxuICAgICAgICAgICAgbWluaW1pemVcbiAgICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PiAtLT5cbiAgICA8IS0tIDxsaWItaW5jb21pbmctY2FsbCAqbmdJZj1cImluY29taW5nQ2FsbERpdiAmJiAhaXNDb25jdXJyZW50SW5jb21pbmdcIiBbaW5jb21pbmdDYWxsRGF0YV09XCJjYWxsRGF0YVwiXG4gICAgICAgIFtkZXZpY2VJZF09XCJkZXZpY2VJZFwiIFtuZXdJbmNvbWluZ0NhbGxzTGlzdF09XCJuZXdJbmNvbWluZ0NhbGxzTGlzdFwiXG4gICAgICAgIChjbG9zZUluY29taW5nQ2FsbERpdik9XCJjbG9zZUluY29taW5nQ2FsbCgkZXZlbnQpXCIgKGluY29taW5nQ2FsbHNOZXdMaXN0KT1cImluY29taW5nQ2FsbHNOZXdMaXN0KCRldmVudClcIlxuICAgICAgICAoc2VsZWN0ZWRJbmNvbWluZ0NhbGxJbmZvKT1cInNlbGVjdGVkSW5jb21pbmdDYWxsSW5mbygkZXZlbnQpXCI+PC9saWItaW5jb21pbmctY2FsbD4gLS0+XG4gICAge3tjdXJyZW50Q2FsbExpc3QubGVuZ3RoIH19dHR0dHR0dHR0dHR0dHR0dHR0dHRcbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWluY29taW5nQ2FsbERpdiB8fCBpc0NvbmN1cnJlbnRJbmNvbWluZyB8fCB0cnVlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtYmFubmVyXCIgKm5nSWY9XCJpc0NhbGxPbkhvbGQgJiYgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhlbGRDYWxsIG9mIGN1cnJlbnRDYWxsTGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWxkLWNhbGwtY29udGVudFwiICpuZ0lmPVwiaGVsZENhbGw/LmlzSG9sZFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaG9sZC1pY29uXCI+cGF1c2VfY2lyY2xlPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+SG9sZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbmFtZVwiPnt7aGVsZENhbGw/Lm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1udW1iZXJcIj57e2hlbGRDYWxsPy5waG9uZSB8fCAnJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiaGVsZC1idG4gc3dhcC1idG5cIiAoY2xpY2spPVwic3dhcENhbGxzKGhlbGRDYWxsKVwiIHRpdGxlPVwiU3dhcCBjYWxsc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlN3YXA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbC1jb250ZW50XCIgKm5nSWY9XCJoZWxkQ2FsbD8uaXNJbmNvbWluZ0NhbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGhvbGQtaWNvblwiPnBob25lX2NhbGxiYWNrPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbGQtY2FsbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoZWxkLWxhYmVsXCI+SW5jb21pbmcgQ2FsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhlbGQtbmFtZVwiPnt7aGVsZENhbGw/Lm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaGVsZC1udW1iZXJcIj57e2hlbGRDYWxsPy5waG9uZSB8fCAnJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVsZC1hY3Rpb25zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4td3JhcHBlciByZWNlaXZlLWJ0blwiICpuZ0lmPVwiIWhlbGRDYWxsPy5pc0NhbGxDb25uZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwiYWRkKGhlbGRDYWxsKVwiPiBjYWxsIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuLXdyYXBwZXIgcmVjZWl2ZS1idG5cIiAqbmdJZj1cIiFoZWxkQ2FsbD8uaXNDYWxsQ29ubmVjdGVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGxfbWVyZ2UgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1idG4td3JhcHBlciByZWNlaXZlLWJ0blwiICpuZ0lmPVwiIWhlbGRDYWxsPy5pc0NhbGxDb25uZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gc3dhcF92ZXJ0IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuLXdyYXBwZXIgcmVqZWN0LWJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJyZWplY3RDYWxsRnJvbUxpc3QoaGVsZENhbGwpXCI+IGNhbGxfZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gQ29tcGFjdCBiYW5uZXJzIGZvciBjb25jdXJyZW50IGluY29taW5nIChvbmUgcGVyIGNhbGwpIC0tPlxuICAgICAgICAgY29uY3VycmVudCBpbmNvbWluZyAob25lIHBlciBjYWxsKXt7IWlzQ29uZmVyZW5jZX19K3t7Y3VycmVudENhbGxMaXN0Lmxlbmd0aH19XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDb25mZXJlbmNlICYmIGN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctYmFubmVycy1jb250YWluZXJcIiAqbmdJZj1cIiFpc0NvbmZlcmVuY2UgJiYgY3VycmVudENhbGxMaXN0Lmxlbmd0aCA+IDFcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgc3R5bGU9XCJwb3NpdGlvbjogYWJzb2x1dGU7d2lkdGg6IDEwMCU7dG9wOiAwcHg7XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGluYyBvZiBjdXJyZW50Q2FsbExpc3Q7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1iYW5uZXJcIiAqbmdJZj1cImluYz8uaXNJbmNvbWluZ0NhbGwgJiYgIWluYz8uaXNBY2NlcHRDYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IHRvcDogKChpc0NhbGxPbkhvbGQgJiYgaGVsZENhbGwpID8gNjQgOiAwKSArIChpICogNzApICsgJ3B4JyB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluY29taW5nLWJhbm5lci1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmNvbWluZy1pbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImluY29tIGluZy1sYWJlbFwiPkluY29taW5nIGNhbGw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctY2FsbGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYWxsZXItbmFtZVwiPnt7IGluYz8udXNlckluZm8/LmMyY0luZm9ybWF0aW9uPy5uYW1lIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYz8uY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCduYW1lJykgfHwgJy0nIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FsbGVyLW51bWJlclwiPnt7IGluYz8udXNlckluZm8/LmMyY0luZm9ybWF0aW9uPy5udW1iZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jPy5wYXJhbWV0ZXJzPy5Gcm9tIHx8ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5jb21pbmctYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJhbm5lci1idG4gYWNjZXB0LWJ0blwiIChjbGljayk9XCJhZGQoaW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmNhbGw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJiYW5uZXItYnRuIHJlamVjdC1idG5cIiAoY2xpY2spPVwicmVqZWN0Q29uY3VycmVudENhbGwoaW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPmNhbGxfZW5kPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gRm9yIHNpbmdsZSBpbmNvbWluZyBjYWxsIC0tPlxuICAgICAgICAgc2luZ2xlIGluY29taW5nIGNhbGx7e2N1cnJlbnRDYWxsTGlzdC5sZW5ndGggPT09IDEgfX0tLS0tLS17eyBjdXJyZW50Q2FsbExpc3RbMF0/LmlzSW5jb21pbmdDYWxsfX0tLS0te3sgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsfX1cbiAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAwIG15LTVcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XCIgKm5nSWY9XCJjdXJyZW50Q2FsbExpc3QubGVuZ3RoID09PSAxICYmIGN1cnJlbnRDYWxsTGlzdFswXT8uaXNJbmNvbWluZ0NhbGwgJiYgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbFRvTnVtXCI+SW5jb21pbmcgY2FsbCBvbiA8YnIgLz48c3Bhbj57e2N1cnJlbnRDYWxsTGlzdFswXT8ucGhvbmUgfHwgJ1Vua25vd24gTnVtYmVyJ319PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hbmltYXRpb25cIiBbbmdDbGFzc109XCJ7J2NhbGwtYW5pbWF0aW9uLXBsYXknOiBzaG93UmluZ0FuaW1hdGlvbn1cIj5cbiAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiYXZhdGFyLWltZ1wiIFtzcmNdPVwiY3VycmVudENhbGxMaXN0WzBdPy5pbWdcIiBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEyMFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGgxPnt7Y3VycmVudENhbGxMaXN0WzBdPy5jMmNJbmZvcm1hdGlvbj8ubmFtZSB8fCAnVW5rbm93biBOdW1iZXInfX08L2gxPlxuICAgICAgICAgICAgICAgIDxwPnt7Y3VycmVudENhbGxMaXN0WzBdPy5jMmNJbmZvcm1hdGlvbj8ubnVtYmVyfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhbGwtYWN0aW9uLWJ0bnMgbXQtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biByZWNlaXZlLWJ0blwiXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIW5ld0luY29taW5nQ2FsbHNMaXN0WzBdPy5pc0NhbGxDb25uZWN0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKGNsaWNrKT1cImFkZChjdXJyZW50Q2FsbExpc3RbMF0pXCI+IGNhbGwgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjYWxsLWJ0biByZWplY3QtYnRuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIChjbGljayk9XCJvbkVuZENhbGwoJycpXCI+IGNhbGxfZW5kIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIEZvciBtdWx0aXBsZSBpbmNvbWluZyBjYWxscyBidXQgbm90IGFueSBjYWxsIHByb2dyZXNzIC0tPlxuICAgICAgICBcblxuICAgICAgICA8IS0tIEZvciBzaW5nbGUgYWN0aXZlIGNhbGwgLS0+XG4gICAgICAgICBzaW5nbGUgYWN0aXZlIGNhbGx7eyghaXNDb25mZXJlbmNlICYmIGN1cnJlbnRDYWxsTGlzdC5sZW5ndGggPiAxKX19Kysre3tjdXJyZW50Q2FsbExpc3QubGVuZ3RoID09PSAxIH19Kysre3sgY3VycmVudENhbGxMaXN0WzBdPy5pc0luY29taW5nQ2FsbH19Kysre3sgIWN1cnJlbnRDYWxsTGlzdFswXT8uaXNBY2NlcHRDYWxsfX1cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0NvbmZlcmVuY2UgJiYgISFjdXJyZW50Q2FsbFwiIFtuZ1N0eWxlXT1cInsnZGlzcGxheSc6ICdmbGV4JywgJ2ZsZXgtZGlyZWN0aW9uJzogJ2NvbHVtbicsICdwb3NpdGlvbic6ICdyZWxhdGl2ZSd9XCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsLWFuaW1hdGlvblwiIFtuZ0NsYXNzXT1cInsnY2FsbC1hbmltYXRpb24tcGxheSc6IHNob3dSaW5nQW5pbWF0aW9ufVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJhdmF0YXItaW1nXCIgW3NyY109XCJjdXJyZW50Q2FsbC5pbWdcIiBhbHQ9XCJcIiB3aWR0aD1cIjEyMFwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYWxsZXJEZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGgxIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICc4cHgnfVwiPnt7Y3VycmVudENhbGwubmFtZSB8fCAnVW5rbm93biBudW1iZXInfX08L2gxPlxuICAgICAgICAgICAgICAgIDxwPnt7Y3VycmVudENhbGwuZGlzcGxheU51bSA/IGN1cnJlbnRDYWxsLmRpc3BsYXlOdW0gOiBjdXJyZW50Q2FsbC5waG9uZSB9fTwvcD5cbiAgICAgICAgICAgICAgICA8aDQgc3R5bGU9XCJtYXJnaW4tdG9wOiA0cHhcIj57e3RpbWVyfX08L2g0PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYWN0aW9uLWJ0bnNcIiAqbmdJZj1cIiFzaG93S2V5cGFkXCIgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzIwcHgnfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBzdGFydC1zdG9wXCIgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydyZWNvcmRpbmcnOiBpc1JlY29yZGluZywgJ3N0b3BwZWQnOiAhaXNSZWNvcmRpbmd9XCIgKGNsaWNrKT1cInRvZ2dsZVJlY29yZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWNvcmRpbmctaWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1JlY29yZGluZyAmJiAhaXNQYXVzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXVzZVJlY29yZGluZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1BhdXNlZFwiIChjbGljayk9XCJyZXN1bWVSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNSZWNvcmRpbmdcIiBjbGFzcz1cInRpbWVyLWRpc3BsYXlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVGltZSgpIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93S2V5cGFkXCIgY2xhc3M9XCJzZW5kRGlnaXRcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiY2FsbC1pbnB1dHNcIiBpZD1cImNhbGwtaW5wdXRcIiBbKG5nTW9kZWwpXT1cImNhbGxJbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXl1cCk9XCJvbkNhbGxJbnB1dEVudGVyKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgaW5wdXQtY2xlYXItYnRuXCIgKm5nSWY9XCJjYWxsSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJJbnB1dHMoKVwiPmNsb3NlX3NtYWxsPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWNvbnRhaW5lciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCIgKm5nSWY9XCJzaG93S2V5cGFkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtleS1idG5cIiAqbmdGb3I9XCJsZXQga2V5IG9mIGtleXBhZFZhbFwiIChjbGljayk9XCJvbkNhbGxJbnB1dHMoa2V5Lm51bSlcIj5cbiAgICAgICAgICAgICAgICAgICAge3trZXkubnVtfX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJidG4tYWxiaGFiZXRzXCI+e3trZXkudGV4dCA/IGtleS50ZXh0IDogJyZuYnNwOyd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FsbC1hY3Rpb24tYnRuc1wiIFtuZ1N0eWxlXT1cInsnbWFyZ2luLXRvcCc6IHNob3dLZXlwYWQgPyAnMCc6ICcxMTBweCd9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIiAqbmdJZj1cIiFpbmNvbWluZ0NhbGxEaXYgfHwgaXNDb25jdXJyZW50SW5jb21pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImhlbGQtYnRuIG1lcmdlLWJ0blwiIChjbGljayk9XCJtZXJnZUNhbGxzKClcIiB0aXRsZT1cIk1lcmdlIGNhbGxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50Q2FsbExpc3QubGVuZ3RoIDwgMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+TWVyZ2U8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZXZlbmx5IG1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0biBtci0zXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cInRvZ2dsZU11dGUoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCJpc011dGVcIj4gbWljX29mZiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAqbmdJZj1cIiFpc011dGVcIj4gbWljIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtc2VjLWJ0biBtci0zXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIiAoY2xpY2spPVwidG9nZ2xlS2V5cGFkKClcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FsbC1zZWMtYnRuXCIgW2Rpc2FibGVkXT1cIiFjdXJyZW50Q2FsbD8uaXNBY2NlcHRDYWxsXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGFkZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbGwtYnRuIGVuZC1jYWxsLWJ0blwiIFtkaXNhYmxlZF09XCIhY3VycmVudENhbGw/LmlzQWNjZXB0Q2FsbFwiIChjbGljayk9XCJlbmRDYWxsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29udGFjdHMtcGFuZWxcIiAqbmdJZj1cInNob3dDb250YWN0c1BhbmVsXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgYmFja1wiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKClcIj4gY2hldnJvbl9sZWZ0IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGFjdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHNlYXJjaFwiPiBzZWFyY2ggPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1saXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYyBvZiBjb250YWN0c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cImNvbnRhY3QtYXZhdGFyXCIgW3NyY109XCJjLmltZyB8fCAnYXNzZXRzL2ltYWdlcy91c2VyLmpwZydcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIj57e2MuZmlyc3ROYW1lfX0ge3tjLm1pZGRsZU5hbWV9fSB7e2MubGFzdE5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LXRpdGxlXCI+e3sgKGMubnVtYmVyc0xpc3QgJiYgYy5udW1iZXJzTGlzdFswXT8ubnVtYmVyKX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuXCIgKGNsaWNrKT1cImNhbGxDb250YWN0KGMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGNhbGwgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5DYWxsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuXG5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cIm10LTIgcHgtMyBjYWxsLWluZm8td3JhcHBlciBcIiAgW25nQ2xhc3NdPVwieydvcGVuLWNvbGxvcHMnOiBpc0NvbGxvcHN9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIiA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1kb3duXCIgKm5nSWY9XCJpc0NvbGxvcHNcIiAoY2xpY2spPVwiaXNDb2xsb3BzID0gIWlzQ29sbG9wc1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFuZ2xlLXVwXCIgKm5nSWY9XCIhaXNDb2xsb3BzXCIgKGNsaWNrKT1cImlzQ29sbG9wcyA9ICFpc0NvbGxvcHNcIj48L2k+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0NvbGxvcHNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ID5GaXJzdCBOYW1lOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiA+dGVzdCB0dHR0dDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2Pkxhc3QgTmFtZTo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+dGV0c3QgdGVzdCA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPkVtYWlsOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+YWJjZGVmdEB2Z3JvdXAuY29tPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPk51bWJlcjo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj42MzU0NTk4NTI2NDIyNTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+TGFuZ3VhZ2U6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+RW5nbGlzaDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+SW1hZ2UgOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPnRlc3QuanBnIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+RXh0ZW5zaW9uIDo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj40NTk2PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+Tm90ZSA6PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj50ZXMgdGVzdCB0ZXN0IDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgbWItMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiXCI+U3ViamVjdDo8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5oZWxsbyB3b3JsZCB8IHRlc3Q8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIiBtYi00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJcIj5NZXNzYWdlOjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIlwiPnRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCB0ZXN0IHRlc3QgdGVzdCA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIGNvbnRhY3QgbGlzdCBwYW5lbCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLXBhbmVsXCIgKm5nSWY9XCJzaG93Q29udGFjdHNQYW5lbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3RzLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCBiYWNrXCIgKGNsaWNrKT1cInRvZ2dsZUNvbnRhY3RzUGFuZWwoKVwiPiBjaGV2cm9uX2xlZnQgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPkNvbnRhY3RzPC9kaXY+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIHNlYXJjaFwiPiBzZWFyY2ggPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtbGlzdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYyBvZiBjb250YWN0c1wiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cImMuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIj57e2MuZmlyc3ROYW1lfX0ge3tjLm1pZGRsZU5hbWV9fSB7e2MubGFzdE5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIj57eyAoYy5udW1iZXJzTGlzdCAmJiBjLm51bWJlcnNMaXN0WzBdPy5udW1iZXIpfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250YWN0LWNhbGwtYnRuXCIgKGNsaWNrKT1cImNhbGxDb250YWN0KGMpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gY2FsbCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+Q2FsbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBjb25mZXJlbmNlIGNhbGwgdmlldyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZlcmVuY2UtY2FsbC12aWV3XCIgKm5nSWY9XCJpc0NvbmZlcmVuY2VcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWhlYWRpbmdcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbmYtaWNvbiBtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IGdyb3VwcyA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb25mLXRpdGxlXCI+Q29uZmVyZW5jZSBDYWxsPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNhbGwgb2YgY3VycmVudENhbGxMaXN0OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7e2NhbGw/Lm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPCBjdXJyZW50Q2FsbExpc3QubGVuZ3RoIC0gMVwiPiY8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZi1uYW1lXCI+XG4gICAgICAgICAgICAgICAgPCEtLSB7eyAoY2FsbERhdGE/Lm5hbWUgfHwgY2FsbERhdGE/LmRpc3BsYXlOdW0gfHwgY2FsbERhdGE/LnBob25lIHx8ICctJykgfX0gJlxuICAgICAgICAgICAgICAgIHt7IChuZXdJbmNvbWluZ0NhbGxzTGlzdD8uWzBdPy51c2VySW5mbz8uYzJjSW5mb3JtYXRpb24/Lm5hbWVcbiAgICAgICAgICAgICAgICB8fCBuZXdJbmNvbWluZ0NhbGxzTGlzdD8uWzBdPy51c2VySW5mbz8uYzJjSW5mb3JtYXRpb24/Lm51bWJlclxuICAgICAgICAgICAgICAgIHx8IG5ld0luY29taW5nQ2FsbHNMaXN0Py5bMF0/LnBhcmFtZXRlcnM/LkZyb21cbiAgICAgICAgICAgICAgICB8fCBoZWxkQ2FsbD8uY3VzdG9tUGFyYW1ldGVycz8uZ2V0KCdkaXNwbGF5TnVtYmVyJylcbiAgICAgICAgICAgICAgICB8fCAnLScpIH19IC0tPlxuICAgICAgICAgICAgICAgIHt7Y3VycmVudENhbGxMaXN0Py5bMF0/Lm5hbWUgfHwgJ1Vua25vd24gbnVtYmVyJ319ICYge3tjdXJyZW50Q2FsbExpc3Q/LlsxXT8ubmFtZSB8fCAnVW5rbm93biBudW1iZXInfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtdGltZXJcIj57eyB0aW1lciB9fTwvZGl2PlxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29uZi1yZWNvcmRcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLXN0b3AtYnRuXCIgKm5nSWY9XCJpc1JlY29yZGluZ1wiIChjbGljayk9XCJ0b2dnbGVSZWNvcmRpbmcoKVwiIHRpdGxlPVwiU3RvcCBSZWNvcmRpbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHN0b3BfY2lyY2xlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PiAtLT5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlY29yZC1hY3Rpb24tYnRucyBtdC1hdXRvXCIgKm5nSWY9XCIhc2hvd0tleXBhZFwiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydtYXJnaW4tdG9wJzogc2hvd0tleXBhZCA/ICcwJzogJzIwcHgnfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWNvcmQtYnRuLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicmVjb3JkLWJ0biBzdGFydC1zdG9wXCIgKm5nSWY9XCIhaXNSZWNvcmRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydyZWNvcmRpbmcnOiBpc1JlY29yZGluZywgJ3N0b3BwZWQnOiAhaXNSZWNvcmRpbmd9XCIgKGNsaWNrKT1cInRvZ2dsZVJlY29yZGluZygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpc1JlY29yZGluZyA/ICdTdG9wIFJlY29yZGluZycgOiAnU3RhcnQgUmVjb3JkaW5nJ1wiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWNvcmRpbmctaWNvblwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwYXVzZS1yZXN1bWUtYnRuc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1JlY29yZGluZyAmJiAhaXNQYXVzZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXVzZVJlY29yZGluZygpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHBhdXNlIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlY29yZC1idG4gcGF1c2UtcmVzdW1lXCIgKm5nSWY9XCJpc1BhdXNlZFwiIChjbGljayk9XCJyZXN1bWVSZWNvcmRpbmcoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBwbGF5X2Fycm93IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNSZWNvcmRpbmdcIiBjbGFzcz1cInRpbWVyLWRpc3BsYXlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0Rm9ybWF0dGVkVGltZSgpIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dLZXlwYWRcIiBjbGFzcz1cInNlbmREaWdpdCBtdC0yXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNhbGwtaW5wdXRzXCIgaWQ9XCJjYWxsLWlucHV0XCIgWyhuZ01vZGVsKV09XCJjYWxsSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5dXApPVwib25DYWxsSW5wdXRFbnRlcigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGlucHV0LWNsZWFyLWJ0blwiICpuZ0lmPVwiY2FsbElucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFySW5wdXRzKClcIj5jbG9zZV9zbWFsbDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJ0bi1jb250YWluZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiICpuZ0lmPVwic2hvd0tleXBhZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrZXktYnRuXCIgKm5nRm9yPVwibGV0IGtleSBvZiBrZXlwYWRWYWxcIiAoY2xpY2spPVwib25DYWxsSW5wdXRzKGtleS5udW0pXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7a2V5Lm51bX19XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnRuLWFsYmhhYmV0c1wiPnt7a2V5LnRleHQgPyBrZXkudGV4dCA6ICcmbmJzcDsnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmYtcmVtb3ZlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInJlbW92ZS1idG5cIiAoY2xpY2spPVwiYWRkUmVtb3ZlUGFydGljaXBhbnQoKVwiPlJlbW92ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNNdXRlfVwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCI+IHt7IGlzTXV0ZSA/ICdtaWNfb2ZmJyA6ICdtaWMnIH19IDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2lyY2xlLWJ0blwiIChjbGljayk9XCJ0b2dnbGVLZXlwYWQoKVwiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWRcIj4gdHJhbnNpdGlvbl9kaXNzb2x2ZSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNpcmNsZS1idG5cIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIiAoY2xpY2spPVwidG9nZ2xlQ29udGFjdHNQYW5lbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBhZGQgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25mLWVuZFwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuIGRhbmdlclwiIChjbGljayk9XCJlbmRDYWxsKHRydWUpXCIgW2Rpc2FibGVkXT1cImRpc2JhbGVFbmRDYWxsQnRuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBBZGQgcmVtb3ZlIHBhcnRpY2lwYW50IHBhbmVsIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGFjdHMtcGFuZWxcIiAqbmdJZj1cImlzQWRkUmVtb3ZlUGFydGljaXBhbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgYmFja1wiIChjbGljayk9XCJ0b2dnbGVDb250YWN0c1BhbmVsKHRydWUpXCI+IGNoZXZyb25fbGVmdCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+Q29udGFjdHM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQgc2VhcmNoXCI+IHNlYXJjaCA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0cy1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtaXRlbVwiICpuZ0Zvcj1cImxldCBjIG9mIGFsbFBhcnRpY2lwZW50TGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiY29udGFjdC1hdmF0YXJcIiBbc3JjXT1cImMuaW1nIHx8ICdhc3NldHMvaW1hZ2VzL3VzZXIuanBnJ1wiIGFsdD1cIlwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LWluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250YWN0LW5hbWVcIj57e2M/LnRvTmFtZSB8fCAnVW5rbm93bid9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRhY3QtdGl0bGVcIj57eyBjPy50byB8fCAnVW5rbm93bid9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbmZlcmVuY2UtaG9sZC1jb250YWN0IG1yLTJcIiBbbmdDbGFzc109XCJ7ICdvbi1ob2xkJzogYy5ob2xkIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uSG9sZENhbGwoYylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiIHRpdGxlPVwiSG9sZFwiPiBwaG9uZV9wYXVzZWQgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImxhYmVsXCI+SG9sZDwvc3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY29uZmVyZW5jZS1jb250YWN0XCIgKGNsaWNrKT1cIm9uRW5kQ2FsbChjKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgdGl0bGU9XCJDYWxsIEVuZFwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5FbmQ8L3NwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwid2F2ZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3YXZlc1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB4bWxuczp4bGluaz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDI0IDE1MCAyOFwiIHByZXNlcnZlQXNwZWN0UmF0aW89XCJub25lXCIgc2hhcGUtcmVuZGVyaW5nPVwiYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxkZWZzPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBpZD1cImdlbnRsZS13YXZlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNLTE2MCA0NGMzMCAwIDU4LTE4IDg4LTE4cyA1OCAxOCA4OCAxOCA1OC0xOCA4OC0xOCA1OCAxOCA4OCAxOCB2NDRoLTM1MnpcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGVmcz5cbiAgICAgICAgICAgICAgICA8ZyBjbGFzcz1cInBhcmFsbGF4XCI+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCIwXCIgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC43KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDx1c2UgeGxpbms6aHJlZj1cIiNnZW50bGUtd2F2ZVwiIHg9XCI0OFwiIHk9XCIzXCIgZmlsbD1cInJnYmEoMjU1LDI1NSwyNTUsMC41KVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPHVzZVxuICAgICAgICAgICAgICAgIHhsaW5rOmhyZWY9XCIjZ2VudGxlLXdhdmVcIlxuICAgICAgICAgICAgICAgIHg9XCI0OFwiXG4gICAgICAgICAgICAgICAgeT1cIjVcIlxuICAgICAgICAgICAgICAgIGZpbGw9XCJyZ2JhKDI1NSwyNTUsMjU1LDAuMylcIlxuICAgICAgICAgICAgICAvPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPHVzZSB4bGluazpocmVmPVwiI2dlbnRsZS13YXZlXCIgeD1cIjQ4XCIgeT1cIjdcIiBmaWxsPVwiI2ZmZlwiIC8+XG4gICAgICAgICAgICAgICAgPC9nPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJtaW4tY2FsbC1jb250YWluZXJcIiAqbmdJZj1cImlzTWluaW1pc2VkXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkIGZ1bGxzY3JlZW5cIiAoY2xpY2spPVwibWF4aW1pc2VEaWFscGFkKClcIj4gb3Blbl9pbl9mdWxsIDwvc3Bhbj5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgd2lkdGg6IDEwMCVcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tY2FsbC1hbmltYXRpb25cIiBpZD1cImNhbGwtYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgPGltZyBjbGFzcz1cIm1pbi1hdmF0YXItaW1nXCIgW3NyY109XCJjYWxsRGF0YS5pbWdcIiBhbHQ9XCJcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi1jYWxsZXJEZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3tjYWxsRGF0YS5uYW1lfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbjogMFwiPnt7Y2FsbERhdGEuZGlzcGxheU51bSA/IGNhbGxEYXRhLmRpc3BsYXlOdW0gOiBjYWxsRGF0YS5waG9uZSB9fTwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWluLWJ0bi1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi10aW1lclwiPnt7dGltZXJ9fTwvZGl2PlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWluLWNhbGwtc2VjLWJ0blwiIChjbGljayk9XCJ0b2dnbGVNdXRlKClcIiBbZGlzYWJsZWRdPVwiZGlzYmFsZUVuZENhbGxCdG5cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiICpuZ0lmPVwiaXNNdXRlXCI+IG1pY19vZmYgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkXCIgKm5nSWY9XCIhaXNNdXRlXCI+IG1pYyA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWluLWNhbGwtYnRuIGVuZC1jYWxsLWJ0blwiIFtkaXNhYmxlZF09XCJkaXNiYWxlRW5kQ2FsbEJ0blwiIChjbGljayk9XCJlbmRDYWxsKClcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZFwiPiBjYWxsX2VuZCA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19