angular-three-postprocessing 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/esm2022/lib/effect-composer.mjs +31 -41
  2. package/esm2022/lib/effect.mjs +6 -6
  3. package/esm2022/lib/effects/ascii.mjs +3 -3
  4. package/esm2022/lib/effects/bloom.mjs +3 -3
  5. package/esm2022/lib/effects/brightness-contrast.mjs +3 -3
  6. package/esm2022/lib/effects/chromatic-abberation.mjs +3 -3
  7. package/esm2022/lib/effects/color-average.mjs +3 -3
  8. package/esm2022/lib/effects/color-depth.mjs +3 -3
  9. package/esm2022/lib/effects/depth-of-field.mjs +9 -15
  10. package/esm2022/lib/effects/depth.mjs +3 -3
  11. package/esm2022/lib/effects/dot-screen.mjs +3 -3
  12. package/esm2022/lib/effects/fxaa.mjs +3 -3
  13. package/esm2022/lib/effects/glitch.mjs +15 -19
  14. package/esm2022/lib/effects/god-rays.mjs +9 -13
  15. package/esm2022/lib/effects/grid.mjs +10 -14
  16. package/esm2022/lib/effects/hue-saturation.mjs +3 -3
  17. package/esm2022/lib/effects/index.mjs +2 -1
  18. package/esm2022/lib/effects/lens-flare.mjs +13 -17
  19. package/esm2022/lib/effects/lut.mjs +18 -22
  20. package/esm2022/lib/effects/noise.mjs +3 -3
  21. package/esm2022/lib/effects/outline.mjs +33 -30
  22. package/esm2022/lib/effects/pixelation.mjs +3 -3
  23. package/esm2022/lib/effects/scanline.mjs +3 -3
  24. package/esm2022/lib/effects/sepia.mjs +3 -3
  25. package/esm2022/lib/effects/shock-wave.mjs +3 -3
  26. package/esm2022/lib/effects/smaa.mjs +3 -3
  27. package/esm2022/lib/effects/tilt-shift-2.mjs +3 -3
  28. package/esm2022/lib/effects/tilt-shift.mjs +3 -3
  29. package/esm2022/lib/effects/tone-mapping.mjs +81 -0
  30. package/esm2022/lib/effects/vignette.mjs +3 -3
  31. package/esm2022/lib/effects/water.mjs +3 -3
  32. package/esm2022/n8ao/angular-three-postprocessing-n8ao.mjs +5 -0
  33. package/esm2022/n8ao/index.mjs +2 -0
  34. package/esm2022/n8ao/lib/n8ao.mjs +78 -0
  35. package/fesm2022/angular-three-postprocessing-n8ao.mjs +85 -0
  36. package/fesm2022/angular-three-postprocessing-n8ao.mjs.map +1 -0
  37. package/fesm2022/angular-three-postprocessing.mjs +269 -218
  38. package/fesm2022/angular-three-postprocessing.mjs.map +1 -1
  39. package/lib/effect-composer.d.ts +0 -4
  40. package/lib/effects/depth-of-field.d.ts +1 -2
  41. package/lib/effects/glitch.d.ts +2 -3
  42. package/lib/effects/god-rays.d.ts +1 -2
  43. package/lib/effects/grid.d.ts +0 -1
  44. package/lib/effects/index.d.ts +1 -0
  45. package/lib/effects/lens-flare.d.ts +5 -7
  46. package/lib/effects/lut.d.ts +2 -3
  47. package/lib/effects/tone-mapping.d.ts +43 -0
  48. package/n8ao/README.md +3 -0
  49. package/n8ao/index.d.ts +1 -0
  50. package/n8ao/lib/n8ao.d.ts +35 -0
  51. package/package.json +13 -1
@@ -1,14 +1,10 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, afterNextRender, computed, input, } from '@angular/core';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, computed, effect, input } from '@angular/core';
2
2
  import { NgtArgs, injectStore, pick, vector2 } from 'angular-three';
3
- import { injectAutoEffect } from 'ngxtension/auto-effect';
4
3
  import { mergeInputs } from 'ngxtension/inject-inputs';
5
4
  import { GlitchEffect, GlitchMode } from 'postprocessing';
6
5
  import * as i0 from "@angular/core";
7
6
  export class NgtpGlitch {
8
7
  constructor() {
9
- this.autoEffect = injectAutoEffect();
10
- this.store = injectStore();
11
- this.invalidate = this.store.select('invalidate');
12
8
  this.options = input({ active: true }, { transform: mergeInputs({ active: true }) });
13
9
  this.active = pick(this.options, 'active');
14
10
  this.mode = pick(this.options, 'mode');
@@ -16,6 +12,8 @@ export class NgtpGlitch {
16
12
  this.duration = vector2(this.options, 'duration');
17
13
  this.chromaticAberrationOffset = vector2(this.options, 'chromaticAberrationOffset');
18
14
  this.strength = vector2(this.options, 'strength');
15
+ this.store = injectStore();
16
+ this.invalidate = this.store.select('invalidate');
19
17
  this.effect = computed(() => {
20
18
  const [{ ratio, dtSize, columns, blendFunction, perturbationMap }, delay, duration, chromaticAberrationOffset, strength,] = [this.options(), this.delay(), this.duration(), this.chromaticAberrationOffset(), this.strength()];
21
19
  return new GlitchEffect({
@@ -30,24 +28,22 @@ export class NgtpGlitch {
30
28
  strength,
31
29
  });
32
30
  });
33
- afterNextRender(() => {
34
- this.autoEffect(() => {
35
- const effect = this.effect();
36
- return () => effect.dispose();
37
- });
38
- this.autoEffect(() => {
39
- const [effect, invalidate, mode, active] = [this.effect(), this.invalidate(), this.mode(), this.active()];
40
- effect.mode = active ? mode || GlitchMode.SPORADIC : GlitchMode.DISABLED;
41
- invalidate();
42
- });
31
+ effect((onCleanup) => {
32
+ const effect = this.effect();
33
+ onCleanup(() => effect.dispose());
34
+ });
35
+ effect(() => {
36
+ const [glitchEffect, invalidate, mode, active] = [this.effect(), this.invalidate(), this.mode(), this.active()];
37
+ glitchEffect.mode = active ? mode || GlitchMode.SPORADIC : GlitchMode.DISABLED;
38
+ invalidate();
43
39
  });
44
40
  }
45
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpGlitch, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
46
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtpGlitch, isStandalone: true, selector: "ngtp-glitch", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpGlitch, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtpGlitch, isStandalone: true, selector: "ngtp-glitch", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
47
43
  <ngt-primitive *args="[effect()]" />
48
44
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
45
  }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpGlitch, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpGlitch, decorators: [{
51
47
  type: Component,
52
48
  args: [{
53
49
  selector: 'ngtp-glitch',
@@ -60,4 +56,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
60
56
  changeDetection: ChangeDetectionStrategy.OnPush,
61
57
  }]
62
58
  }], ctorParameters: () => [] });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpdGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdHMvZ2xpdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLEtBQUssR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFjLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQXNCMUQsTUFBTSxPQUFPLFVBQVU7SUFvQ3RCO1FBbkNRLGVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hDLFVBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckQsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQW1CLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXpGLFdBQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN0QyxTQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFbEMsVUFBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLGFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3Qyw4QkFBeUIsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO1FBQy9FLGFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVyRCxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QixNQUFNLENBQ0wsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLEVBQzFELEtBQUssRUFDTCxRQUFRLEVBQ1IseUJBQXlCLEVBQ3pCLFFBQVEsRUFDUixHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDdkcsT0FBTyxJQUFJLFlBQVksQ0FBQztnQkFDdkIsS0FBSztnQkFDTCxNQUFNO2dCQUNOLE9BQU87Z0JBQ1AsYUFBYTtnQkFDYixlQUFlO2dCQUNmLEtBQUs7Z0JBQ0wsUUFBUTtnQkFDUix5QkFBeUI7Z0JBQ3pCLFFBQVE7YUFDUixDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUdGLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDN0IsT0FBTyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzFHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztnQkFDekUsVUFBVSxFQUFFLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FqRFcsVUFBVTtrR0FBVixVQUFVLGlOQVBaOztFQUVULDREQUNTLE9BQU87OzJGQUlMLFVBQVU7a0JBVnRCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7O0VBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncywgTmd0VmVjdG9yMiwgaW5qZWN0U3RvcmUsIHBpY2ssIHZlY3RvcjIgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEdsaXRjaEVmZmVjdCwgR2xpdGNoTW9kZSB9IGZyb20gJ3Bvc3Rwcm9jZXNzaW5nJztcblxuZXhwb3J0IHR5cGUgR2xpdGNoT3B0aW9ucyA9IE5vbk51bGxhYmxlPENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgR2xpdGNoRWZmZWN0PlswXT4gJlxuXHRQYXJ0aWFsPHtcblx0XHRtb2RlOiBHbGl0Y2hNb2RlO1xuXHRcdGFjdGl2ZTogYm9vbGVhbjtcblx0XHRkZWxheTogTmd0VmVjdG9yMjtcblx0XHRkdXJhdGlvbjogTmd0VmVjdG9yMjtcblx0XHRjaHJvbWF0aWNBYmVycmF0aW9uT2Zmc2V0OiBOZ3RWZWN0b3IyO1xuXHRcdHN0cmVuZ3RoOiBOZ3RWZWN0b3IyO1xuXHR9PjtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cC1nbGl0Y2gnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2VmZmVjdCgpXVwiIC8+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cEdsaXRjaCB7XG5cdHByaXZhdGUgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0cHJpdmF0ZSBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdHByaXZhdGUgaW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cblx0b3B0aW9ucyA9IGlucHV0KHsgYWN0aXZlOiB0cnVlIH0gYXMgR2xpdGNoT3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKHsgYWN0aXZlOiB0cnVlIH0pIH0pO1xuXG5cdHByaXZhdGUgYWN0aXZlID0gcGljayh0aGlzLm9wdGlvbnMsICdhY3RpdmUnKTtcblx0cHJpdmF0ZSBtb2RlID0gcGljayh0aGlzLm9wdGlvbnMsICdtb2RlJyk7XG5cblx0cHJpdmF0ZSBkZWxheSA9IHZlY3RvcjIodGhpcy5vcHRpb25zLCAnZGVsYXknKTtcblx0cHJpdmF0ZSBkdXJhdGlvbiA9IHZlY3RvcjIodGhpcy5vcHRpb25zLCAnZHVyYXRpb24nKTtcblx0cHJpdmF0ZSBjaHJvbWF0aWNBYmVycmF0aW9uT2Zmc2V0ID0gdmVjdG9yMih0aGlzLm9wdGlvbnMsICdjaHJvbWF0aWNBYmVycmF0aW9uT2Zmc2V0Jyk7XG5cdHByaXZhdGUgc3RyZW5ndGggPSB2ZWN0b3IyKHRoaXMub3B0aW9ucywgJ3N0cmVuZ3RoJyk7XG5cblx0ZWZmZWN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtcblx0XHRcdHsgcmF0aW8sIGR0U2l6ZSwgY29sdW1ucywgYmxlbmRGdW5jdGlvbiwgcGVydHVyYmF0aW9uTWFwIH0sXG5cdFx0XHRkZWxheSxcblx0XHRcdGR1cmF0aW9uLFxuXHRcdFx0Y2hyb21hdGljQWJlcnJhdGlvbk9mZnNldCxcblx0XHRcdHN0cmVuZ3RoLFxuXHRcdF0gPSBbdGhpcy5vcHRpb25zKCksIHRoaXMuZGVsYXkoKSwgdGhpcy5kdXJhdGlvbigpLCB0aGlzLmNocm9tYXRpY0FiZXJyYXRpb25PZmZzZXQoKSwgdGhpcy5zdHJlbmd0aCgpXTtcblx0XHRyZXR1cm4gbmV3IEdsaXRjaEVmZmVjdCh7XG5cdFx0XHRyYXRpbyxcblx0XHRcdGR0U2l6ZSxcblx0XHRcdGNvbHVtbnMsXG5cdFx0XHRibGVuZEZ1bmN0aW9uLFxuXHRcdFx0cGVydHVyYmF0aW9uTWFwLFxuXHRcdFx0ZGVsYXksXG5cdFx0XHRkdXJhdGlvbixcblx0XHRcdGNocm9tYXRpY0FiZXJyYXRpb25PZmZzZXQsXG5cdFx0XHRzdHJlbmd0aCxcblx0XHR9KTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGVmZmVjdCA9IHRoaXMuZWZmZWN0KCk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiBlZmZlY3QuZGlzcG9zZSgpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRcdGNvbnN0IFtlZmZlY3QsIGludmFsaWRhdGUsIG1vZGUsIGFjdGl2ZV0gPSBbdGhpcy5lZmZlY3QoKSwgdGhpcy5pbnZhbGlkYXRlKCksIHRoaXMubW9kZSgpLCB0aGlzLmFjdGl2ZSgpXTtcblx0XHRcdFx0ZWZmZWN0Lm1vZGUgPSBhY3RpdmUgPyBtb2RlIHx8IEdsaXRjaE1vZGUuU1BPUkFESUMgOiBHbGl0Y2hNb2RlLkRJU0FCTEVEO1xuXHRcdFx0XHRpbnZhbGlkYXRlKCk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxufVxuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2xpdGNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdHMvZ2xpdGNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLE9BQU8sRUFBYyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFzQjFELE1BQU0sT0FBTyxVQUFVO0lBbUN0QjtRQWxDQSxZQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBbUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxXQUFXLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFekYsV0FBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLFNBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUVsQyxVQUFLLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDdkMsYUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQzdDLDhCQUF5QixHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLDJCQUEyQixDQUFDLENBQUM7UUFDL0UsYUFBUSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRTdDLFVBQUssR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUN0QixlQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckQsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxDQUNMLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxFQUMxRCxLQUFLLEVBQ0wsUUFBUSxFQUNSLHlCQUF5QixFQUN6QixRQUFRLEVBQ1IsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZHLE9BQU8sSUFBSSxZQUFZLENBQUM7Z0JBQ3ZCLEtBQUs7Z0JBQ0wsTUFBTTtnQkFDTixPQUFPO2dCQUNQLGFBQWE7Z0JBQ2IsZUFBZTtnQkFDZixLQUFLO2dCQUNMLFFBQVE7Z0JBQ1IseUJBQXlCO2dCQUN6QixRQUFRO2FBQ1IsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUNwQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDN0IsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2hILFlBQVksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUMvRSxVQUFVLEVBQUUsQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0E5Q1csVUFBVTtrR0FBVixVQUFVLGlOQVBaOztFQUVULDREQUNTLE9BQU87OzJGQUlMLFVBQVU7a0JBVnRCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7O0VBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIE5ndFZlY3RvcjIsIGluamVjdFN0b3JlLCBwaWNrLCB2ZWN0b3IyIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBHbGl0Y2hFZmZlY3QsIEdsaXRjaE1vZGUgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5cbmV4cG9ydCB0eXBlIEdsaXRjaE9wdGlvbnMgPSBOb25OdWxsYWJsZTxDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEdsaXRjaEVmZmVjdD5bMF0+ICZcblx0UGFydGlhbDx7XG5cdFx0bW9kZTogR2xpdGNoTW9kZTtcblx0XHRhY3RpdmU6IGJvb2xlYW47XG5cdFx0ZGVsYXk6IE5ndFZlY3RvcjI7XG5cdFx0ZHVyYXRpb246IE5ndFZlY3RvcjI7XG5cdFx0Y2hyb21hdGljQWJlcnJhdGlvbk9mZnNldDogTmd0VmVjdG9yMjtcblx0XHRzdHJlbmd0aDogTmd0VmVjdG9yMjtcblx0fT47XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHAtZ2xpdGNoJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltlZmZlY3QoKV1cIiAvPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBHbGl0Y2gge1xuXHRvcHRpb25zID0gaW5wdXQoeyBhY3RpdmU6IHRydWUgfSBhcyBHbGl0Y2hPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoeyBhY3RpdmU6IHRydWUgfSkgfSk7XG5cblx0cHJpdmF0ZSBhY3RpdmUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2FjdGl2ZScpO1xuXHRwcml2YXRlIG1vZGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ21vZGUnKTtcblxuXHRwcml2YXRlIGRlbGF5ID0gdmVjdG9yMih0aGlzLm9wdGlvbnMsICdkZWxheScpO1xuXHRwcml2YXRlIGR1cmF0aW9uID0gdmVjdG9yMih0aGlzLm9wdGlvbnMsICdkdXJhdGlvbicpO1xuXHRwcml2YXRlIGNocm9tYXRpY0FiZXJyYXRpb25PZmZzZXQgPSB2ZWN0b3IyKHRoaXMub3B0aW9ucywgJ2Nocm9tYXRpY0FiZXJyYXRpb25PZmZzZXQnKTtcblx0cHJpdmF0ZSBzdHJlbmd0aCA9IHZlY3RvcjIodGhpcy5vcHRpb25zLCAnc3RyZW5ndGgnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBpbnZhbGlkYXRlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2ludmFsaWRhdGUnKTtcblxuXHRlZmZlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW1xuXHRcdFx0eyByYXRpbywgZHRTaXplLCBjb2x1bW5zLCBibGVuZEZ1bmN0aW9uLCBwZXJ0dXJiYXRpb25NYXAgfSxcblx0XHRcdGRlbGF5LFxuXHRcdFx0ZHVyYXRpb24sXG5cdFx0XHRjaHJvbWF0aWNBYmVycmF0aW9uT2Zmc2V0LFxuXHRcdFx0c3RyZW5ndGgsXG5cdFx0XSA9IFt0aGlzLm9wdGlvbnMoKSwgdGhpcy5kZWxheSgpLCB0aGlzLmR1cmF0aW9uKCksIHRoaXMuY2hyb21hdGljQWJlcnJhdGlvbk9mZnNldCgpLCB0aGlzLnN0cmVuZ3RoKCldO1xuXHRcdHJldHVybiBuZXcgR2xpdGNoRWZmZWN0KHtcblx0XHRcdHJhdGlvLFxuXHRcdFx0ZHRTaXplLFxuXHRcdFx0Y29sdW1ucyxcblx0XHRcdGJsZW5kRnVuY3Rpb24sXG5cdFx0XHRwZXJ0dXJiYXRpb25NYXAsXG5cdFx0XHRkZWxheSxcblx0XHRcdGR1cmF0aW9uLFxuXHRcdFx0Y2hyb21hdGljQWJlcnJhdGlvbk9mZnNldCxcblx0XHRcdHN0cmVuZ3RoLFxuXHRcdH0pO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgZWZmZWN0ID0gdGhpcy5lZmZlY3QoKTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiBlZmZlY3QuZGlzcG9zZSgpKTtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbZ2xpdGNoRWZmZWN0LCBpbnZhbGlkYXRlLCBtb2RlLCBhY3RpdmVdID0gW3RoaXMuZWZmZWN0KCksIHRoaXMuaW52YWxpZGF0ZSgpLCB0aGlzLm1vZGUoKSwgdGhpcy5hY3RpdmUoKV07XG5cdFx0XHRnbGl0Y2hFZmZlY3QubW9kZSA9IGFjdGl2ZSA/IG1vZGUgfHwgR2xpdGNoTW9kZS5TUE9SQURJQyA6IEdsaXRjaE1vZGUuRElTQUJMRUQ7XG5cdFx0XHRpbnZhbGlkYXRlKCk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,31 +1,27 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, afterNextRender, computed, inject, input, } from '@angular/core';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, computed, effect, inject, input, } from '@angular/core';
