angular-three-soba 2.0.0-beta.26 → 2.0.0-beta.261

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 (397) hide show
  1. package/README.md +62 -4
  2. package/abstractions/README.md +278 -2
  3. package/abstractions/index.d.ts +11 -6
  4. package/abstractions/lib/catmull-rom-line.d.ts +648 -0
  5. package/abstractions/lib/cubic-bezier-line.d.ts +19 -0
  6. package/abstractions/lib/edges.d.ts +850 -0
  7. package/abstractions/lib/gradient-texture.d.ts +24 -0
  8. package/abstractions/lib/grid.d.ts +339 -0
  9. package/abstractions/lib/helper.d.ts +25 -0
  10. package/abstractions/lib/line.d.ts +41 -0
  11. package/abstractions/lib/prism-geometry.d.ts +30 -0
  12. package/abstractions/lib/quadratic-bezier-line.d.ts +21 -0
  13. package/abstractions/lib/text-3d.d.ts +338 -0
  14. package/abstractions/lib/text.d.ts +55 -0
  15. package/cameras/README.md +91 -2
  16. package/cameras/index.d.ts +4 -4
  17. package/cameras/lib/camera-content.d.ts +10 -0
  18. package/cameras/lib/cube-camera.d.ts +38 -0
  19. package/cameras/lib/orthographic-camera.d.ts +40 -0
  20. package/cameras/lib/perspective-camera.d.ts +36 -0
  21. package/controls/README.md +95 -2
  22. package/controls/index.d.ts +2 -1
  23. package/controls/lib/camera-controls.d.ts +31 -0
  24. package/controls/lib/orbit-controls.d.ts +38 -0
  25. package/esm2022/abstractions/index.mjs +12 -7
  26. package/esm2022/abstractions/lib/catmull-rom-line.mjs +76 -0
  27. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +51 -0
  28. package/esm2022/abstractions/lib/edges.mjs +70 -0
  29. package/esm2022/abstractions/lib/gradient-texture.mjs +91 -0
  30. package/esm2022/abstractions/lib/grid.mjs +103 -0
  31. package/esm2022/abstractions/lib/helper.mjs +80 -0
  32. package/esm2022/abstractions/lib/line.mjs +123 -0
  33. package/esm2022/abstractions/lib/prism-geometry.mjs +55 -0
  34. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +73 -0
  35. package/esm2022/abstractions/lib/text-3d.mjs +98 -0
  36. package/esm2022/abstractions/lib/text.mjs +92 -0
  37. package/esm2022/cameras/index.mjs +5 -5
  38. package/esm2022/cameras/lib/camera-content.mjs +14 -0
  39. package/esm2022/cameras/lib/cube-camera.mjs +111 -0
  40. package/esm2022/cameras/lib/orthographic-camera.mjs +131 -0
  41. package/esm2022/cameras/lib/perspective-camera.mjs +104 -0
  42. package/esm2022/controls/index.mjs +3 -2
  43. package/esm2022/controls/lib/camera-controls.mjs +127 -0
  44. package/esm2022/controls/lib/orbit-controls.mjs +126 -0
  45. package/esm2022/loaders/index.mjs +6 -5
  46. package/esm2022/loaders/lib/font-loader.mjs +49 -0
  47. package/esm2022/loaders/lib/gltf-loader.mjs +33 -0
  48. package/esm2022/loaders/lib/loader.mjs +109 -0
  49. package/esm2022/loaders/lib/progress.mjs +51 -0
  50. package/esm2022/loaders/lib/texture-loader.mjs +32 -0
  51. package/esm2022/materials/index.mjs +7 -7
  52. package/esm2022/materials/lib/custom-shader-material.mjs +71 -0
  53. package/esm2022/materials/lib/mesh-distort-material.mjs +42 -0
  54. package/esm2022/materials/lib/mesh-reflector-material.mjs +278 -0
  55. package/esm2022/materials/lib/mesh-refraction-material.mjs +144 -0
  56. package/esm2022/materials/lib/mesh-transmission-material.mjs +188 -0
  57. package/esm2022/materials/lib/mesh-wobble-material.mjs +42 -0
  58. package/esm2022/misc/index.mjs +10 -14
  59. package/esm2022/misc/lib/animations.mjs +74 -0
  60. package/esm2022/misc/lib/bake-shadows.mjs +26 -0
  61. package/esm2022/misc/lib/computed-attribute.mjs +56 -0
  62. package/esm2022/misc/lib/constants.mjs +5 -0
  63. package/esm2022/misc/lib/decal.mjs +135 -0
  64. package/esm2022/misc/lib/deprecated.mjs +15 -0
  65. package/esm2022/misc/lib/depth-buffer.mjs +39 -0
  66. package/esm2022/misc/lib/fbo.mjs +89 -0
  67. package/esm2022/misc/lib/sampler.mjs +121 -0
  68. package/esm2022/shaders/index.mjs +3 -18
  69. package/esm2022/shaders/lib/grid-material.mjs +81 -0
  70. package/esm2022/shaders/lib/mesh-refraction-material.mjs +163 -0
  71. package/esm2022/staging/index.mjs +19 -22
  72. package/esm2022/staging/lib/accumulative-shadows.mjs +182 -0
  73. package/esm2022/staging/lib/backdrop.mjs +73 -0
  74. package/esm2022/staging/lib/bb-anchor.mjs +58 -0
  75. package/esm2022/staging/lib/bounds.mjs +286 -0
  76. package/esm2022/staging/lib/camera-shake.mjs +69 -0
  77. package/esm2022/staging/lib/caustics.mjs +188 -0
  78. package/esm2022/staging/lib/center.mjs +113 -0
  79. package/esm2022/staging/lib/contact-shadows.mjs +201 -0
  80. package/esm2022/staging/lib/environment.mjs +465 -0
  81. package/esm2022/staging/lib/float.mjs +60 -0
  82. package/esm2022/staging/lib/lightformer.mjs +107 -0
  83. package/esm2022/staging/lib/matcap-texture.mjs +81 -0
  84. package/esm2022/staging/lib/normal-texture.mjs +85 -0
  85. package/esm2022/staging/lib/randomized-lights.mjs +104 -0
  86. package/esm2022/staging/lib/render-texture.mjs +213 -0
  87. package/esm2022/staging/lib/sky.mjs +86 -0
  88. package/esm2022/staging/lib/spot-light.mjs +450 -0
  89. package/esm2022/staging/lib/stage.mjs +236 -0
  90. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +5 -0
  91. package/esm2022/vanilla-exports/index.mjs +3 -0
  92. package/fesm2022/angular-three-soba-abstractions.mjs +739 -718
  93. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  94. package/fesm2022/angular-three-soba-cameras.mjs +260 -307
  95. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  96. package/fesm2022/angular-three-soba-controls.mjs +174 -110
  97. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  98. package/fesm2022/angular-three-soba-loaders.mjs +151 -129
  99. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  100. package/fesm2022/angular-three-soba-materials.mjs +511 -764
  101. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  102. package/fesm2022/angular-three-soba-misc.mjs +405 -2149
  103. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  104. package/fesm2022/angular-three-soba-shaders.mjs +33 -1373
  105. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  106. package/fesm2022/angular-three-soba-staging.mjs +2329 -3538
  107. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  108. package/fesm2022/angular-three-soba-vanilla-exports.mjs +6 -0
  109. package/fesm2022/angular-three-soba-vanilla-exports.mjs.map +1 -0
  110. package/loaders/README.md +130 -2
  111. package/loaders/index.d.ts +5 -4
  112. package/loaders/lib/font-loader.d.ts +27 -0
  113. package/loaders/lib/gltf-loader.d.ts +21 -0
  114. package/loaders/lib/loader.d.ts +29 -0
  115. package/loaders/lib/progress.d.ts +9 -0
  116. package/loaders/lib/texture-loader.d.ts +13 -0
  117. package/materials/README.md +160 -2
  118. package/materials/index.d.ts +6 -6
  119. package/materials/lib/custom-shader-material.d.ts +19 -0
  120. package/materials/lib/mesh-distort-material.d.ts +18 -0
  121. package/materials/lib/mesh-reflector-material.d.ts +50 -0
  122. package/materials/lib/mesh-refraction-material.d.ts +42 -0
  123. package/materials/lib/mesh-transmission-material.d.ts +77 -0
  124. package/materials/lib/mesh-wobble-material.d.ts +15 -0
  125. package/metadata.json +1 -1
  126. package/misc/README.md +217 -2
  127. package/misc/index.d.ts +9 -13
  128. package/misc/lib/animations.d.ts +14 -0
  129. package/misc/lib/computed-attribute.d.ts +69 -0
  130. package/misc/lib/constants.d.ts +1 -0
  131. package/misc/lib/decal.d.ts +27 -0
  132. package/misc/lib/deprecated.d.ts +14 -0
  133. package/misc/lib/depth-buffer.d.ts +8 -0
  134. package/misc/lib/fbo.d.ts +47 -0
  135. package/misc/lib/sampler.d.ts +73 -0
  136. package/package.json +60 -38
  137. package/shaders/index.d.ts +2 -17
  138. package/shaders/lib/grid-material.d.ts +69 -0
  139. package/shaders/lib/mesh-refraction-material.d.ts +11 -0
  140. package/staging/README.md +472 -2
  141. package/staging/index.d.ts +18 -21
  142. package/staging/lib/accumulative-shadows.d.ts +75 -0
  143. package/staging/lib/backdrop.d.ts +22 -0
  144. package/staging/lib/bb-anchor.d.ts +17 -0
  145. package/staging/lib/bounds.d.ts +47 -0
  146. package/staging/lib/camera-shake.d.ts +29 -0
  147. package/staging/lib/caustics.d.ts +53 -0
  148. package/staging/lib/center.d.ts +422 -0
  149. package/staging/lib/contact-shadows.d.ts +45 -0
  150. package/staging/lib/environment.d.ts +159 -0
  151. package/staging/lib/float.d.ts +19 -0
  152. package/staging/lib/lightformer.d.ts +334 -0
  153. package/staging/lib/matcap-texture.d.ts +32 -0
  154. package/staging/lib/normal-texture.d.ts +37 -0
  155. package/staging/lib/randomized-lights.d.ts +54 -0
  156. package/staging/lib/render-texture.d.ts +64 -0
  157. package/staging/lib/sky.d.ts +32 -0
  158. package/staging/lib/spot-light.d.ts +120 -0
  159. package/staging/lib/stage.d.ts +376 -0
  160. package/vanilla-exports/README.md +3 -0
  161. package/vanilla-exports/index.d.ts +27 -0
  162. package/web-types.json +1 -1
  163. package/abstractions/billboard/billboard.d.ts +0 -28
  164. package/abstractions/detailed/detailed.d.ts +0 -26
  165. package/abstractions/edges/edges.d.ts +0 -34
  166. package/abstractions/grid/grid.d.ts +0 -50
  167. package/abstractions/text/text.d.ts +0 -82
  168. package/abstractions/text-3d/text-3d.d.ts +0 -84
  169. package/assets/distort.vert.glsl +0 -1
  170. package/cameras/camera/camera-content.d.ts +0 -13
  171. package/cameras/camera/camera.d.ts +0 -26
  172. package/cameras/cube-camera/cube-camera.d.ts +0 -69
  173. package/cameras/orthographic-camera/orthographic-camera.d.ts +0 -37
  174. package/cameras/perspective-camera/perspective-camera.d.ts +0 -18
  175. package/controls/orbit-controls/orbit-controls.d.ts +0 -54
  176. package/esm2022/abstractions/billboard/billboard.mjs +0 -74
  177. package/esm2022/abstractions/detailed/detailed.mjs +0 -64
  178. package/esm2022/abstractions/edges/edges.mjs +0 -88
  179. package/esm2022/abstractions/grid/grid.mjs +0 -180
  180. package/esm2022/abstractions/text/text.mjs +0 -274
  181. package/esm2022/abstractions/text-3d/text-3d.mjs +0 -172
  182. package/esm2022/cameras/camera/camera-content.mjs +0 -21
  183. package/esm2022/cameras/camera/camera.mjs +0 -77
  184. package/esm2022/cameras/cube-camera/cube-camera.mjs +0 -161
  185. package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +0 -102
  186. package/esm2022/cameras/perspective-camera/perspective-camera.mjs +0 -46
  187. package/esm2022/controls/orbit-controls/orbit-controls.mjs +0 -185
  188. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  189. package/esm2022/gizmos/gizmo-helper/gizmo-helper.mjs +0 -197
  190. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
  191. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -93
  192. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -150
  193. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.mjs +0 -66
  194. package/esm2022/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -71
  195. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -195
  196. package/esm2022/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -272
  197. package/esm2022/gizmos/index.mjs +0 -4
  198. package/esm2022/loaders/gltf-loader/gltf-loader.mjs +0 -30
  199. package/esm2022/loaders/loader/loader.mjs +0 -138
  200. package/esm2022/loaders/progress/progress.mjs +0 -52
  201. package/esm2022/loaders/texture-loader/texture-loader.mjs +0 -28
  202. package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +0 -82
  203. package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +0 -367
  204. package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +0 -171
  205. package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +0 -278
  206. package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +0 -68
  207. package/esm2022/materials/point-material/point-material.mjs +0 -50
  208. package/esm2022/misc/animations/animations.mjs +0 -59
  209. package/esm2022/misc/bake-shadows/bake-shadows.mjs +0 -24
  210. package/esm2022/misc/caustics/caustics.mjs +0 -387
  211. package/esm2022/misc/decal/decal.mjs +0 -187
  212. package/esm2022/misc/depth-buffer/depth-buffer.mjs +0 -44
  213. package/esm2022/misc/example/example.mjs +0 -160
  214. package/esm2022/misc/fbo/fbo.mjs +0 -47
  215. package/esm2022/misc/html/html-wrapper.mjs +0 -478
  216. package/esm2022/misc/html/html.mjs +0 -304
  217. package/esm2022/misc/sampler/sampler.mjs +0 -142
  218. package/esm2022/misc/shadow/shadow.mjs +0 -111
  219. package/esm2022/misc/stats-gl/stats-gl.mjs +0 -61
  220. package/esm2022/misc/trail/trail.mjs +0 -209
  221. package/esm2022/misc/trail-texture/inject-trail-texture.mjs +0 -17
  222. package/esm2022/misc/trail-texture/trail-texture.mjs +0 -106
  223. package/esm2022/modifiers/angular-three-soba-modifiers.mjs +0 -5
  224. package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +0 -64
  225. package/esm2022/modifiers/index.mjs +0 -2
  226. package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +0 -44
  227. package/esm2022/performances/adaptive-events/adaptive-events.mjs +0 -27
  228. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  229. package/esm2022/performances/index.mjs +0 -8
  230. package/esm2022/performances/instances/instances.mjs +0 -220
  231. package/esm2022/performances/instances/position-mesh.mjs +0 -52
  232. package/esm2022/performances/points/points-input.mjs +0 -64
  233. package/esm2022/performances/points/points.mjs +0 -326
  234. package/esm2022/performances/points/position-point.mjs +0 -54
  235. package/esm2022/performances/segments/segment-object.mjs +0 -9
  236. package/esm2022/performances/segments/segments.mjs +0 -182
  237. package/esm2022/shaders/blur-pass/blur-pass.mjs +0 -61
  238. package/esm2022/shaders/caustics/caustics-material.mjs +0 -130
  239. package/esm2022/shaders/caustics/caustics-projection-material.mjs +0 -31
  240. package/esm2022/shaders/convolution-material/convolution-material.mjs +0 -94
  241. package/esm2022/shaders/discard-material/discard-material.mjs +0 -3
  242. package/esm2022/shaders/grid-material/grid-material.mjs +0 -77
  243. package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +0 -56
  244. package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +0 -223
  245. package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +0 -170
  246. package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +0 -268
  247. package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +0 -37
  248. package/esm2022/shaders/shader-material/shader-material.mjs +0 -34
  249. package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +0 -25
  250. package/esm2022/shaders/sparkles-material/sparkles-material.mjs +0 -33
  251. package/esm2022/shaders/spot-light-material/spot-light-material.mjs +0 -86
  252. package/esm2022/shaders/star-field-material/star-field-material.mjs +0 -33
  253. package/esm2022/shaders/wireframe-material/wireframe-material.mjs +0 -247
  254. package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +0 -267
  255. package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +0 -108
  256. package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +0 -206
  257. package/esm2022/staging/backdrop/backdrop.mjs +0 -77
  258. package/esm2022/staging/bb-anchor/bb-anchor.mjs +0 -69
  259. package/esm2022/staging/bounds/bounds.mjs +0 -308
  260. package/esm2022/staging/camera-shake/camera-shake.mjs +0 -123
  261. package/esm2022/staging/center/center.mjs +0 -165
  262. package/esm2022/staging/cloud/cloud.mjs +0 -158
  263. package/esm2022/staging/contact-shadows/contact-shadows.mjs +0 -246
  264. package/esm2022/staging/environment/assets.mjs +0 -13
  265. package/esm2022/staging/environment/environment-cube.mjs +0 -47
  266. package/esm2022/staging/environment/environment-ground.mjs +0 -41
  267. package/esm2022/staging/environment/environment-input.mjs +0 -119
  268. package/esm2022/staging/environment/environment-map.mjs +0 -53
  269. package/esm2022/staging/environment/environment-portal.mjs +0 -113
  270. package/esm2022/staging/environment/environment.mjs +0 -61
  271. package/esm2022/staging/environment/utils.mjs +0 -106
  272. package/esm2022/staging/float/float.mjs +0 -94
  273. package/esm2022/staging/matcap-texture/matcap-texture.mjs +0 -64
  274. package/esm2022/staging/normal-texture/normal-texture.mjs +0 -53
  275. package/esm2022/staging/sky/sky.mjs +0 -119
  276. package/esm2022/staging/sparkles/sparkles.mjs +0 -164
  277. package/esm2022/staging/spot-light/shadow-mesh-input.mjs +0 -63
  278. package/esm2022/staging/spot-light/shadow-mesh.mjs +0 -266
  279. package/esm2022/staging/spot-light/spot-light-input.mjs +0 -84
  280. package/esm2022/staging/spot-light/spot-light.mjs +0 -81
  281. package/esm2022/staging/spot-light/volumetric-mesh.mjs +0 -98
  282. package/esm2022/staging/stage/stage.mjs +0 -389
  283. package/esm2022/staging/stars/stars.mjs +0 -147
  284. package/esm2022/staging/wireframe/wireframe-input.mjs +0 -191
  285. package/esm2022/staging/wireframe/wireframe.mjs +0 -228
  286. package/esm2022/utils/angular-three-soba-utils.mjs +0 -5
  287. package/esm2022/utils/content/content.mjs +0 -15
  288. package/esm2022/utils/index.mjs +0 -2
  289. package/fesm2022/angular-three-soba-gizmos.mjs +0 -1043
  290. package/fesm2022/angular-three-soba-gizmos.mjs.map +0 -1
  291. package/fesm2022/angular-three-soba-modifiers.mjs +0 -71
  292. package/fesm2022/angular-three-soba-modifiers.mjs.map +0 -1
  293. package/fesm2022/angular-three-soba-performances.mjs +0 -956
  294. package/fesm2022/angular-three-soba-performances.mjs.map +0 -1
  295. package/fesm2022/angular-three-soba-utils.mjs +0 -22
  296. package/fesm2022/angular-three-soba-utils.mjs.map +0 -1
  297. package/gizmos/README.md +0 -3
  298. package/gizmos/gizmo-helper/gizmo-helper.d.ts +0 -69
  299. package/gizmos/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
  300. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
  301. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -29
  302. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube-input.d.ts +0 -33
  303. package/gizmos/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -10
  304. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -40
  305. package/gizmos/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -30
  306. package/gizmos/index.d.ts +0 -3
  307. package/loaders/gltf-loader/gltf-loader.d.ts +0 -10
  308. package/loaders/loader/loader.d.ts +0 -33
  309. package/loaders/progress/progress.d.ts +0 -9
  310. package/loaders/texture-loader/texture-loader.d.ts +0 -7
  311. package/materials/mesh-distort-material/mesh-distort-material.d.ts +0 -40
  312. package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +0 -99
  313. package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +0 -62
  314. package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +0 -107
  315. package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +0 -29
  316. package/materials/point-material/point-material.d.ts +0 -24
  317. package/misc/animations/animations.d.ts +0 -15
  318. package/misc/caustics/caustics.d.ts +0 -87
  319. package/misc/decal/decal.d.ts +0 -49
  320. package/misc/depth-buffer/depth-buffer.d.ts +0 -9
  321. package/misc/example/example.d.ts +0 -81
  322. package/misc/fbo/fbo.d.ts +0 -17
  323. package/misc/html/html-wrapper.d.ts +0 -559
  324. package/misc/html/html.d.ts +0 -214
  325. package/misc/sampler/sampler.d.ts +0 -67
  326. package/misc/shadow/shadow.d.ts +0 -37
  327. package/misc/stats-gl/stats-gl.d.ts +0 -24
  328. package/misc/trail/trail.d.ts +0 -57
  329. package/misc/trail-texture/inject-trail-texture.d.ts +0 -9
  330. package/misc/trail-texture/trail-texture.d.ts +0 -50
  331. package/modifiers/README.md +0 -3
  332. package/modifiers/curve-modifier/curve-modifier.d.ts +0 -23
  333. package/modifiers/index.d.ts +0 -1
  334. package/performances/README.md +0 -3
  335. package/performances/adaptive-dpr/adaptive-dpr.d.ts +0 -14
  336. package/performances/adaptive-events/adaptive-events.d.ts +0 -9
  337. package/performances/index.d.ts +0 -7
  338. package/performances/instances/instances.d.ts +0 -79
  339. package/performances/instances/position-mesh.d.ts +0 -10
  340. package/performances/points/points-input.d.ts +0 -32
  341. package/performances/points/points.d.ts +0 -92
  342. package/performances/points/position-point.d.ts +0 -11
  343. package/performances/segments/segment-object.d.ts +0 -7
  344. package/performances/segments/segments.d.ts +0 -124
  345. package/shaders/blur-pass/blur-pass.d.ts +0 -23
  346. package/shaders/caustics/caustics-material.d.ts +0 -4
  347. package/shaders/caustics/caustics-projection-material.d.ts +0 -4
  348. package/shaders/convolution-material/convolution-material.d.ts +0 -7
  349. package/shaders/discard-material/discard-material.d.ts +0 -3
  350. package/shaders/grid-material/grid-material.d.ts +0 -37
  351. package/shaders/mesh-distort-material/mesh-distort-material.d.ts +0 -295
  352. package/shaders/mesh-reflector-material/mesh-reflector-material.d.ts +0 -50
  353. package/shaders/mesh-refraction-material/mesh-refraction-material.d.ts +0 -4
  354. package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +0 -25
  355. package/shaders/mesh-wobble-material/mesh-wobble-material.d.ts +0 -16
  356. package/shaders/shader-material/shader-material.d.ts +0 -6
  357. package/shaders/soft-shadow-material/soft-shadow-material.d.ts +0 -19
  358. package/shaders/sparkles-material/sparkles-material.d.ts +0 -17
  359. package/shaders/spot-light-material/spot-light-material.d.ts +0 -13
  360. package/shaders/star-field-material/star-field-material.d.ts +0 -13
  361. package/shaders/wireframe-material/wireframe-material.d.ts +0 -58
  362. package/staging/accumulative-shadows/accumulative-shadows.d.ts +0 -146
  363. package/staging/accumulative-shadows/progressive-light-map.d.ts +0 -34
  364. package/staging/accumulative-shadows/randomized-lights.d.ts +0 -90
  365. package/staging/backdrop/backdrop.d.ts +0 -30
  366. package/staging/bb-anchor/bb-anchor.d.ts +0 -27
  367. package/staging/bounds/bounds.d.ts +0 -134
  368. package/staging/camera-shake/camera-shake.d.ts +0 -43
  369. package/staging/center/center.d.ts +0 -70
  370. package/staging/cloud/cloud.d.ts +0 -51
  371. package/staging/contact-shadows/contact-shadows.d.ts +0 -70
  372. package/staging/environment/assets.d.ts +0 -13
  373. package/staging/environment/environment-cube.d.ts +0 -15
  374. package/staging/environment/environment-ground.d.ts +0 -13
  375. package/staging/environment/environment-input.d.ts +0 -68
  376. package/staging/environment/environment-map.d.ts +0 -16
  377. package/staging/environment/environment-portal.d.ts +0 -18
  378. package/staging/environment/environment.d.ts +0 -8
  379. package/staging/environment/utils.d.ts +0 -7
  380. package/staging/float/float.d.ts +0 -31
  381. package/staging/matcap-texture/matcap-texture.d.ts +0 -13
  382. package/staging/normal-texture/normal-texture.d.ts +0 -16
  383. package/staging/sky/sky.d.ts +0 -48
  384. package/staging/sparkles/sparkles.d.ts +0 -63
  385. package/staging/spot-light/shadow-mesh-input.d.ts +0 -29
  386. package/staging/spot-light/shadow-mesh.d.ts +0 -37
  387. package/staging/spot-light/spot-light-input.d.ts +0 -38
  388. package/staging/spot-light/spot-light.d.ts +0 -39
  389. package/staging/spot-light/volumetric-mesh.d.ts +0 -24
  390. package/staging/stage/stage.d.ts +0 -130
  391. package/staging/stars/stars.d.ts +0 -45
  392. package/staging/wireframe/wireframe-input.d.ts +0 -65
  393. package/staging/wireframe/wireframe.d.ts +0 -28
  394. package/utils/README.md +0 -3
  395. package/utils/content/content.d.ts +0 -8
  396. package/utils/index.d.ts +0 -1
  397. /package/misc/{bake-shadows → lib}/bake-shadows.d.ts +0 -0
