@wolsok/thanos 16.0.1 → 17.0.15

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 (54) hide show
  1. package/CHANGELOG.md +59 -0
  2. package/README.md +52 -0
  3. package/eslint.config.mjs +64 -0
  4. package/jest.config.ts +23 -0
  5. package/ng-package.json +8 -0
  6. package/package.json +10 -23
  7. package/project.json +40 -0
  8. package/src/assets/how-to-be-funny.png.ts +4 -0
  9. package/{index.d.ts → src/index.ts} +4 -2
  10. package/src/lib/animation.state.ts +6 -0
  11. package/src/lib/create-ws-thanos-options.ts +12 -0
  12. package/src/lib/random-util.ts +24 -0
  13. package/src/lib/simplex-noise-options.ts +9 -0
  14. package/src/lib/simplex-noise.ts +240 -0
  15. package/src/lib/ws-thanos-options.token.spec.ts +19 -0
  16. package/src/lib/ws-thanos-options.token.ts +20 -0
  17. package/src/lib/ws-thanos.directive.spec.ts +175 -0
  18. package/src/lib/ws-thanos.directive.ts +70 -0
  19. package/src/lib/ws-thanos.options.ts +5 -0
  20. package/src/lib/ws-thanos.service.spec.ts +9 -0
  21. package/src/lib/ws-thanos.service.ts +387 -0
  22. package/src/test-setup.ts +9 -0
  23. package/tsconfig.json +32 -0
  24. package/tsconfig.lib.json +15 -0
  25. package/tsconfig.lib.prod.json +10 -0
  26. package/tsconfig.spec.json +10 -0
  27. package/esm2022/index.mjs +0 -10
  28. package/esm2022/lib/animation.state.mjs +0 -2
  29. package/esm2022/lib/create-ws-thanos-options.mjs +0 -9
  30. package/esm2022/lib/simplex-noise-options.mjs +0 -2
  31. package/esm2022/lib/simplex-noise.mjs +0 -194
  32. package/esm2022/lib/ws-thanos-options.token.mjs +0 -13
  33. package/esm2022/lib/ws-thanos.directive.mjs +0 -76
  34. package/esm2022/lib/ws-thanos.options.mjs +0 -2
  35. package/esm2022/lib/ws-thanos.service.mjs +0 -253
  36. package/esm2022/wolsok-thanos.mjs +0 -5
  37. package/index.d.ts.map +0 -1
  38. package/lib/animation.state.d.ts +0 -7
  39. package/lib/animation.state.d.ts.map +0 -1
  40. package/lib/create-ws-thanos-options.d.ts +0 -3
  41. package/lib/create-ws-thanos-options.d.ts.map +0 -1
  42. package/lib/simplex-noise-options.d.ts +0 -10
  43. package/lib/simplex-noise-options.d.ts.map +0 -1
  44. package/lib/simplex-noise.d.ts +0 -19
  45. package/lib/simplex-noise.d.ts.map +0 -1
  46. package/lib/ws-thanos-options.token.d.ts +0 -5
  47. package/lib/ws-thanos-options.token.d.ts.map +0 -1
  48. package/lib/ws-thanos.directive.d.ts +0 -36
  49. package/lib/ws-thanos.directive.d.ts.map +0 -1
  50. package/lib/ws-thanos.options.d.ts +0 -6
  51. package/lib/ws-thanos.options.d.ts.map +0 -1
  52. package/lib/ws-thanos.service.d.ts +0 -27
  53. package/lib/ws-thanos.service.d.ts.map +0 -1
  54. package/wolsok-thanos.d.ts.map +0 -1
@@ -1,253 +0,0 @@
1
- import { Inject, Injectable, NgZone } from '@angular/core';
2
- import { default as html2canvas } from 'html2canvas';
3
- import { animationFrameScheduler, finalize, from, interval, map, switchMap, takeWhile, tap, timeInterval, } from 'rxjs';
4
- import { SimplexNoise } from './simplex-noise';
5
- import { WS_THANOS_OPTIONS_TOKEN } from './ws-thanos-options.token';
6
- import * as i0 from "@angular/core";
7
- const PARTICLE_BYTE_LENGTH = 10;
8
- const MIN_PARTICLE_ALPHA = ~~(255 * 0.01);
9
- const HEIGHT_SCALE = 5;
10
- const WIDTH_SCALE = 2;
11
- const FLOW_FIELD_RES = 0.05;
12
- class WsThanosService {
13
- thanosOptions;
14
- ngZone;
15
- constructor(thanosOptions, ngZone) {
16
- this.thanosOptions = thanosOptions;
17
- this.ngZone = ngZone;
18
- }
19
- static getParticleIndicesForBase(base) {
20
- return {
21
- x: base,
22
- y: base + 1,
23
- dx: base + 2,
24
- dy: base + 3,
25
- ax: base + 4,
26
- ay: base + 5,
27
- r: base + 6,
28
- g: base + 7,
29
- b: base + 8,
30
- a: base + 9,
31
- };
32
- }
33
- static getColorIndicesForCoord(x, y, width) {
34
- const red = y * (width * 4) + x * 4;
35
- return { r: red, g: red + 1, b: red + 2, a: red + 3 };
36
- }
37
- static updateParticles({ seed, noise, particlesData, thanosOptions, animationState, }) {
38
- const { deltaTSec, animationT, maxWidth, maxHeight } = animationState;
39
- const { particleAcceleration } = thanosOptions;
40
- const { particles, maxParticleX, minParticleY } = particlesData;
41
- // the time is used to calculate the vaporization front.
42
- const time = Math.sin(animationT * (Math.PI / 2)) * 1.1;
43
- const startAccelerateX = maxParticleX - time * maxParticleX;
44
- const startAccelerateY = time * (maxHeight - minParticleY) + minParticleY;
45
- const lengthY = maxHeight - startAccelerateY;
46
- const accelerateRadiusPow = startAccelerateX * startAccelerateX + lengthY * lengthY;
47
- for (let i = 0; i < particles.length; i += PARTICLE_BYTE_LENGTH) {
48
- const { x, y, dx, dy, ax, ay, a } = WsThanosService.getParticleIndicesForBase(i);
49
- const particleX = particles[x];
50
- const particleY = particles[y];
51
- // only update particles that are inside view and visible
52
- if (particleX > maxWidth ||
53
- particleX < 0 ||
54
- particleY > maxHeight ||
55
- particleY < 0 ||
56
- particles[a] < MIN_PARTICLE_ALPHA) {
57
- continue;
58
- }
59
- if (!(Math.abs(particles[ax]) > 0 || Math.abs(particles[ay]) > 0)) {
60
- let pYLength = maxHeight - particleY;
61
- let pXLength = particleX;
62
- // we calculate some random looking numbers and functions to have nice looking vaporizing front of particles
63
- // todo consider to use noise;
64
- pXLength += Math.tan((pXLength / 20.12) * time + seed) * 0.5;
65
- pXLength += (particleX % deltaTSec) * 0.5;
66
- pXLength += Math.sin((pXLength / 30 + 723.394) * time + seed * 12.5) * 11;
67
- pYLength += Math.tan((pYLength / 0.45) * time + seed * 1.5) * 0.5;
68
- pYLength += Math.cos((pYLength / 100 + 2323.234) * time + seed * 456.1) * 23;
69
- const pLength = pXLength * pXLength + pYLength * pYLength;
70
- if (pLength > accelerateRadiusPow) {
71
- particles[ax] = Math.random();
72
- particles[ay] = Math.random() * -1;
73
- }
74
- }
75
- else {
76
- // use noise to flow along velocity field
77
- const flowFieldAcc = WsThanosService.getXYFromFlowField(noise, seed, particleX, particleY);
78
- const accelerationX = flowFieldAcc[0];
79
- const accelerationY = flowFieldAcc[1];
80
- particles[ax] += accelerationX;
81
- particles[ay] += accelerationY;
82
- }
83
- // * Math.pow(1 + animationT, 4)
84
- particles[dx] += particles[ax] * particleAcceleration * deltaTSec;
85
- particles[dy] += particles[ay] * particleAcceleration * deltaTSec;
86
- particles[x] += particles[dx] * deltaTSec;
87
- particles[y] += particles[dy] * deltaTSec;
88
- // fade particle out ( very late);
89
- particles[a] *= 1 - Math.pow(animationT, 15); // 255 - Math.sqrt(particles[dx] * particles[dx] + particles[dy] * particles[dy]) / 1.2;
90
- }
91
- }
92
- static drawParticles(drawCtx, particles) {
93
- const { width, height } = drawCtx.canvas;
94
- drawCtx.clearRect(0, 0, width, height);
95
- const image = drawCtx.getImageData(0, 0, width, height);
96
- const imageData = image.data;
97
- for (let i = 0; i < particles.length; i += PARTICLE_BYTE_LENGTH) {
98
- const particleX = particles[i];
99
- const particleY = particles[i + 1];
100
- const pI = WsThanosService.getParticleIndicesForBase(i);
101
- if (particleX > width ||
102
- particleX < 0 ||
103
- particleY > height ||
104
- particleY < 0 ||
105
- particles[pI.a] < MIN_PARTICLE_ALPHA) {
106
- continue;
107
- }
108
- const { r, g, b, a } = WsThanosService.getColorIndicesForCoord(~~particles[pI.x], ~~particles[pI.y], width);
109
- imageData[r] = ~~particles[pI.r];
110
- imageData[g] = ~~particles[pI.g];
111
- imageData[b] = ~~particles[pI.b];
112
- imageData[a] = ~~particles[pI.a];
113
- }
114
- drawCtx.putImageData(image, 0, 0);
115
- }
116
- static prepareCanvasForVaporize(divCanvas, maxParticleCount) {
117
- const { width, height } = divCanvas;
118
- // scale result canvas to have more room to draw particles while vaporizing;
119
- const resultHeight = height * HEIGHT_SCALE;
120
- const resultWidth = width * WIDTH_SCALE;
121
- const resultCanvas = document.createElement('canvas');
122
- resultCanvas.height = resultHeight;
123
- resultCanvas.width = resultWidth;
124
- const imageData = divCanvas.getContext('2d')?.getImageData(0, 0, width, height);
125
- if (imageData == null) {
126
- throw new Error('Could not get image data from canvas');
127
- }
128
- const particlesData = WsThanosService.createParticlesForImageData(imageData, maxParticleCount, resultHeight);
129
- return { resultCanvas, particlesData };
130
- }
131
- static createParticlesForImageData(imageData, maxParticleCount, resultHeight) {
132
- const { width, height } = imageData;
133
- let particleCandidates = 0;
134
- let particleCount = 0;
135
- const particleCandiatesList = [];
136
- for (let y = 0; y < height; y++) {
137
- for (let x = 0; x < width; x++) {
138
- const { a } = WsThanosService.getColorIndicesForCoord(x, y, width);
139
- if (imageData.data[a] >= MIN_PARTICLE_ALPHA) {
140
- particleCandidates++;
141
- particleCandiatesList.push({ x, y });
142
- }
143
- }
144
- }
145
- const maxNumParticles = Math.min(particleCandidates, maxParticleCount);
146
- const particles = new Float32Array(Float32Array.BYTES_PER_ELEMENT * maxNumParticles * PARTICLE_BYTE_LENGTH);
147
- let maxParticleX = 0;
148
- let minParticleY = resultHeight;
149
- while (particleCount < maxNumParticles) {
150
- // select random index from candiates
151
- const index = ~~(Math.random() * particleCandiatesList.length);
152
- const { x, y } = particleCandiatesList[index];
153
- // overwrite index with last element to prevent double selection of particles
154
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
155
- particleCandiatesList[index] = particleCandiatesList.pop();
156
- maxParticleX = Math.max(maxParticleX, x);
157
- minParticleY = Math.min(minParticleY, y);
158
- const { dx, dy, ax, ay, r, g, b, a, ...xy } = WsThanosService.getParticleIndicesForBase(particleCount * PARTICLE_BYTE_LENGTH);
159
- particles[xy.x] = x;
160
- particles[xy.y] = y + resultHeight - height;
161
- particles[dx] = 0;
162
- particles[dy] = 0;
163
- particles[ax] = 0;
164
- particles[ay] = 0;
165
- const indicesImage = WsThanosService.getColorIndicesForCoord(x, y, width);
166
- particles[r] = imageData.data[indicesImage.r];
167
- particles[g] = imageData.data[indicesImage.g];
168
- particles[b] = imageData.data[indicesImage.b];
169
- particles[a] = imageData.data[indicesImage.a];
170
- particleCount++;
171
- }
172
- return { particles, maxParticleX, minParticleY };
173
- }
174
- static getXYFromFlowField(noise, seed, x, y) {
175
- const sampleX = noise.scaled3D(x, y, seed + 33.23, FLOW_FIELD_RES);
176
- const sampleY = noise.scaled3D(x, seed / 13.23, y, FLOW_FIELD_RES) * -1;
177
- return [sampleX, sampleY];
178
- }
179
- /**
180
- * start the vaporizeAndScrollIntoView-effect.
181
- *
182
- * It's running outside the ngZone.
183
- */
184
- vaporize(elem) {
185
- return this.ngZone.runOutsideAngular(() => this.vaporizeIntern(elem));
186
- }
187
- vaporizeIntern(elem) {
188
- elem.style.opacity = elem.style.opacity || '1';
189
- elem.style.transition = `opacity ${Math.floor(this.thanosOptions.animationLength * 0.8)}ms ease-out`;
190
- const noise = new SimplexNoise({ frequency: 0.01, min: 0 });
191
- const seed = new Date().getDate() * Math.random();
192
- const html2CanvasPromise = html2canvas(elem, {
193
- backgroundColor: null,
194
- scale: 1,
195
- allowTaint: true,
196
- windowHeight: window.innerHeight,
197
- windowWidth: window.innerWidth,
198
- scrollY: -window.scrollY,
199
- });
200
- return from(html2CanvasPromise).pipe(map((canvasFromHtmlElem) => {
201
- const canvasAndParticles = WsThanosService.prepareCanvasForVaporize(canvasFromHtmlElem, this.thanosOptions.maxParticleCount);
202
- const { resultCanvas } = canvasAndParticles;
203
- if (elem.parentElement) {
204
- elem.parentElement.style.position = elem.parentElement.style.position || 'relative';
205
- }
206
- resultCanvas.style.position = 'absolute';
207
- resultCanvas.style.left = 0 + 'px';
208
- resultCanvas.style.top = '-' + elem.getBoundingClientRect().height * (HEIGHT_SCALE - 1) + 'px';
209
- resultCanvas.style.zIndex = '2000';
210
- resultCanvas.style.pointerEvents = 'none';
211
- elem.insertAdjacentElement('beforebegin', resultCanvas);
212
- // this should start the transition above defined
213
- elem.style.opacity = '0';
214
- return canvasAndParticles;
215
- }), switchMap(({ resultCanvas, particlesData }) => {
216
- let time = 0;
217
- const { animationLength, maxParticleCount, particleAcceleration } = this.thanosOptions;
218
- return interval(1000 / 60, animationFrameScheduler).pipe(timeInterval(), tap((deltaT) => (time += deltaT.interval)), map((deltaT) => ({
219
- deltaTSec: deltaT.interval / 1000,
220
- animationT: time / animationLength,
221
- maxWidth: resultCanvas.width,
222
- maxHeight: resultCanvas.height,
223
- })), tap((animationState) => {
224
- WsThanosService.updateParticles({
225
- particlesData,
226
- animationState,
227
- thanosOptions: {
228
- animationLength,
229
- maxParticleCount,
230
- particleAcceleration,
231
- },
232
- noise,
233
- seed,
234
- });
235
- const context = resultCanvas.getContext('2d');
236
- if (context) {
237
- WsThanosService.drawParticles(context, particlesData.particles);
238
- }
239
- }), takeWhile((animationState) => animationState.animationT <= 1), finalize(() => resultCanvas.remove()));
240
- }));
241
- }
242
- static ɵfac = function WsThanosService_Factory(t) { return new (t || WsThanosService)(i0.ɵɵinject(WS_THANOS_OPTIONS_TOKEN), i0.ɵɵinject(i0.NgZone)); };
243
- static ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: WsThanosService, factory: WsThanosService.ɵfac, providedIn: 'root' });
244
- }
245
- export { WsThanosService };
246
- (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WsThanosService, [{
247
- type: Injectable,
248
- args: [{ providedIn: 'root' }]
249
- }], function () { return [{ type: undefined, decorators: [{
250
- type: Inject,
251
- args: [WS_THANOS_OPTIONS_TOKEN]
252
- }] }, { type: i0.NgZone }]; }, null); })();
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3MtdGhhbm9zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3B1YmxpYy93cy10aGFub3Mvc3JjL2xpYi93cy10aGFub3Muc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0QsT0FBTyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDckQsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixRQUFRLEVBQ1IsSUFBSSxFQUNKLFFBQVEsRUFDUixHQUFHLEVBRUgsU0FBUyxFQUNULFNBQVMsRUFDVCxHQUFHLEVBQ0gsWUFBWSxHQUNiLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUdwRSxNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztBQUNoQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMxQyxNQUFNLFlBQVksR0FBRyxDQUFDLENBQUM7QUFDdkIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQztBQTZCNUIsTUFDYSxlQUFlO0lBR2hCO0lBQ0E7SUFIVixZQUVVLGFBQThCLEVBQzlCLE1BQWM7UUFEZCxrQkFBYSxHQUFiLGFBQWEsQ0FBaUI7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUNyQixDQUFDO0lBRUksTUFBTSxDQUFDLHlCQUF5QixDQUFDLElBQVk7UUFDbkQsT0FBTztZQUNMLENBQUMsRUFBRSxJQUFJO1lBQ1AsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1gsRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1osRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1osRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1osRUFBRSxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1osQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1gsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1gsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDO1lBQ1gsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDO1NBQ1osQ0FBQztJQUNKLENBQUM7SUFFTyxNQUFNLENBQUMsdUJBQXVCLENBQ3BDLENBQVMsRUFDVCxDQUFTLEVBQ1QsS0FBYTtRQUViLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BDLE9BQU8sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVPLE1BQU0sQ0FBQyxlQUFlLENBQUMsRUFDN0IsSUFBSSxFQUNKLEtBQUssRUFDTCxhQUFhLEVBQ2IsYUFBYSxFQUNiLGNBQWMsR0FDTztRQUNyQixNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLEdBQUcsY0FBYyxDQUFDO1FBQ3RFLE1BQU0sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLGFBQWEsQ0FBQztRQUMvQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsR0FBRyxhQUFhLENBQUM7UUFFaEUsd0RBQXdEO1FBQ3hELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUV4RCxNQUFNLGdCQUFnQixHQUFHLFlBQVksR0FBRyxJQUFJLEdBQUcsWUFBWSxDQUFDO1FBQzVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxHQUFHLFlBQVksQ0FBQyxHQUFHLFlBQVksQ0FBQztRQUUxRSxNQUFNLE9BQU8sR0FBRyxTQUFTLEdBQUcsZ0JBQWdCLENBQUM7UUFDN0MsTUFBTSxtQkFBbUIsR0FBRyxnQkFBZ0IsR0FBRyxnQkFBZ0IsR0FBRyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBRXBGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxvQkFBb0IsRUFBRTtZQUMvRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pGLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFL0IseURBQXlEO1lBQ3pELElBQ0UsU0FBUyxHQUFHLFFBQVE7Z0JBQ3BCLFNBQVMsR0FBRyxDQUFDO2dCQUNiLFNBQVMsR0FBRyxTQUFTO2dCQUNyQixTQUFTLEdBQUcsQ0FBQztnQkFDYixTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLEVBQ2pDO2dCQUNBLFNBQVM7YUFDVjtZQUVELElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2pFLElBQUksUUFBUSxHQUFHLFNBQVMsR0FBRyxTQUFTLENBQUM7Z0JBQ3JDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQztnQkFFekIsNEdBQTRHO2dCQUM1Ryw4QkFBOEI7Z0JBQzlCLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQzdELFFBQVEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQzFDLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUUsUUFBUSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ2xFLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFFN0UsTUFBTSxPQUFPLEdBQUcsUUFBUSxHQUFHLFFBQVEsR0FBRyxRQUFRLEdBQUcsUUFBUSxDQUFDO2dCQUMxRCxJQUFJLE9BQU8sR0FBRyxtQkFBbUIsRUFBRTtvQkFDakMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDOUIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztpQkFDcEM7YUFDRjtpQkFBTTtnQkFDTCx5Q0FBeUM7Z0JBQ3pDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDM0YsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0QyxNQUFNLGFBQWEsR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUM7Z0JBQy9CLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUM7YUFDaEM7WUFFRCxnQ0FBZ0M7WUFDaEMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7WUFDbEUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7WUFDbEUsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDMUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDMUMsa0NBQWtDO1lBQ2xDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyx3RkFBd0Y7U0FDdkk7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFpQyxFQUFFLFNBQXVCO1FBQ3JGLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUN6QyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDeEQsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztRQUM3QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksb0JBQW9CLEVBQUU7WUFDL0QsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQy9CLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbkMsTUFBTSxFQUFFLEdBQUcsZUFBZSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hELElBQ0UsU0FBUyxHQUFHLEtBQUs7Z0JBQ2pCLFNBQVMsR0FBRyxDQUFDO2dCQUNiLFNBQVMsR0FBRyxNQUFNO2dCQUNsQixTQUFTLEdBQUcsQ0FBQztnQkFDYixTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLGtCQUFrQixFQUNwQztnQkFDQSxTQUFTO2FBQ1Y7WUFDRCxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsZUFBZSxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQztRQUNELE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRU8sTUFBTSxDQUFDLHdCQUF3QixDQUNyQyxTQUE0QixFQUM1QixnQkFBd0I7UUFLeEIsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUM7UUFFcEMsNEVBQTRFO1FBQzVFLE1BQU0sWUFBWSxHQUFHLE1BQU0sR0FBRyxZQUFZLENBQUM7UUFDM0MsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUN4QyxNQUFNLFlBQVksR0FBc0IsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN6RSxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztRQUNuQyxZQUFZLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQztRQUVqQyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRixJQUFJLFNBQVMsSUFBSSxJQUFJLEVBQUU7WUFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsTUFBTSxhQUFhLEdBQUcsZUFBZSxDQUFDLDJCQUEyQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUM3RyxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFTyxNQUFNLENBQUMsMkJBQTJCLENBQ3hDLFNBQW9CLEVBQ3BCLGdCQUF3QixFQUN4QixZQUFvQjtRQUVwQixNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQztRQUNwQyxJQUFJLGtCQUFrQixHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFFdEIsTUFBTSxxQkFBcUIsR0FBK0IsRUFBRSxDQUFDO1FBQzdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDOUIsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNuRSxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksa0JBQWtCLEVBQUU7b0JBQzNDLGtCQUFrQixFQUFFLENBQUM7b0JBQ3JCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUN0QzthQUNGO1NBQ0Y7UUFFRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDdkUsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQyxDQUFDO1FBRTVHLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDaEMsT0FBTyxhQUFhLEdBQUcsZUFBZSxFQUFFO1lBQ3RDLHFDQUFxQztZQUNyQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0QsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUU5Qyw2RUFBNkU7WUFDN0Usb0VBQW9FO1lBQ3BFLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxHQUFHLHFCQUFxQixDQUFDLEdBQUcsRUFBRyxDQUFDO1lBRTVELFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsR0FBRyxlQUFlLENBQUMseUJBQXlCLENBQ3JGLGFBQWEsR0FBRyxvQkFBb0IsQ0FDckMsQ0FBQztZQUNGLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDNUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsQixTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xCLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUVsQixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUUxRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsYUFBYSxFQUFFLENBQUM7U0FDakI7UUFDRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDLEtBQW1CLEVBQUUsSUFBWSxFQUFFLENBQVMsRUFBRSxDQUFTO1FBQ3ZGLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEdBQUcsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRLENBQUMsSUFBaUI7UUFDeEIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU8sY0FBYyxDQUFDLElBQWlCO1FBQ3RDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztRQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxXQUFXLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQztRQUNyRyxNQUFNLEtBQUssR0FBRyxJQUFJLFlBQVksQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEQsTUFBTSxrQkFBa0IsR0FBK0IsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN2RSxlQUFlLEVBQUUsSUFBSTtZQUNyQixLQUFLLEVBQUUsQ0FBQztZQUNSLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFlBQVksRUFBRSxNQUFNLENBQUMsV0FBVztZQUNoQyxXQUFXLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDOUIsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU87U0FDekIsQ0FBQyxDQUFDO1FBRUgsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxJQUFJLENBQ2xDLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixFQUFFLEVBQUU7WUFDekIsTUFBTSxrQkFBa0IsR0FBRyxlQUFlLENBQUMsd0JBQXdCLENBQ2pFLGtCQUFrQixFQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUNwQyxDQUFDO1lBQ0YsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLGtCQUFrQixDQUFDO1lBQzVDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFFBQVEsSUFBSSxVQUFVLENBQUM7YUFDckY7WUFDRCxZQUFZLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7WUFDekMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUNuQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUMvRixZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDbkMsWUFBWSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBRTFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDeEQsaURBQWlEO1lBQ2pELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQztZQUN6QixPQUFPLGtCQUFrQixDQUFDO1FBQzVCLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2IsTUFBTSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDdkYsT0FBTyxRQUFRLENBQUMsSUFBSSxHQUFHLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDLElBQUksQ0FDdEQsWUFBWSxFQUFFLEVBQ2QsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDMUMsR0FBRyxDQUNELENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDVCxDQUFDO2dCQUNDLFNBQVMsRUFBRSxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUk7Z0JBQ2pDLFVBQVUsRUFBRSxJQUFJLEdBQUcsZUFBZTtnQkFDbEMsUUFBUSxFQUFFLFlBQVksQ0FBQyxLQUFLO2dCQUM1QixTQUFTLEVBQUUsWUFBWSxDQUFDLE1BQU07YUFDWixDQUFBLENBQ3ZCLEVBQ0QsR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUU7Z0JBQ3JCLGVBQWUsQ0FBQyxlQUFlLENBQUM7b0JBQzlCLGFBQWE7b0JBQ2IsY0FBYztvQkFDZCxhQUFhLEVBQUU7d0JBQ2IsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLG9CQUFvQjtxQkFDckI7b0JBQ0QsS0FBSztvQkFDTCxJQUFJO2lCQUNMLENBQUMsQ0FBQztnQkFDSCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLE9BQU8sRUFBRTtvQkFDWCxlQUFlLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ2pFO1lBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxjQUFjLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxFQUM3RCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQ3RDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQzt5RUExU1UsZUFBZSxjQUVoQix1QkFBdUI7Z0VBRnRCLGVBQWUsV0FBZixlQUFlLG1CQURGLE1BQU07O1NBQ25CLGVBQWU7dUZBQWYsZUFBZTtjQUQzQixVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztzQkFHN0IsTUFBTTt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBkZWZhdWx0IGFzIGh0bWwyY2FudmFzIH0gZnJvbSAnaHRtbDJjYW52YXMnO1xuaW1wb3J0IHtcbiAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsXG4gIGZpbmFsaXplLFxuICBmcm9tLFxuICBpbnRlcnZhbCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VXaGlsZSxcbiAgdGFwLFxuICB0aW1lSW50ZXJ2YWwsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uU3RhdGUgfSBmcm9tICcuL2FuaW1hdGlvbi5zdGF0ZSc7XG5pbXBvcnQgeyBTaW1wbGV4Tm9pc2UgfSBmcm9tICcuL3NpbXBsZXgtbm9pc2UnO1xuaW1wb3J0IHsgV1NfVEhBTk9TX09QVElPTlNfVE9LRU4gfSBmcm9tICcuL3dzLXRoYW5vcy1vcHRpb25zLnRva2VuJztcbmltcG9ydCB0eXBlIHsgV3NUaGFub3NPcHRpb25zIH0gZnJvbSAnLi93cy10aGFub3Mub3B0aW9ucyc7XG5cbmNvbnN0IFBBUlRJQ0xFX0JZVEVfTEVOR1RIID0gMTA7XG5jb25zdCBNSU5fUEFSVElDTEVfQUxQSEEgPSB+figyNTUgKiAwLjAxKTtcbmNvbnN0IEhFSUdIVF9TQ0FMRSA9IDU7XG5jb25zdCBXSURUSF9TQ0FMRSA9IDI7XG5jb25zdCBGTE9XX0ZJRUxEX1JFUyA9IDAuMDU7XG5cbmludGVyZmFjZSBQYXJ0aWNsZXNEYXRhIHtcbiAgcGFydGljbGVzOiBGbG9hdDMyQXJyYXk7XG4gIG1heFBhcnRpY2xlWDogbnVtYmVyO1xuICBtaW5QYXJ0aWNsZVk6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFVwZGF0ZVBhcnRpY2xlUGFyYW1zIHtcbiAgcGFydGljbGVzRGF0YTogUGFydGljbGVzRGF0YTtcbiAgYW5pbWF0aW9uU3RhdGU6IEFuaW1hdGlvblN0YXRlO1xuICB0aGFub3NPcHRpb25zOiBXc1RoYW5vc09wdGlvbnM7XG4gIG5vaXNlOiBTaW1wbGV4Tm9pc2U7XG4gIHNlZWQ6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFBhcnRpY2xlSW5kaWNlcyB7XG4gIHg6IG51bWJlcjtcbiAgeTogbnVtYmVyO1xuICBkeDogbnVtYmVyO1xuICBkeTogbnVtYmVyO1xuICBheDogbnVtYmVyO1xuICBheTogbnVtYmVyO1xuICByOiBudW1iZXI7XG4gIGc6IG51bWJlcjtcbiAgYjogbnVtYmVyO1xuICBhOiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgV3NUaGFub3NTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChXU19USEFOT1NfT1BUSU9OU19UT0tFTilcbiAgICBwcml2YXRlIHRoYW5vc09wdGlvbnM6IFdzVGhhbm9zT3B0aW9ucyxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXG4gICkge31cblxuICBwcml2YXRlIHN0YXRpYyBnZXRQYXJ0aWNsZUluZGljZXNGb3JCYXNlKGJhc2U6IG51bWJlcik6IFBhcnRpY2xlSW5kaWNlcyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IGJhc2UsXG4gICAgICB5OiBiYXNlICsgMSxcbiAgICAgIGR4OiBiYXNlICsgMixcbiAgICAgIGR5OiBiYXNlICsgMyxcbiAgICAgIGF4OiBiYXNlICsgNCxcbiAgICAgIGF5OiBiYXNlICsgNSxcbiAgICAgIHI6IGJhc2UgKyA2LFxuICAgICAgZzogYmFzZSArIDcsXG4gICAgICBiOiBiYXNlICsgOCxcbiAgICAgIGE6IGJhc2UgKyA5LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRDb2xvckluZGljZXNGb3JDb29yZChcbiAgICB4OiBudW1iZXIsXG4gICAgeTogbnVtYmVyLFxuICAgIHdpZHRoOiBudW1iZXJcbiAgKTogeyBhOiBudW1iZXI7IHI6IG51bWJlcjsgYjogbnVtYmVyOyBnOiBudW1iZXIgfSB7XG4gICAgY29uc3QgcmVkID0geSAqICh3aWR0aCAqIDQpICsgeCAqIDQ7XG4gICAgcmV0dXJuIHsgcjogcmVkLCBnOiByZWQgKyAxLCBiOiByZWQgKyAyLCBhOiByZWQgKyAzIH07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyB1cGRhdGVQYXJ0aWNsZXMoe1xuICAgIHNlZWQsXG4gICAgbm9pc2UsXG4gICAgcGFydGljbGVzRGF0YSxcbiAgICB0aGFub3NPcHRpb25zLFxuICAgIGFuaW1hdGlvblN0YXRlLFxuICB9OiBVcGRhdGVQYXJ0aWNsZVBhcmFtcyk6IHZvaWQge1xuICAgIGNvbnN0IHsgZGVsdGFUU2VjLCBhbmltYXRpb25ULCBtYXhXaWR0aCwgbWF4SGVpZ2h0IH0gPSBhbmltYXRpb25TdGF0ZTtcbiAgICBjb25zdCB7IHBhcnRpY2xlQWNjZWxlcmF0aW9uIH0gPSB0aGFub3NPcHRpb25zO1xuICAgIGNvbnN0IHsgcGFydGljbGVzLCBtYXhQYXJ0aWNsZVgsIG1pblBhcnRpY2xlWSB9ID0gcGFydGljbGVzRGF0YTtcblxuICAgIC8vIHRoZSB0aW1lIGlzIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSB2YXBvcml6YXRpb24gZnJvbnQuXG4gICAgY29uc3QgdGltZSA9IE1hdGguc2luKGFuaW1hdGlvblQgKiAoTWF0aC5QSSAvIDIpKSAqIDEuMTtcblxuICAgIGNvbnN0IHN0YXJ0QWNjZWxlcmF0ZVggPSBtYXhQYXJ0aWNsZVggLSB0aW1lICogbWF4UGFydGljbGVYO1xuICAgIGNvbnN0IHN0YXJ0QWNjZWxlcmF0ZVkgPSB0aW1lICogKG1heEhlaWdodCAtIG1pblBhcnRpY2xlWSkgKyBtaW5QYXJ0aWNsZVk7XG5cbiAgICBjb25zdCBsZW5ndGhZID0gbWF4SGVpZ2h0IC0gc3RhcnRBY2NlbGVyYXRlWTtcbiAgICBjb25zdCBhY2NlbGVyYXRlUmFkaXVzUG93ID0gc3RhcnRBY2NlbGVyYXRlWCAqIHN0YXJ0QWNjZWxlcmF0ZVggKyBsZW5ndGhZICogbGVuZ3RoWTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydGljbGVzLmxlbmd0aDsgaSArPSBQQVJUSUNMRV9CWVRFX0xFTkdUSCkge1xuICAgICAgY29uc3QgeyB4LCB5LCBkeCwgZHksIGF4LCBheSwgYSB9ID0gV3NUaGFub3NTZXJ2aWNlLmdldFBhcnRpY2xlSW5kaWNlc0ZvckJhc2UoaSk7XG4gICAgICBjb25zdCBwYXJ0aWNsZVggPSBwYXJ0aWNsZXNbeF07XG4gICAgICBjb25zdCBwYXJ0aWNsZVkgPSBwYXJ0aWNsZXNbeV07XG5cbiAgICAgIC8vIG9ubHkgdXBkYXRlIHBhcnRpY2xlcyB0aGF0IGFyZSBpbnNpZGUgdmlldyBhbmQgdmlzaWJsZVxuICAgICAgaWYgKFxuICAgICAgICBwYXJ0aWNsZVggPiBtYXhXaWR0aCB8fFxuICAgICAgICBwYXJ0aWNsZVggPCAwIHx8XG4gICAgICAgIHBhcnRpY2xlWSA+IG1heEhlaWdodCB8fFxuICAgICAgICBwYXJ0aWNsZVkgPCAwIHx8XG4gICAgICAgIHBhcnRpY2xlc1thXSA8IE1JTl9QQVJUSUNMRV9BTFBIQVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIShNYXRoLmFicyhwYXJ0aWNsZXNbYXhdKSA+IDAgfHwgTWF0aC5hYnMocGFydGljbGVzW2F5XSkgPiAwKSkge1xuICAgICAgICBsZXQgcFlMZW5ndGggPSBtYXhIZWlnaHQgLSBwYXJ0aWNsZVk7XG4gICAgICAgIGxldCBwWExlbmd0aCA9IHBhcnRpY2xlWDtcblxuICAgICAgICAvLyB3ZSBjYWxjdWxhdGUgc29tZSByYW5kb20gbG9va2luZyBudW1iZXJzIGFuZCBmdW5jdGlvbnMgdG8gaGF2ZSBuaWNlIGxvb2tpbmcgdmFwb3JpemluZyBmcm9udCBvZiBwYXJ0aWNsZXNcbiAgICAgICAgLy8gdG9kbyBjb25zaWRlciB0byB1c2Ugbm9pc2U7XG4gICAgICAgIHBYTGVuZ3RoICs9IE1hdGgudGFuKChwWExlbmd0aCAvIDIwLjEyKSAqIHRpbWUgKyBzZWVkKSAqIDAuNTtcbiAgICAgICAgcFhMZW5ndGggKz0gKHBhcnRpY2xlWCAlIGRlbHRhVFNlYykgKiAwLjU7XG4gICAgICAgIHBYTGVuZ3RoICs9IE1hdGguc2luKChwWExlbmd0aCAvIDMwICsgNzIzLjM5NCkgKiB0aW1lICsgc2VlZCAqIDEyLjUpICogMTE7XG4gICAgICAgIHBZTGVuZ3RoICs9IE1hdGgudGFuKChwWUxlbmd0aCAvIDAuNDUpICogdGltZSArIHNlZWQgKiAxLjUpICogMC41O1xuICAgICAgICBwWUxlbmd0aCArPSBNYXRoLmNvcygocFlMZW5ndGggLyAxMDAgKyAyMzIzLjIzNCkgKiB0aW1lICsgc2VlZCAqIDQ1Ni4xKSAqIDIzO1xuXG4gICAgICAgIGNvbnN0IHBMZW5ndGggPSBwWExlbmd0aCAqIHBYTGVuZ3RoICsgcFlMZW5ndGggKiBwWUxlbmd0aDtcbiAgICAgICAgaWYgKHBMZW5ndGggPiBhY2NlbGVyYXRlUmFkaXVzUG93KSB7XG4gICAgICAgICAgcGFydGljbGVzW2F4XSA9IE1hdGgucmFuZG9tKCk7XG4gICAgICAgICAgcGFydGljbGVzW2F5XSA9IE1hdGgucmFuZG9tKCkgKiAtMTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXNlIG5vaXNlIHRvIGZsb3cgYWxvbmcgdmVsb2NpdHkgZmllbGRcbiAgICAgICAgY29uc3QgZmxvd0ZpZWxkQWNjID0gV3NUaGFub3NTZXJ2aWNlLmdldFhZRnJvbUZsb3dGaWVsZChub2lzZSwgc2VlZCwgcGFydGljbGVYLCBwYXJ0aWNsZVkpO1xuICAgICAgICBjb25zdCBhY2NlbGVyYXRpb25YID0gZmxvd0ZpZWxkQWNjWzBdO1xuICAgICAgICBjb25zdCBhY2NlbGVyYXRpb25ZID0gZmxvd0ZpZWxkQWNjWzFdO1xuICAgICAgICBwYXJ0aWNsZXNbYXhdICs9IGFjY2VsZXJhdGlvblg7XG4gICAgICAgIHBhcnRpY2xlc1theV0gKz0gYWNjZWxlcmF0aW9uWTtcbiAgICAgIH1cblxuICAgICAgLy8gKiBNYXRoLnBvdygxICsgYW5pbWF0aW9uVCwgNClcbiAgICAgIHBhcnRpY2xlc1tkeF0gKz0gcGFydGljbGVzW2F4XSAqIHBhcnRpY2xlQWNjZWxlcmF0aW9uICogZGVsdGFUU2VjO1xuICAgICAgcGFydGljbGVzW2R5XSArPSBwYXJ0aWNsZXNbYXldICogcGFydGljbGVBY2NlbGVyYXRpb24gKiBkZWx0YVRTZWM7XG4gICAgICBwYXJ0aWNsZXNbeF0gKz0gcGFydGljbGVzW2R4XSAqIGRlbHRhVFNlYztcbiAgICAgIHBhcnRpY2xlc1t5XSArPSBwYXJ0aWNsZXNbZHldICogZGVsdGFUU2VjO1xuICAgICAgLy8gZmFkZSBwYXJ0aWNsZSBvdXQgKCB2ZXJ5IGxhdGUpO1xuICAgICAgcGFydGljbGVzW2FdICo9IDEgLSBNYXRoLnBvdyhhbmltYXRpb25ULCAxNSk7IC8vIDI1NSAtIE1hdGguc3FydChwYXJ0aWNsZXNbZHhdICogcGFydGljbGVzW2R4XSArIHBhcnRpY2xlc1tkeV0gKiBwYXJ0aWNsZXNbZHldKSAvIDEuMjtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBkcmF3UGFydGljbGVzKGRyYXdDdHg6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCwgcGFydGljbGVzOiBGbG9hdDMyQXJyYXkpOiB2b2lkIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGRyYXdDdHguY2FudmFzO1xuICAgIGRyYXdDdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGNvbnN0IGltYWdlID0gZHJhd0N0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgY29uc3QgaW1hZ2VEYXRhID0gaW1hZ2UuZGF0YTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRpY2xlcy5sZW5ndGg7IGkgKz0gUEFSVElDTEVfQllURV9MRU5HVEgpIHtcbiAgICAgIGNvbnN0IHBhcnRpY2xlWCA9IHBhcnRpY2xlc1tpXTtcbiAgICAgIGNvbnN0IHBhcnRpY2xlWSA9IHBhcnRpY2xlc1tpICsgMV07XG4gICAgICBjb25zdCBwSSA9IFdzVGhhbm9zU2VydmljZS5nZXRQYXJ0aWNsZUluZGljZXNGb3JCYXNlKGkpO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJ0aWNsZVggPiB3aWR0aCB8fFxuICAgICAgICBwYXJ0aWNsZVggPCAwIHx8XG4gICAgICAgIHBhcnRpY2xlWSA+IGhlaWdodCB8fFxuICAgICAgICBwYXJ0aWNsZVkgPCAwIHx8XG4gICAgICAgIHBhcnRpY2xlc1twSS5hXSA8IE1JTl9QQVJUSUNMRV9BTFBIQVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgeyByLCBnLCBiLCBhIH0gPSBXc1RoYW5vc1NlcnZpY2UuZ2V0Q29sb3JJbmRpY2VzRm9yQ29vcmQofn5wYXJ0aWNsZXNbcEkueF0sIH5+cGFydGljbGVzW3BJLnldLCB3aWR0aCk7XG4gICAgICBpbWFnZURhdGFbcl0gPSB+fnBhcnRpY2xlc1twSS5yXTtcbiAgICAgIGltYWdlRGF0YVtnXSA9IH5+cGFydGljbGVzW3BJLmddO1xuICAgICAgaW1hZ2VEYXRhW2JdID0gfn5wYXJ0aWNsZXNbcEkuYl07XG4gICAgICBpbWFnZURhdGFbYV0gPSB+fnBhcnRpY2xlc1twSS5hXTtcbiAgICB9XG4gICAgZHJhd0N0eC5wdXRJbWFnZURhdGEoaW1hZ2UsIDAsIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcHJlcGFyZUNhbnZhc0ZvclZhcG9yaXplKFxuICAgIGRpdkNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXG4gICAgbWF4UGFydGljbGVDb3VudDogbnVtYmVyXG4gICk6IHtcbiAgICBwYXJ0aWNsZXNEYXRhOiBQYXJ0aWNsZXNEYXRhO1xuICAgIHJlc3VsdENhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIH0ge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZGl2Q2FudmFzO1xuXG4gICAgLy8gc2NhbGUgcmVzdWx0IGNhbnZhcyB0byBoYXZlIG1vcmUgcm9vbSB0byBkcmF3IHBhcnRpY2xlcyB3aGlsZSB2YXBvcml6aW5nO1xuICAgIGNvbnN0IHJlc3VsdEhlaWdodCA9IGhlaWdodCAqIEhFSUdIVF9TQ0FMRTtcbiAgICBjb25zdCByZXN1bHRXaWR0aCA9IHdpZHRoICogV0lEVEhfU0NBTEU7XG4gICAgY29uc3QgcmVzdWx0Q2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgIHJlc3VsdENhbnZhcy5oZWlnaHQgPSByZXN1bHRIZWlnaHQ7XG4gICAgcmVzdWx0Q2FudmFzLndpZHRoID0gcmVzdWx0V2lkdGg7XG5cbiAgICBjb25zdCBpbWFnZURhdGEgPSBkaXZDYW52YXMuZ2V0Q29udGV4dCgnMmQnKT8uZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgIGlmIChpbWFnZURhdGEgPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IGltYWdlIGRhdGEgZnJvbSBjYW52YXMnKTtcbiAgICB9XG4gICAgY29uc3QgcGFydGljbGVzRGF0YSA9IFdzVGhhbm9zU2VydmljZS5jcmVhdGVQYXJ0aWNsZXNGb3JJbWFnZURhdGEoaW1hZ2VEYXRhLCBtYXhQYXJ0aWNsZUNvdW50LCByZXN1bHRIZWlnaHQpO1xuICAgIHJldHVybiB7IHJlc3VsdENhbnZhcywgcGFydGljbGVzRGF0YSB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlUGFydGljbGVzRm9ySW1hZ2VEYXRhKFxuICAgIGltYWdlRGF0YTogSW1hZ2VEYXRhLFxuICAgIG1heFBhcnRpY2xlQ291bnQ6IG51bWJlcixcbiAgICByZXN1bHRIZWlnaHQ6IG51bWJlclxuICApOiB7IG1pblBhcnRpY2xlWTogbnVtYmVyOyBtYXhQYXJ0aWNsZVg6IG51bWJlcjsgcGFydGljbGVzOiBGbG9hdDMyQXJyYXkgfSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBpbWFnZURhdGE7XG4gICAgbGV0IHBhcnRpY2xlQ2FuZGlkYXRlcyA9IDA7XG4gICAgbGV0IHBhcnRpY2xlQ291bnQgPSAwO1xuXG4gICAgY29uc3QgcGFydGljbGVDYW5kaWF0ZXNMaXN0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH1bXSA9IFtdO1xuICAgIGZvciAobGV0IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHtcbiAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgd2lkdGg7IHgrKykge1xuICAgICAgICBjb25zdCB7IGEgfSA9IFdzVGhhbm9zU2VydmljZS5nZXRDb2xvckluZGljZXNGb3JDb29yZCh4LCB5LCB3aWR0aCk7XG4gICAgICAgIGlmIChpbWFnZURhdGEuZGF0YVthXSA+PSBNSU5fUEFSVElDTEVfQUxQSEEpIHtcbiAgICAgICAgICBwYXJ0aWNsZUNhbmRpZGF0ZXMrKztcbiAgICAgICAgICBwYXJ0aWNsZUNhbmRpYXRlc0xpc3QucHVzaCh7IHgsIHkgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtYXhOdW1QYXJ0aWNsZXMgPSBNYXRoLm1pbihwYXJ0aWNsZUNhbmRpZGF0ZXMsIG1heFBhcnRpY2xlQ291bnQpO1xuICAgIGNvbnN0IHBhcnRpY2xlcyA9IG5ldyBGbG9hdDMyQXJyYXkoRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogbWF4TnVtUGFydGljbGVzICogUEFSVElDTEVfQllURV9MRU5HVEgpO1xuXG4gICAgbGV0IG1heFBhcnRpY2xlWCA9IDA7XG4gICAgbGV0IG1pblBhcnRpY2xlWSA9IHJlc3VsdEhlaWdodDtcbiAgICB3aGlsZSAocGFydGljbGVDb3VudCA8IG1heE51bVBhcnRpY2xlcykge1xuICAgICAgLy8gc2VsZWN0IHJhbmRvbSBpbmRleCBmcm9tIGNhbmRpYXRlc1xuICAgICAgY29uc3QgaW5kZXggPSB+fihNYXRoLnJhbmRvbSgpICogcGFydGljbGVDYW5kaWF0ZXNMaXN0Lmxlbmd0aCk7XG4gICAgICBjb25zdCB7IHgsIHkgfSA9IHBhcnRpY2xlQ2FuZGlhdGVzTGlzdFtpbmRleF07XG5cbiAgICAgIC8vIG92ZXJ3cml0ZSBpbmRleCB3aXRoIGxhc3QgZWxlbWVudCB0byBwcmV2ZW50IGRvdWJsZSBzZWxlY3Rpb24gb2YgcGFydGljbGVzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgcGFydGljbGVDYW5kaWF0ZXNMaXN0W2luZGV4XSA9IHBhcnRpY2xlQ2FuZGlhdGVzTGlzdC5wb3AoKSE7XG5cbiAgICAgIG1heFBhcnRpY2xlWCA9IE1hdGgubWF4KG1heFBhcnRpY2xlWCwgeCk7XG4gICAgICBtaW5QYXJ0aWNsZVkgPSBNYXRoLm1pbihtaW5QYXJ0aWNsZVksIHkpO1xuICAgICAgY29uc3QgeyBkeCwgZHksIGF4LCBheSwgciwgZywgYiwgYSwgLi4ueHkgfSA9IFdzVGhhbm9zU2VydmljZS5nZXRQYXJ0aWNsZUluZGljZXNGb3JCYXNlKFxuICAgICAgICBwYXJ0aWNsZUNvdW50ICogUEFSVElDTEVfQllURV9MRU5HVEhcbiAgICAgICk7XG4gICAgICBwYXJ0aWNsZXNbeHkueF0gPSB4O1xuICAgICAgcGFydGljbGVzW3h5LnldID0geSArIHJlc3VsdEhlaWdodCAtIGhlaWdodDtcbiAgICAgIHBhcnRpY2xlc1tkeF0gPSAwO1xuICAgICAgcGFydGljbGVzW2R5XSA9IDA7XG4gICAgICBwYXJ0aWNsZXNbYXhdID0gMDtcbiAgICAgIHBhcnRpY2xlc1theV0gPSAwO1xuXG4gICAgICBjb25zdCBpbmRpY2VzSW1hZ2UgPSBXc1RoYW5vc1NlcnZpY2UuZ2V0Q29sb3JJbmRpY2VzRm9yQ29vcmQoeCwgeSwgd2lkdGgpO1xuXG4gICAgICBwYXJ0aWNsZXNbcl0gPSBpbWFnZURhdGEuZGF0YVtpbmRpY2VzSW1hZ2Uucl07XG4gICAgICBwYXJ0aWNsZXNbZ10gPSBpbWFnZURhdGEuZGF0YVtpbmRpY2VzSW1hZ2UuZ107XG4gICAgICBwYXJ0aWNsZXNbYl0gPSBpbWFnZURhdGEuZGF0YVtpbmRpY2VzSW1hZ2UuYl07XG4gICAgICBwYXJ0aWNsZXNbYV0gPSBpbWFnZURhdGEuZGF0YVtpbmRpY2VzSW1hZ2UuYV07XG4gICAgICBwYXJ0aWNsZUNvdW50Kys7XG4gICAgfVxuICAgIHJldHVybiB7IHBhcnRpY2xlcywgbWF4UGFydGljbGVYLCBtaW5QYXJ0aWNsZVkgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldFhZRnJvbUZsb3dGaWVsZChub2lzZTogU2ltcGxleE5vaXNlLCBzZWVkOiBudW1iZXIsIHg6IG51bWJlciwgeTogbnVtYmVyKSB7XG4gICAgY29uc3Qgc2FtcGxlWCA9IG5vaXNlLnNjYWxlZDNEKHgsIHksIHNlZWQgKyAzMy4yMywgRkxPV19GSUVMRF9SRVMpO1xuICAgIGNvbnN0IHNhbXBsZVkgPSBub2lzZS5zY2FsZWQzRCh4LCBzZWVkIC8gMTMuMjMsIHksIEZMT1dfRklFTERfUkVTKSAqIC0xO1xuICAgIHJldHVybiBbc2FtcGxlWCwgc2FtcGxlWV07XG4gIH1cblxuICAvKipcbiAgICogc3RhcnQgdGhlIHZhcG9yaXplQW5kU2Nyb2xsSW50b1ZpZXctZWZmZWN0LlxuICAgKlxuICAgKiBJdCdzIHJ1bm5pbmcgb3V0c2lkZSB0aGUgbmdab25lLlxuICAgKi9cbiAgdmFwb3JpemUoZWxlbTogSFRNTEVsZW1lbnQpOiBPYnNlcnZhYmxlPEFuaW1hdGlvblN0YXRlPiB7XG4gICAgcmV0dXJuIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMudmFwb3JpemVJbnRlcm4oZWxlbSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB2YXBvcml6ZUludGVybihlbGVtOiBIVE1MRWxlbWVudCk6IE9ic2VydmFibGU8QW5pbWF0aW9uU3RhdGU+IHtcbiAgICBlbGVtLnN0eWxlLm9wYWNpdHkgPSBlbGVtLnN0eWxlLm9wYWNpdHkgfHwgJzEnO1xuICAgIGVsZW0uc3R5bGUudHJhbnNpdGlvbiA9IGBvcGFjaXR5ICR7TWF0aC5mbG9vcih0aGlzLnRoYW5vc09wdGlvbnMuYW5pbWF0aW9uTGVuZ3RoICogMC44KX1tcyBlYXNlLW91dGA7XG4gICAgY29uc3Qgbm9pc2UgPSBuZXcgU2ltcGxleE5vaXNlKHsgZnJlcXVlbmN5OiAwLjAxLCBtaW46IDAgfSk7XG4gICAgY29uc3Qgc2VlZCA9IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpICogTWF0aC5yYW5kb20oKTtcbiAgICBjb25zdCBodG1sMkNhbnZhc1Byb21pc2U6IFByb21pc2U8SFRNTENhbnZhc0VsZW1lbnQ+ID0gaHRtbDJjYW52YXMoZWxlbSwge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiBudWxsLFxuICAgICAgc2NhbGU6IDEsXG4gICAgICBhbGxvd1RhaW50OiB0cnVlLFxuICAgICAgd2luZG93SGVpZ2h0OiB3aW5kb3cuaW5uZXJIZWlnaHQsXG4gICAgICB3aW5kb3dXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICBzY3JvbGxZOiAtd2luZG93LnNjcm9sbFksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnJvbShodG1sMkNhbnZhc1Byb21pc2UpLnBpcGUoXG4gICAgICBtYXAoKGNhbnZhc0Zyb21IdG1sRWxlbSkgPT4ge1xuICAgICAgICBjb25zdCBjYW52YXNBbmRQYXJ0aWNsZXMgPSBXc1RoYW5vc1NlcnZpY2UucHJlcGFyZUNhbnZhc0ZvclZhcG9yaXplKFxuICAgICAgICAgIGNhbnZhc0Zyb21IdG1sRWxlbSxcbiAgICAgICAgICB0aGlzLnRoYW5vc09wdGlvbnMubWF4UGFydGljbGVDb3VudFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB7IHJlc3VsdENhbnZhcyB9ID0gY2FudmFzQW5kUGFydGljbGVzO1xuICAgICAgICBpZiAoZWxlbS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgZWxlbS5wYXJlbnRFbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gZWxlbS5wYXJlbnRFbGVtZW50LnN0eWxlLnBvc2l0aW9uIHx8ICdyZWxhdGl2ZSc7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0Q2FudmFzLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgcmVzdWx0Q2FudmFzLnN0eWxlLmxlZnQgPSAwICsgJ3B4JztcbiAgICAgICAgcmVzdWx0Q2FudmFzLnN0eWxlLnRvcCA9ICctJyArIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogKEhFSUdIVF9TQ0FMRSAtIDEpICsgJ3B4JztcbiAgICAgICAgcmVzdWx0Q2FudmFzLnN0eWxlLnpJbmRleCA9ICcyMDAwJztcbiAgICAgICAgcmVzdWx0Q2FudmFzLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG5cbiAgICAgICAgZWxlbS5pbnNlcnRBZGphY2VudEVsZW1lbnQoJ2JlZm9yZWJlZ2luJywgcmVzdWx0Q2FudmFzKTtcbiAgICAgICAgLy8gdGhpcyBzaG91bGQgc3RhcnQgdGhlIHRyYW5zaXRpb24gYWJvdmUgZGVmaW5lZFxuICAgICAgICBlbGVtLnN0eWxlLm9wYWNpdHkgPSAnMCc7XG4gICAgICAgIHJldHVybiBjYW52YXNBbmRQYXJ0aWNsZXM7XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcCgoeyByZXN1bHRDYW52YXMsIHBhcnRpY2xlc0RhdGEgfSkgPT4ge1xuICAgICAgICBsZXQgdGltZSA9IDA7XG4gICAgICAgIGNvbnN0IHsgYW5pbWF0aW9uTGVuZ3RoLCBtYXhQYXJ0aWNsZUNvdW50LCBwYXJ0aWNsZUFjY2VsZXJhdGlvbiB9ID0gdGhpcy50aGFub3NPcHRpb25zO1xuICAgICAgICByZXR1cm4gaW50ZXJ2YWwoMTAwMCAvIDYwLCBhbmltYXRpb25GcmFtZVNjaGVkdWxlcikucGlwZShcbiAgICAgICAgICB0aW1lSW50ZXJ2YWwoKSxcbiAgICAgICAgICB0YXAoKGRlbHRhVCkgPT4gKHRpbWUgKz0gZGVsdGFULmludGVydmFsKSksXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKGRlbHRhVCkgPT5cbiAgICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgICBkZWx0YVRTZWM6IGRlbHRhVC5pbnRlcnZhbCAvIDEwMDAsXG4gICAgICAgICAgICAgICAgYW5pbWF0aW9uVDogdGltZSAvIGFuaW1hdGlvbkxlbmd0aCxcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogcmVzdWx0Q2FudmFzLndpZHRoLFxuICAgICAgICAgICAgICAgIG1heEhlaWdodDogcmVzdWx0Q2FudmFzLmhlaWdodCxcbiAgICAgICAgICAgICAgfSBhcyBBbmltYXRpb25TdGF0ZSlcbiAgICAgICAgICApLFxuICAgICAgICAgIHRhcCgoYW5pbWF0aW9uU3RhdGUpID0+IHtcbiAgICAgICAgICAgIFdzVGhhbm9zU2VydmljZS51cGRhdGVQYXJ0aWNsZXMoe1xuICAgICAgICAgICAgICBwYXJ0aWNsZXNEYXRhLFxuICAgICAgICAgICAgICBhbmltYXRpb25TdGF0ZSxcbiAgICAgICAgICAgICAgdGhhbm9zT3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkxlbmd0aCxcbiAgICAgICAgICAgICAgICBtYXhQYXJ0aWNsZUNvdW50LFxuICAgICAgICAgICAgICAgIHBhcnRpY2xlQWNjZWxlcmF0aW9uLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBub2lzZSxcbiAgICAgICAgICAgICAgc2VlZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHJlc3VsdENhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgICAgV3NUaGFub3NTZXJ2aWNlLmRyYXdQYXJ0aWNsZXMoY29udGV4dCwgcGFydGljbGVzRGF0YS5wYXJ0aWNsZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2VXaGlsZSgoYW5pbWF0aW9uU3RhdGUpID0+IGFuaW1hdGlvblN0YXRlLmFuaW1hdGlvblQgPD0gMSksXG4gICAgICAgICAgZmluYWxpemUoKCkgPT4gcmVzdWx0Q2FudmFzLnJlbW92ZSgpKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29sc29rLXRoYW5vcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvcHVibGljL3dzLXRoYW5vcy9zcmMvd29sc29rLXRoYW5vcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
package/index.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../libs/public/ws-thanos/src/index.ts"],"names":[],"mappings":"AAGA,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yBAAyB,CAAC;AACxC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC"}
@@ -1,7 +0,0 @@
1
- export interface AnimationState {
2
- deltaTSec: number;
3
- animationT: number;
4
- maxWidth: number;
5
- maxHeight: number;
6
- }
7
- //# sourceMappingURL=animation.state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"animation.state.d.ts","sourceRoot":"","sources":["../../../../../libs/public/ws-thanos/src/lib/animation.state.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -1,3 +0,0 @@
1
- import { WsThanosOptions } from './ws-thanos.options';
2
- export declare function createWsThanosOptions(options?: Partial<WsThanosOptions>): WsThanosOptions;
3
- //# sourceMappingURL=create-ws-thanos-options.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"create-ws-thanos-options.d.ts","sourceRoot":"","sources":["../../../../../libs/public/ws-thanos/src/lib/create-ws-thanos-options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,eAAe,CAOzF"}
@@ -1,10 +0,0 @@
1
- export interface SimplexNoiseOptions {
2
- amplitude: number;
3
- frequency: number;
4
- max: number;
5
- min: number;
6
- octaves: number;
7
- persistence: number;
8
- random: () => number;
9
- }
10
- //# sourceMappingURL=simplex-noise-options.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simplex-noise-options.d.ts","sourceRoot":"","sources":["../../../../../libs/public/ws-thanos/src/lib/simplex-noise-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,MAAM,CAAC;CACtB"}
@@ -1,19 +0,0 @@
1
- import type { SimplexNoiseOptions } from './simplex-noise-options';
2
- export declare class SimplexNoise {
3
- constructor(options?: Partial<SimplexNoiseOptions>);
4
- static G3: number;
5
- static GRAD3D: number[][];
6
- readonly amplitude: number;
7
- readonly frequency: number;
8
- readonly octaves: number;
9
- readonly perm: Uint8Array;
10
- readonly permMod12: Uint8Array;
11
- readonly persistence: number;
12
- readonly random: () => number;
13
- readonly scale: (value: number) => number;
14
- private memScale3D;
15
- dot(gs: number[], coords: number[]): number;
16
- raw3D(x: number, y: number, z: number): number;
17
- scaled3D(x: number, y: number, z: number, resolution: number): number;
18
- }
19
- //# sourceMappingURL=simplex-noise.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simplex-noise.d.ts","sourceRoot":"","sources":["../../../../../libs/public/ws-thanos/src/lib/simplex-noise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAEnE,qBAAa,YAAY;gBACX,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAiClD,MAAM,CAAC,EAAE,SAAa;IAEtB,MAAM,CAAC,MAAM,aAaX;IAEF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,OAAO,CAAC,UAAU,CAAiC;IAEnD,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;IAI3C,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IA2E9C,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;CAsBtE"}
@@ -1,5 +0,0 @@
1
- import { InjectionToken, Provider } from '@angular/core';
2
- import type { WsThanosOptions } from './ws-thanos.options';
3
- export declare const WS_THANOS_OPTIONS_TOKEN: InjectionToken<WsThanosOptions>;
4
- export declare function provideWsThanosOptions(options?: Partial<WsThanosOptions>): Provider;
5
- //# sourceMappingURL=ws-thanos-options.token.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-thanos-options.token.d.ts","sourceRoot":"","sources":["../../../../../libs/public/ws-thanos/src/lib/ws-thanos-options.token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,eAAO,MAAM,uBAAuB,iCAGlC,CAAC;AAEH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,QAAQ,CAKnF"}
@@ -1,36 +0,0 @@
1
- import { ElementRef, NgZone } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { AnimationState } from './animation.state';
4
- import type { WsThanosOptions } from './ws-thanos.options';
5
- import { WsThanosService } from './ws-thanos.service';
6
- import * as i0 from "@angular/core";
7
- export declare class WsThanosDirective {
8
- private readonly vaporizeDomElem;
9
- private readonly thanosService;
10
- private readonly thanosOptions;
11
- private readonly ngZone;
12
- private wsThanosCompleteSubject;
13
- private untilDestroyed;
14
- wsThanosComplete: Observable<void>;
15
- private subscriptions;
16
- constructor(vaporizeDomElem: ElementRef<HTMLElement>, thanosService: WsThanosService, thanosOptions: WsThanosOptions, ngZone: NgZone);
17
- /**
18
- *
19
- * Vaporize the dom element of this directive
20
- * @param removeElem remove the vaporized dom element or blend back in after a while
21
- *
22
- * Subscribe to the returned observable to start vaporization
23
- *
24
- */
25
- vaporize$(removeElem?: boolean): Observable<AnimationState>;
26
- /**
27
- * Vaporize the dom element of this directive
28
- * @param removeElem remove the vaporized dom element or blend back in after a while
29
- *
30
- * @Deprecated use vaporizeAndScrollIntoView$ instead and subscribe to it
31
- */
32
- vaporize(removeElem?: boolean): Observable<void>;
33
- static ɵfac: i0.ɵɵFactoryDeclaration<WsThanosDirective, never>;
34
- static ɵdir: i0.ɵɵDirectiveDeclaration<WsThanosDirective, "[wsThanos], ws-thanos", ["thanos"], {}, { "wsThanosComplete": "wsThanosComplete"; }, never, never, true, never>;
35
- }
36
- //# sourceMappingURL=ws-thanos.directive.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-thanos.directive.d.ts","sourceRoot":"","sources":["../../../../../libs/public/ws-thanos/src/lib/ws-thanos.directive.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,UAAU,EAAU,MAAM,EAAU,MAAM,eAAe,CAAC;AAE9E,OAAO,EAAY,UAAU,EAAoC,MAAM,MAAM,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;;AAEtD,qBAKa,iBAAiB;IAS1B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZzB,OAAO,CAAC,uBAAuB,CAAuB;IACtD,OAAO,CAAC,cAAc,CAAwB;IAGvC,gBAAgB,EAAE,UAAU,CAAC,IAAI,CAAC,CAA+C;IACxF,OAAO,CAAC,aAAa,CAAoC;gBAGtC,eAAe,EAAE,UAAU,CAAC,WAAW,CAAC,EACxC,aAAa,EAAE,eAAe,EAE9B,aAAa,EAAE,eAAe,EAC9B,MAAM,EAAE,MAAM;IAGjC;;;;;;;OAOG;IACI,SAAS,CAAC,UAAU,UAAO,GAAG,UAAU,CAAC,cAAc,CAAC;IAuB/D;;;;;OAKG;IACI,QAAQ,CAAC,UAAU,UAAO,GAAG,UAAU,CAAC,IAAI,CAAC;yCArDzC,iBAAiB;2CAAjB,iBAAiB;CAyD7B"}
@@ -1,6 +0,0 @@
1
- export interface WsThanosOptions {
2
- animationLength: number;
3
- maxParticleCount: number;
4
- particleAcceleration: number;
5
- }
6
- //# sourceMappingURL=ws-thanos.options.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-thanos.options.d.ts","sourceRoot":"","sources":["../../../../../libs/public/ws-thanos/src/lib/ws-thanos.options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;CAC9B"}
@@ -1,27 +0,0 @@
1
- import { NgZone } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import { AnimationState } from './animation.state';
4
- import type { WsThanosOptions } from './ws-thanos.options';
5
- import * as i0 from "@angular/core";
6
- export declare class WsThanosService {
7
- private thanosOptions;
8
- private ngZone;
9
- constructor(thanosOptions: WsThanosOptions, ngZone: NgZone);
10
- private static getParticleIndicesForBase;
11
- private static getColorIndicesForCoord;
12
- private static updateParticles;
13
- private static drawParticles;
14
- private static prepareCanvasForVaporize;
15
- private static createParticlesForImageData;
16
- private static getXYFromFlowField;
17
- /**
18
- * start the vaporizeAndScrollIntoView-effect.
19
- *
20
- * It's running outside the ngZone.
21
- */
22
- vaporize(elem: HTMLElement): Observable<AnimationState>;
23
- private vaporizeIntern;
24
- static ɵfac: i0.ɵɵFactoryDeclaration<WsThanosService, never>;
25
- static ɵprov: i0.ɵɵInjectableDeclaration<WsThanosService>;
26
- }
27
- //# sourceMappingURL=ws-thanos.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ws-thanos.service.d.ts","sourceRoot":"","sources":["../../../../../libs/public/ws-thanos/src/lib/ws-thanos.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,MAAM,EAAE,MAAM,eAAe,CAAC;AAG3D,OAAO,EAML,UAAU,EAKX,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;;AAmC3D,qBACa,eAAe;IAGxB,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;gBADN,aAAa,EAAE,eAAe,EAC9B,MAAM,EAAE,MAAM;IAGxB,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAexC,OAAO,CAAC,MAAM,CAAC,uBAAuB;IAStC,OAAO,CAAC,MAAM,CAAC,eAAe;IAwE9B,OAAO,CAAC,MAAM,CAAC,aAAa;IA2B5B,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAwBvC,OAAO,CAAC,MAAM,CAAC,2BAA2B;IAyD1C,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAMjC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,cAAc,CAAC;IAIvD,OAAO,CAAC,cAAc;yCAlOX,eAAe;6CAAf,eAAe;CA2S3B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"wolsok-thanos.d.ts","sourceRoot":"","sources":["../../../../libs/public/ws-thanos/src/wolsok-thanos.ts"],"names":[],"mappings":"AAAA;;GAEG;;AAEH,cAAc,SAAS,CAAC"}