@ng-matero/extensions 16.2.0 → 16.3.0

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 (63) hide show
  1. package/column-resize/column-resize-notifier.d.ts +1 -1
  2. package/column-resize/polyfill.d.ts +1 -3
  3. package/column-resize/resizable.d.ts +1 -0
  4. package/column-resize/resize-strategy.d.ts +4 -3
  5. package/core/tokens/m2/mtx/_grid.scss +5 -1
  6. package/esm2022/column-resize/column-resize-directives/column-resize-flex.mjs +3 -9
  7. package/esm2022/column-resize/column-resize-directives/column-resize.mjs +3 -9
  8. package/esm2022/column-resize/column-resize-directives/constants.mjs +1 -1
  9. package/esm2022/column-resize/column-resize-notifier.mjs +7 -2
  10. package/esm2022/column-resize/column-resize.mjs +3 -3
  11. package/esm2022/column-resize/event-dispatcher.mjs +5 -2
  12. package/esm2022/column-resize/polyfill.mjs +3 -19
  13. package/esm2022/column-resize/resizable.mjs +7 -7
  14. package/esm2022/column-resize/resize-ref.mjs +1 -1
  15. package/esm2022/column-resize/resize-strategy.mjs +16 -10
  16. package/esm2022/grid/cell.mjs +5 -6
  17. package/esm2022/grid/column-resize/column-resize-directives/common.mjs +1 -8
  18. package/esm2022/grid/column-resize/overlay-handle.mjs +11 -6
  19. package/esm2022/grid/column-resize/resizable-directives/common.mjs +1 -1
  20. package/esm2022/grid/column-resize/resizable-directives/resizable.mjs +3 -2
  21. package/esm2022/grid/column-resize/resize-strategy.mjs +10 -5
  22. package/esm2022/grid/grid-module.mjs +1 -6
  23. package/esm2022/grid/grid-utils.mjs +1 -11
  24. package/esm2022/grid/grid.mjs +11 -4
  25. package/esm2022/grid/public-api.mjs +1 -2
  26. package/esm2022/photoviewer/mtxPhotoviewer.mjs +5 -0
  27. package/esm2022/photoviewer/photoviewer-module.mjs +17 -0
  28. package/esm2022/photoviewer/photoviewer.mjs +63 -0
  29. package/esm2022/photoviewer/public-api.mjs +3 -0
  30. package/esm2022/popover/popover-interfaces.mjs +1 -1
  31. package/esm2022/popover/popover.mjs +13 -3
  32. package/fesm2022/mtxColumnResize.mjs +38 -52
  33. package/fesm2022/mtxColumnResize.mjs.map +1 -1
  34. package/fesm2022/mtxGrid.mjs +33 -83
  35. package/fesm2022/mtxGrid.mjs.map +1 -1
  36. package/fesm2022/mtxPhotoviewer.mjs +84 -0
  37. package/fesm2022/mtxPhotoviewer.mjs.map +1 -0
  38. package/fesm2022/mtxPopover.mjs +12 -2
  39. package/fesm2022/mtxPopover.mjs.map +1 -1
  40. package/grid/_grid-theme.scss +0 -2
  41. package/grid/cell.scss +0 -1
  42. package/grid/column-resize/_column-resize.scss +88 -94
  43. package/grid/column-resize/column-resize-directives/common.d.ts +0 -7
  44. package/grid/column-resize/overlay-handle.d.ts +1 -0
  45. package/grid/column-resize/resize-strategy.d.ts +2 -2
  46. package/grid/grid-module.d.ts +21 -22
  47. package/grid/grid-utils.d.ts +0 -6
  48. package/grid/grid.d.ts +4 -1
  49. package/grid/public-api.d.ts +0 -1
  50. package/package.json +34 -28
  51. package/photoviewer/index.d.ts +5 -0
  52. package/photoviewer/photoviewer-module.d.ts +7 -0
  53. package/photoviewer/photoviewer.d.ts +17 -0
  54. package/photoviewer/public-api.d.ts +2 -0
  55. package/popover/popover-interfaces.d.ts +1 -0
  56. package/popover/popover.d.ts +6 -1
  57. package/popover/popover.scss +4 -0
  58. package/prebuilt-themes/deeppurple-amber.css +1 -1
  59. package/prebuilt-themes/indigo-pink.css +1 -1
  60. package/prebuilt-themes/pink-bluegrey.css +1 -1
  61. package/prebuilt-themes/purple-green.css +1 -1
  62. package/esm2022/grid/image-preview.mjs +0 -50
  63. package/grid/image-preview.d.ts +0 -13
@@ -5,7 +5,7 @@
5
5
  * Use of this source code is governed by an MIT-style license that can be
6
6
  * found in the LICENSE file at https://angular.io/license
7
7
  */
8
- import { Inject, Injectable } from '@angular/core';
8
+ import { Inject, Injectable, CSP_NONCE, Optional } from '@angular/core';
9
9
  import { DOCUMENT } from '@angular/common';
10
10
  import { coerceCssPixelValue } from '@angular/cdk/coercion';
11
11
  import { _COALESCED_STYLE_SCHEDULER } from '@angular/cdk/table';
@@ -42,7 +42,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
42
42
  type: Injectable
43
43
  }] });
44
44
  /**
45
- * The optimially performing resize strategy for <table> elements with table-layout: fixed.
45
+ * The optimally performing resize strategy for <table> elements with table-layout: fixed.
46
46
  * Tested against and outperformed:
47
47
  * CSS selector
48
48
  * CSS selector w/ CSS variable
@@ -91,11 +91,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
91
91
  * Updating all mat-cell nodes
92
92
  */
93
93
  export class CdkFlexTableResizeStrategy extends ResizeStrategy {
94
- constructor(columnResize, styleScheduler, table, document) {
94
+ constructor(columnResize, styleScheduler, table, document, _nonce) {
95
95
  super();
96
96
  this.columnResize = columnResize;
97
97
  this.styleScheduler = styleScheduler;
98
98
  this.table = table;
99
+ this._nonce = _nonce;
99
100
  this._columnIndexes = new Map();
100
101
  this._columnProperties = new Map();
101
102
  this._indexSequence = 0;
@@ -130,11 +131,8 @@ export class CdkFlexTableResizeStrategy extends ResizeStrategy {
130
131
  return `cdk-column-${cssFriendlyColumnName}`;
131
132
  }
132
133
  ngOnDestroy() {
133
- // TODO: Use remove() once we're off IE11.
134
- if (this._styleElement && this._styleElement.parentNode) {
135
- this._styleElement.parentNode.removeChild(this._styleElement);
136
- this._styleElement = undefined;
137
- }
134
+ this._styleElement?.remove();
135
+ this._styleElement = undefined;
138
136
  }
139
137
  _getPropertyValue(cssFriendlyColumnName, key) {
140
138
  const properties = this._getColumnPropertiesMap(cssFriendlyColumnName);
@@ -158,6 +156,9 @@ export class CdkFlexTableResizeStrategy extends ResizeStrategy {
158
156
  _getStyleSheet() {
159
157
  if (!this._styleElement) {
160
158
  this._styleElement = this._document.createElement('style');
159
+ if (this._nonce) {
160
+ this._styleElement.nonce = this._nonce;
161
+ }
161
162
  this._styleElement.appendChild(this._document.createTextNode(''));
162
163
  this._document.head.appendChild(this._styleElement);
163
164
  }
@@ -192,7 +193,7 @@ export class CdkFlexTableResizeStrategy extends ResizeStrategy {
192
193
  const body = propertyKeys.map(key => `${key}:${properties.get(key)}`).join(';');
193
194
  this._getStyleSheet().insertRule(`${selector} {${body}}`, index);
194
195
  }
195
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CdkFlexTableResizeStrategy, deps: [{ token: i1.ColumnResize }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i2.CdkTable }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
196
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CdkFlexTableResizeStrategy, deps: [{ token: i1.ColumnResize }, { token: _COALESCED_STYLE_SCHEDULER }, { token: i2.CdkTable }, { token: DOCUMENT }, { token: CSP_NONCE, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
196
197
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CdkFlexTableResizeStrategy }); }
197
198
  }
198
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: CdkFlexTableResizeStrategy, decorators: [{
@@ -203,6 +204,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
203
204
  }] }, { type: i2.CdkTable }, { type: undefined, decorators: [{
204
205
  type: Inject,
205
206
  args: [DOCUMENT]
207
+ }] }, { type: undefined, decorators: [{
208
+ type: Inject,
209
+ args: [CSP_NONCE]
210
+ }, {
211
+ type: Optional
206
212
  }] }]; } });
207
213
  /** Converts CSS pixel values to numbers, eg "123px" to 123. Returns NaN for non pixel values. */
