bways-report 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/README.md +46 -0
  2. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  3. package/esm2022/lib/core/services/report-overlay.service.mjs +79 -0
  4. package/esm2022/lib/core/utils/report-parameter.util.mjs +68 -15
  5. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +10 -2
  6. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +10 -1
  7. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +10 -1
  8. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +10 -1
  9. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +6 -4
  10. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +11 -10
  11. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +39 -6
  12. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +3 -3
  13. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +5 -3
  14. package/esm2022/lib/features/designer/designer.component.mjs +11 -6
  15. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +2 -2
  16. package/esm2022/lib/features/runtime/report-execution.service.mjs +35 -4
  17. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +15 -20
  18. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +21 -10
  19. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +15 -5
  20. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +6 -6
  21. package/fesm2022/bways-report.mjs +324 -88
  22. package/fesm2022/bways-report.mjs.map +1 -1
  23. package/lib/core/models/report-grid.model.d.ts +1 -1
  24. package/lib/core/services/report-overlay.service.d.ts +14 -0
  25. package/lib/core/utils/report-parameter.util.d.ts +13 -1
  26. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +5 -0
  27. package/lib/features/designer/designer.component.d.ts +1 -0
  28. package/lib/features/runtime/report-grid-bridge.component.d.ts +2 -2
  29. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +1 -2
  30. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +0 -1
  31. package/package.json +8 -5
  32. package/styles/theme.css +184 -0
  33. package/third-party-notices/angular-cdk-LICENSE.txt +21 -0
@@ -245,20 +245,14 @@ export class ReportGridBridgeComponent {
245
245
  });
246
246
  isCheckboxSelectionEnabled = computed(() => {
247
247
  const opts = this.gridDefinition()?.options;
248
- if (opts?.checkboxSelection !== undefined) {
249
- return opts.checkboxSelection;
250
- }
251
- if (opts?.selectable) {
252
- return true;
253
- }
254
- return this.visibleColumns().some((c) => c.checkboxSelection);
248
+ return this.isSelectionEnabled() && (opts?.checkboxSelection ?? true);
255
249
  });
256
250
  effectiveRowSelection = computed(() => {
257
251
  const opts = this.gridDefinition()?.options;
258
252
  return opts?.selectionMode || opts?.rowSelection || 'multiple';
259
253
  });
260
254
  isHeaderCheckboxSelectionEnabled = computed(() => {
261
- if (this.effectiveRowSelection() === 'single') {
255
+ if (!this.isCheckboxSelectionEnabled() || this.effectiveRowSelection() === 'single') {
262
256
  return false;
263
257
  }
264
258
  const opts = this.gridDefinition()?.options;
@@ -269,7 +263,7 @@ export class ReportGridBridgeComponent {
269
263
  });
270
264
  isSelectionEnabled = computed(() => {
271
265
  const opts = this.gridDefinition()?.options;
272
- return !!(opts?.selectable || opts?.checkboxSelection || this.visibleColumns().some((c) => c.checkboxSelection));
266
+ return opts?.selectable ?? true;
273
267
  });
274
268
  sortColumn = signal(null);
275
269
  sortDirection = signal('asc');
@@ -308,7 +302,7 @@ export class ReportGridBridgeComponent {
308
302
  }
309
303
  let colCheckboxSelection = col.checkboxSelection;
310
304
  let colHeaderCheckboxSelection = col.headerCheckboxSelection;
311
- if (!hasExplicitColCheckbox && isGridCheckbox && idx === 0) {
305
+ if (!hasExplicitColCheckbox && isGridCheckbox && idx === 0 && col.checkboxSelection !== false) {
312
306
  colCheckboxSelection = true;
313
307
  colHeaderCheckboxSelection = isGridHeaderCheckbox;
314
308
  }
@@ -320,8 +314,8 @@ export class ReportGridBridgeComponent {
320
314
  hide: col.visible === false,
321
315
  width: widthNum,
322
316
  aggFunc: col.aggregate && col.aggregate !== 'none' ? col.aggregate : undefined,
323
- checkboxSelection: colCheckboxSelection,
324
- headerCheckboxSelection: colHeaderCheckboxSelection,
317
+ checkboxSelection: isGridCheckbox ? colCheckboxSelection : false,
318
+ headerCheckboxSelection: isGridHeaderCheckbox ? colHeaderCheckboxSelection : false,
325
319
  };
326
320
  });
327
321
  });
@@ -347,6 +341,7 @@ export class ReportGridBridgeComponent {
347
341
  statusBar: opts.statusBar !== undefined ? opts.statusBar : true,
348
342
  globalSearch: opts.globalSearch !== undefined ? opts.globalSearch : true,
349
343
  ...opts,
344
+ selectable: this.isSelectionEnabled(),
350
345
  rowSelection: rowSel,
351
346
  selectionMode: rowSel,
352
347
  checkboxSelection: hasCheckbox,
@@ -422,7 +417,7 @@ export class ReportGridBridgeComponent {
422
417
  return this.gridDefinition().options?.pageSize ?? 10;
423
418
  });
424
419
  colSpan = computed(() => {
425
- return this.visibleColumns().length + (this.showRowNumbers() ? 1 : 0) + (this.isSelectionEnabled() ? 1 : 0);
420
+ return this.visibleColumns().length + (this.showRowNumbers() ? 1 : 0) + (this.isCheckboxSelectionEnabled() ? 1 : 0);
426
421
  });