@@ -1,77 +0,0 @@
1
- import * as THREE from 'three';
2
- import { shaderMaterial } from '../shader-material/shader-material';
3
- export const GridMaterial = shaderMaterial({
4
- cellSize: 0.5,
5
- sectionSize: 1,
6
- fadeDistance: 100,
7
- fadeStrength: 1,
8
- cellThickness: 0.5,
9
- sectionThickness: 1,
10
- cellColor: new THREE.Color(),
11
- sectionColor: new THREE.Color(),
12
- infiniteGrid: false,
13
- followCamera: false,
14
- worldCamProjPosition: new THREE.Vector3(),
15
- worldPlanePosition: new THREE.Vector3(),
16
- },
17
- /* glsl */ `
18
- varying vec3 localPosition;
19
- varying vec4 worldPosition;
20
-
21
- uniform vec3 worldCamProjPosition;
22
- uniform vec3 worldPlanePosition;
23
- uniform float fadeDistance;
24
- uniform bool infiniteGrid;
25
- uniform bool followCamera;
26
-
27
- void main() {
28
- localPosition = position.xzy;
29
- if (infiniteGrid) localPosition *= 1.0 + fadeDistance;
30
-
31
- worldPosition = modelMatrix * vec4(localPosition, 1.0);
32
- if (followCamera) {
33
- worldPosition.xyz += (worldCamProjPosition - worldPlanePosition);
34
- localPosition = (inverse(modelMatrix) * worldPosition).xyz;
35
- }
36
-
37
- gl_Position = projectionMatrix * viewMatrix * worldPosition;
38
- }
39
- `,
40
- /* glsl */ `
41
- varying vec3 localPosition;
42
- varying vec4 worldPosition;
43
-
44
- uniform vec3 worldCamProjPosition;
45
- uniform float cellSize;
46
- uniform float sectionSize;
47
- uniform vec3 cellColor;
48
- uniform vec3 sectionColor;
49
- uniform float fadeDistance;
50
- uniform float fadeStrength;
51
- uniform float cellThickness;
52
- uniform float sectionThickness;
53
-
54
- float getGrid(float size, float thickness) {
55
- vec2 r = localPosition.xz / size;
56
- vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);
57
- float line = min(grid.x, grid.y) + 1.0 - thickness;
58
- return 1.0 - min(line, 1.0);
59
- }
60
-
61
- void main() {
62
- float g1 = getGrid(cellSize, cellThickness);
63
- float g2 = getGrid(sectionSize, sectionThickness);
64
-
65
- float dist = distance(worldCamProjPosition, worldPosition.xyz);
66
- float d = 1.0 - min(dist / fadeDistance, 1.0);
67
- vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * g2));
68
-
69
- gl_FragColor = vec4(color, (g1 + g2) * pow(d, fadeStrength));
70
- gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);
71
- if (gl_FragColor.a <= 0.0) discard;
72
-
73
- #include <tonemapping_fragment>
74
- #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
75
- }
76
- `);
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tYXRlcmlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9zaGFkZXJzL3NyYy9ncmlkLW1hdGVyaWFsL2dyaWQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxjQUFjLENBQ3pDO0lBQ0MsUUFBUSxFQUFFLEdBQUc7SUFDYixXQUFXLEVBQUUsQ0FBQztJQUNkLFlBQVksRUFBRSxHQUFHO0lBQ2pCLFlBQVksRUFBRSxDQUFDO0lBQ2YsYUFBYSxFQUFFLEdBQUc7SUFDbEIsZ0JBQWdCLEVBQUUsQ0FBQztJQUNuQixTQUFTLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO0lBQzVCLFlBQVksRUFBRSxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7SUFDL0IsWUFBWSxFQUFFLEtBQUs7SUFDbkIsWUFBWSxFQUFFLEtBQUs7SUFDbkIsb0JBQW9CLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQ3pDLGtCQUFrQixFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtDQUN2QztBQUNELFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCVDtBQUNGLFVBQVUsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQkFrQ00sUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLG9CQUFvQjs7R0FFakgsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBOZ3RTaGFkZXJNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IGNvbnN0IEdyaWRNYXRlcmlhbCA9IHNoYWRlck1hdGVyaWFsKFxuXHR7XG5cdFx0Y2VsbFNpemU6IDAuNSxcblx0XHRzZWN0aW9uU2l6ZTogMSxcblx0XHRmYWRlRGlzdGFuY2U6IDEwMCxcblx0XHRmYWRlU3RyZW5ndGg6IDEsXG5cdFx0Y2VsbFRoaWNrbmVzczogMC41LFxuXHRcdHNlY3Rpb25UaGlja25lc3M6IDEsXG5cdFx0Y2VsbENvbG9yOiBuZXcgVEhSRUUuQ29sb3IoKSxcblx0XHRzZWN0aW9uQ29sb3I6IG5ldyBUSFJFRS5Db2xvcigpLFxuXHRcdGluZmluaXRlR3JpZDogZmFsc2UsXG5cdFx0Zm9sbG93Q2FtZXJhOiBmYWxzZSxcblx0XHR3b3JsZENhbVByb2pQb3NpdGlvbjogbmV3IFRIUkVFLlZlY3RvcjMoKSxcblx0XHR3b3JsZFBsYW5lUG9zaXRpb246IG5ldyBUSFJFRS5WZWN0b3IzKCksXG5cdH0sXG5cdC8qIGdsc2wgKi8gYFxuICAgIHZhcnlpbmcgdmVjMyBsb2NhbFBvc2l0aW9uO1xuICAgIHZhcnlpbmcgdmVjNCB3b3JsZFBvc2l0aW9uO1xuXG4gICAgdW5pZm9ybSB2ZWMzIHdvcmxkQ2FtUHJvalBvc2l0aW9uO1xuICAgIHVuaWZvcm0gdmVjMyB3b3JsZFBsYW5lUG9zaXRpb247XG4gICAgdW5pZm9ybSBmbG9hdCBmYWRlRGlzdGFuY2U7XG4gICAgdW5pZm9ybSBib29sIGluZmluaXRlR3JpZDtcbiAgICB1bmlmb3JtIGJvb2wgZm9sbG93Q2FtZXJhO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgbG9jYWxQb3NpdGlvbiA9IHBvc2l0aW9uLnh6eTtcbiAgICAgIGlmIChpbmZpbml0ZUdyaWQpIGxvY2FsUG9zaXRpb24gKj0gMS4wICsgZmFkZURpc3RhbmNlO1xuXG4gICAgICB3b3JsZFBvc2l0aW9uID0gbW9kZWxNYXRyaXggKiB2ZWM0KGxvY2FsUG9zaXRpb24sIDEuMCk7XG4gICAgICBpZiAoZm9sbG93Q2FtZXJhKSB7XG4gICAgICAgIHdvcmxkUG9zaXRpb24ueHl6ICs9ICh3b3JsZENhbVByb2pQb3NpdGlvbiAtIHdvcmxkUGxhbmVQb3NpdGlvbik7XG4gICAgICAgIGxvY2FsUG9zaXRpb24gPSAoaW52ZXJzZShtb2RlbE1hdHJpeCkgKiB3b3JsZFBvc2l0aW9uKS54eXo7XG4gICAgICB9XG5cbiAgICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xuICAgIH1cbiAgYCxcblx0LyogZ2xzbCAqLyBgXG4gICAgdmFyeWluZyB2ZWMzIGxvY2FsUG9zaXRpb247XG4gICAgdmFyeWluZyB2ZWM0IHdvcmxkUG9zaXRpb247XG5cbiAgICB1bmlmb3JtIHZlYzMgd29ybGRDYW1Qcm9qUG9zaXRpb247XG4gICAgdW5pZm9ybSBmbG9hdCBjZWxsU2l6ZTtcbiAgICB1bmlmb3JtIGZsb2F0IHNlY3Rpb25TaXplO1xuICAgIHVuaWZvcm0gdmVjMyBjZWxsQ29sb3I7XG4gICAgdW5pZm9ybSB2ZWMzIHNlY3Rpb25Db2xvcjtcbiAgICB1bmlmb3JtIGZsb2F0IGZhZGVEaXN0YW5jZTtcbiAgICB1bmlmb3JtIGZsb2F0IGZhZGVTdHJlbmd0aDtcbiAgICB1bmlmb3JtIGZsb2F0IGNlbGxUaGlja25lc3M7XG4gICAgdW5pZm9ybSBmbG9hdCBzZWN0aW9uVGhpY2tuZXNzO1xuXG4gICAgZmxvYXQgZ2V0R3JpZChmbG9hdCBzaXplLCBmbG9hdCB0aGlja25lc3MpIHtcbiAgICAgIHZlYzIgciA9IGxvY2FsUG9zaXRpb24ueHogLyBzaXplO1xuICAgICAgdmVjMiBncmlkID0gYWJzKGZyYWN0KHIgLSAwLjUpIC0gMC41KSAvIGZ3aWR0aChyKTtcbiAgICAgIGZsb2F0IGxpbmUgPSBtaW4oZ3JpZC54LCBncmlkLnkpICsgMS4wIC0gdGhpY2tuZXNzO1xuICAgICAgcmV0dXJuIDEuMCAtIG1pbihsaW5lLCAxLjApO1xuICAgIH1cblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIGZsb2F0IGcxID0gZ2V0R3JpZChjZWxsU2l6ZSwgY2VsbFRoaWNrbmVzcyk7XG4gICAgICBmbG9hdCBnMiA9IGdldEdyaWQoc2VjdGlvblNpemUsIHNlY3Rpb25UaGlja25lc3MpO1xuXG4gICAgICBmbG9hdCBkaXN0ID0gZGlzdGFuY2Uod29ybGRDYW1Qcm9qUG9zaXRpb24sIHdvcmxkUG9zaXRpb24ueHl6KTtcbiAgICAgIGZsb2F0IGQgPSAxLjAgLSBtaW4oZGlzdCAvIGZhZGVEaXN0YW5jZSwgMS4wKTtcbiAgICAgIHZlYzMgY29sb3IgPSBtaXgoY2VsbENvbG9yLCBzZWN0aW9uQ29sb3IsIG1pbigxLjAsIHNlY3Rpb25UaGlja25lc3MgKiBnMikpO1xuXG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCAoZzEgKyBnMikgKiBwb3coZCwgZmFkZVN0cmVuZ3RoKSk7XG4gICAgICBnbF9GcmFnQ29sb3IuYSA9IG1peCgwLjc1ICogZ2xfRnJhZ0NvbG9yLmEsIGdsX0ZyYWdDb2xvci5hLCBnMik7XG4gICAgICBpZiAoZ2xfRnJhZ0NvbG9yLmEgPD0gMC4wKSBkaXNjYXJkO1xuXG4gICAgICAjaW5jbHVkZSA8dG9uZW1hcHBpbmdfZnJhZ21lbnQ+XG4gICAgICAjaW5jbHVkZSA8JHtwYXJzZUludChUSFJFRS5SRVZJU0lPTi5yZXBsYWNlKC9cXEQrL2csICcnKSkgPj0gMTU0ID8gJ2NvbG9yc3BhY2VfZnJhZ21lbnQnIDogJ2VuY29kaW5nc19mcmFnbWVudCd9PlxuICAgIH1cbiAgYCxcbik7XG5cbmV4cG9ydCB0eXBlIE5ndEdyaWRNYXRlcmlhbFN0YXRlID0ge1xuXHQvKiogQ2VsbCBzaXplLCBkZWZhdWx0OiAwLjUgKi9cblx0Y2VsbFNpemU/OiBudW1iZXI7XG5cdC8qKiBDZWxsIHRoaWNrbmVzcywgZGVmYXVsdDogMC41ICovXG5cdGNlbGxUaGlja25lc3M/OiBudW1iZXI7XG5cdC8qKiBDZWxsIGNvbG9yLCBkZWZhdWx0OiBibGFjayAqL1xuXHRjZWxsQ29sb3I/OiBUSFJFRS5Db2xvclJlcHJlc2VudGF0aW9uO1xuXHQvKiogU2VjdGlvbiBzaXplLCBkZWZhdWx0OiAxICovXG5cdHNlY3Rpb25TaXplPzogbnVtYmVyO1xuXHQvKiogU2VjdGlvbiB0aGlja25lc3MsIGRlZmF1bHQ6IDEgKi9cblx0c2VjdGlvblRoaWNrbmVzcz86IG51bWJlcjtcblx0LyoqIFNlY3Rpb24gY29sb3IsIGRlZmF1bHQ6ICMyMDgwZmYgKi9cblx0c2VjdGlvbkNvbG9yPzogVEhSRUUuQ29sb3JSZXByZXNlbnRhdGlvbjtcblx0LyoqIEZvbGxvdyBjYW1lcmEsIGRlZmF1bHQ6IGZhbHNlICovXG5cdGZvbGxvd0NhbWVyYT86IGJvb2xlYW47XG5cdC8qKiBEaXNwbGF5IHRoZSBncmlkIGluZmluaXRlbHksIGRlZmF1bHQ6IGZhbHNlICovXG5cdGluZmluaXRlR3JpZD86IGJvb2xlYW47XG5cdC8qKiBGYWRlIGRpc3RhbmNlLCBkZWZhdWx0OiAxMDAgKi9cblx0ZmFkZURpc3RhbmNlPzogbnVtYmVyO1xuXHQvKiogRmFkZSBzdHJlbmd0aCwgZGVmYXVsdDogMSAqL1xuXHRmYWRlU3RyZW5ndGg/OiBudW1iZXI7XG5cdC8qKiBNYXRlcmlhbCBzaWRlLCBkZWZhdWx0OiBUSFJFRS5CYWNrU2lkZSAqL1xuXHRzaWRlPzogVEhSRUUuU2lkZTtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqL1xuXHRcdCduZ3QtZ3JpZC1tYXRlcmlhbCc6IE5ndEdyaWRNYXRlcmlhbFN0YXRlICYgTmd0U2hhZGVyTWF0ZXJpYWw7XG5cdH1cbn1cbiJdfQ==
@@ -1,56 +0,0 @@
1
- import { InjectionToken, Type, inject } from '@angular/core';
2
- import * as THREE from 'three';
3
- export const NGTS_DISTORT_MATERIAL_SHADER = new InjectionToken('DistortMaterialShader');
4
- export function injectNgtsMeshDistortMaterial() {
5
- return inject(NGTS_DISTORT_MATERIAL_SHADER);
6
- }
7
- export function createMeshDistortMaterial(distortShader) {
8
- return class extends THREE.MeshPhysicalMaterial {
9
- constructor(parameters = {}) {
10
- super(parameters);
11
- this.setValues(parameters);
12
- this._time = { value: 0 };
13
- this._distort = { value: 0.4 };
14
- this._radius = { value: 1 };
15
- }
16
- onBeforeCompile(shader) {
17
- shader.uniforms['time'] = this._time;
18
- shader.uniforms['radius'] = this._radius;
19
- shader.uniforms['distort'] = this._distort;
20
- shader.vertexShader = `
21
- uniform float time;
22
- uniform float radius;
23
- uniform float distort;
24
- ${distortShader}
25
- ${shader.vertexShader}
26
- `;
27
- shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `
28
- float updateTime = time / 50.0;
29
- float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));
30
- vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));
31
- `);
32
- }
33
- get time() {
34
- return this._time.value;
35
- }
36
- set time(v) {
37
- this._time.value = v;
38
- }
39
- get distort() {
40
- return this._distort.value;
41
- }
42
- set distort(v) {
43
- this._distort.value = v;
44
- }
45
- get radius() {
46
- return this._radius.value;
47
- }
48
- set radius(v) {
49
- this._radius.value = v;
50
- }
51
- };
52
- }
53
- export function provideNgtsMeshDistortMaterialShader(distortShader) {
54
- return { provide: NGTS_DISTORT_MATERIAL_SHADER, useFactory: () => createMeshDistortMaterial(distortShader) };
55
- }
56
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1kaXN0b3J0LW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL21lc2gtZGlzdG9ydC1tYXRlcmlhbC9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBc0IvQixNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsdUJBQXVCLENBQUMsQ0FBQztBQUU3RyxNQUFNLFVBQVUsNkJBQTZCO0lBQzVDLE9BQU8sTUFBTSxDQUFDLDRCQUE0QixDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVELE1BQU0sVUFBVSx5QkFBeUIsQ0FBQyxhQUFxQjtJQUM5RCxPQUFPLEtBQU0sU0FBUSxLQUFLLENBQUMsb0JBQW9CO1FBSzlDLFlBQVksYUFBbUQsRUFBRTtZQUNoRSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRVEsZUFBZSxDQUFDLE1BQW9CO1lBQzVDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNyQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDekMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRTNDLE1BQU0sQ0FBQyxZQUFZLEdBQUc7Ozs7ZUFJVixhQUFhO2VBQ2IsTUFBTSxDQUFDLFlBQVk7WUFDdEIsQ0FBQztZQUNWLE1BQU0sQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ2hELHlCQUF5QixFQUN6Qjs7OztnQkFJWSxDQUNaLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxJQUFJO1lBQ1AsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUNULElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxPQUFPO1lBQ1YsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUM1QixDQUFDO1FBRUQsSUFBSSxPQUFPLENBQUMsQ0FBQztZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsSUFBSSxNQUFNO1lBQ1QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsQ0FBQztZQUNYLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO0tBQ0QsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsb0NBQW9DLENBQUMsYUFBcUI7SUFDekUsT0FBTyxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMseUJBQXlCLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztBQUM5RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4sIFR5cGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5pbnRlcmZhY2UgVW5pZm9ybTxUPiB7XG5cdHZhbHVlOiBUO1xufVxuXG4vKipcbiAqIG5wbSBpIC1EIHJhdy1sb2FkZXIgZ2xzbGlmeS1sb2FkZXIgZ2xzbC1ub2lzZVxuICogVXNhZ2U6IGltcG9ydCBkaXN0b3J0IGZyb20gJ3Jhdy1sb2FkZXIhZ2xzbGlmeS1sb2FkZXIhYW5ndWxhci10aHJlZS1zb2JhL2Fzc2V0cy9kaXN0b3J0LnZlcnQuZ2xzbCdcbiAqXG4gKiB1c2luZyBwcm92aWRlcjpcbiAqIC0gcHJvdmlkZU5ndHNNZXNoRGlzdG9ydE1hdGVyaWFsU2hhZGVyKGRpc3RvcnQpXG4gKiAtIHJlYWRvbmx5IE1lc2hEaXN0b3J0TWF0ZXJpYWwgPSBpbmplY3ROZ3RzTWVzaERpc3RvcnRNYXRlcmlhbCgpXG4gKiAtIG1hdGVyaWFsID0gbmV3IHRoaXMuTWVzaERpc3RvcnRNYXRlcmlhbCgpOyAvLyB0aGVuIHVzZSB0aGlzIHdpdGggcHJpbWl0aXZlXG4gKlxuICogdXNpbmcgY3JlYXRlTWVzaERpc3RvcnRNYXRlcmlhbDogY3JlYXRlTWVzaERpc3RvcnRNYXRlcmlhbChkaXN0b3J0KTtcbiAqIC0gY29uc3QgTWVzaERpc3RvcnRNYXRlcmlhbCA9IGNyZWF0ZU1lc2hEaXN0b3J0TWF0ZXJpYWwoZGlzdG9ydCk7XG4gKiAtIGV4dGVuZCh7IE1lc2hEaXN0b3J0TWF0ZXJpYWwgfSk7IC8vIHRoZW4gdXNlIGFzIG5ndC1tZXNoLWRpc3RvcnQtbWF0ZXJpYWxcbiAqL1xuXG5leHBvcnQgdHlwZSBNZXNoRGlzdG9ydE1hdGVyaWFsID0gVHlwZTx7IHRpbWU6IG51bWJlcjsgZGlzdG9ydDogbnVtYmVyOyByYWRpdXM6IG51bWJlciB9ICYgVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWw+O1xuXG5leHBvcnQgY29uc3QgTkdUU19ESVNUT1JUX01BVEVSSUFMX1NIQURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxNZXNoRGlzdG9ydE1hdGVyaWFsPignRGlzdG9ydE1hdGVyaWFsU2hhZGVyJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RzTWVzaERpc3RvcnRNYXRlcmlhbCgpIHtcblx0cmV0dXJuIGluamVjdChOR1RTX0RJU1RPUlRfTUFURVJJQUxfU0hBREVSKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1lc2hEaXN0b3J0TWF0ZXJpYWwoZGlzdG9ydFNoYWRlcjogc3RyaW5nKSB7XG5cdHJldHVybiBjbGFzcyBleHRlbmRzIFRIUkVFLk1lc2hQaHlzaWNhbE1hdGVyaWFsIHtcblx0XHRfdGltZTogVW5pZm9ybTxudW1iZXI+O1xuXHRcdF9kaXN0b3J0OiBVbmlmb3JtPG51bWJlcj47XG5cdFx0X3JhZGl1czogVW5pZm9ybTxudW1iZXI+O1xuXG5cdFx0Y29uc3RydWN0b3IocGFyYW1ldGVyczogVEhSRUUuTWVzaFBoeXNpY2FsTWF0ZXJpYWxQYXJhbWV0ZXJzID0ge30pIHtcblx0XHRcdHN1cGVyKHBhcmFtZXRlcnMpO1xuXHRcdFx0dGhpcy5zZXRWYWx1ZXMocGFyYW1ldGVycyk7XG5cdFx0XHR0aGlzLl90aW1lID0geyB2YWx1ZTogMCB9O1xuXHRcdFx0dGhpcy5fZGlzdG9ydCA9IHsgdmFsdWU6IDAuNCB9O1xuXHRcdFx0dGhpcy5fcmFkaXVzID0geyB2YWx1ZTogMSB9O1xuXHRcdH1cblxuXHRcdG92ZXJyaWRlIG9uQmVmb3JlQ29tcGlsZShzaGFkZXI6IFRIUkVFLlNoYWRlcikge1xuXHRcdFx0c2hhZGVyLnVuaWZvcm1zWyd0aW1lJ10gPSB0aGlzLl90aW1lO1xuXHRcdFx0c2hhZGVyLnVuaWZvcm1zWydyYWRpdXMnXSA9IHRoaXMuX3JhZGl1cztcblx0XHRcdHNoYWRlci51bmlmb3Jtc1snZGlzdG9ydCddID0gdGhpcy5fZGlzdG9ydDtcblxuXHRcdFx0c2hhZGVyLnZlcnRleFNoYWRlciA9IGBcblx0XHRcdFx0XHRcdFx0XHRcdCAgICB1bmlmb3JtIGZsb2F0IHRpbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCByYWRpdXM7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgdW5pZm9ybSBmbG9hdCBkaXN0b3J0O1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICR7ZGlzdG9ydFNoYWRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdCAgICAke3NoYWRlci52ZXJ0ZXhTaGFkZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHQgIGA7XG5cdFx0XHRzaGFkZXIudmVydGV4U2hhZGVyID0gc2hhZGVyLnZlcnRleFNoYWRlci5yZXBsYWNlKFxuXHRcdFx0XHQnI2luY2x1ZGUgPGJlZ2luX3ZlcnRleD4nLFxuXHRcdFx0XHRgXG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgICBmbG9hdCB1cGRhdGVUaW1lID0gdGltZSAvIDUwLjA7XG5cdFx0XHRcdFx0XHRcdFx0XHQgICAgICBmbG9hdCBub2lzZSA9IHNub2lzZSh2ZWMzKHBvc2l0aW9uIC8gMi4wICsgdXBkYXRlVGltZSAqIDUuMCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgdmVjMyB0cmFuc2Zvcm1lZCA9IHZlYzMocG9zaXRpb24gKiAobm9pc2UgKiBwb3coZGlzdG9ydCwgMi4wKSArIHJhZGl1cykpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ICAgICAgYCxcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Z2V0IHRpbWUoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGltZS52YWx1ZTtcblx0XHR9XG5cblx0XHRzZXQgdGltZSh2KSB7XG5cdFx0XHR0aGlzLl90aW1lLnZhbHVlID0gdjtcblx0XHR9XG5cblx0XHRnZXQgZGlzdG9ydCgpIHtcblx0XHRcdHJldHVybiB0aGlzLl9kaXN0b3J0LnZhbHVlO1xuXHRcdH1cblxuXHRcdHNldCBkaXN0b3J0KHYpIHtcblx0XHRcdHRoaXMuX2Rpc3RvcnQudmFsdWUgPSB2O1xuXHRcdH1cblxuXHRcdGdldCByYWRpdXMoKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fcmFkaXVzLnZhbHVlO1xuXHRcdH1cblxuXHRcdHNldCByYWRpdXModikge1xuXHRcdFx0dGhpcy5fcmFkaXVzLnZhbHVlID0gdjtcblx0XHR9XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTmd0c01lc2hEaXN0b3J0TWF0ZXJpYWxTaGFkZXIoZGlzdG9ydFNoYWRlcjogc3RyaW5nKSB7XG5cdHJldHVybiB7IHByb3ZpZGU6IE5HVFNfRElTVE9SVF9NQVRFUklBTF9TSEFERVIsIHVzZUZhY3Rvcnk6ICgpID0+IGNyZWF0ZU1lc2hEaXN0b3J0TWF0ZXJpYWwoZGlzdG9ydFNoYWRlcikgfTtcbn1cbiJdfQ==
@@ -1,223 +0,0 @@
1
- import { Matrix4, MeshStandardMaterial, Texture } from 'three';
2
- export class MeshReflectorMaterial extends MeshStandardMaterial {
3
- constructor(parameters = {}) {
4
- super(parameters);
5
- this._tDepth = { value: null };
6
- this._distortionMap = { value: null };
7
- this._tDiffuse = { value: null };
8
- this._tDiffuseBlur = { value: null };
9
- this._textureMatrix = { value: null };
10
- this._hasBlur = { value: false };
11
- this._mirror = { value: 0.0 };
12
- this._mixBlur = { value: 0.0 };
13
- this._blurStrength = { value: 0.5 };
14
- this._minDepthThreshold = { value: 0.9 };
15
- this._maxDepthThreshold = { value: 1 };
16
- this._depthScale = { value: 0 };
17
- this._depthToBlurRatioBias = { value: 0.25 };
18
- this._distortion = { value: 1 };
19
- this._mixContrast = { value: 1.0 };
20
- this.setValues(parameters);
21
- }
22
- onBeforeCompile(shader) {
23
- if (!shader.defines?.USE_UV) {
24
- shader.defines.USE_UV = '';
25
- }
26
- shader.uniforms.hasBlur = this._hasBlur;
27
- shader.uniforms.tDiffuse = this._tDiffuse;
28
- shader.uniforms.tDepth = this._tDepth;
29
- shader.uniforms.distortionMap = this._distortionMap;
30
- shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;
31
- shader.uniforms.textureMatrix = this._textureMatrix;
32
- shader.uniforms.mirror = this._mirror;
33
- shader.uniforms.mixBlur = this._mixBlur;
34
- shader.uniforms.mixStrength = this._blurStrength;
35
- shader.uniforms.minDepthThreshold = this._minDepthThreshold;
36
- shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;
37
- shader.uniforms.depthScale = this._depthScale;
38
- shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;
39
- shader.uniforms.distortion = this._distortion;
40
- shader.uniforms.mixContrast = this._mixContrast;
41
- shader.vertexShader = `
42
- uniform mat4 textureMatrix;
43
- varying vec4 my_vUv;
44
- ${shader.vertexShader}`;
45
- shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `#include <project_vertex>
46
- my_vUv = textureMatrix * vec4( position, 1.0 );
47
- gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`);
48
- shader.fragmentShader = `
49
- uniform sampler2D tDiffuse;
50
- uniform sampler2D tDiffuseBlur;
51
- uniform sampler2D tDepth;
52
- uniform sampler2D distortionMap;
53
- uniform float distortion;
54
- uniform float cameraNear;
55
- uniform float cameraFar;
56
- uniform bool hasBlur;
57
- uniform float mixBlur;
58
- uniform float mirror;
59
- uniform float mixStrength;
60
- uniform float minDepthThreshold;
61
- uniform float maxDepthThreshold;
62
- uniform float mixContrast;
63
- uniform float depthScale;
64
- uniform float depthToBlurRatioBias;
65
- varying vec4 my_vUv;
66
- ${shader.fragmentShader}`;
67
- shader.fragmentShader = shader.fragmentShader.replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>
68
-
69
- float distortionFactor = 0.0;
70
- #ifdef USE_DISTORTION
71
- distortionFactor = texture2D(distortionMap, vUv).r * distortion;
72
- #endif
73
-
74
- vec4 new_vUv = my_vUv;
75
- new_vUv.x += distortionFactor;
76
- new_vUv.y += distortionFactor;
77
-
78
- vec4 base = texture2DProj(tDiffuse, new_vUv);
79
- vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);
80
-
81
- vec4 merge = base;
82
-
83
- #ifdef USE_NORMALMAP
84
- vec2 normal_uv = vec2(0.0);
85
- vec4 normalColor = texture2D(normalMap, vUv * normalScale);
86
- vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );
87
- vec3 coord = new_vUv.xyz / new_vUv.w;
88
- normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;
89
- vec4 base_normal = texture2D(tDiffuse, normal_uv);
90
- vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);
91
- merge = base_normal;
92
- blur = blur_normal;
93
- #endif
94
-
95
- float depthFactor = 0.0001;
96
- float blurFactor = 0.0;
97
-
98
- #ifdef USE_DEPTH
99
- vec4 depth = texture2DProj(tDepth, new_vUv);
100
- depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
101
- depthFactor *= depthScale;
102
- depthFactor = max(0.0001, min(1.0, depthFactor));
103
-
104
- #ifdef USE_BLUR
105
- blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);
106
- merge = merge * min(1.0, depthFactor + 0.5);
107
- #else
108
- merge = merge * depthFactor;
109
- #endif
110
-
111
- #endif
112
-
113
- float reflectorRoughnessFactor = roughness;
114
- #ifdef USE_ROUGHNESSMAP
115
- vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );
116
- reflectorRoughnessFactor *= reflectorTexelRoughness.g;
117
- #endif
118
-
119
- #ifdef USE_BLUR
120
- blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);
121
- merge = mix(merge, blur, blurFactor);
122
- #endif
123
-
124
- vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);
125
- newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;
126
- newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;
127
- newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;
128
-
129
- diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);
130
- `);
131
- }
132
- get tDiffuse() {
133
- return this._tDiffuse.value;
134
- }
135
- set tDiffuse(v) {
136
- this._tDiffuse.value = v;
137
- }
138
- get tDepth() {
139
- return this._tDepth.value;
140
- }
141
- set tDepth(v) {
142
- this._tDepth.value = v;
143
- }
144
- get distortionMap() {
145
- return this._distortionMap.value;
146
- }
147
- set distortionMap(v) {
148
- this._distortionMap.value = v;
149
- }
150
- get tDiffuseBlur() {
151
- return this._tDiffuseBlur.value;
152
- }
153
- set tDiffuseBlur(v) {
154
- this._tDiffuseBlur.value = v;
155
- }
156
- get textureMatrix() {
157
- return this._textureMatrix.value;
158
- }
159
- set textureMatrix(v) {
160
- this._textureMatrix.value = v;
161
- }
162
- get hasBlur() {
163
- return this._hasBlur.value;
164
- }
165
- set hasBlur(v) {
166
- this._hasBlur.value = v;
167
- }
168
- get mirror() {
169
- return this._mirror.value;
170
- }
171
- set mirror(v) {
172
- this._mirror.value = v;
173
- }
174
- get mixBlur() {
175
- return this._mixBlur.value;
176
- }
177
- set mixBlur(v) {
178
- this._mixBlur.value = v;
179
- }
180
- get mixStrength() {
181
- return this._blurStrength.value;
182
- }
183
- set mixStrength(v) {
184
- this._blurStrength.value = v;
185
- }
186
- get minDepthThreshold() {
187
- return this._minDepthThreshold.value;
188
- }
189
- set minDepthThreshold(v) {
190
- this._minDepthThreshold.value = v;
191
- }
192
- get maxDepthThreshold() {
193
- return this._maxDepthThreshold.value;
194
- }
195
- set maxDepthThreshold(v) {
196
- this._maxDepthThreshold.value = v;
197
- }
198
- get depthScale() {
199
- return this._depthScale.value;
200
- }
201
- set depthScale(v) {
202
- this._depthScale.value = v;
203
- }
204
- get depthToBlurRatioBias() {
205
- return this._depthToBlurRatioBias.value;
206
- }
207
- set depthToBlurRatioBias(v) {
208
- this._depthToBlurRatioBias.value = v;
209
- }
210
- get distortion() {
211
- return this._distortion.value;
212
- }
213
- set distortion(v) {
214
- this._distortion.value = v;
215
- }
216
- get mixContrast() {
217
- return this._mixContrast.value;
218
- }
219
- set mixContrast(v) {
220
- this._mixContrast.value = v;
221
- }
222
- }
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvc2hhZGVycy9zcmMvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFJL0QsTUFBTSxPQUFPLHFCQUFzQixTQUFRLG9CQUFvQjtJQWlCOUQsWUFBWSxVQUFVLEdBQUcsRUFBRTtRQUMxQixLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFqQlgsWUFBTyxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN6RCxtQkFBYyxHQUFrQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNoRSxjQUFTLEdBQWtDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzNELGtCQUFhLEdBQWtDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQy9ELG1CQUFjLEdBQWtDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2hFLGFBQVEsR0FBdUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDaEQsWUFBTyxHQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUM1QyxhQUFRLEdBQXNCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzdDLGtCQUFhLEdBQXNCLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2xELHVCQUFrQixHQUFzQixFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUN2RCx1QkFBa0IsR0FBc0IsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDckQsZ0JBQVcsR0FBc0IsRUFBRSxLQUFL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LFVBQVUsQ0FBQyxDQUFTO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBQ0QsSUFBSSxXQUFXO1FBQ2QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBQ0QsSUFBSSxXQUFXLENBQUMsQ0FBUztRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDN0IsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWF0cml4NCwgTWVzaFN0YW5kYXJkTWF0ZXJpYWwsIFRleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5cbnR5cGUgVW5pbml0aWFsaXplZFVuaWZvcm08VmFsdWU+ID0geyB2YWx1ZTogVmFsdWUgfCBudWxsIH07XG5cbmV4cG9ydCBjbGFzcyBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgZXh0ZW5kcyBNZXNoU3RhbmRhcmRNYXRlcmlhbCB7XG5cdHByaXZhdGUgX3REZXB0aDogVW5pbml0aWFsaXplZFVuaWZvcm08VGV4dHVyZT4gPSB7IHZhbHVlOiBudWxsIH07XG5cdHByaXZhdGUgX2Rpc3RvcnRpb25NYXA6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPFRleHR1cmU+ID0geyB2YWx1ZTogbnVsbCB9O1xuXHRwcml2YXRlIF90RGlmZnVzZTogVW5pbml0aWFsaXplZFVuaWZvcm08VGV4dHVyZT4gPSB7IHZhbHVlOiBudWxsIH07XG5cdHByaXZhdGUgX3REaWZmdXNlQmx1cjogVW5pbml0aWFsaXplZFVuaWZvcm08VGV4dHVyZT4gPSB7IHZhbHVlOiBudWxsIH07XG5cdHByaXZhdGUgX3RleHR1cmVNYXRyaXg6IFVuaW5pdGlhbGl6ZWRVbmlmb3JtPE1hdHJpeDQ+ID0geyB2YWx1ZTogbnVsbCB9O1xuXHRwcml2YXRlIF9oYXNCbHVyOiB7IHZhbHVlOiBib29sZWFuIH0gPSB7IHZhbHVlOiBmYWxzZSB9O1xuXHRwcml2YXRlIF9taXJyb3I6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMC4wIH07XG5cdHByaXZhdGUgX21peEJsdXI6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMC4wIH07XG5cdHByaXZhdGUgX2JsdXJTdHJlbmd0aDogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAwLjUgfTtcblx0cHJpdmF0ZSBfbWluRGVwdGhUaHJlc2hvbGQ6IHsgdmFsdWU6IG51bWJlciB9ID0geyB2YWx1ZTogMC45IH07XG5cdHByaXZhdGUgX21heERlcHRoVGhyZXNob2xkOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDEgfTtcblx0cHJpdmF0ZSBfZGVwdGhTY2FsZTogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAwIH07XG5cdHByaXZhdGUgX2RlcHRoVG9CbHVyUmF0aW9CaWFzOiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDAuMjUgfTtcblx0cHJpdmF0ZSBfZGlzdG9ydGlvbjogeyB2YWx1ZTogbnVtYmVyIH0gPSB7IHZhbHVlOiAxIH07XG5cdHByaXZhdGUgX21peENvbnRyYXN0OiB7IHZhbHVlOiBudW1iZXIgfSA9IHsgdmFsdWU6IDEuMCB9O1xuXG5cdGNvbnN0cnVjdG9yKHBhcmFtZXRlcnMgPSB7fSkge1xuXHRcdHN1cGVyKHBhcmFtZXRlcnMpO1xuXHRcdHRoaXMuc2V0VmFsdWVzKHBhcmFtZXRlcnMpO1xuXHR9XG5cdG92ZXJyaWRlIG9uQmVmb3JlQ29tcGlsZShzaGFkZXI6IGFueSkge1xuXHRcdGlmICghc2hhZGVyLmRlZmluZXM/LlVTRV9VVikge1xuXHRcdFx0c2hhZGVyLmRlZmluZXMuVVNFX1VWID0gJyc7XG5cdFx0fVxuXHRcdHNoYWRlci51bmlmb3Jtcy5oYXNCbHVyID0gdGhpcy5faGFzQmx1cjtcblx0XHRzaGFkZXIudW5pZm9ybXMudERpZmZ1c2UgPSB0aGlzLl90RGlmZnVzZTtcblx0XHRzaGFkZXIudW5pZm9ybXMudERlcHRoID0gdGhpcy5fdERlcHRoO1xuXHRcdHNoYWRlci51bmlmb3Jtcy5kaXN0b3J0aW9uTWFwID0gdGhpcy5fZGlzdG9ydGlvbk1hcDtcblx0XHRzaGFkZXIudW5pZm9ybXMudERpZmZ1c2VCbHVyID0gdGhpcy5fdERpZmZ1c2VCbHVyO1xuXHRcdHNoYWRlci51bmlmb3Jtcy50ZXh0dXJlTWF0cml4ID0gdGhpcy5fdGV4dHVyZU1hdHJpeDtcblx0XHRzaGFkZXIudW5pZm9ybXMubWlycm9yID0gdGhpcy5fbWlycm9yO1xuXHRcdHNoYWRlci51bmlmb3Jtcy5taXhCbHVyID0gdGhpcy5fbWl4Qmx1cjtcblx0XHRzaGFkZXIudW5pZm9ybXMubWl4U3RyZW5ndGggPSB0aGlzLl9ibHVyU3RyZW5ndGg7XG5cdFx0c2hhZGVyLnVuaWZvcm1zLm1pbkRlcHRoVGhyZXNob2xkID0gdGhpcy5fbWluRGVwdGhUaHJlc2hvbGQ7XG5cdFx0c2hhZGVyLnVuaWZvcm1zLm1heERlcHRoVGhyZXNob2xkID0gdGhpcy5fbWF4RGVwdGhUaHJlc2hvbGQ7XG5cdFx0c2hhZGVyLnVuaWZvcm1zLmRlcHRoU2NhbGUgPSB0aGlzLl9kZXB0aFNjYWxlO1xuXHRcdHNoYWRlci51bmlmb3Jtcy5kZXB0aFRvQmx1clJhdGlvQmlhcyA9IHRoaXMuX2RlcHRoVG9CbHVyUmF0aW9CaWFzO1xuXHRcdHNoYWRlci51bmlmb3Jtcy5kaXN0b3J0aW9uID0gdGhpcy5fZGlzdG9ydGlvbjtcblx0XHRzaGFkZXIudW5pZm9ybXMubWl4Q29udHJhc3QgPSB0aGlzLl9taXhDb250cmFzdDtcblx0XHRzaGFkZXIudmVydGV4U2hhZGVyID0gYFxuICAgICAgICB1bmlmb3JtIG1hdDQgdGV4dHVyZU1hdHJpeDtcbiAgICAgICAgdmFyeWluZyB2ZWM0IG15X3ZVdjtcbiAgICAgICR7c2hhZGVyLnZlcnRleFNoYWRlcn1gO1xuXHRcdHNoYWRlci52ZXJ0ZXhTaGFkZXIgPSBzaGFkZXIudmVydGV4U2hhZGVyLnJlcGxhY2UoXG5cdFx0XHQnI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PicsXG5cdFx0XHRgI2luY2x1ZGUgPHByb2plY3RfdmVydGV4PlxuICAgICAgICBteV92VXYgPSB0ZXh0dXJlTWF0cml4ICogdmVjNCggcG9zaXRpb24sIDEuMCApO1xuICAgICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7YCxcblx0XHQpO1xuXHRcdHNoYWRlci5mcmFnbWVudFNoYWRlciA9IGBcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdERpZmZ1c2U7XG4gICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHREaWZmdXNlQmx1cjtcbiAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgdERlcHRoO1xuICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBkaXN0b3J0aW9uTWFwO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IGRpc3RvcnRpb247XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgY2FtZXJhTmVhcjtcblx0XHRcdCAgdW5pZm9ybSBmbG9hdCBjYW1lcmFGYXI7XG4gICAgICAgIHVuaWZvcm0gYm9vbCBoYXNCbHVyO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1peEJsdXI7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgbWlycm9yO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1peFN0cmVuZ3RoO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1pbkRlcHRoVGhyZXNob2xkO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1heERlcHRoVGhyZXNob2xkO1xuICAgICAgICB1bmlmb3JtIGZsb2F0IG1peENvbnRyYXN0O1xuICAgICAgICB1bmlmb3JtIGZsb2F0IGRlcHRoU2NhbGU7XG4gICAgICAgIHVuaWZvcm0gZmxvYXQgZGVwdGhUb0JsdXJSYXRpb0JpYXM7XG4gICAgICAgIHZhcnlpbmcgdmVjNCBteV92VXY7XG4gICAgICAgICR7c2hhZGVyLmZyYWdtZW50U2hhZGVyfWA7XG5cdFx0c2hhZGVyLmZyYWdtZW50U2hhZGVyID0gc2hhZGVyLmZyYWdtZW50U2hhZGVyLnJlcGxhY2UoXG5cdFx0XHQnI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PicsXG5cdFx0XHRgI2luY2x1ZGUgPGVtaXNzaXZlbWFwX2ZyYWdtZW50PlxuXG4gICAgICBmbG9hdCBkaXN0b3J0aW9uRmFjdG9yID0gMC4wO1xuICAgICAgI2lmZGVmIFVTRV9ESVNUT1JUSU9OXG4gICAgICAgIGRpc3RvcnRpb25GYWN0b3IgPSB0ZXh0dXJlMkQoZGlzdG9ydGlvbk1hcCwgdlV2KS5yICogZGlzdG9ydGlvbjtcbiAgICAgICNlbmRpZlxuXG4gICAgICB2ZWM0IG5ld192VXYgPSBteV92VXY7XG4gICAgICBuZXdfdlV2LnggKz0gZGlzdG9ydGlvbkZhY3RvcjtcbiAgICAgIG5ld192VXYueSArPSBkaXN0b3J0aW9uRmFjdG9yO1xuXG4gICAgICB2ZWM0IGJhc2UgPSB0ZXh0dXJlMkRQcm9qKHREaWZmdXNlLCBuZXdfdlV2KTtcbiAgICAgIHZlYzQgYmx1ciA9IHRleHR1cmUyRFByb2oodERpZmZ1c2VCbHVyLCBuZXdfdlV2KTtcblxuICAgICAgdmVjNCBtZXJnZSA9IGJhc2U7XG5cbiAgICAgICNpZmRlZiBVU0VfTk9STUFMTUFQXG4gICAgICAgIHZlYzIgbm9ybWFsX3V2ID0gdmVjMigwLjApO1xuICAgICAgICB2ZWM0IG5vcm1hbENvbG9yID0gdGV4dHVyZTJEKG5vcm1hbE1hcCwgdlV2ICogbm9ybWFsU2NhbGUpO1xuICAgICAgICB2ZWMzIG15X25vcm1hbCA9IG5vcm1hbGl6ZSggdmVjMyggbm9ybWFsQ29sb3IuciAqIDIuMCAtIDEuMCwgbm9ybWFsQ29sb3IuYiwgIG5vcm1hbENvbG9yLmcgKiAyLjAgLSAxLjAgKSApO1xuICAgICAgICB2ZWMzIGNvb3JkID0gbmV3X3ZVdi54eXogLyBuZXdfdlV2Lnc7XG4gICAgICAgIG5vcm1hbF91diA9IGNvb3JkLnh5ICsgY29vcmQueiAqIG15X25vcm1hbC54eiAqIDAuMDU7XG4gICAgICAgIHZlYzQgYmFzZV9ub3JtYWwgPSB0ZXh0dXJlMkQodERpZmZ1c2UsIG5vcm1hbF91dik7XG4gICAgICAgIHZlYzQgYmx1cl9ub3JtYWwgPSB0ZXh0dXJlMkQodERpZmZ1c2VCbHVyLCBub3JtYWxfdXYpO1xuICAgICAgICBtZXJnZSA9IGJhc2Vfbm9ybWFsO1xuICAgICAgICBibHVyID0gYmx1cl9ub3JtYWw7XG4gICAgICAjZW5kaWZcblxuICAgICAgZmxvYXQgZGVwdGhGYWN0b3IgPSAwLjAwMDE7XG4gICAgICBmbG9hdCBibHVyRmFjdG9yID0gMC4wO1xuXG4gICAgICAjaWZkZWYgVVNFX0RFUFRIXG4gICAgICAgIHZlYzQgZGVwdGggPSB0ZXh0dXJlMkRQcm9qKHREZXB0aCwgbmV3X3ZVdik7XG4gICAgICAgIGRlcHRoRmFjdG9yID0gc21vb3Roc3RlcChtaW5EZXB0aFRocmVzaG9sZCwgbWF4RGVwdGhUaHJlc2hvbGQsIDEuMC0oZGVwdGguciAqIGRlcHRoLmEpKTtcbiAgICAgICAgZGVwdGhGYWN0b3IgKj0gZGVwdGhTY2FsZTtcbiAgICAgICAgZGVwdGhGYWN0b3IgPSBtYXgoMC4wMDAxLCBtaW4oMS4wLCBkZXB0aEZhY3RvcikpO1xuXG4gICAgICAgICNpZmRlZiBVU0VfQkxVUlxuICAgICAgICAgIGJsdXIgPSBibHVyICogbWluKDEuMCwgZGVwdGhGYWN0b3IgKyBkZXB0aFRvQmx1clJhdGlvQmlhcyk7XG4gICAgICAgICAgbWVyZ2UgPSBtZXJnZSAqIG1pbigxLjAsIGRlcHRoRmFjdG9yICsgMC41KTtcbiAgICAgICAgI2Vsc2VcbiAgICAgICAgICBtZXJnZSA9IG1lcmdlICogZGVwdGhGYWN0b3I7XG4gICAgICAgICNlbmRpZlxuXG4gICAgICAjZW5kaWZcblxuICAgICAgZmxvYXQgcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yID0gcm91Z2huZXNzO1xuICAgICAgI2lmZGVmIFVTRV9ST1VHSE5FU1NNQVBcbiAgICAgICAgdmVjNCByZWZsZWN0b3JUZXhlbFJvdWdobmVzcyA9IHRleHR1cmUyRCggcm91Z2huZXNzTWFwLCB2VXYgKTtcbiAgICAgICAgcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yICo9IHJlZmxlY3RvclRleGVsUm91Z2huZXNzLmc7XG4gICAgICAjZW5kaWZcblxuICAgICAgI2lmZGVmIFVTRV9CTFVSXG4gICAgICAgIGJsdXJGYWN0b3IgPSBtaW4oMS4wLCBtaXhCbHVyICogcmVmbGVjdG9yUm91Z2huZXNzRmFjdG9yKTtcbiAgICAgICAgbWVyZ2UgPSBtaXgobWVyZ2UsIGJsdXIsIGJsdXJGYWN0b3IpO1xuICAgICAgI2VuZGlmXG5cbiAgICAgIHZlYzQgbmV3TWVyZ2UgPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XG4gICAgICBuZXdNZXJnZS5yID0gKG1lcmdlLnIgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG4gICAgICBuZXdNZXJnZS5nID0gKG1lcmdlLmcgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG4gICAgICBuZXdNZXJnZS5iID0gKG1lcmdlLmIgLSAwLjUpICogbWl4Q29udHJhc3QgKyAwLjU7XG5cbiAgICAgIGRpZmZ1c2VDb2xvci5yZ2IgPSBkaWZmdXNlQ29sb3IucmdiICogKCgxLjAgLSBtaW4oMS4wLCBtaXJyb3IpKSArIG5ld01lcmdlLnJnYiAqIG1peFN0cmVuZ3RoKTtcbiAgICAgIGAsXG5cdFx0KTtcblx0fVxuXHRnZXQgdERpZmZ1c2UoKTogVGV4dHVyZSB8IG51bGwge1xuXHRcdHJldHVybiB0aGlzLl90RGlmZnVzZS52YWx1ZTtcblx0fVxuXHRzZXQgdERpZmZ1c2UodjogVGV4dHVyZSB8IG51bGwpIHtcblx0XHR0aGlzLl90RGlmZnVzZS52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IHREZXB0aCgpOiBUZXh0dXJlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuX3REZXB0aC52YWx1ZTtcblx0fVxuXHRzZXQgdERlcHRoKHY6IFRleHR1cmUgfCBudWxsKSB7XG5cdFx0dGhpcy5fdERlcHRoLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgZGlzdG9ydGlvbk1hcCgpOiBUZXh0dXJlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHRoaXMuX2Rpc3RvcnRpb25NYXAudmFsdWU7XG5cdH1cblx0c2V0IGRpc3RvcnRpb25NYXAodjogVGV4dHVyZSB8IG51bGwpIHtcblx0XHR0aGlzLl9kaXN0b3J0aW9uTWFwLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgdERpZmZ1c2VCbHVyKCk6IFRleHR1cmUgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fdERpZmZ1c2VCbHVyLnZhbHVlO1xuXHR9XG5cdHNldCB0RGlmZnVzZUJsdXIodjogVGV4dHVyZSB8IG51bGwpIHtcblx0XHR0aGlzLl90RGlmZnVzZUJsdXIudmFsdWUgPSB2O1xuXHR9XG5cdGdldCB0ZXh0dXJlTWF0cml4KCk6IE1hdHJpeDQgfCBudWxsIHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZU1hdHJpeC52YWx1ZTtcblx0fVxuXHRzZXQgdGV4dHVyZU1hdHJpeCh2OiBNYXRyaXg0IHwgbnVsbCkge1xuXHRcdHRoaXMuX3RleHR1cmVNYXRyaXgudmFsdWUgPSB2O1xuXHR9XG5cdGdldCBoYXNCbHVyKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLl9oYXNCbHVyLnZhbHVlO1xuXHR9XG5cdHNldCBoYXNCbHVyKHY6IGJvb2xlYW4pIHtcblx0XHR0aGlzLl9oYXNCbHVyLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgbWlycm9yKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX21pcnJvci52YWx1ZTtcblx0fVxuXHRzZXQgbWlycm9yKHY6IG51bWJlcikge1xuXHRcdHRoaXMuX21pcnJvci52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IG1peEJsdXIoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fbWl4Qmx1ci52YWx1ZTtcblx0fVxuXHRzZXQgbWl4Qmx1cih2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9taXhCbHVyLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgbWl4U3RyZW5ndGgoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fYmx1clN0cmVuZ3RoLnZhbHVlO1xuXHR9XG5cdHNldCBtaXhTdHJlbmd0aCh2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9ibHVyU3RyZW5ndGgudmFsdWUgPSB2O1xuXHR9XG5cdGdldCBtaW5EZXB0aFRocmVzaG9sZCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9taW5EZXB0aFRocmVzaG9sZC52YWx1ZTtcblx0fVxuXHRzZXQgbWluRGVwdGhUaHJlc2hvbGQodjogbnVtYmVyKSB7XG5cdFx0dGhpcy5fbWluRGVwdGhUaHJlc2hvbGQudmFsdWUgPSB2O1xuXHR9XG5cdGdldCBtYXhEZXB0aFRocmVzaG9sZCgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9tYXhEZXB0aFRocmVzaG9sZC52YWx1ZTtcblx0fVxuXHRzZXQgbWF4RGVwdGhUaHJlc2hvbGQodjogbnVtYmVyKSB7XG5cdFx0dGhpcy5fbWF4RGVwdGhUaHJlc2hvbGQudmFsdWUgPSB2O1xuXHR9XG5cdGdldCBkZXB0aFNjYWxlKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2RlcHRoU2NhbGUudmFsdWU7XG5cdH1cblx0c2V0IGRlcHRoU2NhbGUodjogbnVtYmVyKSB7XG5cdFx0dGhpcy5fZGVwdGhTY2FsZS52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IGRlcHRoVG9CbHVyUmF0aW9CaWFzKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2RlcHRoVG9CbHVyUmF0aW9CaWFzLnZhbHVlO1xuXHR9XG5cdHNldCBkZXB0aFRvQmx1clJhdGlvQmlhcyh2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9kZXB0aFRvQmx1clJhdGlvQmlhcy52YWx1ZSA9IHY7XG5cdH1cblx0Z2V0IGRpc3RvcnRpb24oKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlzdG9ydGlvbi52YWx1ZTtcblx0fVxuXHRzZXQgZGlzdG9ydGlvbih2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9kaXN0b3J0aW9uLnZhbHVlID0gdjtcblx0fVxuXHRnZXQgbWl4Q29udHJhc3QoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fbWl4Q29udHJhc3QudmFsdWU7XG5cdH1cblx0c2V0IG1peENvbnRyYXN0KHY6IG51bWJlcikge1xuXHRcdHRoaXMuX21peENvbnRyYXN0LnZhbHVlID0gdjtcblx0fVxufVxuIl19
@@ -1,170 +0,0 @@
1
- // Author: N8Programs
2
- // https://github.com/N8python/diamonds
3
- import * as THREE from 'three';
4
- // @ts-expect-error: shaderIntersectFunction is available but typescript complains
5
- import { MeshBVHUniformStruct, shaderIntersectFunction, shaderStructs } from 'three-mesh-bvh';
6
- import { shaderMaterial } from '../shader-material/shader-material';
7
- export const MeshRefractionMaterial = shaderMaterial({
8
- envMap: null,
9
- bounces: 3,
10
- ior: 2.4,
11
- correctMips: true,
12
- aberrationStrength: 0.01,
13
- fresnel: 0,
14
- // @ts-expect-error: typing is not matched
15
- bvh: new MeshBVHUniformStruct(),
16
- color: new THREE.Color('white'),
17
- resolution: new THREE.Vector2(),
18
- viewMatrixInverse: new THREE.Matrix4(),
19
- projectionMatrixInverse: new THREE.Matrix4(),
20
- },
21
- /*glsl*/ `
22
- uniform mat4 viewMatrixInverse;
23
-
24
- varying vec3 vWorldPosition;
25
- varying vec3 vNormal;
26
- varying mat4 vModelMatrixInverse;
27
-
28
- #ifdef USE_INSTANCING_COLOR
29
- varying vec3 vInstanceColor;
30
- #endif
31
-
32
- void main() {
33
- vec4 transformedNormal = vec4(normal, 0.0);
34
- vec4 transformedPosition = vec4(position, 1.0);
35
- #ifdef USE_INSTANCING
36
- transformedNormal = instanceMatrix * transformedNormal;
37
- transformedPosition = instanceMatrix * transformedPosition;
38
- #endif
39
-
40
- #ifdef USE_INSTANCING
41
- vModelMatrixInverse = inverse(modelMatrix * instanceMatrix);
42
- #else
43
- vModelMatrixInverse = inverse(modelMatrix);
44
- #endif
45
-
46
- #ifdef USE_INSTANCING_COLOR
47
- vInstanceColor = instanceColor.rgb;
48
- #endif
49
-
50
- vWorldPosition = (modelMatrix * transformedPosition).xyz;
51
- vNormal = normalize((viewMatrixInverse * vec4(normalMatrix * transformedNormal.xyz, 0.0)).xyz);
52
- gl_Position = projectionMatrix * viewMatrix * modelMatrix * transformedPosition;
53
- }`,
54
- /*glsl*/ `
55
- #define ENVMAP_TYPE_CUBE_UV
56
- precision highp isampler2D;
57
- precision highp usampler2D;
58
- varying vec3 vWorldPosition;
59
- varying vec3 vNormal;
60
- varying mat4 vModelMatrixInverse;
61
-
62
- #ifdef USE_INSTANCING_COLOR
63
- varying vec3 vInstanceColor;
64
- #endif
65
-
66
- #ifdef ENVMAP_TYPE_CUBEM
67
- uniform samplerCube envMap;
68
- #else
69
- uniform sampler2D envMap;
70
- #endif
71
-
72
- uniform float bounces;
73
- ${shaderStructs}
74
- ${shaderIntersectFunction}
75
- uniform BVH bvh;
76
- uniform float ior;
77
- uniform bool correctMips;
78
- uniform vec2 resolution;
79
- uniform float fresnel;
80
- uniform mat4 modelMatrix;
81
- uniform mat4 projectionMatrixInverse;
82
- uniform mat4 viewMatrixInverse;
83
- uniform float aberrationStrength;
84
- uniform vec3 color;
85
-
86
- float fresnelFunc(vec3 viewDirection, vec3 worldNormal) {
87
- return pow( 1.0 + dot( viewDirection, worldNormal), 10.0 );
88
- }
89
-
90
- vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 normal, float ior, mat4 modelMatrixInverse) {
91
- vec3 rayOrigin = ro;
92
- vec3 rayDirection = rd;
93
- rayDirection = refract(rayDirection, normal, 1.0 / ior);
94
- rayOrigin = vWorldPosition + rayDirection * 0.001;
95
- rayOrigin = (modelMatrixInverse * vec4(rayOrigin, 1.0)).xyz;
96
- rayDirection = normalize((modelMatrixInverse * vec4(rayDirection, 0.0)).xyz);
97
- for(float i = 0.0; i < bounces; i++) {
98
- uvec4 faceIndices = uvec4( 0u );
99
- vec3 faceNormal = vec3( 0.0, 0.0, 1.0 );
100
- vec3 barycoord = vec3( 0.0 );
101
- float side = 1.0;
102
- float dist = 0.0;
103
- bvhIntersectFirstHit( bvh, rayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist );
104
- vec3 hitPos = rayOrigin + rayDirection * max(dist - 0.001, 0.0);
105
- vec3 tempDir = refract(rayDirection, faceNormal, ior);
106
- if (length(tempDir) != 0.0) {
107
- rayDirection = tempDir;
108
- break;
109
- }
110
- rayDirection = reflect(rayDirection, faceNormal);
111
- rayOrigin = hitPos + rayDirection * 0.01;
112
- }
113
- rayDirection = normalize((modelMatrix * vec4(rayDirection, 0.0)).xyz);
114
- return rayDirection;
115
- }
116
-
117
- #include <common>
118
- #include <cube_uv_reflection_fragment>
119
-
120
- #ifdef ENVMAP_TYPE_CUBEM
121
- vec4 textureGradient(samplerCube envMap, vec3 rayDirection, vec3 directionCamPerfect) {
122
- return textureGrad(envMap, rayDirection, dFdx(correctMips ? directionCamPerfect: rayDirection), dFdy(correctMips ? directionCamPerfect: rayDirection));
123
- }
124
- #else
125
- vec4 textureGradient(sampler2D envMap, vec3 rayDirection, vec3 directionCamPerfect) {
126
- vec2 uvv = equirectUv( rayDirection );
127
- vec2 smoothUv = equirectUv( directionCamPerfect );
128
- return textureGrad(envMap, uvv, dFdx(correctMips ? smoothUv : uvv), dFdy(correctMips ? smoothUv : uvv));
129
- }
130
- #endif
131
-
132
- void main() {
133
- vec2 uv = gl_FragCoord.xy / resolution;
134
- vec3 directionCamPerfect = (projectionMatrixInverse * vec4(uv * 2.0 - 1.0, 0.0, 1.0)).xyz;
135
- directionCamPerfect = (viewMatrixInverse * vec4(directionCamPerfect, 0.0)).xyz;
136
- directionCamPerfect = normalize(directionCamPerfect);
137
- vec3 normal = vNormal;
138
- vec3 rayOrigin = cameraPosition;
139
- vec3 rayDirection = normalize(vWorldPosition - cameraPosition);
140
- vec3 finalColor;
141
- #ifdef CHROMATIC_ABERRATIONS
142
- vec3 rayDirectionG = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), vModelMatrixInverse);
143
- #ifdef FAST_CHROMA
144
- vec3 rayDirectionR = normalize(rayDirectionG + 1.0 * vec3(aberrationStrength / 2.0));
145
- vec3 rayDirectionB = normalize(rayDirectionG - 1.0 * vec3(aberrationStrength / 2.0));
146
- #else
147
- vec3 rayDirectionR = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 - aberrationStrength), 1.0), vModelMatrixInverse);
148
- vec3 rayDirectionB = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 + aberrationStrength), 1.0), vModelMatrixInverse);
149
- #endif
150
- float finalColorR = textureGradient(envMap, rayDirectionR, directionCamPerfect).r;
151
- float finalColorG = textureGradient(envMap, rayDirectionG, directionCamPerfect).g;
152
- float finalColorB = textureGradient(envMap, rayDirectionB, directionCamPerfect).b;
153
- finalColor = vec3(finalColorR, finalColorG, finalColorB);
154
- #else
155
- rayDirection = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), vModelMatrixInverse);
156
- finalColor = textureGradient(envMap, rayDirection, directionCamPerfect).rgb;
157
- #endif
158
-
159
- finalColor *= color;
160
- #ifdef USE_INSTANCING_COLOR
161
- finalColor *= vInstanceColor;
162
- #endif
163
-
164
- vec3 viewDirection = normalize(vWorldPosition - cameraPosition);
165
- float nFresnel = fresnelFunc(viewDirection, normal) * fresnel;
166
- gl_FragColor = vec4(mix(finalColor, vec3(1.0), nFresnel), 1.0);
167
- #include <tonemapping_fragment>
168
- #include <${parseInt(THREE.REVISION.replace(/\D+/g, '')) >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
169
- }`);
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3NoYWRlcnMvc3JjL21lc2gtcmVmcmFjdGlvbi1tYXRlcmlhbC9tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEscUJBQXFCO0FBQ3JCLHVDQUF1QztBQUV2QyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixrRkFBa0Y7QUFDbEYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQ25EO0lBQ0MsTUFBTSxFQUFFLElBQUk7SUFDWixPQUFPLEVBQUUsQ0FBQztJQUNWLEdBQUcsRUFBRSxHQUFHO0lBQ1IsV0FBVyxFQUFFLElBQUk7SUFDakIsa0JBQWtCLEVBQUUsSUFBSTtJQUN4QixPQUFPLEVBQUUsQ0FBQztJQUNWLDBDQUEwQztJQUMxQyxHQUFHLEVBQUUsSUFBSSxvQkFBb0IsRUFBRTtJQUMvQixLQUFLLEVBQUUsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztJQUMvQixVQUFVLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO0lBQy9CLGlCQUFpQixFQUFFLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRTtJQUN0Qyx1QkFBdUIsRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUU7Q0FDNUM7QUFDRCxRQUFRLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBZ0NOO0FBQ0gsUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBbUJOLGFBQWE7SUFDYix1QkFBdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBOEZYLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxvQkFBb0I7SUFDOUcsQ0FDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQXV0aG9yOiBOOFByb2dyYW1zXG4vLyBodHRwczovL2dpdGh1Yi5jb20vTjhweXRob24vZGlhbW9uZHNcblxuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuLy8gQHRzLWV4cGVjdC1lcnJvcjogc2hhZGVySW50ZXJzZWN0RnVuY3Rpb24gaXMgYXZhaWxhYmxlIGJ1dCB0eXBlc2NyaXB0IGNvbXBsYWluc1xuaW1wb3J0IHsgTWVzaEJWSFVuaWZvcm1TdHJ1Y3QsIHNoYWRlckludGVyc2VjdEZ1bmN0aW9uLCBzaGFkZXJTdHJ1Y3RzIH0gZnJvbSAndGhyZWUtbWVzaC1idmgnO1xuaW1wb3J0IHsgc2hhZGVyTWF0ZXJpYWwgfSBmcm9tICcuLi9zaGFkZXItbWF0ZXJpYWwvc2hhZGVyLW1hdGVyaWFsJztcblxuZXhwb3J0IGNvbnN0IE1lc2hSZWZyYWN0aW9uTWF0ZXJpYWwgPSBzaGFkZXJNYXRlcmlhbChcblx0e1xuXHRcdGVudk1hcDogbnVsbCxcblx0XHRib3VuY2VzOiAzLFxuXHRcdGlvcjogMi40LFxuXHRcdGNvcnJlY3RNaXBzOiB0cnVlLFxuXHRcdGFiZXJyYXRpb25TdHJlbmd0aDogMC4wMSxcblx0XHRmcmVzbmVsOiAwLFxuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3I6IHR5cGluZyBpcyBub3QgbWF0Y2hlZFxuXHRcdGJ2aDogbmV3IE1lc2hCVkhVbmlmb3JtU3RydWN0KCksXG5cdFx0Y29sb3I6IG5ldyBUSFJFRS5Db2xvcignd2hpdGUnKSxcblx0XHRyZXNvbHV0aW9uOiBuZXcgVEhSRUUuVmVjdG9yMigpLFxuXHRcdHZpZXdNYXRyaXhJbnZlcnNlOiBuZXcgVEhSRUUuTWF0cml4NCgpLFxuXHRcdHByb2plY3Rpb25NYXRyaXhJbnZlcnNlOiBuZXcgVEhSRUUuTWF0cml4NCgpLFxuXHR9LFxuXHQvKmdsc2wqLyBgXG4gIHVuaWZvcm0gbWF0NCB2aWV3TWF0cml4SW52ZXJzZTtcblxuICB2YXJ5aW5nIHZlYzMgdldvcmxkUG9zaXRpb247XG4gIHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuICB2YXJ5aW5nIG1hdDQgdk1vZGVsTWF0cml4SW52ZXJzZTtcblxuICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1JcbiAgICB2YXJ5aW5nIHZlYzMgdkluc3RhbmNlQ29sb3I7XG4gICNlbmRpZlxuXG4gIHZvaWQgbWFpbigpIHtcbiAgICB2ZWM0IHRyYW5zZm9ybWVkTm9ybWFsID0gdmVjNChub3JtYWwsIDAuMCk7XG4gICAgdmVjNCB0cmFuc2Zvcm1lZFBvc2l0aW9uID0gdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcbiAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gaW5zdGFuY2VNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcbiAgICAgIHRyYW5zZm9ybWVkUG9zaXRpb24gPSBpbnN0YW5jZU1hdHJpeCAqIHRyYW5zZm9ybWVkUG9zaXRpb247XG4gICAgI2VuZGlmXG5cbiAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdcbiAgICAgIHZNb2RlbE1hdHJpeEludmVyc2UgPSBpbnZlcnNlKG1vZGVsTWF0cml4ICogaW5zdGFuY2VNYXRyaXgpO1xuICAgICNlbHNlXG4gICAgICB2TW9kZWxNYXRyaXhJbnZlcnNlID0gaW52ZXJzZShtb2RlbE1hdHJpeCk7XG4gICAgI2VuZGlmXG5cbiAgICAjaWZkZWYgVVNFX0lOU1RBTkNJTkdfQ09MT1JcbiAgICAgIHZJbnN0YW5jZUNvbG9yID0gaW5zdGFuY2VDb2xvci5yZ2I7XG4gICAgI2VuZGlmXG5cbiAgICB2V29ybGRQb3NpdGlvbiA9IChtb2RlbE1hdHJpeCAqIHRyYW5zZm9ybWVkUG9zaXRpb24pLnh5ejtcbiAgICB2Tm9ybWFsID0gbm9ybWFsaXplKCh2aWV3TWF0cml4SW52ZXJzZSAqIHZlYzQobm9ybWFsTWF0cml4ICogdHJhbnNmb3JtZWROb3JtYWwueHl6LCAwLjApKS54eXopO1xuICAgIGdsX1Bvc2l0aW9uID0gcHJvamVjdGlvbk1hdHJpeCAqIHZpZXdNYXRyaXggKiBtb2RlbE1hdHJpeCAqIHRyYW5zZm9ybWVkUG9zaXRpb247XG4gIH1gLFxuXHQvKmdsc2wqLyBgXG4gICNkZWZpbmUgRU5WTUFQX1RZUEVfQ1VCRV9VVlxuICBwcmVjaXNpb24gaGlnaHAgaXNhbXBsZXIyRDtcbiAgcHJlY2lzaW9uIGhpZ2hwIHVzYW1wbGVyMkQ7XG4gIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcbiAgdmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4gIHZhcnlpbmcgbWF0NCB2TW9kZWxNYXRyaXhJbnZlcnNlO1xuXG4gICNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxuICAgIHZhcnlpbmcgdmVjMyB2SW5zdGFuY2VDb2xvcjtcbiAgI2VuZGlmXG5cbiAgI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVNXG4gICAgdW5pZm9ybSBzYW1wbGVyQ3ViZSBlbnZNYXA7XG4gICNlbHNlXG4gICAgdW5pZm9ybSBzYW1wbGVyMkQgZW52TWFwO1xuICAjZW5kaWZcblxuICB1bmlmb3JtIGZsb2F0IGJvdW5jZXM7XG4gICR7c2hhZGVyU3RydWN0c31cbiAgJHtzaGFkZXJJbnRlcnNlY3RGdW5jdGlvbn1cbiAgdW5pZm9ybSBCVkggYnZoO1xuICB1bmlmb3JtIGZsb2F0IGlvcjtcbiAgdW5pZm9ybSBib29sIGNvcnJlY3RNaXBzO1xuICB1bmlmb3JtIHZlYzIgcmVzb2x1dGlvbjtcbiAgdW5pZm9ybSBmbG9hdCBmcmVzbmVsO1xuICB1bmlmb3JtIG1hdDQgbW9kZWxNYXRyaXg7XG4gIHVuaWZvcm0gbWF0NCBwcm9qZWN0aW9uTWF0cml4SW52ZXJzZTtcbiAgdW5pZm9ybSBtYXQ0IHZpZXdNYXRyaXhJbnZlcnNlO1xuICB1bmlmb3JtIGZsb2F0IGFiZXJyYXRpb25TdHJlbmd0aDtcbiAgdW5pZm9ybSB2ZWMzIGNvbG9yO1xuXG4gIGZsb2F0IGZyZXNuZWxGdW5jKHZlYzMgdmlld0RpcmVjdGlvbiwgdmVjMyB3b3JsZE5vcm1hbCkge1xuICAgIHJldHVybiBwb3coIDEuMCArIGRvdCggdmlld0RpcmVjdGlvbiwgd29ybGROb3JtYWwpLCAxMC4wICk7XG4gIH1cblxuICB2ZWMzIHRvdGFsSW50ZXJuYWxSZWZsZWN0aW9uKHZlYzMgcm8sIHZlYzMgcmQsIHZlYzMgbm9ybWFsLCBmbG9hdCBpb3IsIG1hdDQgbW9kZWxNYXRyaXhJbnZlcnNlKSB7XG4gICAgdmVjMyByYXlPcmlnaW4gPSBybztcbiAgICB2ZWMzIHJheURpcmVjdGlvbiA9IHJkO1xuICAgIHJheURpcmVjdGlvbiA9IHJlZnJhY3QocmF5RGlyZWN0aW9uLCBub3JtYWwsIDEuMCAvIGlvcik7XG4gICAgcmF5T3JpZ2luID0gdldvcmxkUG9zaXRpb24gKyByYXlEaXJlY3Rpb24gKiAwLjAwMTtcbiAgICByYXlPcmlnaW4gPSAobW9kZWxNYXRyaXhJbnZlcnNlICogdmVjNChyYXlPcmlnaW4sIDEuMCkpLnh5ejtcbiAgICByYXlEaXJlY3Rpb24gPSBub3JtYWxpemUoKG1vZGVsTWF0cml4SW52ZXJzZSAqIHZlYzQocmF5RGlyZWN0aW9uLCAwLjApKS54eXopO1xuICAgIGZvcihmbG9hdCBpID0gMC4wOyBpIDwgYm91bmNlczsgaSsrKSB7XG4gICAgICB1dmVjNCBmYWNlSW5kaWNlcyA9IHV2ZWM0KCAwdSApO1xuICAgICAgdmVjMyBmYWNlTm9ybWFsID0gdmVjMyggMC4wLCAwLjAsIDEuMCApO1xuICAgICAgdmVjMyBiYXJ5Y29vcmQgPSB2ZWMzKCAwLjAgKTtcbiAgICAgIGZsb2F0IHNpZGUgPSAxLjA7XG4gICAgICBmbG9hdCBkaXN0ID0gMC4wO1xuICAgICAgYnZoSW50ZXJzZWN0Rmlyc3RIaXQoIGJ2aCwgcmF5T3JpZ2luLCByYXlEaXJlY3Rpb24sIGZhY2VJbmRpY2VzLCBmYWNlTm9ybWFsLCBiYXJ5Y29vcmQsIHNpZGUsIGRpc3QgKTtcbiAgICAgIHZlYzMgaGl0UG9zID0gcmF5T3JpZ2luICsgcmF5RGlyZWN0aW9uICogbWF4KGRpc3QgLSAwLjAwMSwgMC4wKTtcbiAgICAgIHZlYzMgdGVtcERpciA9IHJlZnJhY3QocmF5RGlyZWN0aW9uLCBmYWNlTm9ybWFsLCBpb3IpO1xuICAgICAgaWYgKGxlbmd0aCh0ZW1wRGlyKSAhPSAwLjApIHtcbiAgICAgICAgcmF5RGlyZWN0aW9uID0gdGVtcERpcjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByYXlEaXJlY3Rpb24gPSByZWZsZWN0KHJheURpcmVjdGlvbiwgZmFjZU5vcm1hbCk7XG4gICAgICByYXlPcmlnaW4gPSBoaXRQb3MgKyByYXlEaXJlY3Rpb24gKiAwLjAxO1xuICAgIH1cbiAgICByYXlEaXJlY3Rpb24gPSBub3JtYWxpemUoKG1vZGVsTWF0cml4ICogdmVjNChyYXlEaXJlY3Rpb24sIDAuMCkpLnh5eik7XG4gICAgcmV0dXJuIHJheURpcmVjdGlvbjtcbiAgfVxuXG4gICNpbmNsdWRlIDxjb21tb24+XG4gICNpbmNsdWRlIDxjdWJlX3V2X3JlZmxlY3Rpb25fZnJhZ21lbnQ+XG5cbiAgI2lmZGVmIEVOVk1BUF9UWVBFX0NVQkVNXG4gICAgdmVjNCB0ZXh0dXJlR3JhZGllbnQoc2FtcGxlckN1YmUgZW52TWFwLCB2ZWMzIHJheURpcmVjdGlvbiwgdmVjMyBkaXJlY3Rpb25DYW1QZXJmZWN0KSB7XG4gICAgICByZXR1cm4gdGV4dHVyZUdyYWQoZW52TWFwLCByYXlEaXJlY3Rpb24sIGRGZHgoY29ycmVjdE1pcHMgPyBkaXJlY3Rpb25DYW1QZXJmZWN0OiByYXlEaXJlY3Rpb24pLCBkRmR5KGNvcnJlY3RNaXBzID8gZGlyZWN0aW9uQ2FtUGVyZmVjdDogcmF5RGlyZWN0aW9uKSk7XG4gICAgfVxuICAjZWxzZVxuICAgIHZlYzQgdGV4dHVyZUdyYWRpZW50KHNhbXBsZXIyRCBlbnZNYXAsIHZlYzMgcmF5RGlyZWN0aW9uLCB2ZWMzIGRpcmVjdGlvbkNhbVBlcmZlY3QpIHtcbiAgICAgIHZlYzIgdXZ2ID0gZXF1aXJlY3RVdiggcmF5RGlyZWN0aW9uICk7XG4gICAgICB2ZWMyIHNtb290aFV2ID0gZXF1aXJlY3RVdiggZGlyZWN0aW9uQ2FtUGVyZmVjdCApO1xuICAgICAgcmV0dXJuIHRleHR1cmVHcmFkKGVudk1hcCwgdXZ2LCBkRmR4KGNvcnJlY3RNaXBzID8gc21vb3RoVXYgOiB1dnYpLCBkRmR5KGNvcnJlY3RNaXBzID8gc21vb3RoVXYgOiB1dnYpKTtcbiAgICB9XG4gICNlbmRpZlxuXG4gIHZvaWQgbWFpbigpIHtcbiAgICB2ZWMyIHV2ID0gZ2xfRnJhZ0Nvb3JkLnh5IC8gcmVzb2x1dGlvbjtcbiAgICB2ZWMzIGRpcmVjdGlvbkNhbVBlcmZlY3QgPSAocHJvamVjdGlvbk1hdHJpeEludmVyc2UgKiB2ZWM0KHV2ICogMi4wIC0gMS4wLCAwLjAsIDEuMCkpLnh5ejtcbiAgICBkaXJlY3Rpb25DYW1QZXJmZWN0ID0gKHZpZXdNYXRyaXhJbnZlcnNlICogdmVjNChkaXJlY3Rpb25DYW1QZXJmZWN0LCAwLjApKS54eXo7XG4gICAgZGlyZWN0aW9uQ2FtUGVyZmVjdCA9IG5vcm1hbGl6ZShkaXJlY3Rpb25DYW1QZXJmZWN0KTtcbiAgICB2ZWMzIG5vcm1hbCA9IHZOb3JtYWw7XG4gICAgdmVjMyByYXlPcmlnaW4gPSBjYW1lcmFQb3NpdGlvbjtcbiAgICB2ZWMzIHJheURpcmVjdGlvbiA9IG5vcm1hbGl6ZSh2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uKTtcbiAgICB2ZWMzIGZpbmFsQ29sb3I7XG4gICAgI2lmZGVmIENIUk9NQVRJQ19BQkVSUkFUSU9OU1xuICAgICAgdmVjMyByYXlEaXJlY3Rpb25HID0gdG90YWxJbnRlcm5hbFJlZmxlY3Rpb24ocmF5T3JpZ2luLCByYXlEaXJlY3Rpb24sIG5vcm1hbCwgbWF4KGlvciwgMS4wKSwgdk1vZGVsTWF0cml4SW52ZXJzZSk7XG4gICAgICAjaWZkZWYgRkFTVF9DSFJPTUFcbiAgICAgICAgdmVjMyByYXlEaXJlY3Rpb25SID0gbm9ybWFsaXplKHJheURpcmVjdGlvbkcgKyAxLjAgKiB2ZWMzKGFiZXJyYXRpb25TdHJlbmd0aCAvIDIuMCkpO1xuICAgICAgICB2ZWMzIHJheURpcmVjdGlvbkIgPSBub3JtYWxpemUocmF5RGlyZWN0aW9uRyAtIDEuMCAqIHZlYzMoYWJlcnJhdGlvblN0cmVuZ3RoIC8gMi4wKSk7XG4gICAgICAjZWxzZVxuICAgICAgICB2ZWMzIHJheURpcmVjdGlvblIgPSB0b3RhbEludGVybmFsUmVmbGVjdGlvbihyYXlPcmlnaW4sIHJheURpcmVjdGlvbiwgbm9ybWFsLCBtYXgoaW9yICogKDEuMCAtIGFiZXJyYXRpb25TdHJlbmd0aCksIDEuMCksIHZNb2RlbE1hdHJpeEludmVyc2UpO1xuICAgICAgICB2ZWMzIHJheURpcmVjdGlvbkIgPSB0b3RhbEludGVybmFsUmVmbGVjdGlvbihyYXlPcmlnaW4sIHJheURpcmVjdGlvbiwgbm9ybWFsLCBtYXgoaW9yICogKDEuMCArIGFiZXJyYXRpb25TdHJlbmd0aCksIDEuMCksIHZNb2RlbE1hdHJpeEludmVyc2UpO1xuICAgICAgI2VuZGlmXG4gICAgICBmbG9hdCBmaW5hbENvbG9yUiA9IHRleHR1cmVHcmFkaWVudChlbnZNYXAsIHJheURpcmVjdGlvblIsIGRpcmVjdGlvbkNhbVBlcmZlY3QpLnI7XG4gICAgICBmbG9hdCBmaW5hbENvbG9yRyA9IHRleHR1cmVHcmFkaWVudChlbnZNYXAsIHJheURpcmVjdGlvbkcsIGRpcmVjdGlvbkNhbVBlcmZlY3QpLmc7XG4gICAgICBmbG9hdCBmaW5hbENvbG9yQiA9IHRleHR1cmVHcmFkaWVudChlbnZNYXAsIHJheURpcmVjdGlvbkIsIGRpcmVjdGlvbkNhbVBlcmZlY3QpLmI7XG4gICAgICBmaW5hbENvbG9yID0gdmVjMyhmaW5hbENvbG9yUiwgZmluYWxDb2xvckcsIGZpbmFsQ29sb3JCKTtcbiAgICAjZWxzZVxuICAgICAgcmF5RGlyZWN0aW9uID0gdG90YWxJbnRlcm5hbFJlZmxlY3Rpb24ocmF5T3JpZ2luLCByYXlEaXJlY3Rpb24sIG5vcm1hbCwgbWF4KGlvciwgMS4wKSwgdk1vZGVsTWF0cml4SW52ZXJzZSk7XG4gICAgICBmaW5hbENvbG9yID0gdGV4dHVyZUdyYWRpZW50KGVudk1hcCwgcmF5RGlyZWN0aW9uLCBkaXJlY3Rpb25DYW1QZXJmZWN0KS5yZ2I7XG4gICAgI2VuZGlmXG5cbiAgICBmaW5hbENvbG9yICo9IGNvbG9yO1xuICAgICNpZmRlZiBVU0VfSU5TVEFOQ0lOR19DT0xPUlxuICAgICAgZmluYWxDb2xvciAqPSB2SW5zdGFuY2VDb2xvcjtcbiAgICAjZW5kaWZcblxuICAgIHZlYzMgdmlld0RpcmVjdGlvbiA9IG5vcm1hbGl6ZSh2V29ybGRQb3NpdGlvbiAtIGNhbWVyYVBvc2l0aW9uKTtcbiAgICBmbG9hdCBuRnJlc25lbCA9IGZyZXNuZWxGdW5jKHZpZXdEaXJlY3Rpb24sIG5vcm1hbCkgKiBmcmVzbmVsO1xuICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQobWl4KGZpbmFsQ29sb3IsIHZlYzMoMS4wKSwgbkZyZXNuZWwpLCAxLjApO1xuICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cbiAgICAjaW5jbHVkZSA8JHtwYXJzZUludChUSFJFRS5SRVZJU0lPTi5yZXBsYWNlKC9cXEQrL2csICcnKSkgPj0gMTU0ID8gJ2NvbG9yc3BhY2VfZnJhZ21lbnQnIDogJ2VuY29kaW5nc19mcmFnbWVudCd9PlxuICB9YCxcbik7XG4iXX0=