2
2
  import { NgtArgs, is } from 'angular-three';
3
- import { injectAutoEffect } from 'ngxtension/auto-effect';
4
3
  import { GodRaysEffect } from 'postprocessing';
5
4
  import { NgtpEffectComposer } from '../effect-composer';
6
5
  import * as i0 from "@angular/core";
7
6
  export class NgtpGodRays {
8
7
  constructor() {
9
- this.autoEffect = injectAutoEffect();
10
- this.effectComposer = inject(NgtpEffectComposer);
11
8
  this.options = input({});
9
+ this.effectComposer = inject(NgtpEffectComposer);
12
10
  this.effect = computed(() => {
13
11
  const [camera, { sun, ...options }] = [this.effectComposer.camera(), this.options()];
14
12
  return new GodRaysEffect(camera, is.ref(sun) ? sun.nativeElement : sun, options);
15
13
  });
16
- afterNextRender(() => {
17
- this.autoEffect(() => {
18
- const [sun, effect] = [this.options().sun, this.effect()];
19
- effect.lightSource = is.ref(sun) ? sun.nativeElement : sun;
20
- });
14
+ effect(() => {
15
+ const [sun, godRaysEffect] = [this.options().sun, this.effect()];
16
+ godRaysEffect.lightSource = is.ref(sun) ? sun.nativeElement : sun;
21
17
  });
22
18
  }
23
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpGodRays, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtpGodRays, isStandalone: true, selector: "ngtp-god-rays", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpGodRays, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtpGodRays, isStandalone: true, selector: "ngtp-god-rays", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
25
21
  <ngt-primitive *args="[effect()]" />
26
22
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27
23
  }
28
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpGodRays, decorators: [{
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpGodRays, decorators: [{
29
25
  type: Component,
30
26
  args: [{
31
27
  selector: 'ngtp-god-rays',
@@ -38,4 +34,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
38
34
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
39
35
  }]
40
36
  }], ctorParameters: () => [] });
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29kLXJheXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Bvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0cy9nb2QtcmF5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFnQnhELE1BQU0sT0FBTyxXQUFXO0lBV3ZCO1FBVlEsZUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDaEMsbUJBQWMsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVwRCxZQUFPLEdBQUcsS0FBSyxDQUFDLEVBQW9CLENBQUMsQ0FBQztRQUV0QyxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QixNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckYsT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO1FBR0YsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzFELE1BQU0sQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzVELENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQWxCVyxXQUFXO2tHQUFYLFdBQVcsbU5BUGI7O0VBRVQsNERBQ1MsT0FBTzs7MkZBSUwsV0FBVztrQkFWdkIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRhZnRlck5leHRSZW5kZXIsXG5cdGNvbXB1dGVkLFxuXHRpbmplY3QsXG5cdGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIGlzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBHb2RSYXlzRWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgTWVzaCwgUG9pbnRzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0cEVmZmVjdENvbXBvc2VyIH0gZnJvbSAnLi4vZWZmZWN0LWNvbXBvc2VyJztcblxudHlwZSBHb2RSYXlzT3B0aW9ucyA9IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgR29kUmF5c0VmZmVjdD5bMl0gJiB7XG5cdHN1bjogTWVzaCB8IFBvaW50cyB8IEVsZW1lbnRSZWY8TWVzaCB8IFBvaW50cz47XG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RwLWdvZC1yYXlzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltlZmZlY3QoKV1cIiAvPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBHb2RSYXlzIHtcblx0cHJpdmF0ZSBhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRwcml2YXRlIGVmZmVjdENvbXBvc2VyID0gaW5qZWN0KE5ndHBFZmZlY3RDb21wb3Nlcik7XG5cblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIEdvZFJheXNPcHRpb25zKTtcblxuXHRlZmZlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2NhbWVyYSwgeyBzdW4sIC4uLm9wdGlvbnMgfV0gPSBbdGhpcy5lZmZlY3RDb21wb3Nlci5jYW1lcmEoKSwgdGhpcy5vcHRpb25zKCldO1xuXHRcdHJldHVybiBuZXcgR29kUmF5c0VmZmVjdChjYW1lcmEsIGlzLnJlZihzdW4pID8gc3VuLm5hdGl2ZUVsZW1lbnQgOiBzdW4sIG9wdGlvbnMpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgW3N1biwgZWZmZWN0XSA9IFt0aGlzLm9wdGlvbnMoKS5zdW4sIHRoaXMuZWZmZWN0KCldO1xuXHRcdFx0XHRlZmZlY3QubGlnaHRTb3VyY2UgPSBpcy5yZWYoc3VuKSA/IHN1bi5uYXRpdmVFbGVtZW50IDogc3VuO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29kLXJheXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Bvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0cy9nb2QtcmF5cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7QUFnQnhELE1BQU0sT0FBTyxXQUFXO0lBVXZCO1FBVEEsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFvQixDQUFDLENBQUM7UUFFOUIsbUJBQWMsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUVwRCxXQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN0QixNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckYsT0FBTyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xGLENBQUMsQ0FBQyxDQUFDO1FBR0YsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQ2pFLGFBQWEsQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ25FLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FmVyxXQUFXO2tHQUFYLFdBQVcsbU5BUGI7O0VBRVQsNERBQ1MsT0FBTzs7MkZBSUwsV0FBVztrQkFWdkIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsZUFBZTtvQkFDekIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdGlucHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIGlzIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBHb2RSYXlzRWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgTWVzaCwgUG9pbnRzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0cEVmZmVjdENvbXBvc2VyIH0gZnJvbSAnLi4vZWZmZWN0LWNvbXBvc2VyJztcblxudHlwZSBHb2RSYXlzT3B0aW9ucyA9IENvbnN0cnVjdG9yUGFyYW1ldGVyczx0eXBlb2YgR29kUmF5c0VmZmVjdD5bMl0gJiB7XG5cdHN1bjogTWVzaCB8IFBvaW50cyB8IEVsZW1lbnRSZWY8TWVzaCB8IFBvaW50cz47XG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RwLWdvZC1yYXlzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltlZmZlY3QoKV1cIiAvPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBHb2RSYXlzIHtcblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIEdvZFJheXNPcHRpb25zKTtcblxuXHRwcml2YXRlIGVmZmVjdENvbXBvc2VyID0gaW5qZWN0KE5ndHBFZmZlY3RDb21wb3Nlcik7XG5cblx0ZWZmZWN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtjYW1lcmEsIHsgc3VuLCAuLi5vcHRpb25zIH1dID0gW3RoaXMuZWZmZWN0Q29tcG9zZXIuY2FtZXJhKCksIHRoaXMub3B0aW9ucygpXTtcblx0XHRyZXR1cm4gbmV3IEdvZFJheXNFZmZlY3QoY2FtZXJhLCBpcy5yZWYoc3VuKSA/IHN1bi5uYXRpdmVFbGVtZW50IDogc3VuLCBvcHRpb25zKTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtzdW4sIGdvZFJheXNFZmZlY3RdID0gW3RoaXMub3B0aW9ucygpLnN1biwgdGhpcy5lZmZlY3QoKV07XG5cdFx0XHRnb2RSYXlzRWZmZWN0LmxpZ2h0U291cmNlID0gaXMucmVmKHN1bikgPyBzdW4ubmF0aXZlRWxlbWVudCA6IHN1bjtcblx0XHR9KTtcblx0fVxufVxuIl19
@@ -1,32 +1,28 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, afterNextRender, computed, input, } from '@angular/core';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, computed, effect, input } from '@angular/core';
2
2
  import { NgtArgs, pick } from 'angular-three';
3
- import { injectAutoEffect } from 'ngxtension/auto-effect';
4
3
  import { GridEffect } from 'postprocessing';
5
4
  import * as i0 from "@angular/core";