427
422
  hasAggregates = computed(() => {
428
423
  return (this.gridDefinition().options?.showFooter &&
@@ -647,7 +642,7 @@ export class ReportGridBridgeComponent {
647
642
  @if (showRowNumbers()) {
648
643
  <th class="rpt-th rpt-th-num">#</th>
649
644
  }
650
- @if (isSelectionEnabled()) {
645
+ @if (isCheckboxSelectionEnabled()) {
651
646
  <th class="rpt-th rpt-th-cb">
652
647
  @if (effectiveRowSelection() !== 'single' && isHeaderCheckboxSelectionEnabled()) {
653
648
  <input
@@ -699,7 +694,7 @@ export class ReportGridBridgeComponent {
699
694
  @if (showRowNumbers()) {
700
695
  <td class="rpt-td rpt-td-num">{{ (currentPage() - 1) * pageSize() + $index + 1 }}</td>
701
696
  }
702
- @if (isSelectionEnabled()) {
697
+ @if (isCheckboxSelectionEnabled()) {
703
698
  <td class="rpt-td rpt-td-cb" (click)="$event.stopPropagation()">
704
699
  <input
705
700
  [type]="effectiveRowSelection() === 'single' ? 'radio' : 'checkbox'"
@@ -734,7 +729,7 @@ export class ReportGridBridgeComponent {
734
729
  @if (showRowNumbers()) {
735
730
  <td class="rpt-td-num"></td>
736
731
  }
737
- @if (isSelectionEnabled()) {
732
+ @if (isCheckboxSelectionEnabled()) {
738
733
  <td class="rpt-td-cb"></td>
739
734
  }
740
735
  @for (col of visibleColumns(); track col.field) {
@@ -814,7 +809,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
814
809
  @if (showRowNumbers()) {
815
810
  <th class="rpt-th rpt-th-num">#</th>
816
811
  }
817
- @if (isSelectionEnabled()) {
812
+ @if (isCheckboxSelectionEnabled()) {
818
813
  <th class="rpt-th rpt-th-cb">
819
814
  @if (effectiveRowSelection() !== 'single' && isHeaderCheckboxSelectionEnabled()) {
820
815
  <input
@@ -866,7 +861,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
866
861
  @if (showRowNumbers()) {
867
862
  <td class="rpt-td rpt-td-num">{{ (currentPage() - 1) * pageSize() + $index + 1 }}</td>
868
863
  }
869
- @if (isSelectionEnabled()) {
864
+ @if (isCheckboxSelectionEnabled()) {
870
865
  <td class="rpt-td rpt-td-cb" (click)="$event.stopPropagation()">
871
866
  <input
872
867
  [type]="effectiveRowSelection() === 'single' ? 'radio' : 'checkbox'"
@@ -901,7 +896,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
901
896
  @if (showRowNumbers()) {
902
897
  <td class="rpt-td-num"></td>
903
898
  }
904
- @if (isSelectionEnabled()) {
899
+ @if (isCheckboxSelectionEnabled()) {
905
900
  <td class="rpt-td-cb"></td>
906
901
  }
907
902
  @for (col of visibleColumns(); track col.field) {
@@ -952,4 +947,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
952
947
  </div>
953
948
  `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;margin-top:16px;font-family:var(--rpt-font-family, inherit)}.rpt-grid-container{width:100%;min-height:480px;display:flex;flex-direction:column}:host ::ng-deep bways-grid{display:block;width:100%;height:480px;min-height:480px;--ug-footer-bg: var(--rpt-color-surface, #f8fafc);--ug-footer-color: var(--rpt-color-text-secondary, #334155);--ug-header-color: var(--rpt-color-text, #0f172a);--ug-border-color: var(--rpt-color-border, #cbd5e1);--ug-font-family: var(--rpt-font-family, inherit);--ug-font-size: var(--rpt-font-size-sm, .75rem);--ug-header-font-weight: 600}:host ::ng-deep .ug-wrapper{height:100%!important;min-height:480px!important}:host ::ng-deep .ug-viewport{min-height:350px!important}:host ::ng-deep .ug-bottom-bar,:host ::ng-deep ug-pagination{background-color:var(--rpt-color-surface, #f8fafc)!important;border-top:1px solid var(--rpt-color-border, #cbd5e1)!important;color:var(--rpt-color-text-muted, #64748b)!important;font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important}:host ::ng-deep .ug-status-bar-content,:host ::ng-deep .ug-pagination-info,:host ::ng-deep .ug-page-info{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:500!important;color:var(--rpt-color-text-muted, #64748b)!important;font-variant-numeric:tabular-nums!important}:host ::ng-deep .ug-page-size{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:500!important;color:var(--rpt-color-text-muted, #64748b)!important}:host ::ng-deep .ug-page-size select{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;color:var(--rpt-color-text, #0f172a)!important;border-color:var(--rpt-color-border, #cbd5e1)!important;background-color:var(--rpt-color-surface, #ffffff)!important;border-radius:var(--rpt-border-radius-sm, 4px)!important}:host ::ng-deep .ug-total-row{background-color:var(--rpt-color-surface, #f8fafc)!important;border-top:1px solid var(--rpt-color-border, #cbd5e1)!important;border-bottom:2px solid var(--rpt-color-border, #cbd5e1)!important;font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:600!important;color:var(--rpt-color-text, #0f172a)!important;font-variant-numeric:tabular-nums!important}:host ::ng-deep .ug-total-row-label{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-xs, .6875rem)!important;font-weight:600!important;text-transform:uppercase!important;letter-spacing:.05em!important;color:var(--rpt-color-text-muted, #64748b)!important;background-color:var(--rpt-color-surface, #f8fafc)!important}:host ::ng-deep .ug-total-cell{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:600!important;color:var(--rpt-color-text, #0f172a)!important;font-variant-numeric:tabular-nums!important}.rpt-table-card{background:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:var(--rpt-box-shadow, 0 1px 3px rgba(0, 0, 0, .05));overflow:hidden}.rpt-table-toolbar{padding:12px 16px;background-color:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);display:flex;align-items:center;justify-content:space-between}.rpt-table-title{font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-table-responsive{width:100%;overflow-x:auto}.rpt-table{width:100%;border-collapse:collapse;font-size:var(--rpt-font-size-base, .875rem);text-align:left}.rpt-th{background-color:var(--rpt-color-surface, #f8fafc);padding:10px 14px;font-weight:600;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #475569);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);white-space:nowrap;-webkit-user-select:none;user-select:none}.rpt-th.sortable{cursor:pointer}.rpt-th.sortable:hover{background-color:var(--rpt-color-surface-hover, #f1f5f9)}.rpt-th-content{display:flex;align-items:center;gap:4px}.rpt-sort-indicator{display:inline-flex;align-items:center;color:var(--rpt-color-primary, #2563eb)}.rpt-th-num,.rpt-td-num{width:48px;text-align:center;color:var(--rpt-color-text-muted, #94a3b8);font-size:var(--rpt-font-size-sm, .75rem)}.rpt-th-cb,.rpt-td-cb{width:42px;min-width:42px;max-width:42px;text-align:center;padding:8px 10px}.rpt-checkbox{width:15px;height:15px;cursor:pointer;accent-color:var(--rpt-color-primary, #2563eb);border-radius:4px;vertical-align:middle;margin:0}.rpt-td{padding:10px 14px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);color:var(--rpt-color-text, #1e293b)}.rpt-tr:hover{background-color:var(--rpt-color-surface-hover, #f8fafc)}.rpt-tr.is-selected{background-color:#eff6ff}.rpt-tr.is-selected:hover{background-color:#dbeafe}.rpt-tr.is-clickable{cursor:pointer}.rpt-tr.is-clickable:hover{background-color:#f1f5f9}.rpt-td.is-clickable-cell{cursor:pointer}.rpt-cell-action-link{color:var(--rpt-color-primary, #2563eb);font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer;transition:color .15s ease}.rpt-cell-action-link:hover{color:var(--rpt-color-primary-hover, #1d4ed8)}.rpt-empty-message{text-align:center;padding:40px 20px;color:var(--rpt-color-text-muted, #94a3b8);font-style:italic}.rpt-tfoot-row{background-color:var(--rpt-color-surface, #f8fafc);border-top:1px solid var(--rpt-color-border, #cbd5e1);border-bottom:2px solid var(--rpt-color-border, #cbd5e1)}.rpt-td-aggregate{padding:8px 14px;color:var(--rpt-color-text, #0f172a);font-size:var(--rpt-font-size-sm, .75rem);line-height:1.4}.rpt-aggregate-wrap{display:inline-flex;align-items:baseline;gap:6px}.rpt-aggregate-wrap.is-right{justify-content:flex-end;width:100%}.rpt-aggregate-wrap.is-center{justify-content:center;width:100%}.rpt-aggregate-label{font-size:var(--rpt-font-size-xs, .6875rem);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--rpt-color-text-muted, #64748b)}.rpt-aggregate-value{font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text, #0f172a);font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\"}.rpt-pagination-bar{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;border-top:1px solid var(--rpt-color-border-subtle, #e2e8f0);background-color:var(--rpt-color-surface, #f8fafc)}.rpt-page-info{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-muted, #64748b);font-variant-numeric:tabular-nums}.rpt-page-buttons{display:flex;gap:8px}.rpt-page-btn{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-secondary, #334155);background-color:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-sm, 4px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.rpt-page-btn:hover:not(:disabled){background-color:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.rpt-page-btn:disabled{opacity:.5;cursor:not-allowed}\n"] }]
954
949
  }], ctorParameters: () => [] });
955
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3J1bnRpbWUvcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBQ3pDLElBQUksR0FBbUIsRUFBRSxDQUFDO0lBQzFCLHNCQUFzQixHQUFRLElBQUksQ0FBQztJQUNuQyxxQkFBcUIsR0FBUSxJQUFJLENBQUM7SUFDekIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFFL0MsYUFBYSxHQUFHLEtBQUssQ0FBbUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUUsV0FB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QUNQLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLFlBQ3ZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUtULG1CQW1TZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFU0lHTkVSX0xPQ0FMX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvcmUvdG9rZW5zL2Rlc2lnbmVyLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIGNvbXB1dGVkLFxuICBEaXJlY3RpdmUsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHUklEX0NPTVBPTkVOVCB9IGZyb20gJy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24sIFJlcG9ydEdyaWREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3JwdEdyaWRPdXRsZXRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUnB0R3JpZE91dGxldERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmNyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIGNvbXBSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZFJlcG9ydFN0YXRlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGxhc3RFbWl0dGVkQ29sdW1uRGVmczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBsaWVkSW5wdXRzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICByZWFkb25seSBjb21wb25lbnRUeXBlID0gaW5wdXQ8VHlwZTxhbnk+IHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ3JwdEdyaWRPdXRsZXQnIH0pO1xuICByZWFkb25seSBpbnN0YW5jZUtleSA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBpbnB1dHMgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe30pO1xuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBjb2x1bW5EZWZzQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgcm93Q2xpY2sgPSBvdXRwdXQ8eyByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBjb2x1bW4/OiBhbnk7IGV2ZW50PzogYW55IH0+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxhbnlbXT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY29tcG9uZW50VHlwZSgpO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5pbnN0YW5jZUtleSgpO1xuICAgICAgdGhpcy5yZWNyZWF0ZUNvbXBvbmVudCh0eXBlKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICAgIGlmICghdGhpcy5jb21wUmVmKSByZXR1cm47XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGN1cnJlbnRJbnB1dHMpKSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdyZXBvcnRTdGF0ZScpIHtcbiAgICAgICAgICAvLyBTdXBwcmVzcyBjaXJjdWxhciBpbnB1dCBlY2hvOiBpZiBpbmNvbWluZyByZXBvcnRTdGF0ZSBtYXRjaGVzIHdoYXQgdGhpcyBncmlkIGluc3RhbmNlXG4gICAgICAgICAgLy8ganVzdCBlbWl0dGVkLCBza2lwIHNldElucHV0LiBSZS1hcHBseWluZyByZXBvcnRTdGF0ZSBjYXVzZXMgbmdPbkNoYW5nZXMgLT4gYXBwbHlJbXBvcnRlZEZpbHRlcnMsXG4gICAgICAgICAgLy8gd2hpY2ggZGVzdHJveXMgY29sdW1ucyBhbmQgZGlzbWlzc2VzIGFjdGl2ZSBmaWx0ZXIgcG9wb3ZlcnMvaW5wdXRzLlxuICAgICAgICAgIGlmICh0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgJiYgdGhpcy5pc1JlcG9ydFN0YXRlTWF0Y2hpbmcodGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmhhcygncmVwb3J0U3RhdGUnKSAmJiB0aGlzLmlzUmVwb3J0U3RhdGVNYXRjaGluZyh0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KCdyZXBvcnRTdGF0ZScpLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdjb2x1bW5zJyB8fCBrZXkgPT09ICdjb2x1bW5EZWZzJykge1xuICAgICAgICAgIGlmICh0aGlzLmxhc3RFbWl0dGVkQ29sdW1uRGVmcyAmJiB0aGlzLmlzQ29sdW1uRGVmc01hdGNoaW5nKHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmhhcyhrZXkpICYmIHRoaXMuaXNDb2x1bW5EZWZzTWF0Y2hpbmcodGhpcy5hcHBsaWVkSW5wdXRzLmdldChrZXkpLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdjb25maWcnKSB7XG4gICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuYXBwbGllZElucHV0cy5nZXQoJ2NvbmZpZycpO1xuICAgICAgICAgIGlmIChwcmV2ICYmIEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdyb3dEYXRhJykge1xuICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KCdyb3dEYXRhJyk7XG4gICAgICAgICAgaWYgKHByZXYgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmdldChrZXkpID09PSB2YWx1ZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNhbkFjY2VwdElucHV0KGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jb21wUmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICAgIHRoaXMuYXBwbGllZElucHV0cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuQWNjZXB0SW5wdXQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29tcFJlZikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNtcERlZiA9ICh0aGlzLmNvbXBSZWYuY29tcG9uZW50VHlwZSBhcyBhbnkpPy5bJ8m1Y21wJ107XG4gICAgaWYgKGNtcERlZiAmJiBjbXBEZWYuaW5wdXRzKSB7XG4gICAgICByZXR1cm4ga2V5IGluIGNtcERlZi5pbnB1dHMgfHwgT2JqZWN0LnZhbHVlcyhjbXBEZWYuaW5wdXRzKS5pbmNsdWRlcyhrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZXBvcnRTdGF0ZU1hdGNoaW5nKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICAgIGlmICghYSB8fCAhYikgcmV0dXJuIGEgPT09IGI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdldENvbXBhcmFibGUgPSAoczogYW55KSA9PiAoe1xuICAgICAgICBhY3RpdmVGaWx0ZXJzOiBzLmFjdGl2ZUZpbHRlcnMsXG4gICAgICAgIGNvbmRpdGlvbkZpbHRlcnM6IHMuY29uZGl0aW9uRmlsdGVycyxcbiAgICAgICAgc29ydE1vZGVsOiBzLnNvcnRNb2RlbCxcbiAgICAgICAgZ3JvdXBNb2RlbDogcy5ncm91cE1vZGVsLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZ2V0Q29tcGFyYWJsZShhKSkgPT09IEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNDb2x1bW5EZWZzTWF0Y2hpbmcoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGEpIHx8ICFBcnJheS5pc0FycmF5KGIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZXRDb21wYXJhYmxlID0gKGNvbHM6IGFueVtdKSA9PlxuICAgICAgICBjb2xzLm1hcCgoYzogYW55KSA9PiAoe1xuICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxuICAgICAgICAgIGhpZGU6IGMuaGlkZSxcbiAgICAgICAgICBwaW5uZWQ6IGMucGlubmVkLFxuICAgICAgICB9KSk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZ2V0Q29tcGFyYWJsZShhKSkgPT09IEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVjcmVhdGVDb21wb25lbnQodHlwZTogVHlwZTxhbnk+IHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICBpZiAoIXR5cGUpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbXBSZWYgPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQodHlwZSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcFJlZi5pbnN0YW5jZSBhcyBhbnk7XG5cbiAgICAgIGlmIChpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLnJlcG9ydFN0YXRlQ2hhbmdlICYmIHR5cGVvZiBpbnN0YW5jZS5yZXBvcnRTdGF0ZUNoYW5nZS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UucmVwb3J0U3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFN0YXRlQ2hhbmdlLmVtaXQoc3RhdGUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2UuY29sdW1uRGVmc0NoYW5nZWQgJiYgdHlwZW9mIGluc3RhbmNlLmNvbHVtbkRlZnNDaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5jb2x1bW5EZWZzQ2hhbmdlZC5zdWJzY3JpYmUoKGRlZnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZENvbHVtbkRlZnMgPSBkZWZzO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzQ2hhbmdlLmVtaXQoZGVmcyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW1pdFJvdyA9IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gZGF0YT8uZGF0YSA/PyBkYXRhPy5yb3cgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgY29sID0gZGF0YT8uY29sRGVmID8/IGRhdGE/LmNvbHVtbjtcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBjb2x1bW46IGNvbCwgZXZlbnQ6IGRhdGE/LmV2ZW50IH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKGluc3RhbmNlLnJvd0NsaWNrZWQgJiYgdHlwZW9mIGluc3RhbmNlLnJvd0NsaWNrZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLnJvd0NsaWNrZWQuc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uucm93Q2xpY2sgJiYgdHlwZW9mIGluc3RhbmNlLnJvd0NsaWNrLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5yb3dDbGljay5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZS5jZWxsQ2xpY2tlZCAmJiB0eXBlb2YgaW5zdGFuY2UuY2VsbENsaWNrZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLmNlbGxDbGlja2VkLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmNlbGxDbGljayAmJiB0eXBlb2YgaW5zdGFuY2UuY2VsbENsaWNrLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5jZWxsQ2xpY2suc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQgJiYgdHlwZW9mIGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICAgIGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSA/IHNlbGVjdGlvbiA6IChzZWxlY3Rpb24gPyBbc2VsZWN0aW9uXSA6IFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXJyZW50SW5wdXRzKSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuQWNjZXB0SW5wdXQoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jb21wUmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICAgIHRoaXMuYXBwbGllZElucHV0cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1JwdEdyaWRPdXRsZXREaXJlY3RpdmVdIEZhaWxlZCB0byBjcmVhdGUgY3VzdG9tIGdyaWQgY29tcG9uZW50OicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnN1YnMgPSBbXTtcbiAgICB0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgPSBudWxsO1xuICAgIHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzID0gbnVsbDtcbiAgICB0aGlzLmFwcGxpZWRJbnB1dHMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5jb21wUmVmKSB7XG4gICAgICB0aGlzLmNvbXBSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb21wUmVmID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy52Y3IuY2xlYXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtZ3JpZC1icmlkZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBScHRJY29uQ29tcG9uZW50LCBScHRHcmlkT3V0bGV0RGlyZWN0aXZlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWdyaWQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGN1c3RvbUdyaWRDb21wb25lbnQoKSkge1xuICAgICAgICA8IS0tIEhvc3QtcHJvdmlkZWQgZ3JpZCBjb21wb25lbnQgKGUuZy4gQldheXMtZ3JpZCBVbHRyYUdyaWRDb21wb25lbnQpIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW3JwdEdyaWRPdXRsZXRdPVwiY3VzdG9tR3JpZENvbXBvbmVudCgpXCJcbiAgICAgICAgICBbaW5zdGFuY2VLZXldPVwiZ3JpZEluc3RhbmNlS2V5KClcIlxuICAgICAgICAgIFtpbnB1dHNdPVwiZ3JpZElucHV0cygpXCJcbiAgICAgICAgICAoZ3JpZFN0YXRlQ2hhbmdlKT1cImdyaWRTdGF0ZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAocm93Q2xpY2spPVwicm93Q2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gQnVpbHQtaW4gZmFsbGJhY2sgdGFibGUgd2hlbiBubyBleHRlcm5hbCBncmlkIGlzIHByb3ZpZGVkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXRhYmxlLXRpdGxlXCI+UmVzdWx0cyAoe3sgZGF0YSgpLmxlbmd0aCB9fSByb3dzKTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwicnB0LXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1udW1cIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1jYlwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgIT09ICdzaW5nbGUnICYmIGlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzUGFydGlhbGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlNlbGVjdCBhbGwgcm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGggfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRoLWNvbnRlbnRcIiBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEp1c3RpZnlDb250ZW50KGNvbC5hbGlnbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBzb3J0Q29sdW1uKCkgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1zb3J0LWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJzb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bidcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGlmIChwYWdpbmF0ZWREYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbFNwYW4oKVwiIGNsYXNzPVwicnB0LWVtcHR5LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICBObyBkYXRhIGZvdW5kIG1hdGNoaW5nIGNyaXRlcmlhXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtY2xpY2thYmxlXT1cImhhc1Jvd0NsaWNrQWN0aW9uKCkgfHwgaXNTZWxlY3Rpb25FbmFibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZCBycHQtdGQtbnVtXCI+e3sgKGN1cnJlbnRQYWdlKCkgLSAxKSAqIHBhZ2VTaXplKCkgKyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkIHJwdC10ZC1jYlwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgPT09ICdzaW5nbGUnID8gJ3JhZGlvJyA6ICdjaGVja2JveCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJycHQtZmFsbGJhY2stc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jbGlja2FibGUtY2VsbF09XCIhIWNvbC5hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DZWxsQ2xpY2socm93LCBjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jZWxsLWFjdGlvbi1saW5rXCI+e3sgZm9ybWF0VmFsdWUocm93W2NvbC5maWVsZF0sIGNvbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFZhbHVlKHJvd1tjb2wuZmllbGRdLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgQGlmIChoYXNBZ2dyZWdhdGVzKCkpIHtcbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJycHQtdGZvb3Qtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1udW1cIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtY2JcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtYWdncmVnYXRlXCIgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuYWdncmVnYXRlICYmIGNvbC5hZ2dyZWdhdGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS13cmFwXCIgW2NsYXNzLmlzLXJpZ2h0XT1cImNvbC5hbGlnbiA9PT0gJ3JpZ2h0J1wiIFtjbGFzcy5pcy1jZW50ZXJdPVwiY29sLmFsaWduID09PSAnY2VudGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS1sYWJlbFwiPnt7IGNvbC5hZ2dyZWdhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYWdncmVnYXRlLXZhbHVlXCI+e3sgY29tcHV0ZUFnZ3JlZ2F0ZShjb2wpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKGlzUGFnaW5hdGlvbkVuYWJsZWQoKSAmJiB0b3RhbFBhZ2VzKCkgPiAxKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2luYXRpb24tYmFyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXBhZ2UtaW5mb1wiPlxuICAgICAgICAgICAgICAgIFBhZ2Uge3sgY3VycmVudFBhZ2UoKSB9fSBvZiB7eyB0b3RhbFBhZ2VzKCkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2UtYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctbGVmdFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlByZXZpb3VzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IHRvdGFsUGFnZXMoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TmV4dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctcmlnaHRcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1jb250YWluZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgYndheXMtZ3JpZCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA0ODBweDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgLS11Zy1mb290ZXItYmc6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIC0tdWctZm9vdGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgLS11Zy1oZWFkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIC0tdWctYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIC0tdWctZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICAtLXVnLWZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICAtLXVnLWhlYWRlci1mb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXdyYXBwZXIge1xuICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXZpZXdwb3J0IHtcbiAgICAgIG1pbi1oZWlnaHQ6IDM1MHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctYm90dG9tLWJhcixcbiAgICA6aG9zdCA6Om5nLWRlZXAgdWctcGFnaW5hdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYykgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1zdGF0dXMtYmFyLWNvbnRlbnQsXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdpbmF0aW9uLWluZm8sXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLWluZm8ge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUgc2VsZWN0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZikgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXNtLCA0cHgpICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93LWxhYmVsIHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteHMsIDAuNjg3NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW0gIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXRvdGFsLWNlbGwge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3csIDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDUpKTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICAgIC5ycHQtdGFibGUtdG9vbGJhciB7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG4gICAgLnJwdC10YWJsZS10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1yZXNwb25zaXZlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICB9XG4gICAgLnJwdC10YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NzVyZW0pO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgLnJwdC10aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzQ3NTU2OSk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICAgIC5ycHQtdGguc29ydGFibGUge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucnB0LXRoLnNvcnRhYmxlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICB9XG4gICAgLnJwdC10aC1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuICAgIC5ycHQtc29ydC1pbmRpY2F0b3Ige1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLnJwdC10aC1udW0sIC5ycHQtdGQtbnVtIHtcbiAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgfVxuICAgIC5ycHQtdGgtY2IsIC5ycHQtdGQtY2Ige1xuICAgICAgd2lkdGg6IDQycHg7XG4gICAgICBtaW4td2lkdGg6IDQycHg7XG4gICAgICBtYXgtd2lkdGg6IDQycHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICB9XG4gICAgLnJwdC1jaGVja2JveCB7XG4gICAgICB3aWR0aDogMTVweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGFjY2VudC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gICAgLnJwdC10ZCB7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMxZTI5M2IpO1xuICAgIH1cbiAgICAucnB0LXRyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1zZWxlY3RlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmNmZmO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLXNlbGVjdGVkOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkYmVhZmU7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtY2xpY2thYmxlIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1jbGlja2FibGU6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICB9XG4gICAgLnJwdC10ZC5pcy1jbGlja2FibGUtY2VsbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5ycHQtY2VsbC1hY3Rpb24tbGluayB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAucnB0LWNlbGwtYWN0aW9uLWxpbms6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG4gICAgLnJwdC1lbXB0eS1tZXNzYWdlIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDQwcHggMjBweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxuICAgIC5ycHQtdGZvb3Qtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC10ZC1hZ2dyZWdhdGUge1xuICAgICAgcGFkZGluZzogOHB4IDE0cHg7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICBnYXA6IDZweDtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcC5pcy1yaWdodCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAuaXMtY2VudGVyIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS14cywgMC42ODc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXZhbHVlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICd0bnVtJztcbiAgICB9XG4gICAgLnJwdC1wYWdpbmF0aW9uLWJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1pbmZvIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idXR0b25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ0biB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEdyaWRCcmlkZ2VDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc2lnbmVyQ29uZmlnID0gaW5qZWN0KERFU0lHTkVSX0xPQ0FMX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RlZEdyaWQgPSBpbmplY3QoR1JJRF9DT01QT05FTlQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZSA9IGluamVjdChSZXBvcnRTdG9yYWdlU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsZWdhY3lEZWZhdWx0ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J3YXlzX2dyaWRfcmVwb3J0X3N0YXRlX2RlZmF1bHQnKTtcbiAgICAgICAgaWYgKGxlZ2FjeURlZmF1bHQgJiYgIWxlZ2FjeURlZmF1bHQuaW5jbHVkZXMoJ192ZXJzaW9uXycpKSB7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2J3YXlzX2dyaWRfcmVwb3J0X3N0YXRlX2RlZmF1bHQnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSByZXN0cmljdGVkIHN0b3JhZ2UgZW52aXJvbm1lbnRzIChlLmcuIHNhbmRib3hlZCBpZnJhbWVzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IGdyaWREZWZpbml0aW9uID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0R3JpZERlZmluaXRpb24+KCk7XG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDx1bmtub3duW10+KFtdKTtcblxuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBjb2x1bW5EZWZzQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgcm93Q2xpY2sgPSBvdXRwdXQ8eyByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBjb2x1bW4/OiBHcmlkQ29sdW1uRGVmaW5pdGlvbjsgZXZlbnQ/OiBNb3VzZUV2ZW50IH0+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxhbnlbXT4oKTtcblxuICByZWFkb25seSBjdXN0b21HcmlkQ29tcG9uZW50ID0gY29tcHV0ZWQ8VHlwZTx1bmtub3duPiB8IG51bGw+KCgpID0+IHRoaXMuZGVzaWduZXJDb25maWc/LigpPy5ncmlkID8/IHRoaXMuaW5qZWN0ZWRHcmlkID8/IG51bGwpO1xuICByZWFkb25seSBzZWxlY3RlZFJvd3MgPSBzaWduYWw8YW55W10+KFtdKTtcblxuICByZWFkb25seSBoYXNSb3dDbGlja0FjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZGVmPy5yb3dDbGlja0FjdGlvbiB8fFxuICAgICAgZGVmPy5vcHRpb25zPy5yb3dDbGlja0FjdGlvbiB8fFxuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+ICEhYy5hY3Rpb24pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICBpZiAob3B0cz8uY2hlY2tib3hTZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9wdHMuY2hlY2tib3hTZWxlY3Rpb247XG4gICAgfVxuICAgIGlmIChvcHRzPy5zZWxlY3RhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWZmZWN0aXZlUm93U2VsZWN0aW9uID0gY29tcHV0ZWQ8J3NpbmdsZScgfCAnbXVsdGlwbGUnPigoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICByZXR1cm4gb3B0cz8uc2VsZWN0aW9uTW9kZSB8fCBvcHRzPy5yb3dTZWxlY3Rpb24gfHwgJ211bHRpcGxlJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdHM/LmhlYWRlckNoZWNrYm94U2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvcHRzLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xuICB9KTtcblxuICByZWFkb25seSBpc1NlbGVjdGlvbkVuYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICByZXR1cm4gISEob3B0cz8uc2VsZWN0YWJsZSB8fCBvcHRzPy5jaGVja2JveFNlbGVjdGlvbiB8fCB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5jaGVja2JveFNlbGVjdGlvbikpO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0Q29sdW1uID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzb3J0RGlyZWN0aW9uID0gc2lnbmFsPCdhc2MnIHwgJ2Rlc2MnPignYXNjJyk7XG4gIHJlYWRvbmx5IGN1cnJlbnRQYWdlID0gc2lnbmFsPG51bWJlcj4oMSk7XG4gIHJlYWRvbmx5IHZpc2libGVDb2x1bW5zID0gY29tcHV0ZWQ8R3JpZENvbHVtbkRlZmluaXRpb25bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGRlZmluZWQgPSAodGhpcy5ncmlkRGVmaW5pdGlvbigpPy5jb2x1bW5zID8/IFtdKS5maWx0ZXIoKGMpID0+IGMudmlzaWJsZSAhPT0gZmFsc2UpO1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGEoKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHJvd3NbMF0gPT09ICdvYmplY3QnICYmIHJvd3NbMF0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZpcnN0Um93ID0gcm93c1swXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaXJzdFJvdykuZmlsdGVyKChrKSA9PiBrLnRyaW0oKS5sZW5ndGggPiAwKTtcbiAgICAgIGNvbnN0IG1hdGNoZXNBbnkgPSBkZWZpbmVkLnNvbWUoKGMpID0+IGtleXMuaW5jbHVkZXMoYy5maWVsZCkpO1xuICAgICAgLy8gSWYgbm8gY29sdW1ucyBhcmUgZGVmaW5lZCwgb3IgdGhlIGRlZmluZWQgY29sdW1ucyBkb24ndCBtYXRjaCBhbnkgZmllbGQgaW4gdGhlIGRhdGEgKGUuZy4gZHVtbXkgaWQvbmFtZSBkZWZhdWx0cyk6XG4gICAgICBpZiAoKGRlZmluZWQubGVuZ3RoID09PSAwIHx8ICFtYXRjaGVzQW55KSAmJiBrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKChrKSA9PiAoe1xuICAgICAgICAgIGZpZWxkOiBrLFxuICAgICAgICAgIGxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoayksXG4gICAgICAgICAgZGF0YVR5cGU6IHR5cGVvZiBmaXJzdFJvd1trXSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6IHR5cGVvZiBmaXJzdFJvd1trXSA9PT0gJ2Jvb2xlYW4nID8gJ2Jvb2xlYW4nIDogJ3N0cmluZycsXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5lZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYnJpZGdlZENvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXNHcmlkQ2hlY2tib3ggPSB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaXNHcmlkSGVhZGVyQ2hlY2tib3ggPSB0aGlzLmlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaGFzRXhwbGljaXRDb2xDaGVja2JveCA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKTtcblxuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjb2wsIGlkeCkgPT4ge1xuICAgICAgbGV0IHdpZHRoTnVtOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIGNvbC53aWR0aCA9PT0gJ3N0cmluZycgJiYgY29sLndpZHRoLmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICAgIHdpZHRoTnVtID0gcGFyc2VJbnQoY29sLndpZHRoLCAxMCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoY29sLndpZHRoIGFzIHVua25vd24pID09PSAnbnVtYmVyJykge1xuICAgICAgICB3aWR0aE51bSA9IGNvbC53aWR0aCBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvbENoZWNrYm94U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29sLmNoZWNrYm94U2VsZWN0aW9uO1xuICAgICAgbGV0IGNvbEhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29sLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIWhhc0V4cGxpY2l0Q29sQ2hlY2tib3ggJiYgaXNHcmlkQ2hlY2tib3ggJiYgaWR4ID09PSAwKSB7XG4gICAgICAgIGNvbENoZWNrYm94U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29sSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gPSBpc0dyaWRIZWFkZXJDaGVja2JveDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiBjb2wubGFiZWwsIC8vIEJXYXlzLWdyaWQgLyBBRyBHcmlkIHN0YW5kYXJkXG4gICAgICAgIGhlYWRlcjogY29sLmxhYmVsLFxuICAgICAgICB0aXRsZTogY29sLmxhYmVsLFxuICAgICAgICBoaWRlOiBjb2wudmlzaWJsZSA9PT0gZmFsc2UsXG4gICAgICAgIHdpZHRoOiB3aWR0aE51bSxcbiAgICAgICAgYWdnRnVuYzogY29sLmFnZ3JlZ2F0ZSAmJiBjb2wuYWdncmVnYXRlICE9PSAnbm9uZScgPyBjb2wuYWdncmVnYXRlIDogdW5kZWZpbmVkLFxuICAgICAgICBjaGVja2JveFNlbGVjdGlvbjogY29sQ2hlY2tib3hTZWxlY3Rpb24sXG4gICAgICAgIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbixcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRJbnN0YW5jZUtleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkcyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8uZGF0YVNvdXJjZUlkIHx8ICdjdXN0b20nO1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjKSA9PiBjLmZpZWxkKS5qb2luKCdfJyk7XG4gICAgcmV0dXJuIGAke2RzfV8ke2NvbHN9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFN0YXRlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5kYXRhU291cmNlSWQgfHwgJ2N1c3RvbSc7XG4gICAgY29uc3QgYWxsQ29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMuZmllbGQpO1xuICAgIGNvbnN0IGNvdW50ID0gYWxsQ29scy5sZW5ndGg7XG4gICAgY29uc3QgY29sc1NpZyA9IGFsbENvbHMuc2xpY2UoMCwgNSkuam9pbignXycpO1xuICAgIHJldHVybiBgcnB0XyR7ZHN9XyR7Y291bnR9XyR7Y29sc1NpZyB8fCAnZ3JpZCd9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZENvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHJvd1NlbCA9IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCk7XG4gICAgY29uc3QgaGFzQ2hlY2tib3ggPSB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2hlY2tib3ggPSB0aGlzLmlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2lkZUJhcjogb3B0cy5zaWRlQmFyICE9PSB1bmRlZmluZWQgPyBvcHRzLnNpZGVCYXIgOiB0cnVlLFxuICAgICAgc3RhdHVzQmFyOiBvcHRzLnN0YXR1c0JhciAhPT0gdW5kZWZpbmVkID8gb3B0cy5zdGF0dXNCYXIgOiB0cnVlLFxuICAgICAgZ2xvYmFsU2VhcmNoOiBvcHRzLmdsb2JhbFNlYXJjaCAhPT0gdW5kZWZpbmVkID8gb3B0cy5nbG9iYWxTZWFyY2ggOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIHJvd1NlbGVjdGlvbjogcm93U2VsLFxuICAgICAgc2VsZWN0aW9uTW9kZTogcm93U2VsLFxuICAgICAgY2hlY2tib3hTZWxlY3Rpb246IGhhc0NoZWNrYm94LFxuICAgICAgaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGhhc0hlYWRlckNoZWNrYm94LFxuICAgICAgc3RhdGVLZXk6IHRoaXMuZ3JpZFN0YXRlS2V5KCksXG4gICAgfTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGVDb2x1bW5Hcm91cERlZnMoXG4gICAgZ3JvdXBEZWZzOiBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgY3VycmVudENvbHVtbnM6IGFueVtdXG4gICk6IGFueVtdIHwgbnVsbCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGdyb3VwRGVmcykgfHwgZ3JvdXBEZWZzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSBuZXcgU2V0KGN1cnJlbnRDb2x1bW5zLm1hcCgoYykgPT4gYy5maWVsZCkpO1xuICAgIGNvbnN0IGxlYWZGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29sbGVjdExlYXZlcyA9IChkZWZzOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBkIG9mIGRlZnMpIHtcbiAgICAgICAgaWYgKGQgJiYgQXJyYXkuaXNBcnJheShkLmNoaWxkcmVuKSkge1xuICAgICAgICAgIGNvbGxlY3RMZWF2ZXMoZC5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoZCAmJiBkLmZpZWxkKSB7XG4gICAgICAgICAgbGVhZkZpZWxkcy5wdXNoKGQuZmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb2xsZWN0TGVhdmVzKGdyb3VwRGVmcyk7XG5cbiAgICAvLyBJZiBsZWFmIGZpZWxkcyBpbiBncm91cERlZnMgZG9uJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgYWN0aXZlIGNvbHVtbnMgKGUuZy4gZHVtbXkgaWQvbmFtZSBmcm9tIHByZXZpb3VzIHRlbXBsYXRlKSxcbiAgICAvLyBvciBpZiB0aGUgZ3JvdXAgZGVmaW5pdGlvbiBvbmx5IGhhZCBkdW1teSB0ZW1wbGF0ZSBjb2x1bW5zICg8PSAyKSB3aGlsZSBjdXJyZW50Q29sdW1ucyBpcyBhIGZ1bGwgZGF0YXNldCAoPiA1KSxcbiAgICAvLyB0aGUgc2F2ZWQgZ3JvdXBEZWZzIGlzIG9ic29sZXRlIGFuZCBtdXN0IGJlIGNsZWFyZWQgc28gdGhlIGdyaWQgY2FuIHJlbmRlciBhbGwgY3VycmVudCBjb2x1bW5zIGNsZWFubHkuXG4gICAgY29uc3QgdmFsaWRMZWF2ZXMgPSBsZWFmRmllbGRzLmZpbHRlcigoZikgPT4gY3VycmVudEZpZWxkcy5oYXMoZikpO1xuICAgIGlmICh2YWxpZExlYXZlcy5sZW5ndGggPT09IDAgfHwgKGxlYWZGaWVsZHMubGVuZ3RoIDw9IDIgJiYgY3VycmVudENvbHVtbnMubGVuZ3RoID4gNSAmJiB2YWxpZExlYXZlcy5sZW5ndGggPD0gMikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIElmIHNvbWUgY29sdW1ucyBhcmUgZ3JvdXBlZCwgYnV0IG5ldyBjb2x1bW5zIHdlcmUgYWRkZWQvZGV0ZWN0ZWQgdGhhdCBhcmVuJ3QgaW4gZ3JvdXBEZWZzLFxuICAgIC8vIGFwcGVuZCB0aGUgcmVtYWluaW5nIGNvbHVtbnMgc28gdGhhdCBVbHRyYUdyaWQncyBmbGF0dGVuQ29sdW1uRGVmcyB3aWxsIGluY2x1ZGUgQUxMIGNvbHVtbnMuXG4gICAgY29uc3QgbGVhZlNldCA9IG5ldyBTZXQobGVhZkZpZWxkcyk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSBjdXJyZW50Q29sdW1ucy5maWx0ZXIoKGMpID0+ICFsZWFmU2V0LmhhcyhjLmZpZWxkKSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbLi4uZ3JvdXBEZWZzLCAuLi5taXNzaW5nQ29sdW1uc107XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwRGVmcztcbiAgfVxuXG4gIHJlYWRvbmx5IGdyaWRSZXBvcnRTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gKG9wdHM/LnJlcG9ydFN0YXRlIGFzIGFueSkgfHwge307XG4gICAgY29uc3QgYnJpZGdlZCA9IHRoaXMuYnJpZGdlZENvbHVtbnMoKTtcbiAgICBjb25zdCBlZmZlY3RpdmVHcm91cERlZnMgPSB0aGlzLnJlY29uY2lsZUNvbHVtbkdyb3VwRGVmcyhleGlzdGluZy5jb2x1bW5Hcm91cERlZnMsIGJyaWRnZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgY29sdW1uR3JvdXBEZWZzOiBlZmZlY3RpdmVHcm91cERlZnMsXG4gICAgICBjb2x1bW5EZWZzOiBicmlkZ2VkLFxuICAgICAgc29ydE1vZGVsOiAob3B0cz8uc29ydE1vZGVsIGFzIGFueSkgfHwgZXhpc3Rpbmcuc29ydE1vZGVsIHx8IFtdLFxuICAgICAgZ3JvdXBNb2RlbDogb3B0cz8uZ3JvdXBNb2RlbCB8fCBleGlzdGluZy5ncm91cE1vZGVsIHx8IFtdLFxuICAgICAgYWN0aXZlRmlsdGVyczogZXhpc3RpbmcuYWN0aXZlRmlsdGVycyB8fCB7fSxcbiAgICAgIGNvbmRpdGlvbkZpbHRlcnM6IGV4aXN0aW5nLmNvbmRpdGlvbkZpbHRlcnMgfHwge30sXG4gICAgICBoaWdobGlnaHRSdWxlczogZXhpc3RpbmcuaGlnaGxpZ2h0UnVsZXMgfHwgW10sXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZElucHV0cyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgY29sdW1uczogdGhpcy5icmlkZ2VkQ29sdW1ucygpLFxuICAgIGNvbHVtbkRlZnM6IHRoaXMuYnJpZGdlZENvbHVtbnMoKSxcbiAgICByb3dEYXRhOiB0aGlzLmRhdGEoKSxcbiAgICBjb25maWc6IHRoaXMuZ3JpZENvbmZpZygpLFxuICAgIHJlcG9ydFN0YXRlOiB0aGlzLmdyaWRSZXBvcnRTdGF0ZSgpLFxuICAgIHBhZ2luYXRpb246IHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdpbmF0aW9uICE9PSBmYWxzZSxcbiAgICBwYWdlU2l6ZTogdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnBhZ2VTaXplID8/IDEwLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgc2hvd1Jvd051bWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dSb3dOdW1iZXJzO1xuICB9KTtcblxuICByZWFkb25seSBpc1BhZ2luYXRpb25FbmFibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnZVNpemUgPz8gMTA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNvbFNwYW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggKyAodGhpcy5zaG93Um93TnVtYmVycygpID8gMSA6IDApICsgKHRoaXMuaXNTZWxlY3Rpb25FbmFibGVkKCkgPyAxIDogMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhhc0FnZ3JlZ2F0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5zaG93Rm9vdGVyICYmXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5hZ2dyZWdhdGUgJiYgYy5hZ2dyZWdhdGUgIT09ICdub25lJylcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0ZWREYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9ICh0aGlzLmRhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdKSB8fCBbXTtcbiAgICBjb25zdCBjb2wgPSB0aGlzLnNvcnRDb2x1bW4oKTtcbiAgICBjb25zdCBkaXIgPSB0aGlzLnNvcnREaXJlY3Rpb24oKTtcblxuICAgIGlmICghY29sKSByZXR1cm4gcmF3O1xuXG4gICAgcmV0dXJuIFsuLi5yYXddLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbEEgPSBhW2NvbF07XG4gICAgICBjb25zdCB2YWxCID0gYltjb2xdO1xuICAgICAgaWYgKHZhbEEgPT0gbnVsbCAmJiB2YWxCID09IG51bGwpIHJldHVybiAwO1xuICAgICAgaWYgKHZhbEEgPT0gbnVsbCkgcmV0dXJuIDE7XG4gICAgICBpZiAodmFsQiA9PSBudWxsKSByZXR1cm4gLTE7XG4gICAgICBpZiAodmFsQSA8IHZhbEIpIHJldHVybiBkaXIgPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgaWYgKHZhbEEgPiB2YWxCKSByZXR1cm4gZGlyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFBhZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKCkpIHJldHVybiAxO1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuc29ydGVkRGF0YSgpLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGxlbiAvIHRoaXMucGFnZVNpemUoKSkpO1xuICB9KTtcblxuICByZWFkb25seSBwYWdpbmF0ZWREYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBzb3J0ZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMuY3VycmVudFBhZ2UoKSAtIDEpICogdGhpcy5wYWdlU2l6ZSgpO1xuICAgIHJldHVybiBzb3J0ZWQuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZSgpKTtcbiAgfSk7XG5cbiAgZ2V0SnVzdGlmeUNvbnRlbnQoYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBzdHJpbmcge1xuICAgIGlmIChhbGlnbiA9PT0gJ3JpZ2h0JykgcmV0dXJuICdmbGV4LWVuZCc7XG4gICAgaWYgKGFsaWduID09PSAnY2VudGVyJykgcmV0dXJuICdjZW50ZXInO1xuICAgIHJldHVybiAnZmxleC1zdGFydCc7XG4gIH1cblxuICB0b2dnbGVTb3J0KGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiB2b2lkIHtcbiAgICBpZiAoY29sLnNvcnRhYmxlID09PSBmYWxzZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNvcnRDb2x1bW4oKSA9PT0gY29sLmZpZWxkKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24uc2V0KHRoaXMuc29ydERpcmVjdGlvbigpID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uLnNldChjb2wuZmllbGQpO1xuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uLnNldCgnYXNjJyk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KDEpO1xuICB9XG5cbiAgcHJldlBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudXBkYXRlKChwKSA9PiBwIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA8IHRoaXMudG90YWxQYWdlcygpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnVwZGF0ZSgocCkgPT4gcCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFZhbHVlKHZhbHVlOiB1bmtub3duLCBjb2w6IEdyaWRDb2x1bW5EZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IFN0cmluZyh2YWx1ZSkgOiBgJCR7bnVtLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMiB9KX1gO1xuICAgIH1cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gU3RyaW5nKHZhbHVlKSA6IG51bS50b0xvY2FsZVN0cmluZygpO1xuICAgIH1cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihkLmdldFRpbWUoKSkgPyBTdHJpbmcodmFsdWUpIDogZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBjb21wdXRlQWdncmVnYXRlKGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNvcnRlZERhdGEoKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiAnMCc7XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ2NvdW50Jykge1xuICAgICAgcmV0dXJuIFN0cmluZyhkYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgbnVtYmVycyA9IGRhdGFcbiAgICAgIC5tYXAoKHJvdykgPT4gTnVtYmVyKHJvd1tjb2wuZmllbGRdKSlcbiAgICAgIC5maWx0ZXIoKG4pID0+ICFpc05hTihuKSk7XG5cbiAgICBpZiAobnVtYmVycy5sZW5ndGggPT09IDApIHJldHVybiAnMCc7XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ3N1bScpIHtcbiAgICAgIGNvbnN0IHN1bSA9IG51bWJlcnMucmVkdWNlKChhY2MsIG4pID0+IGFjYyArIG4sIDApO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHtzdW0udG9GaXhlZCgyKX1gIDogc3VtLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdhdmcnKSB7XG4gICAgICBjb25zdCBhdmcgPSBudW1iZXJzLnJlZHVjZSgoYWNjLCBuKSA9PiBhY2MgKyBuLCAwKSAvIG51bWJlcnMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHthdmcudG9GaXhlZCgyKX1gIDogYXZnLnRvRml4ZWQoMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdtaW4nKSB7XG4gICAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi5udW1iZXJzKTtcbiAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgPyBgJCR7bWluLnRvRml4ZWQoMil9YCA6IFN0cmluZyhtaW4pO1xuICAgIH1cblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnbWF4Jykge1xuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4ubnVtYmVycyk7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke21heC50b0ZpeGVkKDIpfWAgOiBTdHJpbmcobWF4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID8gc2VsZWN0ZWQgOiAoc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChyb3dzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd3MpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzKCkuaW5jbHVkZXMocm93KTtcbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucGFnaW5hdGVkRGF0YSgpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkYXRhLmV2ZXJ5KChyKSA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocikpO1xuICB9XG5cbiAgaXNQYXJ0aWFsbHlTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wYWdpbmF0ZWREYXRhKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY291bnQgPSBkYXRhLmZpbHRlcigocikgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHIpKS5sZW5ndGg7XG4gICAgcmV0dXJuIGNvdW50ID4gMCAmJiBjb3VudCA8IGRhdGEubGVuZ3RoO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgY29uc3QgcGFnZVJvd3MgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICBsZXQgbmV4dDogYW55W107XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoWy4uLmN1cnJlbnQsIC4uLnBhZ2VSb3dzXSk7XG4gICAgICBuZXh0ID0gQXJyYXkuZnJvbShzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0ID0gY3VycmVudC5maWx0ZXIoKHIpID0+ICFwYWdlUm93cy5pbmNsdWRlcyhyKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgdG9nZ2xlUm93U2VsZWN0aW9uKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCk7XG4gICAgbGV0IG5leHQ6IGFueVtdO1xuICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgbmV4dCA9IGNoZWNrZWQgPyBbcm93XSA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5pbmNsdWRlcyhyb3cpID8gY3VycmVudCA6IFsuLi5jdXJyZW50LCByb3ddO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dCA9IGN1cnJlbnQuZmlsdGVyKChyKSA9PiByICE9PSByb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQobmV4dCk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIG9uUm93Q2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICAgIGxldCBuZXh0OiBhbnlbXTtcbiAgICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICBuZXh0ID0gW3Jvd107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5pbmNsdWRlcyhyb3cpID8gY3VycmVudC5maWx0ZXIoKHIpID0+IHIgIT09IHJvdykgOiBbLi4uY3VycmVudCwgcm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV4dCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1Jvd0NsaWNrQWN0aW9uKCkpIHtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgZXZlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoY29sLmFjdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoeyByb3csIGNvbHVtbjogY29sLCBldmVudCB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
950
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3J1bnRpbWUvcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBQ3pDLElBQUksR0FBbUIsRUFBRSxDQUFDO0lBQzFCLHNCQUFzQixHQUFRLElBQUksQ0FBQztJQUNuQyxxQkFBcUIsR0FBUSxJQUFJLENBQUM7SUFDekIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFFL0MsYUFBYSxHQUFHLEtBQUssQ0FBbUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUUsV0FB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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1LVCxtQkFtU2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBERVNJR05FUl9MT0NBTF9DT05GSUcgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9kZXNpZ25lci1jb25maWcudG9rZW4nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBjb21wdXRlZCxcbiAgRGlyZWN0aXZlLFxuICBlZmZlY3QsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR1JJRF9DT01QT05FTlQgfSBmcm9tICcuLi8uLi9jb3JlL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFJlcG9ydFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9yZXBvcnQtc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EZWZpbml0aW9uLCBSZXBvcnRHcmlkRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL3JlcG9ydC1ncmlkLm1vZGVsJztcbmltcG9ydCB7IFJwdEljb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wcmltaXRpdmVzL2NvbXBvbmVudHMvaWNvbi9ycHQtaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgaHVtYW5pemVJZGVudGlmaWVyIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9pZGVudGlmaWVyLWh1bWFuaXplcic7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tycHRHcmlkT3V0bGV0XScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIFJwdEdyaWRPdXRsZXREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSBjb21wUmVmOiBDb21wb25lbnRSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZTogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZENvbHVtbkRlZnM6IGFueSA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwbGllZElucHV0cyA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG5cbiAgcmVhZG9ubHkgY29tcG9uZW50VHlwZSA9IGlucHV0PFR5cGU8YW55PiB8IG51bGw+KG51bGwsIHsgYWxpYXM6ICdycHRHcmlkT3V0bGV0JyB9KTtcbiAgcmVhZG9ubHkgaW5zdGFuY2VLZXkgPSBpbnB1dDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgaW5wdXRzID0gaW5wdXQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KHt9KTtcbiAgcmVhZG9ubHkgZ3JpZFN0YXRlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IHJvd0NsaWNrID0gb3V0cHV0PHsgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgY29sdW1uPzogYW55OyBldmVudD86IGFueSB9PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmNvbXBvbmVudFR5cGUoKTtcbiAgICAgIGNvbnN0IGtleSA9IHRoaXMuaW5zdGFuY2VLZXkoKTtcbiAgICAgIHRoaXMucmVjcmVhdGVDb21wb25lbnQodHlwZSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgICBpZiAoIXRoaXMuY29tcFJlZikgcmV0dXJuO1xuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXJyZW50SW5wdXRzKSkge1xuICAgICAgICBpZiAoa2V5ID09PSAncmVwb3J0U3RhdGUnKSB7XG4gICAgICAgICAgLy8gU3VwcHJlc3MgY2lyY3VsYXIgaW5wdXQgZWNobzogaWYgaW5jb21pbmcgcmVwb3J0U3RhdGUgbWF0Y2hlcyB3aGF0IHRoaXMgZ3JpZCBpbnN0YW5jZVxuICAgICAgICAgIC8vIGp1c3QgZW1pdHRlZCwgc2tpcCBzZXRJbnB1dC4gUmUtYXBwbHlpbmcgcmVwb3J0U3RhdGUgY2F1c2VzIG5nT25DaGFuZ2VzIC0+IGFwcGx5SW1wb3J0ZWRGaWx0ZXJzLFxuICAgICAgICAgIC8vIHdoaWNoIGRlc3Ryb3lzIGNvbHVtbnMgYW5kIGRpc21pc3NlcyBhY3RpdmUgZmlsdGVyIHBvcG92ZXJzL2lucHV0cy5cbiAgICAgICAgICBpZiAodGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlICYmIHRoaXMuaXNSZXBvcnRTdGF0ZU1hdGNoaW5nKHRoaXMubGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuYXBwbGllZElucHV0cy5oYXMoJ3JlcG9ydFN0YXRlJykgJiYgdGhpcy5pc1JlcG9ydFN0YXRlTWF0Y2hpbmcodGhpcy5hcHBsaWVkSW5wdXRzLmdldCgncmVwb3J0U3RhdGUnKSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnY29sdW1ucycgfHwga2V5ID09PSAnY29sdW1uRGVmcycpIHtcbiAgICAgICAgICBpZiAodGhpcy5sYXN0RW1pdHRlZENvbHVtbkRlZnMgJiYgdGhpcy5pc0NvbHVtbkRlZnNNYXRjaGluZyh0aGlzLmxhc3RFbWl0dGVkQ29sdW1uRGVmcywgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuYXBwbGllZElucHV0cy5oYXMoa2V5KSAmJiB0aGlzLmlzQ29sdW1uRGVmc01hdGNoaW5nKHRoaXMuYXBwbGllZElucHV0cy5nZXQoa2V5KSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAnY29uZmlnJykge1xuICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KCdjb25maWcnKTtcbiAgICAgICAgICBpZiAocHJldiAmJiBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkodmFsdWUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5ID09PSAncm93RGF0YScpIHtcbiAgICAgICAgICBjb25zdCBwcmV2ID0gdGhpcy5hcHBsaWVkSW5wdXRzLmdldCgncm93RGF0YScpO1xuICAgICAgICAgIGlmIChwcmV2ID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYXBwbGllZElucHV0cy5nZXQoa2V5KSA9PT0gdmFsdWUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jYW5BY2NlcHRJbnB1dChrZXkpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY29tcFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmFwcGxpZWRJbnB1dHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNhbkFjY2VwdElucHV0KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmNvbXBSZWYpIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjbXBEZWYgPSAodGhpcy5jb21wUmVmLmNvbXBvbmVudFR5cGUgYXMgYW55KT8uWyfJtWNtcCddO1xuICAgIGlmIChjbXBEZWYgJiYgY21wRGVmLmlucHV0cykge1xuICAgICAgcmV0dXJuIGtleSBpbiBjbXBEZWYuaW5wdXRzIHx8IE9iamVjdC52YWx1ZXMoY21wRGVmLmlucHV0cykuaW5jbHVkZXMoa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcml2YXRlIGlzUmVwb3J0U3RhdGVNYXRjaGluZyhhOiBhbnksIGI6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpIHJldHVybiBhID09PSBiO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZXRDb21wYXJhYmxlID0gKHM6IGFueSkgPT4gKHtcbiAgICAgICAgYWN0aXZlRmlsdGVyczogcy5hY3RpdmVGaWx0ZXJzLFxuICAgICAgICBjb25kaXRpb25GaWx0ZXJzOiBzLmNvbmRpdGlvbkZpbHRlcnMsXG4gICAgICAgIHNvcnRNb2RlbDogcy5zb3J0TW9kZWwsXG4gICAgICAgIGdyb3VwTW9kZWw6IHMuZ3JvdXBNb2RlbCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYSkpID09PSBKU09OLnN0cmluZ2lmeShnZXRDb21wYXJhYmxlKGIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzQ29sdW1uRGVmc01hdGNoaW5nKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSB8fCAhQXJyYXkuaXNBcnJheShiKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZ2V0Q29tcGFyYWJsZSA9IChjb2xzOiBhbnlbXSkgPT5cbiAgICAgICAgY29scy5tYXAoKGM6IGFueSkgPT4gKHtcbiAgICAgICAgICBmaWVsZDogYy5maWVsZCxcbiAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICBoaWRlOiBjLmhpZGUsXG4gICAgICAgICAgcGlubmVkOiBjLnBpbm5lZCxcbiAgICAgICAgfSkpO1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYSkpID09PSBKU09OLnN0cmluZ2lmeShnZXRDb21wYXJhYmxlKGIpKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlY3JlYXRlQ29tcG9uZW50KHR5cGU6IFR5cGU8YW55PiB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gICAgaWYgKCF0eXBlKSByZXR1cm47XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5jb21wUmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KHR5cGUpO1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmNvbXBSZWYuaW5zdGFuY2UgYXMgYW55O1xuXG4gICAgICBpZiAoaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZCAmJiB0eXBlb2YgaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UuZ3JpZFN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUoKHN0YXRlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGFzdEVtaXR0ZWRSZXBvcnRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgdGhpcy5ncmlkU3RhdGVDaGFuZ2UuZW1pdChzdGF0ZSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChpbnN0YW5jZS5yZXBvcnRTdGF0ZUNoYW5nZSAmJiB0eXBlb2YgaW5zdGFuY2UucmVwb3J0U3RhdGVDaGFuZ2Uuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICAgIGluc3RhbmNlLnJlcG9ydFN0YXRlQ2hhbmdlLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLmNvbHVtbkRlZnNDaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5jb2x1bW5EZWZzQ2hhbmdlZC5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UuY29sdW1uRGVmc0NoYW5nZWQuc3Vic2NyaWJlKChkZWZzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzID0gZGVmcztcbiAgICAgICAgICAgIHRoaXMuY29sdW1uRGVmc0NoYW5nZS5lbWl0KGRlZnMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVtaXRSb3cgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHJvdyA9IGRhdGE/LmRhdGEgPz8gZGF0YT8ucm93ID8/IGRhdGE7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRhdGE/LmNvbERlZiA/PyBkYXRhPy5jb2x1bW47XG4gICAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgY29sdW1uOiBjb2wsIGV2ZW50OiBkYXRhPy5ldmVudCB9KTtcbiAgICAgIH07XG5cbiAgICAgIGlmIChpbnN0YW5jZS5yb3dDbGlja2VkICYmIHR5cGVvZiBpbnN0YW5jZS5yb3dDbGlja2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5yb3dDbGlja2VkLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLnJvd0NsaWNrICYmIHR5cGVvZiBpbnN0YW5jZS5yb3dDbGljay5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5zdGFuY2Uucm93Q2xpY2suc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2UuY2VsbENsaWNrZWQgJiYgdHlwZW9mIGluc3RhbmNlLmNlbGxDbGlja2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5jZWxsQ2xpY2tlZC5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZS5jZWxsQ2xpY2sgJiYgdHlwZW9mIGluc3RhbmNlLmNlbGxDbGljay5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goaW5zdGFuY2UuY2VsbENsaWNrLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5zZWxlY3Rpb25DaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJvd3MgPSBBcnJheS5pc0FycmF5KHNlbGVjdGlvbikgPyBzZWxlY3Rpb24gOiAoc2VsZWN0aW9uID8gW3NlbGVjdGlvbl0gOiBbXSk7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd3MpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoY3VycmVudElucHV0cykpIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkFjY2VwdElucHV0KGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoaXMuY29tcFJlZi5zZXRJbnB1dChrZXksIHZhbHVlKTtcbiAgICAgICAgICB0aGlzLmFwcGxpZWRJbnB1dHMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tScHRHcmlkT3V0bGV0RGlyZWN0aXZlXSBGYWlsZWQgdG8gY3JlYXRlIGN1c3RvbSBncmlkIGNvbXBvbmVudDonLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5zdWJzID0gW107XG4gICAgdGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLmxhc3RFbWl0dGVkQ29sdW1uRGVmcyA9IG51bGw7XG4gICAgdGhpcy5hcHBsaWVkSW5wdXRzLmNsZWFyKCk7XG4gICAgaWYgKHRoaXMuY29tcFJlZikge1xuICAgICAgdGhpcy5jb21wUmVmLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuY29tcFJlZiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudmNyLmNsZWFyKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyKCk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncnB0LWdyaWQtYnJpZGdlJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgUnB0SWNvbkNvbXBvbmVudCwgUnB0R3JpZE91dGxldERpcmVjdGl2ZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInJwdC1ncmlkLWNvbnRhaW5lclwiPlxuICAgICAgQGlmIChjdXN0b21HcmlkQ29tcG9uZW50KCkpIHtcbiAgICAgICAgPCEtLSBIb3N0LXByb3ZpZGVkIGdyaWQgY29tcG9uZW50IChlLmcuIEJXYXlzLWdyaWQgVWx0cmFHcmlkQ29tcG9uZW50KSAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgIFtycHRHcmlkT3V0bGV0XT1cImN1c3RvbUdyaWRDb21wb25lbnQoKVwiXG4gICAgICAgICAgW2luc3RhbmNlS2V5XT1cImdyaWRJbnN0YW5jZUtleSgpXCJcbiAgICAgICAgICBbaW5wdXRzXT1cImdyaWRJbnB1dHMoKVwiXG4gICAgICAgICAgKGdyaWRTdGF0ZUNoYW5nZSk9XCJncmlkU3RhdGVDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoY29sdW1uRGVmc0NoYW5nZSk9XCJjb2x1bW5EZWZzQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHJvd0NsaWNrKT1cInJvd0NsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8IS0tIEJ1aWx0LWluIGZhbGxiYWNrIHRhYmxlIHdoZW4gbm8gZXh0ZXJuYWwgZ3JpZCBpcyBwcm92aWRlZCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJwdC10YWJsZS1jYXJkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC10YWJsZS10b29sYmFyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC10YWJsZS10aXRsZVwiPlJlc3VsdHMgKHt7IGRhdGEoKS5sZW5ndGggfX0gcm93cyk8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLXJlc3BvbnNpdmVcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInJwdC10YWJsZVwiPlxuICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgQGlmIChzaG93Um93TnVtYmVycygpKSB7XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInJwdC10aCBycHQtdGgtbnVtXCI+IzwvdGg+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAaWYgKGlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1jYlwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgIT09ICdzaW5nbGUnICYmIGlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzUGFydGlhbGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlNlbGVjdCBhbGwgcm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGggfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRoLWNvbnRlbnRcIiBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEp1c3RpZnlDb250ZW50KGNvbC5hbGlnbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBzb3J0Q29sdW1uKCkgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1zb3J0LWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJzb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bidcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGlmIChwYWdpbmF0ZWREYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbFNwYW4oKVwiIGNsYXNzPVwicnB0LWVtcHR5LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICBObyBkYXRhIGZvdW5kIG1hdGNoaW5nIGNyaXRlcmlhXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtY2xpY2thYmxlXT1cImhhc1Jvd0NsaWNrQWN0aW9uKCkgfHwgaXNTZWxlY3Rpb25FbmFibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZCBycHQtdGQtbnVtXCI+e3sgKGN1cnJlbnRQYWdlKCkgLSAxKSAqIHBhZ2VTaXplKCkgKyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQgcnB0LXRkLWNiXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV09XCJlZmZlY3RpdmVSb3dTZWxlY3Rpb24oKSA9PT0gJ3NpbmdsZScgPyAncmFkaW8nIDogJ2NoZWNrYm94J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInJwdC1mYWxsYmFjay1zZWxlY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlUm93U2VsZWN0aW9uKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgdmlzaWJsZUNvbHVtbnMoKTsgdHJhY2sgY29sLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmlzLWNsaWNrYWJsZS1jZWxsXT1cIiEhY29sLmFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNlbGxDbGljayhyb3csIGNvbCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmFjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWNlbGwtYWN0aW9uLWxpbmtcIj57eyBmb3JtYXRWYWx1ZShyb3dbY29sLmZpZWxkXSwgY29sKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0VmFsdWUocm93W2NvbC5maWVsZF0sIGNvbCkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICBAaWYgKGhhc0FnZ3JlZ2F0ZXMoKSkge1xuICAgICAgICAgICAgICAgIDx0Zm9vdD5cbiAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cInJwdC10Zm9vdC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzaG93Um93TnVtYmVycygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkLW51bVwiPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChpc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkLWNiXCI+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAZm9yIChjb2wgb2YgdmlzaWJsZUNvbHVtbnMoKTsgdHJhY2sgY29sLmZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkLWFnZ3JlZ2F0ZVwiIFtzdHlsZS50ZXh0LWFsaWduXT1cImNvbC5hbGlnbiB8fCAnbGVmdCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmFnZ3JlZ2F0ZSAmJiBjb2wuYWdncmVnYXRlICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1hZ2dyZWdhdGUtd3JhcFwiIFtjbGFzcy5pcy1yaWdodF09XCJjb2wuYWxpZ24gPT09ICdyaWdodCdcIiBbY2xhc3MuaXMtY2VudGVyXT1cImNvbC5hbGlnbiA9PT0gJ2NlbnRlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1hZ2dyZWdhdGUtbGFiZWxcIj57eyBjb2wuYWdncmVnYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS12YWx1ZVwiPnt7IGNvbXB1dGVBZ2dyZWdhdGUoY29sKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rmb290PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgQGlmIChpc1BhZ2luYXRpb25FbmFibGVkKCkgJiYgdG90YWxQYWdlcygpID4gMSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1wYWdpbmF0aW9uLWJhclwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1wYWdlLWluZm9cIj5cbiAgICAgICAgICAgICAgICBQYWdlIHt7IGN1cnJlbnRQYWdlKCkgfX0gb2Yge3sgdG90YWxQYWdlcygpIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJwdC1wYWdlLWJ1dHRvbnNcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXBhZ2UtYnRuXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSgpID09PSAxXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwcmV2UGFnZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImFycm93LWxlZnRcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5QcmV2aW91czwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXBhZ2UtYnRuXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJjdXJyZW50UGFnZSgpID09PSB0b3RhbFBhZ2VzKClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPk5leHQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8cnB0LWljb24gbmFtZT1cImFycm93LXJpZ2h0XCIgW3NpemVdPVwiMTJcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW2BcbiAgICA6aG9zdCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWFyZ2luLXRvcDogMTZweDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgIH1cbiAgICAucnB0LWdyaWQtY29udGFpbmVyIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgbWluLWhlaWdodDogNDgwcHg7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIGJ3YXlzLWdyaWQge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogNDgwcHg7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIC0tdWctZm9vdGVyLWJnOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICAtLXVnLWZvb3Rlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgIC0tdWctaGVhZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICAtLXVnLWJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICAtLXVnLWZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpO1xuICAgICAgLS11Zy1mb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgLS11Zy1oZWFkZXItZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy13cmFwcGVyIHtcbiAgICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgbWluLWhlaWdodDogNDgwcHggIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy12aWV3cG9ydCB7XG4gICAgICBtaW4taGVpZ2h0OiAzNTBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLWJvdHRvbS1iYXIsXG4gICAgOmhvc3QgOjpuZy1kZWVwIHVnLXBhZ2luYXRpb24ge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctc3RhdHVzLWJhci1jb250ZW50LFxuICAgIDpob3N0IDo6bmctZGVlcCAudWctcGFnaW5hdGlvbi1pbmZvLFxuICAgIDpob3N0IDo6bmctZGVlcCAudWctcGFnZS1pbmZvIHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNTAwICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctcGFnZS1zaXplIHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNTAwICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctcGFnZS1zaXplIHNlbGVjdCB7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmZmZmZmYpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1zbSwgNHB4KSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXRvdGFsLXJvdyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYykgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMCAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcyAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXRvdGFsLXJvdy1sYWJlbCB7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tcnB0LWZvbnQtZmFtaWx5LCBpbmhlcml0KSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXhzLCAwLjY4NzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlICFpbXBvcnRhbnQ7XG4gICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYykgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy10b3RhbC1jZWxsIHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIC5ycHQtdGFibGUtY2FyZCB7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1ycHQtY29sb3ItYmcsICNmZmZmZmYpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ycHQtYm9yZGVyLXJhZGl1cy1sZywgOHB4KTtcbiAgICAgIGJveC1zaGFkb3c6IHZhcigtLXJwdC1ib3gtc2hhZG93LCAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjA1KSk7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIH1cbiAgICAucnB0LXRhYmxlLXRvb2xiYXIge1xuICAgICAgcGFkZGluZzogMTJweCAxNnB4O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgfVxuICAgIC5ycHQtdGFibGUtdGl0bGUge1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gICAgfVxuICAgIC5ycHQtdGFibGUtcmVzcG9uc2l2ZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgfVxuICAgIC5ycHQtdGFibGUge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLWJhc2UsIDAuODc1cmVtKTtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgfVxuICAgIC5ycHQtdGgge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM0NzU1NjkpO1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIH1cbiAgICAucnB0LXRoLnNvcnRhYmxlIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLnJwdC10aC5zb3J0YWJsZTpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgfVxuICAgIC5ycHQtdGgtY29udGVudCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNHB4O1xuICAgIH1cbiAgICAucnB0LXNvcnQtaW5kaWNhdG9yIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeSwgIzI1NjNlYik7XG4gICAgfVxuICAgIC5ycHQtdGgtbnVtLCAucnB0LXRkLW51bSB7XG4gICAgICB3aWR0aDogNDhweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgIH1cbiAgICAucnB0LXRoLWNiLCAucnB0LXRkLWNiIHtcbiAgICAgIHdpZHRoOiA0MnB4O1xuICAgICAgbWluLXdpZHRoOiA0MnB4O1xuICAgICAgbWF4LXdpZHRoOiA0MnB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgcGFkZGluZzogOHB4IDEwcHg7XG4gICAgfVxuICAgIC5ycHQtY2hlY2tib3gge1xuICAgICAgd2lkdGg6IDE1cHg7XG4gICAgICBoZWlnaHQ6IDE1cHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBhY2NlbnQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICAgIC5ycHQtdGQge1xuICAgICAgcGFkZGluZzogMTBweCAxNHB4O1xuICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNlMmU4ZjApO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMWUyOTNiKTtcbiAgICB9XG4gICAgLnJwdC10cjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2Y4ZmFmYyk7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtc2VsZWN0ZWQge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VmZjZmZjtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1zZWxlY3RlZDpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGJlYWZlO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLWNsaWNrYWJsZSB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtY2xpY2thYmxlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMWY1Zjk7XG4gICAgfVxuICAgIC5ycHQtdGQuaXMtY2xpY2thYmxlLWNlbGwge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucnB0LWNlbGwtYWN0aW9uLWxpbmsge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICAgIHRleHQtdW5kZXJsaW5lLW9mZnNldDogMnB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogY29sb3IgMTUwbXMgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1jZWxsLWFjdGlvbi1saW5rOmhvdmVyIHtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItcHJpbWFyeS1ob3ZlciwgIzFkNGVkOCk7XG4gICAgfVxuICAgIC5ycHQtZW1wdHktbWVzc2FnZSB7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA0MHB4IDIwcHg7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM5NGEzYjgpO1xuICAgICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIH1cbiAgICAucnB0LXRmb290LXJvdyB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgfVxuICAgIC5ycHQtdGQtYWdncmVnYXRlIHtcbiAgICAgIHBhZGRpbmc6IDhweCAxNHB4O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgIH1cbiAgICAucnB0LWFnZ3JlZ2F0ZS13cmFwIHtcbiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAuaXMtcmlnaHQge1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAucnB0LWFnZ3JlZ2F0ZS13cmFwLmlzLWNlbnRlciB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbiAgICAucnB0LWFnZ3JlZ2F0ZS1sYWJlbCB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteHMsIDAuNjg3NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtbXV0ZWQsICM2NDc0OGIpO1xuICAgIH1cbiAgICAucnB0LWFnZ3JlZ2F0ZS12YWx1ZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSk7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAndG51bSc7XG4gICAgfVxuICAgIC5ycHQtcGFnaW5hdGlvbi1iYXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE2cHg7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1zdWJ0bGUsICNlMmU4ZjApO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXN1cmZhY2UsICNmOGZhZmMpO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtaW5mbyB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnV0dG9ucyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZ2FwOiA4cHg7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idG4ge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA1cHg7XG4gICAgICBwYWRkaW5nOiA0cHggMTBweDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LXNlY29uZGFyeSwgIzMzNDE1NSk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXNtLCA0cHgpO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIHZhcigtLXJwdC10cmFuc2l0aW9uLXNwZWVkLCAxNTBtcykgZWFzZTtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZS1ob3ZlciwgI2YxZjVmOSk7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXItaG92ZXIsICM5NGEzYjgpO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ0bjpkaXNhYmxlZCB7XG4gICAgICBvcGFjaXR5OiAwLjU7XG4gICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIH1cbiAgYF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXNpZ25lckNvbmZpZyA9IGluamVjdChERVNJR05FUl9MT0NBTF9DT05GSUcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0ZWRHcmlkID0gaW5qZWN0KEdSSURfQ09NUE9ORU5ULCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2UgPSBpbmplY3QoUmVwb3J0U3RvcmFnZVNlcnZpY2UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKHRoaXMuc3RvcmFnZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgbGVnYWN5RGVmYXVsdCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdid2F5c19ncmlkX3JlcG9ydF9zdGF0ZV9kZWZhdWx0Jyk7XG4gICAgICAgIGlmIChsZWdhY3lEZWZhdWx0ICYmICFsZWdhY3lEZWZhdWx0LmluY2x1ZGVzKCdfdmVyc2lvbl8nKSkge1xuICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKCdid2F5c19ncmlkX3JlcG9ydF9zdGF0ZV9kZWZhdWx0Jyk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTaWxlbnRseSBpZ25vcmUgcmVzdHJpY3RlZCBzdG9yYWdlIGVudmlyb25tZW50cyAoZS5nLiBzYW5kYm94ZWQgaWZyYW1lcylcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZWFkb25seSBncmlkRGVmaW5pdGlvbiA9IGlucHV0LnJlcXVpcmVkPFJlcG9ydEdyaWREZWZpbml0aW9uPigpO1xuICByZWFkb25seSBkYXRhID0gaW5wdXQ8dW5rbm93bltdPihbXSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFN0YXRlQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgY29sdW1uRGVmc0NoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IHJvd0NsaWNrID0gb3V0cHV0PHsgcm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgY29sdW1uPzogR3JpZENvbHVtbkRlZmluaXRpb247IGV2ZW50PzogTW91c2VFdmVudCB9PigpO1xuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8YW55W10+KCk7XG5cbiAgcmVhZG9ubHkgY3VzdG9tR3JpZENvbXBvbmVudCA9IGNvbXB1dGVkPFR5cGU8dW5rbm93bj4gfCBudWxsPigoKSA9PiB0aGlzLmRlc2lnbmVyQ29uZmlnPy4oKT8uZ3JpZCA/PyB0aGlzLmluamVjdGVkR3JpZCA/PyBudWxsKTtcbiAgcmVhZG9ubHkgc2VsZWN0ZWRSb3dzID0gc2lnbmFsPGFueVtdPihbXSk7XG5cbiAgcmVhZG9ubHkgaGFzUm93Q2xpY2tBY3Rpb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZGVmID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpO1xuICAgIHJldHVybiAhIShcbiAgICAgIGRlZj8ucm93Q2xpY2tBY3Rpb24gfHxcbiAgICAgIGRlZj8ub3B0aW9ucz8ucm93Q2xpY2tBY3Rpb24gfHxcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiAhIWMuYWN0aW9uKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgcmV0dXJuIHRoaXMuaXNTZWxlY3Rpb25FbmFibGVkKCkgJiYgKG9wdHM/LmNoZWNrYm94U2VsZWN0aW9uID8/IHRydWUpO1xuICB9KTtcblxuICByZWFkb25seSBlZmZlY3RpdmVSb3dTZWxlY3Rpb24gPSBjb21wdXRlZDwnc2luZ2xlJyB8ICdtdWx0aXBsZSc+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIHJldHVybiBvcHRzPy5zZWxlY3Rpb25Nb2RlIHx8IG9wdHM/LnJvd1NlbGVjdGlvbiB8fCAnbXVsdGlwbGUnO1xuICB9KTtcblxuICByZWFkb25seSBpc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBpZiAoIXRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKSB8fCB0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpID09PSAnc2luZ2xlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGlmIChvcHRzPy5oZWFkZXJDaGVja2JveFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb3B0cy5oZWFkZXJDaGVja2JveFNlbGVjdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNTZWxlY3Rpb25FbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgcmV0dXJuIG9wdHM/LnNlbGVjdGFibGUgPz8gdHJ1ZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc29ydENvbHVtbiA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgcmVhZG9ubHkgc29ydERpcmVjdGlvbiA9IHNpZ25hbDwnYXNjJyB8ICdkZXNjJz4oJ2FzYycpO1xuICByZWFkb25seSBjdXJyZW50UGFnZSA9IHNpZ25hbDxudW1iZXI+KDEpO1xuICByZWFkb25seSB2aXNpYmxlQ29sdW1ucyA9IGNvbXB1dGVkPEdyaWRDb2x1bW5EZWZpbml0aW9uW10+KCgpID0+IHtcbiAgICBjb25zdCBkZWZpbmVkID0gKHRoaXMuZ3JpZERlZmluaXRpb24oKT8uY29sdW1ucyA/PyBbXSkuZmlsdGVyKChjKSA9PiBjLnZpc2libGUgIT09IGZhbHNlKTtcbiAgICBjb25zdCByb3dzID0gdGhpcy5kYXRhKCk7XG4gICAgaWYgKHJvd3MgJiYgcm93cy5sZW5ndGggPiAwICYmIHR5cGVvZiByb3dzWzBdID09PSAnb2JqZWN0JyAmJiByb3dzWzBdICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmaXJzdFJvdyA9IHJvd3NbMF0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmlyc3RSb3cpLmZpbHRlcigoaykgPT4gay50cmltKCkubGVuZ3RoID4gMCk7XG4gICAgICBjb25zdCBtYXRjaGVzQW55ID0gZGVmaW5lZC5zb21lKChjKSA9PiBrZXlzLmluY2x1ZGVzKGMuZmllbGQpKTtcbiAgICAgIC8vIElmIG5vIGNvbHVtbnMgYXJlIGRlZmluZWQsIG9yIHRoZSBkZWZpbmVkIGNvbHVtbnMgZG9uJ3QgbWF0Y2ggYW55IGZpZWxkIGluIHRoZSBkYXRhIChlLmcuIGR1bW15IGlkL25hbWUgZGVmYXVsdHMpOlxuICAgICAgaWYgKChkZWZpbmVkLmxlbmd0aCA9PT0gMCB8fCAhbWF0Y2hlc0FueSkgJiYga2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBrZXlzLm1hcCgoaykgPT4gKHtcbiAgICAgICAgICBmaWVsZDogayxcbiAgICAgICAgICBsYWJlbDogaHVtYW5pemVJZGVudGlmaWVyKGspLFxuICAgICAgICAgIGRhdGFUeXBlOiB0eXBlb2YgZmlyc3RSb3dba10gPT09ICdudW1iZXInID8gJ251bWJlcicgOiB0eXBlb2YgZmlyc3RSb3dba10gPT09ICdib29sZWFuJyA/ICdib29sZWFuJyA6ICdzdHJpbmcnLFxuICAgICAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICAgICAgc29ydGFibGU6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRlZmluZWQ7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGJyaWRnZWRDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGlzR3JpZENoZWNrYm94ID0gdGhpcy5pc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xuICAgIGNvbnN0IGlzR3JpZEhlYWRlckNoZWNrYm94ID0gdGhpcy5pc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xuICAgIGNvbnN0IGhhc0V4cGxpY2l0Q29sQ2hlY2tib3ggPSB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5jaGVja2JveFNlbGVjdGlvbik7XG5cbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucygpLm1hcCgoY29sLCBpZHgpID0+IHtcbiAgICAgIGxldCB3aWR0aE51bTogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHR5cGVvZiBjb2wud2lkdGggPT09ICdzdHJpbmcnICYmIGNvbC53aWR0aC5lbmRzV2l0aCgncHgnKSkge1xuICAgICAgICB3aWR0aE51bSA9IHBhcnNlSW50KGNvbC53aWR0aCwgMTApO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgKGNvbC53aWR0aCBhcyB1bmtub3duKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgd2lkdGhOdW0gPSBjb2wud2lkdGggYXMgdW5rbm93biBhcyBudW1iZXI7XG4gICAgICB9XG5cbiAgICAgIGxldCBjb2xDaGVja2JveFNlbGVjdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGNvbC5jaGVja2JveFNlbGVjdGlvbjtcbiAgICAgIGxldCBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbjogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGNvbC5oZWFkZXJDaGVja2JveFNlbGVjdGlvbjtcblxuICAgICAgaWYgKCFoYXNFeHBsaWNpdENvbENoZWNrYm94ICYmIGlzR3JpZENoZWNrYm94ICYmIGlkeCA9PT0gMCAmJiBjb2wuY2hlY2tib3hTZWxlY3Rpb24gIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbENoZWNrYm94U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29sSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gPSBpc0dyaWRIZWFkZXJDaGVja2JveDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiBjb2wubGFiZWwsIC8vIEJXYXlzLWdyaWQgLyBBRyBHcmlkIHN0YW5kYXJkXG4gICAgICAgIGhlYWRlcjogY29sLmxhYmVsLFxuICAgICAgICB0aXRsZTogY29sLmxhYmVsLFxuICAgICAgICBoaWRlOiBjb2wudmlzaWJsZSA9PT0gZmFsc2UsXG4gICAgICAgIHdpZHRoOiB3aWR0aE51bSxcbiAgICAgICAgYWdnRnVuYzogY29sLmFnZ3JlZ2F0ZSAmJiBjb2wuYWdncmVnYXRlICE9PSAnbm9uZScgPyBjb2wuYWdncmVnYXRlIDogdW5kZWZpbmVkLFxuICAgICAgICBjaGVja2JveFNlbGVjdGlvbjogaXNHcmlkQ2hlY2tib3ggPyBjb2xDaGVja2JveFNlbGVjdGlvbiA6IGZhbHNlLFxuICAgICAgICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbjogaXNHcmlkSGVhZGVyQ2hlY2tib3ggPyBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbiA6IGZhbHNlLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZEluc3RhbmNlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5kYXRhU291cmNlSWQgfHwgJ2N1c3RvbSc7XG4gICAgY29uc3QgY29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMuZmllbGQpLmpvaW4oJ18nKTtcbiAgICByZXR1cm4gYCR7ZHN9XyR7Y29sc31gO1xuICB9KTtcblxuICByZWFkb25seSBncmlkU3RhdGVLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/LmRhdGFTb3VyY2VJZCB8fCAnY3VzdG9tJztcbiAgICBjb25zdCBhbGxDb2xzID0gdGhpcy52aXNpYmxlQ29sdW1ucygpLm1hcCgoYykgPT4gYy5maWVsZCk7XG4gICAgY29uc3QgY291bnQgPSBhbGxDb2xzLmxlbmd0aDtcbiAgICBjb25zdCBjb2xzU2lnID0gYWxsQ29scy5zbGljZSgwLCA1KS5qb2luKCdfJyk7XG4gICAgcmV0dXJuIGBycHRfJHtkc31fJHtjb3VudH1fJHtjb2xzU2lnIHx8ICdncmlkJ31gO1xuICB9KTtcblxuICByZWFkb25seSBncmlkQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgcm93U2VsID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBoYXNDaGVja2JveCA9IHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgICBjb25zdCBoYXNIZWFkZXJDaGVja2JveCA9IHRoaXMuaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaWRlQmFyOiBvcHRzLnNpZGVCYXIgIT09IHVuZGVmaW5lZCA/IG9wdHMuc2lkZUJhciA6IHRydWUsXG4gICAgICBzdGF0dXNCYXI6IG9wdHMuc3RhdHVzQmFyICE9PSB1bmRlZmluZWQgPyBvcHRzLnN0YXR1c0JhciA6IHRydWUsXG4gICAgICBnbG9iYWxTZWFyY2g6IG9wdHMuZ2xvYmFsU2VhcmNoICE9PSB1bmRlZmluZWQgPyBvcHRzLmdsb2JhbFNlYXJjaCA6IHRydWUsXG4gICAgICAuLi5vcHRzLFxuICAgICAgc2VsZWN0YWJsZTogdGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQoKSxcbiAgICAgIHJvd1NlbGVjdGlvbjogcm93U2VsLFxuICAgICAgc2VsZWN0aW9uTW9kZTogcm93U2VsLFxuICAgICAgY2hlY2tib3hTZWxlY3Rpb246IGhhc0NoZWNrYm94LFxuICAgICAgaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGhhc0hlYWRlckNoZWNrYm94LFxuICAgICAgc3RhdGVLZXk6IHRoaXMuZ3JpZFN0YXRlS2V5KCksXG4gICAgfTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGVDb2x1bW5Hcm91cERlZnMoXG4gICAgZ3JvdXBEZWZzOiBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgY3VycmVudENvbHVtbnM6IGFueVtdXG4gICk6IGFueVtdIHwgbnVsbCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGdyb3VwRGVmcykgfHwgZ3JvdXBEZWZzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSBuZXcgU2V0KGN1cnJlbnRDb2x1bW5zLm1hcCgoYykgPT4gYy5maWVsZCkpO1xuICAgIGNvbnN0IGxlYWZGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29sbGVjdExlYXZlcyA9IChkZWZzOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBkIG9mIGRlZnMpIHtcbiAgICAgICAgaWYgKGQgJiYgQXJyYXkuaXNBcnJheShkLmNoaWxkcmVuKSkge1xuICAgICAgICAgIGNvbGxlY3RMZWF2ZXMoZC5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoZCAmJiBkLmZpZWxkKSB7XG4gICAgICAgICAgbGVhZkZpZWxkcy5wdXNoKGQuZmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb2xsZWN0TGVhdmVzKGdyb3VwRGVmcyk7XG5cbiAgICAvLyBJZiBsZWFmIGZpZWxkcyBpbiBncm91cERlZnMgZG9uJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgYWN0aXZlIGNvbHVtbnMgKGUuZy4gZHVtbXkgaWQvbmFtZSBmcm9tIHByZXZpb3VzIHRlbXBsYXRlKSxcbiAgICAvLyBvciBpZiB0aGUgZ3JvdXAgZGVmaW5pdGlvbiBvbmx5IGhhZCBkdW1teSB0ZW1wbGF0ZSBjb2x1bW5zICg8PSAyKSB3aGlsZSBjdXJyZW50Q29sdW1ucyBpcyBhIGZ1bGwgZGF0YXNldCAoPiA1KSxcbiAgICAvLyB0aGUgc2F2ZWQgZ3JvdXBEZWZzIGlzIG9ic29sZXRlIGFuZCBtdXN0IGJlIGNsZWFyZWQgc28gdGhlIGdyaWQgY2FuIHJlbmRlciBhbGwgY3VycmVudCBjb2x1bW5zIGNsZWFubHkuXG4gICAgY29uc3QgdmFsaWRMZWF2ZXMgPSBsZWFmRmllbGRzLmZpbHRlcigoZikgPT4gY3VycmVudEZpZWxkcy5oYXMoZikpO1xuICAgIGlmICh2YWxpZExlYXZlcy5sZW5ndGggPT09IDAgfHwgKGxlYWZGaWVsZHMubGVuZ3RoIDw9IDIgJiYgY3VycmVudENvbHVtbnMubGVuZ3RoID4gNSAmJiB2YWxpZExlYXZlcy5sZW5ndGggPD0gMikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIElmIHNvbWUgY29sdW1ucyBhcmUgZ3JvdXBlZCwgYnV0IG5ldyBjb2x1bW5zIHdlcmUgYWRkZWQvZGV0ZWN0ZWQgdGhhdCBhcmVuJ3QgaW4gZ3JvdXBEZWZzLFxuICAgIC8vIGFwcGVuZCB0aGUgcmVtYWluaW5nIGNvbHVtbnMgc28gdGhhdCBVbHRyYUdyaWQncyBmbGF0dGVuQ29sdW1uRGVmcyB3aWxsIGluY2x1ZGUgQUxMIGNvbHVtbnMuXG4gICAgY29uc3QgbGVhZlNldCA9IG5ldyBTZXQobGVhZkZpZWxkcyk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSBjdXJyZW50Q29sdW1ucy5maWx0ZXIoKGMpID0+ICFsZWFmU2V0LmhhcyhjLmZpZWxkKSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbLi4uZ3JvdXBEZWZzLCAuLi5taXNzaW5nQ29sdW1uc107XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwRGVmcztcbiAgfVxuXG4gIHJlYWRvbmx5IGdyaWRSZXBvcnRTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gKG9wdHM/LnJlcG9ydFN0YXRlIGFzIGFueSkgfHwge307XG4gICAgY29uc3QgYnJpZGdlZCA9IHRoaXMuYnJpZGdlZENvbHVtbnMoKTtcbiAgICBjb25zdCBlZmZlY3RpdmVHcm91cERlZnMgPSB0aGlzLnJlY29uY2lsZUNvbHVtbkdyb3VwRGVmcyhleGlzdGluZy5jb2x1bW5Hcm91cERlZnMsIGJyaWRnZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgY29sdW1uR3JvdXBEZWZzOiBlZmZlY3RpdmVHcm91cERlZnMsXG4gICAgICBjb2x1bW5EZWZzOiBicmlkZ2VkLFxuICAgICAgc29ydE1vZGVsOiAob3B0cz8uc29ydE1vZGVsIGFzIGFueSkgfHwgZXhpc3Rpbmcuc29ydE1vZGVsIHx8IFtdLFxuICAgICAgZ3JvdXBNb2RlbDogb3B0cz8uZ3JvdXBNb2RlbCB8fCBleGlzdGluZy5ncm91cE1vZGVsIHx8IFtdLFxuICAgICAgYWN0aXZlRmlsdGVyczogZXhpc3RpbmcuYWN0aXZlRmlsdGVycyB8fCB7fSxcbiAgICAgIGNvbmRpdGlvbkZpbHRlcnM6IGV4aXN0aW5nLmNvbmRpdGlvbkZpbHRlcnMgfHwge30sXG4gICAgICBoaWdobGlnaHRSdWxlczogZXhpc3RpbmcuaGlnaGxpZ2h0UnVsZXMgfHwgW10sXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZElucHV0cyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgY29sdW1uczogdGhpcy5icmlkZ2VkQ29sdW1ucygpLFxuICAgIGNvbHVtbkRlZnM6IHRoaXMuYnJpZGdlZENvbHVtbnMoKSxcbiAgICByb3dEYXRhOiB0aGlzLmRhdGEoKSxcbiAgICBjb25maWc6IHRoaXMuZ3JpZENvbmZpZygpLFxuICAgIHJlcG9ydFN0YXRlOiB0aGlzLmdyaWRSZXBvcnRTdGF0ZSgpLFxuICAgIHBhZ2luYXRpb246IHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdpbmF0aW9uICE9PSBmYWxzZSxcbiAgICBwYWdlU2l6ZTogdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnBhZ2VTaXplID8/IDEwLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgc2hvd1Jvd051bWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dSb3dOdW1iZXJzO1xuICB9KTtcblxuICByZWFkb25seSBpc1BhZ2luYXRpb25FbmFibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnZVNpemUgPz8gMTA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNvbFNwYW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggKyAodGhpcy5zaG93Um93TnVtYmVycygpID8gMSA6IDApICsgKHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKSA/IDEgOiAwKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGFzQWdncmVnYXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dGb290ZXIgJiZcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmFnZ3JlZ2F0ZSAmJiBjLmFnZ3JlZ2F0ZSAhPT0gJ25vbmUnKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRlZERhdGEgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gKHRoaXMuZGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pIHx8IFtdO1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuc29ydENvbHVtbigpO1xuICAgIGNvbnN0IGRpciA9IHRoaXMuc29ydERpcmVjdGlvbigpO1xuXG4gICAgaWYgKCFjb2wpIHJldHVybiByYXc7XG5cbiAgICByZXR1cm4gWy4uLnJhd10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdmFsQSA9IGFbY29sXTtcbiAgICAgIGNvbnN0IHZhbEIgPSBiW2NvbF07XG4gICAgICBpZiAodmFsQSA9PSBudWxsICYmIHZhbEIgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICBpZiAodmFsQSA9PSBudWxsKSByZXR1cm4gMTtcbiAgICAgIGlmICh2YWxCID09IG51bGwpIHJldHVybiAtMTtcbiAgICAgIGlmICh2YWxBIDwgdmFsQikgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICBpZiAodmFsQSA+IHZhbEIpIHJldHVybiBkaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsUGFnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbkVuYWJsZWQoKSkgcmV0dXJuIDE7XG4gICAgY29uc3QgbGVuID0gdGhpcy5zb3J0ZWREYXRhKCkubGVuZ3RoO1xuICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmNlaWwobGVuIC8gdGhpcy5wYWdlU2l6ZSgpKSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRlZERhdGEgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigoKSA9PiB7XG4gICAgY29uc3Qgc29ydGVkID0gdGhpcy5zb3J0ZWREYXRhKCk7XG4gICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbkVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHNvcnRlZDtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSgpIC0gMSkgKiB0aGlzLnBhZ2VTaXplKCk7XG4gICAgcmV0dXJuIHNvcnRlZC5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKCkpO1xuICB9KTtcblxuICBnZXRKdXN0aWZ5Q29udGVudChhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IHN0cmluZyB7XG4gICAgaWYgKGFsaWduID09PSAncmlnaHQnKSByZXR1cm4gJ2ZsZXgtZW5kJztcbiAgICBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSByZXR1cm4gJ2NlbnRlcic7XG4gICAgcmV0dXJuICdmbGV4LXN0YXJ0JztcbiAgfVxuXG4gIHRvZ2dsZVNvcnQoY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGlmIChjb2wuc29ydGFibGUgPT09IGZhbHNlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuc29ydENvbHVtbigpID09PSBjb2wuZmllbGQpIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbi5zZXQodGhpcy5zb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4uc2V0KGNvbC5maWVsZCk7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24uc2V0KCdhc2MnKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMSk7XG4gIH1cblxuICBwcmV2UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gMSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS51cGRhdGUoKHApID0+IHAgLSAxKTtcbiAgICB9XG4gIH1cblxuICBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpIDwgdGhpcy50b3RhbFBhZ2VzKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudXBkYXRlKChwKSA9PiBwICsgMSk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VmFsdWUodmFsdWU6IHVua25vd24sIGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgaWYgKGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gU3RyaW5nKHZhbHVlKSA6IGAkJHtudW0udG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pfWA7XG4gICAgfVxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBTdHJpbmcodmFsdWUpIDogbnVtLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IFN0cmluZyh2YWx1ZSkgOiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIGNvbXB1dGVBZ2dyZWdhdGUoY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcwJztcblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnY291bnQnKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGRhdGEubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjb25zdCBudW1iZXJzID0gZGF0YVxuICAgICAgLm1hcCgocm93KSA9PiBOdW1iZXIocm93W2NvbC5maWVsZF0pKVxuICAgICAgLmZpbHRlcigobikgPT4gIWlzTmFOKG4pKTtcblxuICAgIGlmIChudW1iZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcwJztcblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnc3VtJykge1xuICAgICAgY29uc3Qgc3VtID0gbnVtYmVycy5yZWR1Y2UoKGFjYywgbikgPT4gYWNjICsgbiwgMCk7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke3N1bS50b0ZpeGVkKDIpfWAgOiBzdW0udG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ2F2ZycpIHtcbiAgICAgIGNvbnN0IGF2ZyA9IG51bWJlcnMucmVkdWNlKChhY2MsIG4pID0+IGFjYyArIG4sIDApIC8gbnVtYmVycy5sZW5ndGg7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke2F2Zy50b0ZpeGVkKDIpfWAgOiBhdmcudG9GaXhlZCgyKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ21pbicpIHtcbiAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLm51bWJlcnMpO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHttaW4udG9GaXhlZCgyKX1gIDogU3RyaW5nKG1pbik7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdtYXgnKSB7XG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5udW1iZXJzKTtcbiAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgPyBgJCR7bWF4LnRvRml4ZWQoMil9YCA6IFN0cmluZyhtYXgpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCByb3dzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IChzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSk7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KHJvd3MpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MoKS5pbmNsdWRlcyhyb3cpO1xuICB9XG5cbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wYWdpbmF0ZWREYXRhKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGRhdGEuZXZlcnkoKHIpID0+IHRoaXMuaXNSb3dTZWxlY3RlZChyKSk7XG4gIH1cblxuICBpc1BhcnRpYWxseVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb3VudCA9IGRhdGEuZmlsdGVyKChyKSA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocikpLmxlbmd0aDtcbiAgICByZXR1cm4gY291bnQgPiAwICYmIGNvdW50IDwgZGF0YS5sZW5ndGg7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICBjb25zdCBwYWdlUm93cyA9IHRoaXMucGFnaW5hdGVkRGF0YSgpO1xuICAgIGxldCBuZXh0OiBhbnlbXTtcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldChbLi4uY3VycmVudCwgLi4ucGFnZVJvd3NdKTtcbiAgICAgIG5leHQgPSBBcnJheS5mcm9tKHNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQgPSBjdXJyZW50LmZpbHRlcigocikgPT4gIXBhZ2VSb3dzLmluY2x1ZGVzKHIpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KG5leHQpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV4dCk7XG4gIH1cblxuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICBsZXQgbmV4dDogYW55W107XG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBuZXh0ID0gY2hlY2tlZCA/IFtyb3ddIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIG5leHQgPSBjdXJyZW50LmluY2x1ZGVzKHJvdykgPyBjdXJyZW50IDogWy4uLmN1cnJlbnQsIHJvd107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5maWx0ZXIoKHIpID0+IHIgIT09IHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dDbGljayhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpO1xuICAgICAgbGV0IG5leHQ6IGFueVtdO1xuICAgICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIG5leHQgPSBbcm93XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQgPSBjdXJyZW50LmluY2x1ZGVzKHJvdykgPyBjdXJyZW50LmZpbHRlcigocikgPT4gciAhPT0gcm93KSA6IFsuLi5jdXJyZW50LCByb3ddO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KG5leHQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUm93Q2xpY2tBY3Rpb24oKSkge1xuICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBldmVudCB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNlbGxDbGljayhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb2w6IEdyaWRDb2x1bW5EZWZpbml0aW9uLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChjb2wuYWN0aW9uKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgY29sdW1uOiBjb2wsIGV2ZW50IH0pO1xuICAgIH1cbiAgfVxufVxuIl19