keevo-components 1.8.348 → 1.8.349

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.
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGFydC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvYXBpL2NvbXBvbmVudHMvY2hhcnQvb3JjaGFydC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGludGVyZmFjZSBPcmdDaGFydENvbmZpZ3tcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICogRXNzZSBpdGVtIGVzcGVyYSB1bWEgc3RyaW5nIGh0bWwgdGVtcGxhdGVcclxuICAgKiAobm8gZm9ybWF0byBhbmd1bGFyIGNvbSBpbnRlcnBvbGHDp8OjbyBkZSB2YXJpYXZlaXMgdmlhIHt7ZGF0YS4nUFJPUElFREFERSBERVNFSkFEQSd9fSlcclxuICAgKiBUb2RvcyBvcyBkYWRvcyBleHBvc3RvcyBuYSBwcm9waWVkYWRlIGRhdGEgZGVcclxuICAgKiBjYWRhIGl0ZW0gZXN0w6NvIGFjZXNzaXZlaXMgcGVsbyBvYmpldG8gZGF0YTtcclxuICAgKiBQYXJhIHJlYWxpemFyIGludGVycG9sYcOnw6NvLCByZWZlcmVuY2llIGRhdGEgZW50cmUge3t9fSBlIGEgY2hhdmUgZGVzZWphZGE7XHJcbiAgICoqIEV4ZW1wbG86IGAgPGgxPiBOb21lOiB7e2RhdGEubm9tZX19IDwvaDE+ICBgXHJcbiAgICpcclxuICAgKi9cclxuICB0ZW1wbGF0ZUl0ZW06IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKiBFc3NlIGl0ZW0gZXNwZXJhIHJlY2ViZXIgYSBsYXJndXJhIG1lZGlhIGRvIGNhcmQsIHBhcmEgY2FsY3VsbyBkbyBpY29uZSBkZSBjb2xsYXBzZVxyXG4gICAqL1xyXG4gIGNhcmRXaWRodDogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqIEVzc2UgaXRlbSBlc3BlcmEgcmVjZWJlciBhIGFsdHVyYSBtZWRpYSBkbyBjYXJkLCBwYXJhIGNhbGN1bG8gZG8gaWNvbmUgZGUgY29sbGFwc2VcclxuICAgKi9cclxuICBjYXJkSGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICogRXNzZSBpdGVtIGVzcGVyYSByZWNlYmVyIGEgY29yIGRhcyBjb25uZWN0aW9uc1xyXG4gICAqICogRGVmYXVsdCB7ICNkNmQ2ZDYgfVxyXG4gICAqL1xyXG4gIGNvbm5lY3Rpb25Db2xvcj86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAqIEVzc2UgaXRlbSBlc3BlcmEgcmVjZWJlciBhIGNvciBkYXMgY29ubmVjdGlvbnNcclxuICAgKiAqIERlZmF1bHQgeyAyIH1cclxuICAgKi9cclxuICAgIGNvbmVjdGlvbldpZHRoPzogbnVtYmVyO1xyXG59XHJcbiJdfQ==
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGFydC5jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvYXBpL2NvbXBvbmVudHMvY2hhcnQvb3JjaGFydC5jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGludGVyZmFjZSBPcmdDaGFydENvbmZpZ3tcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICogRXNzZSBpdGVtIGVzcGVyYSByZWNlYmVyIGEgbGFyZ3VyYSBtZWRpYSBkbyBjYXJkLCBwYXJhIGNhbGN1bG8gZG8gaWNvbmUgZGUgY29sbGFwc2VcclxuICAgKi9cclxuICBjYXJkV2lkaHQ6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKiBFc3NlIGl0ZW0gZXNwZXJhIHJlY2ViZXIgYSBhbHR1cmEgbWVkaWEgZG8gY2FyZCwgcGFyYSBjYWxjdWxvIGRvIGljb25lIGRlIGNvbGxhcHNlXHJcbiAgICovXHJcbiAgY2FyZEhlaWdodDogbnVtYmVyfHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKiBFc3NlIGl0ZW0gZXNwZXJhIHJlY2ViZXIgYSBhbHR1cmEgbWVkaWEgZG8gY2FyZCwgcGFyYSBjYWxjdWxvIGRvIGljb25lIGRlIGNvbGxhcHNlXHJcbiAgICovXHJcbiAgICBjYXJkRXhwYW5kZWRIZWlnaHQ/OiBudW1iZXJ8c3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAqIEVzc2UgaXRlbSBlc3BlcmEgcmVjZWJlciBhIGNvciBkYXMgY29ubmVjdGlvbnNcclxuICAgKiAqIERlZmF1bHQgeyAjZDZkNmQ2IH1cclxuICAgKi9cclxuICBjb25uZWN0aW9uQ29sb3I/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICogQHR5cGUge251bWJlcn1cclxuICAgKiBFc3NlIGl0ZW0gZXNwZXJhIHJlY2ViZXIgYSBjb3IgZGFzIGNvbm5lY3Rpb25zXHJcbiAgICogKiBEZWZhdWx0IHsgMiB9XHJcbiAgICovXHJcbiAgICBjb25lY3Rpb25XaWR0aD86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgKiBAdHlwZSB7c3RyaW5nW119XHJcbiAgICogRXNzZSBpdGVtIGVzcGVyYSByZWNlYmVyIG8gc2xldG9yZXMgY3NzIHBhcmEgZW1pc3PDo28gZG8gZXZlbnRvIGRlIGNsaWNrXHJcbiAgICogKiBEZWZhdWx0IHsgMiB9XHJcbiAgICovXHJcbiAgICBjbGlja3M/OiBzdHJpbmdbXVxyXG5cclxufVxyXG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JjaGFydG5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvYXBpL2NvbXBvbmVudHMvY2hhcnQvb3JjaGFydG5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGludGVyZmFjZSBPcmdDaGFydE5vZGV7XHJcblxyXG4gIC8qKlxyXG4gICAqIEB0eXBlIHtudW1iZXJ9XHJcbiAgICogRXNzZSBpdGVtIGVzcGVyYSByZWNlYmVyIG8gaWRlbnRpZmljYWRvciBkbyBjYXJkXHJcbiAgICovXHJcbiAgaWQ6IG51bWJlcjtcclxuXHJcbiAgLyoqXHJcbiAgICogQHR5cGUge251bWJlciB8IG51bGx9XHJcbiAgICogRXNzZSBpdGVtIGVzcGVyYSByZWNlYmVyIG8gaWRlbnRpZmljYWRvciBkbyBjYXJkIHBhaSBkZXNzZSBjYXJkXHJcbiAgICogKiBBY2VpdGEgbnVsbCBubyBjYXNvIGRlIHNlciBvIG7DsyByb290XHJcbiAgICpcclxuICAgKiBAd2FybmluZyBDYXNvIHRlbmhhIG1haXMgZGUgdW0gb2JqZXRvIGNvbSB7eyBwYXJlbnRJZDogbnVsbCB9fSBoYXZlcmEgdW0gZXJybyBkZSBtdWx0aXBsb3Mgcm9vdHNcclxuICAgKi9cclxuICBwYXJlbnRJZDogbnVtYmVyIHwgbnVsbDtcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEB0eXBlIHtUW119XHJcbiAgICogTsOzcyBmaWxob3MgZGVzc2UgbsOzXHJcbiAgICovXHJcbiAgY2hpbGRyZW4/OiBhbnlbXSxcclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEB0eXBlIHtvYmplY3R9XHJcbiAgICogRXNzZSBpdGVtIGVzcGVyYSByZWNlYmVyIG9zIGRhZG9zIGRvIGNhcmRcclxuICAgKiBAd2FybmluZyBNYW50ZW5oYSBhIGNvbnNpc3RlbmNpYSBkZSBkYWRvcywgY2FzbyB0ZW50ZSBhY2Vzc2FyIHVtIGRhZG8gcXVlIG7Do28gZXhpc3RhIGVtIG91dHJvIG9iamV0byBoYXZlcmEgdW0gZXJyb1xyXG4gICAqL1xyXG4gIGRhdGE6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogQHR5cGUge29iamVjdH1cclxuICAgKiBFc3NlIGl0ZW0gZXNwZXJhIHJlY2ViZXIgb3MgZGFkb3MgZG8gY2FyZFxyXG4gICAqIEB3YXJuaW5nIE1hbnRlbmhhIGEgY29uc2lzdGVuY2lhIGRlIGRhZG9zLCBjYXNvIHRlbnRlIGFjZXNzYXIgdW0gZGFkbyBxdWUgbsOjbyBleGlzdGEgZW0gb3V0cm8gb2JqZXRvIGhhdmVyYSB1bSBlcnJvXHJcbiAgICovXHJcbiAgICBleHBhbmRlZDogYW55O1xyXG5cclxufVxyXG4iXX0=
@@ -70,8 +70,9 @@ class SimpleComponent {
70
70
  this.startY = 0;
71
71
  //? Fator de escala da imagem e zoom
72
72
  this.scaleFactorReadOnly = computed(() => {
73
- return Math.min(this.scaleFactor(), 3);
73
+ return Math.min(this.scaleFactor(), this.scaleFactorInicial() + 5);
74
74
  });
75
+ this.scaleFactorInicial = signal(null);
75
76
  this.scaleFactor = signal(null);
76
77
  this.scaleFactorModel = 0;
77
78
  this.imageX = 0;
@@ -139,11 +140,14 @@ class SimpleComponent {
139
140
  //? Proporção da imagem
140
141
  this.widthTela = signal(0);
141
142
  this.heigthTela = signal(0);
143
+ //#endregion
144
+ //#region handlers de eventos
145
+ this.comparadorOnZoomChange = this.scaleFactorInicial();
142
146
  this.atualizaTamanhoTela();
143
147
  }
144
148
  setScaleFactorModel(valor) {
145
- this.scaleFactorModel = valor;
146
- this.scaleFactor.set(this.scaleFactorModel);
149
+ this.scaleFactorModel = valor - this.scaleFactorInicial();
150
+ this.scaleFactor.set(valor);
147
151
  }
148
152
  onWindowResize() {
149
153
  this.atualizaTamanhoTela();
@@ -183,8 +187,8 @@ class SimpleComponent {
183
187
  //? Ajusta possição e zoom inicial
184
188
  if (this._variaviesDialog()?.indCircle) {
185
189
  const scaleFactor = (this.radius() * 2) / Math.min(imageWidth, imageHeight);
190
+ this.scaleFactorInicial.set(scaleFactor);
186
191
  this.setScaleFactorModel(scaleFactor);
187
- this.scaleFactor.set(scaleFactor);
188
192
  }
189
193
  else {
190
194
  const scaleFactor = this.cutHeight() === this.cutWidth()
@@ -194,8 +198,8 @@ class SimpleComponent {
194
198
  : this.cutHeight() > this.cutWidth()
195
199
  ? this.cutHeight() / imageHeight
196
200
  : this.cutWidth() / imageWidth;
201
+ this.scaleFactorInicial.set(scaleFactor);
197
202
  this.setScaleFactorModel(scaleFactor);
198
- this.scaleFactor.set(scaleFactor);
199
203
  }
200
204
  this.imageX = Math.max((this.canvas().width - imageWidth * this.scaleFactorReadOnly()) / 2, this.xMin());
201
205
  this.imageY = Math.max((this.canvasHeight() - imageHeight * this.scaleFactorReadOnly()) / 2, this.yMin());
@@ -285,13 +289,12 @@ class SimpleComponent {
285
289
  }
286
290
  }
287
291
  }
288
- //#endregion
289
- //#region handlers de eventos
290
292
  onZoomChange(e) {
291
- const prevZoom = this.scaleFactorReadOnly();
293
+ const prevZoom = this.comparadorOnZoomChange;
292
294
  const zoomValue = e.value;
295
+ this.comparadorOnZoomChange = e.value;
293
296
  const direction = prevZoom < zoomValue ? 'up' : 'down';
294
- this.ajustarZoom(direction);
297
+ this.ajustarZoom(direction, e.value);
295
298
  }
296
299
  initializeMouseWheel(canvas, ctx, img) {
297
300
  canvas.onwheel = (e) => {
@@ -301,10 +304,12 @@ class SimpleComponent {
301
304
  this.ajustarZoom(direction);
302
305
  };
303
306
  }
304
- ajustarZoom(direction) {
307
+ ajustarZoom(direction, value) {
305
308
  const prevScaleFactor = this.scaleFactorReadOnly();
306
- const delta = direction == 'down' ? -0.01 : 0.01;
307
- let scaleFactor = Math.min((prevScaleFactor + (delta * 1.2)), 3);
309
+ const delta = direction == 'down' ? -0.015 : 0.015;
310
+ let scaleFactor = prevScaleFactor + (delta * 1.4);
311
+ if (value)
312
+ scaleFactor = value + this.scaleFactorInicial();
308
313
  const newHeight = this._Image().height * scaleFactor;
309
314
  const newWidth = this._Image().width * scaleFactor;
310
315
  if (this._variaviesDialog()?.indCircle) {
@@ -501,7 +506,7 @@ class SimpleComponent {
501
506
 
502
507
  <div class="w-full mt-2">
503
508
  <kv-label label="Zoom" style="text-align: left;" />
504
- <p-slider [(ngModel)]="this.scaleFactorModel" [step]="0.000001" [max]="3" (onChange)="onZoomChange($event)"></p-slider>
509
+ <p-slider [(ngModel)]="this.scaleFactorModel" [step]="0.0001" [max]="5" (onChange)="onZoomChange($event)"></p-slider>
505
510
  </div>
506
511
 
507
512
  <div class="button-container">
@@ -526,7 +531,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
526
531
 
527
532
  <div class="w-full mt-2">
528
533
  <kv-label label="Zoom" style="text-align: left;" />
529
- <p-slider [(ngModel)]="this.scaleFactorModel" [step]="0.000001" [max]="3" (onChange)="onZoomChange($event)"></p-slider>
534
+ <p-slider [(ngModel)]="this.scaleFactorModel" [step]="0.0001" [max]="5" (onChange)="onZoomChange($event)"></p-slider>
530
535
  </div>
531
536
 
532
537
  <div class="button-container">
@@ -561,4 +566,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImpor
561
566
  type: HostListener,
562
567
  args: ['window:resize', ['$event']]
563
568
  }] } });
564
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY3V0dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvYXBpL3NlcnZpY2VzL2ltYWdlLmN1dHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdCLFFBQVEsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBMEM5Qyx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7OztBQTlDN0UsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUNtQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUMzQyxDQUFDO0lBRUwsR0FBRyxDQUFDLFdBQW1CLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxZQUFxQixLQUFLO1FBQ2hGLE1BQU0sU0FBUyxHQUFH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Q0FBQTtJQUN2QixDQUFDOzhHQTdpQkcsZUFBZTtrR0FBZixlQUFlLHlWQTFJVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJULGdxQ0FzR0MsWUFBWSw4QkFDWixhQUFhLDhCQUNiLFlBQVksK1JBQ1osWUFBWSw4QkFDWixZQUFZLDhCQUNaLGdCQUFnQiw4QkFFaEIsV0FBVyw4VkFDWCxtQkFBbUIsOEJBQ25CLGNBQWMsaU5BQ2QsYUFBYTs7MkZBS1gsZUFBZTtrQkE1SXBCLFNBQVM7K0JBQ0Usc0JBQXNCLFlBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQlQsY0FvR1csSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsYUFBYTtxQkFFZDtpSEFnQjBCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDRSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBMkd6QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdGFibGUsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb21wb25lbnQsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWFnZUN1dHRlclNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nc2VydmljZTogRGlhbG9nU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIGN1dChpbWFnZUJhc2U2NDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaW5kQ2lyY2xlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgY3V0Q29uZmlnID0geyBpbWFnZUJhc2U2NCwgd2lkdGgsIGhlaWdodCwgaW5kQ2lyY2xlIH07XHJcbiAgICB0aGlzLmFicmlyTW9kYWwoY3V0Q29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjcm9wSW1hZ2UnLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKGV2ZW50LmRldGFpbC5zdGF0dXMgPT0gdHJ1ZSApIHtcclxuICAgICAgICAgIHJlc29sdmUoZXZlbnQuZGV0YWlsLnJlc3VsdCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICByZWplY3QoJ09wZXJhY2FvIGNhbmNlbGFkYS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYWJyaXJNb2RhbChjdXRDb25maWc6IHsgaW1hZ2VCYXNlNjQ6IHN0cmluZywgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGluZENpcmNsZTogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSAgICAgICB7XHJcbiAgICAgIGNsb3NhYmxlOiB0cnVlLFxyXG4gICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgIHBvcHVwOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzc1dncnLFxyXG4gICAgICBoZWFkZXI6IGBDb3J0YXJgICxcclxuICAgICAgaWQ6IHsgaW1hZ2VtOiBjdXRDb25maWcuaW1hZ2VCYXNlNjQsIHdpZHRoOiBjdXRDb25maWcud2lkdGgsIGhlaWdodDogY3V0Q29uZmlnLmhlaWdodCwgaW5kQ2lyY2xlOiBjdXRDb25maWcuaW5kQ2lyY2xlIH0sXHJcbiAgICAgIHN0eWxlQ2xhc3M6ICdtb2RhbCdcclxuICAgIH1cclxuICAgIGNvbnN0IGRpYWxvZ1JlZjogRHluYW1pY0RpYWxvZ1JlZiA9IEZvcm1TZXJ2aWNlLm9wZW5EaWFsb2codGhpcy5kaWFsb2dzZXJ2aWNlLCBTaW1wbGVDb21wb25lbnQsICgpPT57fSwgcGFyYW1zKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyA/IENvbXBvbmVudGUgZGUgbW9kYWwgdXNhZG8gbm8gY3V0dGVyXHJcbmltcG9ydCB7IFNsaWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc2xpZGVyJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IEt2TGFiZWxNb2R1bGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2t2LWxhYmVsL2t2LWxhYmVsLm1vZHVsZSc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLdk1vZGFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9rdi1tb2RhbC9rdi1tb2RhbC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBLdkJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMva3YtYnV0dG9uL2t2LWJ1dHRvbi5tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2ltcGxlLWNvbXBvbmVudCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3JvcC1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxjYW52YXMgI2Nyb3BDYW52YXMgY2xhc3M9XCJjcm9wLWNhbnZhc1wiPjwvY2FudmFzPlxyXG4gICAgICAgICAgPGRpdiAjY3JvcEJvcmRlciBjbGFzcz1cImNyb3AtYm9yZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbXQtMlwiPlxyXG4gICAgICAgICAgPGt2LWxhYmVsIGxhYmVsPVwiWm9vbVwiIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDtcIiAvPlxyXG4gICAgICAgICAgPHAtc2xpZGVyIFsobmdNb2RlbCldPVwidGhpcy5zY2FsZUZhY3Rvck1vZGVsXCIgW3N0ZXBdPVwiMC4wMDAwMDFcIiAgW21heF09XCIzXCIgIChvbkNoYW5nZSk9XCJvblpvb21DaGFuZ2UoJGV2ZW50KVwiPjwvcC1zbGlkZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxrdi1idXR0b24gbGFiZWw9XCJDYW5jZWxhclwiIHNldmVyaXR5PVwidGVydGlhcnlcIiBpY29uPVwiY2xvc2VcIiAoY2xpY2spPVwiY2FuY2VsKClcIj48L2t2LWJ1dHRvbj5cclxuICAgICAgICAgIDxrdi1idXR0b24gbGFiZWw9XCJSZWNvcnRhclwiIHNldmVyaXR5PVwicHJpbWFyeVwiIGljb249XCJjcm9wXCIgKGNsaWNrKT1cImNyb3BJbWFnZSgpXCIgY2xhc3M9XCJtbC0yXCI+PC9rdi1idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICBgLFxyXG4gIHN0eWxlczogW2BcclxuXHJcbmltZyB7XHJcbiAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcclxuICBib3JkZXItd2lkdGg6IDJweDtcclxuICBib3JkZXItcmFkaXVzOiA1MCU7XHJcbiAgb2JqZWN0LWZpdDogY292ZXI7XHJcbn1cclxuXHJcbmkge1xyXG4gIGZvbnQtc2l6ZTogMjJweDtcclxufVxyXG5cclxuLmJvdGFvLWFsdGVyYXItZm90byB7XHJcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xyXG4gIHdpZHRoOiBtYXgtY29udGVudDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAyNTQyO1xyXG4gIGNvbG9yOiBibGFjaztcclxuICBmb250LXdlaWdodDogYm9sZDtcclxuICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgcGFkZGluZzogN3B4IDlweDtcclxufVxyXG5cclxuLmJvdGFvLWFsdGVyYXItZm90byBpIHtcclxuICBjb2xvcjogI2ZmZjtcclxufVxyXG5cclxuLmJvdGFvLWV4Y2x1aXItZm90byB7XHJcbiAgYm9yZGVyLXN0eWxlOiBub25lO1xyXG4gIHdpZHRoOiBtYXgtY29udGVudDtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAyNTQyO1xyXG4gIGNvbG9yOiBibGFjaztcclxuICBmb250LXdlaWdodDogYm9sZDtcclxuICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgcGFkZGluZzogN3B4IDlweDtcclxufVxyXG5cclxuLmJvdGFvLWV4Y2x1aXItZm90byBpIHtcclxuICBjb2xvcjogI2ZmZjtcclxufVxyXG5cclxuLmJ0biB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIHRvcDogODclO1xyXG4gIGxlZnQ6IDg3JTtcclxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcclxufVxyXG5cclxuLmltYWdlLWNvbnRhaW5lciB7XHJcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxufVxyXG5cclxuLm1vZGFsLWNvbnRlbnQge1xyXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmVmZWZlO1xyXG4gIG1hcmdpbjogMSUgYXV0bztcclxuICBwYWRkaW5nOiAyMHB4O1xyXG4gIHdpZHRoOiA4MCU7XHJcbiAgbWF4LXdpZHRoOiBmaXQtY29udGVudDtcclxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcclxufVxyXG5cclxuLmNyb3AtY29udGFpbmVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbn1cclxuXHJcbi5jcm9wLWNhbnZhcyB7XHJcbiAgYm9yZGVyOiAxcHggc29saWQgI2QxZDVkYjtcclxuICBib3JkZXItcmFkaXVzOiAxMnB4O1xyXG4gIHdpZHRoOiAxMDAlO1xyXG4gIGhlaWdodDogYXV0bztcclxufVxyXG5cclxuLmNyb3AtYm9yZGVyIHtcclxuICBwb3NpdGlvbjogYWJzb2x1dGU7XHJcbiAgYm9yZGVyOiAycHggZGFzaGVkICM5Y2EzYWY7XHJcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbn1cclxuXHJcbi56b29tLWNvbnRhaW5lciB7XHJcbiAgcGFkZGluZy10b3A6IDIwcHg7XHJcbiAgcGFkZGluZy1ib3R0b206IDIwcHg7XHJcbn1cclxuXHJcbi5idXR0b24tY29udGFpbmVyIHtcclxuICBkaXNwbGF5OiBmbGV4O1xyXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcclxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xyXG4gIG1hcmdpbi10b3A6IDI0cHg7XHJcbn1cclxuXHJcblxyXG5cclxuICBgXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIERpYWxvZ01vZHVsZSxcclxuICAgIEt2TW9kYWxNb2R1bGUsXHJcbiAgICBTbGlkZXJNb2R1bGUsXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBCdXR0b25Nb2R1bGUsXHJcbiAgICBGaWxlVXBsb2FkTW9kdWxlLFxyXG4gICAgU2xpZGVyTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgS3ZCdXR0b25Nb2R1bGUsXHJcbiAgICBLdkxhYmVsTW9kdWxlLFxyXG5cclxuICBdXHJcbn0pXHJcblxyXG5jbGFzcyBTaW1wbGVDb21wb25lbnQge1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGR5bmFtaWNEaWFsb2dSZWY6IER5bmFtaWNEaWFsb2dSZWYsIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSkge1xyXG4gICAgdGhpcy5hdHVhbGl6YVRhbWFuaG9UZWxhKClcclxuICB9XHJcblxyXG5cclxuICAvLyA/IFZhcmlhdmllcyBxdWUgcmVjZWJlbSBvcyB2YWxvcmVzIGRvIGRpYWxvZ1xyXG4gIF92YXJpYXZpZXNEaWFsb2cgPSBzaWduYWw8eyBpbWFnZW06IHN0cmluZywgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGluZENpcmNsZTogYm9vbGVhbiB9fG51bGw+KG51bGwpXHJcblxyXG5cclxuXHJcbiAgICAvLz8gUmVmZXLDqm5jaWEgcGFyYSBvIGVsZW1lbnRvIHF1ZSBjb250w6ltIGEgaW1hZ2VtIGUgY2FudmFzXHJcbiAgICBAVmlld0NoaWxkKCdjcm9wQ2FudmFzJykgY3JvcENhbnZhcyE6IEVsZW1lbnRSZWY8SFRNTENhbnZhc0VsZW1lbnQ+O1xyXG4gICAgQFZpZXdDaGlsZCgnY3JvcEJvcmRlcicpIGNyb3BCb3JkZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICAgIC8vPyBSZWZlcsOqbmNpYXMgcGFyYSBvIGNvbnRleHRvIGUgY2FudmFzXHJcbiAgICBwcml2YXRlIGNhbnZhcyA9IHNpZ25hbDxIVE1MQ2FudmFzRWxlbWVudHxudWxsPihudWxsKTtcclxuICAgIHByaXZhdGUgY3R4ID0gIHNpZ25hbDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR8bnVsbD4obnVsbCk7XHJcbiAgICBwcml2YXRlIF9JbWFnZSA9IHNpZ25hbDxIVE1MSW1hZ2VFbGVtZW50PihuZXcgSW1hZ2UoKSk7XHJcblxyXG4gICAgLy8/IENvb3JkZW5hZGFzIGluaWNpYWlzIGUgZmluYWlzIGRvIGRlc2VuaG9cclxuICAgIHByaXZhdGUgc3RhcnRYID0gMDtcclxuICAgIHByaXZhdGUgc3RhcnRZID0gMDtcclxuXHJcbiAgICAvLz8gUmVmZXLDqm5jaWEgcGFyYSBvIG1vZGFsXHJcbiAgICBwcml2YXRlIGRpYWxvZ0luc3RhbmNlITpEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xyXG5cclxuICAgIC8vPyBGYXRvciBkZSBlc2NhbGEgZGEgaW1hZ2VtIGUgem9vbVxyXG4gICAgc2NhbGVGYWN0b3JSZWFkT25seSA9IGNvbXB1dGVkPG51bWJlcj4oKCk9PiB7XHJcbiAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLnNjYWxlRmFjdG9yKCkhLCAzKTtcclxuICAgIH0pXHJcbiAgICBwcml2YXRlIHNjYWxlRmFjdG9yID0gc2lnbmFsPG51bWJlcnxudWxsPihudWxsKTtcclxuICAgIHNldFNjYWxlRmFjdG9yTW9kZWwodmFsb3I6bnVtYmVyKXtcclxuICAgICAgdGhpcy5zY2FsZUZhY3Rvck1vZGVsID0gdmFsb3JcclxuICAgICAgdGhpcy5zY2FsZUZhY3Rvci5zZXQodGhpcy5zY2FsZUZhY3Rvck1vZGVsKVxyXG4gICAgfVxyXG4gICAgc2NhbGVGYWN0b3JNb2RlbCA9IDA7XHJcblxyXG4gICAgcHJpdmF0ZSBpbWFnZVg6IG51bWJlciA9IDA7XHJcbiAgICBwcml2YXRlIGltYWdlWTogbnVtYmVyID0gMDtcclxuXHJcblxyXG4gICAgLy8jcmVnaW9uIFByb3ByaWVkYWRlcyBjb21wdXRhZGFzIGRlIHRhbWFuaG8gZG8gY2FudmFzIGUgZGEgaW1hZ2VtXHJcbiAgICAgIC8vPyBMYXJndXJhIGUgYWx0dXJhIGRvIGNhbnZhcyBiYXNlYWRvIG5hIHRhbWFuaG8gZGEgdGVsYVxyXG4gICAgICBjYW52YXNXaWR0aCA9IGNvbXB1dGVkPG51bWJlciB8IG51bGw+KCgpID0+IHRoaXMud2lkdGhUZWxhKCkqMC41KTtcclxuICAgICAgY2FudmFzSGVpZ2h0ID0gY29tcHV0ZWQ8bnVtYmVyIHwgbnVsbD4oKCkgPT4gdGhpcy5oZWlndGhUZWxhKCkqMC41KTtcclxuXHJcbiAgICAgIC8vPyBMYXJndXJhIGUgYWx0dXJhIGRhIMOhcmVhIGRlIGNvcnRlXHJcbiAgICAgIGN1dFdpZHRoID0gY29tcHV0ZWQ8bnVtYmVyIHwgbnVsbD4oKCkgPT4ge1xyXG4gICAgICAgIGlmKHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUpe1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucmFkaXVzKCkhICogMjtcclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgIGNvbnN0IGNhbnZhc1dpZHRoID0gdGhpcy5jYW52YXNXaWR0aCgpITtcclxuICAgICAgICAgIGNvbnN0IG1heFdpZHRoID0gY2FudmFzV2lkdGggKiAwLjg7XHJcbiAgICAgICAgICBjb25zdCBwcm9wb3J0aW9uYWxIZWlnaHQgPSBtYXhXaWR0aCAqIHRoaXMucHJvcG9yY2FvSW1hZ2VtKCkhO1xyXG4gICAgICAgICAgcmV0dXJuIHByb3BvcnRpb25hbEhlaWdodCA+IHRoaXMuY2FudmFzSGVpZ2h0KCkhICogMC44ID8gdGhpcy5jYW52YXNIZWlnaHQoKSEgKiAwLjggLyB0aGlzLnByb3BvcmNhb0ltYWdlbSgpISA6IG1heFdpZHRoO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG4gICAgICBjdXRIZWlnaHQgPSBjb21wdXRlZDxudW1iZXIgfCBudWxsPigoKSA9PiB7XHJcbiAgICAgICAgaWYodGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5yYWRpdXMoKSEgKiAyO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgY29uc3QgY2FudmFzSGVpZ2h0ID0gdGhpcy5jYW52YXNIZWlnaHQoKSE7XHJcbiAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSBjYW52YXNIZWlnaHQgKiAwLjg7XHJcbiAgICAgICAgICBjb25zdCBwcm9wb3J0aW9uYWxXaWR0aCA9IG1heEhlaWdodCAvIHRoaXMucHJvcG9yY2FvSW1hZ2VtKCkhO1xyXG4gICAgICAgICAgcmV0dXJuIHByb3BvcnRpb25hbFdpZHRoID4gdGhpcy5jYW52YXNXaWR0aCgpISAqIDAuOCA/IHRoaXMuY2FudmFzV2lkdGgoKSEgKiAwLjggKiB0aGlzLnByb3BvcmNhb0ltYWdlbSgpISA6IG1heEhlaWdodDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vPyBMYXJndXJhIGUgYWx0dXJhIGRhIGltYWdlbSBubyBjYW52YXMgKGJhc2VhZG8gbmEgZXNjYWxhKSAtIHRhbWFuaG8gcmVhbCBkYSBpbWFnZW1cclxuICAgICAgY2FudmFJbWFnZVdpZHRoID0gY29tcHV0ZWQ8bnVtYmVyPigoKT0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fSW1hZ2UoKS53aWR0aCAqIHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpIVxyXG4gICAgICB9KVxyXG4gICAgICBjYW52YUltYWdlSGVpZ2h0ID0gY29tcHV0ZWQ8bnVtYmVyPigoKT0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fSW1hZ2UoKS5oZWlnaHQgKiB0aGlzLnNjYWxlRmFjdG9yUmVhZE9ubHkoKSFcclxuICAgICAgfSlcclxuICAgICAgcHJvcG9yY2FvSW1hZ2VtID0gY29tcHV0ZWQ8bnVtYmVyIHwgbnVsbD4oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl92YXJpYXZpZXNEaWFsb2coKT8uaGVpZ2h0ISAvIHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy53aWR0aCE7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgcmFkaXVzID0gY29tcHV0ZWQ8bnVtYmVyIHwgbnVsbD4oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1pblNpemUgPSAgIE1hdGgubWluKHRoaXMuY2FudmFzSGVpZ2h0KCkhKjAuOCwgdGhpcy5jYW52YXNXaWR0aCgpISowLjggKTtcclxuICAgICAgICByZXR1cm4gbWluU2l6ZS8yO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyAjcmVnaW9uIExpbWl0ZXMgZGUgbW92aW1lbnRhw6fDo28gZGEgaW1hZ2VtXHJcbiAgICAvLz8gTGltaXRlcyBkZSBtb3ZpbWVudGHDp8OjbyBkYSBpbWFnZW1cclxuICAgICAgaW5kQ2lyY2xlID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCk9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUhXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB4TWluID0gY29tcHV0ZWQ8bnVtYmVyPigoKT0+IHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUhID8gKHRoaXMuY2FudmFzV2lkdGgoKSEgLSAgdGhpcy5jdXRXaWR0aCgpISkvMiA6ICh0aGlzLmNhbnZhc1dpZHRoKCkhIC0gICh0aGlzLnJhZGl1cygpISoyKSkvMlxyXG4gICAgICB9KVxyXG4gICAgICB5TWluID0gY29tcHV0ZWQ8bnVtYmVyPigoKT0+IHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUhID8gKHRoaXMuY2FudmFzSGVpZ2h0KCkhIC0gIHRoaXMuY3V0SGVpZ2h0KCkhKS8yIDogKHRoaXMuY2FudmFzSGVpZ2h0KCkhIC0gICh0aGlzLnJhZGl1cygpISoyKSkvMlxyXG4gICAgICB9KVxyXG5cclxuICAgICAgeE1heCA9IGNvbXB1dGVkPG51bWJlcj4oKCk9PiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLl92YXJpYXZpZXNEaWFsb2coKT8uaW5kQ2lyY2xlISA/IC0oIHRoaXMuY2FudmFJbWFnZVdpZHRoKCkhIC0gKHRoaXMueE1pbigpISkgLSB0aGlzLmN1dFdpZHRoKCkhKSA6IC0oIHRoaXMuY2FudmFJbWFnZVdpZHRoKCkhIC0gKHRoaXMueE1pbigpISkgLSAodGhpcy5yYWRpdXMoKSEqMikpXHJcbiAgICAgIH0pXHJcbiAgICAgIHlNYXggPSBjb21wdXRlZDxudW1iZXI+KCgpPT4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSEgPyAtKCB0aGlzLmNhbnZhSW1hZ2VIZWlnaHQoKSEgLSAodGhpcy55TWluKCkhKSAtIHRoaXMuY3V0SGVpZ2h0KCkhKSA6IC0oIHRoaXMuY2FudmFJbWFnZUhlaWdodCgpISAtICh0aGlzLnlNaW4oKSEpIC0gKHRoaXMucmFkaXVzKCkhKjIpKVxyXG4gICAgICB9KVxyXG4gICAgLy8gI2VuZHJlZ2lvblxyXG5cclxuXHJcblxyXG4gICAgLy8/IFByb3BvcsOnw6NvIGRhIGltYWdlbVxyXG5cclxuICAgIHdpZHRoVGVsYSA9IHNpZ25hbDxudW1iZXI+KDApXHJcbiAgICBoZWlndGhUZWxhID0gc2lnbmFsPG51bWJlcj4oMClcclxuXHJcblxyXG5cclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcclxuICBvbldpbmRvd1Jlc2l6ZSgpIHtcclxuICAgIHRoaXMuYXR1YWxpemFUYW1hbmhvVGVsYSgpXHJcbiAgICB0aGlzLnVwZGF0ZUNhbnZhc1NpemUoKTtcclxuICAgIHRoaXMuYXR1YWxpemFDdXRCb3JkZXIoKTtcclxuICB9XHJcblxyXG4gIGF0dWFsaXphVGFtYW5ob1RlbGEoKXtcclxuICAgIHRoaXMud2lkdGhUZWxhLnNldCh3aW5kb3cuaW5uZXJXaWR0aCk7XHJcbiAgICB0aGlzLmhlaWd0aFRlbGEuc2V0KHdpbmRvdy5pbm5lckhlaWdodCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLnJlY3VwZXJhclZhcmlhdmllc0RpYWxvZygpXHJcbiAgICB0aGlzLmluY2lhclJlZmVyZW5jaWFzKClcclxuICAgIHRoaXMuaW5pY2lhckNhbnZhcygpXHJcbiAgfVxyXG4gIGluY2lhclJlZmVyZW5jaWFzKCl7XHJcbiAgICB0aGlzLmNhbnZhcy5zZXQodGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5jdHguc2V0KHRoaXMuY2FudmFzKCkhLmdldENvbnRleHQoJzJkJykpXHJcbiAgICB0aGlzLl9JbWFnZSgpLnNyYyA9IHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbWFnZW0hXHJcbiAgfVxyXG4gIGluaWNpYXJDYW52YXMoKXtcclxuICAgICAgdGhpcy5fSW1hZ2UoKS5vbmxvYWQgPSAoKSA9PiB7XHJcblxyXG4gICAgICAvLz8gRGVmaW5lIG8gdGFtYW5obyBkbyBjYW52YXNcclxuICAgICAgdGhpcy5jYW52YXMoKSEuaGVpZ2h0ID0gdGhpcy5jYW52YXNIZWlnaHQoKSE7XHJcbiAgICAgIHRoaXMuY2FudmFzKCkhLndpZHRoID0gdGhpcy5jYW52YXNXaWR0aCgpITtcclxuXHJcblxyXG4gICAgICB0aGlzLmFqdXN0YXJab21tRVBvc2ljYW9JbmljaWFsKClcclxuXHJcblxyXG4gICAgICB0aGlzLmluaXRpYWxpemVJbWFnZU1vdmUodGhpcy5jYW52YXMoKSEsIHRoaXMuY3R4KCksIHRoaXMuX0ltYWdlKCkpO1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVNb3VzZVdoZWVsKHRoaXMuY2FudmFzKCkhLCB0aGlzLmN0eCgpLCB0aGlzLl9JbWFnZSgpKTtcclxuXHJcbiAgICAgIHRoaXMucmVkcmF3Q2FudmFzKHRoaXMuY3R4KCksIHRoaXMuX0ltYWdlKCkpO1xyXG5cclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBhanVzdGFyWm9tbUVQb3NpY2FvSW5pY2lhbCgpe1xyXG4gICAgY29uc3QgY3V0V2lkdGggPSB0aGlzLmN1dFdpZHRoKCkhO1xyXG4gICAgY29uc3QgY3V0SGVpZ2h0ID0gdGhpcy5jdXRIZWlnaHQoKSE7XHJcbiAgICBjb25zdCBpbWFnZVdpZHRoID0gdGhpcy5fSW1hZ2UoKS53aWR0aDtcclxuICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gdGhpcy5fSW1hZ2UoKS5oZWlnaHQ7XHJcblxyXG4gICAgLy8/IEFqdXN0YSBwb3NzacOnw6NvIGUgem9vbSBpbmljaWFsXHJcblxyXG4gICAgaWYgKHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUpIHtcclxuICAgICAgY29uc3Qgc2NhbGVGYWN0b3IgPSAodGhpcy5yYWRpdXMoKSEgKiAyKSAvIE1hdGgubWluKGltYWdlV2lkdGgsIGltYWdlSGVpZ2h0KTtcclxuICAgICAgdGhpcy5zZXRTY2FsZUZhY3Rvck1vZGVsKHNjYWxlRmFjdG9yKTtcclxuICAgICAgdGhpcy5zY2FsZUZhY3Rvci5zZXQoc2NhbGVGYWN0b3IpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3Qgc2NhbGVGYWN0b3IgPSB0aGlzLmN1dEhlaWdodCgpISA9PT0gdGhpcy5jdXRXaWR0aCgpIVxyXG4gICAgICAgID8gdGhpcy5fSW1hZ2UoKS53aWR0aCA+IHRoaXMuX0ltYWdlKCkuaGVpZ2h0XHJcbiAgICAgICAgICA/IHRoaXMuY3V0SGVpZ2h0KCkhIC8gaW1hZ2VIZWlnaHRcclxuICAgICAgICAgIDogdGhpcy5jdXRXaWR0aCgpISAvIGltYWdlV2lkdGhcclxuICAgICAgICA6IHRoaXMuY3V0SGVpZ2h0KCkhID4gdGhpcy5jdXRXaWR0aCgpIVxyXG4gICAgICAgICAgPyB0aGlzLmN1dEhlaWdodCgpISAvIGltYWdlSGVpZ2h0XHJcbiAgICAgICAgICA6IHRoaXMuY3V0V2lkdGgoKSEgLyBpbWFnZVdpZHRoO1xyXG4gICAgICB0aGlzLnNldFNjYWxlRmFjdG9yTW9kZWwoc2NhbGVGYWN0b3IpO1xyXG4gICAgICB0aGlzLnNjYWxlRmFjdG9yLnNldChzY2FsZUZhY3Rvcik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbWFnZVggPSBNYXRoLm1heCgodGhpcy5jYW52YXMoKSEud2lkdGggLSBpbWFnZVdpZHRoICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhKSAvIDIsIHRoaXMueE1pbigpISk7XHJcbiAgICB0aGlzLmltYWdlWSA9IE1hdGgubWF4KCh0aGlzLmNhbnZhc0hlaWdodCgpISAtIGltYWdlSGVpZ2h0ICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhKSAvIDIsIHRoaXMueU1pbigpISk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIE3DqXRvZG9zIGRlIHJlY3VwZXJhw6fDo28gZGUgZGFkb3NcclxuICByZWN1cGVyYUluc3RhbmNpYURpYWxvZygpOiBEeW5hbWljRGlhbG9nQ29tcG9uZW50IHtcclxuICAgIGNvbnN0IGFycjogTWFwPER5bmFtaWNEaWFsb2dSZWY8YW55PiwgQ29tcG9uZW50UmVmPGFueT4+ID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcFxyXG4gICAgY29uc3QgZW50cmllcyA9IGFyci5lbnRyaWVzKCk7XHJcbiAgICBjb25zdCBmaXJzdEVudHJ5ID0gZW50cmllcy5uZXh0KCkudmFsdWU7XHJcbiAgICBjb25zdCBbZmlyc3RLZXksIGZpcnN0VmFsdWVdID0gZmlyc3RFbnRyeTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldEluc3RhbmNlKGZpcnN0S2V5KVxyXG4gICAgdGhpcy5kaWFsb2dJbnN0YW5jZSA9IGluc3RhbmNlXHJcbiAgICByZXR1cm4gaW5zdGFuY2VcclxuICB9XHJcblxyXG4gIHJlY3VwZXJhclZhcmlhdmllc0RpYWxvZygpOiB2b2lke1xyXG4gICAgdGhpcy5fdmFyaWF2aWVzRGlhbG9nLnNldCh0aGlzLnJlY3VwZXJhSW5zdGFuY2lhRGlhbG9nKCkuZGF0YS5pZClcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gTcOpdG9kb3MgZGUgYXR1YWxpemFjYW8gZG8gY2FudmFzXHJcbiAgLy8/IEF0dWFsaXphIG8gdGFtYW5obyBkbyBjYW52YXNcclxuICB1cGRhdGVDYW52YXNTaXplKCkge1xyXG5cclxuICAgIHRoaXMuaW1hZ2VYID0gKHRoaXMuY2FudmFzKCkhLndpZHRoIC0gdGhpcy5fSW1hZ2UoKS53aWR0aCAqIHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpISkgLyAyO1xyXG4gICAgdGhpcy5pbWFnZVkgPSAodGhpcy5jYW52YXNIZWlnaHQoKSEgLyAyKSAtICh0aGlzLl9JbWFnZSgpLmhlaWdodCAqIHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpISkgLyAyO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5jYW52YXMoKSEuaGVpZ2h0ID0gdGhpcy5jYW52YXNIZWlnaHQoKSE7XHJcbiAgICB0aGlzLmNhbnZhcygpIS53aWR0aCA9IHRoaXMuY2FudmFzV2lkdGgoKSE7XHJcblxyXG4gICAgdGhpcy5yZWRyYXdDYW52YXModGhpcy5jdHgoKSwgdGhpcy5fSW1hZ2UoKSk7XHJcbiAgfVxyXG5cclxuICByZWRyYXdDYW52YXMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsLCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAgIGlmICghY3R4KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5kcmF3Q3JvcEFyZWEoY3R4KTtcclxuXHJcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTtcclxuICAgIGN0eC5maWx0ZXIgPSAnYmx1cig1cHgpIG9wYWNpdHkoMC45KSc7XHJcbiAgICBjdHguZHJhd0ltYWdlKGltZywgdGhpcy5pbWFnZVgsIHRoaXMuaW1hZ2VZLCBpbWcud2lkdGggKiB0aGlzLnNjYWxlRmFjdG9yUmVhZE9ubHkoKSEsIGltZy5oZWlnaHQgKiB0aGlzLnNjYWxlRmFjdG9yUmVhZE9ubHkoKSEpO1xyXG4gICAgY3R4LmZpbHRlciA9ICdub25lJztcclxuXHJcbiAgICB0aGlzLmRyYXdJbWFnZUluQ3JvcEFyZWEoY3R4LCBpbWcpO1xyXG4gIH1cclxuXHJcbiAgLy8/IERlc2VuaGEgYSDDoXJlYSBkZSBjb3J0ZVxyXG4gIGRyYXdDcm9wQXJlYShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwpIHtcclxuICAgIGlmICghY3R4KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5hdHVhbGl6YUN1dEJvcmRlcigpXHJcblxyXG4gICAgY29uc3QgY3JvcFggPSBjdHguY2FudmFzLndpZHRoIC8gMiAtIHRoaXMuY3V0V2lkdGgoKSEgLyAyO1xyXG4gICAgY29uc3QgY3JvcFkgPSBjdHguY2FudmFzLmhlaWdodCAvIDIgLSB0aGlzLmN1dEhlaWdodCgpISAvIDI7XHJcblxyXG5cclxuICAgIGNvbnN0IGNyb3BYQ2lyY2xlID0gY3R4LmNhbnZhcy53aWR0aCAvIDIgLSB0aGlzLnJhZGl1cygpISAvIDI7XHJcbiAgICBjb25zdCBjcm9wWUNpcmNsZSA9IGN0eC5jYW52YXMuaGVpZ2h0IC8gMiAtIHRoaXMucmFkaXVzKCkhIC8gMjtcclxuXHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgY3R4LmxpbmVXaWR0aCA9IDI7XHJcblxyXG4gICAgaWYodGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSkge1xyXG4gICAgICBjdHguYXJjKGNyb3BYQ2lyY2xlLCBjcm9wWUNpcmNsZSwgdGhpcy5yYWRpdXMoKSEsIDAsIE1hdGguUEkgKiAyLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5yZWN0KGNyb3BYLCBjcm9wWSAsIHRoaXMuY3V0V2lkdGgoKSEsIHRoaXMuY3V0SGVpZ2h0KCkhKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHguc3Ryb2tlKCk7XHJcblxyXG5cclxuICB9XHJcbiAgLy8/IERlc2VuaGEgYSBpbWFnZW0gbmEgw6FyZWEgZGUgY29ydGVcclxuICBkcmF3SW1hZ2VJbkNyb3BBcmVhKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICAgIGlmICghY3R4KSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBjcm9wWCA9IChjdHguY2FudmFzLndpZHRoIC0gdGhpcy5jdXRXaWR0aCgpISkgLyAyO1xyXG4gICAgICBjb25zdCBjcm9wWSA9IChjdHguY2FudmFzLmhlaWdodCAtIHRoaXMuY3V0SGVpZ2h0KCkhKSAvIDI7XHJcblxyXG4gICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICBpZih0aGlzLl92YXJpYXZpZXNEaWFsb2coKT8uaW5kQ2lyY2xlKSB7XHJcbiAgICAgICAgY3R4LmFyYyhjdHguY2FudmFzLndpZHRoLzIsIGN0eC5jYW52YXMuaGVpZ2h0LzIsIHRoaXMucmFkaXVzKCkhLCAwLCBNYXRoLlBJICogMiwgdHJ1ZSk7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN0eC5yZWN0KGNyb3BYLCBjcm9wWSAsIHRoaXMuY3V0V2lkdGgoKSEsIHRoaXMuY3V0SGVpZ2h0KCkhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3R4LmNsaXAoKTtcclxuICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIHRoaXMuaW1hZ2VYLCB0aGlzLmltYWdlWSwgaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhLCBpbWcuaGVpZ2h0ICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhKTtcclxuICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICB9XHJcbiAgYXR1YWxpemFDdXRCb3JkZXIoKSB7XHJcbiAgICBpZiAodGhpcy5jcm9wQm9yZGVyICYmIHRoaXMuY3JvcEJvcmRlci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGNyb3BCb3JkZXJFbGVtZW50ID0gdGhpcy5jcm9wQm9yZGVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmKHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUpe1xyXG5cclxuICAgICAgICBjcm9wQm9yZGVyRWxlbWVudC5zdHlsZS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cygpISoyKydweCc7XHJcbiAgICAgICAgY3JvcEJvcmRlckVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLnJhZGl1cygpISoyKydweCc7XHJcbiAgICAgICAgY3JvcEJvcmRlckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yYWRpdXMoKSEqMisncHgnO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjcm9wQm9yZGVyRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuY3V0V2lkdGgoKSErJ3B4JztcclxuICAgICAgICBjcm9wQm9yZGVyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmN1dEhlaWdodCgpISsncHgnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZXJzIGRlIGV2ZW50b3NcclxuXHJcbiAgb25ab29tQ2hhbmdlKGU6IGFueSkge1xyXG4gICAgY29uc3QgcHJldlpvb20gPSB0aGlzLnNjYWxlRmFjdG9yUmVhZE9ubHkoKSE7XHJcbiAgICBjb25zdCB6b29tVmFsdWUgPSBlLnZhbHVlO1xyXG4gICAgY29uc3QgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nID0gcHJldlpvb20gPCB6b29tVmFsdWUgPyAndXAnIDogJ2Rvd24nO1xyXG4gICAgdGhpcy5hanVzdGFyWm9vbShkaXJlY3Rpb24pXHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGluaXRpYWxpemVNb3VzZVdoZWVsKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICBjYW52YXMub253aGVlbCA9IChlKSA9PiB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgLy8/IFJlY3VwZXJhbmRvIG9zIHZhbG9yZXMgZGUgem9vbSBlIGRlbHRhIGF0dWFpc1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicgPSBlLmRlbHRhWSA+IDAgPyAnZG93bicgOiAndXAnO1xyXG5cclxuICAgICAgdGhpcy5hanVzdGFyWm9vbShkaXJlY3Rpb24pXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcblxyXG4gIGFqdXN0YXJab29tKGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJykge1xyXG4gICAgY29uc3QgcHJldlNjYWxlRmFjdG9yID0gdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhO1xyXG4gICAgY29uc3QgZGVsdGEgPSBkaXJlY3Rpb24gPT0gJ2Rvd24nID8gLTAuMDEgOiAwLjAxO1xyXG5cclxuICAgIGxldCBzY2FsZUZhY3RvciA9IE1hdGgubWluKChwcmV2U2NhbGVGYWN0b3IgKyAoZGVsdGEqMS4yKSksIDMpO1xyXG5cclxuICAgIGNvbnN0IG5ld0hlaWdodCA9IHRoaXMuX0ltYWdlKCkuaGVpZ2h0ICogc2NhbGVGYWN0b3I7XHJcbiAgICBjb25zdCBuZXdXaWR0aCA9IHRoaXMuX0ltYWdlKCkud2lkdGggKiBzY2FsZUZhY3RvcjtcclxuXHJcbiAgICBpZiAodGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSkge1xyXG4gICAgICBpZiAobmV3SGVpZ2h0IDwgdGhpcy5yYWRpdXMoKSEgKiAyIHx8IG5ld1dpZHRoIDwgdGhpcy5yYWRpdXMoKSEgKiAyKSB7XHJcbiAgICAgICAgc2NhbGVGYWN0b3IgPSBwcmV2U2NhbGVGYWN0b3I7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zY2FsZUZhY3Rvci5zZXQoc2NhbGVGYWN0b3IpO1xyXG4gICAgICAgIHRoaXMuc2V0U2NhbGVGYWN0b3JNb2RlbChzY2FsZUZhY3Rvcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChuZXdIZWlnaHQgPCB0aGlzLmN1dEhlaWdodCgpISB8fCBuZXdXaWR0aCA8IHRoaXMuY3V0V2lkdGgoKSEpIHtcclxuICAgICAgICBzY2FsZUZhY3RvciA9IHByZXZTY2FsZUZhY3RvcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNjYWxlRmFjdG9yLnNldChzY2FsZUZhY3Rvcik7XHJcbiAgICAgICAgdGhpcy5zZXRTY2FsZUZhY3Rvck1vZGVsKHNjYWxlRmFjdG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2NhbGVGYWN0b3Iuc2V0KHNjYWxlRmFjdG9yKTtcclxuICAgIHRoaXMuc2V0U2NhbGVGYWN0b3JNb2RlbChzY2FsZUZhY3Rvcik7XHJcblxyXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IGNhbnZhcy5vZmZzZXRXaWR0aDtcclxuICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IGNhbnZhcy5vZmZzZXRIZWlnaHQ7XHJcbiAgICBjb25zdCBjZW50ZXJYID0gY2FudmFzV2lkdGggLyAyO1xyXG4gICAgY29uc3QgY2VudGVyWSA9IGNhbnZhc0hlaWdodCAvIDI7XHJcbiAgICBjb25zdCBuZXdDYW52YXNYID0gY2VudGVyWCAtIChjZW50ZXJYIC0gdGhpcy5pbWFnZVgpICogKHNjYWxlRmFjdG9yIC8gcHJldlNjYWxlRmFjdG9yKTtcclxuICAgIGNvbnN0IG5ld0NhbnZhc1kgPSBjZW50ZXJZIC0gKGNlbnRlclkgLSB0aGlzLmltYWdlWSkgKiAoc2NhbGVGYWN0b3IgLyBwcmV2U2NhbGVGYWN0b3IpO1xyXG4gICAgdGhpcy5pbWFnZVggPSBuZXdDYW52YXNYO1xyXG4gICAgdGhpcy5pbWFnZVkgPSBuZXdDYW52YXNZO1xyXG5cclxuICAgIGlmICghdGhpcy52ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVhtaW4oKSkge1xyXG4gICAgICBjb25zdCBkaWZmWG1pbiA9IHRoaXMucmV0b3JuYURpZmZYbWF4KCk7XHJcbiAgICAgIHRoaXMubW92ZUltYWdlKHRoaXMuaW1hZ2VYIC0gZGlmZlhtaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy52ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVhtYXgoKSkge1xyXG4gICAgICBjb25zdCBkaWZmWG1heCA9IHRoaXMucmV0b3JuYURpZmZYbWluKCk7XHJcbiAgICAgIHRoaXMubW92ZUltYWdlKHRoaXMuaW1hZ2VYICsgZGlmZlhtYXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy52ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVltYXgoKSkge1xyXG4gICAgICBjb25zdCBkaWZmWW1heCA9IHRoaXMucmV0b3JuYURpZmZZbWluKCk7XHJcbiAgICAgIHRoaXMubW92ZUltYWdlKHVuZGVmaW5lZCwgdGhpcy5pbWFnZVkgKyBkaWZmWW1heCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnZlcmlmaWNhSW1hZ2VtZGVudHJvRG9zTGltaXRlWW1pbigpKSB7XHJcbiAgICAgIGNvbnN0IGRpZmZZbWluID0gdGhpcy5yZXRvcm5hRGlmZlltYXgoKTtcclxuICAgICAgdGhpcy5tb3ZlSW1hZ2UodW5kZWZpbmVkLCB0aGlzLmltYWdlWSAtIGRpZmZZbWluKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlZHJhd0NhbnZhcyh0aGlzLmN0eCgpISwgdGhpcy5fSW1hZ2UoKSEpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcbiAgdmVyaWZpY2FJbWFnZW1kZW50cm9Eb3NMaW1pdGVYbWluKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbmV3SW1hZ2VYID0gdGhpcy5pbWFnZVg7XHJcbiAgICByZXR1cm4gbmV3SW1hZ2VYIDwgdGhpcy54TWluKCkhXHJcbiAgfVxyXG4gIHZlcmlmaWNhSW1hZ2VtZGVudHJvRG9zTGltaXRlWG1heCgpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG5ld0ltYWdlWCA9IHRoaXMuaW1hZ2VYO1xyXG4gICAgcmV0dXJuIG5ld0ltYWdlWCA+IHRoaXMueE1heCgpIVxyXG4gIH1cclxuICB2ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVltaW4oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBuZXdJbWFnZVkgPSB0aGlzLmltYWdlWTtcclxuICAgIHJldHVybiBuZXdJbWFnZVkgPCB0aGlzLnlNaW4oKSFcclxuICB9XHJcbiAgdmVyaWZpY2FJbWFnZW1kZW50cm9Eb3NMaW1pdGVZbWF4KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbmV3SW1hZ2VZID0gdGhpcy5pbWFnZVk7XHJcbiAgICByZXR1cm4gbmV3SW1hZ2VZID4gdGhpcy55TWF4KCkhXHJcbiAgfVxyXG5cclxuICByZXRvcm5hRGlmZlhtaW4oKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG5ld0ltYWdlWCA9IHRoaXMuaW1hZ2VYO1xyXG4gICAgcmV0dXJuIHRoaXMueE1pbigpISAtIG5ld0ltYWdlWDtcclxuICB9XHJcbiAgcmV0b3JuYURpZmZYbWF4KCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBuZXdJbWFnZVggPSB0aGlzLmltYWdlWDtcclxuICAgIHJldHVybiBuZXdJbWFnZVggLSB0aGlzLnhNYXgoKSE7XHJcbiAgfVxyXG4gIHJldG9ybmFEaWZmWW1pbigpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbmV3SW1hZ2VZID0gdGhpcy5pbWFnZVk7XHJcbiAgICByZXR1cm4gdGhpcy55TWluKCkhIC0gbmV3SW1hZ2VZO1xyXG4gIH1cclxuICByZXRvcm5hRGlmZlltYXgoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG5ld0ltYWdlWSA9IHRoaXMuaW1hZ2VZO1xyXG4gICAgcmV0dXJuIG5ld0ltYWdlWSAtIHRoaXMueU1heCgpITtcclxuICB9XHJcblxyXG5cclxuICBpbml0aWFsaXplSW1hZ2VNb3ZlKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICBsZXQgaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG5cclxuICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XHJcblxyXG4gICAgY2FudmFzLm9ubW91c2Vkb3duID0gKGUpID0+IHtcclxuICAgICAgaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYmJpbmcnO1xyXG4gICAgICB0aGlzLnN0YXJ0WCA9IGUub2Zmc2V0WCAtIHRoaXMuaW1hZ2VYO1xyXG4gICAgICB0aGlzLnN0YXJ0WSA9IGUub2Zmc2V0WSAtIHRoaXMuaW1hZ2VZO1xyXG4gICAgfTtcclxuXHJcbiAgICBjYW52YXMub25tb3VzZXVwID0gKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbnZhcy5vbm1vdXNlb3V0ID0gKCkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gZmFsc2U7XHJcbiAgICAgIGNhbnZhcy5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbnZhcy5vbm1vdXNlbW92ZSA9IChlKSA9PiB7XHJcbiAgICAgIGlmIChpc0RyYWdnaW5nKSB7XHJcblxyXG4gICAgICAgICAgLy8gQ2FsY3VsYSBvIG5vdm8gcG9zaWNpb25hbWVudG8gZGEgaW1hZ2VtXHJcbiAgICAgICAgICBsZXQgbmV3SW1hZ2VYID0gZS5vZmZzZXRYIC0gdGhpcy5zdGFydFg7XHJcbiAgICAgICAgICBsZXQgbmV3SW1hZ2VZID0gZS5vZmZzZXRZIC0gdGhpcy5zdGFydFk7XHJcblxyXG4gICAgICAgICAgaWYgKG5ld0ltYWdlWCA8ICB0aGlzLnhNaW4oKSEgJiYgbmV3SW1hZ2VYID4gdGhpcy54TWF4KCkhKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZUltYWdlKG5ld0ltYWdlWClcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmKG5ld0ltYWdlWSA8IHRoaXMueU1pbigpISAmJiBuZXdJbWFnZVkgPiB0aGlzLnlNYXgoKSEpe1xyXG4gICAgICAgICAgICB0aGlzLm1vdmVJbWFnZSh1bmRlZmluZWQsIG5ld0ltYWdlWSlcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgdGhpcy5yZWRyYXdDYW52YXMoY3R4LCBpbWcpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuXHJcbiAgfVxyXG5cclxuICBtb3ZlSW1hZ2UoZHg/OiBudW1iZXIsIGR5PzogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmltYWdlWCA9IChkeD8/dGhpcy5pbWFnZVgpO1xyXG4gICAgdGhpcy5pbWFnZVkgPSAoZHk/P3RoaXMuaW1hZ2VZKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gTcOpdG9kb3MgZGUgY29ydGUgZSBmZWNoYW1lbnRvIGRvIG1vZGFsXHJcbiAgY3JvcEltYWdlKCkge1xyXG4gICAgY29uc3QgY3R4ID0gdGhpcy5jdHgoKTtcclxuXHJcbiAgICBpZiAoY3R4KSB7XHJcbiAgICAgIGNvbnN0IFggPSAoKHRoaXMuY2FudmFzKCkhLndpZHRoIC0gdGhpcy5fSW1hZ2UoKS53aWR0aCAqIHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpISkgLyAyKTtcclxuICAgICAgY29uc3QgWSA9ICgodGhpcy5jYW52YXNIZWlnaHQoKSEgLyAyKSAtICh0aGlzLl9JbWFnZSgpLmhlaWdodCAqIHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpISkgLyAyKTtcclxuXHJcbiAgICAgIC8vIFJlY3VwZXJhciBvIGltYWdlRGF0YSBkYSBpbWFnZW0gcXVlIGVzdMOhIG5hIMOhcmVhIGRlIGNvcnRlXHJcbiAgICAgIGxldCBpbWFnZURhdGFcclxuICAgICAgY29uc3QgY3JvcFggPSAoY3R4LmNhbnZhcy53aWR0aCAtIHRoaXMuY3V0V2lkdGgoKSEpIC8gMjtcclxuICAgICAgY29uc3QgY3JvcFkgPSAoY3R4LmNhbnZhcy5oZWlnaHQgLSB0aGlzLmN1dEhlaWdodCgpISkgLyAyO1xyXG4gICAgICBpZih0aGlzLl92YXJpYXZpZXNEaWFsb2coKT8uaW5kQ2lyY2xlKXtcclxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgY2FudmFzIHdpdGggdGhlIHNhbWUgZGltZW5zaW9ucyBhcyB0aGUgY2lyY2xlXHJcbiAgICAgICAgY29uc3QgY2lyY2xlQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgY29uc3QgY2lyY2xlQ3R4ID0gY2lyY2xlQ2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcbiAgICAgICAgY2lyY2xlQ2FudmFzLndpZHRoID0gdGhpcy5yYWRpdXMoKSEgKiAyO1xyXG4gICAgICAgIGNpcmNsZUNhbnZhcy5oZWlnaHQgPSB0aGlzLnJhZGl1cygpISAqIDI7XHJcblxyXG4gICAgICAgIC8vIERyYXcgdGhlIGNpcmNsZSBvbiB0aGUgbmV3IGNhbnZhc1xyXG4gICAgICAgIGNpcmNsZUN0eCEuYmVnaW5QYXRoKCk7XHJcbiAgICAgICAgY2lyY2xlQ3R4IS5hcmModGhpcy5yYWRpdXMoKSEsIHRoaXMucmFkaXVzKCkhLCB0aGlzLnJhZGl1cygpISwgMCwgMiAqIE1hdGguUEkpO1xyXG4gICAgICAgIGNpcmNsZUN0eCEuZmlsbCgpO1xyXG5cclxuICAgICAgICAvLyBTZXQgdGhlIGNvbXBvc2l0ZSBvcGVyYXRpb24gdG8gJ2Rlc3RpbmF0aW9uLWluJyB0byBjdXQgb3V0IHRoZSBjaXJjbGVcclxuICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2Rlc3RpbmF0aW9uLWluJztcclxuXHJcbiAgICAgICAgLy8gRHJhdyB0aGUgaW1hZ2Ugb24gdGhlIG1haW4gY2FudmFzIHVzaW5nIHRoZSBjaXJjbGUgYXMgYSBtYXNrXHJcbiAgICAgICAgY3R4LmRyYXdJbWFnZShjaXJjbGVDYW52YXMsIGNyb3BYLCBjcm9wWSk7XHJcblxyXG4gICAgICAgIC8vIFJlc2V0IHRoZSBjb21wb3NpdGUgb3BlcmF0aW9uIHRvIHRoZSBkZWZhdWx0IHZhbHVlXHJcbiAgICAgICAgY3R4Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdzb3VyY2Utb3Zlcic7XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgaW1hZ2UgZGF0YSBvZiB0aGUgY3JvcHBlZCBjaXJjbGVcclxuICAgICAgICBpbWFnZURhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKGNyb3BYLCBjcm9wWSwgdGhpcy5yYWRpdXMoKSEgKiAyLCB0aGlzLnJhZGl1cygpISAqIDIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoY3JvcFgsIGNyb3BZLCB0aGlzLmN1dFdpZHRoKCkhLCB0aGlzLmN1dEhlaWdodCgpISk7XHJcbiAgICAgIH1cclxuXHJcblxyXG4gICAgICAvLyBPYnRlciBvcyB2YWxvcmVzIGRlIHdpZHRoIGUgaGVpZ2h0IGRhIHZhcmnDoXZlbCBfdmFyaWF2aWVzRGlhbG9nXHJcbiAgICAgIGNvbnN0IHZhcmlhdmVpc0RpYWxvZyA9IHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpO1xyXG4gICAgICBpZiAodmFyaWF2ZWlzRGlhbG9nKSB7XHJcbiAgICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSB2YXJpYXZlaXNEaWFsb2c7XHJcblxyXG4gICAgICAgIC8vIENyaWFyIHVtIG5vdm8gY2FudmFzIGUgY29udGV4dG8gY29tIG9zIHZhbG9yZXMgZGUgd2lkdGggZSBoZWlnaHRcclxuICAgICAgICBjb25zdCBuZXdDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjb25zdCBuZXdDdHggPSBuZXdDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBuZXdDYW52YXMud2lkdGggPSB3aWR0aDtcclxuICAgICAgICBuZXdDYW52YXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cclxuICAgICAgICBpZiAobmV3Q3R4KSB7XHJcbiAgICAgICAgICAvLyBSZWRpbWVuc2lvbmFyIGEgaW1hZ2VtIHBhcmEgbyB0YW1hbmhvIGVzcGVjaWZpY2Fkb1xyXG4gICAgICAgICAgY29uc3QgdGVtcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgICAgY29uc3QgdGVtcEN0eCA9IHRlbXBDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICAgIHRlbXBDYW52YXMud2lkdGggPSB0aGlzLmN1dFdpZHRoKCkhO1xyXG4gICAgICAgICAgdGVtcENhbnZhcy5oZWlnaHQgPSB0aGlzLmN1dEhlaWdodCgpITtcclxuICAgICAgICAgIHRlbXBDdHghLnB1dEltYWdlRGF0YShpbWFnZURhdGEsIDAsIDApO1xyXG5cclxuICAgICAgICAgIG5ld0N0eC5kcmF3SW1hZ2UodGVtcENhbnZhcywgMCwgMCwgd2lkdGgsIGhlaWdodCk7XHJcblxyXG4gICAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjcm9wSW1hZ2UnLCB7IGRldGFpbDp7XHJcbiAgICAgICAgICAgIHJlc3VsdDogUHJvbWlzZS5yZXNvbHZlKG5ld0NhbnZhcy50b0RhdGFVUkwoKSksXHJcbiAgICAgICAgICAgIHN0YXR1czogdHJ1ZVxyXG4gICAgICAgICAgfSB9KSk7XHJcbiAgICAgICAgICB0aGlzLmNsb3NlQ3JvcE1vZGFsKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZUNyb3BNb2RhbCgpIHtcclxuICAgIHRoaXMuZGlhbG9nSW5zdGFuY2UuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbCgpe1xyXG4gICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjcm9wSW1hZ2UnLCB7IGRldGFpbDp7XHJcbiAgICAgIHJlc3VsdDogUHJvbWlzZS5yZXNvbHZlKCdjYW5jZWwnKSxcclxuICAgICAgc3RhdHVzOiBmYWxzZVxyXG4gICAgfSB9KSk7XHJcblxyXG4gICAgdGhpcy5jbG9zZUNyb3BNb2RhbCgpXHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxufVxyXG4iXX0=
569
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuY3V0dGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9rZWV2by1jb21wb25lbnRzL3NyYy9saWIvYXBpL3NlcnZpY2VzL2ltYWdlLmN1dHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWdCLFFBQVEsRUFBYyxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBMEM5Qyx3Q0FBd0M7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7OztBQTlDN0UsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUNtQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUMzQyxDQUFDO0lBRUwsR0FBRyxDQUFDLFdBQW1CLEVBQUUsS0FBYSxFQUFFLE1BQWMsRUFBRSxZQUFxQixLQUFLO1FBQ2hGLE1BQU0sU0FBUyxHQUFH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LGNBQWMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsTUFBTTtRQUNKLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFDO2dCQUN6RCxNQUFNLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQ2pDLE1BQU0sRUFBRSxLQUFLO2FBQ2QsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVOLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtJQUN2QixDQUFDOzhHQXRqQkcsZUFBZTtrR0FBZixlQUFlLHlWQTFJVDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUJULGdxQ0FzR0MsWUFBWSw4QkFDWixhQUFhLDhCQUNiLFlBQVksK1JBQ1osWUFBWSw4QkFDWixZQUFZLDhCQUNaLGdCQUFnQiw4QkFFaEIsV0FBVyw4VkFDWCxtQkFBbUIsOEJBQ25CLGNBQWMsaU5BQ2QsYUFBYTs7MkZBS1gsZUFBZTtrQkE1SXBCLFNBQVM7K0JBQ0Usc0JBQXNCLFlBQ3RCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FxQlQsY0FvR1csSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixZQUFZO3dCQUNaLFlBQVk7d0JBQ1osWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGNBQWM7d0JBQ2QsYUFBYTtxQkFFZDtpSEFnQjBCLFVBQVU7c0JBQWxDLFNBQVM7dUJBQUMsWUFBWTtnQkFDRSxVQUFVO3NCQUFsQyxTQUFTO3VCQUFDLFlBQVk7Z0JBK0d6QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdGFibGUsIHNpZ25hbCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb21wb25lbnQsIER5bmFtaWNEaWFsb2dSZWYgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xyXG5pbXBvcnQgeyBEaWFsb2dNb2R1bGUgfSBmcm9tICdwcmltZW5nL2RpYWxvZyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWFnZUN1dHRlclNlcnZpY2Uge1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGlhbG9nc2VydmljZTogRGlhbG9nU2VydmljZVxyXG4gICkgeyB9XHJcblxyXG4gIGN1dChpbWFnZUJhc2U2NDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaW5kQ2lyY2xlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgY3V0Q29uZmlnID0geyBpbWFnZUJhc2U2NCwgd2lkdGgsIGhlaWdodCwgaW5kQ2lyY2xlIH07XHJcbiAgICB0aGlzLmFicmlyTW9kYWwoY3V0Q29uZmlnKTtcclxuXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdjcm9wSW1hZ2UnLCAoZXZlbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKGV2ZW50LmRldGFpbC5zdGF0dXMgPT0gdHJ1ZSApIHtcclxuICAgICAgICAgIHJlc29sdmUoZXZlbnQuZGV0YWlsLnJlc3VsdCk7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICByZWplY3QoJ09wZXJhY2FvIGNhbmNlbGFkYS4nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYWJyaXJNb2RhbChjdXRDb25maWc6IHsgaW1hZ2VCYXNlNjQ6IHN0cmluZywgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGluZENpcmNsZTogYm9vbGVhbiB9KSB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSAgICAgICB7XHJcbiAgICAgIGNsb3NhYmxlOiB0cnVlLFxyXG4gICAgICBtYXhpbWl6YWJsZTogZmFsc2UsXHJcbiAgICAgIHBvcHVwOiB0cnVlLFxyXG4gICAgICB3aWR0aDogJzc1dncnLFxyXG4gICAgICBoZWFkZXI6IGBDb3J0YXJgICxcclxuICAgICAgaWQ6IHsgaW1hZ2VtOiBjdXRDb25maWcuaW1hZ2VCYXNlNjQsIHdpZHRoOiBjdXRDb25maWcud2lkdGgsIGhlaWdodDogY3V0Q29uZmlnLmhlaWdodCwgaW5kQ2lyY2xlOiBjdXRDb25maWcuaW5kQ2lyY2xlIH0sXHJcbiAgICAgIHN0eWxlQ2xhc3M6ICdtb2RhbCdcclxuICAgIH1cclxuICAgIGNvbnN0IGRpYWxvZ1JlZjogRHluYW1pY0RpYWxvZ1JlZiA9IEZvcm1TZXJ2aWNlLm9wZW5EaWFsb2codGhpcy5kaWFsb2dzZXJ2aWNlLCBTaW1wbGVDb21wb25lbnQsICgpPT57fSwgcGFyYW1zKTtcclxuICB9XHJcbn1cclxuXHJcblxyXG4vLyA/IENvbXBvbmVudGUgZGUgbW9kYWwgdXNhZG8gbm8gY3V0dGVyXHJcbmltcG9ydCB7IFNsaWRlck1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc2xpZGVyJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcclxuaW1wb3J0IHsgRmlsZVVwbG9hZE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvZmlsZXVwbG9hZCc7XHJcbmltcG9ydCB7IEt2TGFiZWxNb2R1bGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2t2LWxhYmVsL2t2LWxhYmVsLm1vZHVsZSc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi9mb3JtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBLdk1vZGFsTW9kdWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9rdi1tb2RhbC9rdi1tb2RhbC5tb2R1bGUnO1xyXG5pbXBvcnQgeyBLdkJ1dHRvbk1vZHVsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMva3YtYnV0dG9uL2t2LWJ1dHRvbi5tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhcHAtc2ltcGxlLWNvbXBvbmVudCcsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3JvcC1jb250YWluZXJcIj5cclxuICAgICAgICAgIDxjYW52YXMgI2Nyb3BDYW52YXMgY2xhc3M9XCJjcm9wLWNhbnZhc1wiPjwvY2FudmFzPlxyXG4gICAgICAgICAgPGRpdiAjY3JvcEJvcmRlciBjbGFzcz1cImNyb3AtYm9yZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbXQtMlwiPlxyXG4gICAgICAgICAgPGt2LWxhYmVsIGxhYmVsPVwiWm9vbVwiIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdDtcIiAvPlxyXG4gICAgICAgICAgPHAtc2xpZGVyIFsobmdNb2RlbCldPVwidGhpcy5zY2FsZUZhY3Rvck1vZGVsXCIgW3N0ZXBdPVwiMC4wMDAxXCIgIFttYXhdPVwiNVwiICAob25DaGFuZ2UpPVwib25ab29tQ2hhbmdlKCRldmVudClcIj48L3Atc2xpZGVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b24tY29udGFpbmVyXCI+XHJcbiAgICAgICAgICA8a3YtYnV0dG9uIGxhYmVsPVwiQ2FuY2VsYXJcIiBzZXZlcml0eT1cInRlcnRpYXJ5XCIgaWNvbj1cImNsb3NlXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+PC9rdi1idXR0b24+XHJcbiAgICAgICAgICA8a3YtYnV0dG9uIGxhYmVsPVwiUmVjb3J0YXJcIiBzZXZlcml0eT1cInByaW1hcnlcIiBpY29uPVwiY3JvcFwiIChjbGljayk9XCJjcm9wSW1hZ2UoKVwiIGNsYXNzPVwibWwtMlwiPjwva3YtYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPC9kaXY+XHJcblxyXG5cclxuXHJcbiAgYCxcclxuICBzdHlsZXM6IFtgXHJcblxyXG5pbWcge1xyXG4gIGJvcmRlci1zdHlsZTogc29saWQ7XHJcbiAgYm9yZGVyLXdpZHRoOiAycHg7XHJcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xyXG4gIG9iamVjdC1maXQ6IGNvdmVyO1xyXG59XHJcblxyXG5pIHtcclxuICBmb250LXNpemU6IDIycHg7XHJcbn1cclxuXHJcbi5ib3Rhby1hbHRlcmFyLWZvdG8ge1xyXG4gIGJvcmRlci1zdHlsZTogbm9uZTtcclxuICB3aWR0aDogbWF4LWNvbnRlbnQ7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMjU0MjtcclxuICBjb2xvcjogYmxhY2s7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIHBhZGRpbmc6IDdweCA5cHg7XHJcbn1cclxuXHJcbi5ib3Rhby1hbHRlcmFyLWZvdG8gaSB7XHJcbiAgY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbi5ib3Rhby1leGNsdWlyLWZvdG8ge1xyXG4gIGJvcmRlci1zdHlsZTogbm9uZTtcclxuICB3aWR0aDogbWF4LWNvbnRlbnQ7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogIzAwMjU0MjtcclxuICBjb2xvcjogYmxhY2s7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgY3Vyc29yOiBwb2ludGVyO1xyXG4gIHBhZGRpbmc6IDdweCA5cHg7XHJcbn1cclxuXHJcbi5ib3Rhby1leGNsdWlyLWZvdG8gaSB7XHJcbiAgY29sb3I6ICNmZmY7XHJcbn1cclxuXHJcbi5idG4ge1xyXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICB0b3A6IDg3JTtcclxuICBsZWZ0OiA4NyU7XHJcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XHJcbn1cclxuXHJcbi5pbWFnZS1jb250YWluZXIge1xyXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbn1cclxuXHJcbi5tb2RhbC1jb250ZW50IHtcclxuICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZlZmVmZTtcclxuICBtYXJnaW46IDElIGF1dG87XHJcbiAgcGFkZGluZzogMjBweDtcclxuICB3aWR0aDogODAlO1xyXG4gIG1heC13aWR0aDogZml0LWNvbnRlbnQ7XHJcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIGJvcmRlci1yYWRpdXM6IDEycHg7XHJcbn1cclxuXHJcbi5jcm9wLWNvbnRhaW5lciB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG59XHJcblxyXG4uY3JvcC1jYW52YXMge1xyXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkMWQ1ZGI7XHJcbiAgYm9yZGVyLXJhZGl1czogMTJweDtcclxuICB3aWR0aDogMTAwJTtcclxuICBoZWlnaHQ6IGF1dG87XHJcbn1cclxuXHJcbi5jcm9wLWJvcmRlciB7XHJcbiAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gIGJvcmRlcjogMnB4IGRhc2hlZCAjOWNhM2FmO1xyXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xyXG59XHJcblxyXG4uem9vbS1jb250YWluZXIge1xyXG4gIHBhZGRpbmctdG9wOiAyMHB4O1xyXG4gIHBhZGRpbmctYm90dG9tOiAyMHB4O1xyXG59XHJcblxyXG4uYnV0dG9uLWNvbnRhaW5lciB7XHJcbiAgZGlzcGxheTogZmxleDtcclxuICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XHJcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcclxuICBtYXJnaW4tdG9wOiAyNHB4O1xyXG59XHJcblxyXG5cclxuXHJcbiAgYF0sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBEaWFsb2dNb2R1bGUsXHJcbiAgICBLdk1vZGFsTW9kdWxlLFxyXG4gICAgU2xpZGVyTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgQnV0dG9uTW9kdWxlLFxyXG4gICAgRmlsZVVwbG9hZE1vZHVsZSxcclxuICAgIFNsaWRlck1vZHVsZSxcclxuICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIEt2QnV0dG9uTW9kdWxlLFxyXG4gICAgS3ZMYWJlbE1vZHVsZSxcclxuXHJcbiAgXVxyXG59KVxyXG5cclxuY2xhc3MgU2ltcGxlQ29tcG9uZW50IHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBkeW5hbWljRGlhbG9nUmVmOiBEeW5hbWljRGlhbG9nUmVmLCBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHtcclxuICAgIHRoaXMuYXR1YWxpemFUYW1hbmhvVGVsYSgpXHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gPyBWYXJpYXZpZXMgcXVlIHJlY2ViZW0gb3MgdmFsb3JlcyBkbyBkaWFsb2dcclxuICBfdmFyaWF2aWVzRGlhbG9nID0gc2lnbmFsPHsgaW1hZ2VtOiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBpbmRDaXJjbGU6IGJvb2xlYW4gfXxudWxsPihudWxsKVxyXG5cclxuXHJcblxyXG4gICAgLy8/IFJlZmVyw6puY2lhIHBhcmEgbyBlbGVtZW50byBxdWUgY29udMOpbSBhIGltYWdlbSBlIGNhbnZhc1xyXG4gICAgQFZpZXdDaGlsZCgnY3JvcENhbnZhcycpIGNyb3BDYW52YXMhOiBFbGVtZW50UmVmPEhUTUxDYW52YXNFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ2Nyb3BCb3JkZXInKSBjcm9wQm9yZGVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgICAvLz8gUmVmZXLDqm5jaWFzIHBhcmEgbyBjb250ZXh0byBlIGNhbnZhc1xyXG4gICAgcHJpdmF0ZSBjYW52YXMgPSBzaWduYWw8SFRNTENhbnZhc0VsZW1lbnR8bnVsbD4obnVsbCk7XHJcbiAgICBwcml2YXRlIGN0eCA9ICBzaWduYWw8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEfG51bGw+KG51bGwpO1xyXG4gICAgcHJpdmF0ZSBfSW1hZ2UgPSBzaWduYWw8SFRNTEltYWdlRWxlbWVudD4obmV3IEltYWdlKCkpO1xyXG5cclxuICAgIC8vPyBDb29yZGVuYWRhcyBpbmljaWFpcyBlIGZpbmFpcyBkbyBkZXNlbmhvXHJcbiAgICBwcml2YXRlIHN0YXJ0WCA9IDA7XHJcbiAgICBwcml2YXRlIHN0YXJ0WSA9IDA7XHJcblxyXG4gICAgLy8/IFJlZmVyw6puY2lhIHBhcmEgbyBtb2RhbFxyXG4gICAgcHJpdmF0ZSBkaWFsb2dJbnN0YW5jZSE6RHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcclxuXHJcbiAgICAvLz8gRmF0b3IgZGUgZXNjYWxhIGRhIGltYWdlbSBlIHpvb21cclxuICAgIHNjYWxlRmFjdG9yUmVhZE9ubHkgPSBjb21wdXRlZDxudW1iZXI+KCgpPT4ge1xyXG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5zY2FsZUZhY3RvcigpISwgdGhpcy5zY2FsZUZhY3RvckluaWNpYWwoKSErNSk7XHJcbiAgICB9KVxyXG5cclxuICAgIHB1YmxpYyBzY2FsZUZhY3RvckluaWNpYWwgPSBzaWduYWw8bnVtYmVyfG51bGw+KG51bGwpO1xyXG5cclxuICAgIHByaXZhdGUgc2NhbGVGYWN0b3IgPSBzaWduYWw8bnVtYmVyfG51bGw+KG51bGwpO1xyXG5cclxuICAgIHNldFNjYWxlRmFjdG9yTW9kZWwodmFsb3I6bnVtYmVyKXtcclxuICAgICAgdGhpcy5zY2FsZUZhY3Rvck1vZGVsID0gdmFsb3IgLSB0aGlzLnNjYWxlRmFjdG9ySW5pY2lhbCgpITtcclxuICAgICAgdGhpcy5zY2FsZUZhY3Rvci5zZXQodmFsb3IpXHJcbiAgICB9XHJcbiAgICBzY2FsZUZhY3Rvck1vZGVsID0gMDtcclxuXHJcbiAgICBwcml2YXRlIGltYWdlWDogbnVtYmVyID0gMDtcclxuICAgIHByaXZhdGUgaW1hZ2VZOiBudW1iZXIgPSAwO1xyXG5cclxuXHJcbiAgICAvLyNyZWdpb24gUHJvcHJpZWRhZGVzIGNvbXB1dGFkYXMgZGUgdGFtYW5obyBkbyBjYW52YXMgZSBkYSBpbWFnZW1cclxuICAgICAgLy8/IExhcmd1cmEgZSBhbHR1cmEgZG8gY2FudmFzIGJhc2VhZG8gbmEgdGFtYW5obyBkYSB0ZWxhXHJcbiAgICAgIGNhbnZhc1dpZHRoID0gY29tcHV0ZWQ8bnVtYmVyIHwgbnVsbD4oKCkgPT4gdGhpcy53aWR0aFRlbGEoKSowLjUpO1xyXG4gICAgICBjYW52YXNIZWlnaHQgPSBjb21wdXRlZDxudW1iZXIgfCBudWxsPigoKSA9PiB0aGlzLmhlaWd0aFRlbGEoKSowLjUpO1xyXG5cclxuICAgICAgLy8/IExhcmd1cmEgZSBhbHR1cmEgZGEgw6FyZWEgZGUgY29ydGVcclxuICAgICAgY3V0V2lkdGggPSBjb21wdXRlZDxudW1iZXIgfCBudWxsPigoKSA9PiB7XHJcbiAgICAgICAgaWYodGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSl7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5yYWRpdXMoKSEgKiAyO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgY29uc3QgY2FudmFzV2lkdGggPSB0aGlzLmNhbnZhc1dpZHRoKCkhO1xyXG4gICAgICAgICAgY29uc3QgbWF4V2lkdGggPSBjYW52YXNXaWR0aCAqIDAuODtcclxuICAgICAgICAgIGNvbnN0IHByb3BvcnRpb25hbEhlaWdodCA9IG1heFdpZHRoICogdGhpcy5wcm9wb3JjYW9JbWFnZW0oKSE7XHJcbiAgICAgICAgICByZXR1cm4gcHJvcG9ydGlvbmFsSGVpZ2h0ID4gdGhpcy5jYW52YXNIZWlnaHQoKSEgKiAwLjggPyB0aGlzLmNhbnZhc0hlaWdodCgpISAqIDAuOCAvIHRoaXMucHJvcG9yY2FvSW1hZ2VtKCkhIDogbWF4V2lkdGg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSk7XHJcbiAgICAgIGN1dEhlaWdodCA9IGNvbXB1dGVkPG51bWJlciB8IG51bGw+KCgpID0+IHtcclxuICAgICAgICBpZih0aGlzLl92YXJpYXZpZXNEaWFsb2coKT8uaW5kQ2lyY2xlKXtcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJhZGl1cygpISAqIDI7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICBjb25zdCBjYW52YXNIZWlnaHQgPSB0aGlzLmNhbnZhc0hlaWdodCgpITtcclxuICAgICAgICAgIGNvbnN0IG1heEhlaWdodCA9IGNhbnZhc0hlaWdodCAqIDAuODtcclxuICAgICAgICAgIGNvbnN0IHByb3BvcnRpb25hbFdpZHRoID0gbWF4SGVpZ2h0IC8gdGhpcy5wcm9wb3JjYW9JbWFnZW0oKSE7XHJcbiAgICAgICAgICByZXR1cm4gcHJvcG9ydGlvbmFsV2lkdGggPiB0aGlzLmNhbnZhc1dpZHRoKCkhICogMC44ID8gdGhpcy5jYW52YXNXaWR0aCgpISAqIDAuOCAqIHRoaXMucHJvcG9yY2FvSW1hZ2VtKCkhIDogbWF4SGVpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8/IExhcmd1cmEgZSBhbHR1cmEgZGEgaW1hZ2VtIG5vIGNhbnZhcyAoYmFzZWFkbyBuYSBlc2NhbGEpIC0gdGFtYW5obyByZWFsIGRhIGltYWdlbVxyXG4gICAgICBjYW52YUltYWdlV2lkdGggPSBjb21wdXRlZDxudW1iZXI+KCgpPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9JbWFnZSgpLndpZHRoICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhXHJcbiAgICAgIH0pXHJcbiAgICAgIGNhbnZhSW1hZ2VIZWlnaHQgPSBjb21wdXRlZDxudW1iZXI+KCgpPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9JbWFnZSgpLmhlaWdodCAqIHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpIVxyXG4gICAgICB9KVxyXG4gICAgICBwcm9wb3JjYW9JbWFnZW0gPSBjb21wdXRlZDxudW1iZXIgfCBudWxsPigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5oZWlnaHQhIC8gdGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LndpZHRoITtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICByYWRpdXMgPSBjb21wdXRlZDxudW1iZXIgfCBudWxsPigoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbWluU2l6ZSA9ICAgTWF0aC5taW4odGhpcy5jYW52YXNIZWlnaHQoKSEqMC44LCB0aGlzLmNhbnZhc1dpZHRoKCkhKjAuOCApO1xyXG4gICAgICAgIHJldHVybiBtaW5TaXplLzI7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIC8vICNyZWdpb24gTGltaXRlcyBkZSBtb3ZpbWVudGHDp8OjbyBkYSBpbWFnZW1cclxuICAgIC8vPyBMaW1pdGVzIGRlIG1vdmltZW50YcOnw6NvIGRhIGltYWdlbVxyXG4gICAgICBpbmRDaXJjbGUgPSBjb21wdXRlZDxib29sZWFuPigoKT0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSFcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHhNaW4gPSBjb21wdXRlZDxudW1iZXI+KCgpPT4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSEgPyAodGhpcy5jYW52YXNXaWR0aCgpISAtICB0aGlzLmN1dFdpZHRoKCkhKS8yIDogKHRoaXMuY2FudmFzV2lkdGgoKSEgLSAgKHRoaXMucmFkaXVzKCkhKjIpKS8yXHJcbiAgICAgIH0pXHJcbiAgICAgIHlNaW4gPSBjb21wdXRlZDxudW1iZXI+KCgpPT4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSEgPyAodGhpcy5jYW52YXNIZWlnaHQoKSEgLSAgdGhpcy5jdXRIZWlnaHQoKSEpLzIgOiAodGhpcy5jYW52YXNIZWlnaHQoKSEgLSAgKHRoaXMucmFkaXVzKCkhKjIpKS8yXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB4TWF4ID0gY29tcHV0ZWQ8bnVtYmVyPigoKT0+IHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUhID8gLSggdGhpcy5jYW52YUltYWdlV2lkdGgoKSEgLSAodGhpcy54TWluKCkhKSAtIHRoaXMuY3V0V2lkdGgoKSEpIDogLSggdGhpcy5jYW52YUltYWdlV2lkdGgoKSEgLSAodGhpcy54TWluKCkhKSAtICh0aGlzLnJhZGl1cygpISoyKSlcclxuICAgICAgfSlcclxuICAgICAgeU1heCA9IGNvbXB1dGVkPG51bWJlcj4oKCk9PiB7XHJcbiAgICAgICAgcmV0dXJuICF0aGlzLl92YXJpYXZpZXNEaWFsb2coKT8uaW5kQ2lyY2xlISA/IC0oIHRoaXMuY2FudmFJbWFnZUhlaWdodCgpISAtICh0aGlzLnlNaW4oKSEpIC0gdGhpcy5jdXRIZWlnaHQoKSEpIDogLSggdGhpcy5jYW52YUltYWdlSGVpZ2h0KCkhIC0gKHRoaXMueU1pbigpISkgLSAodGhpcy5yYWRpdXMoKSEqMikpXHJcbiAgICAgIH0pXHJcbiAgICAvLyAjZW5kcmVnaW9uXHJcblxyXG5cclxuXHJcbiAgICAvLz8gUHJvcG9yw6fDo28gZGEgaW1hZ2VtXHJcblxyXG4gICAgd2lkdGhUZWxhID0gc2lnbmFsPG51bWJlcj4oMClcclxuICAgIGhlaWd0aFRlbGEgPSBzaWduYWw8bnVtYmVyPigwKVxyXG5cclxuXHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgdGhpcy5hdHVhbGl6YVRhbWFuaG9UZWxhKClcclxuICAgIHRoaXMudXBkYXRlQ2FudmFzU2l6ZSgpO1xyXG4gICAgdGhpcy5hdHVhbGl6YUN1dEJvcmRlcigpO1xyXG4gIH1cclxuXHJcbiAgYXR1YWxpemFUYW1hbmhvVGVsYSgpe1xyXG4gICAgdGhpcy53aWR0aFRlbGEuc2V0KHdpbmRvdy5pbm5lcldpZHRoKTtcclxuICAgIHRoaXMuaGVpZ3RoVGVsYS5zZXQod2luZG93LmlubmVySGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMucmVjdXBlcmFyVmFyaWF2aWVzRGlhbG9nKClcclxuICAgIHRoaXMuaW5jaWFyUmVmZXJlbmNpYXMoKVxyXG4gICAgdGhpcy5pbmljaWFyQ2FudmFzKClcclxuICB9XHJcbiAgaW5jaWFyUmVmZXJlbmNpYXMoKXtcclxuICAgIHRoaXMuY2FudmFzLnNldCh0aGlzLmNyb3BDYW52YXMubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmN0eC5zZXQodGhpcy5jYW52YXMoKSEuZ2V0Q29udGV4dCgnMmQnKSlcclxuICAgIHRoaXMuX0ltYWdlKCkuc3JjID0gdGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmltYWdlbSFcclxuICB9XHJcbiAgaW5pY2lhckNhbnZhcygpe1xyXG4gICAgICB0aGlzLl9JbWFnZSgpLm9ubG9hZCA9ICgpID0+IHtcclxuXHJcbiAgICAgIC8vPyBEZWZpbmUgbyB0YW1hbmhvIGRvIGNhbnZhc1xyXG4gICAgICB0aGlzLmNhbnZhcygpIS5oZWlnaHQgPSB0aGlzLmNhbnZhc0hlaWdodCgpITtcclxuICAgICAgdGhpcy5jYW52YXMoKSEud2lkdGggPSB0aGlzLmNhbnZhc1dpZHRoKCkhO1xyXG5cclxuXHJcbiAgICAgIHRoaXMuYWp1c3RhclpvbW1FUG9zaWNhb0luaWNpYWwoKVxyXG5cclxuXHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUltYWdlTW92ZSh0aGlzLmNhbnZhcygpISwgdGhpcy5jdHgoKSwgdGhpcy5fSW1hZ2UoKSk7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZU1vdXNlV2hlZWwodGhpcy5jYW52YXMoKSEsIHRoaXMuY3R4KCksIHRoaXMuX0ltYWdlKCkpO1xyXG5cclxuICAgICAgdGhpcy5yZWRyYXdDYW52YXModGhpcy5jdHgoKSwgdGhpcy5fSW1hZ2UoKSk7XHJcblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGFqdXN0YXJab21tRVBvc2ljYW9JbmljaWFsKCl7XHJcbiAgICBjb25zdCBjdXRXaWR0aCA9IHRoaXMuY3V0V2lkdGgoKSE7XHJcbiAgICBjb25zdCBjdXRIZWlnaHQgPSB0aGlzLmN1dEhlaWdodCgpITtcclxuICAgIGNvbnN0IGltYWdlV2lkdGggPSB0aGlzLl9JbWFnZSgpLndpZHRoO1xyXG4gICAgY29uc3QgaW1hZ2VIZWlnaHQgPSB0aGlzLl9JbWFnZSgpLmhlaWdodDtcclxuXHJcbiAgICAvLz8gQWp1c3RhIHBvc3Npw6fDo28gZSB6b29tIGluaWNpYWxcclxuXHJcbiAgICBpZiAodGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSkge1xyXG4gICAgICBjb25zdCBzY2FsZUZhY3RvciA9ICh0aGlzLnJhZGl1cygpISAqIDIpIC8gTWF0aC5taW4oaW1hZ2VXaWR0aCwgaW1hZ2VIZWlnaHQpO1xyXG4gICAgICB0aGlzLnNjYWxlRmFjdG9ySW5pY2lhbC5zZXQoc2NhbGVGYWN0b3IpXHJcbiAgICAgIHRoaXMuc2V0U2NhbGVGYWN0b3JNb2RlbChzY2FsZUZhY3Rvcik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzY2FsZUZhY3RvciA9IHRoaXMuY3V0SGVpZ2h0KCkhID09PSB0aGlzLmN1dFdpZHRoKCkhXHJcbiAgICAgICAgPyB0aGlzLl9JbWFnZSgpLndpZHRoID4gdGhpcy5fSW1hZ2UoKS5oZWlnaHRcclxuICAgICAgICAgID8gdGhpcy5jdXRIZWlnaHQoKSEgLyBpbWFnZUhlaWdodFxyXG4gICAgICAgICAgOiB0aGlzLmN1dFdpZHRoKCkhIC8gaW1hZ2VXaWR0aFxyXG4gICAgICAgIDogdGhpcy5jdXRIZWlnaHQoKSEgPiB0aGlzLmN1dFdpZHRoKCkhXHJcbiAgICAgICAgICA/IHRoaXMuY3V0SGVpZ2h0KCkhIC8gaW1hZ2VIZWlnaHRcclxuICAgICAgICAgIDogdGhpcy5jdXRXaWR0aCgpISAvIGltYWdlV2lkdGg7XHJcbiAgICAgIHRoaXMuc2NhbGVGYWN0b3JJbmljaWFsLnNldChzY2FsZUZhY3RvcilcclxuICAgICAgdGhpcy5zZXRTY2FsZUZhY3Rvck1vZGVsKHNjYWxlRmFjdG9yKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5pbWFnZVggPSBNYXRoLm1heCgodGhpcy5jYW52YXMoKSEud2lkdGggLSBpbWFnZVdpZHRoICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhKSAvIDIsIHRoaXMueE1pbigpISk7XHJcbiAgICB0aGlzLmltYWdlWSA9IE1hdGgubWF4KCh0aGlzLmNhbnZhc0hlaWdodCgpISAtIGltYWdlSGVpZ2h0ICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhKSAvIDIsIHRoaXMueU1pbigpISk7XHJcblxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIE3DqXRvZG9zIGRlIHJlY3VwZXJhw6fDo28gZGUgZGFkb3NcclxuICByZWN1cGVyYUluc3RhbmNpYURpYWxvZygpOiBEeW5hbWljRGlhbG9nQ29tcG9uZW50IHtcclxuICAgIGNvbnN0IGFycjogTWFwPER5bmFtaWNEaWFsb2dSZWY8YW55PiwgQ29tcG9uZW50UmVmPGFueT4+ID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcFxyXG4gICAgY29uc3QgZW50cmllcyA9IGFyci5lbnRyaWVzKCk7XHJcbiAgICBjb25zdCBmaXJzdEVudHJ5ID0gZW50cmllcy5uZXh0KCkudmFsdWU7XHJcbiAgICBjb25zdCBbZmlyc3RLZXksIGZpcnN0VmFsdWVdID0gZmlyc3RFbnRyeTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5kaWFsb2dTZXJ2aWNlLmdldEluc3RhbmNlKGZpcnN0S2V5KVxyXG4gICAgdGhpcy5kaWFsb2dJbnN0YW5jZSA9IGluc3RhbmNlXHJcbiAgICByZXR1cm4gaW5zdGFuY2VcclxuICB9XHJcblxyXG4gIHJlY3VwZXJhclZhcmlhdmllc0RpYWxvZygpOiB2b2lke1xyXG4gICAgdGhpcy5fdmFyaWF2aWVzRGlhbG9nLnNldCh0aGlzLnJlY3VwZXJhSW5zdGFuY2lhRGlhbG9nKCkuZGF0YS5pZClcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG5cclxuICAvLyNyZWdpb24gTcOpdG9kb3MgZGUgYXR1YWxpemFjYW8gZG8gY2FudmFzXHJcbiAgLy8/IEF0dWFsaXphIG8gdGFtYW5obyBkbyBjYW52YXNcclxuICB1cGRhdGVDYW52YXNTaXplKCkge1xyXG5cclxuICAgIHRoaXMuaW1hZ2VYID0gKHRoaXMuY2FudmFzKCkhLndpZHRoIC0gdGhpcy5fSW1hZ2UoKS53aWR0aCAqIHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpISkgLyAyO1xyXG4gICAgdGhpcy5pbWFnZVkgPSAodGhpcy5jYW52YXNIZWlnaHQoKSEgLyAyKSAtICh0aGlzLl9JbWFnZSgpLmhlaWdodCAqIHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpISkgLyAyO1xyXG5cclxuXHJcblxyXG4gICAgdGhpcy5jYW52YXMoKSEuaGVpZ2h0ID0gdGhpcy5jYW52YXNIZWlnaHQoKSE7XHJcbiAgICB0aGlzLmNhbnZhcygpIS53aWR0aCA9IHRoaXMuY2FudmFzV2lkdGgoKSE7XHJcblxyXG4gICAgdGhpcy5yZWRyYXdDYW52YXModGhpcy5jdHgoKSwgdGhpcy5fSW1hZ2UoKSk7XHJcbiAgfVxyXG5cclxuICByZWRyYXdDYW52YXMoY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsLCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAgIGlmICghY3R4KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5kcmF3Q3JvcEFyZWEoY3R4KTtcclxuXHJcbiAgICBjdHguY2xlYXJSZWN0KDAsIDAsIGN0eC5jYW52YXMud2lkdGgsIGN0eC5jYW52YXMuaGVpZ2h0KTtcclxuICAgIGN0eC5maWx0ZXIgPSAnYmx1cig1cHgpIG9wYWNpdHkoMC45KSc7XHJcbiAgICBjdHguZHJhd0ltYWdlKGltZywgdGhpcy5pbWFnZVgsIHRoaXMuaW1hZ2VZLCBpbWcud2lkdGggKiB0aGlzLnNjYWxlRmFjdG9yUmVhZE9ubHkoKSEsIGltZy5oZWlnaHQgKiB0aGlzLnNjYWxlRmFjdG9yUmVhZE9ubHkoKSEpO1xyXG4gICAgY3R4LmZpbHRlciA9ICdub25lJztcclxuXHJcbiAgICB0aGlzLmRyYXdJbWFnZUluQ3JvcEFyZWEoY3R4LCBpbWcpO1xyXG4gIH1cclxuXHJcbiAgLy8/IERlc2VuaGEgYSDDoXJlYSBkZSBjb3J0ZVxyXG4gIGRyYXdDcm9wQXJlYShjdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGwpIHtcclxuICAgIGlmICghY3R4KSByZXR1cm47XHJcblxyXG4gICAgdGhpcy5hdHVhbGl6YUN1dEJvcmRlcigpXHJcblxyXG4gICAgY29uc3QgY3JvcFggPSBjdHguY2FudmFzLndpZHRoIC8gMiAtIHRoaXMuY3V0V2lkdGgoKSEgLyAyO1xyXG4gICAgY29uc3QgY3JvcFkgPSBjdHguY2FudmFzLmhlaWdodCAvIDIgLSB0aGlzLmN1dEhlaWdodCgpISAvIDI7XHJcblxyXG5cclxuICAgIGNvbnN0IGNyb3BYQ2lyY2xlID0gY3R4LmNhbnZhcy53aWR0aCAvIDIgLSB0aGlzLnJhZGl1cygpISAvIDI7XHJcbiAgICBjb25zdCBjcm9wWUNpcmNsZSA9IGN0eC5jYW52YXMuaGVpZ2h0IC8gMiAtIHRoaXMucmFkaXVzKCkhIC8gMjtcclxuXHJcbiAgICBjdHguYmVnaW5QYXRoKCk7XHJcbiAgICBjdHguc3Ryb2tlU3R5bGUgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgY3R4LmxpbmVXaWR0aCA9IDI7XHJcblxyXG4gICAgaWYodGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSkge1xyXG4gICAgICBjdHguYXJjKGNyb3BYQ2lyY2xlLCBjcm9wWUNpcmNsZSwgdGhpcy5yYWRpdXMoKSEsIDAsIE1hdGguUEkgKiAyLCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN0eC5yZWN0KGNyb3BYLCBjcm9wWSAsIHRoaXMuY3V0V2lkdGgoKSEsIHRoaXMuY3V0SGVpZ2h0KCkhKTtcclxuICAgIH1cclxuXHJcbiAgICBjdHguc3Ryb2tlKCk7XHJcblxyXG5cclxuICB9XHJcbiAgLy8/IERlc2VuaGEgYSBpbWFnZW0gbmEgw6FyZWEgZGUgY29ydGVcclxuICBkcmF3SW1hZ2VJbkNyb3BBcmVhKGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICAgIGlmICghY3R4KSByZXR1cm47XHJcblxyXG4gICAgICBjb25zdCBjcm9wWCA9IChjdHguY2FudmFzLndpZHRoIC0gdGhpcy5jdXRXaWR0aCgpISkgLyAyO1xyXG4gICAgICBjb25zdCBjcm9wWSA9IChjdHguY2FudmFzLmhlaWdodCAtIHRoaXMuY3V0SGVpZ2h0KCkhKSAvIDI7XHJcblxyXG4gICAgICBjdHguc2F2ZSgpO1xyXG4gICAgICBjdHguYmVnaW5QYXRoKCk7XHJcblxyXG4gICAgICBpZih0aGlzLl92YXJpYXZpZXNEaWFsb2coKT8uaW5kQ2lyY2xlKSB7XHJcbiAgICAgICAgY3R4LmFyYyhjdHguY2FudmFzLndpZHRoLzIsIGN0eC5jYW52YXMuaGVpZ2h0LzIsIHRoaXMucmFkaXVzKCkhLCAwLCBNYXRoLlBJICogMiwgdHJ1ZSk7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN0eC5yZWN0KGNyb3BYLCBjcm9wWSAsIHRoaXMuY3V0V2lkdGgoKSEsIHRoaXMuY3V0SGVpZ2h0KCkhKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3R4LmNsaXAoKTtcclxuICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIHRoaXMuaW1hZ2VYLCB0aGlzLmltYWdlWSwgaW1nLndpZHRoICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhLCBpbWcuaGVpZ2h0ICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhKTtcclxuICAgICAgY3R4LnJlc3RvcmUoKTtcclxuICB9XHJcbiAgYXR1YWxpemFDdXRCb3JkZXIoKSB7XHJcbiAgICBpZiAodGhpcy5jcm9wQm9yZGVyICYmIHRoaXMuY3JvcEJvcmRlci5uYXRpdmVFbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IGNyb3BCb3JkZXJFbGVtZW50ID0gdGhpcy5jcm9wQm9yZGVyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmKHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUpe1xyXG5cclxuICAgICAgICBjcm9wQm9yZGVyRWxlbWVudC5zdHlsZS5ib3JkZXJSYWRpdXMgPSB0aGlzLnJhZGl1cygpISoyKydweCc7XHJcbiAgICAgICAgY3JvcEJvcmRlckVsZW1lbnQuc3R5bGUud2lkdGggPSB0aGlzLnJhZGl1cygpISoyKydweCc7XHJcbiAgICAgICAgY3JvcEJvcmRlckVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gdGhpcy5yYWRpdXMoKSEqMisncHgnO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBjcm9wQm9yZGVyRWxlbWVudC5zdHlsZS53aWR0aCA9IHRoaXMuY3V0V2lkdGgoKSErJ3B4JztcclxuICAgICAgICBjcm9wQm9yZGVyRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmN1dEhlaWdodCgpISsncHgnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZXJzIGRlIGV2ZW50b3NcclxuXHJcbiAgY29tcGFyYWRvck9uWm9vbUNoYW5nZSA9IHRoaXMuc2NhbGVGYWN0b3JJbmljaWFsKCkhO1xyXG4gIG9uWm9vbUNoYW5nZShlOiBhbnkpIHtcclxuICAgIGNvbnN0IHByZXZab29tID0gdGhpcy5jb21wYXJhZG9yT25ab29tQ2hhbmdlO1xyXG4gICAgY29uc3Qgem9vbVZhbHVlID0gZS52YWx1ZTtcclxuICAgIHRoaXMuY29tcGFyYWRvck9uWm9vbUNoYW5nZSA9IGUudmFsdWU7XHJcbiAgICBjb25zdCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicgPSBwcmV2Wm9vbSA8IHpvb21WYWx1ZSA/ICd1cCcgOiAnZG93bic7XHJcbiAgICB0aGlzLmFqdXN0YXJab29tKGRpcmVjdGlvbiwgZS52YWx1ZSk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGluaXRpYWxpemVNb3VzZVdoZWVsKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsIGN0eDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIHwgbnVsbCwgaW1nOiBIVE1MSW1hZ2VFbGVtZW50KSB7XHJcbiAgICBjYW52YXMub253aGVlbCA9IChlKSA9PiB7XHJcbiAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgLy8/IFJlY3VwZXJhbmRvIG9zIHZhbG9yZXMgZGUgem9vbSBlIGRlbHRhIGF0dWFpc1xyXG4gICAgICBjb25zdCBkaXJlY3Rpb246ICd1cCcgfCAnZG93bicgPSBlLmRlbHRhWSA+IDAgPyAnZG93bicgOiAndXAnO1xyXG5cclxuICAgICAgdGhpcy5hanVzdGFyWm9vbShkaXJlY3Rpb24pXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcblxyXG4gIGFqdXN0YXJab29tKGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJywgdmFsdWU/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHByZXZTY2FsZUZhY3RvciA9IHRoaXMuc2NhbGVGYWN0b3JSZWFkT25seSgpITtcclxuICAgIGNvbnN0IGRlbHRhID0gZGlyZWN0aW9uID09ICdkb3duJyA/IC0wLjAxNSA6IDAuMDE1O1xyXG5cclxuICAgIGxldCBzY2FsZUZhY3RvciA9IHByZXZTY2FsZUZhY3RvciArIChkZWx0YSoxLjQpO1xyXG5cclxuICAgIGlmKHZhbHVlKVxyXG4gICAgICAgIHNjYWxlRmFjdG9yID0gdmFsdWUrIHRoaXMuc2NhbGVGYWN0b3JJbmljaWFsKCkhO1xyXG5cclxuICAgIGNvbnN0IG5ld0hlaWdodCA9IHRoaXMuX0ltYWdlKCkuaGVpZ2h0ICogc2NhbGVGYWN0b3I7XHJcbiAgICBjb25zdCBuZXdXaWR0aCA9IHRoaXMuX0ltYWdlKCkud2lkdGggKiBzY2FsZUZhY3RvcjtcclxuXHJcbiAgICBpZiAodGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk/LmluZENpcmNsZSkge1xyXG4gICAgICBpZiAobmV3SGVpZ2h0IDwgdGhpcy5yYWRpdXMoKSEgKiAyIHx8IG5ld1dpZHRoIDwgdGhpcy5yYWRpdXMoKSEgKiAyKSB7XHJcbiAgICAgICAgc2NhbGVGYWN0b3IgPSBwcmV2U2NhbGVGYWN0b3I7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zY2FsZUZhY3Rvci5zZXQoc2NhbGVGYWN0b3IpO1xyXG4gICAgICAgIHRoaXMuc2V0U2NhbGVGYWN0b3JNb2RlbChzY2FsZUZhY3Rvcik7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChuZXdIZWlnaHQgPCB0aGlzLmN1dEhlaWdodCgpISB8fCBuZXdXaWR0aCA8IHRoaXMuY3V0V2lkdGgoKSEpIHtcclxuICAgICAgICBzY2FsZUZhY3RvciA9IHByZXZTY2FsZUZhY3RvcjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNjYWxlRmFjdG9yLnNldChzY2FsZUZhY3Rvcik7XHJcbiAgICAgICAgdGhpcy5zZXRTY2FsZUZhY3Rvck1vZGVsKHNjYWxlRmFjdG9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2NhbGVGYWN0b3Iuc2V0KHNjYWxlRmFjdG9yKTtcclxuICAgIHRoaXMuc2V0U2NhbGVGYWN0b3JNb2RlbChzY2FsZUZhY3Rvcik7XHJcblxyXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5jcm9wQ2FudmFzLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICBjb25zdCBjYW52YXNXaWR0aCA9IGNhbnZhcy5vZmZzZXRXaWR0aDtcclxuICAgIGNvbnN0IGNhbnZhc0hlaWdodCA9IGNhbnZhcy5vZmZzZXRIZWlnaHQ7XHJcbiAgICBjb25zdCBjZW50ZXJYID0gY2FudmFzV2lkdGggLyAyO1xyXG4gICAgY29uc3QgY2VudGVyWSA9IGNhbnZhc0hlaWdodCAvIDI7XHJcbiAgICBjb25zdCBuZXdDYW52YXNYID0gY2VudGVyWCAtIChjZW50ZXJYIC0gdGhpcy5pbWFnZVgpICogKHNjYWxlRmFjdG9yIC8gcHJldlNjYWxlRmFjdG9yKTtcclxuICAgIGNvbnN0IG5ld0NhbnZhc1kgPSBjZW50ZXJZIC0gKGNlbnRlclkgLSB0aGlzLmltYWdlWSkgKiAoc2NhbGVGYWN0b3IgLyBwcmV2U2NhbGVGYWN0b3IpO1xyXG4gICAgdGhpcy5pbWFnZVggPSBuZXdDYW52YXNYO1xyXG4gICAgdGhpcy5pbWFnZVkgPSBuZXdDYW52YXNZO1xyXG5cclxuICAgIGlmICghdGhpcy52ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVhtaW4oKSkge1xyXG4gICAgICBjb25zdCBkaWZmWG1pbiA9IHRoaXMucmV0b3JuYURpZmZYbWF4KCk7XHJcbiAgICAgIHRoaXMubW92ZUltYWdlKHRoaXMuaW1hZ2VYIC0gZGlmZlhtaW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy52ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVhtYXgoKSkge1xyXG4gICAgICBjb25zdCBkaWZmWG1heCA9IHRoaXMucmV0b3JuYURpZmZYbWluKCk7XHJcbiAgICAgIHRoaXMubW92ZUltYWdlKHRoaXMuaW1hZ2VYICsgZGlmZlhtYXgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy52ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVltYXgoKSkge1xyXG4gICAgICBjb25zdCBkaWZmWW1heCA9IHRoaXMucmV0b3JuYURpZmZZbWluKCk7XHJcbiAgICAgIHRoaXMubW92ZUltYWdlKHVuZGVmaW5lZCwgdGhpcy5pbWFnZVkgKyBkaWZmWW1heCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLnZlcmlmaWNhSW1hZ2VtZGVudHJvRG9zTGltaXRlWW1pbigpKSB7XHJcbiAgICAgIGNvbnN0IGRpZmZZbWluID0gdGhpcy5yZXRvcm5hRGlmZlltYXgoKTtcclxuICAgICAgdGhpcy5tb3ZlSW1hZ2UodW5kZWZpbmVkLCB0aGlzLmltYWdlWSAtIGRpZmZZbWluKTtcclxuICAgIH1cclxuICAgIHRoaXMucmVkcmF3Q2FudmFzKHRoaXMuY3R4KCkhLCB0aGlzLl9JbWFnZSgpISk7XHJcbiAgfVxyXG5cclxuXHJcblxyXG5cclxuICB2ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVhtaW4oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBuZXdJbWFnZVggPSB0aGlzLmltYWdlWDtcclxuICAgIHJldHVybiBuZXdJbWFnZVggPCB0aGlzLnhNaW4oKSFcclxuICB9XHJcbiAgdmVyaWZpY2FJbWFnZW1kZW50cm9Eb3NMaW1pdGVYbWF4KCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgbmV3SW1hZ2VYID0gdGhpcy5pbWFnZVg7XHJcbiAgICByZXR1cm4gbmV3SW1hZ2VYID4gdGhpcy54TWF4KCkhXHJcbiAgfVxyXG4gIHZlcmlmaWNhSW1hZ2VtZGVudHJvRG9zTGltaXRlWW1pbigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IG5ld0ltYWdlWSA9IHRoaXMuaW1hZ2VZO1xyXG4gICAgcmV0dXJuIG5ld0ltYWdlWSA8IHRoaXMueU1pbigpIVxyXG4gIH1cclxuICB2ZXJpZmljYUltYWdlbWRlbnRyb0Rvc0xpbWl0ZVltYXgoKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBuZXdJbWFnZVkgPSB0aGlzLmltYWdlWTtcclxuICAgIHJldHVybiBuZXdJbWFnZVkgPiB0aGlzLnlNYXgoKSFcclxuICB9XHJcblxyXG4gIHJldG9ybmFEaWZmWG1pbigpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbmV3SW1hZ2VYID0gdGhpcy5pbWFnZVg7XHJcbiAgICByZXR1cm4gdGhpcy54TWluKCkhIC0gbmV3SW1hZ2VYO1xyXG4gIH1cclxuICByZXRvcm5hRGlmZlhtYXgoKTogbnVtYmVyIHtcclxuICAgIGNvbnN0IG5ld0ltYWdlWCA9IHRoaXMuaW1hZ2VYO1xyXG4gICAgcmV0dXJuIG5ld0ltYWdlWCAtIHRoaXMueE1heCgpITtcclxuICB9XHJcbiAgcmV0b3JuYURpZmZZbWluKCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBuZXdJbWFnZVkgPSB0aGlzLmltYWdlWTtcclxuICAgIHJldHVybiB0aGlzLnlNaW4oKSEgLSBuZXdJbWFnZVk7XHJcbiAgfVxyXG4gIHJldG9ybmFEaWZmWW1heCgpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbmV3SW1hZ2VZID0gdGhpcy5pbWFnZVk7XHJcbiAgICByZXR1cm4gbmV3SW1hZ2VZIC0gdGhpcy55TWF4KCkhO1xyXG4gIH1cclxuXHJcblxyXG4gIGluaXRpYWxpemVJbWFnZU1vdmUoY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCwgY3R4OiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgfCBudWxsLCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcclxuICAgIGxldCBpc0RyYWdnaW5nID0gZmFsc2U7XHJcblxyXG4gICAgY2FudmFzLnN0eWxlLmN1cnNvciA9ICdncmFiJztcclxuXHJcbiAgICBjYW52YXMub25tb3VzZWRvd24gPSAoZSkgPT4ge1xyXG4gICAgICBpc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9ICdncmFiYmluZyc7XHJcbiAgICAgIHRoaXMuc3RhcnRYID0gZS5vZmZzZXRYIC0gdGhpcy5pbWFnZVg7XHJcbiAgICAgIHRoaXMuc3RhcnRZID0gZS5vZmZzZXRZIC0gdGhpcy5pbWFnZVk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNhbnZhcy5vbm1vdXNldXAgPSAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9ICdncmFiJztcclxuICAgIH07XHJcblxyXG4gICAgY2FudmFzLm9ubW91c2VvdXQgPSAoKSA9PiB7XHJcbiAgICAgIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgY2FudmFzLnN0eWxlLmN1cnNvciA9ICdncmFiJztcclxuICAgIH07XHJcblxyXG4gICAgY2FudmFzLm9ubW91c2Vtb3ZlID0gKGUpID0+IHtcclxuICAgICAgaWYgKGlzRHJhZ2dpbmcpIHtcclxuXHJcbiAgICAgICAgICAvLyBDYWxjdWxhIG8gbm92byBwb3NpY2lvbmFtZW50byBkYSBpbWFnZW1cclxuICAgICAgICAgIGxldCBuZXdJbWFnZVggPSBlLm9mZnNldFggLSB0aGlzLnN0YXJ0WDtcclxuICAgICAgICAgIGxldCBuZXdJbWFnZVkgPSBlLm9mZnNldFkgLSB0aGlzLnN0YXJ0WTtcclxuXHJcbiAgICAgICAgICBpZiAobmV3SW1hZ2VYIDwgIHRoaXMueE1pbigpISAmJiBuZXdJbWFnZVggPiB0aGlzLnhNYXgoKSEpIHtcclxuICAgICAgICAgICAgdGhpcy5tb3ZlSW1hZ2UobmV3SW1hZ2VYKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYobmV3SW1hZ2VZIDwgdGhpcy55TWluKCkhICYmIG5ld0ltYWdlWSA+IHRoaXMueU1heCgpISl7XHJcbiAgICAgICAgICAgIHRoaXMubW92ZUltYWdlKHVuZGVmaW5lZCwgbmV3SW1hZ2VZKVxyXG4gICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICB0aGlzLnJlZHJhd0NhbnZhcyhjdHgsIGltZyk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG5cclxuICB9XHJcblxyXG4gIG1vdmVJbWFnZShkeD86IG51bWJlciwgZHk/OiBudW1iZXIpIHtcclxuICAgIHRoaXMuaW1hZ2VYID0gKGR4Pz90aGlzLmltYWdlWCk7XHJcbiAgICB0aGlzLmltYWdlWSA9IChkeT8/dGhpcy5pbWFnZVkpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcblxyXG4gIC8vI3JlZ2lvbiBNw6l0b2RvcyBkZSBjb3J0ZSBlIGZlY2hhbWVudG8gZG8gbW9kYWxcclxuICBjcm9wSW1hZ2UoKSB7XHJcbiAgICBjb25zdCBjdHggPSB0aGlzLmN0eCgpO1xyXG5cclxuICAgIGlmIChjdHgpIHtcclxuICAgICAgY29uc3QgWCA9ICgodGhpcy5jYW52YXMoKSEud2lkdGggLSB0aGlzLl9JbWFnZSgpLndpZHRoICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhKSAvIDIpO1xyXG4gICAgICBjb25zdCBZID0gKCh0aGlzLmNhbnZhc0hlaWdodCgpISAvIDIpIC0gKHRoaXMuX0ltYWdlKCkuaGVpZ2h0ICogdGhpcy5zY2FsZUZhY3RvclJlYWRPbmx5KCkhKSAvIDIpO1xyXG5cclxuICAgICAgLy8gUmVjdXBlcmFyIG8gaW1hZ2VEYXRhIGRhIGltYWdlbSBxdWUgZXN0w6EgbmEgw6FyZWEgZGUgY29ydGVcclxuICAgICAgbGV0IGltYWdlRGF0YVxyXG4gICAgICBjb25zdCBjcm9wWCA9IChjdHguY2FudmFzLndpZHRoIC0gdGhpcy5jdXRXaWR0aCgpISkgLyAyO1xyXG4gICAgICBjb25zdCBjcm9wWSA9IChjdHguY2FudmFzLmhlaWdodCAtIHRoaXMuY3V0SGVpZ2h0KCkhKSAvIDI7XHJcbiAgICAgIGlmKHRoaXMuX3Zhcmlhdmllc0RpYWxvZygpPy5pbmRDaXJjbGUpe1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBjYW52YXMgd2l0aCB0aGUgc2FtZSBkaW1lbnNpb25zIGFzIHRoZSBjaXJjbGVcclxuICAgICAgICBjb25zdCBjaXJjbGVDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcclxuICAgICAgICBjb25zdCBjaXJjbGVDdHggPSBjaXJjbGVDYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtcclxuICAgICAgICBjaXJjbGVDYW52YXMud2lkdGggPSB0aGlzLnJhZGl1cygpISAqIDI7XHJcbiAgICAgICAgY2lyY2xlQ2FudmFzLmhlaWdodCA9IHRoaXMucmFkaXVzKCkhICogMjtcclxuXHJcbiAgICAgICAgLy8gRHJhdyB0aGUgY2lyY2xlIG9uIHRoZSBuZXcgY2FudmFzXHJcbiAgICAgICAgY2lyY2xlQ3R4IS5iZWdpblBhdGgoKTtcclxuICAgICAgICBjaXJjbGVDdHghLmFyYyh0aGlzLnJhZGl1cygpISwgdGhpcy5yYWRpdXMoKSEsIHRoaXMucmFkaXVzKCkhLCAwLCAyICogTWF0aC5QSSk7XHJcbiAgICAgICAgY2lyY2xlQ3R4IS5maWxsKCk7XHJcblxyXG4gICAgICAgIC8vIFNldCB0aGUgY29tcG9zaXRlIG9wZXJhdGlvbiB0byAnZGVzdGluYXRpb24taW4nIHRvIGN1dCBvdXQgdGhlIGNpcmNsZVxyXG4gICAgICAgIGN0eC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnZGVzdGluYXRpb24taW4nO1xyXG5cclxuICAgICAgICAvLyBEcmF3IHRoZSBpbWFnZSBvbiB0aGUgbWFpbiBjYW52YXMgdXNpbmcgdGhlIGNpcmNsZSBhcyBhIG1hc2tcclxuICAgICAgICBjdHguZHJhd0ltYWdlKGNpcmNsZUNhbnZhcywgY3JvcFgsIGNyb3BZKTtcclxuXHJcbiAgICAgICAgLy8gUmVzZXQgdGhlIGNvbXBvc2l0ZSBvcGVyYXRpb24gdG8gdGhlIGRlZmF1bHQgdmFsdWVcclxuICAgICAgICBjdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ3NvdXJjZS1vdmVyJztcclxuXHJcbiAgICAgICAgLy8gR2V0IHRoZSBpbWFnZSBkYXRhIG9mIHRoZSBjcm9wcGVkIGNpcmNsZVxyXG4gICAgICAgIGltYWdlRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoY3JvcFgsIGNyb3BZLCB0aGlzLnJhZGl1cygpISAqIDIsIHRoaXMucmFkaXVzKCkhICogMik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaW1hZ2VEYXRhID0gY3R4LmdldEltYWdlRGF0YShjcm9wWCwgY3JvcFksIHRoaXMuY3V0V2lkdGgoKSEsIHRoaXMuY3V0SGVpZ2h0KCkhKTtcclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8vIE9idGVyIG9zIHZhbG9yZXMgZGUgd2lkdGggZSBoZWlnaHQgZGEgdmFyacOhdmVsIF92YXJpYXZpZXNEaWFsb2dcclxuICAgICAgY29uc3QgdmFyaWF2ZWlzRGlhbG9nID0gdGhpcy5fdmFyaWF2aWVzRGlhbG9nKCk7XHJcbiAgICAgIGlmICh2YXJpYXZlaXNEaWFsb2cpIHtcclxuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IHZhcmlhdmVpc0RpYWxvZztcclxuXHJcbiAgICAgICAgLy8gQ3JpYXIgdW0gbm92byBjYW52YXMgZSBjb250ZXh0byBjb20gb3MgdmFsb3JlcyBkZSB3aWR0aCBlIGhlaWdodFxyXG4gICAgICAgIGNvbnN0IG5ld0NhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xyXG4gICAgICAgIGNvbnN0IG5ld0N0eCA9IG5ld0NhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgIG5ld0NhbnZhcy53aWR0aCA9IHdpZHRoO1xyXG4gICAgICAgIG5ld0NhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblxyXG4gICAgICAgIGlmIChuZXdDdHgpIHtcclxuICAgICAgICAgIC8vIFJlZGltZW5zaW9uYXIgYSBpbWFnZW0gcGFyYSBvIHRhbWFuaG8gZXNwZWNpZmljYWRvXHJcbiAgICAgICAgICBjb25zdCB0ZW1wQ2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICAgICAgICBjb25zdCB0ZW1wQ3R4ID0gdGVtcENhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG4gICAgICAgICAgdGVtcENhbnZhcy53aWR0aCA9IHRoaXMuY3V0V2lkdGgoKSE7XHJcbiAgICAgICAgICB0ZW1wQ2FudmFzLmhlaWdodCA9IHRoaXMuY3V0SGVpZ2h0KCkhO1xyXG4gICAgICAgICAgdGVtcEN0eCEucHV0SW1hZ2VEYXRhKGltYWdlRGF0YSwgMCwgMCk7XHJcblxyXG4gICAgICAgICAgbmV3Q3R4LmRyYXdJbWFnZSh0ZW1wQ2FudmFzLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcclxuXHJcbiAgICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Nyb3BJbWFnZScsIHsgZGV0YWlsOntcclxuICAgICAgICAgICAgcmVzdWx0OiBQcm9taXNlLnJlc29sdmUobmV3Q2FudmFzLnRvRGF0YVVSTCgpKSxcclxuICAgICAgICAgICAgc3RhdHVzOiB0cnVlXHJcbiAgICAgICAgICB9IH0pKTtcclxuICAgICAgICAgIHRoaXMuY2xvc2VDcm9wTW9kYWwoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlQ3JvcE1vZGFsKCkge1xyXG4gICAgdGhpcy5kaWFsb2dJbnN0YW5jZS5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgY2FuY2VsKCl7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2Nyb3BJbWFnZScsIHsgZGV0YWlsOntcclxuICAgICAgcmVzdWx0OiBQcm9taXNlLnJlc29sdmUoJ2NhbmNlbCcpLFxyXG4gICAgICBzdGF0dXM6IGZhbHNlXHJcbiAgICB9IH0pKTtcclxuXHJcbiAgICB0aGlzLmNsb3NlQ3JvcE1vZGFsKClcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,64 @@
1
+ import { Injectable, EventEmitter } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class OrgChartService {
5
+ constructor() {
6
+ this.nodeAddSubject = new Subject();
7
+ this.nodeAdd$ = this.nodeAddSubject.asObservable();
8
+ this.nodeRemoveSubject = new Subject();
9
+ this.nodeRemove$ = this.nodeRemoveSubject.asObservable();
10
+ this.nodeRemove = new EventEmitter();
11
+ this.nodeClick = new EventEmitter();
12
+ }
13
+ adicionarNode(node) {
14
+ this.nodeAddSubject.next(node);
15
+ }
16
+ removerNode(id) {
17
+ this.nodeRemoveSubject.next(id);
18
+ }
19
+ setNodeExpanded(orgSource, nodeId, expanded) {
20
+ const nodeIndex = orgSource.findIndex((item) => item.id === nodeId);
21
+ if (nodeIndex !== -1) {
22
+ const updatedNode = {
23
+ ...orgSource[nodeIndex],
24
+ _expanded: true,
25
+ expanded
26
+ };
27
+ return [
28
+ ...orgSource.slice(0, nodeIndex),
29
+ updatedNode,
30
+ ...orgSource.slice(nodeIndex + 1)
31
+ ];
32
+ }
33
+ else {
34
+ return orgSource;
35
+ }
36
+ }
37
+ modificarCampDataNode(orgSource, nodeId, field, value) {
38
+ const nodeIndex = orgSource.findIndex((item) => item.id === nodeId);
39
+ if (nodeIndex !== -1) {
40
+ const updatedNode = {
41
+ ...orgSource[nodeIndex],
42
+ data: {
43
+ ...orgSource[nodeIndex].data,
44
+ [field]: value
45
+ }
46
+ };
47
+ return [
48
+ ...orgSource.slice(0, nodeIndex),
49
+ updatedNode,
50
+ ...orgSource.slice(nodeIndex + 1)
51
+ ];
52
+ }
53
+ return orgSource;
54
+ }
55
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: OrgChartService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
56
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: OrgChartService, providedIn: 'root' }); }
57
+ }
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.8", ngImport: i0, type: OrgChartService, decorators: [{
59
+ type: Injectable,
60
+ args: [{
61
+ providedIn: 'root'
62
+ }]
63
+ }] });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnY2hhcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tlZXZvLWNvbXBvbmVudHMvc3JjL2xpYi9hcGkvc2VydmljZXMvb3JnY2hhcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUsvQixNQUFNLE9BQU8sZUFBZTtJQUg1QjtRQUtVLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQWdCLENBQUM7UUFDckQsYUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdEMsc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUNsRCxnQkFBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVwRCxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN4QyxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQThDLENBQUM7S0E0RDVFO0lBMURDLGFBQWEsQ0FBQyxJQUFrQjtRQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsV0FBVyxDQUFDLEVBQVU7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQXlCLEVBQUUsTUFBYyxFQUFFLFFBQWlCO1FBQzFFLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7UUFFcEUsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyQixNQUFNLFdBQVcsR0FBRztnQkFDbEIsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDO2dCQUN2QixTQUFTLEVBQUUsSUFBSTtnQkFDZixRQUFRO2FBQ1QsQ0FBQztZQUVGLE9BQU87Z0JBQ0wsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7Z0JBQ2hDLFdBQVc7Z0JBQ1gsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7YUFDbEMsQ0FBQztRQUNKLENBQUM7YUFBSyxDQUFDO1lBQ0wsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FDbkIsU0FBeUIsRUFDekIsTUFBYyxFQUNkLEtBQWlDLEVBQ2pDLEtBQVE7UUFHUixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDO1FBRXBFLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDckIsTUFBTSxXQUFXLEdBQUc7Z0JBQ2xCLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQztnQkFDdkIsSUFBSSxFQUFFO29CQUNKLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUk7b0JBQzVCLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSztpQkFDZjthQUNGLENBQUM7WUFFRixPQUFPO2dCQUNMLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDO2dCQUNoQyxXQUFXO2dCQUNYLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO2FBQ2xDLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQzs4R0FqRVUsZUFBZTtrSEFBZixlQUFlLGNBRmQsTUFBTTs7MkZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IE9yZ0NoYXJ0Tm9kZSBmcm9tICcuLi9jb21wb25lbnRzL2NoYXJ0L29yY2hhcnRub2RlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgT3JnQ2hhcnRTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBub2RlQWRkU3ViamVjdCA9IG5ldyBTdWJqZWN0PE9yZ0NoYXJ0Tm9kZT4oKTtcclxuICBub2RlQWRkJCA9IHRoaXMubm9kZUFkZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gIHByaXZhdGUgbm9kZVJlbW92ZVN1YmplY3QgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XHJcbiAgbm9kZVJlbW92ZSQgPSB0aGlzLm5vZGVSZW1vdmVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICBub2RlUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgbm9kZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IG5vZGU6IE9yZ0NoYXJ0Tm9kZSwgc2VsZXRvckNzczogc3RyaW5nIH0+KCk7XHJcblxyXG4gIGFkaWNpb25hck5vZGUobm9kZTogT3JnQ2hhcnROb2RlKSB7XHJcbiAgICB0aGlzLm5vZGVBZGRTdWJqZWN0Lm5leHQobm9kZSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVyTm9kZShpZDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm5vZGVSZW1vdmVTdWJqZWN0Lm5leHQoaWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0Tm9kZUV4cGFuZGVkKG9yZ1NvdXJjZTogT3JnQ2hhcnROb2RlW10sIG5vZGVJZDogbnVtYmVyLCBleHBhbmRlZDogYm9vbGVhbikge1xyXG4gICAgY29uc3Qgbm9kZUluZGV4ID0gb3JnU291cmNlLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gbm9kZUlkKTtcclxuXHJcbiAgICBpZiAobm9kZUluZGV4ICE9PSAtMSkge1xyXG4gICAgICBjb25zdCB1cGRhdGVkTm9kZSA9IHtcclxuICAgICAgICAuLi5vcmdTb3VyY2Vbbm9kZUluZGV4XSxcclxuICAgICAgICBfZXhwYW5kZWQ6IHRydWUsXHJcbiAgICAgICAgZXhwYW5kZWRcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgLi4ub3JnU291cmNlLnNsaWNlKDAsIG5vZGVJbmRleCksXHJcbiAgICAgICAgdXBkYXRlZE5vZGUsXHJcbiAgICAgICAgLi4ub3JnU291cmNlLnNsaWNlKG5vZGVJbmRleCArIDEpXHJcbiAgICAgIF07XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIHJldHVybiBvcmdTb3VyY2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBtb2RpZmljYXJDYW1wRGF0YU5vZGU8VD4oXHJcbiAgICBvcmdTb3VyY2U6IE9yZ0NoYXJ0Tm9kZVtdLFxyXG4gICAgbm9kZUlkOiBudW1iZXIsXHJcbiAgICBmaWVsZDoga2V5b2YgT3JnQ2hhcnROb2RlWydkYXRhJ10sXHJcbiAgICB2YWx1ZTogVFxyXG4gICk6IE9yZ0NoYXJ0Tm9kZVtdIHtcclxuXHJcbiAgICBjb25zdCBub2RlSW5kZXggPSBvcmdTb3VyY2UuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBub2RlSWQpO1xyXG5cclxuICAgIGlmIChub2RlSW5kZXggIT09IC0xKSB7XHJcbiAgICAgIGNvbnN0IHVwZGF0ZWROb2RlID0ge1xyXG4gICAgICAgIC4uLm9yZ1NvdXJjZVtub2RlSW5kZXhdLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIC4uLm9yZ1NvdXJjZVtub2RlSW5kZXhdLmRhdGEsXHJcbiAgICAgICAgICBbZmllbGRdOiB2YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJldHVybiBbXHJcbiAgICAgICAgLi4ub3JnU291cmNlLnNsaWNlKDAsIG5vZGVJbmRleCksXHJcbiAgICAgICAgdXBkYXRlZE5vZGUsXHJcbiAgICAgICAgLi4ub3JnU291cmNlLnNsaWNlKG5vZGVJbmRleCArIDEpXHJcbiAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9yZ1NvdXJjZTtcclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIl19