angular-three-soba 2.0.0-beta.251 → 2.0.0-beta.252

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/README.md CHANGED
@@ -1,7 +1,65 @@
1
- # soba
1
+ # `angular-three-soba`
2
2
 
3
- This library was generated with [Nx](https://nx.dev).
3
+ `angular-three-soba` provides a comprehensive set of utilities and abstractions for building 3D applications with Angular Three. It offers components and helpers for various aspects of your projects, including cameras, controls, loaders, materials, shaders, and more. These components are ported from the popular React Three Fiber [`drei`](https://github.com/pmndrs/drei) library, making it easier for developers familiar with `drei` to leverage its functionality within the Angular ecosystem.
4
4
 
5
- ## Running unit tests
5
+ ## Installation
6
6
 
7
- Run `nx test soba` to execute the unit tests.
7
+ ```bash
8
+ npm install angular-three-soba three-stdlib @monogrid/gainmap-js @pmndrs/vanilla
9
+ # yarn add angular-three-soba three-stdlib @monogrid/gainmap-js @pmndrs/vanilla
10
+ # pnpm add angular-three-soba three-stdlib @monogrid/gainmap-js @pmndrs/vanilla
11
+ ```
12
+
13
+ > There are more peer dependencies that the consumers might need to install separately based on the secondary entry points that they pull in
14
+
15
+ ## Secondary Entry Points
16
+
17
+ `angular-three-soba` is organized into multiple secondary entry points, each focusing on a specific area of functionality. This modular structure allows you to import only the components you need, keeping your project lean and efficient.
18
+
19
+ ### `angular-three-soba/abstractions`
20
+
21
+ Provides abstract components and patterns for building reusable and composable 3D elements in Angular Three.
22
+
23
+ [Read more about `angular-three-soba/abstractions`](./abstractions/README.md)
24
+
25
+ ### `angular-three-soba/cameras`
26
+
27
+ Offers a variety of camera components, including specialized cameras like the `CubeCamera`, `OrthographicCamera`, and `PerspectiveCamera`, as well as helper components for camera controls.
28
+
29
+ [Read more about `angular-three-soba/cameras`](./cameras/README.md)
30
+
31
+ ### `angular-three-soba/controls`
32
+
33
+ Includes components for user interaction and camera manipulation, such as the `OrbitControls`, `PointerLockControls`, and `TransformControls`.
34
+
35
+ [Read more about `angular-three-soba/controls`](./controls/README.md)
36
+
37
+ ### `angular-three-soba/loaders`
38
+
39
+ Provides loaders for different types of 3D assets, including GLTF, texture, cube texture, HDR, and more.
40
+
41
+ [Read more about `angular-three-soba/loaders`](./loaders/README.md)
42
+
43
+ ### `angular-three-soba/materials`
44
+
45
+ Offers a collection of materials with advanced features, such as `MeshReflectorMaterial`, `PhysicalMaterial`, `ShaderMaterial`, and `NormalMaterial`.
46
+
47
+ [Read more about `angular-three-soba/materials`](./materials/README.md)
48
+
49
+ ### `angular-three-soba/misc`
50
+
51
+ Contains miscellaneous components for various tasks, like the `Stats` component for displaying performance statistics, the `Shadow` component for rendering shadows, and the `Text` component for adding 3D text.
52
+
53
+ [Read more about `angular-three-soba/misc`](./misc/README.md)
54
+
55
+ ### `angular-three-soba/shaders`
56
+
57
+ Includes shader components and utilities for creating custom shaders and post-processing effects.
58
+
59
+ [Read more about `angular-three-soba/shaders`](./shaders/README.md)
60
+
61
+ ### `angular-three-soba/staging`
62
+
63
+ Provides helpful components for staging and managing 3D scenes, such as the `Environment` component for setting up environment lighting, the `Stage` component for creating a basic stage setup, and the `PresentationControls` component for interactive scene presentations.
64
+
65
+ [Read more about `angular-three-soba/staging`](./staging/README.md)
@@ -1,3 +1,113 @@
1
- # angular-three-soba/abstractions
1
+ # `angular-three-soba/abstractions`
2
2
 
3
- Secondary entry point of `angular-three-soba`. It can be used by importing from `angular-three-soba/abstractions`.
3
+ This module provides abstract components and patterns for building reusable and composable 3D elements in Angular Three. It requires the following peer dependencies:
4
+
5
+ | Package | Description |
6
+ | ------------------- | -------------------------------------------- |
7
+ | `troika-three-text` | Required for using the `NgtsText` component. |
8
+
9
+ To install these dependencies, use one of the following commands:
10
+
11
+ ```bash
12
+ npm install troika-three-text
13
+ # yarn add troika-three-text
14
+ # pnpm add troika-three-text
15
+ ```
16
+
17
+ ## NgtsGrid
18
+
19
+ A y-up oriented, shader-based grid implementation.
20
+
21
+ This component renders a grid using a shader material, allowing for efficient rendering of large grids. It provides options to customize the appearance of the grid, such as cell size, cell thickness, cell color, section size, section thickness, section color, and more.
22
+
23
+ ### Object Inputs (NgtsGridOptions)
24
+
25
+ | Property | Description | Default Value |
26
+ | ------------------ | ------------------------------------------------------------------------------------------------------------ | ----------------- |
27
+ | `planeArgs` | Default plane-geometry arguments. | `[]` |
28
+ | `cellSize` | Cell size. | `0.5` |
29
+ | `cellThickness` | Cell thickness. | `0.5` |
30
+ | `cellColor` | Cell color. | `'black'` |
31
+ | `sectionSize` | Section size. | `1` |
32
+ | `sectionThickness` | Section thickness. | `1` |
33
+ | `sectionColor` | Section color. | `'#2080ff'` |
34
+ | `infiniteGrid` | Display the grid infinitely. | `false` |
35
+ | `followCamera` | Follow camera. | `false` |
36
+ | `fadeDistance` | Fade distance. | `100` |
37
+ | `fadeStrength` | Fade strength. | `1` |
38
+ | `fadeFrom` | Fade from camera (1) or origin (0), or somewhere in between. | `'camera'` |
39
+ | `side` | Which side of the faces will be rendered. Can be `THREE.FrontSide`, `THREE.BackSide`, or `THREE.DoubleSide`. | `THREE.FrontSide` |
40
+
41
+ ```html
42
+ <ngts-grid />
43
+ ```
44
+
45
+ ## NgtsText
46
+
47
+ High-quality text rendering with signed distance fields (SDF) and antialiasing, using `troika-three-text`
48
+
49
+ This component renders high-quality text using SDF and antialiasing techniques. It supports various options for customizing the appearance of the text, such as font, font size, color, alignment, and more.
50
+
51
+ ### Object Inputs (NgtsTextOptions)
52
+
53
+ | Property | Description | Default Value |
54
+ | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------- |
55
+ | `text` | (Required) Text content. | |
56
+ | `font` | Font family or URL. | `undefined` |
57
+ | `fontSize` | Font size. | `1` |
58
+ | `color` | Text color. | `'black'` |
59
+ | `fontWeight` | Font weight. | `'normal'` |
60
+ | `fontStyle` | Font style. | `'normal'` |
61
+ | `maxWidth` | Maximum width of the text block. | `undefined` |
62
+ | `lineHeight` | Line height. | `1` |
63
+ | `letterSpacing` | Letter spacing. | `0` |
64
+ | `textAlign` | Text alignment. | `'left'` |
65
+ | `anchorX` | Horizontal anchor point. Can be `'left'`, `'center'`, `'right'`, or a number between 0 and 1. | `'center'` |
66
+ | `anchorY` | Vertical anchor point. Can be `'top'`, `'top-baseline'`, `'middle'`, `'bottom-baseline'`, `'bottom'`, or a number between 0 and 1. | `'middle'` |
67
+ | `clipRect` | Clip rectangle. | `undefined` |
68
+ | `depthOffset` | Depth offset. | `0` |
69
+ | `direction` | Text direction. Can be `'auto'`, `'ltr'`, or `'rtl'`. | `'auto'` |
70
+ | `overflowWrap` | Overflow wrap. Can be `'normal'` or `'break-word'`. | `'normal'` |
71
+ | `whiteSpace` | White space. Can be `'normal'` or `'nowrap'`. | `'normal'` |
72
+ | `outlineWidth` | Outline width. | `0` |
73
+ | `outlineOffsetX` | Outline X offset. | `0` |
74
+ | `outlineOffsetY` | Outline Y offset. | `0` |
75
+ | `outlineBlur` | Outline blur. | `0` |
76
+ | `outlineColor` | Outline color. | `'black'` |
77
+ | `outlineOpacity` | Outline opacity. | `1` |
78
+ | `strokeWidth` | Stroke width. | `0` |
79
+ | `strokeColor` | Stroke color. | `'black'` |
80
+ | `strokeOpacity` | Stroke opacity. | `1` |
81
+ | `fillOpacity` | Fill opacity. | `1` |
82
+ | `sdfGlyphSize` | SDF glyph size. | `64` |
83
+ | `debugSDF` | Debug SDF. | `false` |
84
+
85
+ ```html
86
+ <ngts-text text="Hello, World!" />
87
+ ```
88
+
89
+ ## NgtsText3D
90
+
91
+ Renders 3D text using ThreeJS's TextGeometry.
92
+
93
+ This component renders 3D text using TextGeometry. It requires fonts in JSON format generated through typeface.json.
94
+
95
+ ### Object Inputs (NgtsText3DOptions)
96
+
97
+ | Property | Description | Default Value |
98
+ | ---------------- | ------------------------ | ------------- |
99
+ | `text` | (Required) Text content. | |
100
+ | `font` | Font family or URL. | `undefined` |
101
+ | `size` | Font size. | `1` |
102
+ | `height` | Text height. | `0.2` |
103
+ | `curveSegments` | Curve segments. | `8` |
104
+ | `bevelEnabled` | Enable bevel. | `false` |
105
+ | `bevelThickness` | Bevel thickness. | `0.1` |
106
+ | `bevelSize` | Bevel size. | `0.01` |
107
+ | `bevelOffset` | Bevel offset. | `0` |
108
+ | `bevelSegments` | Bevel segments. | `4` |
109
+ | `smooth` | Smoothness level. | `undefined` |
110
+
111
+ ```html
112
+ <ngts-text-3d text="Hello, World!" [options]="{ font: 'path/to/font.json' }" />
113
+ ```
package/cameras/README.md CHANGED
@@ -1,3 +1,86 @@
1
- # angular-three-soba/cameras
1
+ # `angular-three-soba/cameras`
2
2
 
3
- Secondary entry point of `angular-three-soba`. It can be used by importing from `angular-three-soba/cameras`.
3
+ This module provides a variety of camera components for Angular Three, including specialized cameras and helper components for camera controls.
4
+
5
+ All camera implementations share the following features:
6
+
7
+ - `makeDefault` option: Allows the consumer to make this camera the default camera in the Canvas Store (via injectStore()). Default is `false`.
8
+ - `manual` option: Allows the consumer to take over updating the camera. When set to `true`, the camera won't be responsive, and the consumer will need to update its properties upon viewport change. Default is `false`.
9
+ - `cameraContent` directive: Allows you to render content from the perspective of the camera. This can be used for various effects, including portals, minimaps, security cameras, picture-in-picture, and rendering to textures.
10
+
11
+ Within the template of the `cameraContent` directive, you have access to a `texture` variable representing the rendered view. This `texture` is of type `Signal<Texture>`.
12
+
13
+ ```html
14
+ <ngts-perspective-camera>
15
+ <ngt-mesh *cameraContent="let texture">
16
+ <ngt-mesh-basic-material [map]="texture()" />
17
+ </ngt-mesh>
18
+ </ngts-perspective-camera>
19
+ ```
20
+
21
+ ## NgtsPerspectiveCamera
22
+
23
+ A responsive `THREE.PerspectiveCamera` that can be set as the default camera. By default, it automatically tracks the size of the canvas and updates accordingly.
24
+
25
+ ### Object Inputs (NgtsPerspectiveCameraOptions)
26
+
27
+ | Property | Description | Default value |
28
+ | -------- | ------------------------- | ------------- |
29
+ | fov | Field of view in degrees. | 50 |
30
+ | near | Near clipping plane. | 0.1 |
31
+ | far | Far clipping plane. | 1000 |
32
+
33
+ ### Usage
34
+
35
+ ```html
36
+ <ngts-perspective-camera [options]="{ makeDefault: true, fov: 75, near: 0.1, far: 1000 }" />
37
+ ```
38
+
39
+ ## NgtsOrthographicCamera
40
+
41
+ A responsive `THREE.OrthographicCamera` that can be set as the default camera. By default, it automatically tracks the size of the canvas and updates accordingly.
42
+
43
+ ### Object Inputs (NgtsOrthographicCameraOptions)
44
+
45
+ | Property | Description | Default value |
46
+ | -------- | ------------------------------------------- | ------------- |
47
+ | left | Camera frustum left plane. | -1 |
48
+ | right | Camera frustum right plane. | 1 |
49
+ | top | Camera frustum top plane. | 1 |
50
+ | bottom | Camera frustum bottom plane. | -1 |
51
+ | near | Camera frustum near plane. | 0.1 |
52
+ | far | Camera frustum far plane. | 1000 |
53
+ | zoom | Gets or sets the zoom factor of the camera. | 1 |
54
+
55
+ ### Usage
56
+
57
+ ```html
58
+ <ngts-orthographic-camera
59
+ [options]="{ makeDefault: true, left: -10, right: 10, top: 10, bottom: -10, near: 0.1, far: 1000 }"
60
+ />
61
+ ```
62
+
63
+ ## NgtsCubeCamera
64
+
65
+ A responsive `THREE.CubeCamera` that renders to a `WebGLCubeRenderTarget`. You can either use it as a regular environment map or use it for the `NgtsCameraContent` directive for more advanced use cases.
66
+
67
+ ### Object Inputs (NgtsCubeCameraOptions)
68
+
69
+ | Property | Description | Default value |
70
+ | ---------- | ------------------------------ | ------------- |
71
+ | near | Near clipping plane. | 0.1 |
72
+ | far | Far clipping plane. | 1000 |
73
+ | resolution | Cube render target resolution. | 256 |
74
+ | frames | Number of frames to render. | 1 |
75
+ | envMap | Custom environment map. | null |
76
+ | fog | Custom fog. | null |
77
+
78
+ ### Usage
79
+
80
+ ```html
81
+ <ngts-cube-camera [options]="{ near: 0.1, far: 1000, resolution: 256 }">
82
+ <ngt-mesh *cameraContent="let texture">
83
+ <ngt-mesh-basic-material [map]="texture()" />
84
+ </ngt-mesh>
85
+ </ngts-cube-camera>
86
+ ```
@@ -1,3 +1,5 @@
1
1
  export * from './lib/custom-shader-material';
2
2
  export * from './lib/mesh-reflector-material';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jdXN0b20tc2hhZGVyLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtcmVmbGVjdG9yLW1hdGVyaWFsJztcbiJdfQ==
3
+ export * from './lib/mesh-transmission-material';
4
+ export * from './lib/mesh-wobble-material';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY3VzdG9tLXNoYWRlci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXRyYW5zbWlzc2lvbi1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXdvYmJsZS1tYXRlcmlhbCc7XG4iXX0=
@@ -1,4 +1,4 @@
1
- import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, untracked, } from '@angular/core';
1
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, input, } from '@angular/core';
2
2
  import { is, NgtArgs, omit, pick } from 'angular-three';
3
3
  import { injectAutoEffect } from 'ngxtension/auto-effect';
4
4
  import CustomShaderMaterial from 'three-custom-shader-material/vanilla';
@@ -36,7 +36,6 @@ export class NgtsCustomShaderMaterial {
36
36
  vertexShader,
37
37
  uniforms,
38
38
  cacheKey,
39
- attach: untracked(this.attach),
40
39
  });
41
40
  });
42
41
  const autoEffect = injectAutoEffect();
@@ -69,4 +68,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
69
68
  imports: [NgtArgs],
70
69
  }]
71
70
  }], ctorParameters: () => [] });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNoYWRlci1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9tYXRlcmlhbHMvc3JjL2xpYi9jdXN0b20tc2hhZGVyLW1hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBRXRCLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLEVBQUUsRUFBZ0IsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxvQkFBb0IsTUFBTSxzQ0FBc0MsQ0FBQzs7QUFjeEUsTUFBTSxPQUFPLHdCQUF3QjtJQXlDcEM7UUF4Q0EsaUJBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFxRCxDQUFDO1FBQ25GLFdBQU0sR0FBRyxLQUFLLENBQW9CLFVBQVUsQ0FBQyxDQUFDO1FBQzlDLFlBQU8sR0FBRyxLQUFLLENBQUMsRUFBaUYsQ0FBQyxDQUFDO1FBQ25HLGVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUU1RixTQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNwQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFDekUsQ0FBQyxDQUFDLENBQUM7UUFFSyxtQkFBYyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsaUJBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNsRCxhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDMUMsYUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRWxELGFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLEdBQUc7Z0JBQ2hFLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixJQUFJLENBQUMsUUFBUSxFQUFFO2FBQ2YsQ0FBQztZQUVGLDBDQUEwQztZQUMxQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkIsT0FBUSxJQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUN6QyxPQUFRLElBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUNuRCxDQUFDO1lBRUQsT0FBTyxJQUFJLG9CQUFvQixDQUFDO2dCQUMvQixZQUFZLEVBQUUsSUFBSTtnQkFDbEIsY0FBYztnQkFDZCxZQUFZO2dCQUNaLFFBQVE7Z0JBQ1IsUUFBUTtnQkFDUixNQUFNLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDOUIsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQWpEVyx3QkFBd0I7a0dBQXhCLHdCQUF3Qix3ZUFUMUI7Ozs7RUFJVCw0REFHUyxPQUFPOzsyRkFFTCx3QkFBd0I7a0JBWnBDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXMsIE5ndEFueVJlY29yZCwgTmd0QXJncywgb21pdCwgcGljayB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgQ3VzdG9tU2hhZGVyTWF0ZXJpYWwgZnJvbSAndGhyZWUtY3VzdG9tLXNoYWRlci1tYXRlcmlhbC92YW5pbGxhJztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1jdXN0b20tc2hhZGVyLW1hdGVyaWFsJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIlttYXRlcmlhbCgpXVwiIFthdHRhY2hdPVwiYXR0YWNoKClcIiBbcGFyYW1ldGVyc109XCJwYXJhbWV0ZXJzKClcIj5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtcHJpbWl0aXZlPlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNDdXN0b21TaGFkZXJNYXRlcmlhbCB7XG5cdGJhc2VNYXRlcmlhbCA9IGlucHV0LnJlcXVpcmVkPE1hdGVyaWFsIHwgdHlwZW9mIE1hdGVyaWFsIHwgRWxlbWVudFJlZjxNYXRlcmlhbD4+KCk7XG5cdGF0dGFjaCA9IGlucHV0PHN0cmluZyB8IHN0cmluZ1tdPignbWF0ZXJpYWwnKTtcblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIE9taXQ8Q29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBDdXN0b21TaGFkZXJNYXRlcmlhbD5bMF0sICdiYXNlTWF0ZXJpYWwnPik7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydmcmFnbWVudFNoYWRlcicsICd2ZXJ0ZXhTaGFkZXInLCAndW5pZm9ybXMnLCAnY2FjaGVLZXknXSk7XG5cblx0YmFzZSA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBiYXNlTWF0ZXJpYWwgPSB0aGlzLmJhc2VNYXRlcmlhbCgpO1xuXHRcdHJldHVybiBpcy5yZWYoYmFzZU1hdGVyaWFsKSA/IGJhc2VNYXRlcmlhbC5uYXRpdmVFbGVtZW50IDogYmFzZU1hdGVyaWFsO1xuXHR9KTtcblxuXHRwcml2YXRlIGZyYWdtZW50U2hhZGVyID0gcGljayh0aGlzLm9wdGlvbnMsICdmcmFnbWVudFNoYWRlcicpO1xuXHRwcml2YXRlIHZlcnRleFNoYWRlciA9IHBpY2sodGhpcy5vcHRpb25zLCAndmVydGV4U2hhZGVyJyk7XG5cdHByaXZhdGUgdW5pZm9ybXMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3VuaWZvcm1zJyk7XG5cdHByaXZhdGUgY2FjaGVLZXkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2NhY2hlS2V5Jyk7XG5cblx0bWF0ZXJpYWwgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2Jhc2UsIGZyYWdtZW50U2hhZGVyLCB2ZXJ0ZXhTaGFkZXIsIHVuaWZvcm1zLCBjYWNoZUtleV0gPSBbXG5cdFx0XHR0aGlzLmJhc2UoKSxcblx0XHRcdHRoaXMuZnJhZ21lbnRTaGFkZXIoKSxcblx0XHRcdHRoaXMudmVydGV4U2hhZGVyKCksXG5cdFx0XHR0aGlzLnVuaWZvcm1zKCksXG5cdFx0XHR0aGlzLmNhY2hlS2V5KCksXG5cdFx0XTtcblxuXHRcdC8vIE5PVEU6IHRoaXMgaXMgc3BlY2lmaWMgdG8gYW5ndWxhci10aHJlZVxuXHRcdGlmIChpcy5pbnN0YW5jZShiYXNlKSkge1xuXHRcdFx0ZGVsZXRlIChiYXNlIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcblx0XHRcdGRlbGV0ZSAoYmFzZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9yZW5kZXJlcl9fJ107XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBDdXN0b21TaGFkZXJNYXRlcmlhbCh7XG5cdFx0XHRiYXNlTWF0ZXJpYWw6IGJhc2UsXG5cdFx0XHRmcmFnbWVudFNoYWRlcixcblx0XHRcdHZlcnRleFNoYWRlcixcblx0XHRcdHVuaWZvcm1zLFxuXHRcdFx0Y2FjaGVLZXksXG5cdFx0XHRhdHRhY2g6IHVudHJhY2tlZCh0aGlzLmF0dGFjaCksXG5cdFx0fSk7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWwoKTtcblx0XHRcdFx0cmV0dXJuICgpID0+IG1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXNoYWRlci1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9tYXRlcmlhbHMvc3JjL2xpYi9jdXN0b20tc2hhZGVyLW1hdGVyaWFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixlQUFlLEVBQ2YsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxRQUFRLEVBQ1Isc0JBQXNCLEVBRXRCLEtBQUssR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsRUFBRSxFQUFnQixPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRCxPQUFPLG9CQUFvQixNQUFNLHNDQUFzQyxDQUFDOztBQWN4RSxNQUFNLE9BQU8sd0JBQXdCO0lBd0NwQztRQXZDQSxpQkFBWSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQXFELENBQUM7UUFDbkYsV0FBTSxHQUFHLEtBQUssQ0FBb0IsVUFBVSxDQUFDLENBQUM7UUFDOUMsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFpRixDQUFDLENBQUM7UUFDbkcsZUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBRTVGLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3BCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN6QyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztRQUN6RSxDQUFDLENBQUMsQ0FBQztRQUVLLG1CQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUN0RCxpQkFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELGFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQyxhQUFRLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbEQsYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsTUFBTSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDaEUsSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDWCxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFO2dCQUNuQixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDZixDQUFDO1lBRUYsMENBQTBDO1lBQzFDLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUN2QixPQUFRLElBQXFCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3pDLE9BQVEsSUFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFFRCxPQUFPLElBQUksb0JBQW9CLENBQUM7Z0JBQy9CLFlBQVksRUFBRSxJQUFJO2dCQUNsQixjQUFjO2dCQUNkLFlBQVk7Z0JBQ1osUUFBUTtnQkFDUixRQUFRO2FBQ1IsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3RDLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQWhEVyx3QkFBd0I7a0dBQXhCLHdCQUF3Qix3ZUFUMUI7Ozs7RUFJVCw0REFHUyxPQUFPOzsyRkFFTCx3QkFBd0I7a0JBWnBDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLDZCQUE2QjtvQkFDdkMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7OztFQUlUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdEVsZW1lbnRSZWYsXG5cdGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzLCBOZ3RBbnlSZWNvcmQsIE5ndEFyZ3MsIG9taXQsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IEN1c3RvbVNoYWRlck1hdGVyaWFsIGZyb20gJ3RocmVlLWN1c3RvbS1zaGFkZXItbWF0ZXJpYWwvdmFuaWxsYSc7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtY3VzdG9tLXNoYWRlci1tYXRlcmlhbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbbWF0ZXJpYWwoKV1cIiBbYXR0YWNoXT1cImF0dGFjaCgpXCIgW3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzQ3VzdG9tU2hhZGVyTWF0ZXJpYWwge1xuXHRiYXNlTWF0ZXJpYWwgPSBpbnB1dC5yZXF1aXJlZDxNYXRlcmlhbCB8IHR5cGVvZiBNYXRlcmlhbCB8IEVsZW1lbnRSZWY8TWF0ZXJpYWw+PigpO1xuXHRhdHRhY2ggPSBpbnB1dDxzdHJpbmcgfCBzdHJpbmdbXT4oJ21hdGVyaWFsJyk7XG5cdG9wdGlvbnMgPSBpbnB1dCh7fSBhcyBPbWl0PENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgQ3VzdG9tU2hhZGVyTWF0ZXJpYWw+WzBdLCAnYmFzZU1hdGVyaWFsJz4pO1xuXHRwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnZnJhZ21lbnRTaGFkZXInLCAndmVydGV4U2hhZGVyJywgJ3VuaWZvcm1zJywgJ2NhY2hlS2V5J10pO1xuXG5cdGJhc2UgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgYmFzZU1hdGVyaWFsID0gdGhpcy5iYXNlTWF0ZXJpYWwoKTtcblx0XHRyZXR1cm4gaXMucmVmKGJhc2VNYXRlcmlhbCkgPyBiYXNlTWF0ZXJpYWwubmF0aXZlRWxlbWVudCA6IGJhc2VNYXRlcmlhbDtcblx0fSk7XG5cblx0cHJpdmF0ZSBmcmFnbWVudFNoYWRlciA9IHBpY2sodGhpcy5vcHRpb25zLCAnZnJhZ21lbnRTaGFkZXInKTtcblx0cHJpdmF0ZSB2ZXJ0ZXhTaGFkZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3ZlcnRleFNoYWRlcicpO1xuXHRwcml2YXRlIHVuaWZvcm1zID0gcGljayh0aGlzLm9wdGlvbnMsICd1bmlmb3JtcycpO1xuXHRwcml2YXRlIGNhY2hlS2V5ID0gcGljayh0aGlzLm9wdGlvbnMsICdjYWNoZUtleScpO1xuXG5cdG1hdGVyaWFsID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtiYXNlLCBmcmFnbWVudFNoYWRlciwgdmVydGV4U2hhZGVyLCB1bmlmb3JtcywgY2FjaGVLZXldID0gW1xuXHRcdFx0dGhpcy5iYXNlKCksXG5cdFx0XHR0aGlzLmZyYWdtZW50U2hhZGVyKCksXG5cdFx0XHR0aGlzLnZlcnRleFNoYWRlcigpLFxuXHRcdFx0dGhpcy51bmlmb3JtcygpLFxuXHRcdFx0dGhpcy5jYWNoZUtleSgpLFxuXHRcdF07XG5cblx0XHQvLyBOT1RFOiB0aGlzIGlzIHNwZWNpZmljIHRvIGFuZ3VsYXItdGhyZWVcblx0XHRpZiAoaXMuaW5zdGFuY2UoYmFzZSkpIHtcblx0XHRcdGRlbGV0ZSAoYmFzZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHRkZWxldGUgKGJhc2UgYXMgTmd0QW55UmVjb3JkKVsnX19uZ3RfcmVuZGVyZXJfXyddO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgQ3VzdG9tU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0YmFzZU1hdGVyaWFsOiBiYXNlLFxuXHRcdFx0ZnJhZ21lbnRTaGFkZXIsXG5cdFx0XHR2ZXJ0ZXhTaGFkZXIsXG5cdFx0XHR1bmlmb3Jtcyxcblx0XHRcdGNhY2hlS2V5LFxuXHRcdH0pO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsKCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBtYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -97,6 +97,16 @@ export class NgtsMeshReflectorMaterial {
97
97
  depthScale,
98
98
  depthToBlurRatioBias,
99
99
  });
100
+ const defines = {};
101
+ if (hasBlur) {
102
+ defines['USE_BLUR'] = '';
103
+ }
104
+ if (depthScale > 0) {
105
+ defines['USE_DEPTH'] = '';
106
+ }
107
+ if (distortionMap) {
108
+ defines['USE_DISTORTION'] = '';
109
+ }
100
110
  const reflectorParameters = {
101
111
  mirror,
102
112
  textureMatrix: this.textureMatrix,
@@ -113,11 +123,7 @@ export class NgtsMeshReflectorMaterial {
113
123
  distortion,
114
124
  distortionMap,
115
125
  mixContrast,
116
- defines: {
117
- USE_BLUR: hasBlur ? '' : undefined,
118
- USE_DEPTH: depthScale > 0 ? '' : undefined,
119
- USE_DISTORTION: distortionMap ? '' : undefined,
120
- },
126
+ defines,
121
127
  };
122
128
  return { fbo1, fbo2, blurPass, reflectorParameters };
123
129
  });
@@ -143,11 +149,6 @@ export class NgtsMeshReflectorMaterial {
143
149
  if (!material)
144
150
  return;
145
151
  const { reflectorParameters } = this.reflectState();
146
- Object.keys(reflectorParameters.defines).forEach((key) => {
147
- if (reflectorParameters.defines[key] === undefined) {
148
- delete reflectorParameters.defines[key];
149
- }
150
- });
151
152
  applyProps(material, { ...reflectorParameters, ...this.parameters() });
152
153
  });