6
5
  export class NgtpGrid {
7
6
  constructor() {
8
- this.autoEffect = injectAutoEffect();
9
7
  this.options = input({});
10
8
  this.size = pick(this.options, 'size');
11
9
  this.effect = computed(() => {
12
10
  const { size: _, ...options } = this.options();
13
11
  return new GridEffect(options);
14
12
  });
15
- afterNextRender(() => {
16
- this.autoEffect(() => {
17
- const [size, effect] = [this.size(), this.effect()];
18
- if (size) {
19
- effect.setSize(size.width, size.height);
20
- }
21
- });
13
+ effect(() => {
14
+ const [size, effect] = [this.size(), this.effect()];
15
+ if (size) {
16
+ effect.setSize(size.width, size.height);
17
+ }
22
18
  });
23
19
  }
24
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtpGrid, isStandalone: true, selector: "ngtp-grid", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpGrid, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtpGrid, isStandalone: true, selector: "ngtp-grid", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
26
22
  <ngt-primitive *args="[effect()]" />
27
23
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28
24
  }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpGrid, decorators: [{
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpGrid, decorators: [{
30
26
  type: Component,
31
27
  args: [{
32
28
  selector: 'ngtp-grid',
@@ -39,4 +35,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
39
35
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
40
36
  }]
41
37
  }], ctorParameters: () => [] });
42
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcG9zdHByb2Nlc3Npbmcvc3JjL2xpYi9lZmZlY3RzL2dyaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHNCQUFzQixFQUN0Qix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixRQUFRLEVBQ1IsS0FBSyxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFlNUMsTUFBTSxPQUFPLFFBQVE7SUFXcEI7UUFWUSxlQUFVLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QyxZQUFPLEdBQUcsS0FBSyxDQUFDLEVBQWlCLENBQUMsQ0FBQztRQUMzQixTQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFMUMsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUdGLGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3BCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3BELElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDekMsQ0FBQztZQUNGLENBQUMsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQXBCVyxRQUFRO2tHQUFSLFFBQVEsK01BUFY7O0VBRVQsNERBQ1MsT0FBTzs7MkZBSUwsUUFBUTtrQkFWcEIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztpQkFDakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRhZnRlck5leHRSZW5kZXIsXG5cdGNvbXB1dGVkLFxuXHRpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzLCBwaWNrIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3RBdXRvRWZmZWN0IH0gZnJvbSAnbmd4dGVuc2lvbi9hdXRvLWVmZmVjdCc7XG5pbXBvcnQgeyBHcmlkRWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuXG50eXBlIEdyaWRPcHRpb25zID0gTm9uTnVsbGFibGU8Q29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBHcmlkRWZmZWN0PlswXT4gJlxuXHRQYXJ0aWFsPHsgc2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlciB9IH0+O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RwLWdyaWQnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2VmZmVjdCgpXVwiIC8+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cEdyaWQge1xuXHRwcml2YXRlIGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cblx0b3B0aW9ucyA9IGlucHV0KHt9IGFzIEdyaWRPcHRpb25zKTtcblx0cHJpdmF0ZSBzaXplID0gcGljayh0aGlzLm9wdGlvbnMsICdzaXplJyk7XG5cblx0ZWZmZWN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHsgc2l6ZTogXywgLi4ub3B0aW9ucyB9ID0gdGhpcy5vcHRpb25zKCk7XG5cdFx0cmV0dXJuIG5ldyBHcmlkRWZmZWN0KG9wdGlvbnMpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgW3NpemUsIGVmZmVjdF0gPSBbdGhpcy5zaXplKCksIHRoaXMuZWZmZWN0KCldO1xuXHRcdFx0XHRpZiAoc2l6ZSkge1xuXHRcdFx0XHRcdGVmZmVjdC5zZXRTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcG9zdHByb2Nlc3Npbmcvc3JjL2xpYi9lZmZlY3RzL2dyaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwSCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBZTVDLE1BQU0sT0FBTyxRQUFRO0lBU3BCO1FBUkEsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUFpQixDQUFDLENBQUM7UUFDM0IsU0FBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTFDLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RCLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFHRixNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNwRCxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekMsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FoQlcsUUFBUTtrR0FBUixRQUFRLCtNQVBWOztFQUVULDREQUNTLE9BQU87OzJGQUlMLFFBQVE7a0JBVnBCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7O0VBRVQ7b0JBQ0QsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDO29CQUNsQixlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIGVmZmVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5ndEFyZ3MsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEdyaWRFZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5cbnR5cGUgR3JpZE9wdGlvbnMgPSBOb25OdWxsYWJsZTxDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIEdyaWRFZmZlY3Q+WzBdPiAmXG5cdFBhcnRpYWw8eyBzaXplOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH0gfT47XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHAtZ3JpZCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbZWZmZWN0KCldXCIgLz5cblx0YCxcblx0aW1wb3J0czogW05ndEFyZ3NdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RwR3JpZCB7XG5cdG9wdGlvbnMgPSBpbnB1dCh7fSBhcyBHcmlkT3B0aW9ucyk7XG5cdHByaXZhdGUgc2l6ZSA9IHBpY2sodGhpcy5vcHRpb25zLCAnc2l6ZScpO1xuXG5cdGVmZmVjdCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB7IHNpemU6IF8sIC4uLm9wdGlvbnMgfSA9IHRoaXMub3B0aW9ucygpO1xuXHRcdHJldHVybiBuZXcgR3JpZEVmZmVjdChvcHRpb25zKTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtzaXplLCBlZmZlY3RdID0gW3RoaXMuc2l6ZSgpLCB0aGlzLmVmZmVjdCgpXTtcblx0XHRcdGlmIChzaXplKSB7XG5cdFx0XHRcdGVmZmVjdC5zZXRTaXplKHNpemUud2lkdGgsIHNpemUuaGVpZ2h0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl19
@@ -10,15 +10,15 @@ export class NgtpHueSaturation {
10
10
  this.effect = inject(NgtpEffect, { host: true });
11
11
  this.options = input({});
12
12
  }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpHueSaturation, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtpHueSaturation, isStandalone: true, selector: "ngtp-hue-saturation", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: i1.NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpHueSaturation, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtpHueSaturation, isStandalone: true, selector: "ngtp-hue-saturation", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, hostDirectives: [{ directive: i1.NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
15
15
  <ngt-hue-saturation-effect *args="[options()]" [camera]="effect.camera()">
16
16
  <ngtp-effect-blend-mode />
17
17
  <ng-content />
18
18
  </ngt-hue-saturation-effect>
19
19
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
20
20
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpHueSaturation, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpHueSaturation, decorators: [{
22
22
  type: Component,
23
23
  args: [{
24
24
  selector: 'ngtp-hue-saturation',
@@ -23,6 +23,7 @@ export * from './shock-wave';
23
23
  export * from './smaa';
24
24
  export * from './tilt-shift';
25
25
  export * from './tilt-shift-2';
26
+ export * from './tone-mapping';
26
27
  export * from './vignette';
27
28
  export * from './water';
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Bvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXNjaWknO1xuZXhwb3J0ICogZnJvbSAnLi9ibG9vbSc7XG5leHBvcnQgKiBmcm9tICcuL2JyaWdodG5lc3MtY29udHJhc3QnO1xuZXhwb3J0ICogZnJvbSAnLi9jaHJvbWF0aWMtYWJiZXJhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9yLWF2ZXJhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9jb2xvci1kZXB0aCc7XG5leHBvcnQgKiBmcm9tICcuL2RlcHRoJztcbmV4cG9ydCAqIGZyb20gJy4vZGVwdGgtb2YtZmllbGQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb3Qtc2NyZWVuJztcbmV4cG9ydCAqIGZyb20gJy4vZnhhYSc7XG5leHBvcnQgKiBmcm9tICcuL2dsaXRjaCc7XG5leHBvcnQgKiBmcm9tICcuL2dvZC1yYXlzJztcbmV4cG9ydCAqIGZyb20gJy4vZ3JpZCc7XG5leHBvcnQgKiBmcm9tICcuL2h1ZS1zYXR1cmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbGVucy1mbGFyZSc7XG5leHBvcnQgKiBmcm9tICcuL2x1dCc7XG5leHBvcnQgKiBmcm9tICcuL25vaXNlJztcbmV4cG9ydCAqIGZyb20gJy4vb3V0bGluZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpeGVsYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9zY2FubGluZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcGlhJztcbmV4cG9ydCAqIGZyb20gJy4vc2hvY2std2F2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3NtYWEnO1xuZXhwb3J0ICogZnJvbSAnLi90aWx0LXNoaWZ0JztcbmV4cG9ydCAqIGZyb20gJy4vdGlsdC1zaGlmdC0yJztcbmV4cG9ydCAqIGZyb20gJy4vdmlnbmV0dGUnO1xuZXhwb3J0ICogZnJvbSAnLi93YXRlcic7XG4iXX0=
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3Bvc3Rwcm9jZXNzaW5nL3NyYy9saWIvZWZmZWN0cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxPQUFPLENBQUM7QUFDdEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hc2NpaSc7XG5leHBvcnQgKiBmcm9tICcuL2Jsb29tJztcbmV4cG9ydCAqIGZyb20gJy4vYnJpZ2h0bmVzcy1jb250cmFzdCc7XG5leHBvcnQgKiBmcm9tICcuL2Nocm9tYXRpYy1hYmJlcmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY29sb3ItYXZlcmFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2NvbG9yLWRlcHRoJztcbmV4cG9ydCAqIGZyb20gJy4vZGVwdGgnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXB0aC1vZi1maWVsZCc7XG5leHBvcnQgKiBmcm9tICcuL2RvdC1zY3JlZW4nO1xuZXhwb3J0ICogZnJvbSAnLi9meGFhJztcbmV4cG9ydCAqIGZyb20gJy4vZ2xpdGNoJztcbmV4cG9ydCAqIGZyb20gJy4vZ29kLXJheXMnO1xuZXhwb3J0ICogZnJvbSAnLi9ncmlkJztcbmV4cG9ydCAqIGZyb20gJy4vaHVlLXNhdHVyYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9sZW5zLWZsYXJlJztcbmV4cG9ydCAqIGZyb20gJy4vbHV0JztcbmV4cG9ydCAqIGZyb20gJy4vbm9pc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9vdXRsaW5lJztcbmV4cG9ydCAqIGZyb20gJy4vcGl4ZWxhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3NjYW5saW5lJztcbmV4cG9ydCAqIGZyb20gJy4vc2VwaWEnO1xuZXhwb3J0ICogZnJvbSAnLi9zaG9jay13YXZlJztcbmV4cG9ydCAqIGZyb20gJy4vc21hYSc7XG5leHBvcnQgKiBmcm9tICcuL3RpbHQtc2hpZnQnO1xuZXhwb3J0ICogZnJvbSAnLi90aWx0LXNoaWZ0LTInO1xuZXhwb3J0ICogZnJvbSAnLi90b25lLW1hcHBpbmcnO1xuZXhwb3J0ICogZnJvbSAnLi92aWduZXR0ZSc7XG5leHBvcnQgKiBmcm9tICcuL3dhdGVyJztcbiJdfQ==
@@ -1,9 +1,8 @@
1
1
  // Created by Anderson Mancini 2023
2
2
  // React Three Fiber Ultimate LensFlare
3
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, afterNextRender, computed, inject, input, } from '@angular/core';
3
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, computed, effect, inject, input, } from '@angular/core';
4
4
  import { NgtArgs, injectBeforeRender, injectStore } from 'angular-three';
5
5
  import { easing } from 'maath';
6
- import { injectAutoEffect } from 'ngxtension/auto-effect';
7
6
  import { mergeInputs } from 'ngxtension/inject-inputs';
8
7
  import { BlendFunction, Effect } from 'postprocessing';
9
8
  import { Color, Mesh, Uniform, Vector2, Vector3 } from 'three';
@@ -97,28 +96,25 @@ const defaultOptions = {
97
96
  };
98
97
  export class NgtpLensFlare {
99
98
  constructor() {
100
- this.autoEffect = injectAutoEffect();
99
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
101
100
  this.store = injectStore();
102
101
  this.viewport = this.store.select('viewport');
103
102
  this.raycaster = this.store.select('raycaster');
104
103
  this.pointer = this.store.select('pointer');
105
104
  this.effectComposer = inject(NgtpEffectComposer);
106
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
107
105
  this.projectedPosition = new Vector3();
108
106
  this.mouse2d = new Vector2();
109
107
  this.effect = computed(() => {
110
108
  const { position: _, followMouse: __, smoothTime: ___, ...options } = this.options();
111
109
  return new LensFlareEffect(options);
112
110
  });
113
- afterNextRender(() => {
114
- this.autoEffect(() => {
115
- const [effect, viewport] = [this.effect(), this.viewport()];
116
- const iResolution = effect.uniforms.get('iResolution');
117
- if (iResolution) {
118
- iResolution.value.x = viewport.width;
119
- iResolution.value.y = viewport.height;
120
- }
121
- });
111
+ effect(() => {
112
+ const [lensFlareEffect, viewport] = [this.effect(), this.viewport()];
113
+ const iResolution = lensFlareEffect.uniforms.get('iResolution');
114
+ if (iResolution) {
115
+ iResolution.value.x = viewport.width;
116
+ iResolution.value.y = viewport.height;
117
+ }
122
118
  });
123
119
  injectBeforeRender(({ delta }) => {
124
120
  const [effect] = [this.effect()];
@@ -174,12 +170,12 @@ export class NgtpLensFlare {
174
170
  easing.damp(uOpacity, 'value', target, smoothTime, delta);
175
171
  });
176
172
  }
177
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpLensFlare, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
178
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtpLensFlare, isStandalone: true, selector: "ngtp-lens-flare", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
173
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpLensFlare, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
174
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtpLensFlare, isStandalone: true, selector: "ngtp-lens-flare", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
179
175
  <ngt-primitive *args="[effect()]" [parameters]="{ dispose: null }" />
180
176
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
181
177
  }
182
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpLensFlare, decorators: [{
178
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpLensFlare, decorators: [{
183
179
  type: Component,
184
180
  args: [{
185
181
  selector: 'ngtp-lens-flare',
@@ -192,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
192
188
  changeDetection: ChangeDetectionStrategy.OnPush,
193
189
  }]
194
190
  }], ctorParameters: () => [] });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVucy1mbGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcG9zdHByb2Nlc3Npbmcvc3JjL2xpYi9lZmZlY3RzL2xlbnMtZmxhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBQ25DLHVDQUF1QztBQUV2QyxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsZUFBZSxFQUNmLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVcsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQW9DLE1BQU0sT0FBTyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUV4RCxNQUFNLGVBQWUsR0FBRztJQUN2QixjQUFjLEVBQUUsd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEN6QztDQUNBLENBQUM7QUFFRixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxNQUFNO0lBQzFDLFlBQVksRUFDWCxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFDcEMsT0FBTyxHQUFHLElBQUksRUFDZCxTQUFTLEdBQUcsR0FBRyxFQUNmLFlBQVksR0FBRyxD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Q0FBQztvQkFDWixDQUFDO3lCQUFNLElBQUksTUFBTSxZQUFZLElBQUksRUFBRSxDQUFDO3dCQUNuQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLGFBQWEsRUFBRSxLQUFLLEdBQUcsR0FBRyxFQUFFLENBQUM7NEJBQzFELG9DQUFvQzs0QkFDcEMsTUFBTSxHQUFHLEdBQUcsQ0FBQzt3QkFDZCxDQUFDOzZCQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsR0FBRyxFQUFFLENBQUM7NEJBQ2pGLDBEQUEwRDs0QkFDMUQsTUFBTSxHQUFHLEdBQUcsQ0FBQzt3QkFDZCxDQUFDOzZCQUFNLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQzs0QkFDeEMsc0RBQXNEOzRCQUN0RCxNQUFNLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7d0JBQ2xDLENBQUM7b0JBQ0YsQ0FBQztnQkFDRixDQUFDO1lBQ0YsQ0FBQztZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FwRlcsYUFBYTtrR0FBYixhQUFhLHFOQVBmOztFQUVULDREQUNTLE9BQU87OzJGQUlMLGFBQWE7a0JBVnpCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGlCQUFpQjtvQkFDM0IsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDcmVhdGVkIGJ5IEFuZGVyc29uIE1hbmNpbmkgMjAyM1xuLy8gUmVhY3QgVGhyZWUgRmliZXIgVWx0aW1hdGUgTGVuc0ZsYXJlXG5cbmltcG9ydCB7XG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Y29tcHV0ZWQsXG5cdGluamVjdCxcblx0aW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncywgaW5qZWN0QmVmb3JlUmVuZGVyLCBpbmplY3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgZWFzaW5nIH0gZnJvbSAnbWFhdGgnO1xuaW1wb3J0IHsgaW5qZWN0QXV0b0VmZmVjdCB9IGZyb20gJ25neHRlbnNpb24vYXV0by1lZmZlY3QnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgQmxlbmRGdW5jdGlvbiwgRWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgQ29sb3IsIE1lc2gsIFRleHR1cmUsIFVuaWZvcm0sIFZlY3RvcjIsIFZlY3RvcjMsIFdlYkdMUmVuZGVyVGFyZ2V0LCBXZWJHTFJlbmRlcmVyIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0cEVmZmVjdENvbXBvc2VyIH0gZnJvbSAnLi4vZWZmZWN0LWNvbXBvc2VyJztcblxuY29uc3QgTGVuc0ZsYXJlU2hhZGVyID0ge1xuXHRmcmFnbWVudFNoYWRlcjogLyogbGFuZ3VhZ2U9Z2xzbCBnbHNsICovIGBcblxuICB1bmlmb3JtIGZsb2F0IGlUaW1lO1xuICB1bmlmb3JtIHZlYzIgbGVuc1Bvc2l0aW9uO1xuICB1bmlmb3JtIHZlYzIgaVJlc29sdXRpb247XG4gIHVuaWZvcm0gdmVjMyBjb2xvckdhaW47XG4gIHVuaWZvcm0gZmxvYXQgc3RhclBvaW50cztcbiAgdW5pZm9ybSBmbG9hdCBnbGFyZVNpemU7XG4gIHVuaWZvcm0gZmxvYXQgZmxhcmVTaXplO1xuICB1bmlmb3JtIGZsb2F0IGZsYXJlU3BlZWQ7XG4gIHVuaWZvcm0gZmxvYXQgZmxhcmVTaGFwZTtcbiAgdW5pZm9ybSBmbG9hdCBoYWxvU2NhbGU7XG4gIHVuaWZvcm0gZmxvYXQgb3BhY2l0eTtcbiAgdW5pZm9ybSBib29sIGFuaW1hdGVkO1xuICB1bmlmb3JtIGJvb2wgYW5hbW9ycGhpYztcbiAgdW5pZm9ybSBib29sIGVuYWJsZWQ7XG4gIHVuaWZvcm0gYm9vbCBzZWNvbmRhcnlHaG9zdHM7XG4gIHVuaWZvcm0gYm9vbCBzdGFyQnVyc3Q7XG4gIHVuaWZvcm0gZmxvYXQgZ2hvc3RTY2FsZTtcbiAgdW5pZm9ybSBib29sIGFkaXRpb25hbFN0cmVha3M7XG4gIHVuaWZvcm0gc2FtcGxlcjJEIGxlbnNEaXJ0VGV4dHVyZTtcbiAgdmVjMiB2eHRDO1xuXG4gIGZsb2F0IHJuZGYoZmxvYXQgbil7cmV0dXJuIGZyYWN0KHNpbihuKSAqIDQzNzU4LjU0NTMxMjMpO31mbG9hdCBuaXooZmxvYXQgcCl7ZmxvYXQgZmwgPSBmbG9vcihwKTtmbG9hdCBmYyA9IGZyYWN0KHApO3JldHVybiBtaXgocm5kZihmbCkscm5kZihmbCArIDEuMCksIGZjKTt9XG4gIHZlYzMgaHN2MnJnYih2ZWMzIGMpe3ZlYzQgayA9IHZlYzQoMS4wLCAyLjAgLyAzLjAsIDEuMCAvIDMuMCwgMy4wKTt2ZWMzIHAgPSBhYnMoZnJhY3QoYy54eHggKyBrLnh5eikgKiA2LjAgLSBrLnd3dyk7cmV0dXJuIGMueiAqIG1peChrLnh4eCwgY2xhbXAocCAtIGsueHh4LCAwLjAsIDEuMCksIGMueSk7fVxuICBmbG9hdCBzYXRVKGZsb2F0IHgpe3JldHVybiBjbGFtcCh4LCAwLiwxLik7fXZlYzIgcnRVKHZlYzIgbmF6LCBmbG9hdCBydG4pe3JldHVybiB2ZWMyKGNvcyhydG4pICogbmF6LnggKyBzaW4ocnRuKSAqIG5hei55LGNvcyhydG4pICogbmF6LnkgLSBzaW4ocnRuKSAqIG5hei54KTt9XG4gIHZlYzMgZHJ3Rih2ZWMyIHAsIGZsb2F0IGludGVuc2l0eSwgZmxvYXQgcm5kLCBmbG9hdCBzcGVlZCwgaW50IGlkKXtmbG9hdCBmbGhvcyA9ICgxLiAvIDMyLikgKiBmbG9hdChpZCkgKiAwLjE7ZmxvYXQgbGluZ3JhZCA9IGRpc3RhbmNlKHZlYzIoMC4pLCBwKTtmbG9hdCBleHBnID0gMS4gLyBleHAobGluZ3JhZCAqIChmcmFjdChybmQpICogMC42NiArIDAuMzMpKTt2ZWMzIHF6VGcgPSBoc3YycmdiKHZlYzMoIGZyYWN0KCAoZXhwZyAqIDguKSArIHNwZWVkICogZmxhcmVTcGVlZCArIGZsaG9zKSwgcG93KDEuLWFicyhleHBnKjIuLTEuKSwgMC40NSksIDIwLjAgKiBleHBnICogaW50ZW5zaXR5KSk7ZmxvYXQgaW50ZXJuYWxTdGFyUG9pbnRzO2lmKGFuYW1vcnBoaWMpe2ludGVybmFsU3RhclBvaW50cyA9IDEuMDt9IGVsc2V7aW50ZXJuYWxTdGFyUG9pbnRzID0gc3RhclBvaW50czt9ZmxvYXQgYW1zID0gbGVuZ3RoKHAgKiBmbGFyZVNoYXBlICogc2luKGludGVybmFsU3RhclBvaW50cyAqIGF0YW4ocC54LCBwLnkpKSk7ZmxvYXQga0poZyA9IHBvdygxLi1zYXRVKGFtcyksICggYW5hbW9ycGhpYyA/IDEwMC4gOiAxMi4pKTtrSmhnICs9IHNhdFUoZXhwZy0wLjkpICogMy47a0poZyA9IHBvdyhrSmhnICogZXhwZywgOC4gKyAoMS4taW50ZW5zaXR5KSAqIDUuKTtpZihmbGFyZVNwZWVkID4gMC4wKXtyZXR1cm4gdmVjMyhrSmhnKSAqIHF6VGc7fSBlbHNle3JldHVybiB2ZWMzKGtKaGcpICogZmxhcmVTaXplICogMTUuO319XG4gIGZsb2F0IGFtczIodmVjMyBhLCB2ZWMzIGIpIHsgcmV0dXJuIGFicyhhLnggLSBiLngpICsgYWJzKGEueSAtIGIueSkgKyBhYnMoYS56IC0gYi56KTt9dmVjMyBzYXRVKHZlYzMgeCl7cmV0dXJuIGNsYW1wKHgsIHZlYzMoMC4wKSwgdmVjMygxLjApKTt9XG4gIGZsb2F0IGdsUih2ZWMyIG5heiwgdmVjMiBwb3MsIGZsb2F0IHpzaSl7dmVjMiBtbmk7aWYoYW5pbWF0ZWQpe21uaSA9IHJ0VShuYXotcG9zLCBpVGltZSAqIDAuMSk7fSBlbHNle21uaSA9IG5hei1wb3M7fWZsb2F0IGFuZyA9IGF0YW4obW5pLnksIG1uaS54KSAqIChhbmFtb3JwaGljID8gMS4wIDogc3RhclBvaW50cyk7ZmxvYXQgYW1zMiA9IGxlbmd0aChtbmkpO2FtczIgPSBwb3coYW1zMiwgLjkpO2Zsb2F0IGYwID0gMS4wLyhsZW5ndGgobmF6LXBvcykqKDEuMC96c2kqMTYuMCkrLjIpO3JldHVybiBmMCtmMCooc2luKChhbmcpKSouMiArLjMpO31cbiAgZmxvYXQgc2RIZXgodmVjMiBwKXtwID0gYWJzKHApO3ZlYzIgcSA9IHZlYzIocC54KjIuMCowLjU3NzM1MDMsIHAueSArIHAueCowLjU3NzM1MDMpO3JldHVybiBkb3Qoc3RlcChxLnh5LHEueXgpLCAxLjAtcS55eCk7fWZsb2F0IGZwb3coZmxvYXQgeCwgZmxvYXQgayl7cmV0dXJuIHggPiBrID8gcG93KCh4LWspLygxLjAtayksMi4wKSA6IDAuMDt9XG4gIHZlYzMgckh4KHZlYzIgbmF6LCB2ZWMyIHAsIGZsb2F0IHMsIHZlYzMgY29sKXtuYXogLT0gcDtpZiAoYWJzKG5hei54KSA8IDAuMipzICYmIGFicyhuYXoueSkgPCAwLjIqcyl7cmV0dXJuIG1peCh2ZWMzKDApLG1peCh2ZWMzKDApLGNvbCwwLjEgKyBmcG93KGxlbmd0aChuYXovcyksMC4xKSoxMC4wKSxzbW9vdGhzdGVwKDAuMCwwLjEsc2RIZXgobmF6KjIwLjAvcykpKTt9cmV0dXJuIHZlYzMoMCk7fVxuICB2ZWMzIG1Mcyh2ZWMyIG5heiwgdmVjMiBwb3Mpe3ZlYzIgbW5pID0gbmF6LXBvczt2ZWMyIHp4TXAgPSBuYXoqKGxlbmd0aChuYXopKTtmbG9hdCBhbmcgPSBhdGFuKG1uaS54LG1uaS55KTtmbG9hdCBmMCA9IC4zLyhsZW5ndGgobmF6LXBvcykqMTYuMCsxLjApO2YwID0gZjAqKHNpbihuaXooc2luKGFuZyozLjktKGFuaW1hdGVkID8gaVRpbWUgOiAwLjApICogMC4zKSAqIHN0YXJQb2ludHMpKSouMiApO2Zsb2F0IGYxID0gbWF4KDAuMDEtcG93KGxlbmd0aChuYXorMS4yKnBvcyksMS45KSwuMCkqNy4wO2Zsb2F0IGYyID0gbWF4KC45LygxMC4wKzMyLjAqcG93KGxlbmd0aCh6eE1wKzAuOTkqcG9zKSwyLjApKSwuMCkqMC4zNTtmbG9hdCBmMjIgPSBtYXgoLjkvKDExLjArMzIuMCpwb3cobGVuZ3RoKHp4TXArMC44NSpwb3MpLDIuMCkpLC4wKSowLjIzO2Zsb2F0IGYyMyA9IG1heCguOS8oMTIuMCszMi4wKnBvdyhsZW5ndGgoenhNcCswLjk1KnBvcyksMi4wKSksLjApKjAuNjt2ZWMyIHp0WCA9IG1peChuYXosenhNcCwgMC4xKTtmbG9hdCBmNCA9IG1heCgwLjAxLXBvdyhsZW5ndGgoenRYKzAuNCpwb3MpLDIuOSksLjApKjQuMDI7ZmxvYXQgZjQyID0gbWF4KDAuMC1wb3cobGVuZ3RoKHp0WCswLjQ1KnBvcyksMi45KSwuMCkqNC4xO2Zsb2F0IGY0MyA9IG1heCgwLjAxLXBvdyhsZW5ndGgoenRYKzAuNSpwb3MpLDIuOSksLjApKjQuNjt6dFggPSBtaXgobmF6LHp4TXAsLS40KTtmbG9hdCBmNSA9IG1heCgwLjAxLXBvdyhsZW5ndGgoenRYKzAuMSpwb3MpLDUuNSksLjApKjIuMDtmbG9hdCBmNTIgPSBtYXgoMC4wMS1wb3cobGVuZ3RoKHp0WCswLjIqcG9zKSw1LjUpLC4wKSoyLjA7ZmxvYXQgZjUzID0gbWF4KDAuMDEtcG93KGxlbmd0aCh6dFgrMC4xKnBvcyksNS41KSwuMCkqMi4wO3p0WCA9IG1peChuYXosenhNcCwgMi4xKTtmbG9hdCBmNiA9IG1heCgwLjAxLXBvdyhsZW5ndGgoenRYLTAuMypwb3MpLDEuNjEpLC4wKSozLjE1OTtmbG9hdCBmNjIgPSBtYXgoMC4wMS1wb3cobGVuZ3RoKHp0WC0wLjMyNSpwb3MpLDEuNjE0KSwuMCkqMy4xNDtmbG9hdCBmNjMgPSBtYXgoMC4wMS1wb3cobGVuZ3RoKHp0WC0wLjM4OSpwb3MpLDEuNjIzKSwuMCkqMy4xMjt2ZWMzIGMgPSB2ZWMzKGdsUihuYXoscG9zLCBnbGFyZVNpemUpKTt2ZWMyIHByb3Q7aWYoYW5pbWF0ZWQpe3Byb3QgPSBydFUobmF6IC0gcG9zLCAoaVRpbWUgKiAwLjEpKTt9IGVsc2UgaWYoYW5hbW9ycGhpYyl7cHJvdCA9IHJ0VShuYXogLSBwb3MsIDEuNTcwNzk2KTt9IGVsc2Uge3Byb3QgPSBuYXogLSBwb3M7fWMgKz0gZHJ3Rihwcm90LCAoYW5hbW9ycGhpYyA/IGZsYXJlU2l6ZSAqIDEwLiA6IGZsYXJlU2l6ZSksIDAuMSwgaVRpbWUsIDEpO2Mucis9ZjErZjIrZjQrZjUrZjY7IGMuZys9ZjErZjIyK2Y0MitmNTIrZjYyOyBjLmIrPWYxK2YyMytmNDMrZjUzK2Y2MztjID0gYyoxLjMgKiB2ZWMzKGxlbmd0aCh6eE1wKSsuMDkpO2MrPXZlYzMoZjApO3JldHVybiBjO31cbiAgdmVjMyBjYyh2ZWMzIGNsciwgZmxvYXQgZmN0LGZsb2F0IGZjdDIpe2Zsb2F0IHcgPSBjbHIueCtjbHIueStjbHIuejtyZXR1cm4gbWl4KGNscix2ZWMzKHcpKmZjdCx3KmZjdDIpO31mbG9hdCBybmQodmVjMiBwKXtmbG9hdCBmID0gZnJhY3Qoc2luKGRvdChwLCB2ZWMyKDEyLjEyMzQsIDcyLjgzOTIpICkqNDUxMjMuMikpO3JldHVybiBmO31mbG9hdCBybmQoZmxvYXQgdyl7ZmxvYXQgZiA9IGZyYWN0KHNpbih3KSoxMDAwLik7cmV0dXJuIGY7fVxuICBmbG9hdCByU2hwKHZlYzIgcCwgaW50IE4pe2Zsb2F0IGY7ZmxvYXQgYT1hdGFuKHAueCxwLnkpKy4yO2Zsb2F0IGI9Ni4yODMxOS9mbG9hdChOKTtmPXNtb290aHN0ZXAoLjUsLjUxLCBjb3MoZmxvb3IoLjUrYS9iKSpiLWEpKmxlbmd0aChwLnh5KSogMi4wICAtZ2hvc3RTY2FsZSk7cmV0dXJuIGY7fVxuICB2ZWMzIGRyQyh2ZWMyIHAsIGZsb2F0IHpzaSwgZmxvYXQgZEN5LCB2ZWMzIGNsciwgdmVjMyBjbHIyLCBmbG9hdCBhbXMyLCB2ZWMyIGVzb20pe2Zsb2F0IGwgPSBsZW5ndGgocCArIGVzb20qKGFtczIqMi4pKSt6c2kvMi47ZmxvYXQgbDIgPSBsZW5ndGgocCArIGVzb20qKGFtczIqNC4pKSt6c2kvMy47ZmxvYXQgYyA9IG1heCgwLjAxLXBvdyhsZW5ndGgocCArIGVzb20qYW1zMiksIHpzaSpnaG9zdFNjYWxlKSwgMC4wKSoxMC47ZmxvYXQgYzEgPSBtYXgoMC4wMDEtcG93KGwtMC4zLCAxLi80MC4pK3NpbihsKjIwLiksIDAuMCkqMy47ZmxvYXQgYzIgPSAgbWF4KDAuMDkvcG93KGxlbmd0aChwLWVzb20qYW1zMi8uNSkqMS4sIC45NSksIDAuMCkvMjAuO2Zsb2F0IHMgPSBtYXgoMC4wMi1wb3coclNocChwKjUuICsgZXNvbSphbXMyKjUuICsgZEN5LCA2KSAsIDEuKSwgMC4wKSoxLjU7Y2xyID0gY29zKHZlYzMoMC40NCwgLjI0LCAuMikqOC4gKyBhbXMyKjQuKSowLjUrLjU7dmVjMyBmID0gYypjbHI7ZiArPSBjMSpjbHI7ZiArPSBjMipjbHI7ZiArPSAgcypjbHI7cmV0dXJuIGYtMC4wMTt9XG4gIHZlYzQgZ2VMQyhmbG9hdCB4KXtyZXR1cm4gdmVjNCh2ZWMzKG1peChtaXgobWl4KG1peChtaXgobWl4KG1peChtaXgobWl4KG1peChtaXgobWl4KG1peChtaXgobWl4KHZlYzMoMC4sIDAuLCAwLiksdmVjMygwLiwgMC4sIDAuKSwgc21vb3Roc3RlcCgwLjAsIDAuMDYzLCB4KSksdmVjMygwLiwgMC4sIDAuKSwgc21vb3Roc3RlcCgwLjA2MywgMC4xMjUsIHgpKSx2ZWMzKDAuMCwgMC4sIDAuKSwgc21vb3Roc3RlcCgwLjEyNSwgMC4xODgsIHgpKSx2ZWMzKDAuMTg4LCAwLjEzMSwgMC4xMTYpLCBzbW9vdGhzdGVwKDAuMTg4LCAwLjIyNywgeCkpLHZlYzMoMC4zMSwgMC4yMDQsIDAuNTM3KSwgc21vb3Roc3RlcCgwLjIyNywgMC4yNTEsIHgpKSx2ZWMzKDAuMTkyLCAwLjEwNiwgMC4yODYpLCBzbW9vdGhzdGVwKDAuMjUxLCAwLjMxNCwgeCkpLHZlYzMoMC4xMDIsIDAuMDA4LCAwLjM0MSksIHNtb290aHN0ZXAoMC4zMTQsIDAuMzkyLCB4KSksdmVjMygwLjA4NiwgMC4wLCAwLjE0MSksIHNtb290aHN0ZXAoMC4zOTIsIDAuNTAyLCB4KSksdmVjMygxLjAsIDAuMzEsIDAuMCksIHNtb290aHN0ZXAoMC41MDIsIDAuNjA0LCB4KSksdmVjMyguMSwgMC4xLCAwLjEpLCBzbW9vdGhzdGVwKDAuNjA0LCAwLjY0MywgeCkpLHZlYzMoMS4wLCAwLjkyOSwgMC4wKSwgc21vb3Roc3RlcCgwLjY0MywgMC43NjEsIHgpKSx2ZWMzKDEuMCwgMC4wODYsIDAuNDI0KSwgc21vb3Roc3RlcCgwLjc2MSwgMC44NDcsIHgpKSx2ZWMzKDEuMCwgMC40OSwgMC4wKSwgc21vb3Roc3RlcCgwLjg0NywgMC44OSwgeCkpLHZlYzMoMC45NDUsIDAuMjc1LCAwLjQ3NSksIHNtb290aHN0ZXAoMC44OSwgMC45NDEsIHgpKSx2ZWMzKDAuMjUxLCAwLjI3NSwgMC43OTYpLCBzbW9vdGhzdGVwKDAuOTQxLCAxLjAsIHgpKSksMS4wKTt9XG4gIGZsb2F0IGRpVE4odmVjMiBwKXt2ZWMyIGYgPSBmcmFjdChwKTtmID0gKGYgKiBmKSAqICgzLjAgLSAoMi4wICogZikpO2Zsb2F0IG4gPSBkb3QoZmxvb3IocCksIHZlYzIoMS4wLCAxNTcuMCkpO3ZlYzQgYSA9IGZyYWN0KHNpbih2ZWM0KG4gKyAwLjAsIG4gKyAxLjAsIG4gKyAxNTcuMCwgbiArIDE1OC4wKSkgKiA0Mzc1OC41NDUzMTIzKTtyZXR1cm4gbWl4KG1peChhLngsIGEueSwgZi54KSwgbWl4KGEueiwgYS53LCBmLngpLCBmLnkpO31cbiAgZmxvYXQgZmJtKHZlYzIgcCl7Y29uc3QgbWF0MiBtID0gbWF0MigwLjgwLCAtMC42MCwgMC42MCwgMC44MCk7ZmxvYXQgZiA9IDAuMDtmICs9IDAuNTAwMCpkaVROKHApOyBwID0gbSpwKjIuMDI7ZiArPSAwLjI1MDAqZGlUTihwKTsgcCA9IG0qcCoyLjAzO2YgKz0gMC4xMjUwKmRpVE4ocCk7IHAgPSBtKnAqMi4wMTtmICs9IDAuMDYyNSpkaVROKHApO3JldHVybiBmLzAuOTM3NTt9XG4gIHZlYzQgZ2VMUyh2ZWMyIHApe3ZlYzIgcHAgPSAocCAtIHZlYzIoMC41KSkgKiAyLjA7ZmxvYXQgYSA9IGF0YW4ocHAueSwgcHAueCk7dmVjNCBjcCA9IHZlYzQoc2luKGEgKiAxLjApLCBsZW5ndGgocHApLCBzaW4oYSAqIDEzLjApLCBzaW4oYSAqIDUzLjApKTtmbG9hdCBkID0gc2luKGNsYW1wKHBvdyhsZW5ndGgodmVjMigwLjUpIC0gcCkgKiAwLjUgKyBoYWxvU2NhbGUgLzIuLCA1LjApLCAwLjAsIDEuMCkgKiAzLjE0MTU5KTt2ZWMzIGMgPSB2ZWMzKGQpICogdmVjMyhmYm0oY3AueHkgKiAxNi4wKSAqIGZibShjcC56dyAqIDkuMCkgKiBtYXgobWF4KG1heChtYXgoMC41LCBzaW4oYSAqIDEuMCkpLCBzaW4oYSAqIDMuMCkgKiAwLjgpLCBzaW4oYSAqIDcuMCkgKiAwLjgpLCBzaW4oYSAqIDkuMCkgKiAxMC42KSk7YyAqPSB2ZWMzKG1peCgyLjAsIChzaW4obGVuZ3RoKHBwLnh5KSAqIDI1Ni4wKSAqIDAuNSkgKyAwLjUsIHNpbigoY2xhbXAoKGxlbmd0aChwcC54eSkgLSAwLjg3NSkgLyAwLjEsIDAuMCwgMS4wKSArIDAuMCkgKiAyLjAgKiAzLjE0MTU5KSAqIDEuNSkgKyAwLjUpICogMC4zMjc1O3JldHVybiB2ZWM0KHZlYzMoYyAqIDEuMCksIGQpO31cbiAgdmVjNCBnZUxEKHZlYzIgcCl7cC54eSArPSB2ZWMyKGZibShwLnl4ICogMy4wKSwgZmJtKHAueXggKiAyLjApKSAqIDAuMDgyNTt2ZWMzIG8gPSB2ZWMzKG1peCgwLjEyNSwgMC4yNSwgbWF4KG1heChzbW9vdGhzdGVwKDAuMSwgMC4wLCBsZW5ndGgocCAtIHZlYzIoMC4yNSkpKSxzbW9vdGhzdGVwKDAuNCwgMC4wLCBsZW5ndGgocCAtIHZlYzIoMC43NSkpKSksc21vb3Roc3RlcCgwLjgsIDAuMCwgbGVuZ3RoKHAgLSB2ZWMyKDAuODc1LCAwLjEyNSkpKSkpKTtvICs9IHZlYzMobWF4KGZibShwICogMS4wKSAtIDAuNSwgMC4wKSkgKiAwLjU7byArPSB2ZWMzKG1heChmYm0ocCAqIDIuMCkgLSAwLjUsIDAuMCkpICogMC41O28gKz0gdmVjMyhtYXgoZmJtKHAgKiA0LjApIC0gMC41LCAwLjApKSAqIDAuMjU7byArPSB2ZWMzKG1heChmYm0ocCAqIDguMCkgLSAwLjc1LCAwLjApKSAqIDEuMDtvICs9IHZlYzMobWF4KGZibShwICogMTYuMCkgLSAwLjc1LCAwLjApKSAqIDAuNzU7byArPSB2ZWMzKG1heChmYm0ocCAqIDY0LjApIC0gMC43NSwgMC4wKSkgKiAwLjU7cmV0dXJuIHZlYzQoY2xhbXAobywgdmVjMygwLjE1KSwgdmVjMygxLjApKSwgMS4wKTt9XG4gIHZlYzQgdHhMKHNhbXBsZXIyRCB0ZXgsIHZlYzIgeHRDKXtpZigoKHh0Qy54IDwgMC4pIHx8ICh4dEMueSA8IDAuKSkgfHwgKCh4dEMueCA+IDEuKSB8fCAoeHRDLnkgPiAxLikpKXtyZXR1cm4gdmVjNCgwLjApO31lbHNle3JldHVybiB0ZXh0dXJlKHRleCwgeHRDKTsgfX1cbiAgdmVjNCB0eEQoc2FtcGxlcjJEIHRleCwgdmVjMiB4dEMsIHZlYzIgZGlyLCB2ZWMzIGRpdG4pIHtyZXR1cm4gdmVjNCh0eEwodGV4LCAoeHRDICsgKGRpciAqIGRpdG4ucikpKS5yLHR4TCh0ZXgsICh4dEMgKyAoZGlyICogZGl0bi5nKSkpLmcsdHhMKHRleCwgKHh0QyArIChkaXIgKiBkaXRuLmIpKSkuYiwxLjApO31cbiAgdmVjNCBzdHJCKCl7dmVjMiBhc3BYdGMgPSB2ZWMyKDEuMCkgLSAoKCh2eHRDIC0gdmVjMigwLjUpKSAqIHZlYzIoMS4wKSkgKyB2ZWMyKDAuNSkpOyB2ZWMyIHh0QyA9IHZlYzIoMS4wKSAtIHZ4dEM7IHZlYzIgZ2h2YyA9ICh2ZWMyKDAuNSkgLSB4dEMpICogMC4zIC0gbGVuc1Bvc2l0aW9uOyB2ZWMyIGdoTm0gPSBub3JtYWxpemUoZ2h2YyAqIHZlYzIoMS4wKSkgKiB2ZWMyKDEuMCk7dmVjMiBoYWxvVmVjID0gbm9ybWFsaXplKGdodmMpICogMC42O3ZlYzIgaGxObSA9IGdoTm0gKiAwLjY7dmVjMiB0ZXhlbFNpemUgPSB2ZWMyKDEuMCkgLyB2ZWMyKGlSZXNvbHV0aW9uLnh5KTt2ZWMzIGRpdG4gPSB2ZWMzKC0odGV4ZWxTaXplLnggKiAxLjUpLCAwLjIsIHRleGVsU2l6ZS54ICogMS41KTt2ZWM0IGMgPSB2ZWM0KDAuMCk7Zm9yIChpbnQgaSA9IDA7IGkgPCA4OyBpKyspIHt2ZWMyIG9mZnNldCA9IHh0QyArIChnaHZjICogZmxvYXQoaSkpO2MgKz0gdHhEKGxlbnNEaXJ0VGV4dHVyZSwgb2Zmc2V0LCBnaE5tLCBkaXRuKSAqIHBvdyhtYXgoMC4wLCAxLjAgLSAobGVuZ3RoKHZlYzIoMC41KSAtIG9mZnNldCkgLyBsZW5ndGgodmVjMigwLjUpKSkpLCAxMC4wKTt9dmVjMiB1eVRyeiA9IHh0QyArIGhsTm07IHJldHVybiAoYyAqIGdlTEMoKGxlbmd0aCh2ZWMyKDAuNSkgLSBhc3BYdGMpIC8gbGVuZ3RoKHZlYzIoaGFsb1NjYWxlKSkpKSkgKyh0eEQobGVuc0RpcnRUZXh0dXJlLCB1eVRyeiwgZ2hObSwgZGl0bikgKiBwb3cobWF4KDAuMCwgMS4wIC0gKGxlbmd0aCh2ZWMyKDAuNSkgLSB1eVRyeikgLyBsZW5ndGgodmVjMigwLjUpKSkpLCAxMC4wKSk7fVxuICB2b2lkIG1haW5JbWFnZSh2ZWM0IHYsdmVjMiByLG91dCB2ZWM0IGkpe3ZlYzIgZz1yLS41O2cueSo9aVJlc29sdXRpb24ueS9pUmVzb2x1dGlvbi54O3ZlYzIgbD1sZW5zUG9zaXRpb24qLjU7bC55Kj1pUmVzb2x1dGlvbi55L2lSZXNvbHV0aW9uLng7dmVjMyBmPW1McyhnLGwpKjIwLipjb2xvckdhaW4vMjU2LjtpZihhZGl0aW9uYWxTdHJlYWtzKXt2ZWMzIG89dmVjMyguOSwuMiwuMSkscD12ZWMzKC4zLC4xLC45KTtmb3IoZmxvYXQgbj0wLjtuPDEwLjtuKyspZis9ZHJDKGcscG93KHJuZChuKjJlMykqMi44LC4xKSsxLjQxLDAuLG8rbixwK24scm5kKG4qMjAuKSozLisuMi0uNSxsZW5zUG9zaXRpb24pO31pZihzZWNvbmRhcnlHaG9zdHMpe3ZlYzMgbj12ZWMzKDApO24rPXJIeChnLC1sZW5zUG9zaXRpb24qLjI1LGdob3N0U2NhbGUqMS40LHZlYzMoLjI1LC4zNSwwKSk7bis9ckh4KGcsbGVuc1Bvc2l0aW9uKi4yNSxnaG9zdFNjYWxlKi41LHZlYzMoMSwuNSwuNSkpO24rPXJIeChnLGxlbnNQb3NpdGlvbiouMSxnaG9zdFNjYWxlKjEuNix2ZWMzKDEpKTtuKz1ySHgoZyxsZW5zUG9zaXRpb24qMS44LGdob3N0U2NhbGUqMi4sdmVjMygwLC41LC43NSkpO24rPXJIeChnLGxlbnNQb3NpdGlvbioxLjI1LGdob3N0U2NhbGUqLjgsdmVjMygxLDEsLjUpKTtuKz1ySHgoZywtbGVuc1Bvc2l0aW9uKjEuMjUsZ2hvc3RTY2FsZSo1Lix2ZWMzKC41LC41LC4yNSkpO24rPWZwb3coMS4tYWJzKGRpc3RhbmNlKGxlbnNQb3NpdGlvbiouOCxnKS0uNyksLjk4NSkqY29sb3JHYWluLzIxMDAuO2YrPW47fWlmKHN0YXJCdXJzdCl7dnh0Qz1nKy41O3ZlYzQgbj1nZUxEKGcpO2Zsb2F0IG89MS4tY2xhbXAoMC41LDAuLC41KSoyLjtuKz1taXgobixwb3cobioyLix2ZWM0KDIpKSouNSxvKTtmbG9hdCBzPShnLngrZy55KSooMS4vNi4pO3ZlYzIgZD1tYXQyKGNvcyhzKSwtc2luKHMpLHNpbihzKSxjb3MocykpKnZ4dEM7bis9Z2VMUyhkKSoyLjtmKz1jbGFtcChuLnh5eipzdHJCKCkueHl6LC4wMSwxLik7fWk9ZW5hYmxlZD92ZWM0KG1peChmLHZlYzMoMCksb3BhY2l0eSkrdi54eXosdi53KTp2ZWM0KHYpO31cbmAsXG59O1xuXG5leHBvcnQgY2xhc3MgTGVuc0ZsYXJlRWZmZWN0IGV4dGVuZHMgRWZmZWN0IHtcblx0Y29uc3RydWN0b3Ioe1xuXHRcdGJsZW5kRnVuY3Rpb24gPSBCbGVuZEZ1bmN0aW9uLk5PUk1BTCxcblx0XHRlbmFibGVkID0gdHJ1ZSxcblx0XHRnbGFyZVNpemUgPSAwLjIsXG5cdFx0bGVuc1Bvc2l0aW9uID0gWzAuMDEsIDAuMDFdLFxuXHRcdGlSZXNvbHV0aW9uID0gWzAsIDBdLFxuXHRcdHN0YXJQb2ludHMgPSA2LFxuXHRcdGZsYXJlU2l6ZSA9IDAuMDEsXG5cdFx0ZmxhcmVTcGVlZCA9IDAuMDEsXG5cdFx0ZmxhcmVTaGFwZSA9IDAuMDEsXG5cdFx0YW5pbWF0ZWQgPSB0cnVlLFxuXHRcdGFuYW1vcnBoaWMgPSBmYWxzZSxcblx0XHRjb2xvckdhaW4gPSBuZXcgQ29sb3IoMjAsIDIwLCAyMCksXG5cdFx0bGVuc0RpcnRUZXh0dXJlID0gbnVsbCBhcyBUZXh0dXJlIHwgbnVsbCxcblx0XHRoYWxvU2NhbGUgPSAwLjUsXG5cdFx0c2Vjb25kYXJ5R2hvc3RzID0gdHJ1ZSxcblx0XHRhZGl0aW9uYWxTdHJlYWtzID0gdHJ1ZSxcblx0XHRnaG9zdFNjYWxlID0gMC4wLFxuXHRcdG9wYWNpdHkgPSAxLjAsXG5cdFx0c3RhckJ1cnN0ID0gZmFsc2UsXG5cdH0gPSB7fSkge1xuXHRcdHN1cGVyKCdMZW5zRmxhcmVFZmZlY3QnLCBMZW5zRmxhcmVTaGFkZXIuZnJhZ21lbnRTaGFkZXIsIHtcblx0XHRcdGJsZW5kRnVuY3Rpb24sXG5cdFx0XHR1bmlmb3JtczogbmV3IE1hcDxzdHJpbmcsIFVuaWZvcm0+KFtcblx0XHRcdFx0WydlbmFibGVkJywgbmV3IFVuaWZvcm0oZW5hYmxlZCldLFxuXHRcdFx0XHRbJ2dsYXJlU2l6ZScsIG5ldyBVbmlmb3JtKGdsYXJlU2l6ZSldLFxuXHRcdFx0XHRbJ2xlbnNQb3NpdGlvbicsIG5ldyBVbmlmb3JtKGxlbnNQb3NpdGlvbildLFxuXHRcdFx0XHRbJ2lUaW1lJywgbmV3IFVuaWZvcm0oMCldLFxuXHRcdFx0XHRbJ2lSZXNvbHV0aW9uJywgbmV3IFVuaWZvcm0oaVJlc29sdXRpb24pXSxcblx0XHRcdFx0WydzdGFyUG9pbnRzJywgbmV3IFVuaWZvcm0oc3RhclBvaW50cyldLFxuXHRcdFx0XHRbJ2ZsYXJlU2l6ZScsIG5ldyBVbmlmb3JtKGZsYXJlU2l6ZSldLFxuXHRcdFx0XHRbJ2ZsYXJlU3BlZWQnLCBuZXcgVW5pZm9ybShmbGFyZVNwZWVkKV0sXG5cdFx0XHRcdFsnZmxhcmVTaGFwZScsIG5ldyBVbmlmb3JtKGZsYXJlU2hhcGUpXSxcblx0XHRcdFx0WydhbmltYXRlZCcsIG5ldyBVbmlmb3JtKGFuaW1hdGVkKV0sXG5cdFx0XHRcdFsnYW5hbW9ycGhpYycsIG5ldyBVbmlmb3JtKGFuYW1vcnBoaWMpXSxcblx0XHRcdFx0Wydjb2xvckdhaW4nLCBuZXcgVW5pZm9ybShjb2xvckdhaW4pXSxcblx0XHRcdFx0WydsZW5zRGlydFRleHR1cmUnLCBuZXcgVW5pZm9ybShsZW5zRGlydFRleHR1cmUpXSxcblx0XHRcdFx0WydoYWxvU2NhbGUnLCBuZXcgVW5pZm9ybShoYWxvU2NhbGUpXSxcblx0XHRcdFx0WydzZWNvbmRhcnlHaG9zdHMnLCBuZXcgVW5pZm9ybShzZWNvbmRhcnlHaG9zdHMpXSxcblx0XHRcdFx0WydhZGl0aW9uYWxTdHJlYWtzJywgbmV3IFVuaWZvcm0oYWRpdGlvbmFsU3RyZWFrcyldLFxuXHRcdFx0XHRbJ2dob3N0U2NhbGUnLCBuZXcgVW5pZm9ybShnaG9zdFNjYWxlKV0sXG5cdFx0XHRcdFsnc3RhckJ1cnN0JywgbmV3IFVuaWZvcm0oc3RhckJ1cnN0KV0sXG5cdFx0XHRcdFsnb3BhY2l0eScsIG5ldyBVbmlmb3JtKG9wYWNpdHkpXSxcblx0XHRcdF0pLFxuXHRcdH0pO1xuXHR9XG5cblx0b3ZlcnJpZGUgdXBkYXRlKF9yZW5kZXJlcjogV2ViR0xSZW5kZXJlciwgX2lucHV0QnVmZmVyOiBXZWJHTFJlbmRlclRhcmdldCwgZGVsdGFUaW1lOiBudW1iZXIpIHtcblx0XHRjb25zdCBpVGltZSA9IHRoaXMudW5pZm9ybXMuZ2V0KCdpVGltZScpO1xuXHRcdGlmIChpVGltZSkge1xuXHRcdFx0aVRpbWUudmFsdWUgKz0gZGVsdGFUaW1lO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgdHlwZSBMZW5zRmxhcmVPcHRpb25zID0gQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBMZW5zRmxhcmVFZmZlY3Q+WzBdICYge1xuXHRwb3NpdGlvbjogVmVjdG9yMztcblx0Zm9sbG93TW91c2U6IGJvb2xlYW47XG5cdHNtb290aFRpbWU6IG51bWJlcjtcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBMZW5zRmxhcmVPcHRpb25zID0ge1xuXHRwb3NpdGlvbjogbmV3IFZlY3RvcjMoLTI1LCA2LCAtNjApLFxuXHRmb2xsb3dNb3VzZTogZmFsc2UsXG5cdHNtb290aFRpbWU6IDAuNyxcbn07XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHAtbGVucy1mbGFyZScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wcmltaXRpdmUgKmFyZ3M9XCJbZWZmZWN0KCldXCIgW3BhcmFtZXRlcnNdPVwieyBkaXNwb3NlOiBudWxsIH1cIiAvPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBMZW5zRmxhcmUge1xuXHRwcml2YXRlIGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIHZpZXdwb3J0ID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cdHByaXZhdGUgcmF5Y2FzdGVyID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3JheWNhc3RlcicpO1xuXHRwcml2YXRlIHBvaW50ZXIgPSB0aGlzLnN0b3JlLnNlbGVjdCgncG9pbnRlcicpO1xuXG5cdGVmZmVjdENvbXBvc2VyID0gaW5qZWN0KE5ndHBFZmZlY3RDb21wb3Nlcik7XG5cblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXG5cdHByaXZhdGUgcHJvamVjdGVkUG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXHRwcml2YXRlIG1vdXNlMmQgPSBuZXcgVmVjdG9yMigpO1xuXG5cdGVmZmVjdCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB7IHBvc2l0aW9uOiBfLCBmb2xsb3dNb3VzZTogX18sIHNtb290aFRpbWU6IF9fXywgLi4ub3B0aW9ucyB9ID0gdGhpcy5vcHRpb25zKCk7XG5cdFx0cmV0dXJuIG5ldyBMZW5zRmxhcmVFZmZlY3Qob3B0aW9ucyk7XG5cdH0pO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHR0aGlzLmF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBbZWZmZWN0LCB2aWV3cG9ydF0gPSBbdGhpcy5lZmZlY3QoKSwgdGhpcy52aWV3cG9ydCgpXTtcblx0XHRcdFx0Y29uc3QgaVJlc29sdXRpb24gPSBlZmZlY3QudW5pZm9ybXMuZ2V0KCdpUmVzb2x1dGlvbicpO1xuXHRcdFx0XHRpZiAoaVJlc29sdXRpb24pIHtcblx0XHRcdFx0XHRpUmVzb2x1dGlvbi52YWx1ZS54ID0gdmlld3BvcnQud2lkdGg7XG5cdFx0XHRcdFx0aVJlc29sdXRpb24udmFsdWUueSA9IHZpZXdwb3J0LmhlaWdodDtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3RCZWZvcmVSZW5kZXIoKHsgZGVsdGEgfSkgPT4ge1xuXHRcdFx0Y29uc3QgW2VmZmVjdF0gPSBbdGhpcy5lZmZlY3QoKV07XG5cdFx0XHRpZiAoIWVmZmVjdCkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBbeyBmb2xsb3dNb3VzZSwgcG9zaXRpb24sIHNtb290aFRpbWUgfSwgcG9pbnRlciwgY2FtZXJhLCBzY2VuZSwgcmF5Y2FzdGVyXSA9IFtcblx0XHRcdFx0dGhpcy5vcHRpb25zKCksXG5cdFx0XHRcdHRoaXMucG9pbnRlcigpLFxuXHRcdFx0XHR0aGlzLmVmZmVjdENvbXBvc2VyLmNhbWVyYSgpLFxuXHRcdFx0XHR0aGlzLmVmZmVjdENvbXBvc2VyLnNjZW5lKCksXG5cdFx0XHRcdHRoaXMucmF5Y2FzdGVyKCksXG5cdFx0XHRdO1xuXG5cdFx0XHRjb25zdCB1TGVuc1Bvc2l0aW9uID0gZWZmZWN0LnVuaWZvcm1zLmdldCgnbGVuc1Bvc2l0aW9uJyk7XG5cdFx0XHRjb25zdCB1T3BhY2l0eSA9IGVmZmVjdC51bmlmb3Jtcy5nZXQoJ29wYWNpdHknKTtcblx0XHRcdGlmICghdUxlbnNQb3NpdGlvbiB8fCAhdU9wYWNpdHkpIHJldHVybjtcblxuXHRcdFx0bGV0IHRhcmdldCA9IDE7XG5cblx0XHRcdGlmIChmb2xsb3dNb3VzZSkge1xuXHRcdFx0XHR1TGVuc1Bvc2l0aW9uLnZhbHVlLnggPSBwb2ludGVyLng7XG5cdFx0XHRcdHVMZW5zUG9zaXRpb24udmFsdWUueSA9IHBvaW50ZXIueTtcblx0XHRcdFx0dGFyZ2V0ID0gMDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMucHJvamVjdGVkUG9zaXRpb24uY29weShwb3NpdGlvbikucHJvamVjdChjYW1lcmEpO1xuXHRcdFx0XHRpZiAodGhpcy5wcm9qZWN0ZWRQb3NpdGlvbi56ID4gMSkgcmV0dXJuO1xuXG5cdFx0XHRcdHVMZW5zUG9zaXRpb24udmFsdWUueCA9IHRoaXMucHJvamVjdGVkUG9zaXRpb24ueDtcblx0XHRcdFx0dUxlbnNQb3NpdGlvbi52YWx1ZS55ID0gdGhpcy5wcm9qZWN0ZWRQb3NpdGlvbi55O1xuXG5cdFx0XHRcdHRoaXMubW91c2UyZC5zZXQodGhpcy5wcm9qZWN0ZWRQb3NpdGlvbi54LCB0aGlzLnByb2plY3RlZFBvc2l0aW9uLnkpO1xuXHRcdFx0XHRyYXljYXN0ZXIuc2V0RnJvbUNhbWVyYSh0aGlzLm1vdXNlMmQsIGNhbWVyYSk7XG5cdFx0XHRcdGNvbnN0IGludGVyc2VjdHMgPSByYXljYXN0ZXIuaW50ZXJzZWN0T2JqZWN0cyhzY2VuZS5jaGlsZHJlbiwgdHJ1ZSk7XG5cdFx0XHRcdGNvbnN0IHsgb2JqZWN0IH0gPSBpbnRlcnNlY3RzWzBdID8/IHt9O1xuXHRcdFx0XHRpZiAob2JqZWN0KSB7XG5cdFx0XHRcdFx0aWYgKG9iamVjdC51c2VyRGF0YT8uWydsZW5zZmxhcmUnXSA9PT0gJ25vLW9jY2x1c2lvbicpIHtcblx0XHRcdFx0XHRcdHRhcmdldCA9IDA7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBNZXNoKSB7XG5cdFx0XHRcdFx0XHRpZiAob2JqZWN0Lm1hdGVyaWFsLnVuaWZvcm1zPy5fdHJhbnNtaXNzaW9uPy52YWx1ZSA+IDAuMikge1xuXHRcdFx0XHRcdFx0XHQvL0NoZWNrIGZvciBNZXNoVHJhbnNtaXNzaW9uTWF0ZXJpYWxcblx0XHRcdFx0XHRcdFx0dGFyZ2V0ID0gMC4yO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvYmplY3QubWF0ZXJpYWwuX3RyYW5zbWlzc2lvbiAmJiBvYmplY3QubWF0ZXJpYWwuX3RyYW5zbWlzc2lvbiA+IDAuMikge1xuXHRcdFx0XHRcdFx0XHQvL0NoZWNrIGZvciBNZXNoUGh5c2ljYWxNYXRlcmlhbCB3aXRoIHRyYW5zbWlzc2lvbiBzZXR0aW5nXG5cdFx0XHRcdFx0XHRcdHRhcmdldCA9IDAuMjtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob2JqZWN0Lm1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIGZvciBPdGhlck1hdGVyaWFscyB3aXRoIHRyYW5zcGFyZW50IHBhcmFtZXRlclxuXHRcdFx0XHRcdFx0XHR0YXJnZXQgPSBvYmplY3QubWF0ZXJpYWwub3BhY2l0eTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0ZWFzaW5nLmRhbXAodU9wYWNpdHksICd2YWx1ZScsIHRhcmdldCwgc21vb3RoVGltZSwgZGVsdGEpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVucy1mbGFyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcG9zdHByb2Nlc3Npbmcvc3JjL2xpYi9lZmZlY3RzL2xlbnMtZmxhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBQ25DLHVDQUF1QztBQUV2QyxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQVcsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQW9DLE1BQU0sT0FBTyxDQUFDO0FBQzFHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUV4RCxNQUFNLGVBQWUsR0FBRztJQUN2QixjQUFjLEVBQUUsd0JBQXdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBNEN6QztDQUNBLENBQUM7QUFFRixNQUFNLE9BQU8sZUFBZ0IsU0FBUSxNQUFNO0lBQzFDLFlBQVksRUFDWCxhQUFhLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFDcEMsT0FBTyxHQUFHLElBQUksRUFDZCxTQUFTLEdBQUcsR0FBRyxFQUNmLFlBQVksR0FBRyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFDM0IsV0FBVyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUNwQixVQUFVLEdBQUcsQ0FBQyxFQUNkLFNBQVMsR0FBRyxJQUFJLEVBQ2hCLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFFBQVEsR0FBRyxJQUFJLEVBQ2YsVUFBVSxHQUFHLEtBQUssRUFDbEIsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQ2pDLGVBQWUsR0FBRyxJQUFzQixFQUN4QyxTQUFTLEdBQUcsR0FBRyxFQUNmLGVBQWUsR0FBRyxJQUFJLEVBQ3RCLGdCQUFnQixHQUFHLElBQUksRUFDdkIsVUFBVSxHQUFHLEdBQUcsRUFDaEIsT0FBTyxHQUFHLEdBQUcsRUFDYixTQUFTLEdBQUcsS0FBSyxNQUNkLEVBQUU7UUFDTCxLQUFLLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxDQUFDLGNBQWMsRUFBRTtZQUN4RCxhQUFhO1lBQ2IsUUFBUSxFQUFFLElBQUksR0FBRyxDQUFrQjtnQkFDbEMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2pDLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLGNBQWMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDM0MsQ0FBQyxPQUFPLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLENBQUMsYUFBYSxFQUFFLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN6QyxDQUFDLFlBQVksRUFBRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxXQUFXLEVBQUUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsWUFBWSxFQUFFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLFlBQVksRUFBRSxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ25DLENBQUMsWUFBWSxFQUFFLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2QyxDQUFDLFdBQVcsRUFBRSxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDckMsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDakQsQ0FBQyxXQUFXLEVBQUUsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQ3JDLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pELENBQUMsa0JBQWtCLEVBQUUsSUFBSSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbkQsQ0FBQyxZQUFZLEVBQUUsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZDLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLFNBQVMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNqQyxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVRLE1BQU0sQ0FBQyxTQUF3QixFQUFFLFlBQStCLEVBQUUsU0FBaUI7UUFDM0YsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekMsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNYLEtBQUssQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDO1FBQzFCLENBQUM7SUFDRixDQUFDO0NBQ0Q7QUFRRCxNQUFNLGNBQWMsR0FBcUI7SUFDeEMsUUFBUSxFQUFFLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNsQyxXQUFXLEVBQUUsS0FBSztJQUNsQixVQUFVLEVBQUUsR0FBRztDQUNmLENBQUM7QUFZRixNQUFNLE9BQU8sYUFBYTtJQWtCekI7UUFqQkEsWUFBTyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxTQUFTLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVwRSxVQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDdEIsYUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLGNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxZQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkMsbUJBQWMsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUU1QyxzQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2xDLFlBQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRWhDLFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RCLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxFQUFFLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyRixPQUFPLElBQUksZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBR0YsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDckUsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDaEUsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDakIsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztnQkFDckMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUN2QyxDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxPQUFPO1lBRXBCLE1BQU0sQ0FBQyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxDQUFDLEdBQUc7Z0JBQ2xGLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRTtnQkFDNUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxTQUFTLEVBQUU7YUFDaEIsQ0FBQztZQUVGLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxRQUFRO2dCQUFFLE9BQU87WUFFeEMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBRWYsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDakIsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNaLENBQUM7aUJBQU0sQ0FBQztnQkFDUCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTztnQkFFekMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFDakQsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztnQkFFakQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxVQUFVLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ3BFLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN2QyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNaLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsQ0FBQyxLQUFLLGNBQWMsRUFBRSxDQUFDO3dCQUN2RCxNQUFNLEdBQUcsQ0FBQyxDQUFDO29CQUNaLENBQUM7eUJBQU0sSUFBSSxNQUFNLFlBQVksSUFBSSxFQUFFLENBQUM7d0JBQ25DLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDMUQsb0NBQW9DOzRCQUNwQyxNQUFNLEdBQUcsR0FBRyxDQUFDO3dCQUNkLENBQUM7NkJBQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDakYsMERBQTBEOzRCQUMxRCxNQUFNLEdBQUcsR0FBRyxDQUFDO3dCQUNkLENBQUM7NkJBQU0sSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDOzRCQUN4QyxzREFBc0Q7NEJBQ3RELE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQzt3QkFDbEMsQ0FBQztvQkFDRixDQUFDO2dCQUNGLENBQUM7WUFDRixDQUFDO1lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDM0QsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQWpGVyxhQUFhO2tHQUFiLGFBQWEscU5BUGY7O0VBRVQsNERBQ1MsT0FBTzs7MkZBSUwsYUFBYTtrQkFWekIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOztFQUVUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7b0JBQ2pDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUMvQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENyZWF0ZWQgYnkgQW5kZXJzb24gTWFuY2luaSAyMDIzXG4vLyBSZWFjdCBUaHJlZSBGaWJlciBVbHRpbWF0ZSBMZW5zRmxhcmVcblxuaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RBcmdzLCBpbmplY3RCZWZvcmVSZW5kZXIsIGluamVjdFN0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBlYXNpbmcgfSBmcm9tICdtYWF0aCc7XG5pbXBvcnQgeyBtZXJnZUlucHV0cyB9IGZyb20gJ25neHRlbnNpb24vaW5qZWN0LWlucHV0cyc7XG5pbXBvcnQgeyBCbGVuZEZ1bmN0aW9uLCBFZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBDb2xvciwgTWVzaCwgVGV4dHVyZSwgVW5pZm9ybSwgVmVjdG9yMiwgVmVjdG9yMywgV2ViR0xSZW5kZXJUYXJnZXQsIFdlYkdMUmVuZGVyZXIgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RwRWZmZWN0Q29tcG9zZXIgfSBmcm9tICcuLi9lZmZlY3QtY29tcG9zZXInO1xuXG5jb25zdCBMZW5zRmxhcmVTaGFkZXIgPSB7XG5cdGZyYWdtZW50U2hhZGVyOiAvKiBsYW5ndWFnZT1nbHNsIGdsc2wgKi8gYFxuXG4gIHVuaWZvcm0gZmxvYXQgaVRpbWU7XG4gIHVuaWZvcm0gdmVjMiBsZW5zUG9zaXRpb247XG4gIHVuaWZvcm0gdmVjMiBpUmVzb2x1dGlvbjtcbiAgdW5pZm9ybSB2ZWMzIGNvbG9yR2FpbjtcbiAgdW5pZm9ybSBmbG9hdCBzdGFyUG9pbnRzO1xuICB1bmlmb3JtIGZsb2F0IGdsYXJlU2l6ZTtcbiAgdW5pZm9ybSBmbG9hdCBmbGFyZVNpemU7XG4gIHVuaWZvcm0gZmxvYXQgZmxhcmVTcGVlZDtcbiAgdW5pZm9ybSBmbG9hdCBmbGFyZVNoYXBlO1xuICB1bmlmb3JtIGZsb2F0IGhhbG9TY2FsZTtcbiAgdW5pZm9ybSBmbG9hdCBvcGFjaXR5O1xuICB1bmlmb3JtIGJvb2wgYW5pbWF0ZWQ7XG4gIHVuaWZvcm0gYm9vbCBhbmFtb3JwaGljO1xuICB1bmlmb3JtIGJvb2wgZW5hYmxlZDtcbiAgdW5pZm9ybSBib29sIHNlY29uZGFyeUdob3N0cztcbiAgdW5pZm9ybSBib29sIHN0YXJCdXJzdDtcbiAgdW5pZm9ybSBmbG9hdCBnaG9zdFNjYWxlO1xuICB1bmlmb3JtIGJvb2wgYWRpdGlvbmFsU3RyZWFrcztcbiAgdW5pZm9ybSBzYW1wbGVyMkQgbGVuc0RpcnRUZXh0dXJlO1xuICB2ZWMyIHZ4dEM7XG5cbiAgZmxvYXQgcm5kZihmbG9hdCBuKXtyZXR1cm4gZnJhY3Qoc2luKG4pICogNDM3NTguNTQ1MzEyMyk7fWZsb2F0IG5peihmbG9hdCBwKXtmbG9hdCBmbCA9IGZsb29yKHApO2Zsb2F0IGZjID0gZnJhY3QocCk7cmV0dXJuIG1peChybmRmKGZsKSxybmRmKGZsICsgMS4wKSwgZmMpO31cbiAgdmVjMyBoc3YycmdiKHZlYzMgYyl7dmVjNCBrID0gdmVjNCgxLjAsIDIuMCAvIDMuMCwgMS4wIC8gMy4wLCAzLjApO3ZlYzMgcCA9IGFicyhmcmFjdChjLnh4eCArIGsueHl6KSAqIDYuMCAtIGsud3d3KTtyZXR1cm4gYy56ICogbWl4KGsueHh4LCBjbGFtcChwIC0gay54eHgsIDAuMCwgMS4wKSwgYy55KTt9XG4gIGZsb2F0IHNhdFUoZmxvYXQgeCl7cmV0dXJuIGNsYW1wKHgsIDAuLDEuKTt9dmVjMiBydFUodmVjMiBuYXosIGZsb2F0IHJ0bil7cmV0dXJuIHZlYzIoY29zKHJ0bikgKiBuYXoueCArIHNpbihydG4pICogbmF6LnksY29zKHJ0bikgKiBuYXoueSAtIHNpbihydG4pICogbmF6LngpO31cbiAgdmVjMyBkcndGKHZlYzIgcCwgZmxvYXQgaW50ZW5zaXR5LCBmbG9hdCBybmQsIGZsb2F0IHNwZWVkLCBpbnQgaWQpe2Zsb2F0IGZsaG9zID0gKDEuIC8gMzIuKSAqIGZsb2F0KGlkKSAqIDAuMTtmbG9hdCBsaW5ncmFkID0gZGlzdGFuY2UodmVjMigwLiksIHApO2Zsb2F0IGV4cGcgPSAxLiAvIGV4cChsaW5ncmFkICogKGZyYWN0KHJuZCkgKiAwLjY2ICsgMC4zMykpO3ZlYzMgcXpUZyA9IGhzdjJyZ2IodmVjMyggZnJhY3QoIChleHBnICogOC4pICsgc3BlZWQgKiBmbGFyZVNwZWVkICsgZmxob3MpLCBwb3coMS4tYWJzKGV4cGcqMi4tMS4pLCAwLjQ1KSwgMjAuMCAqIGV4cGcgKiBpbnRlbnNpdHkpKTtmbG9hdCBpbnRlcm5hbFN0YXJQb2ludHM7aWYoYW5hbW9ycGhpYyl7aW50ZXJuYWxTdGFyUG9pbnRzID0gMS4wO30gZWxzZXtpbnRlcm5hbFN0YXJQb2ludHMgPSBzdGFyUG9pbnRzO31mbG9hdCBhbXMgPSBsZW5ndGgocCAqIGZsYXJlU2hhcGUgKiBzaW4oaW50ZXJuYWxTdGFyUG9pbnRzICogYXRhbihwLngsIHAueSkpKTtmbG9hdCBrSmhnID0gcG93KDEuLXNhdFUoYW1zKSwgKCBhbmFtb3JwaGljID8gMTAwLiA6IDEyLikpO2tKaGcgKz0gc2F0VShleHBnLTAuOSkgKiAzLjtrSmhnID0gcG93KGtKaGcgKiBleHBnLCA4LiArICgxLi1pbnRlbnNpdHkpICogNS4pO2lmKGZsYXJlU3BlZWQgPiAwLjApe3JldHVybiB2ZWMzKGtKaGcpICogcXpUZzt9IGVsc2V7cmV0dXJuIHZlYzMoa0poZykgKiBmbGFyZVNpemUgKiAxNS47fX1cbiAgZmxvYXQgYW1zMih2ZWMzIGEsIHZlYzMgYikgeyByZXR1cm4gYWJzKGEueCAtIGIueCkgKyBhYnMoYS55IC0gYi55KSArIGFicyhhLnogLSBiLnopO312ZWMzIHNhdFUodmVjMyB4KXtyZXR1cm4gY2xhbXAoeCwgdmVjMygwLjApLCB2ZWMzKDEuMCkpO31cbiAgZmxvYXQgZ2xSKHZlYzIgbmF6LCB2ZWMyIHBvcywgZmxvYXQgenNpKXt2ZWMyIG1uaTtpZihhbmltYXRlZCl7bW5pID0gcnRVKG5hei1wb3MsIGlUaW1lICogMC4xKTt9IGVsc2V7bW5pID0gbmF6LXBvczt9ZmxvYXQgYW5nID0gYXRhbihtbmkueSwgbW5pLngpICogKGFuYW1vcnBoaWMgPyAxLjAgOiBzdGFyUG9pbnRzKTtmbG9hdCBhbXMyID0gbGVuZ3RoKG1uaSk7YW1zMiA9IHBvdyhhbXMyLCAuOSk7ZmxvYXQgZjAgPSAxLjAvKGxlbmd0aChuYXotcG9zKSooMS4wL3pzaSoxNi4wKSsuMik7cmV0dXJuIGYwK2YwKihzaW4oKGFuZykpKi4yICsuMyk7fVxuICBmbG9hdCBzZEhleCh2ZWMyIHApe3AgPSBhYnMocCk7dmVjMiBxID0gdmVjMihwLngqMi4wKjAuNTc3MzUwMywgcC55ICsgcC54KjAuNTc3MzUwMyk7cmV0dXJuIGRvdChzdGVwKHEueHkscS55eCksIDEuMC1xLnl4KTt9ZmxvYXQgZnBvdyhmbG9hdCB4LCBmbG9hdCBrKXtyZXR1cm4geCA+IGsgPyBwb3coKHgtaykvKDEuMC1rKSwyLjApIDogMC4wO31cbiAgdmVjMyBySHgodmVjMiBuYXosIHZlYzIgcCwgZmxvYXQgcywgdmVjMyBjb2wpe25heiAtPSBwO2lmIChhYnMobmF6LngpIDwgMC4yKnMgJiYgYWJzKG5hei55KSA8IDAuMipzKXtyZXR1cm4gbWl4KHZlYzMoMCksbWl4KHZlYzMoMCksY29sLDAuMSArIGZwb3cobGVuZ3RoKG5hei9zKSwwLjEpKjEwLjApLHNtb290aHN0ZXAoMC4wLDAuMSxzZEhleChuYXoqMjAuMC9zKSkpO31yZXR1cm4gdmVjMygwKTt9XG4gIHZlYzMgbUxzKHZlYzIgbmF6LCB2ZWMyIHBvcyl7dmVjMiBtbmkgPSBuYXotcG9zO3ZlYzIgenhNcCA9IG5heioobGVuZ3RoKG5heikpO2Zsb2F0IGFuZyA9IGF0YW4obW5pLngsbW5pLnkpO2Zsb2F0IGYwID0gLjMvKGxlbmd0aChuYXotcG9zKSoxNi4wKzEuMCk7ZjAgPSBmMCooc2luKG5peihzaW4oYW5nKjMuOS0oYW5pbWF0ZWQgPyBpVGltZSA6IDAuMCkgKiAwLjMpICogc3RhclBvaW50cykpKi4yICk7ZmxvYXQgZjEgPSBtYXgoMC4wMS1wb3cobGVuZ3RoKG5heisxLjIqcG9zKSwxLjkpLC4wKSo3LjA7ZmxvYXQgZjIgPSBtYXgoLjkvKDEwLjArMzIuMCpwb3cobGVuZ3RoKHp4TXArMC45OSpwb3MpLDIuMCkpLC4wKSowLjM1O2Zsb2F0IGYyMiA9IG1heCguOS8oMTEuMCszMi4wKnBvdyhsZW5ndGgoenhNcCswLjg1KnBvcyksMi4wKSksLjApKjAuMjM7ZmxvYXQgZjIzID0gbWF4KC45LygxMi4wKzMyLjAqcG93KGxlbmd0aCh6eE1wKzAuOTUqcG9zKSwyLjApKSwuMCkqMC42O3ZlYzIgenRYID0gbWl4KG5heix6eE1wLCAwLjEpO2Zsb2F0IGY0ID0gbWF4KDAuMDEtcG93KGxlbmd0aCh6dFgrMC40KnBvcyksMi45KSwuMCkqNC4wMjtmbG9hdCBmNDIgPSBtYXgoMC4wLXBvdyhsZW5ndGgoenRYKzAuNDUqcG9zKSwyLjkpLC4wKSo0LjE7ZmxvYXQgZjQzID0gbWF4KDAuMDEtcG93KGxlbmd0aCh6dFgrMC41KnBvcyksMi45KSwuMCkqNC42O3p0WCA9IG1peChuYXosenhNcCwtLjQpO2Zsb2F0IGY1ID0gbWF4KDAuMDEtcG93KGxlbmd0aCh6dFgrMC4xKnBvcyksNS41KSwuMCkqMi4wO2Zsb2F0IGY1MiA9IG1heCgwLjAxLXBvdyhsZW5ndGgoenRYKzAuMipwb3MpLDUuNSksLjApKjIuMDtmbG9hdCBmNTMgPSBtYXgoMC4wMS1wb3cobGVuZ3RoKHp0WCswLjEqcG9zKSw1LjUpLC4wKSoyLjA7enRYID0gbWl4KG5heix6eE1wLCAyLjEpO2Zsb2F0IGY2ID0gbWF4KDAuMDEtcG93KGxlbmd0aCh6dFgtMC4zKnBvcyksMS42MSksLjApKjMuMTU5O2Zsb2F0IGY2MiA9IG1heCgwLjAxLXBvdyhsZW5ndGgoenRYLTAuMzI1KnBvcyksMS42MTQpLC4wKSozLjE0O2Zsb2F0IGY2MyA9IG1heCgwLjAxLXBvdyhsZW5ndGgoenRYLTAuMzg5KnBvcyksMS42MjMpLC4wKSozLjEyO3ZlYzMgYyA9IHZlYzMoZ2xSKG5heixwb3MsIGdsYXJlU2l6ZSkpO3ZlYzIgcHJvdDtpZihhbmltYXRlZCl7cHJvdCA9IHJ0VShuYXogLSBwb3MsIChpVGltZSAqIDAuMSkpO30gZWxzZSBpZihhbmFtb3JwaGljKXtwcm90ID0gcnRVKG5heiAtIHBvcywgMS41NzA3OTYpO30gZWxzZSB7cHJvdCA9IG5heiAtIHBvczt9YyArPSBkcndGKHByb3QsIChhbmFtb3JwaGljID8gZmxhcmVTaXplICogMTAuIDogZmxhcmVTaXplKSwgMC4xLCBpVGltZSwgMSk7Yy5yKz1mMStmMitmNCtmNStmNjsgYy5nKz1mMStmMjIrZjQyK2Y1MitmNjI7IGMuYis9ZjErZjIzK2Y0MytmNTMrZjYzO2MgPSBjKjEuMyAqIHZlYzMobGVuZ3RoKHp4TXApKy4wOSk7Yys9dmVjMyhmMCk7cmV0dXJuIGM7fVxuICB2ZWMzIGNjKHZlYzMgY2xyLCBmbG9hdCBmY3QsZmxvYXQgZmN0Mil7ZmxvYXQgdyA9IGNsci54K2Nsci55K2Nsci56O3JldHVybiBtaXgoY2xyLHZlYzModykqZmN0LHcqZmN0Mik7fWZsb2F0IHJuZCh2ZWMyIHApe2Zsb2F0IGYgPSBmcmFjdChzaW4oZG90KHAsIHZlYzIoMTIuMTIzNCwgNzIuODM5MikgKSo0NTEyMy4yKSk7cmV0dXJuIGY7fWZsb2F0IHJuZChmbG9hdCB3KXtmbG9hdCBmID0gZnJhY3Qoc2luKHcpKjEwMDAuKTtyZXR1cm4gZjt9XG4gIGZsb2F0IHJTaHAodmVjMiBwLCBpbnQgTil7ZmxvYXQgZjtmbG9hdCBhPWF0YW4ocC54LHAueSkrLjI7ZmxvYXQgYj02LjI4MzE5L2Zsb2F0KE4pO2Y9c21vb3Roc3RlcCguNSwuNTEsIGNvcyhmbG9vciguNSthL2IpKmItYSkqbGVuZ3RoKHAueHkpKiAyLjAgIC1naG9zdFNjYWxlKTtyZXR1cm4gZjt9XG4gIHZlYzMgZHJDKHZlYzIgcCwgZmxvYXQgenNpLCBmbG9hdCBkQ3ksIHZlYzMgY2xyLCB2ZWMzIGNscjIsIGZsb2F0IGFtczIsIHZlYzIgZXNvbSl7ZmxvYXQgbCA9IGxlbmd0aChwICsgZXNvbSooYW1zMioyLikpK3pzaS8yLjtmbG9hdCBsMiA9IGxlbmd0aChwICsgZXNvbSooYW1zMio0LikpK3pzaS8zLjtmbG9hdCBjID0gbWF4KDAuMDEtcG93KGxlbmd0aChwICsgZXNvbSphbXMyKSwgenNpKmdob3N0U2NhbGUpLCAwLjApKjEwLjtmbG9hdCBjMSA9IG1heCgwLjAwMS1wb3cobC0wLjMsIDEuLzQwLikrc2luKGwqMjAuKSwgMC4wKSozLjtmbG9hdCBjMiA9ICBtYXgoMC4wOS9wb3cobGVuZ3RoKHAtZXNvbSphbXMyLy41KSoxLiwgLjk1KSwgMC4wKS8yMC47ZmxvYXQgcyA9IG1heCgwLjAyLXBvdyhyU2hwKHAqNS4gKyBlc29tKmFtczIqNS4gKyBkQ3ksIDYpICwgMS4pLCAwLjApKjEuNTtjbHIgPSBjb3ModmVjMygwLjQ0LCAuMjQsIC4yKSo4LiArIGFtczIqNC4pKjAuNSsuNTt2ZWMzIGYgPSBjKmNscjtmICs9IGMxKmNscjtmICs9IGMyKmNscjtmICs9ICBzKmNscjtyZXR1cm4gZi0wLjAxO31cbiAgdmVjNCBnZUxDKGZsb2F0IHgpe3JldHVybiB2ZWM0KHZlYzMobWl4KG1peChtaXgobWl4KG1peChtaXgobWl4KG1peChtaXgobWl4KG1peChtaXgobWl4KG1peChtaXgodmVjMygwLiwgMC4sIDAuKSx2ZWMzKDAuLCAwLiwgMC4pLCBzbW9vdGhzdGVwKDAuMCwgMC4wNjMsIHgpKSx2ZWMzKDAuLCAwLiwgMC4pLCBzbW9vdGhzdGVwKDAuMDYzLCAwLjEyNSwgeCkpLHZlYzMoMC4wLCAwLiwgMC4pLCBzbW9vdGhzdGVwKDAuMTI1LCAwLjE4OCwgeCkpLHZlYzMoMC4xODgsIDAuMTMxLCAwLjExNiksIHNtb290aHN0ZXAoMC4xODgsIDAuMjI3LCB4KSksdmVjMygwLjMxLCAwLjIwNCwgMC41MzcpLCBzbW9vdGhzdGVwKDAuMjI3LCAwLjI1MSwgeCkpLHZlYzMoMC4xOTIsIDAuMTA2LCAwLjI4NiksIHNtb290aHN0ZXAoMC4yNTEsIDAuMzE0LCB4KSksdmVjMygwLjEwMiwgMC4wMDgsIDAuMzQxKSwgc21vb3Roc3RlcCgwLjMxNCwgMC4zOTIsIHgpKSx2ZWMzKDAuMDg2LCAwLjAsIDAuMTQxKSwgc21vb3Roc3RlcCgwLjM5MiwgMC41MDIsIHgpKSx2ZWMzKDEuMCwgMC4zMSwgMC4wKSwgc21vb3Roc3RlcCgwLjUwMiwgMC42MDQsIHgpKSx2ZWMzKC4xLCAwLjEsIDAuMSksIHNtb290aHN0ZXAoMC42MDQsIDAuNjQzLCB4KSksdmVjMygxLjAsIDAuOTI5LCAwLjApLCBzbW9vdGhzdGVwKDAuNjQzLCAwLjc2MSwgeCkpLHZlYzMoMS4wLCAwLjA4NiwgMC40MjQpLCBzbW9vdGhzdGVwKDAuNzYxLCAwLjg0NywgeCkpLHZlYzMoMS4wLCAwLjQ5LCAwLjApLCBzbW9vdGhzdGVwKDAuODQ3LCAwLjg5LCB4KSksdmVjMygwLjk0NSwgMC4yNzUsIDAuNDc1KSwgc21vb3Roc3RlcCgwLjg5LCAwLjk0MSwgeCkpLHZlYzMoMC4yNTEsIDAuMjc1LCAwLjc5NiksIHNtb290aHN0ZXAoMC45NDEsIDEuMCwgeCkpKSwxLjApO31cbiAgZmxvYXQgZGlUTih2ZWMyIHApe3ZlYzIgZiA9IGZyYWN0KHApO2YgPSAoZiAqIGYpICogKDMuMCAtICgyLjAgKiBmKSk7ZmxvYXQgbiA9IGRvdChmbG9vcihwKSwgdmVjMigxLjAsIDE1Ny4wKSk7dmVjNCBhID0gZnJhY3Qoc2luKHZlYzQobiArIDAuMCwgbiArIDEuMCwgbiArIDE1Ny4wLCBuICsgMTU4LjApKSAqIDQzNzU4LjU0NTMxMjMpO3JldHVybiBtaXgobWl4KGEueCwgYS55LCBmLngpLCBtaXgoYS56LCBhLncsIGYueCksIGYueSk7fVxuICBmbG9hdCBmYm0odmVjMiBwKXtjb25zdCBtYXQyIG0gPSBtYXQyKDAuODAsIC0wLjYwLCAwLjYwLCAwLjgwKTtmbG9hdCBmID0gMC4wO2YgKz0gMC41MDAwKmRpVE4ocCk7IHAgPSBtKnAqMi4wMjtmICs9IDAuMjUwMCpkaVROKHApOyBwID0gbSpwKjIuMDM7ZiArPSAwLjEyNTAqZGlUTihwKTsgcCA9IG0qcCoyLjAxO2YgKz0gMC4wNjI1KmRpVE4ocCk7cmV0dXJuIGYvMC45Mzc1O31cbiAgdmVjNCBnZUxTKHZlYzIgcCl7dmVjMiBwcCA9IChwIC0gdmVjMigwLjUpKSAqIDIuMDtmbG9hdCBhID0gYXRhbihwcC55LCBwcC54KTt2ZWM0IGNwID0gdmVjNChzaW4oYSAqIDEuMCksIGxlbmd0aChwcCksIHNpbihhICogMTMuMCksIHNpbihhICogNTMuMCkpO2Zsb2F0IGQgPSBzaW4oY2xhbXAocG93KGxlbmd0aCh2ZWMyKDAuNSkgLSBwKSAqIDAuNSArIGhhbG9TY2FsZSAvMi4sIDUuMCksIDAuMCwgMS4wKSAqIDMuMTQxNTkpO3ZlYzMgYyA9IHZlYzMoZCkgKiB2ZWMzKGZibShjcC54eSAqIDE2LjApICogZmJtKGNwLnp3ICogOS4wKSAqIG1heChtYXgobWF4KG1heCgwLjUsIHNpbihhICogMS4wKSksIHNpbihhICogMy4wKSAqIDAuOCksIHNpbihhICogNy4wKSAqIDAuOCksIHNpbihhICogOS4wKSAqIDEwLjYpKTtjICo9IHZlYzMobWl4KDIuMCwgKHNpbihsZW5ndGgocHAueHkpICogMjU2LjApICogMC41KSArIDAuNSwgc2luKChjbGFtcCgobGVuZ3RoKHBwLnh5KSAtIDAuODc1KSAvIDAuMSwgMC4wLCAxLjApICsgMC4wKSAqIDIuMCAqIDMuMTQxNTkpICogMS41KSArIDAuNSkgKiAwLjMyNzU7cmV0dXJuIHZlYzQodmVjMyhjICogMS4wKSwgZCk7fVxuICB2ZWM0IGdlTEQodmVjMiBwKXtwLnh5ICs9IHZlYzIoZmJtKHAueXggKiAzLjApLCBmYm0ocC55eCAqIDIuMCkpICogMC4wODI1O3ZlYzMgbyA9IHZlYzMobWl4KDAuMTI1LCAwLjI1LCBtYXgobWF4KHNtb290aHN0ZXAoMC4xLCAwLjAsIGxlbmd0aChwIC0gdmVjMigwLjI1KSkpLHNtb290aHN0ZXAoMC40LCAwLjAsIGxlbmd0aChwIC0gdmVjMigwLjc1KSkpKSxzbW9vdGhzdGVwKDAuOCwgMC4wLCBsZW5ndGgocCAtIHZlYzIoMC44NzUsIDAuMTI1KSkpKSkpO28gKz0gdmVjMyhtYXgoZmJtKHAgKiAxLjApIC0gMC41LCAwLjApKSAqIDAuNTtvICs9IHZlYzMobWF4KGZibShwICogMi4wKSAtIDAuNSwgMC4wKSkgKiAwLjU7byArPSB2ZWMzKG1heChmYm0ocCAqIDQuMCkgLSAwLjUsIDAuMCkpICogMC4yNTtvICs9IHZlYzMobWF4KGZibShwICogOC4wKSAtIDAuNzUsIDAuMCkpICogMS4wO28gKz0gdmVjMyhtYXgoZmJtKHAgKiAxNi4wKSAtIDAuNzUsIDAuMCkpICogMC43NTtvICs9IHZlYzMobWF4KGZibShwICogNjQuMCkgLSAwLjc1LCAwLjApKSAqIDAuNTtyZXR1cm4gdmVjNChjbGFtcChvLCB2ZWMzKDAuMTUpLCB2ZWMzKDEuMCkpLCAxLjApO31cbiAgdmVjNCB0eEwoc2FtcGxlcjJEIHRleCwgdmVjMiB4dEMpe2lmKCgoeHRDLnggPCAwLikgfHwgKHh0Qy55IDwgMC4pKSB8fCAoKHh0Qy54ID4gMS4pIHx8ICh4dEMueSA+IDEuKSkpe3JldHVybiB2ZWM0KDAuMCk7fWVsc2V7cmV0dXJuIHRleHR1cmUodGV4LCB4dEMpOyB9fVxuICB2ZWM0IHR4RChzYW1wbGVyMkQgdGV4LCB2ZWMyIHh0QywgdmVjMiBkaXIsIHZlYzMgZGl0bikge3JldHVybiB2ZWM0KHR4TCh0ZXgsICh4dEMgKyAoZGlyICogZGl0bi5yKSkpLnIsdHhMKHRleCwgKHh0QyArIChkaXIgKiBkaXRuLmcpKSkuZyx0eEwodGV4LCAoeHRDICsgKGRpciAqIGRpdG4uYikpKS5iLDEuMCk7fVxuICB2ZWM0IHN0ckIoKXt2ZWMyIGFzcFh0YyA9IHZlYzIoMS4wKSAtICgoKHZ4dEMgLSB2ZWMyKDAuNSkpICogdmVjMigxLjApKSArIHZlYzIoMC41KSk7IHZlYzIgeHRDID0gdmVjMigxLjApIC0gdnh0QzsgdmVjMiBnaHZjID0gKHZlYzIoMC41KSAtIHh0QykgKiAwLjMgLSBsZW5zUG9zaXRpb247IHZlYzIgZ2hObSA9IG5vcm1hbGl6ZShnaHZjICogdmVjMigxLjApKSAqIHZlYzIoMS4wKTt2ZWMyIGhhbG9WZWMgPSBub3JtYWxpemUoZ2h2YykgKiAwLjY7dmVjMiBobE5tID0gZ2hObSAqIDAuNjt2ZWMyIHRleGVsU2l6ZSA9IHZlYzIoMS4wKSAvIHZlYzIoaVJlc29sdXRpb24ueHkpO3ZlYzMgZGl0biA9IHZlYzMoLSh0ZXhlbFNpemUueCAqIDEuNSksIDAuMiwgdGV4ZWxTaXplLnggKiAxLjUpO3ZlYzQgYyA9IHZlYzQoMC4wKTtmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykge3ZlYzIgb2Zmc2V0ID0geHRDICsgKGdodmMgKiBmbG9hdChpKSk7YyArPSB0eEQobGVuc0RpcnRUZXh0dXJlLCBvZmZzZXQsIGdoTm0sIGRpdG4pICogcG93KG1heCgwLjAsIDEuMCAtIChsZW5ndGgodmVjMigwLjUpIC0gb2Zmc2V0KSAvIGxlbmd0aCh2ZWMyKDAuNSkpKSksIDEwLjApO312ZWMyIHV5VHJ6ID0geHRDICsgaGxObTsgcmV0dXJuIChjICogZ2VMQygobGVuZ3RoKHZlYzIoMC41KSAtIGFzcFh0YykgLyBsZW5ndGgodmVjMihoYWxvU2NhbGUpKSkpKSArKHR4RChsZW5zRGlydFRleHR1cmUsIHV5VHJ6LCBnaE5tLCBkaXRuKSAqIHBvdyhtYXgoMC4wLCAxLjAgLSAobGVuZ3RoKHZlYzIoMC41KSAtIHV5VHJ6KSAvIGxlbmd0aCh2ZWMyKDAuNSkpKSksIDEwLjApKTt9XG4gIHZvaWQgbWFpbkltYWdlKHZlYzQgdix2ZWMyIHIsb3V0IHZlYzQgaSl7dmVjMiBnPXItLjU7Zy55Kj1pUmVzb2x1dGlvbi55L2lSZXNvbHV0aW9uLng7dmVjMiBsPWxlbnNQb3NpdGlvbiouNTtsLnkqPWlSZXNvbHV0aW9uLnkvaVJlc29sdXRpb24ueDt2ZWMzIGY9bUxzKGcsbCkqMjAuKmNvbG9yR2Fpbi8yNTYuO2lmKGFkaXRpb25hbFN0cmVha3Mpe3ZlYzMgbz12ZWMzKC45LC4yLC4xKSxwPXZlYzMoLjMsLjEsLjkpO2ZvcihmbG9hdCBuPTAuO248MTAuO24rKylmKz1kckMoZyxwb3cocm5kKG4qMmUzKSoyLjgsLjEpKzEuNDEsMC4sbytuLHArbixybmQobioyMC4pKjMuKy4yLS41LGxlbnNQb3NpdGlvbik7fWlmKHNlY29uZGFyeUdob3N0cyl7dmVjMyBuPXZlYzMoMCk7bis9ckh4KGcsLWxlbnNQb3NpdGlvbiouMjUsZ2hvc3RTY2FsZSoxLjQsdmVjMyguMjUsLjM1LDApKTtuKz1ySHgoZyxsZW5zUG9zaXRpb24qLjI1LGdob3N0U2NhbGUqLjUsdmVjMygxLC41LC41KSk7bis9ckh4KGcsbGVuc1Bvc2l0aW9uKi4xLGdob3N0U2NhbGUqMS42LHZlYzMoMSkpO24rPXJIeChnLGxlbnNQb3NpdGlvbioxLjgsZ2hvc3RTY2FsZSoyLix2ZWMzKDAsLjUsLjc1KSk7bis9ckh4KGcsbGVuc1Bvc2l0aW9uKjEuMjUsZ2hvc3RTY2FsZSouOCx2ZWMzKDEsMSwuNSkpO24rPXJIeChnLC1sZW5zUG9zaXRpb24qMS4yNSxnaG9zdFNjYWxlKjUuLHZlYzMoLjUsLjUsLjI1KSk7bis9ZnBvdygxLi1hYnMoZGlzdGFuY2UobGVuc1Bvc2l0aW9uKi44LGcpLS43KSwuOTg1KSpjb2xvckdhaW4vMjEwMC47Zis9bjt9aWYoc3RhckJ1cnN0KXt2eHRDPWcrLjU7dmVjNCBuPWdlTEQoZyk7ZmxvYXQgbz0xLi1jbGFtcCgwLjUsMC4sLjUpKjIuO24rPW1peChuLHBvdyhuKjIuLHZlYzQoMikpKi41LG8pO2Zsb2F0IHM9KGcueCtnLnkpKigxLi82Lik7dmVjMiBkPW1hdDIoY29zKHMpLC1zaW4ocyksc2luKHMpLGNvcyhzKSkqdnh0QztuKz1nZUxTKGQpKjIuO2YrPWNsYW1wKG4ueHl6KnN0ckIoKS54eXosLjAxLDEuKTt9aT1lbmFibGVkP3ZlYzQobWl4KGYsdmVjMygwKSxvcGFjaXR5KSt2Lnh5eix2LncpOnZlYzQodik7fVxuYCxcbn07XG5cbmV4cG9ydCBjbGFzcyBMZW5zRmxhcmVFZmZlY3QgZXh0ZW5kcyBFZmZlY3Qge1xuXHRjb25zdHJ1Y3Rvcih7XG5cdFx0YmxlbmRGdW5jdGlvbiA9IEJsZW5kRnVuY3Rpb24uTk9STUFMLFxuXHRcdGVuYWJsZWQgPSB0cnVlLFxuXHRcdGdsYXJlU2l6ZSA9IDAuMixcblx0XHRsZW5zUG9zaXRpb24gPSBbMC4wMSwgMC4wMV0sXG5cdFx0aVJlc29sdXRpb24gPSBbMCwgMF0sXG5cdFx0c3RhclBvaW50cyA9IDYsXG5cdFx0ZmxhcmVTaXplID0gMC4wMSxcblx0XHRmbGFyZVNwZWVkID0gMC4wMSxcblx0XHRmbGFyZVNoYXBlID0gMC4wMSxcblx0XHRhbmltYXRlZCA9IHRydWUsXG5cdFx0YW5hbW9ycGhpYyA9IGZhbHNlLFxuXHRcdGNvbG9yR2FpbiA9IG5ldyBDb2xvcigyMCwgMjAsIDIwKSxcblx0XHRsZW5zRGlydFRleHR1cmUgPSBudWxsIGFzIFRleHR1cmUgfCBudWxsLFxuXHRcdGhhbG9TY2FsZSA9IDAuNSxcblx0XHRzZWNvbmRhcnlHaG9zdHMgPSB0cnVlLFxuXHRcdGFkaXRpb25hbFN0cmVha3MgPSB0cnVlLFxuXHRcdGdob3N0U2NhbGUgPSAwLjAsXG5cdFx0b3BhY2l0eSA9IDEuMCxcblx0XHRzdGFyQnVyc3QgPSBmYWxzZSxcblx0fSA9IHt9KSB7XG5cdFx0c3VwZXIoJ0xlbnNGbGFyZUVmZmVjdCcsIExlbnNGbGFyZVNoYWRlci5mcmFnbWVudFNoYWRlciwge1xuXHRcdFx0YmxlbmRGdW5jdGlvbixcblx0XHRcdHVuaWZvcm1zOiBuZXcgTWFwPHN0cmluZywgVW5pZm9ybT4oW1xuXHRcdFx0XHRbJ2VuYWJsZWQnLCBuZXcgVW5pZm9ybShlbmFibGVkKV0sXG5cdFx0XHRcdFsnZ2xhcmVTaXplJywgbmV3IFVuaWZvcm0oZ2xhcmVTaXplKV0sXG5cdFx0XHRcdFsnbGVuc1Bvc2l0aW9uJywgbmV3IFVuaWZvcm0obGVuc1Bvc2l0aW9uKV0sXG5cdFx0XHRcdFsnaVRpbWUnLCBuZXcgVW5pZm9ybSgwKV0sXG5cdFx0XHRcdFsnaVJlc29sdXRpb24nLCBuZXcgVW5pZm9ybShpUmVzb2x1dGlvbildLFxuXHRcdFx0XHRbJ3N0YXJQb2ludHMnLCBuZXcgVW5pZm9ybShzdGFyUG9pbnRzKV0sXG5cdFx0XHRcdFsnZmxhcmVTaXplJywgbmV3IFVuaWZvcm0oZmxhcmVTaXplKV0sXG5cdFx0XHRcdFsnZmxhcmVTcGVlZCcsIG5ldyBVbmlmb3JtKGZsYXJlU3BlZWQpXSxcblx0XHRcdFx0WydmbGFyZVNoYXBlJywgbmV3IFVuaWZvcm0oZmxhcmVTaGFwZSldLFxuXHRcdFx0XHRbJ2FuaW1hdGVkJywgbmV3IFVuaWZvcm0oYW5pbWF0ZWQpXSxcblx0XHRcdFx0WydhbmFtb3JwaGljJywgbmV3IFVuaWZvcm0oYW5hbW9ycGhpYyldLFxuXHRcdFx0XHRbJ2NvbG9yR2FpbicsIG5ldyBVbmlmb3JtKGNvbG9yR2FpbildLFxuXHRcdFx0XHRbJ2xlbnNEaXJ0VGV4dHVyZScsIG5ldyBVbmlmb3JtKGxlbnNEaXJ0VGV4dHVyZSldLFxuXHRcdFx0XHRbJ2hhbG9TY2FsZScsIG5ldyBVbmlmb3JtKGhhbG9TY2FsZSldLFxuXHRcdFx0XHRbJ3NlY29uZGFyeUdob3N0cycsIG5ldyBVbmlmb3JtKHNlY29uZGFyeUdob3N0cyldLFxuXHRcdFx0XHRbJ2FkaXRpb25hbFN0cmVha3MnLCBuZXcgVW5pZm9ybShhZGl0aW9uYWxTdHJlYWtzKV0sXG5cdFx0XHRcdFsnZ2hvc3RTY2FsZScsIG5ldyBVbmlmb3JtKGdob3N0U2NhbGUpXSxcblx0XHRcdFx0WydzdGFyQnVyc3QnLCBuZXcgVW5pZm9ybShzdGFyQnVyc3QpXSxcblx0XHRcdFx0WydvcGFjaXR5JywgbmV3IFVuaWZvcm0ob3BhY2l0eSldLFxuXHRcdFx0XSksXG5cdFx0fSk7XG5cdH1cblxuXHRvdmVycmlkZSB1cGRhdGUoX3JlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBfaW5wdXRCdWZmZXI6IFdlYkdMUmVuZGVyVGFyZ2V0LCBkZWx0YVRpbWU6IG51bWJlcikge1xuXHRcdGNvbnN0IGlUaW1lID0gdGhpcy51bmlmb3Jtcy5nZXQoJ2lUaW1lJyk7XG5cdFx0aWYgKGlUaW1lKSB7XG5cdFx0XHRpVGltZS52YWx1ZSArPSBkZWx0YVRpbWU7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCB0eXBlIExlbnNGbGFyZU9wdGlvbnMgPSBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8dHlwZW9mIExlbnNGbGFyZUVmZmVjdD5bMF0gJiB7XG5cdHBvc2l0aW9uOiBWZWN0b3IzO1xuXHRmb2xsb3dNb3VzZTogYm9vbGVhbjtcblx0c21vb3RoVGltZTogbnVtYmVyO1xufTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IExlbnNGbGFyZU9wdGlvbnMgPSB7XG5cdHBvc2l0aW9uOiBuZXcgVmVjdG9yMygtMjUsIDYsIC02MCksXG5cdGZvbGxvd01vdXNlOiBmYWxzZSxcblx0c21vb3RoVGltZTogMC43LFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cC1sZW5zLWZsYXJlJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXByaW1pdGl2ZSAqYXJncz1cIltlZmZlY3QoKV1cIiBbcGFyYW1ldGVyc109XCJ7IGRpc3Bvc2U6IG51bGwgfVwiIC8+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cExlbnNGbGFyZSB7XG5cdG9wdGlvbnMgPSBpbnB1dChkZWZhdWx0T3B0aW9ucywgeyB0cmFuc2Zvcm06IG1lcmdlSW5wdXRzKGRlZmF1bHRPcHRpb25zKSB9KTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSB2aWV3cG9ydCA9IHRoaXMuc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcpO1xuXHRwcml2YXRlIHJheWNhc3RlciA9IHRoaXMuc3RvcmUuc2VsZWN0KCdyYXljYXN0ZXInKTtcblx0cHJpdmF0ZSBwb2ludGVyID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3BvaW50ZXInKTtcblxuXHRwcml2YXRlIGVmZmVjdENvbXBvc2VyID0gaW5qZWN0KE5ndHBFZmZlY3RDb21wb3Nlcik7XG5cblx0cHJpdmF0ZSBwcm9qZWN0ZWRQb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cdHByaXZhdGUgbW91c2UyZCA9IG5ldyBWZWN0b3IyKCk7XG5cblx0ZWZmZWN0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHsgcG9zaXRpb246IF8sIGZvbGxvd01vdXNlOiBfXywgc21vb3RoVGltZTogX19fLCAuLi5vcHRpb25zIH0gPSB0aGlzLm9wdGlvbnMoKTtcblx0XHRyZXR1cm4gbmV3IExlbnNGbGFyZUVmZmVjdChvcHRpb25zKTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtsZW5zRmxhcmVFZmZlY3QsIHZpZXdwb3J0XSA9IFt0aGlzLmVmZmVjdCgpLCB0aGlzLnZpZXdwb3J0KCldO1xuXHRcdFx0Y29uc3QgaVJlc29sdXRpb24gPSBsZW5zRmxhcmVFZmZlY3QudW5pZm9ybXMuZ2V0KCdpUmVzb2x1dGlvbicpO1xuXHRcdFx0aWYgKGlSZXNvbHV0aW9uKSB7XG5cdFx0XHRcdGlSZXNvbHV0aW9uLnZhbHVlLnggPSB2aWV3cG9ydC53aWR0aDtcblx0XHRcdFx0aVJlc29sdXRpb24udmFsdWUueSA9IHZpZXdwb3J0LmhlaWdodDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoeyBkZWx0YSB9KSA9PiB7XG5cdFx0XHRjb25zdCBbZWZmZWN0XSA9IFt0aGlzLmVmZmVjdCgpXTtcblx0XHRcdGlmICghZWZmZWN0KSByZXR1cm47XG5cblx0XHRcdGNvbnN0IFt7IGZvbGxvd01vdXNlLCBwb3NpdGlvbiwgc21vb3RoVGltZSB9LCBwb2ludGVyLCBjYW1lcmEsIHNjZW5lLCByYXljYXN0ZXJdID0gW1xuXHRcdFx0XHR0aGlzLm9wdGlvbnMoKSxcblx0XHRcdFx0dGhpcy5wb2ludGVyKCksXG5cdFx0XHRcdHRoaXMuZWZmZWN0Q29tcG9zZXIuY2FtZXJhKCksXG5cdFx0XHRcdHRoaXMuZWZmZWN0Q29tcG9zZXIuc2NlbmUoKSxcblx0XHRcdFx0dGhpcy5yYXljYXN0ZXIoKSxcblx0XHRcdF07XG5cblx0XHRcdGNvbnN0IHVMZW5zUG9zaXRpb24gPSBlZmZlY3QudW5pZm9ybXMuZ2V0KCdsZW5zUG9zaXRpb24nKTtcblx0XHRcdGNvbnN0IHVPcGFjaXR5ID0gZWZmZWN0LnVuaWZvcm1zLmdldCgnb3BhY2l0eScpO1xuXHRcdFx0aWYgKCF1TGVuc1Bvc2l0aW9uIHx8ICF1T3BhY2l0eSkgcmV0dXJuO1xuXG5cdFx0XHRsZXQgdGFyZ2V0ID0gMTtcblxuXHRcdFx0aWYgKGZvbGxvd01vdXNlKSB7XG5cdFx0XHRcdHVMZW5zUG9zaXRpb24udmFsdWUueCA9IHBvaW50ZXIueDtcblx0XHRcdFx0dUxlbnNQb3NpdGlvbi52YWx1ZS55ID0gcG9pbnRlci55O1xuXHRcdFx0XHR0YXJnZXQgPSAwO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5wcm9qZWN0ZWRQb3NpdGlvbi5jb3B5KHBvc2l0aW9uKS5wcm9qZWN0KGNhbWVyYSk7XG5cdFx0XHRcdGlmICh0aGlzLnByb2plY3RlZFBvc2l0aW9uLnogPiAxKSByZXR1cm47XG5cblx0XHRcdFx0dUxlbnNQb3NpdGlvbi52YWx1ZS54ID0gdGhpcy5wcm9qZWN0ZWRQb3NpdGlvbi54O1xuXHRcdFx0XHR1TGVuc1Bvc2l0aW9uLnZhbHVlLnkgPSB0aGlzLnByb2plY3RlZFBvc2l0aW9uLnk7XG5cblx0XHRcdFx0dGhpcy5tb3VzZTJkLnNldCh0aGlzLnByb2plY3RlZFBvc2l0aW9uLngsIHRoaXMucHJvamVjdGVkUG9zaXRpb24ueSk7XG5cdFx0XHRcdHJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHRoaXMubW91c2UyZCwgY2FtZXJhKTtcblx0XHRcdFx0Y29uc3QgaW50ZXJzZWN0cyA9IHJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3RzKHNjZW5lLmNoaWxkcmVuLCB0cnVlKTtcblx0XHRcdFx0Y29uc3QgeyBvYmplY3QgfSA9IGludGVyc2VjdHNbMF0gPz8ge307XG5cdFx0XHRcdGlmIChvYmplY3QpIHtcblx0XHRcdFx0XHRpZiAob2JqZWN0LnVzZXJEYXRhPy5bJ2xlbnNmbGFyZSddID09PSAnbm8tb2NjbHVzaW9uJykge1xuXHRcdFx0XHRcdFx0dGFyZ2V0ID0gMDtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIE1lc2gpIHtcblx0XHRcdFx0XHRcdGlmIChvYmplY3QubWF0ZXJpYWwudW5pZm9ybXM/Ll90cmFuc21pc3Npb24/LnZhbHVlID4gMC4yKSB7XG5cdFx0XHRcdFx0XHRcdC8vQ2hlY2sgZm9yIE1lc2hUcmFuc21pc3Npb25NYXRlcmlhbFxuXHRcdFx0XHRcdFx0XHR0YXJnZXQgPSAwLjI7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG9iamVjdC5tYXRlcmlhbC5fdHJhbnNtaXNzaW9uICYmIG9iamVjdC5tYXRlcmlhbC5fdHJhbnNtaXNzaW9uID4gMC4yKSB7XG5cdFx0XHRcdFx0XHRcdC8vQ2hlY2sgZm9yIE1lc2hQaHlzaWNhbE1hdGVyaWFsIHdpdGggdHJhbnNtaXNzaW9uIHNldHRpbmdcblx0XHRcdFx0XHRcdFx0dGFyZ2V0ID0gMC4yO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChvYmplY3QubWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgZm9yIE90aGVyTWF0ZXJpYWxzIHdpdGggdHJhbnNwYXJlbnQgcGFyYW1ldGVyXG5cdFx0XHRcdFx0XHRcdHRhcmdldCA9IG9iamVjdC5tYXRlcmlhbC5vcGFjaXR5O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRlYXNpbmcuZGFtcCh1T3BhY2l0eSwgJ3ZhbHVlJywgdGFyZ2V0LCBzbW9vdGhUaW1lLCBkZWx0YSk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,40 +1,36 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, afterNextRender, computed, input, } from '@angular/core';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, computed, effect, input } from '@angular/core';
2
2
  import { NgtArgs, injectStore, pick } from 'angular-three';
3
- import { injectAutoEffect } from 'ngxtension/auto-effect';
4
3
  import { LUT3DEffect } from 'postprocessing';
5
4
  import * as i0 from "@angular/core";
6
5
  export class NgtpLUT {
7
6
  constructor() {
8
- this.autoEffect = injectAutoEffect();
9
- this.store = injectStore();
10
- this.invalidate = this.store.select('invalidate');
11
7
  this.options = input({});
12
8
  this.lut = pick(this.options, 'lut');
9
+ this.store = injectStore();
10
+ this.invalidate = this.store.select('invalidate');
13
11
  this.effect = computed(() => {
14
12
  const [lut, { lut: _, ...options }] = [this.lut(), this.options()];
15
13
  return new LUT3DEffect(lut, options);
16
14
  });
17
- afterNextRender(() => {
18
- this.autoEffect(() => {
19
- const [effect, { lut, tetrahedralInterpolation }, invalidate] = [
20
- this.effect(),
21
- this.options(),
22
- this.invalidate(),
23
- ];
24
- if (tetrahedralInterpolation)
25
- effect.tetrahedralInterpolation = tetrahedralInterpolation;
26
- if (lut)
27
- effect.lut = lut;
28
- invalidate();
29
- });
15
+ effect(() => {
16
+ const [effect, { lut, tetrahedralInterpolation }, invalidate] = [
17
+ this.effect(),
18
+ this.options(),
19
+ this.invalidate(),
20
+ ];
21
+ if (tetrahedralInterpolation)
22
+ effect.tetrahedralInterpolation = tetrahedralInterpolation;
23
+ if (lut)
24
+ effect.lut = lut;
25
+ invalidate();
30
26
  });
31
27
  }
32
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpLUT, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
33
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtpLUT, isStandalone: true, selector: "ngtp-lut", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpLUT, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
29
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtpLUT, isStandalone: true, selector: "ngtp-lut", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: `
34
30
  <ngt-primitive *args="[effect()]" [dispose]="null" />
35
31
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
36
32
  }
37
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpLUT, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpLUT, decorators: [{
38
34
  type: Component,
39
35
  args: [{
40
36
  selector: 'ngtp-lut',
@@ -47,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImpor
47
43
  changeDetection: ChangeDetectionStrategy.OnPush,
48
44
  }]
49
45
  }], ctorParameters: () => [] });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdHMvbHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTixzQkFBc0IsRUFDdEIsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsUUFBUSxFQUNSLEtBQUssR0FDTCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFpQixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFtQjVELE1BQU0sT0FBTyxPQUFPO0lBYW5CO1FBWlEsZUFBVSxHQUFHLGdCQUFnQixFQUFFLENBQUM7UUFDaEMsVUFBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQ3RCLGVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUVyRCxZQUFPLEdBQUcsS0FBSyxDQUFDLEVBQWdCLENBQUMsQ0FBQztRQUMxQixRQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEMsV0FBTSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDdEIsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sSUFBSSxXQUFXLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBR0YsZUFBZSxDQUFDLEdBQUcsRUFBRTtZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDcEIsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSx3QkFBd0IsRUFBRSxFQUFFLFVBQVUsQ0FBQyxHQUFHO29CQUMvRCxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNiLElBQUksQ0FBQyxPQUFPLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRTtpQkFDakIsQ0FBQztnQkFFRixJQUFJLHdCQUF3QjtvQkFBRSxNQUFNLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7Z0JBQ3pGLElBQUksR0FBRztvQkFBRSxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztnQkFDMUIsVUFBVSxFQUFFLENBQUM7WUFDZCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0EzQlcsT0FBTztrR0FBUCxPQUFPLDhNQVJUOztFQUVULDREQUNTLE9BQU87OzJGQUtMLE9BQU87a0JBVm5CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUM7b0JBQ2xCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aW5wdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncywgaW5qZWN0U3RvcmUsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IEJsZW5kRnVuY3Rpb24sIExVVDNERWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBMVVRPcHRpb25zIHtcblx0bHV0OiBUZXh0dXJlO1xuXHRibGVuZEZ1bmN0aW9uPzogQmxlbmRGdW5jdGlvbjtcblx0dGV0cmFoZWRyYWxJbnRlcnBvbGF0aW9uPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cC1sdXQnLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2VmZmVjdCgpXVwiIFtkaXNwb3NlXT1cIm51bGxcIiAvPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBMVVQge1xuXHRwcml2YXRlIGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3RTdG9yZSgpO1xuXHRwcml2YXRlIGludmFsaWRhdGUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnaW52YWxpZGF0ZScpO1xuXG5cdG9wdGlvbnMgPSBpbnB1dCh7fSBhcyBMVVRPcHRpb25zKTtcblx0cHJpdmF0ZSBsdXQgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2x1dCcpO1xuXG5cdGVmZmVjdCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCBbbHV0LCB7IGx1dDogXywgLi4ub3B0aW9ucyB9XSA9IFt0aGlzLmx1dCgpLCB0aGlzLm9wdGlvbnMoKV07XG5cdFx0cmV0dXJuIG5ldyBMVVQzREVmZmVjdChsdXQsIG9wdGlvbnMpO1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdFx0Y29uc3QgW2VmZmVjdCwgeyBsdXQsIHRldHJhaGVkcmFsSW50ZXJwb2xhdGlvbiB9LCBpbnZhbGlkYXRlXSA9IFtcblx0XHRcdFx0XHR0aGlzLmVmZmVjdCgpLFxuXHRcdFx0XHRcdHRoaXMub3B0aW9ucygpLFxuXHRcdFx0XHRcdHRoaXMuaW52YWxpZGF0ZSgpLFxuXHRcdFx0XHRdO1xuXG5cdFx0XHRcdGlmICh0ZXRyYWhlZHJhbEludGVycG9sYXRpb24pIGVmZmVjdC50ZXRyYWhlZHJhbEludGVycG9sYXRpb24gPSB0ZXRyYWhlZHJhbEludGVycG9sYXRpb247XG5cdFx0XHRcdGlmIChsdXQpIGVmZmVjdC5sdXQgPSBsdXQ7XG5cdFx0XHRcdGludmFsaWRhdGUoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHV0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdHMvbHV0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBaUIsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBbUI1RCxNQUFNLE9BQU8sT0FBTztJQVluQjtRQVhBLFlBQU8sR0FBRyxLQUFLLENBQUMsRUFBZ0IsQ0FBQyxDQUFDO1FBQzFCLFFBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVoQyxVQUFLLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDdEIsZUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXJELFdBQU0sR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3RCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNuRSxPQUFPLElBQUksV0FBVyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FBQztRQUdGLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDWCxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUUsR0FBRyxFQUFFLHdCQUF3QixFQUFFLEVBQUUsVUFBVSxDQUFDLEdBQUc7Z0JBQy9ELElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDZCxJQUFJLENBQUMsVUFBVSxFQUFFO2FBQ2pCLENBQUM7WUFFRixJQUFJLHdCQUF3QjtnQkFBRSxNQUFNLENBQUMsd0JBQXdCLEdBQUcsd0JBQXdCLENBQUM7WUFDekYsSUFBSSxHQUFHO2dCQUFFLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO1lBQzFCLFVBQVUsRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOzhHQXhCVyxPQUFPO2tHQUFQLE9BQU8sOE1BUlQ7O0VBRVQsNERBQ1MsT0FBTzs7MkZBS0wsT0FBTztrQkFWbkIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsUUFBUSxFQUFFOztFQUVUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncywgaW5qZWN0U3RvcmUsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEJsZW5kRnVuY3Rpb24sIExVVDNERWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuaW1wb3J0IHsgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBMVVRPcHRpb25zIHtcblx0bHV0OiBUZXh0dXJlO1xuXHRibGVuZEZ1bmN0aW9uPzogQmxlbmRGdW5jdGlvbjtcblx0dGV0cmFoZWRyYWxJbnRlcnBvbGF0aW9uPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cC1sdXQnLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW2VmZmVjdCgpXVwiIFtkaXNwb3NlXT1cIm51bGxcIiAvPlxuXHRgLFxuXHRpbXBvcnRzOiBbTmd0QXJnc10sXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBMVVQge1xuXHRvcHRpb25zID0gaW5wdXQoe30gYXMgTFVUT3B0aW9ucyk7XG5cdHByaXZhdGUgbHV0ID0gcGljayh0aGlzLm9wdGlvbnMsICdsdXQnKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBpbnZhbGlkYXRlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2ludmFsaWRhdGUnKTtcblxuXHRlZmZlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW2x1dCwgeyBsdXQ6IF8sIC4uLm9wdGlvbnMgfV0gPSBbdGhpcy5sdXQoKSwgdGhpcy5vcHRpb25zKCldO1xuXHRcdHJldHVybiBuZXcgTFVUM0RFZmZlY3QobHV0LCBvcHRpb25zKTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtlZmZlY3QsIHsgbHV0LCB0ZXRyYWhlZHJhbEludGVycG9sYXRpb24gfSwgaW52YWxpZGF0ZV0gPSBbXG5cdFx0XHRcdHRoaXMuZWZmZWN0KCksXG5cdFx0XHRcdHRoaXMub3B0aW9ucygpLFxuXHRcdFx0XHR0aGlzLmludmFsaWRhdGUoKSxcblx0XHRcdF07XG5cblx0XHRcdGlmICh0ZXRyYWhlZHJhbEludGVycG9sYXRpb24pIGVmZmVjdC50ZXRyYWhlZHJhbEludGVycG9sYXRpb24gPSB0ZXRyYWhlZHJhbEludGVycG9sYXRpb247XG5cdFx0XHRpZiAobHV0KSBlZmZlY3QubHV0ID0gbHV0O1xuXHRcdFx0aW52YWxpZGF0ZSgpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
@@ -10,15 +10,15 @@ export class NgtpNoise {
10
10
  this.effect = inject(NgtpEffect, { host: true });
11
11
  this.options = input({});
12
12
  }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpNoise, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.0", type: NgtpNoise, isStandalone: true, selector: "ngtp-noise", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.COLOR_DODGE })], hostDirectives: [{ directive: i1.NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpNoise, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.4", type: NgtpNoise, isStandalone: true, selector: "ngtp-noise", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideDefaultEffectOptions({ blendFunction: BlendFunction.COLOR_DODGE })], hostDirectives: [{ directive: i1.NgtpEffect, inputs: ["blendFunction", "blendFunction", "opacity", "opacity"] }], ngImport: i0, template: `
15
15
  <ngt-noise-effect *args="[options()]" [camera]="effect.camera()">
16
16
  <ngtp-effect-blend-mode />
17
17
  <ng-content />
18
18
  </ngt-noise-effect>
19
19
  `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "ng-template[args]", inputs: ["args"] }, { kind: "component", type: NgtpEffectBlendMode, selector: "ngtp-effect-blend-mode" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
20
20
  }
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtpNoise, decorators: [{
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.4", ngImport: i0, type: NgtpNoise, decorators: [{
22
22
  type: Component,
23
23
  args: [{
24
24
  selector: 'ngtp-noise',