td-stylekit 27.3.0 → 28.0.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.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,22 @@
1
+ # [28.0.0](https://github.com/treasure-data/td-stylekit/compare/v27.3.1...v28.0.0) (2022-09-27)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * Don't expose Theme type externally ([#1337](https://github.com/treasure-data/td-stylekit/issues/1337)) ([65d64c0](https://github.com/treasure-data/td-stylekit/commit/65d64c0))
7
+
8
+
9
+ ### BREAKING CHANGES
10
+
11
+ * getLongestOptionLength no longer accepts Theme. Instead it accepts a style object with fontFamily as the only valid property.
12
+
13
+ ## [27.3.1](https://github.com/treasure-data/td-stylekit/compare/v27.3.0...v27.3.1) (2022-09-26)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * **CON-11126:** Datagrid should flatmap children ([#1336](https://github.com/treasure-data/td-stylekit/issues/1336)) ([24ca052](https://github.com/treasure-data/td-stylekit/commit/24ca052))
19
+
1
20
  # [27.3.0](https://github.com/treasure-data/td-stylekit/compare/v27.2.0...v27.3.0) (2022-09-26)
2
21
 
3
22
 
@@ -33,7 +33,7 @@ export declare type SelectableType = 'single' | 'multi';
33
33
  declare type ColumnFunction = (args: BasicColumnMappedProps) => React.ReactNode;
