@kitware/vtk.js 20.1.4 → 20.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/Common/Core/Base64.d.ts +14 -2
  2. package/Common/Core/Base64.js +31 -2
  3. package/Common/Core/Math/index.js +1 -1
  4. package/Common/Core/Math.d.ts +168 -158
  5. package/Common/Core/Math.js +1 -1
  6. package/Common/Core/MatrixBuilder.js +39 -41
  7. package/Common/DataModel/Box.d.ts +73 -0
  8. package/Common/DataModel/ImageData.js +12 -14
  9. package/Common/Transform/LandmarkTransform.js +6 -7
  10. package/Filters/General/PaintFilter/PaintFilter.worker.js +8 -8
  11. package/Filters/General/PaintFilter.js +11 -11
  12. package/Filters/Sources/CubeSource.d.ts +7 -6
  13. package/Filters/Sources/PlaneSource.js +12 -13
  14. package/IO/Core/BinaryHelper.js +2 -4
  15. package/IO/Core/DataAccessHelper/HtmlDataAccessHelper.js +1 -1
  16. package/IO/Core/DataAccessHelper/HttpDataAccessHelper.js +1 -1
  17. package/IO/Core/DataAccessHelper/JSZipDataAccessHelper.js +2 -2
  18. package/IO/Core/ZipMultiDataSetReader.js +1 -1
  19. package/IO/Core/ZipMultiDataSetWriter.js +1 -1
  20. package/IO/Geometry/STLWriter.js +4 -4
  21. package/IO/Misc/OBJReader.d.ts +9 -8
  22. package/IO/Misc/SkyboxReader.js +1 -1
  23. package/IO/XML/XMLReader.js +3 -4
  24. package/IO/XML/XMLWriter.js +5 -6
  25. package/Imaging/Core/ImageReslice.js +18 -19
  26. package/Interaction/Manipulators/MouseCameraAxisRotateManipulator.js +27 -28
  27. package/Interaction/Manipulators/MouseCameraTrackballRollManipulator.js +8 -9
  28. package/Interaction/Manipulators/MouseCameraTrackballRotateManipulator.js +14 -15
  29. package/Interaction/Manipulators/MouseCameraUnicamRotateManipulator.js +12 -13
  30. package/Interaction/Widgets/ImageCroppingRegionsWidget.js +5 -6
  31. package/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +1 -1
  32. package/Interaction/Widgets/PiecewiseGaussianWidget.js +2 -2
  33. package/Interaction/Widgets/ResliceCursor/ResliceCursorRepresentation.js +8 -9
  34. package/Rendering/Core/Actor.js +3 -4
  35. package/Rendering/Core/AnnotatedCubeActor.d.ts +5 -6
  36. package/Rendering/Core/Camera.js +81 -84
  37. package/Rendering/Core/CellPicker.js +2 -2
  38. package/Rendering/Core/CubeAxesActor.js +37 -34
  39. package/Rendering/Core/Follower.js +20 -21
  40. package/Rendering/Core/Glyph3DMapper.js +30 -32
  41. package/Rendering/Core/ImageMapper.js +2 -2
  42. package/Rendering/Core/ImageSlice.js +5 -6
  43. package/Rendering/Core/Picker.d.ts +5 -5
  44. package/Rendering/Core/Picker.js +5 -6
  45. package/Rendering/Core/PixelSpaceCallbackMapper.js +3 -4
  46. package/Rendering/Core/Prop3D.js +24 -25
  47. package/Rendering/Core/Renderer.js +11 -12
  48. package/Rendering/Core/ScalarBarActor.js +37 -34
  49. package/Rendering/Core/Volume.js +3 -4
  50. package/Rendering/OpenGL/Actor.js +9 -10
  51. package/Rendering/OpenGL/Camera.js +8 -9
  52. package/Rendering/OpenGL/CellArrayBufferObject.js +6 -8
  53. package/Rendering/OpenGL/Glyph3DMapper.js +8 -9
  54. package/Rendering/OpenGL/ImageMapper.js +7 -7
  55. package/Rendering/OpenGL/ImageSlice.js +4 -4
  56. package/Rendering/OpenGL/PolyDataMapper.js +11 -13
  57. package/Rendering/OpenGL/RenderWindow.d.ts +21 -35
  58. package/Rendering/OpenGL/ShaderCache.js +1 -1
  59. package/Rendering/OpenGL/Skybox.js +4 -5
  60. package/Rendering/OpenGL/SphereMapper.js +2 -2
  61. package/Rendering/OpenGL/StickMapper.js +3 -4
  62. package/Rendering/OpenGL/SurfaceLIC/SurfaceLICInterface.js +1 -1
  63. package/Rendering/OpenGL/Volume.js +6 -7
  64. package/Rendering/OpenGL/VolumeMapper.js +47 -49
  65. package/Rendering/OpenGL/glsl/vtkPolyDataFS.glsl.js +1 -1
  66. package/Rendering/WebGPU/Actor.js +8 -8
  67. package/Rendering/WebGPU/Camera.js +8 -8
  68. package/Rendering/WebGPU/ImageMapper.js +18 -19
  69. package/Rendering/WebGPU/ImageSlice.js +9 -9
  70. package/Rendering/WebGPU/PolyDataMapper.js +3 -4
  71. package/Rendering/WebGPU/Renderer.js +6 -7
  72. package/Rendering/WebGPU/Volume.js +3 -3
  73. package/Rendering/WebGPU/VolumePassFSQ.js +10 -10
  74. package/ThirdParty/index.js +2 -2
  75. package/Widgets/Manipulators/TrackballManipulator.js +5 -6
  76. package/Widgets/Representations/ArrowHandleRepresentation.js +10 -12
  77. package/Widgets/Representations/CircleContextRepresentation.js +4 -5
  78. package/Widgets/Representations/RectangleContextRepresentation.js +3 -3
  79. package/Widgets/Widgets3D/EllipseWidget/behavior.js +5 -5
  80. package/Widgets/Widgets3D/ImageCroppingWidget/helpers.js +6 -8
  81. package/Widgets/Widgets3D/PaintWidget/behavior.js +2 -2
  82. package/Widgets/Widgets3D/ResliceCursorWidget.js +6 -7
  83. package/Widgets/Widgets3D/ShapeWidget/behavior.js +10 -10
  84. package/Widgets/Widgets3D/SplineWidget/behavior.js +5 -5
  85. package/_virtual/rollup-plugin-worker-loader__module_Sources/Filters/General/PaintFilter/PaintFilter.worker.js +1 -1
  86. package/_virtual/rollup-plugin-worker-loader__module_Sources/Interaction/Widgets/PiecewiseGaussianWidget/ComputeHistogram.worker.js +1 -1
  87. package/package.json +2 -2
  88. package/types.d.ts +1 -0
  89. package/vtk.js +2 -2
  90. package/_vendor/base64-js/index.js_commonjs-exports.js +0 -1
  91. package/_vendor/blueimp-md5/js/md5.js_commonjs-module.js +0 -3
  92. package/_vendor/define-properties/index.js_commonjs-proxy.js +0 -1
  93. package/_vendor/globalthis/implementation.browser.js_commonjs-module.js +0 -3
  94. package/_vendor/globalthis/implementation.browser.js_commonjs-proxy.js +0 -1
  95. package/_vendor/globalthis/polyfill.js_commonjs-proxy.js +0 -1
  96. package/_vendor/globalthis/shim.js_commonjs-proxy.js +0 -2
  97. package/_vendor/jszip/dist/jszip.min.js_commonjs-module.js +0 -3
  98. package/_vendor/object-keys/implementation.js_commonjs-proxy.js +0 -1
  99. package/_vendor/object-keys/index.js_commonjs-proxy.js +0 -1
  100. package/_vendor/object-keys/isArguments.js_commonjs-proxy.js +0 -1
  101. package/_vendor/seedrandom/lib/alea.js_commonjs-module.js +0 -3
  102. package/_vendor/seedrandom/lib/alea.js_commonjs-proxy.js +0 -1
  103. package/_vendor/seedrandom/lib/tychei.js_commonjs-module.js +0 -3
  104. package/_vendor/seedrandom/lib/tychei.js_commonjs-proxy.js +0 -1
  105. package/_vendor/seedrandom/lib/xor128.js_commonjs-module.js +0 -3
  106. package/_vendor/seedrandom/lib/xor128.js_commonjs-proxy.js +0 -1
  107. package/_vendor/seedrandom/lib/xor4096.js_commonjs-module.js +0 -3
  108. package/_vendor/seedrandom/lib/xor4096.js_commonjs-proxy.js +0 -1
  109. package/_vendor/seedrandom/lib/xorshift7.js_commonjs-module.js +0 -3
  110. package/_vendor/seedrandom/lib/xorshift7.js_commonjs-proxy.js +0 -1
  111. package/_vendor/seedrandom/lib/xorwow.js_commonjs-module.js +0 -3
  112. package/_vendor/seedrandom/lib/xorwow.js_commonjs-proxy.js +0 -1
  113. package/_vendor/seedrandom/seedrandom.js_commonjs-module.js +0 -3
  114. package/_vendor/seedrandom/seedrandom.js_commonjs-proxy.js +0 -1
  115. package/_vendor/webworker-promise/lib/register.js_commonjs-module.js +0 -3
  116. package/_vendor/webworker-promise/lib/tiny-emitter.js_commonjs-proxy.js +0 -1
  117. package/_vendor/webworker-promise/src/tiny-emitter.js_commonjs-proxy.js +0 -1
  118. package/_vendor/xmlbuilder2/lib/xmlbuilder2.min.js_commonjs-module.js +0 -3
  119. package/_virtual/_rollup_plugin_ignore_empty_module_placeholder_commonjs-proxy.js +0 -6
  120. package/_virtual/commonjsHelpers.js +0 -22
  121. package/_virtual/polyfill-node.buffer.js +0 -1971
  122. package/_virtual/polyfill-node.global.js +0 -5
  123. package/_virtual/rollup_plugin_ignore_empty_module_placeholder.js +0 -8
  124. package/vendor/base64-js/index.js +0 -72
  125. package/vendor/blueimp-md5/js/md5.js +0 -402
  126. package/vendor/d3-array/src/array.js +0 -1
  127. package/vendor/d3-array/src/ascending.js +0 -5
  128. package/vendor/d3-array/src/bin.js +0 -1
  129. package/vendor/d3-array/src/bisect.js +0 -10
  130. package/vendor/d3-array/src/bisector.js +0 -46
  131. package/vendor/d3-array/src/constant.js +0 -1
  132. package/vendor/d3-array/src/count.js +0 -1
  133. package/vendor/d3-array/src/cross.js +0 -1
  134. package/vendor/d3-array/src/cumsum.js +0 -1
  135. package/vendor/d3-array/src/descending.js +0 -1
  136. package/vendor/d3-array/src/deviation.js +0 -1
  137. package/vendor/d3-array/src/difference.js +0 -1
  138. package/vendor/d3-array/src/disjoint.js +0 -1
  139. package/vendor/d3-array/src/every.js +0 -1
  140. package/vendor/d3-array/src/extent.js +0 -1
  141. package/vendor/d3-array/src/filter.js +0 -1
  142. package/vendor/d3-array/src/fsum.js +0 -1
  143. package/vendor/d3-array/src/greatest.js +0 -1
  144. package/vendor/d3-array/src/greatestIndex.js +0 -1
  145. package/vendor/d3-array/src/group.js +0 -1
  146. package/vendor/d3-array/src/groupSort.js +0 -1
  147. package/vendor/d3-array/src/identity.js +0 -1
  148. package/vendor/d3-array/src/index.js +0 -1
  149. package/vendor/d3-array/src/intersection.js +0 -1
  150. package/vendor/d3-array/src/least.js +0 -1
  151. package/vendor/d3-array/src/leastIndex.js +0 -1
  152. package/vendor/d3-array/src/map.js +0 -1
  153. package/vendor/d3-array/src/max.js +0 -1
  154. package/vendor/d3-array/src/maxIndex.js +0 -1
  155. package/vendor/d3-array/src/mean.js +0 -1
  156. package/vendor/d3-array/src/median.js +0 -1
  157. package/vendor/d3-array/src/merge.js +0 -1
  158. package/vendor/d3-array/src/min.js +0 -1
  159. package/vendor/d3-array/src/minIndex.js +0 -1
  160. package/vendor/d3-array/src/mode.js +0 -1
  161. package/vendor/d3-array/src/nice.js +0 -1
  162. package/vendor/d3-array/src/number.js +0 -5
  163. package/vendor/d3-array/src/pairs.js +0 -1
  164. package/vendor/d3-array/src/permute.js +0 -1
  165. package/vendor/d3-array/src/quantile.js +0 -1
  166. package/vendor/d3-array/src/quickselect.js +0 -1
  167. package/vendor/d3-array/src/range.js +0 -1
  168. package/vendor/d3-array/src/reduce.js +0 -1
  169. package/vendor/d3-array/src/reverse.js +0 -1
  170. package/vendor/d3-array/src/scan.js +0 -1
  171. package/vendor/d3-array/src/set.js +0 -1
  172. package/vendor/d3-array/src/shuffle.js +0 -1
  173. package/vendor/d3-array/src/some.js +0 -1
  174. package/vendor/d3-array/src/sort.js +0 -1
  175. package/vendor/d3-array/src/subset.js +0 -1
  176. package/vendor/d3-array/src/sum.js +0 -1
  177. package/vendor/d3-array/src/superset.js +0 -1
  178. package/vendor/d3-array/src/threshold/freedmanDiaconis.js +0 -1
  179. package/vendor/d3-array/src/threshold/scott.js +0 -1
  180. package/vendor/d3-array/src/threshold/sturges.js +0 -1
  181. package/vendor/d3-array/src/ticks.js +0 -56
  182. package/vendor/d3-array/src/transpose.js +0 -1
  183. package/vendor/d3-array/src/union.js +0 -1
  184. package/vendor/d3-array/src/variance.js +0 -1
  185. package/vendor/d3-array/src/zip.js +0 -1
  186. package/vendor/d3-color/src/color.js +0 -373
  187. package/vendor/d3-color/src/cubehelix.js +0 -1
  188. package/vendor/d3-color/src/define.js +0 -12
  189. package/vendor/d3-color/src/index.js +0 -1
  190. package/vendor/d3-color/src/lab.js +0 -1
  191. package/vendor/d3-color/src/math.js +0 -1
  192. package/vendor/d3-format/src/defaultLocale.js +0 -20
  193. package/vendor/d3-format/src/exponent.js +0 -7
  194. package/vendor/d3-format/src/formatDecimal.js +0 -22
  195. package/vendor/d3-format/src/formatGroup.js +0 -20
  196. package/vendor/d3-format/src/formatNumerals.js +0 -9
  197. package/vendor/d3-format/src/formatPrefixAuto.js +0 -18
  198. package/vendor/d3-format/src/formatRounded.js +0 -13
  199. package/vendor/d3-format/src/formatSpecifier.js +0 -49
  200. package/vendor/d3-format/src/formatTrim.js +0 -13
  201. package/vendor/d3-format/src/formatTypes.js +0 -21
  202. package/vendor/d3-format/src/identity.js +0 -5
  203. package/vendor/d3-format/src/index.js +0 -1
  204. package/vendor/d3-format/src/locale.js +0 -150
  205. package/vendor/d3-format/src/precisionFixed.js +0 -7
  206. package/vendor/d3-format/src/precisionPrefix.js +0 -7
  207. package/vendor/d3-format/src/precisionRound.js +0 -8
  208. package/vendor/d3-interpolate/src/array.js +0 -19
  209. package/vendor/d3-interpolate/src/basis.js +0 -1
  210. package/vendor/d3-interpolate/src/basisClosed.js +0 -1
  211. package/vendor/d3-interpolate/src/color.js +0 -26
  212. package/vendor/d3-interpolate/src/constant.js +0 -3
  213. package/vendor/d3-interpolate/src/cubehelix.js +0 -1
  214. package/vendor/d3-interpolate/src/date.js +0 -8
  215. package/vendor/d3-interpolate/src/discrete.js +0 -1
  216. package/vendor/d3-interpolate/src/hcl.js +0 -1
  217. package/vendor/d3-interpolate/src/hsl.js +0 -1
  218. package/vendor/d3-interpolate/src/hue.js +0 -1
  219. package/vendor/d3-interpolate/src/index.js +0 -1
  220. package/vendor/d3-interpolate/src/lab.js +0 -1
  221. package/vendor/d3-interpolate/src/number.js +0 -7
  222. package/vendor/d3-interpolate/src/numberArray.js +0 -16
  223. package/vendor/d3-interpolate/src/object.js +0 -25
  224. package/vendor/d3-interpolate/src/piecewise.js +0 -1
  225. package/vendor/d3-interpolate/src/quantize.js +0 -1
  226. package/vendor/d3-interpolate/src/rgb.js +0 -26
  227. package/vendor/d3-interpolate/src/round.js +0 -7
  228. package/vendor/d3-interpolate/src/string.js +0 -66
  229. package/vendor/d3-interpolate/src/transform/decompose.js +0 -1
  230. package/vendor/d3-interpolate/src/transform/index.js +0 -1
  231. package/vendor/d3-interpolate/src/transform/parse.js +0 -1
  232. package/vendor/d3-interpolate/src/value.js +0 -24
  233. package/vendor/d3-interpolate/src/zoom.js +0 -1
  234. package/vendor/d3-scale/src/band.js +0 -1
  235. package/vendor/d3-scale/src/constant.js +0 -7
  236. package/vendor/d3-scale/src/continuous.js +0 -129
  237. package/vendor/d3-scale/src/diverging.js +0 -1
  238. package/vendor/d3-scale/src/identity.js +0 -1
  239. package/vendor/d3-scale/src/index.js +0 -1
  240. package/vendor/d3-scale/src/init.js +0 -10
  241. package/vendor/d3-scale/src/linear.js +0 -72
  242. package/vendor/d3-scale/src/log.js +0 -1
  243. package/vendor/d3-scale/src/nice.js +0 -1
  244. package/vendor/d3-scale/src/number.js +0 -5
  245. package/vendor/d3-scale/src/ordinal.js +0 -1
  246. package/vendor/d3-scale/src/pow.js +0 -1
  247. package/vendor/d3-scale/src/quantile.js +0 -1
  248. package/vendor/d3-scale/src/quantize.js +0 -1
  249. package/vendor/d3-scale/src/radial.js +0 -1
  250. package/vendor/d3-scale/src/sequential.js +0 -1
  251. package/vendor/d3-scale/src/sequentialQuantile.js +0 -1
  252. package/vendor/d3-scale/src/symlog.js +0 -1
  253. package/vendor/d3-scale/src/threshold.js +0 -1
  254. package/vendor/d3-scale/src/tickFormat.js +0 -35
  255. package/vendor/d3-scale/src/time.js +0 -1
  256. package/vendor/d3-scale/src/utcTime.js +0 -1
  257. package/vendor/d3-time/src/day.js +0 -1
  258. package/vendor/d3-time/src/duration.js +0 -1
  259. package/vendor/d3-time/src/hour.js +0 -1
  260. package/vendor/d3-time/src/index.js +0 -1
  261. package/vendor/d3-time/src/interval.js +0 -1
  262. package/vendor/d3-time/src/millisecond.js +0 -1
  263. package/vendor/d3-time/src/minute.js +0 -1
  264. package/vendor/d3-time/src/month.js +0 -1
  265. package/vendor/d3-time/src/second.js +0 -1
  266. package/vendor/d3-time/src/ticks.js +0 -1
  267. package/vendor/d3-time/src/utcDay.js +0 -1
  268. package/vendor/d3-time/src/utcHour.js +0 -1
  269. package/vendor/d3-time/src/utcMinute.js +0 -1
  270. package/vendor/d3-time/src/utcMonth.js +0 -1
  271. package/vendor/d3-time/src/utcWeek.js +0 -1
  272. package/vendor/d3-time/src/utcYear.js +0 -1
  273. package/vendor/d3-time/src/week.js +0 -1
  274. package/vendor/d3-time/src/year.js +0 -1
  275. package/vendor/d3-time-format/src/defaultLocale.js +0 -1
  276. package/vendor/d3-time-format/src/index.js +0 -1
  277. package/vendor/d3-time-format/src/isoFormat.js +0 -1
  278. package/vendor/d3-time-format/src/isoParse.js +0 -1
  279. package/vendor/d3-time-format/src/locale.js +0 -1
  280. package/vendor/define-properties/index.js +0 -60
  281. package/vendor/gl-matrix/esm/common.js +0 -30
  282. package/vendor/gl-matrix/esm/index.js +0 -1
  283. package/vendor/gl-matrix/esm/mat2.js +0 -1
  284. package/vendor/gl-matrix/esm/mat2d.js +0 -1
  285. package/vendor/gl-matrix/esm/mat3.js +0 -817
  286. package/vendor/gl-matrix/esm/mat4.js +0 -1868
  287. package/vendor/gl-matrix/esm/quat.js +0 -330
  288. package/vendor/gl-matrix/esm/quat2.js +0 -1
  289. package/vendor/gl-matrix/esm/vec2.js +0 -1
  290. package/vendor/gl-matrix/esm/vec3.js +0 -842
  291. package/vendor/gl-matrix/esm/vec4.js +0 -153
  292. package/vendor/globalthis/implementation.browser.js +0 -11
  293. package/vendor/globalthis/index.js +0 -25
  294. package/vendor/globalthis/polyfill.js +0 -14
  295. package/vendor/globalthis/shim.js +0 -25
  296. package/vendor/internmap/src/index.js +0 -1
  297. package/vendor/jszip/dist/jszip.min.js +0 -11
  298. package/vendor/object-keys/implementation.js +0 -124
  299. package/vendor/object-keys/index.js +0 -35
  300. package/vendor/object-keys/isArguments.js +0 -17
  301. package/vendor/pako/dist/pako.esm.mjs.js +0 -6707
  302. package/vendor/seedrandom/index.js +0 -77
  303. package/vendor/seedrandom/lib/alea.js +0 -117
  304. package/vendor/seedrandom/lib/tychei.js +0 -105
  305. package/vendor/seedrandom/lib/xor128.js +0 -84
  306. package/vendor/seedrandom/lib/xor4096.js +0 -150
  307. package/vendor/seedrandom/lib/xorshift7.js +0 -101
  308. package/vendor/seedrandom/lib/xorwow.js +0 -89
  309. package/vendor/seedrandom/seedrandom.js +0 -256
  310. package/vendor/webworker-promise/lib/register.js +0 -158
  311. package/vendor/webworker-promise/lib/tiny-emitter.js +0 -89
  312. package/vendor/webworker-promise/src/index.js +0 -110
  313. package/vendor/webworker-promise/src/tiny-emitter.js +0 -51
  314. package/vendor/xmlbuilder2/lib/xmlbuilder2.min.js +0 -13