208
214
  function coercePixelsFromCssValue(cssValue) {
@@ -229,4 +235,4 @@ export const FLEX_RESIZE_STRATEGY_PROVIDER = {
229
235
  provide: ResizeStrategy,
230
236
  useClass: CdkFlexTableResizeStrategy,
231
237
  };
232
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9jb2x1bW4tcmVzaXplL3Jlc2l6ZS1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVELE9BQU8sRUFBc0MsMEJBQTBCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7OztBQUlwRzs7O0dBR0c7QUFFSCxNQUFNLE9BQWdCLGNBQWM7SUFEcEM7UUFNVSx3QkFBbUIsR0FBa0IsSUFBSSxDQUFDO0tBMkNuRDtJQW5CQyxxRUFBcUU7SUFDM0QsZ0NBQWdDLENBQUMsS0FBYTtRQUN0RCxJQUFJLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxJQUFJLEVBQUU7WUFDckMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO1lBQ2hFLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVqRCxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hDLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW9CLENBQUMsQ0FBQztnQkFFdkYsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsRUFBRSxD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LE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQztBQUM5RSxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyx5QkFBeUIsQ0FBQyxTQUE2QjtJQUM5RCxPQUFPLE1BQU0sQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSwyQ0FBMkMsR0FBYTtJQUNuRSxPQUFPLEVBQUUsY0FBYztJQUN2QixRQUFRLEVBQUUsOEJBQThCO0NBQ3pDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBYTtJQUNyRCxPQUFPLEVBQUUsY0FBYztJQUN2QixRQUFRLEVBQUUsMEJBQTBCO0NBQ3JDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIFByb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjb2VyY2VDc3NQaXhlbFZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IENka1RhYmxlLCBfQ29hbGVzY2VkU3R5bGVTY2hlZHVsZXIsIF9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RhYmxlJztcblxuaW1wb3J0IHsgQ29sdW1uUmVzaXplIH0gZnJvbSAnLi9jb2x1bW4tcmVzaXplJztcblxuLyoqXG4gKiBQcm92aWRlcyBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgcmVzaXppbmcgYSBjb2x1bW4uXG4gKiBUaGUgZGV0YWlscyBvZiBob3cgcmVzaXppbmcgd29ya3MgZm9yIHRhYmxlcyBmb3IgZmxleCBtYXQtdGFibGVzIGFyZSBxdWl0ZSBkaWZmZXJlbnQuXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXNpemVTdHJhdGVneSB7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSBjb2x1bW5SZXNpemU6IENvbHVtblJlc2l6ZTtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IHN0eWxlU2NoZWR1bGVyOiBfQ29hbGVzY2VkU3R5bGVTY2hlZHVsZXI7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCByZWFkb25seSB0YWJsZTogQ2RrVGFibGU8dW5rbm93bj47XG5cbiAgcHJpdmF0ZSBfcGVuZGluZ1Jlc2l6ZURlbHRhOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKiogVXBkYXRlcyB0aGUgd2lkdGggb2YgdGhlIHNwZWNpZmllZCBjb2x1bW4uICovXG4gIGFic3RyYWN0IGFwcGx5Q29sdW1uU2l6ZShcbiAgICBjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5IZWFkZXI6IEhUTUxFbGVtZW50LFxuICAgIHNpemVJblB4OiBudW1iZXIsXG4gICAgcHJldmlvdXNTaXplSW5QeD86IG51bWJlclxuICApOiB2b2lkO1xuXG4gIC8qKiBBcHBsaWVzIGEgbWluaW11bSB3aWR0aCB0byB0aGUgc3BlY2lmaWVkIGNvbHVtbiwgdXBkYXRpbmcgaXRzIGN1cnJlbnQgd2lkdGggYXMgbmVlZGVkLiAqL1xuICBhYnN0cmFjdCBhcHBseU1pbkNvbHVtblNpemUoXG4gICAgY3NzRnJpZW5kbHlDb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uSGVhZGVyOiBIVE1MRWxlbWVudCxcbiAgICBtaW5TaXplSW5QeDogbnVtYmVyXG4gICk6IHZvaWQ7XG5cbiAgLyoqIEFwcGxpZXMgYSBtYXhpbXVtIHdpZHRoIHRvIHRoZSBzcGVjaWZpZWQgY29sdW1uLCB1cGRhdGluZyBpdHMgY3VycmVudCB3aWR0aCBhcyBuZWVkZWQuICovXG4gIGFic3RyYWN0IGFwcGx5TWF4Q29sdW1uU2l6ZShcbiAgICBjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5IZWFkZXI6IEhUTUxFbGVtZW50LFxuICAgIG1pblNpemVJblB4OiBudW1iZXJcbiAgKTogdm9pZDtcblxuICAvKiogQWRqdXN0cyB0aGUgd2lkdGggb2YgdGhlIHRhYmxlIGVsZW1lbnQgYnkgdGhlIHNwZWNpZmllZCBkZWx0YS4gKi9cbiAgcHJvdGVjdGVkIHVwZGF0ZVRhYmxlV2lkdGhBbmRTdGlja3lDb2x1bW5zKGRlbHRhOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGVuZGluZ1Jlc2l6ZURlbHRhID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLmNvbHVtblJlc2l6ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICBjb25zdCB0YWJsZVdpZHRoID0gZ2V0RWxlbWVudFdpZHRoKHRhYmxlRWxlbWVudCk7XG5cbiAgICAgIHRoaXMuc3R5bGVTY2hlZHVsZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgICB0YWJsZUVsZW1lbnQuc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHRhYmxlV2lkdGggKyB0aGlzLl9wZW5kaW5nUmVzaXplRGVsdGEhKTtcblxuICAgICAgICB0aGlzLl9wZW5kaW5nUmVzaXplRGVsdGEgPSBudWxsO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3R5bGVTY2hlZHVsZXIuc2NoZWR1bGVFbmQoKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYmxlLnVwZGF0ZVN0aWNreUNvbHVtblN0eWxlcygpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGVuZGluZ1Jlc2l6ZURlbHRhID0gKHRoaXMuX3BlbmRpbmdSZXNpemVEZWx0YSA/PyAwKSArIGRlbHRhO1xuICB9XG59XG5cbi8qKlxuICogVGhlIG9wdGltaWFsbHkgcGVyZm9ybWluZyByZXNpemUgc3RyYXRlZ3kgZm9yICZsdDt0YWJsZSZndDsgZWxlbWVudHMgd2l0aCB0YWJsZS1sYXlvdXQ6IGZpeGVkLlxuICogVGVzdGVkIGFnYWluc3QgYW5kIG91dHBlcmZvcm1lZDpcbiAqICAgQ1NTIHNlbGVjdG9yXG4gKiAgIENTUyBzZWxlY3RvciB3LyBDU1MgdmFyaWFibGVcbiAqICAgVXBkYXRpbmcgYWxsIGNlbGwgbm9kZXNcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRhYmxlTGF5b3V0Rml4ZWRSZXNpemVTdHJhdGVneSBleHRlbmRzIFJlc2l6ZVN0cmF0ZWd5IHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbHVtblJlc2l6ZTogQ29sdW1uUmVzaXplLFxuICAgIEBJbmplY3QoX0NPQUxFU0NFRF9TVFlMRV9TQ0hFRFVMRVIpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0eWxlU2NoZWR1bGVyOiBfQ29hbGVzY2VkU3R5bGVTY2hlZHVsZXIsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYmxlOiBDZGtUYWJsZTx1bmtub3duPlxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgYXBwbHlDb2x1bW5TaXplKFxuICAgIF86IHN0cmluZyxcbiAgICBjb2x1bW5IZWFkZXI6IEhUTUxFbGVtZW50LFxuICAgIHNpemVJblB4OiBudW1iZXIsXG4gICAgcHJldmlvdXNTaXplSW5QeD86IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBjb25zdCBkZWx0YSA9IHNpemVJblB4IC0gKHByZXZpb3VzU2l6ZUluUHggPz8gZ2V0RWxlbWVudFdpZHRoKGNvbHVtbkhlYWRlcikpO1xuXG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdHlsZVNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICBjb2x1bW5IZWFkZXIuc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHNpemVJblB4KTtcbiAgICB9KTtcblxuICAgIHRoaXMudXBkYXRlVGFibGVXaWR0aEFuZFN0aWNreUNvbHVtbnMoZGVsdGEpO1xuICB9XG5cbiAgYXBwbHlNaW5Db2x1bW5TaXplKF86IHN0cmluZywgY29sdW1uSGVhZGVyOiBIVE1MRWxlbWVudCwgc2l6ZUluUHg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGdldEVsZW1lbnRXaWR0aChjb2x1bW5IZWFkZXIpO1xuICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgoY3VycmVudFdpZHRoLCBzaXplSW5QeCk7XG5cbiAgICB0aGlzLmFwcGx5Q29sdW1uU2l6ZShfLCBjb2x1bW5IZWFkZXIsIG5ld1dpZHRoLCBjdXJyZW50V2lkdGgpO1xuICB9XG5cbiAgYXBwbHlNYXhDb2x1bW5TaXplKF86IHN0cmluZywgY29sdW1uSGVhZGVyOiBIVE1MRWxlbWVudCwgc2l6ZUluUHg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGdldEVsZW1lbnRXaWR0aChjb2x1bW5IZWFkZXIpO1xuICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5taW4oY3VycmVudFdpZHRoLCBzaXplSW5QeCk7XG5cbiAgICB0aGlzLmFwcGx5Q29sdW1uU2l6ZShfLCBjb2x1bW5IZWFkZXIsIG5ld1dpZHRoLCBjdXJyZW50V2lkdGgpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIG9wdGltYWxseSBwZXJmb3JtaW5nIHJlc2l6ZSBzdHJhdGVneSBmb3IgZmxleCBtYXQtdGFibGVzLlxuICogVGVzdGVkIGFnYWluc3QgYW5kIG91dHBlcmZvcm1lZDpcbiAqICAgQ1NTIHNlbGVjdG9yIHcvIENTUyB2YXJpYWJsZVxuICogICBVcGRhdGluZyBhbGwgbWF0LWNlbGwgbm9kZXNcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENka0ZsZXhUYWJsZVJlc2l6ZVN0cmF0ZWd5IGV4dGVuZHMgUmVzaXplU3RyYXRlZ3kgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudDogRG9jdW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbkluZGV4ZXMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5Qcm9wZXJ0aWVzID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIHN0cmluZz4+KCk7XG5cbiAgcHJpdmF0ZSBfc3R5bGVFbGVtZW50PzogSFRNTFN0eWxlRWxlbWVudDtcbiAgcHJpdmF0ZSBfaW5kZXhTZXF1ZW5jZSA9IDA7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRNaW5TaXplID0gMDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRNYXhTaXplID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbHVtblJlc2l6ZTogQ29sdW1uUmVzaXplLFxuICAgIEBJbmplY3QoX0NPQUxFU0NFRF9TVFlMRV9TQ0hFRFVMRVIpXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN0eWxlU2NoZWR1bGVyOiBfQ29hbGVzY2VkU3R5bGVTY2hlZHVsZXIsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRhYmxlOiBDZGtUYWJsZTx1bmtub3duPixcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBkb2N1bWVudDogYW55XG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgfVxuXG4gIGFwcGx5Q29sdW1uU2l6ZShcbiAgICBjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5IZWFkZXI6IEhUTUxFbGVtZW50LFxuICAgIHNpemVJblB4OiBudW1iZXIsXG4gICAgcHJldmlvdXNTaXplSW5QeD86IG51bWJlclxuICApOiB2b2lkIHtcbiAgICAvLyBPcHRpbWl6YXRpb246IENoZWNrIGFwcGxpZWQgd2lkdGggZmlyc3QgYXMgd2UgcHJvYmFibHkgc2V0IGl0IGFscmVhZHkgYmVmb3JlIHJlYWRpbmdcbiAgICAvLyBvZmZzZXRXaWR0aCB3aGljaCB0cmlnZ2VycyBsYXlvdXQuXG4gICAgY29uc3QgZGVsdGEgPVxuICAgICAgc2l6ZUluUHggLVxuICAgICAgKHByZXZpb3VzU2l6ZUluUHggPz9cbiAgICAgICAgKHRoaXMuX2dldEFwcGxpZWRXaWR0aChjc3NGcmllbmRseUNvbHVtbk5hbWUpIHx8IGNvbHVtbkhlYWRlci5vZmZzZXRXaWR0aCkpO1xuXG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3NzU2l6ZSA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoc2l6ZUluUHgpO1xuXG4gICAgdGhpcy5fYXBwbHlQcm9wZXJ0eShjc3NGcmllbmRseUNvbHVtbk5hbWUsICdmbGV4JywgYDAgMC4wMSAke2Nzc1NpemV9YCk7XG4gICAgdGhpcy51cGRhdGVUYWJsZVdpZHRoQW5kU3RpY2t5Q29sdW1ucyhkZWx0YSk7XG4gIH1cblxuICBhcHBseU1pbkNvbHVtblNpemUoY3NzRnJpZW5kbHlDb2x1bW5OYW1lOiBzdHJpbmcsIF86IEhUTUxFbGVtZW50LCBzaXplSW5QeDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3NzU2l6ZSA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoc2l6ZUluUHgpO1xuXG4gICAgdGhpcy5fYXBwbHlQcm9wZXJ0eShcbiAgICAgIGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSxcbiAgICAgICdtaW4td2lkdGgnLFxuICAgICAgY3NzU2l6ZSxcbiAgICAgIHNpemVJblB4ICE9PSB0aGlzLmRlZmF1bHRNaW5TaXplXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlV2lkdGhBbmRTdGlja3lDb2x1bW5zKDApO1xuICB9XG5cbiAgYXBwbHlNYXhDb2x1bW5TaXplKGNzc0ZyaWVuZGx5Q29sdW1uTmFtZTogc3RyaW5nLCBfOiBIVE1MRWxlbWVudCwgc2l6ZUluUHg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNzc1NpemUgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHNpemVJblB4KTtcblxuICAgIHRoaXMuX2FwcGx5UHJvcGVydHkoXG4gICAgICBjc3NGcmllbmRseUNvbHVtbk5hbWUsXG4gICAgICAnbWF4LXdpZHRoJyxcbiAgICAgIGNzc1NpemUsXG4gICAgICBzaXplSW5QeCAhPT0gdGhpcy5kZWZhdWx0TWF4U2l6ZVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVUYWJsZVdpZHRoQW5kU3RpY2t5Q29sdW1ucygwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb2x1bW5Dc3NDbGFzcyhjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjZGstY29sdW1uLSR7Y3NzRnJpZW5kbHlDb2x1bW5OYW1lfWA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBUT0RPOiBVc2UgcmVtb3ZlKCkgb25jZSB3ZSdyZSBvZmYgSUUxMS5cbiAgICBpZiAodGhpcy5fc3R5bGVFbGVtZW50ICYmIHRoaXMuX3N0eWxlRWxlbWVudC5wYXJlbnROb2RlKSB7XG4gICAgICB0aGlzLl9zdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLl9zdHlsZUVsZW1lbnQpO1xuICAgICAgdGhpcy5fc3R5bGVFbGVtZW50ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFByb3BlcnR5VmFsdWUoY3NzRnJpZW5kbHlDb2x1bW5OYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fZ2V0Q29sdW1uUHJvcGVydGllc01hcChjc3NGcmllbmRseUNvbHVtbk5hbWUpO1xuICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldChrZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QXBwbGllZFdpZHRoKGNzc0ZyaWVuZHNseUNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNvZXJjZVBpeGVsc0Zyb21GbGV4VmFsdWUodGhpcy5fZ2V0UHJvcGVydHlWYWx1ZShjc3NGcmllbmRzbHlDb2x1bW5OYW1lLCAnZmxleCcpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5UHJvcGVydHkoXG4gICAgY3NzRnJpZW5kbHlDb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBlbmFibGUgPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9nZXRDb2x1bW5Qcm9wZXJ0aWVzTWFwKGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSk7XG5cbiAgICB0aGlzLnN0eWxlU2NoZWR1bGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGlmIChlbmFibGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYXBwbHlTaXplQ3NzKGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRTdHlsZVNoZWV0KCk6IENTU1N0eWxlU2hlZXQge1xuICAgIGlmICghdGhpcy5fc3R5bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLl9zdHlsZUVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgdGhpcy5fc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuX2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gICAgICB0aGlzLl9kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHRoaXMuX3N0eWxlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N0eWxlRWxlbWVudC5zaGVldCBhcyBDU1NTdHlsZVNoZWV0O1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29sdW1uUHJvcGVydGllc01hcChjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGxldCBwcm9wZXJ0aWVzID0gdGhpcy5fY29sdW1uUHJvcGVydGllcy5nZXQoY3NzRnJpZW5kbHlDb2x1bW5OYW1lKTtcbiAgICBpZiAocHJvcGVydGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9wZXJ0aWVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAgIHRoaXMuX2NvbHVtblByb3BlcnRpZXMuc2V0KGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSwgcHJvcGVydGllcyk7XG4gICAgfVxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlTaXplQ3NzKGNzc0ZyaWVuZGx5Q29sdW1uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuX2dldENvbHVtblByb3BlcnRpZXNNYXAoY3NzRnJpZW5kbHlDb2x1bW5OYW1lKTtcbiAgICBjb25zdCBwcm9wZXJ0eUtleXMgPSBBcnJheS5mcm9tKHByb3BlcnRpZXMua2V5cygpKTtcblxuICAgIGxldCBpbmRleCA9IHRoaXMuX2NvbHVtbkluZGV4ZXMuZ2V0KGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSk7XG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghcHJvcGVydHlLZXlzLmxlbmd0aCkge1xuICAgICAgICAvLyBOb3RoaW5nIHRvIHNldCBvciB1bnNldC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpbmRleCA9IHRoaXMuX2luZGV4U2VxdWVuY2UrKztcbiAgICAgIHRoaXMuX2NvbHVtbkluZGV4ZXMuc2V0KGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSwgaW5kZXgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9nZXRTdHlsZVNoZWV0KCkuZGVsZXRlUnVsZShpbmRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uQ2xhc3NOYW1lID0gdGhpcy5nZXRDb2x1bW5Dc3NDbGFzcyhjc3NGcmllbmRseUNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IHRhYmxlQ2xhc3NOYW1lID0gdGhpcy5jb2x1bW5SZXNpemUuZ2V0VW5pcXVlQ3NzQ2xhc3MoKTtcblxuICAgIGNvbnN0IHNlbGVjdG9yID0gYC4ke3RhYmxlQ2xhc3NOYW1lfSAuJHtjb2x1bW5DbGFzc05hbWV9YDtcbiAgICBjb25zdCBib2R5ID0gcHJvcGVydHlLZXlzLm1hcChrZXkgPT4gYCR7a2V5fToke3Byb3BlcnRpZXMuZ2V0KGtleSl9YCkuam9pbignOycpO1xuXG4gICAgdGhpcy5fZ2V0U3R5bGVTaGVldCgpLmluc2VydFJ1bGUoYCR7c2VsZWN0b3J9IHske2JvZHl9fWAsIGluZGV4KTtcbiAgfVxufVxuXG4vKiogQ29udmVydHMgQ1NTIHBpeGVsIHZhbHVlcyB0byBudW1iZXJzLCBlZyBcIjEyM3B4XCIgdG8gMTIzLiBSZXR1cm5zIE5hTiBmb3Igbm9uIHBpeGVsIHZhbHVlcy4gKi9cbmZ1bmN0aW9uIGNvZXJjZVBpeGVsc0Zyb21Dc3NWYWx1ZShjc3NWYWx1ZTogc3RyaW5nKTogbnVtYmVyIHtcbiAgcmV0dXJuIE51bWJlcihjc3NWYWx1ZS5tYXRjaCgvKFxcZCspcHgvKT8uWzFdKTtcbn1cblxuLyoqIEdldHMgdGhlIHN0eWxlLndpZHRoIHBpeGVscyBvbiB0aGUgc3BlY2lmaWVkIGVsZW1lbnQgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGl0cyBvZmZzZXRXaWR0aC4gKi9cbmZ1bmN0aW9uIGdldEVsZW1lbnRXaWR0aChlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAvLyBPcHRpbWl6YXRpb246IENoZWNrIHN0eWxlLndpZHRoIGZpcnN0IGFzIHdlIHByb2JhYmx5IHNldCBpdCBhbHJlYWR5IGJlZm9yZSByZWFkaW5nXG4gIC8vIG9mZnNldFdpZHRoIHdoaWNoIHRyaWdnZXJzIGxheW91dC5cbiAgcmV0dXJuIGNvZXJjZVBpeGVsc0Zyb21Dc3NWYWx1ZShlbGVtZW50LnN0eWxlLndpZHRoKSB8fCBlbGVtZW50Lm9mZnNldFdpZHRoO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIENTUyBmbGV4IHZhbHVlcyBhcyBzZXQgaW4gQ2RrRmxleFRhYmxlUmVzaXplU3RyYXRlZ3kgdG8gbnVtYmVycyxcbiAqIGVnIFwiMCAwLjAxIDEyM3B4XCIgdG8gMTIzLlxuICovXG5mdW5jdGlvbiBjb2VyY2VQaXhlbHNGcm9tRmxleFZhbHVlKGZsZXhWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgcmV0dXJuIE51bWJlcihmbGV4VmFsdWU/Lm1hdGNoKC8wIDBcXC4wMSAoXFxkKylweC8pPy5bMV0pO1xufVxuXG5leHBvcnQgY29uc3QgVEFCTEVfTEFZT1VUX0ZJWEVEX1JFU0laRV9TVFJBVEVHWV9QUk9WSURFUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IFJlc2l6ZVN0cmF0ZWd5LFxuICB1c2VDbGFzczogVGFibGVMYXlvdXRGaXhlZFJlc2l6ZVN0cmF0ZWd5LFxufTtcbmV4cG9ydCBjb25zdCBGTEVYX1JFU0laRV9TVFJBVEVHWV9QUk9WSURFUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IFJlc2l6ZVN0cmF0ZWd5LFxuICB1c2VDbGFzczogQ2RrRmxleFRhYmxlUmVzaXplU3RyYXRlZ3ksXG59O1xuIl19
238
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLXN0cmF0ZWd5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9jb2x1bW4tcmVzaXplL3Jlc2l6ZS1zdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBdUIsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUQsT0FBTyxFQUFzQywwQkFBMEIsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7O0FBSXBHOzs7R0FHRztBQUVILE1BQU0sT0FBZ0IsY0FBYztJQURwQztRQU1VLHdCQUFtQixHQUFrQixJQUFJLENBQUM7S0EyQ25EO0lBbkJDLHFFQUFxRTtJQUMzRCxnQ0FBZ0MsQ0FBQyxLQUFhO1FBQ3RELElBQUksSUFBSSxDQUFDLG1CQUFtQixLQUFLLElBQUksRUFBRTtZQUNyQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7WUFDaEUsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBRWpELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRTtnQkFDaEMsWUFBWSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBb0IsQ0FBQyxDQUFDO2dCQUV2RixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFO2dCQUNuQyxJQUFJLENBQUMsS0FB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QUVELGtHQUFrRztBQUNsRyxTQUFTLGVBQWUsQ0FBQyxPQUFvQjtJQUMzQyxxRkFBcUY7SUFDckYscUNBQXFDO0lBQ3JDLE9BQU8sd0JBQXdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxDQUFDO0FBQzlFLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHlCQUF5QixDQUFDLFNBQTZCO0lBQzlELE9BQU8sTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDJDQUEyQyxHQUFhO0lBQ25FLE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLFFBQVEsRUFBRSw4QkFBOEI7Q0FDekMsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFhO0lBQ3JELE9BQU8sRUFBRSxjQUFjO0lBQ3ZCLFFBQVEsRUFBRSwwQkFBMEI7Q0FDckMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSwgUHJvdmlkZXIsIENTUF9OT05DRSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2RrVGFibGUsIF9Db2FsZXNjZWRTdHlsZVNjaGVkdWxlciwgX0NPQUxFU0NFRF9TVFlMRV9TQ0hFRFVMRVIgfSBmcm9tICdAYW5ndWxhci9jZGsvdGFibGUnO1xuXG5pbXBvcnQgeyBDb2x1bW5SZXNpemUgfSBmcm9tICcuL2NvbHVtbi1yZXNpemUnO1xuXG4vKipcbiAqIFByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIGZvciByZXNpemluZyBhIGNvbHVtbi5cbiAqIFRoZSBkZXRhaWxzIG9mIGhvdyByZXNpemluZyB3b3JrcyBmb3IgdGFibGVzIGZvciBmbGV4IG1hdC10YWJsZXMgYXJlIHF1aXRlIGRpZmZlcmVudC5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlc2l6ZVN0cmF0ZWd5IHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IGNvbHVtblJlc2l6ZTogQ29sdW1uUmVzaXplO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVhZG9ubHkgc3R5bGVTY2hlZHVsZXI6IF9Db2FsZXNjZWRTdHlsZVNjaGVkdWxlcjtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYWRvbmx5IHRhYmxlOiBDZGtUYWJsZTx1bmtub3duPjtcblxuICBwcml2YXRlIF9wZW5kaW5nUmVzaXplRGVsdGE6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBVcGRhdGVzIHRoZSB3aWR0aCBvZiB0aGUgc3BlY2lmaWVkIGNvbHVtbi4gKi9cbiAgYWJzdHJhY3QgYXBwbHlDb2x1bW5TaXplKFxuICAgIGNzc0ZyaWVuZGx5Q29sdW1uTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbkhlYWRlcjogSFRNTEVsZW1lbnQsXG4gICAgc2l6ZUluUHg6IG51bWJlcixcbiAgICBwcmV2aW91c1NpemVJblB4PzogbnVtYmVyXG4gICk6IHZvaWQ7XG5cbiAgLyoqIEFwcGxpZXMgYSBtaW5pbXVtIHdpZHRoIHRvIHRoZSBzcGVjaWZpZWQgY29sdW1uLCB1cGRhdGluZyBpdHMgY3VycmVudCB3aWR0aCBhcyBuZWVkZWQuICovXG4gIGFic3RyYWN0IGFwcGx5TWluQ29sdW1uU2l6ZShcbiAgICBjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5IZWFkZXI6IEhUTUxFbGVtZW50LFxuICAgIG1pblNpemVJblB4OiBudW1iZXJcbiAgKTogdm9pZDtcblxuICAvKiogQXBwbGllcyBhIG1heGltdW0gd2lkdGggdG8gdGhlIHNwZWNpZmllZCBjb2x1bW4sIHVwZGF0aW5nIGl0cyBjdXJyZW50IHdpZHRoIGFzIG5lZWRlZC4gKi9cbiAgYWJzdHJhY3QgYXBwbHlNYXhDb2x1bW5TaXplKFxuICAgIGNzc0ZyaWVuZGx5Q29sdW1uTmFtZTogc3RyaW5nLFxuICAgIGNvbHVtbkhlYWRlcjogSFRNTEVsZW1lbnQsXG4gICAgbWluU2l6ZUluUHg6IG51bWJlclxuICApOiB2b2lkO1xuXG4gIC8qKiBBZGp1c3RzIHRoZSB3aWR0aCBvZiB0aGUgdGFibGUgZWxlbWVudCBieSB0aGUgc3BlY2lmaWVkIGRlbHRhLiAqL1xuICBwcm90ZWN0ZWQgdXBkYXRlVGFibGVXaWR0aEFuZFN0aWNreUNvbHVtbnMoZGVsdGE6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wZW5kaW5nUmVzaXplRGVsdGEgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRhYmxlRWxlbWVudCA9IHRoaXMuY29sdW1uUmVzaXplLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgIGNvbnN0IHRhYmxlV2lkdGggPSBnZXRFbGVtZW50V2lkdGgodGFibGVFbGVtZW50KTtcblxuICAgICAgdGhpcy5zdHlsZVNjaGVkdWxlci5zY2hlZHVsZSgoKSA9PiB7XG4gICAgICAgIHRhYmxlRWxlbWVudC5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUodGFibGVXaWR0aCArIHRoaXMuX3BlbmRpbmdSZXNpemVEZWx0YSEpO1xuXG4gICAgICAgIHRoaXMuX3BlbmRpbmdSZXNpemVEZWx0YSA9IG51bGw7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zdHlsZVNjaGVkdWxlci5zY2hlZHVsZUVuZCgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFibGUudXBkYXRlU3RpY2t5Q29sdW1uU3R5bGVzKCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLl9wZW5kaW5nUmVzaXplRGVsdGEgPSAodGhpcy5fcGVuZGluZ1Jlc2l6ZURlbHRhID8/IDApICsgZGVsdGE7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgb3B0aW1hbGx5IHBlcmZvcm1pbmcgcmVzaXplIHN0cmF0ZWd5IGZvciAmbHQ7dGFibGUmZ3Q7IGVsZW1lbnRzIHdpdGggdGFibGUtbGF5b3V0OiBmaXhlZC5cbiAqIFRlc3RlZCBhZ2FpbnN0IGFuZCBvdXRwZXJmb3JtZWQ6XG4gKiAgIENTUyBzZWxlY3RvclxuICogICBDU1Mgc2VsZWN0b3Igdy8gQ1NTIHZhcmlhYmxlXG4gKiAgIFVwZGF0aW5nIGFsbCBjZWxsIG5vZGVzXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYWJsZUxheW91dEZpeGVkUmVzaXplU3RyYXRlZ3kgZXh0ZW5kcyBSZXNpemVTdHJhdGVneSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb2x1bW5SZXNpemU6IENvbHVtblJlc2l6ZSxcbiAgICBASW5qZWN0KF9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdHlsZVNjaGVkdWxlcjogX0NvYWxlc2NlZFN0eWxlU2NoZWR1bGVyLFxuICAgIHByb3RlY3RlZCByZWFkb25seSB0YWJsZTogQ2RrVGFibGU8dW5rbm93bj5cbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIGFwcGx5Q29sdW1uU2l6ZShcbiAgICBfOiBzdHJpbmcsXG4gICAgY29sdW1uSGVhZGVyOiBIVE1MRWxlbWVudCxcbiAgICBzaXplSW5QeDogbnVtYmVyLFxuICAgIHByZXZpb3VzU2l6ZUluUHg/OiBudW1iZXJcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZGVsdGEgPSBzaXplSW5QeCAtIChwcmV2aW91c1NpemVJblB4ID8/IGdldEVsZW1lbnRXaWR0aChjb2x1bW5IZWFkZXIpKTtcblxuICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3R5bGVTY2hlZHVsZXIuc2NoZWR1bGUoKCkgPT4ge1xuICAgICAgY29sdW1uSGVhZGVyLnN0eWxlLndpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShzaXplSW5QeCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnVwZGF0ZVRhYmxlV2lkdGhBbmRTdGlja3lDb2x1bW5zKGRlbHRhKTtcbiAgfVxuXG4gIGFwcGx5TWluQ29sdW1uU2l6ZShfOiBzdHJpbmcsIGNvbHVtbkhlYWRlcjogSFRNTEVsZW1lbnQsIHNpemVJblB4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50V2lkdGggPSBnZXRFbGVtZW50V2lkdGgoY29sdW1uSGVhZGVyKTtcbiAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KGN1cnJlbnRXaWR0aCwgc2l6ZUluUHgpO1xuXG4gICAgdGhpcy5hcHBseUNvbHVtblNpemUoXywgY29sdW1uSGVhZGVyLCBuZXdXaWR0aCwgY3VycmVudFdpZHRoKTtcbiAgfVxuXG4gIGFwcGx5TWF4Q29sdW1uU2l6ZShfOiBzdHJpbmcsIGNvbHVtbkhlYWRlcjogSFRNTEVsZW1lbnQsIHNpemVJblB4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50V2lkdGggPSBnZXRFbGVtZW50V2lkdGgoY29sdW1uSGVhZGVyKTtcbiAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWluKGN1cnJlbnRXaWR0aCwgc2l6ZUluUHgpO1xuXG4gICAgdGhpcy5hcHBseUNvbHVtblNpemUoXywgY29sdW1uSGVhZGVyLCBuZXdXaWR0aCwgY3VycmVudFdpZHRoKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBvcHRpbWFsbHkgcGVyZm9ybWluZyByZXNpemUgc3RyYXRlZ3kgZm9yIGZsZXggbWF0LXRhYmxlcy5cbiAqIFRlc3RlZCBhZ2FpbnN0IGFuZCBvdXRwZXJmb3JtZWQ6XG4gKiAgIENTUyBzZWxlY3RvciB3LyBDU1MgdmFyaWFibGVcbiAqICAgVXBkYXRpbmcgYWxsIG1hdC1jZWxsIG5vZGVzXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDZGtGbGV4VGFibGVSZXNpemVTdHJhdGVneSBleHRlbmRzIFJlc2l6ZVN0cmF0ZWd5IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQ6IERvY3VtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5JbmRleGVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uUHJvcGVydGllcyA9IG5ldyBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBzdHJpbmc+PigpO1xuXG4gIHByaXZhdGUgX3N0eWxlRWxlbWVudD86IEhUTUxTdHlsZUVsZW1lbnQ7XG4gIHByaXZhdGUgX2luZGV4U2VxdWVuY2UgPSAwO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0TWluU2l6ZSA9IDA7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZWZhdWx0TWF4U2l6ZSA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCByZWFkb25seSBjb2x1bW5SZXNpemU6IENvbHVtblJlc2l6ZSxcbiAgICBASW5qZWN0KF9DT0FMRVNDRURfU1RZTEVfU0NIRURVTEVSKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBzdHlsZVNjaGVkdWxlcjogX0NvYWxlc2NlZFN0eWxlU2NoZWR1bGVyLFxuICAgIHByb3RlY3RlZCByZWFkb25seSB0YWJsZTogQ2RrVGFibGU8dW5rbm93bj4sXG4gICAgQEluamVjdChET0NVTUVOVCkgZG9jdW1lbnQ6IGFueSxcbiAgICBASW5qZWN0KENTUF9OT05DRSkgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfbm9uY2U/OiBzdHJpbmcgfCBudWxsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgfVxuXG4gIGFwcGx5Q29sdW1uU2l6ZShcbiAgICBjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZyxcbiAgICBjb2x1bW5IZWFkZXI6IEhUTUxFbGVtZW50LFxuICAgIHNpemVJblB4OiBudW1iZXIsXG4gICAgcHJldmlvdXNTaXplSW5QeD86IG51bWJlclxuICApOiB2b2lkIHtcbiAgICAvLyBPcHRpbWl6YXRpb246IENoZWNrIGFwcGxpZWQgd2lkdGggZmlyc3QgYXMgd2UgcHJvYmFibHkgc2V0IGl0IGFscmVhZHkgYmVmb3JlIHJlYWRpbmdcbiAgICAvLyBvZmZzZXRXaWR0aCB3aGljaCB0cmlnZ2VycyBsYXlvdXQuXG4gICAgY29uc3QgZGVsdGEgPVxuICAgICAgc2l6ZUluUHggLVxuICAgICAgKHByZXZpb3VzU2l6ZUluUHggPz9cbiAgICAgICAgKHRoaXMuX2dldEFwcGxpZWRXaWR0aChjc3NGcmllbmRseUNvbHVtbk5hbWUpIHx8IGNvbHVtbkhlYWRlci5vZmZzZXRXaWR0aCkpO1xuXG4gICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3NzU2l6ZSA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoc2l6ZUluUHgpO1xuXG4gICAgdGhpcy5fYXBwbHlQcm9wZXJ0eShjc3NGcmllbmRseUNvbHVtbk5hbWUsICdmbGV4JywgYDAgMC4wMSAke2Nzc1NpemV9YCk7XG4gICAgdGhpcy51cGRhdGVUYWJsZVdpZHRoQW5kU3RpY2t5Q29sdW1ucyhkZWx0YSk7XG4gIH1cblxuICBhcHBseU1pbkNvbHVtblNpemUoY3NzRnJpZW5kbHlDb2x1bW5OYW1lOiBzdHJpbmcsIF86IEhUTUxFbGVtZW50LCBzaXplSW5QeDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgY3NzU2l6ZSA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoc2l6ZUluUHgpO1xuXG4gICAgdGhpcy5fYXBwbHlQcm9wZXJ0eShcbiAgICAgIGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSxcbiAgICAgICdtaW4td2lkdGgnLFxuICAgICAgY3NzU2l6ZSxcbiAgICAgIHNpemVJblB4ICE9PSB0aGlzLmRlZmF1bHRNaW5TaXplXG4gICAgKTtcbiAgICB0aGlzLnVwZGF0ZVRhYmxlV2lkdGhBbmRTdGlja3lDb2x1bW5zKDApO1xuICB9XG5cbiAgYXBwbHlNYXhDb2x1bW5TaXplKGNzc0ZyaWVuZGx5Q29sdW1uTmFtZTogc3RyaW5nLCBfOiBIVE1MRWxlbWVudCwgc2l6ZUluUHg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGNzc1NpemUgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHNpemVJblB4KTtcblxuICAgIHRoaXMuX2FwcGx5UHJvcGVydHkoXG4gICAgICBjc3NGcmllbmRseUNvbHVtbk5hbWUsXG4gICAgICAnbWF4LXdpZHRoJyxcbiAgICAgIGNzc1NpemUsXG4gICAgICBzaXplSW5QeCAhPT0gdGhpcy5kZWZhdWx0TWF4U2l6ZVxuICAgICk7XG4gICAgdGhpcy51cGRhdGVUYWJsZVdpZHRoQW5kU3RpY2t5Q29sdW1ucygwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb2x1bW5Dc3NDbGFzcyhjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjZGstY29sdW1uLSR7Y3NzRnJpZW5kbHlDb2x1bW5OYW1lfWA7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdHlsZUVsZW1lbnQ/LnJlbW92ZSgpO1xuICAgIHRoaXMuX3N0eWxlRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFByb3BlcnR5VmFsdWUoY3NzRnJpZW5kbHlDb2x1bW5OYW1lOiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5fZ2V0Q29sdW1uUHJvcGVydGllc01hcChjc3NGcmllbmRseUNvbHVtbk5hbWUpO1xuICAgIHJldHVybiBwcm9wZXJ0aWVzLmdldChrZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0QXBwbGllZFdpZHRoKGNzc0ZyaWVuZHNseUNvbHVtbk5hbWU6IHN0cmluZyk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNvZXJjZVBpeGVsc0Zyb21GbGV4VmFsdWUodGhpcy5fZ2V0UHJvcGVydHlWYWx1ZShjc3NGcmllbmRzbHlDb2x1bW5OYW1lLCAnZmxleCcpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5UHJvcGVydHkoXG4gICAgY3NzRnJpZW5kbHlDb2x1bW5OYW1lOiBzdHJpbmcsXG4gICAga2V5OiBzdHJpbmcsXG4gICAgdmFsdWU6IHN0cmluZyxcbiAgICBlbmFibGUgPSB0cnVlXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9nZXRDb2x1bW5Qcm9wZXJ0aWVzTWFwKGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSk7XG5cbiAgICB0aGlzLnN0eWxlU2NoZWR1bGVyLnNjaGVkdWxlKCgpID0+IHtcbiAgICAgIGlmIChlbmFibGUpIHtcbiAgICAgICAgcHJvcGVydGllcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9wZXJ0aWVzLmRlbGV0ZShrZXkpO1xuICAgICAgfVxuICAgICAgdGhpcy5fYXBwbHlTaXplQ3NzKGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRTdHlsZVNoZWV0KCk6IENTU1N0eWxlU2hlZXQge1xuICAgIGlmICghdGhpcy5fc3R5bGVFbGVtZW50KSB7XG4gICAgICB0aGlzLl9zdHlsZUVsZW1lbnQgPSB0aGlzLl9kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuXG4gICAgICBpZiAodGhpcy5fbm9uY2UpIHtcbiAgICAgICAgdGhpcy5fc3R5bGVFbGVtZW50Lm5vbmNlID0gdGhpcy5fbm9uY2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0eWxlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLl9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICAgICAgdGhpcy5fZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0aGlzLl9zdHlsZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9zdHlsZUVsZW1lbnQuc2hlZXQgYXMgQ1NTU3R5bGVTaGVldDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldENvbHVtblByb3BlcnRpZXNNYXAoY3NzRnJpZW5kbHlDb2x1bW5OYW1lOiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBsZXQgcHJvcGVydGllcyA9IHRoaXMuX2NvbHVtblByb3BlcnRpZXMuZ2V0KGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSk7XG4gICAgaWYgKHByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvcGVydGllcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICB0aGlzLl9jb2x1bW5Qcm9wZXJ0aWVzLnNldChjc3NGcmllbmRseUNvbHVtbk5hbWUsIHByb3BlcnRpZXMpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcGVydGllcztcbiAgfVxuXG4gIHByaXZhdGUgX2FwcGx5U2l6ZUNzcyhjc3NGcmllbmRseUNvbHVtbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLl9nZXRDb2x1bW5Qcm9wZXJ0aWVzTWFwKGNzc0ZyaWVuZGx5Q29sdW1uTmFtZSk7XG4gICAgY29uc3QgcHJvcGVydHlLZXlzID0gQXJyYXkuZnJvbShwcm9wZXJ0aWVzLmtleXMoKSk7XG5cbiAgICBsZXQgaW5kZXggPSB0aGlzLl9jb2x1bW5JbmRleGVzLmdldChjc3NGcmllbmRseUNvbHVtbk5hbWUpO1xuICAgIGlmIChpbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoIXByb3BlcnR5S2V5cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gTm90aGluZyB0byBzZXQgb3IgdW5zZXQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaW5kZXggPSB0aGlzLl9pbmRleFNlcXVlbmNlKys7XG4gICAgICB0aGlzLl9jb2x1bW5JbmRleGVzLnNldChjc3NGcmllbmRseUNvbHVtbk5hbWUsIGluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZ2V0U3R5bGVTaGVldCgpLmRlbGV0ZVJ1bGUoaW5kZXgpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtbkNsYXNzTmFtZSA9IHRoaXMuZ2V0Q29sdW1uQ3NzQ2xhc3MoY3NzRnJpZW5kbHlDb2x1bW5OYW1lKTtcbiAgICBjb25zdCB0YWJsZUNsYXNzTmFtZSA9IHRoaXMuY29sdW1uUmVzaXplLmdldFVuaXF1ZUNzc0NsYXNzKCk7XG5cbiAgICBjb25zdCBzZWxlY3RvciA9IGAuJHt0YWJsZUNsYXNzTmFtZX0gLiR7Y29sdW1uQ2xhc3NOYW1lfWA7XG4gICAgY29uc3QgYm9keSA9IHByb3BlcnR5S2V5cy5tYXAoa2V5ID0+IGAke2tleX06JHtwcm9wZXJ0aWVzLmdldChrZXkpfWApLmpvaW4oJzsnKTtcblxuICAgIHRoaXMuX2dldFN0eWxlU2hlZXQoKS5pbnNlcnRSdWxlKGAke3NlbGVjdG9yfSB7JHtib2R5fX1gLCBpbmRleCk7XG4gIH1cbn1cblxuLyoqIENvbnZlcnRzIENTUyBwaXhlbCB2YWx1ZXMgdG8gbnVtYmVycywgZWcgXCIxMjNweFwiIHRvIDEyMy4gUmV0dXJucyBOYU4gZm9yIG5vbiBwaXhlbCB2YWx1ZXMuICovXG5mdW5jdGlvbiBjb2VyY2VQaXhlbHNGcm9tQ3NzVmFsdWUoY3NzVmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIoY3NzVmFsdWUubWF0Y2goLyhcXGQrKXB4Lyk/LlsxXSk7XG59XG5cbi8qKiBHZXRzIHRoZSBzdHlsZS53aWR0aCBwaXhlbHMgb24gdGhlIHNwZWNpZmllZCBlbGVtZW50IGlmIHByZXNlbnQsIG90aGVyd2lzZSBpdHMgb2Zmc2V0V2lkdGguICovXG5mdW5jdGlvbiBnZXRFbGVtZW50V2lkdGgoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgLy8gT3B0aW1pemF0aW9uOiBDaGVjayBzdHlsZS53aWR0aCBmaXJzdCBhcyB3ZSBwcm9iYWJseSBzZXQgaXQgYWxyZWFkeSBiZWZvcmUgcmVhZGluZ1xuICAvLyBvZmZzZXRXaWR0aCB3aGljaCB0cmlnZ2VycyBsYXlvdXQuXG4gIHJldHVybiBjb2VyY2VQaXhlbHNGcm9tQ3NzVmFsdWUoZWxlbWVudC5zdHlsZS53aWR0aCkgfHwgZWxlbWVudC5vZmZzZXRXaWR0aDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBDU1MgZmxleCB2YWx1ZXMgYXMgc2V0IGluIENka0ZsZXhUYWJsZVJlc2l6ZVN0cmF0ZWd5IHRvIG51bWJlcnMsXG4gKiBlZyBcIjAgMC4wMSAxMjNweFwiIHRvIDEyMy5cbiAqL1xuZnVuY3Rpb24gY29lcmNlUGl4ZWxzRnJvbUZsZXhWYWx1ZShmbGV4VmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG4gIHJldHVybiBOdW1iZXIoZmxleFZhbHVlPy5tYXRjaCgvMCAwXFwuMDEgKFxcZCspcHgvKT8uWzFdKTtcbn1cblxuZXhwb3J0IGNvbnN0IFRBQkxFX0xBWU9VVF9GSVhFRF9SRVNJWkVfU1RSQVRFR1lfUFJPVklERVI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBSZXNpemVTdHJhdGVneSxcbiAgdXNlQ2xhc3M6IFRhYmxlTGF5b3V0Rml4ZWRSZXNpemVTdHJhdGVneSxcbn07XG5leHBvcnQgY29uc3QgRkxFWF9SRVNJWkVfU1RSQVRFR1lfUFJPVklERVI6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBSZXNpemVTdHJhdGVneSxcbiAgdXNlQ2xhc3M6IENka0ZsZXhUYWJsZVJlc2l6ZVN0cmF0ZWd5LFxufTtcbiJdfQ==
@@ -9,9 +9,8 @@ import * as i5 from "@angular/material/chips";
9
9
  import * as i6 from "@angular/material/tooltip";
10
10
  import * as i7 from "@angular/material/badge";
11
11
  import * as i8 from "@angular/material/icon";
12
- import * as i9 from "./image-preview";
13
- import * as i10 from "@ng-matero/extensions/core";
14
- import * as i11 from "./grid-pipes";
12
+ import * as i9 from "@ng-matero/extensions/core";
13
+ import * as i10 from "./grid-pipes";
15
14
  export class MtxGridCell {
16
15
  get _value() {
17
16
  return this._utils.getCellValue(this.rowData, this.colDef);
@@ -90,11 +89,11 @@ export class MtxGridCell {
90
89
  }
91
90
  }
92
91
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: MtxGridCell, deps: [{ token: i1.MtxDialog }, { token: i2.MtxGridUtils }, { token: i0.KeyValueDiffers }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
93
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: MtxGridCell, selector: "mtx-grid-cell", inputs: { rowData: "rowData", colDef: "colDef", data: "data", summary: "summary", placeholder: "placeholder" }, outputs: { rowDataChange: "rowDataChange" }, exportAs: ["mtxGridCell"], ngImport: i0, template: "<span *ngIf=\"summary; else customCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip((data | cellSummary: colDef))\"\r\n [innerHTML]=\"_getText((data | cellSummary: colDef))\">\r\n</span>\r\n\r\n<!-- Custom formatting -->\r\n<ng-template #customCellFormattingTpl>\r\n <span *ngIf=\"colDef.formatter; else defaultCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\r\n [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Default formatting -->\r\n<ng-template #defaultCellFormattingTpl>\r\n <ng-container [ngSwitch]=\"colDef.type\">\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ng-container\r\n *ngFor=\"let btn of colDef.buttons | cellActions: rowData: rowChangeRecord: rowChangeRecord?.currentValue\">\r\n <ng-container *ngIf=\"!btn.iif || btn.iif(rowData)\">\r\n <ng-container [ngSwitch]=\"btn.type\">\r\n <ng-container *ngSwitchCase=\"'raised'\">\r\n <button mat-raised-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'stroked'\">\r\n <button mat-stroked-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'flat'\">\r\n <button mat-flat-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'icon'\">\r\n <button mat-icon-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fab'\">\r\n <button mat-fab [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mini-fab'\">\r\n <button mat-mini-fab [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <button mat-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Tag -->\r\n <ng-container *ngSwitchCase=\"'tag'\">\r\n <mat-chip-listbox *ngIf=\"colDef.tag && colDef.tag[_value]; else tagEmptyTpl\">\r\n <mat-chip color=\"primary\" [ngClass]=\"['bg-' + colDef.tag[_value].color]\">\r\n {{colDef.tag[_value].text}}\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n <ng-template #tagEmptyTpl>{{_value}}</ng-template>\r\n </ng-container>\r\n <!-- Link -->\r\n <ng-container *ngSwitchCase=\"'link'\">\r\n <a [href]=\"_value\" target=\"_blank\">{{_value}}</a>\r\n </ng-container>\r\n <!-- Image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img class=\"mtx-grid-img\" mtx-grid-image-preview [src]=\"_value\">\r\n </ng-container>\r\n <!-- Boolean -->\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n <!-- Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <span [title]=\"_getTooltip(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Currency -->\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <span [title]=\"_getTooltip(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Percent -->\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <span [title]=\"_getTooltip(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span [title]=\"_getTooltip(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Default -->\r\n <ng-container *ngSwitchDefault>\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".mtx-grid-img{display:inline-block;width:32px;border-radius:4px;vertical-align:middle;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.MtxGridImagePreview, selector: "[mtx-grid-image-preview]", inputs: ["images", "options"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i3.PercentPipe, name: "percent" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i10.MtxToObservablePipe, name: "toObservable" }, { kind: "pipe", type: i11.MtxGridCellActionsPipe, name: "cellActions" }, { kind: "pipe", type: i11.MtxGridCellActionTooltipPipe, name: "cellActionTooltip" }, { kind: "pipe", type: i11.MtxGridCellActionBadgePipe, name: "cellActionBadge" }, { kind: "pipe", type: i11.MtxGridCellActionDisablePipe, name: "cellActionDisable" }, { kind: "pipe", type: i11.MtxGridCellSummaryPipe, name: "cellSummary" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
92
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: MtxGridCell, selector: "mtx-grid-cell", inputs: { rowData: "rowData", colDef: "colDef", data: "data", summary: "summary", placeholder: "placeholder" }, outputs: { rowDataChange: "rowDataChange" }, exportAs: ["mtxGridCell"], ngImport: i0, template: "<span *ngIf=\"summary; else customCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip((data | cellSummary: colDef))\"\r\n [innerHTML]=\"_getText((data | cellSummary: colDef))\">\r\n</span>\r\n\r\n<!-- Custom formatting -->\r\n<ng-template #customCellFormattingTpl>\r\n <span *ngIf=\"colDef.formatter; else defaultCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\r\n [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Default formatting -->\r\n<ng-template #defaultCellFormattingTpl>\r\n <ng-container [ngSwitch]=\"colDef.type\">\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ng-container\r\n *ngFor=\"let btn of colDef.buttons | cellActions: rowData: rowChangeRecord: rowChangeRecord?.currentValue\">\r\n <ng-container *ngIf=\"!btn.iif || btn.iif(rowData)\">\r\n <ng-container [ngSwitch]=\"btn.type\">\r\n <ng-container *ngSwitchCase=\"'raised'\">\r\n <button mat-raised-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'stroked'\">\r\n <button mat-stroked-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'flat'\">\r\n <button mat-flat-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'icon'\">\r\n <button mat-icon-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fab'\">\r\n <button mat-fab [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mini-fab'\">\r\n <button mat-mini-fab [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <button mat-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Tag -->\r\n <ng-container *ngSwitchCase=\"'tag'\">\r\n <mat-chip-listbox *ngIf=\"colDef.tag && colDef.tag[_value]; else tagEmptyTpl\">\r\n <mat-chip color=\"primary\" [ngClass]=\"['bg-' + colDef.tag[_value].color]\">\r\n {{colDef.tag[_value].text}}\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n <ng-template #tagEmptyTpl>{{_value}}</ng-template>\r\n </ng-container>\r\n <!-- Link -->\r\n <ng-container *ngSwitchCase=\"'link'\">\r\n <a [href]=\"_value\" target=\"_blank\">{{_value}}</a>\r\n </ng-container>\r\n <!-- Image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img class=\"mtx-grid-img\" [src]=\"_value\">\r\n </ng-container>\r\n <!-- Boolean -->\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n <!-- Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <span [title]=\"_getTooltip(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Currency -->\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <span [title]=\"_getTooltip(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Percent -->\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <span [title]=\"_getTooltip(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span [title]=\"_getTooltip(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Default -->\r\n <ng-container *ngSwitchDefault>\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".mtx-grid-img{display:inline-block;width:32px;border-radius:4px;vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["disabled", "disableRipple", "color", "tabIndex", "extended"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disabled", "disableRipple", "tabIndex", "role", "id", "aria-label", "aria-description", "value", "removable", "highlighted"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "component", type: i5.MatChipListbox, selector: "mat-chip-listbox", inputs: ["tabIndex", "multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i7.MatBadge, selector: "[matBadge]", inputs: ["matBadgeDisabled", "matBadgeColor", "matBadgeOverlap", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.DecimalPipe, name: "number" }, { kind: "pipe", type: i3.PercentPipe, name: "percent" }, { kind: "pipe", type: i3.CurrencyPipe, name: "currency" }, { kind: "pipe", type: i3.DatePipe, name: "date" }, { kind: "pipe", type: i9.MtxToObservablePipe, name: "toObservable" }, { kind: "pipe", type: i10.MtxGridCellActionsPipe, name: "cellActions" }, { kind: "pipe", type: i10.MtxGridCellActionTooltipPipe, name: "cellActionTooltip" }, { kind: "pipe", type: i10.MtxGridCellActionBadgePipe, name: "cellActionBadge" }, { kind: "pipe", type: i10.MtxGridCellActionDisablePipe, name: "cellActionDisable" }, { kind: "pipe", type: i10.MtxGridCellSummaryPipe, name: "cellSummary" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
94
93
  }
95
94
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: MtxGridCell, decorators: [{
96
95
  type: Component,
97
- args: [{ selector: 'mtx-grid-cell', exportAs: 'mtxGridCell', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span *ngIf=\"summary; else customCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip((data | cellSummary: colDef))\"\r\n [innerHTML]=\"_getText((data | cellSummary: colDef))\">\r\n</span>\r\n\r\n<!-- Custom formatting -->\r\n<ng-template #customCellFormattingTpl>\r\n <span *ngIf=\"colDef.formatter; else defaultCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\r\n [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Default formatting -->\r\n<ng-template #defaultCellFormattingTpl>\r\n <ng-container [ngSwitch]=\"colDef.type\">\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ng-container\r\n *ngFor=\"let btn of colDef.buttons | cellActions: rowData: rowChangeRecord: rowChangeRecord?.currentValue\">\r\n <ng-container *ngIf=\"!btn.iif || btn.iif(rowData)\">\r\n <ng-container [ngSwitch]=\"btn.type\">\r\n <ng-container *ngSwitchCase=\"'raised'\">\r\n <button mat-raised-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'stroked'\">\r\n <button mat-stroked-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'flat'\">\r\n <button mat-flat-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'icon'\">\r\n <button mat-icon-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fab'\">\r\n <button mat-fab [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mini-fab'\">\r\n <button mat-mini-fab [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <button mat-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Tag -->\r\n <ng-container *ngSwitchCase=\"'tag'\">\r\n <mat-chip-listbox *ngIf=\"colDef.tag && colDef.tag[_value]; else tagEmptyTpl\">\r\n <mat-chip color=\"primary\" [ngClass]=\"['bg-' + colDef.tag[_value].color]\">\r\n {{colDef.tag[_value].text}}\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n <ng-template #tagEmptyTpl>{{_value}}</ng-template>\r\n </ng-container>\r\n <!-- Link -->\r\n <ng-container *ngSwitchCase=\"'link'\">\r\n <a [href]=\"_value\" target=\"_blank\">{{_value}}</a>\r\n </ng-container>\r\n <!-- Image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img class=\"mtx-grid-img\" mtx-grid-image-preview [src]=\"_value\">\r\n </ng-container>\r\n <!-- Boolean -->\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n <!-- Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <span [title]=\"_getTooltip(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Currency -->\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <span [title]=\"_getTooltip(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Percent -->\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <span [title]=\"_getTooltip(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span [title]=\"_getTooltip(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Default -->\r\n <ng-container *ngSwitchDefault>\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".mtx-grid-img{display:inline-block;width:32px;border-radius:4px;vertical-align:middle;cursor:pointer}\n"] }]
96
+ args: [{ selector: 'mtx-grid-cell', exportAs: 'mtxGridCell', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<span *ngIf=\"summary; else customCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip((data | cellSummary: colDef))\"\r\n [innerHTML]=\"_getText((data | cellSummary: colDef))\">\r\n</span>\r\n\r\n<!-- Custom formatting -->\r\n<ng-template #customCellFormattingTpl>\r\n <span *ngIf=\"colDef.formatter; else defaultCellFormattingTpl\"\r\n [title]=\"_getFormatterTooltip(colDef.formatter(rowData, colDef))\"\r\n [innerHTML]=\"_getText(colDef.formatter(rowData, colDef))\">\r\n </span>\r\n</ng-template>\r\n\r\n<!-- Default formatting -->\r\n<ng-template #defaultCellFormattingTpl>\r\n <ng-container [ngSwitch]=\"colDef.type\">\r\n <!-- Buttons -->\r\n <ng-container *ngSwitchCase=\"'button'\">\r\n <ng-container\r\n *ngFor=\"let btn of colDef.buttons | cellActions: rowData: rowChangeRecord: rowChangeRecord?.currentValue\">\r\n <ng-container *ngIf=\"!btn.iif || btn.iif(rowData)\">\r\n <ng-container [ngSwitch]=\"btn.type\">\r\n <ng-container *ngSwitchCase=\"'raised'\">\r\n <button mat-raised-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'stroked'\">\r\n <button mat-stroked-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'flat'\">\r\n <button mat-flat-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'icon'\">\r\n <button mat-icon-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'fab'\">\r\n <button mat-fab [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'mini-fab'\">\r\n <button mat-mini-fab [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\">{{btn.icon}}</mat-icon>\r\n </button>\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <button mat-button [color]=\"btn.color || 'primary'\" type=\"button\"\r\n [ngClass]=\"['mtx-grid-action-button', btn.class || '']\"\r\n [disabled]=\"btn | cellActionDisable: rowData: rowChangeRecord: rowChangeRecord?.currentValue\"\r\n [matTooltip]=\"(btn | cellActionTooltip).message | toObservable | async\"\r\n [matTooltipClass]=\"(btn | cellActionTooltip).class\"\r\n [matTooltipHideDelay]=\"(btn | cellActionTooltip).hideDelay\"\r\n [matTooltipShowDelay]=\"(btn | cellActionTooltip).showDelay\"\r\n [matTooltipPosition]=\"(btn | cellActionTooltip).position || 'below'\"\r\n [matTooltipPositionAtOrigin]=\"(btn | cellActionTooltip).positionAtOrigin\"\r\n [matTooltipTouchGestures]=\"(btn | cellActionTooltip).touchGestures || 'auto'\"\r\n [matTooltipDisabled]=\"(btn | cellActionTooltip).disabled\"\r\n [matBadge]=\"(btn | cellActionBadge).content | toObservable | async\"\r\n [matBadgeDescription]=\"(btn | cellActionBadge).description | toObservable | async\"\r\n [matBadgeColor]=\"(btn | cellActionBadge).color\"\r\n [matBadgePosition]=\"(btn | cellActionBadge).position || 'above after'\"\r\n [matBadgeSize]=\"(btn | cellActionBadge).size || 'medium'\"\r\n [matBadgeOverlap]=\"(btn | cellActionBadge).overlap\"\r\n [matBadgeDisabled]=\"(btn | cellActionBadge).disabled\"\r\n [matBadgeHidden]=\"(btn | cellActionBadge).hidden\"\r\n (click)=\"_onActionClick($event, btn, rowData)\">\r\n <mat-icon class=\"mtx-grid-icon\" *ngIf=\"btn.icon\">{{btn.icon}}</mat-icon>\r\n <span>{{btn.text | toObservable | async}}</span>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n <!-- Tag -->\r\n <ng-container *ngSwitchCase=\"'tag'\">\r\n <mat-chip-listbox *ngIf=\"colDef.tag && colDef.tag[_value]; else tagEmptyTpl\">\r\n <mat-chip color=\"primary\" [ngClass]=\"['bg-' + colDef.tag[_value].color]\">\r\n {{colDef.tag[_value].text}}\r\n </mat-chip>\r\n </mat-chip-listbox>\r\n <ng-template #tagEmptyTpl>{{_value}}</ng-template>\r\n </ng-container>\r\n <!-- Link -->\r\n <ng-container *ngSwitchCase=\"'link'\">\r\n <a [href]=\"_value\" target=\"_blank\">{{_value}}</a>\r\n </ng-container>\r\n <!-- Image -->\r\n <ng-container *ngSwitchCase=\"'image'\">\r\n <img class=\"mtx-grid-img\" [src]=\"_value\">\r\n </ng-container>\r\n <!-- Boolean -->\r\n <ng-container *ngSwitchCase=\"'boolean'\">\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n <!-- Number -->\r\n <ng-container *ngSwitchCase=\"'number'\">\r\n <span [title]=\"_getTooltip(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | number: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Currency -->\r\n <ng-container *ngSwitchCase=\"'currency'\">\r\n <span [title]=\"_getTooltip(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | currency: colDef.typeParameter?.currencyCode:\r\n colDef.typeParameter?.display:\r\n colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Percent -->\r\n <ng-container *ngSwitchCase=\"'percent'\">\r\n <span [title]=\"_getTooltip(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | percent: colDef.typeParameter?.digitsInfo:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Date -->\r\n <ng-container *ngSwitchCase=\"'date'\">\r\n <span [title]=\"_getTooltip(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)\">\r\n {{_getText(_value | date: colDef.typeParameter?.format:\r\n colDef.typeParameter?.timezone:\r\n colDef.typeParameter?.locale)}}\r\n </span>\r\n </ng-container>\r\n <!-- Default -->\r\n <ng-container *ngSwitchDefault>\r\n <span [title]=\"_getTooltip(_value)\">{{_getText(_value)}}</span>\r\n </ng-container>\r\n </ng-container>\r\n</ng-template>\r\n", styles: [".mtx-grid-img{display:inline-block;width:32px;border-radius:4px;vertical-align:middle}\n"] }]
98
97
  }], ctorParameters: function () { return [{ type: i1.MtxDialog }, { type: i2.MtxGridUtils }, { type: i0.KeyValueDiffers }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { rowData: [{
99
98
  type: Input
100
99
  }], colDef: [{
@@ -108,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
108
107
  }], rowDataChange: [{
109
108
  type: Output
110
109
  }] } });
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZ3JpZC9jZWxsLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9ncmlkL2NlbGwuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQU1MLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7OztBQVlwQyxNQUFNLE9BQU8sV0FBVztJQXNCdEIsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQsWUFDVSxPQUFrQixFQUNsQixNQUFvQixFQUNwQixRQUF5QixFQUN6QixrQkFBcUM7UUFIckMsWUFBTyxHQUFQLE9BQU8sQ0FBVztRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUE3Qi9DLGVBQWU7UUFDTixZQUFPLEdBQXdCLEVBQUUsQ0FBQztRQUszQyxpQkFBaUI7UUFDUixTQUFJLEdBQVUsRUFBRSxDQUFDO1FBRTFCLDJCQUEyQjtRQUNsQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBRXpCLDJEQUEyRDtRQUNsRCxnQkFBVyxHQUFXLElBQUksQ0FBQztRQUUxQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFxQyxDQUFDO0lBZTdFLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENB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MUIsSUFBSSxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsU0FBUyxJQUFJLE9BQU87cUJBQ3BDO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1NBQ0o7YUFBTTtZQUNMLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUN0QjtJQUNILENBQUM7aUlBL0ZVLFdBQVc7cUhBQVgsV0FBVyw2T0M1QnhCLHcwakJBdVFBOzsyRkQzT2EsV0FBVztrQkFSdkIsU0FBUzsrQkFDRSxlQUFlLFlBQ2YsYUFBYSxpQkFHUixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO3lMQUl0QyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csTUFBTTtzQkFBZCxLQUFLO2dCQUdHLElBQUk7c0JBQVosS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFFSSxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIERvQ2hlY2ssXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIEtleVZhbHVlQ2hhbmdlUmVjb3JkLFxuICBLZXlWYWx1ZUNoYW5nZXMsXG4gIEtleVZhbHVlRGlmZmVyLFxuICBLZXlWYWx1ZURpZmZlcnMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNdHhEaWFsb2cgfSBmcm9tICdAbmctbWF0ZXJvL2V4dGVuc2lvbnMvZGlhbG9nJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTXR4R3JpZFV0aWxzIH0gZnJvbSAnLi9ncmlkLXV0aWxzJztcbmltcG9ydCB7IE10eEdyaWRDb2x1bW4sIE10eEdyaWRDb2x1bW5CdXR0b24gfSBmcm9tICcuL2ludGVyZmFjZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtdHgtZ3JpZC1jZWxsJyxcbiAgZXhwb3J0QXM6ICdtdHhHcmlkQ2VsbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jZWxsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jZWxsLnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE10eEdyaWRDZWxsIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrIHtcbiAgLyoqIFJvdyBkYXRhICovXG4gIEBJbnB1dCgpIHJvd0RhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICAvKiogQ29sdW1uIGRlZmluaXRpb24gKi9cbiAgQElucHV0KCkgY29sRGVmITogTXR4R3JpZENvbHVtbjtcblxuICAvKiogVGFibGUgZGF0YSAqL1xuICBASW5wdXQoKSBkYXRhOiBhbnlbXSA9IFtdO1xuXG4gIC8qKiBXaGV0aGVyIHNob3cgc3VtbWFyeSAqL1xuICBASW5wdXQoKSBzdW1tYXJ5ID0gZmFsc2U7XG5cbiAgLyoqIFBsYWNlaG9sZGVyIGZvciB0aGUgZW1wdHkgdmFsdWUgKGBudWxsYCwgYCcnYCwgYFtdYCkgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICctLSc7XG5cbiAgQE91dHB1dCgpIHJvd0RhdGFDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEtleVZhbHVlQ2hhbmdlUmVjb3JkPHN0cmluZywgYW55Pj4oKTtcblxuICBwcml2YXRlIHJvd0RhdGFEaWZmZXI/OiBLZXlWYWx1ZURpZmZlcjxzdHJpbmcsIGFueT47XG5cbiAgcm93Q2hhbmdlUmVjb3JkPzogS2V5VmFsdWVDaGFuZ2VSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIGdldCBfdmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3V0aWxzLmdldENlbGxWYWx1ZSh0aGlzLnJvd0RhdGEsIHRoaXMuY29sRGVmKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2RpYWxvZzogTXR4RGlhbG9nLFxuICAgIHByaXZhdGUgX3V0aWxzOiBNdHhHcmlkVXRpbHMsXG4gICAgcHJpdmF0ZSBfZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzLFxuICAgIHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5yb3dEYXRhRGlmZmVyID0gdGhpcy5fZGlmZmVycy5maW5kKHRoaXMucm93RGF0YSkuY3JlYXRlKCk7XG4gIH1cblxuICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlcyA9IHRoaXMucm93RGF0YURpZmZlcj8uZGlmZih0aGlzLnJvd0RhdGEpO1xuICAgIGlmIChjaGFuZ2VzKSB7XG4gICAgICB0aGlzLl9hcHBseUNoYW5nZXMoY2hhbmdlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXBwbHlDaGFuZ2VzKGNoYW5nZXM6IEtleVZhbHVlQ2hhbmdlczxzdHJpbmcsIGFueT4pIHtcbiAgICBjaGFuZ2VzLmZvckVhY2hDaGFuZ2VkSXRlbShyZWNvcmQgPT4ge1xuICAgICAgdGhpcy5yb3dDaGFuZ2VSZWNvcmQgPSByZWNvcmQ7XG4gICAgICB0aGlzLnJvd0RhdGFDaGFuZ2UuZW1pdChyZWNvcmQpO1xuICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBfZ2V0VGV4dCh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyAnJyA6IHRoaXMuX3V0aWxzLmlzRW1wdHkodmFsdWUpID8gdGhpcy5wbGFjZWhvbGRlciA6IHZhbHVlO1xuICB9XG5cbiAgX2dldFRvb2x0aXAodmFsdWU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLl91dGlscy5pc0VtcHR5KHZhbHVlKSA/ICcnIDogdmFsdWU7XG4gIH1cblxuICBfZ2V0Rm9ybWF0dGVyVG9vbHRpcCh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX3V0aWxzLmlzQ29udGFpbkhUTUwodmFsdWUpIHx8IHRoaXMuX3V0aWxzLmlzRW1wdHkodmFsdWUpID8gJycgOiB2YWx1ZTtcbiAgfVxuXG4gIF9vbkFjdGlvbkNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50LCBidG46IE10eEdyaWRDb2x1bW5CdXR0b24sIHJvd0RhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHR5cGVvZiBidG4ucG9wID09PSAnc3RyaW5nJyB8fCBpc09ic2VydmFibGUoYnRuLnBvcCkpIHtcbiAgICAgIHRoaXMuX2RpYWxvZy5vcGVuKHtcbiAgICAgICAgdGl0bGU6IGJ0bi5wb3AsXG4gICAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgICB7IGNvbG9yOiAncHJpbWFyeScsIHRleHQ6ICdPSycsIG9uQ2xpY2s6ICgpID0+IGJ0bi5jbGljaz8uKHJvd0RhdGEpIHx8IHt9IH0sXG4gICAgICAgICAgeyB0ZXh0OiAnQ0xPU0UnIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBidG4ucG9wID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5fZGlhbG9nLm9wZW4oe1xuICAgICAgICB0aXRsZTogYnRuLnBvcD8udGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBidG4ucG9wPy5kZXNjcmlwdGlvbixcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbG9yOiBidG4ucG9wPy5va0NvbG9yIHx8ICdwcmltYXJ5JyxcbiAgICAgICAgICAgIHRleHQ6IGJ0bi5wb3A/Lm9rVGV4dCB8fCAnT0snLFxuICAgICAgICAgICAgb25DbGljazogKCkgPT4gYnRuLmNsaWNrPy4ocm93RGF0YSkgfHwge30sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xvcjogYnRuLnBvcD8uY2xvc2VDb2xvcixcbiAgICAgICAgICAgIHRleHQ6IGJ0bi5wb3A/LmNsb3NlVGV4dCB8fCAnQ0xPU0UnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgYnRuLmNsaWNrPy4ocm93RGF0YSk7XG4gICAgfVxuICB9XG59XG4iLCI8c3BhbiAqbmdJZj1cInN1bW1hcnk7IGVsc2UgY3VzdG9tQ2VsbEZvcm1hdHRpbmdUcGxcIlxyXG4gICAgICBbdGl0bGVdPVwiX2dldEZvcm1hdHRlclRvb2x0aXAoKGRhdGEgfCBjZWxsU3VtbWFyeTogY29sRGVmKSlcIlxyXG4gICAgICBbaW5uZXJIVE1MXT1cIl9nZXRUZXh0KChkYXRhIHwgY2VsbFN1bW1hcnk6IGNvbERlZikpXCI+XHJcbjwvc3Bhbj5cclxuXHJcbjwhLS0gQ3VzdG9tIGZvcm1hdHRpbmcgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjY3VzdG9tQ2VsbEZvcm1hdHRpbmdUcGw+XHJcbiAgPHNwYW4gKm5nSWY9XCJjb2xEZWYuZm9ybWF0dGVyOyBlbHNlIGRlZmF1bHRDZWxsRm9ybWF0dGluZ1RwbFwiXHJcbiAgICAgICAgW3RpdGxlXT1cIl9nZXRGb3JtYXR0ZXJUb29sdGlwKGNvbERlZi5mb3JtYXR0ZXIocm93RGF0YSwgY29sRGVmKSlcIlxyXG4gICAgICAgIFtpbm5lckhUTUxdPVwiX2dldFRleHQoY29sRGVmLmZvcm1hdHRlcihyb3dEYXRhLCBjb2xEZWYpKVwiPlxyXG4gIDwvc3Bhbj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gRGVmYXVsdCBmb3JtYXR0aW5nIC0tPlxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsRm9ybWF0dGluZ1RwbD5cclxuICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJjb2xEZWYudHlwZVwiPlxyXG4gICAgPCEtLSBCdXR0b25zIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2J1dHRvbidcIj5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBidG4gb2YgY29sRGVmLmJ1dHRvbnMgfCBjZWxsQWN0aW9uczogcm93RGF0YTogcm93Q2hhbmdlUmVjb3JkOiByb3dDaGFuZ2VSZWNvcmQ/LmN1cnJlbnRWYWx1ZVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhYnRuLmlpZiB8fCBidG4uaWlmKHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJidG4udHlwZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncmFpc2VkJ1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gW2NvbG9yXT1cImJ0bi5jb2xvciB8fCAncHJpbWFyeSdcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnbXR4LWdyaWQtYWN0aW9uLWJ1dHRvbicsIGJ0bi5jbGFzcyB8fCAnJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0biB8IGNlbGxBY3Rpb25EaXNhYmxlOiByb3dEYXRhOiByb3dDaGFuZ2VSZWNvcmQ6IHJvd0NoYW5nZVJlY29yZD8uY3VycmVudFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkubWVzc2FnZSB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwQ2xhc3NdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcEhpZGVEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmhpZGVEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFNob3dEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnNob3dEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb24gfHwgJ2JlbG93J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW5dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbkF0T3JpZ2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwVG91Y2hHZXN0dXJlc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnRvdWNoR2VzdHVyZXMgfHwgJ2F1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuY29udGVudCB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZURlc2NyaXB0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmRlc2NyaXB0aW9uIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlQ29sb3JdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkucG9zaXRpb24gfHwgJ2Fib3ZlIGFmdGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VTaXplXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLnNpemUgfHwgJ21lZGl1bSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlT3ZlcmxhcF09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5vdmVybGFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZURpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vbkFjdGlvbkNsaWNrKCRldmVudCwgYnRuLCByb3dEYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXR4LWdyaWQtaWNvblwiICpuZ0lmPVwiYnRuLmljb25cIj57e2J0bi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3tidG4udGV4dCB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInc3Ryb2tlZCdcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBbY29sb3JdPVwiYnRuLmNvbG9yIHx8ICdwcmltYXJ5J1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiWydtdHgtZ3JpZC1hY3Rpb24tYnV0dG9uJywgYnRuLmNsYXNzIHx8ICcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuIHwgY2VsbEFjdGlvbkRpc2FibGU6IHJvd0RhdGE6IHJvd0NoYW5nZVJlY29yZDogcm93Q2hhbmdlUmVjb3JkPy5jdXJyZW50VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5tZXNzYWdlIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwSGlkZURlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuaGlkZURlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuc2hvd0RlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbiB8fCAnYmVsb3cnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uQXRPcmlnaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBUb3VjaEdlc3R1cmVzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkudG91Y2hHZXN0dXJlcyB8fCAnYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb250ZW50IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGVzY3JpcHRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGVzY3JpcHRpb24gfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5wb3NpdGlvbiB8fCAnYWJvdmUgYWZ0ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuc2l6ZSB8fCAnbWVkaXVtJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VPdmVybGFwXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLm92ZXJsYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uQWN0aW9uQ2xpY2soJGV2ZW50LCBidG4sIHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtdHgtZ3JpZC1pY29uXCIgKm5nSWY9XCJidG4uaWNvblwiPnt7YnRuLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2J0bi50ZXh0IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmbGF0J1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIFtjb2xvcl09XCJidG4uY29sb3IgfHwgJ3ByaW1hcnknXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbJ210eC1ncmlkLWFjdGlvbi1idXR0b24nLCBidG4uY2xhc3MgfHwgJyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4gfCBjZWxsQWN0aW9uRGlzYWJsZTogcm93RGF0YTogcm93Q2hhbmdlUmVjb3JkOiByb3dDaGFuZ2VSZWNvcmQ/LmN1cnJlbnRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLm1lc3NhZ2UgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBIaWRlRGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5oaWRlRGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5zaG93RGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uIHx8ICdiZWxvdydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb25BdE9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFRvdWNoR2VzdHVyZXNdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS50b3VjaEdlc3R1cmVzIHx8ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmNvbnRlbnQgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VEZXNjcmlwdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5kZXNjcmlwdGlvbiB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLnBvc2l0aW9uIHx8ICdhYm92ZSBhZnRlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5zaXplIHx8ICdtZWRpdW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZU92ZXJsYXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkub3ZlcmxhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuaGlkZGVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25BY3Rpb25DbGljaygkZXZlbnQsIGJ0biwgcm93RGF0YSlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm10eC1ncmlkLWljb25cIiAqbmdJZj1cImJ0bi5pY29uXCI+e3tidG4uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7YnRuLnRleHQgfCB0b09ic2VydmFibGUgfCBhc3luY319PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ljb24nXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW2NvbG9yXT1cImJ0bi5jb2xvciB8fCAncHJpbWFyeSdcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnbXR4LWdyaWQtYWN0aW9uLWJ1dHRvbicsIGJ0bi5jbGFzcyB8fCAnJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0biB8IGNlbGxBY3Rpb25EaXNhYmxlOiByb3dEYXRhOiByb3dDaGFuZ2VSZWNvcmQ6IHJvd0NoYW5nZVJlY29yZD8uY3VycmVudFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkubWVzc2FnZSB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwQ2xhc3NdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcEhpZGVEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmhpZGVEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFNob3dEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnNob3dEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb24gfHwgJ2JlbG93J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW5dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbkF0T3JpZ2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwVG91Y2hHZXN0dXJlc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnRvdWNoR2VzdHVyZXMgfHwgJ2F1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuY29udGVudCB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZURlc2NyaXB0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmRlc2NyaXB0aW9uIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlQ29sb3JdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkucG9zaXRpb24gfHwgJ2Fib3ZlIGFmdGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VTaXplXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLnNpemUgfHwgJ21lZGl1bSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlT3ZlcmxhcF09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5vdmVybGFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZURpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vbkFjdGlvbkNsaWNrKCRldmVudCwgYnRuLCByb3dEYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXR4LWdyaWQtaWNvblwiPnt7YnRuLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInZmFiJ1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWZhYiBbY29sb3JdPVwiYnRuLmNvbG9yIHx8ICdwcmltYXJ5J1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiWydtdHgtZ3JpZC1hY3Rpb24tYnV0dG9uJywgYnRuLmNsYXNzIHx8ICcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuIHwgY2VsbEFjdGlvbkRpc2FibGU6IHJvd0RhdGE6IHJvd0NoYW5nZVJlY29yZDogcm93Q2hhbmdlUmVjb3JkPy5jdXJyZW50VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5tZXNzYWdlIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwSGlkZURlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuaGlkZURlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuc2hvd0RlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbiB8fCAnYmVsb3cnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uQXRPcmlnaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBUb3VjaEdlc3R1cmVzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkudG91Y2hHZXN0dXJlcyB8fCAnYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb250ZW50IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGVzY3JpcHRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGVzY3JpcHRpb24gfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5wb3NpdGlvbiB8fCAnYWJvdmUgYWZ0ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuc2l6ZSB8fCAnbWVkaXVtJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VPdmVybGFwXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLm92ZXJsYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uQWN0aW9uQ2xpY2soJGV2ZW50LCBidG4sIHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtdHgtZ3JpZC1pY29uXCI+e3tidG4uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidtaW5pLWZhYidcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1taW5pLWZhYiBbY29sb3JdPVwiYnRuLmNvbG9yIHx8ICdwcmltYXJ5J1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiWydtdHgtZ3JpZC1hY3Rpb24tYnV0dG9uJywgYnRuLmNsYXNzIHx8ICcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuIHwgY2VsbEFjdGlvbkRpc2FibGU6IHJvd0RhdGE6IHJvd0NoYW5nZVJlY29yZDogcm93Q2hhbmdlUmVjb3JkPy5jdXJyZW50VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5tZXNzYWdlIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwSGlkZURlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuaGlkZURlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuc2hvd0RlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbiB8fCAnYmVsb3cnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uQXRPcmlnaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBUb3VjaEdlc3R1cmVzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkudG91Y2hHZXN0dXJlcyB8fCAnYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb250ZW50IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGVzY3JpcHRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGVzY3JpcHRpb24gfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5wb3NpdGlvbiB8fCAnYWJvdmUgYWZ0ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuc2l6ZSB8fCAnbWVkaXVtJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VPdmVybGFwXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLm92ZXJsYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uQWN0aW9uQ2xpY2soJGV2ZW50LCBidG4sIHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtdHgtZ3JpZC1pY29uXCI+e3tidG4uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gW2NvbG9yXT1cImJ0bi5jb2xvciB8fCAncHJpbWFyeSdcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnbXR4LWdyaWQtYWN0aW9uLWJ1dHRvbicsIGJ0bi5jbGFzcyB8fCAnJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0biB8IGNlbGxBY3Rpb25EaXNhYmxlOiByb3dEYXRhOiByb3dDaGFuZ2VSZWNvcmQ6IHJvd0NoYW5nZVJlY29yZD8uY3VycmVudFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkubWVzc2FnZSB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwQ2xhc3NdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcEhpZGVEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmhpZGVEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFNob3dEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnNob3dEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb24gfHwgJ2JlbG93J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW5dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbkF0T3JpZ2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwVG91Y2hHZXN0dXJlc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnRvdWNoR2VzdHVyZXMgfHwgJ2F1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuY29udGVudCB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZURlc2NyaXB0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmRlc2NyaXB0aW9uIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlQ29sb3JdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkucG9zaXRpb24gfHwgJ2Fib3ZlIGFmdGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VTaXplXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLnNpemUgfHwgJ21lZGl1bSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlT3ZlcmxhcF09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5vdmVybGFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZURpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vbkFjdGlvbkNsaWNrKCRldmVudCwgYnRuLCByb3dEYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXR4LWdyaWQtaWNvblwiICpuZ0lmPVwiYnRuLmljb25cIj57e2J0bi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3tidG4udGV4dCB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIFRhZyAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid0YWcnXCI+XHJcbiAgICAgIDxtYXQtY2hpcC1saXN0Ym94ICpuZ0lmPVwiY29sRGVmLnRhZyAmJiBjb2xEZWYudGFnW192YWx1ZV07IGVsc2UgdGFnRW1wdHlUcGxcIj5cclxuICAgICAgICA8bWF0LWNoaXAgY29sb3I9XCJwcmltYXJ5XCIgW25nQ2xhc3NdPVwiWydiZy0nICsgY29sRGVmLnRhZ1tfdmFsdWVdLmNvbG9yXVwiPlxyXG4gICAgICAgICAge3tjb2xEZWYudGFnW192YWx1ZV0udGV4dH19XHJcbiAgICAgICAgPC9tYXQtY2hpcD5cclxuICAgICAgPC9tYXQtY2hpcC1saXN0Ym94PlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3RhZ0VtcHR5VHBsPnt7X3ZhbHVlfX08L25nLXRlbXBsYXRlPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIExpbmsgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInbGluaydcIj5cclxuICAgICAgPGEgW2hyZWZdPVwiX3ZhbHVlXCIgdGFyZ2V0PVwiX2JsYW5rXCI+e3tfdmFsdWV9fTwvYT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBJbWFnZSAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidpbWFnZSdcIj5cclxuICAgICAgPGltZyBjbGFzcz1cIm10eC1ncmlkLWltZ1wiIG10eC1ncmlkLWltYWdlLXByZXZpZXcgW3NyY109XCJfdmFsdWVcIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBCb29sZWFuIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XHJcbiAgICAgIDxzcGFuIFt0aXRsZV09XCJfZ2V0VG9vbHRpcChfdmFsdWUpXCI+e3tfZ2V0VGV4dChfdmFsdWUpfX08L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gTnVtYmVyIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF92YWx1ZSB8IG51bWJlcjogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpZ2l0c0luZm86XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpXCI+XHJcbiAgICAgICAge3tfZ2V0VGV4dChfdmFsdWUgfCBudW1iZXI6IGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvOlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIEN1cnJlbmN5IC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX3ZhbHVlIHwgY3VycmVuY3k6IGNvbERlZi50eXBlUGFyYW1ldGVyPy5jdXJyZW5jeUNvZGU6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaXNwbGF5OlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZGlnaXRzSW5mbzpcclxuICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSlcIj5cclxuICAgICAgICB7e19nZXRUZXh0KF92YWx1ZSB8IGN1cnJlbmN5OiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uY3VycmVuY3lDb2RlOlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaXNwbGF5OlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvOlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIFBlcmNlbnQgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGVyY2VudCdcIj5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF92YWx1ZSB8IHBlcmNlbnQ6IGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvOlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKVwiPlxyXG4gICAgICAgIHt7X2dldFRleHQoX3ZhbHVlIHwgcGVyY2VudDogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpZ2l0c0luZm86XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSl9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gRGF0ZSAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX3ZhbHVlIHwgZGF0ZTogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmZvcm1hdDpcclxuICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LnRpbWV6b25lOlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKVwiPlxyXG4gICAgICAgIHt7X2dldFRleHQoX3ZhbHVlIHwgZGF0ZTogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmZvcm1hdDpcclxuICAgICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8udGltZXpvbmU6XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSl9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gRGVmYXVsdCAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF92YWx1ZSlcIj57e19nZXRUZXh0KF92YWx1ZSl9fTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2V4dGVuc2lvbnMvZ3JpZC9jZWxsLnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvZXh0ZW5zaW9ucy9ncmlkL2NlbGwuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osS0FBSyxFQU1MLE1BQU0sRUFDTixpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7O0FBWXBDLE1BQU0sT0FBTyxXQUFXO0lBc0J0QixJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxZQUNVLE9BQWtCLEVBQ2xCLE1BQW9CLEVBQ3BCLFFBQXlCLEVBQ3pCLGtCQUFxQztRQUhyQyxZQUFPLEdBQVAsT0FBTyxDQUFXO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQWM7UUFDcEIsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTdCL0MsZUFBZTtRQUNOLFlBQU8sR0FBd0IsRUFBRSxDQUFDO1FBSzNDLGlCQUFpQjtRQUNSLFNBQUksR0FBVSxFQUFFLENBQUM7UUFFMUIsMkJBQTJCO1FBQ2xCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFekIsMkRBQTJEO1FBQ2xELGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBRTFCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQXFDLENBQUM7SUFlN0UsQ0FBQztJQUVKLFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FB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QixJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLElBQUksT0FBTztxQkFDcEM7aUJBQ0Y7YUFDRixDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RCO0lBQ0gsQ0FBQztpSUEvRlUsV0FBVztxSEFBWCxXQUFXLDZPQzVCeEIsaXpqQkF1UUE7OzJGRDNPYSxXQUFXO2tCQVJ2QixTQUFTOytCQUNFLGVBQWUsWUFDZixhQUFhLGlCQUdSLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU07eUxBSXRDLE9BQU87c0JBQWYsS0FBSztnQkFHRyxNQUFNO3NCQUFkLEtBQUs7Z0JBR0csSUFBSTtzQkFBWixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRG9DaGVjayxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgS2V5VmFsdWVDaGFuZ2VSZWNvcmQsXG4gIEtleVZhbHVlQ2hhbmdlcyxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIEtleVZhbHVlRGlmZmVycyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE10eERpYWxvZyB9IGZyb20gJ0BuZy1tYXRlcm8vZXh0ZW5zaW9ucy9kaWFsb2cnO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNdHhHcmlkVXRpbHMgfSBmcm9tICcuL2dyaWQtdXRpbHMnO1xuaW1wb3J0IHsgTXR4R3JpZENvbHVtbiwgTXR4R3JpZENvbHVtbkJ1dHRvbiB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ210eC1ncmlkLWNlbGwnLFxuICBleHBvcnRBczogJ210eEdyaWRDZWxsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NlbGwuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NlbGwuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTXR4R3JpZENlbGwgaW1wbGVtZW50cyBPbkluaXQsIERvQ2hlY2sge1xuICAvKiogUm93IGRhdGEgKi9cbiAgQElucHV0KCkgcm93RGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIC8qKiBDb2x1bW4gZGVmaW5pdGlvbiAqL1xuICBASW5wdXQoKSBjb2xEZWYhOiBNdHhHcmlkQ29sdW1uO1xuXG4gIC8qKiBUYWJsZSBkYXRhICovXG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG5cbiAgLyoqIFdoZXRoZXIgc2hvdyBzdW1tYXJ5ICovXG4gIEBJbnB1dCgpIHN1bW1hcnkgPSBmYWxzZTtcblxuICAvKiogUGxhY2Vob2xkZXIgZm9yIHRoZSBlbXB0eSB2YWx1ZSAoYG51bGxgLCBgJydgLCBgW11gKSAqL1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJy0tJztcblxuICBAT3V0cHV0KCkgcm93RGF0YUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8S2V5VmFsdWVDaGFuZ2VSZWNvcmQ8c3RyaW5nLCBhbnk+PigpO1xuXG4gIHByaXZhdGUgcm93RGF0YURpZmZlcj86IEtleVZhbHVlRGlmZmVyPHN0cmluZywgYW55PjtcblxuICByb3dDaGFuZ2VSZWNvcmQ/OiBLZXlWYWx1ZUNoYW5nZVJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgZ2V0IF92YWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdXRpbHMuZ2V0Q2VsbFZhbHVlKHRoaXMucm93RGF0YSwgdGhpcy5jb2xEZWYpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfZGlhbG9nOiBNdHhEaWFsb2csXG4gICAgcHJpdmF0ZSBfdXRpbHM6IE10eEdyaWRVdGlscyxcbiAgICBwcml2YXRlIF9kaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsXG4gICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJvd0RhdGFEaWZmZXIgPSB0aGlzLl9kaWZmZXJzLmZpbmQodGhpcy5yb3dEYXRhKS5jcmVhdGUoKTtcbiAgfVxuXG4gIG5nRG9DaGVjaygpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VzID0gdGhpcy5yb3dEYXRhRGlmZmVyPy5kaWZmKHRoaXMucm93RGF0YSk7XG4gICAgaWYgKGNoYW5nZXMpIHtcbiAgICAgIHRoaXMuX2FwcGx5Q2hhbmdlcyhjaGFuZ2VzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hcHBseUNoYW5nZXMoY2hhbmdlczogS2V5VmFsdWVDaGFuZ2VzPHN0cmluZywgYW55Pikge1xuICAgIGNoYW5nZXMuZm9yRWFjaENoYW5nZWRJdGVtKHJlY29yZCA9PiB7XG4gICAgICB0aGlzLnJvd0NoYW5nZVJlY29yZCA9IHJlY29yZDtcbiAgICAgIHRoaXMucm93RGF0YUNoYW5nZS5lbWl0KHJlY29yZCk7XG4gICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIF9nZXRUZXh0KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/ICcnIDogdGhpcy5fdXRpbHMuaXNFbXB0eSh2YWx1ZSkgPyB0aGlzLnBsYWNlaG9sZGVyIDogdmFsdWU7XG4gIH1cblxuICBfZ2V0VG9vbHRpcCh2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuX3V0aWxzLmlzRW1wdHkodmFsdWUpID8gJycgOiB2YWx1ZTtcbiAgfVxuXG4gIF9nZXRGb3JtYXR0ZXJUb29sdGlwKHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5fdXRpbHMuaXNDb250YWluSFRNTCh2YWx1ZSkgfHwgdGhpcy5fdXRpbHMuaXNFbXB0eSh2YWx1ZSkgPyAnJyA6IHZhbHVlO1xuICB9XG5cbiAgX29uQWN0aW9uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIGJ0bjogTXR4R3JpZENvbHVtbkJ1dHRvbiwgcm93RGF0YTogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodHlwZW9mIGJ0bi5wb3AgPT09ICdzdHJpbmcnIHx8IGlzT2JzZXJ2YWJsZShidG4ucG9wKSkge1xuICAgICAgdGhpcy5fZGlhbG9nLm9wZW4oe1xuICAgICAgICB0aXRsZTogYnRuLnBvcCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIHsgY29sb3I6ICdwcmltYXJ5JywgdGV4dDogJ09LJywgb25DbGljazogKCkgPT4gYnRuLmNsaWNrPy4ocm93RGF0YSkgfHwge30gfSxcbiAgICAgICAgICB7IHRleHQ6ICdDTE9TRScgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGJ0bi5wb3AgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLl9kaWFsb2cub3Blbih7XG4gICAgICAgIHRpdGxlOiBidG4ucG9wPy50aXRsZSxcbiAgICAgICAgZGVzY3JpcHRpb246IGJ0bi5wb3A/LmRlc2NyaXB0aW9uLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6IGJ0bi5wb3A/Lm9rQ29sb3IgfHwgJ3ByaW1hcnknLFxuICAgICAgICAgICAgdGV4dDogYnRuLnBvcD8ub2tUZXh0IHx8ICdPSycsXG4gICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBidG4uY2xpY2s/Lihyb3dEYXRhKSB8fCB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbG9yOiBidG4ucG9wPy5jbG9zZUNvbG9yLFxuICAgICAgICAgICAgdGV4dDogYnRuLnBvcD8uY2xvc2VUZXh0IHx8ICdDTE9TRScsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBidG4uY2xpY2s/Lihyb3dEYXRhKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxzcGFuICpuZ0lmPVwic3VtbWFyeTsgZWxzZSBjdXN0b21DZWxsRm9ybWF0dGluZ1RwbFwiXHJcbiAgICAgIFt0aXRsZV09XCJfZ2V0Rm9ybWF0dGVyVG9vbHRpcCgoZGF0YSB8IGNlbGxTdW1tYXJ5OiBjb2xEZWYpKVwiXHJcbiAgICAgIFtpbm5lckhUTUxdPVwiX2dldFRleHQoKGRhdGEgfCBjZWxsU3VtbWFyeTogY29sRGVmKSlcIj5cclxuPC9zcGFuPlxyXG5cclxuPCEtLSBDdXN0b20gZm9ybWF0dGluZyAtLT5cclxuPG5nLXRlbXBsYXRlICNjdXN0b21DZWxsRm9ybWF0dGluZ1RwbD5cclxuICA8c3BhbiAqbmdJZj1cImNvbERlZi5mb3JtYXR0ZXI7IGVsc2UgZGVmYXVsdENlbGxGb3JtYXR0aW5nVHBsXCJcclxuICAgICAgICBbdGl0bGVdPVwiX2dldEZvcm1hdHRlclRvb2x0aXAoY29sRGVmLmZvcm1hdHRlcihyb3dEYXRhLCBjb2xEZWYpKVwiXHJcbiAgICAgICAgW2lubmVySFRNTF09XCJfZ2V0VGV4dChjb2xEZWYuZm9ybWF0dGVyKHJvd0RhdGEsIGNvbERlZikpXCI+XHJcbiAgPC9zcGFuPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBEZWZhdWx0IGZvcm1hdHRpbmcgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGxGb3JtYXR0aW5nVHBsPlxyXG4gIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbERlZi50eXBlXCI+XHJcbiAgICA8IS0tIEJ1dHRvbnMgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInYnV0dG9uJ1wiPlxyXG4gICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGJ0biBvZiBjb2xEZWYuYnV0dG9ucyB8IGNlbGxBY3Rpb25zOiByb3dEYXRhOiByb3dDaGFuZ2VSZWNvcmQ6IHJvd0NoYW5nZVJlY29yZD8uY3VycmVudFZhbHVlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFidG4uaWlmIHx8IGJ0bi5paWYocm93RGF0YSlcIj5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImJ0bi50eXBlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidyYWlzZWQnXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBbY29sb3JdPVwiYnRuLmNvbG9yIHx8ICdwcmltYXJ5J1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiWydtdHgtZ3JpZC1hY3Rpb24tYnV0dG9uJywgYnRuLmNsYXNzIHx8ICcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuIHwgY2VsbEFjdGlvbkRpc2FibGU6IHJvd0RhdGE6IHJvd0NoYW5nZVJlY29yZDogcm93Q2hhbmdlUmVjb3JkPy5jdXJyZW50VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5tZXNzYWdlIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwSGlkZURlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuaGlkZURlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuc2hvd0RlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbiB8fCAnYmVsb3cnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uQXRPcmlnaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBUb3VjaEdlc3R1cmVzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkudG91Y2hHZXN0dXJlcyB8fCAnYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb250ZW50IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGVzY3JpcHRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGVzY3JpcHRpb24gfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5wb3NpdGlvbiB8fCAnYWJvdmUgYWZ0ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuc2l6ZSB8fCAnbWVkaXVtJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VPdmVybGFwXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLm92ZXJsYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uQWN0aW9uQ2xpY2soJGV2ZW50LCBidG4sIHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtdHgtZ3JpZC1pY29uXCIgKm5nSWY9XCJidG4uaWNvblwiPnt7YnRuLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2J0bi50ZXh0IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidzdHJva2VkJ1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIFtjb2xvcl09XCJidG4uY29sb3IgfHwgJ3ByaW1hcnknXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbJ210eC1ncmlkLWFjdGlvbi1idXR0b24nLCBidG4uY2xhc3MgfHwgJyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4gfCBjZWxsQWN0aW9uRGlzYWJsZTogcm93RGF0YTogcm93Q2hhbmdlUmVjb3JkOiByb3dDaGFuZ2VSZWNvcmQ/LmN1cnJlbnRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLm1lc3NhZ2UgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBIaWRlRGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5oaWRlRGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5zaG93RGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uIHx8ICdiZWxvdydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb25BdE9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFRvdWNoR2VzdHVyZXNdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS50b3VjaEdlc3R1cmVzIHx8ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmNvbnRlbnQgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VEZXNjcmlwdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5kZXNjcmlwdGlvbiB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLnBvc2l0aW9uIHx8ICdhYm92ZSBhZnRlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5zaXplIHx8ICdtZWRpdW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZU92ZXJsYXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkub3ZlcmxhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuaGlkZGVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25BY3Rpb25DbGljaygkZXZlbnQsIGJ0biwgcm93RGF0YSlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm10eC1ncmlkLWljb25cIiAqbmdJZj1cImJ0bi5pY29uXCI+e3tidG4uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7YnRuLnRleHQgfCB0b09ic2VydmFibGUgfCBhc3luY319PC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ZsYXQnXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtZmxhdC1idXR0b24gW2NvbG9yXT1cImJ0bi5jb2xvciB8fCAncHJpbWFyeSdcIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIlsnbXR4LWdyaWQtYWN0aW9uLWJ1dHRvbicsIGJ0bi5jbGFzcyB8fCAnJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImJ0biB8IGNlbGxBY3Rpb25EaXNhYmxlOiByb3dEYXRhOiByb3dDaGFuZ2VSZWNvcmQ6IHJvd0NoYW5nZVJlY29yZD8uY3VycmVudFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkubWVzc2FnZSB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwQ2xhc3NdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcEhpZGVEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmhpZGVEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFNob3dEZWxheV09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnNob3dEZWxheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb24gfHwgJ2JlbG93J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFBvc2l0aW9uQXRPcmlnaW5dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbkF0T3JpZ2luXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwVG91Y2hHZXN0dXJlc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnRvdWNoR2VzdHVyZXMgfHwgJ2F1dG8nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuY29udGVudCB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZURlc2NyaXB0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmRlc2NyaXB0aW9uIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlQ29sb3JdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuY29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkucG9zaXRpb24gfHwgJ2Fib3ZlIGFmdGVyJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VTaXplXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLnNpemUgfHwgJ21lZGl1bSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlT3ZlcmxhcF09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5vdmVybGFwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZURpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZUhpZGRlbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5oaWRkZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIl9vbkFjdGlvbkNsaWNrKCRldmVudCwgYnRuLCByb3dEYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibXR4LWdyaWQtaWNvblwiICpuZ0lmPVwiYnRuLmljb25cIj57e2J0bi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3tidG4udGV4dCB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInaWNvbidcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbY29sb3JdPVwiYnRuLmNvbG9yIHx8ICdwcmltYXJ5J1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiWydtdHgtZ3JpZC1hY3Rpb24tYnV0dG9uJywgYnRuLmNsYXNzIHx8ICcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuIHwgY2VsbEFjdGlvbkRpc2FibGU6IHJvd0RhdGE6IHJvd0NoYW5nZVJlY29yZDogcm93Q2hhbmdlUmVjb3JkPy5jdXJyZW50VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5tZXNzYWdlIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwSGlkZURlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuaGlkZURlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuc2hvd0RlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbiB8fCAnYmVsb3cnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uQXRPcmlnaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBUb3VjaEdlc3R1cmVzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkudG91Y2hHZXN0dXJlcyB8fCAnYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb250ZW50IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGVzY3JpcHRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGVzY3JpcHRpb24gfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5wb3NpdGlvbiB8fCAnYWJvdmUgYWZ0ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuc2l6ZSB8fCAnbWVkaXVtJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VPdmVybGFwXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLm92ZXJsYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uQWN0aW9uQ2xpY2soJGV2ZW50LCBidG4sIHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtdHgtZ3JpZC1pY29uXCI+e3tidG4uaWNvbn19PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidmYWInXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtZmFiIFtjb2xvcl09XCJidG4uY29sb3IgfHwgJ3ByaW1hcnknXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbJ210eC1ncmlkLWFjdGlvbi1idXR0b24nLCBidG4uY2xhc3MgfHwgJyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4gfCBjZWxsQWN0aW9uRGlzYWJsZTogcm93RGF0YTogcm93Q2hhbmdlUmVjb3JkOiByb3dDaGFuZ2VSZWNvcmQ/LmN1cnJlbnRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLm1lc3NhZ2UgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBIaWRlRGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5oaWRlRGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5zaG93RGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uIHx8ICdiZWxvdydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb25BdE9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFRvdWNoR2VzdHVyZXNdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS50b3VjaEdlc3R1cmVzIHx8ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmNvbnRlbnQgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VEZXNjcmlwdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5kZXNjcmlwdGlvbiB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLnBvc2l0aW9uIHx8ICdhYm92ZSBhZnRlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5zaXplIHx8ICdtZWRpdW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZU92ZXJsYXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkub3ZlcmxhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuaGlkZGVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25BY3Rpb25DbGljaygkZXZlbnQsIGJ0biwgcm93RGF0YSlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm10eC1ncmlkLWljb25cIj57e2J0bi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ21pbmktZmFiJ1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LW1pbmktZmFiIFtjb2xvcl09XCJidG4uY29sb3IgfHwgJ3ByaW1hcnknXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJbJ210eC1ncmlkLWFjdGlvbi1idXR0b24nLCBidG4uY2xhc3MgfHwgJyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidG4gfCBjZWxsQWN0aW9uRGlzYWJsZTogcm93RGF0YTogcm93Q2hhbmdlUmVjb3JkOiByb3dDaGFuZ2VSZWNvcmQ/LmN1cnJlbnRWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLm1lc3NhZ2UgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcENsYXNzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBIaWRlRGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5oaWRlRGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBTaG93RGVsYXldPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5zaG93RGVsYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uIHx8ICdiZWxvdydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBQb3NpdGlvbkF0T3JpZ2luXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkucG9zaXRpb25BdE9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcFRvdWNoR2VzdHVyZXNdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS50b3VjaEdlc3R1cmVzIHx8ICdhdXRvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcERpc2FibGVkXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmNvbnRlbnQgfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VEZXNjcmlwdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5kZXNjcmlwdGlvbiB8IHRvT2JzZXJ2YWJsZSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZUNvbG9yXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVBvc2l0aW9uXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLnBvc2l0aW9uIHx8ICdhYm92ZSBhZnRlcidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlU2l6ZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5zaXplIHx8ICdtZWRpdW0nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZU92ZXJsYXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkub3ZlcmxhcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VIaWRkZW5dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuaGlkZGVuXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJfb25BY3Rpb25DbGljaygkZXZlbnQsIGJ0biwgcm93RGF0YSlcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm10eC1ncmlkLWljb25cIj57e2J0bi5pY29ufX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbY29sb3JdPVwiYnRuLmNvbG9yIHx8ICdwcmltYXJ5J1wiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiWydtdHgtZ3JpZC1hY3Rpb24tYnV0dG9uJywgYnRuLmNsYXNzIHx8ICcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYnRuIHwgY2VsbEFjdGlvbkRpc2FibGU6IHJvd0RhdGE6IHJvd0NoYW5nZVJlY29yZDogcm93Q2hhbmdlUmVjb3JkPy5jdXJyZW50VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5tZXNzYWdlIHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBDbGFzc109XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwSGlkZURlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuaGlkZURlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwU2hvd0RlbGF5XT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkuc2hvd0RlbGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25Ub29sdGlwKS5wb3NpdGlvbiB8fCAnYmVsb3cnXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwUG9zaXRpb25BdE9yaWdpbl09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLnBvc2l0aW9uQXRPcmlnaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBUb3VjaEdlc3R1cmVzXT1cIihidG4gfCBjZWxsQWN0aW9uVG9vbHRpcCkudG91Y2hHZXN0dXJlcyB8fCAnYXV0bydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIoYnRuIHwgY2VsbEFjdGlvblRvb2x0aXApLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZV09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb250ZW50IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGVzY3JpcHRpb25dPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGVzY3JpcHRpb24gfCB0b09ic2VydmFibGUgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VDb2xvcl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5jb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VQb3NpdGlvbl09XCIoYnRuIHwgY2VsbEFjdGlvbkJhZGdlKS5wb3NpdGlvbiB8fCAnYWJvdmUgYWZ0ZXInXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFttYXRCYWRnZVNpemVdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuc2l6ZSB8fCAnbWVkaXVtJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbWF0QmFkZ2VPdmVybGFwXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLm92ZXJsYXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlRGlzYWJsZWRdPVwiKGJ0biB8IGNlbGxBY3Rpb25CYWRnZSkuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW21hdEJhZGdlSGlkZGVuXT1cIihidG4gfCBjZWxsQWN0aW9uQmFkZ2UpLmhpZGRlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiX29uQWN0aW9uQ2xpY2soJGV2ZW50LCBidG4sIHJvd0RhdGEpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtdHgtZ3JpZC1pY29uXCIgKm5nSWY9XCJidG4uaWNvblwiPnt7YnRuLmljb259fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj57e2J0bi50ZXh0IHwgdG9PYnNlcnZhYmxlIHwgYXN5bmN9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gVGFnIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3RhZydcIj5cclxuICAgICAgPG1hdC1jaGlwLWxpc3Rib3ggKm5nSWY9XCJjb2xEZWYudGFnICYmIGNvbERlZi50YWdbX3ZhbHVlXTsgZWxzZSB0YWdFbXB0eVRwbFwiPlxyXG4gICAgICAgIDxtYXQtY2hpcCBjb2xvcj1cInByaW1hcnlcIiBbbmdDbGFzc109XCJbJ2JnLScgKyBjb2xEZWYudGFnW192YWx1ZV0uY29sb3JdXCI+XHJcbiAgICAgICAgICB7e2NvbERlZi50YWdbX3ZhbHVlXS50ZXh0fX1cclxuICAgICAgICA8L21hdC1jaGlwPlxyXG4gICAgICA8L21hdC1jaGlwLWxpc3Rib3g+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdGFnRW1wdHlUcGw+e3tfdmFsdWV9fTwvbmctdGVtcGxhdGU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gTGluayAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidsaW5rJ1wiPlxyXG4gICAgICA8YSBbaHJlZl09XCJfdmFsdWVcIiB0YXJnZXQ9XCJfYmxhbmtcIj57e192YWx1ZX19PC9hPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIEltYWdlIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2ltYWdlJ1wiPlxyXG4gICAgICA8aW1nIGNsYXNzPVwibXR4LWdyaWQtaW1nXCIgW3NyY109XCJfdmFsdWVcIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPCEtLSBCb29sZWFuIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2Jvb2xlYW4nXCI+XHJcbiAgICAgIDxzcGFuIFt0aXRsZV09XCJfZ2V0VG9vbHRpcChfdmFsdWUpXCI+e3tfZ2V0VGV4dChfdmFsdWUpfX08L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gTnVtYmVyIC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF92YWx1ZSB8IG51bWJlcjogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpZ2l0c0luZm86XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpXCI+XHJcbiAgICAgICAge3tfZ2V0VGV4dChfdmFsdWUgfCBudW1iZXI6IGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvOlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIEN1cnJlbmN5IC0tPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX3ZhbHVlIHwgY3VycmVuY3k6IGNvbERlZi50eXBlUGFyYW1ldGVyPy5jdXJyZW5jeUNvZGU6XHJcbiAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaXNwbGF5OlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8uZGlnaXRzSW5mbzpcclxuICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSlcIj5cclxuICAgICAgICB7e19nZXRUZXh0KF92YWx1ZSB8IGN1cnJlbmN5OiBjb2xEZWYudHlwZVBhcmFtZXRlcj8uY3VycmVuY3lDb2RlOlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaXNwbGF5OlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvOlxyXG4gICAgICAgIGNvbERlZi50eXBlUGFyYW1ldGVyPy5sb2NhbGUpfX1cclxuICAgICAgPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IS0tIFBlcmNlbnQgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCIncGVyY2VudCdcIj5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF92YWx1ZSB8IHBlcmNlbnQ6IGNvbERlZi50eXBlUGFyYW1ldGVyPy5kaWdpdHNJbmZvOlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKVwiPlxyXG4gICAgICAgIHt7X2dldFRleHQoX3ZhbHVlIHwgcGVyY2VudDogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmRpZ2l0c0luZm86XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSl9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gRGF0ZSAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICA8c3BhbiBbdGl0bGVdPVwiX2dldFRvb2x0aXAoX3ZhbHVlIHwgZGF0ZTogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmZvcm1hdDpcclxuICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LnRpbWV6b25lOlxyXG4gICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8ubG9jYWxlKVwiPlxyXG4gICAgICAgIHt7X2dldFRleHQoX3ZhbHVlIHwgZGF0ZTogY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmZvcm1hdDpcclxuICAgICAgICBjb2xEZWYudHlwZVBhcmFtZXRlcj8udGltZXpvbmU6XHJcbiAgICAgICAgY29sRGVmLnR5cGVQYXJhbWV0ZXI/LmxvY2FsZSl9fVxyXG4gICAgICA8L3NwYW4+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwhLS0gRGVmYXVsdCAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgPHNwYW4gW3RpdGxlXT1cIl9nZXRUb29sdGlwKF92YWx1ZSlcIj57e19nZXRUZXh0KF92YWx1ZSl9fTwvc3Bhbj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=