@kitware/vtk.js 20.1.2 → 20.2.1
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/Common/Core/Base64.d.ts +14 -2
- package/Common/Core/Base64.js +31 -2
- package/Common/Core/Math/index.js +3 -3
- package/Common/Core/Math.d.ts +128 -128
- package/Common/Core/Math.js +1 -1
- package/Common/Core/MatrixBuilder.js +39 -41
- package/Common/DataModel/ImageData.js +12 -14
- package/Common/Transform/LandmarkTransform.js +6 -7
- package/Filters/General/PaintFilter/PaintFilter.worker.js +8 -8
- package/Filters/General/PaintFilter.js +11 -11
- package/Filters/Sources/PlaneSource.js +12 -13
- package/IO/Core/BinaryHelper.js +2 -4
- package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +1 -1
- package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +1 -1
- package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +2 -2
- package/IO/Core/ZipMultiDataSetReader.js +1 -1
- package/IO/Core/ZipMultiDataSetWriter.js +1 -1
- package/IO/Geometry/STLWriter.js +4 -4
- package/IO/Misc/SkyboxReader.js +1 -1
- package/IO/XML/XMLReader.js +3 -4
- package/IO/XML/XMLWriter.js +5 -6
- package/Imaging/Core/ImageReslice.js +18 -19
- package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +27 -28
- package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +8 -9
- package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +14 -15
- package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +12 -13
- package/Interaction/Widgets/ImageCroppingRegionsWidget.js +5 -6
- package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +1 -1
- package/Interaction/Widgets/PiecewiseGaussianWidget.js +2 -2
- package/Interaction/Widgets/ResliceCursor/ResliceCursorRepresentation.js +8 -9
- package/Rendering/Core/Actor.js +3 -4
- package/Rendering/Core/Camera.js +81 -84
- package/Rendering/Core/CellPicker.js +2 -2
- package/Rendering/Core/CubeAxesActor.js +32 -33
- package/Rendering/Core/Follower.js +20 -21
- package/Rendering/Core/Glyph3DMapper.js +30 -32
- package/Rendering/Core/ImageMapper.js +2 -2
- package/Rendering/Core/ImageSlice.js +5 -6
- package/Rendering/Core/Picker.js +5 -6
- package/Rendering/Core/PixelSpaceCallbackMapper.js +3 -4
- package/Rendering/Core/Prop3D.js +24 -25
- package/Rendering/Core/Renderer.js +11 -12
- package/Rendering/Core/ScalarBarActor.js +32 -33
- package/Rendering/Core/Volume.js +3 -4
- package/Rendering/OpenGL/Actor.js +9 -10
- package/Rendering/OpenGL/Camera.js +8 -9
- package/Rendering/OpenGL/CellArrayBufferObject.js +6 -8
- package/Rendering/OpenGL/Glyph3DMapper.js +8 -9
- package/Rendering/OpenGL/ImageMapper.js +7 -7
- package/Rendering/OpenGL/ImageSlice.js +4 -4
- package/Rendering/OpenGL/PolyDataMapper.js +11 -13
- package/Rendering/OpenGL/RenderWindow.d.ts +37 -1
- package/Rendering/OpenGL/ShaderCache.js +1 -1
- package/Rendering/OpenGL/Skybox.js +4 -5
- package/Rendering/OpenGL/SphereMapper.js +2 -2
- package/Rendering/OpenGL/StickMapper.js +3 -4
- package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +1 -1
- package/Rendering/OpenGL/Volume.js +6 -7
- package/Rendering/OpenGL/VolumeMapper.js +47 -49
- package/Rendering/OpenGL/glsl/vtkPolyDataFS.glsl.js +1 -1
- package/Rendering/WebGPU/Actor.js +8 -8
- package/Rendering/WebGPU/Camera.js +8 -8
- package/Rendering/WebGPU/ImageMapper.js +18 -19
- package/Rendering/WebGPU/ImageSlice.js +9 -9
- package/Rendering/WebGPU/PolyDataMapper.js +3 -4
- package/Rendering/WebGPU/Renderer.js +6 -7
- package/Rendering/WebGPU/Texture.js +10 -9
- package/Rendering/WebGPU/Volume.js +3 -3
- package/Rendering/WebGPU/VolumePassFSQ.js +10 -10
- package/ThirdParty/index.js +2 -2
- package/Widgets/Manipulators/TrackballManipulator.js +5 -6
- package/Widgets/Representations/ArrowHandleRepresentation.js +10 -12
- package/Widgets/Representations/CircleContextRepresentation.js +4 -5
- package/Widgets/Representations/RectangleContextRepresentation.js +3 -3
- package/Widgets/Widgets3D/EllipseWidget/behavior.js +5 -5
- package/Widgets/Widgets3D/ImageCroppingWidget/helpers.js +6 -8
- package/Widgets/Widgets3D/PaintWidget/behavior.js +2 -2
- package/Widgets/Widgets3D/ResliceCursorWidget.js +6 -7
- package/Widgets/Widgets3D/ShapeWidget/behavior.js +10 -10
- package/Widgets/Widgets3D/SplineWidget/behavior.js +5 -5
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +1 -1
- package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +1 -1
- package/package.json +2 -2
- package/vtk.js +2 -2
- package/_vendor/base64-js/index.js_commonjs-exports.js +0 -1
- package/_vendor/blueimp-md5/js/md5.js_commonjs-module.js +0 -3
- package/_vendor/define-properties/index.js_commonjs-proxy.js +0 -1
- package/_vendor/globalthis/implementation.browser.js_commonjs-module.js +0 -3
- package/_vendor/globalthis/implementation.browser.js_commonjs-proxy.js +0 -1
- package/_vendor/globalthis/polyfill.js_commonjs-proxy.js +0 -1
- package/_vendor/globalthis/shim.js_commonjs-proxy.js +0 -2
- package/_vendor/jszip/dist/jszip.min.js_commonjs-module.js +0 -3
- package/_vendor/object-keys/implementation.js_commonjs-proxy.js +0 -1
- package/_vendor/object-keys/index.js_commonjs-proxy.js +0 -1
- package/_vendor/object-keys/isArguments.js_commonjs-proxy.js +0 -1
- package/_vendor/seedrandom/lib/alea.js_commonjs-module.js +0 -3
- package/_vendor/seedrandom/lib/alea.js_commonjs-proxy.js +0 -1
- package/_vendor/seedrandom/lib/tychei.js_commonjs-module.js +0 -3
- package/_vendor/seedrandom/lib/tychei.js_commonjs-proxy.js +0 -1
- package/_vendor/seedrandom/lib/xor128.js_commonjs-module.js +0 -3
- package/_vendor/seedrandom/lib/xor128.js_commonjs-proxy.js +0 -1
- package/_vendor/seedrandom/lib/xor4096.js_commonjs-module.js +0 -3
- package/_vendor/seedrandom/lib/xor4096.js_commonjs-proxy.js +0 -1
- package/_vendor/seedrandom/lib/xorshift7.js_commonjs-module.js +0 -3
- package/_vendor/seedrandom/lib/xorshift7.js_commonjs-proxy.js +0 -1
- package/_vendor/seedrandom/lib/xorwow.js_commonjs-module.js +0 -3
- package/_vendor/seedrandom/lib/xorwow.js_commonjs-proxy.js +0 -1
- package/_vendor/seedrandom/seedrandom.js_commonjs-module.js +0 -3
- package/_vendor/seedrandom/seedrandom.js_commonjs-proxy.js +0 -1
- package/_vendor/webworker-promise/lib/register.js_commonjs-module.js +0 -3
- package/_vendor/webworker-promise/lib/tiny-emitter.js_commonjs-proxy.js +0 -1
- package/_vendor/webworker-promise/src/tiny-emitter.js_commonjs-proxy.js +0 -1
- package/_vendor/xmlbuilder2/lib/xmlbuilder2.min.js_commonjs-module.js +0 -3
- package/_virtual/_rollup_plugin_ignore_empty_module_placeholder_commonjs-proxy.js +0 -6
- package/_virtual/commonjsHelpers.js +0 -22
- package/_virtual/polyfill-node.buffer.js +0 -1971
- package/_virtual/polyfill-node.global.js +0 -5
- package/_virtual/rollup_plugin_ignore_empty_module_placeholder.js +0 -8
- package/vendor/base64-js/index.js +0 -72
- package/vendor/blueimp-md5/js/md5.js +0 -402
- package/vendor/d3-array/src/array.js +0 -1
- package/vendor/d3-array/src/ascending.js +0 -5
- package/vendor/d3-array/src/bin.js +0 -1
- package/vendor/d3-array/src/bisect.js +0 -10
- package/vendor/d3-array/src/bisector.js +0 -46
- package/vendor/d3-array/src/constant.js +0 -1
- package/vendor/d3-array/src/count.js +0 -1
- package/vendor/d3-array/src/cross.js +0 -1
- package/vendor/d3-array/src/cumsum.js +0 -1
- package/vendor/d3-array/src/descending.js +0 -1
- package/vendor/d3-array/src/deviation.js +0 -1
- package/vendor/d3-array/src/difference.js +0 -1
- package/vendor/d3-array/src/disjoint.js +0 -1
- package/vendor/d3-array/src/every.js +0 -1
- package/vendor/d3-array/src/extent.js +0 -1
- package/vendor/d3-array/src/filter.js +0 -1
- package/vendor/d3-array/src/fsum.js +0 -1
- package/vendor/d3-array/src/greatest.js +0 -1
- package/vendor/d3-array/src/greatestIndex.js +0 -1
- package/vendor/d3-array/src/group.js +0 -1
- package/vendor/d3-array/src/groupSort.js +0 -1
- package/vendor/d3-array/src/identity.js +0 -1
- package/vendor/d3-array/src/index.js +0 -1
- package/vendor/d3-array/src/intersection.js +0 -1
- package/vendor/d3-array/src/least.js +0 -1
- package/vendor/d3-array/src/leastIndex.js +0 -1
- package/vendor/d3-array/src/map.js +0 -1
- package/vendor/d3-array/src/max.js +0 -1
- package/vendor/d3-array/src/maxIndex.js +0 -1
- package/vendor/d3-array/src/mean.js +0 -1
- package/vendor/d3-array/src/median.js +0 -1
- package/vendor/d3-array/src/merge.js +0 -1
- package/vendor/d3-array/src/min.js +0 -1
- package/vendor/d3-array/src/minIndex.js +0 -1
- package/vendor/d3-array/src/mode.js +0 -1
- package/vendor/d3-array/src/nice.js +0 -1
- package/vendor/d3-array/src/number.js +0 -5
- package/vendor/d3-array/src/pairs.js +0 -1
- package/vendor/d3-array/src/permute.js +0 -1
- package/vendor/d3-array/src/quantile.js +0 -1
- package/vendor/d3-array/src/quickselect.js +0 -1
- package/vendor/d3-array/src/range.js +0 -1
- package/vendor/d3-array/src/reduce.js +0 -1
- package/vendor/d3-array/src/reverse.js +0 -1
- package/vendor/d3-array/src/scan.js +0 -1
- package/vendor/d3-array/src/set.js +0 -1
- package/vendor/d3-array/src/shuffle.js +0 -1
- package/vendor/d3-array/src/some.js +0 -1
- package/vendor/d3-array/src/sort.js +0 -1
- package/vendor/d3-array/src/subset.js +0 -1
- package/vendor/d3-array/src/sum.js +0 -1
- package/vendor/d3-array/src/superset.js +0 -1
- package/vendor/d3-array/src/threshold/freedmanDiaconis.js +0 -1
- package/vendor/d3-array/src/threshold/scott.js +0 -1
- package/vendor/d3-array/src/threshold/sturges.js +0 -1
- package/vendor/d3-array/src/ticks.js +0 -56
- package/vendor/d3-array/src/transpose.js +0 -1
- package/vendor/d3-array/src/union.js +0 -1
- package/vendor/d3-array/src/variance.js +0 -1
- package/vendor/d3-array/src/zip.js +0 -1
- package/vendor/d3-color/src/color.js +0 -373
- package/vendor/d3-color/src/cubehelix.js +0 -1
- package/vendor/d3-color/src/define.js +0 -12
- package/vendor/d3-color/src/index.js +0 -1
- package/vendor/d3-color/src/lab.js +0 -1
- package/vendor/d3-color/src/math.js +0 -1
- package/vendor/d3-format/src/defaultLocale.js +0 -20
- package/vendor/d3-format/src/exponent.js +0 -7
- package/vendor/d3-format/src/formatDecimal.js +0 -22
- package/vendor/d3-format/src/formatGroup.js +0 -20
- package/vendor/d3-format/src/formatNumerals.js +0 -9
- package/vendor/d3-format/src/formatPrefixAuto.js +0 -18
- package/vendor/d3-format/src/formatRounded.js +0 -13
- package/vendor/d3-format/src/formatSpecifier.js +0 -49
- package/vendor/d3-format/src/formatTrim.js +0 -13
- package/vendor/d3-format/src/formatTypes.js +0 -21
- package/vendor/d3-format/src/identity.js +0 -5
- package/vendor/d3-format/src/index.js +0 -1
- package/vendor/d3-format/src/locale.js +0 -150
- package/vendor/d3-format/src/precisionFixed.js +0 -7
- package/vendor/d3-format/src/precisionPrefix.js +0 -7
- package/vendor/d3-format/src/precisionRound.js +0 -8
- package/vendor/d3-interpolate/src/array.js +0 -19
- package/vendor/d3-interpolate/src/basis.js +0 -1
- package/vendor/d3-interpolate/src/basisClosed.js +0 -1
- package/vendor/d3-interpolate/src/color.js +0 -26
- package/vendor/d3-interpolate/src/constant.js +0 -3
- package/vendor/d3-interpolate/src/cubehelix.js +0 -1
- package/vendor/d3-interpolate/src/date.js +0 -8
- package/vendor/d3-interpolate/src/discrete.js +0 -1
- package/vendor/d3-interpolate/src/hcl.js +0 -1
- package/vendor/d3-interpolate/src/hsl.js +0 -1
- package/vendor/d3-interpolate/src/hue.js +0 -1
- package/vendor/d3-interpolate/src/index.js +0 -1
- package/vendor/d3-interpolate/src/lab.js +0 -1
- package/vendor/d3-interpolate/src/number.js +0 -7
- package/vendor/d3-interpolate/src/numberArray.js +0 -16
- package/vendor/d3-interpolate/src/object.js +0 -25
- package/vendor/d3-interpolate/src/piecewise.js +0 -1
- package/vendor/d3-interpolate/src/quantize.js +0 -1
- package/vendor/d3-interpolate/src/rgb.js +0 -26
- package/vendor/d3-interpolate/src/round.js +0 -7
- package/vendor/d3-interpolate/src/string.js +0 -66
- package/vendor/d3-interpolate/src/transform/decompose.js +0 -1
- package/vendor/d3-interpolate/src/transform/index.js +0 -1
- package/vendor/d3-interpolate/src/transform/parse.js +0 -1
- package/vendor/d3-interpolate/src/value.js +0 -24
- package/vendor/d3-interpolate/src/zoom.js +0 -1
- package/vendor/d3-scale/src/band.js +0 -1
- package/vendor/d3-scale/src/constant.js +0 -7
- package/vendor/d3-scale/src/continuous.js +0 -129
- package/vendor/d3-scale/src/diverging.js +0 -1
- package/vendor/d3-scale/src/identity.js +0 -1
- package/vendor/d3-scale/src/index.js +0 -1
- package/vendor/d3-scale/src/init.js +0 -10
- package/vendor/d3-scale/src/linear.js +0 -72
- package/vendor/d3-scale/src/log.js +0 -1
- package/vendor/d3-scale/src/nice.js +0 -1
- package/vendor/d3-scale/src/number.js +0 -5
- package/vendor/d3-scale/src/ordinal.js +0 -1
- package/vendor/d3-scale/src/pow.js +0 -1
- package/vendor/d3-scale/src/quantile.js +0 -1
- package/vendor/d3-scale/src/quantize.js +0 -1
- package/vendor/d3-scale/src/radial.js +0 -1
- package/vendor/d3-scale/src/sequential.js +0 -1
- package/vendor/d3-scale/src/sequentialQuantile.js +0 -1
- package/vendor/d3-scale/src/symlog.js +0 -1
- package/vendor/d3-scale/src/threshold.js +0 -1
- package/vendor/d3-scale/src/tickFormat.js +0 -35
- package/vendor/d3-scale/src/time.js +0 -1
- package/vendor/d3-scale/src/utcTime.js +0 -1
- package/vendor/d3-time/src/day.js +0 -1
- package/vendor/d3-time/src/duration.js +0 -1
- package/vendor/d3-time/src/hour.js +0 -1
- package/vendor/d3-time/src/index.js +0 -1
- package/vendor/d3-time/src/interval.js +0 -1
- package/vendor/d3-time/src/millisecond.js +0 -1
- package/vendor/d3-time/src/minute.js +0 -1
- package/vendor/d3-time/src/month.js +0 -1
- package/vendor/d3-time/src/second.js +0 -1
- package/vendor/d3-time/src/ticks.js +0 -1
- package/vendor/d3-time/src/utcDay.js +0 -1
- package/vendor/d3-time/src/utcHour.js +0 -1
- package/vendor/d3-time/src/utcMinute.js +0 -1
- package/vendor/d3-time/src/utcMonth.js +0 -1
- package/vendor/d3-time/src/utcWeek.js +0 -1
- package/vendor/d3-time/src/utcYear.js +0 -1
- package/vendor/d3-time/src/week.js +0 -1
- package/vendor/d3-time/src/year.js +0 -1
- package/vendor/d3-time-format/src/defaultLocale.js +0 -1
- package/vendor/d3-time-format/src/index.js +0 -1
- package/vendor/d3-time-format/src/isoFormat.js +0 -1
- package/vendor/d3-time-format/src/isoParse.js +0 -1
- package/vendor/d3-time-format/src/locale.js +0 -1
- package/vendor/define-properties/index.js +0 -60
- package/vendor/gl-matrix/esm/common.js +0 -30
- package/vendor/gl-matrix/esm/index.js +0 -1
- package/vendor/gl-matrix/esm/mat2.js +0 -1
- package/vendor/gl-matrix/esm/mat2d.js +0 -1
- package/vendor/gl-matrix/esm/mat3.js +0 -817
- package/vendor/gl-matrix/esm/mat4.js +0 -1868
- package/vendor/gl-matrix/esm/quat.js +0 -330
- package/vendor/gl-matrix/esm/quat2.js +0 -1
- package/vendor/gl-matrix/esm/vec2.js +0 -1
- package/vendor/gl-matrix/esm/vec3.js +0 -842
- package/vendor/gl-matrix/esm/vec4.js +0 -153
- package/vendor/globalthis/implementation.browser.js +0 -11
- package/vendor/globalthis/index.js +0 -25
- package/vendor/globalthis/polyfill.js +0 -14
- package/vendor/globalthis/shim.js +0 -25
- package/vendor/internmap/src/index.js +0 -1
- package/vendor/jszip/dist/jszip.min.js +0 -11
- package/vendor/object-keys/implementation.js +0 -124
- package/vendor/object-keys/index.js +0 -35
- package/vendor/object-keys/isArguments.js +0 -17
- package/vendor/pako/dist/pako.esm.mjs.js +0 -6707
- package/vendor/seedrandom/index.js +0 -77
- package/vendor/seedrandom/lib/alea.js +0 -117
- package/vendor/seedrandom/lib/tychei.js +0 -105
- package/vendor/seedrandom/lib/xor128.js +0 -84
- package/vendor/seedrandom/lib/xor4096.js +0 -150
- package/vendor/seedrandom/lib/xorshift7.js +0 -101
- package/vendor/seedrandom/lib/xorwow.js +0 -89
- package/vendor/seedrandom/seedrandom.js +0 -256
- package/vendor/webworker-promise/lib/register.js +0 -158
- package/vendor/webworker-promise/lib/tiny-emitter.js +0 -89
- package/vendor/webworker-promise/src/index.js +0 -110
- package/vendor/webworker-promise/src/tiny-emitter.js +0 -51
- package/vendor/xmlbuilder2/lib/xmlbuilder2.min.js +0 -13
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
2
|
import macro from '../../macros.js';
|
|
3
|
+
import { mat4 } from 'gl-matrix';
|
|
3
4
|
import vtkWebGPUFullScreenQuad from './FullScreenQuad.js';
|
|
4
5
|
import vtkWebGPUUniformBuffer from './UniformBuffer.js';
|
|
5
6
|
import vtkWebGPUShaderCache from './ShaderCache.js';
|
|
@@ -7,7 +8,6 @@ import vtkWebGPUStorageBuffer from './StorageBuffer.js';
|
|
|
7
8
|
import vtkWebGPUSampler from './Sampler.js';
|
|
8
9
|
import vtkWebGPUTypes from './Types.js';
|
|
9
10
|
import { BlendMode } from '../Core/VolumeMapper/Constants.js';
|
|
10
|
-
import { i as identity, t as translate, j as transpose, g as invert, m as multiply, s as scale } from '../../vendor/gl-matrix/esm/mat4.js';
|
|
11
11
|
|
|
12
12
|
var volFragTemplate = "\n//VTK::Renderer::Dec\n\n//VTK::Mapper::Dec\n\n//VTK::TCoord::Dec\n\n//VTK::Volume::TraverseDec\n\n//VTK::RenderEncoder::Dec\n\n//VTK::IOStructs::Dec\n\nfn getTextureValue(vTex: texture_3d<f32>, tpos: vec4<f32>) -> f32\n{\n // todo multicomponent support\n return textureSampleLevel(vTex, clampSampler, tpos.xyz, 0.0).r;\n}\n\nfn getGradient(vTex: texture_3d<f32>, tpos: vec4<f32>, vNum: i32, scalar: f32) -> vec4<f32>\n{\n var result: vec4<f32>;\n\n var tstep: vec4<f32> = volumeSSBO.values[vNum].tstep;\n result.x = getTextureValue(vTex, tpos + vec4<f32>(tstep.x, 0.0, 0.0, 1.0)) - scalar;\n result.y = getTextureValue(vTex, tpos + vec4<f32>(0.0, tstep.y, 0.0, 1.0)) - scalar;\n result.z = getTextureValue(vTex, tpos + vec4<f32>(0.0, 0.0, tstep.z, 1.0)) - scalar;\n\n // divide by spacing\n result = result / volumeSSBO.values[vNum].spacing;\n\n var grad: f32 = length(result.xyz);\n\n // // rotate to View Coords, needed for lighting and shading\n // result.xyz =\n // result.x * vPlaneNormal0 +\n // result.y * vPlaneNormal2 +\n // result.z * vPlaneNormal4;\n\n if (grad > 0.0)\n {\n result = result * (1.0 / grad);\n }\n\n result.w = grad;\n\n return result;\n}\n\nfn processVolume(vTex: texture_3d<f32>, vNum: i32, cNum: i32, posSC: vec4<f32>, tfunRows: f32) -> vec4<f32>\n{\n var outColor: vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n\n // convert to tcoords and reject if outside the volume\n var tpos: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*posSC;\n if (tpos.x < 0.0 || tpos.y < 0.0 || tpos.z < 0.0 ||\n tpos.x > 1.0 || tpos.y > 1.0 || tpos.z > 1.0) { return outColor; }\n\n var scalar: f32 = getTextureValue(vTex, tpos);\n\n var coord: vec2<f32> =\n vec2<f32>(scalar * componentSSBO.values[cNum].cScale + componentSSBO.values[cNum].cShift,\n (0.5 + 2.0 * f32(vNum)) / tfunRows);\n var color: vec4<f32> = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);\n\n var gofactor: f32 = 1.0;\n if (componentSSBO.values[cNum].gomin < 1.0)\n {\n var normal: vec4<f32> = getGradient(vTex, tpos, vNum, scalar);\n gofactor = clamp(normal.a*componentSSBO.values[cNum].goScale + componentSSBO.values[cNum].goShift,\n componentSSBO.values[cNum].gomin, componentSSBO.values[cNum].gomax);\n }\n\n coord.x = (scalar * componentSSBO.values[cNum].oScale + componentSSBO.values[cNum].oShift);\n var opacity: f32 = textureSampleLevel(ofunTexture, clampSampler, coord, 0.0).r;\n\n outColor = vec4<f32>(color.rgb, gofactor * opacity);\n\n//VTK::Volume::Process\n\n return outColor;\n}\n\n// adjust the start and end point of a raycast such that it intersects the unit cube.\n// This function is used to take a raycast starting point and step vector\n// and numSteps and return the startijng and ending steps for intersecting the\n// unit cube. Recall for a 3D texture, the unit cube is the range of texture coordsinates\n// that have valid values. So this funtion can be used to take a ray in texture coordinates\n// and bound it to intersecting the texture.\n//\nfn adjustBounds(tpos: vec4<f32>, tstep: vec4<f32>, numSteps: f32) -> vec2<f32>\n{\n var result: vec2<f32> = vec2<f32>(0.0, numSteps);\n var tpos2: vec4<f32> = tpos + tstep*numSteps;\n\n // move tpos to the start of the volume\n var adjust: f32 =\n min(\n max(tpos.x/tstep.x, (tpos.x - 1.0)/tstep.x),\n min(\n max((tpos.y - 1.0)/tstep.y, tpos.y/tstep.y),\n max((tpos.z - 1.0)/tstep.z, tpos.z/tstep.z)));\n if (adjust < 0.0)\n {\n result.x = result.x - adjust;\n }\n\n // adjust length to the end\n adjust =\n max(\n min(tpos2.x/tstep.x, (tpos2.x - 1.0)/tstep.x),\n max(\n min((tpos2.y - 1.0)/tstep.y, tpos2.y/tstep.y),\n min((tpos2.z - 1.0)/tstep.z, tpos2.z/tstep.z)));\n if (adjust > 0.0)\n {\n result.y = result.y - adjust;\n }\n\n return result;\n}\n\nfn getSimpleColor(scalar: f32, vNum: i32, cNum: i32) -> vec4<f32>\n{\n // how many rows (tfuns) do we have in our tfunTexture\n var tfunRows: f32 = f32(textureDimensions(tfunTexture).y);\n\n var coord: vec2<f32> =\n vec2<f32>(scalar * componentSSBO.values[cNum].cScale + componentSSBO.values[cNum].cShift,\n (0.5 + 2.0 * f32(vNum)) / tfunRows);\n var color: vec4<f32> = textureSampleLevel(tfunTexture, clampSampler, coord, 0.0);\n coord.x = (scalar * componentSSBO.values[cNum].oScale + componentSSBO.values[cNum].oShift);\n var opacity: f32 = textureSampleLevel(ofunTexture, clampSampler, coord, 0.0).r;\n return vec4<f32>(color.rgb, opacity);\n}\n\nfn traverseMax(vTex: texture_3d<f32>, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4<f32>, rayStepSC: vec4<f32>)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4<f32> = tpos2 - tpos;\n\n var rayBounds: vec2<f32> = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4<f32>(0.0,0.0,0.0,0.0);\n return;\n }\n\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var maxVal: f32 = -1.0e37;\n loop\n {\n var scalar: f32 = getTextureValue(vTex, tpos);\n if (scalar > maxVal)\n {\n maxVal = scalar;\n }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(maxVal, vNum, cNum);\n}\n\nfn traverseMin(vTex: texture_3d<f32>, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4<f32>, rayStepSC: vec4<f32>)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4<f32> = tpos2 - tpos;\n\n var rayBounds: vec2<f32> = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4<f32>(0.0,0.0,0.0,0.0);\n return;\n }\n\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var minVal: f32 = 1.0e37;\n loop\n {\n var scalar: f32 = getTextureValue(vTex, tpos);\n if (scalar < minVal)\n {\n minVal = scalar;\n }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(minVal, vNum, cNum);\n}\n\nfn traverseAverage(vTex: texture_3d<f32>, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4<f32>, rayStepSC: vec4<f32>)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4<f32> = tpos2 - tpos;\n\n var rayBounds: vec2<f32> = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4<f32>(0.0,0.0,0.0,0.0);\n return;\n }\n\n let ipRange: vec4<f32> = volumeSSBO.values[vNum].ipScalarRange;\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var avgVal: f32 = 0.0;\n var sampleCount: f32 = 0.0;\n loop\n {\n var sample: f32 = getTextureValue(vTex, tpos);\n // right now leave filtering off until WebGL changes get merged\n // if (ipRange.z == 0.0 || sample >= ipRange.x && sample <= ipRange.y)\n // {\n avgVal = avgVal + sample;\n sampleCount = sampleCount + 1.0;\n // }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n if (sampleCount <= 0.0)\n {\n traverseVals[vNum] = vec4<f32>(0.0,0.0,0.0,0.0);\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(avgVal/sampleCount, vNum, cNum);\n}\n\nfn traverseAdditive(vTex: texture_3d<f32>, vNum: i32, cNum: i32, rayLengthSC: f32, minPosSC: vec4<f32>, rayStepSC: vec4<f32>)\n{\n // convert to tcoords and reject if outside the volume\n var numSteps: f32 = rayLengthSC/mapperUBO.SampleDistance;\n var tpos: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*minPosSC;\n var tpos2: vec4<f32> = volumeSSBO.values[vNum].SCTCMatrix*(minPosSC + rayStepSC);\n var tstep: vec4<f32> = tpos2 - tpos;\n\n var rayBounds: vec2<f32> = adjustBounds(tpos, tstep, numSteps);\n\n // did we hit anything\n if (rayBounds.x >= rayBounds.y)\n {\n traverseVals[vNum] = vec4<f32>(0.0,0.0,0.0,0.0);\n return;\n }\n\n let ipRange: vec4<f32> = volumeSSBO.values[vNum].ipScalarRange;\n tpos = tpos + tstep*rayBounds.x;\n var curDist: f32 = rayBounds.x;\n var sumVal: f32 = 0.0;\n loop\n {\n var sample: f32 = getTextureValue(vTex, tpos);\n // right now leave filtering off until WebGL changes get merged\n // if (ipRange.z == 0.0 || sample >= ipRange.x && sample <= ipRange.y)\n // {\n sumVal = sumVal + sample;\n // }\n\n // increment position\n curDist = curDist + 1.0;\n tpos = tpos + tstep;\n\n // check if we have reached a terminating condition\n if (curDist > rayBounds.y) { break; }\n }\n\n // process to get the color and opacity\n traverseVals[vNum] = getSimpleColor(sumVal, vNum, cNum);\n}\n\nfn composite(rayLengthSC: f32, minPosSC: vec4<f32>, rayStepSC: vec4<f32>) -> vec4<f32>\n{\n // initial ray position is at the beginning\n var rayPosSC: vec4<f32> = minPosSC;\n\n // how many rows (tfuns) do we have in our tfunTexture\n var tfunRows: f32 = f32(textureDimensions(tfunTexture).y);\n\n var curDist: f32 = 0.0;\n var computedColor: vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);\n var sampleColor: vec4<f32>;\n//VTK::Volume::TraverseCalls\n\n loop\n {\n // for each volume, sample and accumulate color\n//VTK::Volume::CompositeCalls\n\n // increment position\n curDist = curDist + mapperUBO.SampleDistance;\n rayPosSC = rayPosSC + rayStepSC;\n\n // check if we have reached a terminating condition\n if (curDist > rayLengthSC) { break; }\n if (computedColor.a > 0.98) { break; }\n }\n return computedColor;\n}\n\n[[stage(fragment)]]\nfn main(\n//VTK::IOStructs::Input\n)\n//VTK::IOStructs::Output\n{\n var output: fragmentOutput;\n\n var rayMax: f32 = textureSampleLevel(maxTexture, clampSampler, input.tcoordVS, 0.0).r;\n var rayMin: f32 = textureSampleLevel(minTexture, clampSampler, input.tcoordVS, 0.0).r;\n\n // discard empty rays\n if (rayMax <= rayMin) { discard; }\n else\n {\n var winDimsI32: vec2<i32> = textureDimensions(minTexture);\n var winDims: vec2<f32> = vec2<f32>(f32(winDimsI32.x), f32(winDimsI32.y));\n\n // compute start and end ray positions in view coordinates\n var minPosSC: vec4<f32> = rendererUBO.PCSCMatrix*vec4<f32>(2.0*input.fragPos.x/winDims.x - 1.0, 1.0 - 2.0 * input.fragPos.y/winDims.y, rayMin, 1.0);\n minPosSC = minPosSC * (1.0 / minPosSC.w);\n var maxPosSC: vec4<f32> = rendererUBO.PCSCMatrix*vec4<f32>(2.0*input.fragPos.x/winDims.x - 1.0, 1.0 - 2.0 * input.fragPos.y/winDims.y, rayMax, 1.0);\n maxPosSC = maxPosSC * (1.0 / maxPosSC.w);\n\n var rayLengthSC: f32 = distance(minPosSC.xyz, maxPosSC.xyz);\n var rayStepSC: vec4<f32> = (maxPosSC - minPosSC)*(mapperUBO.SampleDistance/rayLengthSC);\n rayStepSC.w = 0.0;\n\n var computedColor: vec4<f32>;\n\n//VTK::Volume::Loop\n\n//VTK::RenderEncoder::Impl\n }\n\n return output;\n}\n";
|
|
13
13
|
var tmpMat4 = new Float64Array(16);
|
|
@@ -255,26 +255,26 @@ function vtkWebGPUVolumePassFSQ(publicAPI, model) {
|
|
|
255
255
|
|
|
256
256
|
var _image3 = _volMapr2.getInputData();
|
|
257
257
|
|
|
258
|
-
identity(tmpMat4);
|
|
259
|
-
translate(tmpMat4, tmpMat4, center); // tmpMat4 is now SC->World
|
|
258
|
+
mat4.identity(tmpMat4);
|
|
259
|
+
mat4.translate(tmpMat4, tmpMat4, center); // tmpMat4 is now SC->World
|
|
260
260
|
|
|
261
261
|
var mcwcmat = actor.getMatrix();
|
|
262
|
-
transpose(tmp2Mat4, mcwcmat);
|
|
263
|
-
invert(tmp2Mat4, tmp2Mat4); // tmp2Mat4 is now world to model
|
|
262
|
+
mat4.transpose(tmp2Mat4, mcwcmat);
|
|
263
|
+
mat4.invert(tmp2Mat4, tmp2Mat4); // tmp2Mat4 is now world to model
|
|
264
264
|
|
|
265
|
-
multiply(tmpMat4, tmp2Mat4, tmpMat4); // tmp4Mat is now SC->Model
|
|
265
|
+
mat4.multiply(tmpMat4, tmp2Mat4, tmpMat4); // tmp4Mat is now SC->Model
|
|
266
266
|
// the method on the data is world to index but the volume is in
|
|
267
267
|
// model coordinates so really in this context it is model to index
|
|
268
268
|
|
|
269
269
|
var modelToIndex = _image3.getWorldToIndex();
|
|
270
270
|
|
|
271
|
-
multiply(tmpMat4, modelToIndex, tmpMat4); // tmpMat4 is now SC -> Index
|
|
271
|
+
mat4.multiply(tmpMat4, modelToIndex, tmpMat4); // tmpMat4 is now SC -> Index
|
|
272
272
|
|
|
273
273
|
var dims = _image3.getDimensions();
|
|
274
274
|
|
|
275
|
-
identity(tmp2Mat4);
|
|
276
|
-
scale(tmp2Mat4, tmp2Mat4, [1.0 / dims[0], 1.0 / dims[1], 1.0 / dims[2]]);
|
|
277
|
-
multiply(tmpMat4, tmp2Mat4, tmpMat4); // tmpMat4 is now SC -> Tcoord
|
|
275
|
+
mat4.identity(tmp2Mat4);
|
|
276
|
+
mat4.scale(tmp2Mat4, tmp2Mat4, [1.0 / dims[0], 1.0 / dims[1], 1.0 / dims[2]]);
|
|
277
|
+
mat4.multiply(tmpMat4, tmp2Mat4, tmpMat4); // tmpMat4 is now SC -> Tcoord
|
|
278
278
|
|
|
279
279
|
for (var j = 0; j < 16; j++) {
|
|
280
280
|
marray[vidx * 16 + j] = tmpMat4[j];
|
package/ThirdParty/index.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
+
import { mat4, vec3 } from 'gl-matrix';
|
|
1
2
|
import macro from '../../macros.js';
|
|
2
3
|
import { j as cross, r as radiansFromDegrees } from '../../Common/Core/Math/index.js';
|
|
3
|
-
import { i as identity, r as rotate } from '../../vendor/gl-matrix/esm/mat4.js';
|
|
4
|
-
import { t as transformMat4 } from '../../vendor/gl-matrix/esm/vec3.js';
|
|
5
4
|
|
|
6
5
|
function trackballRotate(prevX, prevY, curX, curY, origin, direction, renderer, glRenderWindow) {
|
|
7
6
|
var dx = curX - prevX;
|
|
@@ -16,10 +15,10 @@ function trackballRotate(prevX, prevY, curX, curY, origin, direction, renderer,
|
|
|
16
15
|
var xDisplayAxis = viewUp;
|
|
17
16
|
var yDisplayAxis = [0, 0, 0];
|
|
18
17
|
cross(dop, viewUp, yDisplayAxis);
|
|
19
|
-
var rot = identity(new Float64Array(16));
|
|
20
|
-
rotate(rot, rot, radiansFromDegrees(xdeg), xDisplayAxis);
|
|
21
|
-
rotate(rot, rot, radiansFromDegrees(-ydeg), yDisplayAxis);
|
|
22
|
-
transformMat4(newDirection, newDirection, rot);
|
|
18
|
+
var rot = mat4.identity(new Float64Array(16));
|
|
19
|
+
mat4.rotate(rot, rot, radiansFromDegrees(xdeg), xDisplayAxis);
|
|
20
|
+
mat4.rotate(rot, rot, radiansFromDegrees(-ydeg), yDisplayAxis);
|
|
21
|
+
vec3.transformMat4(newDirection, newDirection, rot);
|
|
23
22
|
return newDirection;
|
|
24
23
|
} // ----------------------------------------------------------------------------
|
|
25
24
|
// vtkTrackballManipulator methods
|
|
@@ -15,10 +15,8 @@ import vtkCubeSource from '../../Filters/Sources/CubeSource.js';
|
|
|
15
15
|
import vtkViewFinderSource from '../../Filters/Sources/ViewFinderSource.js';
|
|
16
16
|
import Constants from '../Widgets3D/LineWidget/Constants.js';
|
|
17
17
|
import { ScalarMode } from '../../Rendering/Core/Mapper/Constants.js';
|
|
18
|
+
import { mat4, mat3, vec3 } from 'gl-matrix';
|
|
18
19
|
import { RenderingTypes } from '../Core/WidgetManager/Constants.js';
|
|
19
|
-
import { i as identity } from '../../vendor/gl-matrix/esm/mat4.js';
|
|
20
|
-
import { f as fromMat4, i as identity$1, a as invert, m as multiply } from '../../vendor/gl-matrix/esm/mat3.js';
|
|
21
|
-
import { p as transformMat3 } from '../../vendor/gl-matrix/esm/vec3.js';
|
|
22
20
|
|
|
23
21
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
24
22
|
|
|
@@ -210,18 +208,18 @@ function vtkArrowHandleRepresentation(publicAPI, model) {
|
|
|
210
208
|
function getOrientationRotation(viewMatrixInv) {
|
|
211
209
|
var displayOrientation = new Float64Array(3);
|
|
212
210
|
var baseDir = [0, 1, 0];
|
|
213
|
-
transformMat3(displayOrientation, model.orientation, viewMatrixInv);
|
|
211
|
+
vec3.transformMat3(displayOrientation, model.orientation, viewMatrixInv);
|
|
214
212
|
displayOrientation[2] = 0;
|
|
215
213
|
var displayMatrix = vtkMatrixBuilder.buildFromDegree().rotateFromDirections(baseDir, displayOrientation).getMatrix();
|
|
216
214
|
var displayRotation = new Float64Array(9);
|
|
217
|
-
fromMat4(displayRotation, displayMatrix);
|
|
215
|
+
mat3.fromMat4(displayRotation, displayMatrix);
|
|
218
216
|
return displayRotation;
|
|
219
217
|
}
|
|
220
218
|
|
|
221
219
|
function getCameraFacingRotation(scale3, displayRotation, viewMatrix) {
|
|
222
220
|
var rotation = new Float64Array(9);
|
|
223
|
-
multiply(rotation, viewMatrix, displayRotation);
|
|
224
|
-
transformMat3(scale3, scale3, rotation);
|
|
221
|
+
mat3.multiply(rotation, viewMatrix, displayRotation);
|
|
222
|
+
vec3.transformMat3(scale3, scale3, rotation);
|
|
225
223
|
return rotation;
|
|
226
224
|
}
|
|
227
225
|
/**
|
|
@@ -235,11 +233,11 @@ function vtkArrowHandleRepresentation(publicAPI, model) {
|
|
|
235
233
|
function getGlyphRotation(scale3) {
|
|
236
234
|
var shouldFaceCamera = model.faceCamera === true || model.faceCamera == null && publicAPI.is2DShape();
|
|
237
235
|
var viewMatrix = new Float64Array(9);
|
|
238
|
-
fromMat4(viewMatrix, model.viewMatrix);
|
|
239
|
-
var viewMatrixInv = identity
|
|
236
|
+
mat3.fromMat4(viewMatrix, model.viewMatrix);
|
|
237
|
+
var viewMatrixInv = mat3.identity(new Float64Array(9));
|
|
240
238
|
|
|
241
239
|
if (shouldFaceCamera) {
|
|
242
|
-
invert(viewMatrixInv, viewMatrix);
|
|
240
|
+
mat3.invert(viewMatrixInv, viewMatrix);
|
|
243
241
|
}
|
|
244
242
|
|
|
245
243
|
var orientationRotation = null;
|
|
@@ -247,7 +245,7 @@ function vtkArrowHandleRepresentation(publicAPI, model) {
|
|
|
247
245
|
if (publicAPI.isOrientableShape()) {
|
|
248
246
|
orientationRotation = getOrientationRotation(viewMatrixInv);
|
|
249
247
|
} else {
|
|
250
|
-
orientationRotation = identity
|
|
248
|
+
orientationRotation = mat3.identity(new Float64Array(9));
|
|
251
249
|
}
|
|
252
250
|
|
|
253
251
|
if (shouldFaceCamera) {
|
|
@@ -352,7 +350,7 @@ function defaultValues(initialValues) {
|
|
|
352
350
|
faceCamera: null,
|
|
353
351
|
orientation: [1, 0, 0],
|
|
354
352
|
shape: ShapeType.SPHERE,
|
|
355
|
-
viewMatrix: identity(new Float64Array(16))
|
|
353
|
+
viewMatrix: mat4.identity(new Float64Array(16))
|
|
356
354
|
}, initialValues);
|
|
357
355
|
} // ----------------------------------------------------------------------------
|
|
358
356
|
|
|
@@ -9,8 +9,7 @@ import vtkMatrixBuilder from '../../Common/Core/MatrixBuilder.js';
|
|
|
9
9
|
import vtkPolyData from '../../Common/DataModel/PolyData.js';
|
|
10
10
|
import vtkWidgetRepresentation from './WidgetRepresentation.js';
|
|
11
11
|
import { ScalarMode } from '../../Rendering/Core/Mapper/Constants.js';
|
|
12
|
-
import {
|
|
13
|
-
import { t as transformMat4 } from '../../vendor/gl-matrix/esm/vec3.js';
|
|
12
|
+
import { mat3, vec3 } from 'gl-matrix';
|
|
14
13
|
|
|
15
14
|
// vtkCircleContextRepresentation methods
|
|
16
15
|
// ----------------------------------------------------------------------------
|
|
@@ -141,9 +140,9 @@ function vtkCircleContextRepresentation(publicAPI, model) {
|
|
|
141
140
|
var reorientCircleSource4 = vtkMatrixBuilder.buildFromDegree().rotateFromDirections([1, 0, 0], [0, 0, 1]) // from X to Z
|
|
142
141
|
.getMatrix();
|
|
143
142
|
var reorientCircleSource3 = [];
|
|
144
|
-
fromMat4(reorientCircleSource3, reorientCircleSource4);
|
|
145
|
-
transformMat4(scale3, scale3, reorientCircleSource4);
|
|
146
|
-
multiply(rotation, rotation, reorientCircleSource3);
|
|
143
|
+
mat3.fromMat4(reorientCircleSource3, reorientCircleSource4);
|
|
144
|
+
vec3.transformMat4(scale3, scale3, reorientCircleSource4);
|
|
145
|
+
mat3.multiply(rotation, rotation, reorientCircleSource3);
|
|
147
146
|
|
|
148
147
|
for (var j = 0; j < 9; j += 1) {
|
|
149
148
|
typedArray.direction[i * 9 + j] = rotation[j];
|
|
@@ -3,7 +3,7 @@ import vtkActor from '../../Rendering/Core/Actor.js';
|
|
|
3
3
|
import vtkContextRepresentation from './ContextRepresentation.js';
|
|
4
4
|
import vtkMapper from '../../Rendering/Core/Mapper.js';
|
|
5
5
|
import vtkPolyData from '../../Common/DataModel/PolyData.js';
|
|
6
|
-
import {
|
|
6
|
+
import { vec3 } from 'gl-matrix';
|
|
7
7
|
|
|
8
8
|
// vtkRectangleContextRepresentation methods
|
|
9
9
|
// ----------------------------------------------------------------------------
|
|
@@ -52,9 +52,9 @@ function vtkRectangleContextRepresentation(publicAPI, model) {
|
|
|
52
52
|
var point1 = state.getOrigin();
|
|
53
53
|
var point2 = state.getCorner();
|
|
54
54
|
var diagonal = [0, 0, 0];
|
|
55
|
-
subtract(diagonal, point2, point1);
|
|
55
|
+
vec3.subtract(diagonal, point2, point1);
|
|
56
56
|
var up = state.getUp();
|
|
57
|
-
var upComponent = dot(diagonal, up);
|
|
57
|
+
var upComponent = vec3.dot(diagonal, up);
|
|
58
58
|
var points = new Float32Array(4 * 3);
|
|
59
59
|
points[0] = point1[0];
|
|
60
60
|
points[1] = point1[1];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import widgetBehavior$1 from '../ShapeWidget/behavior.js';
|
|
3
|
-
import {
|
|
3
|
+
import { vec3 } from 'gl-matrix';
|
|
4
4
|
|
|
5
5
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
6
6
|
|
|
@@ -25,13 +25,13 @@ function widgetBehavior(publicAPI, model) {
|
|
|
25
25
|
|
|
26
26
|
var center = [0.5 * (point1[0] + point2[0]), 0.5 * (point1[1] + point2[1]), 0.5 * (point1[2] + point2[2])];
|
|
27
27
|
var diagonal = [0, 0, 0];
|
|
28
|
-
subtract(diagonal, point2, center);
|
|
28
|
+
vec3.subtract(diagonal, point2, center);
|
|
29
29
|
var right = model.shapeHandle.getRight();
|
|
30
30
|
var up = model.shapeHandle.getUp();
|
|
31
31
|
var dir = model.shapeHandle.getDirection();
|
|
32
|
-
var rightComponent = dot(diagonal, right);
|
|
33
|
-
var upComponent = dot(diagonal, up);
|
|
34
|
-
var dirComponent = dot(diagonal, dir);
|
|
32
|
+
var rightComponent = vec3.dot(diagonal, right);
|
|
33
|
+
var upComponent = vec3.dot(diagonal, up);
|
|
34
|
+
var dirComponent = vec3.dot(diagonal, dir);
|
|
35
35
|
model.shapeHandle.setOrigin(center);
|
|
36
36
|
model.shapeHandle.setScale3([rightComponent, upComponent, dirComponent]);
|
|
37
37
|
};
|
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
2
|
-
import {
|
|
3
|
-
import { c as create$1 } from '../../../vendor/gl-matrix/esm/quat.js';
|
|
4
|
-
import { n as getRotation } from '../../../vendor/gl-matrix/esm/mat4.js';
|
|
2
|
+
import { vec3, quat, mat4 } from 'gl-matrix';
|
|
5
3
|
|
|
6
4
|
var AXES = ['-', '=', '+']; // ----------------------------------------------------------------------------
|
|
7
5
|
|
|
8
6
|
function transformVec3(ain, transform) {
|
|
9
7
|
var vout = new Float64Array(3);
|
|
10
|
-
transformMat4(vout, ain, transform);
|
|
8
|
+
vec3.transformMat4(vout, ain, transform);
|
|
11
9
|
return vout;
|
|
12
10
|
} // ----------------------------------------------------------------------------
|
|
13
11
|
|
|
14
12
|
function rotateVec3(vec, transform) {
|
|
15
13
|
// transform is a mat4
|
|
16
|
-
var out = create();
|
|
17
|
-
var q = create
|
|
18
|
-
getRotation(q, transform);
|
|
19
|
-
transformQuat(out, vec, q);
|
|
14
|
+
var out = vec3.create();
|
|
15
|
+
var q = quat.create();
|
|
16
|
+
mat4.getRotation(q, transform);
|
|
17
|
+
vec3.transformQuat(out, vec, q);
|
|
20
18
|
return out;
|
|
21
19
|
} // ----------------------------------------------------------------------------
|
|
22
20
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
2
|
import macro from '../../../macros.js';
|
|
3
|
-
import {
|
|
3
|
+
import { vec3 } from 'gl-matrix';
|
|
4
4
|
|
|
5
5
|
function widgetBehavior(publicAPI, model) {
|
|
6
6
|
publicAPI.handleLeftButtonPress = function (callData) {
|
|
@@ -36,7 +36,7 @@ function widgetBehavior(publicAPI, model) {
|
|
|
36
36
|
var normal = model.camera.getDirectionOfProjection();
|
|
37
37
|
var up = model.camera.getViewUp();
|
|
38
38
|
var right = [];
|
|
39
|
-
cross(right, up, normal);
|
|
39
|
+
vec3.cross(right, up, normal);
|
|
40
40
|
|
|
41
41
|
(_model$activeState = model.activeState).setUp.apply(_model$activeState, _toConsumableArray(up));
|
|
42
42
|
|
|
@@ -9,9 +9,8 @@ import widgetBehavior from './ResliceCursorWidget/behavior.js';
|
|
|
9
9
|
import generateState from './ResliceCursorWidget/state.js';
|
|
10
10
|
import { updateState, transformPlane, boundPlane } from './ResliceCursorWidget/helpers.js';
|
|
11
11
|
import { ViewTypes } from '../Core/WidgetManager/Constants.js';
|
|
12
|
+
import { mat4, vec4 } from 'gl-matrix';
|
|
12
13
|
import vtkMatrixBuilder from '../../Common/Core/MatrixBuilder.js';
|
|
13
|
-
import { i as identity, j as transpose } from '../../vendor/gl-matrix/esm/mat4.js';
|
|
14
|
-
import { t as transformMat4 } from '../../vendor/gl-matrix/esm/vec4.js';
|
|
15
14
|
|
|
16
15
|
var VTK_INT_MAX = 2147483647;
|
|
17
16
|
var vtkErrorMacro = macro.vtkErrorMacro; // ----------------------------------------------------------------------------
|
|
@@ -276,7 +275,7 @@ function vtkResliceCursorWidget(publicAPI, model) {
|
|
|
276
275
|
|
|
277
276
|
var planeSizeX = normalize(planeAxis1);
|
|
278
277
|
var planeSizeY = normalize(planeAxis2);
|
|
279
|
-
var newResliceAxes = identity(new Float64Array(16));
|
|
278
|
+
var newResliceAxes = mat4.identity(new Float64Array(16));
|
|
280
279
|
|
|
281
280
|
for (var i = 0; i < 3; i++) {
|
|
282
281
|
newResliceAxes[4 * i + 0] = planeAxis1[i];
|
|
@@ -289,9 +288,9 @@ function vtkResliceCursorWidget(publicAPI, model) {
|
|
|
289
288
|
var planeOrigin = [].concat(_toConsumableArray(planeSource.getOrigin()), [1.0]);
|
|
290
289
|
var originXYZW = [];
|
|
291
290
|
var newOriginXYZW = [];
|
|
292
|
-
transformMat4(originXYZW, planeOrigin, newResliceAxes);
|
|
293
|
-
transpose(newResliceAxes, newResliceAxes);
|
|
294
|
-
transformMat4(newOriginXYZW, originXYZW, newResliceAxes);
|
|
291
|
+
vec4.transformMat4(originXYZW, planeOrigin, newResliceAxes);
|
|
292
|
+
mat4.transpose(newResliceAxes, newResliceAxes);
|
|
293
|
+
vec4.transformMat4(newOriginXYZW, originXYZW, newResliceAxes);
|
|
295
294
|
newResliceAxes[4 * 3 + 0] = newOriginXYZW[0];
|
|
296
295
|
newResliceAxes[4 * 3 + 1] = newOriginXYZW[1];
|
|
297
296
|
newResliceAxes[4 * 3 + 2] = newOriginXYZW[2]; // Compute a new set of resliced extents
|
|
@@ -384,7 +383,7 @@ function vtkResliceCursorWidget(publicAPI, model) {
|
|
|
384
383
|
publicAPI.getResliceMatrix = function () {
|
|
385
384
|
var _vtkMatrixBuilder$bui, _vtkMatrixBuilder$bui2;
|
|
386
385
|
|
|
387
|
-
var resliceMatrix = identity(new Float64Array(16));
|
|
386
|
+
var resliceMatrix = mat4.identity(new Float64Array(16));
|
|
388
387
|
|
|
389
388
|
for (var i = 0; i < 3; i++) {
|
|
390
389
|
resliceMatrix[4 * i + 0] = publicAPI.getPlaneNormalFromViewType(ViewTypes.YZ_PLANE)[i];
|
|
@@ -6,7 +6,7 @@ import vtkBoundingBox from '../../../Common/DataModel/BoundingBox.js';
|
|
|
6
6
|
import vtkPlane from '../../../Common/DataModel/Plane.js';
|
|
7
7
|
import { ShapeBehavior, BehaviorCategory, TextPosition } from './Constants.js';
|
|
8
8
|
import { boundPlane } from '../ResliceCursorWidget/helpers.js';
|
|
9
|
-
import {
|
|
9
|
+
import { vec3 } from 'gl-matrix';
|
|
10
10
|
|
|
11
11
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
12
12
|
|
|
@@ -123,13 +123,13 @@ function widgetBehavior(publicAPI, model) {
|
|
|
123
123
|
|
|
124
124
|
publicAPI.makeSquareFromPoints = function (point1, point2) {
|
|
125
125
|
var diagonal = [0, 0, 0];
|
|
126
|
-
subtract(diagonal, point2, point1);
|
|
126
|
+
vec3.subtract(diagonal, point2, point1);
|
|
127
127
|
var dir = model.shapeHandle.getDirection();
|
|
128
128
|
var right = model.shapeHandle.getRight();
|
|
129
129
|
var up = model.shapeHandle.getUp();
|
|
130
|
-
var dirComponent = dot(diagonal, dir);
|
|
131
|
-
var rightComponent = dot(diagonal, right);
|
|
132
|
-
var upComponent = dot(diagonal, up);
|
|
130
|
+
var dirComponent = vec3.dot(diagonal, dir);
|
|
131
|
+
var rightComponent = vec3.dot(diagonal, right);
|
|
132
|
+
var upComponent = vec3.dot(diagonal, up);
|
|
133
133
|
var absRightComponent = Math.abs(rightComponent);
|
|
134
134
|
var absUpComponent = Math.abs(upComponent);
|
|
135
135
|
|
|
@@ -147,7 +147,7 @@ function widgetBehavior(publicAPI, model) {
|
|
|
147
147
|
};
|
|
148
148
|
|
|
149
149
|
var getCornersFromRadius = function getCornersFromRadius(center, pointOnCircle) {
|
|
150
|
-
var radius = distance(center, pointOnCircle);
|
|
150
|
+
var radius = vec3.distance(center, pointOnCircle);
|
|
151
151
|
var up = model.shapeHandle.getUp();
|
|
152
152
|
var right = model.shapeHandle.getRight();
|
|
153
153
|
var point1 = [center[0] + (up[0] - right[0]) * radius, center[1] + (up[1] - right[1]) * radius, center[2] + (up[2] - right[2]) * radius];
|
|
@@ -193,8 +193,8 @@ function widgetBehavior(publicAPI, model) {
|
|
|
193
193
|
case ShapeBehavior[BehaviorCategory.POINTS].CENTER_TO_CORNER:
|
|
194
194
|
{
|
|
195
195
|
var diagonal = [0, 0, 0];
|
|
196
|
-
subtract(diagonal, point1, point2);
|
|
197
|
-
add(point1, point1, diagonal);
|
|
196
|
+
vec3.subtract(diagonal, point1, point2);
|
|
197
|
+
vec3.add(point1, point1, diagonal);
|
|
198
198
|
publicAPI.setCorners(point1, point2);
|
|
199
199
|
break;
|
|
200
200
|
}
|
|
@@ -359,7 +359,7 @@ function widgetBehavior(publicAPI, model) {
|
|
|
359
359
|
var normal = model.camera.getDirectionOfProjection();
|
|
360
360
|
var up = model.camera.getViewUp();
|
|
361
361
|
var right = [];
|
|
362
|
-
cross(right, up, normal);
|
|
362
|
+
vec3.cross(right, up, normal);
|
|
363
363
|
model.shapeHandle.setUp(up);
|
|
364
364
|
model.shapeHandle.setRight(right);
|
|
365
365
|
model.shapeHandle.setDirection(normal);
|
|
@@ -457,7 +457,7 @@ function widgetBehavior(publicAPI, model) {
|
|
|
457
457
|
publicAPI.updateShapeBounds();
|
|
458
458
|
|
|
459
459
|
if (publicAPI.isDraggingEnabled()) {
|
|
460
|
-
var distance = squaredDistance(model.point1, model.point2);
|
|
460
|
+
var distance = vec3.squaredDistance(model.point1, model.point2);
|
|
461
461
|
var maxDistance = 100;
|
|
462
462
|
|
|
463
463
|
if (distance > maxDistance || publicAPI.isDraggingForced()) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
2
2
|
import macro from '../../../macros.js';
|
|
3
|
-
import {
|
|
3
|
+
import { vec3 } from 'gl-matrix';
|
|
4
4
|
|
|
5
5
|
function widgetBehavior(publicAPI, model) {
|
|
6
6
|
model.classHierarchy.push('vtkSplineWidgetProp');
|
|
@@ -11,7 +11,7 @@ function widgetBehavior(publicAPI, model) {
|
|
|
11
11
|
|
|
12
12
|
var updateHandlesSize = function updateHandlesSize() {
|
|
13
13
|
if (model.handleSizeInPixels != null) {
|
|
14
|
-
var scale = model.handleSizeInPixels * distance(model.apiSpecificRenderWindow.displayToWorld(0, 0, 0, model.renderer), model.apiSpecificRenderWindow.displayToWorld(1, 0, 0, model.renderer));
|
|
14
|
+
var scale = model.handleSizeInPixels * vec3.distance(model.apiSpecificRenderWindow.displayToWorld(0, 0, 0, model.renderer), model.apiSpecificRenderWindow.displayToWorld(1, 0, 0, model.renderer));
|
|
15
15
|
model.moveHandle.setScale1(scale);
|
|
16
16
|
model.widgetState.getHandleList().forEach(function (handle) {
|
|
17
17
|
handle.setScale1(scale);
|
|
@@ -22,7 +22,7 @@ function widgetBehavior(publicAPI, model) {
|
|
|
22
22
|
|
|
23
23
|
var addPoint = function addPoint() {
|
|
24
24
|
// Commit handle to location
|
|
25
|
-
if (!model.lastHandle || model.keysDown.Control || !model.freeHand || squaredDistance(model.moveHandle.getOrigin(), model.lastHandle.getOrigin()) > model.freehandMinDistance * model.freehandMinDistance) {
|
|
25
|
+
if (!model.lastHandle || model.keysDown.Control || !model.freeHand || vec3.squaredDistance(model.moveHandle.getOrigin(), model.lastHandle.getOrigin()) > model.freehandMinDistance * model.freehandMinDistance) {
|
|
26
26
|
var _model$lastHandle;
|
|
27
27
|
|
|
28
28
|
model.lastHandle = model.widgetState.addHandle();
|
|
@@ -47,7 +47,7 @@ function widgetBehavior(publicAPI, model) {
|
|
|
47
47
|
return handles.reduce(function (_ref, handle) {
|
|
48
48
|
var closestHandle = _ref.closestHandle,
|
|
49
49
|
closestDistance = _ref.closestDistance;
|
|
50
|
-
var distance = squaredDistance(model.moveHandle.getOrigin(), handle.getOrigin());
|
|
50
|
+
var distance = vec3.squaredDistance(model.moveHandle.getOrigin(), handle.getOrigin());
|
|
51
51
|
|
|
52
52
|
if (handle !== model.moveHandle) {
|
|
53
53
|
return {
|
|
@@ -193,7 +193,7 @@ function widgetBehavior(publicAPI, model) {
|
|
|
193
193
|
model.activeState = model.moveHandle;
|
|
194
194
|
|
|
195
195
|
if (!model.draggedPoint) {
|
|
196
|
-
if (squaredDistance(model.moveHandle.getOrigin(), model.lastHandle.getOrigin()) < model.moveHandle.getScale1() * model.moveHandle.getScale1() || squaredDistance(model.moveHandle.getOrigin(), model.firstHandle.getOrigin()) < model.moveHandle.getScale1() * model.moveHandle.getScale1()) {
|
|
196
|
+
if (vec3.squaredDistance(model.moveHandle.getOrigin(), model.lastHandle.getOrigin()) < model.moveHandle.getScale1() * model.moveHandle.getScale1() || vec3.squaredDistance(model.moveHandle.getOrigin(), model.firstHandle.getOrigin()) < model.moveHandle.getScale1() * model.moveHandle.getScale1()) {
|
|
197
197
|
model.lastHandle.setVisible(true);
|
|
198
198
|
publicAPI.loseFocus();
|
|
199
199
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as createBase64WorkerFactory } from '../../../../rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';
|
|
2
2
|
|
|
3
|
-
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKF90b0NvbnN1bWFibGVBcnJheSQxLCBfc2xpY2VkVG9BcnJheSkgewogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9CgogIHZhciBfdG9Db25zdW1hYmxlQXJyYXlfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF90b0NvbnN1bWFibGVBcnJheSQxKTsKICB2YXIgX3NsaWNlZFRvQXJyYXlfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF9zbGljZWRUb0FycmF5KTsKCiAgdmFyIHJlZ2lzdGVyID0ge2V4cG9ydHM6IHt9fTsKCiAgdmFyIF9jcmVhdGVDbGFzcyQxID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrJDEoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCiAgdmFyIFRpbnlFbWl0dGVyJDEgPSBmdW5jdGlvbiAoKSB7CiAgICBmdW5jdGlvbiBUaW55RW1pdHRlcigpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrJDEodGhpcywgVGlueUVtaXR0ZXIpOwoKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX2xpc3RlbmVycycsIHsKICAgICAgICB2YWx1ZToge30sCiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICAgIH0pOwogICAgfQoKICAgIF9jcmVhdGVDbGFzcyQxKFRpbnlFbWl0dGVyLCBbewogICAgICBrZXk6ICdlbWl0JywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXQoZXZlbnROYW1lKSB7CiAgICAgICAgaWYgKCF0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHJldHVybiB0aGlzOwoKICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgIH0KCiAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlOwogICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlOwogICAgICAgIHZhciBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHsKICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBfc3RlcC52YWx1ZTsKCiAgICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTsKICAgICAgICAgIF9pdGVyYXRvckVycm9yID0gZXJyOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikgewogICAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7CiAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogJ29uY2UnLAogICAgICB2YWx1ZTogZnVuY3Rpb24gb25jZShldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICB2YXIgb25jZSA9IGZ1bmN0aW9uIG9uY2UoKSB7CiAgICAgICAgICBfdGhpcy5vZmYoZXZlbnROYW1lLCBvbmNlKTsKICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiB0aGlzLm9uKGV2ZW50TmFtZSwgb25jZSk7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAnb24nLAogICAgICB2YWx1ZTogZnVuY3Rpb24gb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgaWYgKCF0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXSA9IFtdOwoKICAgICAgICB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChoYW5kbGVyKTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAnb2ZmJywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICBpZiAoaGFuZGxlcikgdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdID0gdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdLmZpbHRlcihmdW5jdGlvbiAoaCkgewogICAgICAgICAgcmV0dXJuIGggIT09IGhhbmRsZXI7CiAgICAgICAgfSk7ZWxzZSB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBbXTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH1dKTsKCiAgICByZXR1cm4gVGlueUVtaXR0ZXI7CiAgfSgpOwoKICB2YXIgdGlueUVtaXR0ZXIgPSBUaW55RW1pdHRlciQxOwoKICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgdmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoInZhbHVlIiBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTsKCiAgdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsKCiAgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9CgogIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KCiAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KCiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH0KCiAgdmFyIFRpbnlFbWl0dGVyID0gdGlueUVtaXR0ZXI7CgogIHZhciBNRVNTQUdFX1JFU1VMVCA9IDA7CiAgdmFyIE1FU1NBR0VfRVZFTlQgPSAxOwoKICB2YXIgUkVTVUxUX0VSUk9SID0gMDsKICB2YXIgUkVTVUxUX1NVQ0NFU1MgPSAxOwoKICB2YXIgREVGQVVMVF9IQU5ETEVSID0gJ21haW4nOwoKICB2YXIgaXNQcm9taXNlID0gZnVuY3Rpb24gaXNQcm9taXNlKG8pIHsKICAgIHJldHVybiAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG8pKSA9PT0gJ29iamVjdCcgJiYgbyAhPT0gbnVsbCAmJiB0eXBlb2Ygby50aGVuID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvLmNhdGNoID09PSAnZnVuY3Rpb24nOwogIH07CgogIGZ1bmN0aW9uIFJlZ2lzdGVyUHJvbWlzZShmbikgewogICAgdmFyIGhhbmRsZXJzID0gX2RlZmluZVByb3BlcnR5KHt9LCBERUZBVUxUX0hBTkRMRVIsIGZuKTsKICAgIHZhciBzZW5kUG9zdE1lc3NhZ2UgPSBzZWxmLnBvc3RNZXNzYWdlLmJpbmQoc2VsZik7CgogICAgdmFyIHNlcnZlciA9IG5ldyAoZnVuY3Rpb24gKF9UaW55RW1pdHRlcikgewogICAgICBfaW5oZXJpdHMoV29ya2VyUmVnaXN0ZXIsIF9UaW55RW1pdHRlcik7CgogICAgICBmdW5jdGlvbiBXb3JrZXJSZWdpc3RlcigpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ya2VyUmVnaXN0ZXIpOwoKICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFdvcmtlclJlZ2lzdGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKICAgICAgfQoKICAgICAgX2NyZWF0ZUNsYXNzKFdvcmtlclJlZ2lzdGVyLCBbewogICAgICAgIGtleTogJ2VtaXQnLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50TmFtZSkgewogICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9LCBhcmdzWzBdLnRyYW5zZmVyYWJsZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogJ2VtaXRMb2NhbGx5JywKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdExvY2FsbHkoZXZlbnROYW1lKSB7CiAgICAgICAgICB2YXIgX2dldDI7CgogICAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogICAgICAgICAgfQoKICAgICAgICAgIChfZ2V0MiA9IF9nZXQoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlKSwgJ2VtaXQnLCB0aGlzKSkuY2FsbC5hcHBseShfZ2V0MiwgW3RoaXMsIGV2ZW50TmFtZV0uY29uY2F0KGFyZ3MpKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICdvcGVyYXRpb24nLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVyYXRpb24obmFtZSwgaGFuZGxlcikgewogICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ya2VyUmVnaXN0ZXI7CiAgICB9KFRpbnlFbWl0dGVyKSkoKTsKCiAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKG1lc3NhZ2VJZCwgcGF5bG9hZCwgaGFuZGxlck5hbWUpIHsKCiAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbiBvblN1Y2Nlc3MocmVzdWx0KSB7CiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgc2VuZFJlc3VsdChtZXNzYWdlSWQsIFJFU1VMVF9TVUNDRVNTLCByZXN1bHQucGF5bG9hZCwgcmVzdWx0LnRyYW5zZmVyYWJsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfU1VDQ0VTUywgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH07CgogICAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IoZSkgewogICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfRVJST1IsIHsKICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSwKICAgICAgICAgIHN0YWNrOiBlLnN0YWNrCiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICB0cnkgewogICAgICAgIHZhciByZXN1bHQgPSBydW5GbihtZXNzYWdlSWQsIHBheWxvYWQsIGhhbmRsZXJOYW1lKTsKICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHsKICAgICAgICAgIHJlc3VsdC50aGVuKG9uU3VjY2VzcykuY2F0Y2gob25FcnJvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9uU3VjY2VzcyhyZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIG9uRXJyb3IoZSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIHJ1bkZuID0gZnVuY3Rpb24gcnVuRm4obWVzc2FnZUlkLCBwYXlsb2FkLCBoYW5kbGVyTmFtZSkgewogICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2hhbmRsZXJOYW1lIHx8IERFRkFVTFRfSEFORExFUl07CiAgICAgIGlmICghaGFuZGxlcikgdGhyb3cgbmV3IEVycm9yKCdOb3QgZm91bmQgaGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0Jyk7CgogICAgICByZXR1cm4gaGFuZGxlcihwYXlsb2FkLCBzZW5kRXZlbnQuYmluZChudWxsLCBtZXNzYWdlSWQpKTsKICAgIH07CgogICAgdmFyIHNlbmRSZXN1bHQgPSBmdW5jdGlvbiBzZW5kUmVzdWx0KG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZCkgewogICAgICB2YXIgdHJhbnNmZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBbXTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9SRVNVTFQsIG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZF0sIHRyYW5zZmVyYWJsZSk7CiAgICB9OwoKICAgIHZhciBzZW5kRXZlbnQgPSBmdW5jdGlvbiBzZW5kRXZlbnQobWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWQpIHsKICAgICAgaWYgKCFldmVudE5hbWUpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIGlzIHJlcXVpcmVkJyk7CgogICAgICBpZiAodHlwZW9mIGV2ZW50TmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIHNob3VsZCBiZSBzdHJpbmcnKTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9FVkVOVCwgbWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWRdKTsKICAgIH07CgogICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgewogICAgICAgIHJ1bi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShkYXRhKSk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmV2ZW50TmFtZSkgewogICAgICAgIHNlcnZlci5lbWl0TG9jYWxseS5hcHBseShzZXJ2ZXIsIFtkYXRhLmV2ZW50TmFtZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkYXRhLmFyZ3MpKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBzZXJ2ZXI7CiAgfQoKICB2YXIgVHJhbnNmZXJhYmxlUmVzcG9uc2UgPSBmdW5jdGlvbiBUcmFuc2ZlcmFibGVSZXNwb25zZShwYXlsb2FkLCB0cmFuc2ZlcmFibGUpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2ZlcmFibGVSZXNwb25zZSk7CgogICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDsKICAgIHRoaXMudHJhbnNmZXJhYmxlID0gdHJhbnNmZXJhYmxlOwogIH07CgogIHJlZ2lzdGVyLmV4cG9ydHMgPSBSZWdpc3RlclByb21pc2U7CiAgcmVnaXN0ZXIuZXhwb3J0cy5UcmFuc2ZlcmFibGVSZXNwb25zZSA9IFRyYW5zZmVyYWJsZVJlc3BvbnNlOwoKICB2YXIgcmVnaXN0ZXJXZWJ3b3JrZXIgPSByZWdpc3Rlci5leHBvcnRzOwoKICB2YXIgU2xpY2luZ01vZGUgPSB7CiAgICBOT05FOiAtMSwKICAgIEk6IDAsCiAgICBKOiAxLAogICAgSzogMiwKICAgIFg6IDMsCiAgICBZOiA0LAogICAgWjogNQogIH07CgogIC8qKg0KICAgKiBDb21tb24gdXRpbGl0aWVzDQogICAqIEBtb2R1bGUgZ2xNYXRyaXgNCiAgICovCiAgdmFyIEFSUkFZX1RZUEUgPSB0eXBlb2YgRmxvYXQzMkFycmF5ICE9PSAndW5kZWZpbmVkJyA/IEZsb2F0MzJBcnJheSA6IEFycmF5OwogIGlmICghTWF0aC5oeXBvdCkgTWF0aC5oeXBvdCA9IGZ1bmN0aW9uICgpIHsKICAgIHZhciB5ID0gMCwKICAgICAgICBpID0gYXJndW1lbnRzLmxlbmd0aDsKCiAgICB3aGlsZSAoaS0tKSB7CiAgICAgIHkgKz0gYXJndW1lbnRzW2ldICogYXJndW1lbnRzW2ldOwogICAgfQoKICAgIHJldHVybiBNYXRoLnNxcnQoeSk7CiAgfTsKCiAgLyoqDQogICAqIDMgRGltZW5zaW9uYWwgVmVjdG9yDQogICAqIEBtb2R1bGUgdmVjMw0KICAgKi8KCiAgLyoqDQogICAqIENyZWF0ZXMgYSBuZXcsIGVtcHR5IHZlYzMNCiAgICoNCiAgICogQHJldHVybnMge3ZlYzN9IGEgbmV3IDNEIHZlY3Rvcg0KICAgKi8KCiAgZnVuY3Rpb24gY3JlYXRlKCkgewogICAgdmFyIG91dCA9IG5ldyBBUlJBWV9UWVBFKDMpOwoKICAgIGlmIChBUlJBWV9UWVBFICE9IEZsb2F0MzJBcnJheSkgewogICAgICBvdXRbMF0gPSAwOwogICAgICBvdXRbMV0gPSAwOwogICAgICBvdXRbMl0gPSAwOwogICAgfQoKICAgIHJldHVybiBvdXQ7CiAgfQogIC8qKg0KICAgKiBTdWJ0cmFjdHMgdmVjdG9yIGIgZnJvbSB2ZWN0b3IgYQ0KICAgKg0KICAgKiBAcGFyYW0ge3ZlYzN9IG91dCB0aGUgcmVjZWl2aW5nIHZlY3Rvcg0KICAgKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYSB0aGUgZmlyc3Qgb3BlcmFuZA0KICAgKiBAcGFyYW0ge1JlYWRvbmx5VmVjM30gYiB0aGUgc2Vjb25kIG9wZXJhbmQNCiAgICogQHJldHVybnMge3ZlYzN9IG91dA0KICAgKi8KCiAgZnVuY3Rpb24gc3VidHJhY3Qob3V0LCBhLCBiKSB7CiAgICBvdXRbMF0gPSBhWzBdIC0gYlswXTsKICAgIG91dFsxXSA9IGFbMV0gLSBiWzFdOwogICAgb3V0WzJdID0gYVsyXSAtIGJbMl07CiAgICByZXR1cm4gb3V0OwogIH0KICAvKioNCiAgICogU2NhbGVzIGEgdmVjMyBieSBhIHNjYWxhciBudW1iZXINCiAgICoNCiAgICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3INCiAgICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIHZlY3RvciB0byBzY2FsZQ0KICAgKiBAcGFyYW0ge051bWJlcn0gYiBhbW91bnQgdG8gc2NhbGUgdGhlIHZlY3RvciBieQ0KICAgKiBAcmV0dXJucyB7dmVjM30gb3V0DQogICAqLwoKICBmdW5jdGlvbiBzY2FsZShvdXQsIGEsIGIpIHsKICAgIG91dFswXSA9IGFbMF0gKiBiOwogICAgb3V0WzFdID0gYVsxXSAqIGI7CiAgICBvdXRbMl0gPSBhWzJdICogYjsKICAgIHJldHVybiBvdXQ7CiAgfQogIC8qKg0KICAgKiBBZGRzIHR3byB2ZWMzJ3MgYWZ0ZXIgc2NhbGluZyB0aGUgc2Vjb25kIG9wZXJhbmQgYnkgYSBzY2FsYXIgdmFsdWUNCiAgICoNCiAgICogQHBhcmFtIHt2ZWMzfSBvdXQgdGhlIHJlY2VpdmluZyB2ZWN0b3INCiAgICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGEgdGhlIGZpcnN0IG9wZXJhbmQNCiAgICogQHBhcmFtIHtSZWFkb25seVZlYzN9IGIgdGhlIHNlY29uZCBvcGVyYW5kDQogICAqIEBwYXJhbSB7TnVtYmVyfSBzY2FsZSB0aGUgYW1vdW50IHRvIHNjYWxlIGIgYnkgYmVmb3JlIGFkZGluZw0KICAgKiBAcmV0dXJucyB7dmVjM30gb3V0DQogICAqLwoKICBmdW5jdGlvbiBzY2FsZUFuZEFkZChvdXQsIGEsIGIsIHNjYWxlKSB7CiAgICBvdXRbMF0gPSBhWzBdICsgYlswXSAqIHNjYWxlOwogICAgb3V0WzFdID0gYVsxXSArIGJbMV0gKiBzY2FsZTsKICAgIG91dFsyXSA9IGFbMl0gKyBiWzJdICogc2NhbGU7CiAgICByZXR1cm4gb3V0OwogIH0KICAvKioNCiAgICogUGVyZm9ybSBzb21lIG9wZXJhdGlvbiBvdmVyIGFuIGFycmF5IG9mIHZlYzNzLg0KICAgKg0KICAgKiBAcGFyYW0ge0FycmF5fSBhIHRoZSBhcnJheSBvZiB2ZWN0b3JzIHRvIGl0ZXJhdGUgb3Zlcg0KICAgKiBAcGFyYW0ge051bWJlcn0gc3RyaWRlIE51bWJlciBvZiBlbGVtZW50cyBiZXR3ZWVuIHRoZSBzdGFydCBvZiBlYWNoIHZlYzMuIElmIDAgYXNzdW1lcyB0aWdodGx5IHBhY2tlZA0KICAgKiBAcGFyYW0ge051bWJlcn0gb2Zmc2V0IE51bWJlciBvZiBlbGVtZW50cyB0byBza2lwIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGFycmF5DQogICAqIEBwYXJhbSB7TnVtYmVyfSBjb3VudCBOdW1iZXIgb2YgdmVjM3MgdG8gaXRlcmF0ZSBvdmVyLiBJZiAwIGl0ZXJhdGVzIG92ZXIgZW50aXJlIGFycmF5DQogICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggdmVjdG9yIGluIHRoZSBhcnJheQ0KICAgKiBAcGFyYW0ge09iamVjdH0gW2FyZ10gYWRkaXRpb25hbCBhcmd1bWVudCB0byBwYXNzIHRvIGZuDQogICAqIEByZXR1cm5zIHtBcnJheX0gYQ0KICAgKiBAZnVuY3Rpb24NCiAgICovCgogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgdmVjID0gY3JlYXRlKCk7CiAgICByZXR1cm4gZnVuY3Rpb24gKGEsIHN0cmlkZSwgb2Zmc2V0LCBjb3VudCwgZm4sIGFyZykgewogICAgICB2YXIgaSwgbDsKCiAgICAgIGlmICghc3RyaWRlKSB7CiAgICAgICAgc3RyaWRlID0gMzsKICAgICAgfQoKICAgICAgaWYgKCFvZmZzZXQpIHsKICAgICAgICBvZmZzZXQgPSAwOwogICAgICB9CgogICAgICBpZiAoY291bnQpIHsKICAgICAgICBsID0gTWF0aC5taW4oY291bnQgKiBzdHJpZGUgKyBvZmZzZXQsIGEubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsID0gYS5sZW5ndGg7CiAgICAgIH0KCiAgICAgIGZvciAoaSA9IG9mZnNldDsgaSA8IGw7IGkgKz0gc3RyaWRlKSB7CiAgICAgICAgdmVjWzBdID0gYVtpXTsKICAgICAgICB2ZWNbMV0gPSBhW2kgKyAxXTsKICAgICAgICB2ZWNbMl0gPSBhW2kgKyAyXTsKICAgICAgICBmbih2ZWMsIHZlYywgYXJnKTsKICAgICAgICBhW2ldID0gdmVjWzBdOwogICAgICAgIGFbaSArIDFdID0gdmVjWzFdOwogICAgICAgIGFbaSArIDJdID0gdmVjWzJdOwogICAgICB9CgogICAgICByZXR1cm4gYTsKICAgIH07CiAgfSkoKTsKCiAgdmFyIGdsb2JhbHMgPSB7CiAgICAvLyBzaW5nbGUtY29tcG9uZW50IGxhYmVsbWFwCiAgICBidWZmZXI6IG51bGwsCiAgICBkaW1lbnNpb25zOiBbMCwgMCwgMF0sCiAgICBwcmV2UG9pbnQ6IG51bGwsCiAgICBzbGljaW5nTW9kZTogbnVsbCAvLyAyRCBvciAzRCBwYWludGluZwoKICB9OyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBmdW5jdGlvbiBoYW5kbGVQYWludFJlY3RhbmdsZShfcmVmKSB7CiAgICB2YXIgcG9pbnQxID0gX3JlZi5wb2ludDEsCiAgICAgICAgcG9pbnQyID0gX3JlZi5wb2ludDI7CgogICAgdmFyIF9wb2ludCA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10ocG9pbnQxLCAzKSwKICAgICAgICB4MSA9IF9wb2ludFswXSwKICAgICAgICB5MSA9IF9wb2ludFsxXSwKICAgICAgICB6MSA9IF9wb2ludFsyXTsKCiAgICB2YXIgX3BvaW50MiA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10ocG9pbnQyLCAzKSwKICAgICAgICB4MiA9IF9wb2ludDJbMF0sCiAgICAgICAgeTIgPSBfcG9pbnQyWzFdLAogICAgICAgIHoyID0gX3BvaW50MlsyXTsKCiAgICB2YXIgeHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4oeDEsIHgyKSwgMCk7CiAgICB2YXIgeGVuZCA9IE1hdGgubWluKE1hdGgubWF4KHgxLCB4MiksIGdsb2JhbHMuZGltZW5zaW9uc1swXSAtIDEpOwoKICAgIGlmICh4c3RhcnQgPD0geGVuZCkgewogICAgICB2YXIgeXN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4oeTEsIHkyKSwgMCk7CiAgICAgIHZhciB5ZW5kID0gTWF0aC5taW4oTWF0aC5tYXgoeTEsIHkyKSwgZ2xvYmFscy5kaW1lbnNpb25zWzFdIC0gMSk7CiAgICAgIHZhciB6c3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbih6MSwgejIpLCAwKTsKICAgICAgdmFyIHplbmQgPSBNYXRoLm1pbihNYXRoLm1heCh6MSwgejIpLCBnbG9iYWxzLmRpbWVuc2lvbnNbMl0gLSAxKTsKICAgICAgdmFyIGpTdHJpZGUgPSBnbG9iYWxzLmRpbWVuc2lvbnNbMF07CiAgICAgIHZhciBrU3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdICogZ2xvYmFscy5kaW1lbnNpb25zWzFdOwoKICAgICAgZm9yICh2YXIgayA9IHpzdGFydDsgayA8PSB6ZW5kOyBrKyspIHsKICAgICAgICBmb3IgKHZhciBqID0geXN0YXJ0OyBqIDw9IHllbmQ7IGorKykgewogICAgICAgICAgdmFyIGluZGV4ID0gaiAqIGpTdHJpZGUgKyBrICoga1N0cmlkZTsKICAgICAgICAgIGdsb2JhbHMuYnVmZmVyLmZpbGwoMSwgaW5kZXggKyB4c3RhcnQsIGluZGV4ICsgeGVuZCArIDEpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBjZW50ZXIgYW5kIHNjYWxlMyBhcmUgaW4gSUpLIGNvb3JkaW5hdGVzCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludEVsbGlwc2UoX3JlZjIpIHsKICAgIHZhciBjZW50ZXIgPSBfcmVmMi5jZW50ZXIsCiAgICAgICAgc2NhbGUzID0gX3JlZjIuc2NhbGUzOwoKICAgIHZhciByYWRpdXMzID0gX3RvQ29uc3VtYWJsZUFycmF5X19kZWZhdWx0WydkZWZhdWx0J10oc2NhbGUzKTsKCiAgICB2YXIgaW5kZXhDZW50ZXIgPSBjZW50ZXIubWFwKGZ1bmN0aW9uICh2YWwpIHsKICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsKTsKICAgIH0pOwogICAgdmFyIHNsaWNlQXhpcyA9IC0xOwoKICAgIGlmIChnbG9iYWxzLnNsaWNpbmdNb2RlICE9IG51bGwgJiYgZ2xvYmFscy5zbGljaW5nTW9kZSAhPT0gU2xpY2luZ01vZGUuTk9ORSkgewogICAgICBzbGljZUF4aXMgPSBnbG9iYWxzLnNsaWNpbmdNb2RlICUgMzsKICAgIH0KCiAgICB2YXIgeVN0cmlkZSA9IGdsb2JhbHMuZGltZW5zaW9uc1swXTsKICAgIHZhciB6U3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdICogZ2xvYmFscy5kaW1lbnNpb25zWzFdOwoKICAgIHZhciBfaW5kZXhDZW50ZXIgPSBfc2xpY2VkVG9BcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKGluZGV4Q2VudGVyLCAzKSwKICAgICAgICB4bWluID0gX2luZGV4Q2VudGVyWzBdLAogICAgICAgIHltaW4gPSBfaW5kZXhDZW50ZXJbMV0sCiAgICAgICAgem1pbiA9IF9pbmRleENlbnRlclsyXTsKCiAgICB2YXIgX2luZGV4Q2VudGVyMiA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10oaW5kZXhDZW50ZXIsIDMpLAogICAgICAgIHhtYXggPSBfaW5kZXhDZW50ZXIyWzBdLAogICAgICAgIHltYXggPSBfaW5kZXhDZW50ZXIyWzFdLAogICAgICAgIHptYXggPSBfaW5kZXhDZW50ZXIyWzJdOwoKICAgIGlmIChzbGljZUF4aXMgIT09IDIpIHsKICAgICAgem1pbiA9IE1hdGgucm91bmQoTWF0aC5tYXgoaW5kZXhDZW50ZXJbMl0gLSByYWRpdXMzWzJdLCAwKSk7CiAgICAgIHptYXggPSBNYXRoLnJvdW5kKE1hdGgubWluKGluZGV4Q2VudGVyWzJdICsgcmFkaXVzM1syXSwgZ2xvYmFscy5kaW1lbnNpb25zWzJdIC0gMSkpOwogICAgfQoKICAgIGZvciAodmFyIHogPSB6bWluOyB6IDw9IHptYXg7IHorKykgewogICAgICB2YXIgZHogPSAwOwoKICAgICAgaWYgKHNsaWNlQXhpcyAhPT0gMikgewogICAgICAgIGR6ID0gKGluZGV4Q2VudGVyWzJdIC0geikgLyByYWRpdXMzWzJdOwogICAgICB9CgogICAgICB2YXIgZHpTcXVhcmVkID0gZHogKiBkejsKCiAgICAgIGlmIChkelNxdWFyZWQgPD0gMSkgewogICAgICAgIHZhciBheSA9IHJhZGl1czNbMV0gKiBNYXRoLnNxcnQoMSAtIGR6U3F1YXJlZCk7CgogICAgICAgIGlmIChzbGljZUF4aXMgIT09IDEpIHsKICAgICAgICAgIHltaW4gPSBNYXRoLnJvdW5kKE1hdGgubWF4KGluZGV4Q2VudGVyWzFdIC0gYXksIDApKTsKICAgICAgICAgIHltYXggPSBNYXRoLnJvdW5kKE1hdGgubWluKGluZGV4Q2VudGVyWzFdICsgYXksIGdsb2JhbHMuZGltZW5zaW9uc1sxXSAtIDEpKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIHkgPSB5bWluOyB5IDw9IHltYXg7IHkrKykgewogICAgICAgICAgdmFyIGR5ID0gMDsKCiAgICAgICAgICBpZiAoc2xpY2VBeGlzICE9PSAxKSB7CiAgICAgICAgICAgIGR5ID0gKGluZGV4Q2VudGVyWzFdIC0geSkgLyByYWRpdXMzWzFdOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBkeVNxdWFyZWQgPSBkeSAqIGR5OwoKICAgICAgICAgIGlmIChkeVNxdWFyZWQgKyBkelNxdWFyZWQgPD0gMSkgewogICAgICAgICAgICBpZiAoc2xpY2VBeGlzICE9PSAwKSB7CiAgICAgICAgICAgICAgdmFyIGF4ID0gcmFkaXVzM1swXSAqIE1hdGguc3FydCgxIC0gZHlTcXVhcmVkIC0gZHpTcXVhcmVkKTsKICAgICAgICAgICAgICB4bWluID0gTWF0aC5yb3VuZChNYXRoLm1heChpbmRleENlbnRlclswXSAtIGF4LCAwKSk7CiAgICAgICAgICAgICAgeG1heCA9IE1hdGgucm91bmQoTWF0aC5taW4oaW5kZXhDZW50ZXJbMF0gKyBheCwgZ2xvYmFscy5kaW1lbnNpb25zWzBdIC0gMSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoeG1pbiA8PSB4bWF4KSB7CiAgICAgICAgICAgICAgdmFyIGluZGV4ID0geSAqIHlTdHJpZGUgKyB6ICogelN0cmlkZTsKICAgICAgICAgICAgICBnbG9iYWxzLmJ1ZmZlci5maWxsKDEsIGluZGV4ICsgeG1pbiwgaW5kZXggKyB4bWF4ICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludChfcmVmMykgewogICAgdmFyIHBvaW50ID0gX3JlZjMucG9pbnQsCiAgICAgICAgcmFkaXVzID0gX3JlZjMucmFkaXVzOwoKICAgIGlmICghZ2xvYmFscy5wcmV2UG9pbnQpIHsKICAgICAgZ2xvYmFscy5wcmV2UG9pbnQgPSBwb2ludDsKICAgIH0gLy8gRERBIHBhcmFtcwoKCiAgICB2YXIgZGVsdGEgPSBbcG9pbnRbMF0gLSBnbG9iYWxzLnByZXZQb2ludFswXSwgcG9pbnRbMV0gLSBnbG9iYWxzLnByZXZQb2ludFsxXSwgcG9pbnRbMl0gLSBnbG9iYWxzLnByZXZQb2ludFsyXV07CiAgICB2YXIgaW5jID0gWzEsIDEsIDFdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgIGlmIChkZWx0YVtpXSA8IDApIHsKICAgICAgICBkZWx0YVtpXSA9IC1kZWx0YVtpXTsKICAgICAgICBpbmNbaV0gPSAtMTsKICAgICAgfQogICAgfQoKICAgIHZhciBzdGVwID0gTWF0aC5tYXguYXBwbHkoTWF0aCwgZGVsdGEpOyAvLyBEREEKCiAgICB2YXIgdGhyZXNoID0gW3N0ZXAsIHN0ZXAsIHN0ZXBdOwoKICAgIHZhciBwdCA9IF90b0NvbnN1bWFibGVBcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKGdsb2JhbHMucHJldlBvaW50KTsKCiAgICBmb3IgKHZhciBzID0gMDsgcyA8PSBzdGVwOyBzKyspIHsKICAgICAgaGFuZGxlUGFpbnRFbGxpcHNlKHsKICAgICAgICBjZW50ZXI6IHB0LAogICAgICAgIHNjYWxlMzogcmFkaXVzCiAgICAgIH0pOwoKICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDM7IGlpKyspIHsKICAgICAgICB0aHJlc2hbaWldIC09IGRlbHRhW2lpXTsKCiAgICAgICAgaWYgKHRocmVzaFtpaV0gPD0gMCkgewogICAgICAgICAgdGhyZXNoW2lpXSArPSBzdGVwOwogICAgICAgICAgcHRbaWldICs9IGluY1tpaV07CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZ2xvYmFscy5wcmV2UG9pbnQgPSBwb2ludDsKICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludFRyaWFuZ2xlcyhfcmVmNCkgewogICAgdmFyIHRyaWFuZ2xlTGlzdCA9IF9yZWY0LnRyaWFuZ2xlTGlzdDsKICAgIC8vIGRlYnVnZ2VyOwogICAgdmFyIHRyaWFuZ2xlQ291bnQgPSBNYXRoLmZsb29yKHRyaWFuZ2xlTGlzdC5sZW5ndGggLyA5KTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWFuZ2xlQ291bnQ7IGkrKykgewogICAgICB2YXIgcG9pbnQwID0gdHJpYW5nbGVMaXN0LnN1YmFycmF5KDkgKiBpICsgMCwgOSAqIGkgKyAzKTsKICAgICAgdmFyIHBvaW50MSA9IHRyaWFuZ2xlTGlzdC5zdWJhcnJheSg5ICogaSArIDMsIDkgKiBpICsgNik7CiAgICAgIHZhciBwb2ludDIgPSB0cmlhbmdsZUxpc3Quc3ViYXJyYXkoOSAqIGkgKyA2LCA5ICogaSArIDkpOwogICAgICB2YXIgdjEgPSBbMCwgMCwgMF07CiAgICAgIHZhciB2MiA9IFswLCAwLCAwXTsKICAgICAgc3VidHJhY3QodjEsIHBvaW50MSwgcG9pbnQwKTsKICAgICAgc3VidHJhY3QodjIsIHBvaW50MiwgcG9pbnQwKTsKICAgICAgdmFyIHN0ZXAxID0gWzAsIDAsIDBdOwogICAgICB2YXIgbnVtU3RlcDEgPSAyICogTWF0aC5tYXgoTWF0aC5hYnModjFbMF0pLCBNYXRoLmFicyh2MVsxXSksIE1hdGguYWJzKHYxWzJdKSk7CiAgICAgIHNjYWxlKHN0ZXAxLCB2MSwgMSAvIG51bVN0ZXAxKTsKICAgICAgdmFyIHN0ZXAyID0gWzAsIDAsIDBdOwogICAgICB2YXIgbnVtU3RlcDIgPSAyICogTWF0aC5tYXgoTWF0aC5hYnModjJbMF0pLCBNYXRoLmFicyh2MlsxXSksIE1hdGguYWJzKHYyWzJdKSk7CiAgICAgIHNjYWxlKHN0ZXAyLCB2MiwgMSAvIG51bVN0ZXAyKTsKICAgICAgdmFyIGpTdHJpZGUgPSBnbG9iYWxzLmRpbWVuc2lvbnNbMF07CiAgICAgIHZhciBrU3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdICogZ2xvYmFscy5kaW1lbnNpb25zWzFdOwoKICAgICAgZm9yICh2YXIgdSA9IDA7IHUgPD0gbnVtU3RlcDEgKyAxOyB1KyspIHsKICAgICAgICB2YXIgbWF4ViA9IG51bVN0ZXAyIC0gdSAqIChudW1TdGVwMiAvIG51bVN0ZXAxKTsKCiAgICAgICAgZm9yICh2YXIgdiA9IDA7IHYgPD0gbWF4ViArIDE7IHYrKykgewogICAgICAgICAgdmFyIHBvaW50ID0gX3RvQ29uc3VtYWJsZUFycmF5X19kZWZhdWx0WydkZWZhdWx0J10ocG9pbnQwKTsKCiAgICAgICAgICBzY2FsZUFuZEFkZChwb2ludCwgcG9pbnQsIHN0ZXAxLCB1KTsKICAgICAgICAgIHNjYWxlQW5kQWRkKHBvaW50LCBwb2ludCwgc3RlcDIsIHYpOwogICAgICAgICAgcG9pbnRbMF0gPSBNYXRoLnJvdW5kKHBvaW50WzBdKTsKICAgICAgICAgIHBvaW50WzFdID0gTWF0aC5yb3VuZChwb2ludFsxXSk7CiAgICAgICAgICBwb2ludFsyXSA9IE1hdGgucm91bmQocG9pbnRbMl0pOwoKICAgICAgICAgIGlmIChwb2ludFswXSA+PSAwICYmIHBvaW50WzBdIDwgZ2xvYmFscy5kaW1lbnNpb25zWzBdICYmIHBvaW50WzFdID49IDAgJiYgcG9pbnRbMV0gPCBnbG9iYWxzLmRpbWVuc2lvbnNbMV0gJiYgcG9pbnRbMl0gPj0gMCAmJiBwb2ludFsyXSA8IGdsb2JhbHMuZGltZW5zaW9uc1syXSkgewogICAgICAgICAgICBnbG9iYWxzLmJ1ZmZlcltwb2ludFswXSArIGpTdHJpZGUgKiBwb2ludFsxXSArIGtTdHJpZGUgKiBwb2ludFsyXV0gPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgogIHJlZ2lzdGVyV2Vid29ya2VyKCkub3BlcmF0aW9uKCdzdGFydCcsIGZ1bmN0aW9uIChfcmVmNSkgewogICAgdmFyIGJ1ZmZlclR5cGUgPSBfcmVmNS5idWZmZXJUeXBlLAogICAgICAgIGRpbWVuc2lvbnMgPSBfcmVmNS5kaW1lbnNpb25zLAogICAgICAgIHNsaWNpbmdNb2RlID0gX3JlZjUuc2xpY2luZ01vZGU7CgogICAgaWYgKCFnbG9iYWxzLmJ1ZmZlcikgewogICAgICB2YXIgYnVmZmVyU2l6ZSA9IGRpbWVuc2lvbnNbMF0gKiBkaW1lbnNpb25zWzFdICogZGltZW5zaW9uc1syXTsKICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lICovCgogICAgICBnbG9iYWxzLmJ1ZmZlciA9IG5ldyBzZWxmW2J1ZmZlclR5cGVdKGJ1ZmZlclNpemUpOwogICAgICBnbG9iYWxzLmRpbWVuc2lvbnMgPSBkaW1lbnNpb25zOwogICAgICBnbG9iYWxzLnByZXZQb2ludCA9IG51bGw7CiAgICAgIGdsb2JhbHMuc2xpY2luZ01vZGUgPSBzbGljaW5nTW9kZTsKICAgIH0KICB9KS5vcGVyYXRpb24oJ3BhaW50JywgaGFuZGxlUGFpbnQpLm9wZXJhdGlvbigncGFpbnRSZWN0YW5nbGUnLCBoYW5kbGVQYWludFJlY3RhbmdsZSkub3BlcmF0aW9uKCdwYWludEVsbGlwc2UnLCBoYW5kbGVQYWludEVsbGlwc2UpLm9wZXJhdGlvbigncGFpbnRUcmlhbmdsZXMnLCBoYW5kbGVQYWludFRyaWFuZ2xlcykub3BlcmF0aW9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7CiAgICB2YXIgcmVzcG9uc2UgPSBuZXcgcmVnaXN0ZXJXZWJ3b3JrZXIuVHJhbnNmZXJhYmxlUmVzcG9uc2UoZ2xvYmFscy5idWZmZXIuYnVmZmVyLCBbZ2xvYmFscy5idWZmZXIuYnVmZmVyXSk7CiAgICBnbG9iYWxzLmJ1ZmZlciA9IG51bGw7CiAgICByZXR1cm4gcmVzcG9uc2U7CiAgfSk7Cgp9KF90b0NvbnN1bWFibGVBcnJheSQxLCBfc2xpY2VkVG9BcnJheSkpOwoK', null, false);
|
|
3
|
+
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKF90b0NvbnN1bWFibGVBcnJheSwgX3NsaWNlZFRvQXJyYXksIHJlZ2lzdGVyV2Vid29ya2VyLCBnbE1hdHJpeCkgewogICd1c2Ugc3RyaWN0JzsKCiAgZnVuY3Rpb24gX2ludGVyb3BEZWZhdWx0TGVnYWN5IChlKSB7IHJldHVybiBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAnZGVmYXVsdCcgaW4gZSA/IGUgOiB7ICdkZWZhdWx0JzogZSB9OyB9CgogIHZhciBfdG9Db25zdW1hYmxlQXJyYXlfX2RlZmF1bHQgPSAvKiNfX1BVUkVfXyovX2ludGVyb3BEZWZhdWx0TGVnYWN5KF90b0NvbnN1bWFibGVBcnJheSk7CiAgdmFyIF9zbGljZWRUb0FycmF5X19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShfc2xpY2VkVG9BcnJheSk7CiAgdmFyIHJlZ2lzdGVyV2Vid29ya2VyX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShyZWdpc3RlcldlYndvcmtlcik7CgogIHZhciBTbGljaW5nTW9kZSA9IHsKICAgIE5PTkU6IC0xLAogICAgSTogMCwKICAgIEo6IDEsCiAgICBLOiAyLAogICAgWDogMywKICAgIFk6IDQsCiAgICBaOiA1CiAgfTsKCiAgdmFyIGdsb2JhbHMgPSB7CiAgICAvLyBzaW5nbGUtY29tcG9uZW50IGxhYmVsbWFwCiAgICBidWZmZXI6IG51bGwsCiAgICBkaW1lbnNpb25zOiBbMCwgMCwgMF0sCiAgICBwcmV2UG9pbnQ6IG51bGwsCiAgICBzbGljaW5nTW9kZTogbnVsbCAvLyAyRCBvciAzRCBwYWludGluZwoKICB9OyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBmdW5jdGlvbiBoYW5kbGVQYWludFJlY3RhbmdsZShfcmVmKSB7CiAgICB2YXIgcG9pbnQxID0gX3JlZi5wb2ludDEsCiAgICAgICAgcG9pbnQyID0gX3JlZi5wb2ludDI7CgogICAgdmFyIF9wb2ludCA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10ocG9pbnQxLCAzKSwKICAgICAgICB4MSA9IF9wb2ludFswXSwKICAgICAgICB5MSA9IF9wb2ludFsxXSwKICAgICAgICB6MSA9IF9wb2ludFsyXTsKCiAgICB2YXIgX3BvaW50MiA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10ocG9pbnQyLCAzKSwKICAgICAgICB4MiA9IF9wb2ludDJbMF0sCiAgICAgICAgeTIgPSBfcG9pbnQyWzFdLAogICAgICAgIHoyID0gX3BvaW50MlsyXTsKCiAgICB2YXIgeHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4oeDEsIHgyKSwgMCk7CiAgICB2YXIgeGVuZCA9IE1hdGgubWluKE1hdGgubWF4KHgxLCB4MiksIGdsb2JhbHMuZGltZW5zaW9uc1swXSAtIDEpOwoKICAgIGlmICh4c3RhcnQgPD0geGVuZCkgewogICAgICB2YXIgeXN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4oeTEsIHkyKSwgMCk7CiAgICAgIHZhciB5ZW5kID0gTWF0aC5taW4oTWF0aC5tYXgoeTEsIHkyKSwgZ2xvYmFscy5kaW1lbnNpb25zWzFdIC0gMSk7CiAgICAgIHZhciB6c3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbih6MSwgejIpLCAwKTsKICAgICAgdmFyIHplbmQgPSBNYXRoLm1pbihNYXRoLm1heCh6MSwgejIpLCBnbG9iYWxzLmRpbWVuc2lvbnNbMl0gLSAxKTsKICAgICAgdmFyIGpTdHJpZGUgPSBnbG9iYWxzLmRpbWVuc2lvbnNbMF07CiAgICAgIHZhciBrU3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdICogZ2xvYmFscy5kaW1lbnNpb25zWzFdOwoKICAgICAgZm9yICh2YXIgayA9IHpzdGFydDsgayA8PSB6ZW5kOyBrKyspIHsKICAgICAgICBmb3IgKHZhciBqID0geXN0YXJ0OyBqIDw9IHllbmQ7IGorKykgewogICAgICAgICAgdmFyIGluZGV4ID0gaiAqIGpTdHJpZGUgKyBrICoga1N0cmlkZTsKICAgICAgICAgIGdsb2JhbHMuYnVmZmVyLmZpbGwoMSwgaW5kZXggKyB4c3RhcnQsIGluZGV4ICsgeGVuZCArIDEpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBjZW50ZXIgYW5kIHNjYWxlMyBhcmUgaW4gSUpLIGNvb3JkaW5hdGVzCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludEVsbGlwc2UoX3JlZjIpIHsKICAgIHZhciBjZW50ZXIgPSBfcmVmMi5jZW50ZXIsCiAgICAgICAgc2NhbGUzID0gX3JlZjIuc2NhbGUzOwoKICAgIHZhciByYWRpdXMzID0gX3RvQ29uc3VtYWJsZUFycmF5X19kZWZhdWx0WydkZWZhdWx0J10oc2NhbGUzKTsKCiAgICB2YXIgaW5kZXhDZW50ZXIgPSBjZW50ZXIubWFwKGZ1bmN0aW9uICh2YWwpIHsKICAgICAgcmV0dXJuIE1hdGgucm91bmQodmFsKTsKICAgIH0pOwogICAgdmFyIHNsaWNlQXhpcyA9IC0xOwoKICAgIGlmIChnbG9iYWxzLnNsaWNpbmdNb2RlICE9IG51bGwgJiYgZ2xvYmFscy5zbGljaW5nTW9kZSAhPT0gU2xpY2luZ01vZGUuTk9ORSkgewogICAgICBzbGljZUF4aXMgPSBnbG9iYWxzLnNsaWNpbmdNb2RlICUgMzsKICAgIH0KCiAgICB2YXIgeVN0cmlkZSA9IGdsb2JhbHMuZGltZW5zaW9uc1swXTsKICAgIHZhciB6U3RyaWRlID0gZ2xvYmFscy5kaW1lbnNpb25zWzBdICogZ2xvYmFscy5kaW1lbnNpb25zWzFdOwoKICAgIHZhciBfaW5kZXhDZW50ZXIgPSBfc2xpY2VkVG9BcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKGluZGV4Q2VudGVyLCAzKSwKICAgICAgICB4bWluID0gX2luZGV4Q2VudGVyWzBdLAogICAgICAgIHltaW4gPSBfaW5kZXhDZW50ZXJbMV0sCiAgICAgICAgem1pbiA9IF9pbmRleENlbnRlclsyXTsKCiAgICB2YXIgX2luZGV4Q2VudGVyMiA9IF9zbGljZWRUb0FycmF5X19kZWZhdWx0WydkZWZhdWx0J10oaW5kZXhDZW50ZXIsIDMpLAogICAgICAgIHhtYXggPSBfaW5kZXhDZW50ZXIyWzBdLAogICAgICAgIHltYXggPSBfaW5kZXhDZW50ZXIyWzFdLAogICAgICAgIHptYXggPSBfaW5kZXhDZW50ZXIyWzJdOwoKICAgIGlmIChzbGljZUF4aXMgIT09IDIpIHsKICAgICAgem1pbiA9IE1hdGgucm91bmQoTWF0aC5tYXgoaW5kZXhDZW50ZXJbMl0gLSByYWRpdXMzWzJdLCAwKSk7CiAgICAgIHptYXggPSBNYXRoLnJvdW5kKE1hdGgubWluKGluZGV4Q2VudGVyWzJdICsgcmFkaXVzM1syXSwgZ2xvYmFscy5kaW1lbnNpb25zWzJdIC0gMSkpOwogICAgfQoKICAgIGZvciAodmFyIHogPSB6bWluOyB6IDw9IHptYXg7IHorKykgewogICAgICB2YXIgZHogPSAwOwoKICAgICAgaWYgKHNsaWNlQXhpcyAhPT0gMikgewogICAgICAgIGR6ID0gKGluZGV4Q2VudGVyWzJdIC0geikgLyByYWRpdXMzWzJdOwogICAgICB9CgogICAgICB2YXIgZHpTcXVhcmVkID0gZHogKiBkejsKCiAgICAgIGlmIChkelNxdWFyZWQgPD0gMSkgewogICAgICAgIHZhciBheSA9IHJhZGl1czNbMV0gKiBNYXRoLnNxcnQoMSAtIGR6U3F1YXJlZCk7CgogICAgICAgIGlmIChzbGljZUF4aXMgIT09IDEpIHsKICAgICAgICAgIHltaW4gPSBNYXRoLnJvdW5kKE1hdGgubWF4KGluZGV4Q2VudGVyWzFdIC0gYXksIDApKTsKICAgICAgICAgIHltYXggPSBNYXRoLnJvdW5kKE1hdGgubWluKGluZGV4Q2VudGVyWzFdICsgYXksIGdsb2JhbHMuZGltZW5zaW9uc1sxXSAtIDEpKTsKICAgICAgICB9CgogICAgICAgIGZvciAodmFyIHkgPSB5bWluOyB5IDw9IHltYXg7IHkrKykgewogICAgICAgICAgdmFyIGR5ID0gMDsKCiAgICAgICAgICBpZiAoc2xpY2VBeGlzICE9PSAxKSB7CiAgICAgICAgICAgIGR5ID0gKGluZGV4Q2VudGVyWzFdIC0geSkgLyByYWRpdXMzWzFdOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBkeVNxdWFyZWQgPSBkeSAqIGR5OwoKICAgICAgICAgIGlmIChkeVNxdWFyZWQgKyBkelNxdWFyZWQgPD0gMSkgewogICAgICAgICAgICBpZiAoc2xpY2VBeGlzICE9PSAwKSB7CiAgICAgICAgICAgICAgdmFyIGF4ID0gcmFkaXVzM1swXSAqIE1hdGguc3FydCgxIC0gZHlTcXVhcmVkIC0gZHpTcXVhcmVkKTsKICAgICAgICAgICAgICB4bWluID0gTWF0aC5yb3VuZChNYXRoLm1heChpbmRleENlbnRlclswXSAtIGF4LCAwKSk7CiAgICAgICAgICAgICAgeG1heCA9IE1hdGgucm91bmQoTWF0aC5taW4oaW5kZXhDZW50ZXJbMF0gKyBheCwgZ2xvYmFscy5kaW1lbnNpb25zWzBdIC0gMSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoeG1pbiA8PSB4bWF4KSB7CiAgICAgICAgICAgICAgdmFyIGluZGV4ID0geSAqIHlTdHJpZGUgKyB6ICogelN0cmlkZTsKICAgICAgICAgICAgICBnbG9iYWxzLmJ1ZmZlci5maWxsKDEsIGluZGV4ICsgeG1pbiwgaW5kZXggKyB4bWF4ICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludChfcmVmMykgewogICAgdmFyIHBvaW50ID0gX3JlZjMucG9pbnQsCiAgICAgICAgcmFkaXVzID0gX3JlZjMucmFkaXVzOwoKICAgIGlmICghZ2xvYmFscy5wcmV2UG9pbnQpIHsKICAgICAgZ2xvYmFscy5wcmV2UG9pbnQgPSBwb2ludDsKICAgIH0gLy8gRERBIHBhcmFtcwoKCiAgICB2YXIgZGVsdGEgPSBbcG9pbnRbMF0gLSBnbG9iYWxzLnByZXZQb2ludFswXSwgcG9pbnRbMV0gLSBnbG9iYWxzLnByZXZQb2ludFsxXSwgcG9pbnRbMl0gLSBnbG9iYWxzLnByZXZQb2ludFsyXV07CiAgICB2YXIgaW5jID0gWzEsIDEsIDFdOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAgICAgIGlmIChkZWx0YVtpXSA8IDApIHsKICAgICAgICBkZWx0YVtpXSA9IC1kZWx0YVtpXTsKICAgICAgICBpbmNbaV0gPSAtMTsKICAgICAgfQogICAgfQoKICAgIHZhciBzdGVwID0gTWF0aC5tYXguYXBwbHkoTWF0aCwgZGVsdGEpOyAvLyBEREEKCiAgICB2YXIgdGhyZXNoID0gW3N0ZXAsIHN0ZXAsIHN0ZXBdOwoKICAgIHZhciBwdCA9IF90b0NvbnN1bWFibGVBcnJheV9fZGVmYXVsdFsnZGVmYXVsdCddKGdsb2JhbHMucHJldlBvaW50KTsKCiAgICBmb3IgKHZhciBzID0gMDsgcyA8PSBzdGVwOyBzKyspIHsKICAgICAgaGFuZGxlUGFpbnRFbGxpcHNlKHsKICAgICAgICBjZW50ZXI6IHB0LAogICAgICAgIHNjYWxlMzogcmFkaXVzCiAgICAgIH0pOwoKICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IDM7IGlpKyspIHsKICAgICAgICB0aHJlc2hbaWldIC09IGRlbHRhW2lpXTsKCiAgICAgICAgaWYgKHRocmVzaFtpaV0gPD0gMCkgewogICAgICAgICAgdGhyZXNoW2lpXSArPSBzdGVwOwogICAgICAgICAgcHRbaWldICs9IGluY1tpaV07CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZ2xvYmFscy5wcmV2UG9pbnQgPSBwb2ludDsKICB9IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKICBmdW5jdGlvbiBoYW5kbGVQYWludFRyaWFuZ2xlcyhfcmVmNCkgewogICAgdmFyIHRyaWFuZ2xlTGlzdCA9IF9yZWY0LnRyaWFuZ2xlTGlzdDsKICAgIC8vIGRlYnVnZ2VyOwogICAgdmFyIHRyaWFuZ2xlQ291bnQgPSBNYXRoLmZsb29yKHRyaWFuZ2xlTGlzdC5sZW5ndGggLyA5KTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyaWFuZ2xlQ291bnQ7IGkrKykgewogICAgICB2YXIgcG9pbnQwID0gdHJpYW5nbGVMaXN0LnN1YmFycmF5KDkgKiBpICsgMCwgOSAqIGkgKyAzKTsKICAgICAgdmFyIHBvaW50MSA9IHRyaWFuZ2xlTGlzdC5zdWJhcnJheSg5ICogaSArIDMsIDkgKiBpICsgNik7CiAgICAgIHZhciBwb2ludDIgPSB0cmlhbmdsZUxpc3Quc3ViYXJyYXkoOSAqIGkgKyA2LCA5ICogaSArIDkpOwogICAgICB2YXIgdjEgPSBbMCwgMCwgMF07CiAgICAgIHZhciB2MiA9IFswLCAwLCAwXTsKICAgICAgZ2xNYXRyaXgudmVjMy5zdWJ0cmFjdCh2MSwgcG9pbnQxLCBwb2ludDApOwogICAgICBnbE1hdHJpeC52ZWMzLnN1YnRyYWN0KHYyLCBwb2ludDIsIHBvaW50MCk7CiAgICAgIHZhciBzdGVwMSA9IFswLCAwLCAwXTsKICAgICAgdmFyIG51bVN0ZXAxID0gMiAqIE1hdGgubWF4KE1hdGguYWJzKHYxWzBdKSwgTWF0aC5hYnModjFbMV0pLCBNYXRoLmFicyh2MVsyXSkpOwogICAgICBnbE1hdHJpeC52ZWMzLnNjYWxlKHN0ZXAxLCB2MSwgMSAvIG51bVN0ZXAxKTsKICAgICAgdmFyIHN0ZXAyID0gWzAsIDAsIDBdOwogICAgICB2YXIgbnVtU3RlcDIgPSAyICogTWF0aC5tYXgoTWF0aC5hYnModjJbMF0pLCBNYXRoLmFicyh2MlsxXSksIE1hdGguYWJzKHYyWzJdKSk7CiAgICAgIGdsTWF0cml4LnZlYzMuc2NhbGUoc3RlcDIsIHYyLCAxIC8gbnVtU3RlcDIpOwogICAgICB2YXIgalN0cmlkZSA9IGdsb2JhbHMuZGltZW5zaW9uc1swXTsKICAgICAgdmFyIGtTdHJpZGUgPSBnbG9iYWxzLmRpbWVuc2lvbnNbMF0gKiBnbG9iYWxzLmRpbWVuc2lvbnNbMV07CgogICAgICBmb3IgKHZhciB1ID0gMDsgdSA8PSBudW1TdGVwMSArIDE7IHUrKykgewogICAgICAgIHZhciBtYXhWID0gbnVtU3RlcDIgLSB1ICogKG51bVN0ZXAyIC8gbnVtU3RlcDEpOwoKICAgICAgICBmb3IgKHZhciB2ID0gMDsgdiA8PSBtYXhWICsgMTsgdisrKSB7CiAgICAgICAgICB2YXIgcG9pbnQgPSBfdG9Db25zdW1hYmxlQXJyYXlfX2RlZmF1bHRbJ2RlZmF1bHQnXShwb2ludDApOwoKICAgICAgICAgIGdsTWF0cml4LnZlYzMuc2NhbGVBbmRBZGQocG9pbnQsIHBvaW50LCBzdGVwMSwgdSk7CiAgICAgICAgICBnbE1hdHJpeC52ZWMzLnNjYWxlQW5kQWRkKHBvaW50LCBwb2ludCwgc3RlcDIsIHYpOwogICAgICAgICAgcG9pbnRbMF0gPSBNYXRoLnJvdW5kKHBvaW50WzBdKTsKICAgICAgICAgIHBvaW50WzFdID0gTWF0aC5yb3VuZChwb2ludFsxXSk7CiAgICAgICAgICBwb2ludFsyXSA9IE1hdGgucm91bmQocG9pbnRbMl0pOwoKICAgICAgICAgIGlmIChwb2ludFswXSA+PSAwICYmIHBvaW50WzBdIDwgZ2xvYmFscy5kaW1lbnNpb25zWzBdICYmIHBvaW50WzFdID49IDAgJiYgcG9pbnRbMV0gPCBnbG9iYWxzLmRpbWVuc2lvbnNbMV0gJiYgcG9pbnRbMl0gPj0gMCAmJiBwb2ludFsyXSA8IGdsb2JhbHMuZGltZW5zaW9uc1syXSkgewogICAgICAgICAgICBnbG9iYWxzLmJ1ZmZlcltwb2ludFswXSArIGpTdHJpZGUgKiBwb2ludFsxXSArIGtTdHJpZGUgKiBwb2ludFsyXV0gPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgogIHJlZ2lzdGVyV2Vid29ya2VyX19kZWZhdWx0WydkZWZhdWx0J10oKS5vcGVyYXRpb24oJ3N0YXJ0JywgZnVuY3Rpb24gKF9yZWY1KSB7CiAgICB2YXIgYnVmZmVyVHlwZSA9IF9yZWY1LmJ1ZmZlclR5cGUsCiAgICAgICAgZGltZW5zaW9ucyA9IF9yZWY1LmRpbWVuc2lvbnMsCiAgICAgICAgc2xpY2luZ01vZGUgPSBfcmVmNS5zbGljaW5nTW9kZTsKCiAgICBpZiAoIWdsb2JhbHMuYnVmZmVyKSB7CiAgICAgIHZhciBidWZmZXJTaXplID0gZGltZW5zaW9uc1swXSAqIGRpbWVuc2lvbnNbMV0gKiBkaW1lbnNpb25zWzJdOwogICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgKi8KCiAgICAgIGdsb2JhbHMuYnVmZmVyID0gbmV3IHNlbGZbYnVmZmVyVHlwZV0oYnVmZmVyU2l6ZSk7CiAgICAgIGdsb2JhbHMuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7CiAgICAgIGdsb2JhbHMucHJldlBvaW50ID0gbnVsbDsKICAgICAgZ2xvYmFscy5zbGljaW5nTW9kZSA9IHNsaWNpbmdNb2RlOwogICAgfQogIH0pLm9wZXJhdGlvbigncGFpbnQnLCBoYW5kbGVQYWludCkub3BlcmF0aW9uKCdwYWludFJlY3RhbmdsZScsIGhhbmRsZVBhaW50UmVjdGFuZ2xlKS5vcGVyYXRpb24oJ3BhaW50RWxsaXBzZScsIGhhbmRsZVBhaW50RWxsaXBzZSkub3BlcmF0aW9uKCdwYWludFRyaWFuZ2xlcycsIGhhbmRsZVBhaW50VHJpYW5nbGVzKS5vcGVyYXRpb24oJ2VuZCcsIGZ1bmN0aW9uICgpIHsKICAgIHZhciByZXNwb25zZSA9IG5ldyByZWdpc3RlcldlYndvcmtlcl9fZGVmYXVsdFsnZGVmYXVsdCddLlRyYW5zZmVyYWJsZVJlc3BvbnNlKGdsb2JhbHMuYnVmZmVyLmJ1ZmZlciwgW2dsb2JhbHMuYnVmZmVyLmJ1ZmZlcl0pOwogICAgZ2xvYmFscy5idWZmZXIgPSBudWxsOwogICAgcmV0dXJuIHJlc3BvbnNlOwogIH0pOwoKfShfdG9Db25zdW1hYmxlQXJyYXksIF9zbGljZWRUb0FycmF5LCByZWdpc3RlcldlYndvcmtlciwgZ2xNYXRyaXgpKTsKCg==', null, false);
|
|
4
4
|
/* eslint-enable */
|
|
5
5
|
|
|
6
6
|
export { WorkerFactory as W };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { c as createBase64WorkerFactory } from '../../../../rollup-plugin-web-worker-loader__helper__browser__createBase64WorkerFactory.js';
|
|
2
2
|
|
|
3
|
-
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICd1c2Ugc3RyaWN0JzsKCiAgdmFyIHJlZ2lzdGVyID0ge2V4cG9ydHM6IHt9fTsKCiAgdmFyIF9jcmVhdGVDbGFzcyQxID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrJDEoaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOyB9IH0KCiAgdmFyIFRpbnlFbWl0dGVyJDEgPSBmdW5jdGlvbiAoKSB7CiAgICBmdW5jdGlvbiBUaW55RW1pdHRlcigpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrJDEodGhpcywgVGlueUVtaXR0ZXIpOwoKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdfX2xpc3RlbmVycycsIHsKICAgICAgICB2YWx1ZToge30sCiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsCiAgICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICAgIH0pOwogICAgfQoKICAgIF9jcmVhdGVDbGFzcyQxKFRpbnlFbWl0dGVyLCBbewogICAgICBrZXk6ICdlbWl0JywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIGVtaXQoZXZlbnROYW1lKSB7CiAgICAgICAgaWYgKCF0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHJldHVybiB0aGlzOwoKICAgICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHsKICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgIH0KCiAgICAgICAgdmFyIF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSB0cnVlOwogICAgICAgIHZhciBfZGlkSXRlcmF0b3JFcnJvciA9IGZhbHNlOwogICAgICAgIHZhciBfaXRlcmF0b3JFcnJvciA9IHVuZGVmaW5lZDsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZvciAodmFyIF9pdGVyYXRvciA9IHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXVtTeW1ib2wuaXRlcmF0b3JdKCksIF9zdGVwOyAhKF9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gPSAoX3N0ZXAgPSBfaXRlcmF0b3IubmV4dCgpKS5kb25lKTsgX2l0ZXJhdG9yTm9ybWFsQ29tcGxldGlvbiA9IHRydWUpIHsKICAgICAgICAgICAgdmFyIGhhbmRsZXIgPSBfc3RlcC52YWx1ZTsKCiAgICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmdzKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIF9kaWRJdGVyYXRvckVycm9yID0gdHJ1ZTsKICAgICAgICAgIF9pdGVyYXRvckVycm9yID0gZXJyOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIV9pdGVyYXRvck5vcm1hbENvbXBsZXRpb24gJiYgX2l0ZXJhdG9yLnJldHVybikgewogICAgICAgICAgICAgIF9pdGVyYXRvci5yZXR1cm4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKF9kaWRJdGVyYXRvckVycm9yKSB7CiAgICAgICAgICAgICAgdGhyb3cgX2l0ZXJhdG9yRXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LCB7CiAgICAgIGtleTogJ29uY2UnLAogICAgICB2YWx1ZTogZnVuY3Rpb24gb25jZShldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICB2YXIgb25jZSA9IGZ1bmN0aW9uIG9uY2UoKSB7CiAgICAgICAgICBfdGhpcy5vZmYoZXZlbnROYW1lLCBvbmNlKTsKICAgICAgICAgIGhhbmRsZXIuYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpOwogICAgICAgIH07CgogICAgICAgIHJldHVybiB0aGlzLm9uKGV2ZW50TmFtZSwgb25jZSk7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAnb24nLAogICAgICB2YWx1ZTogZnVuY3Rpb24gb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7CiAgICAgICAgaWYgKCF0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0pIHRoaXMuX19saXN0ZW5lcnNbZXZlbnROYW1lXSA9IFtdOwoKICAgICAgICB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0ucHVzaChoYW5kbGVyKTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH0sIHsKICAgICAga2V5OiAnb2ZmJywKICAgICAgdmFsdWU6IGZ1bmN0aW9uIG9mZihldmVudE5hbWUsIGhhbmRsZXIpIHsKICAgICAgICBpZiAoaGFuZGxlcikgdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdID0gdGhpcy5fX2xpc3RlbmVyc1tldmVudE5hbWVdLmZpbHRlcihmdW5jdGlvbiAoaCkgewogICAgICAgICAgcmV0dXJuIGggIT09IGhhbmRsZXI7CiAgICAgICAgfSk7ZWxzZSB0aGlzLl9fbGlzdGVuZXJzW2V2ZW50TmFtZV0gPSBbXTsKCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0KICAgIH1dKTsKCiAgICByZXR1cm4gVGlueUVtaXR0ZXI7CiAgfSgpOwoKICB2YXIgdGlueUVtaXR0ZXIgPSBUaW55RW1pdHRlciQxOwoKICB2YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKCJ2YWx1ZSIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTsKCiAgdmFyIF9nZXQgPSBmdW5jdGlvbiBnZXQob2JqZWN0LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpIHsgaWYgKG9iamVjdCA9PT0gbnVsbCkgb2JqZWN0ID0gRnVuY3Rpb24ucHJvdG90eXBlOyB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBwcm9wZXJ0eSk7IGlmIChkZXNjID09PSB1bmRlZmluZWQpIHsgdmFyIHBhcmVudCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpOyBpZiAocGFyZW50ID09PSBudWxsKSB7IHJldHVybiB1bmRlZmluZWQ7IH0gZWxzZSB7IHJldHVybiBnZXQocGFyZW50LCBwcm9wZXJ0eSwgcmVjZWl2ZXIpOyB9IH0gZWxzZSBpZiAoInZhbHVlIiBpbiBkZXNjKSB7IHJldHVybiBkZXNjLnZhbHVlOyB9IGVsc2UgeyB2YXIgZ2V0dGVyID0gZGVzYy5nZXQ7IGlmIChnZXR0ZXIgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9IHJldHVybiBnZXR0ZXIuY2FsbChyZWNlaXZlcik7IH0gfTsKCiAgdmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICJzeW1ib2wiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsKCiAgZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSB7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gQXJyYXkoYXJyLmxlbmd0aCk7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfSBlbHNlIHsgcmV0dXJuIEFycmF5LmZyb20oYXJyKTsgfSB9CgogIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIik7IH0gfQoKICBmdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpOyB9IHJldHVybiBjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gIm9iamVjdCIgfHwgdHlwZW9mIGNhbGwgPT09ICJmdW5jdGlvbiIpID8gY2FsbCA6IHNlbGY7IH0KCiAgZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gImZ1bmN0aW9uIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH0KCiAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH0KCiAgdmFyIFRpbnlFbWl0dGVyID0gdGlueUVtaXR0ZXI7CgogIHZhciBNRVNTQUdFX1JFU1VMVCA9IDA7CiAgdmFyIE1FU1NBR0VfRVZFTlQgPSAxOwoKICB2YXIgUkVTVUxUX0VSUk9SID0gMDsKICB2YXIgUkVTVUxUX1NVQ0NFU1MgPSAxOwoKICB2YXIgREVGQVVMVF9IQU5ETEVSID0gJ21haW4nOwoKICB2YXIgaXNQcm9taXNlID0gZnVuY3Rpb24gaXNQcm9taXNlKG8pIHsKICAgIHJldHVybiAodHlwZW9mIG8gPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG8pKSA9PT0gJ29iamVjdCcgJiYgbyAhPT0gbnVsbCAmJiB0eXBlb2Ygby50aGVuID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvLmNhdGNoID09PSAnZnVuY3Rpb24nOwogIH07CgogIGZ1bmN0aW9uIFJlZ2lzdGVyUHJvbWlzZShmbikgewogICAgdmFyIGhhbmRsZXJzID0gX2RlZmluZVByb3BlcnR5KHt9LCBERUZBVUxUX0hBTkRMRVIsIGZuKTsKICAgIHZhciBzZW5kUG9zdE1lc3NhZ2UgPSBzZWxmLnBvc3RNZXNzYWdlLmJpbmQoc2VsZik7CgogICAgdmFyIHNlcnZlciA9IG5ldyAoZnVuY3Rpb24gKF9UaW55RW1pdHRlcikgewogICAgICBfaW5oZXJpdHMoV29ya2VyUmVnaXN0ZXIsIF9UaW55RW1pdHRlcik7CgogICAgICBmdW5jdGlvbiBXb3JrZXJSZWdpc3RlcigpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ya2VyUmVnaXN0ZXIpOwoKICAgICAgICByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKFdvcmtlclJlZ2lzdGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIpKS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTsKICAgICAgfQoKICAgICAgX2NyZWF0ZUNsYXNzKFdvcmtlclJlZ2lzdGVyLCBbewogICAgICAgIGtleTogJ2VtaXQnLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbWl0KGV2ZW50TmFtZSkgewogICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICAgICAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PSAxICYmIGFyZ3NbMF0gaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9LCBhcmdzWzBdLnRyYW5zZmVyYWJsZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZW5kUG9zdE1lc3NhZ2UoeyBldmVudE5hbWU6IGV2ZW50TmFtZSwgYXJnczogYXJncyB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogJ2VtaXRMb2NhbGx5JywKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZW1pdExvY2FsbHkoZXZlbnROYW1lKSB7CiAgICAgICAgICB2YXIgX2dldDI7CgogICAgICAgICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykgewogICAgICAgICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogICAgICAgICAgfQoKICAgICAgICAgIChfZ2V0MiA9IF9nZXQoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoV29ya2VyUmVnaXN0ZXIucHJvdG90eXBlKSwgJ2VtaXQnLCB0aGlzKSkuY2FsbC5hcHBseShfZ2V0MiwgW3RoaXMsIGV2ZW50TmFtZV0uY29uY2F0KGFyZ3MpKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICdvcGVyYXRpb24nLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBvcGVyYXRpb24obmFtZSwgaGFuZGxlcikgewogICAgICAgICAgaGFuZGxlcnNbbmFtZV0gPSBoYW5kbGVyOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gV29ya2VyUmVnaXN0ZXI7CiAgICB9KFRpbnlFbWl0dGVyKSkoKTsKCiAgICB2YXIgcnVuID0gZnVuY3Rpb24gcnVuKG1lc3NhZ2VJZCwgcGF5bG9hZCwgaGFuZGxlck5hbWUpIHsKCiAgICAgIHZhciBvblN1Y2Nlc3MgPSBmdW5jdGlvbiBvblN1Y2Nlc3MocmVzdWx0KSB7CiAgICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQgaW5zdGFuY2VvZiBUcmFuc2ZlcmFibGVSZXNwb25zZSkgewogICAgICAgICAgc2VuZFJlc3VsdChtZXNzYWdlSWQsIFJFU1VMVF9TVUNDRVNTLCByZXN1bHQucGF5bG9hZCwgcmVzdWx0LnRyYW5zZmVyYWJsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfU1VDQ0VTUywgcmVzdWx0KTsKICAgICAgICB9CiAgICAgIH07CgogICAgICB2YXIgb25FcnJvciA9IGZ1bmN0aW9uIG9uRXJyb3IoZSkgewogICAgICAgIHNlbmRSZXN1bHQobWVzc2FnZUlkLCBSRVNVTFRfRVJST1IsIHsKICAgICAgICAgIG1lc3NhZ2U6IGUubWVzc2FnZSwKICAgICAgICAgIHN0YWNrOiBlLnN0YWNrCiAgICAgICAgfSk7CiAgICAgIH07CgogICAgICB0cnkgewogICAgICAgIHZhciByZXN1bHQgPSBydW5GbihtZXNzYWdlSWQsIHBheWxvYWQsIGhhbmRsZXJOYW1lKTsKICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHsKICAgICAgICAgIHJlc3VsdC50aGVuKG9uU3VjY2VzcykuY2F0Y2gob25FcnJvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9uU3VjY2VzcyhyZXN1bHQpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIG9uRXJyb3IoZSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIHJ1bkZuID0gZnVuY3Rpb24gcnVuRm4obWVzc2FnZUlkLCBwYXlsb2FkLCBoYW5kbGVyTmFtZSkgewogICAgICB2YXIgaGFuZGxlciA9IGhhbmRsZXJzW2hhbmRsZXJOYW1lIHx8IERFRkFVTFRfSEFORExFUl07CiAgICAgIGlmICghaGFuZGxlcikgdGhyb3cgbmV3IEVycm9yKCdOb3QgZm91bmQgaGFuZGxlciBmb3IgdGhpcyByZXF1ZXN0Jyk7CgogICAgICByZXR1cm4gaGFuZGxlcihwYXlsb2FkLCBzZW5kRXZlbnQuYmluZChudWxsLCBtZXNzYWdlSWQpKTsKICAgIH07CgogICAgdmFyIHNlbmRSZXN1bHQgPSBmdW5jdGlvbiBzZW5kUmVzdWx0KG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZCkgewogICAgICB2YXIgdHJhbnNmZXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBbXTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9SRVNVTFQsIG1lc3NhZ2VJZCwgc3VjY2VzcywgcGF5bG9hZF0sIHRyYW5zZmVyYWJsZSk7CiAgICB9OwoKICAgIHZhciBzZW5kRXZlbnQgPSBmdW5jdGlvbiBzZW5kRXZlbnQobWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWQpIHsKICAgICAgaWYgKCFldmVudE5hbWUpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIGlzIHJlcXVpcmVkJyk7CgogICAgICBpZiAodHlwZW9mIGV2ZW50TmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBFcnJvcignZXZlbnROYW1lIHNob3VsZCBiZSBzdHJpbmcnKTsKCiAgICAgIHNlbmRQb3N0TWVzc2FnZShbTUVTU0FHRV9FVkVOVCwgbWVzc2FnZUlkLCBldmVudE5hbWUsIHBheWxvYWRdKTsKICAgIH07CgogICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgdmFyIGRhdGEgPSBfcmVmLmRhdGE7CgogICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkgewogICAgICAgIHJ1bi5hcHBseSh1bmRlZmluZWQsIF90b0NvbnN1bWFibGVBcnJheShkYXRhKSk7CiAgICAgIH0gZWxzZSBpZiAoZGF0YSAmJiBkYXRhLmV2ZW50TmFtZSkgewogICAgICAgIHNlcnZlci5lbWl0TG9jYWxseS5hcHBseShzZXJ2ZXIsIFtkYXRhLmV2ZW50TmFtZV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShkYXRhLmFyZ3MpKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBzZXJ2ZXI7CiAgfQoKICB2YXIgVHJhbnNmZXJhYmxlUmVzcG9uc2UgPSBmdW5jdGlvbiBUcmFuc2ZlcmFibGVSZXNwb25zZShwYXlsb2FkLCB0cmFuc2ZlcmFibGUpIHsKICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBUcmFuc2ZlcmFibGVSZXNwb25zZSk7CgogICAgdGhpcy5wYXlsb2FkID0gcGF5bG9hZDsKICAgIHRoaXMudHJhbnNmZXJhYmxlID0gdHJhbnNmZXJhYmxlOwogIH07CgogIHJlZ2lzdGVyLmV4cG9ydHMgPSBSZWdpc3RlclByb21pc2U7CiAgcmVnaXN0ZXIuZXhwb3J0cy5UcmFuc2ZlcmFibGVSZXNwb25zZSA9IFRyYW5zZmVyYWJsZVJlc3BvbnNlOwoKICB2YXIgcmVnaXN0ZXJXZWJ3b3JrZXIgPSByZWdpc3Rlci5leHBvcnRzOwoKICAvKiBlc2xpbnQtZGlzYWJsZSAqLwogIC8vIHByZXR0aWVyLWlnbm9yZQoKICByZWdpc3RlcldlYndvcmtlcihmdW5jdGlvbiAobWVzc2FnZSwgZW1pdCkgewogICAgdmFyIGFycmF5ID0gbWVzc2FnZS5hcnJheTsKICAgIHZhciBtaW4gPSBtZXNzYWdlLm1pbjsKICAgIHZhciBtYXggPSBtZXNzYWdlLm1heDsKICAgIHZhciBvZmZzZXQgPSBtZXNzYWdlLmNvbXBvbmVudCB8fCAwOwogICAgdmFyIHN0ZXAgPSBtZXNzYWdlLm51bWJlck9mQ29tcG9uZW50cyB8fCAxOwogICAgdmFyIG51bWJlck9mQmlucyA9IG1lc3NhZ2UubnVtYmVyT2ZCaW5zOwogICAgdmFyIGRlbHRhID0gbWF4IC0gbWluOwogICAgdmFyIGhpc3RvZ3JhbSA9IG5ldyBGbG9hdDMyQXJyYXkobnVtYmVyT2ZCaW5zKTsKICAgIGhpc3RvZ3JhbS5maWxsKDApOwogICAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDsKCiAgICBmb3IgKHZhciBpID0gb2Zmc2V0OyBpIDwgbGVuOyBpICs9IHN0ZXApIHsKICAgICAgdmFyIGlkeCA9IE1hdGguZmxvb3IoKG51bWJlck9mQmlucyAtIDEpICogKE51bWJlcihhcnJheVtpXSkgLSBtaW4pIC8gZGVsdGEpOwogICAgICBoaXN0b2dyYW1baWR4XSArPSAxOwogICAgfQoKICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IHJlZ2lzdGVyV2Vid29ya2VyLlRyYW5zZmVyYWJsZVJlc3BvbnNlKGhpc3RvZ3JhbSwgW2hpc3RvZ3JhbS5idWZmZXJdKSk7CiAgfSk7Cgp9KCkpOwoK', null, false);
|
|
3
|
+
var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKHJlZ2lzdGVyV2Vid29ya2VyKSB7CiAgJ3VzZSBzdHJpY3QnOwoKICBmdW5jdGlvbiBfaW50ZXJvcERlZmF1bHRMZWdhY3kgKGUpIHsgcmV0dXJuIGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICdkZWZhdWx0JyBpbiBlID8gZSA6IHsgJ2RlZmF1bHQnOiBlIH07IH0KCiAgdmFyIHJlZ2lzdGVyV2Vid29ya2VyX19kZWZhdWx0ID0gLyojX19QVVJFX18qL19pbnRlcm9wRGVmYXVsdExlZ2FjeShyZWdpc3RlcldlYndvcmtlcik7CgogIC8qIGVzbGludC1kaXNhYmxlICovCiAgLy8gcHJldHRpZXItaWdub3JlCgogIHJlZ2lzdGVyV2Vid29ya2VyX19kZWZhdWx0WydkZWZhdWx0J10oZnVuY3Rpb24gKG1lc3NhZ2UsIGVtaXQpIHsKICAgIHZhciBhcnJheSA9IG1lc3NhZ2UuYXJyYXk7CiAgICB2YXIgbWluID0gbWVzc2FnZS5taW47CiAgICB2YXIgbWF4ID0gbWVzc2FnZS5tYXg7CiAgICB2YXIgb2Zmc2V0ID0gbWVzc2FnZS5jb21wb25lbnQgfHwgMDsKICAgIHZhciBzdGVwID0gbWVzc2FnZS5udW1iZXJPZkNvbXBvbmVudHMgfHwgMTsKICAgIHZhciBudW1iZXJPZkJpbnMgPSBtZXNzYWdlLm51bWJlck9mQmluczsKICAgIHZhciBkZWx0YSA9IG1heCAtIG1pbjsKICAgIHZhciBoaXN0b2dyYW0gPSBuZXcgRmxvYXQzMkFycmF5KG51bWJlck9mQmlucyk7CiAgICBoaXN0b2dyYW0uZmlsbCgwKTsKICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7CgogICAgZm9yICh2YXIgaSA9IG9mZnNldDsgaSA8IGxlbjsgaSArPSBzdGVwKSB7CiAgICAgIHZhciBpZHggPSBNYXRoLmZsb29yKChudW1iZXJPZkJpbnMgLSAxKSAqIChOdW1iZXIoYXJyYXlbaV0pIC0gbWluKSAvIGRlbHRhKTsKICAgICAgaGlzdG9ncmFtW2lkeF0gKz0gMTsKICAgIH0KCiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyByZWdpc3RlcldlYndvcmtlcl9fZGVmYXVsdFsnZGVmYXVsdCddLlRyYW5zZmVyYWJsZVJlc3BvbnNlKGhpc3RvZ3JhbSwgW2hpc3RvZ3JhbS5idWZmZXJdKSk7CiAgfSk7Cgp9KHJlZ2lzdGVyV2Vid29ya2VyKSk7Cgo=', null, false);
|
|
4
4
|
/* eslint-enable */
|
|
5
5
|
|
|
6
6
|
export { WorkerFactory as W };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kitware/vtk.js",
|
|
3
|
-
"version": "20.1
|
|
3
|
+
"version": "20.2.1",
|
|
4
4
|
"description": "Visualization Toolkit for the Web",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"3d",
|
|
@@ -104,11 +104,11 @@
|
|
|
104
104
|
"prettier": "2.4.0",
|
|
105
105
|
"process": "0.11.10",
|
|
106
106
|
"rollup": "2.56.3",
|
|
107
|
+
"rollup-plugin-auto-external": "2.0.0",
|
|
107
108
|
"rollup-plugin-copy": "3.4.0",
|
|
108
109
|
"rollup-plugin-ignore": "1.0.10",
|
|
109
110
|
"rollup-plugin-polyfill-node": "0.7.0",
|
|
110
111
|
"rollup-plugin-postcss": "4.0.1",
|
|
111
|
-
"rollup-plugin-re": "1.0.7",
|
|
112
112
|
"rollup-plugin-string": "3.0.0",
|
|
113
113
|
"rollup-plugin-svgo": "1.1.0",
|
|
114
114
|
"rollup-plugin-web-worker-loader": "1.6.1",
|