@jax-data-science/sci-image-visualizer 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/contracts/display-types.mjs +3 -2
- package/esm2022/lib/contracts/image.contract.mjs +1 -1
- package/esm2022/lib/contracts/ports/spatial-data.port.mjs +1 -1
- package/esm2022/lib/contracts/region-editor-api.contract.mjs +1 -1
- package/esm2022/lib/contracts/region-store.contract.mjs +1 -1
- package/esm2022/lib/contracts/spatial-dataset.contract.mjs +1 -1
- package/esm2022/lib/contracts/visualizer.contract.mjs +1 -1
- package/esm2022/lib/geometry/cell-meshes.mjs +37 -0
- package/esm2022/lib/geometry/place.mjs +47 -0
- package/esm2022/lib/implementations/napari-js/napari-camera-depth.mjs +93 -0
- package/esm2022/lib/implementations/napari-js/napari-loading-state.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-region-overlay.mjs +2 -2
- package/esm2022/lib/implementations/napari-js/napari-scene.mjs +1 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-2d-scene.mjs +81 -15
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-cells.mjs +746 -0
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-scene.mjs +325 -18
- package/esm2022/lib/implementations/napari-js/napari-spatial-3d-transcripts.mjs +182 -24
- package/esm2022/lib/implementations/napari-js/napari-spatial-hover.mjs +95 -5
- package/esm2022/lib/implementations/napari-js/napari-spatial-scene.mjs +15 -1
- package/esm2022/lib/implementations/napari-js/napari-spatial-tiles.mjs +30 -2
- package/esm2022/lib/implementations/napari-js/napari-visualizer.service.mjs +40 -1
- package/esm2022/lib/implementations/napari-js/napari-volume-region-meshes.mjs +111 -28
- package/esm2022/lib/implementations/napari-js/napari-volume-scene.mjs +14 -2
- package/esm2022/lib/implementations/napari-js/spatial-tiles/cell-layers.mjs +180 -48
- package/esm2022/lib/implementations/napari-js/spatial-tiles/transcript-layers.mjs +28 -8
- package/esm2022/lib/implementations/osd/osd-region-overlay.mjs +2 -2
- package/esm2022/lib/implementations/spatial-data-http/spatial-data-http.service.mjs +10 -1
- package/esm2022/lib/region-editor/class-tree/class-tree.component.mjs +30 -3
- package/esm2022/lib/region-editor/classes-panel/classes-panel.component.mjs +15 -3
- package/esm2022/lib/region-editor/region-editor.component.mjs +24 -4
- package/esm2022/lib/region-source/region-source-ops.mjs +7 -1
- package/esm2022/lib/region-source/region-tiles.mjs +1 -1
- package/esm2022/lib/region-source/worker-region-source.mjs +24 -1
- package/esm2022/lib/routing-visualizer.service.mjs +404 -7
- package/esm2022/lib/spatial/observations-in-selection.mjs +83 -0
- package/esm2022/lib/spatial/plane-cells.mjs +119 -0
- package/esm2022/lib/spatial/spatial-controls.facade.mjs +298 -5
- package/esm2022/lib/spatial/spatial-encoding.mjs +35 -3
- package/esm2022/lib/spatial/spatial-hover.mjs +34 -1
- package/esm2022/lib/spatial/spatial-planes.mjs +49 -0
- package/esm2022/lib/spatial/spatial-selection.mjs +2 -2
- package/esm2022/lib/spatial/spatial-tile-merge.mjs +38 -1
- package/esm2022/lib/spatial/transcripts-in-selection.mjs +208 -0
- package/esm2022/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.mjs +42 -65
- package/esm2022/lib/spatial-controls/spatial-color-by/spatial-color-by.component.mjs +187 -0
- package/esm2022/lib/spatial-controls/spatial-controls.component.mjs +47 -12
- package/esm2022/lib/spatial-controls/spatial-gene-tree/spatial-gene-tree.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.mjs +38 -10
- package/esm2022/lib/spatial-controls/spatial-key/spatial-key.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-marker-genes-form/spatial-marker-genes-form.component.mjs +3 -3
- package/esm2022/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.mjs +79 -57
- package/esm2022/lib/spatial-controls/spatial-selection-observations/spatial-selection-observations.component.mjs +101 -0
- package/esm2022/lib/spatial-controls/spatial-selection-transcripts/spatial-selection-transcripts.component.mjs +94 -0
- package/esm2022/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.mjs +9 -3
- package/esm2022/lib/store/region-source-scope.mjs +10 -1
- package/esm2022/lib/store/region-store.service.mjs +33 -2
- package/esm2022/lib/toolbar/toolbar.component.mjs +10 -3
- package/esm2022/lib/visualizer/spatial-region-set.mjs +95 -0
- package/esm2022/lib/visualizer.component.mjs +40 -4
- package/fesm2022/{jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DHrHO2ay.mjs → jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CBiLcnE6.mjs} +4521 -759
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-CBiLcnE6.mjs.map +1 -0
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-CKEUwNta.mjs → jax-data-science-sci-image-visualizer-onnx-sam-session-BXHjv4PE.mjs} +2 -2
- package/fesm2022/{jax-data-science-sci-image-visualizer-onnx-sam-session-CKEUwNta.mjs.map → jax-data-science-sci-image-visualizer-onnx-sam-session-BXHjv4PE.mjs.map} +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer.mjs +1 -1
- package/fesm2022/region-source.worker.js +84 -2
- package/lib/contracts/display-types.d.ts +90 -4
- package/lib/contracts/image.contract.d.ts +6 -0
- package/lib/contracts/ports/spatial-data.port.d.ts +7 -0
- package/lib/contracts/region-editor-api.contract.d.ts +9 -0
- package/lib/contracts/region-store.contract.d.ts +6 -0
- package/lib/contracts/spatial-dataset.contract.d.ts +7 -1
- package/lib/contracts/visualizer.contract.d.ts +43 -1
- package/lib/geometry/cell-meshes.d.ts +27 -0
- package/lib/geometry/place.d.ts +45 -0
- package/lib/implementations/napari-js/napari-camera-depth.d.ts +23 -0
- package/lib/implementations/napari-js/napari-loading-state.d.ts +1 -1
- package/lib/implementations/napari-js/napari-scene.d.ts +12 -0
- package/lib/implementations/napari-js/napari-spatial-2d-scene.d.ts +19 -3
- package/lib/implementations/napari-js/napari-spatial-3d-cells.d.ts +141 -0
- package/lib/implementations/napari-js/napari-spatial-3d-scene.d.ts +87 -0
- package/lib/implementations/napari-js/napari-spatial-3d-transcripts.d.ts +49 -8
- package/lib/implementations/napari-js/napari-spatial-hover.d.ts +22 -0
- package/lib/implementations/napari-js/napari-spatial-scene.d.ts +12 -0
- package/lib/implementations/napari-js/napari-spatial-tiles.d.ts +15 -0
- package/lib/implementations/napari-js/napari-visualizer.service.d.ts +27 -1
- package/lib/implementations/napari-js/napari-volume-region-meshes.d.ts +38 -19
- package/lib/implementations/napari-js/napari-volume-scene.d.ts +2 -0
- package/lib/implementations/napari-js/spatial-tiles/cell-layers.d.ts +53 -0
- package/lib/implementations/napari-js/spatial-tiles/transcript-layers.d.ts +11 -2
- package/lib/implementations/spatial-data-http/spatial-data-http.service.d.ts +7 -0
- package/lib/region-editor/class-tree/class-tree.component.d.ts +16 -1
- package/lib/region-editor/classes-panel/classes-panel.component.d.ts +10 -1
- package/lib/region-editor/region-editor.component.d.ts +4 -0
- package/lib/region-source/region-source-ops.d.ts +12 -0
- package/lib/region-source/region-tiles.d.ts +8 -0
- package/lib/region-source/worker-region-source.d.ts +18 -0
- package/lib/routing-visualizer.service.d.ts +140 -1
- package/lib/spatial/observations-in-selection.d.ts +43 -0
- package/lib/spatial/plane-cells.d.ts +37 -0
- package/lib/spatial/spatial-controls.facade.d.ts +59 -0
- package/lib/spatial/spatial-encoding.d.ts +14 -1
- package/lib/spatial/spatial-hover.d.ts +23 -0
- package/lib/spatial/spatial-planes.d.ts +22 -0
- package/lib/spatial/spatial-selection.d.ts +2 -1
- package/lib/spatial/spatial-tile-merge.d.ts +9 -0
- package/lib/spatial/transcripts-in-selection.d.ts +95 -0
- package/lib/spatial-controls/spatial-cells-panel/spatial-cells-panel.component.d.ts +19 -28
- package/lib/spatial-controls/spatial-color-by/spatial-color-by.component.d.ts +64 -0
- package/lib/spatial-controls/spatial-controls.component.d.ts +17 -2
- package/lib/spatial-controls/spatial-groups-panel/spatial-groups-panel.component.d.ts +16 -6
- package/lib/spatial-controls/spatial-observations-panel/spatial-observations-panel.component.d.ts +26 -23
- package/lib/spatial-controls/spatial-selection-observations/spatial-selection-observations.component.d.ts +48 -0
- package/lib/spatial-controls/spatial-selection-transcripts/spatial-selection-transcripts.component.d.ts +43 -0
- package/lib/spatial-controls/spatial-transcripts-panel/spatial-transcripts-panel.component.d.ts +3 -1
- package/lib/store/region-source-scope.d.ts +4 -0
- package/lib/store/region-store.service.d.ts +21 -0
- package/lib/toolbar/toolbar.component.d.ts +6 -1
- package/lib/visualizer/spatial-region-set.d.ts +55 -0
- package/lib/visualizer.component.d.ts +14 -0
- package/package.json +1 -1
- package/fesm2022/jax-data-science-sci-image-visualizer-jax-data-science-sci-image-visualizer-DHrHO2ay.mjs.map +0 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { NO_CATEGORY, isCategoricalColumn } from '../../contracts/spatial-dataset.contract';
|
|
2
|
-
import { sameSelection, selectByCategory } from '../../spatial/spatial-selection';
|
|
3
|
-
import { hoverText } from '../../spatial/spatial-hover';
|
|
2
|
+
import { sameSelection, selectByCategory, selectByIndices } from '../../spatial/spatial-selection';
|
|
3
|
+
import { cellText, cellTypeText, hoverText } from '../../spatial/spatial-hover';
|
|
4
|
+
import { cellTypeColumnFor } from '../../spatial/lod';
|
|
4
5
|
import { Supersede } from '../../util/supersede';
|
|
5
6
|
import { NapariSpatialTooltip } from './napari-spatial-tooltip';
|
|
6
7
|
/** Movement, in screen pixels, under which a press-release is a CLICK and not a
|
|
@@ -32,6 +33,10 @@ export class SpatialHover {
|
|
|
32
33
|
/** What the markers are coloured by, resolved once per colour source rather than per hover. */
|
|
33
34
|
this.hoverSource = null;
|
|
34
35
|
this.hoverSourceKey = null;
|
|
36
|
+
/** In 3D: what a cell's tooltip says of it (its type, id, measurements), resolved once per dataset. */
|
|
37
|
+
this.cellInfo = null;
|
|
38
|
+
this.cellInfoKey = null;
|
|
39
|
+
this.cellInfoLoads = new Supersede();
|
|
35
40
|
/** Latest wins within the scene: the KEY is only committed once a resolution lands, so a
|
|
36
41
|
* superseded fetch cannot leave the cache claiming to hold a source it never stored. */
|
|
37
42
|
this.resolutions = new Supersede();
|
|
@@ -133,6 +138,8 @@ export class SpatialHover {
|
|
|
133
138
|
* the pointer moved would be indefensible either way.
|
|
134
139
|
*/
|
|
135
140
|
async resolveSource(dataset, view) {
|
|
141
|
+
if (this.host.is3d)
|
|
142
|
+
void this.resolveCellInfo(dataset, view);
|
|
136
143
|
const port = this.host.port;
|
|
137
144
|
const colorBy = view.colorBy;
|
|
138
145
|
const key = dataset && colorBy ? `${dataset.id}|${colorBy.kind}:${colorBy.name}` : null;
|
|
@@ -193,6 +200,67 @@ export class SpatialHover {
|
|
|
193
200
|
this.hoverSourceKey = null;
|
|
194
201
|
}
|
|
195
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* What a 3D cell's tooltip says (see `cellText`): the cell-type column's codes, the ids, and the
|
|
205
|
+
* dataset's first few continuous columns. Resolved once per dataset and type column; a failure
|
|
206
|
+
* leaves the tooltip with what the colouring says.
|
|
207
|
+
*/
|
|
208
|
+
async resolveCellInfo(dataset, view) {
|
|
209
|
+
const port = this.host.port;
|
|
210
|
+
const typeName = dataset ? cellTypeColumnFor(dataset, view) : null;
|
|
211
|
+
const key = dataset ? `${dataset.id}|${typeName ?? ''}` : null;
|
|
212
|
+
if (key === this.cellInfoKey)
|
|
213
|
+
return;
|
|
214
|
+
this.cellInfoKey = key;
|
|
215
|
+
const task = this.cellInfoLoads.next();
|
|
216
|
+
if (!dataset || !port) {
|
|
217
|
+
this.cellInfo = null;
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
try {
|
|
221
|
+
const type = typeName ? await port.getColumn(typeName) : null;
|
|
222
|
+
const measureNames = dataset.columns
|
|
223
|
+
.filter((c) => c.kind === 'continuous')
|
|
224
|
+
.map((c) => c.name)
|
|
225
|
+
.slice(0, 4);
|
|
226
|
+
const measures = (await Promise.all(measureNames.map((n) => port.getColumn(n).catch(() => null)))).flatMap((c) => c && !isCategoricalColumn(c)
|
|
227
|
+
? [{ name: c.meta.name, values: c.values, ...(c.meta.unit ? { unit: c.meta.unit } : {}) }]
|
|
228
|
+
: []);
|
|
229
|
+
if (!task())
|
|
230
|
+
return;
|
|
231
|
+
const categorical = type && isCategoricalColumn(type) ? type : null;
|
|
232
|
+
let counts = null;
|
|
233
|
+
if (categorical) {
|
|
234
|
+
counts = new Uint32Array(categorical.meta.categories.length);
|
|
235
|
+
for (const c of categorical.codes)
|
|
236
|
+
if (c !== NO_CATEGORY && c < counts.length)
|
|
237
|
+
counts[c]++;
|
|
238
|
+
}
|
|
239
|
+
this.cellInfo = {
|
|
240
|
+
typeName: categorical ? typeName : null,
|
|
241
|
+
categories: categorical?.meta.categories ?? [],
|
|
242
|
+
codes: categorical?.codes ?? null,
|
|
243
|
+
counts,
|
|
244
|
+
...(dataset.observations.ids ? { ids: dataset.observations.ids } : {}),
|
|
245
|
+
measures,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
if (!task())
|
|
250
|
+
return;
|
|
251
|
+
this.cellInfo = null;
|
|
252
|
+
this.cellInfoKey = null;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
/** In 3D: the tooltip of the cell, or of the cell type's surface, under a client position. */
|
|
256
|
+
cell3dText(clientX, clientY) {
|
|
257
|
+
if (!this.host.is3d)
|
|
258
|
+
return null;
|
|
259
|
+
const cell = this.host.pickCell?.(clientX, clientY) ?? -1;
|
|
260
|
+
if (cell >= 0)
|
|
261
|
+
return cellText(this.cellInfo, cell, this.hoverSource);
|
|
262
|
+
return null;
|
|
263
|
+
}
|
|
196
264
|
/** Hit-test the last pointer position and show or hide the tooltip. */
|
|
197
265
|
update(el) {
|
|
198
266
|
const tip = this.tooltip;
|
|
@@ -222,8 +290,20 @@ export class SpatialHover {
|
|
|
222
290
|
return;
|
|
223
291
|
}
|
|
224
292
|
}
|
|
225
|
-
|
|
226
|
-
|
|
293
|
+
// A cell drawn by itself names itself; a marker, its colouring; else a cell type's surface.
|
|
294
|
+
let lines = this.cell3dText(pointer.clientX, pointer.clientY);
|
|
295
|
+
if (!lines) {
|
|
296
|
+
const hit = this.host.pick(pointer.clientX, pointer.clientY, HOVER_RADIUS_PX);
|
|
297
|
+
lines =
|
|
298
|
+
hit >= 0 && this.host.is3d && this.cellInfo
|
|
299
|
+
? cellText(this.cellInfo, hit, this.hoverSource)
|
|
300
|
+
: hoverText(this.hoverSource, hit);
|
|
301
|
+
if (!lines && this.host.is3d) {
|
|
302
|
+
const region = this.host.pickRegion?.(pointer.clientX, pointer.clientY);
|
|
303
|
+
if (region)
|
|
304
|
+
lines = cellTypeText(this.cellInfo, region.key, region.label);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
227
307
|
if (!lines) {
|
|
228
308
|
tip.hide();
|
|
229
309
|
return;
|
|
@@ -245,6 +325,16 @@ export class SpatialHover {
|
|
|
245
325
|
const source = this.hoverSource;
|
|
246
326
|
const store = this.host.selection;
|
|
247
327
|
const dataset = this.host.dataset();
|
|
328
|
+
// A cell drawn by itself: the click selects that cell (again: clears it), whatever colours it.
|
|
329
|
+
const cell = this.host.pickCell?.(clientX, clientY) ?? -1;
|
|
330
|
+
if (cell >= 0 && store && dataset) {
|
|
331
|
+
const next = selectByIndices([cell], dataset.observations.count);
|
|
332
|
+
if (sameSelection(store.current(), next))
|
|
333
|
+
store.clear();
|
|
334
|
+
else
|
|
335
|
+
store.set(next);
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
248
338
|
// Only a categorical source has classes to select. A gene is continuous:
|
|
249
339
|
// there is no set of cells that "is" a value.
|
|
250
340
|
if (!store || !dataset || source?.kind !== 'categorical')
|
|
@@ -267,4 +357,4 @@ export class SpatialHover {
|
|
|
267
357
|
store.set(next);
|
|
268
358
|
}
|
|
269
359
|
}
|
|
270
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtaG92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtaG92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBa0IsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU1RyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEYsT0FBTyxFQUFvQixTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHaEU7OzhDQUU4QztBQUM5QyxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEI7c0VBQ3NFO0FBQ3RFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6Qjs7dURBRXVEO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUF5QmxDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQVl2QixZQUE2QixJQUFzQjtRQUF0QixTQUFJLEdBQUosSUFBSSxDQUFrQjtRQVgzQyxZQUFPLEdBQWdDLElBQUksQ0FBQztRQUNwRCwrRkFBK0Y7UUFDdkYsZ0JBQVcsR0FBdUIsSUFBSSxDQUFDO1FBQ3ZDLG1CQUFjLEdBQWtCLElBQUksQ0FBQztRQUM3QztpR0FDeUY7UUFDeEUsZ0JBQVcsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBQ3ZDLFlBQU8sR0FBZ0QsSUFBSSxDQUFDO1FBQzVELFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixRQUFHLEdBQW1CLEVBQUUsQ0FBQztJQUVxQixDQUFDO0lBRXZEOzs7Ozs7O09BT0c7SUFD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QUUsQ0FBQztZQUNqQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBWaWV3ZXIgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgeyBTcGF0aWFsRGF0YVBvcnQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcG9ydHMvc3BhdGlhbC1kYXRhLnBvcnQnO1xuaW1wb3J0IHsgTk9fQ0FURUdPUlksIFNwYXRpYWxEYXRhc2V0LCBpc0NhdGVnb3JpY2FsQ29sdW1uIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgeyBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgc2FtZVNlbGVjdGlvbiwgc2VsZWN0QnlDYXRlZ29yeSB9IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgdHlwZSBIb3ZlclNvdXJjZSwgaG92ZXJUZXh0IH0gZnJvbSAnLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWhvdmVyJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25TdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3NwYXRpYWwtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VwZXJzZWRlIH0gZnJvbSAnLi4vLi4vdXRpbC9zdXBlcnNlZGUnO1xuaW1wb3J0IHsgTmFwYXJpU3BhdGlhbFRvb2x0aXAgfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLXRvb2x0aXAnO1xuaW1wb3J0IHsgTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMgfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLXRpbGVzJztcblxuLyoqIE1vdmVtZW50LCBpbiBzY3JlZW4gcGl4ZWxzLCB1bmRlciB3aGljaCBhIHByZXNzLXJlbGVhc2UgaXMgYSBDTElDSyBhbmQgbm90IGFcbiAqICBkcmFnLiBBbiBvcmJpdCBvciBhIHBhbiBzdGFydHMgdGhlIHNhbWUgd2F5LCBzbyB0aGUgdHdvIGhhdmUgdG8gYmUgdG9sZFxuICogIGFwYXJ0IGJ5IGhvdyBmYXIgdGhlIHBvaW50ZXIgdHJhdmVsbGVkLiAqL1xuY29uc3QgQ0xJQ0tfU0xPUF9QWCA9IDQ7XG4vKiogTG9uZ2VzdCBwcmVzcy1yZWxlYXNlIHN0aWxsIHRyZWF0ZWQgYXMgYSBjbGljay4gQSBsb25nIHByZXNzIHdpdGggdGhlIG1vdXNlXG4gKiAgaGVsZCBzdGlsbCBpcyBtb3JlIGxpa2VseSBhbiBpbnRlcnJ1cHRlZCBkcmFnIHRoYW4gYSBzZWxlY3Rpb24uICovXG5jb25zdCBDTElDS19NQVhfTVMgPSA2MDA7XG4vKiogUG9pbnRlciBkaXN0YW5jZSwgaW4gc2NyZWVuIHBpeGVscywgdGhhdCBzdGlsbCBjb3VudHMgYXMgXCJvblwiIGEgbWFya2VyLlxuICogIEdlbmVyb3VzIHJlbGF0aXZlIHRvIGEgMS41cHggZGlzYzogdGhlIGN1cnNvciBpcyBhIGJsdW50IGluc3RydW1lbnQsIGFuZCBhXG4gKiAgdG9vbHRpcCB5b3UgaGF2ZSB0byBodW50IGZvciBpcyB3b3JzZSB0aGFuIG5vbmUuICovXG5leHBvcnQgY29uc3QgSE9WRVJfUkFESVVTX1BYID0gMTA7XG5cbi8qKiBXaGF0IHRoZSBob3ZlciByZWFkcyBmcm9tIHRoZSBzcGF0aWFsIHNjZW5lIGl0IHNlcnZlcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbEhvdmVySG9zdCB7XG4gIC8qKiBUaGUgb3JiaXQgdmlldyByYXRoZXIgdGhhbiB0aGUgMkQgdmlldyAobm8gdHJhbnNjcmlwdCBtYXJrZXJzIHRvIGFzayBmaXJzdCkuICovXG4gIHJlYWRvbmx5IGlzM2Q6IGJvb2xlYW47XG4gIHJlYWRvbmx5IHZpZXdlcjogVmlld2VyO1xuICByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQgfCBudWxsO1xuICByZWFkb25seSBzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25TdG9yZSB8IG51bGw7XG4gIC8qKiBUaGUgZGF0YXNldCBvbiBzY3JlZW4sIGFzIHRoZSBzcGF0aWFsIHN1YnNjcmlwdGlvbiBsYXN0IHNhdyBpdC4gKi9cbiAgZGF0YXNldCgpOiBTcGF0aWFsRGF0YXNldCB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgT0JTRVJWQVRJT04gZHJhd24gdW5kZXIgYSBjbGllbnQgcG9zaXRpb24sIG9yIC0xIOKAlCBgc2xhY2tQeGAgc2NyZWVuIHBpeGVscyBvZiBzbGFja1xuICAgKiBhcm91bmQgdGhlIHBvaW50ZXIuIFRoZSBzY2VuZSBvd25zIHRoZSBwaWNrIChuYXBhcmktanMncywgb24gdGhlIGxheWVyIGl0IGRyZXcpIGFuZCBtYXBzIHRoZVxuICAgKiBkcmF3biBpbmRleCBiYWNrIHRvIHRoZSBvYnNlcnZhdGlvbi5cbiAgICovXG4gIHBpY2soY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIsIHNsYWNrUHg6IG51bWJlcik6IG51bWJlcjtcbiAgLyoqIFRoZSAyRCB0cmFuc2NyaXB0IG1hcmtlcnMsIHdoaWNoIHNpdCBvbiB0b3Agb2YgZXZlcnl0aGluZyBhbmQgYXJlIGFza2VkIGZpcnN0LiAqL1xuICB0aWxlcygpOiBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyB8IG51bGw7XG4gIC8qKiBBIHJlZ2lvbiB0b29sIG93bnMgdGhlIHBvaW50ZXIgKHBsYWNpbmcgYSBwb2x5Z29uIHZlcnRleCBpcyBhbHNvIGEgc3RpbGwgY2xpY2spLiAqL1xuICB0b29sQWN0aXZlKCk6IGJvb2xlYW47XG4gIG91dHNpZGVab25lPFQ+KGZuOiAoKSA9PiBUKTogVDtcbiAgaW5ab25lPFQ+KGZuOiAoKSA9PiBUKTogVDtcbn1cblxuLyoqXG4gKiBDdXJzb3IgdG9vbHRpcCBhbmQgY2xpY2stdG8tc2VsZWN0IGZvciB0aGUgc3BhdGlhbCB2aWV3cyAocmV2aWV3IEFwcGVuZGl4IEIsIGNsdXN0ZXIgTCk6IGhvdmVyIGFcbiAqIG1hcmtlciwgcmVhZCBpdHMgY2xhc3M7IGNsaWNrIGl0LCBzZWxlY3QgdGhlIGNsYXNzIOKAlCB0aGUgY2FudmFzIGVxdWl2YWxlbnQgb2YgdGhlIHBhbmVsJ3NcbiAqIGxlZ2VuZC4gVGhlIHRvb2x0aXAgYW5kIHRoZSBjbGljayBzaGFyZSBPTkUgaGl0LXRlc3QsIHNvIGEgY2xpY2sgc2VsZWN0cyB0aGUgY2xhc3MgdGhlIHRvb2x0aXBcbiAqIG5hbWVzIChOQVBBUkktU1ZDLTUpLlxuICpcbiAqIEEgMzQtZW50cnkgbGVnZW5kIGNhbm5vdCBiZSByZWFkIGJhY2sgZnJvbSBhIGRvdCDigJQgc2V2ZXJhbCBjbGFzc2VzIGdldCBzaW1pbGFyIGNvbG91cnMsIGFuZFxuICogbWF0Y2hpbmcgb25lIHRvIGEgc3dhdGNoIGJ5IGV5ZSBpcyBleGFjdGx5IHRoZSB0YXNrIHRoaXMgcmVtb3Zlcy4gSXQgcmVwb3J0cyB3aGF0ZXZlciB0aGUgY2xvdWRcbiAqIGlzIENVUlJFTlRMWSBjb2xvdXJlZCBieSAoe0BsaW5rIHJlc29sdmVTb3VyY2V9KSwgc28gaXQgYW5kIHRoZSBsZWdlbmQgY2FuIG5ldmVyIHNheSBkaWZmZXJlbnRcbiAqIHRoaW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwYXRpYWxIb3ZlciB7XG4gIHByaXZhdGUgdG9vbHRpcDogTmFwYXJpU3BhdGlhbFRvb2x0aXAgfCBudWxsID0gbnVsbDtcbiAgLyoqIFdoYXQgdGhlIG1hcmtlcnMgYXJlIGNvbG91cmVkIGJ5LCByZXNvbHZlZCBvbmNlIHBlciBjb2xvdXIgc291cmNlIHJhdGhlciB0aGFuIHBlciBob3Zlci4gKi9cbiAgcHJpdmF0ZSBob3ZlclNvdXJjZTogSG92ZXJTb3VyY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBob3ZlclNvdXJjZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBMYXRlc3Qgd2lucyB3aXRoaW4gdGhlIHNjZW5lOiB0aGUgS0VZIGlzIG9ubHkgY29tbWl0dGVkIG9uY2UgYSByZXNvbHV0aW9uIGxhbmRzLCBzbyBhXG4gICAqICBzdXBlcnNlZGVkIGZldGNoIGNhbm5vdCBsZWF2ZSB0aGUgY2FjaGUgY2xhaW1pbmcgdG8gaG9sZCBhIHNvdXJjZSBpdCBuZXZlciBzdG9yZWQuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb2x1dGlvbnMgPSBuZXcgU3VwZXJzZWRlKCk7XG4gIHByaXZhdGUgcG9pbnRlcjogeyBjbGllbnRYOiBudW1iZXI7IGNsaWVudFk6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZnJhbWUgPSAwO1xuICBwcml2YXRlIG9mZjogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IFNwYXRpYWxIb3Zlckhvc3QpIHt9XG5cbiAgLyoqXG4gICAqIExpc3RlbiBvbiBgZWxgICh0aGUgcGxvdCBob3N0KSByYXRoZXIgdGhhbiB0aGUgY2FudmFzLCBzbyBpdCBrZWVwcyB3b3JraW5nIG92ZXIgdGhlIHJlZ2lvblxuICAgKiBvdmVybGF5IChhbiBTVkcgY292ZXJpbmcgdGhlIGNhbnZhcywgd2hpY2ggd291bGQgb3RoZXJ3aXNlIHN3YWxsb3cgZXZlcnkgbW92ZSksIGFuZCB0aHJvdHRsZVxuICAgKiB0byBvbmUgaGl0LXRlc3QgcGVyIGFuaW1hdGlvbiBmcmFtZTogYSBwb2ludGVybW92ZSBjYW4gZmlyZSBmYXIgbW9yZSBvZnRlbiB0aGFuIHRoYXQsIGFuZFxuICAgKiB0aGUgZmlyc3QgdGVzdCBhZnRlciBhbiBvcmJpdCByZS1wcm9qZWN0cyB0aGUgY2xvdWQuIE5vbmUgd2hpbGUgYSBidXR0b24gaXMgaGVsZDogdGhhdCBpcyBhblxuICAgKiBvcmJpdCBvciBhIHBhbiBtb3ZpbmcgdGhlIGNhbWVyYSBldmVyeSBmcmFtZSwgYW5kIGEgdGVzdCBwZXIgZnJhbWUgcmUtcHJvamVjdGVkIGFsbCBvZiBhIDMuN01cbiAgICogY2xvdWQgZWFjaCB0aW1lICjiiYgxNTAgbXMgYSBmcmFtZSk7IHRoZSBmaXJzdCBtb3ZlIGFmdGVyIHRoZSBkcmFnIHBheXMgZm9yIG9uZS5cbiAgICovXG4gIGluc3RhbGwoZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5kaXNwb3NlKCk7XG4gICAgdGhpcy50b29sdGlwID0gbmV3IE5hcGFyaVNwYXRpYWxUb29sdGlwKGVsKTtcblxuICAgIGNvbnN0IG9uTW92ZSA9IChlOiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgIGlmIChlLmJ1dHRvbnMpIHtcbiAgICAgICAgdGhpcy5wb2ludGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy50b29sdGlwPy5oaWRlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9pbnRlciA9IHsgY2xpZW50WDogZS5jbGllbnRYLCBjbGllbnRZOiBlLmNsaWVudFkgfTtcbiAgICAgIGlmICh0aGlzLmZyYW1lKSByZXR1cm47XG4gICAgICB0aGlzLmZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgdGhpcy5mcmFtZSA9IDA7XG4gICAgICAgIHRoaXMudXBkYXRlKGVsKTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgb25MZWF2ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMucG9pbnRlciA9IG51bGw7XG4gICAgICB0aGlzLnRvb2x0aXA/LmhpZGUoKTtcbiAgICB9O1xuXG4gICAgLy8gQSBjbGljayBvbiBhIG1hcmtlciBzZWxlY3RzIGl0cyBjbGFzcywgZXhhY3RseSBhcyBjbGlja2luZyB0aGF0IGNsYXNzIGluIHRoZVxuICAgIC8vIHBhbmVsJ3MgbGVnZW5kIGRvZXMg4oCUIGluY2x1ZGluZyBjbGlja2luZyBhZ2FpbiB0byBjbGVhciwgc28gYSBjbGljayBpc1xuICAgIC8vIGFsd2F5cyByZXZlcnNpYmxlLiBUcmFja2VkIGFzIGRvd24vdXAgcmF0aGVyIHRoYW4gYm91bmQgdG8gYGNsaWNrYCBzbyBhIERSQUdcbiAgICAvLyAoYW4gb3JiaXQgaW4gM0QsIGEgcGFuIGluIDJEKSBjYW4gYmUgdG9sZCBhcGFydCBmcm9tIGEgY2xpY2s6IHRoZSBnZXN0dXJlXG4gICAgLy8gaGFzIHRvIG1vdmUgbGVzcyB0aGFuIGEgZmV3IHBpeGVscyBhbmQgYmUgb3ZlciBxdWlja2x5LlxuICAgIGxldCBkb3duOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB0OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuICAgIGNvbnN0IG9uRG93biA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBkb3duID0geyB4OiBlLmNsaWVudFgsIHk6IGUuY2xpZW50WSwgdDogRGF0ZS5ub3coKSB9O1xuICAgIH07XG4gICAgY29uc3Qgb25VcCA9IChlOiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBzdGFydCA9IGRvd247XG4gICAgICBkb3duID0gbnVsbDtcbiAgICAgIGlmICghc3RhcnQpIHJldHVybjtcbiAgICAgIGNvbnN0IG1vdmVkID0gTWF0aC5oeXBvdChlLmNsaWVudFggLSBzdGFydC54LCBlLmNsaWVudFkgLSBzdGFydC55KTtcbiAgICAgIGlmIChtb3ZlZCA+IENMSUNLX1NMT1BfUFgpIHJldHVybjtcbiAgICAgIGlmIChEYXRlLm5vdygpIC0gc3RhcnQudCA+IENMSUNLX01BWF9NUykgcmV0dXJuO1xuICAgICAgLy8gQSByZWdpb24gdG9vbCBvd25zIHRoZSBwb2ludGVyIHdoaWxlIGl0IGlzIGFjdGl2ZSwgYW5kIHBsYWNpbmcgYSBwb2x5Z29uXG4gICAgICAvLyB2ZXJ0ZXggaXMgYWxzbyBhIGNsaWNrIHRoYXQgZG9lcyBub3QgbW92ZS5cbiAgICAgIGlmICh0aGlzLmhvc3QudG9vbEFjdGl2ZSgpKSByZXR1cm47XG4gICAgICB0aGlzLmhvc3QuaW5ab25lKCgpID0+IHRoaXMuc2VsZWN0Q2xhc3NBdChlLmNsaWVudFgsIGUuY2xpZW50WSkpO1xuICAgIH07XG5cbiAgICAvLyBPdXRzaWRlIHRoZSB6b25lOiBhIHBvaW50ZXJtb3ZlIGZpcmVzIGZhciBtb3JlIG9mdGVuIHRoYW4gYW55dGhpbmcgaGVyZSBjaGFuZ2VzIHdoYXRcbiAgICAvLyBBbmd1bGFyIHJlbmRlcnMgKHRoZSB0b29sdGlwIGlzIHBsYWluIERPTSk7IGEgc2VsZWN0aW5nIGNsaWNrIHJlLWVudGVycyBpdC5cbiAgICB0aGlzLmhvc3Qub3V0c2lkZVpvbmUoKCkgPT4ge1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvbk1vdmUpO1xuICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmxlYXZlJywgb25MZWF2ZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIG9uRG93bik7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvblVwKTtcbiAgICB9KTtcbiAgICB0aGlzLm9mZi5wdXNoKCgpID0+IGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJtb3ZlJywgb25Nb3ZlKSk7XG4gICAgdGhpcy5vZmYucHVzaCgoKSA9PiBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVybGVhdmUnLCBvbkxlYXZlKSk7XG4gICAgdGhpcy5vZmYucHVzaCgoKSA9PiBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVyZG93bicsIG9uRG93bikpO1xuICAgIHRoaXMub2ZmLnB1c2goKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgb25VcCkpO1xuICB9XG5cbiAgLyoqIEhpZGUgdGhlIHRvb2x0aXAgKHRoZSBuYXZpZ2F0b3IgaXMgYmVpbmcgZHJhZ2dlZCwgc2F5KS4gKi9cbiAgaGlkZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXA/LmhpZGUoKTtcbiAgfVxuXG4gIC8qKiBSZW1vdmUgdGhlIGxpc3RlbmVycyBhbmQgdGhlIHRvb2x0aXAsIGFuZCBkcm9wIHRoZSBjb2xvdXIgc291cmNlLiAqL1xuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3Qgb2ZmIG9mIHRoaXMub2ZmKSBvZmYoKTtcbiAgICB0aGlzLm9mZiA9IFtdO1xuICAgIGlmICh0aGlzLmZyYW1lKSBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLmZyYW1lKTtcbiAgICB0aGlzLmZyYW1lID0gMDtcbiAgICB0aGlzLnBvaW50ZXIgPSBudWxsO1xuICAgIHRoaXMudG9vbHRpcD8uZGlzcG9zZSgpO1xuICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgdGhpcy5yZXNvbHV0aW9ucy5jYW5jZWwoKTtcbiAgICB0aGlzLmhvdmVyU291cmNlID0gbnVsbDtcbiAgICB0aGlzLmhvdmVyU291cmNlS2V5ID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGF0IHRoZSB0b29sdGlwIHNheXMsIHJlc29sdmVkIG9uY2UgcGVyIGNvbG91ciBzb3VyY2UgcmF0aGVyIHRoYW4gcGVyIGhvdmVyLlxuICAgKlxuICAgKiBGZXRjaGVkIHNlcGFyYXRlbHkgZnJvbSB0aGUgY29sb3VyaW5nIG9uIHB1cnBvc2U6IHRoZSByZWZlcmVuY2UgcG9ydCBjYWNoZXNcbiAgICogY29sdW1ucywgYnV0IGEgaG9zdCdzIG5lZWQgbm90LCBhbmQgcmUtZmV0Y2hpbmcgYSAzLjdNLWVsZW1lbnQgdmVjdG9yIGJlY2F1c2VcbiAgICogdGhlIHBvaW50ZXIgbW92ZWQgd291bGQgYmUgaW5kZWZlbnNpYmxlIGVpdGhlciB3YXkuXG4gICAqL1xuICBhc3luYyByZXNvbHZlU291cmNlKGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0IHwgbnVsbCwgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLmhvc3QucG9ydDtcbiAgICBjb25zdCBjb2xvckJ5ID0gdmlldy5jb2xvckJ5O1xuICAgIGNvbnN0IGtleSA9IGRhdGFzZXQgJiYgY29sb3JCeSA/IGAke2RhdGFzZXQuaWR9fCR7Y29sb3JCeS5raW5kfToke2NvbG9yQnkubmFtZX1gIDogbnVsbDtcbiAgICBpZiAoa2V5ID09PSB0aGlzLmhvdmVyU291cmNlS2V5KSByZXR1cm47XG4gICAgLy8gVGhlIGtleSBpcyBjb21taXR0ZWQgb25seSB3aGVyZSBhIHZhbHVlIGlzIGFjdHVhbGx5IHN0b3JlZC4gU2V0dGluZyBpdCB1cFxuICAgIC8vIGZyb250IHdvdWxkIG1lYW4gYSByZXNvbHV0aW9uIHRoYXQgbG9zZXMgdGhlIHJhY2UgbGVhdmVzIHRoZSBrZXkgY2xhaW1pbmcgYVxuICAgIC8vIHNvdXJjZSB0aGF0IHdhcyBuZXZlciBzdG9yZWQg4oCUIGFuZCBzaW5jZSBldmVyeSBsYXRlciBlbWlzc2lvbiBjYXJyaWVzIHRoZVxuICAgIC8vIHNhbWUga2V5LCBpdCB3b3VsZCBzaG9ydC1jaXJjdWl0IGhlcmUgZm9yZXZlciBhbmQgdGhlIHRvb2x0aXAgd291bGQgc3RheVxuICAgIC8vIHNpbGVudCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHNlc3Npb24uXG4gICAgY29uc3QgdGFzayA9IHRoaXMucmVzb2x1dGlvbnMubmV4dCgpO1xuICAgIC8vIE5vIGNvbG91ciBzb3VyY2UgbWVhbnMgbm90aGluZyBpcyBiZWluZyBzYWlkIGFib3V0IHRoZSBjZWxscywgc28gdGhlcmUgaXMgbm9cbiAgICAvLyBjbHVzdGVyIHRvIG5hbWUgYW5kIHRoZSB0b29sdGlwIHN0YXlzIHNpbGVudC5cbiAgICBpZiAoIWtleSB8fCAhZGF0YXNldCB8fCAhY29sb3JCeSB8fCAhcG9ydCkge1xuICAgICAgdGhpcy5ob3ZlclNvdXJjZSA9IG51bGw7XG4gICAgICB0aGlzLmhvdmVyU291cmNlS2V5ID0ga2V5O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKGNvbG9yQnkua2luZCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgcG9ydC5nZXRDb2x1bW4oY29sb3JCeS5uYW1lKTtcbiAgICAgICAgaWYgKCF0YXNrKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5ob3ZlclNvdXJjZSA9IGlzQ2F0ZWdvcmljYWxDb2x1bW4oY29sdW1uKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBraW5kOiAnY2F0ZWdvcmljYWwnLFxuICAgICAgICAgICAgICBuYW1lOiBjb2xvckJ5Lm5hbWUsXG4gICAgICAgICAgICAgIGNhdGVnb3JpZXM6IGNvbHVtbi5tZXRhLmNhdGVnb3JpZXMsXG4gICAgICAgICAgICAgIGNvZGVzOiBjb2x1bW4uY29kZXMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdjb250aW51b3VzJyxcbiAgICAgICAgICAgICAgbmFtZTogY29sb3JCeS5uYW1lLFxuICAgICAgICAgICAgICB2YWx1ZXM6IGNvbHVtbi52YWx1ZXMsXG4gICAgICAgICAgICAgIC4uLihjb2x1bW4ubWV0YS51bml0ID8geyB1bml0OiBjb2x1bW4ubWV0YS51bml0IH0gOiB7fSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB0aGlzLmhvdmVyU291cmNlS2V5ID0ga2V5O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCBwb3J0LmdldEZlYXR1cmVWZWN0b3IoY29sb3JCeS5uYW1lKTtcbiAgICAgIGlmICghdGFzaygpKSByZXR1cm47XG4gICAgICB0aGlzLmhvdmVyU291cmNlID0ge1xuICAgICAgICBraW5kOiAnY29udGludW91cycsXG4gICAgICAgIG5hbWU6IGNvbG9yQnkubmFtZSxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICAuLi4oZGF0YXNldC5mZWF0dXJlcz8udW5pdCA/IHsgdW5pdDogZGF0YXNldC5mZWF0dXJlcy51bml0IH0gOiB7fSksXG4gICAgICB9O1xuICAgICAgdGhpcy5ob3ZlclNvdXJjZUtleSA9IGtleTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGlmICghdGFzaygpKSByZXR1cm47XG4gICAgICAvLyBUaGUgdG9vbHRpcCBpcyBhbiBleHRyYTsgYSBmYWlsZWQgZmV0Y2ggbXVzdCBub3QgZGlzdHVyYiB0aGUgcmVuZGVyLiBUaGVcbiAgICAgIC8vIGtleSBpcyBsZWZ0IHVuc2V0IHNvIGEgbGF0ZXIgZW1pc3Npb24gcmV0cmllcyByYXRoZXIgdGhhbiBpbmhlcml0aW5nIGFcbiAgICAgIC8vIHBlcm1hbmVudCBzaWxlbmNlLlxuICAgICAgdGhpcy5ob3ZlclNvdXJjZSA9IG51bGw7XG4gICAgICB0aGlzLmhvdmVyU291cmNlS2V5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogSGl0LXRlc3QgdGhlIGxhc3QgcG9pbnRlciBwb3NpdGlvbiBhbmQgc2hvdyBvciBoaWRlIHRoZSB0b29sdGlwLiAqL1xuICBwcml2YXRlIHVwZGF0ZShlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLnRvb2x0aXA7XG4gICAgY29uc3QgcG9pbnRlciA9IHRoaXMucG9pbnRlcjtcbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5ob3N0LmRhdGFzZXQoKTtcbiAgICBpZiAoIXRpcCB8fCAhcG9pbnRlciB8fCAhZGF0YXNldCkgcmV0dXJuO1xuXG4gICAgLy8gVHJhbnNjcmlwdCBtYXJrZXJzIHNpdCBvbiB0b3Agb2YgZXZlcnl0aGluZywgc28gdGhleSBhcmUgYXNrZWQgZmlyc3QuXG4gICAgY29uc3QgdGlsZXMgPSB0aGlzLmhvc3QudGlsZXMoKTtcbiAgICBpZiAoIXRoaXMuaG9zdC5pczNkICYmIHRpbGVzKSB7XG4gICAgICBjb25zdCB2aWV3ZXIgPSB0aGlzLmhvc3Qudmlld2VyO1xuICAgICAgY29uc3Qgd29ybGQgPSB2aWV3ZXIuY2FudmFzVG9Xb3JsZChwb2ludGVyLmNsaWVudFgsIHBvaW50ZXIuY2xpZW50WSk7XG4gICAgICBjb25zdCB6b29tID0gdmlld2VyLmNhbWVyYS56b29tO1xuICAgICAgY29uc3QgcmFkaXVzID0gSE9WRVJfUkFESVVTX1BYIC8gKHpvb20gPiAwID8gem9vbSA6IDEpO1xuICAgICAgY29uc3QgbGluZXMgPSB3b3JsZFxuICAgICAgICA/IHRpbGVzLmhvdmVyQXQod29ybGRbMF0sIHdvcmxkWzFdLCByYWRpdXMsIChkZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwID0gdGhpcy5wb2ludGVyO1xuICAgICAgICAgICAgaWYgKCFwIHx8ICF0aGlzLnRvb2x0aXApIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcC5zaG93KGRldGFpbHMsIHAuY2xpZW50WCAtIHIubGVmdCwgcC5jbGllbnRZIC0gci50b3ApO1xuICAgICAgICAgIH0pXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGlmIChsaW5lcykge1xuICAgICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHRpcC5zaG93KGxpbmVzLCBwb2ludGVyLmNsaWVudFggLSByZWN0LmxlZnQsIHBvaW50ZXIuY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhpdCA9IHRoaXMuaG9zdC5waWNrKHBvaW50ZXIuY2xpZW50WCwgcG9pbnRlci5jbGllbnRZLCBIT1ZFUl9SQURJVVNfUFgpO1xuICAgIGNvbnN0IGxpbmVzID0gaG92ZXJUZXh0KHRoaXMuaG92ZXJTb3VyY2UsIGhpdCk7XG4gICAgaWYgKCFsaW5lcykge1xuICAgICAgdGlwLmhpZGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRpcC5zaG93KGxpbmVzLCBwb2ludGVyLmNsaWVudFggLSByZWN0LmxlZnQsIHBvaW50ZXIuY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIGNsYXNzIG9mIHRoZSBtYXJrZXIgYXQgYSBjbGllbnQgcG9zaXRpb24g4oCUIHRoZSBjYW52YXMgZXF1aXZhbGVudCBvZlxuICAgKiBjbGlja2luZyB0aGF0IGNsYXNzIGluIHRoZSBwYW5lbCdzIGxlZ2VuZCwgYW5kIHRoZSBzYW1lIHNlbGVjdGlvbiBvYmplY3QsIHNvXG4gICAqIHRoZSB0d28gY29udHJvbHMgY2Fubm90IHByb2R1Y2UgZGlmZmVyZW50IHJlc3VsdHMuXG4gICAqXG4gICAqIENsaWNraW5nIGEgY2xhc3MgdGhhdCBpcyBhbHJlYWR5IHRoZSB3aG9sZSBzZWxlY3Rpb24gQ0xFQVJTIGl0LCB3aGljaCBpcyB3aGF0XG4gICAqIHRoZSBsZWdlbmQgZG9lcy4gQ29tcGFyZWQgYWdhaW5zdCB0aGUgc2VsZWN0aW9uIGl0c2VsZiByYXRoZXIgdGhhbiBhZ2FpbnN0IGFcbiAgICogcmVtZW1iZXJlZCBjbGljaywgc28gc2VsZWN0aW5nIGZyb20gdGhlIGxlZ2VuZCBhbmQgdGhlbiBjbGlja2luZyB0aGUgc2FtZVxuICAgKiBjbGFzcyBvbiB0aGUgY2FudmFzIHN0aWxsIHRvZ2dsZXMuXG4gICAqL1xuICBwcml2YXRlIHNlbGVjdENsYXNzQXQoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmhvdmVyU291cmNlO1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5ob3N0LnNlbGVjdGlvbjtcbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5ob3N0LmRhdGFzZXQoKTtcbiAgICAvLyBPbmx5IGEgY2F0ZWdvcmljYWwgc291cmNlIGhhcyBjbGFzc2VzIHRvIHNlbGVjdC4gQSBnZW5lIGlzIGNvbnRpbnVvdXM6XG4gICAgLy8gdGhlcmUgaXMgbm8gc2V0IG9mIGNlbGxzIHRoYXQgXCJpc1wiIGEgdmFsdWUuXG4gICAgaWYgKCFzdG9yZSB8fCAhZGF0YXNldCB8fCBzb3VyY2U/LmtpbmQgIT09ICdjYXRlZ29yaWNhbCcpIHJldHVybjtcblxuICAgIC8vIFRoZSBzYW1lIHBpY2sgdGhlIHRvb2x0aXAgbWFrZXMg4oCUIGRlcHRoLWF3YXJlIGluIDNEIOKAlCBzbyBhIGNsaWNrIHNlbGVjdHMgdGhlIGNsYXNzIHRoZVxuICAgIC8vIHRvb2x0aXAgbmFtZXMsIG5vdCBhbiBvY2NsdWRlZCBtYXJrZXIncy5cbiAgICBjb25zdCBoaXQgPSB0aGlzLmhvc3QucGljayhjbGllbnRYLCBjbGllbnRZLCBIT1ZFUl9SQURJVVNfUFgpO1xuICAgIGlmIChoaXQgPCAwKSByZXR1cm47XG4gICAgY29uc3QgY29kZSA9IHNvdXJjZS5jb2Rlc1toaXRdO1xuICAgIC8vIEEgY2VsbCB0aGUgYW5ub3RhdGlvbiBkb2VzIG5vdCBjb3ZlciBoYXMgbm8gY2xhc3MgdG8gc2VsZWN0LlxuICAgIGlmIChjb2RlID09PSB1bmRlZmluZWQgfHwgY29kZSA9PT0gTk9fQ0FURUdPUlkpIHJldHVybjtcblxuICAgIGNvbnN0IG5leHQgPSBzZWxlY3RCeUNhdGVnb3J5KHNvdXJjZS5jb2RlcywgY29kZSk7XG4gICAgY29uc3QgY3VycmVudCA9IHN0b3JlLmN1cnJlbnQoKTtcbiAgICBpZiAoc2FtZVNlbGVjdGlvbihjdXJyZW50LCBuZXh0KSkge1xuICAgICAgc3RvcmUuY2xlYXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RvcmUuc2V0KG5leHQpO1xuICB9XG59XG4iXX0=
|
|
360
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtaG92ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtaG92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFdBQVcsRUFBa0IsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUU1RyxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25HLE9BQU8sRUFBbUMsUUFBUSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDakQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHaEU7OzhDQUU4QztBQUM5QyxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUM7QUFDeEI7c0VBQ3NFO0FBQ3RFLE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQztBQUN6Qjs7dURBRXVEO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFnQ2xDOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLE9BQU8sWUFBWTtJQWdCdkIsWUFBNkIsSUFBc0I7UUFBdEIsU0FBSSxHQUFKLElBQUksQ0FBa0I7UUFmM0MsWUFBTyxHQUFnQyxJQUFJLENBQUM7UUFDcEQsK0ZBQStGO1FBQ3ZGLGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUN2QyxtQkFBYyxHQUFrQixJQUFJLENBQUM7UUFDN0MsdUdBQXVHO1FBQy9GLGFBQVEsR0FBb0IsSUFBSSxDQUFDO1FBQ2pDLGdCQUFXLEdBQWtCLElBQUksQ0FBQztRQUN6QixrQkFBYSxHQUFH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LE9BQU87UUFDcEIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQiwrREFBK0Q7UUFDL0QsSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxXQUFXO1lBQUUsT0FBTztRQUV2RCxNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNoQyxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDZCxPQUFPO1FBQ1QsQ0FBQztRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBWaWV3ZXIgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgeyBTcGF0aWFsRGF0YVBvcnQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcG9ydHMvc3BhdGlhbC1kYXRhLnBvcnQnO1xuaW1wb3J0IHsgTk9fQ0FURUdPUlksIFNwYXRpYWxEYXRhc2V0LCBpc0NhdGVnb3JpY2FsQ29sdW1uIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgeyBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgc2FtZVNlbGVjdGlvbiwgc2VsZWN0QnlDYXRlZ29yeSwgc2VsZWN0QnlJbmRpY2VzIH0gZnJvbSAnLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5pbXBvcnQgeyB0eXBlIENlbGxJbmZvLCB0eXBlIEhvdmVyU291cmNlLCBjZWxsVGV4dCwgY2VsbFR5cGVUZXh0LCBob3ZlclRleHQgfSBmcm9tICcuLi8uLi9zcGF0aWFsL3NwYXRpYWwtaG92ZXInO1xuaW1wb3J0IHsgY2VsbFR5cGVDb2x1bW5Gb3IgfSBmcm9tICcuLi8uLi9zcGF0aWFsL2xvZCc7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9zcGF0aWFsLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFN1cGVyc2VkZSB9IGZyb20gJy4uLy4uL3V0aWwvc3VwZXJzZWRlJztcbmltcG9ydCB7IE5hcGFyaVNwYXRpYWxUb29sdGlwIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC10b29sdGlwJztcbmltcG9ydCB7IE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC10aWxlcyc7XG5cbi8qKiBNb3ZlbWVudCwgaW4gc2NyZWVuIHBpeGVscywgdW5kZXIgd2hpY2ggYSBwcmVzcy1yZWxlYXNlIGlzIGEgQ0xJQ0sgYW5kIG5vdCBhXG4gKiAgZHJhZy4gQW4gb3JiaXQgb3IgYSBwYW4gc3RhcnRzIHRoZSBzYW1lIHdheSwgc28gdGhlIHR3byBoYXZlIHRvIGJlIHRvbGRcbiAqICBhcGFydCBieSBob3cgZmFyIHRoZSBwb2ludGVyIHRyYXZlbGxlZC4gKi9cbmNvbnN0IENMSUNLX1NMT1BfUFggPSA0O1xuLyoqIExvbmdlc3QgcHJlc3MtcmVsZWFzZSBzdGlsbCB0cmVhdGVkIGFzIGEgY2xpY2suIEEgbG9uZyBwcmVzcyB3aXRoIHRoZSBtb3VzZVxuICogIGhlbGQgc3RpbGwgaXMgbW9yZSBsaWtlbHkgYW4gaW50ZXJydXB0ZWQgZHJhZyB0aGFuIGEgc2VsZWN0aW9uLiAqL1xuY29uc3QgQ0xJQ0tfTUFYX01TID0gNjAwO1xuLyoqIFBvaW50ZXIgZGlzdGFuY2UsIGluIHNjcmVlbiBwaXhlbHMsIHRoYXQgc3RpbGwgY291bnRzIGFzIFwib25cIiBhIG1hcmtlci5cbiAqICBHZW5lcm91cyByZWxhdGl2ZSB0byBhIDEuNXB4IGRpc2M6IHRoZSBjdXJzb3IgaXMgYSBibHVudCBpbnN0cnVtZW50LCBhbmQgYVxuICogIHRvb2x0aXAgeW91IGhhdmUgdG8gaHVudCBmb3IgaXMgd29yc2UgdGhhbiBub25lLiAqL1xuZXhwb3J0IGNvbnN0IEhPVkVSX1JBRElVU19QWCA9IDEwO1xuXG4vKiogV2hhdCB0aGUgaG92ZXIgcmVhZHMgZnJvbSB0aGUgc3BhdGlhbCBzY2VuZSBpdCBzZXJ2ZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxIb3Zlckhvc3Qge1xuICAvKiogVGhlIG9yYml0IHZpZXcgcmF0aGVyIHRoYW4gdGhlIDJEIHZpZXcgKG5vIHRyYW5zY3JpcHQgbWFya2VycyB0byBhc2sgZmlyc3QpLiAqL1xuICByZWFkb25seSBpczNkOiBib29sZWFuO1xuICByZWFkb25seSB2aWV3ZXI6IFZpZXdlcjtcbiAgcmVhZG9ubHkgcG9ydDogU3BhdGlhbERhdGFQb3J0IHwgbnVsbDtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfCBudWxsO1xuICAvKiogVGhlIGRhdGFzZXQgb24gc2NyZWVuLCBhcyB0aGUgc3BhdGlhbCBzdWJzY3JpcHRpb24gbGFzdCBzYXcgaXQuICovXG4gIGRhdGFzZXQoKTogU3BhdGlhbERhdGFzZXQgfCBudWxsO1xuICAvKipcbiAgICogVGhlIE9CU0VSVkFUSU9OIGRyYXduIHVuZGVyIGEgY2xpZW50IHBvc2l0aW9uLCBvciAtMSDigJQgYHNsYWNrUHhgIHNjcmVlbiBwaXhlbHMgb2Ygc2xhY2tcbiAgICogYXJvdW5kIHRoZSBwb2ludGVyLiBUaGUgc2NlbmUgb3ducyB0aGUgcGljayAobmFwYXJpLWpzJ3MsIG9uIHRoZSBsYXllciBpdCBkcmV3KSBhbmQgbWFwcyB0aGVcbiAgICogZHJhd24gaW5kZXggYmFjayB0byB0aGUgb2JzZXJ2YXRpb24uXG4gICAqL1xuICBwaWNrKGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyLCBzbGFja1B4OiBudW1iZXIpOiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgb2JzZXJ2YXRpb24gb2YgYW4gaW5kaXZpZHVhbCBjZWxsJ3Mgc3VyZmFjZSB1bmRlciBhIGNsaWVudCBwb3NpdGlvbiAoc3BhdGlhbCAzRCdzIGNlbGxzKSxcbiAgICogb3IgLTE6IGEgY2xpY2sgb24gb25lIHNlbGVjdHMgdGhhdCBjZWxsIHJhdGhlciB0aGFuIGl0cyBjbGFzcy4gT3B0aW9uYWwuXG4gICAqL1xuICBwaWNrQ2VsbD8oY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiBudW1iZXI7XG4gIC8qKiBUaGUgcmVnaW9uIHN1cmZhY2UgKGEgY2xhc3M6IGEgY2VsbCB0eXBlJ3MsIGluIHNwYXRpYWwgM0QpIHVuZGVyIGEgY2xpZW50IHBvc2l0aW9uLCBvciBudWxsLiBPcHRpb25hbC4gKi9cbiAgcGlja1JlZ2lvbj8oY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB7IGtleTogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9IHwgbnVsbDtcbiAgLyoqIFRoZSAyRCB0cmFuc2NyaXB0IG1hcmtlcnMsIHdoaWNoIHNpdCBvbiB0b3Agb2YgZXZlcnl0aGluZyBhbmQgYXJlIGFza2VkIGZpcnN0LiAqL1xuICB0aWxlcygpOiBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyB8IG51bGw7XG4gIC8qKiBBIHJlZ2lvbiB0b29sIG93bnMgdGhlIHBvaW50ZXIgKHBsYWNpbmcgYSBwb2x5Z29uIHZlcnRleCBpcyBhbHNvIGEgc3RpbGwgY2xpY2spLiAqL1xuICB0b29sQWN0aXZlKCk6IGJvb2xlYW47XG4gIG91dHNpZGVab25lPFQ+KGZuOiAoKSA9PiBUKTogVDtcbiAgaW5ab25lPFQ+KGZuOiAoKSA9PiBUKTogVDtcbn1cblxuLyoqXG4gKiBDdXJzb3IgdG9vbHRpcCBhbmQgY2xpY2stdG8tc2VsZWN0IGZvciB0aGUgc3BhdGlhbCB2aWV3cyAocmV2aWV3IEFwcGVuZGl4IEIsIGNsdXN0ZXIgTCk6IGhvdmVyIGFcbiAqIG1hcmtlciwgcmVhZCBpdHMgY2xhc3M7IGNsaWNrIGl0LCBzZWxlY3QgdGhlIGNsYXNzIOKAlCB0aGUgY2FudmFzIGVxdWl2YWxlbnQgb2YgdGhlIHBhbmVsJ3NcbiAqIGxlZ2VuZC4gVGhlIHRvb2x0aXAgYW5kIHRoZSBjbGljayBzaGFyZSBPTkUgaGl0LXRlc3QsIHNvIGEgY2xpY2sgc2VsZWN0cyB0aGUgY2xhc3MgdGhlIHRvb2x0aXBcbiAqIG5hbWVzIChOQVBBUkktU1ZDLTUpLlxuICpcbiAqIEEgMzQtZW50cnkgbGVnZW5kIGNhbm5vdCBiZSByZWFkIGJhY2sgZnJvbSBhIGRvdCDigJQgc2V2ZXJhbCBjbGFzc2VzIGdldCBzaW1pbGFyIGNvbG91cnMsIGFuZFxuICogbWF0Y2hpbmcgb25lIHRvIGEgc3dhdGNoIGJ5IGV5ZSBpcyBleGFjdGx5IHRoZSB0YXNrIHRoaXMgcmVtb3Zlcy4gSXQgcmVwb3J0cyB3aGF0ZXZlciB0aGUgY2xvdWRcbiAqIGlzIENVUlJFTlRMWSBjb2xvdXJlZCBieSAoe0BsaW5rIHJlc29sdmVTb3VyY2V9KSwgc28gaXQgYW5kIHRoZSBsZWdlbmQgY2FuIG5ldmVyIHNheSBkaWZmZXJlbnRcbiAqIHRoaW5ncy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwYXRpYWxIb3ZlciB7XG4gIHByaXZhdGUgdG9vbHRpcDogTmFwYXJpU3BhdGlhbFRvb2x0aXAgfCBudWxsID0gbnVsbDtcbiAgLyoqIFdoYXQgdGhlIG1hcmtlcnMgYXJlIGNvbG91cmVkIGJ5LCByZXNvbHZlZCBvbmNlIHBlciBjb2xvdXIgc291cmNlIHJhdGhlciB0aGFuIHBlciBob3Zlci4gKi9cbiAgcHJpdmF0ZSBob3ZlclNvdXJjZTogSG92ZXJTb3VyY2UgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBob3ZlclNvdXJjZUtleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBJbiAzRDogd2hhdCBhIGNlbGwncyB0b29sdGlwIHNheXMgb2YgaXQgKGl0cyB0eXBlLCBpZCwgbWVhc3VyZW1lbnRzKSwgcmVzb2x2ZWQgb25jZSBwZXIgZGF0YXNldC4gKi9cbiAgcHJpdmF0ZSBjZWxsSW5mbzogQ2VsbEluZm8gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjZWxsSW5mb0tleTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2VsbEluZm9Mb2FkcyA9IG5ldyBTdXBlcnNlZGUoKTtcbiAgLyoqIExhdGVzdCB3aW5zIHdpdGhpbiB0aGUgc2NlbmU6IHRoZSBLRVkgaXMgb25seSBjb21taXR0ZWQgb25jZSBhIHJlc29sdXRpb24gbGFuZHMsIHNvIGFcbiAgICogIHN1cGVyc2VkZWQgZmV0Y2ggY2Fubm90IGxlYXZlIHRoZSBjYWNoZSBjbGFpbWluZyB0byBob2xkIGEgc291cmNlIGl0IG5ldmVyIHN0b3JlZC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvbHV0aW9ucyA9IG5ldyBTdXBlcnNlZGUoKTtcbiAgcHJpdmF0ZSBwb2ludGVyOiB7IGNsaWVudFg6IG51bWJlcjsgY2xpZW50WTogbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmcmFtZSA9IDA7XG4gIHByaXZhdGUgb2ZmOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaG9zdDogU3BhdGlhbEhvdmVySG9zdCkge31cblxuICAvKipcbiAgICogTGlzdGVuIG9uIGBlbGAgKHRoZSBwbG90IGhvc3QpIHJhdGhlciB0aGFuIHRoZSBjYW52YXMsIHNvIGl0IGtlZXBzIHdvcmtpbmcgb3ZlciB0aGUgcmVnaW9uXG4gICAqIG92ZXJsYXkgKGFuIFNWRyBjb3ZlcmluZyB0aGUgY2FudmFzLCB3aGljaCB3b3VsZCBvdGhlcndpc2Ugc3dhbGxvdyBldmVyeSBtb3ZlKSwgYW5kIHRocm90dGxlXG4gICAqIHRvIG9uZSBoaXQtdGVzdCBwZXIgYW5pbWF0aW9uIGZyYW1lOiBhIHBvaW50ZXJtb3ZlIGNhbiBmaXJlIGZhciBtb3JlIG9mdGVuIHRoYW4gdGhhdCwgYW5kXG4gICAqIHRoZSBmaXJzdCB0ZXN0IGFmdGVyIGFuIG9yYml0IHJlLXByb2plY3RzIHRoZSBjbG91ZC4gTm9uZSB3aGlsZSBhIGJ1dHRvbiBpcyBoZWxkOiB0aGF0IGlzIGFuXG4gICAqIG9yYml0IG9yIGEgcGFuIG1vdmluZyB0aGUgY2FtZXJhIGV2ZXJ5IGZyYW1lLCBhbmQgYSB0ZXN0IHBlciBmcmFtZSByZS1wcm9qZWN0ZWQgYWxsIG9mIGEgMy43TVxuICAgKiBjbG91ZCBlYWNoIHRpbWUgKOKJiDE1MCBtcyBhIGZyYW1lKTsgdGhlIGZpcnN0IG1vdmUgYWZ0ZXIgdGhlIGRyYWcgcGF5cyBmb3Igb25lLlxuICAgKi9cbiAgaW5zdGFsbChlbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICB0aGlzLnRvb2x0aXAgPSBuZXcgTmFwYXJpU3BhdGlhbFRvb2x0aXAoZWwpO1xuXG4gICAgY29uc3Qgb25Nb3ZlID0gKGU6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgaWYgKGUuYnV0dG9ucykge1xuICAgICAgICB0aGlzLnBvaW50ZXIgPSBudWxsO1xuICAgICAgICB0aGlzLnRvb2x0aXA/LmhpZGUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5wb2ludGVyID0geyBjbGllbnRYOiBlLmNsaWVudFgsIGNsaWVudFk6IGUuY2xpZW50WSB9O1xuICAgICAgaWYgKHRoaXMuZnJhbWUpIHJldHVybjtcbiAgICAgIHRoaXMuZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICB0aGlzLmZyYW1lID0gMDtcbiAgICAgICAgdGhpcy51cGRhdGUoZWwpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBvbkxlYXZlID0gKCkgPT4ge1xuICAgICAgdGhpcy5wb2ludGVyID0gbnVsbDtcbiAgICAgIHRoaXMudG9vbHRpcD8uaGlkZSgpO1xuICAgIH07XG5cbiAgICAvLyBBIGNsaWNrIG9uIGEgbWFya2VyIHNlbGVjdHMgaXRzIGNsYXNzLCBleGFjdGx5IGFzIGNsaWNraW5nIHRoYXQgY2xhc3MgaW4gdGhlXG4gICAgLy8gcGFuZWwncyBsZWdlbmQgZG9lcyDigJQgaW5jbHVkaW5nIGNsaWNraW5nIGFnYWluIHRvIGNsZWFyLCBzbyBhIGNsaWNrIGlzXG4gICAgLy8gYWx3YXlzIHJldmVyc2libGUuIFRyYWNrZWQgYXMgZG93bi91cCByYXRoZXIgdGhhbiBib3VuZCB0byBgY2xpY2tgIHNvIGEgRFJBR1xuICAgIC8vIChhbiBvcmJpdCBpbiAzRCwgYSBwYW4gaW4gMkQpIGNhbiBiZSB0b2xkIGFwYXJ0IGZyb20gYSBjbGljazogdGhlIGdlc3R1cmVcbiAgICAvLyBoYXMgdG8gbW92ZSBsZXNzIHRoYW4gYSBmZXcgcGl4ZWxzIGFuZCBiZSBvdmVyIHF1aWNrbHkuXG4gICAgbGV0IGRvd246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHQ6IG51bWJlciB9IHwgbnVsbCA9IG51bGw7XG4gICAgY29uc3Qgb25Eb3duID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGRvd24gPSB7IHg6IGUuY2xpZW50WCwgeTogZS5jbGllbnRZLCB0OiBEYXRlLm5vdygpIH07XG4gICAgfTtcbiAgICBjb25zdCBvblVwID0gKGU6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gZG93bjtcbiAgICAgIGRvd24gPSBudWxsO1xuICAgICAgaWYgKCFzdGFydCkgcmV0dXJuO1xuICAgICAgY29uc3QgbW92ZWQgPSBNYXRoLmh5cG90KGUuY2xpZW50WCAtIHN0YXJ0LngsIGUuY2xpZW50WSAtIHN0YXJ0LnkpO1xuICAgICAgaWYgKG1vdmVkID4gQ0xJQ0tfU0xPUF9QWCkgcmV0dXJuO1xuICAgICAgaWYgKERhdGUubm93KCkgLSBzdGFydC50ID4gQ0xJQ0tfTUFYX01TKSByZXR1cm47XG4gICAgICAvLyBBIHJlZ2lvbiB0b29sIG93bnMgdGhlIHBvaW50ZXIgd2hpbGUgaXQgaXMgYWN0aXZlLCBhbmQgcGxhY2luZyBhIHBvbHlnb25cbiAgICAgIC8vIHZlcnRleCBpcyBhbHNvIGEgY2xpY2sgdGhhdCBkb2VzIG5vdCBtb3ZlLlxuICAgICAgaWYgKHRoaXMuaG9zdC50b29sQWN0aXZlKCkpIHJldHVybjtcbiAgICAgIHRoaXMuaG9zdC5pblpvbmUoKCkgPT4gdGhpcy5zZWxlY3RDbGFzc0F0KGUuY2xpZW50WCwgZS5jbGllbnRZKSk7XG4gICAgfTtcblxuICAgIC8vIE91dHNpZGUgdGhlIHpvbmU6IGEgcG9pbnRlcm1vdmUgZmlyZXMgZmFyIG1vcmUgb2Z0ZW4gdGhhbiBhbnl0aGluZyBoZXJlIGNoYW5nZXMgd2hhdFxuICAgIC8vIEFuZ3VsYXIgcmVuZGVycyAodGhlIHRvb2x0aXAgaXMgcGxhaW4gRE9NKTsgYSBzZWxlY3RpbmcgY2xpY2sgcmUtZW50ZXJzIGl0LlxuICAgIHRoaXMuaG9zdC5vdXRzaWRlWm9uZSgoKSA9PiB7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybW92ZScsIG9uTW92ZSk7XG4gICAgICBlbC5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVybGVhdmUnLCBvbkxlYXZlKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgb25Eb3duKTtcbiAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIG9uVXApO1xuICAgIH0pO1xuICAgIHRoaXMub2ZmLnB1c2goKCkgPT4gZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcm1vdmUnLCBvbk1vdmUpKTtcbiAgICB0aGlzLm9mZi5wdXNoKCgpID0+IGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJsZWF2ZScsIG9uTGVhdmUpKTtcbiAgICB0aGlzLm9mZi5wdXNoKCgpID0+IGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJkb3duJywgb25Eb3duKSk7XG4gICAgdGhpcy5vZmYucHVzaCgoKSA9PiBlbC5yZW1vdmVFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCBvblVwKSk7XG4gIH1cblxuICAvKiogSGlkZSB0aGUgdG9vbHRpcCAodGhlIG5hdmlnYXRvciBpcyBiZWluZyBkcmFnZ2VkLCBzYXkpLiAqL1xuICBoaWRlKCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcD8uaGlkZSgpO1xuICB9XG5cbiAgLyoqIFJlbW92ZSB0aGUgbGlzdGVuZXJzIGFuZCB0aGUgdG9vbHRpcCwgYW5kIGRyb3AgdGhlIGNvbG91ciBzb3VyY2UuICovXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBvZmYgb2YgdGhpcy5vZmYpIG9mZigpO1xuICAgIHRoaXMub2ZmID0gW107XG4gICAgaWYgKHRoaXMuZnJhbWUpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuZnJhbWUpO1xuICAgIHRoaXMuZnJhbWUgPSAwO1xuICAgIHRoaXMucG9pbnRlciA9IG51bGw7XG4gICAgdGhpcy50b29sdGlwPy5kaXNwb3NlKCk7XG4gICAgdGhpcy50b29sdGlwID0gbnVsbDtcbiAgICB0aGlzLnJlc29sdXRpb25zLmNhbmNlbCgpO1xuICAgIHRoaXMuaG92ZXJTb3VyY2UgPSBudWxsO1xuICAgIHRoaXMuaG92ZXJTb3VyY2VLZXkgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoYXQgdGhlIHRvb2x0aXAgc2F5cywgcmVzb2x2ZWQgb25jZSBwZXIgY29sb3VyIHNvdXJjZSByYXRoZXIgdGhhbiBwZXIgaG92ZXIuXG4gICAqXG4gICAqIEZldGNoZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBjb2xvdXJpbmcgb24gcHVycG9zZTogdGhlIHJlZmVyZW5jZSBwb3J0IGNhY2hlc1xuICAgKiBjb2x1bW5zLCBidXQgYSBob3N0J3MgbmVlZCBub3QsIGFuZCByZS1mZXRjaGluZyBhIDMuN00tZWxlbWVudCB2ZWN0b3IgYmVjYXVzZVxuICAgKiB0aGUgcG9pbnRlciBtb3ZlZCB3b3VsZCBiZSBpbmRlZmVuc2libGUgZWl0aGVyIHdheS5cbiAgICovXG4gIGFzeW5jIHJlc29sdmVTb3VyY2UoZGF0YXNldDogU3BhdGlhbERhdGFzZXQgfCBudWxsLCB2aWV3OiBTcGF0aWFsVmlld1N0YXRlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaG9zdC5pczNkKSB2b2lkIHRoaXMucmVzb2x2ZUNlbGxJbmZvKGRhdGFzZXQsIHZpZXcpO1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLmhvc3QucG9ydDtcbiAgICBjb25zdCBjb2xvckJ5ID0gdmlldy5jb2xvckJ5O1xuICAgIGNvbnN0IGtleSA9IGRhdGFzZXQgJiYgY29sb3JCeSA/IGAke2RhdGFzZXQuaWR9fCR7Y29sb3JCeS5raW5kfToke2NvbG9yQnkubmFtZX1gIDogbnVsbDtcbiAgICBpZiAoa2V5ID09PSB0aGlzLmhvdmVyU291cmNlS2V5KSByZXR1cm47XG4gICAgLy8gVGhlIGtleSBpcyBjb21taXR0ZWQgb25seSB3aGVyZSBhIHZhbHVlIGlzIGFjdHVhbGx5IHN0b3JlZC4gU2V0dGluZyBpdCB1cFxuICAgIC8vIGZyb250IHdvdWxkIG1lYW4gYSByZXNvbHV0aW9uIHRoYXQgbG9zZXMgdGhlIHJhY2UgbGVhdmVzIHRoZSBrZXkgY2xhaW1pbmcgYVxuICAgIC8vIHNvdXJjZSB0aGF0IHdhcyBuZXZlciBzdG9yZWQg4oCUIGFuZCBzaW5jZSBldmVyeSBsYXRlciBlbWlzc2lvbiBjYXJyaWVzIHRoZVxuICAgIC8vIHNhbWUga2V5LCBpdCB3b3VsZCBzaG9ydC1jaXJjdWl0IGhlcmUgZm9yZXZlciBhbmQgdGhlIHRvb2x0aXAgd291bGQgc3RheVxuICAgIC8vIHNpbGVudCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHNlc3Npb24uXG4gICAgY29uc3QgdGFzayA9IHRoaXMucmVzb2x1dGlvbnMubmV4dCgpO1xuICAgIC8vIE5vIGNvbG91ciBzb3VyY2UgbWVhbnMgbm90aGluZyBpcyBiZWluZyBzYWlkIGFib3V0IHRoZSBjZWxscywgc28gdGhlcmUgaXMgbm9cbiAgICAvLyBjbHVzdGVyIHRvIG5hbWUgYW5kIHRoZSB0b29sdGlwIHN0YXlzIHNpbGVudC5cbiAgICBpZiAoIWtleSB8fCAhZGF0YXNldCB8fCAhY29sb3JCeSB8fCAhcG9ydCkge1xuICAgICAgdGhpcy5ob3ZlclNvdXJjZSA9IG51bGw7XG4gICAgICB0aGlzLmhvdmVyU291cmNlS2V5ID0ga2V5O1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgaWYgKGNvbG9yQnkua2luZCA9PT0gJ2NvbHVtbicpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gYXdhaXQgcG9ydC5nZXRDb2x1bW4oY29sb3JCeS5uYW1lKTtcbiAgICAgICAgaWYgKCF0YXNrKCkpIHJldHVybjtcbiAgICAgICAgdGhpcy5ob3ZlclNvdXJjZSA9IGlzQ2F0ZWdvcmljYWxDb2x1bW4oY29sdW1uKVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBraW5kOiAnY2F0ZWdvcmljYWwnLFxuICAgICAgICAgICAgICBuYW1lOiBjb2xvckJ5Lm5hbWUsXG4gICAgICAgICAgICAgIGNhdGVnb3JpZXM6IGNvbHVtbi5tZXRhLmNhdGVnb3JpZXMsXG4gICAgICAgICAgICAgIGNvZGVzOiBjb2x1bW4uY29kZXMsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGtpbmQ6ICdjb250aW51b3VzJyxcbiAgICAgICAgICAgICAgbmFtZTogY29sb3JCeS5uYW1lLFxuICAgICAgICAgICAgICB2YWx1ZXM6IGNvbHVtbi52YWx1ZXMsXG4gICAgICAgICAgICAgIC4uLihjb2x1bW4ubWV0YS51bml0ID8geyB1bml0OiBjb2x1bW4ubWV0YS51bml0IH0gOiB7fSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB0aGlzLmhvdmVyU291cmNlS2V5ID0ga2V5O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCBwb3J0LmdldEZlYXR1cmVWZWN0b3IoY29sb3JCeS5uYW1lKTtcbiAgICAgIGlmICghdGFzaygpKSByZXR1cm47XG4gICAgICB0aGlzLmhvdmVyU291cmNlID0ge1xuICAgICAgICBraW5kOiAnY29udGludW91cycsXG4gICAgICAgIG5hbWU6IGNvbG9yQnkubmFtZSxcbiAgICAgICAgdmFsdWVzLFxuICAgICAgICAuLi4oZGF0YXNldC5mZWF0dXJlcz8udW5pdCA/IHsgdW5pdDogZGF0YXNldC5mZWF0dXJlcy51bml0IH0gOiB7fSksXG4gICAgICB9O1xuICAgICAgdGhpcy5ob3ZlclNvdXJjZUtleSA9IGtleTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGlmICghdGFzaygpKSByZXR1cm47XG4gICAgICAvLyBUaGUgdG9vbHRpcCBpcyBhbiBleHRyYTsgYSBmYWlsZWQgZmV0Y2ggbXVzdCBub3QgZGlzdHVyYiB0aGUgcmVuZGVyLiBUaGVcbiAgICAgIC8vIGtleSBpcyBsZWZ0IHVuc2V0IHNvIGEgbGF0ZXIgZW1pc3Npb24gcmV0cmllcyByYXRoZXIgdGhhbiBpbmhlcml0aW5nIGFcbiAgICAgIC8vIHBlcm1hbmVudCBzaWxlbmNlLlxuICAgICAgdGhpcy5ob3ZlclNvdXJjZSA9IG51bGw7XG4gICAgICB0aGlzLmhvdmVyU291cmNlS2V5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hhdCBhIDNEIGNlbGwncyB0b29sdGlwIHNheXMgKHNlZSBgY2VsbFRleHRgKTogdGhlIGNlbGwtdHlwZSBjb2x1bW4ncyBjb2RlcywgdGhlIGlkcywgYW5kIHRoZVxuICAgKiBkYXRhc2V0J3MgZmlyc3QgZmV3IGNvbnRpbnVvdXMgY29sdW1ucy4gUmVzb2x2ZWQgb25jZSBwZXIgZGF0YXNldCBhbmQgdHlwZSBjb2x1bW47IGEgZmFpbHVyZVxuICAgKiBsZWF2ZXMgdGhlIHRvb2x0aXAgd2l0aCB3aGF0IHRoZSBjb2xvdXJpbmcgc2F5cy5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUNlbGxJbmZvKGRhdGFzZXQ6IFNwYXRpYWxEYXRhc2V0IHwgbnVsbCwgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLmhvc3QucG9ydDtcbiAgICBjb25zdCB0eXBlTmFtZSA9IGRhdGFzZXQgPyBjZWxsVHlwZUNvbHVtbkZvcihkYXRhc2V0LCB2aWV3KSA6IG51bGw7XG4gICAgY29uc3Qga2V5ID0gZGF0YXNldCA/IGAke2RhdGFzZXQuaWR9fCR7dHlwZU5hbWUgPz8gJyd9YCA6IG51bGw7XG4gICAgaWYgKGtleSA9PT0gdGhpcy5jZWxsSW5mb0tleSkgcmV0dXJuO1xuICAgIHRoaXMuY2VsbEluZm9LZXkgPSBrZXk7XG4gICAgY29uc3QgdGFzayA9IHRoaXMuY2VsbEluZm9Mb2Fkcy5uZXh0KCk7XG4gICAgaWYgKCFkYXRhc2V0IHx8ICFwb3J0KSB7XG4gICAgICB0aGlzLmNlbGxJbmZvID0gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlTmFtZSA/IGF3YWl0IHBvcnQuZ2V0Q29sdW1uKHR5cGVOYW1lKSA6IG51bGw7XG4gICAgICBjb25zdCBtZWFzdXJlTmFtZXMgPSBkYXRhc2V0LmNvbHVtbnNcbiAgICAgICAgLmZpbHRlcigoYykgPT4gYy5raW5kID09PSAnY29udGludW91cycpXG4gICAgICAgIC5tYXAoKGMpID0+IGMubmFtZSlcbiAgICAgICAgLnNsaWNlKDAsIDQpO1xuICAgICAgY29uc3QgbWVhc3VyZXMgPSAoYXdhaXQgUHJvbWlzZS5hbGwobWVhc3VyZU5hbWVzLm1hcCgobikgPT4gcG9ydC5nZXRDb2x1bW4obikuY2F0Y2goKCkgPT4gbnVsbCkpKSkuZmxhdE1hcChcbiAgICAgICAgKGMpID0+XG4gICAgICAgICAgYyAmJiAhaXNDYXRlZ29yaWNhbENvbHVtbihjKVxuICAgICAgICAgICAgPyBbeyBuYW1lOiBjLm1ldGEubmFtZSwgdmFsdWVzOiBjLnZhbHVlcywgLi4uKGMubWV0YS51bml0ID8geyB1bml0OiBjLm1ldGEudW5pdCB9IDoge30pIH1dXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgKTtcbiAgICAgIGlmICghdGFzaygpKSByZXR1cm47XG4gICAgICBjb25zdCBjYXRlZ29yaWNhbCA9IHR5cGUgJiYgaXNDYXRlZ29yaWNhbENvbHVtbih0eXBlKSA/IHR5cGUgOiBudWxsO1xuICAgICAgbGV0IGNvdW50czogVWludDMyQXJyYXkgfCBudWxsID0gbnVsbDtcbiAgICAgIGlmIChjYXRlZ29yaWNhbCkge1xuICAgICAgICBjb3VudHMgPSBuZXcgVWludDMyQXJyYXkoY2F0ZWdvcmljYWwubWV0YS5jYXRlZ29yaWVzLmxlbmd0aCk7XG4gICAgICAgIGZvciAoY29uc3QgYyBvZiBjYXRlZ29yaWNhbC5jb2RlcykgaWYgKGMgIT09IE5PX0NBVEVHT1JZICYmIGMgPCBjb3VudHMubGVuZ3RoKSBjb3VudHNbY10rKztcbiAgICAgIH1cbiAgICAgIHRoaXMuY2VsbEluZm8gPSB7XG4gICAgICAgIHR5cGVOYW1lOiBjYXRlZ29yaWNhbCA/IHR5cGVOYW1lIDogbnVsbCxcbiAgICAgICAgY2F0ZWdvcmllczogY2F0ZWdvcmljYWw/Lm1ldGEuY2F0ZWdvcmllcyA/PyBbXSxcbiAgICAgICAgY29kZXM6IGNhdGVnb3JpY2FsPy5jb2RlcyA/PyBudWxsLFxuICAgICAgICBjb3VudHMsXG4gICAgICAgIC4uLihkYXRhc2V0Lm9ic2VydmF0aW9ucy5pZHMgPyB7IGlkczogZGF0YXNldC5vYnNlcnZhdGlvbnMuaWRzIH0gOiB7fSksXG4gICAgICAgIG1lYXN1cmVzLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGlmICghdGFzaygpKSByZXR1cm47XG4gICAgICB0aGlzLmNlbGxJbmZvID0gbnVsbDtcbiAgICAgIHRoaXMuY2VsbEluZm9LZXkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBJbiAzRDogdGhlIHRvb2x0aXAgb2YgdGhlIGNlbGwsIG9yIG9mIHRoZSBjZWxsIHR5cGUncyBzdXJmYWNlLCB1bmRlciBhIGNsaWVudCBwb3NpdGlvbi4gKi9cbiAgcHJpdmF0ZSBjZWxsM2RUZXh0KGNsaWVudFg6IG51bWJlciwgY2xpZW50WTogbnVtYmVyKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaG9zdC5pczNkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBjZWxsID0gdGhpcy5ob3N0LnBpY2tDZWxsPy4oY2xpZW50WCwgY2xpZW50WSkgPz8gLTE7XG4gICAgaWYgKGNlbGwgPj0gMCkgcmV0dXJuIGNlbGxUZXh0KHRoaXMuY2VsbEluZm8sIGNlbGwsIHRoaXMuaG92ZXJTb3VyY2UpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqIEhpdC10ZXN0IHRoZSBsYXN0IHBvaW50ZXIgcG9zaXRpb24gYW5kIHNob3cgb3IgaGlkZSB0aGUgdG9vbHRpcC4gKi9cbiAgcHJpdmF0ZSB1cGRhdGUoZWw6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGlwID0gdGhpcy50b29sdGlwO1xuICAgIGNvbnN0IHBvaW50ZXIgPSB0aGlzLnBvaW50ZXI7XG4gICAgY29uc3QgZGF0YXNldCA9IHRoaXMuaG9zdC5kYXRhc2V0KCk7XG4gICAgaWYgKCF0aXAgfHwgIXBvaW50ZXIgfHwgIWRhdGFzZXQpIHJldHVybjtcblxuICAgIC8vIFRyYW5zY3JpcHQgbWFya2VycyBzaXQgb24gdG9wIG9mIGV2ZXJ5dGhpbmcsIHNvIHRoZXkgYXJlIGFza2VkIGZpcnN0LlxuICAgIGNvbnN0IHRpbGVzID0gdGhpcy5ob3N0LnRpbGVzKCk7XG4gICAgaWYgKCF0aGlzLmhvc3QuaXMzZCAmJiB0aWxlcykge1xuICAgICAgY29uc3Qgdmlld2VyID0gdGhpcy5ob3N0LnZpZXdlcjtcbiAgICAgIGNvbnN0IHdvcmxkID0gdmlld2VyLmNhbnZhc1RvV29ybGQocG9pbnRlci5jbGllbnRYLCBwb2ludGVyLmNsaWVudFkpO1xuICAgICAgY29uc3Qgem9vbSA9IHZpZXdlci5jYW1lcmEuem9vbTtcbiAgICAgIGNvbnN0IHJhZGl1cyA9IEhPVkVSX1JBRElVU19QWCAvICh6b29tID4gMCA/IHpvb20gOiAxKTtcbiAgICAgIGNvbnN0IGxpbmVzID0gd29ybGRcbiAgICAgICAgPyB0aWxlcy5ob3ZlckF0KHdvcmxkWzBdLCB3b3JsZFsxXSwgcmFkaXVzLCAoZGV0YWlscykgPT4ge1xuICAgICAgICAgICAgY29uc3QgcCA9IHRoaXMucG9pbnRlcjtcbiAgICAgICAgICAgIGlmICghcCB8fCAhdGhpcy50b29sdGlwKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCByID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXAuc2hvdyhkZXRhaWxzLCBwLmNsaWVudFggLSByLmxlZnQsIHAuY2xpZW50WSAtIHIudG9wKTtcbiAgICAgICAgICB9KVxuICAgICAgICA6IG51bGw7XG4gICAgICBpZiAobGluZXMpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICB0aXAuc2hvdyhsaW5lcywgcG9pbnRlci5jbGllbnRYIC0gcmVjdC5sZWZ0LCBwb2ludGVyLmNsaWVudFkgLSByZWN0LnRvcCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBIGNlbGwgZHJhd24gYnkgaXRzZWxmIG5hbWVzIGl0c2VsZjsgYSBtYXJrZXIsIGl0cyBjb2xvdXJpbmc7IGVsc2UgYSBjZWxsIHR5cGUncyBzdXJmYWNlLlxuICAgIGxldCBsaW5lcyA9IHRoaXMuY2VsbDNkVGV4dChwb2ludGVyLmNsaWVudFgsIHBvaW50ZXIuY2xpZW50WSk7XG4gICAgaWYgKCFsaW5lcykge1xuICAgICAgY29uc3QgaGl0ID0gdGhpcy5ob3N0LnBpY2socG9pbnRlci5jbGllbnRYLCBwb2ludGVyLmNsaWVudFksIEhPVkVSX1JBRElVU19QWCk7XG4gICAgICBsaW5lcyA9XG4gICAgICAgIGhpdCA+PSAwICYmIHRoaXMuaG9zdC5pczNkICYmIHRoaXMuY2VsbEluZm9cbiAgICAgICAgICA/IGNlbGxUZXh0KHRoaXMuY2VsbEluZm8sIGhpdCwgdGhpcy5ob3ZlclNvdXJjZSlcbiAgICAgICAgICA6IGhvdmVyVGV4dCh0aGlzLmhvdmVyU291cmNlLCBoaXQpO1xuICAgICAgaWYgKCFsaW5lcyAmJiB0aGlzLmhvc3QuaXMzZCkge1xuICAgICAgICBjb25zdCByZWdpb24gPSB0aGlzLmhvc3QucGlja1JlZ2lvbj8uKHBvaW50ZXIuY2xpZW50WCwgcG9pbnRlci5jbGllbnRZKTtcbiAgICAgICAgaWYgKHJlZ2lvbikgbGluZXMgPSBjZWxsVHlwZVRleHQodGhpcy5jZWxsSW5mbywgcmVnaW9uLmtleSwgcmVnaW9uLmxhYmVsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFsaW5lcykge1xuICAgICAgdGlwLmhpZGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcmVjdCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRpcC5zaG93KGxpbmVzLCBwb2ludGVyLmNsaWVudFggLSByZWN0LmxlZnQsIHBvaW50ZXIuY2xpZW50WSAtIHJlY3QudG9wKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3QgdGhlIGNsYXNzIG9mIHRoZSBtYXJrZXIgYXQgYSBjbGllbnQgcG9zaXRpb24g4oCUIHRoZSBjYW52YXMgZXF1aXZhbGVudCBvZlxuICAgKiBjbGlja2luZyB0aGF0IGNsYXNzIGluIHRoZSBwYW5lbCdzIGxlZ2VuZCwgYW5kIHRoZSBzYW1lIHNlbGVjdGlvbiBvYmplY3QsIHNvXG4gICAqIHRoZSB0d28gY29udHJvbHMgY2Fubm90IHByb2R1Y2UgZGlmZmVyZW50IHJlc3VsdHMuXG4gICAqXG4gICAqIENsaWNraW5nIGEgY2xhc3MgdGhhdCBpcyBhbHJlYWR5IHRoZSB3aG9sZSBzZWxlY3Rpb24gQ0xFQVJTIGl0LCB3aGljaCBpcyB3aGF0XG4gICAqIHRoZSBsZWdlbmQgZG9lcy4gQ29tcGFyZWQgYWdhaW5zdCB0aGUgc2VsZWN0aW9uIGl0c2VsZiByYXRoZXIgdGhhbiBhZ2FpbnN0IGFcbiAgICogcmVtZW1iZXJlZCBjbGljaywgc28gc2VsZWN0aW5nIGZyb20gdGhlIGxlZ2VuZCBhbmQgdGhlbiBjbGlja2luZyB0aGUgc2FtZVxuICAgKiBjbGFzcyBvbiB0aGUgY2FudmFzIHN0aWxsIHRvZ2dsZXMuXG4gICAqL1xuICBwcml2YXRlIHNlbGVjdENsYXNzQXQoY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmhvdmVyU291cmNlO1xuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5ob3N0LnNlbGVjdGlvbjtcbiAgICBjb25zdCBkYXRhc2V0ID0gdGhpcy5ob3N0LmRhdGFzZXQoKTtcbiAgICAvLyBBIGNlbGwgZHJhd24gYnkgaXRzZWxmOiB0aGUgY2xpY2sgc2VsZWN0cyB0aGF0IGNlbGwgKGFnYWluOiBjbGVhcnMgaXQpLCB3aGF0ZXZlciBjb2xvdXJzIGl0LlxuICAgIGNvbnN0IGNlbGwgPSB0aGlzLmhvc3QucGlja0NlbGw/LihjbGllbnRYLCBjbGllbnRZKSA/PyAtMTtcbiAgICBpZiAoY2VsbCA+PSAwICYmIHN0b3JlICYmIGRhdGFzZXQpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBzZWxlY3RCeUluZGljZXMoW2NlbGxdLCBkYXRhc2V0Lm9ic2VydmF0aW9ucy5jb3VudCk7XG4gICAgICBpZiAoc2FtZVNlbGVjdGlvbihzdG9yZS5jdXJyZW50KCksIG5leHQpKSBzdG9yZS5jbGVhcigpO1xuICAgICAgZWxzZSBzdG9yZS5zZXQobmV4dCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIE9ubHkgYSBjYXRlZ29yaWNhbCBzb3VyY2UgaGFzIGNsYXNzZXMgdG8gc2VsZWN0LiBBIGdlbmUgaXMgY29udGludW91czpcbiAgICAvLyB0aGVyZSBpcyBubyBzZXQgb2YgY2VsbHMgdGhhdCBcImlzXCIgYSB2YWx1ZS5cbiAgICBpZiAoIXN0b3JlIHx8ICFkYXRhc2V0IHx8IHNvdXJjZT8ua2luZCAhPT0gJ2NhdGVnb3JpY2FsJykgcmV0dXJuO1xuXG4gICAgLy8gVGhlIHNhbWUgcGljayB0aGUgdG9vbHRpcCBtYWtlcyDigJQgZGVwdGgtYXdhcmUgaW4gM0Qg4oCUIHNvIGEgY2xpY2sgc2VsZWN0cyB0aGUgY2xhc3MgdGhlXG4gICAgLy8gdG9vbHRpcCBuYW1lcywgbm90IGFuIG9jY2x1ZGVkIG1hcmtlcidzLlxuICAgIGNvbnN0IGhpdCA9IHRoaXMuaG9zdC5waWNrKGNsaWVudFgsIGNsaWVudFksIEhPVkVSX1JBRElVU19QWCk7XG4gICAgaWYgKGhpdCA8IDApIHJldHVybjtcbiAgICBjb25zdCBjb2RlID0gc291cmNlLmNvZGVzW2hpdF07XG4gICAgLy8gQSBjZWxsIHRoZSBhbm5vdGF0aW9uIGRvZXMgbm90IGNvdmVyIGhhcyBubyBjbGFzcyB0byBzZWxlY3QuXG4gICAgaWYgKGNvZGUgPT09IHVuZGVmaW5lZCB8fCBjb2RlID09PSBOT19DQVRFR09SWSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbmV4dCA9IHNlbGVjdEJ5Q2F0ZWdvcnkoc291cmNlLmNvZGVzLCBjb2RlKTtcbiAgICBjb25zdCBjdXJyZW50ID0gc3RvcmUuY3VycmVudCgpO1xuICAgIGlmIChzYW1lU2VsZWN0aW9uKGN1cnJlbnQsIG5leHQpKSB7XG4gICAgICBzdG9yZS5jbGVhcigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdG9yZS5zZXQobmV4dCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -31,6 +31,10 @@ export class SpatialSession {
|
|
|
31
31
|
this.tileLayers = null;
|
|
32
32
|
this.tileOwner = null;
|
|
33
33
|
}
|
|
34
|
+
/** Tell the panel how the 3D view's individual cells stand (null: none drawn). */
|
|
35
|
+
reportCells3d(status) {
|
|
36
|
+
this.sinks.cells3dStatus?.(status);
|
|
37
|
+
}
|
|
34
38
|
/** Tell the panel whether the observation gene filter could be applied this rebuild. */
|
|
35
39
|
reportGeneFilter(failed) {
|
|
36
40
|
this.sinks.geneFilterFailed?.(failed);
|
|
@@ -123,6 +127,8 @@ export class SpatialSceneBase {
|
|
|
123
127
|
selection: session.selection,
|
|
124
128
|
dataset: () => session.latest?.[0] ?? null,
|
|
125
129
|
pick: (clientX, clientY, slackPx) => this.pickObservation(clientX, clientY, slackPx),
|
|
130
|
+
pickCell: (clientX, clientY) => this.pickCell(clientX, clientY),
|
|
131
|
+
pickRegion: (clientX, clientY) => this.pickRegion(clientX, clientY),
|
|
126
132
|
tiles: () => this.hoverTiles(),
|
|
127
133
|
toolActive: () => !!ctx.tools.regionOverlay?.toolActive,
|
|
128
134
|
outsideZone: (fn) => ctx.outsideZone(fn),
|
|
@@ -149,6 +155,14 @@ export class SpatialSceneBase {
|
|
|
149
155
|
afterChange() {
|
|
150
156
|
/* nothing by default */
|
|
151
157
|
}
|
|
158
|
+
/** The region surface (a class) under a client position, or null (none drawn). */
|
|
159
|
+
pickRegion(_clientX, _clientY) {
|
|
160
|
+
return null;
|
|
161
|
+
}
|
|
162
|
+
/** The observation of an individual cell's surface under a client position, or -1 (none drawn). */
|
|
163
|
+
pickCell(_clientX, _clientY) {
|
|
164
|
+
return -1;
|
|
165
|
+
}
|
|
152
166
|
hoverTiles() {
|
|
153
167
|
return null;
|
|
154
168
|
}
|
|
@@ -160,4 +174,4 @@ export class SpatialSceneBase {
|
|
|
160
174
|
this.hover.dispose();
|
|
161
175
|
}
|
|
162
176
|
}
|
|
163
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtc2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtc2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTW5FLE9BQU8sRUFBd0IsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFnQ3JGOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFpQnpCLFlBQ1csSUFBNEIsRUFDNUIsU0FBdUMsRUFDL0IsS0FBdUI7UUFGL0IsU0FBSSxHQUFKLElBQUksQ0FBd0I7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBOEI7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFuQjFDO29HQUM0RjtRQUM1RixXQUFNLEdBQXlCLElBQUksQ0FBQztRQUNwQyx5RkFBeUY7UUFDaEYsb0JBQWUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDckQsMEZBQTBGO1FBQ2pGLFlBQU8sR0FBZ0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzRSwrQkFBK0I7UUFDdEIsa0JBQWEsR0FBc0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRSxzQkFBaUIsR0FBZ0MsSUFBSSxDQUFDO1FBQ3RELHNCQUFpQixH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Q0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU3BhdGlhbERhdGFQb3J0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3BvcnRzL3NwYXRpYWwtZGF0YS5wb3J0JztcbmltcG9ydCB7IFNwYXRpYWxEYXRhc2V0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgeyBDb2xvcm1hcE5vZGUsIFNwYXRpYWxWaWV3U3RhdGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgeyBFeHByZXNzaW9uRmllbGQsIEV4cHJlc3Npb25Wb2x1bWVGaWVsZCB9IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1leHByZXNzaW9uJztcbmltcG9ydCB7IFNwYXRpYWxTZWxlY3Rpb25NYXNrLCBlbXB0eVNlbGVjdGlvbiB9IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgU3BhdGlhbFNlbGVjdGlvblN0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvc3BhdGlhbC1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBWaXN1YWxpemVyU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS92aXN1YWxpemVyLXN0b3JlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VwZXJzZWRlIH0gZnJvbSAnLi4vLi4vdXRpbC9zdXBlcnNlZGUnO1xuaW1wb3J0IHsgQ29udHJhc3RXaW5kb3dDYWNoZSB9IGZyb20gJy4vbmFwYXJpLXNwYXRpYWwtZW5jb2RpbmcnO1xuaW1wb3J0IHsgU3BhdGlhbEhvdmVyIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC1ob3Zlcic7XG5pbXBvcnQgeyBOYXBhcmlTcGF0aWFsVGlsZUxheWVycywgVHJhbnNjcmlwdEVzdGltYXRlIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC10aWxlcyc7XG5pbXBvcnQgeyBSZ2IgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvY29sb3JtYXAtbHV0JztcbmltcG9ydCB0eXBlIHsgU2NlbmVDb250ZXh0IH0gZnJvbSAnLi9uYXBhcmktc2NlbmUnO1xuXG4vKiogV2hhdCB0aGUgc3BhdGlhbCBzdWJzY3JpcHRpb24gbGFzdCBzYXc6IHRoZSBkYXRhc2V0LCB0aGUgdmlldyBzdGF0ZSBhbmQgdGhlIHNlbGVjdGlvbi4gKi9cbmV4cG9ydCB0eXBlIFNwYXRpYWxMYXRlc3QgPSBbU3BhdGlhbERhdGFzZXQgfCBudWxsLCBTcGF0aWFsVmlld1N0YXRlLCBTcGF0aWFsU2VsZWN0aW9uTWFza107XG5cbi8qKiBXaGVyZSB0aGUgc3BhdGlhbCB0aWxlIGxheWVycycgcGFuZWwgb3V0cHV0cyBnbyAodGhlIHNlcnZpY2UncyBzdWJqZWN0cyBhbmQgYmFkZ2UpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsVGlsZVNpbmtzIHtcbiAgLyoqIFRoZSBjb250aW51b3VzIExVVCB0aGUgdmlldyBpcyB1c2luZyAoc28gY2VsbHMgY29sb3VyZWQgYnkgYSBnZW5lIG1hdGNoIHRoZSBtYXJrZXJzKS4gKi9cbiAgY29udGludW91c0x1dCh2aWV3OiBTcGF0aWFsVmlld1N0YXRlKTogUmdiW107XG4gIGVzdGltYXRlQ2hhbmdlZChlc3RpbWF0ZTogVHJhbnNjcmlwdEVzdGltYXRlIHwgbnVsbCk6IHZvaWQ7XG4gIGdlbmVDb3VudHNDaGFuZ2VkKGNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB8IG51bGwpOiB2b2lkO1xuICBkZW5zaXR5Q2hhbmdlZChzdGF0czogeyBsbzogbnVtYmVyOyBoaTogbnVtYmVyOyBtYXg6IG51bWJlciB9KTogdm9pZDtcbiAgbG9hZGluZ0NoYW5nZWQobGF5ZXJzOiBzdHJpbmdbXSk6IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBvYnNlcnZhdGlvbiBnZW5lIGZpbHRlciBjb3VsZCBiZSBhcHBsaWVkOyBzZWUge0BsaW5rIFNwYXRpYWxTZXNzaW9uLnJlcG9ydEdlbmVGaWx0ZXJ9LiAqL1xuICBnZW5lRmlsdGVyRmFpbGVkPyhmYWlsZWQ6IGJvb2xlYW4pOiB2b2lkO1xufVxuXG4vKiogVGhlIDJEIHNjZW5lIHRoZSB0aWxlIGxheWVycyBjdXJyZW50bHkgZHJhdyBpbnRvLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsVGlsZU93bmVyIHtcbiAgY2FudmFzU2l6ZSgpOiBbbnVtYmVyLCBudW1iZXJdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKCk6IHZvaWQ7XG59XG5cbi8qKiBBbiBlc3RpbWF0ZWQgZmllbGQgYW5kIHRoZSBpbnB1dHMgaXQgd2FzIGVzdGltYXRlZCBmb3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkQ2FjaGU8VD4ge1xuICBrZXk6IHN0cmluZyB8IG51bGw7XG4gIGZpZWxkOiBUIHwgbnVsbDtcbn1cblxuLyoqXG4gKiBUaGUgc3BhdGlhbCBzdGF0ZSB0aGF0IG91dGxpdmVzIGEgc2NlbmUgKHJldmlldyBBcHBlbmRpeCBCKTogd2hhdCB0aGUgc3Vic2NyaXB0aW9uIGxhc3Qgc2F3LCB0aGVcbiAqIG1lbW9pc2VkIHBlcmNlbnRpbGUgd2luZG93cywgdGhlIHNlbGVjdGlvbiByZXZpc2lvbiBjb3VudGVyIGFuZCB0aGUgZXN0aW1hdGVkIGdlbmUtbWFwIEZJRUxEUyDigJRcbiAqIHZpZXdlci1pbmRlcGVuZGVudCBhbmQgZXhwZW5zaXZlLCBzbyBhIHJlLXBsb3QgcmVjb2xvdXJzIHRoZSBjYWNoZWQgZmllbGQgaW5zdGVhZCBvZiBlc3RpbWF0aW5nXG4gKiBpdCBhZ2Fpbi4gRXZlcnl0aGluZyB0aGF0IG5hbWVzIGEgbGF5ZXIgb2YgYSB2aWV3ZXIgYmVsb25ncyB0byB0aGUgc2NlbmUgaW5zdGVhZC5cbiAqL1xuZXhwb3J0IGNsYXNzIFNwYXRpYWxTZXNzaW9uIHtcbiAgLyoqIExhdGVzdCAoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uKSB0aGUgc3BhdGlhbCBzdWJzY3JpcHRpb24gc2F3IOKAlCBzbyBhIHNsaWNlIGNoYW5nZSBjYW5cbiAgICogIHJlYnVpbGQgdGhlIG1hcmtlcnMgZm9yIHRoZSBuZXcgcGxhbmUsIGFuZCB0aGUgdGlsZSBsYXllcnMgYW5kIHRoZSBob3ZlciBjYW4gcmVhZCBpdC4gKi9cbiAgbGF0ZXN0OiBTcGF0aWFsTGF0ZXN0IHwgbnVsbCA9IG51bGw7XG4gIC8qKiBTcGF0aWFsIGNvbG91cmluZydzIHBlcmNlbnRpbGUgd2luZG93cywgbWVtb2lzZWQgcGVyIGNvbG91cmVkIHZlY3RvciAoU1BBVElBTC0xMikuICovXG4gIHJlYWRvbmx5IGNvbnRyYXN0V2luZG93cyA9IG5ldyBDb250cmFzdFdpbmRvd0NhY2hlKCk7XG4gIC8qKiBUaGUgMkQgZ2VuZSBtYXAncyBmaWVsZCAodGhlIGV4cGVuc2l2ZSBoYWxmOiBpdCBzdXJ2aXZlcyBhIHJlY29sb3VyIGFuZCBhIHJlLXBsb3QpLiAqL1xuICByZWFkb25seSBnZW5lTWFwOiBGaWVsZENhY2hlPEV4cHJlc3Npb25GaWVsZD4gPSB7IGtleTogbnVsbCwgZmllbGQ6IG51bGwgfTtcbiAgLyoqIFRoZSAzRCBnZW5lIG1hcCdzIGZpZWxkLiAqL1xuICByZWFkb25seSBnZW5lTWFwVm9sdW1lOiBGaWVsZENhY2hlPEV4cHJlc3Npb25Wb2x1bWVGaWVsZD4gPSB7IGtleTogbnVsbCwgZmllbGQ6IG51bGwgfTtcbiAgcHJpdmF0ZSBsYXN0U2VsZWN0aW9uU2VlbjogU3BhdGlhbFNlbGVjdGlvbk1hc2sgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzZWxlY3Rpb25SZXZpc2lvbiA9IDA7XG4gIC8qKiBMZXZlbC1vZi1kZXRhaWwgY2VsbCBvdXRsaW5lcywgdHJhbnNjcmlwdHMgYW5kIGRlbnNpdHkgb3ZlciB0aGUgMkQgdmlldyDigJQgY3JlYXRlZCBvbiBmaXJzdFxuICAgKiAgdXNlLCBvbmx5IHdoZW4gYSBzcGF0aWFsIHBvcnQgaXMgYm91bmQsIGFuZCBrZXB0IGFjcm9zcyBzY2VuZXMgKGl0cyB0aWxlIGNhY2hlcyB3aXRoIGl0KS4gKi9cbiAgcHJpdmF0ZSB0aWxlTGF5ZXJzOiBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRpbGVPd25lcjogU3BhdGlhbFRpbGVPd25lciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJlYWRvbmx5IHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCB8IG51bGwsXG4gICAgcmVhZG9ubHkgc2VsZWN0aW9uOiBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfCBudWxsLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc2lua3M6IFNwYXRpYWxUaWxlU2lua3MsXG4gICkge31cblxuICAvKiogVGVsbCB0aGUgcGFuZWwgd2hldGhlciB0aGUgb2JzZXJ2YXRpb24gZ2VuZSBmaWx0ZXIgY291bGQgYmUgYXBwbGllZCB0aGlzIHJlYnVpbGQuICovXG4gIHJlcG9ydEdlbmVGaWx0ZXIoZmFpbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaW5rcy5nZW5lRmlsdGVyRmFpbGVkPy4oZmFpbGVkKTtcbiAgfVxuXG4gIC8qKiBUaGUgdGlsZSBsYXllcnMsIGlmIHRoZXkgd2VyZSBldmVyIGJ1aWx0LiAqL1xuICBnZXQgdGlsZXMoKTogTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy50aWxlTGF5ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSB0aWxlIGxheWVycywgYnVpbHQgb24gZmlyc3QgdXNlIChudWxsIHdpdGhvdXQgYSBzcGF0aWFsIHBvcnQpLCBub3cgZHJhd2luZyBmb3IgYG93bmVyYC5cbiAgICogVGhlaXIgaG9zdCBjYWxsYmFja3MgcmVhZCB0aGUgc2Vzc2lvbidzIGxpdmUgc3RhdGUgYW5kIHRoZSBvd25lcidzIGNhbnZhcywgc28gdGhleSBuZXZlciBob2xkXG4gICAqIGEgc3RhbGUgZGF0YXNldCBvciBjb2xvcm1hcC5cbiAgICovXG4gIGNsYWltVGlsZXMob3duZXI6IFNwYXRpYWxUaWxlT3duZXIpOiBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyB8IG51bGwge1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgaWYgKCFwb3J0KSByZXR1cm4gbnVsbDtcbiAgICB0aGlzLnRpbGVPd25lciA9IG93bmVyO1xuICAgIGNvbnN0IHNpbmtzID0gdGhpcy5zaW5rcztcbiAgICB0aGlzLnRpbGVMYXllcnMgPz89IG5ldyBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyhwb3J0LCB7XG4gICAgICBsYXRlc3Q6ICgpID0+IHRoaXMubGF0ZXN0LFxuICAgICAgY2FudmFzU2l6ZTogKCkgPT4gdGhpcy50aWxlT3duZXI/LmNhbnZhc1NpemUoKSA/PyBbMCwgMF0sXG4gICAgICBjb250aW51b3VzTHV0OiAodmlldykgPT4gc2lua3MuY29udGludW91c0x1dCh2aWV3KSxcbiAgICAgIGVzdGltYXRlQ2hhbmdlZDogKGUpID0+IHNpbmtzLmVzdGltYXRlQ2hhbmdlZChlKSxcbiAgICAgIGdlbmVDb3VudHNDaGFuZ2VkOiAoYykgPT4gc2lua3MuZ2VuZUNvdW50c0NoYW5nZWQoYyksXG4gICAgICBsb2FkaW5nQ2hhbmdlZDogKGxheWVycykgPT4gc2lua3MubG9hZGluZ0NoYW5nZWQobGF5ZXJzKSxcbiAgICAgIGRlbnNpdHlDaGFuZ2VkOiAoZCkgPT4gc2lua3MuZGVuc2l0eUNoYW5nZWQoZCksXG4gICAgICBwb2x5Z29uc1Nob3duQ2hhbmdlZDogKCkgPT4gdGhpcy50aWxlT3duZXI/LnBvbHlnb25zU2hvd25DaGFuZ2VkKCksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMudGlsZUxheWVycztcbiAgfVxuXG4gIC8qKiBgb3duZXJgJ3Mgc2NlbmUgaXMgZ29pbmcgYXdheTogdGFrZSB0aGUgdGlsZSBsYXllcnMgb2ZmIGl0cyB2aWV3ZXIuICovXG4gIHJlbGVhc2VUaWxlcyhvd25lcjogU3BhdGlhbFRpbGVPd25lcik6IHZvaWQge1xuICAgIGlmICh0aGlzLnRpbGVPd25lciAhPT0gb3duZXIpIHJldHVybjtcbiAgICB0aGlzLnRpbGVPd25lciA9IG51bGw7XG4gICAgdGhpcy50aWxlTGF5ZXJzPy5kZXRhY2goKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBIHJldmlzaW9uIG51bWJlciBmb3IgYSBzZWxlY3Rpb24gb2JqZWN0LlxuICAgKlxuICAgKiBUaGUgc3RvcmUgaGFuZHMgb3V0IGEgTkVXIG1hc2sgb2JqZWN0IHBlciBjaGFuZ2UsIHNvIG9iamVjdCBpZGVudGl0eSBpcyB0aGVcbiAgICogY2hlYXAgYW5kIGV4YWN0IHdheSB0byB0ZWxsIHR3byBzZWxlY3Rpb25zIGFwYXJ0IOKAlCBhIGZpbmdlcnByaW50IG92ZXIgMy43TVxuICAgKiBtYXNrIGJ5dGVzIHdvdWxkIGJlIG5laXRoZXIuIENvdW50aW5nIHJldmlzaW9ucyBrZWVwcyB0aGUgY2FjaGUga2V5IGEgc2hvcnRcbiAgICogc3RyaW5nLlxuICAgKi9cbiAgc2VsZWN0aW9uUmV2KHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvbk1hc2spOiBudW1iZXIge1xuICAgIGlmIChzZWxlY3Rpb24gIT09IHRoaXMubGFzdFNlbGVjdGlvblNlZW4pIHtcbiAgICAgIHRoaXMubGFzdFNlbGVjdGlvblNlZW4gPSBzZWxlY3Rpb247XG4gICAgICB0aGlzLnNlbGVjdGlvblJldmlzaW9uKys7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvblJldmlzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEV2ZXJ5dGhpbmcgYSBzcGF0aWFsIHNjZW5lIHJlZHJhd3Mgb246IHRoZSBkYXRhc2V0LCB0aGUgdmlldyBzdGF0ZSwgdGhlIHNlbGVjdGlvbiDigJQgYW5kIHRoZVxuICAgKiBkaXNwbGF5IGNvbG9ybWFwIGFuZCByZXZlcnNlIGZsYWcsIHdoaWNoIGFyZSBpbnB1dHMgaGVyZSwgbm90IGp1c3Qgc29tZXRoaW5nIHJlYWQgYXQgYnVpbGRcbiAgICogdGltZTogYGNvbnRpbnVvdXNDb2xvcm1hcDogbnVsbGAgbWVhbnMgXCJmb2xsb3cgdGhlIGltYWdlJ3MgY29sb3JtYXBcIiwgYW5kIGEgc2V0dGluZyB0aGF0IG9ubHlcbiAgICogdGFrZXMgZWZmZWN0IGF0IHRoZSBuZXh0IHVucmVsYXRlZCByZWJ1aWxkIGlzIG5vdCBvbmUuIE51bGwgd2l0aG91dCBhIHNwYXRpYWwgcG9ydC5cbiAgICovXG4gIGNoYW5nZXMkKFxuICAgIHN0b3JlOiBWaXN1YWxpemVyU3RvcmUsXG4gICk6IE9ic2VydmFibGU8W1NwYXRpYWxEYXRhc2V0IHwgbnVsbCwgU3BhdGlhbFZpZXdTdGF0ZSwgU3BhdGlhbFNlbGVjdGlvbk1hc2ssIHVua25vd24sIGJvb2xlYW5dPiB8IG51bGwge1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLnBvcnQ7XG4gICAgaWYgKCFwb3J0KSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBzZWxlY3Rpb24kID0gdGhpcy5zZWxlY3Rpb24/LmdldFNlbGVjdGlvbiQoKSA/PyBvZihlbXB0eVNlbGVjdGlvbigpKTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICBwb3J0LmdldERhdGFzZXQkKCksXG4gICAgICBzdG9yZS5nZXRTcGF0aWFsVmlldyQoKSxcbiAgICAgIHNlbGVjdGlvbiQsXG4gICAgICBzdG9yZS5nZXRDb2xvcm1hcCgpLFxuICAgICAgc3RvcmUuZ2V0UmV2ZXJzZVNjYWxlKCksXG4gICAgXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBXaGF0IHRoZSAyRCBhbmQgM0Qgc3BhdGlhbCBzY2VuZXMgc2hhcmU6IHRoZSBzdWJzY3JpcHRpb24gdGhhdCByZWRyYXdzIHRoZW0sIHRoZSBob3ZlciBvdmVyXG4gKiB0aGVtLCBhbmQgdGhlIGxhdGVzdC13aW5zIHNlcXVlbmNpbmcgb2YgdGhlaXIgKGFzeW5jKSByZWJ1aWxkcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNwYXRpYWxTY2VuZUJhc2Uge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaG92ZXI6IFNwYXRpYWxIb3ZlcjtcbiAgLyoqIExhdGVzdCB3aW5zIHdpdGhpbiB0aGUgc2NlbmU6IGEgY29sb3VyIGZldGNoIGlzIGEgcm91bmQtdHJpcCwgc28gYSBmYXN0IHNlcXVlbmNlIG9mXG4gICAqICBjb2xvdXItYnkgY2hhbmdlcyBjYW4gcmVzb2x2ZSBvdXQgb2Ygb3JkZXIsIGFuZCBvbmx5IHRoZSBuZXdlc3QgbWF5IHRvdWNoIHRoZSBsYXllcnMuICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZWJ1aWxkcyA9IG5ldyBTdXBlcnNlZGUoKTtcbiAgcHJpdmF0ZSBzdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY3R4OiBTY2VuZUNvbnRleHQsXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHNlc3Npb246IFNwYXRpYWxTZXNzaW9uLFxuICAgIGlzM2Q6IGJvb2xlYW4sXG4gICkge1xuICAgIHRoaXMuaG92ZXIgPSBuZXcgU3BhdGlhbEhvdmVyKHtcbiAgICAgIGlzM2QsXG4gICAgICB2aWV3ZXI6IGN0eC52aWV3ZXIsXG4gICAgICBwb3J0OiBzZXNzaW9uLnBvcnQsXG4gICAgICBzZWxlY3Rpb246IHNlc3Npb24uc2VsZWN0aW9uLFxuICAgICAgZGF0YXNldDogKCkgPT4gc2Vzc2lvbi5sYXRlc3Q/LlswXSA/PyBudWxsLFxuICAgICAgcGljazogKGNsaWVudFgsIGNsaWVudFksIHNsYWNrUHgpID0+IHRoaXMucGlja09ic2VydmF0aW9uKGNsaWVudFgsIGNsaWVudFksIHNsYWNrUHgpLFxuICAgICAgdGlsZXM6ICgpID0+IHRoaXMuaG92ZXJUaWxlcygpLFxuICAgICAgdG9vbEFjdGl2ZTogKCkgPT4gISFjdHgudG9vbHMucmVnaW9uT3ZlcmxheT8udG9vbEFjdGl2ZSxcbiAgICAgIG91dHNpZGVab25lOiAoZm4pID0+IGN0eC5vdXRzaWRlWm9uZShmbiksXG4gICAgICBpblpvbmU6IChmbikgPT4gY3R4LmluWm9uZShmbiksXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVidWlsZCBvbiBldmVyeSBkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24gb3IgY29sb3JtYXAgY2hhbmdlLiAqL1xuICBwcm90ZWN0ZWQgc3Vic2NyaWJlU3BhdGlhbCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnN1YiA9XG4gICAgICB0aGlzLnNlc3Npb24uY2hhbmdlcyQodGhpcy5jdHguc3RvcmUpPy5zdWJzY3JpYmUoKFtkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24sIGNvbG9ybWFwLCByZXZlcnNlXSkgPT4ge1xuICAgICAgICB0aGlzLmN0eC5kaXNwbGF5LnJlY29yZCgoY29sb3JtYXAgYXMgQ29sb3JtYXBOb2RlKSA/PyBudWxsLCAhIXJldmVyc2UpO1xuICAgICAgICAvLyBLZXB0IHNvIGEgc2xpY2UgY2hhbmdlIGNhbiByZWRyYXcgdGhlIG1hcmtlcnMgZm9yIHRoZSBuZXcgcGxhbmUsIHdoaWNoXG4gICAgICAgIC8vIGFycml2ZXMgdGhyb3VnaCBzZXRaSW5kZXggcmF0aGVyIHRoYW4gdGhyb3VnaCBhbnkgb2YgdGhlc2Ugc3RyZWFtcy5cbiAgICAgICAgdGhpcy5zZXNzaW9uLmxhdGVzdCA9IFtkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb25dO1xuICAgICAgICAvLyBXaGF0IHRoZSBtYXJrZXJzIGFyZSBtYXkgaGF2ZSBjaGFuZ2VkOyB3aGVyZSB0aGV5IGFyZSBpcyB0aGUgbGF5ZXJzJyBvd24gcGljaydzXG4gICAgICAgIC8vIGJ1c2luZXNzIChpdCBmb2xsb3dzIHRoZWlyIGRhdGEgYW5kIHRoZSBjYW1lcmEpLlxuICAgICAgICB2b2lkIHRoaXMuaG92ZXIucmVzb2x2ZVNvdXJjZShkYXRhc2V0LCB2aWV3KTtcbiAgICAgICAgdm9pZCB0aGlzLnJlYnVpbGQoZGF0YXNldCwgdmlldywgc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5hZnRlckNoYW5nZSgpO1xuICAgICAgfSkgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKiAoUmUpYnVpbGQgdGhlIHNjZW5lJ3MgbGF5ZXJzIGZvciB0aGUgY3VycmVudCBkYXRhc2V0ICsgdmlldyBzdGF0ZS4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHJlYnVpbGQoXG4gICAgZGF0YXNldDogU3BhdGlhbERhdGFzZXQgfCBudWxsLFxuICAgIHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUsXG4gICAgc2VsZWN0aW9uPzogU3BhdGlhbFNlbGVjdGlvbk1hc2ssXG4gICk6IFByb21pc2U8dm9pZD47XG4gIC8qKiBSdW4gYWZ0ZXIgZWFjaCByZWJ1aWxkIGlzIHN0YXJ0ZWQgKHRoZSAyRCB0aWxlIGxheWVycyByZWZyZXNoIGhlcmUpLiAqL1xuICBwcm90ZWN0ZWQgYWZ0ZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgLyogbm90aGluZyBieSBkZWZhdWx0ICovXG4gIH1cbiAgLyoqIFRoZSBvYnNlcnZhdGlvbiBkcmF3biB1bmRlciBhIGNsaWVudCBwb3NpdGlvbiwgb3IgLTEgKHNlZSBgU3BhdGlhbEhvdmVySG9zdC5waWNrYCkuICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwaWNrT2JzZXJ2YXRpb24oY2xpZW50WDogbnVtYmVyLCBjbGllbnRZOiBudW1iZXIsIHNsYWNrUHg6IG51bWJlcik6IG51bWJlcjtcbiAgcHJvdGVjdGVkIGhvdmVyVGlsZXMoKTogTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMgfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKiBTdG9wIGZvbGxvd2luZyB0aGUgZGF0YSwgZHJvcCB0aGUgaG92ZXIsIGFuZCBtYWtlIGV2ZXJ5IHJlYnVpbGQgaW4gZmxpZ2h0IHN0YWxlLiAqL1xuICBwcm90ZWN0ZWQgZGlzcG9zZVNwYXRpYWwoKTogdm9pZCB7XG4gICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWIgPSBudWxsO1xuICAgIHRoaXMucmVidWlsZHMuY2FuY2VsKCk7XG4gICAgdGhpcy5ob3Zlci5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtc2NlbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtc2NlbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUE0QixhQUFhLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTW5FLE9BQU8sRUFBd0IsY0FBYyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHdkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsdUJBQXVCLEVBQXNCLE1BQU0sd0JBQXdCLENBQUM7QUFrQ3JGOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGNBQWM7SUFpQnpCLFlBQ1csSUFBNEIsRUFDNUIsU0FBdUMsRUFDL0IsS0FBdUI7UUFGL0IsU0FBSSxHQUFKLElBQUksQ0FBd0I7UUFDNUIsY0FBUyxHQUFULFNBQVMsQ0FBOEI7UUFDL0IsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFuQjFDO29HQUM0RjtRQUM1RixXQUFNLEdBQXlCLElBQUksQ0FBQztRQUNwQyx5RkFBeUY7UUFDaEYsb0JBQWUsR0FBRyxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDckQsMEZBQTBGO1FBQ2pGLFlBQU8sR0FBZ0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMzRSwrQkFBK0I7UUFDdEIsa0JBQWEsR0FBc0MsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUMvRSxzQkFBaUIsR0FBZ0MsSUFBSSxDQUFDO1FBQ3RELHNCQUFpQixH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QUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQVFELDJFQUEyRTtJQUNqRSxXQUFXO1FBQ25CLHdCQUF3QjtJQUMxQixDQUFDO0lBR0Qsa0ZBQWtGO0lBQ2xGLFVBQVUsQ0FBQyxRQUFnQixFQUFFLFFBQWdCO1FBQzNDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUNELG1HQUFtRztJQUNuRyxRQUFRLENBQUMsUUFBZ0IsRUFBRSxRQUFnQjtRQUN6QyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUNTLFVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsdUZBQXVGO0lBQzdFLGNBQWM7UUFDdEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztRQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDdkIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDZWxsczNkU3RhdHVzIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBjb21iaW5lTGF0ZXN0LCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTcGF0aWFsRGF0YVBvcnQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcG9ydHMvc3BhdGlhbC1kYXRhLnBvcnQnO1xuaW1wb3J0IHsgU3BhdGlhbERhdGFzZXQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvc3BhdGlhbC1kYXRhc2V0LmNvbnRyYWN0JztcbmltcG9ydCB7IENvbG9ybWFwTm9kZSwgU3BhdGlhbFZpZXdTdGF0ZSB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9kaXNwbGF5LXR5cGVzJztcbmltcG9ydCB7IEV4cHJlc3Npb25GaWVsZCwgRXhwcmVzc2lvblZvbHVtZUZpZWxkIH0gZnJvbSAnLi4vLi4vc3BhdGlhbC9zcGF0aWFsLWV4cHJlc3Npb24nO1xuaW1wb3J0IHsgU3BhdGlhbFNlbGVjdGlvbk1hc2ssIGVtcHR5U2VsZWN0aW9uIH0gZnJvbSAnLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBTcGF0aWFsU2VsZWN0aW9uU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9zcGF0aWFsLXNlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFZpc3VhbGl6ZXJTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Zpc3VhbGl6ZXItc3RvcmUuc2VydmljZSc7XG5pbXBvcnQgeyBTdXBlcnNlZGUgfSBmcm9tICcuLi8uLi91dGlsL3N1cGVyc2VkZSc7XG5pbXBvcnQgeyBDb250cmFzdFdpbmRvd0NhY2hlIH0gZnJvbSAnLi9uYXBhcmktc3BhdGlhbC1lbmNvZGluZyc7XG5pbXBvcnQgeyBTcGF0aWFsSG92ZXIgfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLWhvdmVyJztcbmltcG9ydCB7IE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzLCBUcmFuc2NyaXB0RXN0aW1hdGUgfSBmcm9tICcuL25hcGFyaS1zcGF0aWFsLXRpbGVzJztcbmltcG9ydCB7IFJnYiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jb2xvcm1hcC1sdXQnO1xuaW1wb3J0IHR5cGUgeyBTY2VuZUNvbnRleHQgfSBmcm9tICcuL25hcGFyaS1zY2VuZSc7XG5cbi8qKiBXaGF0IHRoZSBzcGF0aWFsIHN1YnNjcmlwdGlvbiBsYXN0IHNhdzogdGhlIGRhdGFzZXQsIHRoZSB2aWV3IHN0YXRlIGFuZCB0aGUgc2VsZWN0aW9uLiAqL1xuZXhwb3J0IHR5cGUgU3BhdGlhbExhdGVzdCA9IFtTcGF0aWFsRGF0YXNldCB8IG51bGwsIFNwYXRpYWxWaWV3U3RhdGUsIFNwYXRpYWxTZWxlY3Rpb25NYXNrXTtcblxuLyoqIFdoZXJlIHRoZSBzcGF0aWFsIHRpbGUgbGF5ZXJzJyBwYW5lbCBvdXRwdXRzIGdvICh0aGUgc2VydmljZSdzIHN1YmplY3RzIGFuZCBiYWRnZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxUaWxlU2lua3Mge1xuICAvKiogVGhlIGNvbnRpbnVvdXMgTFVUIHRoZSB2aWV3IGlzIHVzaW5nIChzbyBjZWxscyBjb2xvdXJlZCBieSBhIGdlbmUgbWF0Y2ggdGhlIG1hcmtlcnMpLiAqL1xuICBjb250aW51b3VzTHV0KHZpZXc6IFNwYXRpYWxWaWV3U3RhdGUpOiBSZ2JbXTtcbiAgZXN0aW1hdGVDaGFuZ2VkKGVzdGltYXRlOiBUcmFuc2NyaXB0RXN0aW1hdGUgfCBudWxsKTogdm9pZDtcbiAgZ2VuZUNvdW50c0NoYW5nZWQoY291bnRzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbCk6IHZvaWQ7XG4gIGRlbnNpdHlDaGFuZ2VkKHN0YXRzOiB7IGxvOiBudW1iZXI7IGhpOiBudW1iZXI7IG1heDogbnVtYmVyIH0pOiB2b2lkO1xuICBsb2FkaW5nQ2hhbmdlZChsYXllcnM6IHN0cmluZ1tdKTogdm9pZDtcbiAgLyoqIFdoZXRoZXIgdGhlIG9ic2VydmF0aW9uIGdlbmUgZmlsdGVyIGNvdWxkIGJlIGFwcGxpZWQ7IHNlZSB7QGxpbmsgU3BhdGlhbFNlc3Npb24ucmVwb3J0R2VuZUZpbHRlcn0uICovXG4gIGdlbmVGaWx0ZXJGYWlsZWQ/KGZhaWxlZDogYm9vbGVhbik6IHZvaWQ7XG4gIC8qKiBIb3cgdGhlIDNEIHZpZXcncyBpbmRpdmlkdWFsIGNlbGxzIHN0YW5kOyBzZWUge0BsaW5rIFNwYXRpYWxTZXNzaW9uLnJlcG9ydENlbGxzM2R9LiAqL1xuICBjZWxsczNkU3RhdHVzPyhzdGF0dXM6IENlbGxzM2RTdGF0dXMgfCBudWxsKTogdm9pZDtcbn1cblxuLyoqIFRoZSAyRCBzY2VuZSB0aGUgdGlsZSBsYXllcnMgY3VycmVudGx5IGRyYXcgaW50by4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3BhdGlhbFRpbGVPd25lciB7XG4gIGNhbnZhc1NpemUoKTogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqIE91dGxpbmVzIGFwcGVhcmVkIG9yIGRpc2FwcGVhcmVkOiB0aGUgbWFya2VycycgdmlzaWJpbGl0eSBmb2xsb3dzLiAqL1xuICBwb2x5Z29uc1Nob3duQ2hhbmdlZCgpOiB2b2lkO1xufVxuXG4vKiogQW4gZXN0aW1hdGVkIGZpZWxkIGFuZCB0aGUgaW5wdXRzIGl0IHdhcyBlc3RpbWF0ZWQgZm9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWVsZENhY2hlPFQ+IHtcbiAga2V5OiBzdHJpbmcgfCBudWxsO1xuICBmaWVsZDogVCB8IG51bGw7XG59XG5cbi8qKlxuICogVGhlIHNwYXRpYWwgc3RhdGUgdGhhdCBvdXRsaXZlcyBhIHNjZW5lIChyZXZpZXcgQXBwZW5kaXggQik6IHdoYXQgdGhlIHN1YnNjcmlwdGlvbiBsYXN0IHNhdywgdGhlXG4gKiBtZW1vaXNlZCBwZXJjZW50aWxlIHdpbmRvd3MsIHRoZSBzZWxlY3Rpb24gcmV2aXNpb24gY291bnRlciBhbmQgdGhlIGVzdGltYXRlZCBnZW5lLW1hcCBGSUVMRFMg4oCUXG4gKiB2aWV3ZXItaW5kZXBlbmRlbnQgYW5kIGV4cGVuc2l2ZSwgc28gYSByZS1wbG90IHJlY29sb3VycyB0aGUgY2FjaGVkIGZpZWxkIGluc3RlYWQgb2YgZXN0aW1hdGluZ1xuICogaXQgYWdhaW4uIEV2ZXJ5dGhpbmcgdGhhdCBuYW1lcyBhIGxheWVyIG9mIGEgdmlld2VyIGJlbG9uZ3MgdG8gdGhlIHNjZW5lIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGF0aWFsU2Vzc2lvbiB7XG4gIC8qKiBMYXRlc3QgKGRhdGFzZXQsIHZpZXcsIHNlbGVjdGlvbikgdGhlIHNwYXRpYWwgc3Vic2NyaXB0aW9uIHNhdyDigJQgc28gYSBzbGljZSBjaGFuZ2UgY2FuXG4gICAqICByZWJ1aWxkIHRoZSBtYXJrZXJzIGZvciB0aGUgbmV3IHBsYW5lLCBhbmQgdGhlIHRpbGUgbGF5ZXJzIGFuZCB0aGUgaG92ZXIgY2FuIHJlYWQgaXQuICovXG4gIGxhdGVzdDogU3BhdGlhbExhdGVzdCB8IG51bGwgPSBudWxsO1xuICAvKiogU3BhdGlhbCBjb2xvdXJpbmcncyBwZXJjZW50aWxlIHdpbmRvd3MsIG1lbW9pc2VkIHBlciBjb2xvdXJlZCB2ZWN0b3IgKFNQQVRJQUwtMTIpLiAqL1xuICByZWFkb25seSBjb250cmFzdFdpbmRvd3MgPSBuZXcgQ29udHJhc3RXaW5kb3dDYWNoZSgpO1xuICAvKiogVGhlIDJEIGdlbmUgbWFwJ3MgZmllbGQgKHRoZSBleHBlbnNpdmUgaGFsZjogaXQgc3Vydml2ZXMgYSByZWNvbG91ciBhbmQgYSByZS1wbG90KS4gKi9cbiAgcmVhZG9ubHkgZ2VuZU1hcDogRmllbGRDYWNoZTxFeHByZXNzaW9uRmllbGQ+ID0geyBrZXk6IG51bGwsIGZpZWxkOiBudWxsIH07XG4gIC8qKiBUaGUgM0QgZ2VuZSBtYXAncyBmaWVsZC4gKi9cbiAgcmVhZG9ubHkgZ2VuZU1hcFZvbHVtZTogRmllbGRDYWNoZTxFeHByZXNzaW9uVm9sdW1lRmllbGQ+ID0geyBrZXk6IG51bGwsIGZpZWxkOiBudWxsIH07XG4gIHByaXZhdGUgbGFzdFNlbGVjdGlvblNlZW46IFNwYXRpYWxTZWxlY3Rpb25NYXNrIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc2VsZWN0aW9uUmV2aXNpb24gPSAwO1xuICAvKiogTGV2ZWwtb2YtZGV0YWlsIGNlbGwgb3V0bGluZXMsIHRyYW5zY3JpcHRzIGFuZCBkZW5zaXR5IG92ZXIgdGhlIDJEIHZpZXcg4oCUIGNyZWF0ZWQgb24gZmlyc3RcbiAgICogIHVzZSwgb25seSB3aGVuIGEgc3BhdGlhbCBwb3J0IGlzIGJvdW5kLCBhbmQga2VwdCBhY3Jvc3Mgc2NlbmVzIChpdHMgdGlsZSBjYWNoZXMgd2l0aCBpdCkuICovXG4gIHByaXZhdGUgdGlsZUxheWVyczogTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0aWxlT3duZXI6IFNwYXRpYWxUaWxlT3duZXIgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICByZWFkb25seSBwb3J0OiBTcGF0aWFsRGF0YVBvcnQgfCBudWxsLFxuICAgIHJlYWRvbmx5IHNlbGVjdGlvbjogU3BhdGlhbFNlbGVjdGlvblN0b3JlIHwgbnVsbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNpbmtzOiBTcGF0aWFsVGlsZVNpbmtzLFxuICApIHt9XG5cbiAgLyoqIFRlbGwgdGhlIHBhbmVsIGhvdyB0aGUgM0QgdmlldydzIGluZGl2aWR1YWwgY2VsbHMgc3RhbmQgKG51bGw6IG5vbmUgZHJhd24pLiAqL1xuICByZXBvcnRDZWxsczNkKHN0YXR1czogQ2VsbHMzZFN0YXR1cyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnNpbmtzLmNlbGxzM2RTdGF0dXM/LihzdGF0dXMpO1xuICB9XG5cbiAgLyoqIFRlbGwgdGhlIHBhbmVsIHdoZXRoZXIgdGhlIG9ic2VydmF0aW9uIGdlbmUgZmlsdGVyIGNvdWxkIGJlIGFwcGxpZWQgdGhpcyByZWJ1aWxkLiAqL1xuICByZXBvcnRHZW5lRmlsdGVyKGZhaWxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2lua3MuZ2VuZUZpbHRlckZhaWxlZD8uKGZhaWxlZCk7XG4gIH1cblxuICAvKiogVGhlIHRpbGUgbGF5ZXJzLCBpZiB0aGV5IHdlcmUgZXZlciBidWlsdC4gKi9cbiAgZ2V0IHRpbGVzKCk6IE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudGlsZUxheWVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGlsZSBsYXllcnMsIGJ1aWx0IG9uIGZpcnN0IHVzZSAobnVsbCB3aXRob3V0IGEgc3BhdGlhbCBwb3J0KSwgbm93IGRyYXdpbmcgZm9yIGBvd25lcmAuXG4gICAqIFRoZWlyIGhvc3QgY2FsbGJhY2tzIHJlYWQgdGhlIHNlc3Npb24ncyBsaXZlIHN0YXRlIGFuZCB0aGUgb3duZXIncyBjYW52YXMsIHNvIHRoZXkgbmV2ZXIgaG9sZFxuICAgKiBhIHN0YWxlIGRhdGFzZXQgb3IgY29sb3JtYXAuXG4gICAqL1xuICBjbGFpbVRpbGVzKG93bmVyOiBTcGF0aWFsVGlsZU93bmVyKTogTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMgfCBudWxsIHtcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIGlmICghcG9ydCkgcmV0dXJuIG51bGw7XG4gICAgdGhpcy50aWxlT3duZXIgPSBvd25lcjtcbiAgICBjb25zdCBzaW5rcyA9IHRoaXMuc2lua3M7XG4gICAgdGhpcy50aWxlTGF5ZXJzID8/PSBuZXcgTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMocG9ydCwge1xuICAgICAgbGF0ZXN0OiAoKSA9PiB0aGlzLmxhdGVzdCxcbiAgICAgIGNhbnZhc1NpemU6ICgpID0+IHRoaXMudGlsZU93bmVyPy5jYW52YXNTaXplKCkgPz8gWzAsIDBdLFxuICAgICAgY29udGludW91c0x1dDogKHZpZXcpID0+IHNpbmtzLmNvbnRpbnVvdXNMdXQodmlldyksXG4gICAgICBlc3RpbWF0ZUNoYW5nZWQ6IChlKSA9PiBzaW5rcy5lc3RpbWF0ZUNoYW5nZWQoZSksXG4gICAgICBnZW5lQ291bnRzQ2hhbmdlZDogKGMpID0+IHNpbmtzLmdlbmVDb3VudHNDaGFuZ2VkKGMpLFxuICAgICAgbG9hZGluZ0NoYW5nZWQ6IChsYXllcnMpID0+IHNpbmtzLmxvYWRpbmdDaGFuZ2VkKGxheWVycyksXG4gICAgICBkZW5zaXR5Q2hhbmdlZDogKGQpID0+IHNpbmtzLmRlbnNpdHlDaGFuZ2VkKGQpLFxuICAgICAgcG9seWdvbnNTaG93bkNoYW5nZWQ6ICgpID0+IHRoaXMudGlsZU93bmVyPy5wb2x5Z29uc1Nob3duQ2hhbmdlZCgpLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnRpbGVMYXllcnM7XG4gIH1cblxuICAvKiogYG93bmVyYCdzIHNjZW5lIGlzIGdvaW5nIGF3YXk6IHRha2UgdGhlIHRpbGUgbGF5ZXJzIG9mZiBpdHMgdmlld2VyLiAqL1xuICByZWxlYXNlVGlsZXMob3duZXI6IFNwYXRpYWxUaWxlT3duZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aWxlT3duZXIgIT09IG93bmVyKSByZXR1cm47XG4gICAgdGhpcy50aWxlT3duZXIgPSBudWxsO1xuICAgIHRoaXMudGlsZUxheWVycz8uZGV0YWNoKCk7XG4gIH1cblxuICAvKipcbiAgICogQSByZXZpc2lvbiBudW1iZXIgZm9yIGEgc2VsZWN0aW9uIG9iamVjdC5cbiAgICpcbiAgICogVGhlIHN0b3JlIGhhbmRzIG91dCBhIE5FVyBtYXNrIG9iamVjdCBwZXIgY2hhbmdlLCBzbyBvYmplY3QgaWRlbnRpdHkgaXMgdGhlXG4gICAqIGNoZWFwIGFuZCBleGFjdCB3YXkgdG8gdGVsbCB0d28gc2VsZWN0aW9ucyBhcGFydCDigJQgYSBmaW5nZXJwcmludCBvdmVyIDMuN01cbiAgICogbWFzayBieXRlcyB3b3VsZCBiZSBuZWl0aGVyLiBDb3VudGluZyByZXZpc2lvbnMga2VlcHMgdGhlIGNhY2hlIGtleSBhIHNob3J0XG4gICAqIHN0cmluZy5cbiAgICovXG4gIHNlbGVjdGlvblJldihzZWxlY3Rpb246IFNwYXRpYWxTZWxlY3Rpb25NYXNrKTogbnVtYmVyIHtcbiAgICBpZiAoc2VsZWN0aW9uICE9PSB0aGlzLmxhc3RTZWxlY3Rpb25TZWVuKSB7XG4gICAgICB0aGlzLmxhc3RTZWxlY3Rpb25TZWVuID0gc2VsZWN0aW9uO1xuICAgICAgdGhpcy5zZWxlY3Rpb25SZXZpc2lvbisrO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25SZXZpc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFdmVyeXRoaW5nIGEgc3BhdGlhbCBzY2VuZSByZWRyYXdzIG9uOiB0aGUgZGF0YXNldCwgdGhlIHZpZXcgc3RhdGUsIHRoZSBzZWxlY3Rpb24g4oCUIGFuZCB0aGVcbiAgICogZGlzcGxheSBjb2xvcm1hcCBhbmQgcmV2ZXJzZSBmbGFnLCB3aGljaCBhcmUgaW5wdXRzIGhlcmUsIG5vdCBqdXN0IHNvbWV0aGluZyByZWFkIGF0IGJ1aWxkXG4gICAqIHRpbWU6IGBjb250aW51b3VzQ29sb3JtYXA6IG51bGxgIG1lYW5zIFwiZm9sbG93IHRoZSBpbWFnZSdzIGNvbG9ybWFwXCIsIGFuZCBhIHNldHRpbmcgdGhhdCBvbmx5XG4gICAqIHRha2VzIGVmZmVjdCBhdCB0aGUgbmV4dCB1bnJlbGF0ZWQgcmVidWlsZCBpcyBub3Qgb25lLiBOdWxsIHdpdGhvdXQgYSBzcGF0aWFsIHBvcnQuXG4gICAqL1xuICBjaGFuZ2VzJChcbiAgICBzdG9yZTogVmlzdWFsaXplclN0b3JlLFxuICApOiBPYnNlcnZhYmxlPFtTcGF0aWFsRGF0YXNldCB8IG51bGwsIFNwYXRpYWxWaWV3U3RhdGUsIFNwYXRpYWxTZWxlY3Rpb25NYXNrLCB1bmtub3duLCBib29sZWFuXT4gfCBudWxsIHtcbiAgICBjb25zdCBwb3J0ID0gdGhpcy5wb3J0O1xuICAgIGlmICghcG9ydCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3Qgc2VsZWN0aW9uJCA9IHRoaXMuc2VsZWN0aW9uPy5nZXRTZWxlY3Rpb24kKCkgPz8gb2YoZW1wdHlTZWxlY3Rpb24oKSk7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgcG9ydC5nZXREYXRhc2V0JCgpLFxuICAgICAgc3RvcmUuZ2V0U3BhdGlhbFZpZXckKCksXG4gICAgICBzZWxlY3Rpb24kLFxuICAgICAgc3RvcmUuZ2V0Q29sb3JtYXAoKSxcbiAgICAgIHN0b3JlLmdldFJldmVyc2VTY2FsZSgpLFxuICAgIF0pO1xuICB9XG59XG5cbi8qKlxuICogV2hhdCB0aGUgMkQgYW5kIDNEIHNwYXRpYWwgc2NlbmVzIHNoYXJlOiB0aGUgc3Vic2NyaXB0aW9uIHRoYXQgcmVkcmF3cyB0aGVtLCB0aGUgaG92ZXIgb3ZlclxuICogdGhlbSwgYW5kIHRoZSBsYXRlc3Qtd2lucyBzZXF1ZW5jaW5nIG9mIHRoZWlyIChhc3luYykgcmVidWlsZHMuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTcGF0aWFsU2NlbmVCYXNlIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGhvdmVyOiBTcGF0aWFsSG92ZXI7XG4gIC8qKiBMYXRlc3Qgd2lucyB3aXRoaW4gdGhlIHNjZW5lOiBhIGNvbG91ciBmZXRjaCBpcyBhIHJvdW5kLXRyaXAsIHNvIGEgZmFzdCBzZXF1ZW5jZSBvZlxuICAgKiAgY29sb3VyLWJ5IGNoYW5nZXMgY2FuIHJlc29sdmUgb3V0IG9mIG9yZGVyLCBhbmQgb25seSB0aGUgbmV3ZXN0IG1heSB0b3VjaCB0aGUgbGF5ZXJzLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcmVidWlsZHMgPSBuZXcgU3VwZXJzZWRlKCk7XG4gIHByaXZhdGUgc3ViOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGN0eDogU2NlbmVDb250ZXh0LFxuICAgIHByb3RlY3RlZCByZWFkb25seSBzZXNzaW9uOiBTcGF0aWFsU2Vzc2lvbixcbiAgICBpczNkOiBib29sZWFuLFxuICApIHtcbiAgICB0aGlzLmhvdmVyID0gbmV3IFNwYXRpYWxIb3Zlcih7XG4gICAgICBpczNkLFxuICAgICAgdmlld2VyOiBjdHgudmlld2VyLFxuICAgICAgcG9ydDogc2Vzc2lvbi5wb3J0LFxuICAgICAgc2VsZWN0aW9uOiBzZXNzaW9uLnNlbGVjdGlvbixcbiAgICAgIGRhdGFzZXQ6ICgpID0+IHNlc3Npb24ubGF0ZXN0Py5bMF0gPz8gbnVsbCxcbiAgICAgIHBpY2s6IChjbGllbnRYLCBjbGllbnRZLCBzbGFja1B4KSA9PiB0aGlzLnBpY2tPYnNlcnZhdGlvbihjbGllbnRYLCBjbGllbnRZLCBzbGFja1B4KSxcbiAgICAgIHBpY2tDZWxsOiAoY2xpZW50WCwgY2xpZW50WSkgPT4gdGhpcy5waWNrQ2VsbChjbGllbnRYLCBjbGllbnRZKSxcbiAgICAgIHBpY2tSZWdpb246IChjbGllbnRYLCBjbGllbnRZKSA9PiB0aGlzLnBpY2tSZWdpb24oY2xpZW50WCwgY2xpZW50WSksXG4gICAgICB0aWxlczogKCkgPT4gdGhpcy5ob3ZlclRpbGVzKCksXG4gICAgICB0b29sQWN0aXZlOiAoKSA9PiAhIWN0eC50b29scy5yZWdpb25PdmVybGF5Py50b29sQWN0aXZlLFxuICAgICAgb3V0c2lkZVpvbmU6IChmbikgPT4gY3R4Lm91dHNpZGVab25lKGZuKSxcbiAgICAgIGluWm9uZTogKGZuKSA9PiBjdHguaW5ab25lKGZuKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZWJ1aWxkIG9uIGV2ZXJ5IGRhdGFzZXQsIHZpZXcsIHNlbGVjdGlvbiBvciBjb2xvcm1hcCBjaGFuZ2UuICovXG4gIHByb3RlY3RlZCBzdWJzY3JpYmVTcGF0aWFsKCk6IHZvaWQge1xuICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3ViID1cbiAgICAgIHRoaXMuc2Vzc2lvbi5jaGFuZ2VzJCh0aGlzLmN0eC5zdG9yZSk/LnN1YnNjcmliZSgoW2RhdGFzZXQsIHZpZXcsIHNlbGVjdGlvbiwgY29sb3JtYXAsIHJldmVyc2VdKSA9PiB7XG4gICAgICAgIHRoaXMuY3R4LmRpc3BsYXkucmVjb3JkKChjb2xvcm1hcCBhcyBDb2xvcm1hcE5vZGUpID8/IG51bGwsICEhcmV2ZXJzZSk7XG4gICAgICAgIC8vIEtlcHQgc28gYSBzbGljZSBjaGFuZ2UgY2FuIHJlZHJhdyB0aGUgbWFya2VycyBmb3IgdGhlIG5ldyBwbGFuZSwgd2hpY2hcbiAgICAgICAgLy8gYXJyaXZlcyB0aHJvdWdoIHNldFpJbmRleCByYXRoZXIgdGhhbiB0aHJvdWdoIGFueSBvZiB0aGVzZSBzdHJlYW1zLlxuICAgICAgICB0aGlzLnNlc3Npb24ubGF0ZXN0ID0gW2RhdGFzZXQsIHZpZXcsIHNlbGVjdGlvbl07XG4gICAgICAgIC8vIFdoYXQgdGhlIG1hcmtlcnMgYXJlIG1heSBoYXZlIGNoYW5nZWQ7IHdoZXJlIHRoZXkgYXJlIGlzIHRoZSBsYXllcnMnIG93biBwaWNrJ3NcbiAgICAgICAgLy8gYnVzaW5lc3MgKGl0IGZvbGxvd3MgdGhlaXIgZGF0YSBhbmQgdGhlIGNhbWVyYSkuXG4gICAgICAgIHZvaWQgdGhpcy5ob3Zlci5yZXNvbHZlU291cmNlKGRhdGFzZXQsIHZpZXcpO1xuICAgICAgICB2b2lkIHRoaXMucmVidWlsZChkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmFmdGVyQ2hhbmdlKCk7XG4gICAgICB9KSA/PyBudWxsO1xuICB9XG5cbiAgLyoqIChSZSlidWlsZCB0aGUgc2NlbmUncyBsYXllcnMgZm9yIHRoZSBjdXJyZW50IGRhdGFzZXQgKyB2aWV3IHN0YXRlLiAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVidWlsZChcbiAgICBkYXRhc2V0OiBTcGF0aWFsRGF0YXNldCB8IG51bGwsXG4gICAgdmlldzogU3BhdGlhbFZpZXdTdGF0ZSxcbiAgICBzZWxlY3Rpb24/OiBTcGF0aWFsU2VsZWN0aW9uTWFzayxcbiAgKTogUHJvbWlzZTx2b2lkPjtcbiAgLyoqIFJ1biBhZnRlciBlYWNoIHJlYnVpbGQgaXMgc3RhcnRlZCAodGhlIDJEIHRpbGUgbGF5ZXJzIHJlZnJlc2ggaGVyZSkuICovXG4gIHByb3RlY3RlZCBhZnRlckNoYW5nZSgpOiB2b2lkIHtcbiAgICAvKiBub3RoaW5nIGJ5IGRlZmF1bHQgKi9cbiAgfVxuICAvKiogVGhlIG9ic2VydmF0aW9uIGRyYXduIHVuZGVyIGEgY2xpZW50IHBvc2l0aW9uLCBvciAtMSAoc2VlIGBTcGF0aWFsSG92ZXJIb3N0LnBpY2tgKS4gKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBpY2tPYnNlcnZhdGlvbihjbGllbnRYOiBudW1iZXIsIGNsaWVudFk6IG51bWJlciwgc2xhY2tQeDogbnVtYmVyKTogbnVtYmVyO1xuICAvKiogVGhlIHJlZ2lvbiBzdXJmYWNlIChhIGNsYXNzKSB1bmRlciBhIGNsaWVudCBwb3NpdGlvbiwgb3IgbnVsbCAobm9uZSBkcmF3bikuICovXG4gIHBpY2tSZWdpb24oX2NsaWVudFg6IG51bWJlciwgX2NsaWVudFk6IG51bWJlcik6IHsga2V5OiBzdHJpbmc7IGxhYmVsPzogc3RyaW5nIH0gfCBudWxsIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKiogVGhlIG9ic2VydmF0aW9uIG9mIGFuIGluZGl2aWR1YWwgY2VsbCdzIHN1cmZhY2UgdW5kZXIgYSBjbGllbnQgcG9zaXRpb24sIG9yIC0xIChub25lIGRyYXduKS4gKi9cbiAgcGlja0NlbGwoX2NsaWVudFg6IG51bWJlciwgX2NsaWVudFk6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIHByb3RlY3RlZCBob3ZlclRpbGVzKCk6IE5hcGFyaVNwYXRpYWxUaWxlTGF5ZXJzIHwgbnVsbCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogU3RvcCBmb2xsb3dpbmcgdGhlIGRhdGEsIGRyb3AgdGhlIGhvdmVyLCBhbmQgbWFrZSBldmVyeSByZWJ1aWxkIGluIGZsaWdodCBzdGFsZS4gKi9cbiAgcHJvdGVjdGVkIGRpc3Bvc2VTcGF0aWFsKCk6IHZvaWQge1xuICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3ViID0gbnVsbDtcbiAgICB0aGlzLnJlYnVpbGRzLmNhbmNlbCgpO1xuICAgIHRoaXMuaG92ZXIuZGlzcG9zZSgpO1xuICB9XG59XG4iXX0=
|
|
@@ -54,6 +54,10 @@ export class NapariSpatialTileLayers {
|
|
|
54
54
|
/** Consecutive retries of an incomplete view. */
|
|
55
55
|
this.tileRetries = 0;
|
|
56
56
|
this.token = 0;
|
|
57
|
+
/** The z band of the plane shown, when the view shows one plane of a 3D assay (see setZBand). */
|
|
58
|
+
this.zBand = null;
|
|
59
|
+
/** The plane of a 3D segmentation shown (see setPlane), or null. */
|
|
60
|
+
this.plane = null;
|
|
57
61
|
/** The overlays' layers, one per group, in their fixed order. */
|
|
58
62
|
this.groups = new OrderedLayerGroups(TILE_LAYER_ORDER);
|
|
59
63
|
/** Loads in flight, per layer label, for the loading badge. */
|
|
@@ -89,6 +93,7 @@ export class NapariSpatialTileLayers {
|
|
|
89
93
|
this.loads.clear();
|
|
90
94
|
this.groups.detach();
|
|
91
95
|
this.cells.detached();
|
|
96
|
+
this.cells.dispose();
|
|
92
97
|
this.viewer = null;
|
|
93
98
|
}
|
|
94
99
|
/**
|
|
@@ -121,6 +126,29 @@ export class NapariSpatialTileLayers {
|
|
|
121
126
|
refresh() {
|
|
122
127
|
this.schedule(0);
|
|
123
128
|
}
|
|
129
|
+
/**
|
|
130
|
+
* Show one plane of a 3D assay (its z band, `[lo, hi)` in observation units), or every depth
|
|
131
|
+
* (null): the transcripts drawn are those in the band. Re-plans when it changes.
|
|
132
|
+
*/
|
|
133
|
+
setZBand(band) {
|
|
134
|
+
const same = band === this.zBand || (!!band && !!this.zBand && band[0] === this.zBand[0] && band[1] === this.zBand[1]);
|
|
135
|
+
if (same)
|
|
136
|
+
return;
|
|
137
|
+
this.zBand = band;
|
|
138
|
+
this.refresh();
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Show plane `plane` of a 3D segmentation (an index into its region set's planes), or none: a
|
|
142
|
+
* boundary set naming its region set draws that plane's cells (see `CellLayers.setPlane`).
|
|
143
|
+
* Re-plans when it changes.
|
|
144
|
+
*/
|
|
145
|
+
setPlane(plane) {
|
|
146
|
+
if (plane === this.plane)
|
|
147
|
+
return;
|
|
148
|
+
this.plane = plane;
|
|
149
|
+
this.cells.setPlane(plane);
|
|
150
|
+
this.refresh();
|
|
151
|
+
}
|
|
124
152
|
/** Called right after the service adds its marker layer: everything goes back on top. */
|
|
125
153
|
afterObservations() {
|
|
126
154
|
this.groups.restoreOrder(true);
|
|
@@ -165,7 +193,7 @@ export class NapariSpatialTileLayers {
|
|
|
165
193
|
await Promise.all([
|
|
166
194
|
settle('density', this.density.plan(dataset, view, ctx)),
|
|
167
195
|
settle('cells', this.cells.plan(dataset, view, selection, rect, pxPerUnit, ctx)),
|
|
168
|
-
settle('transcripts', this.transcripts.plan(dataset, view, rect, pxPerUnit, ctx)),
|
|
196
|
+
settle('transcripts', this.transcripts.plan(dataset, view, rect, pxPerUnit, ctx, this.zBand, selection)),
|
|
169
197
|
]);
|
|
170
198
|
this.groups.restoreOrder(false);
|
|
171
199
|
if (ctx.stale())
|
|
@@ -181,4 +209,4 @@ export class NapariSpatialTileLayers {
|
|
|
181
209
|
}
|
|
182
210
|
}
|
|
183
211
|
}
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtdGlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtdGlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFZLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsWUFBWSxFQUdaLG1CQUFtQixHQUNwQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBYSxNQUFNLDhCQUE4QixDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBd0JyRSwyQ0FBMkM7QUFDM0MsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLDJGQUEyRjtBQUMzRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBQ0gsTUFBTSxPQUFPLHVCQUF1QjtJQXFCbEMsWUFDRSxJQUFxQixFQUNKLElBQXFCO1FBQXJCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBdEJoQyxXQUFNLEdBQWtCLElBQUksQ0FBQztRQUM3QixjQUFTLEdBQXdC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SSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNsRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPO1FBQ3hCLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25FLG9GQUFvRjtRQUNwRixpREFBaUQ7UUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQztRQUN2QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLGdCQUFnQixFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExheWVyLCBWaWV3ZXIgfSBmcm9tICduYXBhcmktanMnO1xuXG5pbXBvcnQgdHlwZSB7IFJnYiB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9jb2xvcm1hcC1sdXQnO1xuaW1wb3J0IHR5cGUgeyBTcGF0aWFsRGF0YVBvcnQgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvcG9ydHMvc3BhdGlhbC1kYXRhLnBvcnQnO1xuaW1wb3J0IHR5cGUgeyBTcGF0aWFsVmlld1N0YXRlIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2Rpc3BsYXktdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBTcGF0aWFsRGF0YXNldCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9zcGF0aWFsLWRhdGFzZXQuY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBTcGF0aWFsU2VsZWN0aW9uTWFzayB9IGZyb20gJy4uLy4uL3NwYXRpYWwvc3BhdGlhbC1zZWxlY3Rpb24nO1xuaW1wb3J0IHsgRGF0YVJlY3QsIHBpeGVsc1BlckRhdGFVbml0LCB2aXNpYmxlRGF0YVJlY3QgfSBmcm9tICcuLi8uLi9zcGF0aWFsL2xvZCc7XG5pbXBvcnQgeyBDYXRlZ29yaWNhbExvb2t1cCB9IGZyb20gJy4vc3BhdGlhbC10aWxlcy9jYXRlZ29yaWNhbC1sb29rdXAnO1xuaW1wb3J0IHsgQ2VsbExheWVycyB9IGZyb20gJy4vc3BhdGlhbC10aWxlcy9jZWxsLWxheWVycyc7XG5pbXBvcnQge1xuICBEZW5zaXR5TGF5ZXIsXG4gIERlbnNpdHlTdGF0cyxcbiAgVHJhbnNjcmlwdEVzdGltYXRlLFxuICBUcmFuc2NyaXB0RXN0aW1hdG9yLFxufSBmcm9tICcuL3NwYXRpYWwtdGlsZXMvZGVuc2l0eS1sYXllcic7XG5pbXBvcnQgeyBPcmRlcmVkTGF5ZXJHcm91cHMsIFRJTEVfTEFZRVJfT1JERVIsIFRpbGVHcm91cCB9IGZyb20gJy4vc3BhdGlhbC10aWxlcy9sYXllci1ncm91cHMnO1xuaW1wb3J0IHsgTG9hZFRyYWNrZXIsIFBsYW5Db250ZXh0IH0gZnJvbSAnLi9zcGF0aWFsLXRpbGVzL3BsYW4tY29udGV4dCc7XG5pbXBvcnQgeyBUcmFuc2NyaXB0SG92ZXIgfSBmcm9tICcuL3NwYXRpYWwtdGlsZXMvdHJhbnNjcmlwdC1ob3Zlcic7XG5pbXBvcnQgeyBUcmFuc2NyaXB0Sm9iUGxhbm5lciB9IGZyb20gJy4vc3BhdGlhbC10aWxlcy90cmFuc2NyaXB0LWpvYnMnO1xuaW1wb3J0IHsgVHJhbnNjcmlwdExheWVycyB9IGZyb20gJy4vc3BhdGlhbC10aWxlcy90cmFuc2NyaXB0LWxheWVycyc7XG5cbmV4cG9ydCB0eXBlIHsgVHJhbnNjcmlwdEVzdGltYXRlIH0gZnJvbSAnLi9zcGF0aWFsLXRpbGVzL2RlbnNpdHktbGF5ZXInO1xuXG4vKiogV2hhdCB0aGUgdGlsZSBsYXllcnMgcmVhZCBmcm9tLCBhbmQgcmVwb3J0IHRvLCB0aGUgdmlzdWFsaXplciBzZXJ2aWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF0aWFsVGlsZUhvc3Qge1xuICAvKiogTGF0ZXN0IGRhdGFzZXQvdmlldy9zZWxlY3Rpb24sIGFzIHRoZSBzcGF0aWFsIHN1YnNjcmlwdGlvbiBzYXcgdGhlbS4gKi9cbiAgbGF0ZXN0KCk6IFtTcGF0aWFsRGF0YXNldCB8IG51bGwsIFNwYXRpYWxWaWV3U3RhdGUsIFNwYXRpYWxTZWxlY3Rpb25NYXNrXSB8IG51bGw7XG4gIC8qKiBDYW52YXMgc2l6ZSBpbiBDU1MgcGl4ZWxzLiAqL1xuICBjYW52YXNTaXplKCk6IFtudW1iZXIsIG51bWJlcl07XG4gIC8qKiBUaGUgY29udGludW91cyBMVVQgdGhlIHZpZXcgaXMgdXNpbmcgKHNvIGNlbGxzIGNvbG91cmVkIGJ5IGEgZ2VuZSBtYXRjaCB0aGUgbWFya2VycykuICovXG4gIGNvbnRpbnVvdXNMdXQodmlldzogU3BhdGlhbFZpZXdTdGF0ZSk6IFJnYltdO1xuICAvKiogT3V0bGluZXMgYXBwZWFyZWQgb3IgZGlzYXBwZWFyZWQ6IHRoZSBtYXJrZXJzJyB2aXNpYmlsaXR5IGZvbGxvd3MuICovXG4gIHBvbHlnb25zU2hvd25DaGFuZ2VkKHNob3duOiBib29sZWFuKTogdm9pZDtcbiAgLyoqIFRoZSBkZW5zaXR5IHdpbmRvdyBjaGFuZ2VkIChhdXRvLWRlcml2ZWQgb3Igc2V0KS4gKi9cbiAgZGVuc2l0eUNoYW5nZWQ/KHN0YXRzOiBEZW5zaXR5U3RhdHMpOiB2b2lkO1xuICAvKiogRXN0aW1hdGVkIHRyYW5zY3JpcHRzIGluIHZpZXcgZm9yIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgYWdhaW5zdCB0aGUgYnVkZ2V0LiAqL1xuICBlc3RpbWF0ZUNoYW5nZWQ/KGVzdGltYXRlOiBUcmFuc2NyaXB0RXN0aW1hdGUgfCBudWxsKTogdm9pZDtcbiAgLyoqIFRyYW5zY3JpcHRzIG9mIGVhY2ggc2VsZWN0ZWQgZ2VuZSBpbnNpZGUgdGhlIHZpZXcsIG9yIG51bGwgd2hlbiBub3Qga25vd24uICovXG4gIGdlbmVDb3VudHNDaGFuZ2VkPyhjb3VudHM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gfCBudWxsKTogdm9pZDtcbiAgLyoqIFRoZSBsYXllcnMgd2hvc2UgZGF0YSBpcyBpbiBmbGlnaHQgbm93IChcIlRyYW5zY3JpcHRzXCIsIFwiQ2VsbHNcIuKApik7IGVtcHR5IHdoZW4gbm9uZS4gKi9cbiAgbG9hZGluZ0NoYW5nZWQ/KGxheWVyczogc3RyaW5nW10pOiB2b2lkO1xufVxuXG4vKiogQ2FtZXJhIGlkbGUgdGltZSBiZWZvcmUgYSBwbGFuIHJ1bnMuICovXG5jb25zdCBDQU1FUkFfSURMRV9NUyA9IDEyMDtcbi8qKiBGaXJzdCByZXRyeSBvZiBhIHZpZXcgd2l0aCBhIGZhaWxlZCB0aWxlOyBkb3VibGVzIGVhY2ggdGltZSwgdXAgdG8gTUFYX1RJTEVfUkVUUklFUy4gKi9cbmNvbnN0IFRJTEVfUkVUUllfTVMgPSAxMDAwO1xuY29uc3QgTUFYX1RJTEVfUkVUUklFUyA9IDM7XG5cbi8qKlxuICogTGV2ZWwtb2YtZGV0YWlsIGNlbGwgb3V0bGluZXMsIHRyYW5zY3JpcHRzIGFuZCB0cmFuc2NyaXB0IGRlbnNpdHkgZm9yIHRoZSAyRCBzcGF0aWFsIHZpZXcuXG4gKlxuICogV0hZIEEgU0VQQVJBVEUgQ0xBU1NcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBFdmVyeXRoaW5nIGVsc2UgdGhlIHNwYXRpYWwgdmlldyBkcmF3cyBpcyBidWlsdCBvbmNlIHBlciAoZGF0YXNldCwgdmlldykgYW5kIG9ubHlcbiAqIHJlc3R5bGVkIGFmdGVyd2FyZHMuIFRoZXNlIGxheWVycyBhbHNvIGRlcGVuZCBvbiB0aGUgQ0FNRVJBOiB3aGljaCB0aWxlcyBhcmUgb24gc2NyZWVuXG4gKiBhbmQgd2hpY2ggbGV2ZWwgb2YgZGV0YWlsIHRoZSB6b29tIGNhbGxzIGZvci4gS2VlcGluZyB0aGF0IGxvb3Ag4oCUIHBsYW4gb24gY2FtZXJhIGlkbGUsXG4gKiBmZXRjaCB0aWxlcywgbWVyZ2UsIGRyYXcg4oCUIG91dCBvZiB0aGUgdmlzdWFsaXplciBzZXJ2aWNlIGtlZXBzIGJvdGggcmVhZGFibGUuXG4gKlxuICogQ09MTEFCT1JBVE9SUyAoc3BhdGlhbC10aWxlcy8pXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFRoaXMgY2xhc3MgaXMgdGhlIGNvb3JkaW5hdG9yOiBpdCBkZWJvdW5jZXMgY2FtZXJhIG1vdmVzLCBydW5zIG9uZSBwbGFuIHBlciBpZGxlIGNhbWVyYVxuICogKGEge0BsaW5rIFBsYW5Db250ZXh0fSkgYW5kIHJldHJpZXMgYW4gaW5jb21wbGV0ZSBvbmUuIFRoZSB3b3JrIGlzIGRvbmUgYnlcbiAqIHtAbGluayBDZWxsTGF5ZXJzfSwge0BsaW5rIFRyYW5zY3JpcHRMYXllcnN9ICh3aXRoIHtAbGluayBUcmFuc2NyaXB0Sm9iUGxhbm5lcn0gZGVjaWRpbmcgd2hhdFxuICogdG8gZmV0Y2gpLCB7QGxpbmsgRGVuc2l0eUxheWVyfSBhbmQge0BsaW5rIFRyYW5zY3JpcHRFc3RpbWF0b3J9OyB7QGxpbmsgVHJhbnNjcmlwdEhvdmVyfVxuICogbmFtZXMgdGhlIGRyYXduIG1hcmtlcnMsIGFuZCB7QGxpbmsgT3JkZXJlZExheWVyR3JvdXBzfSBrZWVwcyB0aGVpciBsYXllcnMgaW4gb3JkZXIuXG4gKlxuICogTEFZRVIgT1JERVJcbiAqIC0tLS0tLS0tLS0tXG4gKiBDZWxsIGZpbGwsIGNlbGwgb3V0bGluZSwgbnVjbGV1cyBvdXRsaW5lLCB0aGUgdHJhbnNjcmlwdCBkZW5zaXR5LCB0aGVuIHRyYW5zY3JpcHRzIG9uIHRvcFxuICogKHtAbGluayBUSUxFX0xBWUVSX09SREVSfSk7IGEgcGxhbiByZXN0b3JlcyB0aGUgb3JkZXIgb25jZSwgYWZ0ZXIgYWxsIGl0cyBncm91cHMgYXJlIGluXG4gKiBwbGFjZS4gVGhlIHNlcnZpY2UncyBvYnNlcnZhdGlvbiBtYXJrZXJzIHNpdCB1bmRlciBhbGwgb2YgdGhlbSwgZHJhd24gYXQgZXZlcnkgem9vbTogb25jZVxuICogY2VsbHMgYXJlIGJpZyBlbm91Z2ggdG8gb3V0bGluZSwgdGhlaXIgb3V0bGluZXMgZ28gb3ZlciB0aGVpciBtYXJrZXJzLiBUaGUgZGVuc2l0eSBnb2VzXG4gKiBPVkVSIHRoZSBtYXJrZXJzIG9uIHB1cnBvc2U6IHVuZGVyIDEwXjUgZG90cyBpdCB3b3VsZCBvbmx5IHNob3cgaW4gdGhlIGdhcHMgYmV0d2VlbiBjZWxscy5cbiAqIHtAbGluayBhZnRlck9ic2VydmF0aW9uc30gcmVzdG9yZXMgdGhlIG9yZGVyIGFmdGVyIHRoZSBzZXJ2aWNlIHJlLWFkZHMgaXRzIG1hcmtlcnMuXG4gKlxuICogT05FIExBWUVSIFBFUiBHUk9VUFxuICogLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRWFjaCBncm91cCBpcyBvbmUgbWVyZ2VkIGxheWVyIG92ZXIgZXZlcnkgdmlzaWJsZSB0aWxlLCByZWJ1aWx0IHdoZW4gdGhlIHRpbGUgc2V0IG9yXG4gKiBsZXZlbCBjaGFuZ2VzLiBSZWNvbG91cmluZyAoYSBuZXcgY2VsbC10eXBlIGNvbHVtbiwgYSBzZWxlY3Rpb24pIG9ubHkgcmV3cml0ZXMgdGhlXG4gKiBwZXItc2hhcGUgdmFsdWVzIOKAlCB0aGUgZ2VvbWV0cnkgaXMgbm90IHJlLWV4cGFuZGVkLlxuICovXG5leHBvcnQgY2xhc3MgTmFwYXJpU3BhdGlhbFRpbGVMYXllcnMge1xuICBwcml2YXRlIHZpZXdlcjogVmlld2VyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgY2FtZXJhT2ZmOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcbiAgLyoqIENvbnNlY3V0aXZlIHJldHJpZXMgb2YgYW4gaW5jb21wbGV0ZSB2aWV3LiAqL1xuICBwcml2YXRlIHRpbGVSZXRyaWVzID0gMDtcbiAgcHJpdmF0ZSB0b2tlbiA9IDA7XG4gIC8qKiBUaGUgb3ZlcmxheXMnIGxheWVycywgb25lIHBlciBncm91cCwgaW4gdGhlaXIgZml4ZWQgb3JkZXIuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZ3JvdXBzID0gbmV3IE9yZGVyZWRMYXllckdyb3VwczxUaWxlR3JvdXA+KFRJTEVfTEFZRVJfT1JERVIpO1xuXG4gIC8qKiBMb2FkcyBpbiBmbGlnaHQsIHBlciBsYXllciBsYWJlbCwgZm9yIHRoZSBsb2FkaW5nIGJhZGdlLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGxvYWRzID0gbmV3IExvYWRUcmFja2VyKChsYWJlbHMpID0+IHRoaXMuaG9zdC5sb2FkaW5nQ2hhbmdlZD8uKGxhYmVscykpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9va3VwOiBDYXRlZ29yaWNhbExvb2t1cDtcbiAgcHJpdmF0ZSByZWFkb25seSBqb2JzOiBUcmFuc2NyaXB0Sm9iUGxhbm5lcjtcbiAgcHJpdmF0ZSByZWFkb25seSBkZW5zaXR5OiBEZW5zaXR5TGF5ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2VsbHM6IENlbGxMYXllcnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgZXN0aW1hdG9yOiBUcmFuc2NyaXB0RXN0aW1hdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IGhvdmVyOiBUcmFuc2NyaXB0SG92ZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNjcmlwdHM6IFRyYW5zY3JpcHRMYXllcnM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcG9ydDogU3BhdGlhbERhdGFQb3J0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaG9zdDogU3BhdGlhbFRpbGVIb3N0LFxuICApIHtcbiAgICB0aGlzLmxvb2t1cCA9IG5ldyBDYXRlZ29yaWNhbExvb2t1cChwb3J0KTtcbiAgICB0aGlzLmpvYnMgPSBuZXcgVHJhbnNjcmlwdEpvYlBsYW5uZXIocG9ydCk7XG4gICAgdGhpcy5jZWxscyA9IG5ldyBDZWxsTGF5ZXJzKHBvcnQsIHRoaXMuZ3JvdXBzLCB0aGlzLmxvb2t1cCwgaG9zdCk7XG4gICAgdGhpcy5kZW5zaXR5ID0gbmV3IERlbnNpdHlMYXllcihwb3J0LCB0aGlzLmdyb3VwcywgKHN0YXRzKSA9PiBob3N0LmRlbnNpdHlDaGFuZ2VkPy4oc3RhdHMpKTtcbiAgICB0aGlzLmVzdGltYXRvciA9IG5ldyBUcmFuc2NyaXB0RXN0aW1hdG9yKHBvcnQsIChlc3RpbWF0ZSkgPT4gaG9zdC5lc3RpbWF0ZUNoYW5nZWQ/Lihlc3RpbWF0ZSkpO1xuICAgIHRoaXMuaG92ZXIgPSBuZXcgVHJhbnNjcmlwdEhvdmVyKHBvcnQsICgpID0+IHRoaXMuZ3JvdXBzLnNob3duKCd0cmFuc2NyaXB0cycpKTtcbiAgICB0aGlzLnRyYW5zY3JpcHRzID0gbmV3IFRyYW5zY3JpcHRMYXllcnModGhpcy5ncm91cHMsIHRoaXMuam9icywgdGhpcy5sb29rdXAsIHRoaXMuaG92ZXIpO1xuICB9XG5cbiAgLy8g4pSA4pSAIGxpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhdHRhY2godmlld2VyOiBWaWV3ZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWV3ZXIgPT09IHZpZXdlcikgcmV0dXJuO1xuICAgIHRoaXMuZGV0YWNoKCk7XG4gICAgdGhpcy52aWV3ZXIgPSB2aWV3ZXI7XG4gICAgdGhpcy5ncm91cHMuYXR0YWNoKHZpZXdlcik7XG4gICAgdGhpcy5jYW1lcmFPZmYgPSB2aWV3ZXIuY2FtZXJhLmNoYW5nZWQuY29ubmVjdCgoKSA9PiB0aGlzLnNjaGVkdWxlKCkpO1xuICB9XG5cbiAgLyoqIFN0b3AgZm9sbG93aW5nIHRoZSBjYW1lcmEgYW5kIHJlbW92ZSBldmVyeSBvdmVybGF5IGxheWVyIGZyb20gdGhlIHZpZXdlci4gKi9cbiAgZGV0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuaG92ZXIuZGlzcG9zZSgpO1xuICAgIHRoaXMuY2FtZXJhT2ZmPy4oKTtcbiAgICB0aGlzLmNhbWVyYU9mZiA9IG51bGw7XG4gICAgaWYgKHRoaXMudGltZXIpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICB0aGlzLnRva2VuKys7XG4gICAgdGhpcy50aWxlUmV0cmllcyA9IDA7XG4gICAgdGhpcy50cmFuc2NyaXB0cy5kZXRhY2hlZCgpO1xuICAgIHRoaXMubG9hZHMuY2xlYXIoKTtcbiAgICB0aGlzLmdyb3Vwcy5kZXRhY2goKTtcbiAgICB0aGlzLmNlbGxzLmRldGFjaGVkKCk7XG4gICAgdGhpcy52aWV3ZXIgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYW5zY3JpcHRzIG9mIGVhY2ggc2VsZWN0ZWQgZ2VuZSBpbnNpZGUgYHJlY3RgOiBlYWNoIGVudHJ5IGNvdW50cyBmb3IgdGhlIHRyYW5zY3JpcHRzIGl0XG4gICAqIHN0YW5kcyBmb3IgKGFuIGFnZ3JlZ2F0ZSBhdCBhIGNvYXJzZSBsZXZlbCBob2xkcyBzZXZlcmFsKS4gTnVsbCB3aXRob3V0IHBlci1nZW5lIGRhdGEuXG4gICAqL1xuICBnZW5lQ291bnRzSW4ocmVjdDogRGF0YVJlY3QpOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNjcmlwdHMuZ2VuZUNvdW50c0luKHJlY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvb2x0aXAgbGluZXMgZm9yIHRoZSB0cmFuc2NyaXB0IG1hcmtlciB1bmRlciB3b3JsZCBwb2ludCBgKHd4LCB3eSlgLCBvciBudWxsOyB0aGVcbiAgICogc2VydmVyJ3MgZGV0YWlscyBhcnJpdmUgdGhyb3VnaCBgb25EZXRhaWxzYCBvbmNlIHRoZSBwb2ludGVyIHJlc3RzIChzZWUgVHJhbnNjcmlwdEhvdmVyKS5cbiAgICovXG4gIGhvdmVyQXQod3g6IG51bWJlciwgd3k6IG51bWJlciwgcmFkaXVzV29ybGQ6IG51bWJlciwgb25EZXRhaWxzOiAobGluZXM6IHN0cmluZ1tdKSA9PiB2b2lkKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5ob3Zlci5ob3ZlckF0KHd4LCB3eSwgcmFkaXVzV29ybGQsIG9uRGV0YWlscyk7XG4gIH1cblxuICAvKiogV2hldGhlciBgbGF5ZXJgIGlzIG9uZSBvZiB0aGUgb3ZlcmxheXMgZHJhd24gaGVyZSAoZGVuc2l0eSwgY2VsbHMsIHRyYW5zY3JpcHRzKS4gKi9cbiAgb3ducyhsYXllcjogTGF5ZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ncm91cHMub3ducyhsYXllcik7XG4gIH1cblxuICAvKiogVHJ1ZSB3aGlsZSBvdXRsaW5lcyBhcmUgb24gc2NyZWVuLiAqL1xuICBnZXQgb3V0bGluZXNTaG93bigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jZWxscy5vdXRsaW5lc1Nob3duO1xuICB9XG5cbiAgLyoqIFRoZSBkZW5zaXR5IHdpbmRvdyBpbiB1c2UgYW5kIHRoZSBkZW5zZXN0IGJpbiwgZm9yIHRoZSBwYW5lbCdzIHRocmVzaG9sZCBjb250cm9sLiAqL1xuICBnZXQgZGVuc2l0eVN0YXRzKCk6IERlbnNpdHlTdGF0cyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmRlbnNpdHkuc3RhdHM7XG4gIH1cblxuICAvKiogRGF0YXNldCwgdmlldyBvciBzZWxlY3Rpb24gY2hhbmdlZDogcmUtcGxhbiBub3cgcmF0aGVyIHRoYW4gb24gY2FtZXJhIGlkbGUuICovXG4gIHJlZnJlc2goKTogdm9pZCB7XG4gICAgdGhpcy5zY2hlZHVsZSgwKTtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIHNlcnZpY2UgYWRkcyBpdHMgbWFya2VyIGxheWVyOiBldmVyeXRoaW5nIGdvZXMgYmFjayBvbiB0b3AuICovXG4gIGFmdGVyT2JzZXJ2YXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzLnJlc3RvcmVPcmRlcih0cnVlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBwbGFubmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHNjaGVkdWxlKGRlbGF5ID0gQ0FNRVJBX0lETEVfTVMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lcikgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5wbGFuKCkuY2F0Y2goKGVycikgPT4gY29uc29sZS53YXJuKCdbbmFwYXJpLWpzXSBzcGF0aWFsIHRpbGUgcGxhbiBmYWlsZWQnLCBlcnIpKTtcbiAgICB9LCBkZWxheSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgdmlld2VyID0gdGhpcy52aWV3ZXI7XG4gICAgY29uc3QgbGF0ZXN0ID0gdGhpcy5ob3N0LmxhdGVzdCgpO1xuICAgIGlmICghdmlld2VyIHx8ICFsYXRlc3QpIHJldHVybjtcbiAgICBjb25zdCBbZGF0YXNldCwgdmlldywgc2VsZWN0aW9uXSA9IGxhdGVzdDtcbiAgICBjb25zdCB0b2tlbiA9ICsrdGhpcy50b2tlbjtcbiAgICBjb25zdCBjdHggPSBuZXcgUGxhbkNvbnRleHQoKCkgPT4gdG9rZW4gIT09IHRoaXMudG9rZW4gfHwgdGhpcy52aWV3ZXIgIT09IHZpZXdlciwgdGhpcy5sb2Fkcyk7XG5cbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3BBbGwoKTtcbiAgICAgIHRoaXMuY2VsbHMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBbdywgaF0gPSB0aGlzLmhvc3QuY2FudmFzU2l6ZSgpO1xuICAgIGNvbnN0IHJlZiA9IGRhdGFzZXQuaW1hZ2VSZWY7XG4gICAgY29uc3QgcmVjdCA9IHZpc2libGVEYXRhUmVjdCh2aWV3ZXIuY2FtZXJhLmNlbnRlciwgdmlld2VyLmNhbWVyYS56b29tLCB3LCBoLCByZWYpO1xuICAgIGNvbnN0IHB4UGVyVW5pdCA9IHBpeGVsc1BlckRhdGFVbml0KHZpZXdlci5jYW1lcmEuem9vbSwgcmVmKTtcbiAgICBpZiAoIXJlY3QpIHJldHVybjtcblxuICAgIHRoaXMuZXN0aW1hdG9yXG4gICAgICAucGxhbihkYXRhc2V0LCB2aWV3LCB2aWV3ZXIsIHcsIGgsIGN0eClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLndhcm4oJ1tuYXBhcmktanNdIHRyYW5zY3JpcHQgZXN0aW1hdGUgZmFpbGVkJywgZXJyKSk7XG4gICAgLy8gQSBncm91cCB3aG9zZSByZXF1ZXN0IGZhaWxlZCAoYSBjb2x1bW4sIGEgZmVhdHVyZSB2ZWN0b3IsIGEgZGVuc2l0eSBncmlkKSBsZWF2ZXMgdGhlXG4gICAgLy8gb3RoZXJzIGRyYXduIGFuZCBtYXJrcyB0aGUgcGxhbiBpbmNvbXBsZXRlLCBzbyBpdCBpcyByZXRyaWVkIGxpa2UgYSBmYWlsZWQgdGlsZS5cbiAgICBjb25zdCBzZXR0bGUgPSAoZ3JvdXA6IHN0cmluZywgd29yazogUHJvbWlzZTx2b2lkPikgPT5cbiAgICAgIHdvcmsuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtuYXBhcmktanNdIHNwYXRpYWwgJHtncm91cH0gcGxhbiBmYWlsZWRgLCBlcnIpO1xuICAgICAgICBjdHgubWFya0luY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHNldHRsZSgnZGVuc2l0eScsIHRoaXMuZGVuc2l0eS5wbGFuKGRhdGFzZXQsIHZpZXcsIGN0eCkpLFxuICAgICAgc2V0dGxlKCdjZWxscycsIHRoaXMuY2VsbHMucGxhbihkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24sIHJlY3QsIHB4UGVyVW5pdCwgY3R4KSksXG4gICAgICBzZXR0bGUoJ3RyYW5zY3JpcHRzJywgdGhpcy50cmFuc2NyaXB0cy5wbGFuKGRhdGFzZXQsIHZpZXcsIHJlY3QsIHB4UGVyVW5pdCwgY3R4KSksXG4gICAgXSk7XG4gICAgdGhpcy5ncm91cHMucmVzdG9yZU9yZGVyKGZhbHNlKTtcbiAgICBpZiAoY3R4LnN0YWxlKCkpIHJldHVybjtcbiAgICB0aGlzLmhvc3QuZ2VuZUNvdW50c0NoYW5nZWQ/Lih0aGlzLnRyYW5zY3JpcHRzLmdlbmVDb3VudHNJbihyZWN0KSk7XG4gICAgLy8gQSB0aWxlIHRoYXQgZmFpbGVkIGxlZnQgYSBob2xlIHRoZSBjYWNoZSBrZXlzIGRvIG5vdCByZWNvcmQsIHNvIHRyeSB0aGUgc2FtZSB2aWV3XG4gICAgLy8gYWdhaW4sIGJhY2tpbmcgb2ZmLCBhIGJvdW5kZWQgbnVtYmVyIG9mIHRpbWVzLlxuICAgIGlmICghY3R4LmluY29tcGxldGUpIHtcbiAgICAgIHRoaXMudGlsZVJldHJpZXMgPSAwO1xuICAgIH0gZWxzZSBpZiAodGhpcy50aWxlUmV0cmllcyA8IE1BWF9USUxFX1JFVFJJRVMpIHtcbiAgICAgIHRoaXMuc2NoZWR1bGUoVElMRV9SRVRSWV9NUyAqIDIgKiogdGhpcy50aWxlUmV0cmllcysrKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFwYXJpLXNwYXRpYWwtdGlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2ltcGxlbWVudGF0aW9ucy9uYXBhcmktanMvbmFwYXJpLXNwYXRpYWwtdGlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsT0FBTyxFQUFZLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN6RCxPQUFPLEVBQ0wsWUFBWSxFQUdaLG1CQUFtQixHQUNwQixNQUFNLCtCQUErQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxnQkFBZ0IsRUFBYSxNQUFNLDhCQUE4QixDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBd0JyRSwyQ0FBMkM7QUFDM0MsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDO0FBQzNCLDJGQUEyRjtBQUMzRixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUM7QUFDM0IsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7QUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBQ0gsTUFBTSxPQUFPLHVCQUF1QjtJQXlCbEMsWUFDRSxJQUFxQixFQUNKLElBQXFCO1FBQXJCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBMUJoQyxXQUFNLEdBQWtCLElBQUksQ0FBQztRQUM3QixjQUFTLEdBQXdC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eEIsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDbkUsb0ZBQW9GO1FBQ3BGLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTGF5ZXIsIFZpZXdlciB9IGZyb20gJ25hcGFyaS1qcyc7XG5cbmltcG9ydCB0eXBlIHsgUmdiIH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL2NvbG9ybWFwLWx1dCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhUG9ydCB9IGZyb20gJy4uLy4uL2NvbnRyYWN0cy9wb3J0cy9zcGF0aWFsLWRhdGEucG9ydCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxWaWV3U3RhdGUgfSBmcm9tICcuLi8uLi9jb250cmFjdHMvZGlzcGxheS10eXBlcyc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxEYXRhc2V0IH0gZnJvbSAnLi4vLi4vY29udHJhY3RzL3NwYXRpYWwtZGF0YXNldC5jb250cmFjdCc7XG5pbXBvcnQgdHlwZSB7IFNwYXRpYWxTZWxlY3Rpb25NYXNrIH0gZnJvbSAnLi4vLi4vc3BhdGlhbC9zcGF0aWFsLXNlbGVjdGlvbic7XG5pbXBvcnQgeyBEYXRhUmVjdCwgcGl4ZWxzUGVyRGF0YVVuaXQsIHZpc2libGVEYXRhUmVjdCB9IGZyb20gJy4uLy4uL3NwYXRpYWwvbG9kJztcbmltcG9ydCB7IENhdGVnb3JpY2FsTG9va3VwIH0gZnJvbSAnLi9zcGF0aWFsLXRpbGVzL2NhdGVnb3JpY2FsLWxvb2t1cCc7XG5pbXBvcnQgeyBDZWxsTGF5ZXJzIH0gZnJvbSAnLi9zcGF0aWFsLXRpbGVzL2NlbGwtbGF5ZXJzJztcbmltcG9ydCB7XG4gIERlbnNpdHlMYXllcixcbiAgRGVuc2l0eVN0YXRzLFxuICBUcmFuc2NyaXB0RXN0aW1hdGUsXG4gIFRyYW5zY3JpcHRFc3RpbWF0b3IsXG59IGZyb20gJy4vc3BhdGlhbC10aWxlcy9kZW5zaXR5LWxheWVyJztcbmltcG9ydCB7IE9yZGVyZWRMYXllckdyb3VwcywgVElMRV9MQVlFUl9PUkRFUiwgVGlsZUdyb3VwIH0gZnJvbSAnLi9zcGF0aWFsLXRpbGVzL2xheWVyLWdyb3Vwcyc7XG5pbXBvcnQgeyBMb2FkVHJhY2tlciwgUGxhbkNvbnRleHQgfSBmcm9tICcuL3NwYXRpYWwtdGlsZXMvcGxhbi1jb250ZXh0JztcbmltcG9ydCB7IFRyYW5zY3JpcHRIb3ZlciB9IGZyb20gJy4vc3BhdGlhbC10aWxlcy90cmFuc2NyaXB0LWhvdmVyJztcbmltcG9ydCB7IFRyYW5zY3JpcHRKb2JQbGFubmVyIH0gZnJvbSAnLi9zcGF0aWFsLXRpbGVzL3RyYW5zY3JpcHQtam9icyc7XG5pbXBvcnQgeyBUcmFuc2NyaXB0TGF5ZXJzIH0gZnJvbSAnLi9zcGF0aWFsLXRpbGVzL3RyYW5zY3JpcHQtbGF5ZXJzJztcblxuZXhwb3J0IHR5cGUgeyBUcmFuc2NyaXB0RXN0aW1hdGUgfSBmcm9tICcuL3NwYXRpYWwtdGlsZXMvZGVuc2l0eS1sYXllcic7XG5cbi8qKiBXaGF0IHRoZSB0aWxlIGxheWVycyByZWFkIGZyb20sIGFuZCByZXBvcnQgdG8sIHRoZSB2aXN1YWxpemVyIHNlcnZpY2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXRpYWxUaWxlSG9zdCB7XG4gIC8qKiBMYXRlc3QgZGF0YXNldC92aWV3L3NlbGVjdGlvbiwgYXMgdGhlIHNwYXRpYWwgc3Vic2NyaXB0aW9uIHNhdyB0aGVtLiAqL1xuICBsYXRlc3QoKTogW1NwYXRpYWxEYXRhc2V0IHwgbnVsbCwgU3BhdGlhbFZpZXdTdGF0ZSwgU3BhdGlhbFNlbGVjdGlvbk1hc2tdIHwgbnVsbDtcbiAgLyoqIENhbnZhcyBzaXplIGluIENTUyBwaXhlbHMuICovXG4gIGNhbnZhc1NpemUoKTogW251bWJlciwgbnVtYmVyXTtcbiAgLyoqIFRoZSBjb250aW51b3VzIExVVCB0aGUgdmlldyBpcyB1c2luZyAoc28gY2VsbHMgY29sb3VyZWQgYnkgYSBnZW5lIG1hdGNoIHRoZSBtYXJrZXJzKS4gKi9cbiAgY29udGludW91c0x1dCh2aWV3OiBTcGF0aWFsVmlld1N0YXRlKTogUmdiW107XG4gIC8qKiBPdXRsaW5lcyBhcHBlYXJlZCBvciBkaXNhcHBlYXJlZDogdGhlIG1hcmtlcnMnIHZpc2liaWxpdHkgZm9sbG93cy4gKi9cbiAgcG9seWdvbnNTaG93bkNoYW5nZWQoc2hvd246IGJvb2xlYW4pOiB2b2lkO1xuICAvKiogVGhlIGRlbnNpdHkgd2luZG93IGNoYW5nZWQgKGF1dG8tZGVyaXZlZCBvciBzZXQpLiAqL1xuICBkZW5zaXR5Q2hhbmdlZD8oc3RhdHM6IERlbnNpdHlTdGF0cyk6IHZvaWQ7XG4gIC8qKiBFc3RpbWF0ZWQgdHJhbnNjcmlwdHMgaW4gdmlldyBmb3IgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBhZ2FpbnN0IHRoZSBidWRnZXQuICovXG4gIGVzdGltYXRlQ2hhbmdlZD8oZXN0aW1hdGU6IFRyYW5zY3JpcHRFc3RpbWF0ZSB8IG51bGwpOiB2b2lkO1xuICAvKiogVHJhbnNjcmlwdHMgb2YgZWFjaCBzZWxlY3RlZCBnZW5lIGluc2lkZSB0aGUgdmlldywgb3IgbnVsbCB3aGVuIG5vdCBrbm93bi4gKi9cbiAgZ2VuZUNvdW50c0NoYW5nZWQ/KGNvdW50czogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB8IG51bGwpOiB2b2lkO1xuICAvKiogVGhlIGxheWVycyB3aG9zZSBkYXRhIGlzIGluIGZsaWdodCBub3cgKFwiVHJhbnNjcmlwdHNcIiwgXCJDZWxsc1wi4oCmKTsgZW1wdHkgd2hlbiBub25lLiAqL1xuICBsb2FkaW5nQ2hhbmdlZD8obGF5ZXJzOiBzdHJpbmdbXSk6IHZvaWQ7XG59XG5cbi8qKiBDYW1lcmEgaWRsZSB0aW1lIGJlZm9yZSBhIHBsYW4gcnVucy4gKi9cbmNvbnN0IENBTUVSQV9JRExFX01TID0gMTIwO1xuLyoqIEZpcnN0IHJldHJ5IG9mIGEgdmlldyB3aXRoIGEgZmFpbGVkIHRpbGU7IGRvdWJsZXMgZWFjaCB0aW1lLCB1cCB0byBNQVhfVElMRV9SRVRSSUVTLiAqL1xuY29uc3QgVElMRV9SRVRSWV9NUyA9IDEwMDA7XG5jb25zdCBNQVhfVElMRV9SRVRSSUVTID0gMztcblxuLyoqXG4gKiBMZXZlbC1vZi1kZXRhaWwgY2VsbCBvdXRsaW5lcywgdHJhbnNjcmlwdHMgYW5kIHRyYW5zY3JpcHQgZGVuc2l0eSBmb3IgdGhlIDJEIHNwYXRpYWwgdmlldy5cbiAqXG4gKiBXSFkgQSBTRVBBUkFURSBDTEFTU1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEV2ZXJ5dGhpbmcgZWxzZSB0aGUgc3BhdGlhbCB2aWV3IGRyYXdzIGlzIGJ1aWx0IG9uY2UgcGVyIChkYXRhc2V0LCB2aWV3KSBhbmQgb25seVxuICogcmVzdHlsZWQgYWZ0ZXJ3YXJkcy4gVGhlc2UgbGF5ZXJzIGFsc28gZGVwZW5kIG9uIHRoZSBDQU1FUkE6IHdoaWNoIHRpbGVzIGFyZSBvbiBzY3JlZW5cbiAqIGFuZCB3aGljaCBsZXZlbCBvZiBkZXRhaWwgdGhlIHpvb20gY2FsbHMgZm9yLiBLZWVwaW5nIHRoYXQgbG9vcCDigJQgcGxhbiBvbiBjYW1lcmEgaWRsZSxcbiAqIGZldGNoIHRpbGVzLCBtZXJnZSwgZHJhdyDigJQgb3V0IG9mIHRoZSB2aXN1YWxpemVyIHNlcnZpY2Uga2VlcHMgYm90aCByZWFkYWJsZS5cbiAqXG4gKiBDT0xMQUJPUkFUT1JTIChzcGF0aWFsLXRpbGVzLylcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogVGhpcyBjbGFzcyBpcyB0aGUgY29vcmRpbmF0b3I6IGl0IGRlYm91bmNlcyBjYW1lcmEgbW92ZXMsIHJ1bnMgb25lIHBsYW4gcGVyIGlkbGUgY2FtZXJhXG4gKiAoYSB7QGxpbmsgUGxhbkNvbnRleHR9KSBhbmQgcmV0cmllcyBhbiBpbmNvbXBsZXRlIG9uZS4gVGhlIHdvcmsgaXMgZG9uZSBieVxuICoge0BsaW5rIENlbGxMYXllcnN9LCB7QGxpbmsgVHJhbnNjcmlwdExheWVyc30gKHdpdGgge0BsaW5rIFRyYW5zY3JpcHRKb2JQbGFubmVyfSBkZWNpZGluZyB3aGF0XG4gKiB0byBmZXRjaCksIHtAbGluayBEZW5zaXR5TGF5ZXJ9IGFuZCB7QGxpbmsgVHJhbnNjcmlwdEVzdGltYXRvcn07IHtAbGluayBUcmFuc2NyaXB0SG92ZXJ9XG4gKiBuYW1lcyB0aGUgZHJhd24gbWFya2VycywgYW5kIHtAbGluayBPcmRlcmVkTGF5ZXJHcm91cHN9IGtlZXBzIHRoZWlyIGxheWVycyBpbiBvcmRlci5cbiAqXG4gKiBMQVlFUiBPUkRFUlxuICogLS0tLS0tLS0tLS1cbiAqIENlbGwgZmlsbCwgY2VsbCBvdXRsaW5lLCBudWNsZXVzIG91dGxpbmUsIHRoZSB0cmFuc2NyaXB0IGRlbnNpdHksIHRoZW4gdHJhbnNjcmlwdHMgb24gdG9wXG4gKiAoe0BsaW5rIFRJTEVfTEFZRVJfT1JERVJ9KTsgYSBwbGFuIHJlc3RvcmVzIHRoZSBvcmRlciBvbmNlLCBhZnRlciBhbGwgaXRzIGdyb3VwcyBhcmUgaW5cbiAqIHBsYWNlLiBUaGUgc2VydmljZSdzIG9ic2VydmF0aW9uIG1hcmtlcnMgc2l0IHVuZGVyIGFsbCBvZiB0aGVtLCBkcmF3biBhdCBldmVyeSB6b29tOiBvbmNlXG4gKiBjZWxscyBhcmUgYmlnIGVub3VnaCB0byBvdXRsaW5lLCB0aGVpciBvdXRsaW5lcyBnbyBvdmVyIHRoZWlyIG1hcmtlcnMuIFRoZSBkZW5zaXR5IGdvZXNcbiAqIE9WRVIgdGhlIG1hcmtlcnMgb24gcHVycG9zZTogdW5kZXIgMTBeNSBkb3RzIGl0IHdvdWxkIG9ubHkgc2hvdyBpbiB0aGUgZ2FwcyBiZXR3ZWVuIGNlbGxzLlxuICoge0BsaW5rIGFmdGVyT2JzZXJ2YXRpb25zfSByZXN0b3JlcyB0aGUgb3JkZXIgYWZ0ZXIgdGhlIHNlcnZpY2UgcmUtYWRkcyBpdHMgbWFya2Vycy5cbiAqXG4gKiBPTkUgTEFZRVIgUEVSIEdST1VQXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBFYWNoIGdyb3VwIGlzIG9uZSBtZXJnZWQgbGF5ZXIgb3ZlciBldmVyeSB2aXNpYmxlIHRpbGUsIHJlYnVpbHQgd2hlbiB0aGUgdGlsZSBzZXQgb3JcbiAqIGxldmVsIGNoYW5nZXMuIFJlY29sb3VyaW5nIChhIG5ldyBjZWxsLXR5cGUgY29sdW1uLCBhIHNlbGVjdGlvbikgb25seSByZXdyaXRlcyB0aGVcbiAqIHBlci1zaGFwZSB2YWx1ZXMg4oCUIHRoZSBnZW9tZXRyeSBpcyBub3QgcmUtZXhwYW5kZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXBhcmlTcGF0aWFsVGlsZUxheWVycyB7XG4gIHByaXZhdGUgdmlld2VyOiBWaWV3ZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjYW1lcmFPZmY6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICAvKiogQ29uc2VjdXRpdmUgcmV0cmllcyBvZiBhbiBpbmNvbXBsZXRlIHZpZXcuICovXG4gIHByaXZhdGUgdGlsZVJldHJpZXMgPSAwO1xuICBwcml2YXRlIHRva2VuID0gMDtcbiAgLyoqIFRoZSB6IGJhbmQgb2YgdGhlIHBsYW5lIHNob3duLCB3aGVuIHRoZSB2aWV3IHNob3dzIG9uZSBwbGFuZSBvZiBhIDNEIGFzc2F5IChzZWUgc2V0WkJhbmQpLiAqL1xuICBwcml2YXRlIHpCYW5kOiByZWFkb25seSBbbnVtYmVyLCBudW1iZXJdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBUaGUgcGxhbmUgb2YgYSAzRCBzZWdtZW50YXRpb24gc2hvd24gKHNlZSBzZXRQbGFuZSksIG9yIG51bGwuICovXG4gIHByaXZhdGUgcGxhbmU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAvKiogVGhlIG92ZXJsYXlzJyBsYXllcnMsIG9uZSBwZXIgZ3JvdXAsIGluIHRoZWlyIGZpeGVkIG9yZGVyLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwcyA9IG5ldyBPcmRlcmVkTGF5ZXJHcm91cHM8VGlsZUdyb3VwPihUSUxFX0xBWUVSX09SREVSKTtcblxuICAvKiogTG9hZHMgaW4gZmxpZ2h0LCBwZXIgbGF5ZXIgbGFiZWwsIGZvciB0aGUgbG9hZGluZyBiYWRnZS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkcyA9IG5ldyBMb2FkVHJhY2tlcigobGFiZWxzKSA9PiB0aGlzLmhvc3QubG9hZGluZ0NoYW5nZWQ/LihsYWJlbHMpKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvb2t1cDogQ2F0ZWdvcmljYWxMb29rdXA7XG4gIHByaXZhdGUgcmVhZG9ubHkgam9iczogVHJhbnNjcmlwdEpvYlBsYW5uZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVuc2l0eTogRGVuc2l0eUxheWVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGNlbGxzOiBDZWxsTGF5ZXJzO1xuICBwcml2YXRlIHJlYWRvbmx5IGVzdGltYXRvcjogVHJhbnNjcmlwdEVzdGltYXRvcjtcbiAgcHJpdmF0ZSByZWFkb25seSBob3ZlcjogVHJhbnNjcmlwdEhvdmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zY3JpcHRzOiBUcmFuc2NyaXB0TGF5ZXJzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBvcnQ6IFNwYXRpYWxEYXRhUG9ydCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGhvc3Q6IFNwYXRpYWxUaWxlSG9zdCxcbiAgKSB7XG4gICAgdGhpcy5sb29rdXAgPSBuZXcgQ2F0ZWdvcmljYWxMb29rdXAocG9ydCk7XG4gICAgdGhpcy5qb2JzID0gbmV3IFRyYW5zY3JpcHRKb2JQbGFubmVyKHBvcnQpO1xuICAgIHRoaXMuY2VsbHMgPSBuZXcgQ2VsbExheWVycyhwb3J0LCB0aGlzLmdyb3VwcywgdGhpcy5sb29rdXAsIGhvc3QpO1xuICAgIHRoaXMuZGVuc2l0eSA9IG5ldyBEZW5zaXR5TGF5ZXIocG9ydCwgdGhpcy5ncm91cHMsIChzdGF0cykgPT4gaG9zdC5kZW5zaXR5Q2hhbmdlZD8uKHN0YXRzKSk7XG4gICAgdGhpcy5lc3RpbWF0b3IgPSBuZXcgVHJhbnNjcmlwdEVzdGltYXRvcihwb3J0LCAoZXN0aW1hdGUpID0+IGhvc3QuZXN0aW1hdGVDaGFuZ2VkPy4oZXN0aW1hdGUpKTtcbiAgICB0aGlzLmhvdmVyID0gbmV3IFRyYW5zY3JpcHRIb3Zlcihwb3J0LCAoKSA9PiB0aGlzLmdyb3Vwcy5zaG93bigndHJhbnNjcmlwdHMnKSk7XG4gICAgdGhpcy50cmFuc2NyaXB0cyA9IG5ldyBUcmFuc2NyaXB0TGF5ZXJzKHRoaXMuZ3JvdXBzLCB0aGlzLmpvYnMsIHRoaXMubG9va3VwLCB0aGlzLmhvdmVyKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBsaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgYXR0YWNoKHZpZXdlcjogVmlld2VyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlld2VyID09PSB2aWV3ZXIpIHJldHVybjtcbiAgICB0aGlzLmRldGFjaCgpO1xuICAgIHRoaXMudmlld2VyID0gdmlld2VyO1xuICAgIHRoaXMuZ3JvdXBzLmF0dGFjaCh2aWV3ZXIpO1xuICAgIHRoaXMuY2FtZXJhT2ZmID0gdmlld2VyLmNhbWVyYS5jaGFuZ2VkLmNvbm5lY3QoKCkgPT4gdGhpcy5zY2hlZHVsZSgpKTtcbiAgfVxuXG4gIC8qKiBTdG9wIGZvbGxvd2luZyB0aGUgY2FtZXJhIGFuZCByZW1vdmUgZXZlcnkgb3ZlcmxheSBsYXllciBmcm9tIHRoZSB2aWV3ZXIuICovXG4gIGRldGFjaCgpOiB2b2lkIHtcbiAgICB0aGlzLmhvdmVyLmRpc3Bvc2UoKTtcbiAgICB0aGlzLmNhbWVyYU9mZj8uKCk7XG4gICAgdGhpcy5jYW1lcmFPZmYgPSBudWxsO1xuICAgIGlmICh0aGlzLnRpbWVyKSBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgdGhpcy50b2tlbisrO1xuICAgIHRoaXMudGlsZVJldHJpZXMgPSAwO1xuICAgIHRoaXMudHJhbnNjcmlwdHMuZGV0YWNoZWQoKTtcbiAgICB0aGlzLmxvYWRzLmNsZWFyKCk7XG4gICAgdGhpcy5ncm91cHMuZGV0YWNoKCk7XG4gICAgdGhpcy5jZWxscy5kZXRhY2hlZCgpO1xuICAgIHRoaXMuY2VsbHMuZGlzcG9zZSgpO1xuICAgIHRoaXMudmlld2VyID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmFuc2NyaXB0cyBvZiBlYWNoIHNlbGVjdGVkIGdlbmUgaW5zaWRlIGByZWN0YDogZWFjaCBlbnRyeSBjb3VudHMgZm9yIHRoZSB0cmFuc2NyaXB0cyBpdFxuICAgKiBzdGFuZHMgZm9yIChhbiBhZ2dyZWdhdGUgYXQgYSBjb2Fyc2UgbGV2ZWwgaG9sZHMgc2V2ZXJhbCkuIE51bGwgd2l0aG91dCBwZXItZ2VuZSBkYXRhLlxuICAgKi9cbiAgZ2VuZUNvdW50c0luKHJlY3Q6IERhdGFSZWN0KTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnRyYW5zY3JpcHRzLmdlbmVDb3VudHNJbihyZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb29sdGlwIGxpbmVzIGZvciB0aGUgdHJhbnNjcmlwdCBtYXJrZXIgdW5kZXIgd29ybGQgcG9pbnQgYCh3eCwgd3kpYCwgb3IgbnVsbDsgdGhlXG4gICAqIHNlcnZlcidzIGRldGFpbHMgYXJyaXZlIHRocm91Z2ggYG9uRGV0YWlsc2Agb25jZSB0aGUgcG9pbnRlciByZXN0cyAoc2VlIFRyYW5zY3JpcHRIb3ZlcikuXG4gICAqL1xuICBob3ZlckF0KHd4OiBudW1iZXIsIHd5OiBudW1iZXIsIHJhZGl1c1dvcmxkOiBudW1iZXIsIG9uRGV0YWlsczogKGxpbmVzOiBzdHJpbmdbXSkgPT4gdm9pZCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuaG92ZXIuaG92ZXJBdCh3eCwgd3ksIHJhZGl1c1dvcmxkLCBvbkRldGFpbHMpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYGxheWVyYCBpcyBvbmUgb2YgdGhlIG92ZXJsYXlzIGRyYXduIGhlcmUgKGRlbnNpdHksIGNlbGxzLCB0cmFuc2NyaXB0cykuICovXG4gIG93bnMobGF5ZXI6IExheWVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBzLm93bnMobGF5ZXIpO1xuICB9XG5cbiAgLyoqIFRydWUgd2hpbGUgb3V0bGluZXMgYXJlIG9uIHNjcmVlbi4gKi9cbiAgZ2V0IG91dGxpbmVzU2hvd24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2VsbHMub3V0bGluZXNTaG93bjtcbiAgfVxuXG4gIC8qKiBUaGUgZGVuc2l0eSB3aW5kb3cgaW4gdXNlIGFuZCB0aGUgZGVuc2VzdCBiaW4sIGZvciB0aGUgcGFuZWwncyB0aHJlc2hvbGQgY29udHJvbC4gKi9cbiAgZ2V0IGRlbnNpdHlTdGF0cygpOiBEZW5zaXR5U3RhdHMgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5kZW5zaXR5LnN0YXRzO1xuICB9XG5cbiAgLyoqIERhdGFzZXQsIHZpZXcgb3Igc2VsZWN0aW9uIGNoYW5nZWQ6IHJlLXBsYW4gbm93IHJhdGhlciB0aGFuIG9uIGNhbWVyYSBpZGxlLiAqL1xuICByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuc2NoZWR1bGUoMCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvdyBvbmUgcGxhbmUgb2YgYSAzRCBhc3NheSAoaXRzIHogYmFuZCwgYFtsbywgaGkpYCBpbiBvYnNlcnZhdGlvbiB1bml0cyksIG9yIGV2ZXJ5IGRlcHRoXG4gICAqIChudWxsKTogdGhlIHRyYW5zY3JpcHRzIGRyYXduIGFyZSB0aG9zZSBpbiB0aGUgYmFuZC4gUmUtcGxhbnMgd2hlbiBpdCBjaGFuZ2VzLlxuICAgKi9cbiAgc2V0WkJhbmQoYmFuZDogcmVhZG9ubHkgW251bWJlciwgbnVtYmVyXSB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBzYW1lID1cbiAgICAgIGJhbmQgPT09IHRoaXMuekJhbmQgfHwgKCEhYmFuZCAmJiAhIXRoaXMuekJhbmQgJiYgYmFuZFswXSA9PT0gdGhpcy56QmFuZFswXSAmJiBiYW5kWzFdID09PSB0aGlzLnpCYW5kWzFdKTtcbiAgICBpZiAoc2FtZSkgcmV0dXJuO1xuICAgIHRoaXMuekJhbmQgPSBiYW5kO1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgcGxhbmUgYHBsYW5lYCBvZiBhIDNEIHNlZ21lbnRhdGlvbiAoYW4gaW5kZXggaW50byBpdHMgcmVnaW9uIHNldCdzIHBsYW5lcyksIG9yIG5vbmU6IGFcbiAgICogYm91bmRhcnkgc2V0IG5hbWluZyBpdHMgcmVnaW9uIHNldCBkcmF3cyB0aGF0IHBsYW5lJ3MgY2VsbHMgKHNlZSBgQ2VsbExheWVycy5zZXRQbGFuZWApLlxuICAgKiBSZS1wbGFucyB3aGVuIGl0IGNoYW5nZXMuXG4gICAqL1xuICBzZXRQbGFuZShwbGFuZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChwbGFuZSA9PT0gdGhpcy5wbGFuZSkgcmV0dXJuO1xuICAgIHRoaXMucGxhbmUgPSBwbGFuZTtcbiAgICB0aGlzLmNlbGxzLnNldFBsYW5lKHBsYW5lKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIC8qKiBDYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIHNlcnZpY2UgYWRkcyBpdHMgbWFya2VyIGxheWVyOiBldmVyeXRoaW5nIGdvZXMgYmFjayBvbiB0b3AuICovXG4gIGFmdGVyT2JzZXJ2YXRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZ3JvdXBzLnJlc3RvcmVPcmRlcih0cnVlKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBwbGFubmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHNjaGVkdWxlKGRlbGF5ID0gQ0FNRVJBX0lETEVfTVMpOiB2b2lkIHtcbiAgICBpZiAodGhpcy50aW1lcikgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgIHRoaXMudGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5wbGFuKCkuY2F0Y2goKGVycikgPT4gY29uc29sZS53YXJuKCdbbmFwYXJpLWpzXSBzcGF0aWFsIHRpbGUgcGxhbiBmYWlsZWQnLCBlcnIpKTtcbiAgICB9LCBkZWxheSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHBsYW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgdmlld2VyID0gdGhpcy52aWV3ZXI7XG4gICAgY29uc3QgbGF0ZXN0ID0gdGhpcy5ob3N0LmxhdGVzdCgpO1xuICAgIGlmICghdmlld2VyIHx8ICFsYXRlc3QpIHJldHVybjtcbiAgICBjb25zdCBbZGF0YXNldCwgdmlldywgc2VsZWN0aW9uXSA9IGxhdGVzdDtcbiAgICBjb25zdCB0b2tlbiA9ICsrdGhpcy50b2tlbjtcbiAgICBjb25zdCBjdHggPSBuZXcgUGxhbkNvbnRleHQoKCkgPT4gdG9rZW4gIT09IHRoaXMudG9rZW4gfHwgdGhpcy52aWV3ZXIgIT09IHZpZXdlciwgdGhpcy5sb2Fkcyk7XG5cbiAgICBpZiAoIWRhdGFzZXQpIHtcbiAgICAgIHRoaXMuZ3JvdXBzLmRyb3BBbGwoKTtcbiAgICAgIHRoaXMuY2VsbHMuZHJvcCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBbdywgaF0gPSB0aGlzLmhvc3QuY2FudmFzU2l6ZSgpO1xuICAgIGNvbnN0IHJlZiA9IGRhdGFzZXQuaW1hZ2VSZWY7XG4gICAgY29uc3QgcmVjdCA9IHZpc2libGVEYXRhUmVjdCh2aWV3ZXIuY2FtZXJhLmNlbnRlciwgdmlld2VyLmNhbWVyYS56b29tLCB3LCBoLCByZWYpO1xuICAgIGNvbnN0IHB4UGVyVW5pdCA9IHBpeGVsc1BlckRhdGFVbml0KHZpZXdlci5jYW1lcmEuem9vbSwgcmVmKTtcbiAgICBpZiAoIXJlY3QpIHJldHVybjtcblxuICAgIHRoaXMuZXN0aW1hdG9yXG4gICAgICAucGxhbihkYXRhc2V0LCB2aWV3LCB2aWV3ZXIsIHcsIGgsIGN0eClcbiAgICAgIC5jYXRjaCgoZXJyKSA9PiBjb25zb2xlLndhcm4oJ1tuYXBhcmktanNdIHRyYW5zY3JpcHQgZXN0aW1hdGUgZmFpbGVkJywgZXJyKSk7XG4gICAgLy8gQSBncm91cCB3aG9zZSByZXF1ZXN0IGZhaWxlZCAoYSBjb2x1bW4sIGEgZmVhdHVyZSB2ZWN0b3IsIGEgZGVuc2l0eSBncmlkKSBsZWF2ZXMgdGhlXG4gICAgLy8gb3RoZXJzIGRyYXduIGFuZCBtYXJrcyB0aGUgcGxhbiBpbmNvbXBsZXRlLCBzbyBpdCBpcyByZXRyaWVkIGxpa2UgYSBmYWlsZWQgdGlsZS5cbiAgICBjb25zdCBzZXR0bGUgPSAoZ3JvdXA6IHN0cmluZywgd29yazogUHJvbWlzZTx2b2lkPikgPT5cbiAgICAgIHdvcmsuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oYFtuYXBhcmktanNdIHNwYXRpYWwgJHtncm91cH0gcGxhbiBmYWlsZWRgLCBlcnIpO1xuICAgICAgICBjdHgubWFya0luY29tcGxldGUoKTtcbiAgICAgIH0pO1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHNldHRsZSgnZGVuc2l0eScsIHRoaXMuZGVuc2l0eS5wbGFuKGRhdGFzZXQsIHZpZXcsIGN0eCkpLFxuICAgICAgc2V0dGxlKCdjZWxscycsIHRoaXMuY2VsbHMucGxhbihkYXRhc2V0LCB2aWV3LCBzZWxlY3Rpb24sIHJlY3QsIHB4UGVyVW5pdCwgY3R4KSksXG4gICAgICBzZXR0bGUoJ3RyYW5zY3JpcHRzJywgdGhpcy50cmFuc2NyaXB0cy5wbGFuKGRhdGFzZXQsIHZpZXcsIHJlY3QsIHB4UGVyVW5pdCwgY3R4LCB0aGlzLnpCYW5kLCBzZWxlY3Rpb24pKSxcbiAgICBdKTtcbiAgICB0aGlzLmdyb3Vwcy5yZXN0b3JlT3JkZXIoZmFsc2UpO1xuICAgIGlmIChjdHguc3RhbGUoKSkgcmV0dXJuO1xuICAgIHRoaXMuaG9zdC5nZW5lQ291bnRzQ2hhbmdlZD8uKHRoaXMudHJhbnNjcmlwdHMuZ2VuZUNvdW50c0luKHJlY3QpKTtcbiAgICAvLyBBIHRpbGUgdGhhdCBmYWlsZWQgbGVmdCBhIGhvbGUgdGhlIGNhY2hlIGtleXMgZG8gbm90IHJlY29yZCwgc28gdHJ5IHRoZSBzYW1lIHZpZXdcbiAgICAvLyBhZ2FpbiwgYmFja2luZyBvZmYsIGEgYm91bmRlZCBudW1iZXIgb2YgdGltZXMuXG4gICAgaWYgKCFjdHguaW5jb21wbGV0ZSkge1xuICAgICAgdGhpcy50aWxlUmV0cmllcyA9IDA7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbGVSZXRyaWVzIDwgTUFYX1RJTEVfUkVUUklFUykge1xuICAgICAgdGhpcy5zY2hlZHVsZShUSUxFX1JFVFJZX01TICogMiAqKiB0aGlzLnRpbGVSZXRyaWVzKyspO1xuICAgIH1cbiAgfVxufVxuIl19
|