@@ -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 { a as subtract, d as dot, j as add, c as cross, x as squaredDistance, h as distance } from '../../../vendor/gl-matrix/esm/vec3.js';
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 { x as squaredDistance, h as distance } from '../../../vendor/gl-matrix/esm/vec3.js';
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.4",
3
+ "version": "20.2.3",
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",
package/types.d.ts CHANGED
@@ -13,6 +13,7 @@ declare type TypedArray =
13
13
  | Float32Array;
14
14
 
15
15
  declare type Bounds = [number, number, number, number, number, number];
16
+ declare type Extent = [number, number, number, number, number, number];
16
17
  declare type Placement = 'top' | 'left' | 'right' | 'bottom';
17
18
  declare type Size = [number, number];
18
19
  declare type Range = [number, number];
package/vtk.js CHANGED
@@ -1,11 +1,11 @@
1
1
  import _typeof from '@babel/runtime/helpers/typeof';
2
2
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
3
- import { g as globalthis } from './vendor/globalthis/index.js';
3
+ import globalThisShim from 'globalthis';
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
 
7
7
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
8
- var vtkGlobal = globalthis(); // returns native globalThis if compliant
8
+ var vtkGlobal = globalThisShim(); // returns native globalThis if compliant
9
9
 
10
10
  var factoryMapping = {
11
11
  vtkObject: function vtkObject() {
@@ -1,3 +0,0 @@
1
- var md5 = {exports: {}};
2
-
3
- export { md5 as m };
@@ -1 +0,0 @@
1
- import '../../vendor/define-properties/index.js';
@@ -1,3 +0,0 @@
1
- var implementation_browser = {exports: {}};
2
-
3
- export { implementation_browser as i };
@@ -1 +0,0 @@
1
- import '../../vendor/globalthis/implementation.browser.js';
@@ -1 +0,0 @@
1
- import '../../vendor/globalthis/implementation.browser.js';
@@ -1,2 +0,0 @@
1
- import '../../vendor/define-properties/index.js';
2
- import '../../vendor/globalthis/implementation.browser.js';
@@ -1,3 +0,0 @@
1
- var jszip_min = {exports: {}};
2
-
3
- export { jszip_min as j };
@@ -1 +0,0 @@
1
- import '../../vendor/object-keys/implementation.js';
@@ -1 +0,0 @@
1
- import '../../vendor/object-keys/index.js';
@@ -1,3 +0,0 @@
1
- var alea = {exports: {}};
2
-
3
- export { alea as a };
@@ -1 +0,0 @@
1
- import '../../../vendor/seedrandom/lib/alea.js';
@@ -1,3 +0,0 @@
1
- var tychei = {exports: {}};
2
-
3
- export { tychei as t };
@@ -1 +0,0 @@
1
- import '../../../vendor/seedrandom/lib/tychei.js';
@@ -1,3 +0,0 @@
1
- var xor128 = {exports: {}};
2
-
3
- export { xor128 as x };
@@ -1 +0,0 @@
1
- import '../../../vendor/seedrandom/lib/xor128.js';
@@ -1,3 +0,0 @@
1
- var xor4096 = {exports: {}};
2
-
3
- export { xor4096 as x };
@@ -1 +0,0 @@
1
- import '../../../vendor/seedrandom/lib/xor4096.js';
@@ -1,3 +0,0 @@
1
- var xorshift7 = {exports: {}};
2
-
3
- export { xorshift7 as x };
@@ -1 +0,0 @@
1
- import '../../../vendor/seedrandom/lib/xorshift7.js';
@@ -1,3 +0,0 @@
1
- var xorwow = {exports: {}};
2
-
3
- export { xorwow as x };
@@ -1 +0,0 @@
1
- import '../../../vendor/seedrandom/lib/xorwow.js';
@@ -1,3 +0,0 @@
1
- var seedrandom = {exports: {}};
2
-
3
- export { seedrandom as s };
@@ -1 +0,0 @@
1
- import '../../vendor/seedrandom/seedrandom.js';
@@ -1,3 +0,0 @@
1
- var register = {exports: {}};
2
-
3
- export { register as r };
@@ -1 +0,0 @@
1
- import '../../../vendor/webworker-promise/lib/tiny-emitter.js';
@@ -1,3 +0,0 @@
1
- var xmlbuilder2_min = {exports: {}};
2
-
3
- export { xmlbuilder2_min as x };
@@ -1,6 +0,0 @@
1
- import { _ as _rollup_plugin_ignore_empty_module_placeholder } from './rollup_plugin_ignore_empty_module_placeholder.js';
2
- import { g as getAugmentedNamespace } from './commonjsHelpers.js';
3
-
4
- var require$$0 = /*@__PURE__*/getAugmentedNamespace(_rollup_plugin_ignore_empty_module_placeholder);
5
-
6
- export { require$$0 as r };
@@ -1,22 +0,0 @@
1
- var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
2
-
3
- function getAugmentedNamespace(n) {
4
- if (n.__esModule) return n;
5
- var a = Object.defineProperty({}, '__esModule', {value: true});
6
- Object.keys(n).forEach(function (k) {
7
- var d = Object.getOwnPropertyDescriptor(n, k);
8
- Object.defineProperty(a, k, d.get ? d : {
9
- enumerable: true,
10
- get: function () {
11
- return n[k];
12
- }
13
- });
14
- });
15
- return a;
16
- }
17
-
18
- function commonjsRequire (path) {
19
- throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
20
- }
21
-
22
- export { commonjsRequire as a, commonjsGlobal as c, getAugmentedNamespace as g };