34
34
  export declare type DataGridProps = {
35
35
  /** Functions that create react virtualized Columns. Default column is exposed as DataGrid.Column. */
36
- children: ColumnFunction | Array<ColumnFunction>;
36
+ children: ColumnFunction | (ColumnFunction | ColumnFunction[])[];
37
37
  /** Instrumentation */
38
38
  'data-instrumentation'?: string;
39
39
  /** Called during the onContextMenu event of each row. */
@@ -397,7 +397,7 @@ var DataGrid = /*#__PURE__*/function (_Component) {
397
397
  };
398
398
 
399
399
  var children = IsArray(_this.props.children) ? _this.props.children : [_this.props.children];
400
- var validChildren = children.filter(function (child) {
400
+ var validChildren = children.flat().filter(function (child) {
401
401
  return typeof child === 'function';
402
402
  });
403
403
  return validChildren.map(function (child, index) {
@@ -677,7 +677,7 @@ var DataGrid = /*#__PURE__*/function (_Component) {
677
677
  css: /*#__PURE__*/(0, _react.css)({
678
678
  width: width,
679
679
  height: height
680
- }, process.env.NODE_ENV === "production" ? "" : ";label:render;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9EYXRhR3JpZC9EYXRhR3JpZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb3FCUSIsImZpbGUiOiIuLi8uLi8uLi9zcmMvRGF0YUdyaWQvRGF0YUdyaWQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7XG4gIEluZmluaXRlTG9hZGVyLFxuICBUYWJsZSxcbiAgU29ydERpcmVjdGlvbixcbiAgVGFibGVSb3dQcm9wc1xufSBmcm9tICdyZWFjdC12aXJ0dWFsaXplZCdcbmltcG9ydCB0eXBlIHtcbiAgU29ydERpcmVjdGlvblR5cGUsXG4gIFRhYmxlUHJvcHMsXG4gIEluZGV4UmFuZ2UsXG4gIEluZGV4LFxuICBSb3dNb3VzZUV2ZW50SGFuZGxlclBhcmFtc1xufSBmcm9tICdyZWFjdC12aXJ0dWFsaXplZCdcbmltcG9ydCAqIGFzIEVsZW1lbnRzIGZyb20gJy4vZWxlbWVudHMnXG5pbXBvcnQgKiBhcyBSZW5kZXJlcnMgZnJvbSAnLi9yZW5kZXJlcnMnXG5pbXBvcnQge1xuICBCYXNpY0NvbHVtbixcbiAgRm9jdXNhYmxlUm93LFxuICBJbnB1dENlbGwsXG4gIENvbGxhcHNpYmxlQ2VsbCxcbiAgU2Nyb2xsYWJsZVRhYmxlXG59IGZyb20gJy4vY29tcG9uZW50cydcbmltcG9ydCB7IENsb3NlV3JhcHBlciB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IGN1cnJ5IGZyb20gJ2xvZGFzaC5jdXJyeSdcbmltcG9ydCBpbmNsdWRlcyBmcm9tICdsb2Rhc2guaW5jbHVkZXMnXG5pbXBvcnQgbm9vcCBmcm9tICdsb2Rhc2gubm9vcCdcbmltcG9ydCByYW5nZSBmcm9tICdsb2Rhc2gucmFuZ2UnXG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnbG9kYXNoLnRocm90dGxlJ1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLnVuaXEnXG5pbXBvcnQgKiBhcyBkYXRhR3JpZFV0aWxzIGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7XG4gIEJhc2ljQ29sdW1uTWFwcGVkUHJvcHMsXG4gIEJhc2ljQ29sdW1uUHJvcHNcbn0gZnJvbSAnLi9jb21wb25lbnRzL0Jhc2ljQ29sdW1uJ1xuaW1wb3J0IHR5cGUgeyBMb2NhbGVTdHJpbmdzIH0gZnJvbSAnLi9jb25zdGFudHMnXG5cbmV4cG9ydCB0eXBlIG9uRmlsdGVyQXJndW1lbnRzID0ge1xuICBmaWx0ZXJzOiB7IFtkYXRhS2V5OiBzdHJpbmddOiBhbnkgfVxuICBzb3J0Qnk/OiBzdHJpbmdcbiAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb25UeXBlXG59XG5cbnR5cGUgYWN0aXZlQ29udGV4dE1lbnVTdGF0ZSA9IHtcbiAgdG9wOiBudW1iZXJcbiAgbGVmdDogbnVtYmVyXG4gIGluZGV4OiBudW1iZXJcbiAgcm93RGF0YTogYW55XG59XG5cbnR5cGUgY29udGV4dE1lbnVSZW5kZXJlckFyZ3VtZW50cyA9IHtcbiAgdG9wPzogbnVtYmVyXG4gIGxlZnQ/OiBudW1iZXJcbiAgaW5kZXg/OiBudW1iZXJcbiAgcm93RGF0YT86IGFueVxuICBzZWxlY3RlZFJvd3M6IEFycmF5PG51bWJlcj5cbiAgb25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBTZWxlY3RhYmxlVHlwZSA9ICdzaW5nbGUnIHwgJ211bHRpJ1xuXG50eXBlIENvbHVtbkZ1bmN0aW9uID0gKGFyZ3M6IEJhc2ljQ29sdW1uTWFwcGVkUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXG5leHBvcnQgdHlwZSBEYXRhR3JpZFByb3BzID0ge1xuICAvKiogRnVuY3Rpb25zIHRoYXQgY3JlYXRlIHJlYWN0IHZpcnR1YWxpemVkIENvbHVtbnMuIERlZmF1bHQgY29sdW1uIGlzIGV4cG9zZWQgYXMgRGF0YUdyaWQuQ29sdW1uLiAqL1xuICAvLyBDYW4gdGFrZSBhIHNpbmdsZSBjb2x1bW4gb3IgYW4gYXJyYXkgb2YgY29sdW1uc1xuICBjaGlsZHJlbjogQ29sdW1uRnVuY3Rpb24gfCBBcnJheTxDb2x1bW5GdW5jdGlvbj5cbiAgLyoqIEluc3RydW1lbnRhdGlvbiAqL1xuICAnZGF0YS1pbnN0cnVtZW50YXRpb24nPzogc3RyaW5nXG4gIC8qKiBDYWxsZWQgZHVyaW5nIHRoZSBvbkNvbnRleHRNZW51IGV2ZW50IG9mIGVhY2ggcm93LiAqL1xuICBjb250ZXh0TWVudVJlbmRlcmVyPzogKFxuICAgIGNvbnRleHRNZW51UmVuZGVyZXJBcmd1bWVudHM6IGNvbnRleHRNZW51UmVuZGVyZXJBcmd1bWVudHNcbiAgKSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqIENhbGxlZCB3aGVuIGEgY29sdW1uIGlzIGZpbHRlcmVkIG9yIHNvcnRlZC4gKi9cbiAgb25GaWx0ZXI6IChvbkZpbHRlckFyZ3VtZW50czogb25GaWx0ZXJBcmd1bWVudHMpID0+IHZvaWRcbiAgLyoqIENhbGxlZCB3aGVuIGEgY29sdW1uIGlzIHJlc2l6ZWQgYnkgdGhlIHVzZXIuIFBhc3NpbmcgdGhpcyBpbiBlbmFibGVzXG4gICAqIHJlc2l6ZSBoYW5kbGVzIG9uIHRoZSByaWdodCBlZGdlIG9mIHRoZSBoZWFkZXIgY2VsbHMuICovXG4gIG9uUmVzaXplPzogKG5ld1NpemVzOiBudW1iZXJbXSkgPT4gdm9pZFxuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHJvdyBzZWxlY3Rpb24gY2hhbmdlcy4gUmVjZWl2ZXMgYXJyYXkgb2YgaW5kaWNlcy4gKi9cbiAgb25TZWxlY3Q6IChpbmRleGVzOiBudW1iZXJbXSkgPT4gdm9pZFxuICAvKiogQ2FsbGVkIHdoZW4gdGhlIHJvdyBpcyBkb3VibGUgY2xpY2tlZC4gUmVjZWl2ZXMgaW5kZXguICovXG4gIG9uUm93RG91YmxlQ2xpY2s/OiAoaW5mbzogUm93TW91c2VFdmVudEhhbmRsZXJQYXJhbXMpID0+IHZvaWRcbiAgLyoqIEluZmluaXRlIGxvYWRpbmc6IEluZGljYXRlcyBtb3JlIHJvd3MgbmVlZCB0byBiZSBsb2FkZWQuICovXG4gIGhhc01vcmVSb3dzPzogYm9vbGVhblxuICAvKiogSW5maW5pdGUgbG9hZGluZzogQ2FsbGVkIHdoZW4gbW9yZSByb3dzIG5lZWQgdG8gYmUgbG9hZGVkLiAqL1xuICBsb2FkTW9yZVJvd3M/OiAocHJvcHM6IEluZGV4UmFuZ2UpID0+IFByb21pc2U8YW55PlxuICAvKiogQ291bnQgb2Ygcm93cyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGxvYWRlZC4gKi9cbiAgcm93Q291bnQ6IG51bWJlclxuICAvKiogUmVxdWlyZWQgYnkgcmVhY3QtdmlydHVhbGl6ZWQgdGFibGUuICovXG4gIHJvd0dldHRlcjogKHByb3BzOiB7IGluZGV4OiBudW1iZXIgfSkgPT4gYW55XG4gIC8qKiBXaGV0aGVyIHJvd3MgY2FuIGJlIHNlbGVjdGVkIChhbmQgaG93IG1hbnkpLiAqL1xuICBzZWxlY3RhYmxlPzogU2VsZWN0YWJsZVR5cGUgfCBmYWxzZVxuICAvKiogQXJyYXkgb2YgaW5kaWNlcyB0aGF0IHNob3VsZCBiZSBzZWxlY3RlZC4gT25seSB1c2VkIGlmIGBzZWxlY3RhYmxlYCBpcyBzZXQuICovXG4gIHNlbGVjdGVkUm93czogQXJyYXk8bnVtYmVyPlxuICAvKiogVGhlIGNvbHVtbiB5b3Ugd2FudCB0byBzb3J0ICovXG4gIHNvcnRCeT86IHN0cmluZ1xuICAvKiogVGhlIGRpcmVjdGlvbiBzb3J0aW5nIHNob3VsZCBiZSBkb25lICovXG4gIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uVHlwZVxuICAvKiogQSBtYXAgb2YgY29sdW1ucyB0byBmaWx0ZXIgZGF0YSAqL1xuICBmaWx0ZXJzPzogeyBbZGF0YUtleTogc3RyaW5nXTogYW55IH1cbiAgLyoqIFNldCB0aGUgd2lkdGggb2Ygc2Nyb2xsYWJsZSBjb250ZW50ICovXG4gIHNjcm9sbFdpZHRoPzogbnVtYmVyXG4gIHdpZHRoOiBudW1iZXJcbiAgaGVpZ2h0OiBudW1iZXJcbiAgLyoqIExvY2FsZSBzdHJpbmc6IGphLCBkZSwgZXMsIGtvLCBlbiwgZXRjLiAqL1xuICBsb2NhbGU/OiBzdHJpbmdcbiAgLyoqIExvY2FsZSBzdHJpbmdzIHRvIG92ZXJyaWRlIGVuIGZvciBsYW5ndWFnZSBpbiBsb2NhbGUgKi9cbiAgbG9jYWxlU3RyaW5ncz86IExvY2FsZVN0cmluZ3NcbiAgLyoqIGFsbG93IGV2ZW50cyB0byBwcm9wYWdhdGUgdG8gYSBjZWxsIG9uIHJvdyBzZWxlY3QgKi9cbiAgYWxsb3dSb3dFdmVudFBhc3N0aHJvdWdoPzogYm9vbGVhblxufSAmIFBhcnRpYWw8VGFibGVQcm9wcz5cblxudHlwZSBEYXRhR3JpZFN0YXRlID0ge1xuICBhY3RpdmVDb250ZXh0TWVudTogYWN0aXZlQ29udGV4dE1lbnVTdGF0ZSB8IG51bGxcbiAgZGlzYWJsZUtleWJvYXJkU2hvcnRjdXRzOiBib29sZWFuXG4gIGZvY3VzZWRSb3c6IG51bWJlciB8IG51bGxcbiAgc2VsZWN0aW5nOiBib29sZWFuXG4gIGxhc3RTZWxlY3RlZFJvdzogbnVtYmVyIHwgbnVsbFxufVxuXG50eXBlIEhhbmRsZUZpbHRlckFyZ3VtZW50cyA9IHtcbiAgc29ydEJ5Pzogc3RyaW5nXG4gIHNvcnREaXJlY3Rpb24/OiBTb3J0RGlyZWN0aW9uVHlwZVxuICBmaWx0ZXJzPzogYW55XG59XG5cbi8qKlxuICogQ29tcG9uZW50IGZvciBkaXNwbGF5aW5nIGRhdGEgaW4gYSBncmlkIHdpdGggc3VwcG9ydCBmb3IgdGhpbmdzIGxpa2VcbiAqIGZpbHRlcmluZywgc29ydGluZywgYW5kIGNvbnRleHQgbWVudXMuXG4gKlxuICogRGVwZW5kcyBvbiByZWFjdC12aXJ0dWFsaXplZC9zdHlsZXMuY3NzLlxuICpcbiAqIEZvciByZWFjdC12aXJ0dWFsaXplZCBUYWJsZSBkb2NzIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3QtdmlydHVhbGl6ZWQvYmxvYi9tYXN0ZXIvZG9jcy9UYWJsZS5tZFxuICpcbiAqL1xuY2xhc3MgRGF0YUdyaWQgZXh0ZW5kcyBDb21wb25lbnQ8RGF0YUdyaWRQcm9wcywgRGF0YUdyaWRTdGF0ZT4ge1xuICAvLyBleHBvc2Ugc3ViLWNvbXBvbmVudHNcbiAgc3RhdGljIENvbHVtbiA9IGN1cnJ5KEJhc2ljQ29sdW1uKVxuICBzdGF0aWMgU29ydERpcmVjdGlvbiA9IFNvcnREaXJlY3Rpb25cbiAgc3RhdGljIEVsZW1lbnRzID0gRWxlbWVudHNcbiAgc3RhdGljIElucHV0Q2VsbCA9IElucHV0Q2VsbFxuICBzdGF0aWMgQ29sbGFwc2libGVDZWxsID0gQ29sbGFwc2libGVDZWxsXG4gIHN0YXRpYyBSZW5kZXJlcnMgPSBSZW5kZXJlcnNcblxuICBzdGF0aWMgU0lOR0xFX1NFTEVDVDogU2VsZWN0YWJsZVR5cGUgPSAnc2luZ2xlJ1xuICBzdGF0aWMgTVVMVElfU0VMRUNUOiBTZWxlY3RhYmxlVHlwZSA9ICdtdWx0aSdcbiAgc3RhdGljIE1JTl9DT0xfV0lEVEggPSA1MFxuXG4gIHN0YXRpYyB1dGlscyA9IGRhdGFHcmlkVXRpbHNcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGxvYWRNb3JlUm93czogbm9vcCxcbiAgICBvblNlbGVjdDogbm9vcCxcbiAgICBvbkZpbHRlcjogbm9vcCxcbiAgICAnZGF0YS1pbnN0cnVtZW50YXRpb24nOiAnZGF0YWdyaWQnLFxuICAgIHNvcnRCeTogJycsXG4gICAgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvbi5BU0MsXG4gICAgZmlsdGVyczoge30sXG4gICAgc2VsZWN0ZWRSb3dzOiBbXSxcbiAgICBhbGxvd1Jvd0V2ZW50UGFzc3Rocm91Z2g6IGZhbHNlXG4gIH1cblxuICBzdGF0aWMgZGlzcGxheU5hbWUgPSAnRGF0YUdyaWQnXG5cbiAgc3RhdGU6IERhdGFHcmlkU3RhdGUgPSB7XG4gICAgYWN0aXZlQ29udGV4dE1lbnU6IG51bGwsXG4gICAgZGlzYWJsZUtleWJvYXJkU2hvcnRjdXRzOiBmYWxzZSxcbiAgICBmb2N1c2VkUm93OiBudWxsLFxuICAgIGxhc3RTZWxlY3RlZFJvdzogbnVsbCxcbiAgICBzZWxlY3Rpbmc6IGZhbHNlXG4gIH1cblxuICBpbmZpbml0ZVRhYmxlID0gUmVhY3QuY3JlYXRlUmVmPEluZmluaXRlTG9hZGVyPigpXG5cbiAgdG90YWxXaWR0aCA9IDBcbiAgY29sdW1uV2lkdGhQZXJjZW50czogbnVtYmVyW10gPSBbXVxuXG4gIGNvbHVtblRyYW5zZm9ybWVyOiAoXG4gICAgY29sdW1uczogUmVhY3QuUmVhY3RFbGVtZW50PGFueT5bXSxcbiAgICByb3dEYXRhOiBhbnksXG4gICAgcm93SW5kZXg6IG51bWJlclxuICApID0+IFJlYWN0LlJlYWN0Tm9kZVtdIHwgbnVsbCB8IHVuZGVmaW5lZFxuXG4gIHNlbGVjdCA9ICh7XG4gICAgaW5kZXgsXG4gICAgY29udGlndW91cyA9IGZhbHNlXG4gIH06IHtcbiAgICBpbmRleDogbnVtYmVyXG4gICAgY29udGlndW91czogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiB7XG4gICAgICBjb25zdCB7IGxhc3RTZWxlY3RlZFJvdyB9ID0gc3RhdGVcbiAgICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dzIH0gPSB0aGlzLnByb3BzXG4gICAgICBsZXQgc2VsZWN0ZWQgPSBbLi4uc2VsZWN0ZWRSb3dzLCBpbmRleF1cbiAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGFibGUgPT09IERhdGFHcmlkLlNJTkdMRV9TRUxFQ1QpIHtcbiAgICAgICAgc2VsZWN0ZWQgPSBbaW5kZXhdXG4gICAgICB9IGVsc2UgaWYgKGNvbnRpZ3VvdXMgJiYgdHlwZW9mIGxhc3RTZWxlY3RlZFJvdyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihsYXN0U2VsZWN0ZWRSb3csIGluZGV4KVxuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1heChsYXN0U2VsZWN0ZWRSb3csIGluZGV4KVxuICAgICAgICBzZWxlY3RlZCA9IHVuaXEoWy4uLnNlbGVjdGVkUm93cywgLi4ucmFuZ2Uoc3RhcnQsIGVuZCArIDEpXSlcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMub25TZWxlY3Qoc2VsZWN0ZWQpXG4gICAgICByZXR1cm4geyBsYXN0U2VsZWN0ZWRSb3c6IGluZGV4IH1cbiAgICB9KVxuICB9XG5cbiAgc2VsZWN0QWxsID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgcm93Q291bnQgfSA9IHRoaXMucHJvcHNcbiAgICB0aGlzLnNldFNlbGVjdGVkUm93cyhBcnJheS5mcm9tKHsgbGVuZ3RoOiByb3dDb3VudCB9KS5tYXAoKF8sIGlkeCkgPT4gaWR4KSlcbiAgfVxuXG4gIGRlc2VsZWN0ID0gKHtcbiAgICBpbmRleCxcbiAgICBjb250aWd1b3VzID0gZmFsc2VcbiAgfToge1xuICAgIGluZGV4OiBudW1iZXJcbiAgICBjb250aWd1b3VzOiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBpZiAoaW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+IHtcbiAgICAgIGNvbnN0IHsgbGFzdFNlbGVjdGVkUm93IH0gPSBzdGF0ZVxuICAgICAgY29uc3QgeyBzZWxlY3RlZFJvd3MgfSA9IHRoaXMucHJvcHNcbiAgICAgIGxldCBzZWxlY3RlZCA9IHNlbGVjdGVkUm93cy5maWx0ZXIoaWR4ID0+IGlkeCAhPT0gaW5kZXgpXG4gICAgICBpZiAoY29udGlndW91cyAmJiB0eXBlb2YgbGFzdFNlbGVjdGVkUm93ID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWluKGxhc3RTZWxlY3RlZFJvdywgaW5kZXgpXG4gICAgICAgIGNvbnN0IGVuZCA9IE1hdGgubWF4KGxhc3RTZWxlY3RlZFJvdywgaW5kZXgpXG4gICAgICAgIGNvbnN0IHRvRGVzZWxlY3QgPSByYW5nZShzdGFydCwgZW5kICsgMSlcbiAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZFJvd3MuZmlsdGVyKGlkeCA9PiAhaW5jbHVkZXModG9EZXNlbGVjdCwgaWR4KSlcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RhYmxlID09PSBEYXRhR3JpZC5TSU5HTEVfU0VMRUNUICYmXG4gICAgICAgICFzZWxlY3RlZC5sZW5ndGhcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChzZWxlY3RlZClcbiAgICAgIHJldHVybiB7IGxhc3RTZWxlY3RlZFJvdzogaW5kZXggfVxuICAgIH0pXG4gIH1cblxuICBkZXNlbGVjdEFsbCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFNlbGVjdGVkUm93cyhbXSlcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGxhc3RTZWxlY3RlZFJvdzogbnVsbFxuICAgIH0pXG4gIH1cblxuICB0b2dnbGVTZWxlY3QgPSAoe1xuICAgIGluZGV4LFxuICAgIGNvbnRpZ3VvdXNcbiAgfToge1xuICAgIGluZGV4OiBudW1iZXJcbiAgICBjb250aWd1b3VzOiBib29sZWFuXG4gIH0pID0+IHtcbiAgICBpZiAoaW5kZXggPT09IG51bGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIXRoaXMucHJvcHMuc2VsZWN0ZWRSb3dzLmluY2x1ZGVzKGluZGV4KSkge1xuICAgICAgdGhpcy5zZWxlY3QoeyBpbmRleCwgY29udGlndW91cyB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlc2VsZWN0KHsgaW5kZXgsIGNvbnRpZ3VvdXMgfSlcbiAgICB9XG4gIH1cblxuICBzZXRTZWxlY3RlZFJvd3MgPSAocm93czogQXJyYXk8bnVtYmVyPikgPT4ge1xuICAgIHRoaXMucHJvcHMub25TZWxlY3Qocm93cylcbiAgfVxuXG4gIGhhbmRsZUZpbHRlciA9ICh7XG4gICAgc29ydEJ5LFxuICAgIHNvcnREaXJlY3Rpb24sXG4gICAgZmlsdGVyc1xuICB9OiBIYW5kbGVGaWx0ZXJBcmd1bWVudHMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzb3J0Qnk6IG9sZFNvcnRCeSxcbiAgICAgIHNvcnREaXJlY3Rpb246IG9sZFNvcnREaXJlY3Rpb24sXG4gICAgICBmaWx0ZXJzOiBvbGRGaWx0ZXJzXG4gICAgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCBuZXdEYXRhID0ge1xuICAgICAgc29ydEJ5OiBzb3J0QnkgfHwgb2xkU29ydEJ5LFxuICAgICAgc29ydERpcmVjdGlvbjogc29ydERpcmVjdGlvbiB8fCBvbGRTb3J0RGlyZWN0aW9uLFxuICAgICAgZmlsdGVyczoge1xuICAgICAgICAuLi5vbGRGaWx0ZXJzLFxuICAgICAgICAuLi5maWx0ZXJzXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucHJvcHMub25GaWx0ZXIobmV3RGF0YSlcbiAgfVxuXG4gIGhhbmRsZUtleURvd24gPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZGlzYWJsZUtleWJvYXJkU2hvcnRjdXRzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICBpZiAoXG4gICAgICAgICAgKGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuY3RybEtleSkgJiZcbiAgICAgICAgICB0aGlzLnByb3BzLnNlbGVjdGFibGUgPT09IERhdGFHcmlkLk1VTFRJX1NFTEVDVFxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMucm93Q291bnQgPT09IHRoaXMucHJvcHMuc2VsZWN0ZWRSb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kZXNlbGVjdEFsbCgpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlID0+ICh7XG4gICAgICAgICAgZm9jdXNlZFJvdzogTWF0aC5tYXgoKHN0YXRlLmZvY3VzZWRSb3cgfHwgMCkgLSAxLCAwKVxuICAgICAgICB9KSlcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiAoe1xuICAgICAgICAgIGZvY3VzZWRSb3c6XG4gICAgICAgICAgICBzdGF0ZS5mb2N1c2VkUm93ICE9IG51bGxcbiAgICAgICAgICAgICAgPyBNYXRoLm1pbihzdGF0ZS5mb2N1c2VkUm93ICsgMSwgdGhpcy5wcm9wcy5yb3dDb3VudCAtIDEpXG4gICAgICAgICAgICAgIDogMFxuICAgICAgICB9KSlcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnRW50ZXInOlxuICAgICAgY2FzZSAnICc6XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnNlbGVjdGFibGUpIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdCh7XG4gICAgICAgICAgICBpbmRleDogdGhpcy5zdGF0ZS5mb2N1c2VkUm93IHx8IDAsXG4gICAgICAgICAgICBjb250aWd1b3VzOiBldmVudC5zaGlmdEtleVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnU2hpZnQnOlxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3Rpbmc6IHRydWVcbiAgICAgICAgfSlcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVLZXlVcCA9IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5kaXNhYmxlS2V5Ym9hcmRTaG9ydGN1dHMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnU2hpZnQnOlxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBzZWxlY3Rpbmc6IGZhbHNlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gdGhyb3R0bGluZyB0aGlzIHNvIGEgZG91YmxlIGNsaWNrIGJlaGF2ZXMgbGlrZSBhIHNpbmdsZSBjbGlja1xuICBoYW5kbGVSb3dDbGljayA9IHRocm90dGxlKFxuICAgICh7IGV2ZW50LCBpbmRleCB9OiB7IGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PGFueT47IGluZGV4OiBudW1iZXIgfSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLmFsbG93Um93RXZlbnRQYXNzdGhyb3VnaCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRvZ2dsZVNlbGVjdCh7IGluZGV4LCBjb250aWd1b3VzOiBldmVudC5zaGlmdEtleSB9KVxuICAgIH0sXG4gICAgMjUwLFxuICAgIHsgbGVhZGluZzogdHJ1ZSwgdHJhaWxpbmc6IGZhbHNlIH1cbiAgKVxuXG4gIGhhbmRsZVJlc2l6ZSA9ICh7IHgsIGluZGV4IH06IHsgeDogbnVtYmVyOyBpbmRleDogbnVtYmVyIH0pID0+IHtcbiAgICBpZiAodGhpcy5jb2x1bW5XaWR0aFBlcmNlbnRzLmxlbmd0aCA+IDAgJiYgdGhpcy50b3RhbFdpZHRoKSB7XG4gICAgICBjb25zdCBwcmV2V2lkdGhzID0gdGhpcy5jb2x1bW5XaWR0aFBlcmNlbnRzXG4gICAgICBjb25zdCBuZXdXaWR0aHMgPSBbLi4ucHJldldpZHRoc11cbiAgICAgIGNvbnN0IHBhcmVudFdpZHRoID0gdGhpcy5wcm9wcy5zY3JvbGxXaWR0aCA/PyB0aGlzLnByb3BzLndpZHRoXG4gICAgICAvLyBsaW1pdCBuZXh0IGluZGV4IGZyb20gZ29pbmcgYmV5b25kIGJvdW5kc1xuICAgICAgY29uc3QgbmV4dEluZGV4ID0gTWF0aC5taW4oaW5kZXggKyAxLCBwcmV2V2lkdGhzLmxlbmd0aCAtIDEpXG4gICAgICBjb25zdCBwZXJjZW50Q2hhbmdlID0geCAvIHRoaXMudG90YWxXaWR0aFxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5zY3JvbGxXaWR0aCkge1xuICAgICAgICAvLyBpZiB0YWJsZSBpcyBzY3JvbGxhYmxlLCB3ZSBjYW4gZ3JvdyB0aGUgY29sdW1uIHdpdGhvdXRcbiAgICAgICAgLy8gc2hyaW5raW5nIHRoZSBvdGhlcnNcbiAgICAgICAgY29uc3Qgc2FmZVBlcmNlbnRDaGFuZ2UgPVxuICAgICAgICAgIChwcmV2V2lkdGhzW2luZGV4XSArIHBlcmNlbnRDaGFuZ2UpICogcGFyZW50V2lkdGggPFxuICAgICAgICAgIERhdGFHcmlkLk1JTl9DT0xfV0lEVEhcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBwZXJjZW50Q2hhbmdlXG4gICAgICAgIG5ld1dpZHRoc1tpbmRleF0gPSBwcmV2V2lkdGhzW2luZGV4XSArIHNhZmVQZXJjZW50Q2hhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiB0aGUgdGFibGUgaXMgbm90IHNjcm9sbGFibGUsIGVuc3VyZSBhbGwgY29sdW1ucyBmaXQgYnlcbiAgICAgICAgLy8gYWRqdXN0aW5nIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlIG9uZSBhZnRlciBpdFxuICAgICAgICBjb25zdCBzYWZlUGVyY2VudENoYW5nZSA9XG4gICAgICAgICAgKHByZXZXaWR0aHNbaW5kZXhdICsgcGVyY2VudENoYW5nZSkgKiBwYXJlbnRXaWR0aCA8XG4gICAgICAgICAgICBEYXRhR3JpZC5NSU5fQ09MX1dJRFRIIHx8XG4gICAgICAgICAgKHByZXZXaWR0aHNbbmV4dEluZGV4XSAtIHBlcmNlbnRDaGFuZ2UpICogcGFyZW50V2lkdGggPFxuICAgICAgICAgICAgRGF0YUdyaWQuTUlOX0NPTF9XSURUSFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IHBlcmNlbnRDaGFuZ2VcbiAgICAgICAgbmV3V2lkdGhzW2luZGV4XSA9IHByZXZXaWR0aHNbaW5kZXhdICsgc2FmZVBlcmNlbnRDaGFuZ2VcbiAgICAgICAgbmV3V2lkdGhzW25leHRJbmRleF0gPSBwcmV2V2lkdGhzW25leHRJbmRleF0gLSBzYWZlUGVyY2VudENoYW5nZVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5wcm9wcy5vblJlc2l6ZSkge1xuICAgICAgICB0aGlzLnByb3BzLm9uUmVzaXplKFxuICAgICAgICAgIC8vIG11bHRpcGx5IGJ5IHdpZHRoIHByb3AgdG8gZ2V0IGNvcnJlY3QgcGVyY2VudGFnZVxuICAgICAgICAgIG5ld1dpZHRocy5tYXAod2lkdGggPT4gTWF0aC5yb3VuZCh3aWR0aCAqIHBhcmVudFdpZHRoKSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG1hcENoaWxkcmVuID0gKCkgPT4ge1xuICAgIGNvbnN0IElzQXJyYXkgPSAoY2hpbGRyZW4pOiBjaGlsZHJlbiBpcyBBcnJheTxDb2x1bW5GdW5jdGlvbj4gPT5cbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pXG5cbiAgICBjb25zdCBjaGlsZHJlbjogQXJyYXk8Q29sdW1uRnVuY3Rpb24+ID0gSXNBcnJheSh0aGlzLnByb3BzLmNoaWxkcmVuKVxuICAgICAgPyB0aGlzLnByb3BzLmNoaWxkcmVuXG4gICAgICA6IFt0aGlzLnByb3BzLmNoaWxkcmVuXVxuXG4gICAgY29uc3QgdmFsaWRDaGlsZHJlbiA9IGNoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiB0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpXG5cbiAgICByZXR1cm4gdmFsaWRDaGlsZHJlbi5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgIGNoaWxkKHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLnByb3BzLmxvY2FsZSB8fCAnZW4nLFxuICAgICAgICBsb2NhbGVTdHJpbmdzOiB0aGlzLnByb3BzLmxvY2FsZVN0cmluZ3MgfHwge30sXG4gICAgICAgIGNvbHVtbkluZGV4OiBpbmRleCxcbiAgICAgICAgY29sdW1uQ291bnQ6IHZhbGlkQ2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YUtleSA9PlxuICAgICAgICAgIHRoaXMucHJvcHMuZmlsdGVycyAmJiB0aGlzLnByb3BzLmZpbHRlcnNbZGF0YUtleV0sXG4gICAgICAgIG9uSGVhZGVyUG9wb3Zlck9wZW46IG9wZW4gPT5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGlzYWJsZUtleWJvYXJkU2hvcnRjdXRzOiBvcGVuIH0pLFxuICAgICAgICBvblNvcnQ6IHNvcnRBcmdzID0+IHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkUm93cyhbXSlcbiAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlcih7IC4uLnNvcnRBcmdzIH0pXG4gICAgICAgIH0sXG4gICAgICAgIG9uRmlsdGVyOiAoeyBkYXRhS2V5LCB2YWx1ZSwgb3BlcmF0b3IgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRSb3dzKFtdKVxuICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyKHtcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgW2RhdGFLZXldOiBvcGVyYXRvclxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgb25SZXNpemU6XG4gICAgICAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGBvblJlc2l6ZWAgd2lsbCBzaG93IGRyYWcgaGFuZGxlcyBzbyBkb24ndCBzZXQgaXRcbiAgICAgICAgICAvLyBpZiBubyBwcm9wIGlzIHBhc3NlZCBpbiBvciBmb3IgdGhlIGxhc3QgY29sdW1uIGlmIHRoZSB0YWJsZSBpc24ndFxuICAgICAgICAgIC8vIHNjcm9sbGFibGVcbiAgICAgICAgICB0aGlzLnByb3BzLm9uUmVzaXplICYmXG4gICAgICAgICAgKCghdGhpcy5wcm9wcy5zY3JvbGxXaWR0aCAmJiBpbmRleCAhPT0gdmFsaWRDaGlsZHJlbi5sZW5ndGggLSAxKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zY3JvbGxXaWR0aClcbiAgICAgICAgICAgID8gKHsgeCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNpemUoeyB4LCBpbmRleCB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBpc1Jvd0xvYWRlZCA9ICh7IGluZGV4IH06IEluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBoYXNNb3JlUm93cywgcm93Q291bnQgfSA9IHRoaXMucHJvcHNcbiAgICByZXR1cm4gIWhhc01vcmVSb3dzIHx8IGluZGV4IDwgcm93Q291bnRcbiAgfVxuXG4gIGlzQ29udGV4dE1lbnVWaXNpYmxlID0gKGluZGV4OiBudW1iZXIpID0+XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVDb250ZXh0TWVudSAmJiB0aGlzLnN0YXRlLmFjdGl2ZUNvbnRleHRNZW51LmluZGV4ID09PSBpbmRleFxuXG4gIGNsb3NlQ29udGV4dE1lbnUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhY3RpdmVDb250ZXh0TWVudTogbnVsbFxuICAgIH0pXG4gIH1cblxuICBjb250ZXh0TWVudVJlbmRlcmVyID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzLmNvbnRleHRNZW51UmVuZGVyZXIgJiZcbiAgICAgIHRoaXMuaXNDb250ZXh0TWVudVZpc2libGUoaW5kZXgpICYmXG4gICAgICBkb2N1bWVudC5ib2R5ICE9PSBudWxsXG4gICAgKSB7XG4gICAgICBjb25zdCBjb250ZXh0TWVudUNsb3NlV3JhcHBlciA9IChcbiAgICAgICAgPENsb3NlV3JhcHBlciBvbkNsb3NlPXt0aGlzLmNsb3NlQ29udGV4dE1lbnV9PlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNvbnRleHRNZW51UmVuZGVyZXIoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZS5hY3RpdmVDb250ZXh0TWVudSxcbiAgICAgICAgICAgIHNlbGVjdGVkUm93czogdGhpcy5wcm9wcy5zZWxlY3RlZFJvd3MsXG4gICAgICAgICAgICBvbkNsb3NlOiB0aGlzLmNsb3NlQ29udGV4dE1lbnVcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9DbG9zZVdyYXBwZXI+XG4gICAgICApXG4gICAgICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKGNvbnRleHRNZW51Q2xvc2VXcmFwcGVyLCBkb2N1bWVudC5ib2R5KVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaGVhZGVyUm93UmVuZGVyZXIgPSAoe1xuICAgIGNvbHVtbnMsXG4gICAgc3R5bGVcbiAgfToge1xuICAgIGNvbHVtbnM6IFJlYWN0LlJlYWN0Tm9kZVtdXG4gICAgc3R5bGU6IHt9XG4gIH0pID0+IChcbiAgICA8RWxlbWVudHMuUm93IHJvbGU9XCJyb3dcIiBoZWFkZXIgemVicmEgc3R5bGU9e3N0eWxlfT5cbiAgICAgIHtjb2x1bW5zfVxuICAgIDwvRWxlbWVudHMuUm93PlxuICApXG5cbiAgcm93UmVuZGVyZXIgPSAoe1xuICAgIGtleSxcbiAgICBzdHlsZSxcbiAgICBpbmRleCxcbiAgICByb3dEYXRhLFxuICAgIGNvbHVtbnMsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uUm93TW91c2VPdmVyLFxuICAgIG9uUm93TW91c2VPdXRcbiAgfTogVGFibGVSb3dQcm9wcykgPT4gKFxuICAgIDxGb2N1c2FibGVSb3dcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgYXJpYS1yb3dpbmRleD17aW5kZXggKyAxfVxuICAgICAgemVicmE9e2luZGV4ICUgMiA9PT0gMX1cbiAgICAgIHNlbGVjdGVkPXt0aGlzLnByb3BzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyhpbmRleCl9XG4gICAgICBzZWxlY3Rpbmc9e3RoaXMuc3RhdGUuc2VsZWN0aW5nfVxuICAgICAgZm9jdXNlZD17aW5kZXggPT09IHRoaXMuc3RhdGUuZm9jdXNlZFJvd31cbiAgICAgIGtleT17a2V5fVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgb25Nb3VzZUxlYXZlPXtldmVudCA9PiB7XG4gICAgICAgIG9uUm93TW91c2VPdXQgJiYgb25Sb3dNb3VzZU91dCh7IHJvd0RhdGEsIGluZGV4LCBldmVudCB9KVxuICAgICAgfX1cbiAgICAgIG9uTW91c2VFbnRlcj17ZXZlbnQgPT4ge1xuICAgICAgICBvblJvd01vdXNlT3ZlciAmJiBvblJvd01vdXNlT3Zlcih7IHJvd0RhdGEsIGluZGV4LCBldmVudCB9KVxuICAgICAgfX1cbiAgICAgIG9uRm9jdXM9eygpID0+IHRoaXMuc2V0U3RhdGUoeyBmb2N1c2VkUm93OiBpbmRleCB9KX1cbiAgICAgIGRhdGEtaW5zdHJ1bWVudGF0aW9uPXtgJHt0aGlzLnByb3BzWydkYXRhLWluc3RydW1lbnRhdGlvbiddfS1yb3cke1xuICAgICAgICBpbmRleCArIDFcbiAgICAgIH1gfVxuICAgICAgb25DbGljaz17XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0YWJsZSAmJiAhdGhpcy5zdGF0ZS5hY3RpdmVDb250ZXh0TWVudVxuICAgICAgICAgID8gZXZlbnQgPT4gdGhpcy5oYW5kbGVSb3dDbGljayh7IGV2ZW50LCBpbmRleDogaW5kZXggfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgb25Db250ZXh0TWVudT17XG4gICAgICAgIHRoaXMucHJvcHMuY29udGV4dE1lbnVSZW5kZXJlclxuICAgICAgICAgID8gZXZlbnQgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBhY3RpdmVDb250ZXh0TWVudToge1xuICAgICAgICAgICAgICAgICAgbGVmdDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgICAgIHRvcDogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGE6IHJvd0RhdGFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5wcm9wcy5zZWxlY3RlZFJvd3MuaW5jbHVkZXMoaW5kZXgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RhYmxlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93Q2xpY2soeyBldmVudCwgaW5kZXg6IGluZGV4IH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBvbkRvdWJsZUNsaWNrPXtldmVudCA9PlxuICAgICAgICB0aGlzLnByb3BzLm9uUm93RG91YmxlQ2xpY2sgJiZcbiAgICAgICAgdGhpcy5wcm9wcy5vblJvd0RvdWJsZUNsaWNrKHsgaW5kZXgsIGV2ZW50LCByb3dEYXRhIH0pXG4gICAgICB9XG4gICAgPlxuICAgICAge3RoaXMuY29sdW1uVHJhbnNmb3JtZXJcbiAgICAgICAgPyB0aGlzLmNvbHVtblRyYW5zZm9ybWVyKGNvbHVtbnMsIHJvd0RhdGEsIGluZGV4KVxuICAgICAgICA6IGNvbHVtbnN9XG4gICAgICB7dGhpcy5jb250ZXh0TWVudVJlbmRlcmVyKGluZGV4KX1cbiAgICA8L0ZvY3VzYWJsZVJvdz5cbiAgKVxuXG4gIC8qKlxuICAgKiAgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIGlzIGFkZGVkIGJlY2F1c2UgZXZlbiB0aG91Z2ggdGhlIHByb3BzIGFyZSBub3QgdXNlZCBpbiB0aGlzIGNvbXBvbmVudFxuICAgKiB0aGV5IGFyZSBnZXR0aW5nIGRlc3RydWN0dXJlZCBpbnRvIC4uLnByb3BzIGFuZCBwYXNzZWQgZnVydGhlciBkb3duIHRoZSB0cmVlXG4gICAqL1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBoYXNNb3JlUm93cyxcbiAgICAgIGhlaWdodCxcbiAgICAgIGxvYWRNb3JlUm93cyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIG9uRmlsdGVyLFxuICAgICAgcm93Q291bnQsXG4gICAgICBzb3J0QnkgPSAnJyxcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICB3aWR0aCxcbiAgICAgIC4uLnByb3BzXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIC8vIFRoaXMgZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIGhlYWRlciBvZiB0aGUgRGF0YUdyaWQgZG9lc24ndCByZW5kZXIgb24gcGFnZSBsb2FkIGluIFNhZmFyaVxuICAgIGNvbnN0IHNhZmFyaVN0eWxlID0ge1xuICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWigwKWBcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwZWRDaGlsZHJlbiA9IHRoaXMubWFwQ2hpbGRyZW4oKS5maWx0ZXIoY2hpbGQgPT4gY2hpbGQgIT09IG51bGwpXG4gICAgLy8gVE9ETzogQmV0dGVyIHR5cGUgc2lnbmF0dXJlIHdoZW4gYWNjZXNzaW5nIGNoaWxkcmVuIHByb3BzP1xuICAgIGNvbnN0IHNwYW5EYXRhID0gbWFwcGVkQ2hpbGRyZW4ubWFwKChjaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50KSA9PiAoe1xuICAgICAgY29sc3BhbjogY2hpbGQucHJvcHMuY29sc3BhbiA/IGNoaWxkLnByb3BzLmNvbHNwYW4gOiAoKSA9PiAxLFxuICAgICAgd2lkdGg6IGNoaWxkLnByb3BzLndpZHRoLFxuICAgICAgZmxleEdyb3c6IGNoaWxkLnByb3BzLmZsZXhHcm93XG4gICAgfSkpXG4gICAgLy8gR2V0IHRoZSBhY3R1YWwgd2lkdGggb2YgYWxsIHRoZSBjb2x1bW5zLiBUaGlzIGlzIGluZGVwZW5kZW50IGZyb20gdGhlXG4gICAgLy8gd2lkdGggcHJvcC5cbiAgICB0aGlzLnRvdGFsV2lkdGggPSBtYXBwZWRDaGlsZHJlbi5yZWR1Y2U8bnVtYmVyPihcbiAgICAgICh0b3RhbDogbnVtYmVyLCBjaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50PEJhc2ljQ29sdW1uUHJvcHM+KSA9PlxuICAgICAgICB0b3RhbCArIGNoaWxkLnByb3BzLndpZHRoLFxuICAgICAgMFxuICAgIClcbiAgICAvLyBDb252ZXJ0IHRoZSB3aWR0aHMgdG8gcGVyY2VudHMgc28gd2UgY2FuIG1hcCB0aGVtIGJhY2sgdG8gdGhlIHJlYWwgdGFibGVcbiAgICAvLyB3aWR0aCBsYXRlci5cbiAgICB0aGlzLmNvbHVtbldpZHRoUGVyY2VudHMgPSBtYXBwZWRDaGlsZHJlbi5tYXAoXG4gICAgICAoeyBwcm9wcyB9OiBSZWFjdC5SZWFjdEVsZW1lbnQpID0+IHByb3BzLndpZHRoIC8gdGhpcy50b3RhbFdpZHRoXG4gICAgKVxuXG4gICAgdGhpcy5jb2x1bW5UcmFuc2Zvcm1lciA9IChcbiAgICAgIGNvbHVtbnM6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+W10sXG4gICAgICByb3dEYXRhLFxuICAgICAgcm93SW5kZXhcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHNwYW5zID0gc3BhbkRhdGEubWFwKGl0ZW0gPT4gaXRlbS5jb2xzcGFuKHJvd0RhdGEpKVxuICAgICAgY29uc3Qgc3Bhbm5lZENvbHVtbnM6IFJlYWN0LlJlYWN0RWxlbWVudFtdID0gW11cbiAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgIHdoaWxlIChpbmRleCA8IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHNwYW4gPSBzcGFuc1tpbmRleF1cbiAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uc1tpbmRleF1cbiAgICAgICAgaWYgKHNwYW4gPiAxKSB7XG4gICAgICAgICAgY29uc3QgZm9sbG93aW5nQ29sdW1ucyA9IHNwYW5EYXRhLnNsaWNlKGluZGV4LCBzcGFuKVxuICAgICAgICAgIC8vIGZpbmQgbmV3IHdpZHRoIGJ5IGFkZGluZyBjdXJyZW50IGNvbHVtbiB3aWR0aCBwbHVzIGNvbHVtbnMgdGhhdCBhcmUgc3Bhbm5lZCBvdmVyXG5cbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGZvbGxvd2luZ0NvbHVtbnMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3VtdWxhdG9yLCB7IHdpZHRoIH06IHsgd2lkdGg6IG51bWJlciB9KSA9PiBhY2N1bXVsYXRvciArIHdpZHRoLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcblxuICAgICAgICAgIGNvbnN0IGZsZXhHcm93ID0gZm9sbG93aW5nQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdW11bGF0b3IsIHsgZmxleEdyb3cgfTogeyBmbGV4R3JvdzogbnVtYmVyIH0pID0+XG4gICAgICAgICAgICAgIGFjY3VtdWxhdG9yICsgZmxleEdyb3csXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5uZWRDb2x1bW5zLnB1c2goXG4gICAgICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY29sdW1uLCB7XG4gICAgICAgICAgICAgICdkYXRhLWluc3RydW1lbnRhdGlvbic6IGAke3RoaXMucHJvcHNbJ2RhdGEtaW5zdHJ1bWVudGF0aW9uJ119LXJvdyR7cm93SW5kZXh9LWNvbCR7aW5kZXh9YCxcbiAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAuLi5FbGVtZW50cy5jZWxsUmVzZXRTdHlsZSxcbiAgICAgICAgICAgICAgICBmbGV4OiBgMCAxICR7d2lkdGh9cHhgLFxuICAgICAgICAgICAgICAgIGZsZXhHcm93XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIGluZGV4ICs9IHNwYW4gLy8gc2tpcCBjb2x1bW5zIHRoYXQgaGF2ZSBiZWVuIHNwYW5uZWQgb3ZlclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNwYW5uZWRDb2x1bW5zLnB1c2goXG4gICAgICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY29sdW1uLCB7XG4gICAgICAgICAgICAgICdkYXRhLWluc3RydW1lbnRhdGlvbic6IGAke3RoaXMucHJvcHNbJ2RhdGEtaW5zdHJ1bWVudGF0aW9uJ119LXJvdyR7cm93SW5kZXh9LWNvbCR7aW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3Bhbm5lZENvbHVtbnNcbiAgICB9XG5cbiAgICBjb25zdCBUYWJsZUNvbXBvbmVudCA9XG4gICAgICB0aGlzLnByb3BzLnNjcm9sbFdpZHRoICE9PSB1bmRlZmluZWQgPyBTY3JvbGxhYmxlVGFibGUgOiBUYWJsZVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxFbGVtZW50cy5UYWJsZUNvbnRhaW5lclxuICAgICAgICBjc3M9e3sgd2lkdGgsIGhlaWdodCB9fVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5RG93bn1cbiAgICAgICAgb25LZXlVcD17dGhpcy5oYW5kbGVLZXlVcH1cbiAgICAgICAgZGF0YS1pbnN0cnVtZW50YXRpb249e2Ake3RoaXMucHJvcHNbJ2RhdGEtaW5zdHJ1bWVudGF0aW9uJ119LWdyaWRgfVxuICAgICAgPlxuICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICBpc1Jvd0xvYWRlZD17dGhpcy5pc1Jvd0xvYWRlZH1cbiAgICAgICAgICBsb2FkTW9yZVJvd3M9e2xvYWRNb3JlUm93cyB8fCAoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKSl9XG4gICAgICAgICAgcm93Q291bnQ9e2hhc01vcmVSb3dzID8gcm93Q291bnQgKyAxIDogcm93Q291bnR9XG4gICAgICAgICAgdGhyZXNob2xkPXs1fVxuICAgICAgICAgIHJlZj17dGhpcy5pbmZpbml0ZVRhYmxlfVxuICAgICAgICA+XG4gICAgICAgICAgeyh7IG9uUm93c1JlbmRlcmVkLCByZWdpc3RlckNoaWxkIH0pID0+IChcbiAgICAgICAgICAgIDxUYWJsZUNvbXBvbmVudFxuICAgICAgICAgICAgICBzdHlsZT17c2FmYXJpU3R5bGV9XG4gICAgICAgICAgICAgIGdyaWRTdHlsZT17eyBvdXRsaW5lOiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXszNn1cbiAgICAgICAgICAgICAgcm93SGVpZ2h0PXszMH1cbiAgICAgICAgICAgICAgc29ydEJ5PXtzb3J0Qnl9XG4gICAgICAgICAgICAgIHNvcnREaXJlY3Rpb249e3NvcnREaXJlY3Rpb259XG4gICAgICAgICAgICAgIHJlZj17cmVnaXN0ZXJDaGlsZH1cbiAgICAgICAgICAgICAgbm9Sb3dzUmVuZGVyZWQ9eygpID0+IDxkaXY+Tm8gcmVzdWx0czwvZGl2Pn1cbiAgICAgICAgICAgICAgb25Sb3dzUmVuZGVyZWQ9e29uUm93c1JlbmRlcmVkfVxuICAgICAgICAgICAgICBvblNjcm9sbD17XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVDb250ZXh0TWVudVxuICAgICAgICAgICAgICAgICAgPyAoKSA9PiB0aGlzLmNsb3NlQ29udGV4dE1lbnUoKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByb3dDb3VudD17aGFzTW9yZVJvd3MgPyByb3dDb3VudCArIDEgOiByb3dDb3VudH1cbiAgICAgICAgICAgICAgaGVhZGVyUm93UmVuZGVyZXI9e3RoaXMuaGVhZGVyUm93UmVuZGVyZXJ9XG4gICAgICAgICAgICAgIHJvd1JlbmRlcmVyPXt0aGlzLnJvd1JlbmRlcmVyfVxuICAgICAgICAgICAgICAvLyBhY2NvdW50IGZvciBib3JkZXIgd2lkdGggb2YgY29udGFpbmVyXG4gICAgICAgICAgICAgIHdpZHRoPXt3aWR0aCAtIDJ9XG4gICAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0IC0gMn1cbiAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWFwcGVkQ2hpbGRyZW59XG4gICAgICAgICAgICA8L1RhYmxlQ29tcG9uZW50PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvSW5maW5pdGVMb2FkZXI+XG4gICAgICA8L0VsZW1lbnRzLlRhYmxlQ29udGFpbmVyPlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRhR3JpZFxuIl19 */"),
680
+ }, process.env.NODE_ENV === "production" ? "" : ";label:render;", process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9EYXRhR3JpZC9EYXRhR3JpZC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMHFCUSIsImZpbGUiOiIuLi8uLi8uLi9zcmMvRGF0YUdyaWQvRGF0YUdyaWQudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7XG4gIEluZmluaXRlTG9hZGVyLFxuICBUYWJsZSxcbiAgU29ydERpcmVjdGlvbixcbiAgVGFibGVSb3dQcm9wc1xufSBmcm9tICdyZWFjdC12aXJ0dWFsaXplZCdcbmltcG9ydCB0eXBlIHtcbiAgU29ydERpcmVjdGlvblR5cGUsXG4gIFRhYmxlUHJvcHMsXG4gIEluZGV4UmFuZ2UsXG4gIEluZGV4LFxuICBSb3dNb3VzZUV2ZW50SGFuZGxlclBhcmFtc1xufSBmcm9tICdyZWFjdC12aXJ0dWFsaXplZCdcbmltcG9ydCAqIGFzIEVsZW1lbnRzIGZyb20gJy4vZWxlbWVudHMnXG5pbXBvcnQgKiBhcyBSZW5kZXJlcnMgZnJvbSAnLi9yZW5kZXJlcnMnXG5pbXBvcnQge1xuICBCYXNpY0NvbHVtbixcbiAgRm9jdXNhYmxlUm93LFxuICBJbnB1dENlbGwsXG4gIENvbGxhcHNpYmxlQ2VsbCxcbiAgU2Nyb2xsYWJsZVRhYmxlXG59IGZyb20gJy4vY29tcG9uZW50cydcbmltcG9ydCB7IENsb3NlV3JhcHBlciB9IGZyb20gJy4uL3V0aWxzJ1xuaW1wb3J0IGN1cnJ5IGZyb20gJ2xvZGFzaC5jdXJyeSdcbmltcG9ydCBpbmNsdWRlcyBmcm9tICdsb2Rhc2guaW5jbHVkZXMnXG5pbXBvcnQgbm9vcCBmcm9tICdsb2Rhc2gubm9vcCdcbmltcG9ydCByYW5nZSBmcm9tICdsb2Rhc2gucmFuZ2UnXG5pbXBvcnQgdGhyb3R0bGUgZnJvbSAnbG9kYXNoLnRocm90dGxlJ1xuaW1wb3J0IHVuaXEgZnJvbSAnbG9kYXNoLnVuaXEnXG5pbXBvcnQgKiBhcyBkYXRhR3JpZFV0aWxzIGZyb20gJy4vdXRpbHMnXG5pbXBvcnQgdHlwZSB7XG4gIEJhc2ljQ29sdW1uTWFwcGVkUHJvcHMsXG4gIEJhc2ljQ29sdW1uUHJvcHNcbn0gZnJvbSAnLi9jb21wb25lbnRzL0Jhc2ljQ29sdW1uJ1xuaW1wb3J0IHR5cGUgeyBMb2NhbGVTdHJpbmdzIH0gZnJvbSAnLi9jb25zdGFudHMnXG5cbmV4cG9ydCB0eXBlIG9uRmlsdGVyQXJndW1lbnRzID0ge1xuICBmaWx0ZXJzOiB7IFtkYXRhS2V5OiBzdHJpbmddOiBhbnkgfVxuICBzb3J0Qnk/OiBzdHJpbmdcbiAgc29ydERpcmVjdGlvbj86IFNvcnREaXJlY3Rpb25UeXBlXG59XG5cbnR5cGUgYWN0aXZlQ29udGV4dE1lbnVTdGF0ZSA9IHtcbiAgdG9wOiBudW1iZXJcbiAgbGVmdDogbnVtYmVyXG4gIGluZGV4OiBudW1iZXJcbiAgcm93RGF0YTogYW55XG59XG5cbnR5cGUgY29udGV4dE1lbnVSZW5kZXJlckFyZ3VtZW50cyA9IHtcbiAgdG9wPzogbnVtYmVyXG4gIGxlZnQ/OiBudW1iZXJcbiAgaW5kZXg/OiBudW1iZXJcbiAgcm93RGF0YT86IGFueVxuICBzZWxlY3RlZFJvd3M6IEFycmF5PG51bWJlcj5cbiAgb25DbG9zZTogKCkgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBTZWxlY3RhYmxlVHlwZSA9ICdzaW5nbGUnIHwgJ211bHRpJ1xuXG50eXBlIENvbHVtbkZ1bmN0aW9uID0gKGFyZ3M6IEJhc2ljQ29sdW1uTWFwcGVkUHJvcHMpID0+IFJlYWN0LlJlYWN0Tm9kZVxuXG5leHBvcnQgdHlwZSBEYXRhR3JpZFByb3BzID0ge1xuICAvKiogRnVuY3Rpb25zIHRoYXQgY3JlYXRlIHJlYWN0IHZpcnR1YWxpemVkIENvbHVtbnMuIERlZmF1bHQgY29sdW1uIGlzIGV4cG9zZWQgYXMgRGF0YUdyaWQuQ29sdW1uLiAqL1xuICAvLyBDYW4gdGFrZSBhIHNpbmdsZSBjb2x1bW4gb3IgYW4gYXJyYXkgb2YgY29sdW1uc1xuICBjaGlsZHJlbjogQ29sdW1uRnVuY3Rpb24gfCAoQ29sdW1uRnVuY3Rpb24gfCBDb2x1bW5GdW5jdGlvbltdKVtdXG4gIC8qKiBJbnN0cnVtZW50YXRpb24gKi9cbiAgJ2RhdGEtaW5zdHJ1bWVudGF0aW9uJz86IHN0cmluZ1xuICAvKiogQ2FsbGVkIGR1cmluZyB0aGUgb25Db250ZXh0TWVudSBldmVudCBvZiBlYWNoIHJvdy4gKi9cbiAgY29udGV4dE1lbnVSZW5kZXJlcj86IChcbiAgICBjb250ZXh0TWVudVJlbmRlcmVyQXJndW1lbnRzOiBjb250ZXh0TWVudVJlbmRlcmVyQXJndW1lbnRzXG4gICkgPT4gUmVhY3QuUmVhY3ROb2RlXG4gIC8qKiBDYWxsZWQgd2hlbiBhIGNvbHVtbiBpcyBmaWx0ZXJlZCBvciBzb3J0ZWQuICovXG4gIG9uRmlsdGVyOiAob25GaWx0ZXJBcmd1bWVudHM6IG9uRmlsdGVyQXJndW1lbnRzKSA9PiB2b2lkXG4gIC8qKiBDYWxsZWQgd2hlbiBhIGNvbHVtbiBpcyByZXNpemVkIGJ5IHRoZSB1c2VyLiBQYXNzaW5nIHRoaXMgaW4gZW5hYmxlc1xuICAgKiByZXNpemUgaGFuZGxlcyBvbiB0aGUgcmlnaHQgZWRnZSBvZiB0aGUgaGVhZGVyIGNlbGxzLiAqL1xuICBvblJlc2l6ZT86IChuZXdTaXplczogbnVtYmVyW10pID0+IHZvaWRcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSByb3cgc2VsZWN0aW9uIGNoYW5nZXMuIFJlY2VpdmVzIGFycmF5IG9mIGluZGljZXMuICovXG4gIG9uU2VsZWN0OiAoaW5kZXhlczogbnVtYmVyW10pID0+IHZvaWRcbiAgLyoqIENhbGxlZCB3aGVuIHRoZSByb3cgaXMgZG91YmxlIGNsaWNrZWQuIFJlY2VpdmVzIGluZGV4LiAqL1xuICBvblJvd0RvdWJsZUNsaWNrPzogKGluZm86IFJvd01vdXNlRXZlbnRIYW5kbGVyUGFyYW1zKSA9PiB2b2lkXG4gIC8qKiBJbmZpbml0ZSBsb2FkaW5nOiBJbmRpY2F0ZXMgbW9yZSByb3dzIG5lZWQgdG8gYmUgbG9hZGVkLiAqL1xuICBoYXNNb3JlUm93cz86IGJvb2xlYW5cbiAgLyoqIEluZmluaXRlIGxvYWRpbmc6IENhbGxlZCB3aGVuIG1vcmUgcm93cyBuZWVkIHRvIGJlIGxvYWRlZC4gKi9cbiAgbG9hZE1vcmVSb3dzPzogKHByb3BzOiBJbmRleFJhbmdlKSA9PiBQcm9taXNlPGFueT5cbiAgLyoqIENvdW50IG9mIHJvd3MgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBsb2FkZWQuICovXG4gIHJvd0NvdW50OiBudW1iZXJcbiAgLyoqIFJlcXVpcmVkIGJ5IHJlYWN0LXZpcnR1YWxpemVkIHRhYmxlLiAqL1xuICByb3dHZXR0ZXI6IChwcm9wczogeyBpbmRleDogbnVtYmVyIH0pID0+IGFueVxuICAvKiogV2hldGhlciByb3dzIGNhbiBiZSBzZWxlY3RlZCAoYW5kIGhvdyBtYW55KS4gKi9cbiAgc2VsZWN0YWJsZT86IFNlbGVjdGFibGVUeXBlIHwgZmFsc2VcbiAgLyoqIEFycmF5IG9mIGluZGljZXMgdGhhdCBzaG91bGQgYmUgc2VsZWN0ZWQuIE9ubHkgdXNlZCBpZiBgc2VsZWN0YWJsZWAgaXMgc2V0LiAqL1xuICBzZWxlY3RlZFJvd3M6IEFycmF5PG51bWJlcj5cbiAgLyoqIFRoZSBjb2x1bW4geW91IHdhbnQgdG8gc29ydCAqL1xuICBzb3J0Qnk/OiBzdHJpbmdcbiAgLyoqIFRoZSBkaXJlY3Rpb24gc29ydGluZyBzaG91bGQgYmUgZG9uZSAqL1xuICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvblR5cGVcbiAgLyoqIEEgbWFwIG9mIGNvbHVtbnMgdG8gZmlsdGVyIGRhdGEgKi9cbiAgZmlsdGVycz86IHsgW2RhdGFLZXk6IHN0cmluZ106IGFueSB9XG4gIC8qKiBTZXQgdGhlIHdpZHRoIG9mIHNjcm9sbGFibGUgY29udGVudCAqL1xuICBzY3JvbGxXaWR0aD86IG51bWJlclxuICB3aWR0aDogbnVtYmVyXG4gIGhlaWdodDogbnVtYmVyXG4gIC8qKiBMb2NhbGUgc3RyaW5nOiBqYSwgZGUsIGVzLCBrbywgZW4sIGV0Yy4gKi9cbiAgbG9jYWxlPzogc3RyaW5nXG4gIC8qKiBMb2NhbGUgc3RyaW5ncyB0byBvdmVycmlkZSBlbiBmb3IgbGFuZ3VhZ2UgaW4gbG9jYWxlICovXG4gIGxvY2FsZVN0cmluZ3M/OiBMb2NhbGVTdHJpbmdzXG4gIC8qKiBhbGxvdyBldmVudHMgdG8gcHJvcGFnYXRlIHRvIGEgY2VsbCBvbiByb3cgc2VsZWN0ICovXG4gIGFsbG93Um93RXZlbnRQYXNzdGhyb3VnaD86IGJvb2xlYW5cbn0gJiBQYXJ0aWFsPFRhYmxlUHJvcHM+XG5cbnR5cGUgRGF0YUdyaWRTdGF0ZSA9IHtcbiAgYWN0aXZlQ29udGV4dE1lbnU6IGFjdGl2ZUNvbnRleHRNZW51U3RhdGUgfCBudWxsXG4gIGRpc2FibGVLZXlib2FyZFNob3J0Y3V0czogYm9vbGVhblxuICBmb2N1c2VkUm93OiBudW1iZXIgfCBudWxsXG4gIHNlbGVjdGluZzogYm9vbGVhblxuICBsYXN0U2VsZWN0ZWRSb3c6IG51bWJlciB8IG51bGxcbn1cblxudHlwZSBIYW5kbGVGaWx0ZXJBcmd1bWVudHMgPSB7XG4gIHNvcnRCeT86IHN0cmluZ1xuICBzb3J0RGlyZWN0aW9uPzogU29ydERpcmVjdGlvblR5cGVcbiAgZmlsdGVycz86IGFueVxufVxuXG4vKipcbiAqIENvbXBvbmVudCBmb3IgZGlzcGxheWluZyBkYXRhIGluIGEgZ3JpZCB3aXRoIHN1cHBvcnQgZm9yIHRoaW5ncyBsaWtlXG4gKiBmaWx0ZXJpbmcsIHNvcnRpbmcsIGFuZCBjb250ZXh0IG1lbnVzLlxuICpcbiAqIERlcGVuZHMgb24gcmVhY3QtdmlydHVhbGl6ZWQvc3R5bGVzLmNzcy5cbiAqXG4gKiBGb3IgcmVhY3QtdmlydHVhbGl6ZWQgVGFibGUgZG9jcyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXZpcnR1YWxpemVkL2Jsb2IvbWFzdGVyL2RvY3MvVGFibGUubWRcbiAqXG4gKi9cbmNsYXNzIERhdGFHcmlkIGV4dGVuZHMgQ29tcG9uZW50PERhdGFHcmlkUHJvcHMsIERhdGFHcmlkU3RhdGU+IHtcbiAgLy8gZXhwb3NlIHN1Yi1jb21wb25lbnRzXG4gIHN0YXRpYyBDb2x1bW4gPSBjdXJyeShCYXNpY0NvbHVtbilcbiAgc3RhdGljIFNvcnREaXJlY3Rpb24gPSBTb3J0RGlyZWN0aW9uXG4gIHN0YXRpYyBFbGVtZW50cyA9IEVsZW1lbnRzXG4gIHN0YXRpYyBJbnB1dENlbGwgPSBJbnB1dENlbGxcbiAgc3RhdGljIENvbGxhcHNpYmxlQ2VsbCA9IENvbGxhcHNpYmxlQ2VsbFxuICBzdGF0aWMgUmVuZGVyZXJzID0gUmVuZGVyZXJzXG5cbiAgc3RhdGljIFNJTkdMRV9TRUxFQ1Q6IFNlbGVjdGFibGVUeXBlID0gJ3NpbmdsZSdcbiAgc3RhdGljIE1VTFRJX1NFTEVDVDogU2VsZWN0YWJsZVR5cGUgPSAnbXVsdGknXG4gIHN0YXRpYyBNSU5fQ09MX1dJRFRIID0gNTBcblxuICBzdGF0aWMgdXRpbHMgPSBkYXRhR3JpZFV0aWxzXG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBsb2FkTW9yZVJvd3M6IG5vb3AsXG4gICAgb25TZWxlY3Q6IG5vb3AsXG4gICAgb25GaWx0ZXI6IG5vb3AsXG4gICAgJ2RhdGEtaW5zdHJ1bWVudGF0aW9uJzogJ2RhdGFncmlkJyxcbiAgICBzb3J0Qnk6ICcnLFxuICAgIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24uQVNDLFxuICAgIGZpbHRlcnM6IHt9LFxuICAgIHNlbGVjdGVkUm93czogW10sXG4gICAgYWxsb3dSb3dFdmVudFBhc3N0aHJvdWdoOiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIGRpc3BsYXlOYW1lID0gJ0RhdGFHcmlkJ1xuXG4gIHN0YXRlOiBEYXRhR3JpZFN0YXRlID0ge1xuICAgIGFjdGl2ZUNvbnRleHRNZW51OiBudWxsLFxuICAgIGRpc2FibGVLZXlib2FyZFNob3J0Y3V0czogZmFsc2UsXG4gICAgZm9jdXNlZFJvdzogbnVsbCxcbiAgICBsYXN0U2VsZWN0ZWRSb3c6IG51bGwsXG4gICAgc2VsZWN0aW5nOiBmYWxzZVxuICB9XG5cbiAgaW5maW5pdGVUYWJsZSA9IFJlYWN0LmNyZWF0ZVJlZjxJbmZpbml0ZUxvYWRlcj4oKVxuXG4gIHRvdGFsV2lkdGggPSAwXG4gIGNvbHVtbldpZHRoUGVyY2VudHM6IG51bWJlcltdID0gW11cblxuICBjb2x1bW5UcmFuc2Zvcm1lcjogKFxuICAgIGNvbHVtbnM6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+W10sXG4gICAgcm93RGF0YTogYW55LFxuICAgIHJvd0luZGV4OiBudW1iZXJcbiAgKSA9PiBSZWFjdC5SZWFjdE5vZGVbXSB8IG51bGwgfCB1bmRlZmluZWRcblxuICBzZWxlY3QgPSAoe1xuICAgIGluZGV4LFxuICAgIGNvbnRpZ3VvdXMgPSBmYWxzZVxuICB9OiB7XG4gICAgaW5kZXg6IG51bWJlclxuICAgIGNvbnRpZ3VvdXM6IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4ge1xuICAgICAgY29uc3QgeyBsYXN0U2VsZWN0ZWRSb3cgfSA9IHN0YXRlXG4gICAgICBjb25zdCB7IHNlbGVjdGVkUm93cyB9ID0gdGhpcy5wcm9wc1xuICAgICAgbGV0IHNlbGVjdGVkID0gWy4uLnNlbGVjdGVkUm93cywgaW5kZXhdXG4gICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RhYmxlID09PSBEYXRhR3JpZC5TSU5HTEVfU0VMRUNUKSB7XG4gICAgICAgIHNlbGVjdGVkID0gW2luZGV4XVxuICAgICAgfSBlbHNlIGlmIChjb250aWd1b3VzICYmIHR5cGVvZiBsYXN0U2VsZWN0ZWRSb3cgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4obGFzdFNlbGVjdGVkUm93LCBpbmRleClcbiAgICAgICAgY29uc3QgZW5kID0gTWF0aC5tYXgobGFzdFNlbGVjdGVkUm93LCBpbmRleClcbiAgICAgICAgc2VsZWN0ZWQgPSB1bmlxKFsuLi5zZWxlY3RlZFJvd3MsIC4uLnJhbmdlKHN0YXJ0LCBlbmQgKyAxKV0pXG4gICAgICB9XG4gICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHNlbGVjdGVkKVxuICAgICAgcmV0dXJuIHsgbGFzdFNlbGVjdGVkUm93OiBpbmRleCB9XG4gICAgfSlcbiAgfVxuXG4gIHNlbGVjdEFsbCA9ICgpID0+IHtcbiAgICBjb25zdCB7IHJvd0NvdW50IH0gPSB0aGlzLnByb3BzXG4gICAgdGhpcy5zZXRTZWxlY3RlZFJvd3MoQXJyYXkuZnJvbSh7IGxlbmd0aDogcm93Q291bnQgfSkubWFwKChfLCBpZHgpID0+IGlkeCkpXG4gIH1cblxuICBkZXNlbGVjdCA9ICh7XG4gICAgaW5kZXgsXG4gICAgY29udGlndW91cyA9IGZhbHNlXG4gIH06IHtcbiAgICBpbmRleDogbnVtYmVyXG4gICAgY29udGlndW91czogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiB7XG4gICAgICBjb25zdCB7IGxhc3RTZWxlY3RlZFJvdyB9ID0gc3RhdGVcbiAgICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dzIH0gPSB0aGlzLnByb3BzXG4gICAgICBsZXQgc2VsZWN0ZWQgPSBzZWxlY3RlZFJvd3MuZmlsdGVyKGlkeCA9PiBpZHggIT09IGluZGV4KVxuICAgICAgaWYgKGNvbnRpZ3VvdXMgJiYgdHlwZW9mIGxhc3RTZWxlY3RlZFJvdyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBNYXRoLm1pbihsYXN0U2VsZWN0ZWRSb3csIGluZGV4KVxuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1heChsYXN0U2VsZWN0ZWRSb3csIGluZGV4KVxuICAgICAgICBjb25zdCB0b0Rlc2VsZWN0ID0gcmFuZ2Uoc3RhcnQsIGVuZCArIDEpXG4gICAgICAgIHNlbGVjdGVkID0gc2VsZWN0ZWRSb3dzLmZpbHRlcihpZHggPT4gIWluY2x1ZGVzKHRvRGVzZWxlY3QsIGlkeCkpXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0YWJsZSA9PT0gRGF0YUdyaWQuU0lOR0xFX1NFTEVDVCAmJlxuICAgICAgICAhc2VsZWN0ZWQubGVuZ3RoXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgIH1cbiAgICAgIHRoaXMucHJvcHMub25TZWxlY3Qoc2VsZWN0ZWQpXG4gICAgICByZXR1cm4geyBsYXN0U2VsZWN0ZWRSb3c6IGluZGV4IH1cbiAgICB9KVxuICB9XG5cbiAgZGVzZWxlY3RBbGwgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTZWxlY3RlZFJvd3MoW10pXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBsYXN0U2VsZWN0ZWRSb3c6IG51bGxcbiAgICB9KVxuICB9XG5cbiAgdG9nZ2xlU2VsZWN0ID0gKHtcbiAgICBpbmRleCxcbiAgICBjb250aWd1b3VzXG4gIH06IHtcbiAgICBpbmRleDogbnVtYmVyXG4gICAgY29udGlndW91czogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyhpbmRleCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0KHsgaW5kZXgsIGNvbnRpZ3VvdXMgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZXNlbGVjdCh7IGluZGV4LCBjb250aWd1b3VzIH0pXG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRSb3dzID0gKHJvd3M6IEFycmF5PG51bWJlcj4pID0+IHtcbiAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHJvd3MpXG4gIH1cblxuICBoYW5kbGVGaWx0ZXIgPSAoe1xuICAgIHNvcnRCeSxcbiAgICBzb3J0RGlyZWN0aW9uLFxuICAgIGZpbHRlcnNcbiAgfTogSGFuZGxlRmlsdGVyQXJndW1lbnRzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgc29ydEJ5OiBvbGRTb3J0QnksXG4gICAgICBzb3J0RGlyZWN0aW9uOiBvbGRTb3J0RGlyZWN0aW9uLFxuICAgICAgZmlsdGVyczogb2xkRmlsdGVyc1xuICAgIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3QgbmV3RGF0YSA9IHtcbiAgICAgIHNvcnRCeTogc29ydEJ5IHx8IG9sZFNvcnRCeSxcbiAgICAgIHNvcnREaXJlY3Rpb246IHNvcnREaXJlY3Rpb24gfHwgb2xkU29ydERpcmVjdGlvbixcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgLi4ub2xkRmlsdGVycyxcbiAgICAgICAgLi4uZmlsdGVyc1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnByb3BzLm9uRmlsdGVyKG5ld0RhdGEpXG4gIH1cblxuICBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmRpc2FibGVLZXlib2FyZFNob3J0Y3V0cykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdhJzpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkpICYmXG4gICAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RhYmxlID09PSBEYXRhR3JpZC5NVUxUSV9TRUxFQ1RcbiAgICAgICAgKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLnJvd0NvdW50ID09PSB0aGlzLnByb3BzLnNlbGVjdGVkUm93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzZWxlY3RBbGwoKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEFsbCgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiAoe1xuICAgICAgICAgIGZvY3VzZWRSb3c6IE1hdGgubWF4KChzdGF0ZS5mb2N1c2VkUm93IHx8IDApIC0gMSwgMClcbiAgICAgICAgfSkpXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGUgPT4gKHtcbiAgICAgICAgICBmb2N1c2VkUm93OlxuICAgICAgICAgICAgc3RhdGUuZm9jdXNlZFJvdyAhPSBudWxsXG4gICAgICAgICAgICAgID8gTWF0aC5taW4oc3RhdGUuZm9jdXNlZFJvdyArIDEsIHRoaXMucHJvcHMucm93Q291bnQgLSAxKVxuICAgICAgICAgICAgICA6IDBcbiAgICAgICAgfSkpXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICBpZiAodGhpcy5wcm9wcy5zZWxlY3RhYmxlKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3Qoe1xuICAgICAgICAgICAgaW5kZXg6IHRoaXMuc3RhdGUuZm9jdXNlZFJvdyB8fCAwLFxuICAgICAgICAgICAgY29udGlndW91czogZXZlbnQuc2hpZnRLZXlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ1NoaWZ0JzpcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0aW5nOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaGFuZGxlS2V5VXAgPSAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZGlzYWJsZUtleWJvYXJkU2hvcnRjdXRzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ1NoaWZ0JzpcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgc2VsZWN0aW5nOiBmYWxzZVxuICAgICAgICB9KVxuICAgICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIHRocm90dGxpbmcgdGhpcyBzbyBhIGRvdWJsZSBjbGljayBiZWhhdmVzIGxpa2UgYSBzaW5nbGUgY2xpY2tcbiAgaGFuZGxlUm93Q2xpY2sgPSB0aHJvdHRsZShcbiAgICAoeyBldmVudCwgaW5kZXggfTogeyBldmVudDogUmVhY3QuTW91c2VFdmVudDxhbnk+OyBpbmRleDogbnVtYmVyIH0pID0+IHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5hbGxvd1Jvd0V2ZW50UGFzc3Rocm91Z2gpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgIH1cblxuICAgICAgdGhpcy50b2dnbGVTZWxlY3QoeyBpbmRleCwgY29udGlndW91czogZXZlbnQuc2hpZnRLZXkgfSlcbiAgICB9LFxuICAgIDI1MCxcbiAgICB7IGxlYWRpbmc6IHRydWUsIHRyYWlsaW5nOiBmYWxzZSB9XG4gIClcblxuICBoYW5kbGVSZXNpemUgPSAoeyB4LCBpbmRleCB9OiB7IHg6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9KSA9PiB7XG4gICAgaWYgKHRoaXMuY29sdW1uV2lkdGhQZXJjZW50cy5sZW5ndGggPiAwICYmIHRoaXMudG90YWxXaWR0aCkge1xuICAgICAgY29uc3QgcHJldldpZHRocyA9IHRoaXMuY29sdW1uV2lkdGhQZXJjZW50c1xuICAgICAgY29uc3QgbmV3V2lkdGhzID0gWy4uLnByZXZXaWR0aHNdXG4gICAgICBjb25zdCBwYXJlbnRXaWR0aCA9IHRoaXMucHJvcHMuc2Nyb2xsV2lkdGggPz8gdGhpcy5wcm9wcy53aWR0aFxuICAgICAgLy8gbGltaXQgbmV4dCBpbmRleCBmcm9tIGdvaW5nIGJleW9uZCBib3VuZHNcbiAgICAgIGNvbnN0IG5leHRJbmRleCA9IE1hdGgubWluKGluZGV4ICsgMSwgcHJldldpZHRocy5sZW5ndGggLSAxKVxuICAgICAgY29uc3QgcGVyY2VudENoYW5nZSA9IHggLyB0aGlzLnRvdGFsV2lkdGhcblxuICAgICAgaWYgKHRoaXMucHJvcHMuc2Nyb2xsV2lkdGgpIHtcbiAgICAgICAgLy8gaWYgdGFibGUgaXMgc2Nyb2xsYWJsZSwgd2UgY2FuIGdyb3cgdGhlIGNvbHVtbiB3aXRob3V0XG4gICAgICAgIC8vIHNocmlua2luZyB0aGUgb3RoZXJzXG4gICAgICAgIGNvbnN0IHNhZmVQZXJjZW50Q2hhbmdlID1cbiAgICAgICAgICAocHJldldpZHRoc1tpbmRleF0gKyBwZXJjZW50Q2hhbmdlKSAqIHBhcmVudFdpZHRoIDxcbiAgICAgICAgICBEYXRhR3JpZC5NSU5fQ09MX1dJRFRIXG4gICAgICAgICAgICA/IDBcbiAgICAgICAgICAgIDogcGVyY2VudENoYW5nZVxuICAgICAgICBuZXdXaWR0aHNbaW5kZXhdID0gcHJldldpZHRoc1tpbmRleF0gKyBzYWZlUGVyY2VudENoYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgdGhlIHRhYmxlIGlzIG5vdCBzY3JvbGxhYmxlLCBlbnN1cmUgYWxsIGNvbHVtbnMgZml0IGJ5XG4gICAgICAgIC8vIGFkanVzdGluZyB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZSBvbmUgYWZ0ZXIgaXRcbiAgICAgICAgY29uc3Qgc2FmZVBlcmNlbnRDaGFuZ2UgPVxuICAgICAgICAgIChwcmV2V2lkdGhzW2luZGV4XSArIHBlcmNlbnRDaGFuZ2UpICogcGFyZW50V2lkdGggPFxuICAgICAgICAgICAgRGF0YUdyaWQuTUlOX0NPTF9XSURUSCB8fFxuICAgICAgICAgIChwcmV2V2lkdGhzW25leHRJbmRleF0gLSBwZXJjZW50Q2hhbmdlKSAqIHBhcmVudFdpZHRoIDxcbiAgICAgICAgICAgIERhdGFHcmlkLk1JTl9DT0xfV0lEVEhcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBwZXJjZW50Q2hhbmdlXG4gICAgICAgIG5ld1dpZHRoc1tpbmRleF0gPSBwcmV2V2lkdGhzW2luZGV4XSArIHNhZmVQZXJjZW50Q2hhbmdlXG4gICAgICAgIG5ld1dpZHRoc1tuZXh0SW5kZXhdID0gcHJldldpZHRoc1tuZXh0SW5kZXhdIC0gc2FmZVBlcmNlbnRDaGFuZ2VcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMucHJvcHMub25SZXNpemUpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5vblJlc2l6ZShcbiAgICAgICAgICAvLyBtdWx0aXBseSBieSB3aWR0aCBwcm9wIHRvIGdldCBjb3JyZWN0IHBlcmNlbnRhZ2VcbiAgICAgICAgICBuZXdXaWR0aHMubWFwKHdpZHRoID0+IE1hdGgucm91bmQod2lkdGggKiBwYXJlbnRXaWR0aCkpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtYXBDaGlsZHJlbiA9ICgpID0+IHtcbiAgICBjb25zdCBJc0FycmF5ID0gKFxuICAgICAgY2hpbGRyZW5cbiAgICApOiBjaGlsZHJlbiBpcyAoQ29sdW1uRnVuY3Rpb24gfCBDb2x1bW5GdW5jdGlvbltdKVtdID0+XG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKVxuXG4gICAgY29uc3QgY2hpbGRyZW46IChDb2x1bW5GdW5jdGlvbiB8IENvbHVtbkZ1bmN0aW9uW10pW10gPSBJc0FycmF5KFxuICAgICAgdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgIClcbiAgICAgID8gdGhpcy5wcm9wcy5jaGlsZHJlblxuICAgICAgOiBbdGhpcy5wcm9wcy5jaGlsZHJlbl1cblxuICAgIGNvbnN0IHZhbGlkQ2hpbGRyZW4gPSBjaGlsZHJlblxuICAgICAgLmZsYXQoKVxuICAgICAgLmZpbHRlcihjaGlsZCA9PiB0eXBlb2YgY2hpbGQgPT09ICdmdW5jdGlvbicpXG5cbiAgICByZXR1cm4gdmFsaWRDaGlsZHJlbi5tYXAoKGNoaWxkLCBpbmRleCkgPT5cbiAgICAgIGNoaWxkKHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLnByb3BzLmxvY2FsZSB8fCAnZW4nLFxuICAgICAgICBsb2NhbGVTdHJpbmdzOiB0aGlzLnByb3BzLmxvY2FsZVN0cmluZ3MgfHwge30sXG4gICAgICAgIGNvbHVtbkluZGV4OiBpbmRleCxcbiAgICAgICAgY29sdW1uQ291bnQ6IHZhbGlkQ2hpbGRyZW4ubGVuZ3RoLFxuICAgICAgICBnZXRGaWx0ZXJWYWx1ZTogZGF0YUtleSA9PlxuICAgICAgICAgIHRoaXMucHJvcHMuZmlsdGVycyAmJiB0aGlzLnByb3BzLmZpbHRlcnNbZGF0YUtleV0sXG4gICAgICAgIG9uSGVhZGVyUG9wb3Zlck9wZW46IG9wZW4gPT5cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGlzYWJsZUtleWJvYXJkU2hvcnRjdXRzOiBvcGVuIH0pLFxuICAgICAgICBvblNvcnQ6IHNvcnRBcmdzID0+IHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkUm93cyhbXSlcbiAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlcih7IC4uLnNvcnRBcmdzIH0pXG4gICAgICAgIH0sXG4gICAgICAgIG9uRmlsdGVyOiAoeyBkYXRhS2V5LCB2YWx1ZSwgb3BlcmF0b3IgfSkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWRSb3dzKFtdKVxuICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyKHtcbiAgICAgICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICAgICAgW2RhdGFLZXldOiBvcGVyYXRvclxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3JcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSxcbiAgICAgICAgb25SZXNpemU6XG4gICAgICAgICAgLy8gdGhlIHByZXNlbmNlIG9mIGBvblJlc2l6ZWAgd2lsbCBzaG93IGRyYWcgaGFuZGxlcyBzbyBkb24ndCBzZXQgaXRcbiAgICAgICAgICAvLyBpZiBubyBwcm9wIGlzIHBhc3NlZCBpbiBvciBmb3IgdGhlIGxhc3QgY29sdW1uIGlmIHRoZSB0YWJsZSBpc24ndFxuICAgICAgICAgIC8vIHNjcm9sbGFibGVcbiAgICAgICAgICB0aGlzLnByb3BzLm9uUmVzaXplICYmXG4gICAgICAgICAgKCghdGhpcy5wcm9wcy5zY3JvbGxXaWR0aCAmJiBpbmRleCAhPT0gdmFsaWRDaGlsZHJlbi5sZW5ndGggLSAxKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5zY3JvbGxXaWR0aClcbiAgICAgICAgICAgID8gKHsgeCB9KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNpemUoeyB4LCBpbmRleCB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICBpc1Jvd0xvYWRlZCA9ICh7IGluZGV4IH06IEluZGV4KSA9PiB7XG4gICAgY29uc3QgeyBoYXNNb3JlUm93cywgcm93Q291bnQgfSA9IHRoaXMucHJvcHNcbiAgICByZXR1cm4gIWhhc01vcmVSb3dzIHx8IGluZGV4IDwgcm93Q291bnRcbiAgfVxuXG4gIGlzQ29udGV4dE1lbnVWaXNpYmxlID0gKGluZGV4OiBudW1iZXIpID0+XG4gICAgdGhpcy5zdGF0ZS5hY3RpdmVDb250ZXh0TWVudSAmJiB0aGlzLnN0YXRlLmFjdGl2ZUNvbnRleHRNZW51LmluZGV4ID09PSBpbmRleFxuXG4gIGNsb3NlQ29udGV4dE1lbnUgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBhY3RpdmVDb250ZXh0TWVudTogbnVsbFxuICAgIH0pXG4gIH1cblxuICBjb250ZXh0TWVudVJlbmRlcmVyID0gKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnByb3BzLmNvbnRleHRNZW51UmVuZGVyZXIgJiZcbiAgICAgIHRoaXMuaXNDb250ZXh0TWVudVZpc2libGUoaW5kZXgpICYmXG4gICAgICBkb2N1bWVudC5ib2R5ICE9PSBudWxsXG4gICAgKSB7XG4gICAgICBjb25zdCBjb250ZXh0TWVudUNsb3NlV3JhcHBlciA9IChcbiAgICAgICAgPENsb3NlV3JhcHBlciBvbkNsb3NlPXt0aGlzLmNsb3NlQ29udGV4dE1lbnV9PlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNvbnRleHRNZW51UmVuZGVyZXIoe1xuICAgICAgICAgICAgLi4udGhpcy5zdGF0ZS5hY3RpdmVDb250ZXh0TWVudSxcbiAgICAgICAgICAgIHNlbGVjdGVkUm93czogdGhpcy5wcm9wcy5zZWxlY3RlZFJvd3MsXG4gICAgICAgICAgICBvbkNsb3NlOiB0aGlzLmNsb3NlQ29udGV4dE1lbnVcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC9DbG9zZVdyYXBwZXI+XG4gICAgICApXG4gICAgICByZXR1cm4gUmVhY3RET00uY3JlYXRlUG9ydGFsKGNvbnRleHRNZW51Q2xvc2VXcmFwcGVyLCBkb2N1bWVudC5ib2R5KVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaGVhZGVyUm93UmVuZGVyZXIgPSAoe1xuICAgIGNvbHVtbnMsXG4gICAgc3R5bGVcbiAgfToge1xuICAgIGNvbHVtbnM6IFJlYWN0LlJlYWN0Tm9kZVtdXG4gICAgc3R5bGU6IHt9XG4gIH0pID0+IChcbiAgICA8RWxlbWVudHMuUm93IHJvbGU9XCJyb3dcIiBoZWFkZXIgemVicmEgc3R5bGU9e3N0eWxlfT5cbiAgICAgIHtjb2x1bW5zfVxuICAgIDwvRWxlbWVudHMuUm93PlxuICApXG5cbiAgcm93UmVuZGVyZXIgPSAoe1xuICAgIGtleSxcbiAgICBzdHlsZSxcbiAgICBpbmRleCxcbiAgICByb3dEYXRhLFxuICAgIGNvbHVtbnMsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uUm93TW91c2VPdmVyLFxuICAgIG9uUm93TW91c2VPdXRcbiAgfTogVGFibGVSb3dQcm9wcykgPT4gKFxuICAgIDxGb2N1c2FibGVSb3dcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgYXJpYS1yb3dpbmRleD17aW5kZXggKyAxfVxuICAgICAgemVicmE9e2luZGV4ICUgMiA9PT0gMX1cbiAgICAgIHNlbGVjdGVkPXt0aGlzLnByb3BzLnNlbGVjdGVkUm93cy5pbmNsdWRlcyhpbmRleCl9XG4gICAgICBzZWxlY3Rpbmc9e3RoaXMuc3RhdGUuc2VsZWN0aW5nfVxuICAgICAgZm9jdXNlZD17aW5kZXggPT09IHRoaXMuc3RhdGUuZm9jdXNlZFJvd31cbiAgICAgIGtleT17a2V5fVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgb25Nb3VzZUxlYXZlPXtldmVudCA9PiB7XG4gICAgICAgIG9uUm93TW91c2VPdXQgJiYgb25Sb3dNb3VzZU91dCh7IHJvd0RhdGEsIGluZGV4LCBldmVudCB9KVxuICAgICAgfX1cbiAgICAgIG9uTW91c2VFbnRlcj17ZXZlbnQgPT4ge1xuICAgICAgICBvblJvd01vdXNlT3ZlciAmJiBvblJvd01vdXNlT3Zlcih7IHJvd0RhdGEsIGluZGV4LCBldmVudCB9KVxuICAgICAgfX1cbiAgICAgIG9uRm9jdXM9eygpID0+IHRoaXMuc2V0U3RhdGUoeyBmb2N1c2VkUm93OiBpbmRleCB9KX1cbiAgICAgIGRhdGEtaW5zdHJ1bWVudGF0aW9uPXtgJHt0aGlzLnByb3BzWydkYXRhLWluc3RydW1lbnRhdGlvbiddfS1yb3cke1xuICAgICAgICBpbmRleCArIDFcbiAgICAgIH1gfVxuICAgICAgb25DbGljaz17XG4gICAgICAgIHRoaXMucHJvcHMuc2VsZWN0YWJsZSAmJiAhdGhpcy5zdGF0ZS5hY3RpdmVDb250ZXh0TWVudVxuICAgICAgICAgID8gZXZlbnQgPT4gdGhpcy5oYW5kbGVSb3dDbGljayh7IGV2ZW50LCBpbmRleDogaW5kZXggfSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgb25Db250ZXh0TWVudT17XG4gICAgICAgIHRoaXMucHJvcHMuY29udGV4dE1lbnVSZW5kZXJlclxuICAgICAgICAgID8gZXZlbnQgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAgICAgICBhY3RpdmVDb250ZXh0TWVudToge1xuICAgICAgICAgICAgICAgICAgbGVmdDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgICAgIHRvcDogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgIHJvd0RhdGE6IHJvd0RhdGFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGhpcy5wcm9wcy5zZWxlY3RlZFJvd3MuaW5jbHVkZXMoaW5kZXgpICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zZWxlY3RhYmxlXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUm93Q2xpY2soeyBldmVudCwgaW5kZXg6IGluZGV4IH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICBvbkRvdWJsZUNsaWNrPXtldmVudCA9PlxuICAgICAgICB0aGlzLnByb3BzLm9uUm93RG91YmxlQ2xpY2sgJiZcbiAgICAgICAgdGhpcy5wcm9wcy5vblJvd0RvdWJsZUNsaWNrKHsgaW5kZXgsIGV2ZW50LCByb3dEYXRhIH0pXG4gICAgICB9XG4gICAgPlxuICAgICAge3RoaXMuY29sdW1uVHJhbnNmb3JtZXJcbiAgICAgICAgPyB0aGlzLmNvbHVtblRyYW5zZm9ybWVyKGNvbHVtbnMsIHJvd0RhdGEsIGluZGV4KVxuICAgICAgICA6IGNvbHVtbnN9XG4gICAgICB7dGhpcy5jb250ZXh0TWVudVJlbmRlcmVyKGluZGV4KX1cbiAgICA8L0ZvY3VzYWJsZVJvdz5cbiAgKVxuXG4gIC8qKlxuICAgKiAgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzIGlzIGFkZGVkIGJlY2F1c2UgZXZlbiB0aG91Z2ggdGhlIHByb3BzIGFyZSBub3QgdXNlZCBpbiB0aGlzIGNvbXBvbmVudFxuICAgKiB0aGV5IGFyZSBnZXR0aW5nIGRlc3RydWN0dXJlZCBpbnRvIC4uLnByb3BzIGFuZCBwYXNzZWQgZnVydGhlciBkb3duIHRoZSB0cmVlXG4gICAqL1xuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBoYXNNb3JlUm93cyxcbiAgICAgIGhlaWdodCxcbiAgICAgIGxvYWRNb3JlUm93cyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgIG9uRmlsdGVyLFxuICAgICAgcm93Q291bnQsXG4gICAgICBzb3J0QnkgPSAnJyxcbiAgICAgIHNvcnREaXJlY3Rpb24sXG4gICAgICB3aWR0aCxcbiAgICAgIC4uLnByb3BzXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIC8vIFRoaXMgZml4ZXMgYW4gaXNzdWUgd2hlcmUgdGhlIGhlYWRlciBvZiB0aGUgRGF0YUdyaWQgZG9lc24ndCByZW5kZXIgb24gcGFnZSBsb2FkIGluIFNhZmFyaVxuICAgIGNvbnN0IHNhZmFyaVN0eWxlID0ge1xuICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWigwKWBcbiAgICB9XG5cbiAgICBjb25zdCBtYXBwZWRDaGlsZHJlbiA9IHRoaXMubWFwQ2hpbGRyZW4oKS5maWx0ZXIoY2hpbGQgPT4gY2hpbGQgIT09IG51bGwpXG4gICAgLy8gVE9ETzogQmV0dGVyIHR5cGUgc2lnbmF0dXJlIHdoZW4gYWNjZXNzaW5nIGNoaWxkcmVuIHByb3BzP1xuICAgIGNvbnN0IHNwYW5EYXRhID0gbWFwcGVkQ2hpbGRyZW4ubWFwKChjaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50KSA9PiAoe1xuICAgICAgY29sc3BhbjogY2hpbGQucHJvcHMuY29sc3BhbiA/IGNoaWxkLnByb3BzLmNvbHNwYW4gOiAoKSA9PiAxLFxuICAgICAgd2lkdGg6IGNoaWxkLnByb3BzLndpZHRoLFxuICAgICAgZmxleEdyb3c6IGNoaWxkLnByb3BzLmZsZXhHcm93XG4gICAgfSkpXG4gICAgLy8gR2V0IHRoZSBhY3R1YWwgd2lkdGggb2YgYWxsIHRoZSBjb2x1bW5zLiBUaGlzIGlzIGluZGVwZW5kZW50IGZyb20gdGhlXG4gICAgLy8gd2lkdGggcHJvcC5cbiAgICB0aGlzLnRvdGFsV2lkdGggPSBtYXBwZWRDaGlsZHJlbi5yZWR1Y2U8bnVtYmVyPihcbiAgICAgICh0b3RhbDogbnVtYmVyLCBjaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50PEJhc2ljQ29sdW1uUHJvcHM+KSA9PlxuICAgICAgICB0b3RhbCArIGNoaWxkLnByb3BzLndpZHRoLFxuICAgICAgMFxuICAgIClcbiAgICAvLyBDb252ZXJ0IHRoZSB3aWR0aHMgdG8gcGVyY2VudHMgc28gd2UgY2FuIG1hcCB0aGVtIGJhY2sgdG8gdGhlIHJlYWwgdGFibGVcbiAgICAvLyB3aWR0aCBsYXRlci5cbiAgICB0aGlzLmNvbHVtbldpZHRoUGVyY2VudHMgPSBtYXBwZWRDaGlsZHJlbi5tYXAoXG4gICAgICAoeyBwcm9wcyB9OiBSZWFjdC5SZWFjdEVsZW1lbnQpID0+IHByb3BzLndpZHRoIC8gdGhpcy50b3RhbFdpZHRoXG4gICAgKVxuXG4gICAgdGhpcy5jb2x1bW5UcmFuc2Zvcm1lciA9IChcbiAgICAgIGNvbHVtbnM6IFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+W10sXG4gICAgICByb3dEYXRhLFxuICAgICAgcm93SW5kZXhcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHNwYW5zID0gc3BhbkRhdGEubWFwKGl0ZW0gPT4gaXRlbS5jb2xzcGFuKHJvd0RhdGEpKVxuICAgICAgY29uc3Qgc3Bhbm5lZENvbHVtbnM6IFJlYWN0LlJlYWN0RWxlbWVudFtdID0gW11cbiAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgIHdoaWxlIChpbmRleCA8IGNvbHVtbnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHNwYW4gPSBzcGFuc1tpbmRleF1cbiAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1uc1tpbmRleF1cbiAgICAgICAgaWYgKHNwYW4gPiAxKSB7XG4gICAgICAgICAgY29uc3QgZm9sbG93aW5nQ29sdW1ucyA9IHNwYW5EYXRhLnNsaWNlKGluZGV4LCBzcGFuKVxuICAgICAgICAgIC8vIGZpbmQgbmV3IHdpZHRoIGJ5IGFkZGluZyBjdXJyZW50IGNvbHVtbiB3aWR0aCBwbHVzIGNvbHVtbnMgdGhhdCBhcmUgc3Bhbm5lZCBvdmVyXG5cbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGZvbGxvd2luZ0NvbHVtbnMucmVkdWNlKFxuICAgICAgICAgICAgKGFjY3VtdWxhdG9yLCB7IHdpZHRoIH06IHsgd2lkdGg6IG51bWJlciB9KSA9PiBhY2N1bXVsYXRvciArIHdpZHRoLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcblxuICAgICAgICAgIGNvbnN0IGZsZXhHcm93ID0gZm9sbG93aW5nQ29sdW1ucy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjdW11bGF0b3IsIHsgZmxleEdyb3cgfTogeyBmbGV4R3JvdzogbnVtYmVyIH0pID0+XG4gICAgICAgICAgICAgIGFjY3VtdWxhdG9yICsgZmxleEdyb3csXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5uZWRDb2x1bW5zLnB1c2goXG4gICAgICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY29sdW1uLCB7XG4gICAgICAgICAgICAgICdkYXRhLWluc3RydW1lbnRhdGlvbic6IGAke3RoaXMucHJvcHNbJ2RhdGEtaW5zdHJ1bWVudGF0aW9uJ119LXJvdyR7cm93SW5kZXh9LWNvbCR7aW5kZXh9YCxcbiAgICAgICAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAuLi5FbGVtZW50cy5jZWxsUmVzZXRTdHlsZSxcbiAgICAgICAgICAgICAgICBmbGV4OiBgMCAxICR7d2lkdGh9cHhgLFxuICAgICAgICAgICAgICAgIGZsZXhHcm93XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICAgIGluZGV4ICs9IHNwYW4gLy8gc2tpcCBjb2x1bW5zIHRoYXQgaGF2ZSBiZWVuIHNwYW5uZWQgb3ZlclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNwYW5uZWRDb2x1bW5zLnB1c2goXG4gICAgICAgICAgICBSZWFjdC5jbG9uZUVsZW1lbnQoY29sdW1uLCB7XG4gICAgICAgICAgICAgICdkYXRhLWluc3RydW1lbnRhdGlvbic6IGAke3RoaXMucHJvcHNbJ2RhdGEtaW5zdHJ1bWVudGF0aW9uJ119LXJvdyR7cm93SW5kZXh9LWNvbCR7aW5kZXh9YFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgICAgaW5kZXgrK1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3Bhbm5lZENvbHVtbnNcbiAgICB9XG5cbiAgICBjb25zdCBUYWJsZUNvbXBvbmVudCA9XG4gICAgICB0aGlzLnByb3BzLnNjcm9sbFdpZHRoICE9PSB1bmRlZmluZWQgPyBTY3JvbGxhYmxlVGFibGUgOiBUYWJsZVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxFbGVtZW50cy5UYWJsZUNvbnRhaW5lclxuICAgICAgICBjc3M9e3sgd2lkdGgsIGhlaWdodCB9fVxuICAgICAgICBvbktleURvd249e3RoaXMuaGFuZGxlS2V5RG93bn1cbiAgICAgICAgb25LZXlVcD17dGhpcy5oYW5kbGVLZXlVcH1cbiAgICAgICAgZGF0YS1pbnN0cnVtZW50YXRpb249e2Ake3RoaXMucHJvcHNbJ2RhdGEtaW5zdHJ1bWVudGF0aW9uJ119LWdyaWRgfVxuICAgICAgPlxuICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICBpc1Jvd0xvYWRlZD17dGhpcy5pc1Jvd0xvYWRlZH1cbiAgICAgICAgICBsb2FkTW9yZVJvd3M9e2xvYWRNb3JlUm93cyB8fCAoKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKSl9XG4gICAgICAgICAgcm93Q291bnQ9e2hhc01vcmVSb3dzID8gcm93Q291bnQgKyAxIDogcm93Q291bnR9XG4gICAgICAgICAgdGhyZXNob2xkPXs1fVxuICAgICAgICAgIHJlZj17dGhpcy5pbmZpbml0ZVRhYmxlfVxuICAgICAgICA+XG4gICAgICAgICAgeyh7IG9uUm93c1JlbmRlcmVkLCByZWdpc3RlckNoaWxkIH0pID0+IChcbiAgICAgICAgICAgIDxUYWJsZUNvbXBvbmVudFxuICAgICAgICAgICAgICBzdHlsZT17c2FmYXJpU3R5bGV9XG4gICAgICAgICAgICAgIGdyaWRTdHlsZT17eyBvdXRsaW5lOiAnbm9uZScgfX1cbiAgICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXszNn1cbiAgICAgICAgICAgICAgcm93SGVpZ2h0PXszMH1cbiAgICAgICAgICAgICAgc29ydEJ5PXtzb3J0Qnl9XG4gICAgICAgICAgICAgIHNvcnREaXJlY3Rpb249e3NvcnREaXJlY3Rpb259XG4gICAgICAgICAgICAgIHJlZj17cmVnaXN0ZXJDaGlsZH1cbiAgICAgICAgICAgICAgbm9Sb3dzUmVuZGVyZWQ9eygpID0+IDxkaXY+Tm8gcmVzdWx0czwvZGl2Pn1cbiAgICAgICAgICAgICAgb25Sb3dzUmVuZGVyZWQ9e29uUm93c1JlbmRlcmVkfVxuICAgICAgICAgICAgICBvblNjcm9sbD17XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5hY3RpdmVDb250ZXh0TWVudVxuICAgICAgICAgICAgICAgICAgPyAoKSA9PiB0aGlzLmNsb3NlQ29udGV4dE1lbnUoKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByb3dDb3VudD17aGFzTW9yZVJvd3MgPyByb3dDb3VudCArIDEgOiByb3dDb3VudH1cbiAgICAgICAgICAgICAgaGVhZGVyUm93UmVuZGVyZXI9e3RoaXMuaGVhZGVyUm93UmVuZGVyZXJ9XG4gICAgICAgICAgICAgIHJvd1JlbmRlcmVyPXt0aGlzLnJvd1JlbmRlcmVyfVxuICAgICAgICAgICAgICAvLyBhY2NvdW50IGZvciBib3JkZXIgd2lkdGggb2YgY29udGFpbmVyXG4gICAgICAgICAgICAgIHdpZHRoPXt3aWR0aCAtIDJ9XG4gICAgICAgICAgICAgIGhlaWdodD17aGVpZ2h0IC0gMn1cbiAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7bWFwcGVkQ2hpbGRyZW59XG4gICAgICAgICAgICA8L1RhYmxlQ29tcG9uZW50PlxuICAgICAgICAgICl9XG4gICAgICAgIDwvSW5maW5pdGVMb2FkZXI+XG4gICAgICA8L0VsZW1lbnRzLlRhYmxlQ29udGFpbmVyPlxuICAgIClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEYXRhR3JpZFxuIl19 */"),
681
681
  onKeyDown: this.handleKeyDown,
682
682
  onKeyUp: this.handleKeyUp,
683
683
  "data-instrumentation": "".concat(this.props['data-instrumentation'], "-grid"),
@@ -2,7 +2,10 @@ import type { StylesConfig } from 'react-select';
2
2
  import type { Theme } from '../ThemeProvider';
3
3
  import type { Options, OptionValue } from './components';
4
4
  import type { SelectComponentStyles } from './types';
5
- export declare function getLongestOptionLength(options: Options, theme: Theme, originalWidth?: number | string): string | number | undefined;
5
+ declare type TextWidthStyles = {
6
+ fontFamily: string;
7
+ };
8
+ export declare function getLongestOptionLength(options: Options, styles: TextWidthStyles, originalWidth?: number | string): string | number | undefined;
6
9
  declare type GetCustomStylesProps = {
7
10
  dataGrid?: boolean;
8
11
  guessMenuWidth?: boolean;
@@ -42,8 +42,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
42
42
  if (typeof window !== "undefined" && !window.gs) window.gs = function () {};
43
43
  if (typeof window !== "undefined" && !window.gsC) window.gsC = function () {};
44
44
 
45
- function getTextWidth(inputText, theme) {
46
- var font = "".concat(_elements.FONT_SIZE, "px ").concat(theme.fontFamily.body);
45
+ function getTextWidth(inputText, styles) {
46
+ var font = "".concat(_elements.FONT_SIZE, "px ").concat(styles.fontFamily);
47
47
  var canvas = document.createElement('canvas');
48
48
  var context = canvas.getContext('2d');
49
49
 
@@ -70,7 +70,7 @@ function byteLength(str) {
70
70
  return s;
71
71
  }
72
72
 
73
- function getLongestOptionLength(options, theme, originalWidth) {
73
+ function getLongestOptionLength(options, styles, originalWidth) {
74
74
  var maxObj = options.reduce(function (max, option, index) {
75
75
  var currSize = byteLength(option && option.label || '');
76
76
 
@@ -93,9 +93,9 @@ function getLongestOptionLength(options, theme, originalWidth) {
93
93
  var _option = options[maxObj.index];
94
94
 
95
95
  if (_typeof(_option) === 'object') {
96
- return getTextWidth(_option.label, theme);
96
+ return getTextWidth(_option.label, styles);
97
97
  } else {
98
- return getTextWidth(_option, theme);
98
+ return getTextWidth(String(_option), styles);
99
99
  }
100
100
  }
101
101
  }
@@ -177,7 +177,9 @@ function getMultiClearIndicatorStyle() {
177
177
 
178
178
  function getFixedWidthMenuStyle(theme, options, originalWidth) {
179
179
  return {
180
- width: "".concat(getLongestOptionLength(options, theme, originalWidth), "px")
180
+ width: "".concat(getLongestOptionLength(options, {
181
+ fontFamily: theme.fontFamily.body
182
+ }, originalWidth), "px")
181
183
  };
182
184
  }
183
185
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "td-stylekit",
3
- "version": "27.3.0",
3
+ "version": "28.0.0",
4
4
  "main": "dist/es/index.js",
5
5
  "module": "dist/es/index.js",
6
6
  "types": "dist/es/index.d.ts",