153
154
  });
@@ -266,4 +267,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
266
267
  imports: [NgtArgs],
267
268
  }]
268
269
  }], ctorParameters: () => [] });
269
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9saWIvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixXQUFXLEVBRVgsT0FBTyxFQUVQLElBQUksRUFDSixJQUFJLEdBQ0osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFDTixXQUFXLEVBQ1gsWUFBWSxFQUNaLGFBQWEsRUFDYixZQUFZLEVBQ1osT0FBTyxFQUNQLGlCQUFpQixFQUNqQixLQUFLLEVBRUwsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxPQUFPLEVBQ1AsaUJBQWlCLEdBQ2pCLE1BQU0sT0FBTyxDQUFDOztBQWtCZixNQUFNLGNBQWMsR0FBcUM7SUFDeEQsT0FBTyxFQUFFLENBQUM7SUFDVixXQUFXLEVBQUUsQ0FBQztJQUNkLFVBQVUsRUFBRSxHQUFHO0lBQ2YsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNaLGlCQUFpQixFQUFFLEdBQUc7SUFDdEIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixVQUFVLEVBQUUsQ0FBQztJQUNiLG9CQUFvQixFQUFFLElBQUk7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RUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7RUFJVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRhZnRlck5leHRSZW5kZXIsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRFbGVtZW50UmVmLFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmx1clBhc3MsIE1lc2hSZWZsZWN0b3JNYXRlcmlhbCB9IGZyb20gJ0BwbW5kcnMvdmFuaWxsYSc7XG5pbXBvcnQge1xuXHRhcHBseVByb3BzLFxuXHRnZXRMb2NhbFN0YXRlLFxuXHRpbmplY3RCZWZvcmVSZW5kZXIsXG5cdGluamVjdFN0b3JlLFxuXHROZ3RBbnlSZWNvcmQsXG5cdE5ndEFyZ3MsXG5cdE5ndE1lc2hTdGFuZGFyZE1hdGVyaWFsLFxuXHRvbWl0LFxuXHRwaWNrLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7XG5cdERlcHRoRm9ybWF0LFxuXHREZXB0aFRleHR1cmUsXG5cdEhhbGZGbG9hdFR5cGUsXG5cdExpbmVhckZpbHRlcixcblx0TWF0cml4NCxcblx0UGVyc3BlY3RpdmVDYW1lcmEsXG5cdFBsYW5lLFxuXHRUZXh0dXJlLFxuXHRVbnNpZ25lZFNob3J0VHlwZSxcblx0VmVjdG9yMyxcblx0VmVjdG9yNCxcblx0V2ViR0xSZW5kZXJUYXJnZXQsXG59IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0TWVzaFN0YW5kYXJkTWF0ZXJpYWw+IHtcblx0cmVzb2x1dGlvbjogbnVtYmVyO1xuXHRtaXhCbHVyOiBudW1iZXI7XG5cdG1peFN0cmVuZ3RoOiBudW1iZXI7XG5cdGJsdXI6IFtudW1iZXIsIG51bWJlcl0gfCBudW1iZXI7XG5cdG1pcnJvcjogbnVtYmVyO1xuXHRtaW5EZXB0aFRocmVzaG9sZDogbnVtYmVyO1xuXHRtYXhEZXB0aFRocmVzaG9sZDogbnVtYmVyO1xuXHRkZXB0aFNjYWxlOiBudW1iZXI7XG5cdGRlcHRoVG9CbHVyUmF0aW9CaWFzOiBudW1iZXI7XG5cdGRpc3RvcnRpb246IG51bWJlcjtcblx0bWl4Q29udHJhc3Q6IG51bWJlcjtcblx0cmVmbGVjdG9yT2Zmc2V0OiBudW1iZXI7XG5cdGRpc3RvcnRpb25NYXA/OiBUZXh0dXJlO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c01lc2hSZWZsZWN0b3JNYXRlcmlhbE9wdGlvbnMgPSB7XG5cdG1peEJsdXI6IDAsXG5cdG1peFN0cmVuZ3RoOiAxLFxuXHRyZXNvbHV0aW9uOiAyNTYsXG5cdGJsdXI6IFswLCAwXSxcblx0bWluRGVwdGhUaHJlc2hvbGQ6IDAuOSxcblx0bWF4RGVwdGhUaHJlc2hvbGQ6IDEsXG5cdGRlcHRoU2NhbGU6IDAsXG5cdGRlcHRoVG9CbHVyUmF0aW9CaWFzOiAwLjI1LFxuXHRtaXJyb3I6IDAsXG5cdGRpc3RvcnRpb246IDEsXG5cdG1peENvbnRyYXN0OiAxLFxuXHRyZWZsZWN0b3JPZmZzZXQ6IDAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSAjbWF0ZXJpYWwgKmFyZ3M9XCJbbWF0ZXJpYWwoKV1cIiBbYXR0YWNoXT1cImF0dGFjaCgpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsIHtcblx0YXR0YWNoID0gaW5wdXQoJ21hdGVyaWFsJyk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cHJpdmF0ZSBwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFtcblx0XHQnZGlzdG9ydGlvbk1hcCcsXG5cdFx0J3Jlc29sdXRpb24nLFxuXHRcdCdtaXhCbHVyJyxcblx0XHQnbWl4U3RyZW5ndGgnLFxuXHRcdCdibHVyJyxcblx0XHQnbWluRGVwdGhUaHJlc2hvbGQnLFxuXHRcdCdtYXhEZXB0aFRocmVzaG9sZCcsXG5cdFx0J2RlcHRoU2NhbGUnLFxuXHRcdCdkZXB0aFRvQmx1clJhdGlvQmlhcycsXG5cdFx0J21pcnJvcicsXG5cdFx0J2Rpc3RvcnRpb24nLFxuXHRcdCdtaXhDb250cmFzdCcsXG5cdFx0J3JlZmxlY3Rvck9mZnNldCcsXG5cdF0pO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cblx0cHJpdmF0ZSBtYXRlcmlhbFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPE1lc2hSZWZsZWN0b3JNYXRlcmlhbD4+KCdtYXRlcmlhbCcpO1xuXG5cdHByaXZhdGUgcmVmbGVjdE9wdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgW1xuXHRcdCdkaXN0b3J0aW9uTWFwJyxcblx0XHQncmVzb2x1dGlvbicsXG5cdFx0J21peEJsdXInLFxuXHRcdCdtaXhTdHJlbmd0aCcsXG5cdFx0J2JsdXInLFxuXHRcdCdtaW5EZXB0aFRocmVzaG9sZCcsXG5cdFx0J21heERlcHRoVGhyZXNob2xkJyxcblx0XHQnZGVwdGhTY2FsZScsXG5cdFx0J2RlcHRoVG9CbHVyUmF0aW9CaWFzJyxcblx0XHQnbWlycm9yJyxcblx0XHQnZGlzdG9ydGlvbicsXG5cdFx0J21peENvbnRyYXN0Jyxcblx0XHQncmVmbGVjdG9yT2Zmc2V0Jyxcblx0XSk7XG5cblx0cHJpdmF0ZSBibHVyID0gcGljayh0aGlzLnJlZmxlY3RPcHRpb25zLCAnYmx1cicpO1xuXG5cdHByaXZhdGUgbm9ybWFsaXplZEJsdXIgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgYmx1ciA9IHRoaXMuYmx1cigpO1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KGJsdXIpID8gYmx1ciA6IFtibHVyLCBibHVyXTtcblx0fSk7XG5cdHByaXZhdGUgaGFzQmx1ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMubm9ybWFsaXplZEJsdXIoKVswXSArIHRoaXMubm9ybWFsaXplZEJsdXIoKVsxXSA+IDApO1xuXG5cdHByaXZhdGUgcmVmbGVjdG9yUGxhbmUgPSBuZXcgUGxhbmUoKTtcblx0cHJpdmF0ZSBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIHJlZmxlY3RvcldvcmxkUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIGNhbWVyYVdvcmxkUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIHJvdGF0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0cHJpdmF0ZSBsb29rQXRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcblx0cHJpdmF0ZSBjbGlwUGxhbmUgPSBuZXcgVmVjdG9yNCgpO1xuXHRwcml2YXRlIHZpZXcgPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7XG5cdHByaXZhdGUgcSA9IG5ldyBWZWN0b3I0KCk7XG5cdHByaXZhdGUgdGV4dHVyZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdHByaXZhdGUgdmlydHVhbENhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXG5cdHByaXZhdGUgcmVmbGVjdFN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtcblx0XHRcdGdsLFxuXHRcdFx0e1xuXHRcdFx0XHRyZXNvbHV0aW9uLFxuXHRcdFx0XHRtaW5EZXB0aFRocmVzaG9sZCxcblx0XHRcdFx0bWF4RGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRcdGRlcHRoU2NhbGUsXG5cdFx0XHRcdGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuXHRcdFx0XHRtaXJyb3IsXG5cdFx0XHRcdG1peEJsdXIsXG5cdFx0XHRcdG1peFN0cmVuZ3RoLFxuXHRcdFx0XHRkaXN0b3J0aW9uLFxuXHRcdFx0XHRkaXN0b3J0aW9uTWFwLFxuXHRcdFx0XHRtaXhDb250cmFzdCxcblx0XHRcdH0sXG5cdFx0XHRibHVyLFxuXHRcdFx0aGFzQmx1cixcblx0XHRdID0gW3RoaXMuZ2woKSwgdGhpcy5yZWZsZWN0T3B0aW9ucygpLCB0aGlzLm5vcm1hbGl6ZWRCbHVyKCksIHRoaXMuaGFzQmx1cigpXTtcblxuXHRcdGNvbnN0IHJlbmRlclRhcmdldFBhcmFtZXRlcnMgPSB7XG5cdFx0XHRtaW5GaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRcdFx0dHlwZTogSGFsZkZsb2F0VHlwZSxcblx0XHR9O1xuXG5cdFx0Y29uc3QgZmJvMSA9IG5ldyBXZWJHTFJlbmRlclRhcmdldChyZXNvbHV0aW9uLCByZXNvbHV0aW9uLCByZW5kZXJUYXJnZXRQYXJhbWV0ZXJzKTtcblx0XHRmYm8xLmRlcHRoQnVmZmVyID0gdHJ1ZTtcblx0XHRmYm8xLmRlcHRoVGV4dHVyZSA9IG5ldyBEZXB0aFRleHR1cmUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cdFx0ZmJvMS5kZXB0aFRleHR1cmUuZm9ybWF0ID0gRGVwdGhGb3JtYXQ7XG5cdFx0ZmJvMS5kZXB0aFRleHR1cmUudHlwZSA9IFVuc2lnbmVkU2hvcnRUeXBlO1xuXHRcdGNvbnN0IGZibzIgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcmVuZGVyVGFyZ2V0UGFyYW1ldGVycyk7XG5cblx0XHRjb25zdCBibHVyUGFzcyA9IG5ldyBCbHVyUGFzcyh7XG5cdFx0XHRnbCxcblx0XHRcdHJlc29sdXRpb24sXG5cdFx0XHR3aWR0aDogYmx1clswXSxcblx0XHRcdGhlaWdodDogYmx1clsxXSxcblx0XHRcdG1pbkRlcHRoVGhyZXNob2xkLFxuXHRcdFx0bWF4RGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRkZXB0aFNjYWxlLFxuXHRcdFx0ZGVwdGhUb0JsdXJSYXRpb0JpYXMsXG5cdFx0fSk7XG5cblx0XHRjb25zdCByZWZsZWN0b3JQYXJhbWV0ZXJzID0ge1xuXHRcdFx0bWlycm9yLFxuXHRcdFx0dGV4dHVyZU1hdHJpeDogdGhpcy50ZXh0dXJlTWF0cml4LFxuXHRcdFx0bWl4Qmx1cixcblx0XHRcdHREaWZmdXNlOiBmYm8xLnRleHR1cmUsXG5cdFx0XHR0RGVwdGg6IGZibzEuZGVwdGhUZXh0dXJlLFxuXHRcdFx0dERpZmZ1c2VCbHVyOiBmYm8yLnRleHR1cmUsXG5cdFx0XHRoYXNCbHVyLFxuXHRcdFx0bWl4U3RyZW5ndGgsXG5cdFx0XHRtaW5EZXB0aFRocmVzaG9sZCxcblx0XHRcdG1heERlcHRoVGhyZXNob2xkLFxuXHRcdFx0ZGVwdGhTY2FsZSxcblx0XHRcdGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuXHRcdFx0ZGlzdG9ydGlvbixcblx0XHRcdGRpc3RvcnRpb25NYXAsXG5cdFx0XHRtaXhDb250cmFzdCxcblx0XHRcdGRlZmluZXM6IHtcblx0XHRcdFx0VVNFX0JMVVI6IGhhc0JsdXIgPyAnJyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0VVNFX0RFUFRIOiBkZXB0aFNjYWxlID4gMCA/ICcnIDogdW5kZWZpbmVkLFxuXHRcdFx0XHRVU0VfRElTVE9SVElPTjogZGlzdG9ydGlvbk1hcCA/ICcnIDogdW5kZWZpbmVkLFxuXHRcdFx0fSxcblx0XHR9O1xuXG5cdFx0cmV0dXJuIHsgZmJvMSwgZmJvMiwgYmx1clBhc3MsIHJlZmxlY3RvclBhcmFtZXRlcnMgfTtcblx0fSk7XG5cblx0cHJpdmF0ZSBkZWZpbmVzS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGRlZmluZXMgPSB0aGlzLnJlZmxlY3RTdGF0ZSgpLnJlZmxlY3RvclBhcmFtZXRlcnMuZGVmaW5lcztcblx0XHRyZXR1cm4gT2JqZWN0LmVudHJpZXMoZGVmaW5lcykucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHZhbHVlICE9IG51bGwgPyBgJHthY2N9ICR7a2V5fWAgOiBhY2MpLCAnJyk7XG5cdH0pO1xuXG5cdG1hdGVyaWFsID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHByZXZNYXRlcmlhbCA9IHVudHJhY2tlZCh0aGlzLm1hdGVyaWFsUmVmKT8ubmF0aXZlRWxlbWVudDtcblxuXHRcdGlmIChwcmV2TWF0ZXJpYWwpIHtcblx0XHRcdHByZXZNYXRlcmlhbC5kaXNwb3NlKCk7XG5cdFx0XHRkZWxldGUgKHByZXZNYXRlcmlhbCBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG5cdFx0XHRkZWxldGUgKHByZXZNYXRlcmlhbCBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9yZW5kZXJlcl9fJ107XG5cdFx0fVxuXG5cdFx0Ly8gdHJhY2tpbmcgZGVmaW5lcyBrZXkgc28gdGhhdCB0aGUgbWF0ZXJpYWwgaXMgcmVjcmVhdGVkIHdoZW4gdGhlIGRlZmluZXMgY2hhbmdlXG5cdFx0dGhpcy5kZWZpbmVzS2V5KCk7XG5cdFx0cmV0dXJuIG5ldyBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwoKTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRhdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRcdGlmICghbWF0ZXJpYWwpIHJldHVybjtcblx0XHRcdFx0Y29uc3QgeyByZWZsZWN0b3JQYXJhbWV0ZXJzIH0gPSB0aGlzLnJlZmxlY3RTdGF0ZSgpO1xuXHRcdFx0XHRPYmplY3Qua2V5cyhyZWZsZWN0b3JQYXJhbWV0ZXJzLmRlZmluZXMpLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0XHRcdGlmICgocmVmbGVjdG9yUGFyYW1ldGVycy5kZWZpbmVzIGFzIGFueSlba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgKHJlZmxlY3RvclBhcmFtZXRlcnMuZGVmaW5lcyBhcyBhbnkpW2tleV07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0YXBwbHlQcm9wcyhtYXRlcmlhbCwgeyAuLi5yZWZsZWN0b3JQYXJhbWV0ZXJzLCAuLi50aGlzLnBhcmFtZXRlcnMoKSB9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCh7IGdsLCBzY2VuZSB9KSA9PiB7XG5cdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxSZWYoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghbWF0ZXJpYWwpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpO1xuXHRcdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IHBhcmVudCA9IFJlZmxlY3QuZ2V0KG1hdGVyaWFsLCAncGFyZW50JykgPz8gdW50cmFja2VkKGxvY2FsU3RhdGUucGFyZW50KTtcblx0XHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRcdGNvbnN0IHsgZmJvMSwgZmJvMiwgYmx1clBhc3MgfSA9IHRoaXMucmVmbGVjdFN0YXRlKCk7XG5cdFx0XHRjb25zdCBoYXNCbHVyID0gdGhpcy5oYXNCbHVyKCk7XG5cblx0XHRcdHBhcmVudC52aXNpYmxlID0gZmFsc2U7XG5cdFx0XHRjb25zdCBjdXJyZW50WHJFbmFibGVkID0gZ2wueHIuZW5hYmxlZDtcblx0XHRcdGNvbnN0IGN1cnJlbnRTaGFkb3dBdXRvVXBkYXRlID0gZ2wuc2hhZG93TWFwLmF1dG9VcGRhdGU7XG5cdFx0XHR0aGlzLmJlZm9yZVJlbmRlcigpO1xuXHRcdFx0Z2wueHIuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0Z2wuc2hhZG93TWFwLmF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHRcdGdsLnNldFJlbmRlclRhcmdldChmYm8xKTtcblx0XHRcdGdsLnN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayh0cnVlKTtcblx0XHRcdGlmICghZ2wuYXV0b0NsZWFyKSBnbC5jbGVhcigpO1xuXHRcdFx0Z2wucmVuZGVyKHNjZW5lLCB0aGlzLnZpcnR1YWxDYW1lcmEpO1xuXHRcdFx0aWYgKGhhc0JsdXIpIGJsdXJQYXNzLnJlbmRlcihnbCwgZmJvMSwgZmJvMik7XG5cdFx0XHRnbC54ci5lbmFibGVkID0gY3VycmVudFhyRW5hYmxlZDtcblx0XHRcdGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gY3VycmVudFNoYWRvd0F1dG9VcGRhdGU7XG5cdFx0XHRwYXJlbnQudmlzaWJsZSA9IHRydWU7XG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGJlZm9yZVJlbmRlcigpIHtcblx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxSZWYoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRpZiAoIW1hdGVyaWFsKSByZXR1cm47XG5cblx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShtYXRlcmlhbCk7XG5cdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRjb25zdCBwYXJlbnQgPSBSZWZsZWN0LmdldChtYXRlcmlhbCwgJ3BhcmVudCcpID8/IHVudHJhY2tlZChsb2NhbFN0YXRlLnBhcmVudCk7XG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHsgY2FtZXJhIH0gPSB0aGlzLnN0b3JlLnNuYXBzaG90O1xuXHRcdGNvbnN0IHsgcmVmbGVjdG9yT2Zmc2V0IH0gPSB1bnRyYWNrZWQodGhpcy5yZWZsZWN0T3B0aW9ucyk7XG5cblx0XHR0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdHRoaXMucm90YXRpb25NYXRyaXguZXh0cmFjdFJvdGF0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5ub3JtYWwuc2V0KDAsIDAsIDEpO1xuXHRcdHRoaXMubm9ybWFsLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24uYWRkU2NhbGVkVmVjdG9yKHRoaXMubm9ybWFsLCByZWZsZWN0b3JPZmZzZXQpO1xuXHRcdHRoaXMudmlldy5zdWJWZWN0b3JzKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uKTtcblx0XHQvLyBBdm9pZCByZW5kZXJpbmcgd2hlbiByZWZsZWN0b3IgaXMgZmFjaW5nIGF3YXlcblx0XHRpZiAodGhpcy52aWV3LmRvdCh0aGlzLm5vcm1hbCkgPiAwKSByZXR1cm47XG5cdFx0dGhpcy52aWV3LnJlZmxlY3QodGhpcy5ub3JtYWwpLm5lZ2F0ZSgpO1xuXHRcdHRoaXMudmlldy5hZGQodGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnJvdGF0aW9uTWF0cml4LmV4dHJhY3RSb3RhdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdHRoaXMubG9va0F0UG9zaXRpb24uc2V0KDAsIDAsIC0xKTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLmFkZCh0aGlzLmNhbWVyYVdvcmxkUG9zaXRpb24pO1xuXHRcdHRoaXMudGFyZ2V0LnN1YlZlY3RvcnModGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uLCB0aGlzLmxvb2tBdFBvc2l0aW9uKTtcblx0XHR0aGlzLnRhcmdldC5yZWZsZWN0KHRoaXMubm9ybWFsKS5uZWdhdGUoKTtcblx0XHR0aGlzLnRhcmdldC5hZGQodGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEucG9zaXRpb24uY29weSh0aGlzLnZpZXcpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS51cC5zZXQoMCwgMSwgMCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEudXAucmVmbGVjdCh0aGlzLm5vcm1hbCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLmxvb2tBdCh0aGlzLnRhcmdldCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLmZhciA9IGNhbWVyYS5mYXI7IC8vIFVzZWQgaW4gV2ViR0xCYWNrZ3JvdW5kXG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0Ly8gVXBkYXRlIHRoZSB0ZXh0dXJlIG1hdHJpeFxuXHRcdHRoaXMudGV4dHVyZU1hdHJpeC5zZXQoMC41LCAwLjAsIDAuMCwgMC41LCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC4wLCAwLjUsIDAuNSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcblx0XHR0aGlzLnRleHR1cmVNYXRyaXgubXVsdGlwbHkodGhpcy52aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXHRcdHRoaXMudGV4dHVyZU1hdHJpeC5tdWx0aXBseSh0aGlzLnZpcnR1YWxDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHR0aGlzLnRleHR1cmVNYXRyaXgubXVsdGlwbHkocGFyZW50Lm1hdHJpeFdvcmxkKTtcblx0XHQvLyBOb3cgdXBkYXRlIHByb2plY3Rpb24gbWF0cml4IHdpdGggbmV3IGNsaXAgcGxhbmUsIGltcGxlbWVudGluZyBjb2RlIGZyb206IGh0dHA6Ly93d3cudGVyYXRob24uY29tL2NvZGUvb2JsaXF1ZS5odG1sXG5cdFx0Ly8gUGFwZXIgZXhwbGFpbmluZyB0aGlzIHRlY2huaXF1ZTogaHR0cDovL3d3dy50ZXJhdGhvbi5jb20vbGVuZ3llbC9MZW5neWVsLU9ibGlxdWUucGRmXG5cdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5zZXRGcm9tTm9ybWFsQW5kQ29wbGFuYXJQb2ludCh0aGlzLm5vcm1hbCwgdGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLmFwcGx5TWF0cml4NCh0aGlzLnZpcnR1YWxDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHR0aGlzLmNsaXBQbGFuZS5zZXQoXG5cdFx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLm5vcm1hbC54LFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5ub3JtYWwueSxcblx0XHRcdHRoaXMucmVmbGVjdG9yUGxhbmUubm9ybWFsLnosXG5cdFx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLmNvbnN0YW50LFxuXHRcdCk7XG5cdFx0Y29uc3QgcHJvamVjdGlvbk1hdHJpeCA9IHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4O1xuXHRcdHRoaXMucS54ID0gKE1hdGguc2lnbih0aGlzLmNsaXBQbGFuZS54KSArIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOF0pIC8gcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1swXTtcblx0XHR0aGlzLnEueSA9IChNYXRoLnNpZ24odGhpcy5jbGlwUGxhbmUueSkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzldKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbNV07XG5cdFx0dGhpcy5xLnogPSAtMS4wO1xuXHRcdHRoaXMucS53ID0gKDEuMCArIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTBdKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTRdO1xuXHRcdC8vIENhbGN1bGF0ZSB0aGUgc2NhbGVkIHBsYW5lIHZlY3RvclxuXHRcdHRoaXMuY2xpcFBsYW5lLm11bHRpcGx5U2NhbGFyKDIuMCAvIHRoaXMuY2xpcFBsYW5lLmRvdCh0aGlzLnEpKTtcblx0XHQvLyBSZXBsYWNpbmcgdGhlIHRoaXJkIHJvdyBvZiB0aGUgcHJvamVjdGlvbiBtYXRyaXhcblx0XHRwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzJdID0gdGhpcy5jbGlwUGxhbmUueDtcblx0XHRwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzZdID0gdGhpcy5jbGlwUGxhbmUueTtcblx0XHRwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSA9IHRoaXMuY2xpcFBsYW5lLnogKyAxLjA7XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxNF0gPSB0aGlzLmNsaXBQbGFuZS53O1xuXHR9XG59XG4iXX0=
270
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9saWIvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixzQkFBc0IsRUFFdEIsS0FBSyxFQUNMLFNBQVMsRUFDVCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2xFLE9BQU8sRUFDTixVQUFVLEVBQ1YsYUFBYSxFQUNiLGtCQUFrQixFQUNsQixXQUFXLEVBRVgsT0FBTyxFQUVQLElBQUksRUFDSixJQUFJLEdBQ0osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFDTixXQUFXLEVBQ1gsWUFBWSxFQUNaLGFBQWEsRUFDYixZQUFZLEVBQ1osT0FBTyxFQUNQLGlCQUFpQixFQUNqQixLQUFLLEVBRUwsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxPQUFPLEVBQ1AsaUJBQWlCLEdBQ2pCLE1BQU0sT0FBTyxDQUFDOztBQWtCZixNQUFNLGNBQWMsR0FBcUM7SUFDeEQsT0FBTyxFQUFFLENBQUM7SUFDVixXQUFXLEVBQUUsQ0FBQztJQUNkLFVBQVUsRUFBRSxHQUFHO0lBQ2YsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNaLGlCQUFpQixFQUFFLEdBQUc7SUFDdEIsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixVQUFVLEVBQUUsQ0FBQztJQUNiLG9CQUFvQixFQUFFLElBQUk7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WyJpbXBvcnQge1xuXHRhZnRlck5leHRSZW5kZXIsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRFbGVtZW50UmVmLFxuXHRpbnB1dCxcblx0dW50cmFja2VkLFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmx1clBhc3MsIE1lc2hSZWZsZWN0b3JNYXRlcmlhbCB9IGZyb20gJ0BwbW5kcnMvdmFuaWxsYSc7XG5pbXBvcnQge1xuXHRhcHBseVByb3BzLFxuXHRnZXRMb2NhbFN0YXRlLFxuXHRpbmplY3RCZWZvcmVSZW5kZXIsXG5cdGluamVjdFN0b3JlLFxuXHROZ3RBbnlSZWNvcmQsXG5cdE5ndEFyZ3MsXG5cdE5ndE1lc2hTdGFuZGFyZE1hdGVyaWFsLFxuXHRvbWl0LFxuXHRwaWNrLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7XG5cdERlcHRoRm9ybWF0LFxuXHREZXB0aFRleHR1cmUsXG5cdEhhbGZGbG9hdFR5cGUsXG5cdExpbmVhckZpbHRlcixcblx0TWF0cml4NCxcblx0UGVyc3BlY3RpdmVDYW1lcmEsXG5cdFBsYW5lLFxuXHRUZXh0dXJlLFxuXHRVbnNpZ25lZFNob3J0VHlwZSxcblx0VmVjdG9yMyxcblx0VmVjdG9yNCxcblx0V2ViR0xSZW5kZXJUYXJnZXQsXG59IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8Tmd0TWVzaFN0YW5kYXJkTWF0ZXJpYWw+IHtcblx0cmVzb2x1dGlvbjogbnVtYmVyO1xuXHRtaXhCbHVyOiBudW1iZXI7XG5cdG1peFN0cmVuZ3RoOiBudW1iZXI7XG5cdGJsdXI6IFtudW1iZXIsIG51bWJlcl0gfCBudW1iZXI7XG5cdG1pcnJvcjogbnVtYmVyO1xuXHRtaW5EZXB0aFRocmVzaG9sZDogbnVtYmVyO1xuXHRtYXhEZXB0aFRocmVzaG9sZDogbnVtYmVyO1xuXHRkZXB0aFNjYWxlOiBudW1iZXI7XG5cdGRlcHRoVG9CbHVyUmF0aW9CaWFzOiBudW1iZXI7XG5cdGRpc3RvcnRpb246IG51bWJlcjtcblx0bWl4Q29udHJhc3Q6IG51bWJlcjtcblx0cmVmbGVjdG9yT2Zmc2V0OiBudW1iZXI7XG5cdGRpc3RvcnRpb25NYXA/OiBUZXh0dXJlO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c01lc2hSZWZsZWN0b3JNYXRlcmlhbE9wdGlvbnMgPSB7XG5cdG1peEJsdXI6IDAsXG5cdG1peFN0cmVuZ3RoOiAxLFxuXHRyZXNvbHV0aW9uOiAyNTYsXG5cdGJsdXI6IFswLCAwXSxcblx0bWluRGVwdGhUaHJlc2hvbGQ6IDAuOSxcblx0bWF4RGVwdGhUaHJlc2hvbGQ6IDEsXG5cdGRlcHRoU2NhbGU6IDAsXG5cdGRlcHRoVG9CbHVyUmF0aW9CaWFzOiAwLjI1LFxuXHRtaXJyb3I6IDAsXG5cdGRpc3RvcnRpb246IDEsXG5cdG1peENvbnRyYXN0OiAxLFxuXHRyZWZsZWN0b3JPZmZzZXQ6IDAsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSAjbWF0ZXJpYWwgKmFyZ3M9XCJbbWF0ZXJpYWwoKV1cIiBbYXR0YWNoXT1cImF0dGFjaCgpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXByaW1pdGl2ZT5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsIHtcblx0YXR0YWNoID0gaW5wdXQoJ21hdGVyaWFsJyk7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblx0cHJpdmF0ZSBwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFtcblx0XHQnZGlzdG9ydGlvbk1hcCcsXG5cdFx0J3Jlc29sdXRpb24nLFxuXHRcdCdtaXhCbHVyJyxcblx0XHQnbWl4U3RyZW5ndGgnLFxuXHRcdCdibHVyJyxcblx0XHQnbWluRGVwdGhUaHJlc2hvbGQnLFxuXHRcdCdtYXhEZXB0aFRocmVzaG9sZCcsXG5cdFx0J2RlcHRoU2NhbGUnLFxuXHRcdCdkZXB0aFRvQmx1clJhdGlvQmlhcycsXG5cdFx0J21pcnJvcicsXG5cdFx0J2Rpc3RvcnRpb24nLFxuXHRcdCdtaXhDb250cmFzdCcsXG5cdFx0J3JlZmxlY3Rvck9mZnNldCcsXG5cdF0pO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cblx0cHJpdmF0ZSBtYXRlcmlhbFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPE1lc2hSZWZsZWN0b3JNYXRlcmlhbD4+KCdtYXRlcmlhbCcpO1xuXG5cdHByaXZhdGUgcmVmbGVjdE9wdGlvbnMgPSBwaWNrKHRoaXMub3B0aW9ucywgW1xuXHRcdCdkaXN0b3J0aW9uTWFwJyxcblx0XHQncmVzb2x1dGlvbicsXG5cdFx0J21peEJsdXInLFxuXHRcdCdtaXhTdHJlbmd0aCcsXG5cdFx0J2JsdXInLFxuXHRcdCdtaW5EZXB0aFRocmVzaG9sZCcsXG5cdFx0J21heERlcHRoVGhyZXNob2xkJyxcblx0XHQnZGVwdGhTY2FsZScsXG5cdFx0J2RlcHRoVG9CbHVyUmF0aW9CaWFzJyxcblx0XHQnbWlycm9yJyxcblx0XHQnZGlzdG9ydGlvbicsXG5cdFx0J21peENvbnRyYXN0Jyxcblx0XHQncmVmbGVjdG9yT2Zmc2V0Jyxcblx0XSk7XG5cblx0cHJpdmF0ZSBibHVyID0gcGljayh0aGlzLnJlZmxlY3RPcHRpb25zLCAnYmx1cicpO1xuXG5cdHByaXZhdGUgbm9ybWFsaXplZEJsdXIgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgYmx1ciA9IHRoaXMuYmx1cigpO1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KGJsdXIpID8gYmx1ciA6IFtibHVyLCBibHVyXTtcblx0fSk7XG5cdHByaXZhdGUgaGFzQmx1ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMubm9ybWFsaXplZEJsdXIoKVswXSArIHRoaXMubm9ybWFsaXplZEJsdXIoKVsxXSA+IDApO1xuXG5cdHByaXZhdGUgcmVmbGVjdG9yUGxhbmUgPSBuZXcgUGxhbmUoKTtcblx0cHJpdmF0ZSBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIHJlZmxlY3RvcldvcmxkUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIGNhbWVyYVdvcmxkUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIHJvdGF0aW9uTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0cHJpdmF0ZSBsb29rQXRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKDAsIDAsIC0xKTtcblx0cHJpdmF0ZSBjbGlwUGxhbmUgPSBuZXcgVmVjdG9yNCgpO1xuXHRwcml2YXRlIHZpZXcgPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIHRhcmdldCA9IG5ldyBWZWN0b3IzKCk7XG5cdHByaXZhdGUgcSA9IG5ldyBWZWN0b3I0KCk7XG5cdHByaXZhdGUgdGV4dHVyZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdHByaXZhdGUgdmlydHVhbENhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSgpO1xuXG5cdHByaXZhdGUgcmVmbGVjdFN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtcblx0XHRcdGdsLFxuXHRcdFx0e1xuXHRcdFx0XHRyZXNvbHV0aW9uLFxuXHRcdFx0XHRtaW5EZXB0aFRocmVzaG9sZCxcblx0XHRcdFx0bWF4RGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRcdGRlcHRoU2NhbGUsXG5cdFx0XHRcdGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuXHRcdFx0XHRtaXJyb3IsXG5cdFx0XHRcdG1peEJsdXIsXG5cdFx0XHRcdG1peFN0cmVuZ3RoLFxuXHRcdFx0XHRkaXN0b3J0aW9uLFxuXHRcdFx0XHRkaXN0b3J0aW9uTWFwLFxuXHRcdFx0XHRtaXhDb250cmFzdCxcblx0XHRcdH0sXG5cdFx0XHRibHVyLFxuXHRcdFx0aGFzQmx1cixcblx0XHRdID0gW3RoaXMuZ2woKSwgdGhpcy5yZWZsZWN0T3B0aW9ucygpLCB0aGlzLm5vcm1hbGl6ZWRCbHVyKCksIHRoaXMuaGFzQmx1cigpXTtcblxuXHRcdGNvbnN0IHJlbmRlclRhcmdldFBhcmFtZXRlcnMgPSB7XG5cdFx0XHRtaW5GaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRcdFx0dHlwZTogSGFsZkZsb2F0VHlwZSxcblx0XHR9O1xuXG5cdFx0Y29uc3QgZmJvMSA9IG5ldyBXZWJHTFJlbmRlclRhcmdldChyZXNvbHV0aW9uLCByZXNvbHV0aW9uLCByZW5kZXJUYXJnZXRQYXJhbWV0ZXJzKTtcblx0XHRmYm8xLmRlcHRoQnVmZmVyID0gdHJ1ZTtcblx0XHRmYm8xLmRlcHRoVGV4dHVyZSA9IG5ldyBEZXB0aFRleHR1cmUocmVzb2x1dGlvbiwgcmVzb2x1dGlvbik7XG5cdFx0ZmJvMS5kZXB0aFRleHR1cmUuZm9ybWF0ID0gRGVwdGhGb3JtYXQ7XG5cdFx0ZmJvMS5kZXB0aFRleHR1cmUudHlwZSA9IFVuc2lnbmVkU2hvcnRUeXBlO1xuXHRcdGNvbnN0IGZibzIgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcmVuZGVyVGFyZ2V0UGFyYW1ldGVycyk7XG5cblx0XHRjb25zdCBibHVyUGFzcyA9IG5ldyBCbHVyUGFzcyh7XG5cdFx0XHRnbCxcblx0XHRcdHJlc29sdXRpb24sXG5cdFx0XHR3aWR0aDogYmx1clswXSxcblx0XHRcdGhlaWdodDogYmx1clsxXSxcblx0XHRcdG1pbkRlcHRoVGhyZXNob2xkLFxuXHRcdFx0bWF4RGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRkZXB0aFNjYWxlLFxuXHRcdFx0ZGVwdGhUb0JsdXJSYXRpb0JpYXMsXG5cdFx0fSk7XG5cblx0XHRjb25zdCBkZWZpbmVzOiBOZ3RBbnlSZWNvcmQgPSB7fTtcblxuXHRcdGlmIChoYXNCbHVyKSB7XG5cdFx0XHRkZWZpbmVzWydVU0VfQkxVUiddID0gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKGRlcHRoU2NhbGUgPiAwKSB7XG5cdFx0XHRkZWZpbmVzWydVU0VfREVQVEgnXSA9ICcnO1xuXHRcdH1cblxuXHRcdGlmIChkaXN0b3J0aW9uTWFwKSB7XG5cdFx0XHRkZWZpbmVzWydVU0VfRElTVE9SVElPTiddID0gJyc7XG5cdFx0fVxuXG5cdFx0Y29uc3QgcmVmbGVjdG9yUGFyYW1ldGVycyA9IHtcblx0XHRcdG1pcnJvcixcblx0XHRcdHRleHR1cmVNYXRyaXg6IHRoaXMudGV4dHVyZU1hdHJpeCxcblx0XHRcdG1peEJsdXIsXG5cdFx0XHR0RGlmZnVzZTogZmJvMS50ZXh0dXJlLFxuXHRcdFx0dERlcHRoOiBmYm8xLmRlcHRoVGV4dHVyZSxcblx0XHRcdHREaWZmdXNlQmx1cjogZmJvMi50ZXh0dXJlLFxuXHRcdFx0aGFzQmx1cixcblx0XHRcdG1peFN0cmVuZ3RoLFxuXHRcdFx0bWluRGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRtYXhEZXB0aFRocmVzaG9sZCxcblx0XHRcdGRlcHRoU2NhbGUsXG5cdFx0XHRkZXB0aFRvQmx1clJhdGlvQmlhcyxcblx0XHRcdGRpc3RvcnRpb24sXG5cdFx0XHRkaXN0b3J0aW9uTWFwLFxuXHRcdFx0bWl4Q29udHJhc3QsXG5cdFx0XHRkZWZpbmVzLFxuXHRcdH07XG5cblx0XHRyZXR1cm4geyBmYm8xLCBmYm8yLCBibHVyUGFzcywgcmVmbGVjdG9yUGFyYW1ldGVycyB9O1xuXHR9KTtcblxuXHRwcml2YXRlIGRlZmluZXNLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgZGVmaW5lcyA9IHRoaXMucmVmbGVjdFN0YXRlKCkucmVmbGVjdG9yUGFyYW1ldGVycy5kZWZpbmVzO1xuXHRcdHJldHVybiBPYmplY3QuZW50cmllcyhkZWZpbmVzKS5yZWR1Y2UoKGFjYywgW2tleSwgdmFsdWVdKSA9PiAodmFsdWUgIT0gbnVsbCA/IGAke2FjY30gJHtrZXl9YCA6IGFjYyksICcnKTtcblx0fSk7XG5cblx0bWF0ZXJpYWwgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgcHJldk1hdGVyaWFsID0gdW50cmFja2VkKHRoaXMubWF0ZXJpYWxSZWYpPy5uYXRpdmVFbGVtZW50O1xuXG5cdFx0aWYgKHByZXZNYXRlcmlhbCkge1xuXHRcdFx0cHJldk1hdGVyaWFsLmRpc3Bvc2UoKTtcblx0XHRcdGRlbGV0ZSAocHJldk1hdGVyaWFsIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcblx0XHRcdGRlbGV0ZSAocHJldk1hdGVyaWFsIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X3JlbmRlcmVyX18nXTtcblx0XHR9XG5cblx0XHQvLyB0cmFja2luZyBkZWZpbmVzIGtleSBzbyB0aGF0IHRoZSBtYXRlcmlhbCBpcyByZWNyZWF0ZWQgd2hlbiB0aGUgZGVmaW5lcyBjaGFuZ2Vcblx0XHR0aGlzLmRlZmluZXNLZXkoKTtcblx0XHRyZXR1cm4gbmV3IE1lc2hSZWZsZWN0b3JNYXRlcmlhbCgpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxSZWYoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRcdFx0aWYgKCFtYXRlcmlhbCkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCB7IHJlZmxlY3RvclBhcmFtZXRlcnMgfSA9IHRoaXMucmVmbGVjdFN0YXRlKCk7XG5cdFx0XHRcdGFwcGx5UHJvcHMobWF0ZXJpYWwsIHsgLi4ucmVmbGVjdG9yUGFyYW1ldGVycywgLi4udGhpcy5wYXJhbWV0ZXJzKCkgfSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBnbCwgc2NlbmUgfSkgPT4ge1xuXHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAoIW1hdGVyaWFsKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG1hdGVyaWFsKTtcblx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBwYXJlbnQgPSBSZWZsZWN0LmdldChtYXRlcmlhbCwgJ3BhcmVudCcpID8/IHVudHJhY2tlZChsb2NhbFN0YXRlLnBhcmVudCk7XG5cdFx0XHRpZiAoIXBhcmVudCkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCB7IGZibzEsIGZibzIsIGJsdXJQYXNzIH0gPSB0aGlzLnJlZmxlY3RTdGF0ZSgpO1xuXHRcdFx0Y29uc3QgaGFzQmx1ciA9IHRoaXMuaGFzQmx1cigpO1xuXG5cdFx0XHRwYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgY3VycmVudFhyRW5hYmxlZCA9IGdsLnhyLmVuYWJsZWQ7XG5cdFx0XHRjb25zdCBjdXJyZW50U2hhZG93QXV0b1VwZGF0ZSA9IGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlO1xuXHRcdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0XHRcdGdsLnhyLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gZmFsc2U7XG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQoZmJvMSk7XG5cdFx0XHRnbC5zdGF0ZS5idWZmZXJzLmRlcHRoLnNldE1hc2sodHJ1ZSk7XG5cdFx0XHRpZiAoIWdsLmF1dG9DbGVhcikgZ2wuY2xlYXIoKTtcblx0XHRcdGdsLnJlbmRlcihzY2VuZSwgdGhpcy52aXJ0dWFsQ2FtZXJhKTtcblx0XHRcdGlmIChoYXNCbHVyKSBibHVyUGFzcy5yZW5kZXIoZ2wsIGZibzEsIGZibzIpO1xuXHRcdFx0Z2wueHIuZW5hYmxlZCA9IGN1cnJlbnRYckVuYWJsZWQ7XG5cdFx0XHRnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IGN1cnJlbnRTaGFkb3dBdXRvVXBkYXRlO1xuXHRcdFx0cGFyZW50LnZpc2libGUgPSB0cnVlO1xuXHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBiZWZvcmVSZW5kZXIoKSB7XG5cdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0aWYgKCFtYXRlcmlhbCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUobWF0ZXJpYWwpO1xuXHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgcGFyZW50ID0gUmVmbGVjdC5nZXQobWF0ZXJpYWwsICdwYXJlbnQnKSA/PyB1bnRyYWNrZWQobG9jYWxTdGF0ZS5wYXJlbnQpO1xuXHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRjb25zdCB7IGNhbWVyYSB9ID0gdGhpcy5zdG9yZS5zbmFwc2hvdDtcblx0XHRjb25zdCB7IHJlZmxlY3Rvck9mZnNldCB9ID0gdW50cmFja2VkKHRoaXMucmVmbGVjdE9wdGlvbnMpO1xuXG5cdFx0dGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihwYXJlbnQubWF0cml4V29ybGQpO1xuXHRcdHRoaXMuY2FtZXJhV29ybGRQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblx0XHR0aGlzLnJvdGF0aW9uTWF0cml4LmV4dHJhY3RSb3RhdGlvbihwYXJlbnQubWF0cml4V29ybGQpO1xuXHRcdHRoaXMubm9ybWFsLnNldCgwLCAwLCAxKTtcblx0XHR0aGlzLm5vcm1hbC5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG5cdFx0dGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uLmFkZFNjYWxlZFZlY3Rvcih0aGlzLm5vcm1hbCwgcmVmbGVjdG9yT2Zmc2V0KTtcblx0XHR0aGlzLnZpZXcuc3ViVmVjdG9ycyh0aGlzLnJlZmxlY3RvcldvcmxkUG9zaXRpb24sIHRoaXMuY2FtZXJhV29ybGRQb3NpdGlvbik7XG5cdFx0Ly8gQXZvaWQgcmVuZGVyaW5nIHdoZW4gcmVmbGVjdG9yIGlzIGZhY2luZyBhd2F5XG5cdFx0aWYgKHRoaXMudmlldy5kb3QodGhpcy5ub3JtYWwpID4gMCkgcmV0dXJuO1xuXHRcdHRoaXMudmlldy5yZWZsZWN0KHRoaXMubm9ybWFsKS5uZWdhdGUoKTtcblx0XHR0aGlzLnZpZXcuYWRkKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG5cdFx0dGhpcy5yb3RhdGlvbk1hdHJpeC5leHRyYWN0Um90YXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLnNldCgwLCAwLCAtMSk7XG5cdFx0dGhpcy5sb29rQXRQb3NpdGlvbi5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG5cdFx0dGhpcy5sb29rQXRQb3NpdGlvbi5hZGQodGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnRhcmdldC5zdWJWZWN0b3JzKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy5sb29rQXRQb3NpdGlvbik7XG5cdFx0dGhpcy50YXJnZXQucmVmbGVjdCh0aGlzLm5vcm1hbCkubmVnYXRlKCk7XG5cdFx0dGhpcy50YXJnZXQuYWRkKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnBvc2l0aW9uLmNvcHkodGhpcy52aWV3KTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEudXAuc2V0KDAsIDEsIDApO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS51cC5hcHBseU1hdHJpeDQodGhpcy5yb3RhdGlvbk1hdHJpeCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwLnJlZmxlY3QodGhpcy5ub3JtYWwpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS5sb29rQXQodGhpcy50YXJnZXQpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS5mYXIgPSBjYW1lcmEuZmFyOyAvLyBVc2VkIGluIFdlYkdMQmFja2dyb3VuZFxuXHRcdHRoaXMudmlydHVhbENhbWVyYS51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4LmNvcHkoY2FtZXJhLnByb2plY3Rpb25NYXRyaXgpO1xuXHRcdC8vIFVwZGF0ZSB0aGUgdGV4dHVyZSBtYXRyaXhcblx0XHR0aGlzLnRleHR1cmVNYXRyaXguc2V0KDAuNSwgMC4wLCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC41LCAwLjAsIDAuMCwgMC41LCAwLjUsIDAuMCwgMC4wLCAwLjAsIDEuMCk7XG5cdFx0dGhpcy50ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHRoaXMudmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcblx0XHR0aGlzLnRleHR1cmVNYXRyaXgubXVsdGlwbHkodGhpcy52aXJ0dWFsQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cdFx0dGhpcy50ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0Ly8gTm93IHVwZGF0ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIG5ldyBjbGlwIHBsYW5lLCBpbXBsZW1lbnRpbmcgY29kZSBmcm9tOiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9jb2RlL29ibGlxdWUuaHRtbFxuXHRcdC8vIFBhcGVyIGV4cGxhaW5pbmcgdGhpcyB0ZWNobmlxdWU6IGh0dHA6Ly93d3cudGVyYXRob24uY29tL2xlbmd5ZWwvTGVuZ3llbC1PYmxpcXVlLnBkZlxuXHRcdHRoaXMucmVmbGVjdG9yUGxhbmUuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodGhpcy5ub3JtYWwsIHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG5cdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5hcHBseU1hdHJpeDQodGhpcy52aXJ0dWFsQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cdFx0dGhpcy5jbGlwUGxhbmUuc2V0KFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5ub3JtYWwueCxcblx0XHRcdHRoaXMucmVmbGVjdG9yUGxhbmUubm9ybWFsLnksXG5cdFx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLm5vcm1hbC56LFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5jb25zdGFudCxcblx0XHQpO1xuXHRcdGNvbnN0IHByb2plY3Rpb25NYXRyaXggPSB0aGlzLnZpcnR1YWxDYW1lcmEucHJvamVjdGlvbk1hdHJpeDtcblx0XHR0aGlzLnEueCA9IChNYXRoLnNpZ24odGhpcy5jbGlwUGxhbmUueCkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzhdKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF07XG5cdFx0dGhpcy5xLnkgPSAoTWF0aC5zaWduKHRoaXMuY2xpcFBsYW5lLnkpICsgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s5XSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzVdO1xuXHRcdHRoaXMucS56ID0gLTEuMDtcblx0XHR0aGlzLnEudyA9ICgxLjAgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XTtcblx0XHQvLyBDYWxjdWxhdGUgdGhlIHNjYWxlZCBwbGFuZSB2ZWN0b3Jcblx0XHR0aGlzLmNsaXBQbGFuZS5tdWx0aXBseVNjYWxhcigyLjAgLyB0aGlzLmNsaXBQbGFuZS5kb3QodGhpcy5xKSk7XG5cdFx0Ly8gUmVwbGFjaW5nIHRoZSB0aGlyZCByb3cgb2YgdGhlIHByb2plY3Rpb24gbWF0cml4XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1syXSA9IHRoaXMuY2xpcFBsYW5lLng7XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s2XSA9IHRoaXMuY2xpcFBsYW5lLnk7XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMF0gPSB0aGlzLmNsaXBQbGFuZS56ICsgMS4wO1xuXHRcdHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTRdID0gdGhpcy5jbGlwUGxhbmUudztcblx0fVxufVxuIl19